From e12c08354ee1826b639935eb1f0ed66601c901fc Mon Sep 17 00:00:00 2001 From: Wesley Date: Sun, 11 Sep 2022 11:33:24 +0200 Subject: [PATCH 001/278] +plugin-azure-functions +plugin-azure-functions-backend Signed-off-by: Wesley --- .changeset/pre.json | 2 + microsite/data/plugins/azure-functions.yaml | 9 + microsite/static/img/azurefunctions-icon.svg | 1 + packages/app/package.json | 1 + packages/backend/package.json | 1 + plugins/azure-functions-backend/.eslintrc.js | 1 + plugins/azure-functions-backend/README.md | 82 +++ plugins/azure-functions-backend/package.json | 46 ++ plugins/azure-functions-backend/schema.d.ts | 19 + .../src/api/AzureWebManagementApi.ts | 85 +++ .../azure-functions-backend/src/api/index.ts | 18 + .../azure-functions-backend/src/api/types.ts | 15 + plugins/azure-functions-backend/src/index.ts | 18 + plugins/azure-functions-backend/src/run.ts | 33 + .../src/service/router.ts | 46 ++ .../src/service/standaloneServer.ts | 53 ++ .../azure-functions-backend/src/setupTests.ts | 17 + plugins/azure-functions/.eslintrc.js | 1 + plugins/azure-functions/README.md | 74 +++ plugins/azure-functions/dev/index.tsx | 6 + .../azure-functions/docs/functions-table.png | Bin 0 -> 58539 bytes plugins/azure-functions/package.json | 53 ++ .../src/api/AzureFunctionsApi.ts | 30 + .../src/api/AzureFunctionsBackendClient.ts | 53 ++ plugins/azure-functions/src/api/index.ts | 19 + plugins/azure-functions/src/api/types.ts | 10 + .../AzureFunctionsOverview.test.tsx | 91 +++ .../AzureFunctionsOverview.tsx | 154 +++++ .../src/components/ErrorBoundary.tsx | 58 ++ .../azure-functions/src/hooks/useFunctions.ts | 71 +++ .../src/hooks/useServiceEntityAnnotations.ts | 30 + plugins/azure-functions/src/index.ts | 3 + plugins/azure-functions/src/mocks/mocks.ts | 243 ++++++++ plugins/azure-functions/src/plugin.test.ts | 7 + plugins/azure-functions/src/plugin.ts | 43 ++ plugins/azure-functions/src/routes.ts | 5 + plugins/azure-functions/src/setupTests.ts | 2 + yarn.lock | 585 +++++++++++++++++- 38 files changed, 1975 insertions(+), 10 deletions(-) create mode 100644 microsite/data/plugins/azure-functions.yaml create mode 100644 microsite/static/img/azurefunctions-icon.svg create mode 100644 plugins/azure-functions-backend/.eslintrc.js create mode 100644 plugins/azure-functions-backend/README.md create mode 100644 plugins/azure-functions-backend/package.json create mode 100644 plugins/azure-functions-backend/schema.d.ts create mode 100644 plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts create mode 100644 plugins/azure-functions-backend/src/api/index.ts create mode 100644 plugins/azure-functions-backend/src/api/types.ts create mode 100644 plugins/azure-functions-backend/src/index.ts create mode 100644 plugins/azure-functions-backend/src/run.ts create mode 100644 plugins/azure-functions-backend/src/service/router.ts create mode 100644 plugins/azure-functions-backend/src/service/standaloneServer.ts create mode 100644 plugins/azure-functions-backend/src/setupTests.ts create mode 100644 plugins/azure-functions/.eslintrc.js create mode 100644 plugins/azure-functions/README.md create mode 100644 plugins/azure-functions/dev/index.tsx create mode 100644 plugins/azure-functions/docs/functions-table.png create mode 100644 plugins/azure-functions/package.json create mode 100644 plugins/azure-functions/src/api/AzureFunctionsApi.ts create mode 100644 plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts create mode 100644 plugins/azure-functions/src/api/index.ts create mode 100644 plugins/azure-functions/src/api/types.ts create mode 100644 plugins/azure-functions/src/components/AzureFunctionsOverview/AzureFunctionsOverview.test.tsx create mode 100644 plugins/azure-functions/src/components/AzureFunctionsOverview/AzureFunctionsOverview.tsx create mode 100644 plugins/azure-functions/src/components/ErrorBoundary.tsx create mode 100644 plugins/azure-functions/src/hooks/useFunctions.ts create mode 100644 plugins/azure-functions/src/hooks/useServiceEntityAnnotations.ts create mode 100644 plugins/azure-functions/src/index.ts create mode 100644 plugins/azure-functions/src/mocks/mocks.ts create mode 100644 plugins/azure-functions/src/plugin.test.ts create mode 100644 plugins/azure-functions/src/plugin.ts create mode 100644 plugins/azure-functions/src/routes.ts create mode 100644 plugins/azure-functions/src/setupTests.ts diff --git a/.changeset/pre.json b/.changeset/pre.json index 96664632fd..552d1f96d3 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -52,6 +52,8 @@ "@backstage/plugin-azure-devops": "0.1.24", "@backstage/plugin-azure-devops-backend": "0.3.14", "@backstage/plugin-azure-devops-common": "0.2.4", + "@backstage/plugin-azure-functions": "0.1.0", + "@backstage/plugin-azure-functions-backend": "0.1.0", "@backstage/plugin-badges": "0.2.32", "@backstage/plugin-badges-backend": "0.1.29", "@backstage/plugin-bazaar": "0.1.23", diff --git a/microsite/data/plugins/azure-functions.yaml b/microsite/data/plugins/azure-functions.yaml new file mode 100644 index 0000000000..883a893418 --- /dev/null +++ b/microsite/data/plugins/azure-functions.yaml @@ -0,0 +1,9 @@ +--- +title: Azure Functions +author: FRISS +authorUrl: https://friss.com +category: Infrastructure +description: View Azure Functions for your components in Backstage. +documentation: https://github.com/backstage/backstage/tree/master/plugins/azure-functions +iconUrl: img/azurefunctions-icon.svg +npmPackageName: '@backstage/plugin-azure-functions' diff --git a/microsite/static/img/azurefunctions-icon.svg b/microsite/static/img/azurefunctions-icon.svg new file mode 100644 index 0000000000..0c2435bf42 --- /dev/null +++ b/microsite/static/img/azurefunctions-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/app/package.json b/packages/app/package.json index e9c9632d81..1872b728a9 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -19,6 +19,7 @@ "@backstage/plugin-apache-airflow": "^0.2.2-next.2", "@backstage/plugin-api-docs": "^0.8.9-next.2", "@backstage/plugin-azure-devops": "^0.2.0-next.2", + "@backstage/plugin-azure-functions": "^0.1.0", "@backstage/plugin-badges": "^0.2.33-next.2", "@backstage/plugin-catalog-common": "^1.0.6-next.0", "@backstage/plugin-catalog-graph": "^0.2.21-next.1", diff --git a/packages/backend/package.json b/packages/backend/package.json index 5518b9d586..23a63226cf 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -36,6 +36,7 @@ "@backstage/plugin-auth-backend": "^0.16.0-next.2", "@backstage/plugin-auth-node": "^0.2.5-next.2", "@backstage/plugin-azure-devops-backend": "^0.3.15-next.1", + "@backstage/plugin-azure-functions-backend": "^0.1.0", "@backstage/plugin-badges-backend": "^0.1.30-next.0", "@backstage/plugin-catalog-backend": "^1.4.0-next.2", "@backstage/plugin-code-coverage-backend": "^0.2.2-next.1", diff --git a/plugins/azure-functions-backend/.eslintrc.js b/plugins/azure-functions-backend/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/azure-functions-backend/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/azure-functions-backend/README.md b/plugins/azure-functions-backend/README.md new file mode 100644 index 0000000000..5bfc6a1062 --- /dev/null +++ b/plugins/azure-functions-backend/README.md @@ -0,0 +1,82 @@ +# Azure Functions Backend + +Simple plugin that proxies requests to the Azure Portal API through Azure SDK JavaScript libraries. + +*Inspired by [roadie.io AWS Lamda plugin](https://roadie.io/backstage/plugins/aws-lambda/)* + +## Setup + +The following sections will help you get the Azure Functions Backend plugin setup and running. + +### Configuration + +The Azure Functions plugin requires the following YAML to be added to your app-config.yaml: + +```yaml +azureFunctions: + domain: + tenantId: + clientId: + clientSecret: + allowedSubscriptions: + - id: + name: +``` + +Configuration Details: + +- `domain` can be found by visiting the [Directories + Subscriptions settings page](https://portal.azure.com/#settings/directory). Alternatively you can inspect the [Azure home](https://portal.azure.com/#home) URL - `https://portal.azure.com/#@/`. +- `tenantId` can be found by visiting [Azure Directory Overview page](https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade). +- `clientId` and `clientSecret` can be the same values you used for [Azure DevOps Backend](https://github.com/backstage/backstage/tree/master/plugins/azure-devops-backend) or [Azure Integration](https://backstage.io/docs/integrations/azure/org#app-registration) as long as this App Registration has permissions to read your function apps. +- `allowedSubscriptions` is an array of `id` and `name` that will be used to iterate over and look for the specified functions' app. `id` and `name` can be found the [Subscriptions page](https://portal.azure.com/#view/Microsoft_Azure_Billing/SubscriptionsBlade). + +### Integrating + +Here's how to get the backend plugin up and running: + +1. First we need to add the `@backstage/plugin-azure-functions-backend` package to your backend: + + ```sh + # From the Backstage root directory + cd packages/backend + yarn add @backstage/plugin-azure-functions-backend + ``` + +2. Then we will create a new file named `packages/backend/src/plugins/azure-functions.ts`, and add the following to it: + + ```ts + import { createRouter, AzureWebManagementApi } from '@backstage/plugin-azure-functions-backend'; + import { Router } from 'express'; + import { PluginEnvironment } from '../types'; + + export default async function createPlugin( + env: PluginEnvironment, + ): Promise { + return await createRouter({ + logger: env.logger, + azureWebManagementApi: AzureWebManagementApi.fromConfig(env.config) + }); + } + ``` + +3. Next we wire this into the overall backend router, edit `packages/backend/src/index.ts`: + + ```ts + import azureFunctions from './plugins/azure-functions'; + + // Removed for clairty... + + async function main() { + // ... + // Add this line under the other lines that follow the useHotMemoize pattern + const azureFunctionsEnv = useHotMemoize(module, () => createEnv('azureFunctions')); + + // ... + // Insert this line under the other lines that add their routers to apiRouter in the same way + apiRouter.use('/azure-functions', await azureFunctions(azureFunctionsEnv)); + } + ``` + +4. Now run `yarn start-backend` from the repo root. + +5. Finally, open `http://localhost:7007/api/azure-functions/health` in a browser, it should return `{"status":"ok"}`. \ No newline at end of file diff --git a/plugins/azure-functions-backend/package.json b/plugins/azure-functions-backend/package.json new file mode 100644 index 0000000000..3a1b83ec34 --- /dev/null +++ b/plugins/azure-functions-backend/package.json @@ -0,0 +1,46 @@ +{ + "name": "@backstage/plugin-azure-functions-backend", + "version": "0.1.0", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "private": true, + "publishConfig": { + "access": "public", + "main": "dist/index.cjs.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "backend-plugin" + }, + "scripts": { + "start": "backstage-cli package start", + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack" + }, + "dependencies": { + "@azure/arm-appservice": "^13.0.0", + "@azure/identity": "^2.1.0", + "@backstage/backend-common": "^0.15.0", + "@backstage/config": "^1.0.1", + "@types/express": "*", + "express": "^4.17.1", + "express-promise-router": "^4.1.0", + "node-fetch": "^2.6.7", + "winston": "^3.2.1", + "yn": "^4.0.0" + }, + "devDependencies": { + "@backstage/cli": "^0.18.0", + "@types/supertest": "^2.0.8", + "msw": "^0.44.0", + "supertest": "^4.0.2" + }, + "files": [ + "dist" + ] +} diff --git a/plugins/azure-functions-backend/schema.d.ts b/plugins/azure-functions-backend/schema.d.ts new file mode 100644 index 0000000000..a86aaad1a3 --- /dev/null +++ b/plugins/azure-functions-backend/schema.d.ts @@ -0,0 +1,19 @@ +export interface Config { + azureFunctions: { + /** @visibility backend */ + tenantId: string; + /** @visibility backend */ + clientId: string; + /** @visibility secret */ + clientSecret: string; + /** @visibility backend */ + domain: string; + /** @visibility backend */ + allowedSubscriptions: [{ + /** @visibility backend */ + name: string; + /** @visibility backend */ + id: string; + }] + }; +} \ No newline at end of file diff --git a/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts b/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts new file mode 100644 index 0000000000..bc9dbbce12 --- /dev/null +++ b/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts @@ -0,0 +1,85 @@ +/* + * 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'; +import { ClientSecretCredential } from '@azure/identity'; +import { WebSiteManagementClient } from '@azure/arm-appservice'; +import { AzureFunctionsAllowedSubscriptionsConfig, FunctionsData } from './types'; + +export class AzureFunctionsConfig { + constructor(public readonly tenantId: string, public readonly clientId: string, public readonly clientSecret: string, public readonly domain: string, public readonly allowedSubscriptions: AzureFunctionsAllowedSubscriptionsConfig[]) { } + + static fromConfig(config: Config): AzureFunctionsConfig { + const azfConfig = config.getConfig('azureFunctions'); + + return new AzureFunctionsConfig( + azfConfig.getString('tenantId'), + azfConfig.getString('clientId'), + azfConfig.getString('clientSecret'), + azfConfig.getString('domain'), + azfConfig.getConfigArray('allowedSubscriptions').map(as => ({ id: as.getString('id'), name: as.getString('name') })) + ) + } +} + +export class AzureWebManagementApi { + private readonly baseHref = (domain: string) => `https://portal.azure.com/#@${domain}/resource`; + private readonly clients: WebSiteManagementClient[] = []; + + constructor(private readonly config: AzureFunctionsConfig) { + const creds = new ClientSecretCredential(config.tenantId, config.clientId, config.clientSecret); + for (const subscription of config.allowedSubscriptions) { + if (!this.clients.some(c => c.subscriptionId == subscription.id)) { + this.clients.push(new WebSiteManagementClient(creds, subscription.id)); + } + } + } + + static fromConfig(config: Config): AzureWebManagementApi { + return new AzureWebManagementApi(AzureFunctionsConfig.fromConfig(config)); + } + + async list({ + functionName, + }: { + functionName: string; + }): Promise { + const results = []; + for (const client of this.clients) { + try { + for await (const webApp of client.webApps.list()) { + if (!webApp.name!.startsWith(functionName)) { + continue; + } + const v = webApp!; + results.push({ + href: `${this.baseHref(this.config.domain)}${v.id!}`, + logstreamHref: `${this.baseHref(this.config.domain)}${v.id!}/logStream`, + functionName: v.name!, + location: v.location!, + lastModifiedDate: v.lastModifiedTimeUtc!, + usageState: v.usageState!, + state: v.state!, + containerSize: v.containerSize! + }) + } + } catch (ex) { + console.log(ex); + } + } + return results; + } +} \ No newline at end of file diff --git a/plugins/azure-functions-backend/src/api/index.ts b/plugins/azure-functions-backend/src/api/index.ts new file mode 100644 index 0000000000..db2bb3de27 --- /dev/null +++ b/plugins/azure-functions-backend/src/api/index.ts @@ -0,0 +1,18 @@ +/* + * 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 { AzureWebManagementApi, AzureFunctionsConfig } from './AzureWebManagementApi' +export * from './types' \ No newline at end of file diff --git a/plugins/azure-functions-backend/src/api/types.ts b/plugins/azure-functions-backend/src/api/types.ts new file mode 100644 index 0000000000..6f6963a0af --- /dev/null +++ b/plugins/azure-functions-backend/src/api/types.ts @@ -0,0 +1,15 @@ +export interface AzureFunctionsAllowedSubscriptionsConfig { + name: string; + id: string; +} + +export type FunctionsData = { + href: string; + logstreamHref: string; + functionName: string; + location: string; + state: string; + usageState: string; + containerSize: number; + lastModifiedDate: Date; +}; \ No newline at end of file diff --git a/plugins/azure-functions-backend/src/index.ts b/plugins/azure-functions-backend/src/index.ts new file mode 100644 index 0000000000..0e8cedac61 --- /dev/null +++ b/plugins/azure-functions-backend/src/index.ts @@ -0,0 +1,18 @@ +/* + * 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 './service/router'; +export * from './api'; \ No newline at end of file diff --git a/plugins/azure-functions-backend/src/run.ts b/plugins/azure-functions-backend/src/run.ts new file mode 100644 index 0000000000..d945aa13f0 --- /dev/null +++ b/plugins/azure-functions-backend/src/run.ts @@ -0,0 +1,33 @@ +/* + * 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 { getRootLogger } from '@backstage/backend-common'; +import yn from 'yn'; +import { startStandaloneServer } from './service/standaloneServer'; + +const port = process.env.PLUGIN_PORT ? Number(process.env.PLUGIN_PORT) : 7007; +const enableCors = yn(process.env.PLUGIN_CORS, { default: false }); +const logger = getRootLogger(); + +startStandaloneServer({ port, enableCors, logger }).catch(err => { + logger.error(err); + process.exit(1); +}); + +process.on('SIGINT', () => { + logger.info('CTRL+C pressed; exiting.'); + process.exit(0); +}); diff --git a/plugins/azure-functions-backend/src/service/router.ts b/plugins/azure-functions-backend/src/service/router.ts new file mode 100644 index 0000000000..ac07579a7c --- /dev/null +++ b/plugins/azure-functions-backend/src/service/router.ts @@ -0,0 +1,46 @@ +/* + * 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 { errorHandler } from '@backstage/backend-common'; +import express from 'express'; +import Router from 'express-promise-router'; +import { Logger } from 'winston'; + +import { AzureWebManagementApi } from '../api'; + +export interface RouterOptions { + logger: Logger; + azureWebManagementApi: AzureWebManagementApi; +} + +export async function createRouter( + options: RouterOptions, +): Promise { + const { logger, azureWebManagementApi } = options; + + const router = Router(); + router.use(express.json()); + + router.get('/health', (_, response) => { + logger.info('PONG!'); + response.send({ status: 'ok' }); + }); + router.get('/get', async (request, response) => { + response.json(await azureWebManagementApi.list({ functionName: request.query['functionName']!.toString() })) + }); + router.use(errorHandler()); + return router; +} diff --git a/plugins/azure-functions-backend/src/service/standaloneServer.ts b/plugins/azure-functions-backend/src/service/standaloneServer.ts new file mode 100644 index 0000000000..12a76b2d44 --- /dev/null +++ b/plugins/azure-functions-backend/src/service/standaloneServer.ts @@ -0,0 +1,53 @@ +/* + * 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 { createServiceBuilder, loadBackendConfig } from '@backstage/backend-common'; +import { Server } from 'http'; +import { Logger } from 'winston'; +import { AzureWebManagementApi } from '../api'; +import { createRouter } from './router'; + +export interface ServerOptions { + port: number; + enableCors: boolean; + logger: Logger; +} + +export async function startStandaloneServer( + options: ServerOptions, +): Promise { + const logger = options.logger.child({ service: 'azure-functions-backend' }); + const config = await loadBackendConfig({ logger, argv: process.argv }) + logger.debug('Starting application server...'); + const router = await createRouter({ + logger, + azureWebManagementApi: AzureWebManagementApi.fromConfig(config) + }); + + let service = createServiceBuilder(module) + .setPort(options.port) + .addRouter('/azure-functions-backend', router); + if (options.enableCors) { + service = service.enableCors({ origin: 'http://localhost:3000' }); + } + + return await service.start().catch(err => { + logger.error(err); + process.exit(1); + }); +} + +module.hot?.accept(); diff --git a/plugins/azure-functions-backend/src/setupTests.ts b/plugins/azure-functions-backend/src/setupTests.ts new file mode 100644 index 0000000000..813cdeaae3 --- /dev/null +++ b/plugins/azure-functions-backend/src/setupTests.ts @@ -0,0 +1,17 @@ +/* + * 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 {}; diff --git a/plugins/azure-functions/.eslintrc.js b/plugins/azure-functions/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/azure-functions/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/azure-functions/README.md b/plugins/azure-functions/README.md new file mode 100644 index 0000000000..77d08ee5cf --- /dev/null +++ b/plugins/azure-functions/README.md @@ -0,0 +1,74 @@ +# Azure Functions Plugin + +![preview of Azure Functions table](docs/functions-table.png) + +*Inspired by [roadie.io AWS Lamda plugin](https://roadie.io/backstage/plugins/aws-lambda/)* + +## Features + +- Azure Functions overview table + +## Plugin Setup + +The following sections will help you get the Azure Functions plugin setup and running + +### Azure Functions Backend + +You need to set up the Azure Functions backend plugin before you move forward with any of these steps if you haven't already. + +### Entity Annotation + +To be able to use the Azure Functions plugin you need to add the following annotation to any entities you want to use it with: + +```yaml +portal.azure.com/functions-name: +``` + +`` can be an exact or partial name for the functions' app. When using a partial name, it's important that the value here matches the **start** of the functions name. + +Example of Partial Matching: + +Let's say you have a number of functions apps, spread out over different regions (and possibly different subscriptions), and they follow a naming convention: + +``` +func-testapp-eu +func-testapp-ca +func-testapp-us +``` + +The annotation you will use to have the three functions' app appear in the overview table would look like this: + +```yaml +portal.azure.com/functions-name: func-testapp +``` + +### Install the component + +1. Install the plugin in the `packages/app` directory + +```sh +yarn add @backstage/plugin-azure-functions +``` + +2. Add widget component to your Backstage instance: + +```ts +// In packages/app/src/components/catalog/EntityPage.tsx +import { EntityAzureFunctionsOverviewCard, isAzureFunctionsAvailable } from '@backstage/plugin-azure-functions'; + +... + +const serviceEntityPage = ( + + //... + Boolean(isAzureFunctionsAvailable(e))} path="/azure-functions" title="Azure Functions"> + + + //... + +); +``` + +## Roadmap + +- [ ] Metrics \ No newline at end of file diff --git a/plugins/azure-functions/dev/index.tsx b/plugins/azure-functions/dev/index.tsx new file mode 100644 index 0000000000..a46aa4c67b --- /dev/null +++ b/plugins/azure-functions/dev/index.tsx @@ -0,0 +1,6 @@ +import { createDevApp } from '@backstage/dev-utils'; +import { azureFunctionsPlugin } from '../src/plugin'; + +createDevApp() + .registerPlugin(azureFunctionsPlugin) + .render(); diff --git a/plugins/azure-functions/docs/functions-table.png b/plugins/azure-functions/docs/functions-table.png new file mode 100644 index 0000000000000000000000000000000000000000..d8603e8fa765cf5c05b35a3c0cba7c3eb155f102 GIT binary patch literal 58539 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 o{jPTvzopr07v4>8vp({ + id: 'plugin.azurefunctions.service', +}); + +export type AzureFunctionsApi = { + list: ({ + functionName, + }: { + functionName: string; + }) => Promise; +}; diff --git a/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts b/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts new file mode 100644 index 0000000000..e7b5506c44 --- /dev/null +++ b/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts @@ -0,0 +1,53 @@ +/* + * 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 { AzureFunctionsApi } from './AzureFunctionsApi'; +import { FunctionsData } from './types'; +import { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api'; + +export class AzureFunctionsBackendClient implements AzureFunctionsApi { + + private readonly identityApi: IdentityApi; + private readonly discoveryApi: DiscoveryApi; + constructor(options: { + discoveryApi: DiscoveryApi; + identityApi: IdentityApi; + }) { + this.discoveryApi = options.discoveryApi; + this.identityApi = options.identityApi; + } + + async list({ + functionName, + }: { + functionName: string; + }): Promise { + try { + const url = `${await this.discoveryApi.getBaseUrl('azure-functions')}/get?functionName=${functionName}`; + const { token: idToken } = await this.identityApi.getCredentials(); + const response = await fetch(url, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + ...(idToken && { Authorization: `Bearer ${idToken}` }), + } + }); + return await response.json(); + } catch (e: any) { + throw new Error('MissingAzureBackendException') + } + } +} diff --git a/plugins/azure-functions/src/api/index.ts b/plugins/azure-functions/src/api/index.ts new file mode 100644 index 0000000000..14bb548361 --- /dev/null +++ b/plugins/azure-functions/src/api/index.ts @@ -0,0 +1,19 @@ +/* + * 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 './AzureFunctionsApi'; +export * from './AzureFunctionsBackendClient'; +export * from './types'; \ No newline at end of file diff --git a/plugins/azure-functions/src/api/types.ts b/plugins/azure-functions/src/api/types.ts new file mode 100644 index 0000000000..b3c2a2bd26 --- /dev/null +++ b/plugins/azure-functions/src/api/types.ts @@ -0,0 +1,10 @@ +export type FunctionsData = { + href: string; + logstreamHref: string; + functionName: string; + location: string; + state: string; + usageState: string; + containerSize: number; + lastModifiedDate: Date; +}; \ No newline at end of file diff --git a/plugins/azure-functions/src/components/AzureFunctionsOverview/AzureFunctionsOverview.test.tsx b/plugins/azure-functions/src/components/AzureFunctionsOverview/AzureFunctionsOverview.test.tsx new file mode 100644 index 0000000000..aef10a113e --- /dev/null +++ b/plugins/azure-functions/src/components/AzureFunctionsOverview/AzureFunctionsOverview.test.tsx @@ -0,0 +1,91 @@ +/* + * 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 React from 'react'; +import { render } from '@testing-library/react'; +import { + AnyApiRef, + configApiRef, + errorApiRef, + identityApiRef, +} from '@backstage/core-plugin-api'; +import { rest } from 'msw'; +import { + setupRequestMockHandlers, + TestApiProvider, +} from '@backstage/test-utils'; +import { EntityProvider } from '@backstage/plugin-catalog-react'; +import { setupServer } from 'msw/node'; +import { + entityMock, + functionResponseMock, +} from '../../mocks/mocks'; +import { azureFunctionsApiRef, AzureFunctionsOverviewWidget } from '../..'; + +const errorApiMock = { post: jest.fn(), error$: jest.fn() }; +const identityApiMock = (getCredentials: any) => ({ + signOut: jest.fn(), + getProfileInfo: jest.fn(), + getBackstageIdentity: jest.fn(), + getCredentials, +}); +const azureFunctionsApiMock = {}; + +const config = { + getString: (_: string) => 'https://test-url', +}; + +const apis: [AnyApiRef, Partial][] = [ + [errorApiRef, errorApiMock], + [configApiRef, config], + [azureFunctionsApiRef, azureFunctionsApiMock], + [identityApiRef, identityApiMock], +]; + +describe('AzureFunctionsOverviewWidget', () => { + const worker = setupServer(); + setupRequestMockHandlers(worker); + + beforeEach(() => { + worker.use( + rest.get( + 'https://portal.azure.com/#@test/resource/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/mock_rg/providers/Microsoft.Web/sites/func-mock', + (_, res, ctx) => res(ctx.json(functionResponseMock)), + ), + ); + }); + + it('should display an overview table with the data from the requests', async () => { + const rendered = render( + + + + + , + ); + expect( + await rendered.findByText(functionResponseMock.name), + ).toBeInTheDocument(); + expect( + await rendered.findByText(functionResponseMock.properties.state), + ).toBeInTheDocument(); + expect( + await rendered.findByText( + new Date(functionResponseMock.properties.lastModifiedTimeUtc).toUTCString(), + ), + ).toBeInTheDocument(); + }); +}); diff --git a/plugins/azure-functions/src/components/AzureFunctionsOverview/AzureFunctionsOverview.tsx b/plugins/azure-functions/src/components/AzureFunctionsOverview/AzureFunctionsOverview.tsx new file mode 100644 index 0000000000..17d190e1a9 --- /dev/null +++ b/plugins/azure-functions/src/components/AzureFunctionsOverview/AzureFunctionsOverview.tsx @@ -0,0 +1,154 @@ +/* + * 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 React from 'react'; +import { + Box, + Card, + Link, + LinearProgress +} from '@material-ui/core'; +import { Entity } from '@backstage/catalog-model'; +import { useFunctions } from '../../hooks/useFunctions'; +import { FunctionsData } from '../../api/types'; +import { + AZURE_FUNCTIONS_ANNOTATION, + useServiceEntityAnnotations, +} from '../../hooks/useServiceEntityAnnotations'; +import { MissingAnnotationEmptyState, Table, TableColumn } from '@backstage/core-components'; +import { FlashOn } from '@material-ui/icons' +import ErrorBoundary from '../ErrorBoundary'; +import { useEntity } from '@backstage/plugin-catalog-react'; + +type States = 'Waiting' | 'Running' | 'Paused' | 'Failed'; + +const State = ({ value }: { value: States }) => { + const colorMap = { + Waiting: '#dcbc21', + Running: 'green', + Paused: 'black', + Failed: 'red', + }; + return ( + + + {value} + + ); +}; + + + +type FunctionTableProps = { + data: FunctionsData[]; + loading: boolean; +}; + +const DEFAULT_COLUMNS: TableColumn[] = [ + { + title: 'name', + highlight: true, + render: (func: FunctionsData) => { + return ({func.functionName}) + }, + }, + { + title: 'location', + render: (func: FunctionsData) => func.location ?? 'unknown', + }, + { + title: 'status', + render: (func: FunctionsData) => , + }, + { + title: 'last modified', + render: (func: FunctionsData) => new Date(func.lastModifiedDate).toUTCString(), + }, + { + title: 'logs', + align: 'right', + render: (func: FunctionsData) => { + return (View Logs) + }, + }, +]; + +const OverviewComponent = ({ data, loading }: FunctionTableProps) => { + const columns: TableColumn[] = [...DEFAULT_COLUMNS]; + const tableStyle = { + minWidth: '0', + width: '100%', + }; + + return ( + + + + + Azure Functions + + } + options={{ paging: true, search: false, pageSize: 10 }} + data={data} + emptyContent={ + + } + isLoading={loading} + columns={columns} + /> + + ); +}; + +export const isAzureFunctionsAvailable = (entity: Entity) => + entity?.metadata.annotations?.[AZURE_FUNCTIONS_ANNOTATION]; + +const AzureFunctionsOverview = ({ entity }: { entity: Entity }) => { + const { functionsName } = useServiceEntityAnnotations(entity); + + const [functionsData] = useFunctions({ + functionsName + }); + + return ( + <>{} + ); +}; + +export const AzureFunctionsOverviewWidget = () => { + const { entity } = useEntity(); + + if (!isAzureFunctionsAvailable(entity)) { + return (); + } + + return ( + + + + ) +}; diff --git a/plugins/azure-functions/src/components/ErrorBoundary.tsx b/plugins/azure-functions/src/components/ErrorBoundary.tsx new file mode 100644 index 0000000000..01aede226b --- /dev/null +++ b/plugins/azure-functions/src/components/ErrorBoundary.tsx @@ -0,0 +1,58 @@ +/* + * 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 React, { Component } from 'react'; +import Alert from '@material-ui/lab/Alert'; + +interface Props {} +interface MyProps {} + +interface MyState { + hasError: boolean; +} + +export default class ErrorBoundary extends Component { + static getDerivedStateFromError() { + // Update state so the next render will show the fallback UI. + return { hasError: true }; + } + + constructor(props: Props) { + super(props); + this.state = { hasError: false }; + } + render() { + if (this.state.hasError) { + // You can render any custom fallback UI + return ( + + Something went wrong. Please make sure that you installed: + + + @backstage/plugin-azure-functions-backend + + + + ); + } + + return this.props.children; + } +} diff --git a/plugins/azure-functions/src/hooks/useFunctions.ts b/plugins/azure-functions/src/hooks/useFunctions.ts new file mode 100644 index 0000000000..a5a9c11f98 --- /dev/null +++ b/plugins/azure-functions/src/hooks/useFunctions.ts @@ -0,0 +1,71 @@ +/* + * 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 { useAsyncRetry } from 'react-use'; +import { + useApi, + errorApiRef, +} from '@backstage/core-plugin-api'; +import { FunctionsData } from '../api/types'; +import { azureFunctionsApiRef } from '../api'; +import { useCallback } from 'react'; + +export function useFunctions({ + functionsName +}: { + functionsName: string; +}) { + const azureFunctionsApi = useApi(azureFunctionsApiRef); + const errorApi = useApi(errorApiRef); + + const list = useCallback( + async () => { + return await azureFunctionsApi.list({ + functionName: functionsName, + }); + }, + [functionsName], // eslint-disable-line react-hooks/exhaustive-deps + ); + const { + loading, + value: data, + error, + retry, + } = useAsyncRetry(async () => { + try { + const azureFunction = await list(); + return azureFunction; + } catch (e) { + if (e instanceof Error) { + if (e?.message === 'MissingAzureBackendException') { + errorApi.post(new Error('Please add azure-functions-backend plugin')); + return null; + } + errorApi.post(e); + } + return null; + } + }, []); + + return [ + { + loading, + data, + error, + retry, + }, + ] as const; +} diff --git a/plugins/azure-functions/src/hooks/useServiceEntityAnnotations.ts b/plugins/azure-functions/src/hooks/useServiceEntityAnnotations.ts new file mode 100644 index 0000000000..6bbe7f5f70 --- /dev/null +++ b/plugins/azure-functions/src/hooks/useServiceEntityAnnotations.ts @@ -0,0 +1,30 @@ +/* + * 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 { Entity } from '@backstage/catalog-model'; + +export const AZURE_FUNCTIONS_ANNOTATION = 'portal.azure.com/functions-name'; +export const useServiceEntityAnnotations = (entity: Entity) => { + const functionsName = + entity?.metadata.annotations?.[AZURE_FUNCTIONS_ANNOTATION] ?? ''; + const projectName = + entity?.metadata.annotations?.['dev.azure.com/project-repo'] ?? ''; + + return { + projectName, + functionsName + }; +}; diff --git a/plugins/azure-functions/src/index.ts b/plugins/azure-functions/src/index.ts new file mode 100644 index 0000000000..6b7079ad36 --- /dev/null +++ b/plugins/azure-functions/src/index.ts @@ -0,0 +1,3 @@ +export * from './plugin'; +export * from './api'; +export * from './components/AzureFunctionsOverview/AzureFunctionsOverview'; \ No newline at end of file diff --git a/plugins/azure-functions/src/mocks/mocks.ts b/plugins/azure-functions/src/mocks/mocks.ts new file mode 100644 index 0000000000..487a4b1f5d --- /dev/null +++ b/plugins/azure-functions/src/mocks/mocks.ts @@ -0,0 +1,243 @@ +export const entityMock = { + metadata: { + namespace: 'default', + annotations: { + 'portal.azure.com/functions-name': 'func-mock', + }, + name: 'sample-azure-function-service', + description: + 'A service for testing Backstage functionality.', + uid: 'c009b513-d053-4b3f-9429-8433a145e943', + }, + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + spec: { + type: 'service', + owner: 'dev_group@example.com', + lifecycle: 'experimental', + }, +}; + +// https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Web/sites/{{functionsName}}?api-version=2022-03-01 +export const functionResponseMock = { + id: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg_mock/providers/Microsoft.Web/sites/func-mock", + name: "func-mock", + type: "Microsoft.Web/sites", + kind: "functionapp", + location: "West Europe", + tags: {}, + properties: { + name: "func-mock", + state: "Running", + hostNames: [ + "func-mock.azurewebsites.net" + ], + webSpace: "rg_mock-WestEuropewebspace", + selfLink: "https://mockurl.api.azurewebsites.windows.net:454/subscriptions/00000000-0000-0000-0000-000000000000/webspaces/rg_mock-WestEuropewebspace/sites/func-mock", + repositorySiteName: "func-mock", + owner: null, + usageState: "Normal", + enabled: true, + adminEnabled: true, + enabledHostNames: [ + "func-mock.azurewebsites.net", + "func-mock.scm.azurewebsites.net" + ], + siteProperties: { + metadata: null, + properties: [ + { + name: "LinuxFxVersion", + value: "" + }, + { + name: "WindowsFxVersion", + value: null + } + ], + appSettings: null + }, + availabilityState: "Normal", + sslCertificates: null, + csrs: [], + cers: null, + siteMode: null, + hostNameSslStates: [ + { + name: "func-mock.azurewebsites.net", + sslState: "Disabled", + ipBasedSslResult: null, + virtualIP: null, + thumbprint: null, + toUpdate: null, + toUpdateIpBasedSsl: null, + ipBasedSslState: "NotConfigured", + hostType: "Standard" + }, + { + name: "func-mock.scm.azurewebsites.net", + sslState: "Disabled", + ipBasedSslResult: null, + virtualIP: null, + thumbprint: null, + toUpdate: null, + toUpdateIpBasedSsl: null, + ipBasedSslState: "NotConfigured", + hostType: "Repository" + } + ], + computeMode: null, + serverFarm: null, + serverFarmId: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg_mock/providers/Microsoft.Web/serverfarms/plan-mock", + reserved: false, + isXenon: false, + hyperV: false, + lastModifiedTimeUtc: "2022-09-02T11:09:58.9033333", + storageRecoveryDefaultState: "Running", + contentAvailabilityState: "Normal", + runtimeAvailabilityState: "Normal", + secretsCollection: [], + vnetRouteAllEnabled: false, + containerAllocationSubnet: null, + useContainerLocalhostBindings: null, + vnetImagePullEnabled: false, + vnetContentShareEnabled: false, + siteConfig: { + numberOfWorkers: 1, + defaultDocuments: null, + netFrameworkVersion: null, + phpVersion: null, + pythonVersion: null, + nodeVersion: null, + powerShellVersion: null, + linuxFxVersion: "", + windowsFxVersion: null, + requestTracingEnabled: null, + remoteDebuggingEnabled: null, + remoteDebuggingVersion: null, + httpLoggingEnabled: null, + azureMonitorLogCategories: null, + acrUseManagedIdentityCreds: false, + acrUserManagedIdentityID: null, + logsDirectorySizeLimit: null, + detailedErrorLoggingEnabled: null, + publishingUsername: null, + publishingPassword: null, + appSettings: null, + metadata: null, + connectionStrings: null, + machineKey: null, + handlerMappings: null, + documentRoot: null, + scmType: null, + use32BitWorkerProcess: null, + webSocketsEnabled: null, + alwaysOn: true, + javaVersion: null, + javaContainer: null, + javaContainerVersion: null, + appCommandLine: null, + managedPipelineMode: null, + virtualApplications: null, + winAuthAdminState: null, + winAuthTenantState: null, + customAppPoolIdentityAdminState: null, + customAppPoolIdentityTenantState: null, + runtimeADUser: null, + runtimeADUserPassword: null, + loadBalancing: null, + routingRules: null, + experiments: null, + limits: null, + autoHealEnabled: null, + autoHealRules: null, + tracingOptions: null, + vnetName: null, + vnetRouteAllEnabled: null, + vnetPrivatePortsCount: null, + publicNetworkAccess: null, + cors: null, + push: null, + apiDefinition: null, + apiManagementConfig: null, + autoSwapSlotName: null, + localMySqlEnabled: null, + managedServiceIdentityId: null, + xManagedServiceIdentityId: null, + keyVaultReferenceIdentity: null, + ipSecurityRestrictions: null, + ipSecurityRestrictionsDefaultAction: null, + scmIpSecurityRestrictions: null, + scmIpSecurityRestrictionsDefaultAction: null, + scmIpSecurityRestrictionsUseMain: null, + http20Enabled: false, + minTlsVersion: null, + minTlsCipherSuite: null, + supportedTlsCipherSuites: null, + scmMinTlsVersion: null, + ftpsState: null, + preWarmedInstanceCount: null, + functionAppScaleLimit: 0, + elasticWebAppScaleLimit: null, + healthCheckPath: null, + fileChangeAuditEnabled: null, + functionsRuntimeScaleMonitoringEnabled: null, + websiteTimeZone: null, + minimumElasticInstanceCount: 1, + azureStorageAccounts: null, + http20ProxyFlag: null, + sitePort: null, + antivirusScanEnabled: null, + storageType: null + }, + deploymentId: "func-mock", + slotName: null, + trafficManagerHostNames: null, + sku: "Standard", + scmSiteAlsoStopped: false, + targetSwapSlot: null, + hostingEnvironment: null, + hostingEnvironmentProfile: null, + clientAffinityEnabled: false, + clientCertEnabled: false, + clientCertMode: "Required", + clientCertExclusionPaths: null, + hostNamesDisabled: false, + domainVerificationIdentifiers: null, + customDomainVerificationId: "", + kind: "functionapp", + inboundIpAddress: "", + possibleInboundIpAddresses: "", + ftpUsername: "func-mock\\$func-mock", + ftpsHostName: "ftps://mockurl.ftp.azurewebsites.windows.net/site/wwwroot", + outboundIpAddresses: "", + possibleOutboundIpAddresses: "", + containerSize: 1536, + dailyMemoryTimeQuota: 0, + suspendedTill: null, + siteDisabledReason: 0, + functionExecutionUnitsCache: null, + maxNumberOfWorkers: null, + homeStamp: "mockurl", + cloningInfo: null, + hostingEnvironmentId: null, + tags: {}, + resourceGroup: "rg_mock", + defaultHostName: "func-mock.azurewebsites.net", + slotSwapStatus: null, + httpsOnly: false, + redundancyMode: "None", + inProgressOperationId: null, + geoDistributions: null, + privateEndpointConnections: [], + publicNetworkAccess: null, + buildVersion: null, + targetBuildVersion: null, + migrationState: null, + eligibleLogCategories: "FunctionAppLogs", + storageAccountRequired: false, + virtualNetworkSubnetId: null, + keyVaultReferenceIdentity: "SystemAssigned", + privateLinkIdentifiers: null + } +}; diff --git a/plugins/azure-functions/src/plugin.test.ts b/plugins/azure-functions/src/plugin.test.ts new file mode 100644 index 0000000000..84dce9eed8 --- /dev/null +++ b/plugins/azure-functions/src/plugin.test.ts @@ -0,0 +1,7 @@ +import { azureFunctionsPlugin } from './plugin'; + +describe('azure-functions', () => { + it('should export plugin', () => { + expect(azureFunctionsPlugin).toBeDefined(); + }); +}); diff --git a/plugins/azure-functions/src/plugin.ts b/plugins/azure-functions/src/plugin.ts new file mode 100644 index 0000000000..e796eebbfc --- /dev/null +++ b/plugins/azure-functions/src/plugin.ts @@ -0,0 +1,43 @@ +import { + createApiFactory, + createComponentExtension, + createPlugin, + createRouteRef, + discoveryApiRef, + identityApiRef +} from '@backstage/core-plugin-api'; +import { azureFunctionsApiRef, AzureFunctionsBackendClient } from './api'; + +export const entityContentRouteRef = createRouteRef({ + id: 'Azure Functions Entity Content', +}); + +export const azureFunctionsPlugin = createPlugin({ + id: 'azure-functions', + apis: [ + createApiFactory({ + api: azureFunctionsApiRef, + deps: { + discoveryApi: discoveryApiRef, + identityApi: identityApiRef, + }, + factory: ({ discoveryApi, identityApi }) => + new AzureFunctionsBackendClient({ discoveryApi, identityApi }), + }) + ], + routes: { + entityContent: entityContentRouteRef, + }, +}); + +export const EntityAzureFunctionsOverviewCard = azureFunctionsPlugin.provide( + createComponentExtension({ + name: 'EntityAzureFunctionsOverviewCard', + component: { + lazy: () => + import('./components/AzureFunctionsOverview/AzureFunctionsOverview').then( + m => m.AzureFunctionsOverviewWidget, + ), + }, + }), +); \ No newline at end of file diff --git a/plugins/azure-functions/src/routes.ts b/plugins/azure-functions/src/routes.ts new file mode 100644 index 0000000000..d775ceb7b0 --- /dev/null +++ b/plugins/azure-functions/src/routes.ts @@ -0,0 +1,5 @@ +import { createRouteRef } from '@backstage/core-plugin-api'; + +export const rootRouteRef = createRouteRef({ + id: 'azure-functions', +}); diff --git a/plugins/azure-functions/src/setupTests.ts b/plugins/azure-functions/src/setupTests.ts new file mode 100644 index 0000000000..48c09b5346 --- /dev/null +++ b/plugins/azure-functions/src/setupTests.ts @@ -0,0 +1,2 @@ +import '@testing-library/jest-dom'; +import 'cross-fetch/polyfill'; diff --git a/yarn.lock b/yarn.lock index 5939d370a2..5f77f67dd6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -337,6 +337,21 @@ __metadata: languageName: node linkType: hard +"@azure/arm-appservice@npm:^13.0.0": + version: 13.0.0 + resolution: "@azure/arm-appservice@npm:13.0.0" + dependencies: + "@azure/abort-controller": ^1.0.0 + "@azure/core-auth": ^1.3.0 + "@azure/core-client": ^1.5.0 + "@azure/core-lro": ^2.2.0 + "@azure/core-paging": ^1.2.0 + "@azure/core-rest-pipeline": ^1.8.0 + tslib: ^2.2.0 + checksum: 0a21b4d462ac0ba5b46561ef90559bfc2b1f5a2a8ea551ae13f95205b4aafee5b5bd5d03f52fced7687af8d5f37d5451b48b4edc8acabf977b534af1b2790dcd + languageName: node + linkType: hard + "@azure/core-asynciterator-polyfill@npm:^1.0.0": version: 1.0.0 resolution: "@azure/core-asynciterator-polyfill@npm:1.0.0" @@ -354,6 +369,16 @@ __metadata: languageName: node linkType: hard +"@azure/core-auth@npm:^1.4.0": + version: 1.4.0 + resolution: "@azure/core-auth@npm:1.4.0" + dependencies: + "@azure/abort-controller": ^1.0.0 + tslib: ^2.2.0 + checksum: 1c76c296fe911ad39fc780b033c25a92c41c5a15f011b816d42c13584f627a4dd153dfb4334900ec93eb5b006e14bdda37e8412a7697c5a9636a0abaccffad39 + languageName: node + linkType: hard + "@azure/core-client@npm:^1.4.0": version: 1.5.0 resolution: "@azure/core-client@npm:1.5.0" @@ -369,6 +394,21 @@ __metadata: languageName: node linkType: hard +"@azure/core-client@npm:^1.5.0": + version: 1.6.1 + resolution: "@azure/core-client@npm:1.6.1" + dependencies: + "@azure/abort-controller": ^1.0.0 + "@azure/core-auth": ^1.4.0 + "@azure/core-rest-pipeline": ^1.9.1 + "@azure/core-tracing": ^1.0.0 + "@azure/core-util": ^1.0.0 + "@azure/logger": ^1.0.0 + tslib: ^2.2.0 + checksum: 400890a9b5f0c8801ff92005c3cba7bb5124634e321735406731bef33688a79f23d28b49fccdfab90814dade41a13f3d3cb99f80151a2bff17628416e811afb6 + languageName: node + linkType: hard + "@azure/core-http@npm:^2.0.0": version: 2.2.4 resolution: "@azure/core-http@npm:2.2.4" @@ -413,6 +453,15 @@ __metadata: languageName: node linkType: hard +"@azure/core-paging@npm:^1.2.0": + version: 1.3.0 + resolution: "@azure/core-paging@npm:1.3.0" + dependencies: + tslib: ^2.2.0 + checksum: 3fbf3d6474e2346f7c3ea8344a41bf41e053789efbbd29df78365e9c9ca66e143da3e5407d8c9dd5ddc82a65680185cd6f0ec851c48635776d18a6a605a98e78 + languageName: node + linkType: hard + "@azure/core-rest-pipeline@npm:^1.1.0, @azure/core-rest-pipeline@npm:^1.5.0": version: 1.5.0 resolution: "@azure/core-rest-pipeline@npm:1.5.0" @@ -430,6 +479,24 @@ __metadata: languageName: node linkType: hard +"@azure/core-rest-pipeline@npm:^1.8.0, @azure/core-rest-pipeline@npm:^1.9.1": + version: 1.9.2 + resolution: "@azure/core-rest-pipeline@npm:1.9.2" + dependencies: + "@azure/abort-controller": ^1.0.0 + "@azure/core-auth": ^1.4.0 + "@azure/core-tracing": ^1.0.1 + "@azure/core-util": ^1.0.0 + "@azure/logger": ^1.0.0 + form-data: ^4.0.0 + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.0 + tslib: ^2.2.0 + uuid: ^8.3.0 + checksum: cdfdaf8bdb0778f40ecfeb8b5da0b4f8643d641b75bb5869485afd38f7c3127ab088ac2fe2980df03d28fb6715928e04560343ee6416246aebe75443c4dd2906 + languageName: node + linkType: hard + "@azure/core-tracing@npm:1.0.0-preview.13": version: 1.0.0-preview.13 resolution: "@azure/core-tracing@npm:1.0.0-preview.13" @@ -440,7 +507,7 @@ __metadata: languageName: node linkType: hard -"@azure/core-tracing@npm:^1.0.0": +"@azure/core-tracing@npm:^1.0.0, @azure/core-tracing@npm:^1.0.1": version: 1.0.1 resolution: "@azure/core-tracing@npm:1.0.1" dependencies: @@ -2839,6 +2906,24 @@ __metadata: languageName: unknown linkType: soft +"@backstage/app-defaults@npm:^1.0.5": + version: 1.0.5 + resolution: "@backstage/app-defaults@npm:1.0.5" + dependencies: + "@backstage/core-app-api": ^1.0.5 + "@backstage/core-components": ^0.11.0 + "@backstage/core-plugin-api": ^1.0.5 + "@backstage/plugin-permission-react": ^0.4.4 + "@backstage/theme": ^0.2.16 + "@material-ui/core": ^4.12.2 + "@material-ui/icons": ^4.9.1 + react-router-dom: 6.0.0-beta.0 + peerDependencies: + react: ^16.13.1 || ^17.0.0 + checksum: c070eaa21dbbe2d0cb46d0c6fbcce623b305d2a715a0b126166b227d0f669c1fa0375573e21ce57c468367e5a3782764fb3b7738c71e77a9d5bab70ea7e3e280 + languageName: node + linkType: hard + "@backstage/backend-app-api@^0.2.1-next.0, @backstage/backend-app-api@^0.2.1-next.1, @backstage/backend-app-api@workspace:packages/backend-app-api": version: 0.0.0-use.local resolution: "@backstage/backend-app-api@workspace:packages/backend-app-api" @@ -2941,6 +3026,66 @@ __metadata: languageName: unknown linkType: soft +"@backstage/backend-common@npm:^0.15.0": + version: 0.15.0 + resolution: "@backstage/backend-common@npm:0.15.0" + dependencies: + "@backstage/cli-common": ^0.1.9 + "@backstage/config": ^1.0.1 + "@backstage/config-loader": ^1.1.3 + "@backstage/errors": ^1.1.0 + "@backstage/integration": ^1.3.0 + "@backstage/types": ^1.0.0 + "@google-cloud/storage": ^6.0.0 + "@keyv/redis": ^2.2.3 + "@manypkg/get-packages": ^1.1.3 + "@octokit/rest": ^19.0.3 + "@types/cors": ^2.8.6 + "@types/dockerode": ^3.3.0 + "@types/express": ^4.17.6 + "@types/luxon": ^3.0.0 + "@types/webpack-env": ^1.15.2 + archiver: ^5.0.2 + aws-sdk: ^2.840.0 + base64-stream: ^1.0.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.1.0 + git-url-parse: ^12.0.0 + helmet: ^5.0.2 + isomorphic-git: ^1.8.0 + jose: ^4.6.0 + keyv: ^4.0.3 + keyv-memcache: ^1.2.5 + knex: ^2.0.0 + lodash: ^4.17.21 + logform: ^2.3.2 + luxon: ^3.0.0 + 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 + winston: ^3.2.1 + yauzl: ^2.10.0 + yn: ^4.0.0 + peerDependencies: + pg-connection-string: ^2.3.0 + peerDependenciesMeta: + pg-connection-string: + optional: true + checksum: 331e774247f79d4a041069b604a289694a920b43e579e5b4437480460ddf027a6e7106e1acc0e09b9d6c6414a2324eaea5d5d40972055e138409cbe05c2f66bd + languageName: node + linkType: hard + "@backstage/backend-defaults@^0.1.1-next.0, @backstage/backend-defaults@workspace:packages/backend-defaults": version: 0.0.0-use.local resolution: "@backstage/backend-defaults@workspace:packages/backend-defaults" @@ -3200,6 +3345,114 @@ __metadata: languageName: unknown linkType: soft +"@backstage/cli@npm:^0.18.0": + version: 0.18.1 + resolution: "@backstage/cli@npm:0.18.1" + dependencies: + "@backstage/cli-common": ^0.1.9 + "@backstage/config": ^1.0.1 + "@backstage/config-loader": ^1.1.3 + "@backstage/errors": ^1.1.0 + "@backstage/release-manifests": ^0.0.5 + "@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": ^6.0.0 + "@rollup/plugin-commonjs": ^22.0.0 + "@rollup/plugin-json": ^4.1.0 + "@rollup/plugin-node-resolve": ^13.0.6 + "@rollup/plugin-yaml": ^3.1.0 + "@spotify/eslint-config-base": ^14.0.0 + "@spotify/eslint-config-react": ^14.0.0 + "@spotify/eslint-config-typescript": ^14.0.0 + "@sucrase/jest-plugin": ^2.1.1 + "@sucrase/webpack-loader": ^2.0.0 + "@svgr/plugin-jsx": 6.3.x + "@svgr/plugin-svgo": 6.3.x + "@svgr/rollup": 6.3.x + "@svgr/webpack": 6.3.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 + "@yarnpkg/parsers": ^3.0.0-rc.4 + bfj: ^7.0.2 + buffer: ^6.0.3 + chalk: ^4.0.0 + chokidar: ^3.3.1 + commander: ^9.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.1.0 + glob: ^7.1.7 + global-agent: ^3.0.0 + 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.1.0 + node-fetch: ^2.6.7 + 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.1.0 + 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: ^2.0.0 + yml-loader: ^2.1.0 + yn: ^4.0.0 + zod: ^3.11.6 + peerDependencies: + "@microsoft/api-extractor": ^7.21.2 + peerDependenciesMeta: + "@microsoft/api-extractor": + optional: true + bin: + backstage-cli: bin/backstage-cli + checksum: e3e0a14a87be6add3adcc9d3a3f6d34064315e4a420a2ab97401f5074a0cce96c80908ffd9687db281581b5a459c8900b2683ae686ade38b24df22535296cc3f + languageName: node + linkType: hard + "@backstage/codemods@workspace:*, @backstage/codemods@workspace:packages/codemods": version: 0.0.0-use.local resolution: "@backstage/codemods@workspace:packages/codemods" @@ -3247,6 +3500,29 @@ __metadata: languageName: unknown linkType: soft +"@backstage/config-loader@npm:^1.1.3": + version: 1.1.3 + resolution: "@backstage/config-loader@npm:1.1.3" + dependencies: + "@backstage/cli-common": ^0.1.9 + "@backstage/config": ^1.0.1 + "@backstage/errors": ^1.1.0 + "@backstage/types": ^1.0.0 + "@types/json-schema": ^7.0.6 + ajv: ^8.10.0 + chokidar: ^3.5.2 + fs-extra: 10.1.0 + 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.54.0 + yaml: ^2.0.0 + yup: ^0.32.9 + checksum: b7467887a94977509ea1a95227521142318ea8c13f45c37959ed792668abf33e30377a79931f46891628389513c1459824fe6cb53a2dc8d5e6cb7abf57162371 + languageName: node + linkType: hard + "@backstage/config@^1.0.0, @backstage/config@^1.0.1, @backstage/config@workspace:packages/config": version: 0.0.0-use.local resolution: "@backstage/config@workspace:packages/config" @@ -3293,6 +3569,27 @@ __metadata: languageName: unknown linkType: soft +"@backstage/core-app-api@npm:^1.0.5": + version: 1.0.5 + resolution: "@backstage/core-app-api@npm:1.0.5" + dependencies: + "@backstage/config": ^1.0.1 + "@backstage/core-plugin-api": ^1.0.5 + "@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 + peerDependencies: + "@types/react": ^16.13.1 || ^17.0.0 + react: ^16.13.1 || ^17.0.0 + checksum: e5cb3ff2c7aefc19406f2895eeba5a9cf3f332b14ebfe4b5c304cc4e84d76f80c027d76ffa7fc2c4b6f856e8c534f689a1fe726f54fdf0d36017d909c1727aca + languageName: node + linkType: hard + "@backstage/core-components@^0.11.1-next.1, @backstage/core-components@^0.11.1-next.2, @backstage/core-components@workspace:packages/core-components": version: 0.0.0-use.local resolution: "@backstage/core-components@workspace:packages/core-components" @@ -3518,6 +3815,37 @@ __metadata: languageName: unknown linkType: soft +"@backstage/dev-utils@npm:^1.0.4": + version: 1.0.5 + resolution: "@backstage/dev-utils@npm:1.0.5" + dependencies: + "@backstage/app-defaults": ^1.0.5 + "@backstage/catalog-model": ^1.1.0 + "@backstage/core-app-api": ^1.0.5 + "@backstage/core-components": ^0.11.0 + "@backstage/core-plugin-api": ^1.0.5 + "@backstage/integration-react": ^1.1.3 + "@backstage/plugin-catalog-react": ^1.1.3 + "@backstage/test-utils": ^1.1.3 + "@backstage/theme": ^0.2.16 + "@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 + peerDependencies: + "@types/react": ^16.13.1 || ^17.0.0 + react: ^16.13.1 || ^17.0.0 + react-dom: ^16.13.1 || ^17.0.0 + checksum: 3d8787c91d38d9573b6084ce069c5e7fea55207b259fd9edd629ea9e2970bdc3858f680a1a637877e326af657134dfc5340545eca1b6d67fdcc2d3f703f4f665 + languageName: node + linkType: hard + "@backstage/errors@1.1.0, @backstage/errors@^1.0.0, @backstage/errors@^1.1.0, @backstage/errors@^1.1.0-next.0, @backstage/errors@workspace:packages/errors": version: 0.0.0-use.local resolution: "@backstage/errors@workspace:packages/errors" @@ -3556,7 +3884,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/integration-react@npm:^1.0.0": +"@backstage/integration-react@npm:^1.0.0, @backstage/integration-react@npm:^1.1.3": version: 1.1.3 resolution: "@backstage/integration-react@npm:1.1.3" dependencies: @@ -4074,6 +4402,54 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-azure-functions-backend@workspace:plugins/azure-functions-backend": + version: 0.0.0-use.local + resolution: "@backstage/plugin-azure-functions-backend@workspace:plugins/azure-functions-backend" + dependencies: + "@azure/arm-appservice": ^13.0.0 + "@azure/identity": ^2.1.0 + "@backstage/backend-common": ^0.15.0 + "@backstage/cli": ^0.18.0 + "@backstage/config": ^1.0.1 + "@types/express": "*" + "@types/supertest": ^2.0.8 + express: ^4.17.1 + express-promise-router: ^4.1.0 + msw: ^0.44.0 + node-fetch: ^2.6.7 + supertest: ^4.0.2 + winston: ^3.2.1 + yn: ^4.0.0 + languageName: unknown + linkType: soft + +"@backstage/plugin-azure-functions@workspace:plugins/azure-functions": + version: 0.0.0-use.local + resolution: "@backstage/plugin-azure-functions@workspace:plugins/azure-functions" + dependencies: + "@backstage/cli": ^0.18.0 + "@backstage/core-app-api": ^1.0.5 + "@backstage/core-components": ^0.11.0 + "@backstage/core-plugin-api": ^1.0.5 + "@backstage/dev-utils": ^1.0.4 + "@backstage/test-utils": ^1.1.3 + "@backstage/theme": ^0.2.16 + "@material-ui/core": ^4.9.13 + "@material-ui/icons": ^4.9.1 + "@material-ui/lab": 4.0.0-alpha.57 + "@testing-library/jest-dom": ^5.10.1 + "@testing-library/react": ^12.1.3 + "@testing-library/user-event": ^14.0.0 + "@types/jest": "*" + "@types/node": "*" + cross-fetch: ^3.1.5 + msw: ^0.44.0 + react-use: ^17.2.4 + peerDependencies: + react: ^16.13.1 || ^17.0.0 + languageName: unknown + linkType: soft + "@backstage/plugin-badges-backend@^0.1.30-next.0, @backstage/plugin-badges-backend@workspace:plugins/badges-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-badges-backend@workspace:plugins/badges-backend" @@ -7400,6 +7776,15 @@ __metadata: languageName: unknown linkType: soft +"@backstage/release-manifests@npm:^0.0.5": + version: 0.0.5 + resolution: "@backstage/release-manifests@npm:0.0.5" + dependencies: + cross-fetch: ^3.1.5 + checksum: 6e7a37d11a24fdbd99e45354c1703e12be691da37df27c752b3f1422c5d75ec89e45cc4808e9a2f98a37a525f4076428ec3cba2e9cdd579f4383b7f1ccdd564b + languageName: node + linkType: hard + "@backstage/test-utils@^1.2.0-next.1, @backstage/test-utils@^1.2.0-next.2, @backstage/test-utils@workspace:packages/test-utils": version: 0.0.0-use.local resolution: "@backstage/test-utils@workspace:packages/test-utils" @@ -7430,6 +7815,33 @@ __metadata: languageName: unknown linkType: soft +"@backstage/test-utils@npm:^1.1.3": + version: 1.1.3 + resolution: "@backstage/test-utils@npm:1.1.3" + dependencies: + "@backstage/config": ^1.0.1 + "@backstage/core-app-api": ^1.0.5 + "@backstage/core-plugin-api": ^1.0.5 + "@backstage/plugin-permission-common": ^0.6.3 + "@backstage/plugin-permission-react": ^0.4.4 + "@backstage/theme": ^0.2.16 + "@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 + peerDependencies: + "@types/react": ^16.13.1 || ^17.0.0 + react: ^16.13.1 || ^17.0.0 + checksum: c83feac65473848691abc7d8d40fd5e0f6e179387266810fc36c806d336c640255aada09f17f6568b6bb4a48bc030eb8810195edbaf6eff5c75207daf7e7adc5 + languageName: node + linkType: hard + "@backstage/theme@^0.2.15, @backstage/theme@^0.2.16, @backstage/theme@^0.2.6, @backstage/theme@^0.2.7, @backstage/theme@^0.2.9, @backstage/theme@workspace:packages/theme": version: 0.0.0-use.local resolution: "@backstage/theme@workspace:packages/theme" @@ -9021,6 +9433,33 @@ __metadata: languageName: node linkType: hard +"@hot-loader/react-dom-v16@npm:@hot-loader/react-dom@^16.0.2": + version: 16.14.0 + resolution: "@hot-loader/react-dom@npm:16.14.0" + dependencies: + loose-envify: ^1.1.0 + object-assign: ^4.1.1 + prop-types: ^15.6.2 + scheduler: ^0.19.1 + peerDependencies: + react: ^16.14.0 + checksum: 9362ef1dfcea97eb833983c3cfcd3bb813ef5cd7dc3f91ad4927fabbaf05db2b81751aaa98e5c233004081771ca5d5478bd648a9a969e08eb9cf1c6a1ee0de00 + languageName: node + linkType: hard + +"@hot-loader/react-dom-v17@npm:@hot-loader/react-dom@^17.0.2": + version: 17.0.2 + resolution: "@hot-loader/react-dom@npm:17.0.2" + dependencies: + loose-envify: ^1.1.0 + object-assign: ^4.1.1 + scheduler: ^0.20.2 + peerDependencies: + react: 17.0.2 + checksum: 180de3211aff1d60fd9d2a9130ba7977e2e356b1ecd2e7c50a98e6507bb7873f0523b44fa63142f0ffdc629d2933994f4add86e1f19288941f9d223bd28f5e48 + languageName: node + linkType: hard + "@humanwhocodes/config-array@npm:^0.10.4": version: 0.10.4 resolution: "@humanwhocodes/config-array@npm:0.10.4" @@ -19016,7 +19455,7 @@ __metadata: languageName: node linkType: hard -"component-emitter@npm:^1.2.1, component-emitter@npm:^1.3.0, component-emitter@npm:~1.3.0": +"component-emitter@npm:^1.2.0, component-emitter@npm:^1.2.1, component-emitter@npm:^1.3.0, component-emitter@npm:~1.3.0": version: 1.3.0 resolution: "component-emitter@npm:1.3.0" checksum: b3c46de38ffd35c57d1c02488355be9f218e582aec72d72d1b8bbec95a3ac1b38c96cd6e03ff015577e68f550fbb361a3bfdbd9bb248be9390b7b3745691be6b @@ -19402,7 +19841,7 @@ __metadata: languageName: node linkType: hard -"cookiejar@npm:^2.1.3": +"cookiejar@npm:^2.1.0, cookiejar@npm:^2.1.3": version: 2.1.3 resolution: "cookiejar@npm:2.1.3" checksum: 88259983ebc52ceb23cdacfa48762b6a518a57872eff1c7ed01d214fff5cf492e2660d7d5c04700a28f1787a76811df39e8639f8e17670b3cf94ecd86e161f07 @@ -21997,6 +22436,23 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-jest@npm:^26.1.2": + version: 26.9.0 + resolution: "eslint-plugin-jest@npm:26.9.0" + dependencies: + "@typescript-eslint/utils": ^5.10.0 + peerDependencies: + "@typescript-eslint/eslint-plugin": ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + "@typescript-eslint/eslint-plugin": + optional: true + jest: + optional: true + checksum: 6d5fd5c95368f1ca2640389aeb7ce703d6202493c3ec6bdedb4eaca37233710508b0c75829e727765a16fd27029a466d34202bc7f2811c752038ccbbce224400 + languageName: node + linkType: hard + "eslint-plugin-jest@npm:^27.0.0": version: 27.0.2 resolution: "eslint-plugin-jest@npm:27.0.2" @@ -23431,7 +23887,7 @@ __metadata: languageName: node linkType: hard -"form-data@npm:^2.3.2, form-data@npm:^2.5.0": +"form-data@npm:^2.3.1, form-data@npm:^2.3.2, form-data@npm:^2.5.0": version: 2.5.1 resolution: "form-data@npm:2.5.1" dependencies: @@ -23502,6 +23958,13 @@ __metadata: languageName: node linkType: hard +"formidable@npm:^1.2.0": + version: 1.2.6 + resolution: "formidable@npm:1.2.6" + checksum: 2b68ed07ba88302b9c63f8eda94f19a460cef6017bfda48348f09f41d2a36660c9353137991618e0e4c3db115b41e4b8f6fa63bc973b7a7c91dec66acdd02a56 + languageName: node + linkType: hard + "formidable@npm:^2.0.1": version: 2.0.1 resolution: "formidable@npm:2.0.1" @@ -24196,7 +24659,7 @@ __metadata: languageName: node linkType: hard -"global@npm:~4.4.0": +"global@npm:^4.3.0, global@npm:~4.4.0": version: 4.4.0 resolution: "global@npm:4.4.0" dependencies: @@ -24886,6 +25349,13 @@ __metadata: languageName: node linkType: hard +"helmet@npm:^5.0.2": + version: 5.1.1 + resolution: "helmet@npm:5.1.1" + checksum: b72ba26cc431804ad3b8ecdc18db95409a492cbb7a7e825efc27fc502b9433fec39fc083f2aad4fe7ed1a89a4287560b59f4435f9689eebbae6a2b61a1ec1b7d + languageName: node + linkType: hard + "helmet@npm:^6.0.0": version: 6.0.0 resolution: "helmet@npm:6.0.0" @@ -29763,7 +30233,7 @@ __metadata: languageName: node linkType: hard -"methods@npm:^1.0.0, methods@npm:^1.1.2, methods@npm:~1.1.2": +"methods@npm:^1.0.0, methods@npm:^1.1.1, methods@npm:^1.1.2, methods@npm:~1.1.2": version: 1.1.2 resolution: "methods@npm:1.1.2" checksum: 0917ff4041fa8e2f2fda5425a955fe16ca411591fbd123c0d722fcf02b73971ed6f764d85f0a6f547ce49ee0221ce2c19a5fa692157931cecb422984f1dcd13a @@ -30173,7 +30643,7 @@ __metadata: languageName: node linkType: hard -"mime@npm:1.6.0, mime@npm:^1.3.4": +"mime@npm:1.6.0, mime@npm:^1.3.4, mime@npm:^1.4.1": version: 1.6.0 resolution: "mime@npm:1.6.0" bin: @@ -30619,6 +31089,41 @@ __metadata: languageName: node linkType: hard +"msw@npm:^0.44.0": + version: 0.44.2 + resolution: "msw@npm:0.44.2" + dependencies: + "@mswjs/cookies": ^0.2.2 + "@mswjs/interceptors": ^0.17.2 + "@open-draft/until": ^1.0.3 + "@types/cookie": ^0.4.1 + "@types/js-levenshtein": ^1.1.1 + chalk: 4.1.1 + chokidar: ^3.4.2 + cookie: ^0.4.2 + graphql: ^16.3.0 + headers-polyfill: ^3.0.4 + inquirer: ^8.2.0 + is-node-process: ^1.0.1 + js-levenshtein: ^1.1.6 + node-fetch: ^2.6.7 + outvariant: ^1.3.0 + path-to-regexp: ^6.2.0 + statuses: ^2.0.0 + strict-event-emitter: ^0.2.0 + type-fest: ^1.2.2 + yargs: ^17.3.1 + peerDependencies: + typescript: ">= 4.2.x <= 4.7.x" + peerDependenciesMeta: + typescript: + optional: true + bin: + msw: cli/index.js + checksum: 739d536ee09d1c0a2cbc9dbe917f167c42115a6548f99780850ce9a63a5e7c377cf9b5f1a3b497e85ce7304025ab22966e997fe73adbd8d2ab968b8685f15a24 + languageName: node + linkType: hard + "msw@npm:^0.47.0": version: 0.47.0 resolution: "msw@npm:0.47.0" @@ -33718,7 +34223,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.0.0, prop-types@npm:^15.5.10, prop-types@npm:^15.5.7, prop-types@npm:^15.5.8, prop-types@npm:^15.6.0, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": +"prop-types@npm:^15.0.0, prop-types@npm:^15.5.10, prop-types@npm:^15.5.7, prop-types@npm:^15.5.8, prop-types@npm:^15.6.0, prop-types@npm:^15.6.1, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -34025,6 +34530,15 @@ __metadata: languageName: node linkType: hard +"qs@npm:^6.5.1": + version: 6.11.0 + resolution: "qs@npm:6.11.0" + dependencies: + side-channel: ^1.0.4 + checksum: 6e1f29dd5385f7488ec74ac7b6c92f4d09a90408882d0c208414a34dd33badc1a621019d4c799a3df15ab9b1d0292f97c1dd71dc7c045e69f81a8064e5af7297 + languageName: node + linkType: hard + "qs@npm:~6.5.2": version: 6.5.2 resolution: "qs@npm:6.5.2" @@ -34405,6 +34919,29 @@ __metadata: languageName: node linkType: hard +"react-hot-loader@npm:^4.13.0": + version: 4.13.0 + resolution: "react-hot-loader@npm:4.13.0" + dependencies: + fast-levenshtein: ^2.0.6 + global: ^4.3.0 + hoist-non-react-statics: ^3.3.0 + loader-utils: ^1.1.0 + prop-types: ^15.6.1 + react-lifecycles-compat: ^3.0.4 + shallowequal: ^1.1.0 + source-map: ^0.7.3 + peerDependencies: + "@types/react": "^15.0.0 || ^16.0.0 || ^17.0.0 " + react: "^15.0.0 || ^16.0.0 || ^17.0.0 " + react-dom: "^15.0.0 || ^16.0.0 || ^17.0.0 " + peerDependenciesMeta: + "@types/react": + optional: true + checksum: effdbf4644ce912ae20ad94be62083970c74b26a59fe24ed0024cf73190a5b3edf59650cb693bdd7b70791df8ab8530de273d73b895c4831a91da8a76683e3a3 + languageName: node + linkType: hard + "react-icons@npm:^4.4.0": version: 4.4.0 resolution: "react-icons@npm:4.4.0" @@ -37867,6 +38404,24 @@ __metadata: languageName: node linkType: hard +"superagent@npm:^3.8.3": + version: 3.8.3 + resolution: "superagent@npm:3.8.3" + dependencies: + component-emitter: ^1.2.0 + cookiejar: ^2.1.0 + debug: ^3.1.0 + extend: ^3.0.0 + form-data: ^2.3.1 + formidable: ^1.2.0 + methods: ^1.1.1 + mime: ^1.4.1 + qs: ^6.5.1 + readable-stream: ^2.3.5 + checksum: b13d0303259d76c9180bd40d97d9f0713760f5ced1aef089bdb2fcdf69cfaef89004cd6e986416d59bd9a2f0f9933d72521b5171fa26f89b781a2c3460c516fe + languageName: node + linkType: hard + "superagent@npm:^8.0.0": version: 8.0.0 resolution: "superagent@npm:8.0.0" @@ -37886,6 +38441,16 @@ __metadata: languageName: node linkType: hard +"supertest@npm:^4.0.2": + version: 4.0.2 + resolution: "supertest@npm:4.0.2" + dependencies: + methods: ^1.1.2 + superagent: ^3.8.3 + checksum: ec848088c5d0f6743a0829331c274f67ab4c2e5e6ba724f2fdf4965a73afa22d5091448323e28ae5b69137e42fe3ac67235dfc5b0a0acda3c088bdd193313319 + languageName: node + linkType: hard + "supertest@npm:^6.1.3, supertest@npm:^6.1.6, supertest@npm:^6.2.4": version: 6.2.4 resolution: "supertest@npm:6.2.4" @@ -40196,7 +40761,7 @@ __metadata: languageName: node linkType: hard -"webpack@npm:^5, webpack@npm:^5.70.0": +"webpack@npm:^5, webpack@npm:^5.66.0, webpack@npm:^5.70.0": version: 5.74.0 resolution: "webpack@npm:5.74.0" dependencies: From 623a44cac250c5ddb2aa755e4122ce194a7c5da6 Mon Sep 17 00:00:00 2001 From: Wesley Date: Sun, 11 Sep 2022 14:00:23 +0200 Subject: [PATCH 002/278] update yarn file Signed-off-by: Wesley --- yarn.lock | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/yarn.lock b/yarn.lock index 5f77f67dd6..854aa9c719 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4402,7 +4402,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-azure-functions-backend@workspace:plugins/azure-functions-backend": +"@backstage/plugin-azure-functions-backend@^0.1.0, @backstage/plugin-azure-functions-backend@workspace:plugins/azure-functions-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-azure-functions-backend@workspace:plugins/azure-functions-backend" dependencies: @@ -4423,7 +4423,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-azure-functions@workspace:plugins/azure-functions": +"@backstage/plugin-azure-functions@^0.1.0, @backstage/plugin-azure-functions@workspace:plugins/azure-functions": version: 0.0.0-use.local resolution: "@backstage/plugin-azure-functions@workspace:plugins/azure-functions" dependencies: @@ -22863,6 +22863,7 @@ __metadata: "@backstage/plugin-apache-airflow": ^0.2.2-next.2 "@backstage/plugin-api-docs": ^0.8.9-next.2 "@backstage/plugin-azure-devops": ^0.2.0-next.2 + "@backstage/plugin-azure-functions": ^0.1.0 "@backstage/plugin-badges": ^0.2.33-next.2 "@backstage/plugin-catalog-common": ^1.0.6-next.0 "@backstage/plugin-catalog-graph": ^0.2.21-next.1 @@ -22966,6 +22967,7 @@ __metadata: "@backstage/plugin-auth-backend": ^0.16.0-next.2 "@backstage/plugin-auth-node": ^0.2.5-next.2 "@backstage/plugin-azure-devops-backend": ^0.3.15-next.1 + "@backstage/plugin-azure-functions-backend": ^0.1.0 "@backstage/plugin-badges-backend": ^0.1.30-next.0 "@backstage/plugin-catalog-backend": ^1.4.0-next.2 "@backstage/plugin-code-coverage-backend": ^0.2.2-next.1 From 3f5c96c155d411665d08fb3cc038393f0c4e1809 Mon Sep 17 00:00:00 2001 From: Wesley Date: Sun, 11 Sep 2022 14:15:19 +0200 Subject: [PATCH 003/278] update packages.json Signed-off-by: Wesley --- plugins/azure-functions-backend/package.json | 4 +- plugins/azure-functions/package.json | 12 +- yarn.lock | 395 +------------------ 3 files changed, 20 insertions(+), 391 deletions(-) diff --git a/plugins/azure-functions-backend/package.json b/plugins/azure-functions-backend/package.json index 3a1b83ec34..cf5a5a5137 100644 --- a/plugins/azure-functions-backend/package.json +++ b/plugins/azure-functions-backend/package.json @@ -25,7 +25,7 @@ "dependencies": { "@azure/arm-appservice": "^13.0.0", "@azure/identity": "^2.1.0", - "@backstage/backend-common": "^0.15.0", + "@backstage/backend-common": "^0.15.1-next.2", "@backstage/config": "^1.0.1", "@types/express": "*", "express": "^4.17.1", @@ -35,7 +35,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0", + "@backstage/cli": "^0.19.0-next.2", "@types/supertest": "^2.0.8", "msw": "^0.44.0", "supertest": "^4.0.2" diff --git a/plugins/azure-functions/package.json b/plugins/azure-functions/package.json index d917a31df2..1af6e63db2 100644 --- a/plugins/azure-functions/package.json +++ b/plugins/azure-functions/package.json @@ -23,8 +23,8 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/core-components": "^0.11.0", - "@backstage/core-plugin-api": "^1.0.5", + "@backstage/core-components": "^0.11.1-next.2", + "@backstage/core-plugin-api": "^1.0.6-next.2", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.9.1", @@ -35,10 +35,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.18.0", - "@backstage/core-app-api": "^1.0.5", - "@backstage/dev-utils": "^1.0.4", - "@backstage/test-utils": "^1.1.3", + "@backstage/cli": "^0.19.0-next.2", + "@backstage/core-app-api": "^1.1.0-next.2", + "@backstage/dev-utils": "^1.0.6-next.1", + "@backstage/test-utils": "^1.2.0-next.2", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/yarn.lock b/yarn.lock index 854aa9c719..69069ce652 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2906,24 +2906,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/app-defaults@npm:^1.0.5": - version: 1.0.5 - resolution: "@backstage/app-defaults@npm:1.0.5" - dependencies: - "@backstage/core-app-api": ^1.0.5 - "@backstage/core-components": ^0.11.0 - "@backstage/core-plugin-api": ^1.0.5 - "@backstage/plugin-permission-react": ^0.4.4 - "@backstage/theme": ^0.2.16 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - react-router-dom: 6.0.0-beta.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 - checksum: c070eaa21dbbe2d0cb46d0c6fbcce623b305d2a715a0b126166b227d0f669c1fa0375573e21ce57c468367e5a3782764fb3b7738c71e77a9d5bab70ea7e3e280 - languageName: node - linkType: hard - "@backstage/backend-app-api@^0.2.1-next.0, @backstage/backend-app-api@^0.2.1-next.1, @backstage/backend-app-api@workspace:packages/backend-app-api": version: 0.0.0-use.local resolution: "@backstage/backend-app-api@workspace:packages/backend-app-api" @@ -3026,66 +3008,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/backend-common@npm:^0.15.0": - version: 0.15.0 - resolution: "@backstage/backend-common@npm:0.15.0" - dependencies: - "@backstage/cli-common": ^0.1.9 - "@backstage/config": ^1.0.1 - "@backstage/config-loader": ^1.1.3 - "@backstage/errors": ^1.1.0 - "@backstage/integration": ^1.3.0 - "@backstage/types": ^1.0.0 - "@google-cloud/storage": ^6.0.0 - "@keyv/redis": ^2.2.3 - "@manypkg/get-packages": ^1.1.3 - "@octokit/rest": ^19.0.3 - "@types/cors": ^2.8.6 - "@types/dockerode": ^3.3.0 - "@types/express": ^4.17.6 - "@types/luxon": ^3.0.0 - "@types/webpack-env": ^1.15.2 - archiver: ^5.0.2 - aws-sdk: ^2.840.0 - base64-stream: ^1.0.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.1.0 - git-url-parse: ^12.0.0 - helmet: ^5.0.2 - isomorphic-git: ^1.8.0 - jose: ^4.6.0 - keyv: ^4.0.3 - keyv-memcache: ^1.2.5 - knex: ^2.0.0 - lodash: ^4.17.21 - logform: ^2.3.2 - luxon: ^3.0.0 - 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 - winston: ^3.2.1 - yauzl: ^2.10.0 - yn: ^4.0.0 - peerDependencies: - pg-connection-string: ^2.3.0 - peerDependenciesMeta: - pg-connection-string: - optional: true - checksum: 331e774247f79d4a041069b604a289694a920b43e579e5b4437480460ddf027a6e7106e1acc0e09b9d6c6414a2324eaea5d5d40972055e138409cbe05c2f66bd - languageName: node - linkType: hard - "@backstage/backend-defaults@^0.1.1-next.0, @backstage/backend-defaults@workspace:packages/backend-defaults": version: 0.0.0-use.local resolution: "@backstage/backend-defaults@workspace:packages/backend-defaults" @@ -3345,114 +3267,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/cli@npm:^0.18.0": - version: 0.18.1 - resolution: "@backstage/cli@npm:0.18.1" - dependencies: - "@backstage/cli-common": ^0.1.9 - "@backstage/config": ^1.0.1 - "@backstage/config-loader": ^1.1.3 - "@backstage/errors": ^1.1.0 - "@backstage/release-manifests": ^0.0.5 - "@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": ^6.0.0 - "@rollup/plugin-commonjs": ^22.0.0 - "@rollup/plugin-json": ^4.1.0 - "@rollup/plugin-node-resolve": ^13.0.6 - "@rollup/plugin-yaml": ^3.1.0 - "@spotify/eslint-config-base": ^14.0.0 - "@spotify/eslint-config-react": ^14.0.0 - "@spotify/eslint-config-typescript": ^14.0.0 - "@sucrase/jest-plugin": ^2.1.1 - "@sucrase/webpack-loader": ^2.0.0 - "@svgr/plugin-jsx": 6.3.x - "@svgr/plugin-svgo": 6.3.x - "@svgr/rollup": 6.3.x - "@svgr/webpack": 6.3.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 - "@yarnpkg/parsers": ^3.0.0-rc.4 - bfj: ^7.0.2 - buffer: ^6.0.3 - chalk: ^4.0.0 - chokidar: ^3.3.1 - commander: ^9.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.1.0 - glob: ^7.1.7 - global-agent: ^3.0.0 - 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.1.0 - node-fetch: ^2.6.7 - 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.1.0 - 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: ^2.0.0 - yml-loader: ^2.1.0 - yn: ^4.0.0 - zod: ^3.11.6 - peerDependencies: - "@microsoft/api-extractor": ^7.21.2 - peerDependenciesMeta: - "@microsoft/api-extractor": - optional: true - bin: - backstage-cli: bin/backstage-cli - checksum: e3e0a14a87be6add3adcc9d3a3f6d34064315e4a420a2ab97401f5074a0cce96c80908ffd9687db281581b5a459c8900b2683ae686ade38b24df22535296cc3f - languageName: node - linkType: hard - "@backstage/codemods@workspace:*, @backstage/codemods@workspace:packages/codemods": version: 0.0.0-use.local resolution: "@backstage/codemods@workspace:packages/codemods" @@ -3500,29 +3314,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/config-loader@npm:^1.1.3": - version: 1.1.3 - resolution: "@backstage/config-loader@npm:1.1.3" - dependencies: - "@backstage/cli-common": ^0.1.9 - "@backstage/config": ^1.0.1 - "@backstage/errors": ^1.1.0 - "@backstage/types": ^1.0.0 - "@types/json-schema": ^7.0.6 - ajv: ^8.10.0 - chokidar: ^3.5.2 - fs-extra: 10.1.0 - 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.54.0 - yaml: ^2.0.0 - yup: ^0.32.9 - checksum: b7467887a94977509ea1a95227521142318ea8c13f45c37959ed792668abf33e30377a79931f46891628389513c1459824fe6cb53a2dc8d5e6cb7abf57162371 - languageName: node - linkType: hard - "@backstage/config@^1.0.0, @backstage/config@^1.0.1, @backstage/config@workspace:packages/config": version: 0.0.0-use.local resolution: "@backstage/config@workspace:packages/config" @@ -3569,27 +3360,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-app-api@npm:^1.0.5": - version: 1.0.5 - resolution: "@backstage/core-app-api@npm:1.0.5" - dependencies: - "@backstage/config": ^1.0.1 - "@backstage/core-plugin-api": ^1.0.5 - "@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 - peerDependencies: - "@types/react": ^16.13.1 || ^17.0.0 - react: ^16.13.1 || ^17.0.0 - checksum: e5cb3ff2c7aefc19406f2895eeba5a9cf3f332b14ebfe4b5c304cc4e84d76f80c027d76ffa7fc2c4b6f856e8c534f689a1fe726f54fdf0d36017d909c1727aca - languageName: node - linkType: hard - "@backstage/core-components@^0.11.1-next.1, @backstage/core-components@^0.11.1-next.2, @backstage/core-components@workspace:packages/core-components": version: 0.0.0-use.local resolution: "@backstage/core-components@workspace:packages/core-components" @@ -3815,37 +3585,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/dev-utils@npm:^1.0.4": - version: 1.0.5 - resolution: "@backstage/dev-utils@npm:1.0.5" - dependencies: - "@backstage/app-defaults": ^1.0.5 - "@backstage/catalog-model": ^1.1.0 - "@backstage/core-app-api": ^1.0.5 - "@backstage/core-components": ^0.11.0 - "@backstage/core-plugin-api": ^1.0.5 - "@backstage/integration-react": ^1.1.3 - "@backstage/plugin-catalog-react": ^1.1.3 - "@backstage/test-utils": ^1.1.3 - "@backstage/theme": ^0.2.16 - "@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 - peerDependencies: - "@types/react": ^16.13.1 || ^17.0.0 - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 - checksum: 3d8787c91d38d9573b6084ce069c5e7fea55207b259fd9edd629ea9e2970bdc3858f680a1a637877e326af657134dfc5340545eca1b6d67fdcc2d3f703f4f665 - languageName: node - linkType: hard - "@backstage/errors@1.1.0, @backstage/errors@^1.0.0, @backstage/errors@^1.1.0, @backstage/errors@^1.1.0-next.0, @backstage/errors@workspace:packages/errors": version: 0.0.0-use.local resolution: "@backstage/errors@workspace:packages/errors" @@ -3884,7 +3623,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/integration-react@npm:^1.0.0, @backstage/integration-react@npm:^1.1.3": +"@backstage/integration-react@npm:^1.0.0": version: 1.1.3 resolution: "@backstage/integration-react@npm:1.1.3" dependencies: @@ -4408,8 +4147,8 @@ __metadata: dependencies: "@azure/arm-appservice": ^13.0.0 "@azure/identity": ^2.1.0 - "@backstage/backend-common": ^0.15.0 - "@backstage/cli": ^0.18.0 + "@backstage/backend-common": ^0.15.1-next.2 + "@backstage/cli": ^0.19.0-next.2 "@backstage/config": ^1.0.1 "@types/express": "*" "@types/supertest": ^2.0.8 @@ -4427,12 +4166,12 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-azure-functions@workspace:plugins/azure-functions" dependencies: - "@backstage/cli": ^0.18.0 - "@backstage/core-app-api": ^1.0.5 - "@backstage/core-components": ^0.11.0 - "@backstage/core-plugin-api": ^1.0.5 - "@backstage/dev-utils": ^1.0.4 - "@backstage/test-utils": ^1.1.3 + "@backstage/cli": ^0.19.0-next.2 + "@backstage/core-app-api": ^1.1.0-next.2 + "@backstage/core-components": ^0.11.1-next.2 + "@backstage/core-plugin-api": ^1.0.6-next.2 + "@backstage/dev-utils": ^1.0.6-next.1 + "@backstage/test-utils": ^1.2.0-next.2 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.9.13 "@material-ui/icons": ^4.9.1 @@ -7776,15 +7515,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/release-manifests@npm:^0.0.5": - version: 0.0.5 - resolution: "@backstage/release-manifests@npm:0.0.5" - dependencies: - cross-fetch: ^3.1.5 - checksum: 6e7a37d11a24fdbd99e45354c1703e12be691da37df27c752b3f1422c5d75ec89e45cc4808e9a2f98a37a525f4076428ec3cba2e9cdd579f4383b7f1ccdd564b - languageName: node - linkType: hard - "@backstage/test-utils@^1.2.0-next.1, @backstage/test-utils@^1.2.0-next.2, @backstage/test-utils@workspace:packages/test-utils": version: 0.0.0-use.local resolution: "@backstage/test-utils@workspace:packages/test-utils" @@ -7815,33 +7545,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/test-utils@npm:^1.1.3": - version: 1.1.3 - resolution: "@backstage/test-utils@npm:1.1.3" - dependencies: - "@backstage/config": ^1.0.1 - "@backstage/core-app-api": ^1.0.5 - "@backstage/core-plugin-api": ^1.0.5 - "@backstage/plugin-permission-common": ^0.6.3 - "@backstage/plugin-permission-react": ^0.4.4 - "@backstage/theme": ^0.2.16 - "@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 - peerDependencies: - "@types/react": ^16.13.1 || ^17.0.0 - react: ^16.13.1 || ^17.0.0 - checksum: c83feac65473848691abc7d8d40fd5e0f6e179387266810fc36c806d336c640255aada09f17f6568b6bb4a48bc030eb8810195edbaf6eff5c75207daf7e7adc5 - languageName: node - linkType: hard - "@backstage/theme@^0.2.15, @backstage/theme@^0.2.16, @backstage/theme@^0.2.6, @backstage/theme@^0.2.7, @backstage/theme@^0.2.9, @backstage/theme@workspace:packages/theme": version: 0.0.0-use.local resolution: "@backstage/theme@workspace:packages/theme" @@ -9433,33 +9136,6 @@ __metadata: languageName: node linkType: hard -"@hot-loader/react-dom-v16@npm:@hot-loader/react-dom@^16.0.2": - version: 16.14.0 - resolution: "@hot-loader/react-dom@npm:16.14.0" - dependencies: - loose-envify: ^1.1.0 - object-assign: ^4.1.1 - prop-types: ^15.6.2 - scheduler: ^0.19.1 - peerDependencies: - react: ^16.14.0 - checksum: 9362ef1dfcea97eb833983c3cfcd3bb813ef5cd7dc3f91ad4927fabbaf05db2b81751aaa98e5c233004081771ca5d5478bd648a9a969e08eb9cf1c6a1ee0de00 - languageName: node - linkType: hard - -"@hot-loader/react-dom-v17@npm:@hot-loader/react-dom@^17.0.2": - version: 17.0.2 - resolution: "@hot-loader/react-dom@npm:17.0.2" - dependencies: - loose-envify: ^1.1.0 - object-assign: ^4.1.1 - scheduler: ^0.20.2 - peerDependencies: - react: 17.0.2 - checksum: 180de3211aff1d60fd9d2a9130ba7977e2e356b1ecd2e7c50a98e6507bb7873f0523b44fa63142f0ffdc629d2933994f4add86e1f19288941f9d223bd28f5e48 - languageName: node - linkType: hard - "@humanwhocodes/config-array@npm:^0.10.4": version: 0.10.4 resolution: "@humanwhocodes/config-array@npm:0.10.4" @@ -22436,23 +22112,6 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-jest@npm:^26.1.2": - version: 26.9.0 - resolution: "eslint-plugin-jest@npm:26.9.0" - dependencies: - "@typescript-eslint/utils": ^5.10.0 - peerDependencies: - "@typescript-eslint/eslint-plugin": ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - "@typescript-eslint/eslint-plugin": - optional: true - jest: - optional: true - checksum: 6d5fd5c95368f1ca2640389aeb7ce703d6202493c3ec6bdedb4eaca37233710508b0c75829e727765a16fd27029a466d34202bc7f2811c752038ccbbce224400 - languageName: node - linkType: hard - "eslint-plugin-jest@npm:^27.0.0": version: 27.0.2 resolution: "eslint-plugin-jest@npm:27.0.2" @@ -24661,7 +24320,7 @@ __metadata: languageName: node linkType: hard -"global@npm:^4.3.0, global@npm:~4.4.0": +"global@npm:~4.4.0": version: 4.4.0 resolution: "global@npm:4.4.0" dependencies: @@ -25351,13 +25010,6 @@ __metadata: languageName: node linkType: hard -"helmet@npm:^5.0.2": - version: 5.1.1 - resolution: "helmet@npm:5.1.1" - checksum: b72ba26cc431804ad3b8ecdc18db95409a492cbb7a7e825efc27fc502b9433fec39fc083f2aad4fe7ed1a89a4287560b59f4435f9689eebbae6a2b61a1ec1b7d - languageName: node - linkType: hard - "helmet@npm:^6.0.0": version: 6.0.0 resolution: "helmet@npm:6.0.0" @@ -34225,7 +33877,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.0.0, prop-types@npm:^15.5.10, prop-types@npm:^15.5.7, prop-types@npm:^15.5.8, prop-types@npm:^15.6.0, prop-types@npm:^15.6.1, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": +"prop-types@npm:^15.0.0, prop-types@npm:^15.5.10, prop-types@npm:^15.5.7, prop-types@npm:^15.5.8, prop-types@npm:^15.6.0, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -34921,29 +34573,6 @@ __metadata: languageName: node linkType: hard -"react-hot-loader@npm:^4.13.0": - version: 4.13.0 - resolution: "react-hot-loader@npm:4.13.0" - dependencies: - fast-levenshtein: ^2.0.6 - global: ^4.3.0 - hoist-non-react-statics: ^3.3.0 - loader-utils: ^1.1.0 - prop-types: ^15.6.1 - react-lifecycles-compat: ^3.0.4 - shallowequal: ^1.1.0 - source-map: ^0.7.3 - peerDependencies: - "@types/react": "^15.0.0 || ^16.0.0 || ^17.0.0 " - react: "^15.0.0 || ^16.0.0 || ^17.0.0 " - react-dom: "^15.0.0 || ^16.0.0 || ^17.0.0 " - peerDependenciesMeta: - "@types/react": - optional: true - checksum: effdbf4644ce912ae20ad94be62083970c74b26a59fe24ed0024cf73190a5b3edf59650cb693bdd7b70791df8ab8530de273d73b895c4831a91da8a76683e3a3 - languageName: node - linkType: hard - "react-icons@npm:^4.4.0": version: 4.4.0 resolution: "react-icons@npm:4.4.0" @@ -40763,7 +40392,7 @@ __metadata: languageName: node linkType: hard -"webpack@npm:^5, webpack@npm:^5.66.0, webpack@npm:^5.70.0": +"webpack@npm:^5, webpack@npm:^5.70.0": version: 5.74.0 resolution: "webpack@npm:5.74.0" dependencies: From f9c209cabb8cabf1dbedc722cd5ff4ff4b99181c Mon Sep 17 00:00:00 2001 From: Wesley Date: Sun, 11 Sep 2022 14:50:00 +0200 Subject: [PATCH 004/278] yarn lint applied. Signed-off-by: Wesley --- plugins/azure-functions-backend/schema.d.ts | 16 ++++++++++++++++ .../src/api/AzureWebManagementApi.ts | 2 +- plugins/azure-functions-backend/src/api/types.ts | 16 ++++++++++++++++ .../src/service/router.ts | 2 +- plugins/azure-functions/dev/index.tsx | 16 ++++++++++++++++ plugins/azure-functions/package.json | 2 ++ plugins/azure-functions/src/api/types.ts | 16 ++++++++++++++++ .../AzureFunctionsOverview.tsx | 6 +++--- plugins/azure-functions/src/index.ts | 16 ++++++++++++++++ plugins/azure-functions/src/mocks/mocks.ts | 16 ++++++++++++++++ plugins/azure-functions/src/plugin.test.ts | 16 ++++++++++++++++ plugins/azure-functions/src/plugin.ts | 16 ++++++++++++++++ plugins/azure-functions/src/routes.ts | 16 ++++++++++++++++ plugins/azure-functions/src/setupTests.ts | 16 ++++++++++++++++ yarn.lock | 6 ++++-- 15 files changed, 171 insertions(+), 7 deletions(-) diff --git a/plugins/azure-functions-backend/schema.d.ts b/plugins/azure-functions-backend/schema.d.ts index a86aaad1a3..192aac8477 100644 --- a/plugins/azure-functions-backend/schema.d.ts +++ b/plugins/azure-functions-backend/schema.d.ts @@ -1,3 +1,19 @@ +/* + * 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 interface Config { azureFunctions: { /** @visibility backend */ diff --git a/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts b/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts index bc9dbbce12..bc8722c342 100644 --- a/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts +++ b/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts @@ -42,7 +42,7 @@ export class AzureWebManagementApi { constructor(private readonly config: AzureFunctionsConfig) { const creds = new ClientSecretCredential(config.tenantId, config.clientId, config.clientSecret); for (const subscription of config.allowedSubscriptions) { - if (!this.clients.some(c => c.subscriptionId == subscription.id)) { + if (!this.clients.some(c => c.subscriptionId === subscription.id)) { this.clients.push(new WebSiteManagementClient(creds, subscription.id)); } } diff --git a/plugins/azure-functions-backend/src/api/types.ts b/plugins/azure-functions-backend/src/api/types.ts index 6f6963a0af..7aa79aa081 100644 --- a/plugins/azure-functions-backend/src/api/types.ts +++ b/plugins/azure-functions-backend/src/api/types.ts @@ -1,3 +1,19 @@ +/* + * 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 interface AzureFunctionsAllowedSubscriptionsConfig { name: string; id: string; diff --git a/plugins/azure-functions-backend/src/service/router.ts b/plugins/azure-functions-backend/src/service/router.ts index ac07579a7c..03f4b30f42 100644 --- a/plugins/azure-functions-backend/src/service/router.ts +++ b/plugins/azure-functions-backend/src/service/router.ts @@ -39,7 +39,7 @@ export async function createRouter( response.send({ status: 'ok' }); }); router.get('/get', async (request, response) => { - response.json(await azureWebManagementApi.list({ functionName: request.query['functionName']!.toString() })) + response.json(await azureWebManagementApi.list({ functionName: request.query.functionName!.toString() })) }); router.use(errorHandler()); return router; diff --git a/plugins/azure-functions/dev/index.tsx b/plugins/azure-functions/dev/index.tsx index a46aa4c67b..d34ef19bc7 100644 --- a/plugins/azure-functions/dev/index.tsx +++ b/plugins/azure-functions/dev/index.tsx @@ -1,3 +1,19 @@ +/* + * 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 { createDevApp } from '@backstage/dev-utils'; import { azureFunctionsPlugin } from '../src/plugin'; diff --git a/plugins/azure-functions/package.json b/plugins/azure-functions/package.json index 1af6e63db2..a1276f977b 100644 --- a/plugins/azure-functions/package.json +++ b/plugins/azure-functions/package.json @@ -23,8 +23,10 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { + "@backstage/catalog-model": "workspace:^", "@backstage/core-components": "^0.11.1-next.2", "@backstage/core-plugin-api": "^1.0.6-next.2", + "@backstage/plugin-catalog-react": "workspace:^", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.9.1", diff --git a/plugins/azure-functions/src/api/types.ts b/plugins/azure-functions/src/api/types.ts index b3c2a2bd26..4e6e18df32 100644 --- a/plugins/azure-functions/src/api/types.ts +++ b/plugins/azure-functions/src/api/types.ts @@ -1,3 +1,19 @@ +/* + * 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 type FunctionsData = { href: string; logstreamHref: string; diff --git a/plugins/azure-functions/src/components/AzureFunctionsOverview/AzureFunctionsOverview.tsx b/plugins/azure-functions/src/components/AzureFunctionsOverview/AzureFunctionsOverview.tsx index 17d190e1a9..1a12086fee 100644 --- a/plugins/azure-functions/src/components/AzureFunctionsOverview/AzureFunctionsOverview.tsx +++ b/plugins/azure-functions/src/components/AzureFunctionsOverview/AzureFunctionsOverview.tsx @@ -29,7 +29,7 @@ import { useServiceEntityAnnotations, } from '../../hooks/useServiceEntityAnnotations'; import { MissingAnnotationEmptyState, Table, TableColumn } from '@backstage/core-components'; -import { FlashOn } from '@material-ui/icons' +import FlashOnIcon from '@material-ui/icons/FlashOn' import ErrorBoundary from '../ErrorBoundary'; import { useEntity } from '@backstage/plugin-catalog-react'; @@ -107,7 +107,7 @@ const OverviewComponent = ({ data, loading }: FunctionTableProps) => {
- + Azure Functions @@ -135,7 +135,7 @@ const AzureFunctionsOverview = ({ entity }: { entity: Entity }) => { }); return ( - <>{} + <> ); }; diff --git a/plugins/azure-functions/src/index.ts b/plugins/azure-functions/src/index.ts index 6b7079ad36..4d359dc0a2 100644 --- a/plugins/azure-functions/src/index.ts +++ b/plugins/azure-functions/src/index.ts @@ -1,3 +1,19 @@ +/* + * 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 './plugin'; export * from './api'; export * from './components/AzureFunctionsOverview/AzureFunctionsOverview'; \ No newline at end of file diff --git a/plugins/azure-functions/src/mocks/mocks.ts b/plugins/azure-functions/src/mocks/mocks.ts index 487a4b1f5d..053fe27b54 100644 --- a/plugins/azure-functions/src/mocks/mocks.ts +++ b/plugins/azure-functions/src/mocks/mocks.ts @@ -1,3 +1,19 @@ +/* + * 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 const entityMock = { metadata: { namespace: 'default', diff --git a/plugins/azure-functions/src/plugin.test.ts b/plugins/azure-functions/src/plugin.test.ts index 84dce9eed8..9e6c04708d 100644 --- a/plugins/azure-functions/src/plugin.test.ts +++ b/plugins/azure-functions/src/plugin.test.ts @@ -1,3 +1,19 @@ +/* + * 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 { azureFunctionsPlugin } from './plugin'; describe('azure-functions', () => { diff --git a/plugins/azure-functions/src/plugin.ts b/plugins/azure-functions/src/plugin.ts index e796eebbfc..b0945f8c5d 100644 --- a/plugins/azure-functions/src/plugin.ts +++ b/plugins/azure-functions/src/plugin.ts @@ -1,3 +1,19 @@ +/* + * 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 { createApiFactory, createComponentExtension, diff --git a/plugins/azure-functions/src/routes.ts b/plugins/azure-functions/src/routes.ts index d775ceb7b0..61234c4da5 100644 --- a/plugins/azure-functions/src/routes.ts +++ b/plugins/azure-functions/src/routes.ts @@ -1,3 +1,19 @@ +/* + * 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 { createRouteRef } from '@backstage/core-plugin-api'; export const rootRouteRef = createRouteRef({ diff --git a/plugins/azure-functions/src/setupTests.ts b/plugins/azure-functions/src/setupTests.ts index 48c09b5346..2b5b615b19 100644 --- a/plugins/azure-functions/src/setupTests.ts +++ b/plugins/azure-functions/src/setupTests.ts @@ -1,2 +1,18 @@ +/* + * 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 '@testing-library/jest-dom'; import 'cross-fetch/polyfill'; diff --git a/yarn.lock b/yarn.lock index 69069ce652..e9090f7e0c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3100,7 +3100,7 @@ __metadata: languageName: node linkType: hard -"@backstage/catalog-model@^1.0.0, @backstage/catalog-model@^1.0.1, @backstage/catalog-model@^1.0.3, @backstage/catalog-model@^1.1.0, @backstage/catalog-model@workspace:packages/catalog-model": +"@backstage/catalog-model@^1.0.0, @backstage/catalog-model@^1.0.1, @backstage/catalog-model@^1.0.3, @backstage/catalog-model@^1.1.0, @backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model": version: 0.0.0-use.local resolution: "@backstage/catalog-model@workspace:packages/catalog-model" dependencies: @@ -4166,11 +4166,13 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-azure-functions@workspace:plugins/azure-functions" dependencies: + "@backstage/catalog-model": "workspace:^" "@backstage/cli": ^0.19.0-next.2 "@backstage/core-app-api": ^1.1.0-next.2 "@backstage/core-components": ^0.11.1-next.2 "@backstage/core-plugin-api": ^1.0.6-next.2 "@backstage/dev-utils": ^1.0.6-next.1 + "@backstage/plugin-catalog-react": "workspace:^" "@backstage/test-utils": ^1.2.0-next.2 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.9.13 @@ -4765,7 +4767,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-react@^1.1.4-next.0, @backstage/plugin-catalog-react@^1.1.4-next.1, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": +"@backstage/plugin-catalog-react@^1.1.4-next.0, @backstage/plugin-catalog-react@^1.1.4-next.1, @backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-react@workspace:plugins/catalog-react" dependencies: From 2ccdc3b6d46a4e38dbdc2d3cc7d14df10ec7d9ec Mon Sep 17 00:00:00 2001 From: Wesley Date: Sun, 11 Sep 2022 14:59:19 +0200 Subject: [PATCH 005/278] update package.json yet again :\ Signed-off-by: Wesley --- plugins/azure-functions/package.json | 4 ++-- yarn.lock | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/plugins/azure-functions/package.json b/plugins/azure-functions/package.json index a1276f977b..478f19acf5 100644 --- a/plugins/azure-functions/package.json +++ b/plugins/azure-functions/package.json @@ -23,10 +23,10 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/catalog-model": "workspace:^", + "@backstage/catalog-model": "^1.1.0", "@backstage/core-components": "^0.11.1-next.2", "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/plugin-catalog-react": "workspace:^", + "@backstage/plugin-catalog-react": "^1.1.4-next.1", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.9.1", diff --git a/yarn.lock b/yarn.lock index e9090f7e0c..2fa9cbf8fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3100,7 +3100,7 @@ __metadata: languageName: node linkType: hard -"@backstage/catalog-model@^1.0.0, @backstage/catalog-model@^1.0.1, @backstage/catalog-model@^1.0.3, @backstage/catalog-model@^1.1.0, @backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model": +"@backstage/catalog-model@^1.0.0, @backstage/catalog-model@^1.0.1, @backstage/catalog-model@^1.0.3, @backstage/catalog-model@^1.1.0, @backstage/catalog-model@workspace:packages/catalog-model": version: 0.0.0-use.local resolution: "@backstage/catalog-model@workspace:packages/catalog-model" dependencies: @@ -4166,13 +4166,13 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-azure-functions@workspace:plugins/azure-functions" dependencies: - "@backstage/catalog-model": "workspace:^" + "@backstage/catalog-model": ^1.1.0 "@backstage/cli": ^0.19.0-next.2 "@backstage/core-app-api": ^1.1.0-next.2 "@backstage/core-components": ^0.11.1-next.2 "@backstage/core-plugin-api": ^1.0.6-next.2 "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-catalog-react": "workspace:^" + "@backstage/plugin-catalog-react": ^1.1.4-next.1 "@backstage/test-utils": ^1.2.0-next.2 "@backstage/theme": ^0.2.16 "@material-ui/core": ^4.9.13 @@ -4767,7 +4767,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-react@^1.1.4-next.0, @backstage/plugin-catalog-react@^1.1.4-next.1, @backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": +"@backstage/plugin-catalog-react@^1.1.4-next.0, @backstage/plugin-catalog-react@^1.1.4-next.1, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-react@workspace:plugins/catalog-react" dependencies: From 5a60e265dc46246f054c25bd8740289382cfc1da Mon Sep 17 00:00:00 2001 From: Wesley Date: Sun, 11 Sep 2022 20:38:55 +0200 Subject: [PATCH 006/278] refactor table to own component. unit test the table Signed-off-by: Wesley --- .../src/service/router.ts | 4 +- .../src/api/AzureFunctionsBackendClient.ts | 7 +- .../AzureFunctionsOverview.tsx | 56 +++++ .../OverviewTable.test.tsx} | 24 +- .../OverviewTable.tsx} | 43 +--- plugins/azure-functions/src/index.ts | 2 +- plugins/azure-functions/src/mocks/mocks.ts | 230 +----------------- plugins/azure-functions/src/plugin.ts | 2 +- 8 files changed, 88 insertions(+), 280 deletions(-) create mode 100644 plugins/azure-functions/src/components/AzureFunctionsOverviewComponent/AzureFunctionsOverview.tsx rename plugins/azure-functions/src/components/{AzureFunctionsOverview/AzureFunctionsOverview.test.tsx => OverviewTableComponent/OverviewTable.test.tsx} (73%) rename plugins/azure-functions/src/components/{AzureFunctionsOverview/AzureFunctionsOverview.tsx => OverviewTableComponent/OverviewTable.tsx} (68%) diff --git a/plugins/azure-functions-backend/src/service/router.ts b/plugins/azure-functions-backend/src/service/router.ts index 03f4b30f42..9d23a1294a 100644 --- a/plugins/azure-functions-backend/src/service/router.ts +++ b/plugins/azure-functions-backend/src/service/router.ts @@ -38,8 +38,8 @@ export async function createRouter( logger.info('PONG!'); response.send({ status: 'ok' }); }); - router.get('/get', async (request, response) => { - response.json(await azureWebManagementApi.list({ functionName: request.query.functionName!.toString() })) + router.post('/list', async (request, response) => { + response.json(await azureWebManagementApi.list({ functionName: request.body.functionName!.toString() })) }); router.use(errorHandler()); return router; diff --git a/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts b/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts index e7b5506c44..056528c946 100644 --- a/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts +++ b/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts @@ -36,14 +36,15 @@ export class AzureFunctionsBackendClient implements AzureFunctionsApi { functionName: string; }): Promise { try { - const url = `${await this.discoveryApi.getBaseUrl('azure-functions')}/get?functionName=${functionName}`; + const url = `${await this.discoveryApi.getBaseUrl('azure-functions')}/list`; const { token: idToken } = await this.identityApi.getCredentials(); const response = await fetch(url, { - method: 'GET', + method: 'POST', headers: { 'Content-Type': 'application/json', ...(idToken && { Authorization: `Bearer ${idToken}` }), - } + }, + body: JSON.stringify({ functionName: functionName }) }); return await response.json(); } catch (e: any) { diff --git a/plugins/azure-functions/src/components/AzureFunctionsOverviewComponent/AzureFunctionsOverview.tsx b/plugins/azure-functions/src/components/AzureFunctionsOverviewComponent/AzureFunctionsOverview.tsx new file mode 100644 index 0000000000..2198940c31 --- /dev/null +++ b/plugins/azure-functions/src/components/AzureFunctionsOverviewComponent/AzureFunctionsOverview.tsx @@ -0,0 +1,56 @@ +/* + * 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 React from 'react'; +import { Entity } from '@backstage/catalog-model'; +import { useFunctions } from '../../hooks/useFunctions'; +import { + AZURE_FUNCTIONS_ANNOTATION, + useServiceEntityAnnotations, +} from '../../hooks/useServiceEntityAnnotations'; +import { MissingAnnotationEmptyState } from '@backstage/core-components'; +import ErrorBoundary from '../ErrorBoundary'; +import { useEntity } from '@backstage/plugin-catalog-react'; +import { OverviewTable } from '../OverviewTableComponent/OverviewTable'; + +export const isAzureFunctionsAvailable = (entity: Entity) => + entity?.metadata.annotations?.[AZURE_FUNCTIONS_ANNOTATION]; + +const AzureFunctionsOverview = ({ entity }: { entity: Entity }) => { + const { functionsName } = useServiceEntityAnnotations(entity); + + const [functionsData] = useFunctions({ + functionsName + }); + + return ( + <> + ); +}; + +export const AzureFunctionsOverviewWidget = () => { + const { entity } = useEntity(); + + if (!isAzureFunctionsAvailable(entity)) { + return (); + } + + return ( + + + + ) +}; diff --git a/plugins/azure-functions/src/components/AzureFunctionsOverview/AzureFunctionsOverview.test.tsx b/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.test.tsx similarity index 73% rename from plugins/azure-functions/src/components/AzureFunctionsOverview/AzureFunctionsOverview.test.tsx rename to plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.test.tsx index aef10a113e..7a3ae48d7d 100644 --- a/plugins/azure-functions/src/components/AzureFunctionsOverview/AzureFunctionsOverview.test.tsx +++ b/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.test.tsx @@ -27,13 +27,12 @@ import { setupRequestMockHandlers, TestApiProvider, } from '@backstage/test-utils'; -import { EntityProvider } from '@backstage/plugin-catalog-react'; import { setupServer } from 'msw/node'; import { - entityMock, functionResponseMock, } from '../../mocks/mocks'; -import { azureFunctionsApiRef, AzureFunctionsOverviewWidget } from '../..'; +import { azureFunctionsApiRef } from '../..'; +import { OverviewTable } from './OverviewTable'; const errorApiMock = { post: jest.fn(), error$: jest.fn() }; const identityApiMock = (getCredentials: any) => ({ @@ -61,9 +60,11 @@ describe('AzureFunctionsOverviewWidget', () => { beforeEach(() => { worker.use( - rest.get( - 'https://portal.azure.com/#@test/resource/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/mock_rg/providers/Microsoft.Web/sites/func-mock', - (_, res, ctx) => res(ctx.json(functionResponseMock)), + rest.post( + '/list', + (_, res, ctx) => { + res(ctx.json(functionResponseMock)); + }, ), ); }); @@ -71,20 +72,19 @@ describe('AzureFunctionsOverviewWidget', () => { it('should display an overview table with the data from the requests', async () => { const rendered = render( - - - + , ); + expect( - await rendered.findByText(functionResponseMock.name), + await rendered.findByText(functionResponseMock.functionName), ).toBeInTheDocument(); expect( - await rendered.findByText(functionResponseMock.properties.state), + await rendered.findByText(functionResponseMock.state), ).toBeInTheDocument(); expect( await rendered.findByText( - new Date(functionResponseMock.properties.lastModifiedTimeUtc).toUTCString(), + new Date(functionResponseMock.lastModifiedDate).toUTCString(), ), ).toBeInTheDocument(); }); diff --git a/plugins/azure-functions/src/components/AzureFunctionsOverview/AzureFunctionsOverview.tsx b/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx similarity index 68% rename from plugins/azure-functions/src/components/AzureFunctionsOverview/AzureFunctionsOverview.tsx rename to plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx index 1a12086fee..8ecb2a3ac9 100644 --- a/plugins/azure-functions/src/components/AzureFunctionsOverview/AzureFunctionsOverview.tsx +++ b/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx @@ -21,17 +21,9 @@ import { Link, LinearProgress } from '@material-ui/core'; -import { Entity } from '@backstage/catalog-model'; -import { useFunctions } from '../../hooks/useFunctions'; import { FunctionsData } from '../../api/types'; -import { - AZURE_FUNCTIONS_ANNOTATION, - useServiceEntityAnnotations, -} from '../../hooks/useServiceEntityAnnotations'; -import { MissingAnnotationEmptyState, Table, TableColumn } from '@backstage/core-components'; +import { Table, TableColumn } from '@backstage/core-components'; import FlashOnIcon from '@material-ui/icons/FlashOn' -import ErrorBoundary from '../ErrorBoundary'; -import { useEntity } from '@backstage/plugin-catalog-react'; type States = 'Waiting' | 'Running' | 'Paused' | 'Failed'; @@ -59,8 +51,6 @@ const State = ({ value }: { value: States }) => { ); }; - - type FunctionTableProps = { data: FunctionsData[]; loading: boolean; @@ -95,7 +85,7 @@ const DEFAULT_COLUMNS: TableColumn[] = [ }, ]; -const OverviewComponent = ({ data, loading }: FunctionTableProps) => { +export const OverviewTable = ({ data, loading }: FunctionTableProps) => { const columns: TableColumn[] = [...DEFAULT_COLUMNS]; const tableStyle = { minWidth: '0', @@ -123,32 +113,3 @@ const OverviewComponent = ({ data, loading }: FunctionTableProps) => { ); }; - -export const isAzureFunctionsAvailable = (entity: Entity) => - entity?.metadata.annotations?.[AZURE_FUNCTIONS_ANNOTATION]; - -const AzureFunctionsOverview = ({ entity }: { entity: Entity }) => { - const { functionsName } = useServiceEntityAnnotations(entity); - - const [functionsData] = useFunctions({ - functionsName - }); - - return ( - <> - ); -}; - -export const AzureFunctionsOverviewWidget = () => { - const { entity } = useEntity(); - - if (!isAzureFunctionsAvailable(entity)) { - return (); - } - - return ( - - - - ) -}; diff --git a/plugins/azure-functions/src/index.ts b/plugins/azure-functions/src/index.ts index 4d359dc0a2..7b091198ee 100644 --- a/plugins/azure-functions/src/index.ts +++ b/plugins/azure-functions/src/index.ts @@ -16,4 +16,4 @@ export * from './plugin'; export * from './api'; -export * from './components/AzureFunctionsOverview/AzureFunctionsOverview'; \ No newline at end of file +export * from './components/AzureFunctionsOverviewComponent/AzureFunctionsOverview'; \ No newline at end of file diff --git a/plugins/azure-functions/src/mocks/mocks.ts b/plugins/azure-functions/src/mocks/mocks.ts index 053fe27b54..9e601fda11 100644 --- a/plugins/azure-functions/src/mocks/mocks.ts +++ b/plugins/azure-functions/src/mocks/mocks.ts @@ -14,6 +14,8 @@ * limitations under the License. */ +import { FunctionsData } from "../api"; + export const entityMock = { metadata: { namespace: 'default', @@ -35,225 +37,13 @@ export const entityMock = { }; // https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Web/sites/{{functionsName}}?api-version=2022-03-01 -export const functionResponseMock = { - id: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg_mock/providers/Microsoft.Web/sites/func-mock", - name: "func-mock", - type: "Microsoft.Web/sites", - kind: "functionapp", +export const functionResponseMock: FunctionsData = { + functionName: "func-mock", location: "West Europe", - tags: {}, - properties: { - name: "func-mock", - state: "Running", - hostNames: [ - "func-mock.azurewebsites.net" - ], - webSpace: "rg_mock-WestEuropewebspace", - selfLink: "https://mockurl.api.azurewebsites.windows.net:454/subscriptions/00000000-0000-0000-0000-000000000000/webspaces/rg_mock-WestEuropewebspace/sites/func-mock", - repositorySiteName: "func-mock", - owner: null, - usageState: "Normal", - enabled: true, - adminEnabled: true, - enabledHostNames: [ - "func-mock.azurewebsites.net", - "func-mock.scm.azurewebsites.net" - ], - siteProperties: { - metadata: null, - properties: [ - { - name: "LinuxFxVersion", - value: "" - }, - { - name: "WindowsFxVersion", - value: null - } - ], - appSettings: null - }, - availabilityState: "Normal", - sslCertificates: null, - csrs: [], - cers: null, - siteMode: null, - hostNameSslStates: [ - { - name: "func-mock.azurewebsites.net", - sslState: "Disabled", - ipBasedSslResult: null, - virtualIP: null, - thumbprint: null, - toUpdate: null, - toUpdateIpBasedSsl: null, - ipBasedSslState: "NotConfigured", - hostType: "Standard" - }, - { - name: "func-mock.scm.azurewebsites.net", - sslState: "Disabled", - ipBasedSslResult: null, - virtualIP: null, - thumbprint: null, - toUpdate: null, - toUpdateIpBasedSsl: null, - ipBasedSslState: "NotConfigured", - hostType: "Repository" - } - ], - computeMode: null, - serverFarm: null, - serverFarmId: "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/rg_mock/providers/Microsoft.Web/serverfarms/plan-mock", - reserved: false, - isXenon: false, - hyperV: false, - lastModifiedTimeUtc: "2022-09-02T11:09:58.9033333", - storageRecoveryDefaultState: "Running", - contentAvailabilityState: "Normal", - runtimeAvailabilityState: "Normal", - secretsCollection: [], - vnetRouteAllEnabled: false, - containerAllocationSubnet: null, - useContainerLocalhostBindings: null, - vnetImagePullEnabled: false, - vnetContentShareEnabled: false, - siteConfig: { - numberOfWorkers: 1, - defaultDocuments: null, - netFrameworkVersion: null, - phpVersion: null, - pythonVersion: null, - nodeVersion: null, - powerShellVersion: null, - linuxFxVersion: "", - windowsFxVersion: null, - requestTracingEnabled: null, - remoteDebuggingEnabled: null, - remoteDebuggingVersion: null, - httpLoggingEnabled: null, - azureMonitorLogCategories: null, - acrUseManagedIdentityCreds: false, - acrUserManagedIdentityID: null, - logsDirectorySizeLimit: null, - detailedErrorLoggingEnabled: null, - publishingUsername: null, - publishingPassword: null, - appSettings: null, - metadata: null, - connectionStrings: null, - machineKey: null, - handlerMappings: null, - documentRoot: null, - scmType: null, - use32BitWorkerProcess: null, - webSocketsEnabled: null, - alwaysOn: true, - javaVersion: null, - javaContainer: null, - javaContainerVersion: null, - appCommandLine: null, - managedPipelineMode: null, - virtualApplications: null, - winAuthAdminState: null, - winAuthTenantState: null, - customAppPoolIdentityAdminState: null, - customAppPoolIdentityTenantState: null, - runtimeADUser: null, - runtimeADUserPassword: null, - loadBalancing: null, - routingRules: null, - experiments: null, - limits: null, - autoHealEnabled: null, - autoHealRules: null, - tracingOptions: null, - vnetName: null, - vnetRouteAllEnabled: null, - vnetPrivatePortsCount: null, - publicNetworkAccess: null, - cors: null, - push: null, - apiDefinition: null, - apiManagementConfig: null, - autoSwapSlotName: null, - localMySqlEnabled: null, - managedServiceIdentityId: null, - xManagedServiceIdentityId: null, - keyVaultReferenceIdentity: null, - ipSecurityRestrictions: null, - ipSecurityRestrictionsDefaultAction: null, - scmIpSecurityRestrictions: null, - scmIpSecurityRestrictionsDefaultAction: null, - scmIpSecurityRestrictionsUseMain: null, - http20Enabled: false, - minTlsVersion: null, - minTlsCipherSuite: null, - supportedTlsCipherSuites: null, - scmMinTlsVersion: null, - ftpsState: null, - preWarmedInstanceCount: null, - functionAppScaleLimit: 0, - elasticWebAppScaleLimit: null, - healthCheckPath: null, - fileChangeAuditEnabled: null, - functionsRuntimeScaleMonitoringEnabled: null, - websiteTimeZone: null, - minimumElasticInstanceCount: 1, - azureStorageAccounts: null, - http20ProxyFlag: null, - sitePort: null, - antivirusScanEnabled: null, - storageType: null - }, - deploymentId: "func-mock", - slotName: null, - trafficManagerHostNames: null, - sku: "Standard", - scmSiteAlsoStopped: false, - targetSwapSlot: null, - hostingEnvironment: null, - hostingEnvironmentProfile: null, - clientAffinityEnabled: false, - clientCertEnabled: false, - clientCertMode: "Required", - clientCertExclusionPaths: null, - hostNamesDisabled: false, - domainVerificationIdentifiers: null, - customDomainVerificationId: "", - kind: "functionapp", - inboundIpAddress: "", - possibleInboundIpAddresses: "", - ftpUsername: "func-mock\\$func-mock", - ftpsHostName: "ftps://mockurl.ftp.azurewebsites.windows.net/site/wwwroot", - outboundIpAddresses: "", - possibleOutboundIpAddresses: "", - containerSize: 1536, - dailyMemoryTimeQuota: 0, - suspendedTill: null, - siteDisabledReason: 0, - functionExecutionUnitsCache: null, - maxNumberOfWorkers: null, - homeStamp: "mockurl", - cloningInfo: null, - hostingEnvironmentId: null, - tags: {}, - resourceGroup: "rg_mock", - defaultHostName: "func-mock.azurewebsites.net", - slotSwapStatus: null, - httpsOnly: false, - redundancyMode: "None", - inProgressOperationId: null, - geoDistributions: null, - privateEndpointConnections: [], - publicNetworkAccess: null, - buildVersion: null, - targetBuildVersion: null, - migrationState: null, - eligibleLogCategories: "FunctionAppLogs", - storageAccountRequired: false, - virtualNetworkSubnetId: null, - keyVaultReferenceIdentity: "SystemAssigned", - privateLinkIdentifiers: null - } + state: "Running", + href: "https://mockurl.api.azurewebsites.windows.net:454/subscriptions/00000000-0000-0000-0000-000000000000/webspaces/rg_mock-WestEuropewebspace/sites/func-mock", + logstreamHref: "https://mockurl.api.azurewebsites.windows.net:454/subscriptions/00000000-0000-0000-0000-000000000000/webspaces/rg_mock-WestEuropewebspace/sites/func-mock/logStream", + usageState: "Normal", + lastModifiedDate: new Date("2022-09-02T11:09:58.9033333"), + containerSize: 100 }; diff --git a/plugins/azure-functions/src/plugin.ts b/plugins/azure-functions/src/plugin.ts index b0945f8c5d..b3e905e6af 100644 --- a/plugins/azure-functions/src/plugin.ts +++ b/plugins/azure-functions/src/plugin.ts @@ -51,7 +51,7 @@ export const EntityAzureFunctionsOverviewCard = azureFunctionsPlugin.provide( name: 'EntityAzureFunctionsOverviewCard', component: { lazy: () => - import('./components/AzureFunctionsOverview/AzureFunctionsOverview').then( + import('./components/AzureFunctionsOverviewComponent/AzureFunctionsOverview').then( m => m.AzureFunctionsOverviewWidget, ), }, From 4a75ce761caeaffc1a449823bee9660acdb224f8 Mon Sep 17 00:00:00 2001 From: Wesley Date: Mon, 12 Sep 2022 04:06:43 +0200 Subject: [PATCH 007/278] PR feedback applied. Signed-off-by: Wesley --- .changeset/pre.json | 2 -- .changeset/tasty-colts-hug.md | 6 ++++++ plugins/azure-functions/src/hooks/useFunctions.ts | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 .changeset/tasty-colts-hug.md diff --git a/.changeset/pre.json b/.changeset/pre.json index 552d1f96d3..96664632fd 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -52,8 +52,6 @@ "@backstage/plugin-azure-devops": "0.1.24", "@backstage/plugin-azure-devops-backend": "0.3.14", "@backstage/plugin-azure-devops-common": "0.2.4", - "@backstage/plugin-azure-functions": "0.1.0", - "@backstage/plugin-azure-functions-backend": "0.1.0", "@backstage/plugin-badges": "0.2.32", "@backstage/plugin-badges-backend": "0.1.29", "@backstage/plugin-bazaar": "0.1.23", diff --git a/.changeset/tasty-colts-hug.md b/.changeset/tasty-colts-hug.md new file mode 100644 index 0000000000..942f766a6e --- /dev/null +++ b/.changeset/tasty-colts-hug.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-azure-functions': major +'@backstage/plugin-azure-functions-backend': major +--- + +Azure Functions Plugin support based on annotation supplied by the entity. diff --git a/plugins/azure-functions/src/hooks/useFunctions.ts b/plugins/azure-functions/src/hooks/useFunctions.ts index a5a9c11f98..9ed47f7997 100644 --- a/plugins/azure-functions/src/hooks/useFunctions.ts +++ b/plugins/azure-functions/src/hooks/useFunctions.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { useAsyncRetry } from 'react-use'; +import useAsyncRetry from 'react-use/lib/useAsyncRetry'; import { useApi, errorApiRef, From b518ac451e8bb33c1b3295daad2c5fe7f3b66120 Mon Sep 17 00:00:00 2001 From: Wesley Date: Mon, 12 Sep 2022 05:03:33 +0200 Subject: [PATCH 008/278] yarn run prettier --write applied Signed-off-by: Wesley --- plugins/azure-functions-backend/README.md | 71 +++++----- plugins/azure-functions-backend/schema.d.ts | 36 ++--- .../src/api/AzureWebManagementApi.ts | 133 ++++++++++-------- .../azure-functions-backend/src/api/index.ts | 7 +- .../azure-functions-backend/src/api/types.ts | 22 +-- plugins/azure-functions-backend/src/index.ts | 2 +- .../src/service/router.ts | 6 +- .../src/service/standaloneServer.ts | 9 +- plugins/azure-functions/README.md | 4 +- plugins/azure-functions/dev/index.tsx | 4 +- .../src/api/AzureFunctionsBackendClient.ts | 9 +- plugins/azure-functions/src/api/index.ts | 2 +- plugins/azure-functions/src/api/types.ts | 18 +-- .../AzureFunctionsOverview.tsx | 15 +- .../OverviewTable.test.tsx | 15 +- .../OverviewTableComponent/OverviewTable.tsx | 28 ++-- .../azure-functions/src/hooks/useFunctions.ts | 11 +- .../src/hooks/useServiceEntityAnnotations.ts | 2 +- plugins/azure-functions/src/index.ts | 2 +- plugins/azure-functions/src/mocks/mocks.ts | 22 +-- plugins/azure-functions/src/plugin.ts | 12 +- 21 files changed, 232 insertions(+), 198 deletions(-) diff --git a/plugins/azure-functions-backend/README.md b/plugins/azure-functions-backend/README.md index 5bfc6a1062..abe1a7b148 100644 --- a/plugins/azure-functions-backend/README.md +++ b/plugins/azure-functions-backend/README.md @@ -2,7 +2,7 @@ Simple plugin that proxies requests to the Azure Portal API through Azure SDK JavaScript libraries. -*Inspired by [roadie.io AWS Lamda plugin](https://roadie.io/backstage/plugins/aws-lambda/)* +_Inspired by [roadie.io AWS Lamda plugin](https://roadie.io/backstage/plugins/aws-lambda/)_ ## Setup @@ -36,47 +36,52 @@ Here's how to get the backend plugin up and running: 1. First we need to add the `@backstage/plugin-azure-functions-backend` package to your backend: - ```sh - # From the Backstage root directory - cd packages/backend - yarn add @backstage/plugin-azure-functions-backend - ``` + ```sh + # From the Backstage root directory + cd packages/backend + yarn add @backstage/plugin-azure-functions-backend + ``` 2. Then we will create a new file named `packages/backend/src/plugins/azure-functions.ts`, and add the following to it: - ```ts - import { createRouter, AzureWebManagementApi } from '@backstage/plugin-azure-functions-backend'; - import { Router } from 'express'; - import { PluginEnvironment } from '../types'; + ```ts + import { + createRouter, + AzureWebManagementApi, + } from '@backstage/plugin-azure-functions-backend'; + import { Router } from 'express'; + import { PluginEnvironment } from '../types'; - export default async function createPlugin( - env: PluginEnvironment, - ): Promise { - return await createRouter({ - logger: env.logger, - azureWebManagementApi: AzureWebManagementApi.fromConfig(env.config) - }); - } - ``` + export default async function createPlugin( + env: PluginEnvironment, + ): Promise { + return await createRouter({ + logger: env.logger, + azureWebManagementApi: AzureWebManagementApi.fromConfig(env.config), + }); + } + ``` 3. Next we wire this into the overall backend router, edit `packages/backend/src/index.ts`: - ```ts - import azureFunctions from './plugins/azure-functions'; + ```ts + import azureFunctions from './plugins/azure-functions'; - // Removed for clairty... + // Removed for clairty... - async function main() { - // ... - // Add this line under the other lines that follow the useHotMemoize pattern - const azureFunctionsEnv = useHotMemoize(module, () => createEnv('azureFunctions')); - - // ... - // Insert this line under the other lines that add their routers to apiRouter in the same way - apiRouter.use('/azure-functions', await azureFunctions(azureFunctionsEnv)); - } - ``` + async function main() { + // ... + // Add this line under the other lines that follow the useHotMemoize pattern + const azureFunctionsEnv = useHotMemoize(module, () => + createEnv('azureFunctions'), + ); + + // ... + // Insert this line under the other lines that add their routers to apiRouter in the same way + apiRouter.use('/azure-functions', await azureFunctions(azureFunctionsEnv)); + } + ``` 4. Now run `yarn start-backend` from the repo root. -5. Finally, open `http://localhost:7007/api/azure-functions/health` in a browser, it should return `{"status":"ok"}`. \ No newline at end of file +5. Finally, open `http://localhost:7007/api/azure-functions/health` in a browser, it should return `{"status":"ok"}`. diff --git a/plugins/azure-functions-backend/schema.d.ts b/plugins/azure-functions-backend/schema.d.ts index 192aac8477..529665c1eb 100644 --- a/plugins/azure-functions-backend/schema.d.ts +++ b/plugins/azure-functions-backend/schema.d.ts @@ -15,21 +15,23 @@ */ export interface Config { - azureFunctions: { + azureFunctions: { + /** @visibility backend */ + tenantId: string; + /** @visibility backend */ + clientId: string; + /** @visibility secret */ + clientSecret: string; + /** @visibility backend */ + domain: string; + /** @visibility backend */ + allowedSubscriptions: [ + { + /** @visibility backend */ + name: string; /** @visibility backend */ - tenantId: string; - /** @visibility backend */ - clientId: string; - /** @visibility secret */ - clientSecret: string; - /** @visibility backend */ - domain: string; - /** @visibility backend */ - allowedSubscriptions: [{ - /** @visibility backend */ - name: string; - /** @visibility backend */ - id: string; - }] - }; -} \ No newline at end of file + id: string; + }, + ]; + }; +} diff --git a/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts b/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts index bc8722c342..a756130977 100644 --- a/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts +++ b/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts @@ -17,69 +17,90 @@ import { Config } from '@backstage/config'; import { ClientSecretCredential } from '@azure/identity'; import { WebSiteManagementClient } from '@azure/arm-appservice'; -import { AzureFunctionsAllowedSubscriptionsConfig, FunctionsData } from './types'; +import { + AzureFunctionsAllowedSubscriptionsConfig, + FunctionsData, +} from './types'; export class AzureFunctionsConfig { - constructor(public readonly tenantId: string, public readonly clientId: string, public readonly clientSecret: string, public readonly domain: string, public readonly allowedSubscriptions: AzureFunctionsAllowedSubscriptionsConfig[]) { } + constructor( + public readonly tenantId: string, + public readonly clientId: string, + public readonly clientSecret: string, + public readonly domain: string, + public readonly allowedSubscriptions: AzureFunctionsAllowedSubscriptionsConfig[], + ) {} - static fromConfig(config: Config): AzureFunctionsConfig { - const azfConfig = config.getConfig('azureFunctions'); + static fromConfig(config: Config): AzureFunctionsConfig { + const azfConfig = config.getConfig('azureFunctions'); - return new AzureFunctionsConfig( - azfConfig.getString('tenantId'), - azfConfig.getString('clientId'), - azfConfig.getString('clientSecret'), - azfConfig.getString('domain'), - azfConfig.getConfigArray('allowedSubscriptions').map(as => ({ id: as.getString('id'), name: as.getString('name') })) - ) - } + return new AzureFunctionsConfig( + azfConfig.getString('tenantId'), + azfConfig.getString('clientId'), + azfConfig.getString('clientSecret'), + azfConfig.getString('domain'), + azfConfig + .getConfigArray('allowedSubscriptions') + .map(as => ({ + id: as.getString('id'), + name: as.getString('name'), + })), + ); + } } export class AzureWebManagementApi { - private readonly baseHref = (domain: string) => `https://portal.azure.com/#@${domain}/resource`; - private readonly clients: WebSiteManagementClient[] = []; + private readonly baseHref = (domain: string) => + `https://portal.azure.com/#@${domain}/resource`; + private readonly clients: WebSiteManagementClient[] = []; - constructor(private readonly config: AzureFunctionsConfig) { - const creds = new ClientSecretCredential(config.tenantId, config.clientId, config.clientSecret); - for (const subscription of config.allowedSubscriptions) { - if (!this.clients.some(c => c.subscriptionId === subscription.id)) { - this.clients.push(new WebSiteManagementClient(creds, subscription.id)); - } + constructor(private readonly config: AzureFunctionsConfig) { + const creds = new ClientSecretCredential( + config.tenantId, + config.clientId, + config.clientSecret, + ); + for (const subscription of config.allowedSubscriptions) { + if (!this.clients.some(c => c.subscriptionId === subscription.id)) { + this.clients.push(new WebSiteManagementClient(creds, subscription.id)); + } + } + } + + static fromConfig(config: Config): AzureWebManagementApi { + return new AzureWebManagementApi(AzureFunctionsConfig.fromConfig(config)); + } + + async list({ + functionName, + }: { + functionName: string; + }): Promise { + const results = []; + for (const client of this.clients) { + try { + for await (const webApp of client.webApps.list()) { + if (!webApp.name!.startsWith(functionName)) { + continue; + } + const v = webApp!; + results.push({ + href: `${this.baseHref(this.config.domain)}${v.id!}`, + logstreamHref: `${this.baseHref( + this.config.domain, + )}${v.id!}/logStream`, + functionName: v.name!, + location: v.location!, + lastModifiedDate: v.lastModifiedTimeUtc!, + usageState: v.usageState!, + state: v.state!, + containerSize: v.containerSize!, + }); } + } catch (ex) { + console.log(ex); + } } - - static fromConfig(config: Config): AzureWebManagementApi { - return new AzureWebManagementApi(AzureFunctionsConfig.fromConfig(config)); - } - - async list({ - functionName, - }: { - functionName: string; - }): Promise { - const results = []; - for (const client of this.clients) { - try { - for await (const webApp of client.webApps.list()) { - if (!webApp.name!.startsWith(functionName)) { - continue; - } - const v = webApp!; - results.push({ - href: `${this.baseHref(this.config.domain)}${v.id!}`, - logstreamHref: `${this.baseHref(this.config.domain)}${v.id!}/logStream`, - functionName: v.name!, - location: v.location!, - lastModifiedDate: v.lastModifiedTimeUtc!, - usageState: v.usageState!, - state: v.state!, - containerSize: v.containerSize! - }) - } - } catch (ex) { - console.log(ex); - } - } - return results; - } -} \ No newline at end of file + return results; + } +} diff --git a/plugins/azure-functions-backend/src/api/index.ts b/plugins/azure-functions-backend/src/api/index.ts index db2bb3de27..bcd78290a5 100644 --- a/plugins/azure-functions-backend/src/api/index.ts +++ b/plugins/azure-functions-backend/src/api/index.ts @@ -14,5 +14,8 @@ * limitations under the License. */ -export { AzureWebManagementApi, AzureFunctionsConfig } from './AzureWebManagementApi' -export * from './types' \ No newline at end of file +export { + AzureWebManagementApi, + AzureFunctionsConfig, +} from './AzureWebManagementApi'; +export * from './types'; diff --git a/plugins/azure-functions-backend/src/api/types.ts b/plugins/azure-functions-backend/src/api/types.ts index 7aa79aa081..c560689c0b 100644 --- a/plugins/azure-functions-backend/src/api/types.ts +++ b/plugins/azure-functions-backend/src/api/types.ts @@ -15,17 +15,17 @@ */ export interface AzureFunctionsAllowedSubscriptionsConfig { - name: string; - id: string; + name: string; + id: string; } export type FunctionsData = { - href: string; - logstreamHref: string; - functionName: string; - location: string; - state: string; - usageState: string; - containerSize: number; - lastModifiedDate: Date; -}; \ No newline at end of file + href: string; + logstreamHref: string; + functionName: string; + location: string; + state: string; + usageState: string; + containerSize: number; + lastModifiedDate: Date; +}; diff --git a/plugins/azure-functions-backend/src/index.ts b/plugins/azure-functions-backend/src/index.ts index 0e8cedac61..2746fa2c7c 100644 --- a/plugins/azure-functions-backend/src/index.ts +++ b/plugins/azure-functions-backend/src/index.ts @@ -15,4 +15,4 @@ */ export * from './service/router'; -export * from './api'; \ No newline at end of file +export * from './api'; diff --git a/plugins/azure-functions-backend/src/service/router.ts b/plugins/azure-functions-backend/src/service/router.ts index 9d23a1294a..eb4f218a76 100644 --- a/plugins/azure-functions-backend/src/service/router.ts +++ b/plugins/azure-functions-backend/src/service/router.ts @@ -39,7 +39,11 @@ export async function createRouter( response.send({ status: 'ok' }); }); router.post('/list', async (request, response) => { - response.json(await azureWebManagementApi.list({ functionName: request.body.functionName!.toString() })) + response.json( + await azureWebManagementApi.list({ + functionName: request.body.functionName!.toString(), + }), + ); }); router.use(errorHandler()); return router; diff --git a/plugins/azure-functions-backend/src/service/standaloneServer.ts b/plugins/azure-functions-backend/src/service/standaloneServer.ts index 12a76b2d44..0ccffb311c 100644 --- a/plugins/azure-functions-backend/src/service/standaloneServer.ts +++ b/plugins/azure-functions-backend/src/service/standaloneServer.ts @@ -14,7 +14,10 @@ * limitations under the License. */ -import { createServiceBuilder, loadBackendConfig } from '@backstage/backend-common'; +import { + createServiceBuilder, + loadBackendConfig, +} from '@backstage/backend-common'; import { Server } from 'http'; import { Logger } from 'winston'; import { AzureWebManagementApi } from '../api'; @@ -30,11 +33,11 @@ export async function startStandaloneServer( options: ServerOptions, ): Promise { const logger = options.logger.child({ service: 'azure-functions-backend' }); - const config = await loadBackendConfig({ logger, argv: process.argv }) + const config = await loadBackendConfig({ logger, argv: process.argv }); logger.debug('Starting application server...'); const router = await createRouter({ logger, - azureWebManagementApi: AzureWebManagementApi.fromConfig(config) + azureWebManagementApi: AzureWebManagementApi.fromConfig(config), }); let service = createServiceBuilder(module) diff --git a/plugins/azure-functions/README.md b/plugins/azure-functions/README.md index 77d08ee5cf..712c0b16ff 100644 --- a/plugins/azure-functions/README.md +++ b/plugins/azure-functions/README.md @@ -2,7 +2,7 @@ ![preview of Azure Functions table](docs/functions-table.png) -*Inspired by [roadie.io AWS Lamda plugin](https://roadie.io/backstage/plugins/aws-lambda/)* +_Inspired by [roadie.io AWS Lamda plugin](https://roadie.io/backstage/plugins/aws-lambda/)_ ## Features @@ -71,4 +71,4 @@ const serviceEntityPage = ( ## Roadmap -- [ ] Metrics \ No newline at end of file +- [ ] Metrics diff --git a/plugins/azure-functions/dev/index.tsx b/plugins/azure-functions/dev/index.tsx index d34ef19bc7..715418cb73 100644 --- a/plugins/azure-functions/dev/index.tsx +++ b/plugins/azure-functions/dev/index.tsx @@ -17,6 +17,4 @@ import { createDevApp } from '@backstage/dev-utils'; import { azureFunctionsPlugin } from '../src/plugin'; -createDevApp() - .registerPlugin(azureFunctionsPlugin) - .render(); +createDevApp().registerPlugin(azureFunctionsPlugin).render(); diff --git a/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts b/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts index 056528c946..a7676e3b17 100644 --- a/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts +++ b/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts @@ -19,7 +19,6 @@ import { FunctionsData } from './types'; import { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api'; export class AzureFunctionsBackendClient implements AzureFunctionsApi { - private readonly identityApi: IdentityApi; private readonly discoveryApi: DiscoveryApi; constructor(options: { @@ -36,7 +35,9 @@ export class AzureFunctionsBackendClient implements AzureFunctionsApi { functionName: string; }): Promise { try { - const url = `${await this.discoveryApi.getBaseUrl('azure-functions')}/list`; + const url = `${await this.discoveryApi.getBaseUrl( + 'azure-functions', + )}/list`; const { token: idToken } = await this.identityApi.getCredentials(); const response = await fetch(url, { method: 'POST', @@ -44,11 +45,11 @@ export class AzureFunctionsBackendClient implements AzureFunctionsApi { 'Content-Type': 'application/json', ...(idToken && { Authorization: `Bearer ${idToken}` }), }, - body: JSON.stringify({ functionName: functionName }) + body: JSON.stringify({ functionName: functionName }), }); return await response.json(); } catch (e: any) { - throw new Error('MissingAzureBackendException') + throw new Error('MissingAzureBackendException'); } } } diff --git a/plugins/azure-functions/src/api/index.ts b/plugins/azure-functions/src/api/index.ts index 14bb548361..4ea99fb412 100644 --- a/plugins/azure-functions/src/api/index.ts +++ b/plugins/azure-functions/src/api/index.ts @@ -16,4 +16,4 @@ export * from './AzureFunctionsApi'; export * from './AzureFunctionsBackendClient'; -export * from './types'; \ No newline at end of file +export * from './types'; diff --git a/plugins/azure-functions/src/api/types.ts b/plugins/azure-functions/src/api/types.ts index 4e6e18df32..0585db10e6 100644 --- a/plugins/azure-functions/src/api/types.ts +++ b/plugins/azure-functions/src/api/types.ts @@ -15,12 +15,12 @@ */ export type FunctionsData = { - href: string; - logstreamHref: string; - functionName: string; - location: string; - state: string; - usageState: string; - containerSize: number; - lastModifiedDate: Date; -}; \ No newline at end of file + href: string; + logstreamHref: string; + functionName: string; + location: string; + state: string; + usageState: string; + containerSize: number; + lastModifiedDate: Date; +}; diff --git a/plugins/azure-functions/src/components/AzureFunctionsOverviewComponent/AzureFunctionsOverview.tsx b/plugins/azure-functions/src/components/AzureFunctionsOverviewComponent/AzureFunctionsOverview.tsx index 2198940c31..61ebac0c96 100644 --- a/plugins/azure-functions/src/components/AzureFunctionsOverviewComponent/AzureFunctionsOverview.tsx +++ b/plugins/azure-functions/src/components/AzureFunctionsOverviewComponent/AzureFunctionsOverview.tsx @@ -33,11 +33,16 @@ const AzureFunctionsOverview = ({ entity }: { entity: Entity }) => { const { functionsName } = useServiceEntityAnnotations(entity); const [functionsData] = useFunctions({ - functionsName + functionsName, }); return ( - <> + <> + + ); }; @@ -45,12 +50,14 @@ export const AzureFunctionsOverviewWidget = () => { const { entity } = useEntity(); if (!isAzureFunctionsAvailable(entity)) { - return (); + return ( + + ); } return ( - ) + ); }; diff --git a/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.test.tsx b/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.test.tsx index 7a3ae48d7d..7642b76db2 100644 --- a/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.test.tsx +++ b/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.test.tsx @@ -28,9 +28,7 @@ import { TestApiProvider, } from '@backstage/test-utils'; import { setupServer } from 'msw/node'; -import { - functionResponseMock, -} from '../../mocks/mocks'; +import { functionResponseMock } from '../../mocks/mocks'; import { azureFunctionsApiRef } from '../..'; import { OverviewTable } from './OverviewTable'; @@ -60,19 +58,16 @@ describe('AzureFunctionsOverviewWidget', () => { beforeEach(() => { worker.use( - rest.post( - '/list', - (_, res, ctx) => { - res(ctx.json(functionResponseMock)); - }, - ), + rest.post('/list', (_, res, ctx) => { + res(ctx.json(functionResponseMock)); + }), ); }); it('should display an overview table with the data from the requests', async () => { const rendered = render( - + , ); diff --git a/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx b/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx index 8ecb2a3ac9..3f1de1552d 100644 --- a/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx +++ b/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx @@ -15,15 +15,10 @@ */ import React from 'react'; -import { - Box, - Card, - Link, - LinearProgress -} from '@material-ui/core'; +import { Box, Card, Link, LinearProgress } from '@material-ui/core'; import { FunctionsData } from '../../api/types'; import { Table, TableColumn } from '@backstage/core-components'; -import FlashOnIcon from '@material-ui/icons/FlashOn' +import FlashOnIcon from '@material-ui/icons/FlashOn'; type States = 'Waiting' | 'Running' | 'Paused' | 'Failed'; @@ -61,7 +56,11 @@ const DEFAULT_COLUMNS: TableColumn[] = [ title: 'name', highlight: true, render: (func: FunctionsData) => { - return ({func.functionName}) + return ( + + {func.functionName} + + ); }, }, { @@ -74,13 +73,18 @@ const DEFAULT_COLUMNS: TableColumn[] = [ }, { title: 'last modified', - render: (func: FunctionsData) => new Date(func.lastModifiedDate).toUTCString(), + render: (func: FunctionsData) => + new Date(func.lastModifiedDate).toUTCString(), }, { title: 'logs', align: 'right', render: (func: FunctionsData) => { - return (View Logs) + return ( + + View Logs + + ); }, }, ]; @@ -104,9 +108,7 @@ export const OverviewTable = ({ data, loading }: FunctionTableProps) => { } options={{ paging: true, search: false, pageSize: 10 }} data={data} - emptyContent={ - - } + emptyContent={} isLoading={loading} columns={columns} /> diff --git a/plugins/azure-functions/src/hooks/useFunctions.ts b/plugins/azure-functions/src/hooks/useFunctions.ts index 9ed47f7997..e70c301edf 100644 --- a/plugins/azure-functions/src/hooks/useFunctions.ts +++ b/plugins/azure-functions/src/hooks/useFunctions.ts @@ -15,19 +15,12 @@ */ import useAsyncRetry from 'react-use/lib/useAsyncRetry'; -import { - useApi, - errorApiRef, -} from '@backstage/core-plugin-api'; +import { useApi, errorApiRef } from '@backstage/core-plugin-api'; import { FunctionsData } from '../api/types'; import { azureFunctionsApiRef } from '../api'; import { useCallback } from 'react'; -export function useFunctions({ - functionsName -}: { - functionsName: string; -}) { +export function useFunctions({ functionsName }: { functionsName: string }) { const azureFunctionsApi = useApi(azureFunctionsApiRef); const errorApi = useApi(errorApiRef); diff --git a/plugins/azure-functions/src/hooks/useServiceEntityAnnotations.ts b/plugins/azure-functions/src/hooks/useServiceEntityAnnotations.ts index 6bbe7f5f70..ea8e653583 100644 --- a/plugins/azure-functions/src/hooks/useServiceEntityAnnotations.ts +++ b/plugins/azure-functions/src/hooks/useServiceEntityAnnotations.ts @@ -25,6 +25,6 @@ export const useServiceEntityAnnotations = (entity: Entity) => { return { projectName, - functionsName + functionsName, }; }; diff --git a/plugins/azure-functions/src/index.ts b/plugins/azure-functions/src/index.ts index 7b091198ee..ea3b9a28e4 100644 --- a/plugins/azure-functions/src/index.ts +++ b/plugins/azure-functions/src/index.ts @@ -16,4 +16,4 @@ export * from './plugin'; export * from './api'; -export * from './components/AzureFunctionsOverviewComponent/AzureFunctionsOverview'; \ No newline at end of file +export * from './components/AzureFunctionsOverviewComponent/AzureFunctionsOverview'; diff --git a/plugins/azure-functions/src/mocks/mocks.ts b/plugins/azure-functions/src/mocks/mocks.ts index 9e601fda11..e0fe70cafd 100644 --- a/plugins/azure-functions/src/mocks/mocks.ts +++ b/plugins/azure-functions/src/mocks/mocks.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { FunctionsData } from "../api"; +import { FunctionsData } from '../api'; export const entityMock = { metadata: { @@ -23,8 +23,7 @@ export const entityMock = { 'portal.azure.com/functions-name': 'func-mock', }, name: 'sample-azure-function-service', - description: - 'A service for testing Backstage functionality.', + description: 'A service for testing Backstage functionality.', uid: 'c009b513-d053-4b3f-9429-8433a145e943', }, apiVersion: 'backstage.io/v1alpha1', @@ -38,12 +37,13 @@ export const entityMock = { // https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Web/sites/{{functionsName}}?api-version=2022-03-01 export const functionResponseMock: FunctionsData = { - functionName: "func-mock", - location: "West Europe", - state: "Running", - href: "https://mockurl.api.azurewebsites.windows.net:454/subscriptions/00000000-0000-0000-0000-000000000000/webspaces/rg_mock-WestEuropewebspace/sites/func-mock", - logstreamHref: "https://mockurl.api.azurewebsites.windows.net:454/subscriptions/00000000-0000-0000-0000-000000000000/webspaces/rg_mock-WestEuropewebspace/sites/func-mock/logStream", - usageState: "Normal", - lastModifiedDate: new Date("2022-09-02T11:09:58.9033333"), - containerSize: 100 + functionName: 'func-mock', + location: 'West Europe', + state: 'Running', + href: 'https://mockurl.api.azurewebsites.windows.net:454/subscriptions/00000000-0000-0000-0000-000000000000/webspaces/rg_mock-WestEuropewebspace/sites/func-mock', + logstreamHref: + 'https://mockurl.api.azurewebsites.windows.net:454/subscriptions/00000000-0000-0000-0000-000000000000/webspaces/rg_mock-WestEuropewebspace/sites/func-mock/logStream', + usageState: 'Normal', + lastModifiedDate: new Date('2022-09-02T11:09:58.9033333'), + containerSize: 100, }; diff --git a/plugins/azure-functions/src/plugin.ts b/plugins/azure-functions/src/plugin.ts index b3e905e6af..ad160c340b 100644 --- a/plugins/azure-functions/src/plugin.ts +++ b/plugins/azure-functions/src/plugin.ts @@ -20,7 +20,7 @@ import { createPlugin, createRouteRef, discoveryApiRef, - identityApiRef + identityApiRef, } from '@backstage/core-plugin-api'; import { azureFunctionsApiRef, AzureFunctionsBackendClient } from './api'; @@ -39,7 +39,7 @@ export const azureFunctionsPlugin = createPlugin({ }, factory: ({ discoveryApi, identityApi }) => new AzureFunctionsBackendClient({ discoveryApi, identityApi }), - }) + }), ], routes: { entityContent: entityContentRouteRef, @@ -51,9 +51,9 @@ export const EntityAzureFunctionsOverviewCard = azureFunctionsPlugin.provide( name: 'EntityAzureFunctionsOverviewCard', component: { lazy: () => - import('./components/AzureFunctionsOverviewComponent/AzureFunctionsOverview').then( - m => m.AzureFunctionsOverviewWidget, - ), + import( + './components/AzureFunctionsOverviewComponent/AzureFunctionsOverview' + ).then(m => m.AzureFunctionsOverviewWidget), }, }), -); \ No newline at end of file +); From 5fd97b92404bc3b9a7d2653f0e1fae9eed85a0dd Mon Sep 17 00:00:00 2001 From: Wesley Date: Mon, 12 Sep 2022 05:23:52 +0200 Subject: [PATCH 009/278] add missing api-report.md Signed-off-by: Wesley --- plugins/azure-functions-backend/api-report.md | 86 ++++++++++++++++++ plugins/azure-functions/api-report.md | 89 +++++++++++++++++++ 2 files changed, 175 insertions(+) create mode 100644 plugins/azure-functions-backend/api-report.md create mode 100644 plugins/azure-functions/api-report.md diff --git a/plugins/azure-functions-backend/api-report.md b/plugins/azure-functions-backend/api-report.md new file mode 100644 index 0000000000..1811249ca2 --- /dev/null +++ b/plugins/azure-functions-backend/api-report.md @@ -0,0 +1,86 @@ +## API Report File for "@backstage/plugin-azure-functions-backend" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { Config } from '@backstage/config'; +import express from 'express'; +import { Logger } from 'winston'; + +// Warning: (ae-missing-release-tag) "AzureFunctionsAllowedSubscriptionsConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface AzureFunctionsAllowedSubscriptionsConfig { + // (undocumented) + id: string; + // (undocumented) + name: string; +} + +// Warning: (ae-missing-release-tag) "AzureFunctionsConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class AzureFunctionsConfig { + constructor( + tenantId: string, + clientId: string, + clientSecret: string, + domain: string, + allowedSubscriptions: AzureFunctionsAllowedSubscriptionsConfig[], + ); + // (undocumented) + readonly allowedSubscriptions: AzureFunctionsAllowedSubscriptionsConfig[]; + // (undocumented) + readonly clientId: string; + // (undocumented) + readonly clientSecret: string; + // (undocumented) + readonly domain: string; + // (undocumented) + static fromConfig(config: Config): AzureFunctionsConfig; + // (undocumented) + readonly tenantId: string; +} + +// Warning: (ae-missing-release-tag) "AzureWebManagementApi" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class AzureWebManagementApi { + constructor(config: AzureFunctionsConfig); + // (undocumented) + static fromConfig(config: Config): AzureWebManagementApi; + // (undocumented) + list({ functionName }: { functionName: string }): Promise; +} + +// Warning: (ae-missing-release-tag) "createRouter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export function createRouter(options: RouterOptions): Promise; + +// Warning: (ae-missing-release-tag) "FunctionsData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type FunctionsData = { + href: string; + logstreamHref: string; + functionName: string; + location: string; + state: string; + usageState: string; + containerSize: number; + lastModifiedDate: Date; +}; + +// Warning: (ae-missing-release-tag) "RouterOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export interface RouterOptions { + // (undocumented) + azureWebManagementApi: AzureWebManagementApi; + // (undocumented) + logger: Logger; +} + +// (No @packageDocumentation comment for this package) +``` diff --git a/plugins/azure-functions/api-report.md b/plugins/azure-functions/api-report.md new file mode 100644 index 0000000000..881c5bdf5e --- /dev/null +++ b/plugins/azure-functions/api-report.md @@ -0,0 +1,89 @@ +## API Report File for "@backstage/plugin-azure-functions" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +/// + +import { ApiRef } from '@backstage/core-plugin-api'; +import { BackstagePlugin } from '@backstage/core-plugin-api'; +import { DiscoveryApi } from '@backstage/core-plugin-api'; +import { Entity } from '@backstage/catalog-model'; +import { IdentityApi } from '@backstage/core-plugin-api'; +import { RouteRef } from '@backstage/core-plugin-api'; + +// Warning: (ae-missing-release-tag) "AzureFunctionsApi" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type AzureFunctionsApi = { + list: ({ + functionName, + }: { + functionName: string; + }) => Promise; +}; + +// Warning: (ae-missing-release-tag) "azureFunctionsApiRef" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const azureFunctionsApiRef: ApiRef; + +// Warning: (ae-missing-release-tag) "AzureFunctionsBackendClient" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export class AzureFunctionsBackendClient implements AzureFunctionsApi { + constructor(options: { + discoveryApi: DiscoveryApi; + identityApi: IdentityApi; + }); + // (undocumented) + list({ functionName }: { functionName: string }): Promise; +} + +// Warning: (ae-missing-release-tag) "AzureFunctionsOverviewWidget" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const AzureFunctionsOverviewWidget: () => JSX.Element; + +// Warning: (ae-missing-release-tag) "azureFunctionsPlugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const azureFunctionsPlugin: BackstagePlugin< + { + entityContent: RouteRef; + }, + {}, + {} +>; + +// Warning: (ae-missing-release-tag) "EntityAzureFunctionsOverviewCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const EntityAzureFunctionsOverviewCard: () => JSX.Element; + +// Warning: (ae-missing-release-tag) "entityContentRouteRef" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const entityContentRouteRef: RouteRef; + +// Warning: (ae-missing-release-tag) "FunctionsData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export type FunctionsData = { + href: string; + logstreamHref: string; + functionName: string; + location: string; + state: string; + usageState: string; + containerSize: number; + lastModifiedDate: Date; +}; + +// Warning: (ae-missing-release-tag) "isAzureFunctionsAvailable" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const isAzureFunctionsAvailable: (entity: Entity) => string | undefined; + +// (No @packageDocumentation comment for this package) +``` From 8e4fd92fa500d5601f315b7a05037fe75984af4a Mon Sep 17 00:00:00 2001 From: Wesley Date: Mon, 12 Sep 2022 05:49:20 +0200 Subject: [PATCH 010/278] added /** @public */ to exports for api-report Signed-off-by: Wesley --- plugins/azure-functions-backend/api-report.md | 12 ------------ .../src/api/AzureWebManagementApi.ts | 2 ++ .../azure-functions-backend/src/api/types.ts | 2 ++ .../src/service/router.ts | 2 ++ plugins/azure-functions/api-report.md | 18 ------------------ .../src/api/AzureFunctionsApi.ts | 2 ++ .../src/api/AzureFunctionsBackendClient.ts | 1 + plugins/azure-functions/src/api/types.ts | 1 + .../AzureFunctionsOverview.tsx | 2 ++ .../OverviewTableComponent/OverviewTable.tsx | 1 + plugins/azure-functions/src/plugin.ts | 3 +++ 11 files changed, 16 insertions(+), 30 deletions(-) diff --git a/plugins/azure-functions-backend/api-report.md b/plugins/azure-functions-backend/api-report.md index 1811249ca2..fd72fb6f42 100644 --- a/plugins/azure-functions-backend/api-report.md +++ b/plugins/azure-functions-backend/api-report.md @@ -7,8 +7,6 @@ import { Config } from '@backstage/config'; import express from 'express'; import { Logger } from 'winston'; -// Warning: (ae-missing-release-tag) "AzureFunctionsAllowedSubscriptionsConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface AzureFunctionsAllowedSubscriptionsConfig { // (undocumented) @@ -17,8 +15,6 @@ export interface AzureFunctionsAllowedSubscriptionsConfig { name: string; } -// Warning: (ae-missing-release-tag) "AzureFunctionsConfig" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export class AzureFunctionsConfig { constructor( @@ -42,8 +38,6 @@ export class AzureFunctionsConfig { readonly tenantId: string; } -// Warning: (ae-missing-release-tag) "AzureWebManagementApi" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export class AzureWebManagementApi { constructor(config: AzureFunctionsConfig); @@ -53,13 +47,9 @@ export class AzureWebManagementApi { list({ functionName }: { functionName: string }): Promise; } -// Warning: (ae-missing-release-tag) "createRouter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export function createRouter(options: RouterOptions): Promise; -// Warning: (ae-missing-release-tag) "FunctionsData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type FunctionsData = { href: string; @@ -72,8 +62,6 @@ export type FunctionsData = { lastModifiedDate: Date; }; -// Warning: (ae-missing-release-tag) "RouterOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export interface RouterOptions { // (undocumented) diff --git a/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts b/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts index a756130977..a78bf05ee2 100644 --- a/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts +++ b/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts @@ -22,6 +22,7 @@ import { FunctionsData, } from './types'; +/** @public */ export class AzureFunctionsConfig { constructor( public readonly tenantId: string, @@ -49,6 +50,7 @@ export class AzureFunctionsConfig { } } +/** @public */ export class AzureWebManagementApi { private readonly baseHref = (domain: string) => `https://portal.azure.com/#@${domain}/resource`; diff --git a/plugins/azure-functions-backend/src/api/types.ts b/plugins/azure-functions-backend/src/api/types.ts index c560689c0b..4ec50ffb15 100644 --- a/plugins/azure-functions-backend/src/api/types.ts +++ b/plugins/azure-functions-backend/src/api/types.ts @@ -14,11 +14,13 @@ * limitations under the License. */ +/** @public */ export interface AzureFunctionsAllowedSubscriptionsConfig { name: string; id: string; } +/** @public */ export type FunctionsData = { href: string; logstreamHref: string; diff --git a/plugins/azure-functions-backend/src/service/router.ts b/plugins/azure-functions-backend/src/service/router.ts index eb4f218a76..f603849895 100644 --- a/plugins/azure-functions-backend/src/service/router.ts +++ b/plugins/azure-functions-backend/src/service/router.ts @@ -21,11 +21,13 @@ import { Logger } from 'winston'; import { AzureWebManagementApi } from '../api'; +/** @public */ export interface RouterOptions { logger: Logger; azureWebManagementApi: AzureWebManagementApi; } +/** @public */ export async function createRouter( options: RouterOptions, ): Promise { diff --git a/plugins/azure-functions/api-report.md b/plugins/azure-functions/api-report.md index 881c5bdf5e..9bb5e00c9e 100644 --- a/plugins/azure-functions/api-report.md +++ b/plugins/azure-functions/api-report.md @@ -12,8 +12,6 @@ import { Entity } from '@backstage/catalog-model'; import { IdentityApi } from '@backstage/core-plugin-api'; import { RouteRef } from '@backstage/core-plugin-api'; -// Warning: (ae-missing-release-tag) "AzureFunctionsApi" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type AzureFunctionsApi = { list: ({ @@ -23,13 +21,9 @@ export type AzureFunctionsApi = { }) => Promise; }; -// Warning: (ae-missing-release-tag) "azureFunctionsApiRef" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const azureFunctionsApiRef: ApiRef; -// Warning: (ae-missing-release-tag) "AzureFunctionsBackendClient" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export class AzureFunctionsBackendClient implements AzureFunctionsApi { constructor(options: { @@ -40,13 +34,9 @@ export class AzureFunctionsBackendClient implements AzureFunctionsApi { list({ functionName }: { functionName: string }): Promise; } -// Warning: (ae-missing-release-tag) "AzureFunctionsOverviewWidget" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const AzureFunctionsOverviewWidget: () => JSX.Element; -// Warning: (ae-missing-release-tag) "azureFunctionsPlugin" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const azureFunctionsPlugin: BackstagePlugin< { @@ -56,18 +46,12 @@ export const azureFunctionsPlugin: BackstagePlugin< {} >; -// Warning: (ae-missing-release-tag) "EntityAzureFunctionsOverviewCard" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const EntityAzureFunctionsOverviewCard: () => JSX.Element; -// Warning: (ae-missing-release-tag) "entityContentRouteRef" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const entityContentRouteRef: RouteRef; -// Warning: (ae-missing-release-tag) "FunctionsData" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export type FunctionsData = { href: string; @@ -80,8 +64,6 @@ export type FunctionsData = { lastModifiedDate: Date; }; -// Warning: (ae-missing-release-tag) "isAzureFunctionsAvailable" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) -// // @public (undocumented) export const isAzureFunctionsAvailable: (entity: Entity) => string | undefined; diff --git a/plugins/azure-functions/src/api/AzureFunctionsApi.ts b/plugins/azure-functions/src/api/AzureFunctionsApi.ts index 3853f0dbe4..969b7596ff 100644 --- a/plugins/azure-functions/src/api/AzureFunctionsApi.ts +++ b/plugins/azure-functions/src/api/AzureFunctionsApi.ts @@ -17,10 +17,12 @@ import { createApiRef } from '@backstage/core-plugin-api'; import { FunctionsData } from './types'; +/** @public */ export const azureFunctionsApiRef = createApiRef({ id: 'plugin.azurefunctions.service', }); +/** @public */ export type AzureFunctionsApi = { list: ({ functionName, diff --git a/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts b/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts index a7676e3b17..962fa3a113 100644 --- a/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts +++ b/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts @@ -18,6 +18,7 @@ import { AzureFunctionsApi } from './AzureFunctionsApi'; import { FunctionsData } from './types'; import { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api'; +/** @public */ export class AzureFunctionsBackendClient implements AzureFunctionsApi { private readonly identityApi: IdentityApi; private readonly discoveryApi: DiscoveryApi; diff --git a/plugins/azure-functions/src/api/types.ts b/plugins/azure-functions/src/api/types.ts index 0585db10e6..024a7ee70b 100644 --- a/plugins/azure-functions/src/api/types.ts +++ b/plugins/azure-functions/src/api/types.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +/** @public */ export type FunctionsData = { href: string; logstreamHref: string; diff --git a/plugins/azure-functions/src/components/AzureFunctionsOverviewComponent/AzureFunctionsOverview.tsx b/plugins/azure-functions/src/components/AzureFunctionsOverviewComponent/AzureFunctionsOverview.tsx index 61ebac0c96..76ecc7035a 100644 --- a/plugins/azure-functions/src/components/AzureFunctionsOverviewComponent/AzureFunctionsOverview.tsx +++ b/plugins/azure-functions/src/components/AzureFunctionsOverviewComponent/AzureFunctionsOverview.tsx @@ -26,6 +26,7 @@ import ErrorBoundary from '../ErrorBoundary'; import { useEntity } from '@backstage/plugin-catalog-react'; import { OverviewTable } from '../OverviewTableComponent/OverviewTable'; +/** @public */ export const isAzureFunctionsAvailable = (entity: Entity) => entity?.metadata.annotations?.[AZURE_FUNCTIONS_ANNOTATION]; @@ -46,6 +47,7 @@ const AzureFunctionsOverview = ({ entity }: { entity: Entity }) => { ); }; +/** @public */ export const AzureFunctionsOverviewWidget = () => { const { entity } = useEntity(); diff --git a/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx b/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx index 3f1de1552d..52044c9b1a 100644 --- a/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx +++ b/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx @@ -89,6 +89,7 @@ const DEFAULT_COLUMNS: TableColumn[] = [ }, ]; +/** @public */ export const OverviewTable = ({ data, loading }: FunctionTableProps) => { const columns: TableColumn[] = [...DEFAULT_COLUMNS]; const tableStyle = { diff --git a/plugins/azure-functions/src/plugin.ts b/plugins/azure-functions/src/plugin.ts index ad160c340b..c0b011e76c 100644 --- a/plugins/azure-functions/src/plugin.ts +++ b/plugins/azure-functions/src/plugin.ts @@ -24,10 +24,12 @@ import { } from '@backstage/core-plugin-api'; import { azureFunctionsApiRef, AzureFunctionsBackendClient } from './api'; +/** @public */ export const entityContentRouteRef = createRouteRef({ id: 'Azure Functions Entity Content', }); +/** @public */ export const azureFunctionsPlugin = createPlugin({ id: 'azure-functions', apis: [ @@ -46,6 +48,7 @@ export const azureFunctionsPlugin = createPlugin({ }, }); +/** @public */ export const EntityAzureFunctionsOverviewCard = azureFunctionsPlugin.provide( createComponentExtension({ name: 'EntityAzureFunctionsOverviewCard', From b16d7d5d904ec0f26a5a948fcbfd05e3483e8e28 Mon Sep 17 00:00:00 2001 From: Wesley Date: Tue, 13 Sep 2022 06:35:06 +0200 Subject: [PATCH 011/278] PR feedback applied. Signed-off-by: Wesley --- plugins/azure-functions-backend/api-report.md | 22 +------ plugins/azure-functions-backend/package.json | 12 ++++ .../src/api/AzureWebManagementApi.ts | 2 +- .../azure-functions-backend/src/api/index.ts | 1 - .../src/service/router.ts | 5 +- plugins/azure-functions-common/.eslintrc.js | 1 + plugins/azure-functions-common/api-report.md | 27 +++++++++ plugins/azure-functions-common/package.json | 40 +++++++++++++ .../src/index.ts} | 12 +--- .../src}/types.ts | 0 plugins/azure-functions/README.md | 4 -- plugins/azure-functions/api-report.md | 13 +---- plugins/azure-functions/package.json | 12 ++++ .../src/api/AzureFunctionsApi.ts | 2 +- .../src/api/AzureFunctionsBackendClient.ts | 7 +-- plugins/azure-functions/src/api/index.ts | 1 - .../AzureFunctionsOverview.tsx | 25 +++++--- .../src/components/ErrorBoundary.tsx | 58 ------------------- .../OverviewTable.test.tsx | 2 +- .../OverviewTableComponent/OverviewTable.tsx | 2 +- .../azure-functions/src/hooks/useFunctions.ts | 2 +- .../src/hooks/useServiceEntityAnnotations.ts | 3 - plugins/azure-functions/src/mocks/mocks.ts | 2 +- yarn.lock | 10 ++++ 24 files changed, 135 insertions(+), 130 deletions(-) create mode 100644 plugins/azure-functions-common/.eslintrc.js create mode 100644 plugins/azure-functions-common/api-report.md create mode 100644 plugins/azure-functions-common/package.json rename plugins/{azure-functions/src/api/types.ts => azure-functions-common/src/index.ts} (73%) rename plugins/{azure-functions-backend/src/api => azure-functions-common/src}/types.ts (100%) delete mode 100644 plugins/azure-functions/src/components/ErrorBoundary.tsx diff --git a/plugins/azure-functions-backend/api-report.md b/plugins/azure-functions-backend/api-report.md index fd72fb6f42..f9e74f4161 100644 --- a/plugins/azure-functions-backend/api-report.md +++ b/plugins/azure-functions-backend/api-report.md @@ -3,18 +3,12 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { AzureFunctionsAllowedSubscriptionsConfig } from '@backstage/plugin-azure-functions-common'; import { Config } from '@backstage/config'; import express from 'express'; +import { FunctionsData } from '@backstage/plugin-azure-functions-common'; import { Logger } from 'winston'; -// @public (undocumented) -export interface AzureFunctionsAllowedSubscriptionsConfig { - // (undocumented) - id: string; - // (undocumented) - name: string; -} - // @public (undocumented) export class AzureFunctionsConfig { constructor( @@ -50,18 +44,6 @@ export class AzureWebManagementApi { // @public (undocumented) export function createRouter(options: RouterOptions): Promise; -// @public (undocumented) -export type FunctionsData = { - href: string; - logstreamHref: string; - functionName: string; - location: string; - state: string; - usageState: string; - containerSize: number; - lastModifiedDate: Date; -}; - // @public (undocumented) export interface RouterOptions { // (undocumented) diff --git a/plugins/azure-functions-backend/package.json b/plugins/azure-functions-backend/package.json index cf5a5a5137..a1ee3494ee 100644 --- a/plugins/azure-functions-backend/package.json +++ b/plugins/azure-functions-backend/package.json @@ -13,6 +13,17 @@ "backstage": { "role": "backend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/azure-functions-backend" + }, + "keywords": [ + "backstage", + "functions", + "azure" + ], "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", @@ -27,6 +38,7 @@ "@azure/identity": "^2.1.0", "@backstage/backend-common": "^0.15.1-next.2", "@backstage/config": "^1.0.1", + "@backstage/plugin-azure-functions-common": "workspace:^", "@types/express": "*", "express": "^4.17.1", "express-promise-router": "^4.1.0", diff --git a/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts b/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts index a78bf05ee2..ef801169c3 100644 --- a/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts +++ b/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts @@ -20,7 +20,7 @@ import { WebSiteManagementClient } from '@azure/arm-appservice'; import { AzureFunctionsAllowedSubscriptionsConfig, FunctionsData, -} from './types'; +} from '@backstage/plugin-azure-functions-common'; /** @public */ export class AzureFunctionsConfig { diff --git a/plugins/azure-functions-backend/src/api/index.ts b/plugins/azure-functions-backend/src/api/index.ts index bcd78290a5..b85d857d8f 100644 --- a/plugins/azure-functions-backend/src/api/index.ts +++ b/plugins/azure-functions-backend/src/api/index.ts @@ -18,4 +18,3 @@ export { AzureWebManagementApi, AzureFunctionsConfig, } from './AzureWebManagementApi'; -export * from './types'; diff --git a/plugins/azure-functions-backend/src/service/router.ts b/plugins/azure-functions-backend/src/service/router.ts index f603849895..81fb79b1ba 100644 --- a/plugins/azure-functions-backend/src/service/router.ts +++ b/plugins/azure-functions-backend/src/service/router.ts @@ -40,10 +40,11 @@ export async function createRouter( logger.info('PONG!'); response.send({ status: 'ok' }); }); - router.post('/list', async (request, response) => { + router.get('/list/:functionName', async (request, response) => { + const { functionName } = request.params; response.json( await azureWebManagementApi.list({ - functionName: request.body.functionName!.toString(), + functionName: functionName, }), ); }); diff --git a/plugins/azure-functions-common/.eslintrc.js b/plugins/azure-functions-common/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/azure-functions-common/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/azure-functions-common/api-report.md b/plugins/azure-functions-common/api-report.md new file mode 100644 index 0000000000..a7d47adb1a --- /dev/null +++ b/plugins/azure-functions-common/api-report.md @@ -0,0 +1,27 @@ +## API Report File for "@backstage/plugin-azure-functions-common" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +// @public (undocumented) +export interface AzureFunctionsAllowedSubscriptionsConfig { + // (undocumented) + id: string; + // (undocumented) + name: string; +} + +// @public (undocumented) +export type FunctionsData = { + href: string; + logstreamHref: string; + functionName: string; + location: string; + state: string; + usageState: string; + containerSize: number; + lastModifiedDate: Date; +}; + +// (No @packageDocumentation comment for this package) +``` diff --git a/plugins/azure-functions-common/package.json b/plugins/azure-functions-common/package.json new file mode 100644 index 0000000000..3880b8965d --- /dev/null +++ b/plugins/azure-functions-common/package.json @@ -0,0 +1,40 @@ +{ + "name": "@backstage/plugin-azure-functions-common", + "description": "Common functionalities for the azure-functions plugin", + "version": "0.0.1", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "publishConfig": { + "access": "public", + "main": "dist/index.cjs.js", + "module": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "common-library" + }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/azure-functions-common" + }, + "keywords": [ + "backstage" + ], + "scripts": { + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack" + }, + "devDependencies": { + "@backstage/cli": "^0.19.0-next.2" + }, + "files": [ + "dist" + ] +} diff --git a/plugins/azure-functions/src/api/types.ts b/plugins/azure-functions-common/src/index.ts similarity index 73% rename from plugins/azure-functions/src/api/types.ts rename to plugins/azure-functions-common/src/index.ts index 024a7ee70b..db229eae34 100644 --- a/plugins/azure-functions/src/api/types.ts +++ b/plugins/azure-functions-common/src/index.ts @@ -14,14 +14,4 @@ * limitations under the License. */ -/** @public */ -export type FunctionsData = { - href: string; - logstreamHref: string; - functionName: string; - location: string; - state: string; - usageState: string; - containerSize: number; - lastModifiedDate: Date; -}; +export * from './types'; diff --git a/plugins/azure-functions-backend/src/api/types.ts b/plugins/azure-functions-common/src/types.ts similarity index 100% rename from plugins/azure-functions-backend/src/api/types.ts rename to plugins/azure-functions-common/src/types.ts diff --git a/plugins/azure-functions/README.md b/plugins/azure-functions/README.md index 712c0b16ff..4d3cf0e579 100644 --- a/plugins/azure-functions/README.md +++ b/plugins/azure-functions/README.md @@ -68,7 +68,3 @@ const serviceEntityPage = ( ); ``` - -## Roadmap - -- [ ] Metrics diff --git a/plugins/azure-functions/api-report.md b/plugins/azure-functions/api-report.md index 9bb5e00c9e..e217c5d65a 100644 --- a/plugins/azure-functions/api-report.md +++ b/plugins/azure-functions/api-report.md @@ -9,6 +9,7 @@ import { ApiRef } from '@backstage/core-plugin-api'; import { BackstagePlugin } from '@backstage/core-plugin-api'; import { DiscoveryApi } from '@backstage/core-plugin-api'; import { Entity } from '@backstage/catalog-model'; +import { FunctionsData } from '@backstage/plugin-azure-functions-common'; import { IdentityApi } from '@backstage/core-plugin-api'; import { RouteRef } from '@backstage/core-plugin-api'; @@ -52,18 +53,6 @@ export const EntityAzureFunctionsOverviewCard: () => JSX.Element; // @public (undocumented) export const entityContentRouteRef: RouteRef; -// @public (undocumented) -export type FunctionsData = { - href: string; - logstreamHref: string; - functionName: string; - location: string; - state: string; - usageState: string; - containerSize: number; - lastModifiedDate: Date; -}; - // @public (undocumented) export const isAzureFunctionsAvailable: (entity: Entity) => string | undefined; diff --git a/plugins/azure-functions/package.json b/plugins/azure-functions/package.json index 478f19acf5..d3b7be134f 100644 --- a/plugins/azure-functions/package.json +++ b/plugins/azure-functions/package.json @@ -13,6 +13,17 @@ "backstage": { "role": "frontend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/azure-functions" + }, + "keywords": [ + "backstage", + "functions", + "azure" + ], "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", @@ -26,6 +37,7 @@ "@backstage/catalog-model": "^1.1.0", "@backstage/core-components": "^0.11.1-next.2", "@backstage/core-plugin-api": "^1.0.6-next.2", + "@backstage/plugin-azure-functions-common": "workspace:^", "@backstage/plugin-catalog-react": "^1.1.4-next.1", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.9.13", diff --git a/plugins/azure-functions/src/api/AzureFunctionsApi.ts b/plugins/azure-functions/src/api/AzureFunctionsApi.ts index 969b7596ff..914ba7c351 100644 --- a/plugins/azure-functions/src/api/AzureFunctionsApi.ts +++ b/plugins/azure-functions/src/api/AzureFunctionsApi.ts @@ -15,7 +15,7 @@ */ import { createApiRef } from '@backstage/core-plugin-api'; -import { FunctionsData } from './types'; +import { FunctionsData } from '@backstage/plugin-azure-functions-common'; /** @public */ export const azureFunctionsApiRef = createApiRef({ diff --git a/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts b/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts index 962fa3a113..bdc13f3e0c 100644 --- a/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts +++ b/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts @@ -15,7 +15,7 @@ */ import { AzureFunctionsApi } from './AzureFunctionsApi'; -import { FunctionsData } from './types'; +import { FunctionsData } from '@backstage/plugin-azure-functions-common'; import { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api'; /** @public */ @@ -38,15 +38,14 @@ export class AzureFunctionsBackendClient implements AzureFunctionsApi { try { const url = `${await this.discoveryApi.getBaseUrl( 'azure-functions', - )}/list`; + )}/list/${functionName}`; const { token: idToken } = await this.identityApi.getCredentials(); const response = await fetch(url, { - method: 'POST', + method: 'GET', headers: { 'Content-Type': 'application/json', ...(idToken && { Authorization: `Bearer ${idToken}` }), }, - body: JSON.stringify({ functionName: functionName }), }); return await response.json(); } catch (e: any) { diff --git a/plugins/azure-functions/src/api/index.ts b/plugins/azure-functions/src/api/index.ts index 4ea99fb412..de6176a600 100644 --- a/plugins/azure-functions/src/api/index.ts +++ b/plugins/azure-functions/src/api/index.ts @@ -16,4 +16,3 @@ export * from './AzureFunctionsApi'; export * from './AzureFunctionsBackendClient'; -export * from './types'; diff --git a/plugins/azure-functions/src/components/AzureFunctionsOverviewComponent/AzureFunctionsOverview.tsx b/plugins/azure-functions/src/components/AzureFunctionsOverviewComponent/AzureFunctionsOverview.tsx index 76ecc7035a..381bc8069e 100644 --- a/plugins/azure-functions/src/components/AzureFunctionsOverviewComponent/AzureFunctionsOverview.tsx +++ b/plugins/azure-functions/src/components/AzureFunctionsOverviewComponent/AzureFunctionsOverview.tsx @@ -21,8 +21,11 @@ import { AZURE_FUNCTIONS_ANNOTATION, useServiceEntityAnnotations, } from '../../hooks/useServiceEntityAnnotations'; -import { MissingAnnotationEmptyState } from '@backstage/core-components'; -import ErrorBoundary from '../ErrorBoundary'; +import { + ErrorBoundary, + MissingAnnotationEmptyState, + ResponseErrorPanel, +} from '@backstage/core-components'; import { useEntity } from '@backstage/plugin-catalog-react'; import { OverviewTable } from '../OverviewTableComponent/OverviewTable'; @@ -37,13 +40,19 @@ const AzureFunctionsOverview = ({ entity }: { entity: Entity }) => { functionsName, }); + if (functionsData.error) { + return ( +
+ +
+ ); + } + return ( - <> - - + ); }; diff --git a/plugins/azure-functions/src/components/ErrorBoundary.tsx b/plugins/azure-functions/src/components/ErrorBoundary.tsx deleted file mode 100644 index 01aede226b..0000000000 --- a/plugins/azure-functions/src/components/ErrorBoundary.tsx +++ /dev/null @@ -1,58 +0,0 @@ -/* - * 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 React, { Component } from 'react'; -import Alert from '@material-ui/lab/Alert'; - -interface Props {} -interface MyProps {} - -interface MyState { - hasError: boolean; -} - -export default class ErrorBoundary extends Component { - static getDerivedStateFromError() { - // Update state so the next render will show the fallback UI. - return { hasError: true }; - } - - constructor(props: Props) { - super(props); - this.state = { hasError: false }; - } - render() { - if (this.state.hasError) { - // You can render any custom fallback UI - return ( - - Something went wrong. Please make sure that you installed: - - - @backstage/plugin-azure-functions-backend - - - - ); - } - - return this.props.children; - } -} diff --git a/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.test.tsx b/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.test.tsx index 7642b76db2..a2eeb2b5e9 100644 --- a/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.test.tsx +++ b/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.test.tsx @@ -58,7 +58,7 @@ describe('AzureFunctionsOverviewWidget', () => { beforeEach(() => { worker.use( - rest.post('/list', (_, res, ctx) => { + rest.get('/list/func-mock', (_, res, ctx) => { res(ctx.json(functionResponseMock)); }), ); diff --git a/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx b/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx index 52044c9b1a..bb079ee020 100644 --- a/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx +++ b/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx @@ -16,7 +16,7 @@ import React from 'react'; import { Box, Card, Link, LinearProgress } from '@material-ui/core'; -import { FunctionsData } from '../../api/types'; +import { FunctionsData } from '@backstage/plugin-azure-functions-common'; import { Table, TableColumn } from '@backstage/core-components'; import FlashOnIcon from '@material-ui/icons/FlashOn'; diff --git a/plugins/azure-functions/src/hooks/useFunctions.ts b/plugins/azure-functions/src/hooks/useFunctions.ts index e70c301edf..22d8e339a7 100644 --- a/plugins/azure-functions/src/hooks/useFunctions.ts +++ b/plugins/azure-functions/src/hooks/useFunctions.ts @@ -16,7 +16,7 @@ import useAsyncRetry from 'react-use/lib/useAsyncRetry'; import { useApi, errorApiRef } from '@backstage/core-plugin-api'; -import { FunctionsData } from '../api/types'; +import { FunctionsData } from '@backstage/plugin-azure-functions-common'; import { azureFunctionsApiRef } from '../api'; import { useCallback } from 'react'; diff --git a/plugins/azure-functions/src/hooks/useServiceEntityAnnotations.ts b/plugins/azure-functions/src/hooks/useServiceEntityAnnotations.ts index ea8e653583..53d0736477 100644 --- a/plugins/azure-functions/src/hooks/useServiceEntityAnnotations.ts +++ b/plugins/azure-functions/src/hooks/useServiceEntityAnnotations.ts @@ -20,11 +20,8 @@ export const AZURE_FUNCTIONS_ANNOTATION = 'portal.azure.com/functions-name'; export const useServiceEntityAnnotations = (entity: Entity) => { const functionsName = entity?.metadata.annotations?.[AZURE_FUNCTIONS_ANNOTATION] ?? ''; - const projectName = - entity?.metadata.annotations?.['dev.azure.com/project-repo'] ?? ''; return { - projectName, functionsName, }; }; diff --git a/plugins/azure-functions/src/mocks/mocks.ts b/plugins/azure-functions/src/mocks/mocks.ts index e0fe70cafd..d6099e990a 100644 --- a/plugins/azure-functions/src/mocks/mocks.ts +++ b/plugins/azure-functions/src/mocks/mocks.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { FunctionsData } from '../api'; +import { FunctionsData } from '@backstage/plugin-azure-functions-common'; export const entityMock = { metadata: { diff --git a/yarn.lock b/yarn.lock index 2fa9cbf8fe..d522bb31ac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4150,6 +4150,7 @@ __metadata: "@backstage/backend-common": ^0.15.1-next.2 "@backstage/cli": ^0.19.0-next.2 "@backstage/config": ^1.0.1 + "@backstage/plugin-azure-functions-common": "workspace:^" "@types/express": "*" "@types/supertest": ^2.0.8 express: ^4.17.1 @@ -4162,6 +4163,14 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-azure-functions-common@workspace:^, @backstage/plugin-azure-functions-common@workspace:plugins/azure-functions-common": + version: 0.0.0-use.local + resolution: "@backstage/plugin-azure-functions-common@workspace:plugins/azure-functions-common" + dependencies: + "@backstage/cli": ^0.19.0-next.2 + languageName: unknown + linkType: soft + "@backstage/plugin-azure-functions@^0.1.0, @backstage/plugin-azure-functions@workspace:plugins/azure-functions": version: 0.0.0-use.local resolution: "@backstage/plugin-azure-functions@workspace:plugins/azure-functions" @@ -4172,6 +4181,7 @@ __metadata: "@backstage/core-components": ^0.11.1-next.2 "@backstage/core-plugin-api": ^1.0.6-next.2 "@backstage/dev-utils": ^1.0.6-next.1 + "@backstage/plugin-azure-functions-common": "workspace:^" "@backstage/plugin-catalog-react": ^1.1.4-next.1 "@backstage/test-utils": ^1.2.0-next.2 "@backstage/theme": ^0.2.16 From 57c65440a3017088c859974f5d6ae5b14e2a025e Mon Sep 17 00:00:00 2001 From: Wesley Date: Tue, 13 Sep 2022 06:42:33 +0200 Subject: [PATCH 012/278] fix package depends update yarn.lock Signed-off-by: Wesley --- plugins/azure-functions-backend/package.json | 2 +- plugins/azure-functions/package.json | 2 +- yarn.lock | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/azure-functions-backend/package.json b/plugins/azure-functions-backend/package.json index a1ee3494ee..318608579c 100644 --- a/plugins/azure-functions-backend/package.json +++ b/plugins/azure-functions-backend/package.json @@ -38,7 +38,7 @@ "@azure/identity": "^2.1.0", "@backstage/backend-common": "^0.15.1-next.2", "@backstage/config": "^1.0.1", - "@backstage/plugin-azure-functions-common": "workspace:^", + "@backstage/plugin-azure-functions-common": "^0.0.1", "@types/express": "*", "express": "^4.17.1", "express-promise-router": "^4.1.0", diff --git a/plugins/azure-functions/package.json b/plugins/azure-functions/package.json index d3b7be134f..5f083bf338 100644 --- a/plugins/azure-functions/package.json +++ b/plugins/azure-functions/package.json @@ -37,7 +37,7 @@ "@backstage/catalog-model": "^1.1.0", "@backstage/core-components": "^0.11.1-next.2", "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/plugin-azure-functions-common": "workspace:^", + "@backstage/plugin-azure-functions-common": "^0.0.1", "@backstage/plugin-catalog-react": "^1.1.4-next.1", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.9.13", diff --git a/yarn.lock b/yarn.lock index d522bb31ac..7260cdc3f8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4150,7 +4150,7 @@ __metadata: "@backstage/backend-common": ^0.15.1-next.2 "@backstage/cli": ^0.19.0-next.2 "@backstage/config": ^1.0.1 - "@backstage/plugin-azure-functions-common": "workspace:^" + "@backstage/plugin-azure-functions-common": ^0.0.1 "@types/express": "*" "@types/supertest": ^2.0.8 express: ^4.17.1 @@ -4163,7 +4163,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-azure-functions-common@workspace:^, @backstage/plugin-azure-functions-common@workspace:plugins/azure-functions-common": +"@backstage/plugin-azure-functions-common@^0.0.1, @backstage/plugin-azure-functions-common@workspace:plugins/azure-functions-common": version: 0.0.0-use.local resolution: "@backstage/plugin-azure-functions-common@workspace:plugins/azure-functions-common" dependencies: @@ -4181,7 +4181,7 @@ __metadata: "@backstage/core-components": ^0.11.1-next.2 "@backstage/core-plugin-api": ^1.0.6-next.2 "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-azure-functions-common": "workspace:^" + "@backstage/plugin-azure-functions-common": ^0.0.1 "@backstage/plugin-catalog-react": ^1.1.4-next.1 "@backstage/test-utils": ^1.2.0-next.2 "@backstage/theme": ^0.2.16 From 02eb10cb2f3420fd73ffdedf8a88078a46bc37b0 Mon Sep 17 00:00:00 2001 From: Wesley Date: Tue, 13 Sep 2022 11:08:29 +0200 Subject: [PATCH 013/278] more PR feedback applied. Signed-off-by: Wesley --- .changeset/tasty-colts-hug.md | 5 +- packages/app/package.json | 2 +- packages/backend/package.json | 2 +- plugins/azure-functions-backend/README.md | 3 +- plugins/azure-functions-backend/api-report.md | 8 ++- plugins/azure-functions-backend/package.json | 7 +- .../src/api/AzureWebManagementApi.ts | 10 +-- plugins/azure-functions-common/api-report.md | 5 ++ plugins/azure-functions-common/package.json | 2 +- plugins/azure-functions-common/src/types.ts | 5 ++ plugins/azure-functions/api-report.md | 10 ++- plugins/azure-functions/package.json | 4 +- .../src/api/AzureFunctionsApi.ts | 4 +- .../src/api/AzureFunctionsBackendClient.ts | 4 +- .../AzureFunctionsOverview.tsx | 2 +- .../azure-functions/src/hooks/useFunctions.ts | 4 +- yarn.lock | 69 ++++--------------- 17 files changed, 59 insertions(+), 87 deletions(-) diff --git a/.changeset/tasty-colts-hug.md b/.changeset/tasty-colts-hug.md index 942f766a6e..e5957baf29 100644 --- a/.changeset/tasty-colts-hug.md +++ b/.changeset/tasty-colts-hug.md @@ -1,6 +1,7 @@ --- -'@backstage/plugin-azure-functions': major -'@backstage/plugin-azure-functions-backend': major +'@backstage/plugin-azure-functions': minor +'@backstage/plugin-azure-functions-backend': minor +'@backstage/plugin-azure-functions-common': minor --- Azure Functions Plugin support based on annotation supplied by the entity. diff --git a/packages/app/package.json b/packages/app/package.json index 1872b728a9..8632392fc6 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -19,7 +19,7 @@ "@backstage/plugin-apache-airflow": "^0.2.2-next.2", "@backstage/plugin-api-docs": "^0.8.9-next.2", "@backstage/plugin-azure-devops": "^0.2.0-next.2", - "@backstage/plugin-azure-functions": "^0.1.0", + "@backstage/plugin-azure-functions": "^0.0.0", "@backstage/plugin-badges": "^0.2.33-next.2", "@backstage/plugin-catalog-common": "^1.0.6-next.0", "@backstage/plugin-catalog-graph": "^0.2.21-next.1", diff --git a/packages/backend/package.json b/packages/backend/package.json index 23a63226cf..47c09e34f1 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -36,7 +36,7 @@ "@backstage/plugin-auth-backend": "^0.16.0-next.2", "@backstage/plugin-auth-node": "^0.2.5-next.2", "@backstage/plugin-azure-devops-backend": "^0.3.15-next.1", - "@backstage/plugin-azure-functions-backend": "^0.1.0", + "@backstage/plugin-azure-functions-backend": "^0.0.0", "@backstage/plugin-badges-backend": "^0.1.30-next.0", "@backstage/plugin-catalog-backend": "^1.4.0-next.2", "@backstage/plugin-code-coverage-backend": "^0.2.2-next.1", diff --git a/plugins/azure-functions-backend/README.md b/plugins/azure-functions-backend/README.md index abe1a7b148..4d78d682b6 100644 --- a/plugins/azure-functions-backend/README.md +++ b/plugins/azure-functions-backend/README.md @@ -38,8 +38,7 @@ Here's how to get the backend plugin up and running: ```sh # From the Backstage root directory - cd packages/backend - yarn add @backstage/plugin-azure-functions-backend + yarn add --cwd packages/backend @backstage/plugin-azure-functions-backend ``` 2. Then we will create a new file named `packages/backend/src/plugins/azure-functions.ts`, and add the following to it: diff --git a/plugins/azure-functions-backend/api-report.md b/plugins/azure-functions-backend/api-report.md index f9e74f4161..ce873f76a2 100644 --- a/plugins/azure-functions-backend/api-report.md +++ b/plugins/azure-functions-backend/api-report.md @@ -6,7 +6,7 @@ import { AzureFunctionsAllowedSubscriptionsConfig } from '@backstage/plugin-azure-functions-common'; import { Config } from '@backstage/config'; import express from 'express'; -import { FunctionsData } from '@backstage/plugin-azure-functions-common'; +import { FunctionsListResponse } from '@backstage/plugin-azure-functions-common'; import { Logger } from 'winston'; // @public (undocumented) @@ -38,7 +38,11 @@ export class AzureWebManagementApi { // (undocumented) static fromConfig(config: Config): AzureWebManagementApi; // (undocumented) - list({ functionName }: { functionName: string }): Promise; + list({ + functionName, + }: { + functionName: string; + }): Promise; } // @public (undocumented) diff --git a/plugins/azure-functions-backend/package.json b/plugins/azure-functions-backend/package.json index 318608579c..5a4196ee6d 100644 --- a/plugins/azure-functions-backend/package.json +++ b/plugins/azure-functions-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-functions-backend", - "version": "0.1.0", + "version": "0.0.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -38,7 +38,7 @@ "@azure/identity": "^2.1.0", "@backstage/backend-common": "^0.15.1-next.2", "@backstage/config": "^1.0.1", - "@backstage/plugin-azure-functions-common": "^0.0.1", + "@backstage/plugin-azure-functions-common": "^0.0.0", "@types/express": "*", "express": "^4.17.1", "express-promise-router": "^4.1.0", @@ -49,8 +49,7 @@ "devDependencies": { "@backstage/cli": "^0.19.0-next.2", "@types/supertest": "^2.0.8", - "msw": "^0.44.0", - "supertest": "^4.0.2" + "msw": "^0.44.0" }, "files": [ "dist" diff --git a/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts b/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts index ef801169c3..9fe2a77b6c 100644 --- a/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts +++ b/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts @@ -19,7 +19,7 @@ import { ClientSecretCredential } from '@azure/identity'; import { WebSiteManagementClient } from '@azure/arm-appservice'; import { AzureFunctionsAllowedSubscriptionsConfig, - FunctionsData, + FunctionsListResponse, } from '@backstage/plugin-azure-functions-common'; /** @public */ @@ -77,8 +77,8 @@ export class AzureWebManagementApi { functionName, }: { functionName: string; - }): Promise { - const results = []; + }): Promise { + const items = []; for (const client of this.clients) { try { for await (const webApp of client.webApps.list()) { @@ -86,7 +86,7 @@ export class AzureWebManagementApi { continue; } const v = webApp!; - results.push({ + items.push({ href: `${this.baseHref(this.config.domain)}${v.id!}`, logstreamHref: `${this.baseHref( this.config.domain, @@ -103,6 +103,6 @@ export class AzureWebManagementApi { console.log(ex); } } - return results; + return { items: items }; } } diff --git a/plugins/azure-functions-common/api-report.md b/plugins/azure-functions-common/api-report.md index a7d47adb1a..dff50e2100 100644 --- a/plugins/azure-functions-common/api-report.md +++ b/plugins/azure-functions-common/api-report.md @@ -23,5 +23,10 @@ export type FunctionsData = { lastModifiedDate: Date; }; +// @public (undocumented) +export type FunctionsListResponse = { + items: FunctionsData[]; +}; + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/azure-functions-common/package.json b/plugins/azure-functions-common/package.json index 3880b8965d..8bbf7ea9bf 100644 --- a/plugins/azure-functions-common/package.json +++ b/plugins/azure-functions-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-azure-functions-common", "description": "Common functionalities for the azure-functions plugin", - "version": "0.0.1", + "version": "0.0.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-functions-common/src/types.ts b/plugins/azure-functions-common/src/types.ts index 4ec50ffb15..4c4c465d5e 100644 --- a/plugins/azure-functions-common/src/types.ts +++ b/plugins/azure-functions-common/src/types.ts @@ -31,3 +31,8 @@ export type FunctionsData = { containerSize: number; lastModifiedDate: Date; }; + +/** @public */ +export type FunctionsListResponse = { + items: FunctionsData[]; +}; diff --git a/plugins/azure-functions/api-report.md b/plugins/azure-functions/api-report.md index e217c5d65a..949eafab89 100644 --- a/plugins/azure-functions/api-report.md +++ b/plugins/azure-functions/api-report.md @@ -9,7 +9,7 @@ import { ApiRef } from '@backstage/core-plugin-api'; import { BackstagePlugin } from '@backstage/core-plugin-api'; import { DiscoveryApi } from '@backstage/core-plugin-api'; import { Entity } from '@backstage/catalog-model'; -import { FunctionsData } from '@backstage/plugin-azure-functions-common'; +import { FunctionsListResponse } from '@backstage/plugin-azure-functions-common'; import { IdentityApi } from '@backstage/core-plugin-api'; import { RouteRef } from '@backstage/core-plugin-api'; @@ -19,7 +19,7 @@ export type AzureFunctionsApi = { functionName, }: { functionName: string; - }) => Promise; + }) => Promise; }; // @public (undocumented) @@ -32,7 +32,11 @@ export class AzureFunctionsBackendClient implements AzureFunctionsApi { identityApi: IdentityApi; }); // (undocumented) - list({ functionName }: { functionName: string }): Promise; + list({ + functionName, + }: { + functionName: string; + }): Promise; } // @public (undocumented) diff --git a/plugins/azure-functions/package.json b/plugins/azure-functions/package.json index 5f083bf338..f53269caf9 100644 --- a/plugins/azure-functions/package.json +++ b/plugins/azure-functions/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-functions", - "version": "0.1.0", + "version": "0.0.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -37,7 +37,7 @@ "@backstage/catalog-model": "^1.1.0", "@backstage/core-components": "^0.11.1-next.2", "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/plugin-azure-functions-common": "^0.0.1", + "@backstage/plugin-azure-functions-common": "^0.0.0", "@backstage/plugin-catalog-react": "^1.1.4-next.1", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.9.13", diff --git a/plugins/azure-functions/src/api/AzureFunctionsApi.ts b/plugins/azure-functions/src/api/AzureFunctionsApi.ts index 914ba7c351..0f7bf08bcd 100644 --- a/plugins/azure-functions/src/api/AzureFunctionsApi.ts +++ b/plugins/azure-functions/src/api/AzureFunctionsApi.ts @@ -15,7 +15,7 @@ */ import { createApiRef } from '@backstage/core-plugin-api'; -import { FunctionsData } from '@backstage/plugin-azure-functions-common'; +import { FunctionsListResponse } from '@backstage/plugin-azure-functions-common'; /** @public */ export const azureFunctionsApiRef = createApiRef({ @@ -28,5 +28,5 @@ export type AzureFunctionsApi = { functionName, }: { functionName: string; - }) => Promise; + }) => Promise; }; diff --git a/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts b/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts index bdc13f3e0c..58c1d9544d 100644 --- a/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts +++ b/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts @@ -15,7 +15,7 @@ */ import { AzureFunctionsApi } from './AzureFunctionsApi'; -import { FunctionsData } from '@backstage/plugin-azure-functions-common'; +import { FunctionsListResponse } from '@backstage/plugin-azure-functions-common'; import { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api'; /** @public */ @@ -34,7 +34,7 @@ export class AzureFunctionsBackendClient implements AzureFunctionsApi { functionName, }: { functionName: string; - }): Promise { + }): Promise { try { const url = `${await this.discoveryApi.getBaseUrl( 'azure-functions', diff --git a/plugins/azure-functions/src/components/AzureFunctionsOverviewComponent/AzureFunctionsOverview.tsx b/plugins/azure-functions/src/components/AzureFunctionsOverviewComponent/AzureFunctionsOverview.tsx index 381bc8069e..9ec8b9b80a 100644 --- a/plugins/azure-functions/src/components/AzureFunctionsOverviewComponent/AzureFunctionsOverview.tsx +++ b/plugins/azure-functions/src/components/AzureFunctionsOverviewComponent/AzureFunctionsOverview.tsx @@ -50,7 +50,7 @@ const AzureFunctionsOverview = ({ entity }: { entity: Entity }) => { return ( ); diff --git a/plugins/azure-functions/src/hooks/useFunctions.ts b/plugins/azure-functions/src/hooks/useFunctions.ts index 22d8e339a7..f10e98090c 100644 --- a/plugins/azure-functions/src/hooks/useFunctions.ts +++ b/plugins/azure-functions/src/hooks/useFunctions.ts @@ -16,7 +16,7 @@ import useAsyncRetry from 'react-use/lib/useAsyncRetry'; import { useApi, errorApiRef } from '@backstage/core-plugin-api'; -import { FunctionsData } from '@backstage/plugin-azure-functions-common'; +import { FunctionsListResponse } from '@backstage/plugin-azure-functions-common'; import { azureFunctionsApiRef } from '../api'; import { useCallback } from 'react'; @@ -37,7 +37,7 @@ export function useFunctions({ functionsName }: { functionsName: string }) { value: data, error, retry, - } = useAsyncRetry(async () => { + } = useAsyncRetry(async () => { try { const azureFunction = await list(); return azureFunction; diff --git a/yarn.lock b/yarn.lock index 7260cdc3f8..e89f18e39e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4141,7 +4141,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-azure-functions-backend@^0.1.0, @backstage/plugin-azure-functions-backend@workspace:plugins/azure-functions-backend": +"@backstage/plugin-azure-functions-backend@^0.0.0, @backstage/plugin-azure-functions-backend@workspace:plugins/azure-functions-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-azure-functions-backend@workspace:plugins/azure-functions-backend" dependencies: @@ -4150,20 +4150,19 @@ __metadata: "@backstage/backend-common": ^0.15.1-next.2 "@backstage/cli": ^0.19.0-next.2 "@backstage/config": ^1.0.1 - "@backstage/plugin-azure-functions-common": ^0.0.1 + "@backstage/plugin-azure-functions-common": ^0.0.0 "@types/express": "*" "@types/supertest": ^2.0.8 express: ^4.17.1 express-promise-router: ^4.1.0 msw: ^0.44.0 node-fetch: ^2.6.7 - supertest: ^4.0.2 winston: ^3.2.1 yn: ^4.0.0 languageName: unknown linkType: soft -"@backstage/plugin-azure-functions-common@^0.0.1, @backstage/plugin-azure-functions-common@workspace:plugins/azure-functions-common": +"@backstage/plugin-azure-functions-common@^0.0.0, @backstage/plugin-azure-functions-common@workspace:plugins/azure-functions-common": version: 0.0.0-use.local resolution: "@backstage/plugin-azure-functions-common@workspace:plugins/azure-functions-common" dependencies: @@ -4171,7 +4170,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-azure-functions@^0.1.0, @backstage/plugin-azure-functions@workspace:plugins/azure-functions": +"@backstage/plugin-azure-functions@^0.0.0, @backstage/plugin-azure-functions@workspace:plugins/azure-functions": version: 0.0.0-use.local resolution: "@backstage/plugin-azure-functions@workspace:plugins/azure-functions" dependencies: @@ -4181,7 +4180,7 @@ __metadata: "@backstage/core-components": ^0.11.1-next.2 "@backstage/core-plugin-api": ^1.0.6-next.2 "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-azure-functions-common": ^0.0.1 + "@backstage/plugin-azure-functions-common": ^0.0.0 "@backstage/plugin-catalog-react": ^1.1.4-next.1 "@backstage/test-utils": ^1.2.0-next.2 "@backstage/theme": ^0.2.16 @@ -19143,7 +19142,7 @@ __metadata: languageName: node linkType: hard -"component-emitter@npm:^1.2.0, component-emitter@npm:^1.2.1, component-emitter@npm:^1.3.0, component-emitter@npm:~1.3.0": +"component-emitter@npm:^1.2.1, component-emitter@npm:^1.3.0, component-emitter@npm:~1.3.0": version: 1.3.0 resolution: "component-emitter@npm:1.3.0" checksum: b3c46de38ffd35c57d1c02488355be9f218e582aec72d72d1b8bbec95a3ac1b38c96cd6e03ff015577e68f550fbb361a3bfdbd9bb248be9390b7b3745691be6b @@ -19529,7 +19528,7 @@ __metadata: languageName: node linkType: hard -"cookiejar@npm:^2.1.0, cookiejar@npm:^2.1.3": +"cookiejar@npm:^2.1.3": version: 2.1.3 resolution: "cookiejar@npm:2.1.3" checksum: 88259983ebc52ceb23cdacfa48762b6a518a57872eff1c7ed01d214fff5cf492e2660d7d5c04700a28f1787a76811df39e8639f8e17670b3cf94ecd86e161f07 @@ -22534,7 +22533,7 @@ __metadata: "@backstage/plugin-apache-airflow": ^0.2.2-next.2 "@backstage/plugin-api-docs": ^0.8.9-next.2 "@backstage/plugin-azure-devops": ^0.2.0-next.2 - "@backstage/plugin-azure-functions": ^0.1.0 + "@backstage/plugin-azure-functions": ^0.0.0 "@backstage/plugin-badges": ^0.2.33-next.2 "@backstage/plugin-catalog-common": ^1.0.6-next.0 "@backstage/plugin-catalog-graph": ^0.2.21-next.1 @@ -22638,7 +22637,7 @@ __metadata: "@backstage/plugin-auth-backend": ^0.16.0-next.2 "@backstage/plugin-auth-node": ^0.2.5-next.2 "@backstage/plugin-azure-devops-backend": ^0.3.15-next.1 - "@backstage/plugin-azure-functions-backend": ^0.1.0 + "@backstage/plugin-azure-functions-backend": ^0.0.0 "@backstage/plugin-badges-backend": ^0.1.30-next.0 "@backstage/plugin-catalog-backend": ^1.4.0-next.2 "@backstage/plugin-code-coverage-backend": ^0.2.2-next.1 @@ -23560,7 +23559,7 @@ __metadata: languageName: node linkType: hard -"form-data@npm:^2.3.1, form-data@npm:^2.3.2, form-data@npm:^2.5.0": +"form-data@npm:^2.3.2, form-data@npm:^2.5.0": version: 2.5.1 resolution: "form-data@npm:2.5.1" dependencies: @@ -23631,13 +23630,6 @@ __metadata: languageName: node linkType: hard -"formidable@npm:^1.2.0": - version: 1.2.6 - resolution: "formidable@npm:1.2.6" - checksum: 2b68ed07ba88302b9c63f8eda94f19a460cef6017bfda48348f09f41d2a36660c9353137991618e0e4c3db115b41e4b8f6fa63bc973b7a7c91dec66acdd02a56 - languageName: node - linkType: hard - "formidable@npm:^2.0.1": version: 2.0.1 resolution: "formidable@npm:2.0.1" @@ -29899,7 +29891,7 @@ __metadata: languageName: node linkType: hard -"methods@npm:^1.0.0, methods@npm:^1.1.1, methods@npm:^1.1.2, methods@npm:~1.1.2": +"methods@npm:^1.0.0, methods@npm:^1.1.2, methods@npm:~1.1.2": version: 1.1.2 resolution: "methods@npm:1.1.2" checksum: 0917ff4041fa8e2f2fda5425a955fe16ca411591fbd123c0d722fcf02b73971ed6f764d85f0a6f547ce49ee0221ce2c19a5fa692157931cecb422984f1dcd13a @@ -30309,7 +30301,7 @@ __metadata: languageName: node linkType: hard -"mime@npm:1.6.0, mime@npm:^1.3.4, mime@npm:^1.4.1": +"mime@npm:1.6.0, mime@npm:^1.3.4": version: 1.6.0 resolution: "mime@npm:1.6.0" bin: @@ -34196,15 +34188,6 @@ __metadata: languageName: node linkType: hard -"qs@npm:^6.5.1": - version: 6.11.0 - resolution: "qs@npm:6.11.0" - dependencies: - side-channel: ^1.0.4 - checksum: 6e1f29dd5385f7488ec74ac7b6c92f4d09a90408882d0c208414a34dd33badc1a621019d4c799a3df15ab9b1d0292f97c1dd71dc7c045e69f81a8064e5af7297 - languageName: node - linkType: hard - "qs@npm:~6.5.2": version: 6.5.2 resolution: "qs@npm:6.5.2" @@ -38047,24 +38030,6 @@ __metadata: languageName: node linkType: hard -"superagent@npm:^3.8.3": - version: 3.8.3 - resolution: "superagent@npm:3.8.3" - dependencies: - component-emitter: ^1.2.0 - cookiejar: ^2.1.0 - debug: ^3.1.0 - extend: ^3.0.0 - form-data: ^2.3.1 - formidable: ^1.2.0 - methods: ^1.1.1 - mime: ^1.4.1 - qs: ^6.5.1 - readable-stream: ^2.3.5 - checksum: b13d0303259d76c9180bd40d97d9f0713760f5ced1aef089bdb2fcdf69cfaef89004cd6e986416d59bd9a2f0f9933d72521b5171fa26f89b781a2c3460c516fe - languageName: node - linkType: hard - "superagent@npm:^8.0.0": version: 8.0.0 resolution: "superagent@npm:8.0.0" @@ -38084,16 +38049,6 @@ __metadata: languageName: node linkType: hard -"supertest@npm:^4.0.2": - version: 4.0.2 - resolution: "supertest@npm:4.0.2" - dependencies: - methods: ^1.1.2 - superagent: ^3.8.3 - checksum: ec848088c5d0f6743a0829331c274f67ab4c2e5e6ba724f2fdf4965a73afa22d5091448323e28ae5b69137e42fe3ac67235dfc5b0a0acda3c088bdd193313319 - languageName: node - linkType: hard - "supertest@npm:^6.1.3, supertest@npm:^6.1.6, supertest@npm:^6.2.4": version: 6.2.4 resolution: "supertest@npm:6.2.4" From 401c10eba0eab2b72e2863771fac0acac7d1f4b4 Mon Sep 17 00:00:00 2001 From: andrmaz <60042277+andrmaz@users.noreply.github.com> Date: Tue, 13 Sep 2022 22:28:17 +0200 Subject: [PATCH 014/278] feat(edge): attach groups hierarchy arrows to the right side of their parent boxes Signed-off-by: andrmaz <60042277+andrmaz@users.noreply.github.com> --- .../src/components/DependencyGraph/Edge.tsx | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/packages/core-components/src/components/DependencyGraph/Edge.tsx b/packages/core-components/src/components/DependencyGraph/Edge.tsx index cc6a044beb..72a7547cda 100644 --- a/packages/core-components/src/components/DependencyGraph/Edge.tsx +++ b/packages/core-components/src/components/DependencyGraph/Edge.tsx @@ -25,7 +25,7 @@ import { DependencyEdge, LabelPosition, } from './types'; -import { ARROW_MARKER_ID, EDGE_TEST_ID, LABEL_TEST_ID } from './constants'; +import { EDGE_TEST_ID, LABEL_TEST_ID } from './constants'; import { DefaultLabel } from './DefaultLabel'; import dagre from 'dagre'; @@ -47,7 +47,7 @@ export type DependencyGraphEdgeClassKey = 'path' | 'label'; const useStyles = makeStyles( (theme: BackstageTheme) => ({ path: { - strokeWidth: 2, + strokeWidth: 1, stroke: theme.palette.textSubtle, fill: 'none', transition: `${theme.transitions.duration.shortest}ms`, @@ -80,7 +80,7 @@ const createPath = d3Shape .line() .x(d => d.x) .y(d => d.y) - .curve(d3Shape.curveMonotoneX); + .curve(d3Shape.curveStepBefore); export function Edge({ render = renderDefault, @@ -124,12 +124,7 @@ export function Edge({ return ( <> {path && ( - + )} {labelProps.label ? ( Date: Tue, 13 Sep 2022 22:43:44 +0200 Subject: [PATCH 015/278] feat(changelog): add changeset describing the change Signed-off-by: andrmaz <60042277+andrmaz@users.noreply.github.com> --- .changeset/pink-pumas-double.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/pink-pumas-double.md diff --git a/.changeset/pink-pumas-double.md b/.changeset/pink-pumas-double.md new file mode 100644 index 0000000000..ca4d40967f --- /dev/null +++ b/.changeset/pink-pumas-double.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Attach groups hierarchy arrows to the right side of their parent boxes From 1148bdba7d0c4b7544bf5099e66f63c7bc6c06fe Mon Sep 17 00:00:00 2001 From: Wesley Date: Thu, 15 Sep 2022 05:07:54 +0200 Subject: [PATCH 016/278] use .toLocaleString instead of UTC Signed-off-by: Wesley --- .../OverviewTableComponent/OverviewTable.test.tsx | 6 +++++- .../src/components/OverviewTableComponent/OverviewTable.tsx | 4 +++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.test.tsx b/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.test.tsx index a2eeb2b5e9..18cf40410c 100644 --- a/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.test.tsx +++ b/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.test.tsx @@ -28,6 +28,7 @@ import { TestApiProvider, } from '@backstage/test-utils'; import { setupServer } from 'msw/node'; +import { DateTime } from 'luxon'; import { functionResponseMock } from '../../mocks/mocks'; import { azureFunctionsApiRef } from '../..'; import { OverviewTable } from './OverviewTable'; @@ -79,7 +80,10 @@ describe('AzureFunctionsOverviewWidget', () => { ).toBeInTheDocument(); expect( await rendered.findByText( - new Date(functionResponseMock.lastModifiedDate).toUTCString(), + functionResponseMock.lastModifiedDate.toLocaleString( + window.navigator.language, + DateTime.DATETIME_FULL, + ), ), ).toBeInTheDocument(); }); diff --git a/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx b/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx index bb079ee020..58858171bf 100644 --- a/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx +++ b/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx @@ -19,8 +19,10 @@ import { Box, Card, Link, LinearProgress } from '@material-ui/core'; import { FunctionsData } from '@backstage/plugin-azure-functions-common'; import { Table, TableColumn } from '@backstage/core-components'; import FlashOnIcon from '@material-ui/icons/FlashOn'; +import { DateTime } from 'luxon'; type States = 'Waiting' | 'Running' | 'Paused' | 'Failed'; +const lang = window.navigator.language; const State = ({ value }: { value: States }) => { const colorMap = { @@ -74,7 +76,7 @@ const DEFAULT_COLUMNS: TableColumn[] = [ { title: 'last modified', render: (func: FunctionsData) => - new Date(func.lastModifiedDate).toUTCString(), + func.lastModifiedDate.toLocaleString(lang, DateTime.DATETIME_FULL), }, { title: 'logs', From c253dd85f00ca512500b0c93609028c5cf874d03 Mon Sep 17 00:00:00 2001 From: Wesley Date: Thu, 15 Sep 2022 05:31:29 +0200 Subject: [PATCH 017/278] luxon as dep, update yarn.lock Signed-off-by: Wesley --- plugins/azure-functions/package.json | 1 + yarn.lock | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/plugins/azure-functions/package.json b/plugins/azure-functions/package.json index 18af5b8fbb..81818de154 100644 --- a/plugins/azure-functions/package.json +++ b/plugins/azure-functions/package.json @@ -43,6 +43,7 @@ "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", + "luxon": "^3.0.3", "react-use": "^17.2.4" }, "peerDependencies": { diff --git a/yarn.lock b/yarn.lock index 58f87a1f85..34310d053b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4229,6 +4229,7 @@ __metadata: "@types/jest": "*" "@types/node": "*" cross-fetch: ^3.1.5 + luxon: ^3.0.3 msw: ^0.44.0 react-use: ^17.2.4 peerDependencies: @@ -29300,6 +29301,13 @@ __metadata: languageName: node linkType: hard +"luxon@npm:^3.0.3": + version: 3.0.3 + resolution: "luxon@npm:3.0.3" + checksum: 67d143f102f520761c4202086579a5cf30b230ea299da27cacb31e9f9d372cadef90f14cbe7e2621b70825b267fe00128b8176ed8b7172b48f77a403a662d5aa + languageName: node + linkType: hard + "lz-string@npm:^1.4.4": version: 1.4.4 resolution: "lz-string@npm:1.4.4" From b0a2e3383e346e45b0446b964766a593be897463 Mon Sep 17 00:00:00 2001 From: Wesley Date: Thu, 15 Sep 2022 13:01:24 +0200 Subject: [PATCH 018/278] PR feedback Signed-off-by: Wesley --- plugins/azure-functions-backend/README.md | 2 +- plugins/azure-functions-backend/api-report.md | 10 +- plugins/azure-functions-backend/package.json | 2 +- plugins/azure-functions-backend/schema.d.ts | 4 +- .../src/api/AzureWebManagementApi.ts | 83 +++++------ plugins/azure-functions/README.md | 2 +- .../src/api/AzureFunctionsBackendClient.ts | 4 +- yarn.lock | 133 +++++++++--------- 8 files changed, 121 insertions(+), 119 deletions(-) diff --git a/plugins/azure-functions-backend/README.md b/plugins/azure-functions-backend/README.md index 4d78d682b6..c857888882 100644 --- a/plugins/azure-functions-backend/README.md +++ b/plugins/azure-functions-backend/README.md @@ -27,7 +27,7 @@ Configuration Details: - `domain` can be found by visiting the [Directories + Subscriptions settings page](https://portal.azure.com/#settings/directory). Alternatively you can inspect the [Azure home](https://portal.azure.com/#home) URL - `https://portal.azure.com/#@/`. - `tenantId` can be found by visiting [Azure Directory Overview page](https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade). -- `clientId` and `clientSecret` can be the same values you used for [Azure DevOps Backend](https://github.com/backstage/backstage/tree/master/plugins/azure-devops-backend) or [Azure Integration](https://backstage.io/docs/integrations/azure/org#app-registration) as long as this App Registration has permissions to read your function apps. +- (Optional) `clientId` and `clientSecret` can be the same values you used for [Azure DevOps Backend](https://github.com/backstage/backstage/tree/master/plugins/azure-devops-backend) or [Azure Integration](https://backstage.io/docs/integrations/azure/org#app-registration) as long as this App Registration has permissions to read your function apps. - `allowedSubscriptions` is an array of `id` and `name` that will be used to iterate over and look for the specified functions' app. `id` and `name` can be found the [Subscriptions page](https://portal.azure.com/#view/Microsoft_Azure_Billing/SubscriptionsBlade). ### Integrating diff --git a/plugins/azure-functions-backend/api-report.md b/plugins/azure-functions-backend/api-report.md index ce873f76a2..e7c1a18a0c 100644 --- a/plugins/azure-functions-backend/api-report.md +++ b/plugins/azure-functions-backend/api-report.md @@ -12,18 +12,18 @@ import { Logger } from 'winston'; // @public (undocumented) export class AzureFunctionsConfig { constructor( - tenantId: string, - clientId: string, - clientSecret: string, domain: string, allowedSubscriptions: AzureFunctionsAllowedSubscriptionsConfig[], + tenantId: string, + clientId?: string | undefined, + clientSecret?: string | undefined, ); // (undocumented) readonly allowedSubscriptions: AzureFunctionsAllowedSubscriptionsConfig[]; // (undocumented) - readonly clientId: string; + readonly clientId?: string | undefined; // (undocumented) - readonly clientSecret: string; + readonly clientSecret?: string | undefined; // (undocumented) readonly domain: string; // (undocumented) diff --git a/plugins/azure-functions-backend/package.json b/plugins/azure-functions-backend/package.json index 1be7518415..3758cbc316 100644 --- a/plugins/azure-functions-backend/package.json +++ b/plugins/azure-functions-backend/package.json @@ -34,7 +34,7 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@azure/arm-appservice": "^13.0.0", + "@azure/arm-resourcegraph": "^4.2.1", "@azure/identity": "^2.1.0", "@backstage/backend-common": "^0.15.1-next.2", "@backstage/config": "^1.0.2-next.0", diff --git a/plugins/azure-functions-backend/schema.d.ts b/plugins/azure-functions-backend/schema.d.ts index 529665c1eb..db9195f950 100644 --- a/plugins/azure-functions-backend/schema.d.ts +++ b/plugins/azure-functions-backend/schema.d.ts @@ -19,9 +19,9 @@ export interface Config { /** @visibility backend */ tenantId: string; /** @visibility backend */ - clientId: string; + clientId?: string; /** @visibility secret */ - clientSecret: string; + clientSecret?: string; /** @visibility backend */ domain: string; /** @visibility backend */ diff --git a/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts b/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts index 9fe2a77b6c..eebd80d8ce 100644 --- a/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts +++ b/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts @@ -15,8 +15,11 @@ */ import { Config } from '@backstage/config'; -import { ClientSecretCredential } from '@azure/identity'; -import { WebSiteManagementClient } from '@azure/arm-appservice'; +import { + DefaultAzureCredential, + ClientSecretCredential, +} from '@azure/identity'; +import { ResourceGraphClient } from '@azure/arm-resourcegraph'; import { AzureFunctionsAllowedSubscriptionsConfig, FunctionsListResponse, @@ -25,20 +28,17 @@ import { /** @public */ export class AzureFunctionsConfig { constructor( - public readonly tenantId: string, - public readonly clientId: string, - public readonly clientSecret: string, public readonly domain: string, public readonly allowedSubscriptions: AzureFunctionsAllowedSubscriptionsConfig[], + public readonly tenantId: string, + public readonly clientId?: string, + public readonly clientSecret?: string, ) {} static fromConfig(config: Config): AzureFunctionsConfig { const azfConfig = config.getConfig('azureFunctions'); return new AzureFunctionsConfig( - azfConfig.getString('tenantId'), - azfConfig.getString('clientId'), - azfConfig.getString('clientSecret'), azfConfig.getString('domain'), azfConfig .getConfigArray('allowedSubscriptions') @@ -46,6 +46,9 @@ export class AzureFunctionsConfig { id: as.getString('id'), name: as.getString('name'), })), + azfConfig.getString('tenantId'), + azfConfig.getOptionalString('clientId'), + azfConfig.getOptionalString('clientSecret'), ); } } @@ -54,19 +57,19 @@ export class AzureFunctionsConfig { export class AzureWebManagementApi { private readonly baseHref = (domain: string) => `https://portal.azure.com/#@${domain}/resource`; - private readonly clients: WebSiteManagementClient[] = []; + private readonly resourceGraphClient: ResourceGraphClient; constructor(private readonly config: AzureFunctionsConfig) { - const creds = new ClientSecretCredential( - config.tenantId, - config.clientId, - config.clientSecret, - ); - for (const subscription of config.allowedSubscriptions) { - if (!this.clients.some(c => c.subscriptionId === subscription.id)) { - this.clients.push(new WebSiteManagementClient(creds, subscription.id)); - } - } + const creds = + config.clientId && config.clientSecret + ? new ClientSecretCredential( + config.tenantId, + config.clientId, + config.clientSecret, + ) + : new DefaultAzureCredential({ tenantId: config.tenantId }); + + this.resourceGraphClient = new ResourceGraphClient(creds); } static fromConfig(config: Config): AzureWebManagementApi { @@ -79,29 +82,27 @@ export class AzureWebManagementApi { functionName: string; }): Promise { const items = []; - for (const client of this.clients) { - try { - for await (const webApp of client.webApps.list()) { - if (!webApp.name!.startsWith(functionName)) { - continue; - } - const v = webApp!; - items.push({ - href: `${this.baseHref(this.config.domain)}${v.id!}`, - logstreamHref: `${this.baseHref( - this.config.domain, - )}${v.id!}/logStream`, - functionName: v.name!, - location: v.location!, - lastModifiedDate: v.lastModifiedTimeUtc!, - usageState: v.usageState!, - state: v.state!, - containerSize: v.containerSize!, - }); - } - } catch (ex) { - console.log(ex); + try { + const result = await this.resourceGraphClient.resources({ + query: `resources | where type == 'microsoft.web/sites' | where name contains '${functionName}'`, + subscriptions: this.config.allowedSubscriptions.map(s => s.id), + }); + for (const v of result.data) { + items.push({ + href: `${this.baseHref(this.config.domain)}${v.id!}`, + logstreamHref: `${this.baseHref( + this.config.domain, + )}${v.id!}/logStream`, + functionName: v.name!, + location: v.location!, + lastModifiedDate: v.properties.lastModifiedTimeUtc!, + usageState: v.properties.usageState!, + state: v.properties.state!, + containerSize: v.properties.containerSize!, + }); } + } catch (ex) { + console.log(ex); } return { items: items }; } diff --git a/plugins/azure-functions/README.md b/plugins/azure-functions/README.md index 4d3cf0e579..3cd0bef945 100644 --- a/plugins/azure-functions/README.md +++ b/plugins/azure-functions/README.md @@ -24,7 +24,7 @@ To be able to use the Azure Functions plugin you need to add the following annot portal.azure.com/functions-name: ``` -`` can be an exact or partial name for the functions' app. When using a partial name, it's important that the value here matches the **start** of the functions name. +`` can be an exact or partial name for the functions' app. Example of Partial Matching: diff --git a/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts b/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts index 58c1d9544d..3336e11fb3 100644 --- a/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts +++ b/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts @@ -39,12 +39,12 @@ export class AzureFunctionsBackendClient implements AzureFunctionsApi { const url = `${await this.discoveryApi.getBaseUrl( 'azure-functions', )}/list/${functionName}`; - const { token: idToken } = await this.identityApi.getCredentials(); + const { token: accessToken } = await this.identityApi.getCredentials(); const response = await fetch(url, { method: 'GET', headers: { 'Content-Type': 'application/json', - ...(idToken && { Authorization: `Bearer ${idToken}` }), + ...(accessToken && { Authorization: `Bearer ${accessToken}` }), }, }); return await response.json(); diff --git a/yarn.lock b/yarn.lock index 34310d053b..26c7ff30fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -337,18 +337,15 @@ __metadata: languageName: node linkType: hard -"@azure/arm-appservice@npm:^13.0.0": - version: 13.0.0 - resolution: "@azure/arm-appservice@npm:13.0.0" +"@azure/arm-resourcegraph@npm:^4.2.1": + version: 4.2.1 + resolution: "@azure/arm-resourcegraph@npm:4.2.1" dependencies: - "@azure/abort-controller": ^1.0.0 - "@azure/core-auth": ^1.3.0 - "@azure/core-client": ^1.5.0 - "@azure/core-lro": ^2.2.0 - "@azure/core-paging": ^1.2.0 - "@azure/core-rest-pipeline": ^1.8.0 - tslib: ^2.2.0 - checksum: 0a21b4d462ac0ba5b46561ef90559bfc2b1f5a2a8ea551ae13f95205b4aafee5b5bd5d03f52fced7687af8d5f37d5451b48b4edc8acabf977b534af1b2790dcd + "@azure/core-auth": ^1.1.4 + "@azure/ms-rest-azure-js": ^2.1.0 + "@azure/ms-rest-js": ^2.2.0 + tslib: ^1.10.0 + checksum: a5afea9faef84ed4576fda430301039524aefe6976a54204fe4453e672aa3d13edc7ef5c996ad6293e9afa3a0833549174aaac18ce236c4ec1242698e2c22bd2 languageName: node linkType: hard @@ -359,6 +356,16 @@ __metadata: languageName: node linkType: hard +"@azure/core-auth@npm:^1.1.4": + version: 1.4.0 + resolution: "@azure/core-auth@npm:1.4.0" + dependencies: + "@azure/abort-controller": ^1.0.0 + tslib: ^2.2.0 + checksum: 1c76c296fe911ad39fc780b033c25a92c41c5a15f011b816d42c13584f627a4dd153dfb4334900ec93eb5b006e14bdda37e8412a7697c5a9636a0abaccffad39 + languageName: node + linkType: hard + "@azure/core-auth@npm:^1.3.0": version: 1.3.2 resolution: "@azure/core-auth@npm:1.3.2" @@ -369,16 +376,6 @@ __metadata: languageName: node linkType: hard -"@azure/core-auth@npm:^1.4.0": - version: 1.4.0 - resolution: "@azure/core-auth@npm:1.4.0" - dependencies: - "@azure/abort-controller": ^1.0.0 - tslib: ^2.2.0 - checksum: 1c76c296fe911ad39fc780b033c25a92c41c5a15f011b816d42c13584f627a4dd153dfb4334900ec93eb5b006e14bdda37e8412a7697c5a9636a0abaccffad39 - languageName: node - linkType: hard - "@azure/core-client@npm:^1.4.0": version: 1.5.0 resolution: "@azure/core-client@npm:1.5.0" @@ -394,21 +391,6 @@ __metadata: languageName: node linkType: hard -"@azure/core-client@npm:^1.5.0": - version: 1.6.1 - resolution: "@azure/core-client@npm:1.6.1" - dependencies: - "@azure/abort-controller": ^1.0.0 - "@azure/core-auth": ^1.4.0 - "@azure/core-rest-pipeline": ^1.9.1 - "@azure/core-tracing": ^1.0.0 - "@azure/core-util": ^1.0.0 - "@azure/logger": ^1.0.0 - tslib: ^2.2.0 - checksum: 400890a9b5f0c8801ff92005c3cba7bb5124634e321735406731bef33688a79f23d28b49fccdfab90814dade41a13f3d3cb99f80151a2bff17628416e811afb6 - languageName: node - linkType: hard - "@azure/core-http@npm:^2.0.0": version: 2.2.4 resolution: "@azure/core-http@npm:2.2.4" @@ -453,15 +435,6 @@ __metadata: languageName: node linkType: hard -"@azure/core-paging@npm:^1.2.0": - version: 1.3.0 - resolution: "@azure/core-paging@npm:1.3.0" - dependencies: - tslib: ^2.2.0 - checksum: 3fbf3d6474e2346f7c3ea8344a41bf41e053789efbbd29df78365e9c9ca66e143da3e5407d8c9dd5ddc82a65680185cd6f0ec851c48635776d18a6a605a98e78 - languageName: node - linkType: hard - "@azure/core-rest-pipeline@npm:^1.1.0, @azure/core-rest-pipeline@npm:^1.5.0": version: 1.5.0 resolution: "@azure/core-rest-pipeline@npm:1.5.0" @@ -479,24 +452,6 @@ __metadata: languageName: node linkType: hard -"@azure/core-rest-pipeline@npm:^1.8.0, @azure/core-rest-pipeline@npm:^1.9.1": - version: 1.9.2 - resolution: "@azure/core-rest-pipeline@npm:1.9.2" - dependencies: - "@azure/abort-controller": ^1.0.0 - "@azure/core-auth": ^1.4.0 - "@azure/core-tracing": ^1.0.1 - "@azure/core-util": ^1.0.0 - "@azure/logger": ^1.0.0 - form-data: ^4.0.0 - http-proxy-agent: ^5.0.0 - https-proxy-agent: ^5.0.0 - tslib: ^2.2.0 - uuid: ^8.3.0 - checksum: cdfdaf8bdb0778f40ecfeb8b5da0b4f8643d641b75bb5869485afd38f7c3127ab088ac2fe2980df03d28fb6715928e04560343ee6416246aebe75443c4dd2906 - languageName: node - linkType: hard - "@azure/core-tracing@npm:1.0.0-preview.13": version: 1.0.0-preview.13 resolution: "@azure/core-tracing@npm:1.0.0-preview.13" @@ -507,7 +462,7 @@ __metadata: languageName: node linkType: hard -"@azure/core-tracing@npm:^1.0.0, @azure/core-tracing@npm:^1.0.1": +"@azure/core-tracing@npm:^1.0.0": version: 1.0.1 resolution: "@azure/core-tracing@npm:1.0.1" dependencies: @@ -558,6 +513,34 @@ __metadata: languageName: node linkType: hard +"@azure/ms-rest-azure-js@npm:^2.1.0": + version: 2.1.0 + resolution: "@azure/ms-rest-azure-js@npm:2.1.0" + dependencies: + "@azure/core-auth": ^1.1.4 + "@azure/ms-rest-js": ^2.2.0 + tslib: ^1.10.0 + checksum: 0e6d6700f4ee0ad14383642b02fe86b33f4034aaff38499374ed5be59154e869ee231790d20b7557622ebcdfa9eed45dc2559391a79dee51c849a8ced0c86fed + languageName: node + linkType: hard + +"@azure/ms-rest-js@npm:^2.2.0": + version: 2.6.2 + resolution: "@azure/ms-rest-js@npm:2.6.2" + dependencies: + "@azure/core-auth": ^1.1.4 + abort-controller: ^3.0.0 + form-data: ^2.5.0 + node-fetch: ^2.6.7 + tough-cookie: ^3.0.1 + tslib: ^1.10.0 + tunnel: 0.0.6 + uuid: ^8.3.2 + xml2js: ^0.4.19 + checksum: de650dfc3928a2036923fb3bf50e0324f9f36f5d320ca6d128005b1345ad80b39ab3410073ac35fb137dec4c7d799c602b1cafdf9573b3432b6b8eee8a1e39f8 + languageName: node + linkType: hard + "@azure/msal-browser@npm:^2.26.0": version: 2.27.0 resolution: "@azure/msal-browser@npm:2.27.0" @@ -4181,7 +4164,7 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-azure-functions-backend@workspace:plugins/azure-functions-backend" dependencies: - "@azure/arm-appservice": ^13.0.0 + "@azure/arm-resourcegraph": ^4.2.1 "@azure/identity": ^2.1.0 "@backstage/backend-common": ^0.15.1-next.2 "@backstage/cli": ^0.19.0-next.2 @@ -25917,6 +25900,13 @@ __metadata: languageName: node linkType: hard +"ip-regex@npm:^2.1.0": + version: 2.1.0 + resolution: "ip-regex@npm:2.1.0" + checksum: 331d95052aa53ce245745ea0fc3a6a1e2e3c8d6da65fa8ea52bf73768c1b22a9ac50629d1d2b08c04e7b3ac4c21b536693c149ce2c2615ee4796030e5b3e3cba + languageName: node + linkType: hard + "ip@npm:^1.1.5": version: 1.1.5 resolution: "ip@npm:1.1.5" @@ -38850,6 +38840,17 @@ __metadata: languageName: node linkType: hard +"tough-cookie@npm:^3.0.1": + version: 3.0.1 + resolution: "tough-cookie@npm:3.0.1" + dependencies: + ip-regex: ^2.1.0 + psl: ^1.1.28 + punycode: ^2.1.1 + checksum: 796f6239bce5674a1267b19f41972a2602a2a23715817237b5922b0dc2343512512eea7d41d29210a4ec545f8ef32173bbbf01277dd8ec3ae3841b19cbe69f67 + languageName: node + linkType: hard + "tough-cookie@npm:^4.0.0": version: 4.0.0 resolution: "tough-cookie@npm:4.0.0" @@ -39056,7 +39057,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^1.8.1, tslib@npm:^1.9.0, tslib@npm:^1.9.3": +"tslib@npm:^1.10.0, tslib@npm:^1.8.1, tslib@npm:^1.9.0, tslib@npm:^1.9.3": version: 1.14.1 resolution: "tslib@npm:1.14.1" checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd From 0ba29255a1c5d0174097794a516a527306eab099 Mon Sep 17 00:00:00 2001 From: Wesley Date: Thu, 15 Sep 2022 22:33:57 +0200 Subject: [PATCH 019/278] fix dates Signed-off-by: Wesley --- .../OverviewTableComponent/OverviewTable.test.tsx | 7 +++---- .../components/OverviewTableComponent/OverviewTable.tsx | 4 +++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.test.tsx b/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.test.tsx index 18cf40410c..1dc40a795a 100644 --- a/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.test.tsx +++ b/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.test.tsx @@ -80,10 +80,9 @@ describe('AzureFunctionsOverviewWidget', () => { ).toBeInTheDocument(); expect( await rendered.findByText( - functionResponseMock.lastModifiedDate.toLocaleString( - window.navigator.language, - DateTime.DATETIME_FULL, - ), + DateTime.fromISO( + functionResponseMock.lastModifiedDate.toString(), + ).toLocaleString(DateTime.DATETIME_MED), ), ).toBeInTheDocument(); }); diff --git a/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx b/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx index 58858171bf..66dc82ba59 100644 --- a/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx +++ b/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx @@ -76,7 +76,9 @@ const DEFAULT_COLUMNS: TableColumn[] = [ { title: 'last modified', render: (func: FunctionsData) => - func.lastModifiedDate.toLocaleString(lang, DateTime.DATETIME_FULL), + DateTime.fromISO(func.lastModifiedDate.toString()).toLocaleString( + DateTime.DATETIME_MED, + ), }, { title: 'logs', From 199f8efc36b71c58e6aa644b7cade361d3f261f1 Mon Sep 17 00:00:00 2001 From: Wesley Date: Thu, 15 Sep 2022 22:43:37 +0200 Subject: [PATCH 020/278] remove unused var Signed-off-by: Wesley --- .../src/components/OverviewTableComponent/OverviewTable.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx b/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx index 66dc82ba59..1ac75bfd5d 100644 --- a/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx +++ b/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx @@ -22,7 +22,6 @@ import FlashOnIcon from '@material-ui/icons/FlashOn'; import { DateTime } from 'luxon'; type States = 'Waiting' | 'Running' | 'Paused' | 'Failed'; -const lang = window.navigator.language; const State = ({ value }: { value: States }) => { const colorMap = { From 7ebd37c9910c02fd4d531aed5b96511aebd33e80 Mon Sep 17 00:00:00 2001 From: Wesley Date: Sat, 17 Sep 2022 11:14:36 +0200 Subject: [PATCH 021/278] (wip) refactor to more generic azure plugin Signed-off-by: Wesley --- .changeset/tasty-colts-hug.md | 6 +- microsite/data/plugins/azure-functions.yaml | 9 - microsite/data/plugins/azure.yaml | 9 + microsite/static/img/azure-icon.svg | 23 + packages/app/package.json | 2 +- packages/backend/package.json | 2 +- .../.eslintrc.js | 0 .../README.md | 33 +- .../package.json | 9 +- .../schema.d.ts | 21 +- .../src/api/AzureSitesApi.ts} | 65 +- .../src/api/index.ts | 3 +- plugins/azure-backend/src/config.ts | 42 + .../src/index.ts | 0 .../src/run.ts | 0 .../src/service/router.ts | 14 +- .../src/service/standaloneServer.ts | 8 +- .../src/setupTests.ts | 0 .../.eslintrc.js | 0 .../api-report.md | 23 +- .../package.json | 6 +- .../src/index.ts | 0 .../src/types.ts | 19 +- plugins/azure-functions-backend/api-report.md | 60 - plugins/azure-functions/api-report.md | 64 - .../{azure-functions => azure}/.eslintrc.js | 0 plugins/{azure-functions => azure}/README.md | 24 +- .../{azure-functions => azure}/dev/index.tsx | 4 +- .../docs/functions-table.png | Bin .../{azure-functions => azure}/package.json | 7 +- .../src/api/AzureSitesApi.ts} | 14 +- .../src/api/AzureSitesApiBackendClient.ts} | 16 +- .../src/api/index.ts | 6 +- .../AzureSitesOverview.tsx} | 38 +- .../AzureSitesOverviewTable.test.tsx} | 31 +- .../AzureSitesOverviewTable.tsx} | 32 +- .../src/hooks/useServiceEntityAnnotations.ts | 8 +- .../src/hooks/useSites.ts} | 22 +- .../{azure-functions => azure}/src/index.ts | 2 +- .../src/mocks/mocks.ts | 17 +- .../src/plugin.test.ts | 6 +- .../{azure-functions => azure}/src/plugin.ts | 20 +- .../{azure-functions => azure}/src/routes.ts | 2 +- .../src/setupTests.ts | 0 yarn.lock | 9134 +++++++---------- 45 files changed, 3830 insertions(+), 5971 deletions(-) delete mode 100644 microsite/data/plugins/azure-functions.yaml create mode 100644 microsite/data/plugins/azure.yaml create mode 100644 microsite/static/img/azure-icon.svg rename plugins/{azure-functions-backend => azure-backend}/.eslintrc.js (100%) rename plugins/{azure-functions-backend => azure-backend}/README.md (64%) rename plugins/{azure-functions-backend => azure-backend}/package.json (84%) rename plugins/{azure-functions-backend => azure-backend}/schema.d.ts (86%) rename plugins/{azure-functions-backend/src/api/AzureWebManagementApi.ts => azure-backend/src/api/AzureSitesApi.ts} (52%) rename plugins/{azure-functions => azure-backend}/src/api/index.ts (87%) create mode 100644 plugins/azure-backend/src/config.ts rename plugins/{azure-functions-backend => azure-backend}/src/index.ts (100%) rename plugins/{azure-functions-backend => azure-backend}/src/run.ts (100%) rename plugins/{azure-functions-backend => azure-backend}/src/service/router.ts (78%) rename plugins/{azure-functions-backend => azure-backend}/src/service/standaloneServer.ts (85%) rename plugins/{azure-functions-backend => azure-backend}/src/setupTests.ts (100%) rename plugins/{azure-functions-common => azure-common}/.eslintrc.js (100%) rename plugins/{azure-functions-common => azure-common}/api-report.md (50%) rename plugins/{azure-functions-common => azure-common}/package.json (82%) rename plugins/{azure-functions-common => azure-common}/src/index.ts (100%) rename plugins/{azure-functions-common => azure-common}/src/types.ts (76%) delete mode 100644 plugins/azure-functions-backend/api-report.md delete mode 100644 plugins/azure-functions/api-report.md rename plugins/{azure-functions => azure}/.eslintrc.js (100%) rename plugins/{azure-functions => azure}/README.md (53%) rename plugins/{azure-functions => azure}/dev/index.tsx (85%) rename plugins/{azure-functions => azure}/docs/functions-table.png (100%) rename plugins/{azure-functions => azure}/package.json (91%) rename plugins/{azure-functions/src/api/AzureFunctionsApi.ts => azure/src/api/AzureSitesApi.ts} (68%) rename plugins/{azure-functions/src/api/AzureFunctionsBackendClient.ts => azure/src/api/AzureSitesApiBackendClient.ts} (76%) rename plugins/{azure-functions-backend => azure}/src/api/index.ts (86%) rename plugins/{azure-functions/src/components/AzureFunctionsOverviewComponent/AzureFunctionsOverview.tsx => azure/src/components/AzureSitesOverviewComponent/AzureSitesOverview.tsx} (56%) rename plugins/{azure-functions/src/components/OverviewTableComponent/OverviewTable.test.tsx => azure/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.test.tsx} (71%) rename plugins/{azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx => azure/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.tsx} (77%) rename plugins/{azure-functions => azure}/src/hooks/useServiceEntityAnnotations.ts (79%) rename plugins/{azure-functions/src/hooks/useFunctions.ts => azure/src/hooks/useSites.ts} (66%) rename plugins/{azure-functions => azure}/src/index.ts (88%) rename plugins/{azure-functions => azure}/src/mocks/mocks.ts (82%) rename plugins/{azure-functions => azure}/src/plugin.test.ts (83%) rename plugins/{azure-functions => azure}/src/plugin.ts (69%) rename plugins/{azure-functions => azure}/src/routes.ts (96%) rename plugins/{azure-functions => azure}/src/setupTests.ts (100%) diff --git a/.changeset/tasty-colts-hug.md b/.changeset/tasty-colts-hug.md index e5957baf29..ed76ab0048 100644 --- a/.changeset/tasty-colts-hug.md +++ b/.changeset/tasty-colts-hug.md @@ -1,7 +1,7 @@ --- -'@backstage/plugin-azure-functions': minor -'@backstage/plugin-azure-functions-backend': minor -'@backstage/plugin-azure-functions-common': minor +'@backstage/plugin-azure': minor +'@backstage/plugin-azure-backend': minor +'@backstage/plugin-azure-common': minor --- Azure Functions Plugin support based on annotation supplied by the entity. diff --git a/microsite/data/plugins/azure-functions.yaml b/microsite/data/plugins/azure-functions.yaml deleted file mode 100644 index 883a893418..0000000000 --- a/microsite/data/plugins/azure-functions.yaml +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Azure Functions -author: FRISS -authorUrl: https://friss.com -category: Infrastructure -description: View Azure Functions for your components in Backstage. -documentation: https://github.com/backstage/backstage/tree/master/plugins/azure-functions -iconUrl: img/azurefunctions-icon.svg -npmPackageName: '@backstage/plugin-azure-functions' diff --git a/microsite/data/plugins/azure.yaml b/microsite/data/plugins/azure.yaml new file mode 100644 index 0000000000..f2bc181264 --- /dev/null +++ b/microsite/data/plugins/azure.yaml @@ -0,0 +1,9 @@ +--- +title: Azure +author: FRISS +authorUrl: https://friss.com +category: Infrastructure +description: View related Azure information for your components in Backstage. +documentation: https://github.com/backstage/backstage/tree/master/plugins/azure +iconUrl: img/azure-icon.svg +npmPackageName: '@backstage/plugin-azure' diff --git a/microsite/static/img/azure-icon.svg b/microsite/static/img/azure-icon.svg new file mode 100644 index 0000000000..23b8f31af4 --- /dev/null +++ b/microsite/static/img/azure-icon.svg @@ -0,0 +1,23 @@ + diff --git a/packages/app/package.json b/packages/app/package.json index 63130a0835..0da6d3d7ab 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -18,8 +18,8 @@ "@backstage/plugin-airbrake": "^0.3.9-next.3", "@backstage/plugin-apache-airflow": "^0.2.2-next.3", "@backstage/plugin-api-docs": "^0.8.9-next.3", + "@backstage/plugin-azure": "^0.0.0", "@backstage/plugin-azure-devops": "^0.2.0-next.3", - "@backstage/plugin-azure-functions": "^0.0.0", "@backstage/plugin-badges": "^0.2.33-next.3", "@backstage/plugin-catalog-common": "^1.0.6-next.0", "@backstage/plugin-catalog-graph": "^0.2.21-next.2", diff --git a/packages/backend/package.json b/packages/backend/package.json index 1d3455cdff..9b696a1761 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -35,8 +35,8 @@ "@backstage/plugin-app-backend": "^0.3.36-next.3", "@backstage/plugin-auth-backend": "^0.16.0-next.3", "@backstage/plugin-auth-node": "^0.2.5-next.3", + "@backstage/plugin-azure-backend": "^0.0.0", "@backstage/plugin-azure-devops-backend": "^0.3.15-next.2", - "@backstage/plugin-azure-functions-backend": "^0.0.0", "@backstage/plugin-badges-backend": "^0.1.30-next.1", "@backstage/plugin-catalog-backend": "^1.4.0-next.3", "@backstage/plugin-code-coverage-backend": "^0.2.2-next.2", diff --git a/plugins/azure-functions-backend/.eslintrc.js b/plugins/azure-backend/.eslintrc.js similarity index 100% rename from plugins/azure-functions-backend/.eslintrc.js rename to plugins/azure-backend/.eslintrc.js diff --git a/plugins/azure-functions-backend/README.md b/plugins/azure-backend/README.md similarity index 64% rename from plugins/azure-functions-backend/README.md rename to plugins/azure-backend/README.md index c857888882..98d72836b6 100644 --- a/plugins/azure-functions-backend/README.md +++ b/plugins/azure-backend/README.md @@ -1,4 +1,4 @@ -# Azure Functions Backend +# Azure Backend Simple plugin that proxies requests to the Azure Portal API through Azure SDK JavaScript libraries. @@ -6,21 +6,20 @@ _Inspired by [roadie.io AWS Lamda plugin](https://roadie.io/backstage/plugins/aw ## Setup -The following sections will help you get the Azure Functions Backend plugin setup and running. +The following sections will help you get the Azure Backend plugin setup and running. ### Configuration -The Azure Functions plugin requires the following YAML to be added to your app-config.yaml: +The Azure plugin requires the following YAML to be added to your app-config.yaml: ```yaml -azureFunctions: +azure: domain: tenantId: clientId: clientSecret: allowedSubscriptions: - id: - name: ``` Configuration Details: @@ -28,26 +27,26 @@ Configuration Details: - `domain` can be found by visiting the [Directories + Subscriptions settings page](https://portal.azure.com/#settings/directory). Alternatively you can inspect the [Azure home](https://portal.azure.com/#home) URL - `https://portal.azure.com/#@/`. - `tenantId` can be found by visiting [Azure Directory Overview page](https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade). - (Optional) `clientId` and `clientSecret` can be the same values you used for [Azure DevOps Backend](https://github.com/backstage/backstage/tree/master/plugins/azure-devops-backend) or [Azure Integration](https://backstage.io/docs/integrations/azure/org#app-registration) as long as this App Registration has permissions to read your function apps. -- `allowedSubscriptions` is an array of `id` and `name` that will be used to iterate over and look for the specified functions' app. `id` and `name` can be found the [Subscriptions page](https://portal.azure.com/#view/Microsoft_Azure_Billing/SubscriptionsBlade). +- (Optional) `allowedSubscriptions` is an array of `id` that will be used to iterate over and look for the specified functions' app. `id` can be found the [Subscriptions page](https://portal.azure.com/#view/Microsoft_Azure_Billing/SubscriptionsBlade). ### Integrating Here's how to get the backend plugin up and running: -1. First we need to add the `@backstage/plugin-azure-functions-backend` package to your backend: +1. First we need to add the `@backstage/plugin-azure-backend` package to your backend: ```sh # From the Backstage root directory - yarn add --cwd packages/backend @backstage/plugin-azure-functions-backend + yarn add --cwd packages/backend @backstage/plugin-azure-backend ``` -2. Then we will create a new file named `packages/backend/src/plugins/azure-functions.ts`, and add the following to it: +2. Then we will create a new file named `packages/backend/src/plugins/azure.ts`, and add the following to it: ```ts import { createRouter, - AzureWebManagementApi, - } from '@backstage/plugin-azure-functions-backend'; + AzureSitesApi, + } from '@backstage/plugin-azure-backend'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; @@ -56,7 +55,7 @@ Here's how to get the backend plugin up and running: ): Promise { return await createRouter({ logger: env.logger, - azureWebManagementApi: AzureWebManagementApi.fromConfig(env.config), + azureSitesApi: AzureSitesApi.fromConfig(env.config), }); } ``` @@ -64,23 +63,23 @@ Here's how to get the backend plugin up and running: 3. Next we wire this into the overall backend router, edit `packages/backend/src/index.ts`: ```ts - import azureFunctions from './plugins/azure-functions'; + import azure from './plugins/azure'; // Removed for clairty... async function main() { // ... // Add this line under the other lines that follow the useHotMemoize pattern - const azureFunctionsEnv = useHotMemoize(module, () => - createEnv('azureFunctions'), + const azureEnv = useHotMemoize(module, () => + createEnv('azure'), ); // ... // Insert this line under the other lines that add their routers to apiRouter in the same way - apiRouter.use('/azure-functions', await azureFunctions(azureFunctionsEnv)); + apiRouter.use('/azure', await azure(azureEnv)); } ``` 4. Now run `yarn start-backend` from the repo root. -5. Finally, open `http://localhost:7007/api/azure-functions/health` in a browser, it should return `{"status":"ok"}`. +5. Finally, open `http://localhost:7007/api/azure/health` in a browser, it should return `{"status":"ok"}`. diff --git a/plugins/azure-functions-backend/package.json b/plugins/azure-backend/package.json similarity index 84% rename from plugins/azure-functions-backend/package.json rename to plugins/azure-backend/package.json index 3758cbc316..2a111ec57b 100644 --- a/plugins/azure-functions-backend/package.json +++ b/plugins/azure-backend/package.json @@ -1,5 +1,5 @@ { - "name": "@backstage/plugin-azure-functions-backend", + "name": "@backstage/plugin-azure-backend", "version": "0.0.0", "main": "src/index.ts", "types": "src/index.ts", @@ -17,11 +17,10 @@ "repository": { "type": "git", "url": "https://github.com/backstage/backstage", - "directory": "plugins/azure-functions-backend" + "directory": "plugins/azure-backend" }, "keywords": [ "backstage", - "functions", "azure" ], "scripts": { @@ -36,9 +35,9 @@ "dependencies": { "@azure/arm-resourcegraph": "^4.2.1", "@azure/identity": "^2.1.0", - "@backstage/backend-common": "^0.15.1-next.2", + "@backstage/backend-common": "^0.15.1-next.3", "@backstage/config": "^1.0.2-next.0", - "@backstage/plugin-azure-functions-common": "^0.0.0", + "@backstage/plugin-azure-common": "^0.0.0", "@types/express": "*", "express": "^4.17.1", "express-promise-router": "^4.1.0", diff --git a/plugins/azure-functions-backend/schema.d.ts b/plugins/azure-backend/schema.d.ts similarity index 86% rename from plugins/azure-functions-backend/schema.d.ts rename to plugins/azure-backend/schema.d.ts index db9195f950..9db9a99252 100644 --- a/plugins/azure-functions-backend/schema.d.ts +++ b/plugins/azure-backend/schema.d.ts @@ -15,23 +15,20 @@ */ export interface Config { - azureFunctions: { + azure: { + /** @visibility backend */ + domain: string; /** @visibility backend */ tenantId: string; /** @visibility backend */ + subscriptions?: [ + { + id: string; + }, + ]; + /** @visibility backend */ clientId?: string; /** @visibility secret */ clientSecret?: string; - /** @visibility backend */ - domain: string; - /** @visibility backend */ - allowedSubscriptions: [ - { - /** @visibility backend */ - name: string; - /** @visibility backend */ - id: string; - }, - ]; }; } diff --git a/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts b/plugins/azure-backend/src/api/AzureSitesApi.ts similarity index 52% rename from plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts rename to plugins/azure-backend/src/api/AzureSitesApi.ts index eebd80d8ce..3c307c5d75 100644 --- a/plugins/azure-functions-backend/src/api/AzureWebManagementApi.ts +++ b/plugins/azure-backend/src/api/AzureSitesApi.ts @@ -20,46 +20,16 @@ import { ClientSecretCredential, } from '@azure/identity'; import { ResourceGraphClient } from '@azure/arm-resourcegraph'; -import { - AzureFunctionsAllowedSubscriptionsConfig, - FunctionsListResponse, -} from '@backstage/plugin-azure-functions-common'; +import { Site, SiteList } from '@backstage/plugin-azure-common'; +import { AzureConfig } from '../config'; /** @public */ -export class AzureFunctionsConfig { - constructor( - public readonly domain: string, - public readonly allowedSubscriptions: AzureFunctionsAllowedSubscriptionsConfig[], - public readonly tenantId: string, - public readonly clientId?: string, - public readonly clientSecret?: string, - ) {} - - static fromConfig(config: Config): AzureFunctionsConfig { - const azfConfig = config.getConfig('azureFunctions'); - - return new AzureFunctionsConfig( - azfConfig.getString('domain'), - azfConfig - .getConfigArray('allowedSubscriptions') - .map(as => ({ - id: as.getString('id'), - name: as.getString('name'), - })), - azfConfig.getString('tenantId'), - azfConfig.getOptionalString('clientId'), - azfConfig.getOptionalString('clientSecret'), - ); - } -} - -/** @public */ -export class AzureWebManagementApi { +export class AzureSitesApi { private readonly baseHref = (domain: string) => `https://portal.azure.com/#@${domain}/resource`; - private readonly resourceGraphClient: ResourceGraphClient; + private readonly client: ResourceGraphClient; - constructor(private readonly config: AzureFunctionsConfig) { + constructor(private readonly config: AzureConfig) { const creds = config.clientId && config.clientSecret ? new ClientSecretCredential( @@ -69,23 +39,19 @@ export class AzureWebManagementApi { ) : new DefaultAzureCredential({ tenantId: config.tenantId }); - this.resourceGraphClient = new ResourceGraphClient(creds); + this.client = new ResourceGraphClient(creds); } - static fromConfig(config: Config): AzureWebManagementApi { - return new AzureWebManagementApi(AzureFunctionsConfig.fromConfig(config)); + static fromConfig(config: Config): AzureSitesApi { + return new AzureSitesApi(AzureConfig.fromConfig(config)); } - async list({ - functionName, - }: { - functionName: string; - }): Promise { - const items = []; + async list({ name }: { name: string }): Promise { + const items: Site[] = []; try { - const result = await this.resourceGraphClient.resources({ - query: `resources | where type == 'microsoft.web/sites' | where name contains '${functionName}'`, - subscriptions: this.config.allowedSubscriptions.map(s => s.id), + const result = await this.client.resources({ + query: `resources | where type == 'microsoft.web/sites' | where name contains '${name}'`, + subscriptions: this.config.subscriptions, }); for (const v of result.data) { items.push({ @@ -93,12 +59,15 @@ export class AzureWebManagementApi { logstreamHref: `${this.baseHref( this.config.domain, )}${v.id!}/logStream`, - functionName: v.name!, + name: v.name!, + kind: v.kind!, + resourceGroup: v.resourceGroup!, location: v.location!, lastModifiedDate: v.properties.lastModifiedTimeUtc!, usageState: v.properties.usageState!, state: v.properties.state!, containerSize: v.properties.containerSize!, + tags: v.properties.tags!, }); } } catch (ex) { diff --git a/plugins/azure-functions/src/api/index.ts b/plugins/azure-backend/src/api/index.ts similarity index 87% rename from plugins/azure-functions/src/api/index.ts rename to plugins/azure-backend/src/api/index.ts index de6176a600..187dc1314b 100644 --- a/plugins/azure-functions/src/api/index.ts +++ b/plugins/azure-backend/src/api/index.ts @@ -14,5 +14,4 @@ * limitations under the License. */ -export * from './AzureFunctionsApi'; -export * from './AzureFunctionsBackendClient'; +export { AzureSitesApi } from './AzureSitesApi'; diff --git a/plugins/azure-backend/src/config.ts b/plugins/azure-backend/src/config.ts new file mode 100644 index 0000000000..48e15ac54b --- /dev/null +++ b/plugins/azure-backend/src/config.ts @@ -0,0 +1,42 @@ +/* + * 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'; + +/** @public */ +export class AzureConfig { + constructor( + public readonly domain: string, + public readonly tenantId: string, + public readonly subscriptions?: string[], + public readonly clientId?: string, + public readonly clientSecret?: string, + ) {} + + static fromConfig(config: Config): AzureConfig { + const azConfig = config.getConfig('azure'); + + return new AzureConfig( + azConfig.getString('domain'), + azConfig.getString('tenantId'), + azConfig + .getOptionalConfigArray('subscriptions') + ?.map(as => as.getString('id')), + azConfig.getOptionalString('clientId'), + azConfig.getOptionalString('clientSecret'), + ); + } +} diff --git a/plugins/azure-functions-backend/src/index.ts b/plugins/azure-backend/src/index.ts similarity index 100% rename from plugins/azure-functions-backend/src/index.ts rename to plugins/azure-backend/src/index.ts diff --git a/plugins/azure-functions-backend/src/run.ts b/plugins/azure-backend/src/run.ts similarity index 100% rename from plugins/azure-functions-backend/src/run.ts rename to plugins/azure-backend/src/run.ts diff --git a/plugins/azure-functions-backend/src/service/router.ts b/plugins/azure-backend/src/service/router.ts similarity index 78% rename from plugins/azure-functions-backend/src/service/router.ts rename to plugins/azure-backend/src/service/router.ts index 81fb79b1ba..4e4cb36630 100644 --- a/plugins/azure-functions-backend/src/service/router.ts +++ b/plugins/azure-backend/src/service/router.ts @@ -19,19 +19,19 @@ import express from 'express'; import Router from 'express-promise-router'; import { Logger } from 'winston'; -import { AzureWebManagementApi } from '../api'; +import { AzureSitesApi } from '../api'; /** @public */ export interface RouterOptions { logger: Logger; - azureWebManagementApi: AzureWebManagementApi; + azureSitesApi: AzureSitesApi; } /** @public */ export async function createRouter( options: RouterOptions, ): Promise { - const { logger, azureWebManagementApi } = options; + const { logger, azureSitesApi } = options; const router = Router(); router.use(express.json()); @@ -40,11 +40,11 @@ export async function createRouter( logger.info('PONG!'); response.send({ status: 'ok' }); }); - router.get('/list/:functionName', async (request, response) => { - const { functionName } = request.params; + router.get('/list/:name', async (request, response) => { + const { name } = request.params; response.json( - await azureWebManagementApi.list({ - functionName: functionName, + await azureSitesApi.list({ + name: name, }), ); }); diff --git a/plugins/azure-functions-backend/src/service/standaloneServer.ts b/plugins/azure-backend/src/service/standaloneServer.ts similarity index 85% rename from plugins/azure-functions-backend/src/service/standaloneServer.ts rename to plugins/azure-backend/src/service/standaloneServer.ts index 0ccffb311c..1998bee023 100644 --- a/plugins/azure-functions-backend/src/service/standaloneServer.ts +++ b/plugins/azure-backend/src/service/standaloneServer.ts @@ -20,7 +20,7 @@ import { } from '@backstage/backend-common'; import { Server } from 'http'; import { Logger } from 'winston'; -import { AzureWebManagementApi } from '../api'; +import { AzureSitesApi } from '../api'; import { createRouter } from './router'; export interface ServerOptions { @@ -32,17 +32,17 @@ export interface ServerOptions { export async function startStandaloneServer( options: ServerOptions, ): Promise { - const logger = options.logger.child({ service: 'azure-functions-backend' }); + const logger = options.logger.child({ service: 'azure-backend' }); const config = await loadBackendConfig({ logger, argv: process.argv }); logger.debug('Starting application server...'); const router = await createRouter({ logger, - azureWebManagementApi: AzureWebManagementApi.fromConfig(config), + azureSitesApi: AzureSitesApi.fromConfig(config), }); let service = createServiceBuilder(module) .setPort(options.port) - .addRouter('/azure-functions-backend', router); + .addRouter('/azure-backend', router); if (options.enableCors) { service = service.enableCors({ origin: 'http://localhost:3000' }); } diff --git a/plugins/azure-functions-backend/src/setupTests.ts b/plugins/azure-backend/src/setupTests.ts similarity index 100% rename from plugins/azure-functions-backend/src/setupTests.ts rename to plugins/azure-backend/src/setupTests.ts diff --git a/plugins/azure-functions-common/.eslintrc.js b/plugins/azure-common/.eslintrc.js similarity index 100% rename from plugins/azure-functions-common/.eslintrc.js rename to plugins/azure-common/.eslintrc.js diff --git a/plugins/azure-functions-common/api-report.md b/plugins/azure-common/api-report.md similarity index 50% rename from plugins/azure-functions-common/api-report.md rename to plugins/azure-common/api-report.md index dff50e2100..fece374b84 100644 --- a/plugins/azure-functions-common/api-report.md +++ b/plugins/azure-common/api-report.md @@ -1,31 +1,26 @@ -## API Report File for "@backstage/plugin-azure-functions-common" +## API Report File for "@backstage/plugin-azure-common" > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts // @public (undocumented) -export interface AzureFunctionsAllowedSubscriptionsConfig { - // (undocumented) - id: string; - // (undocumented) - name: string; -} - -// @public (undocumented) -export type FunctionsData = { +export type Site = { href: string; logstreamHref: string; - functionName: string; + name: string; + kind: string; location: string; + resourceGroup: string; state: string; usageState: string; containerSize: number; - lastModifiedDate: Date; + lastModifiedDate: string; + tags: {}; }; // @public (undocumented) -export type FunctionsListResponse = { - items: FunctionsData[]; +export type SiteList = { + items: Site[]; }; // (No @packageDocumentation comment for this package) diff --git a/plugins/azure-functions-common/package.json b/plugins/azure-common/package.json similarity index 82% rename from plugins/azure-functions-common/package.json rename to plugins/azure-common/package.json index 8bbf7ea9bf..02b88a839d 100644 --- a/plugins/azure-functions-common/package.json +++ b/plugins/azure-common/package.json @@ -1,6 +1,6 @@ { - "name": "@backstage/plugin-azure-functions-common", - "description": "Common functionalities for the azure-functions plugin", + "name": "@backstage/plugin-azure-common", + "description": "Common functionalities for the azure plugin", "version": "0.0.0", "main": "src/index.ts", "types": "src/index.ts", @@ -18,7 +18,7 @@ "repository": { "type": "git", "url": "https://github.com/backstage/backstage", - "directory": "plugins/azure-functions-common" + "directory": "plugins/azure-common" }, "keywords": [ "backstage" diff --git a/plugins/azure-functions-common/src/index.ts b/plugins/azure-common/src/index.ts similarity index 100% rename from plugins/azure-functions-common/src/index.ts rename to plugins/azure-common/src/index.ts diff --git a/plugins/azure-functions-common/src/types.ts b/plugins/azure-common/src/types.ts similarity index 76% rename from plugins/azure-functions-common/src/types.ts rename to plugins/azure-common/src/types.ts index 4c4c465d5e..3de98748d3 100644 --- a/plugins/azure-functions-common/src/types.ts +++ b/plugins/azure-common/src/types.ts @@ -15,24 +15,21 @@ */ /** @public */ -export interface AzureFunctionsAllowedSubscriptionsConfig { - name: string; - id: string; -} - -/** @public */ -export type FunctionsData = { +export type Site = { href: string; logstreamHref: string; - functionName: string; + name: string; + kind: string; location: string; + resourceGroup: string; state: string; usageState: string; containerSize: number; - lastModifiedDate: Date; + lastModifiedDate: string; + tags: {}; }; /** @public */ -export type FunctionsListResponse = { - items: FunctionsData[]; +export type SiteList = { + items: Site[]; }; diff --git a/plugins/azure-functions-backend/api-report.md b/plugins/azure-functions-backend/api-report.md deleted file mode 100644 index e7c1a18a0c..0000000000 --- a/plugins/azure-functions-backend/api-report.md +++ /dev/null @@ -1,60 +0,0 @@ -## API Report File for "@backstage/plugin-azure-functions-backend" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts -import { AzureFunctionsAllowedSubscriptionsConfig } from '@backstage/plugin-azure-functions-common'; -import { Config } from '@backstage/config'; -import express from 'express'; -import { FunctionsListResponse } from '@backstage/plugin-azure-functions-common'; -import { Logger } from 'winston'; - -// @public (undocumented) -export class AzureFunctionsConfig { - constructor( - domain: string, - allowedSubscriptions: AzureFunctionsAllowedSubscriptionsConfig[], - tenantId: string, - clientId?: string | undefined, - clientSecret?: string | undefined, - ); - // (undocumented) - readonly allowedSubscriptions: AzureFunctionsAllowedSubscriptionsConfig[]; - // (undocumented) - readonly clientId?: string | undefined; - // (undocumented) - readonly clientSecret?: string | undefined; - // (undocumented) - readonly domain: string; - // (undocumented) - static fromConfig(config: Config): AzureFunctionsConfig; - // (undocumented) - readonly tenantId: string; -} - -// @public (undocumented) -export class AzureWebManagementApi { - constructor(config: AzureFunctionsConfig); - // (undocumented) - static fromConfig(config: Config): AzureWebManagementApi; - // (undocumented) - list({ - functionName, - }: { - functionName: string; - }): Promise; -} - -// @public (undocumented) -export function createRouter(options: RouterOptions): Promise; - -// @public (undocumented) -export interface RouterOptions { - // (undocumented) - azureWebManagementApi: AzureWebManagementApi; - // (undocumented) - logger: Logger; -} - -// (No @packageDocumentation comment for this package) -``` diff --git a/plugins/azure-functions/api-report.md b/plugins/azure-functions/api-report.md deleted file mode 100644 index 949eafab89..0000000000 --- a/plugins/azure-functions/api-report.md +++ /dev/null @@ -1,64 +0,0 @@ -## API Report File for "@backstage/plugin-azure-functions" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts -/// - -import { ApiRef } from '@backstage/core-plugin-api'; -import { BackstagePlugin } from '@backstage/core-plugin-api'; -import { DiscoveryApi } from '@backstage/core-plugin-api'; -import { Entity } from '@backstage/catalog-model'; -import { FunctionsListResponse } from '@backstage/plugin-azure-functions-common'; -import { IdentityApi } from '@backstage/core-plugin-api'; -import { RouteRef } from '@backstage/core-plugin-api'; - -// @public (undocumented) -export type AzureFunctionsApi = { - list: ({ - functionName, - }: { - functionName: string; - }) => Promise; -}; - -// @public (undocumented) -export const azureFunctionsApiRef: ApiRef; - -// @public (undocumented) -export class AzureFunctionsBackendClient implements AzureFunctionsApi { - constructor(options: { - discoveryApi: DiscoveryApi; - identityApi: IdentityApi; - }); - // (undocumented) - list({ - functionName, - }: { - functionName: string; - }): Promise; -} - -// @public (undocumented) -export const AzureFunctionsOverviewWidget: () => JSX.Element; - -// @public (undocumented) -export const azureFunctionsPlugin: BackstagePlugin< - { - entityContent: RouteRef; - }, - {}, - {} ->; - -// @public (undocumented) -export const EntityAzureFunctionsOverviewCard: () => JSX.Element; - -// @public (undocumented) -export const entityContentRouteRef: RouteRef; - -// @public (undocumented) -export const isAzureFunctionsAvailable: (entity: Entity) => string | undefined; - -// (No @packageDocumentation comment for this package) -``` diff --git a/plugins/azure-functions/.eslintrc.js b/plugins/azure/.eslintrc.js similarity index 100% rename from plugins/azure-functions/.eslintrc.js rename to plugins/azure/.eslintrc.js diff --git a/plugins/azure-functions/README.md b/plugins/azure/README.md similarity index 53% rename from plugins/azure-functions/README.md rename to plugins/azure/README.md index 3cd0bef945..00b8e690d6 100644 --- a/plugins/azure-functions/README.md +++ b/plugins/azure/README.md @@ -1,12 +1,12 @@ -# Azure Functions Plugin +# Azure Plugin -![preview of Azure Functions table](docs/functions-table.png) +![preview of Azure table](docs/functions-table.png) _Inspired by [roadie.io AWS Lamda plugin](https://roadie.io/backstage/plugins/aws-lambda/)_ ## Features -- Azure Functions overview table +- Azure overview table ## Plugin Setup @@ -14,17 +14,17 @@ The following sections will help you get the Azure Functions plugin setup and ru ### Azure Functions Backend -You need to set up the Azure Functions backend plugin before you move forward with any of these steps if you haven't already. +You need to set up the Azure backend plugin before you move forward with any of these steps if you haven't already. ### Entity Annotation -To be able to use the Azure Functions plugin you need to add the following annotation to any entities you want to use it with: +To be able to use the Azure plugin you need to add the following annotation to any entities you want to use it with: ```yaml -portal.azure.com/functions-name: +portal.azure.com/resource-name: ``` -`` can be an exact or partial name for the functions' app. +`` can be an exact or partial name for the site. Example of Partial Matching: @@ -39,7 +39,7 @@ func-testapp-us The annotation you will use to have the three functions' app appear in the overview table would look like this: ```yaml -portal.azure.com/functions-name: func-testapp +portal.azure.com/resource-name: func-testapp ``` ### Install the component @@ -47,22 +47,22 @@ portal.azure.com/functions-name: func-testapp 1. Install the plugin in the `packages/app` directory ```sh -yarn add @backstage/plugin-azure-functions +yarn add @backstage/plugin-azure ``` 2. Add widget component to your Backstage instance: ```ts // In packages/app/src/components/catalog/EntityPage.tsx -import { EntityAzureFunctionsOverviewCard, isAzureFunctionsAvailable } from '@backstage/plugin-azure-functions'; +import { EntityAzureSitesOverviewWidget, isAzureResourceNameAvailable } from '@backstage/plugin-azure'; ... const serviceEntityPage = ( //... - Boolean(isAzureFunctionsAvailable(e))} path="/azure-functions" title="Azure Functions"> - + Boolean(isAzureResourceNameAvailable(e))} path="/azure" title="Azure"> + //... diff --git a/plugins/azure-functions/dev/index.tsx b/plugins/azure/dev/index.tsx similarity index 85% rename from plugins/azure-functions/dev/index.tsx rename to plugins/azure/dev/index.tsx index 715418cb73..02f8ed99cd 100644 --- a/plugins/azure-functions/dev/index.tsx +++ b/plugins/azure/dev/index.tsx @@ -15,6 +15,6 @@ */ import { createDevApp } from '@backstage/dev-utils'; -import { azureFunctionsPlugin } from '../src/plugin'; +import { azureSitesPlugin } from '../src/plugin'; -createDevApp().registerPlugin(azureFunctionsPlugin).render(); +createDevApp().registerPlugin(azureSitesPlugin).render(); diff --git a/plugins/azure-functions/docs/functions-table.png b/plugins/azure/docs/functions-table.png similarity index 100% rename from plugins/azure-functions/docs/functions-table.png rename to plugins/azure/docs/functions-table.png diff --git a/plugins/azure-functions/package.json b/plugins/azure/package.json similarity index 91% rename from plugins/azure-functions/package.json rename to plugins/azure/package.json index 81818de154..50d5b7310c 100644 --- a/plugins/azure-functions/package.json +++ b/plugins/azure/package.json @@ -1,5 +1,5 @@ { - "name": "@backstage/plugin-azure-functions", + "name": "@backstage/plugin-azure", "version": "0.0.0", "main": "src/index.ts", "types": "src/index.ts", @@ -17,11 +17,10 @@ "repository": { "type": "git", "url": "https://github.com/backstage/backstage", - "directory": "plugins/azure-functions" + "directory": "plugins/azure" }, "keywords": [ "backstage", - "functions", "azure" ], "scripts": { @@ -37,7 +36,7 @@ "@backstage/catalog-model": "^1.1.1-next.0", "@backstage/core-components": "^0.11.1-next.2", "@backstage/core-plugin-api": "^1.0.6-next.2", - "@backstage/plugin-azure-functions-common": "^0.0.0", + "@backstage/plugin-azure-common": "^0.0.0", "@backstage/plugin-catalog-react": "^1.1.4-next.1", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.9.13", diff --git a/plugins/azure-functions/src/api/AzureFunctionsApi.ts b/plugins/azure/src/api/AzureSitesApi.ts similarity index 68% rename from plugins/azure-functions/src/api/AzureFunctionsApi.ts rename to plugins/azure/src/api/AzureSitesApi.ts index 0f7bf08bcd..86751a4fa2 100644 --- a/plugins/azure-functions/src/api/AzureFunctionsApi.ts +++ b/plugins/azure/src/api/AzureSitesApi.ts @@ -15,18 +15,14 @@ */ import { createApiRef } from '@backstage/core-plugin-api'; -import { FunctionsListResponse } from '@backstage/plugin-azure-functions-common'; +import { SiteList } from '@backstage/plugin-azure-common'; /** @public */ -export const azureFunctionsApiRef = createApiRef({ - id: 'plugin.azurefunctions.service', +export const azureSiteApiRef = createApiRef({ + id: 'plugin.azure.service', }); /** @public */ -export type AzureFunctionsApi = { - list: ({ - functionName, - }: { - functionName: string; - }) => Promise; +export type AzureSitesApi = { + list: ({ name }: { name: string }) => Promise; }; diff --git a/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts b/plugins/azure/src/api/AzureSitesApiBackendClient.ts similarity index 76% rename from plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts rename to plugins/azure/src/api/AzureSitesApiBackendClient.ts index 3336e11fb3..27e55e4d31 100644 --- a/plugins/azure-functions/src/api/AzureFunctionsBackendClient.ts +++ b/plugins/azure/src/api/AzureSitesApiBackendClient.ts @@ -14,12 +14,12 @@ * limitations under the License. */ -import { AzureFunctionsApi } from './AzureFunctionsApi'; -import { FunctionsListResponse } from '@backstage/plugin-azure-functions-common'; +import { AzureSitesApi } from './AzureSitesApi'; +import { SiteList } from '@backstage/plugin-azure-common'; import { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api'; /** @public */ -export class AzureFunctionsBackendClient implements AzureFunctionsApi { +export class AzureSitesApiBackendClient implements AzureSitesApi { private readonly identityApi: IdentityApi; private readonly discoveryApi: DiscoveryApi; constructor(options: { @@ -30,15 +30,9 @@ export class AzureFunctionsBackendClient implements AzureFunctionsApi { this.identityApi = options.identityApi; } - async list({ - functionName, - }: { - functionName: string; - }): Promise { + async list({ name }: { name: string }): Promise { try { - const url = `${await this.discoveryApi.getBaseUrl( - 'azure-functions', - )}/list/${functionName}`; + const url = `${await this.discoveryApi.getBaseUrl('azure')}/list/${name}`; const { token: accessToken } = await this.identityApi.getCredentials(); const response = await fetch(url, { method: 'GET', diff --git a/plugins/azure-functions-backend/src/api/index.ts b/plugins/azure/src/api/index.ts similarity index 86% rename from plugins/azure-functions-backend/src/api/index.ts rename to plugins/azure/src/api/index.ts index b85d857d8f..2b6cc64221 100644 --- a/plugins/azure-functions-backend/src/api/index.ts +++ b/plugins/azure/src/api/index.ts @@ -14,7 +14,5 @@ * limitations under the License. */ -export { - AzureWebManagementApi, - AzureFunctionsConfig, -} from './AzureWebManagementApi'; +export * from './AzureSitesApi'; +export * from './AzureSitesApiBackendClient'; diff --git a/plugins/azure-functions/src/components/AzureFunctionsOverviewComponent/AzureFunctionsOverview.tsx b/plugins/azure/src/components/AzureSitesOverviewComponent/AzureSitesOverview.tsx similarity index 56% rename from plugins/azure-functions/src/components/AzureFunctionsOverviewComponent/AzureFunctionsOverview.tsx rename to plugins/azure/src/components/AzureSitesOverviewComponent/AzureSitesOverview.tsx index 9ec8b9b80a..ef23d7fb2a 100644 --- a/plugins/azure-functions/src/components/AzureFunctionsOverviewComponent/AzureFunctionsOverview.tsx +++ b/plugins/azure/src/components/AzureSitesOverviewComponent/AzureSitesOverview.tsx @@ -16,9 +16,9 @@ import React from 'react'; import { Entity } from '@backstage/catalog-model'; -import { useFunctions } from '../../hooks/useFunctions'; +import { useSites } from '../../hooks/useSites'; import { - AZURE_FUNCTIONS_ANNOTATION, + AZURE_RESOURCE_NAME_ANNOTATION, useServiceEntityAnnotations, } from '../../hooks/useServiceEntityAnnotations'; import { @@ -27,48 +27,50 @@ import { ResponseErrorPanel, } from '@backstage/core-components'; import { useEntity } from '@backstage/plugin-catalog-react'; -import { OverviewTable } from '../OverviewTableComponent/OverviewTable'; +import { AzureSitesOverviewTable } from '../AzureSitesOverviewTableComponent/AzureSitesOverviewTable'; /** @public */ -export const isAzureFunctionsAvailable = (entity: Entity) => - entity?.metadata.annotations?.[AZURE_FUNCTIONS_ANNOTATION]; +export const isAzureResourceNameAvailable = (entity: Entity) => + entity?.metadata.annotations?.[AZURE_RESOURCE_NAME_ANNOTATION]; -const AzureFunctionsOverview = ({ entity }: { entity: Entity }) => { - const { functionsName } = useServiceEntityAnnotations(entity); +const AzureSitesOverview = ({ entity }: { entity: Entity }) => { + const { resourceName } = useServiceEntityAnnotations(entity); - const [functionsData] = useFunctions({ - functionsName, + const [sites] = useSites({ + name: resourceName, }); - if (functionsData.error) { + if (sites.error) { return (
- +
); } return ( - ); }; /** @public */ -export const AzureFunctionsOverviewWidget = () => { +export const AzureSitesOverviewWidget = () => { const { entity } = useEntity(); - if (!isAzureFunctionsAvailable(entity)) { + if (!isAzureResourceNameAvailable(entity)) { return ( - + ); } return ( - + ); }; diff --git a/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.test.tsx b/plugins/azure/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.test.tsx similarity index 71% rename from plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.test.tsx rename to plugins/azure/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.test.tsx index 1dc40a795a..936a697dcf 100644 --- a/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.test.tsx +++ b/plugins/azure/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.test.tsx @@ -29,9 +29,9 @@ import { } from '@backstage/test-utils'; import { setupServer } from 'msw/node'; import { DateTime } from 'luxon'; -import { functionResponseMock } from '../../mocks/mocks'; -import { azureFunctionsApiRef } from '../..'; -import { OverviewTable } from './OverviewTable'; +import { siteMock } from '../../mocks/mocks'; +import { azureSiteApiRef } from '../..'; +import { AzureSitesOverviewTable } from './AzureSitesOverviewTable'; const errorApiMock = { post: jest.fn(), error$: jest.fn() }; const identityApiMock = (getCredentials: any) => ({ @@ -40,7 +40,7 @@ const identityApiMock = (getCredentials: any) => ({ getBackstageIdentity: jest.fn(), getCredentials, }); -const azureFunctionsApiMock = {}; +const azureSitesApiMock = {}; const config = { getString: (_: string) => 'https://test-url', @@ -49,18 +49,18 @@ const config = { const apis: [AnyApiRef, Partial][] = [ [errorApiRef, errorApiMock], [configApiRef, config], - [azureFunctionsApiRef, azureFunctionsApiMock], + [azureSiteApiRef, azureSitesApiMock], [identityApiRef, identityApiMock], ]; -describe('AzureFunctionsOverviewWidget', () => { +describe('AzureSitesOverviewWidget', () => { const worker = setupServer(); setupRequestMockHandlers(worker); beforeEach(() => { worker.use( rest.get('/list/func-mock', (_, res, ctx) => { - res(ctx.json(functionResponseMock)); + res(ctx.json(siteMock)); }), ); }); @@ -68,21 +68,18 @@ describe('AzureFunctionsOverviewWidget', () => { it('should display an overview table with the data from the requests', async () => { const rendered = render( - + , ); - expect( - await rendered.findByText(functionResponseMock.functionName), - ).toBeInTheDocument(); - expect( - await rendered.findByText(functionResponseMock.state), - ).toBeInTheDocument(); + expect(await rendered.findByText(siteMock.name)).toBeInTheDocument(); + expect(await rendered.findByText(siteMock.kind)).toBeInTheDocument(); + expect(await rendered.findByText(siteMock.state)).toBeInTheDocument(); expect( await rendered.findByText( - DateTime.fromISO( - functionResponseMock.lastModifiedDate.toString(), - ).toLocaleString(DateTime.DATETIME_MED), + DateTime.fromISO(siteMock.lastModifiedDate).toLocaleString( + DateTime.DATETIME_MED, + ), ), ).toBeInTheDocument(); }); diff --git a/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx b/plugins/azure/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.tsx similarity index 77% rename from plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx rename to plugins/azure/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.tsx index 1ac75bfd5d..0b07c5aaaa 100644 --- a/plugins/azure-functions/src/components/OverviewTableComponent/OverviewTable.tsx +++ b/plugins/azure/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.tsx @@ -16,7 +16,7 @@ import React from 'react'; import { Box, Card, Link, LinearProgress } from '@material-ui/core'; -import { FunctionsData } from '@backstage/plugin-azure-functions-common'; +import { Site } from '@backstage/plugin-azure-common'; import { Table, TableColumn } from '@backstage/core-components'; import FlashOnIcon from '@material-ui/icons/FlashOn'; import { DateTime } from 'luxon'; @@ -47,42 +47,46 @@ const State = ({ value }: { value: States }) => { ); }; -type FunctionTableProps = { - data: FunctionsData[]; +type TableProps = { + data: Site[]; loading: boolean; }; -const DEFAULT_COLUMNS: TableColumn[] = [ +const DEFAULT_COLUMNS: TableColumn[] = [ { title: 'name', highlight: true, - render: (func: FunctionsData) => { + render: (func: Site) => { return ( - {func.functionName} + {func.name} ); }, }, + { + title: 'kind', + render: (func: Site) => func.kind ?? 'unknown', + }, { title: 'location', - render: (func: FunctionsData) => func.location ?? 'unknown', + render: (func: Site) => func.location ?? 'unknown', }, { title: 'status', - render: (func: FunctionsData) => , + render: (func: Site) => , }, { title: 'last modified', - render: (func: FunctionsData) => - DateTime.fromISO(func.lastModifiedDate.toString()).toLocaleString( + render: (func: Site) => + DateTime.fromISO(func.lastModifiedDate).toLocaleString( DateTime.DATETIME_MED, ), }, { title: 'logs', align: 'right', - render: (func: FunctionsData) => { + render: (func: Site) => { return ( View Logs @@ -93,8 +97,8 @@ const DEFAULT_COLUMNS: TableColumn[] = [ ]; /** @public */ -export const OverviewTable = ({ data, loading }: FunctionTableProps) => { - const columns: TableColumn[] = [...DEFAULT_COLUMNS]; +export const AzureSitesOverviewTable = ({ data, loading }: TableProps) => { + const columns: TableColumn[] = [...DEFAULT_COLUMNS]; const tableStyle = { minWidth: '0', width: '100%', @@ -107,7 +111,7 @@ export const OverviewTable = ({ data, loading }: FunctionTableProps) => { - Azure Functions + Azure Sites } options={{ paging: true, search: false, pageSize: 10 }} diff --git a/plugins/azure-functions/src/hooks/useServiceEntityAnnotations.ts b/plugins/azure/src/hooks/useServiceEntityAnnotations.ts similarity index 79% rename from plugins/azure-functions/src/hooks/useServiceEntityAnnotations.ts rename to plugins/azure/src/hooks/useServiceEntityAnnotations.ts index 53d0736477..e998012aab 100644 --- a/plugins/azure-functions/src/hooks/useServiceEntityAnnotations.ts +++ b/plugins/azure/src/hooks/useServiceEntityAnnotations.ts @@ -16,12 +16,12 @@ import { Entity } from '@backstage/catalog-model'; -export const AZURE_FUNCTIONS_ANNOTATION = 'portal.azure.com/functions-name'; +export const AZURE_RESOURCE_NAME_ANNOTATION = 'portal.azure.com/resource-name'; export const useServiceEntityAnnotations = (entity: Entity) => { - const functionsName = - entity?.metadata.annotations?.[AZURE_FUNCTIONS_ANNOTATION] ?? ''; + const resourceName = + entity?.metadata.annotations?.[AZURE_RESOURCE_NAME_ANNOTATION] ?? ''; return { - functionsName, + resourceName, }; }; diff --git a/plugins/azure-functions/src/hooks/useFunctions.ts b/plugins/azure/src/hooks/useSites.ts similarity index 66% rename from plugins/azure-functions/src/hooks/useFunctions.ts rename to plugins/azure/src/hooks/useSites.ts index f10e98090c..c734b0abca 100644 --- a/plugins/azure-functions/src/hooks/useFunctions.ts +++ b/plugins/azure/src/hooks/useSites.ts @@ -16,35 +16,35 @@ import useAsyncRetry from 'react-use/lib/useAsyncRetry'; import { useApi, errorApiRef } from '@backstage/core-plugin-api'; -import { FunctionsListResponse } from '@backstage/plugin-azure-functions-common'; -import { azureFunctionsApiRef } from '../api'; +import { SiteList } from '@backstage/plugin-azure-common'; +import { azureSiteApiRef } from '../api'; import { useCallback } from 'react'; -export function useFunctions({ functionsName }: { functionsName: string }) { - const azureFunctionsApi = useApi(azureFunctionsApiRef); +export function useSites({ name }: { name: string }) { + const azureApi = useApi(azureSiteApiRef); const errorApi = useApi(errorApiRef); const list = useCallback( async () => { - return await azureFunctionsApi.list({ - functionName: functionsName, + return await azureApi.list({ + name: name, }); }, - [functionsName], // eslint-disable-line react-hooks/exhaustive-deps + [name], // eslint-disable-line react-hooks/exhaustive-deps ); const { loading, value: data, error, retry, - } = useAsyncRetry(async () => { + } = useAsyncRetry(async () => { try { - const azureFunction = await list(); - return azureFunction; + const sites = await list(); + return sites; } catch (e) { if (e instanceof Error) { if (e?.message === 'MissingAzureBackendException') { - errorApi.post(new Error('Please add azure-functions-backend plugin')); + errorApi.post(new Error('Please add azure-backend plugin')); return null; } errorApi.post(e); diff --git a/plugins/azure-functions/src/index.ts b/plugins/azure/src/index.ts similarity index 88% rename from plugins/azure-functions/src/index.ts rename to plugins/azure/src/index.ts index ea3b9a28e4..83029c6af5 100644 --- a/plugins/azure-functions/src/index.ts +++ b/plugins/azure/src/index.ts @@ -16,4 +16,4 @@ export * from './plugin'; export * from './api'; -export * from './components/AzureFunctionsOverviewComponent/AzureFunctionsOverview'; +export * from './components/AzureSitesOverviewComponent/AzureSitesOverview'; diff --git a/plugins/azure-functions/src/mocks/mocks.ts b/plugins/azure/src/mocks/mocks.ts similarity index 82% rename from plugins/azure-functions/src/mocks/mocks.ts rename to plugins/azure/src/mocks/mocks.ts index d6099e990a..9cc739baa9 100644 --- a/plugins/azure-functions/src/mocks/mocks.ts +++ b/plugins/azure/src/mocks/mocks.ts @@ -14,15 +14,15 @@ * limitations under the License. */ -import { FunctionsData } from '@backstage/plugin-azure-functions-common'; +import { Site } from '@backstage/plugin-azure-common'; export const entityMock = { metadata: { namespace: 'default', annotations: { - 'portal.azure.com/functions-name': 'func-mock', + 'portal.azure.com/resource-name': 'func-mock', }, - name: 'sample-azure-function-service', + name: 'sample-azure-service', description: 'A service for testing Backstage functionality.', uid: 'c009b513-d053-4b3f-9429-8433a145e943', }, @@ -36,14 +36,19 @@ export const entityMock = { }; // https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Web/sites/{{functionsName}}?api-version=2022-03-01 -export const functionResponseMock: FunctionsData = { - functionName: 'func-mock', +export const siteMock: Site = { + name: 'func-mock', + kind: 'functionapp', + resourceGroup: 'mock-resourcegroup', + tags: { + isMock: true, + }, location: 'West Europe', state: 'Running', href: 'https://mockurl.api.azurewebsites.windows.net:454/subscriptions/00000000-0000-0000-0000-000000000000/webspaces/rg_mock-WestEuropewebspace/sites/func-mock', logstreamHref: 'https://mockurl.api.azurewebsites.windows.net:454/subscriptions/00000000-0000-0000-0000-000000000000/webspaces/rg_mock-WestEuropewebspace/sites/func-mock/logStream', usageState: 'Normal', - lastModifiedDate: new Date('2022-09-02T11:09:58.9033333'), + lastModifiedDate: '2022-09-02T11:09:58.9033333', containerSize: 100, }; diff --git a/plugins/azure-functions/src/plugin.test.ts b/plugins/azure/src/plugin.test.ts similarity index 83% rename from plugins/azure-functions/src/plugin.test.ts rename to plugins/azure/src/plugin.test.ts index 9e6c04708d..fba8e36e6f 100644 --- a/plugins/azure-functions/src/plugin.test.ts +++ b/plugins/azure/src/plugin.test.ts @@ -14,10 +14,10 @@ * limitations under the License. */ -import { azureFunctionsPlugin } from './plugin'; +import { azureSitesPlugin } from './plugin'; -describe('azure-functions', () => { +describe('azure', () => { it('should export plugin', () => { - expect(azureFunctionsPlugin).toBeDefined(); + expect(azureSitesPlugin).toBeDefined(); }); }); diff --git a/plugins/azure-functions/src/plugin.ts b/plugins/azure/src/plugin.ts similarity index 69% rename from plugins/azure-functions/src/plugin.ts rename to plugins/azure/src/plugin.ts index c0b011e76c..6b6eff84b8 100644 --- a/plugins/azure-functions/src/plugin.ts +++ b/plugins/azure/src/plugin.ts @@ -22,25 +22,25 @@ import { discoveryApiRef, identityApiRef, } from '@backstage/core-plugin-api'; -import { azureFunctionsApiRef, AzureFunctionsBackendClient } from './api'; +import { azureSiteApiRef, AzureSitesApiBackendClient } from './api'; /** @public */ export const entityContentRouteRef = createRouteRef({ - id: 'Azure Functions Entity Content', + id: 'Azure Entity Content', }); /** @public */ -export const azureFunctionsPlugin = createPlugin({ - id: 'azure-functions', +export const azureSitesPlugin = createPlugin({ + id: 'azure', apis: [ createApiFactory({ - api: azureFunctionsApiRef, + api: azureSiteApiRef, deps: { discoveryApi: discoveryApiRef, identityApi: identityApiRef, }, factory: ({ discoveryApi, identityApi }) => - new AzureFunctionsBackendClient({ discoveryApi, identityApi }), + new AzureSitesApiBackendClient({ discoveryApi, identityApi }), }), ], routes: { @@ -49,14 +49,14 @@ export const azureFunctionsPlugin = createPlugin({ }); /** @public */ -export const EntityAzureFunctionsOverviewCard = azureFunctionsPlugin.provide( +export const EntityAzureSitesOverviewWidget = azureSitesPlugin.provide( createComponentExtension({ - name: 'EntityAzureFunctionsOverviewCard', + name: 'EntityAzureSitesOverviewWidget', component: { lazy: () => import( - './components/AzureFunctionsOverviewComponent/AzureFunctionsOverview' - ).then(m => m.AzureFunctionsOverviewWidget), + './components/AzureSitesOverviewComponent/AzureSitesOverview' + ).then(m => m.AzureSitesOverviewWidget), }, }), ); diff --git a/plugins/azure-functions/src/routes.ts b/plugins/azure/src/routes.ts similarity index 96% rename from plugins/azure-functions/src/routes.ts rename to plugins/azure/src/routes.ts index 61234c4da5..f52a3fd5be 100644 --- a/plugins/azure-functions/src/routes.ts +++ b/plugins/azure/src/routes.ts @@ -17,5 +17,5 @@ import { createRouteRef } from '@backstage/core-plugin-api'; export const rootRouteRef = createRouteRef({ - id: 'azure-functions', + id: 'azure', }); diff --git a/plugins/azure-functions/src/setupTests.ts b/plugins/azure/src/setupTests.ts similarity index 100% rename from plugins/azure-functions/src/setupTests.ts rename to plugins/azure/src/setupTests.ts diff --git a/yarn.lock b/yarn.lock index a4f1dfc083..3618607822 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13,15 +13,16 @@ __metadata: linkType: hard "@ampproject/remapping@npm:^2.1.0": - version: 2.1.2 - resolution: "@ampproject/remapping@npm:2.1.2" + version: 2.2.0 + resolution: "@ampproject/remapping@npm:2.2.0" dependencies: - "@jridgewell/trace-mapping": ^0.3.0 - checksum: e023f92cdd9723f3042cde3b4d922adfeef0e198aa73486b0b6c034ad36af5f96e5c0cc72b335b30b2eb9852d907efc92af6bfcd3f4b4d286177ee32a189cf92 + "@jridgewell/gen-mapping": ^0.1.0 + "@jridgewell/trace-mapping": ^0.3.9 + checksum: d74d170d06468913921d72430259424b7e4c826b5a7d39ff839a29d547efb97dc577caa8ba3fb5cf023624e9af9d09651afc3d4112a45e2050328abc9b3a2292 languageName: node linkType: hard -"@apidevtools/json-schema-ref-parser@npm:9.0.6, @apidevtools/json-schema-ref-parser@npm:^9.0.6": +"@apidevtools/json-schema-ref-parser@npm:9.0.6": version: 9.0.6 resolution: "@apidevtools/json-schema-ref-parser@npm:9.0.6" dependencies: @@ -32,6 +33,18 @@ __metadata: languageName: node linkType: hard +"@apidevtools/json-schema-ref-parser@npm:^9.0.6": + version: 9.0.9 + resolution: "@apidevtools/json-schema-ref-parser@npm:9.0.9" + dependencies: + "@jsdevtools/ono": ^7.1.3 + "@types/json-schema": ^7.0.6 + call-me-maybe: ^1.0.1 + js-yaml: ^4.1.0 + checksum: b21f6bdd37d2942c3967ee77569bc74fadd1b922f688daf5ef85057789a2c3a7f4afc473aa2f3a93ec950dabb6ef365f8bd9cf51e4e062a1ee1e59b989f8f9b4 + languageName: node + linkType: hard + "@apidevtools/openapi-schemas@npm:^2.1.0": version: 2.1.0 resolution: "@apidevtools/openapi-schemas@npm:2.1.0" @@ -64,11 +77,13 @@ __metadata: linkType: hard "@apollo/explorer@npm:^1.1.1": - version: 1.1.1 - resolution: "@apollo/explorer@npm:1.1.1" + version: 1.2.0 + resolution: "@apollo/explorer@npm:1.2.0" dependencies: + "@types/whatwg-mimetype": ^3.0.0 graphql-ws: ^5.9.0 subscriptions-transport-ws: ^0.11.0 + whatwg-mimetype: ^3.0.0 peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -80,31 +95,7 @@ __metadata: optional: true use-deep-compare-effect: optional: true - checksum: f9a22c76c557a50c5a1779dc593dd3de970073558f209808faa8d6678a1469a733b564baeb741c36345d81a782230791443ebc4f2de317d90a10893ef1a18882 - languageName: node - linkType: hard - -"@apollo/protobufjs@npm:1.2.2": - version: 1.2.2 - resolution: "@apollo/protobufjs@npm:1.2.2" - dependencies: - "@protobufjs/aspromise": ^1.1.2 - "@protobufjs/base64": ^1.1.2 - "@protobufjs/codegen": ^2.0.4 - "@protobufjs/eventemitter": ^1.1.0 - "@protobufjs/fetch": ^1.1.0 - "@protobufjs/float": ^1.0.2 - "@protobufjs/inquire": ^1.1.0 - "@protobufjs/path": ^1.1.2 - "@protobufjs/pool": ^1.1.0 - "@protobufjs/utf8": ^1.1.0 - "@types/long": ^4.0.0 - "@types/node": ^10.1.0 - long: ^4.0.0 - bin: - apollo-pbjs: bin/pbjs - apollo-pbts: bin/pbts - checksum: 3f3ec1f428cbcc53760daa6f1076c9043a5aa270b2c9a2ca9f97610eabd3ee1aea08dd36fac658bab83eb6607bc62340bbc6c13ba6bba3c6776df71d68b55929 + checksum: 67cf0b5e8a23abb71ad1e68266529b8e8e1ce66652208c9942c554f21148364fd49afa5e619ecfddf611dd19067aa81ab8b2e828944122dfdc81e79a27ccf37c languageName: node linkType: hard @@ -213,11 +204,11 @@ __metadata: linkType: hard "@apollographql/apollo-tools@npm:^0.5.3": - version: 0.5.3 - resolution: "@apollographql/apollo-tools@npm:0.5.3" + version: 0.5.4 + resolution: "@apollographql/apollo-tools@npm:0.5.4" peerDependencies: graphql: ^14.2.1 || ^15.0.0 || ^16.0.0 - checksum: 652f16f8ae4afb65a2cb62a47e46882f49368f8f2c115f421773c3f8aa47b466ab9a6758fc18138495bd010baea5fda05d3c313edd11c4f4b3e8f8783b54d5a2 + checksum: 673eaaf371504939b58c2717334e237639d3c277ec9b1b9cc7a53a1ad24ded456a6e49bbf2ecf26a64f4b92b04c12cd48f6e22066c6041ae30f2ba4720fb01b6 languageName: node linkType: hard @@ -285,11 +276,11 @@ __metadata: linkType: hard "@asyncapi/parser@npm:^1.15.0": - version: 1.15.0 - resolution: "@asyncapi/parser@npm:1.15.0" + version: 1.16.0 + resolution: "@asyncapi/parser@npm:1.16.0" dependencies: "@apidevtools/json-schema-ref-parser": ^9.0.6 - "@asyncapi/specs": ^2.14.0 + "@asyncapi/specs": ^3.0.0 "@fmvilas/pseudo-yaml-ast": ^0.3.1 ajv: ^6.10.1 js-yaml: ^3.13.1 @@ -297,7 +288,7 @@ __metadata: lodash.clonedeep: ^4.5.0 node-fetch: ^2.6.0 tiny-merge-patch: ^0.1.2 - checksum: e9435265b4671f6a4c2451e054751ea637dd466b1f6b6848622781fbf6fa9fc93c292ed8791bf38816f63cd9c352f09727ab2d34f76d62f8f21c084b0125445b + checksum: 5a832309c61382496482cdd26a1c85ee8e8f2ac85fd85c1275f2afc0410cdba47ee9ff3057591867a3709380a4d1fc67588841ebd77476b1e452b6f51efe82f6 languageName: node linkType: hard @@ -321,19 +312,19 @@ __metadata: languageName: node linkType: hard -"@asyncapi/specs@npm:^2.14.0": - version: 2.14.0 - resolution: "@asyncapi/specs@npm:2.14.0" - checksum: 066c23c493df54c44c319433bdcf8482a3acd584e32c0073e6a9f5b167d61bde23a252621be2b28bbaf1466636f6cafaab570795de403f0c671358784d4b12ed +"@asyncapi/specs@npm:^3.0.0": + version: 3.1.0 + resolution: "@asyncapi/specs@npm:3.1.0" + checksum: c2e9f4641e28dd1f7867b49e7102b1b719961aa3954122232fa402a926eaf0bf55e89a733b91dc8b055045a39b230a143df4776b7a20ab387f8074f59f976845 languageName: node linkType: hard "@azure/abort-controller@npm:^1.0.0": - version: 1.0.2 - resolution: "@azure/abort-controller@npm:1.0.2" + version: 1.1.0 + resolution: "@azure/abort-controller@npm:1.1.0" dependencies: - tslib: ^2.0.0 - checksum: 2af40548b521fcd8c9c3a9b04f25ab00fecd873f659cfb3bd0b38a507643a2c7f32c367e4ea8a0ffa6ef3ab084e13285c9792ad9133a1ac03d60e7ea70ea381c + tslib: ^2.2.0 + checksum: 0f45e504d4aea799486867179afe7589255f6c111951279958e9d0aa5faebb2c96b8f88e3e3c958ce07b02bcba0b0cddb1bbec94705f573a48ecdb93eec1a92a languageName: node linkType: hard @@ -349,14 +340,7 @@ __metadata: languageName: node linkType: hard -"@azure/core-asynciterator-polyfill@npm:^1.0.0": - version: 1.0.0 - resolution: "@azure/core-asynciterator-polyfill@npm:1.0.0" - checksum: b6d3ab3f0ffc0a9f426a1d2cc90b81778730b14d81af7dcab9760c9e241f7c0f6843d45fad572dcd1379232b3fb2cacd76d110a0d54a999ceb1bf0fd9ed39e99 - languageName: node - linkType: hard - -"@azure/core-auth@npm:^1.1.4": +"@azure/core-auth@npm:^1.1.4, @azure/core-auth@npm:^1.3.0, @azure/core-auth@npm:^1.4.0": version: 1.4.0 resolution: "@azure/core-auth@npm:1.4.0" dependencies: @@ -366,39 +350,29 @@ __metadata: languageName: node linkType: hard -"@azure/core-auth@npm:^1.3.0": - version: 1.3.2 - resolution: "@azure/core-auth@npm:1.3.2" - dependencies: - "@azure/abort-controller": ^1.0.0 - tslib: ^2.2.0 - checksum: 8b27de6f8a82a63643524757ef774b1637b0d5c7769b387c73bebeb918717e7193ad1d2413638fb02b28de8199f261c1a902e3d04f75d1ef684af33529d9e98d - languageName: node - linkType: hard - "@azure/core-client@npm:^1.4.0": - version: 1.5.0 - resolution: "@azure/core-client@npm:1.5.0" + version: 1.6.1 + resolution: "@azure/core-client@npm:1.6.1" dependencies: "@azure/abort-controller": ^1.0.0 - "@azure/core-asynciterator-polyfill": ^1.0.0 - "@azure/core-auth": ^1.3.0 - "@azure/core-rest-pipeline": ^1.5.0 - "@azure/core-tracing": 1.0.0-preview.13 + "@azure/core-auth": ^1.4.0 + "@azure/core-rest-pipeline": ^1.9.1 + "@azure/core-tracing": ^1.0.0 + "@azure/core-util": ^1.0.0 "@azure/logger": ^1.0.0 tslib: ^2.2.0 - checksum: dc51cdeae0788a14c57fed1b420e9d86d9b6cd29a1b7a3cecec5d8fad7664e4857415568cf4dd363fd3a845f0f4ee39904390d4f2e927206a8d50f87d66089a5 + checksum: 400890a9b5f0c8801ff92005c3cba7bb5124634e321735406731bef33688a79f23d28b49fccdfab90814dade41a13f3d3cb99f80151a2bff17628416e811afb6 languageName: node linkType: hard "@azure/core-http@npm:^2.0.0": - version: 2.2.4 - resolution: "@azure/core-http@npm:2.2.4" + version: 2.2.7 + resolution: "@azure/core-http@npm:2.2.7" dependencies: "@azure/abort-controller": ^1.0.0 - "@azure/core-asynciterator-polyfill": ^1.0.0 "@azure/core-auth": ^1.3.0 "@azure/core-tracing": 1.0.0-preview.13 + "@azure/core-util": ^1.1.0 "@azure/logger": ^1.0.0 "@types/node-fetch": ^2.5.0 "@types/tunnel": ^0.0.3 @@ -410,45 +384,45 @@ __metadata: tunnel: ^0.0.6 uuid: ^8.3.0 xml2js: ^0.4.19 - checksum: abda8c34c6d54f61b77080b1d4c01b3828cf9a344eb100346ebcc5ef9903d8f57651fbc73c0230afad5fe497c5c6da576a77cf43827f87417cecac7d7e612967 + checksum: d9097c26adb9c452724855ad6c92dd0f043b9ce606621f70351a627014b915124f26e34d79de7b1a5eb4ed921cc4fdbaf6ea0cdecbe2e4fb0a60b301f5339ea4 languageName: node linkType: hard "@azure/core-lro@npm:^2.2.0": - version: 2.2.4 - resolution: "@azure/core-lro@npm:2.2.4" + version: 2.3.1 + resolution: "@azure/core-lro@npm:2.3.1" dependencies: "@azure/abort-controller": ^1.0.0 - "@azure/core-tracing": 1.0.0-preview.13 "@azure/logger": ^1.0.0 tslib: ^2.2.0 - checksum: f3db331409f95fc71206acd9f64efbbdf43a83d86c2012bdd19e577a603225b3a7e74e827e5c6aad1cf18024bdd8110c4cf341f7386fc83c5cb86ab72f5ad9ca + checksum: 9b0efeff46f85a4bfe1f1ec20c7df81256464879f6b9cc974e57e7e9be9b5209640eb5090b296f3821a7b3e0441fbf1caf7c215426d7f788261c61c414cdd548 languageName: node linkType: hard "@azure/core-paging@npm:^1.1.1": - version: 1.1.3 - resolution: "@azure/core-paging@npm:1.1.3" + version: 1.3.0 + resolution: "@azure/core-paging@npm:1.3.0" dependencies: - "@azure/core-asynciterator-polyfill": ^1.0.0 - checksum: 4864a6daaf0b30dbc59b0e9974d89a578f938ab2a1e1dce301efc89ff51d234fffbd3625b6caef7e3a02f04b2607abad587eb9f5bd2f84c9bdef68257c0ef63e + tslib: ^2.2.0 + checksum: 3fbf3d6474e2346f7c3ea8344a41bf41e053789efbbd29df78365e9c9ca66e143da3e5407d8c9dd5ddc82a65680185cd6f0ec851c48635776d18a6a605a98e78 languageName: node linkType: hard -"@azure/core-rest-pipeline@npm:^1.1.0, @azure/core-rest-pipeline@npm:^1.5.0": - version: 1.5.0 - resolution: "@azure/core-rest-pipeline@npm:1.5.0" +"@azure/core-rest-pipeline@npm:^1.1.0, @azure/core-rest-pipeline@npm:^1.9.1": + version: 1.9.2 + resolution: "@azure/core-rest-pipeline@npm:1.9.2" dependencies: "@azure/abort-controller": ^1.0.0 - "@azure/core-auth": ^1.3.0 - "@azure/core-tracing": 1.0.0-preview.13 + "@azure/core-auth": ^1.4.0 + "@azure/core-tracing": ^1.0.1 + "@azure/core-util": ^1.0.0 "@azure/logger": ^1.0.0 form-data: ^4.0.0 - http-proxy-agent: ^4.0.1 + http-proxy-agent: ^5.0.0 https-proxy-agent: ^5.0.0 tslib: ^2.2.0 uuid: ^8.3.0 - checksum: 1503305db569f4d66353d7a93630c9f87995620312f9f05c262102e40c0f929e134aa221b2bf8f8b49f259fb0119c84a07a6a5ef2ead7f37d213b1c3f164f7fa + checksum: cdfdaf8bdb0778f40ecfeb8b5da0b4f8643d641b75bb5869485afd38f7c3127ab088ac2fe2980df03d28fb6715928e04560343ee6416246aebe75443c4dd2906 languageName: node linkType: hard @@ -462,7 +436,7 @@ __metadata: languageName: node linkType: hard -"@azure/core-tracing@npm:^1.0.0": +"@azure/core-tracing@npm:^1.0.0, @azure/core-tracing@npm:^1.0.1": version: 1.0.1 resolution: "@azure/core-tracing@npm:1.0.1" dependencies: @@ -471,12 +445,12 @@ __metadata: languageName: node linkType: hard -"@azure/core-util@npm:^1.0.0": - version: 1.0.0 - resolution: "@azure/core-util@npm:1.0.0" +"@azure/core-util@npm:^1.0.0, @azure/core-util@npm:^1.1.0": + version: 1.1.0 + resolution: "@azure/core-util@npm:1.1.0" dependencies: tslib: ^2.2.0 - checksum: a0a9cce9452f78babb224fa2ea5566811bd946c55e5c867ca75e6ecd7fcf796b2ec2aa7424e141f03d8e14141e80f048897d0d3c227a7ff0bbaa9ba3d2fc14c9 + checksum: b5aa12c1709f3a7647917e9bea2b82806973677ea509de484fd1a97631a8a7aaab3864dc36dab0f661b49c31046ca87178a57ab4a38a8bccaab167eb6819fc1f languageName: node linkType: hard @@ -505,11 +479,11 @@ __metadata: linkType: hard "@azure/logger@npm:^1.0.0": - version: 1.0.1 - resolution: "@azure/logger@npm:1.0.1" + version: 1.0.3 + resolution: "@azure/logger@npm:1.0.3" dependencies: - tslib: ^2.0.0 - checksum: a9312a3a2c19cb23a48a08adfc37dc618755f00428c4bac549bcf996f5bb19a1e220172f44ca33d126b7001192261ce2c92d665748e2cb3ea16798a63a5c8982 + tslib: ^2.2.0 + checksum: f3443c70c678a7449a5f3be09488a0a15711c506c9da6a81fa9e43178128ddf5db3abc02c99359d188e4ef47d703c5e5f206df71b0e01884245de3220ab1205b languageName: node linkType: hard @@ -542,29 +516,29 @@ __metadata: linkType: hard "@azure/msal-browser@npm:^2.26.0": - version: 2.27.0 - resolution: "@azure/msal-browser@npm:2.27.0" + version: 2.28.3 + resolution: "@azure/msal-browser@npm:2.28.3" dependencies: - "@azure/msal-common": ^7.1.0 - checksum: 6cafb4d41a92f1bbb82e7128f64ccd6538ec116a2521f412108d94c4173601d31ea62febb7b22206dcae691e6a01cf7f9ce92793420599437b50a24c7e6ab851 + "@azure/msal-common": ^7.4.1 + checksum: 13e5367a94eedb19d5415b44a203e775f16bca0646180652ba3d0baef88a68c51af4ca72294defb3c02aea74685c70fbd0dfc747a3385e9d611c00839c046146 languageName: node linkType: hard -"@azure/msal-common@npm:^7.0.0, @azure/msal-common@npm:^7.1.0": - version: 7.1.0 - resolution: "@azure/msal-common@npm:7.1.0" - checksum: 761a8b9363c7b620d831aba7d7e7a66e341685e306034b027b57dc31dae11abdf86c3187c08fc8008448c845ffdcbbc42c767c75355625cf87aba25ba7e2832e +"@azure/msal-common@npm:^7.0.0, @azure/msal-common@npm:^7.4.1": + version: 7.4.1 + resolution: "@azure/msal-common@npm:7.4.1" + checksum: a4e21bf010ceaee6b580bd8e00b81386830f1b6d3e9bbd5498f0ede83765b82092958370ccbce087d4229c4e6c7b27f464d81fe8a469c0c705e8714e0eeff169 languageName: node linkType: hard "@azure/msal-node@npm:^1.10.0": - version: 1.11.0 - resolution: "@azure/msal-node@npm:1.11.0" + version: 1.14.0 + resolution: "@azure/msal-node@npm:1.14.0" dependencies: - "@azure/msal-common": ^7.1.0 + "@azure/msal-common": ^7.4.1 jsonwebtoken: ^8.5.1 uuid: ^8.3.0 - checksum: b7fff0e756e9f3ba351ddbfd097a7885bc14e735f80d504f2e309c251a333c6a2f8755b0d462e5aee386439530d659c2d0d71c1345b7d3f85e87cc5b4f21299e + checksum: 9ea3f5ceff99dab3f25919c7d35fab8c300493bc37d6c67033eaed7befa583eb04fd5cda7d7a40457c78721081a50b80966da73e8694142ca69a28660eaa03f6 languageName: node linkType: hard @@ -593,7 +567,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.18.6": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.16.7, @babel/code-frame@npm:^7.18.6, @babel/code-frame@npm:^7.8.3": version: 7.18.6 resolution: "@babel/code-frame@npm:7.18.6" dependencies: @@ -602,148 +576,48 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.16.7, @babel/code-frame@npm:^7.8.3": - version: 7.16.7 - resolution: "@babel/code-frame@npm:7.16.7" - dependencies: - "@babel/highlight": ^7.16.7 - checksum: db2f7faa31bc2c9cf63197b481b30ea57147a5fc1a6fab60e5d6c02cdfbf6de8e17b5121f99917b3dabb5eeb572da078312e70697415940383efc140d4e0808b +"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.18.8, @babel/compat-data@npm:^7.19.1": + version: 7.19.1 + resolution: "@babel/compat-data@npm:7.19.1" + checksum: f985887ea08a140e4af87a94d3fb17af0345491eb97f5a85b1840255c2e2a97429f32a8fd12a7aae9218af5f1024f1eb12a5cd280d2d69b2337583c17ea506ba languageName: node linkType: hard -"@babel/compat-data@npm:^7.13.11, @babel/compat-data@npm:^7.16.4": - version: 7.16.8 - resolution: "@babel/compat-data@npm:7.16.8" - checksum: 10da2dac5ea9589c251412b00920889910e476c1ab24cd7095577635bc3a27c785151c89db4e26285fd39f509510ec29ab9d7e721f4fc16e4aec221cacde784b - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.17.7": - version: 7.17.7 - resolution: "@babel/compat-data@npm:7.17.7" - checksum: bf13476676884ce9afc199747ff82f3bcd6d42a9cfb01ce91bdb762b83ea11ec619b6ec532d1a80469ab14f191f33b5d4b9f8796fa8be3bc728d42b0c5e737e3 - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.18.8": - version: 7.18.8 - resolution: "@babel/compat-data@npm:7.18.8" - checksum: 3096aafad74936477ebdd039bcf342fba84eb3100e608f3360850fb63e1efa1c66037c4824f814d62f439ab47d25164439343a6e92e9b4357024fdf571505eb9 - languageName: node - linkType: hard - -"@babel/core@npm:^7.1.0, @babel/core@npm:^7.13.16, @babel/core@npm:^7.14.0": - version: 7.16.12 - resolution: "@babel/core@npm:7.16.12" - dependencies: - "@babel/code-frame": ^7.16.7 - "@babel/generator": ^7.16.8 - "@babel/helper-compilation-targets": ^7.16.7 - "@babel/helper-module-transforms": ^7.16.7 - "@babel/helpers": ^7.16.7 - "@babel/parser": ^7.16.12 - "@babel/template": ^7.16.7 - "@babel/traverse": ^7.16.10 - "@babel/types": ^7.16.8 - convert-source-map: ^1.7.0 - debug: ^4.1.0 - gensync: ^1.0.0-beta.2 - json5: ^2.1.2 - semver: ^6.3.0 - source-map: ^0.5.0 - checksum: 29b56f3cb7c329fc038a2efaccf64ac3025835676b3d90f57f2265b6acd477a970114d09021b38d019ac8f20b2bb1596a9e79ce1f820d6b8cf0e4a802891817c - languageName: node - linkType: hard - -"@babel/core@npm:^7.12.3, @babel/core@npm:^7.7.2, @babel/core@npm:^7.8.0": - version: 7.17.8 - resolution: "@babel/core@npm:7.17.8" - dependencies: - "@ampproject/remapping": ^2.1.0 - "@babel/code-frame": ^7.16.7 - "@babel/generator": ^7.17.7 - "@babel/helper-compilation-targets": ^7.17.7 - "@babel/helper-module-transforms": ^7.17.7 - "@babel/helpers": ^7.17.8 - "@babel/parser": ^7.17.8 - "@babel/template": ^7.16.7 - "@babel/traverse": ^7.17.3 - "@babel/types": ^7.17.0 - convert-source-map: ^1.7.0 - debug: ^4.1.0 - gensync: ^1.0.0-beta.2 - json5: ^2.1.2 - semver: ^6.3.0 - checksum: 0e686b1be444d25494424065238931f2b3df908bf072b72bab973acfd6d27a481fc280c9cd8a3c6fe2c46beee50e0d2307468d8b15b64dc4036f025e75f6609d - languageName: node - linkType: hard - -"@babel/core@npm:^7.18.5": - version: 7.18.9 - resolution: "@babel/core@npm:7.18.9" +"@babel/core@npm:^7.1.0, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.16, @babel/core@npm:^7.14.0, @babel/core@npm:^7.18.5, @babel/core@npm:^7.7.2, @babel/core@npm:^7.8.0": + version: 7.19.1 + resolution: "@babel/core@npm:7.19.1" dependencies: "@ampproject/remapping": ^2.1.0 "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.18.9 - "@babel/helper-compilation-targets": ^7.18.9 - "@babel/helper-module-transforms": ^7.18.9 - "@babel/helpers": ^7.18.9 - "@babel/parser": ^7.18.9 - "@babel/template": ^7.18.6 - "@babel/traverse": ^7.18.9 - "@babel/types": ^7.18.9 + "@babel/generator": ^7.19.0 + "@babel/helper-compilation-targets": ^7.19.1 + "@babel/helper-module-transforms": ^7.19.0 + "@babel/helpers": ^7.19.0 + "@babel/parser": ^7.19.1 + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.19.1 + "@babel/types": ^7.19.0 convert-source-map: ^1.7.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 json5: ^2.2.1 semver: ^6.3.0 - checksum: 64b9088b03fdf659b334864ef93bed85d60c17b27fcbd72970f8eb9e0d3266ffa5a1926960f648f2db36b0bafec615f947ea5117d200599a0661b9f0a9cdf323 + checksum: 941c8c119b80bdba5fafc80bbaa424d51146b6d3c30b8fae35879358dd37c11d3d0926bc7e970a0861229656eedaa8c884d4a3a25cc904086eb73b827a2f1168 languageName: node linkType: hard -"@babel/generator@npm:^7.14.0, @babel/generator@npm:^7.16.8, @babel/generator@npm:^7.7.2": - version: 7.16.8 - resolution: "@babel/generator@npm:7.16.8" +"@babel/generator@npm:^7.14.0, @babel/generator@npm:^7.19.0, @babel/generator@npm:^7.7.2": + version: 7.19.0 + resolution: "@babel/generator@npm:7.19.0" dependencies: - "@babel/types": ^7.16.8 - jsesc: ^2.5.1 - source-map: ^0.5.0 - checksum: 83af38b34735605c9d5f774c87a46c2cffaf666b28e9eeba883b2d7076412257e5c2264c26d9740ce44da6955fdaf857659391db02c012714a2a6dc19e403105 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.17.3, @babel/generator@npm:^7.17.7": - version: 7.17.7 - resolution: "@babel/generator@npm:7.17.7" - dependencies: - "@babel/types": ^7.17.0 - jsesc: ^2.5.1 - source-map: ^0.5.0 - checksum: e7344b9b4559115f2754ecc2ae9508412ea6a8f617544cd3d3f17cabc727bd30630765f96c8a4ebc8901ded1492a3a6c23d695a4f1e8f3042f860b30c891985c - languageName: node - linkType: hard - -"@babel/generator@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/generator@npm:7.18.9" - dependencies: - "@babel/types": ^7.18.9 + "@babel/types": ^7.19.0 "@jridgewell/gen-mapping": ^0.3.2 jsesc: ^2.5.1 - checksum: 1c271e0c6f33e59f7845d88a1b0b9b0dce88164e80dec9274a716efa54c260e405e9462b160843e73f45382bf5b24d8e160e0121207e480c29b30e2ed0eb16d4 + checksum: aa3d5785cf8f8e81672dcc61aef351188efeadb20d9f66d79113d82cbcf3bbbdeb829989fa14582108572ddbc4e4027bdceb06ccaf5ec40fa93c2dda8fbcd4aa languageName: node linkType: hard -"@babel/helper-annotate-as-pure@npm:^7.16.0, @babel/helper-annotate-as-pure@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-annotate-as-pure@npm:7.16.7" - dependencies: - "@babel/types": ^7.16.7 - checksum: d235be963fed5d48a8a4cfabc41c3f03fad6a947810dbcab9cebed7f819811457e10d99b4b2e942ad71baa7ee8e3cd3f5f38a4e4685639ddfddb7528d9a07179 - languageName: node - linkType: hard - -"@babel/helper-annotate-as-pure@npm:^7.18.6": +"@babel/helper-annotate-as-pure@npm:^7.16.0, @babel/helper-annotate-as-pure@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" dependencies: @@ -762,134 +636,66 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.13.0, @babel/helper-compilation-targets@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-compilation-targets@npm:7.16.7" +"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.19.0, @babel/helper-compilation-targets@npm:^7.19.1": + version: 7.19.1 + resolution: "@babel/helper-compilation-targets@npm:7.19.1" dependencies: - "@babel/compat-data": ^7.16.4 - "@babel/helper-validator-option": ^7.16.7 - browserslist: ^4.17.5 - semver: ^6.3.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 7238aaee78c011a42fb5ca92e5eff098752f7b314c2111d7bb9cdd58792fcab1b9c819b59f6a0851dc210dc09dc06b30d130a23982753e70eb3111bc65204842 - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.17.7": - version: 7.17.7 - resolution: "@babel/helper-compilation-targets@npm:7.17.7" - dependencies: - "@babel/compat-data": ^7.17.7 - "@babel/helper-validator-option": ^7.16.7 - browserslist: ^4.17.5 - semver: ^6.3.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 24bf851539d5ec8e73779304b5d1ad5b0be09a74459ecc7d9baee9a0fa38ad016e9eaf4b5704504ae8da32f91ce0e31857bbbd9686854caeffd38f58226d3760 - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-compilation-targets@npm:7.18.9" - dependencies: - "@babel/compat-data": ^7.18.8 + "@babel/compat-data": ^7.19.1 "@babel/helper-validator-option": ^7.18.6 - browserslist: ^4.20.2 + browserslist: ^4.21.3 semver: ^6.3.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 2a9d71e124e098a9f45de4527ddd1982349d231827d341e00da9dfb967e260ecc7662c8b62abee4a010fb34d5f07a8d2155c974e0bc1928144cee5644910621d + checksum: c2d3039265e498b341a6b597f855f2fcef02659050fefedf36ad4e6815e6aafe1011a761214cc80d98260ed07ab15a8cbe959a0458e97bec5f05a450e1b1741b languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.16.7": - version: 7.16.10 - resolution: "@babel/helper-create-class-features-plugin@npm:7.16.10" - dependencies: - "@babel/helper-annotate-as-pure": ^7.16.7 - "@babel/helper-environment-visitor": ^7.16.7 - "@babel/helper-function-name": ^7.16.7 - "@babel/helper-member-expression-to-functions": ^7.16.7 - "@babel/helper-optimise-call-expression": ^7.16.7 - "@babel/helper-replace-supers": ^7.16.7 - "@babel/helper-split-export-declaration": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 2ab266aac7f94403311f63a17d32abb718ff040339bcae19880091de3fdb4e8d7196cb4e680f01a92924eb1a00a143364456e452c511c0b7b6e0b1a4b0e696da - languageName: node - linkType: hard - -"@babel/helper-create-class-features-plugin@npm:^7.18.6": - version: 7.18.9 - resolution: "@babel/helper-create-class-features-plugin@npm:7.18.9" +"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helper-create-class-features-plugin@npm:7.19.0" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 "@babel/helper-member-expression-to-functions": ^7.18.9 "@babel/helper-optimise-call-expression": ^7.18.6 "@babel/helper-replace-supers": ^7.18.9 "@babel/helper-split-export-declaration": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0 - checksum: 020dba79b92ee9a98520dad81dddb47d75b34b7b4392672cbefc59db6f5e89a96c5eb95bb1cc46b2fddf913ef63dfe6d17168f56b059af5c6965bb37b6ce1d82 + checksum: f0c6fb77b6f113d70f308e7093f60dd465b697818badf5df0519d8dd12b6bfb1f4ad300b923207ce9f9c1c940ef58bff12ac4270c0863eadf9e303b7dd6d01b6 languageName: node linkType: hard -"@babel/helper-create-regexp-features-plugin@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.16.7" - dependencies: - "@babel/helper-annotate-as-pure": ^7.16.7 - regexpu-core: ^4.7.1 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: f6015e0b81deddcbf09fde6c39d3acd55aa3ad45cbf04dae5e2ce2432cd5a63c4a0fa67eaeaa13c6cc526e7618234b9d252c924a5c99a01e6ce8ae882d485f38 - languageName: node - linkType: hard - -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.18.6" +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.19.0" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 regexpu-core: ^5.1.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 2d76e660cbfd0bfcb01ca9f177f0e9091c871a6b99f68ece6bcf4ab4a9df073485bdc2d87ecdfbde44b7f3723b26d13085d0f92082adb3ae80d31b246099f10a + checksum: 811cc90afe9fc25a74ed37fc0c1361a4a91b0b940235dd3958e3f03b366d40a903b40fc93b51bcb93be774aba573219f8f215664bea1d1301f58797ca6854f3f languageName: node linkType: hard -"@babel/helper-define-polyfill-provider@npm:^0.3.1": - version: 0.3.1 - resolution: "@babel/helper-define-polyfill-provider@npm:0.3.1" +"@babel/helper-define-polyfill-provider@npm:^0.3.3": + version: 0.3.3 + resolution: "@babel/helper-define-polyfill-provider@npm:0.3.3" dependencies: - "@babel/helper-compilation-targets": ^7.13.0 - "@babel/helper-module-imports": ^7.12.13 - "@babel/helper-plugin-utils": ^7.13.0 - "@babel/traverse": ^7.13.0 + "@babel/helper-compilation-targets": ^7.17.7 + "@babel/helper-plugin-utils": ^7.16.7 debug: ^4.1.1 lodash.debounce: ^4.0.8 resolve: ^1.14.2 semver: ^6.1.2 peerDependencies: "@babel/core": ^7.4.0-0 - checksum: e3e93cb22febfc0449a210cdafb278e5e1a038af2ca2b02f5dee71c7a49e8ba26e469d631ee11a4243885961a62bb2e5b0a4deb3ec1d7918a33c953d05c3e584 + checksum: 8e3fe75513302e34f6d92bd67b53890e8545e6c5bca8fe757b9979f09d68d7e259f6daea90dc9e01e332c4f8781bda31c5fe551c82a277f9bc0bec007aed497c languageName: node linkType: hard -"@babel/helper-environment-visitor@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-environment-visitor@npm:7.16.7" - dependencies: - "@babel/types": ^7.16.7 - checksum: c03a10105d9ebd1fe632a77356b2e6e2f3c44edba9a93b0dc3591b6a66bd7a2e323dd9502f9ce96fc6401234abff1907aa877b6674f7826b61c953f7c8204bbe - languageName: node - linkType: hard - -"@babel/helper-environment-visitor@npm:^7.18.6, @babel/helper-environment-visitor@npm:^7.18.9": +"@babel/helper-environment-visitor@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-environment-visitor@npm:7.18.9" checksum: b25101f6162ddca2d12da73942c08ad203d7668e06663df685634a8fde54a98bc015f6f62938e8554457a592a024108d45b8f3e651fd6dcdb877275b73cc4420 @@ -905,42 +711,13 @@ __metadata: languageName: node linkType: hard -"@babel/helper-function-name@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-function-name@npm:7.16.7" +"@babel/helper-function-name@npm:^7.18.9, @babel/helper-function-name@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helper-function-name@npm:7.19.0" dependencies: - "@babel/helper-get-function-arity": ^7.16.7 - "@babel/template": ^7.16.7 - "@babel/types": ^7.16.7 - checksum: fc77cbe7b10cfa2a262d7a37dca575c037f20419dfe0c5d9317f589599ca24beb5f5c1057748011159149eaec47fe32338c6c6412376fcded68200df470161e1 - languageName: node - linkType: hard - -"@babel/helper-function-name@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-function-name@npm:7.18.9" - dependencies: - "@babel/template": ^7.18.6 - "@babel/types": ^7.18.9 - checksum: d04c44e0272f887c0c868651be7fc3c5690531bea10936f00d4cca3f6d5db65e76dfb49e8d553c42ae1fe1eba61ccce9f3d93ba2df50a66408c8d4c3cc61cf0c - languageName: node - linkType: hard - -"@babel/helper-get-function-arity@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-get-function-arity@npm:7.16.7" - dependencies: - "@babel/types": ^7.16.7 - checksum: 25d969fb207ff2ad5f57a90d118f6c42d56a0171022e200aaa919ba7dc95ae7f92ec71cdea6c63ef3629a0dc962ab4c78e09ca2b437185ab44539193f796e0c3 - languageName: node - linkType: hard - -"@babel/helper-hoist-variables@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-hoist-variables@npm:7.16.7" - dependencies: - "@babel/types": ^7.16.7 - checksum: 6ae1641f4a751cd9045346e3f61c3d9ec1312fd779ab6d6fecfe2a96e59a481ad5d7e40d2a840894c13b3fd6114345b157f9e3062fc5f1580f284636e722de60 + "@babel/template": ^7.18.10 + "@babel/types": ^7.19.0 + checksum: eac1f5db428ba546270c2b8d750c24eb528b8fcfe50c81de2e0bdebf0e20f24bec688d4331533b782e4a907fad435244621ca2193cfcf80a86731299840e0f6e languageName: node linkType: hard @@ -953,15 +730,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-member-expression-to-functions@npm:7.16.7" - dependencies: - "@babel/types": ^7.16.7 - checksum: e275378022278a7e7974a3f65566690f1804ac88c5f4e848725cf936f61cd1e2557e88cfb6cb4fea92ae5a95ad89d78dbccc9a53715d4363f84c9fd109272c18 - languageName: node - linkType: hard - "@babel/helper-member-expression-to-functions@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-member-expression-to-functions@npm:7.18.9" @@ -971,16 +739,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.16.0, @babel/helper-module-imports@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-module-imports@npm:7.16.7" - dependencies: - "@babel/types": ^7.16.7 - checksum: ddd2c4a600a2e9a4fee192ab92bf35a627c5461dbab4af31b903d9ba4d6b6e59e0ff3499fde4e2e9a0eebe24906f00b636f8b4d9bd72ff24d50e6618215c3212 - languageName: node - linkType: hard - -"@babel/helper-module-imports@npm:^7.18.6": +"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.16.0, @babel/helper-module-imports@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-module-imports@npm:7.18.6" dependencies: @@ -989,60 +748,19 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-module-transforms@npm:7.16.7" - dependencies: - "@babel/helper-environment-visitor": ^7.16.7 - "@babel/helper-module-imports": ^7.16.7 - "@babel/helper-simple-access": ^7.16.7 - "@babel/helper-split-export-declaration": ^7.16.7 - "@babel/helper-validator-identifier": ^7.16.7 - "@babel/template": ^7.16.7 - "@babel/traverse": ^7.16.7 - "@babel/types": ^7.16.7 - checksum: 6e930ce776c979f299cdbeaf80187f4ab086d75287b96ecc1c6896d392fcb561065f0d6219fc06fa79b4ceb4bbdc1a9847da8099aba9b077d0a9e583500fb673 - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.17.7": - version: 7.17.7 - resolution: "@babel/helper-module-transforms@npm:7.17.7" - dependencies: - "@babel/helper-environment-visitor": ^7.16.7 - "@babel/helper-module-imports": ^7.16.7 - "@babel/helper-simple-access": ^7.17.7 - "@babel/helper-split-export-declaration": ^7.16.7 - "@babel/helper-validator-identifier": ^7.16.7 - "@babel/template": ^7.16.7 - "@babel/traverse": ^7.17.3 - "@babel/types": ^7.17.0 - checksum: 0b8f023aa7ff82dc4864349d54c4557865ad8ba54d78f6d78a86b05ca40f65c2d60acb4a54c5c309e7a4356beb9a89b876e54af4b3c4801ad25f62ec3721f0ae - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.18.6, @babel/helper-module-transforms@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-module-transforms@npm:7.18.9" +"@babel/helper-module-transforms@npm:^7.18.6, @babel/helper-module-transforms@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helper-module-transforms@npm:7.19.0" dependencies: "@babel/helper-environment-visitor": ^7.18.9 "@babel/helper-module-imports": ^7.18.6 "@babel/helper-simple-access": ^7.18.6 "@babel/helper-split-export-declaration": ^7.18.6 "@babel/helper-validator-identifier": ^7.18.6 - "@babel/template": ^7.18.6 - "@babel/traverse": ^7.18.9 - "@babel/types": ^7.18.9 - checksum: af08c60ea239ff3d40eda542fceaab69de17e713f131e80ead08c975ba7a47dd55d439cb48cfb14ae7ec96704a10c989ff5a5240e52a39101cb44a49467ce058 - languageName: node - linkType: hard - -"@babel/helper-optimise-call-expression@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-optimise-call-expression@npm:7.16.7" - dependencies: - "@babel/types": ^7.16.7 - checksum: 925feb877d5a30a71db56e2be498b3abbd513831311c0188850896c4c1ada865eea795dce5251a1539b0f883ef82493f057f84286dd01abccc4736acfafe15ea + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.19.0 + "@babel/types": ^7.19.0 + checksum: 4483276c66f56cf3b5b063634092ad9438c2593725de5c143ba277dda82f1501e6d73b311c1b28036f181dbe36eaeff29f24726cde37a599d4e735af294e5359 languageName: node linkType: hard @@ -1055,21 +773,14 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.13.0, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": - version: 7.16.7 - resolution: "@babel/helper-plugin-utils@npm:7.16.7" - checksum: d08dd86554a186c2538547cd537552e4029f704994a9201d41d82015c10ed7f58f9036e8d1527c3760f042409163269d308b0b3706589039c5f1884619c6d4ce +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": + version: 7.19.0 + resolution: "@babel/helper-plugin-utils@npm:7.19.0" + checksum: eedc996c633c8c207921c26ec2989eae0976336ecd9b9f1ac526498f52b5d136f7cd03c32b6fdf8d46a426f907c142de28592f383c42e5fba1e904cbffa05345 languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-plugin-utils@npm:7.18.9" - checksum: ebae876cd60f1fe238c7210986093845fa5c4cad5feeda843ea4d780bf068256717650376d3af2a5e760f2ed6a35c065ae144f99c47da3e54aa6cba99d8804e0 - languageName: node - linkType: hard - -"@babel/helper-remap-async-to-generator@npm:^7.18.6": +"@babel/helper-remap-async-to-generator@npm:^7.18.6, @babel/helper-remap-async-to-generator@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-remap-async-to-generator@npm:7.18.9" dependencies: @@ -1083,47 +794,16 @@ __metadata: languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-replace-supers@npm:7.16.7" - dependencies: - "@babel/helper-environment-visitor": ^7.16.7 - "@babel/helper-member-expression-to-functions": ^7.16.7 - "@babel/helper-optimise-call-expression": ^7.16.7 - "@babel/traverse": ^7.16.7 - "@babel/types": ^7.16.7 - checksum: e5c0b6eb3dad8410a6255f93b580dde9b3c1564646c6ef751de59d5b2a65b5caa80cc9e568155f04bbae895ad0f54305c2e833dbd971a4f641f970c90b3d892b - languageName: node - linkType: hard - "@babel/helper-replace-supers@npm:^7.18.6, @babel/helper-replace-supers@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-replace-supers@npm:7.18.9" + version: 7.19.1 + resolution: "@babel/helper-replace-supers@npm:7.19.1" dependencies: "@babel/helper-environment-visitor": ^7.18.9 "@babel/helper-member-expression-to-functions": ^7.18.9 "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/traverse": ^7.18.9 - "@babel/types": ^7.18.9 - checksum: 2de8b29cc4bfa4e241da2de16abd5571709f6eb394206dc16e3a7816976d1691635dd4bc930881e9d798f44b48a5f1849dc7f51a62946f3e8270452be1ec5352 - languageName: node - linkType: hard - -"@babel/helper-simple-access@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-simple-access@npm:7.16.7" - dependencies: - "@babel/types": ^7.16.7 - checksum: 8d22c46c5ec2ead0686c4d5a3d1d12b5190c59be676bfe0d9d89df62b437b51d1a3df2ccfb8a77dded2e585176ebf12986accb6d45a18cff229eef3b10344f4b - languageName: node - linkType: hard - -"@babel/helper-simple-access@npm:^7.17.7": - version: 7.17.7 - resolution: "@babel/helper-simple-access@npm:7.17.7" - dependencies: - "@babel/types": ^7.17.0 - checksum: 58a9bfd054720024f6ff47fbb113c96061dc2bd31a5e5285756bd3c2e83918c6926900e00150d0fb175d899494fe7d69bf2a8b278c32ef6f6bea8d032e6a3831 + "@babel/traverse": ^7.19.1 + "@babel/types": ^7.19.0 + checksum: a0e4bf79ebe7d2bb5947169e47a0b4439c73fb0ec57d446cf3ea81b736721129ec373c3f94d2ebd2716b26dd65f8e6c083dac898170d42905e7ba815a2f52c25 languageName: node linkType: hard @@ -1136,15 +816,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.16.0": - version: 7.16.0 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.16.0" - dependencies: - "@babel/types": ^7.16.0 - checksum: b9ed2896eb253e6a85f472b0d4098ed80403758ad1a4e34b02b11e8276e3083297526758b1a3e6886e292987266f10622d7dbced3508cc22b296a74903b41cfb - languageName: node - linkType: hard - "@babel/helper-skip-transparent-expression-wrappers@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.18.9" @@ -1154,15 +825,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-split-export-declaration@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-split-export-declaration@npm:7.16.7" - dependencies: - "@babel/types": ^7.16.7 - checksum: e10aaf135465c55114627951b79115f24bc7af72ecbb58d541d66daf1edaee5dde7cae3ec8c3639afaf74526c03ae3ce723444e3b5b3dc77140c456cd84bcaa1 - languageName: node - linkType: hard - "@babel/helper-split-export-declaration@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-split-export-declaration@npm:7.18.6" @@ -1179,17 +841,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.16.7, @babel/helper-validator-identifier@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-validator-identifier@npm:7.18.6" - checksum: e295254d616bbe26e48c196a198476ab4d42a73b90478c9842536cf910ead887f5af6b5c4df544d3052a25ccb3614866fa808dc1e3a5a4291acd444e243c0648 - languageName: node - linkType: hard - -"@babel/helper-validator-option@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helper-validator-option@npm:7.16.7" - checksum: c5ccc451911883cc9f12125d47be69434f28094475c1b9d2ada7c3452e6ac98a1ee8ddd364ca9e3f9855fcdee96cdeafa32543ebd9d17fee7a1062c202e80570 +"@babel/helper-validator-identifier@npm:^7.18.6": + version: 7.19.1 + resolution: "@babel/helper-validator-identifier@npm:7.19.1" + checksum: 0eca5e86a729162af569b46c6c41a63e18b43dbe09fda1d2a3c8924f7d617116af39cac5e4cd5d431bb760b4dca3c0970e0c444789b1db42bcf1fa41fbad0a3a languageName: node linkType: hard @@ -1201,62 +856,29 @@ __metadata: linkType: hard "@babel/helper-wrap-function@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-wrap-function@npm:7.18.9" + version: 7.19.0 + resolution: "@babel/helper-wrap-function@npm:7.19.0" dependencies: - "@babel/helper-function-name": ^7.18.9 - "@babel/template": ^7.18.6 - "@babel/traverse": ^7.18.9 - "@babel/types": ^7.18.9 - checksum: da818e519b48bbaa748a4fa87b0ba681bc627c9eb9557008d5307d42d3f536fe435b775163088dd9639b0120c8ea1ae1021777f48806f9f83397f4df622b88d3 + "@babel/helper-function-name": ^7.19.0 + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.19.0 + "@babel/types": ^7.19.0 + checksum: 2453a6b134f12cc779179188c4358a66252c29b634a8195c0cf626e17f9806c3c4c40e159cd8056c2ec82b69b9056a088014fa43d6ccc1aca67da8d9605da8fd languageName: node linkType: hard -"@babel/helpers@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/helpers@npm:7.16.7" +"@babel/helpers@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helpers@npm:7.19.0" dependencies: - "@babel/template": ^7.16.7 - "@babel/traverse": ^7.16.7 - "@babel/types": ^7.16.7 - checksum: 75504c76b66a29b91f954fcc0867dfe275a4cfba5b44df6d64405df74ea72f967fccfa63d62c31c423c5502d113290000c581e0e4858a214f0303d7ecf55c29f + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.19.0 + "@babel/types": ^7.19.0 + checksum: e50e78e0dbb0435075fa3f85021a6bcae529589800bca0292721afd7f7c874bea54508d6dc57eca16e5b8224f8142c6b0e32e3b0140029dc09865da747da4623 languageName: node linkType: hard -"@babel/helpers@npm:^7.17.8": - version: 7.17.8 - resolution: "@babel/helpers@npm:7.17.8" - dependencies: - "@babel/template": ^7.16.7 - "@babel/traverse": ^7.17.3 - "@babel/types": ^7.17.0 - checksum: 463dad58119fefebf2d0201bfa53ec9607aa00356908895640fc07589747fb3c2e0dfee4019f3e8c9781e57c9aa5dff4c72ec8d1b031c4ed8349f90b6aefe99d - languageName: node - linkType: hard - -"@babel/helpers@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helpers@npm:7.18.9" - dependencies: - "@babel/template": ^7.18.6 - "@babel/traverse": ^7.18.9 - "@babel/types": ^7.18.9 - checksum: d0bd8255d36bfc65dc52ce75f7fea778c70287da2d64981db4c84fbdf9581409ecbd6433deff1c81da3a5acf26d7e4c364b3a4445efacf88f4f48e77c5b34d8d - languageName: node - linkType: hard - -"@babel/highlight@npm:^7.0.0": - version: 7.16.10 - resolution: "@babel/highlight@npm:7.16.10" - dependencies: - "@babel/helper-validator-identifier": ^7.16.7 - chalk: ^2.0.0 - js-tokens: ^4.0.0 - checksum: 1f1bdd752a90844f4efc22166a46303fb651ba0fd75a06daba3ebae2575ab3edc1da9827c279872a3aaf305f50a18473c5fa1966752726a2b253065fd4c0745e - languageName: node - linkType: hard - -"@babel/highlight@npm:^7.16.7, @babel/highlight@npm:^7.18.6": +"@babel/highlight@npm:^7.0.0, @babel/highlight@npm:^7.18.6": version: 7.18.6 resolution: "@babel/highlight@npm:7.18.6" dependencies: @@ -1267,30 +889,12 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.16.10, @babel/parser@npm:^7.16.12, @babel/parser@npm:^7.16.7, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.17.3, @babel/parser@npm:^7.17.8": - version: 7.17.9 - resolution: "@babel/parser@npm:7.17.9" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.18.10, @babel/parser@npm:^7.19.1, @babel/parser@npm:^7.9.4": + version: 7.19.1 + resolution: "@babel/parser@npm:7.19.1" bin: parser: ./bin/babel-parser.js - checksum: ea59c985ebfae7c0299c8ea63ed34903202f51665db8d59c55b4366e20270b74d7367a2c211fdd2db20f25750df89adcc85ab6c8692061c6459a88efb79f43e6 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.18.6, @babel/parser@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/parser@npm:7.18.9" - bin: - parser: ./bin/babel-parser.js - checksum: 81a966b334e3ef397e883c64026265a5ae0ad435a86f52a84f60a5ee1efc0738c1f42c55e0dc5f191cc6a83ba0c61350433eee417bf1dff160ca5f3cfde244c6 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.9.4": - version: 7.18.13 - resolution: "@babel/parser@npm:7.18.13" - bin: - parser: ./bin/babel-parser.js - checksum: 8b41c35607668495d67d9a7c5f61768aaab26acf887efdadc2781aed54046981480ef40aeda0b84d61aed02cf0c4ff4b028d5f83ab85e17e2ddff318f9243b8b + checksum: b1e0acb346b2a533c857e1e97ac0886cdcbd76aafef67835a2b23f760c10568eb53ad8a27dd5f862d8ba4e583742e6067f107281ccbd68959d61bc61e4ddaa51 languageName: node linkType: hard @@ -1318,33 +922,21 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-async-generator-functions@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.18.6" +"@babel/plugin-proposal-async-generator-functions@npm:^7.19.1": + version: 7.19.1 + resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.19.1" dependencies: - "@babel/helper-environment-visitor": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/helper-remap-async-to-generator": ^7.18.6 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-plugin-utils": ^7.19.0 + "@babel/helper-remap-async-to-generator": ^7.18.9 "@babel/plugin-syntax-async-generators": ^7.8.4 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 3f708808ba6f8a9bd18805b1b22ab90ec0b362d949111a776e0bade5391f143f55479dcc444b2cec25fc89ac21035ee92e9a5ec37c02c610639197a0c2f7dcb0 + checksum: f101555b00aee6ee0107c9e40d872ad646bbd3094abdbeda56d17b107df69a0cb49e5d02dcf5f9d8753e25564e798d08429f12d811aaa1b307b6a725c0b8159c languageName: node linkType: hard -"@babel/plugin-proposal-class-properties@npm:^7.0.0, @babel/plugin-proposal-class-properties@npm:^7.13.0": - version: 7.16.7 - resolution: "@babel/plugin-proposal-class-properties@npm:7.16.7" - dependencies: - "@babel/helper-create-class-features-plugin": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 3977e841e17b45b47be749b9a5b67b9e8b25ff0840f9fdad3f00cbcb35db4f5ff15f074939fe19b01207a29688c432cc2c682351959350834d62920b7881f803 - languageName: node - linkType: hard - -"@babel/plugin-proposal-class-properties@npm:^7.18.6": +"@babel/plugin-proposal-class-properties@npm:^7.0.0, @babel/plugin-proposal-class-properties@npm:^7.13.0, @babel/plugin-proposal-class-properties@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6" dependencies: @@ -1417,19 +1009,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.13.8": - version: 7.16.7 - resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.16.7" - dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bfafc2701697b5c763dbbb65dd97b56979bfb0922e35be27733699a837aeff22316313ddfdd0fb45129efa3f86617219b77110d05338bc4dca4385d8ce83dd19 - languageName: node - linkType: hard - -"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.18.6": +"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.13.8, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.18.6" dependencies: @@ -1453,22 +1033,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0": - version: 7.16.7 - resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.16.7" - dependencies: - "@babel/compat-data": ^7.16.4 - "@babel/helper-compilation-targets": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-transform-parameters": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2d3740e4df6d3f51d57862100c45c000104571aa98b7f798fdfc05ae0c12b9e7cc9b55f4a28612d626e29f3369a1481a0ee8a0241b23508b9d3da00c55f99d41 - languageName: node - linkType: hard - -"@babel/plugin-proposal-object-rest-spread@npm:^7.18.9": +"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0, @babel/plugin-proposal-object-rest-spread@npm:^7.18.9": version: 7.18.9 resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.18.9" dependencies: @@ -1495,20 +1060,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-optional-chaining@npm:^7.13.12": - version: 7.16.7 - resolution: "@babel/plugin-proposal-optional-chaining@npm:7.16.7" - dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/helper-skip-transparent-expression-wrappers": ^7.16.0 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: e4a6c1ac7e6817b92a673ea52ab0b7dc1fb39d29fb0820cd414e10ae2cd132bd186b4238dcca881a29fc38fe9d38ed24fc111ba22ca20086481682d343f4f130 - languageName: node - linkType: hard - -"@babel/plugin-proposal-optional-chaining@npm:^7.18.9": +"@babel/plugin-proposal-optional-chaining@npm:^7.13.12, @babel/plugin-proposal-optional-chaining@npm:^7.18.9": version: 7.18.9 resolution: "@babel/plugin-proposal-optional-chaining@npm:7.18.9" dependencies: @@ -1547,7 +1099,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-unicode-property-regex@npm:^7.18.6": +"@babel/plugin-proposal-unicode-property-regex@npm:^7.18.6, @babel/plugin-proposal-unicode-property-regex@npm:^7.4.4": version: 7.18.6 resolution: "@babel/plugin-proposal-unicode-property-regex@npm:7.18.6" dependencies: @@ -1559,18 +1111,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-unicode-property-regex@npm:^7.4.4": - version: 7.16.7 - resolution: "@babel/plugin-proposal-unicode-property-regex@npm:7.16.7" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2b8a33713d456183f0b7d011011e7bd932c08cc06216399a7b2015ab39284b511993dc10a89bbb15d1d728e6a2ef42ca08c3202619aa148cbd48052422ea3995 - languageName: node - linkType: hard - "@babel/plugin-syntax-async-generators@npm:^7.8.4": version: 7.8.4 resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" @@ -1637,14 +1177,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-flow@npm:^7.0.0, @babel/plugin-syntax-flow@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-syntax-flow@npm:7.16.7" +"@babel/plugin-syntax-flow@npm:^7.0.0, @babel/plugin-syntax-flow@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-syntax-flow@npm:7.18.6" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b1ab0bd9b78e4aa5fb48714d6514f3d08d72693807c6044a5be4f301a9bb677b5648fbdae11c8bc93923da6b320a1898560c307933021bdb75ee39e577ed74ee + checksum: abe82062b3eef14de7d2b3c0e4fecf80a3e796ca497e9df616d12dd250968abf71495ee85a955b43a6c827137203f0c409450cf792732ed0d6907c806580ea71 languageName: node linkType: hard @@ -1681,18 +1221,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.0.0, @babel/plugin-syntax-jsx@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-syntax-jsx@npm:7.16.7" - dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: cd9b0e53c50e8ddb0afaf0f42e0b221a94e4f59aee32a591364266a31195c48cac5fef288d02c1c935686bda982d2e0f1ed61cceb995fc9f6fb09ef5ebecdd2b - languageName: node - linkType: hard - -"@babel/plugin-syntax-jsx@npm:^7.18.6": +"@babel/plugin-syntax-jsx@npm:^7.0.0, @babel/plugin-syntax-jsx@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-syntax-jsx@npm:7.18.6" dependencies: @@ -1791,18 +1320,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.16.7, @babel/plugin-syntax-typescript@npm:^7.7.2": - version: 7.16.7 - resolution: "@babel/plugin-syntax-typescript@npm:7.16.7" - dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 661e636060609ede9a402e22603b01784c21fabb0a637e65f561c8159351fe0130bbc11fdefe31902107885e3332fc34d95eb652ac61d3f61f2d61f5da20609e - languageName: node - linkType: hard - -"@babel/plugin-syntax-typescript@npm:^7.18.6": +"@babel/plugin-syntax-typescript@npm:^7.18.6, @babel/plugin-syntax-typescript@npm:^7.7.2": version: 7.18.6 resolution: "@babel/plugin-syntax-typescript@npm:7.18.6" dependencies: @@ -1813,18 +1331,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.0.0": - version: 7.16.7 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.16.7" - dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2a6aa982c6fc80f4de7ccd973507ce5464fab129987cb6661136a7b9b6a020c2b329b912cbc46a68d39b5a18451ba833dcc8d1ca8d615597fec98624ac2add54 - languageName: node - linkType: hard - -"@babel/plugin-transform-arrow-functions@npm:^7.18.6": +"@babel/plugin-transform-arrow-functions@npm:^7.0.0, @babel/plugin-transform-arrow-functions@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-arrow-functions@npm:7.18.6" dependencies: @@ -1848,18 +1355,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoped-functions@npm:^7.0.0": - version: 7.16.7 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.16.7" - dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 591e9f75437bb32ebf9506d28d5c9659c66c0e8e0c19b12924d808d898e68309050aadb783ccd70bb4956555067326ecfa17a402bc77eb3ece3c6863d40b9016 - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoped-functions@npm:^7.18.6": +"@babel/plugin-transform-block-scoped-functions@npm:^7.0.0, @babel/plugin-transform-block-scoped-functions@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.18.6" dependencies: @@ -1870,18 +1366,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.0.0": - version: 7.16.7 - resolution: "@babel/plugin-transform-block-scoping@npm:7.16.7" - dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f93b5441af573fc274655f1707aeb4f67a43e926b58f56d89cc35a27877ae0bf198648603cbc19f442579489138f93c3838905895f109aa356996dbc3ed97a68 - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoping@npm:^7.18.9": +"@babel/plugin-transform-block-scoping@npm:^7.0.0, @babel/plugin-transform-block-scoping@npm:^7.18.9": version: 7.18.9 resolution: "@babel/plugin-transform-block-scoping@npm:7.18.9" dependencies: @@ -1892,54 +1377,26 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.0.0": - version: 7.16.7 - resolution: "@babel/plugin-transform-classes@npm:7.16.7" - dependencies: - "@babel/helper-annotate-as-pure": ^7.16.7 - "@babel/helper-environment-visitor": ^7.16.7 - "@babel/helper-function-name": ^7.16.7 - "@babel/helper-optimise-call-expression": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/helper-replace-supers": ^7.16.7 - "@babel/helper-split-export-declaration": ^7.16.7 - globals: ^11.1.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 791526a1bf3c4659b94d619536e3181d3ad54887d50539066628c6e695789a3bb264dc1fbc8540169d62a222f623df54defb490c1811ae63bad1e3557d6b3bb0 - languageName: node - linkType: hard - -"@babel/plugin-transform-classes@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-classes@npm:7.18.9" +"@babel/plugin-transform-classes@npm:^7.0.0, @babel/plugin-transform-classes@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/plugin-transform-classes@npm:7.19.0" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-compilation-targets": ^7.19.0 "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-plugin-utils": ^7.19.0 "@babel/helper-replace-supers": ^7.18.9 "@babel/helper-split-export-declaration": ^7.18.6 globals: ^11.1.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d7e953c0cf32af64e75db1277d2556c04635f32691ef462436897840be6f8021d4f85ee96134cb796a12dda549cf53346fedf96b671885f881bc4037c9d120ad + checksum: 5500953031fc3eae73f717c7b59ef406158a4a710d566a0f78a4944240bcf98f817f07cf1d6af0e749e21f0dfee29c36412b75d57b0a753c3ad823b70c596b79 languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.0.0": - version: 7.16.7 - resolution: "@babel/plugin-transform-computed-properties@npm:7.16.7" - dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 28b17f7cfe643f45920b76dc040cab40d4e54eccf5074fba2658c484feacda9b4885b3854ffaf26292189783fdecc97211519c61831b6708fcbf739cfbcbf31c - languageName: node - linkType: hard - -"@babel/plugin-transform-computed-properties@npm:^7.18.9": +"@babel/plugin-transform-computed-properties@npm:^7.0.0, @babel/plugin-transform-computed-properties@npm:^7.18.9": version: 7.18.9 resolution: "@babel/plugin-transform-computed-properties@npm:7.18.9" dependencies: @@ -1950,29 +1407,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.0.0": - version: 7.16.7 - resolution: "@babel/plugin-transform-destructuring@npm:7.16.7" - dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: d1c2e15e7be2a7c57ac8ec4df06fbb706c7ecc872ab7bc2193606e6d6a01929b6d5a1bb41540e41180e42a5ce0e70dce22e7896cb6578dd581d554f77780971b - languageName: node - linkType: hard - -"@babel/plugin-transform-destructuring@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-destructuring@npm:7.18.9" +"@babel/plugin-transform-destructuring@npm:^7.0.0, @babel/plugin-transform-destructuring@npm:^7.18.13": + version: 7.18.13 + resolution: "@babel/plugin-transform-destructuring@npm:7.18.13" dependencies: "@babel/helper-plugin-utils": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 1a9b85dff67fd248fa8a2488ef59df3eb4dd4ca6007ff7db9f780c7873630a13bc16cfb2ad8f4c4ca966e42978410d1e4b306545941fe62769f2683f34973acd + checksum: 83e44ec93a4cfbf69376db8836d00ec803820081bf0f8b6cea73a9b3cd320b8285768d5b385744af4a27edda4b6502245c52d3ed026ea61356faf57bfe78effb languageName: node linkType: hard -"@babel/plugin-transform-dotall-regex@npm:^7.18.6": +"@babel/plugin-transform-dotall-regex@npm:^7.18.6, @babel/plugin-transform-dotall-regex@npm:^7.4.4": version: 7.18.6 resolution: "@babel/plugin-transform-dotall-regex@npm:7.18.6" dependencies: @@ -1984,18 +1430,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-dotall-regex@npm:^7.4.4": - version: 7.16.7 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.16.7" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 554570dddfd5bfd87ab307be520f69a3d4ed2d2db677c165971b400d4c96656d0c165b318e69f1735612dcd12e04c0ee257697dc26800e8a572ca73bc05fa0f4 - languageName: node - linkType: hard - "@babel/plugin-transform-duplicate-keys@npm:^7.18.9": version: 7.18.9 resolution: "@babel/plugin-transform-duplicate-keys@npm:7.18.9" @@ -2019,30 +1453,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-flow-strip-types@npm:^7.0.0, @babel/plugin-transform-flow-strip-types@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-transform-flow-strip-types@npm:7.16.7" +"@babel/plugin-transform-flow-strip-types@npm:^7.0.0, @babel/plugin-transform-flow-strip-types@npm:^7.18.6": + version: 7.19.0 + resolution: "@babel/plugin-transform-flow-strip-types@npm:7.19.0" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/plugin-syntax-flow": ^7.16.7 + "@babel/helper-plugin-utils": ^7.19.0 + "@babel/plugin-syntax-flow": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4b4801c91d805d95957781e537f88e9f34c7f8a4c262c4d230af2ab7a920889c542860e505149a856d4c16916ffb02df4f3af161733adeedb7671555d1510bba + checksum: c35339bf80c2a2b9abb9e2ce0382e1d9cc3ef7db2af127f4ec3d184bad2aec3269f3fcac5fdcd565439732803acad72eb9e7d5a18e439221526fdc041c9e8e1e languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.0.0": - version: 7.16.7 - resolution: "@babel/plugin-transform-for-of@npm:7.16.7" - dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 35c9264ee4bef814818123d70afe8b2f0a85753a0a9dc7b73f93a71cadc5d7de852f1a3e300a7c69a491705805704611de1e2ccceb5686f7828d6bca2e5a7306 - languageName: node - linkType: hard - -"@babel/plugin-transform-for-of@npm:^7.18.8": +"@babel/plugin-transform-for-of@npm:^7.0.0, @babel/plugin-transform-for-of@npm:^7.18.8": version: 7.18.8 resolution: "@babel/plugin-transform-for-of@npm:7.18.8" dependencies: @@ -2053,20 +1476,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.0.0": - version: 7.16.7 - resolution: "@babel/plugin-transform-function-name@npm:7.16.7" - dependencies: - "@babel/helper-compilation-targets": ^7.16.7 - "@babel/helper-function-name": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 4d97d0b84461cdd5d5aa2d010cdaf30f1f83a92a0dedd3686cbc7e90dc1249a70246f5bac0c1f3cd3f1dbfb03f7aac437776525a0c90cafd459776ea4fcc6bde - languageName: node - linkType: hard - -"@babel/plugin-transform-function-name@npm:^7.18.9": +"@babel/plugin-transform-function-name@npm:^7.0.0, @babel/plugin-transform-function-name@npm:^7.18.9": version: 7.18.9 resolution: "@babel/plugin-transform-function-name@npm:7.18.9" dependencies: @@ -2079,18 +1489,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.0.0": - version: 7.16.7 - resolution: "@babel/plugin-transform-literals@npm:7.16.7" - dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a9565d999fc7a72a391ef843cf66028c38ca858537c7014d9ea8ea587a59e5f952d9754bdcca6ca0446e84653e297d417d4faedccb9e4221af1aa30f25d918e0 - languageName: node - linkType: hard - -"@babel/plugin-transform-literals@npm:^7.18.9": +"@babel/plugin-transform-literals@npm:^7.0.0, @babel/plugin-transform-literals@npm:^7.18.9": version: 7.18.9 resolution: "@babel/plugin-transform-literals@npm:7.18.9" dependencies: @@ -2101,18 +1500,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.0.0": - version: 7.16.7 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.16.7" - dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: fdf5b22abab2b770e69348ce7f99796c3e0e1e7ce266afdbe995924284704930fa989323bdbda7070db8adb45a72f39eaa1dbebf18b67fc44035ec00c6ae3300 - languageName: node - linkType: hard - -"@babel/plugin-transform-member-expression-literals@npm:^7.18.6": +"@babel/plugin-transform-member-expression-literals@npm:^7.0.0, @babel/plugin-transform-member-expression-literals@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-member-expression-literals@npm:7.18.6" dependencies: @@ -2136,21 +1524,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.0.0, @babel/plugin-transform-modules-commonjs@npm:^7.13.8": - version: 7.16.8 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.16.8" - dependencies: - "@babel/helper-module-transforms": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/helper-simple-access": ^7.16.7 - babel-plugin-dynamic-import-node: ^2.3.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: c0ac00f5457e12cac7825b14725b6fc787bef78945181469ff79f07ef0fd7df021cb00fe1d3a9f35fc9bc92ae59e6e3fc9075a70b627dfe10e00d0907892aace - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-commonjs@npm:^7.18.6": +"@babel/plugin-transform-modules-commonjs@npm:^7.0.0, @babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-modules-commonjs@npm:7.18.6" dependencies: @@ -2164,18 +1538,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.18.9" +"@babel/plugin-transform-modules-systemjs@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.19.0" dependencies: "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-module-transforms": ^7.18.9 - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-module-transforms": ^7.19.0 + "@babel/helper-plugin-utils": ^7.19.0 "@babel/helper-validator-identifier": ^7.18.6 babel-plugin-dynamic-import-node: ^2.3.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 6122d9901ed5dc56d9db843efc9249fe20d769a11989bbbf5a806ed4f086def949185198aa767888481babf70fc52b6b3e297a991e2b02b4f34ffb03d998d1e3 + checksum: a0742deee4a076d6fc303d036c1ea2bea9b7d91af390483fe91fc415f9cb43925bb5dd930fdcb8fcdc9d4c7a22774a3cec521c67f1422a9b473debcb85ee57f9 languageName: node linkType: hard @@ -2191,15 +1565,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.18.6" +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.19.1": + version: 7.19.1 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.19.1" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-create-regexp-features-plugin": ^7.19.0 + "@babel/helper-plugin-utils": ^7.19.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 6ef64aa3dad68df139eeaa7b6e9bb626be8f738ed5ed4db765d516944b1456d513b6bad3bb60fff22babe73de26436fd814a4228705b2d3d2fdb272c31da35e2 + checksum: 8a40f5d04f2140c44fe890a5a3fd72abc2a88445443ac2bd92e1e85d9366d3eb8f1ebb7e2c89d2daeaf213d9b28cb65605502ac9b155936d48045eeda6053494 languageName: node linkType: hard @@ -2214,19 +1588,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.0.0": - version: 7.16.7 - resolution: "@babel/plugin-transform-object-super@npm:7.16.7" - dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/helper-replace-supers": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 46e3c879f4a93e904f2ecf83233d40c48c832bdbd82a67cab1f432db9aa51702e40d9e51e5800613e12299974f90f4ed3869e1273dbca8642984266320c5f341 - languageName: node - linkType: hard - -"@babel/plugin-transform-object-super@npm:^7.18.6": +"@babel/plugin-transform-object-super@npm:^7.0.0, @babel/plugin-transform-object-super@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-object-super@npm:7.18.6" dependencies: @@ -2238,18 +1600,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-transform-parameters@npm:7.16.7" - dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 4d6904376db82d0b35f0a6cce08f630daf8608d94e903d6c7aff5bd742b251651bd1f88cdf9f16cad98aba5fc7c61da8635199364865fad6367d5ae37cf56cc1 - languageName: node - linkType: hard - -"@babel/plugin-transform-parameters@npm:^7.18.8": +"@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.18.8": version: 7.18.8 resolution: "@babel/plugin-transform-parameters@npm:7.18.8" dependencies: @@ -2260,18 +1611,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.0.0": - version: 7.16.7 - resolution: "@babel/plugin-transform-property-literals@npm:7.16.7" - dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: b5674458991a9b0e8738989d70faa88c7f98ed3df923c119f1225069eed72fe5e0ce947b1adc91e378f5822fbdeb7a672f496fd1c75c4babcc88169e3a7c3229 - languageName: node - linkType: hard - -"@babel/plugin-transform-property-literals@npm:^7.18.6": +"@babel/plugin-transform-property-literals@npm:^7.0.0, @babel/plugin-transform-property-literals@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-property-literals@npm:7.18.6" dependencies: @@ -2283,28 +1623,17 @@ __metadata: linkType: hard "@babel/plugin-transform-react-constant-elements@npm:^7.17.12": - version: 7.18.9 - resolution: "@babel/plugin-transform-react-constant-elements@npm:7.18.9" + version: 7.18.12 + resolution: "@babel/plugin-transform-react-constant-elements@npm:7.18.12" dependencies: "@babel/helper-plugin-utils": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: bbdc4bc38317e62bb729d6d2b48bfac4cca52cb476a1a537a6fe693610852a6f2c3b3f616e1c73f17fb4b0dae551b1c96f898b7867a02ff2fbe3e858a346c767 + checksum: d83fbc65e8eb32b64fc83c64436d85dba44e2c358b906e5eb3709d22b05bdeada2f92af1e85e26fda88bb8d688b06546b9a98fee17c82563ae00f19827ba0c79 languageName: node linkType: hard -"@babel/plugin-transform-react-display-name@npm:^7.0.0": - version: 7.16.7 - resolution: "@babel/plugin-transform-react-display-name@npm:7.16.7" - dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 483154413671ab0a25ae37520b7cf5bfab0958c484a3707c6799b1f1436d1e51481bcc03fbfcdbf90bf6b46818d931ae35e515141d8354c3287351b4467376ba - languageName: node - linkType: hard - -"@babel/plugin-transform-react-display-name@npm:^7.18.6": +"@babel/plugin-transform-react-display-name@npm:^7.0.0, @babel/plugin-transform-react-display-name@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-react-display-name@npm:7.18.6" dependencies: @@ -2326,33 +1655,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx@npm:^7.0.0": - version: 7.16.7 - resolution: "@babel/plugin-transform-react-jsx@npm:7.16.7" - dependencies: - "@babel/helper-annotate-as-pure": ^7.16.7 - "@babel/helper-module-imports": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/plugin-syntax-jsx": ^7.16.7 - "@babel/types": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 0e82346d7c99b4467946d535a8c626a988e5670f65a15dee8520ce9cf4f0147c99decc1cbb4bd352083eaafd259ee3e4299854cac6304a83666d488edf4e58f6 - languageName: node - linkType: hard - -"@babel/plugin-transform-react-jsx@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-react-jsx@npm:7.18.6" +"@babel/plugin-transform-react-jsx@npm:^7.0.0, @babel/plugin-transform-react-jsx@npm:^7.18.6": + version: 7.19.0 + resolution: "@babel/plugin-transform-react-jsx@npm:7.19.0" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 "@babel/helper-module-imports": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.19.0 "@babel/plugin-syntax-jsx": ^7.18.6 - "@babel/types": ^7.18.6 + "@babel/types": ^7.19.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 46129eaf1ab7a7a73e3e8c9d9859b630f5b381c5e19fb1559e2db7b943a7825b6715ad950623fb03fe7bd31ed618ce1d0bd539b13fa030a50c39d5a873a5ba00 + checksum: d7d6f0b8f24b1f6b7cf8062c4e91c59af82489a993e51859bd49c2d62a2d2b77fd40b02a9a1d0e6d874cf4ce56a05fa3564b964587d00c94ebc62593524052ec languageName: node linkType: hard @@ -2391,18 +1705,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.0.0": - version: 7.16.7 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.16.7" - dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: ca381ecf8f48696512172deca40af46b1f64e3497186fdc2c9009286d8f06b468c4d61cdc392dc8b0c165298117dda67be9e2ff0e99d7691b0503f1240d4c62b - languageName: node - linkType: hard - -"@babel/plugin-transform-shorthand-properties@npm:^7.18.6": +"@babel/plugin-transform-shorthand-properties@npm:^7.0.0, @babel/plugin-transform-shorthand-properties@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-shorthand-properties@npm:7.18.6" dependencies: @@ -2413,27 +1716,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.0.0": - version: 7.16.7 - resolution: "@babel/plugin-transform-spread@npm:7.16.7" +"@babel/plugin-transform-spread@npm:^7.0.0, @babel/plugin-transform-spread@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/plugin-transform-spread@npm:7.19.0" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/helper-skip-transparent-expression-wrappers": ^7.16.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 6e961af1a70586bb72dd85e8296cee857c5dadd73225fccd0fe261c0d98652a82d69c65f3e9dc31ce019a12e9677262678479b96bd2d9140ddf6514618362828 - languageName: node - linkType: hard - -"@babel/plugin-transform-spread@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-spread@npm:7.18.9" - dependencies: - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-plugin-utils": ^7.19.0 "@babel/helper-skip-transparent-expression-wrappers": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 59489dd6212bd21debdf77746d9fa02dfe36f7062dc08742b8841d04312a26ea37bc0d71c71a6e37c3ab81dce744faa7f23fa94b0915593458f6adc35c087766 + checksum: e73a4deb095999185e70b524d0ff4e35df50fcda58299e700a6149a15bbc1a9b369ef1cef384e15a54b3c3ce316cc0f054dbf249dcd0d1ca59f4281dd4df9718 languageName: node linkType: hard @@ -2448,18 +1739,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.0.0": - version: 7.16.7 - resolution: "@babel/plugin-transform-template-literals@npm:7.16.7" - dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: b55a519dd8b957247ebad3cab21918af5adca4f6e6c87819501cfe3d4d4bccda25bc296c7dfc8a30909b4ad905902aeb9d55ad955cb9f5cbc74b42dab32baa18 - languageName: node - linkType: hard - -"@babel/plugin-transform-template-literals@npm:^7.18.9": +"@babel/plugin-transform-template-literals@npm:^7.0.0, @babel/plugin-transform-template-literals@npm:^7.18.9": version: 7.18.9 resolution: "@babel/plugin-transform-template-literals@npm:7.18.9" dependencies: @@ -2481,40 +1761,27 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.16.7": - version: 7.16.8 - resolution: "@babel/plugin-transform-typescript@npm:7.16.8" - dependencies: - "@babel/helper-create-class-features-plugin": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/plugin-syntax-typescript": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a76d0afcbd550208cf2e7cdedb4f2d3ca3fa287640a4858a5ee0a28270b784d7d20d5a51b5997dc84514e066a5ebef9e0a0f74ed9fffae09e73984786dd08036 - languageName: node - linkType: hard - "@babel/plugin-transform-typescript@npm:^7.18.6": - version: 7.18.8 - resolution: "@babel/plugin-transform-typescript@npm:7.18.8" + version: 7.19.1 + resolution: "@babel/plugin-transform-typescript@npm:7.19.1" dependencies: - "@babel/helper-create-class-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-create-class-features-plugin": ^7.19.0 + "@babel/helper-plugin-utils": ^7.19.0 "@babel/plugin-syntax-typescript": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 627211f1658870274fcabf38a71bb08ae219e3ac672423083574fabe2c857f28d39243cb7279adada8468c912a7beebc0622770ed66885a1e33b84ccc8bfd7df + checksum: 434752f9cfb3cfe5dc0a3c8118b404bb7340b665c01cf6b817a9d6dafa10ca128fccecf4c507286fb00a92b89bcabeb8256e67c18aef5db9fdc4eb8a71881d70 languageName: node linkType: hard -"@babel/plugin-transform-unicode-escapes@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.18.6" +"@babel/plugin-transform-unicode-escapes@npm:^7.18.10": + version: 7.18.10 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.18.10" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 297a03706723164a777263f76a8d89bccfb1d3fbc5e1075079dfd84372a5416d579da7d44c650abf935a1150a995bfce0e61966447b657f958e51c4ea45b72dc + checksum: f5baca55cb3c11bc08ec589f5f522d85c1ab509b4d11492437e45027d64ae0b22f0907bd1381e8d7f2a436384bb1f9ad89d19277314242c5c2671a0f91d0f9cd languageName: node linkType: hard @@ -2531,16 +1798,16 @@ __metadata: linkType: hard "@babel/preset-env@npm:^7.18.2": - version: 7.18.9 - resolution: "@babel/preset-env@npm:7.18.9" + version: 7.19.1 + resolution: "@babel/preset-env@npm:7.19.1" dependencies: - "@babel/compat-data": ^7.18.8 - "@babel/helper-compilation-targets": ^7.18.9 - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/compat-data": ^7.19.1 + "@babel/helper-compilation-targets": ^7.19.1 + "@babel/helper-plugin-utils": ^7.19.0 "@babel/helper-validator-option": ^7.18.6 "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.18.6 "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.18.9 - "@babel/plugin-proposal-async-generator-functions": ^7.18.6 + "@babel/plugin-proposal-async-generator-functions": ^7.19.1 "@babel/plugin-proposal-class-properties": ^7.18.6 "@babel/plugin-proposal-class-static-block": ^7.18.6 "@babel/plugin-proposal-dynamic-import": ^7.18.6 @@ -2574,9 +1841,9 @@ __metadata: "@babel/plugin-transform-async-to-generator": ^7.18.6 "@babel/plugin-transform-block-scoped-functions": ^7.18.6 "@babel/plugin-transform-block-scoping": ^7.18.9 - "@babel/plugin-transform-classes": ^7.18.9 + "@babel/plugin-transform-classes": ^7.19.0 "@babel/plugin-transform-computed-properties": ^7.18.9 - "@babel/plugin-transform-destructuring": ^7.18.9 + "@babel/plugin-transform-destructuring": ^7.18.13 "@babel/plugin-transform-dotall-regex": ^7.18.6 "@babel/plugin-transform-duplicate-keys": ^7.18.9 "@babel/plugin-transform-exponentiation-operator": ^7.18.6 @@ -2586,9 +1853,9 @@ __metadata: "@babel/plugin-transform-member-expression-literals": ^7.18.6 "@babel/plugin-transform-modules-amd": ^7.18.6 "@babel/plugin-transform-modules-commonjs": ^7.18.6 - "@babel/plugin-transform-modules-systemjs": ^7.18.9 + "@babel/plugin-transform-modules-systemjs": ^7.19.0 "@babel/plugin-transform-modules-umd": ^7.18.6 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.18.6 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.19.1 "@babel/plugin-transform-new-target": ^7.18.6 "@babel/plugin-transform-object-super": ^7.18.6 "@babel/plugin-transform-parameters": ^7.18.8 @@ -2596,35 +1863,35 @@ __metadata: "@babel/plugin-transform-regenerator": ^7.18.6 "@babel/plugin-transform-reserved-words": ^7.18.6 "@babel/plugin-transform-shorthand-properties": ^7.18.6 - "@babel/plugin-transform-spread": ^7.18.9 + "@babel/plugin-transform-spread": ^7.19.0 "@babel/plugin-transform-sticky-regex": ^7.18.6 "@babel/plugin-transform-template-literals": ^7.18.9 "@babel/plugin-transform-typeof-symbol": ^7.18.9 - "@babel/plugin-transform-unicode-escapes": ^7.18.6 + "@babel/plugin-transform-unicode-escapes": ^7.18.10 "@babel/plugin-transform-unicode-regex": ^7.18.6 "@babel/preset-modules": ^0.1.5 - "@babel/types": ^7.18.9 - babel-plugin-polyfill-corejs2: ^0.3.1 - babel-plugin-polyfill-corejs3: ^0.5.2 - babel-plugin-polyfill-regenerator: ^0.3.1 - core-js-compat: ^3.22.1 + "@babel/types": ^7.19.0 + babel-plugin-polyfill-corejs2: ^0.3.3 + babel-plugin-polyfill-corejs3: ^0.6.0 + babel-plugin-polyfill-regenerator: ^0.4.1 + core-js-compat: ^3.25.1 semver: ^6.3.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 311002b9255d1aa261afe712ab73a93687652437804e2f44e6cc55438f8b199463f53bb2b8e0912b0034f208a42eee664a9e126a6061ca504a792ede97dd027e + checksum: 3fcd4f3e768b8b0c9e8f9fb2b23d694d838d3cc936c783aaa9c436b863ae24811059b6ffed80e2ac7d54e7d2c18b0a190f4de05298cf461d27b2817b617ea71f languageName: node linkType: hard "@babel/preset-flow@npm:^7.13.13": - version: 7.16.7 - resolution: "@babel/preset-flow@npm:7.16.7" + version: 7.18.6 + resolution: "@babel/preset-flow@npm:7.18.6" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/helper-validator-option": ^7.16.7 - "@babel/plugin-transform-flow-strip-types": ^7.16.7 + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-validator-option": ^7.18.6 + "@babel/plugin-transform-flow-strip-types": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b73c743a6bdfb51fe907adbc425a82469145ea15f32b43096804e28ba30921c4ac3199f86e11d1cefbce95c3a5404aaf3534152f5a12358c57303c05dfc51b4f + checksum: 9100d4eab3402e6601e361a5b235e46d90cfd389c12db19e2a071e1082ca2a00c04bd47eb185ce68d8979e7c8f3e548cd5d61b86dcd701135468fb929c3aecb6 languageName: node linkType: hard @@ -2659,20 +1926,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-typescript@npm:^7.13.0": - version: 7.16.7 - resolution: "@babel/preset-typescript@npm:7.16.7" - dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/helper-validator-option": ^7.16.7 - "@babel/plugin-transform-typescript": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 44e2f3fa302befe0dc50a01b79e5aa8c27a9c7047c46df665beae97201173030646ddf7c83d7d3ed3724fc38151745b11693e7b4502c81c4cd67781ff5677da5 - languageName: node - linkType: hard - -"@babel/preset-typescript@npm:^7.17.12": +"@babel/preset-typescript@npm:^7.13.0, @babel/preset-typescript@npm:^7.17.12": version: 7.18.6 resolution: "@babel/preset-typescript@npm:7.18.6" dependencies: @@ -2686,181 +1940,76 @@ __metadata: linkType: hard "@babel/register@npm:^7.13.16": - version: 7.16.9 - resolution: "@babel/register@npm:7.16.9" + version: 7.18.9 + resolution: "@babel/register@npm:7.18.9" dependencies: clone-deep: ^4.0.1 find-cache-dir: ^2.0.0 make-dir: ^2.1.0 - pirates: ^4.0.0 + pirates: ^4.0.5 source-map-support: ^0.5.16 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: bbe9552c9e5816aec2bf7d899b43f95fd649714f38d14de48f42c895cc9ef65708f1359f393c235d5f02224c115544aeeb174495682a07734cdf9484ed2e6175 + checksum: 4aeaff97e061a397f632659082ba86c539ef8194697b236d991c10d1c2ea8f73213d3b5b3b2c24625951a1ef726b7a7d2e70f70ffcb37f79ef0c1a745eebef21 languageName: node linkType: hard -"@babel/runtime-corejs3@npm:^7.10.2, @babel/runtime-corejs3@npm:^7.11.2": - version: 7.17.2 - resolution: "@babel/runtime-corejs3@npm:7.17.2" +"@babel/runtime-corejs3@npm:^7.10.2, @babel/runtime-corejs3@npm:^7.11.2, @babel/runtime-corejs3@npm:^7.18.9": + version: 7.19.1 + resolution: "@babel/runtime-corejs3@npm:7.19.1" dependencies: - core-js-pure: ^3.20.2 + core-js-pure: ^3.25.1 regenerator-runtime: ^0.13.4 - checksum: fc7ba261913c66347434051c74b00f320fb5fda7c72f4a4378045b39e31a39420bba2b2cf3fd59367834b43689215b12cb0587a599c95e9619562e1ebec071a7 + checksum: 38a1e8fcd2ba1f76c951259c98a5a11052123923adbf30ec8b2fec202dbbe38c6db61658ef9398e00c30f799e2e54ea036e56a09f43229261918bf5ec1b7d03a languageName: node linkType: hard -"@babel/runtime-corejs3@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/runtime-corejs3@npm:7.18.9" - dependencies: - core-js-pure: ^3.20.2 - regenerator-runtime: ^0.13.4 - checksum: 249158b660ac996fa4f4b0d1ab5810db060af40fac4d0bb5da23f55539a151313ae254aa64afc2ab7000d95167824e21a689f74bc24b36fd0f5ca030d522133d - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.6, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": - version: 7.17.7 - resolution: "@babel/runtime@npm:7.17.7" +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.10.4, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.6, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.18.9, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": + version: 7.19.0 + resolution: "@babel/runtime@npm:7.19.0" dependencies: regenerator-runtime: ^0.13.4 - checksum: d9ec9e2c5ebbf503ac865ebd70d0216443d0fa8380bab572aa44ccf8fafde8b8b9846badfdbba3572f79075c9a196845aa3f42a435fd34ec832acd2bc1467d37 + checksum: fa69c351bb05e1db3ceb9a02fdcf620c234180af68cdda02152d3561015f6d55277265d3109815992f96d910f3db709458cae4f8df1c3def66f32e0867d82294 languageName: node linkType: hard -"@babel/runtime@npm:^7.10.4, @babel/runtime@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/runtime@npm:7.18.9" - dependencies: - regenerator-runtime: ^0.13.4 - checksum: 36dd736baba7164e82b3cc9d43e081f0cb2d05ff867ad39cac515d99546cee75b7f782018b02a3dcf5f2ef3d27f319faa68965fdfec49d4912c60c6002353a2e - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/runtime@npm:7.18.6" - dependencies: - regenerator-runtime: ^0.13.4 - checksum: 8b707b64ae0524db617d0c49933b258b96376a38307dc0be8fb42db5697608bcc1eba459acce541e376cff5ed5c5287d24db5780bd776b7c75ba2c2e26ff8a2c - languageName: node - linkType: hard - -"@babel/template@npm:^7.16.7, @babel/template@npm:^7.3.3": - version: 7.16.7 - resolution: "@babel/template@npm:7.16.7" - dependencies: - "@babel/code-frame": ^7.16.7 - "@babel/parser": ^7.16.7 - "@babel/types": ^7.16.7 - checksum: 10cd112e89276e00f8b11b55a51c8b2f1262c318283a980f4d6cdb0286dc05734b9aaeeb9f3ad3311900b09bc913e02343fcaa9d4a4f413964aaab04eb84ac4a - languageName: node - linkType: hard - -"@babel/template@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/template@npm:7.18.6" +"@babel/template@npm:^7.18.10, @babel/template@npm:^7.3.3": + version: 7.18.10 + resolution: "@babel/template@npm:7.18.10" dependencies: "@babel/code-frame": ^7.18.6 - "@babel/parser": ^7.18.6 - "@babel/types": ^7.18.6 - checksum: cb02ed804b7b1938dbecef4e01562013b80681843dd391933315b3dd9880820def3b5b1bff6320d6e4c6a1d63d1d5799630d658ec6b0369c5505e7e4029c38fb + "@babel/parser": ^7.18.10 + "@babel/types": ^7.18.10 + checksum: 93a6aa094af5f355a72bd55f67fa1828a046c70e46f01b1606e6118fa1802b6df535ca06be83cc5a5e834022be95c7b714f0a268b5f20af984465a71e28f1473 languageName: node linkType: hard -"@babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.16.10, @babel/traverse@npm:^7.16.7, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.4.5, @babel/traverse@npm:^7.7.2": - version: 7.16.10 - resolution: "@babel/traverse@npm:7.16.10" - dependencies: - "@babel/code-frame": ^7.16.7 - "@babel/generator": ^7.16.8 - "@babel/helper-environment-visitor": ^7.16.7 - "@babel/helper-function-name": ^7.16.7 - "@babel/helper-hoist-variables": ^7.16.7 - "@babel/helper-split-export-declaration": ^7.16.7 - "@babel/parser": ^7.16.10 - "@babel/types": ^7.16.8 - debug: ^4.1.0 - globals: ^11.1.0 - checksum: 58f52314f8a02157cd3004712e703e6b22dff57cee4bc1ab1954c511c6f885fd7763ea68d2d5f006891bc7b77b1f2e9c8c7cb0354f580c8343d5559ed971d087 - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.17.3": - version: 7.17.3 - resolution: "@babel/traverse@npm:7.17.3" - dependencies: - "@babel/code-frame": ^7.16.7 - "@babel/generator": ^7.17.3 - "@babel/helper-environment-visitor": ^7.16.7 - "@babel/helper-function-name": ^7.16.7 - "@babel/helper-hoist-variables": ^7.16.7 - "@babel/helper-split-export-declaration": ^7.16.7 - "@babel/parser": ^7.17.3 - "@babel/types": ^7.17.0 - debug: ^4.1.0 - globals: ^11.1.0 - checksum: 780d7ecf711758174989794891af08d378f81febdb8932056c0d9979524bf0298e28f8e7708a872d7781151506c28f56c85c63ea3f1f654662c2fcb8a3eb9fdc - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/traverse@npm:7.18.9" +"@babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.19.0, @babel/traverse@npm:^7.19.1, @babel/traverse@npm:^7.4.5, @babel/traverse@npm:^7.7.2": + version: 7.19.1 + resolution: "@babel/traverse@npm:7.19.1" dependencies: "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.18.9 + "@babel/generator": ^7.19.0 "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 "@babel/helper-hoist-variables": ^7.18.6 "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.18.9 - "@babel/types": ^7.18.9 + "@babel/parser": ^7.19.1 + "@babel/types": ^7.19.0 debug: ^4.1.0 globals: ^11.1.0 - checksum: 0445a51952ea1664a5719d9b1f8bf04be6f1933bcf54915fecc544c844a5dad2ac56f3b555723bbf741ef680d7fd64f6a5d69cfd08d518a4089c79a734270162 + checksum: 9d782b5089ebc989e54c2406814ed1206cb745ed2734e6602dee3e23d4b6ebbb703ff86e536276630f8de83fda6cde99f0634e3c3d847ddb40572d0303ba8800 languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.16.0, @babel/types@npm:^7.16.7, @babel/types@npm:^7.16.8, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": - version: 7.16.8 - resolution: "@babel/types@npm:7.16.8" - dependencies: - "@babel/helper-validator-identifier": ^7.16.7 - to-fast-properties: ^2.0.0 - checksum: 4f6a187b2924df70e21d6e6c0822f91b1b936fe060bc92bb477b93bd8a712c88fe41a73f85c0ec53b033353374fe33e773b04ffc340ad36afd8f647dd05c4ee1 - languageName: node - linkType: hard - -"@babel/types@npm:^7.17.0": - version: 7.17.0 - resolution: "@babel/types@npm:7.17.0" - dependencies: - "@babel/helper-validator-identifier": ^7.16.7 - to-fast-properties: ^2.0.0 - checksum: 12e5a287986fe557188e87b2c5202223f1dc83d9239a196ab936fdb9f8c1eb0be717ff19f934b5fad4e29a75586d5798f74bed209bccea1c20376b9952056f0e - languageName: node - linkType: hard - -"@babel/types@npm:^7.18.4, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/types@npm:7.18.9" - dependencies: - "@babel/helper-validator-identifier": ^7.18.6 - to-fast-properties: ^2.0.0 - checksum: f0e0147267895fd8a5b82133e711ce7ce99941f3ce63647e0e3b00656a7afe48a8aa48edbae27543b701794d2b29a562a08f51f88f41df401abce7c3acc5e13a - languageName: node - linkType: hard - -"@babel/types@npm:^7.8.3": - version: 7.18.13 - resolution: "@babel/types@npm:7.18.13" +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.16.8, @babel/types@npm:^7.18.10, @babel/types@npm:^7.18.4, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.19.0, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.19.0 + resolution: "@babel/types@npm:7.19.0" dependencies: "@babel/helper-string-parser": ^7.18.10 "@babel/helper-validator-identifier": ^7.18.6 to-fast-properties: ^2.0.0 - checksum: abc3ad1f3b6864df0ea0e778bcdf7d2c5ee2293811192962d50e8a8c05c1aeec90a48275f53b2a45aad882ed8bef9477ae1f8e70ac1d44d039e14930d1388dcc + checksum: 9b346715a68aeede70ba9c685a144b0b26c53bcd595d448e24c8fa8df4d5956a5712e56ebadb7c85dcc32f218ee42788e37b93d50d3295c992072224cb3ef3fe languageName: node linkType: hard @@ -4097,6 +3246,35 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-azure-backend@^0.0.0, @backstage/plugin-azure-backend@workspace:plugins/azure-backend": + version: 0.0.0-use.local + resolution: "@backstage/plugin-azure-backend@workspace:plugins/azure-backend" + dependencies: + "@azure/arm-resourcegraph": ^4.2.1 + "@azure/identity": ^2.1.0 + "@backstage/backend-common": ^0.15.1-next.2 + "@backstage/cli": ^0.19.0-next.2 + "@backstage/config": ^1.0.2-next.0 + "@backstage/plugin-azure-common": ^0.0.0 + "@types/express": "*" + "@types/supertest": ^2.0.8 + express: ^4.17.1 + express-promise-router: ^4.1.0 + msw: ^0.44.0 + node-fetch: ^2.6.7 + winston: ^3.2.1 + yn: ^4.0.0 + languageName: unknown + linkType: soft + +"@backstage/plugin-azure-common@^0.0.0, @backstage/plugin-azure-common@workspace:plugins/azure-common": + version: 0.0.0-use.local + resolution: "@backstage/plugin-azure-common@workspace:plugins/azure-common" + dependencies: + "@backstage/cli": ^0.19.0-next.2 + languageName: unknown + linkType: soft + "@backstage/plugin-azure-devops-backend@^0.3.15-next.2, @backstage/plugin-azure-devops-backend@workspace:plugins/azure-devops-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-azure-devops-backend@workspace:plugins/azure-devops-backend" @@ -4160,38 +3338,9 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-azure-functions-backend@^0.0.0, @backstage/plugin-azure-functions-backend@workspace:plugins/azure-functions-backend": +"@backstage/plugin-azure@^0.0.0, @backstage/plugin-azure@workspace:plugins/azure": version: 0.0.0-use.local - resolution: "@backstage/plugin-azure-functions-backend@workspace:plugins/azure-functions-backend" - dependencies: - "@azure/arm-resourcegraph": ^4.2.1 - "@azure/identity": ^2.1.0 - "@backstage/backend-common": ^0.15.1-next.2 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/config": ^1.0.2-next.0 - "@backstage/plugin-azure-functions-common": ^0.0.0 - "@types/express": "*" - "@types/supertest": ^2.0.8 - express: ^4.17.1 - express-promise-router: ^4.1.0 - msw: ^0.44.0 - node-fetch: ^2.6.7 - winston: ^3.2.1 - yn: ^4.0.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-azure-functions-common@^0.0.0, @backstage/plugin-azure-functions-common@workspace:plugins/azure-functions-common": - version: 0.0.0-use.local - resolution: "@backstage/plugin-azure-functions-common@workspace:plugins/azure-functions-common" - dependencies: - "@backstage/cli": ^0.19.0-next.2 - languageName: unknown - linkType: soft - -"@backstage/plugin-azure-functions@^0.0.0, @backstage/plugin-azure-functions@workspace:plugins/azure-functions": - version: 0.0.0-use.local - resolution: "@backstage/plugin-azure-functions@workspace:plugins/azure-functions" + resolution: "@backstage/plugin-azure@workspace:plugins/azure" dependencies: "@backstage/catalog-model": ^1.1.1-next.0 "@backstage/cli": ^0.19.0-next.2 @@ -4199,7 +3348,7 @@ __metadata: "@backstage/core-components": ^0.11.1-next.2 "@backstage/core-plugin-api": ^1.0.6-next.2 "@backstage/dev-utils": ^1.0.6-next.1 - "@backstage/plugin-azure-functions-common": ^0.0.0 + "@backstage/plugin-azure-common": ^0.0.0 "@backstage/plugin-catalog-react": ^1.1.4-next.1 "@backstage/test-utils": ^1.2.0-next.2 "@backstage/theme": ^0.2.16 @@ -7867,8 +7016,8 @@ __metadata: linkType: hard "@codemirror/autocomplete@npm:^6.0.0": - version: 6.0.2 - resolution: "@codemirror/autocomplete@npm:6.0.2" + version: 6.2.0 + resolution: "@codemirror/autocomplete@npm:6.2.0" dependencies: "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 @@ -7879,19 +7028,19 @@ __metadata: "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 "@lezer/common": ^1.0.0 - checksum: f843572333ae8d0ac772952d3f261e53ebed16a4914ec7089d0de5496089daa24f45c3c4609e1817328a081447bbe0bc40aa82d8c42f29071ad6179020a59dac + checksum: fc20334d54b8e59abb48f0a813b0c409804a87eb918b6e46aa098fcb7125a7e1902cfa1628d4dc92ee3a535b3bebce4f8ce778fbc7b339cb796ca05b10150b37 languageName: node linkType: hard -"@codemirror/commands@npm:^6.0.0": - version: 6.0.0 - resolution: "@codemirror/commands@npm:6.0.0" +"@codemirror/commands@npm:^6.0.0, @codemirror/commands@npm:^6.1.0": + version: 6.1.0 + resolution: "@codemirror/commands@npm:6.1.0" dependencies: "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 "@lezer/common": ^1.0.0 - checksum: 5b3bac420635316f9fb324e38b76a281a4d1425f80e6a5e66a34cf1508414e5d182f494e3c30936b27f86aa67403c1af4137bca5df0f0e53b2a4baa49a25caf2 + checksum: 0b95ed5b657590adda3171ef8cb1b662078ed1c02109b414bbd71503ae8cac3d5d56a56a159020178a4e8f1e7168bd3c5f5782eb2d90a6e25f067fc8c39dbc87 languageName: node linkType: hard @@ -7930,43 +7079,43 @@ __metadata: linkType: hard "@codemirror/search@npm:^6.0.0": - version: 6.0.0 - resolution: "@codemirror/search@npm:6.0.0" + version: 6.2.0 + resolution: "@codemirror/search@npm:6.2.0" dependencies: "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 crelt: ^1.0.5 - checksum: e40b55f1ff1287a8b5b321f633bff638c9d4a411ada524b36b275344a13f9f4a66b7c5176d8a142a6a7761d1591d18dc535c88897f30b9885508a2890162fc72 + checksum: 1d25a847d3ebde3b3e8ee796c9a874c5e77622cebf361887f4ce7c9b9c1de196c9e74b488602032b5a3eeff31d3c983ea67e7fdba8b0b4775b40abb066e58d63 languageName: node linkType: hard -"@codemirror/state@npm:^6.0.0": - version: 6.0.1 - resolution: "@codemirror/state@npm:6.0.1" - checksum: fcb5aa5e1ce455ed1261616beb6cdb9e855f9cf11618a1ef7f61142622a0aba4551605356d381d2fa96f021f932b71323808369bf8edadfa69d745252b7e6ccd +"@codemirror/state@npm:^6.0.0, @codemirror/state@npm:^6.1.1": + version: 6.1.1 + resolution: "@codemirror/state@npm:6.1.1" + checksum: 26b767af3a3385479d9bb6a31b5d4fb7d2485d4f502c3056aa3117c12ba0b4e80bbbf358d81e81a03d147e404b7ef65cc1449058b2f869f698882d1969b74996 languageName: node linkType: hard "@codemirror/theme-one-dark@npm:^6.0.0": - version: 6.0.0 - resolution: "@codemirror/theme-one-dark@npm:6.0.0" + version: 6.1.0 + resolution: "@codemirror/theme-one-dark@npm:6.1.0" dependencies: "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 "@lezer/highlight": ^1.0.0 - checksum: 916f23e3ce0e003224e4bcee209ebcae57eb620c942adb180d7e0a1a0f2091bb042723d07cbd855c7016cb86fae66aa374de115001dcbe3d033f86c1624c3f9b + checksum: 7454742006f0ea23ed36b1c8e232d55bd1cdf6cd3c9b5ad7f7212a4b5fe7907eecaeb1d908fed2022c2ca5d667176c93e9f071c939d54449cfe740dc028a16d8 languageName: node linkType: hard "@codemirror/view@npm:^6.0.0": - version: 6.2.2 - resolution: "@codemirror/view@npm:6.2.2" + version: 6.2.4 + resolution: "@codemirror/view@npm:6.2.4" dependencies: "@codemirror/state": ^6.0.0 style-mod: ^4.0.0 w3c-keyname: ^2.2.4 - checksum: 6983c51362367d3885961fa233d302e75dfb103cd83ec78e6a044c2420e61466b5e94cfb73a9e840b04765577e8bbb269eb1ad45fa21abd28efda4ae780791db + checksum: 5fd3dfe92f00c91e3f51a9881decdbc5ffbf3399d8d92258ee37b2b6ceab01053bdd527e15a0f87256c82e11e7c46a70d9fca463035c25ae78a3a3718a818297 languageName: node linkType: hard @@ -8023,13 +7172,13 @@ __metadata: linkType: hard "@dabh/diagnostics@npm:^2.0.2": - version: 2.0.2 - resolution: "@dabh/diagnostics@npm:2.0.2" + version: 2.0.3 + resolution: "@dabh/diagnostics@npm:2.0.3" dependencies: colorspace: 1.1.x enabled: 2.0.x kuler: ^2.0.0 - checksum: 4d95cc31249a840b6cc3dba3dc4345a9295265413456068a0d07b69fa0ec6a5a5bc2c39e56ec04c6509ac1f4d9c17fc80baaaddd5caa1abcdd3aaeffe2b63cec + checksum: 4879600c55c8315a0fb85fbb19057bad1adc08f0a080a8cb4e2b63f723c379bfc4283b68123a2b078d367b327dd8df12fcb27464efe791addc0a48b9df6d79a1 languageName: node linkType: hard @@ -8112,18 +7261,18 @@ __metadata: linkType: hard "@emotion/is-prop-valid@npm:^1.1.0": - version: 1.1.2 - resolution: "@emotion/is-prop-valid@npm:1.1.2" + version: 1.2.0 + resolution: "@emotion/is-prop-valid@npm:1.2.0" dependencies: - "@emotion/memoize": ^0.7.4 - checksum: 58b1f2d429a589f8f5bc2c33a8732cbb7bbcb17131a103511ef9a94ac754d7eeb53d627f947da480cd977f9d419fd92e244991680292f3287204159652745707 + "@emotion/memoize": ^0.8.0 + checksum: cc7a19850a4c5b24f1514665289442c8c641709e6f7711067ad550e05df331da0692a16148e85eda6f47e31b3261b64d74c5e25194d053223be16231f969d633 languageName: node linkType: hard -"@emotion/memoize@npm:^0.7.4": - version: 0.7.5 - resolution: "@emotion/memoize@npm:0.7.5" - checksum: 83da8d4a7649a92c72f960817692bc6be13cc13e107b9f7e878d63766525ed4402881bfeb3cda61145c050281e7e260f114a0a2870515527346f2ef896b915b3 +"@emotion/memoize@npm:^0.8.0": + version: 0.8.0 + resolution: "@emotion/memoize@npm:0.8.0" + checksum: c87bb110b829edd8e1c13b90a6bc37cebc39af29c7599a1e66a48e06f9bec43e8e53495ba86278cc52e7589549492c8dfdc81d19f4fdec0cee6ba13d2ad2c928 languageName: node linkType: hard @@ -8148,9 +7297,16 @@ __metadata: languageName: node linkType: hard -"@eslint/eslintrc@npm:^1.3.1": - version: 1.3.1 - resolution: "@eslint/eslintrc@npm:1.3.1" +"@esbuild/linux-loong64@npm:0.15.7": + version: 0.15.7 + resolution: "@esbuild/linux-loong64@npm:0.15.7" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^1.3.2": + version: 1.3.2 + resolution: "@eslint/eslintrc@npm:1.3.2" dependencies: ajv: ^6.12.4 debug: ^4.3.2 @@ -8161,7 +7317,7 @@ __metadata: js-yaml: ^4.1.0 minimatch: ^3.1.2 strip-json-comments: ^3.1.1 - checksum: 9844dcc58a44399649926d5a17a2d53d529b80d3e8c3e9d0964ae198bac77ee6bb1cf44940f30cd9c2e300f7568ec82500be42ace6cacefb08aebf9905fe208e + checksum: 2074dca47d7e1c5c6323ff353f690f4b25d3ab53fe7d27337e2592d37a894cf60ca0e85ca66b50ff2db0bc7e630cc1e9c7347d65bb185b61416565584c38999c languageName: node linkType: hard @@ -8174,14 +7330,7 @@ __metadata: languageName: node linkType: hard -"@gar/promisify@npm:^1.0.1": - version: 1.1.2 - resolution: "@gar/promisify@npm:1.1.2" - checksum: d05081e0887a49c178b75ee3067bd6ee086f73c154d121b854fb2e044e8a89cb1cbb6de3a0dd93a519b80f0531fda68b099dd7256205f7fbb3490324342f2217 - languageName: node - linkType: hard - -"@gar/promisify@npm:^1.1.3": +"@gar/promisify@npm:^1.0.1, @gar/promisify@npm:^1.1.3": version: 1.1.3 resolution: "@gar/promisify@npm:1.1.3" checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1 @@ -8248,14 +7397,14 @@ __metadata: linkType: hard "@google-cloud/firestore@npm:^6.0.0": - version: 6.0.0 - resolution: "@google-cloud/firestore@npm:6.0.0" + version: 6.2.0 + resolution: "@google-cloud/firestore@npm:6.2.0" dependencies: fast-deep-equal: ^3.1.1 functional-red-black-tree: ^1.0.1 - google-gax: ^3.0.1 + google-gax: ^3.5.1 protobufjs: ^7.0.0 - checksum: 4b51ed6da004fe9c699cecde3e663f4b6c94937fdf4dd01c27a22df9845bac202d9869d39d8b4a3b9bd38637762754f925b32e4ea4f8ffb755fcf6528988aadf + checksum: fce0d729d63b5722df0dcedb78c8b494b2876de128128de8c8dc7d9add1ff7e00a8df1d04e7e2210a71331e623877e67149593341f714d2b0f92b6fef73dfcbd languageName: node linkType: hard @@ -8277,15 +7426,15 @@ __metadata: linkType: hard "@google-cloud/promisify@npm:^3.0.0": - version: 3.0.0 - resolution: "@google-cloud/promisify@npm:3.0.0" - checksum: 5339e36bd5bc7957ae72b959e21c5d50fe028ad8eae9affb6e8e172aab715f3bf6a7b3c01720d6b4b67ea080d91dd30ac00f0dc88d455620c8bb10df263385a2 + version: 3.0.1 + resolution: "@google-cloud/promisify@npm:3.0.1" + checksum: 44b4de760425d6ea328f6208c46219cfcc44383b4015c67a6b18b55b8fee5b754a11f80ed481a7d779bc471950b2b856dce51e36e8004b0d2f73a93e50d756ce languageName: node linkType: hard "@google-cloud/storage@npm:^6.0.0": - version: 6.4.2 - resolution: "@google-cloud/storage@npm:6.4.2" + version: 6.5.0 + resolution: "@google-cloud/storage@npm:6.5.0" dependencies: "@google-cloud/paginator": ^3.0.7 "@google-cloud/projectify": ^3.0.0 @@ -8305,7 +7454,7 @@ __metadata: retry-request: ^5.0.0 teeny-request: ^8.0.0 uuid: ^8.0.0 - checksum: ebd8bf46675f21b429915d9889c56574acc395745126e40f96803334c1e2d8b35a60d22b1f0ecf9db4bb67c373f53e4eeef9406af334cdf9c0ca8461da777ab3 + checksum: b97dc19814e4154ef0920202e79feaf14c3d7de2ea9aa295bc2e2784b3b0ba4e7feabdd4b499d0f2e996accc4fa965b974174bdb60d5f51408967a268bdc5b9f languageName: node linkType: hard @@ -8419,23 +7568,7 @@ __metadata: languageName: node linkType: hard -"@graphql-codegen/plugin-helpers@npm:^2.6.2": - version: 2.6.2 - resolution: "@graphql-codegen/plugin-helpers@npm:2.6.2" - dependencies: - "@graphql-tools/utils": ^8.8.0 - change-case-all: 1.0.14 - common-tags: 1.8.2 - import-from: 4.0.0 - lodash: ~4.17.0 - tslib: ~2.4.0 - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 972b5d6e13d8cdfde5fe3d79b79e7e0af7c3931619a10d48b931e1d101e95694e29fa83d66e25df1427827faf841f5884b5a677bb659a5de08ece95854a25736 - languageName: node - linkType: hard - -"@graphql-codegen/plugin-helpers@npm:^2.7.0": +"@graphql-codegen/plugin-helpers@npm:^2.6.2, @graphql-codegen/plugin-helpers@npm:^2.7.0": version: 2.7.0 resolution: "@graphql-codegen/plugin-helpers@npm:2.7.0" dependencies: @@ -8516,44 +7649,16 @@ __metadata: linkType: hard "@graphql-tools/apollo-engine-loader@npm:^7.3.6": - version: 7.3.6 - resolution: "@graphql-tools/apollo-engine-loader@npm:7.3.6" + version: 7.3.13 + resolution: "@graphql-tools/apollo-engine-loader@npm:7.3.13" dependencies: "@ardatan/sync-fetch": 0.0.1 - "@graphql-tools/utils": 8.9.0 - "@whatwg-node/fetch": ^0.2.4 + "@graphql-tools/utils": 8.12.0 + "@whatwg-node/fetch": ^0.4.0 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: e9711b32fd90d41c97ea8eb6bcc68e5a78374114fdd628ae9f1d4855cc163aecda78d22697c0f6ab556f816a01d27d684bd756ed1b777e7fa42b63200c240b90 - languageName: node - linkType: hard - -"@graphql-tools/batch-execute@npm:8.4.6": - version: 8.4.6 - resolution: "@graphql-tools/batch-execute@npm:8.4.6" - dependencies: - "@graphql-tools/utils": 8.6.9 - dataloader: 2.1.0 - tslib: ~2.3.0 - value-or-promise: 1.0.11 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 613b47b15b6055e2f7e9fa28b8a9751faf30f4e8e30f348446fcacdb300015adeea126436f3f0c9d1798a6df925dff3d99175ec826763c3308db1f08f8db3000 - languageName: node - linkType: hard - -"@graphql-tools/batch-execute@npm:8.5.0": - version: 8.5.0 - resolution: "@graphql-tools/batch-execute@npm:8.5.0" - dependencies: - "@graphql-tools/utils": 8.8.0 - dataloader: 2.1.0 - tslib: ^2.4.0 - value-or-promise: 1.0.11 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 9bb0363f4c0c6e6c919c38965164b1e9241aaa1caf071a6f70e93c62d48e7784eec2b4d87b6df02f9d84bbf63e8c981ade6aa8e86eb69f099aac5fb4484deacd + checksum: a3a11a00e039d382d4af0dc3f90efe1a54ca0686ec88ffd7aeaba7e1e26fbe1d2cf3f70e607d07b5db8974384cc22df6350a9fb0962cc0c5735b256486447bcc languageName: node linkType: hard @@ -8571,51 +7676,32 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/code-file-loader@npm:^7.3.1": - version: 7.3.1 - resolution: "@graphql-tools/code-file-loader@npm:7.3.1" +"@graphql-tools/batch-execute@npm:8.5.6": + version: 8.5.6 + resolution: "@graphql-tools/batch-execute@npm:8.5.6" dependencies: - "@graphql-tools/graphql-tag-pluck": 7.3.1 - "@graphql-tools/utils": 8.9.0 + "@graphql-tools/utils": 8.12.0 + dataloader: 2.1.0 + tslib: ^2.4.0 + value-or-promise: 1.0.11 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: a5afd4adfc70ba3694c194a5bbdaf425d66fedc4b83f0f41347dd1f2bc2c61fc98d4c36badc246aced7baa068de2aab336b6cb4b8b91f006a40060cfc4186959 + languageName: node + linkType: hard + +"@graphql-tools/code-file-loader@npm:^7.3.1": + version: 7.3.6 + resolution: "@graphql-tools/code-file-loader@npm:7.3.6" + dependencies: + "@graphql-tools/graphql-tag-pluck": 7.3.6 + "@graphql-tools/utils": 8.12.0 globby: ^11.0.3 tslib: ^2.4.0 unixify: ^1.0.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 2055d8499fba9e8b8cbea8aa811ae57ab549973eb9a1bb309ff15c8e5fad71c1b425027d5c292b0cc5c3d00d5796721d3a8611a60a7305f5702c2948a105a28e - languageName: node - linkType: hard - -"@graphql-tools/delegate@npm:8.7.7": - version: 8.7.7 - resolution: "@graphql-tools/delegate@npm:8.7.7" - dependencies: - "@graphql-tools/batch-execute": 8.4.6 - "@graphql-tools/schema": 8.3.10 - "@graphql-tools/utils": 8.6.9 - dataloader: 2.1.0 - graphql-executor: 0.0.23 - tslib: ~2.3.0 - value-or-promise: 1.0.11 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 1f06d645c6382eee72bf779949cb631688c20f0a9260c729810a87cf3afae13166ae1ef34aa80de4895c06a0128da910de933d900835aa8a81f39e3ccfa9bbfe - languageName: node - linkType: hard - -"@graphql-tools/delegate@npm:8.8.0": - version: 8.8.0 - resolution: "@graphql-tools/delegate@npm:8.8.0" - dependencies: - "@graphql-tools/batch-execute": 8.5.0 - "@graphql-tools/schema": 8.5.0 - "@graphql-tools/utils": 8.8.0 - dataloader: 2.1.0 - tslib: ~2.4.0 - value-or-promise: 1.0.11 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: ceeb69345556d7d8ddb3d8862ba4d7cf970c962b26ef6ed6835d2915ceb450e92ab1aa4f8dda6efa53f0b27992f8a866aa956eb15086eb8aa381267d011e0ccc + checksum: a63b0c512d1a6b56fc6aebc933a779d8b155aedc060ee37fcdcacd909341024db9546d5f93b49ad676ee348e3303b048c9ef190263f3747e016f818a04c49133 languageName: node linkType: hard @@ -8635,185 +7721,121 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/git-loader@npm:^7.2.1": - version: 7.2.1 - resolution: "@graphql-tools/git-loader@npm:7.2.1" +"@graphql-tools/delegate@npm:9.0.6": + version: 9.0.6 + resolution: "@graphql-tools/delegate@npm:9.0.6" dependencies: - "@graphql-tools/graphql-tag-pluck": 7.3.1 - "@graphql-tools/utils": 8.9.0 + "@graphql-tools/batch-execute": 8.5.6 + "@graphql-tools/schema": 9.0.4 + "@graphql-tools/utils": 8.12.0 + dataloader: 2.1.0 + tslib: ~2.4.0 + value-or-promise: 1.0.11 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 3ddba11137878c51e9ca821710bde23c6ce6cb63fe69eb0544930187f97dbdb18f6f80a6758bb5d42607301489f619143a16d729e1a198bd9dd87cb00a48ebdd + languageName: node + linkType: hard + +"@graphql-tools/git-loader@npm:^7.2.1": + version: 7.2.6 + resolution: "@graphql-tools/git-loader@npm:7.2.6" + dependencies: + "@graphql-tools/graphql-tag-pluck": 7.3.6 + "@graphql-tools/utils": 8.12.0 is-glob: 4.0.3 micromatch: ^4.0.4 tslib: ^2.4.0 unixify: ^1.0.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 28b5d07e52aedd45dcfe49f3a7ca472b7cb083bc1b54b6b905e05691e7c76abbd198ecf8b2875bedc5f2cbadbbb7fe6713087dd0018b63cdfb8e80af3a91922f + checksum: e1e2bd75889b01e71b00b6f7c8af3b9ad38759248cdd1c7ecc82db0484a902fd2176e20488550914d06c540f60dcc271e6c21937297ba6f6c627f5f4231a3920 languageName: node linkType: hard "@graphql-tools/github-loader@npm:^7.3.6": - version: 7.3.6 - resolution: "@graphql-tools/github-loader@npm:7.3.6" + version: 7.3.13 + resolution: "@graphql-tools/github-loader@npm:7.3.13" dependencies: "@ardatan/sync-fetch": 0.0.1 - "@graphql-tools/graphql-tag-pluck": 7.3.1 - "@graphql-tools/utils": 8.9.0 - "@whatwg-node/fetch": ^0.2.4 + "@graphql-tools/graphql-tag-pluck": 7.3.6 + "@graphql-tools/utils": 8.12.0 + "@whatwg-node/fetch": ^0.4.0 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 6198e458d8cfdf3e899c1a5d94842b3b4798706434182d3cf07c2386913fbd3d91c8a0c28a404f4f5ca695b3ee771bf3930bf51a6df0802e699bf8b07c207cec + checksum: 8a76e89df9cd2f9fa2a4cdfe3912e1857e634104152403d51b0395eb65aea656a08c1b44236ab93d6157eae0074d5428b9f3404edb4569b88c5668b6f9006763 languageName: node linkType: hard -"@graphql-tools/graphql-file-loader@npm:^7.3.7": - version: 7.4.0 - resolution: "@graphql-tools/graphql-file-loader@npm:7.4.0" +"@graphql-tools/graphql-file-loader@npm:^7.3.7, @graphql-tools/graphql-file-loader@npm:^7.5.0": + version: 7.5.5 + resolution: "@graphql-tools/graphql-file-loader@npm:7.5.5" dependencies: - "@graphql-tools/import": 6.7.0 - "@graphql-tools/utils": 8.8.0 + "@graphql-tools/import": 6.7.6 + "@graphql-tools/utils": 8.12.0 globby: ^11.0.3 tslib: ^2.4.0 unixify: ^1.0.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: e6221b78dfd15e2a73cd34d039780173dee7464276b9fd78ee3494c5a894f0904cabd27084a531c252c01f84aaba763b7f089bc10b268f0f18a01e266093eec2 + checksum: cb711db9d8f62e678a842d7e3edee6b1a0b6f8654be5a6b9c4483f776a3102843ecdcb173c2f9b530883586b48ac1eb8195aeebc9a42d26d92c2d2fa0b74c972 languageName: node linkType: hard -"@graphql-tools/graphql-file-loader@npm:^7.5.0": - version: 7.5.0 - resolution: "@graphql-tools/graphql-file-loader@npm:7.5.0" - dependencies: - "@graphql-tools/import": 6.7.1 - "@graphql-tools/utils": 8.9.0 - globby: ^11.0.3 - tslib: ^2.4.0 - unixify: ^1.0.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 57f9f64a26f62d25fcb65282d27a8f6cce8d99fd0ec8f1d5b31ab43fd5698876760e4df42fd96f2b5ea524f2e755768496ee2b3516d559d43270330551371359 - languageName: node - linkType: hard - -"@graphql-tools/graphql-tag-pluck@npm:7.3.1": - version: 7.3.1 - resolution: "@graphql-tools/graphql-tag-pluck@npm:7.3.1" +"@graphql-tools/graphql-tag-pluck@npm:7.3.6": + version: 7.3.6 + resolution: "@graphql-tools/graphql-tag-pluck@npm:7.3.6" dependencies: "@babel/parser": ^7.16.8 "@babel/traverse": ^7.16.8 "@babel/types": ^7.16.8 - "@graphql-tools/utils": 8.9.0 + "@graphql-tools/utils": 8.12.0 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: a822f509ce1400cc2541dcaf6c60fca7ca61088f64f7e2c785f18e9c5a3aac964ce7f319a1f62ba6e9fc0cf76b47cfa4cba3b03b514adaae0bcf198c6e1964b9 + checksum: 3543a41a3b84dc014ce5d0824c8275b8d8592e55bbcd8f955a0968a6b9c00c11d82d90b6bbb533f2d09f94e07d10ec70d53696470ee32fad00d055767909d164 languageName: node linkType: hard -"@graphql-tools/import@npm:6.7.0": - version: 6.7.0 - resolution: "@graphql-tools/import@npm:6.7.0" +"@graphql-tools/import@npm:6.7.6": + version: 6.7.6 + resolution: "@graphql-tools/import@npm:6.7.6" dependencies: - "@graphql-tools/utils": 8.8.0 + "@graphql-tools/utils": 8.12.0 resolve-from: 5.0.0 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 9c2f3404b1d40f37e611f1866a1f569b41cc56b07a95a822d19b25cac00341868324457f239dc9856e19cac50e27142d25f948de5e10051838af9913c565821f + checksum: 83b63dd7b45905627a7296d84102538c9450df90ad58edff601a6ebec2fd2dbae3d3d368f9f5335c62adf2ac772dcebf675f037373a5a60ef2c847a3216ff902 languageName: node linkType: hard -"@graphql-tools/import@npm:6.7.1": - version: 6.7.1 - resolution: "@graphql-tools/import@npm:6.7.1" +"@graphql-tools/json-file-loader@npm:^7.3.7, @graphql-tools/json-file-loader@npm:^7.4.1": + version: 7.4.6 + resolution: "@graphql-tools/json-file-loader@npm:7.4.6" dependencies: - "@graphql-tools/utils": 8.9.0 - resolve-from: 5.0.0 - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 1ba6ff176851eff345ccfd37616bd2d800fba074b88abb9a777b59fe153a1e55f2c24d8c033b141303267212f6a01eb874088e403b7efdf10c01c9ec7833af49 - languageName: node - linkType: hard - -"@graphql-tools/json-file-loader@npm:^7.3.7": - version: 7.4.0 - resolution: "@graphql-tools/json-file-loader@npm:7.4.0" - dependencies: - "@graphql-tools/utils": 8.8.0 + "@graphql-tools/utils": 8.12.0 globby: ^11.0.3 tslib: ^2.4.0 unixify: ^1.0.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 20bca3e92b049fc7937d4a07376f8231f44cca5eacfa1d8cdd0b35cbe3981502d388f366fd13174f26bfa9a252deeb689aaba385d092d588476a2f2f0b4fdb4d + checksum: 53b1ae5cc88d50c9104f637316e0578422d85fd4edcd16e4ee7a8eb4405e61470ff3e6fb9b623678dc1c83c3cf219da8257ce69981b714328dc57e6c430bff29 languageName: node linkType: hard -"@graphql-tools/json-file-loader@npm:^7.4.1": - version: 7.4.1 - resolution: "@graphql-tools/json-file-loader@npm:7.4.1" +"@graphql-tools/load@npm:^7.5.5, @graphql-tools/load@npm:^7.7.1": + version: 7.7.7 + resolution: "@graphql-tools/load@npm:7.7.7" dependencies: - "@graphql-tools/utils": 8.9.0 - globby: ^11.0.3 - tslib: ^2.4.0 - unixify: ^1.0.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 9eae0fd4229b60fa93d3e523e7255eeb2400bda44a2e73ba036955c514be4f02c83e7578c4749c4a7e84b44d318d4c65979b745ddb34fa4d219449f455e3e873 - languageName: node - linkType: hard - -"@graphql-tools/load@npm:^7.5.5": - version: 7.7.0 - resolution: "@graphql-tools/load@npm:7.7.0" - dependencies: - "@graphql-tools/schema": 8.5.0 - "@graphql-tools/utils": 8.8.0 + "@graphql-tools/schema": 9.0.4 + "@graphql-tools/utils": 8.12.0 p-limit: 3.1.0 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 91f2b4f3e72b2991aee6f562aebd5024f2279e5336879322c44e1dafb38af407944a178c55234c39157635d0179798d022e937e960273bd86b752fd316cbaf73 - languageName: node - linkType: hard - -"@graphql-tools/load@npm:^7.7.1": - version: 7.7.1 - resolution: "@graphql-tools/load@npm:7.7.1" - dependencies: - "@graphql-tools/schema": 8.5.1 - "@graphql-tools/utils": 8.9.0 - p-limit: 3.1.0 - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 4abaab346dab9547f547fe619476e5de54698121174f579f3473f2d5678891c249482a3e56f9b748400d5062c9bd3b5d5d5e56885555e5a3422cafa2afd6022e - languageName: node - linkType: hard - -"@graphql-tools/merge@npm:8.2.10": - version: 8.2.10 - resolution: "@graphql-tools/merge@npm:8.2.10" - dependencies: - "@graphql-tools/utils": 8.6.9 - tslib: ~2.3.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 7059d9f68cfb9b7c04d6024f528e5638fab165e681b3307877a6bad0fc461686595d19375350875bb5f4f7572b21d10272a1e4b08a8af5b6a67950a4a950012b - languageName: node - linkType: hard - -"@graphql-tools/merge@npm:8.3.0, @graphql-tools/merge@npm:^8.2.6": - version: 8.3.0 - resolution: "@graphql-tools/merge@npm:8.3.0" - dependencies: - "@graphql-tools/utils": 8.8.0 - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: f2239149d8a816d1158c5bf9f2507662faf7f77eeb8d6f6962111f69d7aedab1557f6cd8beac75bf62f0caf56a3c98ba83608207cd0614ad3119c68390d86bbe + checksum: 59590c07c029b5b2427116408f91cb1f5ab359bdf0a9314a8d31cedc540c235d1daddbbc8ab6369db1ea7e654cf52ca9d4f185058290acc8c5c3183d1bb68ef7 languageName: node linkType: hard @@ -8829,7 +7851,7 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/merge@npm:8.3.6": +"@graphql-tools/merge@npm:8.3.6, @graphql-tools/merge@npm:^8.2.6": version: 8.3.6 resolution: "@graphql-tools/merge@npm:8.3.6" dependencies: @@ -8842,43 +7864,43 @@ __metadata: linkType: hard "@graphql-tools/mock@npm:^8.1.2": - version: 8.6.8 - resolution: "@graphql-tools/mock@npm:8.6.8" + version: 8.7.6 + resolution: "@graphql-tools/mock@npm:8.7.6" dependencies: - "@graphql-tools/schema": 8.3.10 - "@graphql-tools/utils": 8.6.9 + "@graphql-tools/schema": 9.0.4 + "@graphql-tools/utils": 8.12.0 fast-json-stable-stringify: ^2.1.0 - tslib: ~2.3.0 + tslib: ^2.4.0 peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 594abfbb7766806e07910624d80e5c27cdf15e0b2d1a0eff4336b2d6c63bde3587ae6f7c889374217cb0893d8e9e87f696daf1cf1ce2fdae787dae22b8b4d228 + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 41fd32f9aa83cc0da2166bd1c27d779ccf4f87c290e3acc5bfeb6f77218f29ebe425843d00e34485a17347966e9d258e98cb27c01e2a95820ae68523ef5f8078 languageName: node linkType: hard "@graphql-tools/optimize@npm:^1.3.0": - version: 1.3.0 - resolution: "@graphql-tools/optimize@npm:1.3.0" + version: 1.3.1 + resolution: "@graphql-tools/optimize@npm:1.3.1" dependencies: tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 56a5e8e3079a7ac69639410143315bafd43175c0366a95cf037698b64799ff80fc737b747b7751a4de31b44a679f67b7499468c556ca457932d5d1052db73f19 + checksum: 4eed041bc3199a70ab426eeb10bc4af65f18fa0c5907613aec236fd7e14918d0f895e12489df6ff501562415eef64c99777a3ca6f6a4ee3c796b68e7cb778342 languageName: node linkType: hard "@graphql-tools/prisma-loader@npm:^7.2.7": - version: 7.2.7 - resolution: "@graphql-tools/prisma-loader@npm:7.2.7" + version: 7.2.22 + resolution: "@graphql-tools/prisma-loader@npm:7.2.22" dependencies: - "@graphql-tools/url-loader": 7.13.2 - "@graphql-tools/utils": 8.9.0 + "@graphql-tools/url-loader": 7.16.2 + "@graphql-tools/utils": 8.12.0 "@types/js-yaml": ^4.0.0 "@types/json-stable-stringify": ^1.0.32 "@types/jsonwebtoken": ^8.5.0 chalk: ^4.1.0 debug: ^4.3.1 dotenv: ^16.0.0 - graphql-request: ^4.0.0 + graphql-request: ^5.0.0 http-proxy-agent: ^5.0.0 https-proxy-agent: ^5.0.0 isomorphic-fetch: ^3.0.0 @@ -8891,52 +7913,24 @@ __metadata: yaml-ast-parser: ^0.0.43 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 986e33b1ec4044a26b31f8363ca0531d742e4ea67f9601ba150ec7ff6cc6fd1fb0d949057837ecf9fec6c3174a83689eb1fca6134462f368bc9d37546d4cde28 + checksum: d6881b1a40ff00d5b6ea68f271e088518a32a880f7cb0dbca1cf835d287a7c7c50816cb559d9e2ee61cc94fd3aac27faca8923d1b356ad9de7039052bc334554 languageName: node linkType: hard "@graphql-tools/relay-operation-optimizer@npm:^6.5.0": - version: 6.5.0 - resolution: "@graphql-tools/relay-operation-optimizer@npm:6.5.0" + version: 6.5.6 + resolution: "@graphql-tools/relay-operation-optimizer@npm:6.5.6" dependencies: "@ardatan/relay-compiler": 12.0.0 - "@graphql-tools/utils": 8.8.0 + "@graphql-tools/utils": 8.12.0 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: eea705c0508b801806d36a6031997868d1aa35a2bee0a21c36e5ac345691a9fec88c9c00bc3c96fa998aa28deb2be667d65e6123ac469f22072f3eba2781b5ad + checksum: 12efc88c775221a333a97a517bec160b449778cf3de5377048a81d213b0f67d82c0f2de631ba31e3443355650317ea8af5a2e107a00517dbf73d8e8720e797fb languageName: node linkType: hard -"@graphql-tools/schema@npm:8.3.10, @graphql-tools/schema@npm:^8.0.0, @graphql-tools/schema@npm:^8.3.1": - version: 8.3.10 - resolution: "@graphql-tools/schema@npm:8.3.10" - dependencies: - "@graphql-tools/merge": 8.2.10 - "@graphql-tools/utils": 8.6.9 - tslib: ~2.3.0 - value-or-promise: 1.0.11 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 8b225f4ae87d3f1d8d9772df605a27dfde069a2372f2af0a1459859c4310c5fef8243c1276c1959e316420f1584d739b9f52c55dd230d2ad177cde1019155b81 - languageName: node - linkType: hard - -"@graphql-tools/schema@npm:8.5.0": - version: 8.5.0 - resolution: "@graphql-tools/schema@npm:8.5.0" - dependencies: - "@graphql-tools/merge": 8.3.0 - "@graphql-tools/utils": 8.8.0 - tslib: ^2.4.0 - value-or-promise: 1.0.11 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 8eeefdd66e2fe674990039f81733a868ee589057cb44832e65fe99a8b17ab0c6b40dabf41a840b3458a4eb63665fb9603029269d6d919f916ae97e213a4434ba - languageName: node - linkType: hard - -"@graphql-tools/schema@npm:8.5.1": +"@graphql-tools/schema@npm:8.5.1, @graphql-tools/schema@npm:^8.0.0, @graphql-tools/schema@npm:^8.3.1": version: 8.5.1 resolution: "@graphql-tools/schema@npm:8.5.1" dependencies: @@ -8950,7 +7944,7 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/schema@npm:^9.0.0": +"@graphql-tools/schema@npm:9.0.4, @graphql-tools/schema@npm:^9.0.0": version: 9.0.4 resolution: "@graphql-tools/schema@npm:9.0.4" dependencies: @@ -8964,17 +7958,16 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/url-loader@npm:7.13.2, @graphql-tools/url-loader@npm:^7.13.2": - version: 7.13.2 - resolution: "@graphql-tools/url-loader@npm:7.13.2" +"@graphql-tools/url-loader@npm:7.16.2, @graphql-tools/url-loader@npm:^7.13.2, @graphql-tools/url-loader@npm:^7.9.7": + version: 7.16.2 + resolution: "@graphql-tools/url-loader@npm:7.16.2" dependencies: "@ardatan/sync-fetch": 0.0.1 - "@graphql-tools/delegate": 8.8.1 - "@graphql-tools/utils": 8.9.0 - "@graphql-tools/wrap": 8.5.1 - "@n1ru4l/graphql-live-query": ^0.9.0 + "@graphql-tools/delegate": 9.0.6 + "@graphql-tools/utils": 8.12.0 + "@graphql-tools/wrap": 9.2.1 "@types/ws": ^8.0.0 - "@whatwg-node/fetch": ^0.2.4 + "@whatwg-node/fetch": ^0.4.0 dset: ^3.1.2 extract-files: ^11.0.0 graphql-ws: ^5.4.1 @@ -8985,36 +7978,11 @@ __metadata: ws: ^8.3.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 21928a4a12ad07bed0c0729ec183277a1462da6b4a4fa8f083bf2fc7acb80137feb17f7fca283a58f2a8544f024bd5bcefc44c442f9cd58104656bb3f164c089 + checksum: 18084f784dd079c6dbb2c2690e45673923a57886632c2c41c96549165261d48ccf786b87762b9fb22436b6c8629a410f54e51a64fdb890aca3981d84bb4142d9 languageName: node linkType: hard -"@graphql-tools/url-loader@npm:^7.9.7": - version: 7.12.1 - resolution: "@graphql-tools/url-loader@npm:7.12.1" - dependencies: - "@graphql-tools/delegate": 8.8.0 - "@graphql-tools/utils": 8.8.0 - "@graphql-tools/wrap": 8.5.0 - "@n1ru4l/graphql-live-query": ^0.9.0 - "@types/ws": ^8.0.0 - cross-undici-fetch: ^0.4.11 - dset: ^3.1.2 - extract-files: ^11.0.0 - graphql-ws: ^5.4.1 - isomorphic-ws: ^5.0.0 - meros: ^1.1.4 - sync-fetch: ^0.4.0 - tslib: ^2.4.0 - value-or-promise: ^1.0.11 - ws: ^8.3.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 8b49650f08a175f006519d9c771cd20e0d8462e5c07c58e3e9acad76b56fca22a74cb452898d83535f5113030fe37d453d37554a4ece09d6baceb029788d545e - languageName: node - linkType: hard - -"@graphql-tools/utils@npm:8.12.0": +"@graphql-tools/utils@npm:8.12.0, @graphql-tools/utils@npm:^8.6.5, @graphql-tools/utils@npm:^8.8.0, @graphql-tools/utils@npm:^8.9.0": version: 8.12.0 resolution: "@graphql-tools/utils@npm:8.12.0" dependencies: @@ -9025,29 +7993,7 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/utils@npm:8.6.9": - version: 8.6.9 - resolution: "@graphql-tools/utils@npm:8.6.9" - dependencies: - tslib: ~2.3.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 73b9569a9c2409f86a6a9005f19026cfab6d136bf884dfbff436996a47fb0561ae24d3f6bb2abcfd600197aab85d6dfc177b9a0cbaba23905ba0c7591ef12110 - languageName: node - linkType: hard - -"@graphql-tools/utils@npm:8.8.0, @graphql-tools/utils@npm:^8.6.5, @graphql-tools/utils@npm:^8.8.0": - version: 8.8.0 - resolution: "@graphql-tools/utils@npm:8.8.0" - dependencies: - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 631aa690fcf7c01c42829af93f2af1c62d2eeaca99a74f2ae9d6424b7662383391fff37443d61f76fd9f00243b33d0ba0a7df8792c835e1db1fd1b4cee2f32f0 - languageName: node - linkType: hard - -"@graphql-tools/utils@npm:8.9.0, @graphql-tools/utils@npm:^8.9.0": +"@graphql-tools/utils@npm:8.9.0": version: 8.9.0 resolution: "@graphql-tools/utils@npm:8.9.0" dependencies: @@ -9058,22 +8004,22 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/wrap@npm:8.5.0": - version: 8.5.0 - resolution: "@graphql-tools/wrap@npm:8.5.0" +"@graphql-tools/wrap@npm:9.2.1": + version: 9.2.1 + resolution: "@graphql-tools/wrap@npm:9.2.1" dependencies: - "@graphql-tools/delegate": 8.8.0 - "@graphql-tools/schema": 8.5.0 - "@graphql-tools/utils": 8.8.0 + "@graphql-tools/delegate": 9.0.6 + "@graphql-tools/schema": 9.0.4 + "@graphql-tools/utils": 8.12.0 tslib: ^2.4.0 value-or-promise: 1.0.11 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: d2eaed461dad099f3f8b56ba9172b58967def4ebd32b2eacf906b9447025220a2f0a0782b42a087e5579383a67c8029cd451643ec8b751bff8ea778cdc0399da + checksum: 601b3e389db9f62c0cf208b22bbcb5640eed7c678ad02c8e3b784961a2e6e7e92aeae7f2070d9a5f15de99dfaf26ea70fb1f87c3f26f56f84f4a0f40690c9b3f languageName: node linkType: hard -"@graphql-tools/wrap@npm:8.5.1": +"@graphql-tools/wrap@npm:^8.3.1": version: 8.5.1 resolution: "@graphql-tools/wrap@npm:8.5.1" dependencies: @@ -9088,22 +8034,7 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/wrap@npm:^8.3.1": - version: 8.4.16 - resolution: "@graphql-tools/wrap@npm:8.4.16" - dependencies: - "@graphql-tools/delegate": 8.7.7 - "@graphql-tools/schema": 8.3.10 - "@graphql-tools/utils": 8.6.9 - tslib: ~2.3.0 - value-or-promise: 1.0.11 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: d369133824f44fbb5d0ab8d3dcd27c98594e082514acbaf6bb0fc0d178c34d214a80079235b3f26a8d04f860276782087d24bc9a10c016eaa60b6896781c8786 - languageName: node - linkType: hard - -"@graphql-typed-document-node/core@npm:^3.1.0": +"@graphql-typed-document-node/core@npm:^3.1.0, @graphql-typed-document-node/core@npm:^3.1.1": version: 3.1.1 resolution: "@graphql-typed-document-node/core@npm:3.1.1" peerDependencies: @@ -9112,28 +8043,13 @@ __metadata: languageName: node linkType: hard -"@grpc/grpc-js@npm:~1.6.0": - version: 1.6.7 - resolution: "@grpc/grpc-js@npm:1.6.7" +"@grpc/grpc-js@npm:~1.7.0": + version: 1.7.0 + resolution: "@grpc/grpc-js@npm:1.7.0" dependencies: - "@grpc/proto-loader": ^0.6.4 + "@grpc/proto-loader": ^0.7.0 "@types/node": ">=12.12.47" - checksum: 2668b08c2eec433970561384b22cf81443106835077ff1d8b7989cb5519fb7d2284c7a46b6ae94968f3b488ffbd9326ba9b4fbe4971a185d3b89eb0ee99e4fcd - languageName: node - linkType: hard - -"@grpc/proto-loader@npm:^0.6.12, @grpc/proto-loader@npm:^0.6.4": - version: 0.6.12 - resolution: "@grpc/proto-loader@npm:0.6.12" - dependencies: - "@types/long": ^4.0.1 - lodash.camelcase: ^4.3.0 - long: ^4.0.0 - protobufjs: ^6.10.0 - yargs: ^16.2.0 - bin: - proto-loader-gen-types: build/bin/proto-loader-gen-types.js - checksum: 19bb53811e650e9a975cafa1e0cb084870235cff957695a38a8429c4a71435d584740c1d780fb51882ff4d4863cb9c81393d4dc25c55f5078be283f5ea5289a9 + checksum: 22eee49f9f5aea1abf9566426d993fe4457c94c2afacd3dfb932cc46dbc06ad6ce8f1422fac357d592dd0c75a5cf03405ea15310064ab3c45e1e418f22c48c2b languageName: node linkType: hard @@ -9153,18 +8069,18 @@ __metadata: linkType: hard "@hapi/hoek@npm:^9.0.0": - version: 9.0.4 - resolution: "@hapi/hoek@npm:9.0.4" - checksum: a5503ebaad5407e0c99d0656b0bbc3e9ccac9eddc9b9f66e0358a2da9a9dd173c63c9f7c5e46504a05e1fc41d853e9a19617e258d4fcbe1a4be7f9e61da83920 + version: 9.3.0 + resolution: "@hapi/hoek@npm:9.3.0" + checksum: 4771c7a776242c3c022b168046af4e324d116a9d2e1d60631ee64f474c6e38d1bb07092d898bf95c7bc5d334c5582798a1456321b2e53ca817d4e7c88bc25b43 languageName: node linkType: hard "@hapi/topo@npm:^5.0.0": - version: 5.0.0 - resolution: "@hapi/topo@npm:5.0.0" + version: 5.1.0 + resolution: "@hapi/topo@npm:5.1.0" dependencies: "@hapi/hoek": ^9.0.0 - checksum: 8aa81f71696f88d7daeab4547e120e43c6ab78081a4f215eec5103dd858f3122a703512cdacc43aa7e27d99607345165acfeb2ee69e556e63afd50c5c57a36c3 + checksum: 604dfd5dde76d5c334bd03f9001fce69c7ce529883acf92da96f4fe7e51221bf5e5110e964caca287a6a616ba027c071748ab636ff178ad750547fba611d6014 languageName: node linkType: hard @@ -9311,9 +8227,9 @@ __metadata: linkType: soft "@ioredis/commands@npm:^1.1.1": - version: 1.1.1 - resolution: "@ioredis/commands@npm:1.1.1" - checksum: 66a9dc315dc077826fef4057c027c77c5af3fba247e6a5156c6847700fec8968a1b180bca344120ad561f5654cda54ed63119f790a041b0a010cacf02421ecff + version: 1.2.0 + resolution: "@ioredis/commands@npm:1.2.0" + checksum: 9b20225ba36ef3e5caf69b3c0720597c3016cc9b1e157f519ea388f621dd9037177f84cfe7e25c4c32dad7dd90c70ff9123cd411f747e053cf292193c9c461e2 languageName: node linkType: hard @@ -9325,21 +8241,22 @@ __metadata: linkType: hard "@istanbuljs/load-nyc-config@npm:^1.0.0": - version: 1.0.0 - resolution: "@istanbuljs/load-nyc-config@npm:1.0.0" + version: 1.1.0 + resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" dependencies: camelcase: ^5.3.1 find-up: ^4.1.0 + get-package-type: ^0.1.0 js-yaml: ^3.13.1 resolve-from: ^5.0.0 - checksum: 6671bd5029a30c1215106d12f870a67a0f6d58f1e038173c84e0006f22f6e724eeee9e5ca8ae1bcb3e741d8ec4fd4390fdf92092c66302a3db189e16446c9cfc + checksum: d578da5e2e804d5c93228450a1380e1a3c691de4953acc162f387b717258512a3e07b83510a936d9fab03eac90817473917e24f5d16297af3867f59328d58568 languageName: node linkType: hard "@istanbuljs/schema@npm:^0.1.2": - version: 0.1.2 - resolution: "@istanbuljs/schema@npm:0.1.2" - checksum: 5ce9facf2f0e3f4a93e56853cdfd78456e22d2c210c677530046e9c634ddc323dd62423ac711cd3554b5be06052c87fb8e0c266aa9010726940654c357290e78 + version: 0.1.3 + resolution: "@istanbuljs/schema@npm:0.1.3" + checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 languageName: node linkType: hard @@ -9419,6 +8336,15 @@ __metadata: languageName: node linkType: hard +"@jest/expect-utils@npm:^29.0.3": + version: 29.0.3 + resolution: "@jest/expect-utils@npm:29.0.3" + dependencies: + jest-get-type: ^29.0.0 + checksum: af6fa6e0b9cdf42f5778ff0b70c2049ec768598f720ea473773e0c0bebd2416a32ecbede94cfdc95572a021eda5302a9295a5c416ad5ce155c4ec277c40129da + languageName: node + linkType: hard + "@jest/fake-timers@npm:^27.5.1": version: 27.5.1 resolution: "@jest/fake-timers@npm:27.5.1" @@ -9482,6 +8408,15 @@ __metadata: languageName: node linkType: hard +"@jest/schemas@npm:^29.0.0": + version: 29.0.0 + resolution: "@jest/schemas@npm:29.0.0" + dependencies: + "@sinclair/typebox": ^0.24.1 + checksum: 41355c78f09eb1097e57a3c5d0ca11c9099e235e01ea5fa4e3953562a79a6a9296c1d300f1ba50ca75236048829e056b00685cd2f1ff8285e56fd2ce01249acb + languageName: node + linkType: hard + "@jest/source-map@npm:^27.5.1": version: 27.5.1 resolution: "@jest/source-map@npm:27.5.1" @@ -9540,19 +8475,6 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^27.2.5": - version: 27.2.5 - resolution: "@jest/types@npm:27.2.5" - dependencies: - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^3.0.0 - "@types/node": "*" - "@types/yargs": ^16.0.0 - chalk: ^4.0.0 - checksum: 322603c24354a5333b5b7a670464422a46e0244a5a96a35552a7018eb4ac2e84c3b7657336b0ea6aa114963f9b6d0da8b8f6f963cb044fea9e7bc04d464b0ab1 - languageName: node - linkType: hard - "@jest/types@npm:^27.5.1": version: 27.5.1 resolution: "@jest/types@npm:27.5.1" @@ -9566,6 +8488,20 @@ __metadata: languageName: node linkType: hard +"@jest/types@npm:^29.0.3": + version: 29.0.3 + resolution: "@jest/types@npm:29.0.3" + dependencies: + "@jest/schemas": ^29.0.0 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: 3bd33e64d87a5421b860396ac7f7b9b8d5abbf0f300f4379bb20c8e3a6169fbbd078933ce0649827cd63e23330c4effeb6b222fa94e8dd0df638dfff6c1fed41 + languageName: node + linkType: hard + "@jimp/bmp@npm:^0.10.3": version: 0.10.3 resolution: "@jimp/bmp@npm:0.10.3" @@ -10027,6 +8963,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/gen-mapping@npm:^0.1.0": + version: 0.1.1 + resolution: "@jridgewell/gen-mapping@npm:0.1.1" + dependencies: + "@jridgewell/set-array": ^1.0.0 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: 3bcc21fe786de6ffbf35c399a174faab05eb23ce6a03e8769569de28abbf4facc2db36a9ddb0150545ae23a8d35a7cf7237b2aa9e9356a7c626fb4698287d5cc + languageName: node + linkType: hard + "@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": version: 0.3.2 resolution: "@jridgewell/gen-mapping@npm:0.3.2" @@ -10045,7 +8991,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/set-array@npm:^1.0.1": +"@jridgewell/set-array@npm:^1.0.0, @jridgewell/set-array@npm:^1.0.1": version: 1.1.2 resolution: "@jridgewell/set-array@npm:1.1.2" checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e @@ -10079,17 +9025,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.0": - version: 0.3.4 - resolution: "@jridgewell/trace-mapping@npm:0.3.4" - dependencies: - "@jridgewell/resolve-uri": ^3.0.3 - "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: ab8bce84bbbc8c34f3ba8325ed926f8f2d3098983c10442a80c55764c4eb6e47d5b92d8ff20a0dd868c3e76a3535651fd8a0138182c290dbfc8396195685c37b - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.14": +"@jridgewell/trace-mapping@npm:^0.3.14, @jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.15 resolution: "@jridgewell/trace-mapping@npm:0.3.15" dependencies: @@ -10099,16 +9035,6 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.14 - resolution: "@jridgewell/trace-mapping@npm:0.3.14" - dependencies: - "@jridgewell/resolve-uri": ^3.0.3 - "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: b9537b9630ffb631aef9651a085fe361881cde1772cd482c257fe3c78c8fd5388d681f504a9c9fe1081b1c05e8f75edf55ee10fdb58d92bbaa8dbf6a7bd6b18c - languageName: node - linkType: hard - "@jsdevtools/ono@npm:^7.1.3": version: 7.1.3 resolution: "@jsdevtools/ono@npm:7.1.3" @@ -10117,32 +9043,25 @@ __metadata: linkType: hard "@juggle/resize-observer@npm:^3.3.1": - version: 3.3.1 - resolution: "@juggle/resize-observer@npm:3.3.1" - checksum: ddabc4044276a2cb57d469c4917206c7e39f2463aa8e3430e33e4eda554412afe29c22afa40e6708b49dad5d56768dc83acd68a704b1dcd49a0906bb96b991b2 + version: 3.4.0 + resolution: "@juggle/resize-observer@npm:3.4.0" + checksum: 2505028c05cc2e17639fcad06218b1c4b60f932a4ebb4b41ab546ef8c157031ae377e3f560903801f6d01706dbefd4943b6c4704bf19ed86dfa1c62f1473a570 languageName: node linkType: hard "@keyv/redis@npm:^2.2.3": - version: 2.3.8 - resolution: "@keyv/redis@npm:2.3.8" + version: 2.5.1 + resolution: "@keyv/redis@npm:2.5.1" dependencies: - ioredis: ^5.1.0 - checksum: 7927d870094161db5bf90677008f6a584235162a0981f875a8616d244d2ba1da525858f656f434aea2a923fb39c5ce0cf88fd9720061e5f025c9db59146e6f48 + ioredis: ^5.2.3 + checksum: 1e61ad21a2ec1c21bbc47b686ace86f2e663bd96299a45e041b392a49f73a2bc12f58fc1683ac25ab543c5761cab8051447aa4ab450db44d1519790269be3bd9 languageName: node linkType: hard "@kubernetes/client-node@npm:^0.17.0": - version: 0.17.0 - resolution: "@kubernetes/client-node@npm:0.17.0" + version: 0.17.1 + resolution: "@kubernetes/client-node@npm:0.17.1" dependencies: - "@types/js-yaml": ^4.0.1 - "@types/node": ^10.12.0 - "@types/request": ^2.47.1 - "@types/stream-buffers": ^3.0.3 - "@types/tar": ^4.0.3 - "@types/underscore": ^1.8.9 - "@types/ws": ^6.0.1 byline: ^5.0.0 execa: 5.0.0 isomorphic-ws: ^4.0.1 @@ -10158,14 +9077,17 @@ __metadata: tslib: ^1.9.3 underscore: ^1.9.1 ws: ^7.3.1 - checksum: 5a6edce96946966d8b61359ab043b42e69d1b31178133bc3bf4b5a5c9191766986e08f85d6ae814b56546ed20389817a79dca5101342543d79d750f30cba21f7 + dependenciesMeta: + openid-client: + optional: true + checksum: 834ab0ca1f8583b06c4102395ad712c115a6f99201f8dd7f0b59c1a0a5da67b006d1fe5857ad909d762b9cf82a75503665df19fdb640bf620f6123ddb36c8872 languageName: node linkType: hard "@leichtgewicht/ip-codec@npm:^2.0.1": - version: 2.0.3 - resolution: "@leichtgewicht/ip-codec@npm:2.0.3" - checksum: 5b6bee0481c82ac05c748322e34ac68aa01757451b4f49f1ab9cc91e420a1ea4cd0fc4678251e6fa41d566a3e3683cca3e179fb767c87845286863ac98b54f15 + version: 2.0.4 + resolution: "@leichtgewicht/ip-codec@npm:2.0.4" + checksum: 468de1f04d33de6d300892683d7c8aecbf96d1e2c5fe084f95f816e50a054d45b7c1ebfb141a1447d844b86a948733f6eebd92234da8581c84a1ad4de2946a2d languageName: node linkType: hard @@ -10972,9 +9894,9 @@ __metadata: linkType: hard "@lezer/common@npm:^1.0.0": - version: 1.0.0 - resolution: "@lezer/common@npm:1.0.0" - checksum: 0ba652b39f9ff073a6a8a3376a74279f2c2d2ccdd4d2bb57c7b607341dbdbf64baf9c23a196314f09349d175623bc73a6a0b6a0eeb2cc63f3a1190fd631f7c31 + version: 1.0.1 + resolution: "@lezer/common@npm:1.0.1" + checksum: 05bda2b0b90713a511502e1e0c67842996cb86415cd701c46eb49f8fa117552229a4bc7244f1e8e0025e3563294a52911eebd70d06a4bc987280fca5d148c34b languageName: node linkType: hard @@ -10988,11 +9910,11 @@ __metadata: linkType: hard "@lezer/lr@npm:^1.0.0": - version: 1.0.0 - resolution: "@lezer/lr@npm:1.0.0" + version: 1.2.3 + resolution: "@lezer/lr@npm:1.2.3" dependencies: "@lezer/common": ^1.0.0 - checksum: 1365a2d1fa0a40815a03a635506a0215475b778d8b8907d274b8ee4b0732fcb7266799b50db7c4517254da1d245c153c348fd0d7b1db93b7d66926b9c538ee43 + checksum: 118db077d32f6eb9d6b219c766d7e5715c6c004d89d76ed0137ea2a364aeca67f21dc5924ea67a649b5de1d13bfbb85571923b38536e6995820eb0a5c8844594 languageName: node linkType: hard @@ -11023,27 +9945,27 @@ __metadata: linkType: hard "@mapbox/node-pre-gyp@npm:^1.0.0": - version: 1.0.5 - resolution: "@mapbox/node-pre-gyp@npm:1.0.5" + version: 1.0.10 + resolution: "@mapbox/node-pre-gyp@npm:1.0.10" dependencies: - detect-libc: ^1.0.3 + detect-libc: ^2.0.0 https-proxy-agent: ^5.0.0 make-dir: ^3.1.0 - node-fetch: ^2.6.1 + node-fetch: ^2.6.7 nopt: ^5.0.0 - npmlog: ^4.1.2 + npmlog: ^5.0.1 rimraf: ^3.0.2 - semver: ^7.3.4 - tar: ^6.1.0 + semver: ^7.3.5 + tar: ^6.1.11 bin: node-pre-gyp: bin/node-pre-gyp - checksum: c1f182a707f5782e47b77a76e9d6a073fb043999cf9ad965bc86732e88db27ad00926d1602918edb7105f05cde67871b84a178ee9844eb742319ade419636675 + checksum: 1a98db05d955b74dad3814679593df293b9194853698f3f5f1ed00ecd93128cdd4b14fb8767fe44ac6981ef05c23effcfdc88710e7c1de99ccb6f647890597c8 languageName: node linkType: hard "@material-table/core@npm:^3.1.0": - version: 3.1.0 - resolution: "@material-table/core@npm:3.1.0" + version: 3.2.5 + resolution: "@material-table/core@npm:3.2.5" dependencies: "@babel/runtime": ^7.12.5 "@date-io/date-fns": ^1.3.13 @@ -11056,12 +9978,13 @@ __metadata: prop-types: ^15.7.2 react-beautiful-dnd: ^13.0.0 react-double-scrollbar: 0.0.15 + uuid: ^3.4.0 peerDependencies: "@date-io/core": ^1.3.13 "@material-ui/core": ^4.11.2 react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: c54114733c061d99424859465c25fdd0c51314f533d37269ee41062195bb34b5bd7eabae8e7b14532b90baee9363d00333b00d1619c01b821a7ee974053c4947 + checksum: 707e85cfcb8c1cfc8eb78ea6991509879f774081d7a54ad428f702fe00478b6d3707d0fd85f4ad443ebcfac0c0cab79c046c4d5083adcbc767615445667b50cf languageName: node linkType: hard @@ -11290,52 +10213,52 @@ __metadata: linkType: hard "@microsoft/api-documenter@npm:^7.17.11": - version: 7.17.11 - resolution: "@microsoft/api-documenter@npm:7.17.11" + version: 7.19.13 + resolution: "@microsoft/api-documenter@npm:7.19.13" dependencies: - "@microsoft/api-extractor-model": 7.17.2 + "@microsoft/api-extractor-model": 7.24.1 "@microsoft/tsdoc": 0.14.1 - "@rushstack/node-core-library": 3.45.4 - "@rushstack/ts-command-line": 4.10.10 + "@rushstack/node-core-library": 3.51.2 + "@rushstack/ts-command-line": 4.12.3 colors: ~1.2.1 js-yaml: ~3.13.1 resolve: ~1.17.0 bin: api-documenter: bin/api-documenter - checksum: 55f5c5d15dc8d97fc0582dc501e84f4ef9b9cbff71e9bf662d6262751ed38e691907f34ab4d57785cf2f03acf82c4957def804f77d1c85383ff2a80da51c7a60 + checksum: 3b5ddea06f6acea37102e4acd6784f9a642d34eb3c547ce8d1c0cff3cdbacb4146ce41be3907a797eb7f7be30b05d87b61a27ba0b6af3ebab35daf656efae441 languageName: node linkType: hard -"@microsoft/api-extractor-model@npm:7.17.2, @microsoft/api-extractor-model@npm:^7.17.2": - version: 7.17.2 - resolution: "@microsoft/api-extractor-model@npm:7.17.2" +"@microsoft/api-extractor-model@npm:7.24.1, @microsoft/api-extractor-model@npm:^7.17.2": + version: 7.24.1 + resolution: "@microsoft/api-extractor-model@npm:7.24.1" dependencies: "@microsoft/tsdoc": 0.14.1 "@microsoft/tsdoc-config": ~0.16.1 - "@rushstack/node-core-library": 3.45.4 - checksum: 94c1c63674d85bf69cff9abbf94a1b2d2f5b6e3b651b8483d8949e39424cb29df156b589a297ca19f85ad1ff6380389e58a03198e7fe1ec34b59d5cae2166de7 + "@rushstack/node-core-library": 3.51.2 + checksum: 3c5b688cd4f77324749c5dd15f912a91a7dd8bab71667bdc87b0d999fae8ce84859da9efc99c5e3fd9659d88e0069783d5c1c64232852c4bf88ac38ab9957e19 languageName: node linkType: hard "@microsoft/api-extractor@npm:^7.23.0": - version: 7.23.0 - resolution: "@microsoft/api-extractor@npm:7.23.0" + version: 7.31.1 + resolution: "@microsoft/api-extractor@npm:7.31.1" dependencies: - "@microsoft/api-extractor-model": 7.17.2 + "@microsoft/api-extractor-model": 7.24.1 "@microsoft/tsdoc": 0.14.1 "@microsoft/tsdoc-config": ~0.16.1 - "@rushstack/node-core-library": 3.45.4 - "@rushstack/rig-package": 0.3.11 - "@rushstack/ts-command-line": 4.10.10 + "@rushstack/node-core-library": 3.51.2 + "@rushstack/rig-package": 0.3.15 + "@rushstack/ts-command-line": 4.12.3 colors: ~1.2.1 lodash: ~4.17.15 resolve: ~1.17.0 semver: ~7.3.0 source-map: ~0.6.1 - typescript: ~4.6.3 + typescript: ~4.7.4 bin: api-extractor: bin/api-extractor - checksum: 61d3609d7aa76bece292551eb9c7a1c04c2fa304962c8b7e97aa3b3add0431a225c022e32993e384a51290e121542c6a6b3ad4be24f5315a4c1501cf821018a2 + checksum: 7c09a2939901e56f77c566466b86bb81d81180da16b6183f052f229c6582a861c6144f9d0cebaf21d19da8ddc3fb3476f6452435fadca876d1076de8bd373f3f languageName: node linkType: hard @@ -11347,14 +10270,14 @@ __metadata: linkType: hard "@microsoft/tsdoc-config@npm:~0.16.1": - version: 0.16.1 - resolution: "@microsoft/tsdoc-config@npm:0.16.1" + version: 0.16.2 + resolution: "@microsoft/tsdoc-config@npm:0.16.2" dependencies: - "@microsoft/tsdoc": 0.14.1 + "@microsoft/tsdoc": 0.14.2 ajv: ~6.12.6 jju: ~1.4.0 resolve: ~1.19.0 - checksum: 2b2121803caf6584fe0264ad16f8fa10de68438c0b82bd25f918606052af5312050f38b6abd4bcf3d40f120713aab144762a7a280fa22dd12e5571cd08e348e1 + checksum: 12b0d703154076bcaac75ca42e804e4fc292672396441e54346d7eadd0d6b57f90980eda2b1bab89b224af86da34a2389f9054002e282011e795ca5919a4386f languageName: node linkType: hard @@ -11365,24 +10288,14 @@ __metadata: languageName: node linkType: hard -"@microsoft/tsdoc@npm:^0.14.1": +"@microsoft/tsdoc@npm:0.14.2, @microsoft/tsdoc@npm:^0.14.1": version: 0.14.2 resolution: "@microsoft/tsdoc@npm:0.14.2" checksum: b167c89e916ba73ee20b9c9d5dba6aa3a0de25ed3d50050e8a344dca7cd43cb2e1059bd515c820369b6e708901dd3fda476a42bc643ca74a35671ce77f724a3a languageName: node linkType: hard -"@mswjs/cookies@npm:^0.2.0": - version: 0.2.0 - resolution: "@mswjs/cookies@npm:0.2.0" - dependencies: - "@types/set-cookie-parser": ^2.4.0 - set-cookie-parser: ^2.4.6 - checksum: 218d169df02cda261e68e0203812a68affa6396d0041b23c70c4865cf757bebc47ffe3f66df39b94f666f004da42cb9b56e61f089b21c59e6cb88abce8537f19 - languageName: node - linkType: hard - -"@mswjs/cookies@npm:^0.2.2": +"@mswjs/cookies@npm:^0.2.0, @mswjs/cookies@npm:^0.2.2": version: 0.2.2 resolution: "@mswjs/cookies@npm:0.2.2" dependencies: @@ -11406,34 +10319,26 @@ __metadata: languageName: node linkType: hard -"@mswjs/interceptors@npm:^0.17.2": - version: 0.17.2 - resolution: "@mswjs/interceptors@npm:0.17.2" +"@mswjs/interceptors@npm:^0.17.2, @mswjs/interceptors@npm:^0.17.5": + version: 0.17.5 + resolution: "@mswjs/interceptors@npm:0.17.5" dependencies: "@open-draft/until": ^1.0.3 + "@types/debug": ^4.1.7 "@xmldom/xmldom": ^0.7.5 debug: ^4.3.3 - headers-polyfill: ^3.0.4 + headers-polyfill: ^3.1.0 outvariant: ^1.2.1 strict-event-emitter: ^0.2.4 web-encoding: ^1.1.5 - checksum: aa40a0389b6d1dac67ac488cc989f73122e94c1e2c765c59b85223e4c659c516dc0f8cef38b15ff8915d4f29c49e73681580f9fd24b656b9dc7078e5690457da - languageName: node - linkType: hard - -"@n1ru4l/graphql-live-query@npm:^0.9.0": - version: 0.9.0 - resolution: "@n1ru4l/graphql-live-query@npm:0.9.0" - peerDependencies: - graphql: ^15.4.0 || ^16.0.0 - checksum: 746c7a2b23440a2daee5737aece454c756bf9f3e77decd53feed921f88907743301b569209d124afde63271b3f9db59a1fb997c0c280205662a7622992057e4a + checksum: 0293ccc56c1c85fb7334cd5902574f7df20c26be74d633c83fde64ffd7620f81e08253fe7985c6b5ad3b64c04ad53c3610e9b9c07621518aabd977343026bb2b languageName: node linkType: hard "@n1ru4l/push-pull-async-iterable-iterator@npm:^3.1.0": - version: 3.1.0 - resolution: "@n1ru4l/push-pull-async-iterable-iterator@npm:3.1.0" - checksum: 1762a3c9b8c131e575c375450a408360551ae47b7c481c8115a73e2533ded134cc1d365e02c8c058c281b8b91764041568a0525250346c64fe57825877d4d5ab + version: 3.2.0 + resolution: "@n1ru4l/push-pull-async-iterable-iterator@npm:3.2.0" + checksum: 2c7bdbc6c3d8f0aa05c2e3e80c4a856f766e6113a86198fd0df2448117f7cfa71ee2946f6aa7e745caec6ac04d19a5a61c6c80c6fdbf686d43984b3791f0a04d languageName: node linkType: hard @@ -11491,30 +10396,30 @@ __metadata: languageName: node linkType: hard -"@nodelib/fs.scandir@npm:2.1.3": - version: 2.1.3 - resolution: "@nodelib/fs.scandir@npm:2.1.3" +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" dependencies: - "@nodelib/fs.stat": 2.0.3 + "@nodelib/fs.stat": 2.0.5 run-parallel: ^1.1.9 - checksum: 0054efbba1385629886fe017d99f7045cb8300d6de1923f7a37e05e480c853abbedaff90f6a6b88fd0d406e1cd1e97fb60bd4e059b44468b174f46bef2e21dd1 + checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 languageName: node linkType: hard -"@nodelib/fs.stat@npm:2.0.3, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.3 - resolution: "@nodelib/fs.stat@npm:2.0.3" - checksum: d3612efceea83fb0bec4e64967888ff0c3e5fbbae96121bc526bbbe5529f32fc6f8a785b550f397d20f09c84dc1e5a6c8e9fd7f9b8b62387a8f80f680be8430e +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 languageName: node linkType: hard "@nodelib/fs.walk@npm:^1.2.3": - version: 1.2.4 - resolution: "@nodelib/fs.walk@npm:1.2.4" + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" dependencies: - "@nodelib/fs.scandir": 2.1.3 + "@nodelib/fs.scandir": 2.1.5 fastq: ^1.6.0 - checksum: a971d1dcc1cf593e25651738e915be201053b63775c39c1ee221d2adee6316503ad6043136ceda0e099724875f2d72ea04b3b57c0e3a20b7f280bd3e951ae2e4 + checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 languageName: node linkType: hard @@ -11605,29 +10510,29 @@ __metadata: linkType: hard "@npmcli/ci-detect@npm:^1.0.0": - version: 1.3.0 - resolution: "@npmcli/ci-detect@npm:1.3.0" - checksum: 3ba5e974c71596edf5327def31fd6af02f7ca4ec08bce39f9cfb44132dda748f9f5ad631d6f1b168e983c58d01555d31ff37f26c7d45731a9784fb936a5af11e + version: 1.4.0 + resolution: "@npmcli/ci-detect@npm:1.4.0" + checksum: c262fc86dd543efb8a721dec39ab333f99861abff5850136c2dcbee58610ccb1f5e66c3c669903b1bcf0668084c1fe6c443a90490fba771223fb6db137e9bfc5 languageName: node linkType: hard "@npmcli/fs@npm:^1.0.0": - version: 1.0.0 - resolution: "@npmcli/fs@npm:1.0.0" + version: 1.1.1 + resolution: "@npmcli/fs@npm:1.1.1" dependencies: "@gar/promisify": ^1.0.1 semver: ^7.3.5 - checksum: f2b4990107dd2a5b18794c89aaff6f62f3a67883d49a20602fdfc353cbc7f8c5fd50edeffdc769e454900e01b8b8e43d0b9eb524d00963d69f3c829be1a2e8ac + checksum: f5ad92f157ed222e4e31c352333d0901df02c7c04311e42a81d8eb555d4ec4276ea9c635011757de20cc476755af33e91622838de573b17e52e2e7703f0a9965 languageName: node linkType: hard "@npmcli/fs@npm:^2.1.0": - version: 2.1.0 - resolution: "@npmcli/fs@npm:2.1.0" + version: 2.1.2 + resolution: "@npmcli/fs@npm:2.1.2" dependencies: "@gar/promisify": ^1.1.3 semver: ^7.3.5 - checksum: 6ec6d678af6da49f9dac50cd882d7f661934dd278972ffbaacde40d9eaa2871292d634000a0cca9510f6fc29855fbd4af433e1adbff90a524ec3eaf140f1219b + checksum: 405074965e72d4c9d728931b64d2d38e6ea12066d4fad651ac253d175e413c06fe4350970c783db0d749181da8fe49c42d3880bd1cbc12cd68e3a7964d820225 languageName: node linkType: hard @@ -11648,8 +10553,8 @@ __metadata: linkType: hard "@npmcli/git@npm:^3.0.0": - version: 3.0.1 - resolution: "@npmcli/git@npm:3.0.1" + version: 3.0.2 + resolution: "@npmcli/git@npm:3.0.2" dependencies: "@npmcli/promise-spawn": ^3.0.0 lru-cache: ^7.4.4 @@ -11660,7 +10565,7 @@ __metadata: promise-retry: ^2.0.1 semver: ^7.3.5 which: ^2.0.2 - checksum: 0e289d11e2d6034652993f2d05f68396d8377603a1c1f983b2d0893e7591a22bcf3896a43c7dfbcc43f03c308a110f0b9ec37e0191e48b0bd1d236e0f57a3ec6 + checksum: bdfd1229bb1113ad4883ef89b74b5dc442a2c96225d830491dd0dec4fa83d083b93cde92b6978d4956a8365521e61bc8dc1891fb905c7c693d5d6aa178f2ab44 languageName: node linkType: hard @@ -11676,27 +10581,15 @@ __metadata: languageName: node linkType: hard -"@npmcli/map-workspaces@npm:^2.0.0": - version: 2.0.0 - resolution: "@npmcli/map-workspaces@npm:2.0.0" - dependencies: - "@npmcli/name-from-folder": ^1.0.1 - glob: ^7.1.6 - minimatch: ^3.0.4 - read-package-json-fast: ^2.0.1 - checksum: 33707f80cc556aca2d748e228bbe62b6d7ae4a6e95b18b94ca64dd72e9c071ace29e7dd140bce4c2f96a238e40030212ee0ac00dda6026c7b2e23b2f173d75c8 - languageName: node - linkType: hard - -"@npmcli/map-workspaces@npm:^2.0.3": - version: 2.0.3 - resolution: "@npmcli/map-workspaces@npm:2.0.3" +"@npmcli/map-workspaces@npm:^2.0.0, @npmcli/map-workspaces@npm:^2.0.3": + version: 2.0.4 + resolution: "@npmcli/map-workspaces@npm:2.0.4" dependencies: "@npmcli/name-from-folder": ^1.0.1 glob: ^8.0.1 minimatch: ^5.0.1 read-package-json-fast: ^2.0.3 - checksum: c9878a22168d3f2d8df9e339ed0799628db3ea8502bd623b5bbe7b0dfcac065b3310e4093df94667a4a28ef2c54c02ce6956467a8aaa2e150305f2fe1cd64f9d + checksum: cc8d662ac5115ad9822742a11e11d2d32eda74214bd0f4efec30c9cd833975b5b4c8409fe54ddbb451b040b17a943f770976506cba0f26cfccd58d99b5880d6f languageName: node linkType: hard @@ -11713,27 +10606,18 @@ __metadata: linkType: hard "@npmcli/metavuln-calculator@npm:^3.0.1": - version: 3.1.0 - resolution: "@npmcli/metavuln-calculator@npm:3.1.0" + version: 3.1.1 + resolution: "@npmcli/metavuln-calculator@npm:3.1.1" dependencies: cacache: ^16.0.0 json-parse-even-better-errors: ^2.3.1 pacote: ^13.0.3 semver: ^7.3.5 - checksum: 39fb474e239d3f221178f0c2f6089cd4a2fce8183343b7f52f8f9fe0b3cb0a98b386b15c9afe63a0b0dc2ae5302497d00eb2de2f4b3431953dbf05e69d613c9a + checksum: dc9846fdb82a1f4274ff8943f81452c75615bd9bca523c862956ea2c32e18c5a4be5572e169104d3a0eb262b7ede72c8dbbc202a4ab3b3f4946fa55f226dcc64 languageName: node linkType: hard -"@npmcli/move-file@npm:^1.0.1": - version: 1.0.1 - resolution: "@npmcli/move-file@npm:1.0.1" - dependencies: - mkdirp: ^1.0.4 - checksum: 878b39fc1f0b4c0b434ef0a97b80149fb74c5ec06246280238a2bc5f562a3c5e758e31f583c6431eb916537c1505697e4ac7b9f9e68cb28951bf7eb8150de5f0 - languageName: node - linkType: hard - -"@npmcli/move-file@npm:^1.1.0": +"@npmcli/move-file@npm:^1.0.1, @npmcli/move-file@npm:^1.1.0": version: 1.1.2 resolution: "@npmcli/move-file@npm:1.1.2" dependencies: @@ -11744,12 +10628,12 @@ __metadata: linkType: hard "@npmcli/move-file@npm:^2.0.0": - version: 2.0.0 - resolution: "@npmcli/move-file@npm:2.0.0" + version: 2.0.1 + resolution: "@npmcli/move-file@npm:2.0.1" dependencies: mkdirp: ^1.0.4 rimraf: ^3.0.2 - checksum: 1388777b507b0c592d53f41b9d182e1a8de7763bc625fc07999b8edbc22325f074e5b3ec90af79c89d6987fdb2325bc66d59f483258543c14a43661621f841b0 + checksum: 52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380 languageName: node linkType: hard @@ -11822,7 +10706,7 @@ __metadata: languageName: node linkType: hard -"@npmcli/run-script@npm:^3.0.0, @npmcli/run-script@npm:^3.0.1, @npmcli/run-script@npm:^3.0.2": +"@npmcli/run-script@npm:^3.0.0, @npmcli/run-script@npm:^3.0.2": version: 3.0.3 resolution: "@npmcli/run-script@npm:3.0.3" dependencies: @@ -11834,6 +10718,19 @@ __metadata: languageName: node linkType: hard +"@npmcli/run-script@npm:^4.1.0": + version: 4.2.1 + resolution: "@npmcli/run-script@npm:4.2.1" + dependencies: + "@npmcli/node-gyp": ^2.0.0 + "@npmcli/promise-spawn": ^3.0.0 + node-gyp: ^9.0.0 + read-package-json-fast: ^2.0.3 + which: ^2.0.2 + checksum: 7b8d6676353f157e68b26baf848e01e5d887bcf90ce81a52f23fc9a5d93e6ffb60057532d664cfd7aeeb76d464d0c8b0d314ee6cccb56943acb3b6c570b756c8 + languageName: node + linkType: hard + "@nuxtjs/opencollective@npm:0.3.2": version: 0.3.2 resolution: "@nuxtjs/opencollective@npm:0.3.2" @@ -11848,17 +10745,17 @@ __metadata: linkType: hard "@octokit/app@npm:^13.0.5": - version: 13.0.5 - resolution: "@octokit/app@npm:13.0.5" + version: 13.0.8 + resolution: "@octokit/app@npm:13.0.8" dependencies: "@octokit/auth-app": ^4.0.0 "@octokit/auth-unauthenticated": ^3.0.0 "@octokit/core": ^4.0.0 - "@octokit/oauth-app": ^4.0.4 - "@octokit/plugin-paginate-rest": ^3.0.0 - "@octokit/types": ^6.27.1 + "@octokit/oauth-app": ^4.0.7 + "@octokit/plugin-paginate-rest": ^4.0.0 + "@octokit/types": ^7.0.0 "@octokit/webhooks": ^10.0.0 - checksum: 15fdff892f0ec82a1121b94e82eb09aad8a868147efecb0613dc44b06aeb8252f5a4caade2d929644fd7fa8bff2df56f1fb702506574dafa3df8653421a6015a + checksum: 87c6dbb5872dc2cbf06eee913c8a34d91c963ebfea2f617311b5b833d897e81c39bcc900e518587dde3cb9c61be6f5937663aa6b21a4c7638ee01533524e8d82 languageName: node linkType: hard @@ -11881,64 +10778,52 @@ __metadata: linkType: hard "@octokit/auth-oauth-app@npm:^5.0.0": - version: 5.0.1 - resolution: "@octokit/auth-oauth-app@npm:5.0.1" + version: 5.0.2 + resolution: "@octokit/auth-oauth-app@npm:5.0.2" dependencies: "@octokit/auth-oauth-device": ^4.0.0 "@octokit/auth-oauth-user": ^2.0.0 "@octokit/request": ^5.6.3 - "@octokit/types": ^6.0.3 + "@octokit/types": ^7.0.0 "@types/btoa-lite": ^1.0.0 btoa-lite: ^1.0.0 universal-user-agent: ^6.0.0 - checksum: 8e499a071fa0452805e17cdbeb2df58dab9e2ef5d3a2b3d643c529f86d1048ca5cf629fb573b69894d57af0b8528edf13bef669e7fa399511879833840c8ed02 - languageName: node - linkType: hard - -"@octokit/auth-oauth-device@npm:^3.1.1": - version: 3.1.1 - resolution: "@octokit/auth-oauth-device@npm:3.1.1" - dependencies: - "@octokit/oauth-methods": ^1.1.0 - "@octokit/request": ^5.4.14 - "@octokit/types": ^6.10.0 - universal-user-agent: ^6.0.0 - checksum: e769840fb2953ea7b5d677c249a28766137ed0d2960feee9a5a8eb68737d5f5df0630f855d755f5711823fc11b0a8c2d502288e16c2f577da7aacf0f9853faa6 + checksum: 3863cdb41c578cb1d2815777ef71ba3d231e4c335d136251ccab8b360e7980b02c93a86d0c91bcf25a2f1dae9b8f1817976077381e74992b907a92de12602a41 languageName: node linkType: hard "@octokit/auth-oauth-device@npm:^4.0.0": - version: 4.0.0 - resolution: "@octokit/auth-oauth-device@npm:4.0.0" + version: 4.0.2 + resolution: "@octokit/auth-oauth-device@npm:4.0.2" dependencies: "@octokit/oauth-methods": ^2.0.0 "@octokit/request": ^6.0.0 - "@octokit/types": ^6.10.0 + "@octokit/types": ^7.0.0 universal-user-agent: ^6.0.0 - checksum: 171304f616edf860dcf6980f90bad8bbefb9c093107241791fee7f6d8dcd708dd7c52c601299b37038b53108b874c8d164fffcaa206eecd13b2f9babc60e2f66 + checksum: 49cd76ae8644fa537a6dd0155b85321a46a517d2064a0cb69ee2a9cfa5b081cd70a906958e002ee4e63895e966d942a28b2be9c527490f25b8685e229d17addd languageName: node linkType: hard "@octokit/auth-oauth-user@npm:^2.0.0": - version: 2.0.0 - resolution: "@octokit/auth-oauth-user@npm:2.0.0" + version: 2.0.3 + resolution: "@octokit/auth-oauth-user@npm:2.0.3" dependencies: - "@octokit/auth-oauth-device": ^3.1.1 - "@octokit/oauth-methods": ^1.1.0 + "@octokit/auth-oauth-device": ^4.0.0 + "@octokit/oauth-methods": ^2.0.0 "@octokit/request": ^6.0.0 - "@octokit/types": ^6.12.2 + "@octokit/types": ^7.0.0 btoa-lite: ^1.0.0 universal-user-agent: ^6.0.0 - checksum: a9a939e9b1ba79793634234393dbcdc9cda33c84cb2b580d7090c1a737a87cd1b8c35fad42573fc1c84c20ffd4f22ba8d6047ab3af2b10f11a1f870236b8a0a9 + checksum: a62f85021bf251de3987abdda747079f5b479d37de898f35c92816dda0e538a8837e1487ee639414fa83ab710d786c8bc1ea84c39c6a505f5d47dcc45beb9fb7 languageName: node linkType: hard "@octokit/auth-token@npm:^2.4.4": - version: 2.4.4 - resolution: "@octokit/auth-token@npm:2.4.4" + version: 2.5.0 + resolution: "@octokit/auth-token@npm:2.5.0" dependencies: - "@octokit/types": ^6.0.0 - checksum: ee2c90af0f3274b482b6e615f7c200928a8f86b0596ec95f0e49219515578990118bf1db3baff723191b0e2a94d82af376f357df0ba9a2d8d732b77e9b801feb + "@octokit/types": ^6.0.3 + checksum: 45949296c09abcd6beb4c3f69d45b0c1f265f9581d2a9683cf4d1800c4cf8259c2f58d58e44c16c20bffb85a0282a176c0d51f4af300e428b863f27b910e6297 languageName: node linkType: hard @@ -11952,30 +10837,31 @@ __metadata: linkType: hard "@octokit/auth-unauthenticated@npm:^3.0.0": - version: 3.0.0 - resolution: "@octokit/auth-unauthenticated@npm:3.0.0" + version: 3.0.2 + resolution: "@octokit/auth-unauthenticated@npm:3.0.2" dependencies: - "@octokit/request-error": ^2.1.0 - "@octokit/types": ^6.0.3 - checksum: 3b2674f6ef363ee1053cf7e978f1efaec39b85b695bdf0c7fe25fbef028a125c7e548e7d67b32f823aef1938a85f32bfe8de0a5b6071bf21ca4bff596bc62a56 + "@octokit/request-error": ^3.0.0 + "@octokit/types": ^7.0.0 + checksum: 974c52134574e9869d05628b10c4e83fdf0538204fd8a50b055215ad2a02319127fa7394572798af28a5ea0ced0b28876fde70fe4637a546c2777b0c4434cabb languageName: node linkType: hard -"@octokit/core@npm:^3.2.3": - version: 3.2.4 - resolution: "@octokit/core@npm:3.2.4" +"@octokit/core@npm:^3.5.1": + version: 3.6.0 + resolution: "@octokit/core@npm:3.6.0" dependencies: "@octokit/auth-token": ^2.4.4 "@octokit/graphql": ^4.5.8 - "@octokit/request": ^5.4.12 + "@octokit/request": ^5.6.3 + "@octokit/request-error": ^2.0.5 "@octokit/types": ^6.0.3 - before-after-hook: ^2.1.0 + before-after-hook: ^2.2.0 universal-user-agent: ^6.0.0 - checksum: f9d48423e45103c3e759231f0b4671c7d7d481f8fa7ead7316dc3d126465b697fd1a8f7f258950f22f602a58aacb7524b4b9f617d284f74429df7bd51ad67052 + checksum: f81160129037bd8555d47db60cd5381637b7e3602ad70735a7bdf8f3d250c7b7114a666bb12ef7a8746a326a5d72ed30a1b8f8a5a170007f7285c8e217bef1f0 languageName: node linkType: hard -"@octokit/core@npm:^4.0.0": +"@octokit/core@npm:^4.0.0, @octokit/core@npm:^4.0.4": version: 4.0.5 resolution: "@octokit/core@npm:4.0.5" dependencies: @@ -11990,21 +10876,6 @@ __metadata: languageName: node linkType: hard -"@octokit/core@npm:^4.0.4": - version: 4.0.4 - resolution: "@octokit/core@npm:4.0.4" - dependencies: - "@octokit/auth-token": ^3.0.0 - "@octokit/graphql": ^5.0.0 - "@octokit/request": ^6.0.0 - "@octokit/request-error": ^3.0.0 - "@octokit/types": ^6.0.3 - before-after-hook: ^2.2.0 - universal-user-agent: ^6.0.0 - checksum: c9ae1e5706ab568a725cc5dba314049fbd37d77f1595dd2c19733abddfd72f4e1d46d6980e212d845dde4625ce5f170af951ac0eb0d7bc09e56a159b88cbe5dd - languageName: node - linkType: hard - "@octokit/endpoint@npm:^6.0.1": version: 6.0.12 resolution: "@octokit/endpoint@npm:6.0.12" @@ -12017,13 +10888,13 @@ __metadata: linkType: hard "@octokit/endpoint@npm:^7.0.0": - version: 7.0.1 - resolution: "@octokit/endpoint@npm:7.0.1" + version: 7.0.2 + resolution: "@octokit/endpoint@npm:7.0.2" dependencies: "@octokit/types": ^7.0.0 is-plain-object: ^5.0.0 universal-user-agent: ^6.0.0 - checksum: a0ff70202e8355845e9462df4e56e7ce4b32f15eddfb169d91e9939b7602fb05c78088b9d1ac9936b1655d61a883c7fe7b08e8f60c100ee05f40844bb4a95097 + checksum: 81743b228e903d27e426280a63f1d2c2771b3bda4a2e577f6f25f075a1eb577b6c853b62abed1a6bfa0fa01322dac9b71e2f07c75cd7946d952b1c8f6032d96d languageName: node linkType: hard @@ -12049,9 +10920,9 @@ __metadata: languageName: node linkType: hard -"@octokit/oauth-app@npm:^4.0.4, @octokit/oauth-app@npm:^4.0.6": - version: 4.0.6 - resolution: "@octokit/oauth-app@npm:4.0.6" +"@octokit/oauth-app@npm:^4.0.6, @octokit/oauth-app@npm:^4.0.7": + version: 4.0.8 + resolution: "@octokit/oauth-app@npm:4.0.8" dependencies: "@octokit/auth-oauth-app": ^5.0.0 "@octokit/auth-oauth-user": ^2.0.0 @@ -12060,20 +10931,9 @@ __metadata: "@octokit/oauth-authorization-url": ^5.0.0 "@octokit/oauth-methods": ^2.0.0 "@types/aws-lambda": ^8.10.83 - aws-lambda: ^1.0.7 fromentries: ^1.3.1 universal-user-agent: ^6.0.0 - dependenciesMeta: - aws-lambda: - optional: true - checksum: 0d7ceadda4668748a436f52f6c4ae3160a4a5c81a92592c0a6cfc75b0a065ed480880d8861efcabc6ca41b3ccf753d1c1044782a6c8d5fb481d6e8a0acf6d32e - languageName: node - linkType: hard - -"@octokit/oauth-authorization-url@npm:^4.3.1": - version: 4.3.1 - resolution: "@octokit/oauth-authorization-url@npm:4.3.1" - checksum: 2d8e78d178d55ac63b2405b8421dc5443a79b3583c4eedd8de8342c7ee48e122c5887361adeb2bddf13f84f49b2ac747b99d035f85747aac165582161dc6a9de + checksum: 25324abb6e965963911af8df8f0ce3d61120b455eac99aa7b5c263724cd1ae62d657ac4a1d915c45ad7c55db4723c964f4f7d06e3eacefe676d6ae7f5b31c5cb languageName: node linkType: hard @@ -12084,36 +10944,16 @@ __metadata: languageName: node linkType: hard -"@octokit/oauth-methods@npm:^1.1.0": - version: 1.2.2 - resolution: "@octokit/oauth-methods@npm:1.2.2" - dependencies: - "@octokit/oauth-authorization-url": ^4.3.1 - "@octokit/request": ^5.4.14 - "@octokit/request-error": ^2.0.5 - "@octokit/types": ^6.12.2 - btoa-lite: ^1.0.0 - checksum: 36df0292335cc896dbb1f2bcf03b29c693cd270b8213b4b6c291696e3354bdf47f3700a7cdc54bcd9d718be1b7bf00ed1703fd6ba134d33a009d2508c2bd0090 - languageName: node - linkType: hard - "@octokit/oauth-methods@npm:^2.0.0": - version: 2.0.2 - resolution: "@octokit/oauth-methods@npm:2.0.2" + version: 2.0.3 + resolution: "@octokit/oauth-methods@npm:2.0.3" dependencies: "@octokit/oauth-authorization-url": ^5.0.0 "@octokit/request": ^6.0.0 "@octokit/request-error": ^3.0.0 - "@octokit/types": ^6.12.2 + "@octokit/types": ^7.0.0 btoa-lite: ^1.0.0 - checksum: 008b0fc52b175fee8ff7d0505ff86bf4e4bc1b69d2c3e6dff9f5a3abbdaefc4730d624ebbc8df8366b7639f9543037d1d22a1ffae180a429182721e8a106d737 - languageName: node - linkType: hard - -"@octokit/openapi-types@npm:^11.2.0": - version: 11.2.0 - resolution: "@octokit/openapi-types@npm:11.2.0" - checksum: eb373ea496bc96bf0233505a0916eb38cb193d1829cab935e1cf1fd21839c402a1d835d3c0326290c756c0ed980a64d0ae73ad3c5d5decde9000f0828aa7ff52 + checksum: 9cc4635128eb665217ed8ba0aaeb245fd14a09c2c4781e58346e1716cfa122482de9ea5b46a5a763526c71068e6700539da3af451bb9bc7059218a9fb7be352f languageName: node linkType: hard @@ -12124,17 +10964,10 @@ __metadata: languageName: node linkType: hard -"@octokit/openapi-types@npm:^13.0.0": - version: 13.0.1 - resolution: "@octokit/openapi-types@npm:13.0.1" - checksum: a54dcd7af90470737f4e1ff071d1d5b6d963210f31a658bb17ccb618e5d52164ec1e9cfd3ff3e50a28eccda262fbb20a46b65e70697fc483ccb32a49e444718c - languageName: node - linkType: hard - -"@octokit/openapi-types@npm:^7.3.2": - version: 7.4.0 - resolution: "@octokit/openapi-types@npm:7.4.0" - checksum: a480cd1fb3d167b9a55e9cc1a8112086b00a0be67e4010d4b05009ed2fff9e70d21ffad293fbbf5f35c66e64b263eb61277f99926044c6b4d956ada6791eb89e +"@octokit/openapi-types@npm:^13.11.0": + version: 13.12.0 + resolution: "@octokit/openapi-types@npm:13.12.0" + checksum: d8f2598d95b7031799af54c6af0bfcd03f59372f417248a7bf04f60d1ac79019d41aff3ed5285760bd80e3b674a611043385ace4067346277e8c95ff6437a2e7 languageName: node linkType: hard @@ -12145,45 +10978,25 @@ __metadata: languageName: node linkType: hard -"@octokit/plugin-paginate-rest@npm:^2.6.2": - version: 2.7.0 - resolution: "@octokit/plugin-paginate-rest@npm:2.7.0" +"@octokit/plugin-paginate-rest@npm:^2.16.8": + version: 2.21.3 + resolution: "@octokit/plugin-paginate-rest@npm:2.21.3" dependencies: - "@octokit/types": ^6.0.1 + "@octokit/types": ^6.40.0 peerDependencies: "@octokit/core": ">=2" - checksum: 68a61e6acb07965a5bd8be5302aeaa46d8e9038e65fa047a85f834fc25c4773f085a878e73eac79c072cb0ace7e4e5187c8549ab6c6d749e620e0f341ee83835 - languageName: node - linkType: hard - -"@octokit/plugin-paginate-rest@npm:^3.0.0": - version: 3.0.0 - resolution: "@octokit/plugin-paginate-rest@npm:3.0.0" - dependencies: - "@octokit/types": ^6.39.0 - peerDependencies: - "@octokit/core": ">=4" - checksum: 1d2c900254f3dcd43f7ba69dfd12ff63f93a0d39a1bf542b1d0f006e95da4924ae0a26044c864ad7fb0309047f44becaf76293aae334d14c946910d65edd2523 + checksum: acf31de2ba4021bceec7ff49c5b0e25309fc3c009d407f153f928ddf436ab66cd4217344138378d5523f5fb233896e1db58c9c7b3ffd9612a66d760bc5d319ed languageName: node linkType: hard "@octokit/plugin-paginate-rest@npm:^4.0.0": - version: 4.0.0 - resolution: "@octokit/plugin-paginate-rest@npm:4.0.0" + version: 4.3.1 + resolution: "@octokit/plugin-paginate-rest@npm:4.3.1" dependencies: - "@octokit/types": ^7.0.0 + "@octokit/types": ^7.5.0 peerDependencies: "@octokit/core": ">=4" - checksum: a3fbc1d540cc919df8935dea88b36d59ae85f417713476d8679f1cf8b733cfb44b96d3020094bd7f8daa7b84e4ac9b8403c1cdad323289d586fdb2ed1dcae7c0 - languageName: node - linkType: hard - -"@octokit/plugin-request-log@npm:^1.0.2": - version: 1.0.2 - resolution: "@octokit/plugin-request-log@npm:1.0.2" - peerDependencies: - "@octokit/core": ">=3" - checksum: b28fc7b588b8a205396b01b6be61c2aeac6f2a67180aec1d8185b3e0df7eae7b355a8dddcab8dd3b250de0eba90bdd7fa1daff5ec76ff03491f7707b3544a79f + checksum: 96d420fc9944cd3cb67c41d47781ee00d406e34622ed6a6cc1995ee9602e1ab23b51e30f5a5d3b80d4b62879234e0c21fe6c654b267ccb9550379f2e0051e681 languageName: node linkType: hard @@ -12196,27 +11009,27 @@ __metadata: languageName: node linkType: hard -"@octokit/plugin-rest-endpoint-methods@npm:5.3.1": - version: 5.3.1 - resolution: "@octokit/plugin-rest-endpoint-methods@npm:5.3.1" +"@octokit/plugin-rest-endpoint-methods@npm:^5.12.0": + version: 5.16.2 + resolution: "@octokit/plugin-rest-endpoint-methods@npm:5.16.2" dependencies: - "@octokit/types": ^6.16.2 + "@octokit/types": ^6.39.0 deprecation: ^2.3.1 peerDependencies: "@octokit/core": ">=3" - checksum: 7bc7e294dd66af4b2692ce93d28544f2c3473b4fbe5d935cbe6f7765339e5a83bb12977a403af5d093e8fd038fa707bfd68f81b9d38d4038391de64be73d003c + checksum: 30fcc50c335d1093f03573d9fa3a4b7d027fc98b215c43e07e82ee8dabfa0af0cf1b963feb542312ae32d897a2f68dc671577206f30850215517bebedc5a2c73 languageName: node linkType: hard "@octokit/plugin-rest-endpoint-methods@npm:^6.0.0": - version: 6.3.0 - resolution: "@octokit/plugin-rest-endpoint-methods@npm:6.3.0" + version: 6.6.2 + resolution: "@octokit/plugin-rest-endpoint-methods@npm:6.6.2" dependencies: - "@octokit/types": ^7.0.0 + "@octokit/types": ^7.5.0 deprecation: ^2.3.1 peerDependencies: "@octokit/core": ">=3" - checksum: 8fefbdcfc16fe39aa216c440cf52c2861f6c0c905f1fdfbd0e720fb59815c079100b877535bcd428cb782ef31a8d508470d69d4ecf307b8af4ccc34a5669c050 + checksum: 3c3fe12e6f0463aeb77b6a7ea6da0b1928ed179b27745c778c32ead3796fe4352322dc103095d141d548aa6b0d91bb0196e4a2d5d60cd71fc820c3774e23c1f4 languageName: node linkType: hard @@ -12231,14 +11044,14 @@ __metadata: linkType: hard "@octokit/plugin-throttling@npm:^4.0.1": - version: 4.0.1 - resolution: "@octokit/plugin-throttling@npm:4.0.1" + version: 4.3.0 + resolution: "@octokit/plugin-throttling@npm:4.3.0" dependencies: - "@octokit/types": ^6.0.1 + "@octokit/types": ^7.0.0 bottleneck: ^2.15.3 peerDependencies: "@octokit/core": ^4.0.0 - checksum: 7642e5968922b8348510782e7675189810d6ed6cb3fc6ae231fd4614ebdb011759628c8f5fbca40f37e5a2cf69898b8b58cdb7722ae75da59012430c6cf7b4d8 + checksum: f2c23c070c9a1afee80a195a4da66dca568be40be3be5532bb32eabc0e22a53ab591f7109a9499ac9eaebbc873c08cca48c90e4f8af2e2010db5f8bd99e280ae languageName: node linkType: hard @@ -12264,7 +11077,7 @@ __metadata: languageName: node linkType: hard -"@octokit/request@npm:^5.4.12, @octokit/request@npm:^5.4.14, @octokit/request@npm:^5.6.0, @octokit/request@npm:^5.6.3": +"@octokit/request@npm:^5.6.0, @octokit/request@npm:^5.6.3": version: 5.6.3 resolution: "@octokit/request@npm:5.6.3" dependencies: @@ -12293,14 +11106,14 @@ __metadata: linkType: hard "@octokit/rest@npm:^18.1.0, @octokit/rest@npm:^18.5.3": - version: 18.5.6 - resolution: "@octokit/rest@npm:18.5.6" + version: 18.12.0 + resolution: "@octokit/rest@npm:18.12.0" dependencies: - "@octokit/core": ^3.2.3 - "@octokit/plugin-paginate-rest": ^2.6.2 - "@octokit/plugin-request-log": ^1.0.2 - "@octokit/plugin-rest-endpoint-methods": 5.3.1 - checksum: f8db5a06692515413b0124edec2b1d77b35bac99659d4b7b9df2aee01b6b145d7fd6deed602addc79d69429095f1d2fee627e9230cc108f1a389041ab270cb91 + "@octokit/core": ^3.5.1 + "@octokit/plugin-paginate-rest": ^2.16.8 + "@octokit/plugin-request-log": ^1.0.4 + "@octokit/plugin-rest-endpoint-methods": ^5.12.0 + checksum: c18bd6676a60b66819b016b0f969fcd04d8dfa04d01b7af9af9a7410ff028c621c995185e29454c23c47906da506c1e01620711259989a964ebbfd9106f5b715 languageName: node linkType: hard @@ -12325,16 +11138,7 @@ __metadata: languageName: node linkType: hard -"@octokit/types@npm:^6.0.0, @octokit/types@npm:^6.0.1, @octokit/types@npm:^6.10.0, @octokit/types@npm:^6.12.2, @octokit/types@npm:^6.14.2, @octokit/types@npm:^6.16.2, @octokit/types@npm:^6.8.2": - version: 6.16.4 - resolution: "@octokit/types@npm:6.16.4" - dependencies: - "@octokit/openapi-types": ^7.3.2 - checksum: 872dadb1566b874724e6b30a14cf91ae1a9f8664aaaa9d1bb94ce78466291d8cc83ca47aa5bb5baa6260e71fe42100c84f7d52c2df52938dbc9c86359c38cb70 - languageName: node - linkType: hard - -"@octokit/types@npm:^6.0.3, @octokit/types@npm:^6.16.1, @octokit/types@npm:^6.39.0": +"@octokit/types@npm:^6.0.3, @octokit/types@npm:^6.14.2, @octokit/types@npm:^6.16.1, @octokit/types@npm:^6.39.0, @octokit/types@npm:^6.40.0, @octokit/types@npm:^6.8.2": version: 6.41.0 resolution: "@octokit/types@npm:6.41.0" dependencies: @@ -12343,21 +11147,12 @@ __metadata: languageName: node linkType: hard -"@octokit/types@npm:^6.27.1": - version: 6.34.0 - resolution: "@octokit/types@npm:6.34.0" +"@octokit/types@npm:^7.0.0, @octokit/types@npm:^7.5.0": + version: 7.5.0 + resolution: "@octokit/types@npm:7.5.0" dependencies: - "@octokit/openapi-types": ^11.2.0 - checksum: f122b9aee8f6baddd515e34a0913e73b21d4bc82d6ee59d77a8aaf01b4a02c10867dd013003d087a83dc96db23511893669015af6d30c27cece185e21cf1df89 - languageName: node - linkType: hard - -"@octokit/types@npm:^7.0.0": - version: 7.0.0 - resolution: "@octokit/types@npm:7.0.0" - dependencies: - "@octokit/openapi-types": ^13.0.0 - checksum: 54d714c1e8296da7ff68eec6a72061313a3f4836793fe844a120aa8604336e03423c631d6316fa2ab00c34aae7a4be0ecb6aed192d04f891084e00674d176fcb + "@octokit/openapi-types": ^13.11.0 + checksum: ded2fa77d939e54e97c9561120c19990781686250a0fbb36c3c8fe63f2c6ab081eca065e67a830a5731e1f0d9a4b8a8c26f858e28e1beb0f0c31aed31284e087 languageName: node linkType: hard @@ -12395,12 +11190,11 @@ __metadata: linkType: hard "@openapi-contrib/openapi-schema-to-json-schema@npm:^3.0.0": - version: 3.0.3 - resolution: "@openapi-contrib/openapi-schema-to-json-schema@npm:3.0.3" + version: 3.2.0 + resolution: "@openapi-contrib/openapi-schema-to-json-schema@npm:3.2.0" dependencies: fast-deep-equal: ^3.1.3 - lodash.clonedeep: ^4.5.0 - checksum: 2296925669a4a78548f8ba055fbfc1f292274572ecb082d1465b6a6255799f43f0538880009bf4010b2fa9e7c84e97f8aa04d22b330fd469677c594ed98df314 + checksum: c47cbf85bee3e38e06a627efbbdffd78c95cdadebf6d935092c8ff616e31a69fcfd739a5d9cca5b4b2c6aef49f8dbced6c300eac1f8ade66b3fab403df19ccb2 languageName: node linkType: hard @@ -12442,20 +11236,20 @@ __metadata: linkType: hard "@opentelemetry/api@npm:^1.0.1": - version: 1.0.4 - resolution: "@opentelemetry/api@npm:1.0.4" - checksum: 793e9b5c21666b647a60c58c46c3e00ad1dac38505102b026ad0ef617571d637aca54a18533a73c1e288c95b5ac77e2db17f96467f11833ac1165338e1184260 + version: 1.2.0 + resolution: "@opentelemetry/api@npm:1.2.0" + checksum: 764efa81bf939200a8e80520a4735b23038abafc60c80420b007ae2bbb7ad843d806894414e95d974c2ef1b81d4ae8a3106804e1af7b5090240cfeb2467db099 languageName: node linkType: hard "@peculiar/asn1-schema@npm:^2.1.6": - version: 2.2.0 - resolution: "@peculiar/asn1-schema@npm:2.2.0" + version: 2.3.0 + resolution: "@peculiar/asn1-schema@npm:2.3.0" dependencies: asn1js: ^3.0.5 pvtsutils: ^1.3.2 tslib: ^2.4.0 - checksum: 83c8b4e82d8f829ece3ad1aa96d4e2f0c5f16a5255bb066a1174bd020b031d456469d82786a561e5758af0e56d0391ae5e8c6b3657e73d438f49998ff3cf471f + checksum: aa510c68de83be94a8d0e96ca1f7c92d2bd790867eed887c0db32d6b2fc49c5dd9d8269648e9665686ba9b2fd8469324c61e04fed50f7aad3f68a0ca0e1cde4b languageName: node linkType: hard @@ -12616,6 +11410,13 @@ __metadata: languageName: node linkType: hard +"@remix-run/router@npm:1.0.0": + version: 1.0.0 + resolution: "@remix-run/router@npm:1.0.0" + checksum: 2e7543c71432c49bc0e6cab287ce561c56bf33ad91f929cdbf4c9bd08636bc676f2bf6b048a95fc1f5c74c40600ab59ce248d1de34a1acb7c2e43f567b0e96b5 + languageName: node + linkType: hard + "@rjsf/core@npm:^3.2.1": version: 3.2.1 resolution: "@rjsf/core@npm:3.2.1" @@ -12824,17 +11625,7 @@ __metadata: languageName: node linkType: hard -"@rollup/pluginutils@npm:^4.1.1": - version: 4.1.1 - resolution: "@rollup/pluginutils@npm:4.1.1" - dependencies: - estree-walker: ^2.0.1 - picomatch: ^2.2.2 - checksum: 405f681c7d32661980aa3caa928ff22e1c06f0e081db1550e6ab9c179dc9d3d8d63c05dcc7338fe65ab3f856a56c465696a51300b83e98171956fcb141106e39 - languageName: node - linkType: hard - -"@rollup/pluginutils@npm:^4.2.1": +"@rollup/pluginutils@npm:^4.1.1, @rollup/pluginutils@npm:^4.2.1": version: 4.2.1 resolution: "@rollup/pluginutils@npm:4.2.1" dependencies: @@ -12844,9 +11635,9 @@ __metadata: languageName: node linkType: hard -"@rushstack/node-core-library@npm:3.45.4": - version: 3.45.4 - resolution: "@rushstack/node-core-library@npm:3.45.4" +"@rushstack/node-core-library@npm:3.51.2": + version: 3.51.2 + resolution: "@rushstack/node-core-library@npm:3.51.2" dependencies: "@types/node": 12.20.24 colors: ~1.2.1 @@ -12855,31 +11646,30 @@ __metadata: jju: ~1.4.0 resolve: ~1.17.0 semver: ~7.3.0 - timsort: ~0.3.0 z-schema: ~5.0.2 - checksum: f7049be8c145ef1d1ee2ee29b917440a3c88a5e4906c5b6bebe0d4c7854c93b759b7563475be383a4cedf8afd3914b34a6b988fe67b8dfce33545223b2a46cca + checksum: 0f9ac85fccc43220897a307f1b8612e319c49973a7435d43bc2252976d8c01d930bd9c04a6645d3199f39b7564e9c4edd9539b97556e702a339f4b57673d8797 languageName: node linkType: hard -"@rushstack/rig-package@npm:0.3.11": - version: 0.3.11 - resolution: "@rushstack/rig-package@npm:0.3.11" +"@rushstack/rig-package@npm:0.3.15": + version: 0.3.15 + resolution: "@rushstack/rig-package@npm:0.3.15" dependencies: resolve: ~1.17.0 strip-json-comments: ~3.1.1 - checksum: a6354152a9ac7503a217e7903d2739d35f305b2331f880fca94e6f309ba78e86b58fa8eda888238429bc4203a5cef4df4218f80e636fa75290e68875b971697a + checksum: dd3cfc679ca17d286273eb3e177456d5cae2a5c8d07d26a589f75903966932d985ccd4256b79d14da5b2a20c14c4b19975101db8849abe8c9484c0fa3650f7b8 languageName: node linkType: hard -"@rushstack/ts-command-line@npm:4.10.10": - version: 4.10.10 - resolution: "@rushstack/ts-command-line@npm:4.10.10" +"@rushstack/ts-command-line@npm:4.12.3": + version: 4.12.3 + resolution: "@rushstack/ts-command-line@npm:4.12.3" dependencies: "@types/argparse": 1.0.38 argparse: ~1.0.9 colors: ~1.2.1 string-argv: ~0.3.1 - checksum: e2d47cbe6df4c47e297ef84b83f1f6f2306ae14cd765066ea966f3e6ed48e1382d20c942a324ff9e389f5e673a9e1ba477f5b9514303709fcf85f28e14cdd26c + checksum: d1aa2e4e84801653f0805cdd260b333508c3de37716fe3df77a69ea0d9b59c870054724afd52aa09d64e45c717b62e1bb1072117b2884b6c799ac885cc71480c languageName: node linkType: hard @@ -12894,12 +11684,12 @@ __metadata: languageName: node linkType: hard -"@sideway/address@npm:^4.1.0": - version: 4.1.1 - resolution: "@sideway/address@npm:4.1.1" +"@sideway/address@npm:^4.1.3": + version: 4.1.4 + resolution: "@sideway/address@npm:4.1.4" dependencies: "@hapi/hoek": ^9.0.0 - checksum: 0a86af89c12d19836ed1e57ad35db6f62711259ed02b2879c5ebac58abdc57e3cd1bffd89dd5c727e57015f13610d788d814ead7b1289c776b32706768daab45 + checksum: b9fca2a93ac2c975ba12e0a6d97853832fb1f4fb02393015e012b47fa916a75ca95102d77214b2a29a2784740df2407951af8c5dde054824c65577fd293c4cdb languageName: node linkType: hard @@ -12917,10 +11707,17 @@ __metadata: languageName: node linkType: hard +"@sinclair/typebox@npm:^0.24.1": + version: 0.24.42 + resolution: "@sinclair/typebox@npm:0.24.42" + checksum: 83a3083b71063ad270669308634f7c5b473272da71cbc405343b2ff774d641ec2be0993e0a61386f8ef3f8b786c173dc01921a5bc6627d95657eb98f19f1a4c4 + languageName: node + linkType: hard + "@sindresorhus/is@npm:^4.0.0": - version: 4.0.0 - resolution: "@sindresorhus/is@npm:4.0.0" - checksum: 0e010f79820099b0a7cb8e1c982f822fc4407ff65d2898708b04e1675949eb6885a470fd7274843f83b84e0d3b74fe0de1ff9291d66553228d68202daca5bbaf + version: 4.6.0 + resolution: "@sindresorhus/is@npm:4.6.0" + checksum: 83839f13da2c29d55c97abc3bc2c55b250d33a0447554997a85c539e058e57b8da092da396e252b11ec24a0279a0bed1f537fa26302209327060643e327f81d2 languageName: node linkType: hard @@ -12963,50 +11760,50 @@ __metadata: linkType: hard "@sinonjs/text-encoding@npm:^0.7.1": - version: 0.7.1 - resolution: "@sinonjs/text-encoding@npm:0.7.1" - checksum: 130de0bb568c5f8a611ec21d1a4e3f80ab0c5ec333010f49cfc1adc5cba6d8808699c8a587a46b0f0b016a1f4c1389bc96141e773e8460fcbb441875b2e91ba7 + version: 0.7.2 + resolution: "@sinonjs/text-encoding@npm:0.7.2" + checksum: fe690002a32ba06906cf87e2e8fe84d1590294586f2a7fd180a65355b53660c155c3273d8011a5f2b77209b819aa7306678ae6e4aea0df014bd7ffd4bbbcf1ab languageName: node linkType: hard "@spotify/eslint-config-base@npm:^14.0.0": - version: 14.0.1 - resolution: "@spotify/eslint-config-base@npm:14.0.1" + version: 14.1.0 + resolution: "@spotify/eslint-config-base@npm:14.1.0" peerDependencies: eslint: ">=7.x" - checksum: 8893e7c903c07ede7f3a03b5b6af03b65d2f334615d30fecb527ce4d888970168b73dbaef43275f9ece9e7b0193e13e6807e506507b32bdde9b64000cc52c8b1 + checksum: 41a7688c77bee908529a86b6a7a1e7c2e4f392f768b2f1db675ec53a5213cc0b9d4eaafc04048d2ca35fe1ee8b39c79c19db1fb9bf6afc4aa14c1bfde134b4e7 languageName: node linkType: hard "@spotify/eslint-config-react@npm:^14.0.0": - version: 14.0.1 - resolution: "@spotify/eslint-config-react@npm:14.0.1" + version: 14.1.0 + resolution: "@spotify/eslint-config-react@npm:14.1.0" peerDependencies: eslint: ">=8.x" eslint-plugin-jsx-a11y: 6.x eslint-plugin-react: ">=7.7.0 <8" eslint-plugin-react-hooks: ^4.0.0 - checksum: d8545c3c3967bb8b923bd55dad2c50b5e2eb6d716cd9dcbbfa32417c3a6e786537ee3263ebedae99bd45abe3378acb0879c9644a729820ea61dd5d9e45e55465 + checksum: d4e54469594b92f7e09b94ca5c1bff3a9398eb3a92c93c02f29bd63fe82a0eb30c730da3d30127f9ad599d11815479fd5e9b120816839a37d89449dc444c12f6 languageName: node linkType: hard "@spotify/eslint-config-typescript@npm:^14.0.0": - version: 14.0.1 - resolution: "@spotify/eslint-config-typescript@npm:14.0.1" + version: 14.1.0 + resolution: "@spotify/eslint-config-typescript@npm:14.1.0" peerDependencies: "@typescript-eslint/eslint-plugin": ">=5" "@typescript-eslint/parser": ">=5" eslint: ">=8.x" - checksum: faf3ab89880e626d388e9ae212dd3486d6f91ca4d079020066c22d44c3df215dc61439c4e65ef3fc4eb5c3ea9893d5b504a2d251694d7a333d8803991349535b + checksum: 3350bda1fb567658f52f55ad97bc1fc2c929afbd7fadf6a6ce58e1ab8d632f61bcc0b049871b95454455e3bffdd25fd23841608c82a1a8482314eebbc7a135ae languageName: node linkType: hard "@spotify/prettier-config@npm:^14.0.0": - version: 14.0.1 - resolution: "@spotify/prettier-config@npm:14.0.1" + version: 14.1.0 + resolution: "@spotify/prettier-config@npm:14.1.0" peerDependencies: prettier: 2.x - checksum: 07fb33ff3bb4678ab3bfe2f6f5da2cfb366de427c544e94178f5f8c75b3708282f7ea1a4344404e4ad1bbc5b38fccfde10795528cdfe7f61a8afed62076f8fe9 + checksum: e3ab33524944bbf424b38ee1a22fae42442997f3288208b0933f1d9aa0db258540a188e7695be842c00cbda0321a335f74a171204f4b9d90a75187f303a92b17 languageName: node linkType: hard @@ -13201,126 +11998,126 @@ __metadata: languageName: node linkType: hard -"@swc/core-android-arm-eabi@npm:1.2.249": - version: 1.2.249 - resolution: "@swc/core-android-arm-eabi@npm:1.2.249" +"@swc/core-android-arm-eabi@npm:1.3.1": + version: 1.3.1 + resolution: "@swc/core-android-arm-eabi@npm:1.3.1" dependencies: "@swc/wasm": 1.2.122 conditions: os=android & cpu=arm languageName: node linkType: hard -"@swc/core-android-arm64@npm:1.2.249": - version: 1.2.249 - resolution: "@swc/core-android-arm64@npm:1.2.249" +"@swc/core-android-arm64@npm:1.3.1": + version: 1.3.1 + resolution: "@swc/core-android-arm64@npm:1.3.1" dependencies: "@swc/wasm": 1.2.130 conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.2.249": - version: 1.2.249 - resolution: "@swc/core-darwin-arm64@npm:1.2.249" +"@swc/core-darwin-arm64@npm:1.3.1": + version: 1.3.1 + resolution: "@swc/core-darwin-arm64@npm:1.3.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.2.249": - version: 1.2.249 - resolution: "@swc/core-darwin-x64@npm:1.2.249" +"@swc/core-darwin-x64@npm:1.3.1": + version: 1.3.1 + resolution: "@swc/core-darwin-x64@npm:1.3.1" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-freebsd-x64@npm:1.2.249": - version: 1.2.249 - resolution: "@swc/core-freebsd-x64@npm:1.2.249" +"@swc/core-freebsd-x64@npm:1.3.1": + version: 1.3.1 + resolution: "@swc/core-freebsd-x64@npm:1.3.1" dependencies: "@swc/wasm": 1.2.130 conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.2.249": - version: 1.2.249 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.2.249" +"@swc/core-linux-arm-gnueabihf@npm:1.3.1": + version: 1.3.1 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.1" dependencies: "@swc/wasm": 1.2.130 conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.2.249": - version: 1.2.249 - resolution: "@swc/core-linux-arm64-gnu@npm:1.2.249" +"@swc/core-linux-arm64-gnu@npm:1.3.1": + version: 1.3.1 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.1" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.2.249": - version: 1.2.249 - resolution: "@swc/core-linux-arm64-musl@npm:1.2.249" +"@swc/core-linux-arm64-musl@npm:1.3.1": + version: 1.3.1 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.1" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.2.249": - version: 1.2.249 - resolution: "@swc/core-linux-x64-gnu@npm:1.2.249" +"@swc/core-linux-x64-gnu@npm:1.3.1": + version: 1.3.1 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.1" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.2.249": - version: 1.2.249 - resolution: "@swc/core-linux-x64-musl@npm:1.2.249" +"@swc/core-linux-x64-musl@npm:1.3.1": + version: 1.3.1 + resolution: "@swc/core-linux-x64-musl@npm:1.3.1" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.2.249": - version: 1.2.249 - resolution: "@swc/core-win32-arm64-msvc@npm:1.2.249" +"@swc/core-win32-arm64-msvc@npm:1.3.1": + version: 1.3.1 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.1" dependencies: "@swc/wasm": 1.2.130 conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.2.249": - version: 1.2.249 - resolution: "@swc/core-win32-ia32-msvc@npm:1.2.249" +"@swc/core-win32-ia32-msvc@npm:1.3.1": + version: 1.3.1 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.1" dependencies: "@swc/wasm": 1.2.130 conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.2.249": - version: 1.2.249 - resolution: "@swc/core-win32-x64-msvc@npm:1.2.249" +"@swc/core-win32-x64-msvc@npm:1.3.1": + version: 1.3.1 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.2.239": - version: 1.2.249 - resolution: "@swc/core@npm:1.2.249" + version: 1.3.1 + resolution: "@swc/core@npm:1.3.1" dependencies: - "@swc/core-android-arm-eabi": 1.2.249 - "@swc/core-android-arm64": 1.2.249 - "@swc/core-darwin-arm64": 1.2.249 - "@swc/core-darwin-x64": 1.2.249 - "@swc/core-freebsd-x64": 1.2.249 - "@swc/core-linux-arm-gnueabihf": 1.2.249 - "@swc/core-linux-arm64-gnu": 1.2.249 - "@swc/core-linux-arm64-musl": 1.2.249 - "@swc/core-linux-x64-gnu": 1.2.249 - "@swc/core-linux-x64-musl": 1.2.249 - "@swc/core-win32-arm64-msvc": 1.2.249 - "@swc/core-win32-ia32-msvc": 1.2.249 - "@swc/core-win32-x64-msvc": 1.2.249 + "@swc/core-android-arm-eabi": 1.3.1 + "@swc/core-android-arm64": 1.3.1 + "@swc/core-darwin-arm64": 1.3.1 + "@swc/core-darwin-x64": 1.3.1 + "@swc/core-freebsd-x64": 1.3.1 + "@swc/core-linux-arm-gnueabihf": 1.3.1 + "@swc/core-linux-arm64-gnu": 1.3.1 + "@swc/core-linux-arm64-musl": 1.3.1 + "@swc/core-linux-x64-gnu": 1.3.1 + "@swc/core-linux-x64-musl": 1.3.1 + "@swc/core-win32-arm64-msvc": 1.3.1 + "@swc/core-win32-ia32-msvc": 1.3.1 + "@swc/core-win32-x64-msvc": 1.3.1 dependenciesMeta: "@swc/core-android-arm-eabi": optional: true @@ -13350,7 +12147,7 @@ __metadata: optional: true bin: swcx: run_swcx.js - checksum: c47f17fefccd94fb7be3787e832f3e3fd62c07e22f8bf566435bd1de032efd9fdefb4a64e0eefd684a9a24902509a235afeacb5ed93e03512fa09064bf1e1268 + checksum: 68e0dcaf4dc8f5ad0e5d7181f3b095ca78afd8c9de5464fbf3c569eb371845beac35239e700da0c6ec1e09415a98c73fbba21ace278b21bc7aaa079e6544c73a languageName: node linkType: hard @@ -13389,27 +12186,26 @@ __metadata: linkType: hard "@szmarczak/http-timer@npm:^4.0.5": - version: 4.0.5 - resolution: "@szmarczak/http-timer@npm:4.0.5" + version: 4.0.6 + resolution: "@szmarczak/http-timer@npm:4.0.6" dependencies: defer-to-connect: ^2.0.0 - checksum: 27b713859bc7d370f81631eea99879a9d496e1def5d33752fccd6c80dba32cde2094f378c8d07d56f236b08afb4b3621fbf6254faaca52b1a8146ece1eba8428 + checksum: c29df3bcec6fc3bdec2b17981d89d9c9fc9bd7d0c9bcfe92821dc533f4440bc890ccde79971838b4ceed1921d456973c4180d7175ee1d0023ad0562240a58d95 languageName: node linkType: hard -"@tanstack/query-core@npm:4.2.3": - version: 4.2.3 - resolution: "@tanstack/query-core@npm:4.2.3" - checksum: b37efdc32b1731575eba398eda3b7a4cd3ed25ee1032d5200124c37ab4e58711d310e2e29e9e51284553a7c03c85e55cf8da6833bc3b1e215e0e43e7399ab3ca +"@tanstack/query-core@npm:4.3.4": + version: 4.3.4 + resolution: "@tanstack/query-core@npm:4.3.4" + checksum: d8cbe18a297114a0e63f3a9bbf0885d8f0a9ff081edf79cc98c59ca555511bfc824dc82da82826dcb870c076224ead1a4420bea505ae10baf406b6400bf1b46d languageName: node linkType: hard "@tanstack/react-query@npm:^4.1.3": - version: 4.2.3 - resolution: "@tanstack/react-query@npm:4.2.3" + version: 4.3.4 + resolution: "@tanstack/react-query@npm:4.3.4" dependencies: - "@tanstack/query-core": 4.2.3 - "@types/use-sync-external-store": ^0.0.3 + "@tanstack/query-core": 4.3.4 use-sync-external-store: ^1.2.0 peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -13420,7 +12216,7 @@ __metadata: optional: true react-native: optional: true - checksum: 0a38ae05271e1669c6efd5cc77608103b6dfde577ecdc88c3f0e72953aea11c102c9b5a49fa2ca822f260a68f9f9646c5e847e7d87c99117b2c2e3b1356cbc8b + checksum: 87c43ec85c34bff97f315167554c970d2428391df8f2e2dee8e562ec7f4f7724babc770c24ea8a0714b3d3144fb8b0e0cd65325150c395ca5057245bd44cc813 languageName: node linkType: hard @@ -13472,8 +12268,8 @@ __metadata: linkType: hard "@testing-library/dom@npm:^8.0.0, @testing-library/dom@npm:^8.1.0": - version: 8.11.3 - resolution: "@testing-library/dom@npm:8.11.3" + version: 8.18.0 + resolution: "@testing-library/dom@npm:8.18.0" dependencies: "@babel/code-frame": ^7.10.4 "@babel/runtime": ^7.12.5 @@ -13483,7 +12279,7 @@ __metadata: dom-accessibility-api: ^0.5.9 lz-string: ^1.4.4 pretty-format: ^27.0.2 - checksum: 2245d254b6058590e25de86fb7b3c75e4a31096901a191f80d3efb9fa7e1e273043416f370c8770feb9f3ccc73a1550a877a3b003b593f1728ae828fcb52cd62 + checksum: 24fd4fad91a5939a300f8a6c0c79d49dc7576823a2c0713d8ee67fea4f41e47e6a3122c04d45cc2844a25ed12bbe59a299d1e2055d53c707c8cad4d672767d13 languageName: node linkType: hard @@ -13541,11 +12337,11 @@ __metadata: linkType: hard "@testing-library/user-event@npm:^14.0.0": - version: 14.3.0 - resolution: "@testing-library/user-event@npm:14.3.0" + version: 14.4.3 + resolution: "@testing-library/user-event@npm:14.4.3" peerDependencies: "@testing-library/dom": ">=7.21.4" - checksum: cbd5954460496519cb2ff3fa506ca598d7e4c2e3d2f2e129b21909758f5ec87573aad7d6c79aebffd4bd0ea843315b3064a2a76e545f196bd4c82489cb3afc1d + checksum: 852c48ea6db1c9471b18276617c84fec4320771e466cd58339a732ca3fd73ad35e5a43ae14f51af51a8d0a150dcf60fcaab049ef367871207bea8f92c4b8195e languageName: node linkType: hard @@ -13664,16 +12460,16 @@ __metadata: linkType: hard "@types/aria-query@npm:^4.2.0": - version: 4.2.0 - resolution: "@types/aria-query@npm:4.2.0" - checksum: e4a3748c5511deb88e93c6faf2acb0730233ff75018e9aaed95e3d2833880e9d0eda7e08e4315a827872471779471585671d08bae00ac8b9813fc140194b52e5 + version: 4.2.2 + resolution: "@types/aria-query@npm:4.2.2" + checksum: 6f2ce11d91e2d665f3873258db19da752d91d85d3679eb5efcdf9c711d14492287e1e4eb52613b28e60375841a9e428594e745b68436c963d8bad4bf72188df3 languageName: node linkType: hard "@types/aws-lambda@npm:^8.10.83": - version: 8.10.92 - resolution: "@types/aws-lambda@npm:8.10.92" - checksum: 71c44d83a1c88aa6dbc920baedfb2d100b8843a3d210c695ccaafb30dfb75f04398b0e5368100022acbf75c55d456c61774242f20dd70915fc63d85430cbcf8a + version: 8.10.104 + resolution: "@types/aws-lambda@npm:8.10.104" + checksum: a4f0f7e088819d86e289af9d0a2c4066afbf5ee9f0589e212bbac70c3c4d83297c2ae5c354ae3b4d10815785e3dc1517f604ead021b524888db9176e8fdbb511 languageName: node linkType: hard @@ -13686,57 +12482,44 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:^7.0.0": - version: 7.1.9 - resolution: "@types/babel__core@npm:7.1.9" +"@types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.14": + version: 7.1.19 + resolution: "@types/babel__core@npm:7.1.19" dependencies: "@babel/parser": ^7.1.0 "@babel/types": ^7.0.0 "@types/babel__generator": "*" "@types/babel__template": "*" "@types/babel__traverse": "*" - checksum: d92c530efc3e50147f7956fc2aa49162508d2c5abffea7818051dfa9a9c9bc263b7d3da7d6fa826669ff8c68d733bbaced2dfdd486282b8bd013ccc3a0a3b7f6 - languageName: node - linkType: hard - -"@types/babel__core@npm:^7.1.14": - version: 7.1.18 - resolution: "@types/babel__core@npm:7.1.18" - dependencies: - "@babel/parser": ^7.1.0 - "@babel/types": ^7.0.0 - "@types/babel__generator": "*" - "@types/babel__template": "*" - "@types/babel__traverse": "*" - checksum: 2e5b5d7c84f347d3789575486e58b0df5c91613abc3d27e716274aba3048518e07e1f068250ba829e2ed58532ccc88da595ce95ba2688e7bbcd7c25a3c6627ed + checksum: 8c9fa87a1c2224cbec251683a58bebb0d74c497118034166aaa0491a4e2627998a6621fc71f8a60ffd27d9c0c52097defedf7637adc6618d0331c15adb302338 languageName: node linkType: hard "@types/babel__generator@npm:*": - version: 7.6.1 - resolution: "@types/babel__generator@npm:7.6.1" + version: 7.6.4 + resolution: "@types/babel__generator@npm:7.6.4" dependencies: "@babel/types": ^7.0.0 - checksum: d4b1f967fdf3fcc9648bce12ed3de5492abe645c643be36a3ce348051a7da405f2fea504821468a99bfb2089e622faa1fa85688ceb482bb6c8c4af85db31a752 + checksum: 20effbbb5f8a3a0211e95959d06ae70c097fb6191011b73b38fe86deebefad8e09ee014605e0fd3cdaedc73d158be555866810e9166e1f09e4cfd880b874dcb0 languageName: node linkType: hard "@types/babel__template@npm:*": - version: 7.0.2 - resolution: "@types/babel__template@npm:7.0.2" + version: 7.4.1 + resolution: "@types/babel__template@npm:7.4.1" dependencies: "@babel/parser": ^7.1.0 "@babel/types": ^7.0.0 - checksum: ce04f0ab702d7d4c753c09e08db3e61e5fc69375ea70f5c991110511b7286124070ca70e260e8074614f8a339424de7e387c08033eaf0a9f5c81a93e350965a8 + checksum: 649fe8b42c2876be1fd28c6ed9b276f78152d5904ec290b6c861d9ef324206e0a5c242e8305c421ac52ecf6358fa7e32ab7a692f55370484825c1df29b1596ee languageName: node linkType: hard "@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.4, @types/babel__traverse@npm:^7.0.6": - version: 7.0.15 - resolution: "@types/babel__traverse@npm:7.0.15" + version: 7.18.1 + resolution: "@types/babel__traverse@npm:7.18.1" dependencies: "@babel/types": ^7.3.0 - checksum: 6a45519ebf58e6b1197a0177211099fc3ed613d2a435cf9470c39217af35f29013f7984e1f8c2e160a93b588767cfbbcf0d7f77eae399dfcca18d5257f04cbc2 + checksum: a7158b13e5e4b844565217d04a0a09c1cf04e67de90972318960028effbd5e7400f2567b72c5f790acffdab9b4adce8d68f435a2f0c2b16e2c9c45994ace98f2 languageName: node linkType: hard @@ -13776,30 +12559,23 @@ __metadata: linkType: hard "@types/cacheable-request@npm:^6.0.1": - version: 6.0.1 - resolution: "@types/cacheable-request@npm:6.0.1" + version: 6.0.2 + resolution: "@types/cacheable-request@npm:6.0.2" dependencies: "@types/http-cache-semantics": "*" "@types/keyv": "*" "@types/node": "*" "@types/responselike": "*" - checksum: c25b1bfa2f4f2cc1ca8e1bebad99f2e2c502a3fc09b5270765bfd6b57b1b73b9fab7127acb618beb04c646534a21c62b052aa6942bdfc461ee49387ec9975cd5 - languageName: node - linkType: hard - -"@types/caseless@npm:*": - version: 0.12.2 - resolution: "@types/caseless@npm:0.12.2" - checksum: 430d15911184ad11e0a8aa21d1ec15fcc93b90b63570c37bf16ebd34457482bfc8de3f5eb6771e0ef986ce183270d4297823b0f492c346255967e78f7292388b + checksum: 667d25808dbf46fe104d6f029e0281ff56058d50c7c1b9182774b3e38bb9c1124f56e4c367ba54f92dbde2d1cc573f26eb0e9748710b2822bc0fd1e5498859c6 languageName: node linkType: hard "@types/classnames@npm:^2.2.9": - version: 2.3.1 - resolution: "@types/classnames@npm:2.3.1" + version: 2.3.0 + resolution: "@types/classnames@npm:2.3.0" dependencies: classnames: "*" - checksum: 09a17ea08fcb83380921efdfdac94cfa162f87025cae0bf6f4ba508c2fa5f436459ce7612905a3f968fdddb68c03b8e6ff08e762ed2d0c110c5c4fceb244dc55 + checksum: e1bd6de60fc5e4ead601838078b10f378d6a66ad21112922856de59a1f450b1361f597aa3ca34f2cc33bc030f950112872fddfde43c5189bec89737a8b237f24 languageName: node linkType: hard @@ -13882,11 +12658,11 @@ __metadata: linkType: hard "@types/connect@npm:*": - version: 3.4.33 - resolution: "@types/connect@npm:3.4.33" + version: 3.4.35 + resolution: "@types/connect@npm:3.4.35" dependencies: "@types/node": "*" - checksum: 1220403e0cd05c6f51c03b83eed0f4e086f252d50c13279effd38d8bfea5cae82db012b134d31004cb8e4705f83d8ad62dddd71028baa190bf6f31c8d9ac916b + checksum: fe81351470f2d3165e8b12ce33542eef89ea893e36dd62e8f7d72566dfb7e448376ae962f9f3ea888547ce8b55a40020ca0e01d637fab5d99567673084542641 languageName: node linkType: hard @@ -13907,9 +12683,9 @@ __metadata: linkType: hard "@types/cookiejar@npm:*": - version: 2.1.1 - resolution: "@types/cookiejar@npm:2.1.1" - checksum: 7b2967a3344e8e646e79e1dc09ef30a70c4ceeb348364c4eb75b56e2f2e695605fbddd40a50f468b2b5932d2ffb58694ba550f0f52d074c972023910c77de2f6 + version: 2.1.2 + resolution: "@types/cookiejar@npm:2.1.2" + checksum: f6e1903454007f86edd6c3520cbb4d553e1d4e17eaf1f77f6f75e3270f48cc828d74397a113a36942f5fe52f9fa71067bcfa738f53ad468fcca0bc52cb1cbd28 languageName: node linkType: hard @@ -13938,16 +12714,9 @@ __metadata: linkType: hard "@types/d3-color@npm:*": - version: 3.0.2 - resolution: "@types/d3-color@npm:3.0.2" - checksum: 9009aa52e41638442ca4884666e694f177b650b46df5d2495f80437659545c9f3afd598ab95c4ff6d0d13e445df4bd893a89887ca3d34239279a37215d148873 - languageName: node - linkType: hard - -"@types/d3-color@npm:^2": - version: 2.0.3 - resolution: "@types/d3-color@npm:2.0.3" - checksum: b4a963b15f4fe0e7e49b0898df3e51b46392d91c21038b7ec61aef0f13e04bd7bcfebf06c9fad9ee92317c9682a105e18942c9295a7e2715855622d4d6fc415a + version: 3.1.0 + resolution: "@types/d3-color@npm:3.1.0" + checksum: b1856f17d6366559a68eaba0164f30727e9dc5eaf1b3a6c8844354da228860240423d19fa4de65bff9da26b4ead8843eab14b1566962665412e8fd82c3810554 languageName: node linkType: hard @@ -13958,7 +12727,7 @@ __metadata: languageName: node linkType: hard -"@types/d3-interpolate@npm:*": +"@types/d3-interpolate@npm:*, @types/d3-interpolate@npm:^3.0.1": version: 3.0.1 resolution: "@types/d3-interpolate@npm:3.0.1" dependencies: @@ -13967,15 +12736,6 @@ __metadata: languageName: node linkType: hard -"@types/d3-interpolate@npm:^2.0.0": - version: 2.0.2 - resolution: "@types/d3-interpolate@npm:2.0.2" - dependencies: - "@types/d3-color": ^2 - checksum: 78c47193da3c114a7d78580c6f8d9915f11df92ce78fe08d13052cf49fab91dcdca938895a778cdc6f9820ebf16df3e0e339c17491a8c2b1140cdd2e09553084 - languageName: node - linkType: hard - "@types/d3-path@npm:*": version: 3.0.0 resolution: "@types/d3-path@npm:3.0.0" @@ -13990,19 +12750,12 @@ __metadata: languageName: node linkType: hard -"@types/d3-path@npm:^2": - version: 2.0.1 - resolution: "@types/d3-path@npm:2.0.1" - checksum: 2fe04503ec56de47e2b8482e5a55e2eaf2940444f2cea00a5fb740d52d24bddfe13e900e392c1edebf2127b11557db09aeae6f5669f49a35caac4fe1a9d43b84 - languageName: node - linkType: hard - -"@types/d3-scale@npm:^3.0.0": - version: 3.3.2 - resolution: "@types/d3-scale@npm:3.3.2" +"@types/d3-scale@npm:^4.0.2": + version: 4.0.2 + resolution: "@types/d3-scale@npm:4.0.2" dependencies: - "@types/d3-time": ^2 - checksum: 65dbf85f07a4d6ac26396075b0faa1930cfebb96dc248629d4b82c22457c89161d0f070f9a5554adccee80b959e2c6d7c1ef6b7355743afe91050d71014fe3cf + "@types/d3-time": "*" + checksum: 6b3c0337f38f82b582d9f3190fde82edfce7ffafb371e5b2464c443137c2660bac644099d259f1f5cc829085eb5688bed0bea2b336a957d0845433bd07bf2ddd languageName: node linkType: hard @@ -14022,16 +12775,7 @@ __metadata: languageName: node linkType: hard -"@types/d3-shape@npm:^2.0.0": - version: 2.1.3 - resolution: "@types/d3-shape@npm:2.1.3" - dependencies: - "@types/d3-path": ^2 - checksum: d0855a1e2c11a4ab23367c86ef0cc104e12bf216f2c007fa5955da7179b60b0426d0e9ddbbbdf93d4342e7dd24c7bcfc3a2bc6258744e03fc44ca460a063dcc3 - languageName: node - linkType: hard - -"@types/d3-shape@npm:^3.0.1": +"@types/d3-shape@npm:^3.0.1, @types/d3-shape@npm:^3.1.0": version: 3.1.0 resolution: "@types/d3-shape@npm:3.1.0" dependencies: @@ -14040,10 +12784,10 @@ __metadata: languageName: node linkType: hard -"@types/d3-time@npm:^2": - version: 2.1.1 - resolution: "@types/d3-time@npm:2.1.1" - checksum: 115048d0cd312a3172ef7c03615dfbdbd8b92a93fd7b6d9ca93c49c704fcdb9575f4c57955eb54eb757b9834acaaf47fc52eae103d06246c59ae120de4559cbc +"@types/d3-time@npm:*": + version: 3.0.0 + resolution: "@types/d3-time@npm:3.0.0" + checksum: e76adb056daccf80107f4db190ac6deb77e8774f00362bb6c76f178e67f2f217422fe502b654edbc9ac6451f6619045b9f6f5fe0db1ec5520e2ada377af7c72e languageName: node linkType: hard @@ -14064,7 +12808,7 @@ __metadata: languageName: node linkType: hard -"@types/debug@npm:^4.0.0": +"@types/debug@npm:^4.0.0, @types/debug@npm:^4.1.7": version: 4.1.7 resolution: "@types/debug@npm:4.1.7" dependencies: @@ -14110,12 +12854,12 @@ __metadata: linkType: hard "@types/eslint-scope@npm:^3.7.3": - version: 3.7.3 - resolution: "@types/eslint-scope@npm:3.7.3" + version: 3.7.4 + resolution: "@types/eslint-scope@npm:3.7.4" dependencies: "@types/eslint": "*" "@types/estree": "*" - checksum: 6772b05e1b92003d1f295e81bc847a61f4fbe8ddab77ffa49e84ed3f9552513bdde677eb53ef167753901282857dd1d604d9f82eddb34a233495932b2dc3dc17 + checksum: ea6a9363e92f301cd3888194469f9ec9d0021fe0a397a97a6dd689e7545c75de0bd2153dfb13d3ab532853a278b6572c6f678ce846980669e41029d205653460 languageName: node linkType: hard @@ -14129,10 +12873,10 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:*, @types/estree@npm:^0.0.51": - version: 0.0.51 - resolution: "@types/estree@npm:0.0.51" - checksum: e56a3bcf759fd9185e992e7fdb3c6a5f81e8ff120e871641607581fb3728d16c811702a7d40fa5f869b7f7b4437ab6a87eb8d98ffafeee51e85bbe955932a189 +"@types/estree@npm:*": + version: 1.0.0 + resolution: "@types/estree@npm:1.0.0" + checksum: 910d97fb7092c6738d30a7430ae4786a38542023c6302b95d46f49420b797f21619cdde11fa92b338366268795884111c2eb10356e4bd2c8ad5b92941e9e6443 languageName: node linkType: hard @@ -14143,6 +12887,13 @@ __metadata: languageName: node linkType: hard +"@types/estree@npm:^0.0.51": + version: 0.0.51 + resolution: "@types/estree@npm:0.0.51" + checksum: e56a3bcf759fd9185e992e7fdb3c6a5f81e8ff120e871641607581fb3728d16c811702a7d40fa5f869b7f7b4437ab6a87eb8d98ffafeee51e85bbe955932a189 + languageName: node + linkType: hard + "@types/event-source-polyfill@npm:^1.0.0": version: 1.0.0 resolution: "@types/event-source-polyfill@npm:1.0.0" @@ -14157,14 +12908,14 @@ __metadata: languageName: node linkType: hard -"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.18": - version: 4.17.29 - resolution: "@types/express-serve-static-core@npm:4.17.29" +"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.18, @types/express-serve-static-core@npm:^4.17.5": + version: 4.17.31 + resolution: "@types/express-serve-static-core@npm:4.17.31" dependencies: "@types/node": "*" "@types/qs": "*" "@types/range-parser": "*" - checksum: ec4194dc59276ec6dd906887fc377be0cadf4aaa4d535d9052ab9624937ef2b984a8d9da2c11c96979e21f3d9f78f1da93e767dbcec637f7f13d2e3003151145 + checksum: 009bfbe1070837454a1056aa710d0390ee5fb8c05dfe5a1691cc3e2ca88dc256f80e1ca27cb51a978681631d2f6431bfc9ec352ea46dd0c6eb183d0170bde5df languageName: node linkType: hard @@ -14179,17 +12930,6 @@ __metadata: languageName: node linkType: hard -"@types/express-serve-static-core@npm:^4.17.5": - version: 4.17.31 - resolution: "@types/express-serve-static-core@npm:4.17.31" - dependencies: - "@types/node": "*" - "@types/qs": "*" - "@types/range-parser": "*" - checksum: 009bfbe1070837454a1056aa710d0390ee5fb8c05dfe5a1691cc3e2ca88dc256f80e1ca27cb51a978681631d2f6431bfc9ec352ea46dd0c6eb183d0170bde5df - languageName: node - linkType: hard - "@types/express-session@npm:^1.17.2": version: 1.17.5 resolution: "@types/express-session@npm:1.17.5" @@ -14209,7 +12949,19 @@ __metadata: languageName: node linkType: hard -"@types/express@npm:*, @types/express@npm:4.17.13, @types/express@npm:^4.17.13, @types/express@npm:^4.17.6": +"@types/express@npm:*, @types/express@npm:^4.17.13, @types/express@npm:^4.17.6": + version: 4.17.14 + resolution: "@types/express@npm:4.17.14" + dependencies: + "@types/body-parser": "*" + "@types/express-serve-static-core": ^4.17.18 + "@types/qs": "*" + "@types/serve-static": "*" + checksum: 15c1af46d02de834e4a225eccaa9d85c0370fdbb3ed4e1bc2d323d24872309961542b993ae236335aeb3e278630224a6ea002078d39e651d78a3b0356b1eaa79 + languageName: node + linkType: hard + +"@types/express@npm:4.17.13": version: 4.17.13 resolution: "@types/express@npm:4.17.13" dependencies: @@ -14245,12 +12997,12 @@ __metadata: linkType: hard "@types/glob@npm:*": - version: 7.1.3 - resolution: "@types/glob@npm:7.1.3" + version: 8.0.0 + resolution: "@types/glob@npm:8.0.0" dependencies: "@types/minimatch": "*" "@types/node": "*" - checksum: e0eef12285f548f15d887145590594a04ccce7f7e645fb047cbac18cb093f25d507ffbcc725312294c224bb78cf980fce33e5807de8d6f8a868b4186253499d4 + checksum: 1817b05f5a8aed851d102a65b5e926d5c777bef927ea62b36d635860eef5364f2046bb5a692d135b6f2b28f34e4a9d44ade9396122c0845bcc7636d35f624747 languageName: node linkType: hard @@ -14306,9 +13058,9 @@ __metadata: linkType: hard "@types/http-cache-semantics@npm:*": - version: 4.0.0 - resolution: "@types/http-cache-semantics@npm:4.0.0" - checksum: c820774eb1d9d8d0c13077834e870cc1afd2500dc9d0ac1b67abc050c7c115aee4024f90fda65b50babc258de0464fc4459709e4fa12552f65094328e5a551c6 + version: 4.0.1 + resolution: "@types/http-cache-semantics@npm:4.0.1" + checksum: 1048aacf627829f0d5f00184e16548205cd9f964bf0841c29b36bc504509230c40bc57c39778703a1c965a6f5b416ae2cbf4c1d4589c889d2838dd9dbfccf6e9 languageName: node linkType: hard @@ -14365,9 +13117,9 @@ __metadata: linkType: hard "@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": - version: 2.0.1 - resolution: "@types/istanbul-lib-coverage@npm:2.0.1" - checksum: eb8abb8b56fb8f645c46c482c5a438d78fc44ce2eb82a47491d552eba94fc3d81bc404996f220921c16df3eb6126ec01890f4acaebd0f71249b37e110eacdd3a + version: 2.0.4 + resolution: "@types/istanbul-lib-coverage@npm:2.0.4" + checksum: a25d7589ee65c94d31464c16b72a9dc81dfa0bea9d3e105ae03882d616e2a0712a9c101a599ec482d297c3591e16336962878cb3eb1a0a62d5b76d277a890ce7 languageName: node linkType: hard @@ -14381,11 +13133,11 @@ __metadata: linkType: hard "@types/istanbul-reports@npm:^3.0.0": - version: 3.0.0 - resolution: "@types/istanbul-reports@npm:3.0.0" + version: 3.0.1 + resolution: "@types/istanbul-reports@npm:3.0.1" dependencies: "@types/istanbul-lib-report": "*" - checksum: 286a18cff19c4dac4321b9ea406a3560faf577fb2a4df5abf9d577fa81ba831c9baa7d40d03f1daf7fe613d468546b731c00b844b72fad9834c583311a35bb7b + checksum: f1ad54bc68f37f60b30c7915886b92f86b847033e597f9b34f2415acdbe5ed742fa559a0a40050d74cdba3b6a63c342cac1f3a64dba5b68b66a6941f4abd7903 languageName: node linkType: hard @@ -14408,12 +13160,12 @@ __metadata: linkType: hard "@types/jest@npm:*": - version: 27.4.1 - resolution: "@types/jest@npm:27.4.1" + version: 29.0.3 + resolution: "@types/jest@npm:29.0.3" dependencies: - jest-matcher-utils: ^27.0.0 - pretty-format: ^27.0.0 - checksum: 5184f3eef4832d01ee8f59bed15eec45ccc8e29c724a5e6ce37bf74396b37bdf04f557000f45ba4fc38ae6075cf9cfcce3d7a75abc981023c61ceb27230a93e4 + expect: ^29.0.0 + pretty-format: ^29.0.0 + checksum: 14a8ec1954540ec59f4072c3c4dbc6b5d5ff616556c98671aca26606bdf9d49616a3f269f3e488c80cd481ee19880351575c1f6895827628818e193600c121e0 languageName: node linkType: hard @@ -14437,9 +13189,9 @@ __metadata: linkType: hard "@types/js-cookie@npm:^2.2.6": - version: 2.2.6 - resolution: "@types/js-cookie@npm:2.2.6" - checksum: 97c50ff6cd0a27409b028aad94b0c4eb5cc43623532a1bdbbcccdb200539593eff3cc7f0d874b6b9bee586167638e3a10093c811ff6603ff2a9639564c82b3b1 + version: 2.2.7 + resolution: "@types/js-cookie@npm:2.2.7" + checksum: 851f47e94ca1fc43661d8f51614d67a613e7810c91b876d0a3b311ce72f7df800107fd02a08cb6948184e12c120b4f058edca2f50424d8798bdcffd6627281e3 languageName: node linkType: hard @@ -14450,7 +13202,7 @@ __metadata: languageName: node linkType: hard -"@types/js-yaml@npm:^4.0.0, @types/js-yaml@npm:^4.0.1": +"@types/js-yaml@npm:^4.0.0": version: 4.0.5 resolution: "@types/js-yaml@npm:4.0.5" checksum: 7dcac8c50fec31643cc9d6444b5503239a861414cdfaa7ae9a38bc22597c4d850c4b8cec3d82d73b3fbca408348ce223b0408d598b32e094470dfffc6d486b4d @@ -14467,13 +13219,6 @@ __metadata: languageName: node linkType: hard -"@types/json-buffer@npm:~3.0.0": - version: 3.0.0 - resolution: "@types/json-buffer@npm:3.0.0" - checksum: 6b0a371dd603f0eec9d00874574bae195382570e832560dadf2193ee0d1062b8e0694bbae9798bc758632361c227b1e3b19e3bd914043b498640470a2da38b77 - languageName: node - linkType: hard - "@types/json-schema-merge-allof@npm:^0.6.0": version: 0.6.1 resolution: "@types/json-schema-merge-allof@npm:0.6.1" @@ -14491,9 +13236,9 @@ __metadata: linkType: hard "@types/json-stable-stringify@npm:^1.0.32": - version: 1.0.32 - resolution: "@types/json-stable-stringify@npm:1.0.32" - checksum: 3091ddc8d15c6cce1a847ba1f8db21e7c2564c7b8bc6923a873801d936228f775096b517d62653fbcebedcb2a7992555dc6ed11517ef050e75525cdf1d1bce8d + version: 1.0.34 + resolution: "@types/json-stable-stringify@npm:1.0.34" + checksum: 45767ecef0f6aae5680c3be6488d5c493f16046e34f182d7e6a2c69a667aab035799752c6f03017c883b134ad3f80e3f78d7e7da81a9c1f3d01676126baf5d0e languageName: node linkType: hard @@ -14505,11 +13250,11 @@ __metadata: linkType: hard "@types/jsonwebtoken@npm:^8.3.3, @types/jsonwebtoken@npm:^8.5.0": - version: 8.5.0 - resolution: "@types/jsonwebtoken@npm:8.5.0" + version: 8.5.9 + resolution: "@types/jsonwebtoken@npm:8.5.9" dependencies: "@types/node": "*" - checksum: e8f9ab96ec5cf76195c0d31cf555371824b673939064efec698ca99525ce46476af54debd1f66bd732e6079e134848b97163797009c4b47a767448a0c6ddaeda + checksum: 33815ab02d1371b423118316b7706d2f2ec03eeee5e1494be72da50425d2384e5e0a09ea193f7a5ab4b4f6a9c5847147305f50e965f3d927a95bdf8adb471b2a languageName: node linkType: hard @@ -14523,20 +13268,20 @@ __metadata: linkType: hard "@types/keyv@npm:*": - version: 3.1.1 - resolution: "@types/keyv@npm:3.1.1" + version: 3.1.4 + resolution: "@types/keyv@npm:3.1.4" dependencies: "@types/node": "*" - checksum: ee0d098693bf4af44be756eed02daf95f5d0fd4b5b02da952a5952e08842baddf6a986a9ea5f9e460729782f1a0a47848c892ad96ea188b66a363feb49a1536f + checksum: e009a2bfb50e90ca9b7c6e8f648f8464067271fd99116f881073fa6fa76dc8d0133181dd65e6614d5fb1220d671d67b0124aef7d97dc02d7e342ab143a47779d languageName: node linkType: hard "@types/ldapjs@npm:^2.2.0": - version: 2.2.2 - resolution: "@types/ldapjs@npm:2.2.2" + version: 2.2.4 + resolution: "@types/ldapjs@npm:2.2.4" dependencies: "@types/node": "*" - checksum: e5da993f06240251dad1e095564c722124ed08d915781fb3046f7933cde94b5d2681030ab9f48d4aa5d72b655b501bfd6f2ad4ea41d557d0e1a08d574ed058bf + checksum: 3f240809927e1292380e5977579d7edffb6e5e41b35510c7091b51da19e7387d4ebff0f254c0b145f3cf5d5485b6bb39c77335d857d092e6f4e9ce5a6682a872 languageName: node linkType: hard @@ -14548,9 +13293,9 @@ __metadata: linkType: hard "@types/lodash@npm:^4.14.151, @types/lodash@npm:^4.14.173, @types/lodash@npm:^4.14.175": - version: 4.14.184 - resolution: "@types/lodash@npm:4.14.184" - checksum: 6d9a4d67f7f9d0ec3fd21174f3dd3d00629dc1227eb469450eace53adbc1f7e2330699c28d0fe093e5f0fef0f0e763098be1f779268857213224af082b62be21 + version: 4.14.185 + resolution: "@types/lodash@npm:4.14.185" + checksum: f81d13da5ecab110ca9c5c7cc2bedc3c9802a6acf668576aecd1b8f4b134ed81d06c15f1e600fb08f05975098280a0d97d30cddfc2cb39ec1c6b56e971ca53b3 languageName: node linkType: hard @@ -14576,9 +13321,9 @@ __metadata: linkType: hard "@types/luxon@npm:*, @types/luxon@npm:^3.0.0": - version: 3.0.0 - resolution: "@types/luxon@npm:3.0.0" - checksum: 7738d3f4b91097a8139eca966ab53c6b40bb417b2cc2014c3bbd0aee033d6ff54af14c62046c2eb042434923b6bf796874f24b2af90e07ef422e6d841463d4b2 + version: 3.0.1 + resolution: "@types/luxon@npm:3.0.1" + checksum: a81444f9b474ea9b3063ab4cc68b917a2634e38b4e229f86c78c35023a32bf5e8d1044d7c229c011291662c976cb6c4cf109dc3d2077c571790a31779a554178 languageName: node linkType: hard @@ -14599,7 +13344,7 @@ __metadata: languageName: node linkType: hard -"@types/mdast@npm:^3.0.0, @types/mdast@npm:^3.0.3": +"@types/mdast@npm:^3.0.0": version: 3.0.10 resolution: "@types/mdast@npm:3.0.10" dependencies: @@ -14622,27 +13367,27 @@ __metadata: languageName: node linkType: hard -"@types/mime@npm:^1": - version: 1.3.2 - resolution: "@types/mime@npm:1.3.2" - checksum: 0493368244cced1a69cb791b485a260a422e6fcc857782e1178d1e6f219f1b161793e9f87f5fae1b219af0f50bee24fcbe733a18b4be8fdd07a38a8fb91146fd +"@types/mime@npm:*": + version: 3.0.1 + resolution: "@types/mime@npm:3.0.1" + checksum: 4040fac73fd0cea2460e29b348c1a6173da747f3a87da0dbce80dd7a9355a3d0e51d6d9a401654f3e5550620e3718b5a899b2ec1debf18424e298a2c605346e7 languageName: node linkType: hard -"@types/minimatch@npm:*, @types/minimatch@npm:^3.0.3, @types/minimatch@npm:^3.0.5": - version: 3.0.5 - resolution: "@types/minimatch@npm:3.0.5" - checksum: c41d136f67231c3131cf1d4ca0b06687f4a322918a3a5adddc87ce90ed9dbd175a3610adee36b106ae68c0b92c637c35e02b58c8a56c424f71d30993ea220b92 - languageName: node - linkType: hard - -"@types/minimatch@npm:^5.0.0": +"@types/minimatch@npm:*, @types/minimatch@npm:^5.0.0": version: 5.1.2 resolution: "@types/minimatch@npm:5.1.2" checksum: 0391a282860c7cb6fe262c12b99564732401bdaa5e395bee9ca323c312c1a0f45efbf34dce974682036e857db59a5c9b1da522f3d6055aeead7097264c8705a8 languageName: node linkType: hard +"@types/minimatch@npm:^3.0.3, @types/minimatch@npm:^3.0.5": + version: 3.0.5 + resolution: "@types/minimatch@npm:3.0.5" + checksum: c41d136f67231c3131cf1d4ca0b06687f4a322918a3a5adddc87ce90ed9dbd175a3610adee36b106ae68c0b92c637c35e02b58c8a56c424f71d30993ea220b92 + languageName: node + linkType: hard + "@types/minimist@npm:^1.2.0": version: 1.2.2 resolution: "@types/minimist@npm:1.2.2" @@ -14650,15 +13395,6 @@ __metadata: languageName: node linkType: hard -"@types/minipass@npm:*": - version: 3.3.5 - resolution: "@types/minipass@npm:3.3.5" - dependencies: - minipass: "*" - checksum: 160f4ae5416697c947e0c0ee1225fe25973acf73a30d01bdf202447f12bd32ba3ea33d2fc4f2517a038dc408022a5aff5f7a1d92da0157a9b04276d1b0209550 - languageName: node - linkType: hard - "@types/mock-fs@npm:^4.10.0, @types/mock-fs@npm:^4.13.0": version: 4.13.1 resolution: "@types/mock-fs@npm:4.13.1" @@ -14704,10 +13440,10 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:>=12.12.47, @types/node@npm:>=13.7.0": - version: 17.0.25 - resolution: "@types/node@npm:17.0.25" - checksum: 6a820bd624e69ea772f52a6cdb326484eff5829443dc981939373929ade109f58c21698b9f0a831bd6ceea799e722a75dc49c5fa7a6bc32a81e1cbdfc6507b64 +"@types/node@npm:*, @types/node@npm:>= 8, @types/node@npm:>=12.12.47, @types/node@npm:>=13.7.0": + version: 18.7.18 + resolution: "@types/node@npm:18.7.18" + checksum: 8aec61f0f96e2a69ce51f1f40f949ca578bbb4fe05d7c0b8ce3aeeb848e90f755837f17f6ac132ca404d974fe9b2974150ad3b4984fc9dc7c3ceddb10bae0167 languageName: node linkType: hard @@ -14718,14 +13454,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:>= 8": - version: 18.7.4 - resolution: "@types/node@npm:18.7.4" - checksum: 051d2147e4d8129fceb63ee9384259b2f224dbc4e4b0c46d96a6b61cbaad4e3fe4060950e7f4fc3d5692b1e6ea47e68ad03b61155754bfa169593747cfe3f8f4 - languageName: node - linkType: hard - -"@types/node@npm:^10.1.0, @types/node@npm:^10.12.0": +"@types/node@npm:^10.1.0": version: 10.17.60 resolution: "@types/node@npm:10.17.60" checksum: 2cdb3a77d071ba8513e5e8306fa64bf50e3c3302390feeaeff1fd325dd25c8441369715dfc8e3701011a72fed5958c7dfa94eb9239a81b3c286caa4d97db6eef @@ -14733,16 +13462,16 @@ __metadata: linkType: hard "@types/node@npm:^12.7.1": - version: 12.20.48 - resolution: "@types/node@npm:12.20.48" - checksum: 48bd705bda1af2332c50fb24819bba7b0eac791b07c24c098c39b10940170a53bd3c4755aedc3409c7114c539f1f86ea657aa6838d164fd135e3b89b9f9aa772 + version: 12.20.55 + resolution: "@types/node@npm:12.20.55" + checksum: e4f86785f4092706e0d3b0edff8dca5a13b45627e4b36700acd8dfe6ad53db71928c8dee914d4276c7fd3b6ccd829aa919811c9eb708a2c8e4c6eb3701178c37 languageName: node linkType: hard "@types/node@npm:^14.14.31": - version: 14.18.16 - resolution: "@types/node@npm:14.18.16" - checksum: 1999799309dc8620a2adf9a5d5e48416af87321bae4c950b4aa8018fcef2c3b6c1fcf98c39eae06f6492c03a643a5a44e2bb3750cd2574d9cf7eac33bac50e24 + version: 14.18.29 + resolution: "@types/node@npm:14.18.29" + checksum: 43481c1c066dd01578ff137f437a8a901f8fcd3cdc068c36047c444861ab4aac8a62fb4eb6d03738df02006336c90619bfc7860d4e5b259916956942d2e68e88 languageName: node linkType: hard @@ -14754,9 +13483,9 @@ __metadata: linkType: hard "@types/node@npm:^16.0.0, @types/node@npm:^16.11.26, @types/node@npm:^16.9.2": - version: 16.11.56 - resolution: "@types/node@npm:16.11.56" - checksum: b4efade16eb08a39810921c54a1637e69c8f3184a20d87e8fe74d557d9bda73f0829ac318e2a30a32b1903e4b099812defd1dfe438be70b98dbfbea5b0d99a53 + version: 16.11.59 + resolution: "@types/node@npm:16.11.59" + checksum: b3a2986ef8f8216bb7fd1187dcf2e69aca3e6b6b5fdfd6abf4cf11c44e3cdd587fae875a28dc4ef257e2b369e2c5290642aff6a0a9d702f3385a78f561293259 languageName: node linkType: hard @@ -14845,18 +13574,7 @@ __metadata: languageName: node linkType: hard -"@types/passport-oauth2@npm:*": - version: 1.4.9 - resolution: "@types/passport-oauth2@npm:1.4.9" - dependencies: - "@types/express": "*" - "@types/oauth": "*" - "@types/passport": "*" - checksum: a7dc84ba1c166c73445974c138f7776be39e9c04e0f66ae84a55c89d91292f1cc30ea063c250183c4557fe35ecbdb581b0b28cc958217aff211aa6fa45889767 - languageName: node - linkType: hard - -"@types/passport-oauth2@npm:^1.4.11": +"@types/passport-oauth2@npm:*, @types/passport-oauth2@npm:^1.4.11": version: 1.4.11 resolution: "@types/passport-oauth2@npm:1.4.11" dependencies: @@ -14888,11 +13606,11 @@ __metadata: linkType: hard "@types/passport@npm:*, @types/passport@npm:^1.0.3": - version: 1.0.10 - resolution: "@types/passport@npm:1.0.10" + version: 1.0.11 + resolution: "@types/passport@npm:1.0.11" dependencies: "@types/express": "*" - checksum: bd9704b64db7a16d53bd547bb436fb5a1cf9747dbe888a10b124603aeccf297f162a5b0854409cd6ee6bff1a8e9cdf989b07738f600f37949abfa8f8e5960deb + checksum: 7fea92aeb0d05bd872c17deadc1f1219dbdb23bae1b8f50e1c432ef755bce2b5f3fd60af76c38815f1fbaa047960d3638a4144221c4330457091be1f6e492168 languageName: node linkType: hard @@ -14904,9 +13622,9 @@ __metadata: linkType: hard "@types/prettier@npm:^2.1.5": - version: 2.4.3 - resolution: "@types/prettier@npm:2.4.3" - checksum: b240434daabac54700c862b0bb52a83fec396e0e9c847447119ba41fd8404d79aadfa174e6306fb094b29efadac586344b7606c3a71c286b71755ab2579d54df + version: 2.7.0 + resolution: "@types/prettier@npm:2.7.0" + checksum: bf5d0c7c1270909b39399539ac106d20ddaa85fe92eb1d59922dc99159604b4f8d5e41b0045fb29c8011585cf5bca2350b7441ef3d9816c08bd0e10ebd4b31d4 languageName: node linkType: hard @@ -14927,16 +13645,16 @@ __metadata: linkType: hard "@types/qs@npm:*": - version: 6.9.6 - resolution: "@types/qs@npm:6.9.6" - checksum: 01871b1cf7062717ec76fcb9b29ddae1e04fcfadc1c76d86ec2571e72f27bf09ff31b094b295be8d4ca664aeec9b8965563680b31fcab7aba1ed93afac5181cd + version: 6.9.7 + resolution: "@types/qs@npm:6.9.7" + checksum: 7fd6f9c25053e9b5bb6bc9f9f76c1d89e6c04f7707a7ba0e44cc01f17ef5284adb82f230f542c2d5557d69407c9a40f0f3515e8319afd14e1e16b5543ac6cdba languageName: node linkType: hard "@types/range-parser@npm:*": - version: 1.2.3 - resolution: "@types/range-parser@npm:1.2.3" - checksum: a0a4218214d2c599e2128a8965e9183d1f0b8fc614def43a2183cf80534d10fcf86357c823c7907e779df0ab048fd1fa3818b4c8f0f6f99ba150a3f99df7d03d + version: 1.2.4 + resolution: "@types/range-parser@npm:1.2.4" + checksum: b7c0dfd5080a989d6c8bb0b6750fc0933d9acabeb476da6fe71d8bdf1ab65e37c136169d84148034802f48378ab94e3c37bb4ef7656b2bec2cb9c0f8d4146a95 languageName: node linkType: hard @@ -14958,15 +13676,15 @@ __metadata: languageName: node linkType: hard -"@types/react-redux@npm:^7.1.16": - version: 7.1.19 - resolution: "@types/react-redux@npm:7.1.19" +"@types/react-redux@npm:^7.1.20": + version: 7.1.24 + resolution: "@types/react-redux@npm:7.1.24" dependencies: "@types/hoist-non-react-statics": ^3.3.0 "@types/react": "*" hoist-non-react-statics: ^3.3.0 redux: ^4.0.0 - checksum: 32a1b21f6a5e45cd6e78fdb4b86974ea444a35539c3c1270d66132527b2c45051f9642a3e2296616c72407dc019d0629c0183bcca64fbf3ba19443484cb70df7 + checksum: 6582246581331ac7fbbd44aa1f1c136c8a9c8febbcf462432ac81302263308c21e1a2e7868beb7f73bbcb52a8e67935d133cb37f5bdcb6564eaff3a811805101 languageName: node linkType: hard @@ -14998,11 +13716,11 @@ __metadata: linkType: hard "@types/react-transition-group@npm:^4.2.0": - version: 4.2.4 - resolution: "@types/react-transition-group@npm:4.2.4" + version: 4.4.5 + resolution: "@types/react-transition-group@npm:4.4.5" dependencies: "@types/react": "*" - checksum: a8abb3ad3c6e0575c630b591503a78ae3a94e21d1285905a49c36168e5d3de68b0886e2c6d75b751e30f2dc6e4245351cde30e4b3ff2649aec345f2088961e2c + checksum: 265f1c74061556708ffe8d15559e35c60d6c11478c9950d3735575d2c116ca69f461d85effa06d73a613eb8b73c84fd32682feb57cf7c5f9e4284021dbca25b0 languageName: node linkType: hard @@ -15025,13 +13743,13 @@ __metadata: linkType: hard "@types/react@npm:^17": - version: 17.0.45 - resolution: "@types/react@npm:17.0.45" + version: 17.0.50 + resolution: "@types/react@npm:17.0.50" dependencies: "@types/prop-types": "*" "@types/scheduler": "*" csstype: ^3.0.2 - checksum: 3cc13a02824c13f6fa4807a83abd065ac1d9943359e76bd995cc7cd2b4148c1176ebd54a30a9f4eb8a0f141ff359d712876f256c4fee707e4290607ef8410b3e + checksum: b5629dff7c2f3e9fcba95a19b2b3bfd78d7cacc33ba5fc26413dba653d34afcac3b93ddabe563e8062382688a1eac7db68e93739bb8e712d27637a03aaafbbb8 languageName: node linkType: hard @@ -15061,25 +13779,6 @@ __metadata: languageName: node linkType: hard -"@types/request@npm:^2.47.1": - version: 2.48.5 - resolution: "@types/request@npm:2.48.5" - dependencies: - "@types/caseless": "*" - "@types/node": "*" - "@types/tough-cookie": "*" - form-data: ^2.5.0 - checksum: 02572a0558b9a95ae1a2fa3912b45c4c12f587e25773b2d9bdbf5dfa6f2da5e3787d22256ee0dc4836250f39cf2dcb39fc4ded5bf554c0f948a623c8772e8bd3 - languageName: node - linkType: hard - -"@types/resize-observer-browser@npm:^0.1.6": - version: 0.1.7 - resolution: "@types/resize-observer-browser@npm:0.1.7" - checksum: 0377eaac8bb7a17b983b49a156006032380b459bfebefc54a5aa2f7f8a9786d2b60723e8837c61ef733330b478f4f26293e9edbdc8006238e4f80c878c56c988 - languageName: node - linkType: hard - "@types/resolve@npm:1.17.1": version: 1.17.1 resolution: "@types/resolve@npm:1.17.1" @@ -15098,7 +13797,7 @@ __metadata: languageName: node linkType: hard -"@types/retry@npm:^0.12.0": +"@types/retry@npm:0.12.0": version: 0.12.0 resolution: "@types/retry@npm:0.12.0" checksum: 61a072c7639f6e8126588bf1eb1ce8835f2cb9c2aba795c4491cf6310e013267b0c8488039857c261c387e9728c1b43205099223f160bb6a76b4374f741b5603 @@ -15134,9 +13833,9 @@ __metadata: linkType: hard "@types/scheduler@npm:*": - version: 0.16.1 - resolution: "@types/scheduler@npm:0.16.1" - checksum: 2ff8034df029a6cbb3623b05fa895cac4fc504806a8e948ebe29675a1edfa5ac04faac7611016076b3ffefc2037bbe344ad1978304059b2d4c78e513ec43c7bf + version: 0.16.2 + resolution: "@types/scheduler@npm:0.16.2" + checksum: b6b4dcfeae6deba2e06a70941860fb1435730576d3689225a421280b7742318d1548b3d22c1f66ab68e414f346a9542f29240bc955b6332c5b11e561077583bc languageName: node linkType: hard @@ -15172,32 +13871,22 @@ __metadata: languageName: node linkType: hard -"@types/serve-static@npm:*": - version: 1.13.9 - resolution: "@types/serve-static@npm:1.13.9" +"@types/serve-static@npm:*, @types/serve-static@npm:^1.13.10": + version: 1.15.0 + resolution: "@types/serve-static@npm:1.15.0" dependencies: - "@types/mime": ^1 + "@types/mime": "*" "@types/node": "*" - checksum: 5c5f3b64e9fe7c51fb428ef70f1f2365b897fc3c8400be6d6afc8db0f152639182b360361ebd3d0cbaeb607b125dee03bf0c50bf7e08642ff150028f05bb7381 - languageName: node - linkType: hard - -"@types/serve-static@npm:^1.13.10": - version: 1.13.10 - resolution: "@types/serve-static@npm:1.13.10" - dependencies: - "@types/mime": ^1 - "@types/node": "*" - checksum: eaca858739483e3ded254cad7d7a679dc2c8b3f52c8bb0cd845b3b7eb1984bde0371fdcb0a5c83aa12e6daf61b6beb762545021f520f08a1fe882a3fa4ea5554 + checksum: b6ac93d471fb0f53ddcac1f9b67572a09cd62806f7db5855244b28f6f421139626f24799392566e97d1ffc61b12f9de7f30380c39fcae3c8a161fe161d44edf2 languageName: node linkType: hard "@types/set-cookie-parser@npm:^2.4.0": - version: 2.4.0 - resolution: "@types/set-cookie-parser@npm:2.4.0" + version: 2.4.2 + resolution: "@types/set-cookie-parser@npm:2.4.2" dependencies: "@types/node": "*" - checksum: dfd9f31079e44ad5922c142564e8cfc43c8ed61dafd4f22ab3862dd76971398a6063b4e8e89a047607e7a0ff0914a0e4b16a51ff2fc9b73c4196744666762685 + checksum: c31bf04eb9620829dc3c91bced74ac934ad039d20d20893fb5acac0f08769cbd4eef3bf7502a0289c7be59c3e9cfa456147b4e88bff47dd1b9efb4995ba5d5a3 languageName: node linkType: hard @@ -15209,9 +13898,9 @@ __metadata: linkType: hard "@types/sizzle@npm:*, @types/sizzle@npm:^2.3.2": - version: 2.3.2 - resolution: "@types/sizzle@npm:2.3.2" - checksum: 783b6382934d8f12f2e21220a01c4557150f07abd18336f392664fb74ceaa9a9d59b7c859c0b82fd3f15b6484774cd0d493261fe64c78ee399bf198a8fe8d89d + version: 2.3.3 + resolution: "@types/sizzle@npm:2.3.3" + checksum: 586a9fb1f6ff3e325e0f2cc1596a460615f0bc8a28f6e276ac9b509401039dd242fa8b34496d3a30c52f5b495873922d09a9e76c50c2ab2bcc70ba3fb9c4e160 languageName: node linkType: hard @@ -15225,15 +13914,24 @@ __metadata: linkType: hard "@types/ssh2-streams@npm:*": - version: 0.1.8 - resolution: "@types/ssh2-streams@npm:0.1.8" + version: 0.1.9 + resolution: "@types/ssh2-streams@npm:0.1.9" dependencies: "@types/node": "*" - checksum: 1df7035f66165e1719cd61c365cbeb8c3221d645bcd57519a7f0f7b1cb9ff7b37e190480f9a2a8ed95cf126cac066c0f1ca6d365101f828966903e36efb59fcc + checksum: 190f3c235bf19787cd255f366d3ac9233875750095f3c73d15e72a1e67a826aed7e7c389603c5e89cb6420b87ff6dffc566f9174e546ddb7ff8c8dc2e8b00def languageName: node linkType: hard -"@types/ssh2@npm:*, @types/ssh2@npm:^0.5.48": +"@types/ssh2@npm:*": + version: 1.11.5 + resolution: "@types/ssh2@npm:1.11.5" + dependencies: + "@types/node": "*" + checksum: ee7caae274e5f8e3c9d96aca94248142d39c9147e47f9700cec43aa9c680c75b66d970941ec34cfc622c00d87a1a983d0d92bb2e4a34b70e8d10213347446496 + languageName: node + linkType: hard + +"@types/ssh2@npm:^0.5.48": version: 0.5.52 resolution: "@types/ssh2@npm:0.5.52" dependencies: @@ -15244,9 +13942,9 @@ __metadata: linkType: hard "@types/stack-utils@npm:^2.0.0": - version: 2.0.0 - resolution: "@types/stack-utils@npm:2.0.0" - checksum: b3fbae25b073116977ecb5c67d22f14567b51a7792403b0bf46e5de8f29bde3bd4ec1626afb22065495ca7f1c699c8bd66720050c94b8f8f9bcefbee79d161fd + version: 2.0.1 + resolution: "@types/stack-utils@npm:2.0.1" + checksum: 205fdbe3326b7046d7eaf5e494d8084f2659086a266f3f9cf00bccc549c8e36e407f88168ad4383c8b07099957ad669f75f2532ed4bc70be2b037330f7bae019 languageName: node linkType: hard @@ -15259,31 +13957,22 @@ __metadata: languageName: node linkType: hard -"@types/stream-buffers@npm:^3.0.3": - version: 3.0.3 - resolution: "@types/stream-buffers@npm:3.0.3" - dependencies: - "@types/node": "*" - checksum: c3456fa2a18f89d31c54fe169621d8288a9735fb7e92aba45786642659d93be26fa0b4caa5c1043b21f4cfaeeefc24d247fa833586a8a0f3aecedf03adb7b5ac - languageName: node - linkType: hard - "@types/styled-jsx@npm:^2.2.8": - version: 2.2.8 - resolution: "@types/styled-jsx@npm:2.2.8" + version: 2.2.9 + resolution: "@types/styled-jsx@npm:2.2.9" dependencies: "@types/react": "*" - checksum: 6f1e5d893da847595a625c0281a78350d03c0650a7abb7aedbf5a20ccb085d925185823df611f6aff45fa908904bc3736f8d8bafd7b990b1563d25d92339904f + checksum: 0e7e9bce8435116168b2470c7599b3b6ad5775c678d5dc06b64b0bc4fe369c59603c794a7298e2ca4e209aa0135f98df89793a3a0778251c1907b34198c55e9e languageName: node linkType: hard "@types/superagent@npm:*": - version: 4.1.7 - resolution: "@types/superagent@npm:4.1.7" + version: 4.1.15 + resolution: "@types/superagent@npm:4.1.15" dependencies: "@types/cookiejar": "*" "@types/node": "*" - checksum: 090a9fd148d82550a8feda89df4a9f3051ff2e253b02cf5f84e01c23f6e5225c0bf814d600167449c5bd090a02e42449dfbe8fa089fc24b7c10e397d814e37b9 + checksum: 347cd74ef0a29e6b9c6d32253c3fb0dd39a31618b50752f84d36b6a9246237bb6b68c9b436c1f94adabc2df89d9f1939e4782f4c850f98b9c2fe431ad4e565a4 languageName: node linkType: hard @@ -15314,16 +14003,6 @@ __metadata: languageName: node linkType: hard -"@types/tar@npm:^4.0.3": - version: 4.0.5 - resolution: "@types/tar@npm:4.0.5" - dependencies: - "@types/minipass": "*" - "@types/node": "*" - checksum: 476d8af8f4cffcd973de026e043271be76171f9cb07bb869ba38a193ce89ee361b59ff8484e28b57216266063d91502c5208d2ab6b976e7370d9bdf4c4dadadc - languageName: node - linkType: hard - "@types/tar@npm:^6.1.1": version: 6.1.2 resolution: "@types/tar@npm:6.1.2" @@ -15344,11 +14023,12 @@ __metadata: linkType: hard "@types/terser-webpack-plugin@npm:^5.0.4": - version: 5.2.0 - resolution: "@types/terser-webpack-plugin@npm:5.2.0" + version: 5.0.4 + resolution: "@types/terser-webpack-plugin@npm:5.0.4" dependencies: - terser-webpack-plugin: "*" - checksum: 475b0f160c9f83641255f6516b69d7908b9e3e8e8ab653f3a257690249f9614f9386c0897eba6e4e35182ec0d83f57454d62fb94b38ae7c171891641350072ee + terser: ^5.3.8 + webpack: ^5.1.0 + checksum: 7b3845526d4ed7b636f7b2f8f35b5d7e45211f7a55afc85e32a66655eaf65cd193e2fec195bcdb473c0d9a5b2828798b9c23196fdc86e9cd2e9420227012f438 languageName: node linkType: hard @@ -15370,13 +14050,6 @@ __metadata: languageName: node linkType: hard -"@types/tough-cookie@npm:*": - version: 4.0.0 - resolution: "@types/tough-cookie@npm:4.0.0" - checksum: 454fa8d4d64532992274ebf2ff5ea0061b0dd32a2282255a3e793f04a8b64a9c4c1f9e0f4ed83c514c852b7b604d69336c66c80de4a857cb41a81e9572981e7f - languageName: node - linkType: hard - "@types/trusted-types@npm:*": version: 2.0.2 resolution: "@types/trusted-types@npm:2.0.2" @@ -15393,13 +14066,6 @@ __metadata: languageName: node linkType: hard -"@types/underscore@npm:^1.8.9": - version: 1.10.23 - resolution: "@types/underscore@npm:1.10.23" - checksum: 5e9458888e8c09a0f61f93f5958d4ce57e02e317b21444319f7e4a11796445e58a78d6c743dad17365aa8fb9c31fa23d5f4d30a9047fa2df30d446ccc5e42023 - languageName: node - linkType: hard - "@types/unist@npm:*, @types/unist@npm:^2.0.0": version: 2.0.6 resolution: "@types/unist@npm:2.0.6" @@ -15407,13 +14073,6 @@ __metadata: languageName: node linkType: hard -"@types/use-sync-external-store@npm:^0.0.3": - version: 0.0.3 - resolution: "@types/use-sync-external-store@npm:0.0.3" - checksum: 161ddb8eec5dbe7279ac971531217e9af6b99f7783213566d2b502e2e2378ea19cf5e5ea4595039d730aa79d3d35c6567d48599f69773a02ffcff1776ec2a44e - languageName: node - linkType: hard - "@types/uuid@npm:^8.0.0": version: 8.3.4 resolution: "@types/uuid@npm:8.3.4" @@ -15449,12 +14108,10 @@ __metadata: languageName: node linkType: hard -"@types/ws@npm:^6.0.1": - version: 6.0.4 - resolution: "@types/ws@npm:6.0.4" - dependencies: - "@types/node": "*" - checksum: b2656a76bfad0c17bb1e3fc237ba7122431c1373669977ed8edef45934c82f71c75d8c71f0a576dc6d98b0954fd94cae0166c6b4ccb40f7e0ee29cc92673519c +"@types/whatwg-mimetype@npm:^3.0.0": + version: 3.0.0 + resolution: "@types/whatwg-mimetype@npm:3.0.0" + checksum: 98254edcddb5b9580aa41c19e6c96d2bfb178285d5c2560e3a1f321f14da70192adc82950baecd2cad5876098b0677fbe813db1edf9ab9ba0a9996f0bf2bb703 languageName: node linkType: hard @@ -15477,9 +14134,9 @@ __metadata: linkType: hard "@types/yargs-parser@npm:*": - version: 15.0.0 - resolution: "@types/yargs-parser@npm:15.0.0" - checksum: 333ab73a1f9c82c64b2fac2441558e58f062fbe7affc35bb53b8e755b62cdd32b1bbc6f4da23773887a2189bf04395e2a8c710df344df4cd578993aeefe98053 + version: 21.0.0 + resolution: "@types/yargs-parser@npm:21.0.0" + checksum: b2f4c8d12ac18a567440379909127cf2cec393daffb73f246d0a25df36ea983b93b7e9e824251f959e9f928cbc7c1aab6728d0a0ff15d6145f66cec2be67d9a2 languageName: node linkType: hard @@ -15492,6 +14149,15 @@ __metadata: languageName: node linkType: hard +"@types/yargs@npm:^17.0.8": + version: 17.0.12 + resolution: "@types/yargs@npm:17.0.12" + dependencies: + "@types/yargs-parser": "*" + checksum: 5b41d21d8624199f89db82209b2adab2e47867b3677e852fde65698be2ca48364b14c2e70cb0adc9bca4a2102c93dad2409cae0ad666ea36ae031ae1cb08a7b5 + languageName: node + linkType: hard + "@types/yarnpkg__lockfile@npm:^1.1.4": version: 1.1.5 resolution: "@types/yarnpkg__lockfile@npm:1.1.5" @@ -15499,7 +14165,7 @@ __metadata: languageName: node linkType: hard -"@types/yauzl@npm:^2.10.0": +"@types/yauzl@npm:^2.10.0, @types/yauzl@npm:^2.9.1": version: 2.10.0 resolution: "@types/yauzl@npm:2.10.0" dependencies: @@ -15508,15 +14174,6 @@ __metadata: languageName: node linkType: hard -"@types/yauzl@npm:^2.9.1": - version: 2.9.2 - resolution: "@types/yauzl@npm:2.9.2" - dependencies: - "@types/node": "*" - checksum: dfb49abe82605615712fc694eaa4f7068fe30aa03f38c085e2c2e74408beaad30471d36da9654a811482ece2ea4405575fd99b19c0aa327ed2a9736b554bbf43 - languageName: node - linkType: hard - "@types/yup@npm:^0.29.13": version: 0.29.14 resolution: "@types/yup@npm:0.29.14" @@ -15532,12 +14189,12 @@ __metadata: linkType: hard "@typescript-eslint/eslint-plugin@npm:^5.9.0": - version: 5.36.2 - resolution: "@typescript-eslint/eslint-plugin@npm:5.36.2" + version: 5.37.0 + resolution: "@typescript-eslint/eslint-plugin@npm:5.37.0" dependencies: - "@typescript-eslint/scope-manager": 5.36.2 - "@typescript-eslint/type-utils": 5.36.2 - "@typescript-eslint/utils": 5.36.2 + "@typescript-eslint/scope-manager": 5.37.0 + "@typescript-eslint/type-utils": 5.37.0 + "@typescript-eslint/utils": 5.37.0 debug: ^4.3.4 functional-red-black-tree: ^1.0.1 ignore: ^5.2.0 @@ -15550,79 +14207,54 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: edcd9fcecdeb22a689b421cafe3b7adc859bf2fd6227aecdd7412c319c808e7bab063c8f94af32116cfc971962f9780d181cb0a4aa999951c2d2be1f84c6c376 + checksum: 9ef75628fcd6f5425002d0172514ad27e51c6ca438aba65ad445be3c63187de3cb294bcc994bd2859dff4fc0221a22da497b34990e8165dcfd1fec33d7d17fb3 languageName: node linkType: hard "@typescript-eslint/experimental-utils@npm:^5.0.0": - version: 5.9.0 - resolution: "@typescript-eslint/experimental-utils@npm:5.9.0" + version: 5.37.0 + resolution: "@typescript-eslint/experimental-utils@npm:5.37.0" dependencies: - "@types/json-schema": ^7.0.9 - "@typescript-eslint/scope-manager": 5.9.0 - "@typescript-eslint/types": 5.9.0 - "@typescript-eslint/typescript-estree": 5.9.0 - eslint-scope: ^5.1.1 - eslint-utils: ^3.0.0 + "@typescript-eslint/utils": 5.37.0 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 731b27840642b644e65f4ae321ed47e973ffadacd1aa24a19b02b4b298b5bcfbfa16c2d3d034e87a08c3c45f942c5b974f7619cb143eb23fb950f37418dce791 + checksum: 1a9633118a481f7a89a00797abc57dc1fb046ff650f44c3a2a1f796a4def4ab3a9fc6c6b83c9e803e4b6251f4098fad437bb6e2082327a6faa3e200aa1e475ec languageName: node linkType: hard "@typescript-eslint/parser@npm:^5.9.0": - version: 5.36.2 - resolution: "@typescript-eslint/parser@npm:5.36.2" + version: 5.37.0 + resolution: "@typescript-eslint/parser@npm:5.37.0" dependencies: - "@typescript-eslint/scope-manager": 5.36.2 - "@typescript-eslint/types": 5.36.2 - "@typescript-eslint/typescript-estree": 5.36.2 + "@typescript-eslint/scope-manager": 5.37.0 + "@typescript-eslint/types": 5.37.0 + "@typescript-eslint/typescript-estree": 5.37.0 debug: ^4.3.4 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: d6cc22cbc7aacb5ecebf55eb1d681cb6b964b108e147b418295c3e48701a77768cff128c16da421ae50eabb9f1296ecec7fa3cc5f2ccb63a3febf79f98b4195f + checksum: 33343e27c9602820d43ee12de9797365d97a5cf3f716e750fa44de760f2a2c6800f3bc4fa54931ac70c0e0ede77a92224f8151da7f30fed3bf692a029d6659af languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.20.0": - version: 5.20.0 - resolution: "@typescript-eslint/scope-manager@npm:5.20.0" +"@typescript-eslint/scope-manager@npm:5.37.0": + version: 5.37.0 + resolution: "@typescript-eslint/scope-manager@npm:5.37.0" dependencies: - "@typescript-eslint/types": 5.20.0 - "@typescript-eslint/visitor-keys": 5.20.0 - checksum: 904fd43f559dc2579958496ffad837eca124940b4a172666f0ea54ed606074d9ec7d2bec0f2141c3f9a8b894dd2644817cb86809e79a7a73ecba2b7babcdb5c9 + "@typescript-eslint/types": 5.37.0 + "@typescript-eslint/visitor-keys": 5.37.0 + checksum: 1c439e21ffa63ebaadb8c8363e9d668132a835a28203e5b779366bfa56772f332e5dedb50d63dffb836839b9d9c4e66aa9e3ea47b8c59465b18a0cbd063ec7a3 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.36.2": - version: 5.36.2 - resolution: "@typescript-eslint/scope-manager@npm:5.36.2" +"@typescript-eslint/type-utils@npm:5.37.0": + version: 5.37.0 + resolution: "@typescript-eslint/type-utils@npm:5.37.0" dependencies: - "@typescript-eslint/types": 5.36.2 - "@typescript-eslint/visitor-keys": 5.36.2 - checksum: 93ff655f7c237c88ec6dc5911202dd8f81bd8909b27f1a758a9d77e9791040f1ee6fe2891314bde75c808ce586246e98003a1b1396937b0312f2440016dea751 - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:5.9.0": - version: 5.9.0 - resolution: "@typescript-eslint/scope-manager@npm:5.9.0" - dependencies: - "@typescript-eslint/types": 5.9.0 - "@typescript-eslint/visitor-keys": 5.9.0 - checksum: 46e7ab0cef558e7faf1aa8d122a265e196566c0073292f5b2f9cede1f63f52860be8e4ef90251c15e0922339c15852584cb5337382035baff87f1203c0c8d1b5 - languageName: node - linkType: hard - -"@typescript-eslint/type-utils@npm:5.36.2": - version: 5.36.2 - resolution: "@typescript-eslint/type-utils@npm:5.36.2" - dependencies: - "@typescript-eslint/typescript-estree": 5.36.2 - "@typescript-eslint/utils": 5.36.2 + "@typescript-eslint/typescript-estree": 5.37.0 + "@typescript-eslint/utils": 5.37.0 debug: ^4.3.4 tsutils: ^3.21.0 peerDependencies: @@ -15630,55 +14262,23 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: c202b7d2cd08ed7f7d1ad7e430e9e1596478e147f0d485d02babfda0211c55fa950de1dc4d1c950008a8a047a31c1e982e97fe5558f93d496830eb9d9532bc71 + checksum: 79dac78eefdbdb3c168da6b303381461af3523e2b45fdeb821eb05e6a5cac797a8850e1dd9e1b6cd1a7c22408acfa2a09854a0f85ff038518c312db8eae9aa4f languageName: node linkType: hard -"@typescript-eslint/types@npm:5.20.0": - version: 5.20.0 - resolution: "@typescript-eslint/types@npm:5.20.0" - checksum: d7f6e51e23f59feee8857340828c47a98a0dd5eaa1b045e936dc11199b55754cf78ae5cd8d56c1fafb1b5a40a6f472c1ac921072951217caffe3f06a717fa61c +"@typescript-eslint/types@npm:5.37.0": + version: 5.37.0 + resolution: "@typescript-eslint/types@npm:5.37.0" + checksum: 899e59e7775fa95c2d9fcac5cc02cc49d83af5f1ffc706df495046c3b3733f79d5489568b01bfaf8c9ae4636e057056866adc783113036f774580086d0189f21 languageName: node linkType: hard -"@typescript-eslint/types@npm:5.36.2": - version: 5.36.2 - resolution: "@typescript-eslint/types@npm:5.36.2" - checksum: 736cb8a76b58f2f9a7d066933094c5510ffe31479ea8b804a829ec85942420f1b55e0eb2688fbdaaaa9c0e5b3b590fb8f14bbd745353696b4fd33fda620d417b - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:5.9.0": - version: 5.9.0 - resolution: "@typescript-eslint/types@npm:5.9.0" - checksum: 7c4e142600aec266b41418dab1d0cee8cace980b6990692df6522de6eab6705bf515aef36180e4a38c62acb10c92fb474269ac6856a4266d6b035068cd83fad3 - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:5.20.0": - version: 5.20.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.20.0" +"@typescript-eslint/typescript-estree@npm:5.37.0": + version: 5.37.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.37.0" dependencies: - "@typescript-eslint/types": 5.20.0 - "@typescript-eslint/visitor-keys": 5.20.0 - debug: ^4.3.2 - globby: ^11.0.4 - is-glob: ^4.0.3 - semver: ^7.3.5 - tsutils: ^3.21.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 2b709292b7df3675d1f8eaf2f4e1ecf491f70fc525012c6a0fb5164aa893c165317b0a419022b8b00aaed502864d5b5b84092b58a9950d2633248e8d7627abd8 - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:5.36.2": - version: 5.36.2 - resolution: "@typescript-eslint/typescript-estree@npm:5.36.2" - dependencies: - "@typescript-eslint/types": 5.36.2 - "@typescript-eslint/visitor-keys": 5.36.2 + "@typescript-eslint/types": 5.37.0 + "@typescript-eslint/visitor-keys": 5.37.0 debug: ^4.3.4 globby: ^11.1.0 is-glob: ^4.0.3 @@ -15687,93 +14287,39 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 2827ff57a114b6107ea6d555f3855007133b08a7c2bafba0cfa0c935d8b99fd7b49e982d48cccc1c5ba550d95748d0239f5e2109893f12a165d76ed64a0d261b + checksum: 80365a50fa11ed39bf54d9ef06e264fbbf3bdbcc55b7d7d555ef0be915edae40ec30e98d08b3f6ef048e1874450cbcb1e7d9f429d4f420dacbbde45d3376a7bc languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.9.0": - version: 5.9.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.9.0" - dependencies: - "@typescript-eslint/types": 5.9.0 - "@typescript-eslint/visitor-keys": 5.9.0 - debug: ^4.3.2 - globby: ^11.0.4 - is-glob: ^4.0.3 - semver: ^7.3.5 - tsutils: ^3.21.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 71e3f720e335fb08e66950d32b723484aa4d1f4a3163e82259f4be2d11091545070c2e71472be470403cb6f82bf1abe84fa89c1d0b1d47adc8550b3f70aabfb5 - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:5.36.2": - version: 5.36.2 - resolution: "@typescript-eslint/utils@npm:5.36.2" +"@typescript-eslint/utils@npm:5.37.0, @typescript-eslint/utils@npm:^5.10.0": + version: 5.37.0 + resolution: "@typescript-eslint/utils@npm:5.37.0" dependencies: "@types/json-schema": ^7.0.9 - "@typescript-eslint/scope-manager": 5.36.2 - "@typescript-eslint/types": 5.36.2 - "@typescript-eslint/typescript-estree": 5.36.2 + "@typescript-eslint/scope-manager": 5.37.0 + "@typescript-eslint/types": 5.37.0 + "@typescript-eslint/typescript-estree": 5.37.0 eslint-scope: ^5.1.1 eslint-utils: ^3.0.0 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 45356cf55a8733e3ab1f2c3c19cdaefdb79857e35eb1433c29b81f3df071e9cef8a286bc407abe243889a21d9e793e999f92f03b9c727a0fac1c17a48e64c42a + checksum: dc6c19ab07b50113f6fa3722518b2f31ce04036ec018855587d4c467108cb4e3c2866e54ed2e18ce61d1e7d0eaab24f94ee39574031b7d8e1c05e4b83ff84ef2 languageName: node linkType: hard -"@typescript-eslint/utils@npm:^5.10.0": - version: 5.20.0 - resolution: "@typescript-eslint/utils@npm:5.20.0" +"@typescript-eslint/visitor-keys@npm:5.37.0": + version: 5.37.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.37.0" 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 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: e387cf96124e34d079804220c5cb9134148fb3efc68d852a344453e285e3016e0b7e37b11308ef58c0e7afc638f145002cebc27c5da0fd03e0c074ff97d8210e - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:5.20.0": - version: 5.20.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.20.0" - dependencies: - "@typescript-eslint/types": 5.20.0 - eslint-visitor-keys: ^3.0.0 - checksum: 1e1aa5f14fd60f1846ee26947d571953898dc82eb635a7eab3984c6b7db9bb8897743416713a129cc95c8cd63325cc0c64b3935d264f73100911fc5da76fc65f - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:5.36.2": - version: 5.36.2 - resolution: "@typescript-eslint/visitor-keys@npm:5.36.2" - dependencies: - "@typescript-eslint/types": 5.36.2 + "@typescript-eslint/types": 5.37.0 eslint-visitor-keys: ^3.3.0 - checksum: 87ccdcfa5cdedaa3a1aac30d656969f4f5910b62bcaacdf80a514dbf0cbbd8e79b55f8e987eab34cc79ece8ce4b8c19d5caf8b0afb74e0b0d7ab39fb29aa8eba + checksum: d6193550f77413aead0cb267e058df80b80a488c8fb4e39beb5f0a70b971c41682a6391903fbc5f3dd859a872016288c434d631b8efc3ac5a04edbdb7b63b5f6 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.9.0": - version: 5.9.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.9.0" - dependencies: - "@typescript-eslint/types": 5.9.0 - eslint-visitor-keys: ^3.0.0 - checksum: 34a595b83b0e7d4f387d6c81b272804b94a1a91478c5f856fdfdd227595bf8562bf3f5d732606d10b4522c3f2617d09d4bacd2193f757a324ea66b3144a68903 - languageName: node - linkType: hard - -"@uiw/codemirror-extensions-basic-setup@npm:4.11.6": - version: 4.11.6 - resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.11.6" +"@uiw/codemirror-extensions-basic-setup@npm:4.12.3": + version: 4.12.3 + resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.12.3" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/commands": ^6.0.0 @@ -15790,26 +14336,29 @@ __metadata: "@codemirror/search": ">=6.0.0" "@codemirror/state": ">=6.0.0" "@codemirror/view": ">=6.0.0" - checksum: 706a64a098380c404499a228ba3e28f472d39b20088ed794c586005d227340e77c5320a09b9574e8ec51f7d13ca1b98816606de0e7f3c9407761493c41c9801f + checksum: 14c5c6694b2f5ce34bba2ed3fa7017a268c36f3ba234711580d31243603a14adc2b31ebec7d665cd6687917a8ac617d6ac453861d32bf277f43b65946ac1c656 languageName: node linkType: hard "@uiw/react-codemirror@npm:^4.9.3": - version: 4.11.6 - resolution: "@uiw/react-codemirror@npm:4.11.6" + version: 4.12.3 + resolution: "@uiw/react-codemirror@npm:4.12.3" dependencies: "@babel/runtime": ^7.18.6 + "@codemirror/commands": ^6.1.0 + "@codemirror/state": ^6.1.1 "@codemirror/theme-one-dark": ^6.0.0 - "@uiw/codemirror-extensions-basic-setup": 4.11.6 + "@uiw/codemirror-extensions-basic-setup": 4.12.3 codemirror: ^6.0.0 peerDependencies: "@babel/runtime": ">=7.11.0" + "@codemirror/state": ">=6.0.0" "@codemirror/theme-one-dark": ">=6.0.0" "@codemirror/view": ">=6.0.0" codemirror: ">=6.0.0" react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: f630400ef57ff1928962244854805acb37f259606bc21967861c9ffaf80168d7c6c5052058299e96f7694635e218c6497ef4c5f3086109b35669b7cf5e2ee297 + checksum: 504003e6162dbe672072ace980117d1eeb9264282d6ad314de0398e0d29925133bc8d8c484c3aadb91b6ebedb8ebb259307b838cc31d39ab4792af5ab061949c languageName: node linkType: hard @@ -15964,23 +14513,6 @@ __metadata: languageName: node linkType: hard -"@whatwg-node/fetch@npm:^0.2.4": - version: 0.2.6 - resolution: "@whatwg-node/fetch@npm:0.2.6" - dependencies: - "@peculiar/webcrypto": ^1.4.0 - abort-controller: ^3.0.0 - busboy: ^1.6.0 - event-target-polyfill: ^0.0.3 - form-data-encoder: ^1.7.1 - formdata-node: ^4.3.1 - node-fetch: ^2.6.7 - undici: ^5.8.0 - web-streams-polyfill: ^3.2.0 - checksum: 12ee718be802860fbde2647ec0139dba598a278b0248326c0a314591b7096c84c34b16f5317273b0b11f3bbc6ff0d5d1df08983b4e9f5c3f0d779fde727f21af - languageName: node - linkType: hard - "@whatwg-node/fetch@npm:^0.3.0": version: 0.3.2 resolution: "@whatwg-node/fetch@npm:0.3.2" @@ -15998,6 +14530,23 @@ __metadata: languageName: node linkType: hard +"@whatwg-node/fetch@npm:^0.4.0": + version: 0.4.3 + resolution: "@whatwg-node/fetch@npm:0.4.3" + dependencies: + "@peculiar/webcrypto": ^1.4.0 + abort-controller: ^3.0.0 + busboy: ^1.6.0 + event-target-polyfill: ^0.0.3 + form-data-encoder: ^1.7.1 + formdata-node: ^4.3.1 + node-fetch: ^2.6.7 + undici: ^5.8.0 + web-streams-polyfill: ^3.2.0 + checksum: 45f798227833f64cadf71aa3304a7be1439f9fe1047ba5a846dba21585e52752a3bf08a9b509f2bb294ad42bfa1ff1ab3a5bf1665231019fe4e9a720ef876064 + languageName: node + linkType: hard + "@xmldom/xmldom@npm:^0.7.0, @xmldom/xmldom@npm:^0.7.5": version: 0.7.5 resolution: "@xmldom/xmldom@npm:0.7.5" @@ -16070,9 +14619,9 @@ __metadata: linkType: hard "abab@npm:^2.0.3, abab@npm:^2.0.5": - version: 2.0.5 - resolution: "abab@npm:2.0.5" - checksum: 0ec951b46d5418c2c2f923021ec193eaebdb4e802ffd5506286781b454be722a13a8430f98085cd3e204918401d9130ec6cc8f5ae19be315b3a0e857d83196e1 + version: 2.0.6 + resolution: "abab@npm:2.0.6" + checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e languageName: node linkType: hard @@ -16093,9 +14642,9 @@ __metadata: linkType: hard "abstract-logging@npm:^2.0.0": - version: 2.0.0 - resolution: "abstract-logging@npm:2.0.0" - checksum: 2f3e0ef758a18d98ddfd4fc01532724d6ada0945e2f679a0ad3b73fbe4b3594b1a3047dafb25bb88d3cb4031c4ea6090b25f8f5b7cfb4d2c7bcf125a56aca6df + version: 2.0.1 + resolution: "abstract-logging@npm:2.0.1" + checksum: 6967d15e5abbafd17f56eaf30ba8278c99333586fa4f7935fd80e93cfdc006c37fcc819c5d63ee373a12e6cb2d0417f7c3c6b9e42b957a25af9937d26749415e languageName: node linkType: hard @@ -16120,11 +14669,11 @@ __metadata: linkType: hard "acorn-import-assertions@npm:^1.7.6": - version: 1.7.6 - resolution: "acorn-import-assertions@npm:1.7.6" + version: 1.8.0 + resolution: "acorn-import-assertions@npm:1.8.0" peerDependencies: acorn: ^8 - checksum: bc8a1585abd70ebfb3a6b3112f5e3974fee3ac598230f916a3857f0ad4fa7e72197be532c49d1feeb83678ef264f34bee9bf1934dfb2f276d88468134a51fa9f + checksum: 5c4cf7c850102ba7ae0eeae0deb40fb3158c8ca5ff15c0bca43b5c47e307a1de3d8ef761788f881343680ea374631ae9e9615ba8876fee5268dbe068c98bcba6 languageName: node linkType: hard @@ -16138,9 +14687,9 @@ __metadata: linkType: hard "acorn-walk@npm:^7.1.1": - version: 7.1.1 - resolution: "acorn-walk@npm:7.1.1" - checksum: 046be0b8094b16459d94dadc550adb0cf5ace3fad02880cb4fd968e2250e988d0022f1f169c60b2fecc77bc711c46f91a6b1b7b72d6c458b008c9e821e89cfff + version: 7.2.0 + resolution: "acorn-walk@npm:7.2.0" + checksum: 9252158a79b9d92f1bc0dd6acc0fcfb87a67339e84bcc301bb33d6078936d27e35d606b4d35626d2962cd43c256d6f27717e70cbe15c04fff999ab0b2260b21f languageName: node linkType: hard @@ -16160,16 +14709,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.7.0, acorn@npm:^8.7.1": - version: 8.7.1 - resolution: "acorn@npm:8.7.1" - bin: - acorn: bin/acorn - checksum: aca0aabf98826717920ac2583fdcad0a6fbe4e583fdb6e843af2594e907455aeafe30b1e14f1757cd83ce1776773cf8296ffc3a4acf13f0bd3dfebcf1db6ae80 - languageName: node - linkType: hard - -"acorn@npm:^8.8.0": +"acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.7.0, acorn@npm:^8.7.1, acorn@npm:^8.8.0": version: 8.8.0 resolution: "acorn@npm:8.8.0" bin: @@ -16186,9 +14726,9 @@ __metadata: linkType: hard "address@npm:^1.0.1, address@npm:^1.1.2": - version: 1.1.2 - resolution: "address@npm:1.1.2" - checksum: d966deee6ab9a0f96ed1d25dc73e91a248f64479c91f9daeb15237b8e3c39a02faac4e6afe8987ef9e5aea60a1593cef5882b7456ab2e6196fc0229a93ec39c2 + version: 1.2.1 + resolution: "address@npm:1.2.1" + checksum: e4c0f961464ccad09c3f7ed3a8d12f609354a87dd1ad379e43661e9684446fbf158be3edeef85e1590dfc6c88c0897c5908bc18f232eb86e43993a2ada5820fa languageName: node linkType: hard @@ -16208,18 +14748,7 @@ __metadata: languageName: node linkType: hard -"agentkeepalive@npm:^4.1.3, agentkeepalive@npm:^4.1.4, agentkeepalive@npm:^4.2.0": - version: 4.2.0 - resolution: "agentkeepalive@npm:4.2.0" - dependencies: - debug: ^4.1.0 - depd: ^1.1.2 - humanize-ms: ^1.2.1 - checksum: 89806f83ceebbcaabf6bd581a8dce4870910fd2a11f66df8f505b4cd4ce4ca5ab9e6eec8d11ce8531a6b60f6748b75b0775e0e2fa33871503ef00d535418a19a - languageName: node - linkType: hard - -"agentkeepalive@npm:^4.2.1": +"agentkeepalive@npm:^4.1.3, agentkeepalive@npm:^4.1.4, agentkeepalive@npm:^4.2.1": version: 4.2.1 resolution: "agentkeepalive@npm:4.2.1" dependencies: @@ -16286,7 +14815,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.10.0, ajv@npm:^6.10.1, ajv@npm:^6.12.2, ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:^6.5.5, ajv@npm:^6.7.0, ajv@npm:~6.12.6": +"ajv@npm:^6.10.0, ajv@npm:^6.10.1, ajv@npm:^6.12.2, ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:^6.7.0, ajv@npm:~6.12.6": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -16310,13 +14839,6 @@ __metadata: languageName: node linkType: hard -"alphanum-sort@npm:^1.0.2": - version: 1.0.2 - resolution: "alphanum-sort@npm:1.0.2" - checksum: 5a32d0b3c0944e65d22ff3ae2f88d7a4f8d88a78a703033caeae33f2944915e053d283d02f630dc94823edc7757148ecdcf39fd687a5117bda5c10133a03a7d8 - languageName: node - linkType: hard - "already@npm:^3.2.0": version: 3.4.0 resolution: "already@npm:3.4.0" @@ -16373,9 +14895,9 @@ __metadata: linkType: hard "ansi-regex@npm:^4.1.0": - version: 4.1.0 - resolution: "ansi-regex@npm:4.1.0" - checksum: 97aa4659538d53e5e441f5ef2949a3cffcb838e57aeaad42c4194e9d7ddb37246a6526c4ca85d3940a9d1e19b11cc2e114530b54c9d700c8baf163c31779baf8 + version: 4.1.1 + resolution: "ansi-regex@npm:4.1.1" + checksum: b1a6ee44cb6ecdabaa770b2ed500542714d4395d71c7e5c25baa631f680fb2ad322eb9ba697548d498a6fd366949fc8b5bfcf48d49a32803611f648005b01888 languageName: node linkType: hard @@ -16412,9 +14934,9 @@ __metadata: linkType: hard "ansi-styles@npm:^6.0.0": - version: 6.1.0 - resolution: "ansi-styles@npm:6.1.0" - checksum: 7a7f8528c07a9d20c3a92bccd2b6bc3bb4d26e5cb775c02826921477377bd495d615d61f710d56216344b6238d1d11ef2b0348e146c5b128715578bfb3217229 + version: 6.1.1 + resolution: "ansi-styles@npm:6.1.1" + checksum: f2b1ed658ead23caf77effe7b875960cacd70d1ebe47c830e191358b242d688cf52a28d55ef9b19d102f792e8c1dec34bd865db264f1c7f4f63dd3a5fa84677e languageName: node linkType: hard @@ -16452,16 +14974,7 @@ __metadata: languageName: node linkType: hard -"apollo-reporting-protobuf@npm:^3.3.1": - version: 3.3.1 - resolution: "apollo-reporting-protobuf@npm:3.3.1" - dependencies: - "@apollo/protobufjs": 1.2.2 - checksum: 1933affb1640d5905e29f8a41becdba1981effd767660748517ea1d4ef30db4c6789b17eba02f11dafd29b46b56d95cd15cbc3eb319d0a90affbdd0f2d168473 - languageName: node - linkType: hard - -"apollo-reporting-protobuf@npm:^3.3.2": +"apollo-reporting-protobuf@npm:^3.3.1, apollo-reporting-protobuf@npm:^3.3.2": version: 3.3.2 resolution: "apollo-reporting-protobuf@npm:3.3.2" dependencies: @@ -16646,22 +15159,22 @@ __metadata: linkType: hard "are-we-there-yet@npm:^3.0.0": - version: 3.0.0 - resolution: "are-we-there-yet@npm:3.0.0" + version: 3.0.1 + resolution: "are-we-there-yet@npm:3.0.1" dependencies: delegates: ^1.0.0 readable-stream: ^3.6.0 - checksum: 348edfdd931b0b50868b55402c01c3f64df1d4c229ab6f063539a5025fd6c5f5bb8a0cab409bbed8d75d34762d22aa91b7c20b4204eb8177063158d9ba792981 + checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 languageName: node linkType: hard "are-we-there-yet@npm:~1.1.2": - version: 1.1.5 - resolution: "are-we-there-yet@npm:1.1.5" + version: 1.1.7 + resolution: "are-we-there-yet@npm:1.1.7" dependencies: delegates: ^1.0.0 readable-stream: ^2.0.6 - checksum: 9a746b1dbce4122f44002b0c39fbba5b2c6f52c00e88b6ccba6fc68652323f8a1355a20e8ab94846995626d8de3bf67669a3b4a037dff0885db14607168f2b15 + checksum: 70d251719c969b2745bfe5ddf3ebaefa846a636e90a6d5212573676af5d6670e15457761d4725731e19cbebdce42c4ab0cbedf23ab047f2a08274985aa10a3c7 languageName: node linkType: hard @@ -16689,14 +15202,14 @@ __metadata: linkType: hard "args@npm:^5.0.0": - version: 5.0.1 - resolution: "args@npm:5.0.1" + version: 5.0.3 + resolution: "args@npm:5.0.3" dependencies: camelcase: 5.0.0 chalk: 2.4.2 leven: 2.1.0 mri: 1.1.4 - checksum: 51e2a05f32d15b8e292f000e6b232118df61b8f4fd446b17bb4e99df9ab47fe2c4a01924d7f967a6f08e82f9c19be277b08ed22bceff058aca849144ef8efed3 + checksum: ac39e656090f9364d7a2a42216a572dfe36d3e4d16d87ca4c1c9552a1c325dc222b642124cb96cdeeafb46662922910191f5aa12142cc4ca117b6d85454c8423 languageName: node linkType: hard @@ -16711,9 +15224,9 @@ __metadata: linkType: hard "aria-query@npm:^5.0.0": - version: 5.0.0 - resolution: "aria-query@npm:5.0.0" - checksum: c41f98866c5a304561ee8cae55856711cddad6f3f85d8cb43cc5f79667078d9b8979ce32d244c1ff364e6463a4d0b6865804a33ccc717fed701b281cf7dc6296 + version: 5.0.2 + resolution: "aria-query@npm:5.0.2" + checksum: 2ecb77a64b9bbb030f5267b8672042b9559bdc507348d7c5efc14a6c180b06704c63481b162913f0466391837569b6d84f93ab18d73629e7bfa34c4f927c1fbc languageName: node linkType: hard @@ -16745,13 +15258,6 @@ __metadata: languageName: node linkType: hard -"array-filter@npm:^1.0.0": - version: 1.0.0 - resolution: "array-filter@npm:1.0.0" - checksum: 467054291f522d7f633b1f5e79aac9008ade50a7354e0178d9ec8f0091ec03bc19a41d4eb22985daf2279a5c27be6d7cf410733539e7fccb0742145b89aca438 - languageName: node - linkType: hard - "array-flatten@npm:1.1.1": version: 1.1.1 resolution: "array-flatten@npm:1.1.1" @@ -16773,20 +15279,7 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.1.2, array-includes@npm:^3.1.4": - version: 3.1.4 - resolution: "array-includes@npm:3.1.4" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - get-intrinsic: ^1.1.1 - is-string: ^1.0.7 - checksum: 69967c38c52698f84b50a7aed5554aadc89c6ac6399b6d92ad061a5952f8423b4bba054c51d40963f791dfa294d7247cdd7988b6b1f2c5861477031c6386e1c0 - languageName: node - linkType: hard - -"array-includes@npm:^3.1.5": +"array-includes@npm:^3.1.4, array-includes@npm:^3.1.5": version: 3.1.5 resolution: "array-includes@npm:3.1.5" dependencies: @@ -16829,7 +15322,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.flat@npm:^1.2.3": +"array.prototype.flat@npm:^1.2.3, array.prototype.flat@npm:^1.2.5": version: 1.3.0 resolution: "array.prototype.flat@npm:1.3.0" dependencies: @@ -16841,17 +15334,6 @@ __metadata: languageName: node linkType: hard -"array.prototype.flat@npm:^1.2.5": - version: 1.2.5 - resolution: "array.prototype.flat@npm:1.2.5" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.0 - checksum: 9cc6414b111abfc7717e39546e4887b1e5ec74df8f1618d83425deaa95752bf05d475d1d241253b4d88d4a01f8e1bc84845ad5b7cc2047f8db2f614512acd40e - languageName: node - linkType: hard - "array.prototype.flatmap@npm:^1.3.0": version: 1.3.0 resolution: "array.prototype.flatmap@npm:1.3.0" @@ -16892,23 +15374,24 @@ __metadata: languageName: node linkType: hard -"asn1.js@npm:^4.0.0": - version: 4.10.1 - resolution: "asn1.js@npm:4.10.1" +"asn1.js@npm:^5.2.0": + version: 5.4.1 + resolution: "asn1.js@npm:5.4.1" dependencies: bn.js: ^4.0.0 inherits: ^2.0.1 minimalistic-assert: ^1.0.0 - checksum: 9289a1a55401238755e3142511d7b8f6fc32f08c86ff68bd7100da8b6c186179dd6b14234fba2f7f6099afcd6758a816708485efe44bc5b2a6ec87d9ceeddbb5 + safer-buffer: ^2.1.0 + checksum: 3786a101ac6f304bd4e9a7df79549a7561950a13d4bcaec0c7790d44c80d147c1a94ba3d4e663673406064642a40b23fcd6c82a9952468e386c1a1376d747f9a languageName: node linkType: hard "asn1@npm:^0.2.4, asn1@npm:~0.2.3": - version: 0.2.4 - resolution: "asn1@npm:0.2.4" + version: 0.2.6 + resolution: "asn1@npm:0.2.6" dependencies: safer-buffer: ~2.1.0 - checksum: aa5d6f77b1e0597df53824c68cfe82d1d89ce41cb3520148611f025fbb3101b2d25dd6a40ad34e4fac10f6b19ed5e8628cd4b7d212261e80e83f02b39ee5663c + checksum: 39f2ae343b03c15ad4f238ba561e626602a3de8d94ae536c46a4a93e69578826305366dc09fbb9b56aec39b4982a463682f259c38e59f6fa380cd72cd61e493d languageName: node linkType: hard @@ -16971,9 +15454,9 @@ __metadata: linkType: hard "async-lock@npm:^1.1.0": - version: 1.2.4 - resolution: "async-lock@npm:1.2.4" - checksum: 9b8cf65bb9ac7b58ff95539a03b73d51f64d0aea95cde1ebf787859670a8998f0a5258f118db6b54305bf6ed20cf3a2f923f4dd69a58d472fa78cca436c42342 + version: 1.3.2 + resolution: "async-lock@npm:1.3.2" + checksum: d66d6163d4a5c1d09f60118d850da53394a2b8ccae28e0613a88fc33e8b0c2b3266c4f6ed0bc5c9889ad8a926fc886a3e06600775c7264289e8814e39018cd7f languageName: node linkType: hard @@ -16987,9 +15470,9 @@ __metadata: linkType: hard "async@npm:^3.2.0, async@npm:^3.2.3": - version: 3.2.3 - resolution: "async@npm:3.2.3" - checksum: c4bee57ab2249af3dc83ca3ef9acfa8e822c0d5e5aa41bae3eaf7f673648343cd64ecd7d26091ffd357f3f044428b17b5f00098494b6cf8b6b3e9681f0636ca1 + version: 3.2.4 + resolution: "async@npm:3.2.4" + checksum: 43d07459a4e1d09b84a20772414aa684ff4de085cbcaec6eea3c7a8f8150e8c62aa6cd4e699fe8ee93c3a5b324e777d34642531875a0817a35697522c1b02e89 languageName: node linkType: hard @@ -17031,34 +15514,18 @@ __metadata: linkType: hard "autolinker@npm:^3.11.0": - version: 3.14.1 - resolution: "autolinker@npm:3.14.1" + version: 3.16.2 + resolution: "autolinker@npm:3.16.2" dependencies: - tslib: ^1.9.3 - checksum: e8c0b07053a6d1557953325e500d6e59f4c7c5bb2ae97d0ace9229019133fc0f058ef41636bfc74b6581d98bc4a5e15631dc00cfe0993d0c41b525e2e0652e37 + tslib: ^2.3.0 + checksum: 1d5d20ef23586629ec3c341052e6bb6250399cf5e66db21540c17b2f5b1137066435fb274a2115b57464d05e75b85afad61ef7cdf6ea693ef2920a3748b7249d languageName: node linkType: hard -"available-typed-arrays@npm:^1.0.2": - version: 1.0.2 - resolution: "available-typed-arrays@npm:1.0.2" - dependencies: - array-filter: ^1.0.0 - checksum: 915a89f31bb9ba51f7396d5ae7d8eff99bc6d6ba9f337068a6916e9ba56fa47bfea7ea69f6f6ad131eac57f76582c721e5f0594e8fea7156894313fc41203fbd - languageName: node - linkType: hard - -"aws-lambda@npm:^1.0.7": - version: 1.0.7 - resolution: "aws-lambda@npm:1.0.7" - dependencies: - aws-sdk: ^2.814.0 - commander: ^3.0.2 - js-yaml: ^3.14.1 - watchpack: ^2.0.0-beta.10 - bin: - lambda: bin/lambda - checksum: 11316e87b5c4fc36e6bd0495742a3c0ed13befc9527a7b251a58180d141d9afd68b684f37aeb3b53d117d3c2f96747eace31826b683543f1edddc03f392865fd +"available-typed-arrays@npm:^1.0.5": + version: 1.0.5 + resolution: "available-typed-arrays@npm:1.0.5" + checksum: 20eb47b3cefd7db027b9bbb993c658abd36d4edd3fe1060e83699a03ee275b0c9b216cc076ff3f2db29073225fb70e7613987af14269ac1fe2a19803ccc97f1a languageName: node linkType: hard @@ -17085,9 +15552,9 @@ __metadata: languageName: node linkType: hard -"aws-sdk@npm:^2.1122.0, aws-sdk@npm:^2.814.0, aws-sdk@npm:^2.840.0, aws-sdk@npm:^2.948.0": - version: 2.1209.0 - resolution: "aws-sdk@npm:2.1209.0" +"aws-sdk@npm:^2.1122.0, aws-sdk@npm:^2.840.0, aws-sdk@npm:^2.948.0": + version: 2.1218.0 + resolution: "aws-sdk@npm:2.1218.0" dependencies: buffer: 4.9.2 events: 1.1.1 @@ -17099,7 +15566,7 @@ __metadata: util: ^0.12.4 uuid: 8.0.0 xml2js: 0.4.19 - checksum: da4cae7da28b218dfa67398e5a63acb894b1636337e2842f6e0800bad6eb5fc692d0b703dc84f67fdc9f1d59ee9f82f4ccc9d71fe8fb6a49a8292697ab77b92c + checksum: e1bb41bf8b647e5f6e64f5955beb3972473916af31187d87d20f0a3ed6dab23dff47d490c0d351bb500f331823ec72956c8b510cf232be4bf25386b98652be41 languageName: node linkType: hard @@ -17244,39 +15711,39 @@ __metadata: languageName: node linkType: hard -"babel-plugin-polyfill-corejs2@npm:^0.3.1": - version: 0.3.1 - resolution: "babel-plugin-polyfill-corejs2@npm:0.3.1" +"babel-plugin-polyfill-corejs2@npm:^0.3.3": + version: 0.3.3 + resolution: "babel-plugin-polyfill-corejs2@npm:0.3.3" dependencies: - "@babel/compat-data": ^7.13.11 - "@babel/helper-define-polyfill-provider": ^0.3.1 + "@babel/compat-data": ^7.17.7 + "@babel/helper-define-polyfill-provider": ^0.3.3 semver: ^6.1.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: ca873f14ccd6d2942013345a956de8165d0913556ec29756a748157140f5312f79eed487674e0ca562285880f05829b3712d72e1e4b412c2ce46bd6a50b4b975 + checksum: 7db3044993f3dddb3cc3d407bc82e640964a3bfe22de05d90e1f8f7a5cb71460011ab136d3c03c6c1ba428359ebf635688cd6205e28d0469bba221985f5c6179 languageName: node linkType: hard -"babel-plugin-polyfill-corejs3@npm:^0.5.2": - version: 0.5.2 - resolution: "babel-plugin-polyfill-corejs3@npm:0.5.2" +"babel-plugin-polyfill-corejs3@npm:^0.6.0": + version: 0.6.0 + resolution: "babel-plugin-polyfill-corejs3@npm:0.6.0" dependencies: - "@babel/helper-define-polyfill-provider": ^0.3.1 - core-js-compat: ^3.21.0 + "@babel/helper-define-polyfill-provider": ^0.3.3 + core-js-compat: ^3.25.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2f3184c73f80f00ac876a5ebcad945fd8d2ae70e5f85b7ab6cc3bc69bc74025f4f7070de7abbb2a7274c78e130bd34fc13f4c85342da28205930364a1ef0aa21 + checksum: 470bb8c59f7c0912bd77fe1b5a2e72f349b3f65bbdee1d60d6eb7e1f4a085c6f24b2dd5ab4ac6c2df6444a96b070ef6790eccc9edb6a2668c60d33133bfb62c6 languageName: node linkType: hard -"babel-plugin-polyfill-regenerator@npm:^0.3.1": - version: 0.3.1 - resolution: "babel-plugin-polyfill-regenerator@npm:0.3.1" +"babel-plugin-polyfill-regenerator@npm:^0.4.1": + version: 0.4.1 + resolution: "babel-plugin-polyfill-regenerator@npm:0.4.1" dependencies: - "@babel/helper-define-polyfill-provider": ^0.3.1 + "@babel/helper-define-polyfill-provider": ^0.3.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f1473df7b700d6795ca41301b1e65a0aff15ce6c1463fc0ce2cf0c821114b0330920f59d4cebf52976363ee817ba29ad2758544a4661a724b08191080b9fe1da + checksum: ab0355efbad17d29492503230387679dfb780b63b25408990d2e4cf421012dae61d6199ddc309f4d2409ce4e9d3002d187702700dd8f4f8770ebbba651ed066c languageName: node linkType: hard @@ -17321,8 +15788,8 @@ __metadata: linkType: hard "babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.0.0 - resolution: "babel-preset-current-node-syntax@npm:1.0.0" + version: 1.0.1 + resolution: "babel-preset-current-node-syntax@npm:1.0.1" dependencies: "@babel/plugin-syntax-async-generators": ^7.8.4 "@babel/plugin-syntax-bigint": ^7.8.3 @@ -17338,7 +15805,7 @@ __metadata: "@babel/plugin-syntax-top-level-await": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0 - checksum: 05c193dcf11eae66bd43621d49e346c0b94ba18a9d193a612a36cef30732ac5f62092312de76140400551dd13c457a8e79c96ebafb445cc491d993f7ccb9a9de + checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 languageName: node linkType: hard @@ -17430,9 +15897,9 @@ __metadata: linkType: hard "bail@npm:^2.0.0": - version: 2.0.1 - resolution: "bail@npm:2.0.1" - checksum: 5e80e3d71c52f134bf51e9e89570c4e81e50e9ace0126954e4594699cafdf01136535bedf36780ef77802c88be3d3cfb0d0f83495d8d7ddf90e948e4fbaf99c3 + version: 2.0.2 + resolution: "bail@npm:2.0.2" + checksum: aab4e8ccdc8d762bf3fdfce8e706601695620c0c2eda256dd85088dc0be3cfd7ff126f6e99c2bee1f24f5d418414aacf09d7f9702f16d6963df2fa488cda8824 languageName: node linkType: hard @@ -17525,7 +15992,7 @@ __metadata: languageName: node linkType: hard -"before-after-hook@npm:^2.1.0, before-after-hook@npm:^2.2.0": +"before-after-hook@npm:^2.2.0": version: 2.2.2 resolution: "before-after-hook@npm:2.2.2" checksum: dc2e1ffe389e5afbef2a46790b1b5a50247ed57aba67649cfa9ec2552d248cc9278f222e72fb5a8ff59bbb39d78fbaa97e7234ead0c6b5e8418b67a8644ce207 @@ -17572,37 +16039,37 @@ __metadata: linkType: hard "big.js@npm:^6.1.1": - version: 6.2.0 - resolution: "big.js@npm:6.2.0" - checksum: 42bcbf0be703c4ae8669c969d0e108f9e1730f20e85bd779e31f7a92d28f6b3e87de96e25ef8657edc0b5dc945a0f66c184ec2654276b86f49e4e9ba025f131a + version: 6.2.1 + resolution: "big.js@npm:6.2.1" + checksum: 0b234a2fd56c52bed2798ed2020bcab6fef5e9523b99a05406ad071d1aed6ee97ada9fb8de9576092da74c68825c276e19015743b8d1baea269b60a5c666b0cd languageName: node linkType: hard "bignumber.js@npm:^9.0.0": - version: 9.0.1 - resolution: "bignumber.js@npm:9.0.1" - checksum: 6e72f6069d9db32fc8d27561164de9f811b15f9144be61f323d8b36150a239eea50c92e20ba38af2ba5e717af10b8ef12db8f9948fe2ff02bf17ede5239d15d3 + version: 9.1.0 + resolution: "bignumber.js@npm:9.1.0" + checksum: 52ec2bb5a3874d7dc1a1018f28f8f7aff4683515ffd09d6c2d93191343c76567ae0ee32cc45149d53afb2b904bc62ed471a307b35764beea7e9db78e56bef6c6 languageName: node linkType: hard "bin-links@npm:^3.0.0": - version: 3.0.0 - resolution: "bin-links@npm:3.0.0" + version: 3.0.3 + resolution: "bin-links@npm:3.0.3" dependencies: - cmd-shim: ^4.0.1 + cmd-shim: ^5.0.0 mkdirp-infer-owner: ^2.0.0 - npm-normalize-package-bin: ^1.0.0 - read-cmd-shim: ^2.0.0 + npm-normalize-package-bin: ^2.0.0 + read-cmd-shim: ^3.0.0 rimraf: ^3.0.0 write-file-atomic: ^4.0.0 - checksum: 61cec54a913bf1897c29db1ac277c022cc97a7189a55b2ed7343e75955800e4ec149e76b134f9c685947e37196282d652bf1f9fa893919283827b61ca289b170 + checksum: ea2dc6f91a6ef8b3840ceb48530bbeb8d6d1c6f7985fe1409b16d7e7db39432f0cb5ce15cc2788bb86d989abad6e2c7fba3500996a210a682eec18fb26a66e72 languageName: node linkType: hard "binary-extensions@npm:^2.0.0": - version: 2.0.0 - resolution: "binary-extensions@npm:2.0.0" - checksum: 554f65d3378cf71c3185c17dec3ca58334b8ff6ae242db3107284765ce33b2af19efd20c11faec41907a40534929e34b3a98e7d391c61e4211b45732dccb1115 + version: 2.2.0 + resolution: "binary-extensions@npm:2.2.0" + checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 languageName: node linkType: hard @@ -17629,10 +16096,10 @@ __metadata: languageName: node linkType: hard -"bintrees@npm:1.0.1": - version: 1.0.1 - resolution: "bintrees@npm:1.0.1" - checksum: 71d00ce450ee7ad080a3c86ae5f05fac841bdf95c0d78f3b3bbf8f754c19d7cb732f0f9213a46ed27cbec47eb124ffe2b686bef870718a4b9918c23210b55c73 +"bintrees@npm:1.0.2": + version: 1.0.2 + resolution: "bintrees@npm:1.0.2" + checksum: 56a52b7d3634e30002b1eda740d2517a22fa8e9e2eb088e919f37c030a0ed86e364ab59e472fc770fc8751308054bb1c892979d150e11d9e11ac33bcc1b5d16e languageName: node linkType: hard @@ -17675,14 +16142,21 @@ __metadata: languageName: node linkType: hard -"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.1.1, bn.js@npm:^4.11.9": +"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9": version: 4.12.0 resolution: "bn.js@npm:4.12.0" checksum: 39afb4f15f4ea537b55eaf1446c896af28ac948fdcf47171961475724d1bb65118cca49fa6e3d67706e4790955ec0e74de584e45c8f1ef89f46c812bee5b5a12 languageName: node linkType: hard -"body-parser@npm:1.20.0": +"bn.js@npm:^5.0.0, bn.js@npm:^5.1.1": + version: 5.2.1 + resolution: "bn.js@npm:5.2.1" + checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3 + languageName: node + linkType: hard + +"body-parser@npm:1.20.0, body-parser@npm:^1.19.0": version: 1.20.0 resolution: "body-parser@npm:1.20.0" dependencies: @@ -17702,33 +16176,15 @@ __metadata: languageName: node linkType: hard -"body-parser@npm:^1.19.0": - version: 1.19.2 - resolution: "body-parser@npm:1.19.2" - dependencies: - bytes: 3.1.2 - content-type: ~1.0.4 - debug: 2.6.9 - depd: ~1.1.2 - http-errors: 1.8.1 - iconv-lite: 0.4.24 - on-finished: ~2.3.0 - qs: 6.9.7 - raw-body: 2.4.3 - type-is: ~1.6.18 - checksum: 7f777ea65670e2622ca4a785b5dcb2a68451b3bb8d4d0f41091d307d56b640dba588a9ae04d85dda2cdd5e42788266a783528d5417e5643720fd611fd52522e7 - languageName: node - linkType: hard - "bonjour-service@npm:^1.0.11": - version: 1.0.11 - resolution: "bonjour-service@npm:1.0.11" + version: 1.0.14 + resolution: "bonjour-service@npm:1.0.14" dependencies: array-flatten: ^2.1.2 dns-equal: ^1.0.0 fast-deep-equal: ^3.1.3 - multicast-dns: ^7.2.4 - checksum: b6093a856de9bc303551f1639945318e93782d3c40f03e38def3e2f079f478afd5385cf46538ade86f07205ac4b5f059105832b01eb9ce142fc69d27c006982f + multicast-dns: ^7.2.5 + checksum: 4a825bbf1824147ba8295a182fb3e86a8bae5159a08e2f118e829a0c988043a559f1f6e4eab425fe17ee9a1f080115d30430e78962e53f75bb03e2021ee7c5b2 languageName: node linkType: hard @@ -17866,28 +16322,30 @@ __metadata: languageName: node linkType: hard -"browserify-rsa@npm:^4.0.0": - version: 4.0.1 - resolution: "browserify-rsa@npm:4.0.1" +"browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.0.1": + version: 4.1.0 + resolution: "browserify-rsa@npm:4.1.0" dependencies: - bn.js: ^4.1.0 + bn.js: ^5.0.0 randombytes: ^2.0.1 - checksum: e5d8406e65f8e9a2e038f6fa0cb30108269a1ab33c1563ddc78fb0fff1a43ea21d44bd3dcd01a783683f60dcbc4b58c63120a11f6d09939e3f84af378e6caef8 + checksum: 155f0c135873efc85620571a33d884aa8810e40176125ad424ec9d85016ff105a07f6231650914a760cca66f29af0494087947b7be34880dd4599a0cd3c38e54 languageName: node linkType: hard "browserify-sign@npm:^4.0.0": - version: 4.0.4 - resolution: "browserify-sign@npm:4.0.4" + version: 4.2.1 + resolution: "browserify-sign@npm:4.2.1" dependencies: - bn.js: ^4.1.1 - browserify-rsa: ^4.0.0 - create-hash: ^1.1.0 - create-hmac: ^1.1.2 - elliptic: ^6.0.0 - inherits: ^2.0.1 - parse-asn1: ^5.0.0 - checksum: b1e6f6383f6abbbd5e0f4eb0161cd211cb79af636dd14b5f038db7f3a309b3e026e7e8d7428e3f072a9baace57051a2f45cff311f3b26a901e8be921c3dab847 + bn.js: ^5.1.1 + browserify-rsa: ^4.0.1 + create-hash: ^1.2.0 + create-hmac: ^1.1.7 + elliptic: ^6.5.3 + inherits: ^2.0.4 + parse-asn1: ^5.1.5 + readable-stream: ^3.6.0 + safe-buffer: ^5.2.0 + checksum: 0221f190e3f5b2d40183fa51621be7e838d9caa329fe1ba773406b7637855f37b30f5d83e52ff8f244ed12ffe6278dd9983638609ed88c841ce547e603855707 languageName: node linkType: hard @@ -17900,32 +16358,17 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.16.0, browserslist@npm:^4.16.6, browserslist@npm:^4.17.5, browserslist@npm:^4.18.1": - version: 4.19.1 - resolution: "browserslist@npm:4.19.1" +"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.16.6, browserslist@npm:^4.18.1, browserslist@npm:^4.20.3, browserslist@npm:^4.21.3": + version: 4.21.4 + resolution: "browserslist@npm:4.21.4" dependencies: - caniuse-lite: ^1.0.30001286 - electron-to-chromium: ^1.4.17 - escalade: ^3.1.1 - node-releases: ^2.0.1 - picocolors: ^1.0.0 - bin: - browserslist: cli.js - checksum: c0777fd483691638fd6801e16c9d809e1d65f6d2b06db2e806654be51045cbab1452a89841a2c5caea2cbe19d621b4f1d391cffbb24512aa33280039ab345875 - languageName: node - linkType: hard - -"browserslist@npm:^4.20.2, browserslist@npm:^4.21.2": - version: 4.21.2 - resolution: "browserslist@npm:4.21.2" - dependencies: - caniuse-lite: ^1.0.30001366 - electron-to-chromium: ^1.4.188 + caniuse-lite: ^1.0.30001400 + electron-to-chromium: ^1.4.251 node-releases: ^2.0.6 - update-browserslist-db: ^1.0.4 + update-browserslist-db: ^1.0.9 bin: browserslist: cli.js - checksum: 30fe59f8b065f99665ea63819d29c797660f7975857c290f61f570403abed4d7039ca15b6fd21e39a57b87e1a9262f94676114040766fc0da6ccc11faf9fc377 + checksum: 4af3793704dbb4615bcd29059ab472344dc7961c8680aa6c4bb84f05340e14038d06a5aead58724eae69455b8fade8b8c69f1638016e87e5578969d74c078b79 languageName: node linkType: hard @@ -17998,7 +16441,7 @@ __metadata: languageName: node linkType: hard -"buffer@npm:^5.2.0, buffer@npm:^5.2.1, buffer@npm:^5.5.0, buffer@npm:^5.6.0, buffer@npm:^5.7.1": +"buffer@npm:^5.2.0, buffer@npm:^5.2.1, buffer@npm:^5.5.0, buffer@npm:^5.6.0": version: 5.7.1 resolution: "buffer@npm:5.7.1" dependencies: @@ -18018,10 +16461,17 @@ __metadata: languageName: node linkType: hard -"builtin-modules@npm:^3.0.0": - version: 3.2.0 - resolution: "builtin-modules@npm:3.2.0" - checksum: 0265aa1ba78e1a16f4e18668d815cb43fb364e6a6b8aa9189c6f44c7b894a551a43b323c40206959d2d4b2568c1f2805607ad6c88adc306a776ce6904cca6715 +"buildcheck@npm:0.0.3": + version: 0.0.3 + resolution: "buildcheck@npm:0.0.3" + checksum: baf30605c56e80c2ca0502e40e18f2ebc7075bb4a861c941c0b36cd468b27957ed11a62248003ce99b9e5f91a7dfa859b30aad4fa50f0090c77a6f596ba20e6d + languageName: node + linkType: hard + +"builtin-modules@npm:^3.3.0": + version: 3.3.0 + resolution: "builtin-modules@npm:3.3.0" + checksum: db021755d7ed8be048f25668fe2117620861ef6703ea2c65ed2779c9e3636d5c3b82325bd912244293959ff3ae303afa3471f6a15bf5060c103e4cc3a839749d languageName: node linkType: hard @@ -18065,9 +16515,9 @@ __metadata: linkType: hard "byte-size@npm:^7.0.0": - version: 7.0.0 - resolution: "byte-size@npm:7.0.0" - checksum: 6cdd45fb64ac3f80d5cbbc01df7974a4613b3e64bd792b6b8211c8669ca3d1f7efd9379ba24cebfc371ce3e890817dcdaf0bd7ed99571fe2de4b946e6c31a138 + version: 7.0.1 + resolution: "byte-size@npm:7.0.1" + checksum: 6791663a6d53bf950e896f119d3648fe8d7e8ae677e2ccdae84d0e5b78f21126e25f9d73aa19be2a297cb27abd36b6f5c361c0de36ebb2f3eb8a853f2ac99a4a languageName: node linkType: hard @@ -18085,7 +16535,7 @@ __metadata: languageName: node linkType: hard -"cacache@npm:^15.0.3, cacache@npm:^15.0.5, cacache@npm:^15.2.0, cacache@npm:^15.3.0": +"cacache@npm:^15.0.3, cacache@npm:^15.0.5, cacache@npm:^15.2.0": version: 15.3.0 resolution: "cacache@npm:15.3.0" dependencies: @@ -18112,8 +16562,8 @@ __metadata: linkType: hard "cacache@npm:^16.0.0, cacache@npm:^16.0.6, cacache@npm:^16.1.0": - version: 16.1.1 - resolution: "cacache@npm:16.1.1" + version: 16.1.3 + resolution: "cacache@npm:16.1.3" dependencies: "@npmcli/fs": ^2.1.0 "@npmcli/move-file": ^2.0.0 @@ -18132,8 +16582,8 @@ __metadata: rimraf: ^3.0.2 ssri: ^9.0.0 tar: ^6.1.11 - unique-filename: ^1.1.1 - checksum: 488524617008b793f0249b0c4ea2c330c710ca997921376e15650cc2415a8054491ae2dee9f01382c2015602c0641f3f977faf2fa7361aa33d2637dcfb03907a + unique-filename: ^2.0.0 + checksum: d91409e6e57d7d9a3a25e5dcc589c84e75b178ae8ea7de05cbf6b783f77a5fae938f6e8fda6f5257ed70000be27a681e1e44829251bfffe4c10216002f8f14e6 languageName: node linkType: hard @@ -18155,9 +16605,9 @@ __metadata: linkType: hard "cacheable-lookup@npm:^5.0.3": - version: 5.0.3 - resolution: "cacheable-lookup@npm:5.0.3" - checksum: ad5a6d5cd1630ab03b63741b610f3ed71593879b3de9ba43e6767129b2cbb8303fe24af4ec808584531a85c5605a614902cfdc41f5b6200d8c5f029d6b90c430 + version: 5.0.4 + resolution: "cacheable-lookup@npm:5.0.4" + checksum: 763e02cf9196bc9afccacd8c418d942fc2677f22261969a4c2c2e760fa44a2351a81557bd908291c3921fe9beb10b976ba8fa50c5ca837c5a0dd945f16468f2d languageName: node linkType: hard @@ -18287,10 +16737,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001286, caniuse-lite@npm:^1.0.30001366": - version: 1.0.30001392 - resolution: "caniuse-lite@npm:1.0.30001392" - checksum: b46fdb4cd63f43e608c9378e9a4cfc1092407fccda32f13f53db8818e0e654e5b2b9e7aee76b95a1a4fd3f2c2eabd1157aef19905f2c60dfcec136b27ac5fce6 +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001400": + version: 1.0.30001402 + resolution: "caniuse-lite@npm:1.0.30001402" + checksum: 6068ccccd64b357f75388cb2303cf351b686b20800571d0a845bff5c0e0d24f83df0133afbbdd8177a33eb087c93d39ecf359035a52b2feac5f182c946f706ee languageName: node linkType: hard @@ -18334,9 +16784,9 @@ __metadata: linkType: hard "ccount@npm:^2.0.0": - version: 2.0.0 - resolution: "ccount@npm:2.0.0" - checksum: b238baa1415f259264a8b5fa552929ae1dc46cb46bd94a79deb29d7a814cc4cc36500b24184c38a9f0332d19c6acbb386d5bb5f4f03396140be92edd7294db1c + version: 2.0.1 + resolution: "ccount@npm:2.0.1" + checksum: 48193dada54c9e260e0acf57fc16171a225305548f9ad20d5471e0f7a8c026aedd8747091dccb0d900cde7df4e4ddbd235df0d8de4a64c71b12f0d3303eeafd4 languageName: node linkType: hard @@ -18442,13 +16892,6 @@ __metadata: languageName: node linkType: hard -"character-entities-legacy@npm:^2.0.0": - version: 2.0.0 - resolution: "character-entities-legacy@npm:2.0.0" - checksum: c8941cc75d2a82f36adadc7eaa0116da13ba7600ef2c689c1932ed7b58380e84e2d7237c8795a30017623d3d889c9840aa3327076754af4a329f3030b4cc431e - languageName: node - linkType: hard - "character-entities@npm:^1.0.0": version: 1.2.4 resolution: "character-entities@npm:1.2.4" @@ -18457,9 +16900,9 @@ __metadata: linkType: hard "character-entities@npm:^2.0.0": - version: 2.0.0 - resolution: "character-entities@npm:2.0.0" - checksum: bacbcacab87fcd61a4f226d9079eb1a582092d1fca581e72a6997d8b0d498225a75413e4401e5fb310f1e8be7bfa8e1485a96f9f12de31178c637c7195fcc78e + version: 2.0.2 + resolution: "character-entities@npm:2.0.2" + checksum: cf1643814023697f725e47328fcec17923b8f1799102a8a79c1514e894815651794a2bffd84bb1b3a4b124b050154e4529ed6e81f7c8068a734aecf07a6d3def languageName: node linkType: hard @@ -18470,13 +16913,6 @@ __metadata: languageName: node linkType: hard -"character-reference-invalid@npm:^2.0.0": - version: 2.0.0 - resolution: "character-reference-invalid@npm:2.0.0" - checksum: 0d33a2eb4a7e7b57ed171175faefb0d53434e92203bb9a3e66051cf55de299efe263f39e8c2611733cde100e9229193c1a186148570ba336d5ab0cf5993d6ed5 - languageName: node - linkType: hard - "chardet@npm:^0.7.0": version: 0.7.0 resolution: "chardet@npm:0.7.0" @@ -18532,11 +16968,9 @@ __metadata: linkType: hard "chrome-trace-event@npm:^1.0.2": - version: 1.0.2 - resolution: "chrome-trace-event@npm:1.0.2" - dependencies: - tslib: ^1.9.0 - checksum: a104606fd07e6191848fa15d4031ac41c1715d025074574bdbb27d998a20d75d860a2060a5aca840bfbf97ec2ef6b72df9b387ed4109a8fc6eb5c362477c9294 + version: 1.0.3 + resolution: "chrome-trace-event@npm:1.0.3" + checksum: cb8b1fc7e881aaef973bd0c4a43cd353c2ad8323fb471a041e64f7c2dd849cde4aad15f8b753331a32dda45c973f032c8a03b8177fc85d60eaa75e91e08bfb97 languageName: node linkType: hard @@ -18548,9 +16982,9 @@ __metadata: linkType: hard "ci-info@npm:^3.1.0, ci-info@npm:^3.2.0": - version: 3.3.2 - resolution: "ci-info@npm:3.3.2" - checksum: fd81f1edd2d3b0f6cb077b2e84365136d87b9db8c055928c1ad69da8a76c2c2f19cba8ea51b90238302157ca927f91f92b653e933f2398dde4867500f08d6e62 + version: 3.4.0 + resolution: "ci-info@npm:3.4.0" + checksum: 7f660730170a6ce248e173b670587a0c583e31526d21afcd21f77c811c1aaeb8926999081542d1f30e12cce1df582d4c88709fa45f44c00498b46bdf21d4d21a languageName: node linkType: hard @@ -18593,18 +17027,18 @@ __metadata: linkType: hard "classnames@npm:*, classnames@npm:^2.2.5, classnames@npm:^2.2.6, classnames@npm:^2.3.1": - version: 2.3.1 - resolution: "classnames@npm:2.3.1" - checksum: 14db8889d56c267a591f08b0834989fe542d47fac659af5a539e110cc4266694e8de86e4e3bbd271157dbd831361310a8293e0167141e80b0f03a0f175c80960 + version: 2.3.2 + resolution: "classnames@npm:2.3.2" + checksum: 2c62199789618d95545c872787137262e741f9db13328e216b093eea91c85ef2bfb152c1f9e63027204e2559a006a92eb74147d46c800a9f96297ae1d9f96f4e languageName: node linkType: hard "clean-css@npm:^5.2.2": - version: 5.2.2 - resolution: "clean-css@npm:5.2.2" + version: 5.3.1 + resolution: "clean-css@npm:5.3.1" dependencies: source-map: ~0.6.0 - checksum: 10855820829b8b6ea94e462313fdc177b297aca5c7870a969591549d6a766824f912b5e58773bd345b2a7effae863ab492258b5a77a40029fba6d11d861cbee3 + checksum: 860696c60503cbfec480b5f92f62729246304b55950571af7292f2687b57f86b277f2b9fefe6f64643d409008018b78383972b55c2cc859792dcc8658988fb16 languageName: node linkType: hard @@ -18632,31 +17066,31 @@ __metadata: linkType: hard "cli-spinners@npm:^2.5.0": - version: 2.5.0 - resolution: "cli-spinners@npm:2.5.0" - checksum: 9cd7c3e22f9243c2b8436bd405d4c7aa5c7b432112fed0c9b7e1d773f8d12fb30e15083ed45474b28d5e8de490d4299dc8a213c327931a25cc998a44b4a2d747 + version: 2.7.0 + resolution: "cli-spinners@npm:2.7.0" + checksum: a9afaf73f58d1f951fb23742f503631b3cf513f43f4c7acb1b640100eb76bfa16efbcd1994d149ffc6603a6d75dd3d4a516a76f125f90dce437de9b16fd0ee6f languageName: node linkType: hard "cli-table3@npm:~0.6.1": - version: 0.6.1 - resolution: "cli-table3@npm:0.6.1" + version: 0.6.3 + resolution: "cli-table3@npm:0.6.3" dependencies: - colors: 1.4.0 + "@colors/colors": 1.5.0 string-width: ^4.2.0 dependenciesMeta: - colors: + "@colors/colors": optional: true - checksum: 956e175f8eb019c26465b9f1e51121c08d8978e2aab04be7f8520ea8a4e67906fcbd8516dfb77e386ae3730ef0281aa21a65613dffbfa3d62969263252bd25a9 + checksum: 09897f68467973f827c04e7eaadf13b55f8aec49ecd6647cc276386ea660059322e2dd8020a8b6b84d422dbdd619597046fa89cbbbdc95b2cea149a2df7c096c languageName: node linkType: hard "cli-table@npm:^0.3.1": - version: 0.3.6 - resolution: "cli-table@npm:0.3.6" + version: 0.3.11 + resolution: "cli-table@npm:0.3.11" dependencies: colors: 1.0.3 - checksum: b0cd08578c810240920438cc2b3ffb4b4f5106b29f3362707f1d8cfc0c0440ad2afb70b96e30ce37f72f0ffe1e844ae7341dde4df17d51ad345eb186a5903af2 + checksum: 59fb61f992ac9bc8610ed98c72bf7f5d396c5afb42926b6747b46b0f8bb98a0dfa097998e77542ac334c1eb7c18dbf4f104d5783493273c5ec4c34084aa7c663 languageName: node linkType: hard @@ -18739,11 +17173,11 @@ __metadata: linkType: hard "clone-response@npm:^1.0.2": - version: 1.0.2 - resolution: "clone-response@npm:1.0.2" + version: 1.0.3 + resolution: "clone-response@npm:1.0.3" dependencies: mimic-response: ^1.0.0 - checksum: 2d0e61547fc66276e0903be9654ada422515f5a15741691352000d47e8c00c226061221074ce2c0064d12e975e84a8687cfd35d8b405750cb4e772f87b256eda + checksum: 4e671cac39b11c60aa8ba0a450657194a5d6504df51bca3fac5b3bd0145c4f8e8464898f87c8406b83232e3bc5cca555f51c1f9c8ac023969ebfbf7f6bdabb2e languageName: node linkType: hard @@ -18780,9 +17214,9 @@ __metadata: linkType: hard "clsx@npm:^1.0.2, clsx@npm:^1.0.4": - version: 1.1.1 - resolution: "clsx@npm:1.1.1" - checksum: ff052650329773b9b245177305fc4c4dc3129f7b2be84af4f58dc5defa99538c61d4207be7419405a5f8f3d92007c954f4daba5a7b74e563d5de71c28c830063 + version: 1.2.1 + resolution: "clsx@npm:1.2.1" + checksum: 30befca8019b2eb7dbad38cff6266cf543091dae2825c856a62a8ccf2c3ab9c2907c4d12b288b73101196767f66812365400a227581484a05f968b0307cfaf12 languageName: node linkType: hard @@ -18793,7 +17227,7 @@ __metadata: languageName: node linkType: hard -"cmd-shim@npm:^4.0.1, cmd-shim@npm:^4.1.0": +"cmd-shim@npm:^4.1.0": version: 4.1.0 resolution: "cmd-shim@npm:4.1.0" dependencies: @@ -18802,6 +17236,15 @@ __metadata: languageName: node linkType: hard +"cmd-shim@npm:^5.0.0": + version: 5.0.0 + resolution: "cmd-shim@npm:5.0.0" + dependencies: + mkdirp-infer-owner: ^2.0.0 + checksum: 83d2a46cdf4adbb38d3d3184364b2df0e4c001ac770f5ca94373825d7a48838b4cb8a59534ef48f02b0d556caa047728589ca65c640c17c0b417b3afb34acfbb + languageName: node + linkType: hard + "co@npm:^4.6.0": version: 4.6.0 resolution: "co@npm:4.6.0" @@ -18810,11 +17253,9 @@ __metadata: linkType: hard "code-block-writer@npm:^11.0.0": - version: 11.0.0 - resolution: "code-block-writer@npm:11.0.0" - dependencies: - tslib: 2.3.1 - checksum: d3d92a06f762d5926ecdb2033e4f30eb4c51aca365ea69ef424afbce7cc2b1518a50deff2645cc17b6fa53f234d664631f2268a4caf91af6a1fd696aa0b2fefb + version: 11.0.3 + resolution: "code-block-writer@npm:11.0.3" + checksum: f0a2605f19963d7087267c9b0fd0b05a6638a50e7b29b70f97aa01a514f59475b0626f8aa092188df853ee6d96745426dfa132d6a677795df462c6ce32c21639 languageName: node linkType: hard @@ -18846,15 +17287,15 @@ __metadata: linkType: hard "codemirror@npm:^5.65.3": - version: 5.65.3 - resolution: "codemirror@npm:5.65.3" - checksum: 89bc7f99c15a021bfd3671a943e58589cd5108f08738882d79458a4f432a05ff1d50bb664e7d0c02c639ec98241c9840f1fd9de5f458a7b0e15628892839aef0 + version: 5.65.8 + resolution: "codemirror@npm:5.65.8" + checksum: e56a59c2251b357b3d95862f77ac8b8d2b1b0c52db58a2dcf5b8b0531fd249ad4458cbd9a469ce1513475ba48ba39ffd16bd3876eb3870a1305bcafcb157239f languageName: node linkType: hard "codemirror@npm:^6.0.0": - version: 6.0.0 - resolution: "codemirror@npm:6.0.0" + version: 6.0.1 + resolution: "codemirror@npm:6.0.1" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/commands": ^6.0.0 @@ -18863,7 +17304,7 @@ __metadata: "@codemirror/search": ^6.0.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 - checksum: 42fb2b5ac5d4b8616a733de5efd7913764c1d13dcc27f732af5ed5e98f657a53ab5549437b53d73ed89d004423141ee65612a5e54c451538ef6d75afed4cd3e2 + checksum: 1a78f7077ac5801bdbff162aa0c61bf2b974603c7e9a477198c3ce50c789af674a061d7c293c58b73807eda345c2b5228c38ad2aabb9319d552d5486f785cbef languageName: node linkType: hard @@ -18880,9 +17321,9 @@ __metadata: linkType: hard "collect-v8-coverage@npm:^1.0.0": - version: 1.0.0 - resolution: "collect-v8-coverage@npm:1.0.0" - checksum: 99d6059eb0e04bf792e27824d43d1139ede28914b7f55ddedd9c43594926221579fa6925ecc7e2f47dec14f5199e5ea3afbfc1da9a32ad542f859022d57f9d80 + version: 1.0.1 + resolution: "collect-v8-coverage@npm:1.0.1" + checksum: 4efe0a1fccd517b65478a2364b33dadd0a43fc92a56f59aaece9b6186fe5177b2de471253587de7c91516f07c7268c2f6770b6cbcffc0e0ece353b766ec87e55 languageName: node linkType: hard @@ -18903,7 +17344,7 @@ __metadata: languageName: node linkType: hard -"color-convert@npm:^1.9.0, color-convert@npm:^1.9.1": +"color-convert@npm:^1.9.0, color-convert@npm:^1.9.3": version: 1.9.3 resolution: "color-convert@npm:1.9.3" dependencies: @@ -18935,13 +17376,13 @@ __metadata: languageName: node linkType: hard -"color-string@npm:^1.5.2, color-string@npm:^1.9.0": - version: 1.9.0 - resolution: "color-string@npm:1.9.0" +"color-string@npm:^1.6.0, color-string@npm:^1.9.0": + version: 1.9.1 + resolution: "color-string@npm:1.9.1" dependencies: color-name: ^1.0.0 simple-swizzle: ^0.2.2 - checksum: 93c6678b847f8cfa47d19677fd19e1d4b19d7a33f100644400357c298266080b5bca64e5f874fa8ac8cc0aa0606ad44f7a838b4e6fd05e6affea190a68555bb4 + checksum: c13fe7cff7885f603f49105827d621ce87f4571d78ba28ef4a3f1a104304748f620615e6bf065ecd2145d0d9dad83a3553f52bb25ede7239d18e9f81622f1cc5 languageName: node linkType: hard @@ -18954,13 +17395,13 @@ __metadata: languageName: node linkType: hard -"color@npm:3.0.x": - version: 3.0.0 - resolution: "color@npm:3.0.0" +"color@npm:^3.1.3": + version: 3.2.1 + resolution: "color@npm:3.2.1" dependencies: - color-convert: ^1.9.1 - color-string: ^1.5.2 - checksum: 273fe5d4c2a322dbc0e184ef6c891cbefefa11af7c6a8ed6001ff6986af747038cf3258bd4f4b715415f287c556efc8d1f0368bc02240877610ae1d427887537 + color-convert: ^1.9.3 + color-string: ^1.6.0 + checksum: f81220e8b774d35865c2561be921f5652117638dcda7ca4029262046e37fc2444ac7bbfdd110cf1fd9c074a4ee5eda8f85944ffbdda26186b602dd9bb05f6400 languageName: node linkType: hard @@ -18975,26 +17416,19 @@ __metadata: linkType: hard "colord@npm:^2.9.1": - version: 2.9.1 - resolution: "colord@npm:2.9.1" - checksum: c47ff86c6ffc28ac55812c64fe35563809ccf860687506e4127137dcd27595b49610b85dcf3551b39a1c19af6a1a41ed41a42043ef6e795f787f29e4e49b4014 + version: 2.9.3 + resolution: "colord@npm:2.9.3" + checksum: 95d909bfbcfd8d5605cbb5af56f2d1ce2b323990258fd7c0d2eb0e6d3bb177254d7fb8213758db56bb4ede708964f78c6b992b326615f81a18a6aaf11d64c650 languageName: node linkType: hard -"colorette@npm:2.0.19, colorette@npm:^2.0.16, colorette@npm:^2.0.17": +"colorette@npm:2.0.19, colorette@npm:^2.0.10, colorette@npm:^2.0.16, colorette@npm:^2.0.17": version: 2.0.19 resolution: "colorette@npm:2.0.19" checksum: 888cf5493f781e5fcf54ce4d49e9d7d698f96ea2b2ef67906834bb319a392c667f9ec69f4a10e268d2946d13a9503d2d19b3abaaaf174e3451bfe91fb9d82427 languageName: node linkType: hard -"colorette@npm:^2.0.10": - version: 2.0.16 - resolution: "colorette@npm:2.0.16" - checksum: cd55596a3a2d1071c1a28eee7fd8a5387593ff1bd10a3e8d0a6221499311fe34a9f2b9272d77c391e0e003dcdc8934fb2f8d106e7ef1f7516f8060c901d41a27 - languageName: node - linkType: hard - "colors@npm:1.0.3": version: 1.0.3 resolution: "colors@npm:1.0.3" @@ -19002,13 +17436,6 @@ __metadata: languageName: node linkType: hard -"colors@npm:1.4.0": - version: 1.4.0 - resolution: "colors@npm:1.4.0" - checksum: 98aa2c2418ad87dedf25d781be69dc5fc5908e279d9d30c34d8b702e586a0474605b3a189511482b9d5ed0d20c867515d22749537f7bc546256c6014f3ebdcec - languageName: node - linkType: hard - "colors@npm:~1.2.1": version: 1.2.5 resolution: "colors@npm:1.2.5" @@ -19017,22 +17444,22 @@ __metadata: linkType: hard "colorspace@npm:1.1.x": - version: 1.1.2 - resolution: "colorspace@npm:1.1.2" + version: 1.1.4 + resolution: "colorspace@npm:1.1.4" dependencies: - color: 3.0.x + color: ^3.1.3 text-hex: 1.0.x - checksum: a959ec1669176aa72185067b7d04dae1cef2698456e1a452a035ce8adcac95673fbb1547e3240903355bcbaa67e031cca0b8b4f7d42c256b3dd94dcead8e1405 + checksum: bb3934ef3c417e961e6d03d7ca60ea6e175947029bfadfcdb65109b01881a1c0ecf9c2b0b59abcd0ee4a0d7c1eae93beed01b0e65848936472270a0b341ebce8 languageName: node linkType: hard "columnify@npm:^1.5.4": - version: 1.5.4 - resolution: "columnify@npm:1.5.4" + version: 1.6.0 + resolution: "columnify@npm:1.6.0" dependencies: - strip-ansi: ^3.0.0 + strip-ansi: ^6.0.1 wcwidth: ^1.0.0 - checksum: f0693937412ec41d387f8ae89ff8cd5811a07ad636f753f0276ba8394fd76c0f610621ebeb379d6adcb30d98696919546dbbf93a28bd4e546efc7e30d905edc2 + checksum: 0d590023616a27bcd2135c0f6ddd6fac94543263f9995538bbe391068976e30545e5534d369737ec7c3e9db4e53e70a277462de46aeb5a36e6997b4c7559c335 languageName: node linkType: hard @@ -19087,20 +17514,13 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.20.0, commander@npm:^2.20.3, commander@npm:^2.7.1": +"commander@npm:^2.20.0, commander@npm:^2.20.3": version: 2.20.3 resolution: "commander@npm:2.20.3" checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e languageName: node linkType: hard -"commander@npm:^3.0.2": - version: 3.0.2 - resolution: "commander@npm:3.0.2" - checksum: 6d14ad030d1904428139487ed31febcb04c1604db2b8d9fae711f60ee6718828dc0e11602249e91c8a97b0e721e9c6d53edbc166bad3cde1596851d59a8f824d - languageName: node - linkType: hard - "commander@npm:^4.0.0": version: 4.1.1 resolution: "commander@npm:4.1.1" @@ -19195,25 +17615,15 @@ __metadata: languageName: node linkType: hard -"compress-brotli@npm:^1.3.8": - version: 1.3.8 - resolution: "compress-brotli@npm:1.3.8" - dependencies: - "@types/json-buffer": ~3.0.0 - json-buffer: ~3.0.1 - checksum: de7589d692d40eb362f6c91070b5e51bc10b05a89eabb4a7c76c1aa21b625756f8c101c6999e4df0c4dc6199c5ca2e1353573bfdcca5615810f27485394162a5 - languageName: node - linkType: hard - "compress-commons@npm:^4.1.0": - version: 4.1.0 - resolution: "compress-commons@npm:4.1.0" + version: 4.1.1 + resolution: "compress-commons@npm:4.1.1" dependencies: buffer-crc32: ^0.2.13 - crc32-stream: ^4.0.1 + crc32-stream: ^4.0.2 normalize-path: ^3.0.0 readable-stream: ^3.6.0 - checksum: 3348bea7a1cce04b430f6ec3125eebbc0e23bd8dd14d30ec2fb113d3733f95ae6b12d5b33ad794e7ceab70f57e38a6c2642d96a64bc83e490a3ddae8db469949 + checksum: 0176483211a7304a4a8aa52dbcc149a4c9181ac8a04bfbcc3d1a379174bf5fa56c3b15cec19e5ae3d31f1b1ce35ebb275b792b867000c77bac7162ce4e0ca268 languageName: node linkType: hard @@ -19311,11 +17721,11 @@ __metadata: linkType: hard "concurrently@npm:^7.0.0": - version: 7.3.0 - resolution: "concurrently@npm:7.3.0" + version: 7.4.0 + resolution: "concurrently@npm:7.4.0" dependencies: chalk: ^4.1.0 - date-fns: ^2.16.1 + date-fns: ^2.29.1 lodash: ^4.17.21 rxjs: ^7.0.0 shell-quote: ^1.7.3 @@ -19324,18 +17734,19 @@ __metadata: tree-kill: ^1.2.2 yargs: ^17.3.1 bin: + conc: dist/bin/concurrently.js concurrently: dist/bin/concurrently.js - checksum: 5de845e4947c550a6ff74ecc80e1897109abe339fe8a7fa117e7b8978362566ac4ee070e4475bdaa6fc453f780fadb9089739a02606e27e04affaa7dd8905d2d + checksum: cc547866ad8d009d184ca3a7115d6636052a5f56f5429d123092d651286043d7233f6429257e30e50f509894cd12798ea831896ac18092d8135f67ffcc8ac3ea languageName: node linkType: hard "config-chain@npm:^1.1.12": - version: 1.1.12 - resolution: "config-chain@npm:1.1.12" + version: 1.1.13 + resolution: "config-chain@npm:1.1.13" dependencies: ini: ^1.3.4 proto-list: ~1.2.1 - checksum: a16332f87212b4015afcdfc95fe42b40b162e7f10b4f4370ab3239979b6e69a41b4e6fb34d7891aa028a557f2340da236f810df433b18dfa5c408b2eb8489bf7 + checksum: 828137a28e7c2fc4b7fb229bd0cd6c1397bcf83434de54347e608154008f411749041ee392cbe42fab6307e02de4c12480260bf769b7d44b778fdea3839eafab languageName: node linkType: hard @@ -19418,12 +17829,12 @@ __metadata: linkType: hard "conventional-changelog-angular@npm:^5.0.12": - version: 5.0.12 - resolution: "conventional-changelog-angular@npm:5.0.12" + version: 5.0.13 + resolution: "conventional-changelog-angular@npm:5.0.13" dependencies: compare-func: ^2.0.0 q: ^1.5.1 - checksum: 552db8762d210a5172b1ad8cd95312e2e2a0483ba43f8d30b075a56ccf05231fdca1d4d5843028d43bec6bc7f903f480005efc5386587321a15a1fc4d2b73016 + checksum: 6ed4972fce25a50f9f038c749cc9db501363131b0fb2efc1fccecba14e4b1c80651d0d758d4c350a609f32010c66fa343eefd49c02e79e911884be28f53f3f90 languageName: node linkType: hard @@ -19486,8 +17897,8 @@ __metadata: linkType: hard "conventional-commits-parser@npm:^3.2.0": - version: 3.2.1 - resolution: "conventional-commits-parser@npm:3.2.1" + version: 3.2.4 + resolution: "conventional-commits-parser@npm:3.2.4" dependencies: JSONStream: ^1.0.4 is-text-path: ^1.0.1 @@ -19495,10 +17906,9 @@ __metadata: meow: ^8.0.0 split2: ^3.0.0 through2: ^4.0.0 - trim-off-newlines: ^1.0.0 bin: conventional-commits-parser: cli.js - checksum: 01b83c625ac3d8f9dca0510a5e21385c9bb410b80bcb60dcfdef20e1fa7fe7fad5a280aa5e1dff8ac32ea0aea5966fa973696557d38f831f8630d4fcf31756d5 + checksum: 1627ff203bc9586d89e47a7fe63acecf339aba74903b9114e23d28094f79d4e2d6389bf146ae561461dcba8fc42e7bc228165d2b173f15756c43f1d32bc50bfd languageName: node linkType: hard @@ -19521,11 +17931,11 @@ __metadata: linkType: hard "convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": - version: 1.7.0 - resolution: "convert-source-map@npm:1.7.0" + version: 1.8.0 + resolution: "convert-source-map@npm:1.8.0" dependencies: safe-buffer: ~5.1.1 - checksum: bcd2e3ea7d37f96b85a6e362c8a89402ccc73757256e3ee53aa2c22fe915adb854c66b1f81111be815a3a6a6ce3c58e8001858e883c9d5b4fe08a853fa865967 + checksum: 985d974a2d33e1a2543ada51c93e1ba2f73eaed608dc39f229afc78f71dcc4c8b7d7c684aa647e3c6a3a204027444d69e53e169ce94e8d1fa8d7dee80c9c8fed languageName: node linkType: hard @@ -19582,28 +17992,27 @@ __metadata: linkType: hard "copy-to-clipboard@npm:^3, copy-to-clipboard@npm:^3.2.0, copy-to-clipboard@npm:^3.3.1": - version: 3.3.1 - resolution: "copy-to-clipboard@npm:3.3.1" + version: 3.3.2 + resolution: "copy-to-clipboard@npm:3.3.2" dependencies: toggle-selection: ^1.0.6 - checksum: 3c7b1c333dc6a4b2e9905f52e4df6bbd34ff9f9c97ecd3ca55378a6bc1c191bb12a3252e6289c7b436e9188cff0360d393c0161626851d2301607860bbbdcfd5 + checksum: 968ec7ec3d0cf3067542b63dd244ba5d05e743899d7a0361fb0a3130e731d277f5ea54ea4d90fc88cc66eea2e4c67dc2dd8698e4ed360f921af5aa7c60b889ac languageName: node linkType: hard -"core-js-compat@npm:^3.21.0, core-js-compat@npm:^3.22.1": - version: 3.23.5 - resolution: "core-js-compat@npm:3.23.5" +"core-js-compat@npm:^3.25.1": + version: 3.25.1 + resolution: "core-js-compat@npm:3.25.1" dependencies: - browserslist: ^4.21.2 - semver: 7.0.0 - checksum: c2398a39239a782ba1b9531a80b25f8d9fb8d98de8bf980f32140e9be3d2852afb797517afdf3a15f9319bcd25d594b3d3d2a500dce7c338532532565c9e83cb + browserslist: ^4.21.3 + checksum: 34dbec657adc2f660f4cd701709c9c5e27cbd608211c65df09458f80f3e357b9492ba1c5173e17cca72d889dcc6da01268cadf88fb407cf1726e76d301c6143e languageName: node linkType: hard -"core-js-pure@npm:^3.20.2, core-js-pure@npm:^3.6.5, core-js-pure@npm:^3.8.1": - version: 3.21.1 - resolution: "core-js-pure@npm:3.21.1" - checksum: 00a5dff599b7fb0b30746a638b9d0edbdc0df24ed1580ca56be595fbe3c78c375d37fc4e1bff23627109229702c9ee8ea2587a66b8280eb33b85160aa4e401e9 +"core-js-pure@npm:^3.25.1, core-js-pure@npm:^3.6.5, core-js-pure@npm:^3.8.1": + version: 3.25.1 + resolution: "core-js-pure@npm:3.25.1" + checksum: 0123131ec7ab3a1e56f0b4df4ae659de03d9c245ce281637d4d0f18f9839d8e0cfbfa989bd577ce1b67826f889a7dcc734421f697cf1bbe59f605f29c537a678 languageName: node linkType: hard @@ -19614,27 +18023,27 @@ __metadata: languageName: node linkType: hard -"core-js@npm:^3.4.1": - version: 3.25.0 - resolution: "core-js@npm:3.25.0" - checksum: 5a72740bf5babaf2e6203da4c0e831a0b97c3fe6f21b4c1aa8601d3a927660a22128dd8f0e86ce84778c4e5372ab0fc03c7944afa7e215c7fb13b2c79d5d5504 - languageName: node - linkType: hard - -"core-js@npm:^3.6.5": +"core-js@npm:^3.4.1, core-js@npm:^3.6.5": version: 3.25.1 resolution: "core-js@npm:3.25.1" checksum: bfacb078e790913841e2d5008b9b6705ae56ed23f83c7f0ae08d330d874561012611089d53b71520105234ed0abba36f28d91b391514a16541a8c8d98c464239 languageName: node linkType: hard -"core-util-is@npm:1.0.2, core-util-is@npm:~1.0.0": +"core-util-is@npm:1.0.2": version: 1.0.2 resolution: "core-util-is@npm:1.0.2" checksum: 7a4c925b497a2c91421e25bf76d6d8190f0b2359a9200dbeed136e63b2931d6294d3b1893eda378883ed363cd950f44a12a401384c609839ea616befb7927dab languageName: node linkType: hard +"core-util-is@npm:~1.0.0": + version: 1.0.3 + resolution: "core-util-is@npm:1.0.3" + checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 + languageName: node + linkType: hard + "cors@npm:^2.8.5": version: 2.8.5 resolution: "cors@npm:2.8.5" @@ -19655,14 +18064,14 @@ __metadata: linkType: hard "cosmiconfig-typescript-loader@npm:^4.0.0": - version: 4.0.0 - resolution: "cosmiconfig-typescript-loader@npm:4.0.0" + version: 4.1.0 + resolution: "cosmiconfig-typescript-loader@npm:4.1.0" peerDependencies: "@types/node": "*" cosmiconfig: ">=7" ts-node: ">=10" typescript: ">=3" - checksum: 9151ffe62d0b3b0bac7435add229febf04d72f4db8199390813fef071343865e91e823bd75210f9aabe218dc97a2cc2c776120c0dc886e9164947b80a910c19b + checksum: 434f68e75ea8559deb0058cb06ac0a25ec5c0e65fafc21a891bac863e18cf944bd881b0d80188d02f599e061c3f0e42156f6405e4a299975e40cb1bd740a9b24 languageName: node linkType: hard @@ -19692,49 +18101,47 @@ __metadata: languageName: node linkType: hard -"cpu-features@npm:0.0.2": - version: 0.0.2 - resolution: "cpu-features@npm:0.0.2" +"cpu-features@npm:~0.0.4": + version: 0.0.4 + resolution: "cpu-features@npm:0.0.4" dependencies: - nan: ^2.14.1 + buildcheck: 0.0.3 + nan: ^2.15.0 node-gyp: latest - checksum: 15177f9a2d465e4d84390f902c977b34f237dadb29fd8553853b13d906ffe5f15be9f091c72db4f34c71412d5ff4e0e4edf04caebc875b02d1d7ecfce2963299 + checksum: a20d58e41e63182b34753dfe23bd1d967944ec13d84b70849b5d334fb4a558b7e71e7f955ed86c8e75dd65b5c5b882f1c494174d342cb6d8a062d77f79d39596 languageName: node linkType: hard "crc-32@npm:^1.2.0": - version: 1.2.0 - resolution: "crc-32@npm:1.2.0" - dependencies: - exit-on-epipe: ~1.0.1 - printj: ~1.1.0 + version: 1.2.2 + resolution: "crc-32@npm:1.2.2" bin: - crc32: ./bin/crc32.njs - checksum: 7bcde8bea262f6629ac3c70e20bdfa3d058dc77091705ce8620513f76f19b41fc273ddd65a716eef9b4e33fbb61ff7f9b266653d214319aef27e4223789c6b9e + crc32: bin/crc32.njs + checksum: ad2d0ad0cbd465b75dcaeeff0600f8195b686816ab5f3ba4c6e052a07f728c3e70df2e3ca9fd3d4484dc4ba70586e161ca5a2334ec8bf5a41bf022a6103ff243 languageName: node linkType: hard -"crc32-stream@npm:^4.0.1": - version: 4.0.1 - resolution: "crc32-stream@npm:4.0.1" +"crc32-stream@npm:^4.0.2": + version: 4.0.2 + resolution: "crc32-stream@npm:4.0.2" dependencies: crc-32: ^1.2.0 readable-stream: ^3.4.0 - checksum: 39c2e0d5d7a3388e85ccf27ef0b30475f98902d34e7a048decc1665ff67f98f17f850059b28942fdf5582cb836eaa5184453ec35a6ea2442ce3bc10c8f1ee8a4 + checksum: 1099559283b86e8a55390228b57ff4d57a74cac6aa8086aa4730f84317c9f93e914aeece115352f2d706a9df7ed75327ffacd86cfe23f040aef821231b528e76 languageName: node linkType: hard "create-ecdh@npm:^4.0.0": - version: 4.0.3 - resolution: "create-ecdh@npm:4.0.3" + version: 4.0.4 + resolution: "create-ecdh@npm:4.0.4" dependencies: bn.js: ^4.1.0 - elliptic: ^6.0.0 - checksum: 0678955daf937c188c69b2a601ebcbe4ab02ca3c1aa04f62d5fb5511430d0141802207eabf9aa100351920ea89bfcbe53ba8bd4c013a1a3453fd807549a5ede2 + elliptic: ^6.5.3 + checksum: 0dd7fca9711d09e152375b79acf1e3f306d1a25ba87b8ff14c2fd8e68b83aafe0a7dd6c4e540c9ffbdd227a5fa1ad9b81eca1f233c38bb47770597ba247e614b languageName: node linkType: hard -"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2": +"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2, create-hash@npm:^1.2.0": version: 1.2.0 resolution: "create-hash@npm:1.2.0" dependencies: @@ -19747,7 +18154,7 @@ __metadata: languageName: node linkType: hard -"create-hmac@npm:^1.1.0, create-hmac@npm:^1.1.2, create-hmac@npm:^1.1.4": +"create-hmac@npm:^1.1.0, create-hmac@npm:^1.1.4, create-hmac@npm:^1.1.7": version: 1.1.7 resolution: "create-hmac@npm:1.1.7" dependencies: @@ -19776,11 +18183,11 @@ __metadata: linkType: hard "cron@npm:^2.0.0": - version: 2.0.0 - resolution: "cron@npm:2.0.0" + version: 2.1.0 + resolution: "cron@npm:2.1.0" dependencies: luxon: ^1.23.x - checksum: 179ec137ada4ceb44cafe51c55491e84954308d7012d2a44539f0dadbbb1ffbbe3072c2f7aaa88595d60bd56e0d536aae2e4aaa4430c869317d6c2abd966988b + checksum: 9395875c091f56db7964491c249cb143d2e4ba77560d7132da783943c1b0537ef1814eb8f552c81eda5a2aa153216dd3f5b7ff63e372a68a063fcfafe8231f91 languageName: node linkType: hard @@ -19803,7 +18210,7 @@ __metadata: languageName: node linkType: hard -"cross-fetch@npm:3.1.5, cross-fetch@npm:^3.0.4, cross-fetch@npm:^3.1.3, cross-fetch@npm:^3.1.5": +"cross-fetch@npm:3.1.5, cross-fetch@npm:^3.1.3, cross-fetch@npm:^3.1.5": version: 3.1.5 resolution: "cross-fetch@npm:3.1.5" dependencies: @@ -19834,21 +18241,6 @@ __metadata: languageName: node linkType: hard -"cross-undici-fetch@npm:^0.4.11": - version: 0.4.11 - resolution: "cross-undici-fetch@npm:0.4.11" - dependencies: - abort-controller: ^3.0.0 - busboy: ^1.6.0 - form-data-encoder: ^1.7.1 - formdata-node: ^4.3.1 - node-fetch: ^2.6.7 - undici: 5.5.1 - web-streams-polyfill: ^3.2.0 - checksum: 76927df814f5ac8f5656d69099d20f9970acdfe309a46908913c68e17cf16f4454eeeae3dfc6e9f6fb9efddf1c11a10b805a97d02dedd258efcd3e575e09bc3f - languageName: node - linkType: hard - "crypto-browserify@npm:^3.11.0": version: 3.12.0 resolution: "crypto-browserify@npm:3.12.0" @@ -19895,14 +18287,12 @@ __metadata: languageName: node linkType: hard -"css-declaration-sorter@npm:^6.0.3": - version: 6.1.3 - resolution: "css-declaration-sorter@npm:6.1.3" - dependencies: - timsort: ^0.3.0 +"css-declaration-sorter@npm:^6.3.0": + version: 6.3.1 + resolution: "css-declaration-sorter@npm:6.3.1" peerDependencies: postcss: ^8.0.9 - checksum: 6fdacdce48e1351a8fd73472b7dfaae573ce7d4f5bba8385afc9c765d01055920b851d288228ecb0d535d163b22f8d7941e095b9da995956cd3309e41d1bffa2 + checksum: ff0d9989ee21ec4c42430b9bb86c43f973ed5024d68f30edc1e3fb07a22828ce3c3e5b922019f2ccbff606722e43c407c5c76e3cddac523ac4afcb31e4b2601c languageName: node linkType: hard @@ -19935,15 +18325,15 @@ __metadata: linkType: hard "css-select@npm:^4.1.3": - version: 4.1.3 - resolution: "css-select@npm:4.1.3" + version: 4.3.0 + resolution: "css-select@npm:4.3.0" dependencies: boolbase: ^1.0.0 - css-what: ^5.0.0 - domhandler: ^4.2.0 - domutils: ^2.6.0 - nth-check: ^2.0.0 - checksum: 40928f1aa6c71faf36430e7f26bcbb8ab51d07b98b754caacb71906400a195df5e6c7020a94f2982f02e52027b9bd57c99419220cf7020968c3415f14e4be5f8 + css-what: ^6.0.1 + domhandler: ^4.3.1 + domutils: ^2.8.0 + nth-check: ^2.0.1 + checksum: d6202736839194dd7f910320032e7cfc40372f025e4bf21ca5bf6eb0a33264f322f50ba9c0adc35dadd342d3d6fae5ca244779a4873afbfa76561e343f2058e0 languageName: node linkType: hard @@ -19985,10 +18375,10 @@ __metadata: languageName: node linkType: hard -"css-what@npm:^5.0.0": - version: 5.1.0 - resolution: "css-what@npm:5.1.0" - checksum: 0b75d1bac95c885c168573c85744a6c6843d8c33345f54f717218b37ea6296b0e99bb12105930ea170fd4a921990392a7c790c16c585c1d8960c49e2b7ec39f7 +"css-what@npm:^6.0.1": + version: 6.1.0 + resolution: "css-what@npm:6.1.0" + checksum: b975e547e1e90b79625918f84e67db5d33d896e6de846c9b584094e529f0c63e2ab85ee33b9daffd05bff3a146a1916bec664e18bb76dd5f66cbff9fc13b2bbe languageName: node linkType: hard @@ -20015,65 +18405,64 @@ __metadata: languageName: node linkType: hard -"cssnano-preset-default@npm:^5.1.7": - version: 5.1.7 - resolution: "cssnano-preset-default@npm:5.1.7" +"cssnano-preset-default@npm:^5.2.12": + version: 5.2.12 + resolution: "cssnano-preset-default@npm:5.2.12" dependencies: - css-declaration-sorter: ^6.0.3 - cssnano-utils: ^2.0.1 - postcss-calc: ^8.0.0 - postcss-colormin: ^5.2.1 - postcss-convert-values: ^5.0.2 - postcss-discard-comments: ^5.0.1 - postcss-discard-duplicates: ^5.0.1 - postcss-discard-empty: ^5.0.1 - postcss-discard-overridden: ^5.0.1 - postcss-merge-longhand: ^5.0.4 - postcss-merge-rules: ^5.0.3 - postcss-minify-font-values: ^5.0.1 - postcss-minify-gradients: ^5.0.3 - postcss-minify-params: ^5.0.2 - postcss-minify-selectors: ^5.1.0 - postcss-normalize-charset: ^5.0.1 - postcss-normalize-display-values: ^5.0.1 - postcss-normalize-positions: ^5.0.1 - postcss-normalize-repeat-style: ^5.0.1 - postcss-normalize-string: ^5.0.1 - postcss-normalize-timing-functions: ^5.0.1 - postcss-normalize-unicode: ^5.0.1 - postcss-normalize-url: ^5.0.3 - postcss-normalize-whitespace: ^5.0.1 - postcss-ordered-values: ^5.0.2 - postcss-reduce-initial: ^5.0.1 - postcss-reduce-transforms: ^5.0.1 - postcss-svgo: ^5.0.3 - postcss-unique-selectors: ^5.0.2 + css-declaration-sorter: ^6.3.0 + cssnano-utils: ^3.1.0 + postcss-calc: ^8.2.3 + postcss-colormin: ^5.3.0 + postcss-convert-values: ^5.1.2 + postcss-discard-comments: ^5.1.2 + postcss-discard-duplicates: ^5.1.0 + postcss-discard-empty: ^5.1.1 + postcss-discard-overridden: ^5.1.0 + postcss-merge-longhand: ^5.1.6 + postcss-merge-rules: ^5.1.2 + postcss-minify-font-values: ^5.1.0 + postcss-minify-gradients: ^5.1.1 + postcss-minify-params: ^5.1.3 + postcss-minify-selectors: ^5.2.1 + postcss-normalize-charset: ^5.1.0 + postcss-normalize-display-values: ^5.1.0 + postcss-normalize-positions: ^5.1.1 + postcss-normalize-repeat-style: ^5.1.1 + postcss-normalize-string: ^5.1.0 + postcss-normalize-timing-functions: ^5.1.0 + postcss-normalize-unicode: ^5.1.0 + postcss-normalize-url: ^5.1.0 + postcss-normalize-whitespace: ^5.1.1 + postcss-ordered-values: ^5.1.3 + postcss-reduce-initial: ^5.1.0 + postcss-reduce-transforms: ^5.1.0 + postcss-svgo: ^5.1.0 + postcss-unique-selectors: ^5.1.1 peerDependencies: postcss: ^8.2.15 - checksum: 179b9a113d5e7fc887eb5ce4841ec83834e95afc85a28c767b34a8736fe0fe098a5963c225b18a1b553d566c7a74908951a0ceed97f2fbf5cdfafcce10db37ff + checksum: 3d6c05e7719f05c577c3123dc8f823ddc055ec5402ee8184cea1832c209a87ab11aa2aa2cba3e6f4ae6e144c1f3f5122fad1bc7c3086bc3441770f2733e03f58 languageName: node linkType: hard -"cssnano-utils@npm:^2.0.1": - version: 2.0.1 - resolution: "cssnano-utils@npm:2.0.1" +"cssnano-utils@npm:^3.1.0": + version: 3.1.0 + resolution: "cssnano-utils@npm:3.1.0" peerDependencies: postcss: ^8.2.15 - checksum: e27f7648fdb999667ba607fd8d56e28d4dbf4bf458c625fc84f460f70fa0fcd491991f309ca27cc0609a24fb3af49b3d0b9b205921e0edd7de57ca27048652e3 + checksum: 975c84ce9174cf23bb1da1e9faed8421954607e9ea76440cd3bb0c1bea7e17e490d800fca5ae2812d1d9e9d5524eef23ede0a3f52497d7ccc628e5d7321536f2 languageName: node linkType: hard "cssnano@npm:^5.0.1": - version: 5.0.11 - resolution: "cssnano@npm:5.0.11" + version: 5.1.13 + resolution: "cssnano@npm:5.1.13" dependencies: - cssnano-preset-default: ^5.1.7 - is-resolvable: ^1.1.0 + cssnano-preset-default: ^5.2.12 lilconfig: ^2.0.3 yaml: ^1.10.2 peerDependencies: postcss: ^8.2.15 - checksum: 9b7d6a4a796175e73a019ec94e112dbf1fb66173716e099116fa8b33568fb1875d7cc1bf728033f4c2861c65d92b66be15618127182dd1f9872387d2d55fddcd + checksum: 3af0810c98626794e3386e690cd633c73ce472cb138f1011b69956de5071920ddce9d45f857018bb72cd2c3ed19674d65edade591110a6d5acd7c3109ef5d5d6 languageName: node linkType: hard @@ -20109,17 +18498,17 @@ __metadata: languageName: node linkType: hard -"csstype@npm:^2.5.2, csstype@npm:^2.6.7": - version: 2.6.17 - resolution: "csstype@npm:2.6.17" - checksum: 6eee5cf81a4b1b2f0e8707b4accd7504f7cceb4b5a496d58c6e4fcea1a70c1443a975e45d722c892d372ffe788fa278ddfe4d70c5f881375f34e48bb99c70ecc +"csstype@npm:^2.5.2": + version: 2.6.21 + resolution: "csstype@npm:2.6.21" + checksum: 2ce8bc832375146eccdf6115a1f8565a27015b74cce197c35103b4494955e9516b246140425ad24103864076aa3e1257ac9bab25a06c8d931dd87a6428c9dccf languageName: node linkType: hard "csstype@npm:^3.0.2, csstype@npm:^3.0.6": - version: 3.0.7 - resolution: "csstype@npm:3.0.7" - checksum: 2f30c993be570c6d0de334b979a718370ee9bca9569c90340f13e05e542146c55b22e87372b858c061f9f8ded494da7a4715957882f9356cf9993ba11ab6f09c + version: 3.1.1 + resolution: "csstype@npm:3.1.1" + checksum: 1f7b4f5fdd955b7444b18ebdddf3f5c699159f13e9cf8ac9027ae4a60ae226aef9bbb14a6e12ca7dba3358b007cee6354b116e720262867c398de6c955ea451d languageName: node linkType: hard @@ -20182,8 +18571,8 @@ __metadata: linkType: hard "cypress@npm:^10.0.0": - version: 10.7.0 - resolution: "cypress@npm:10.7.0" + version: 10.8.0 + resolution: "cypress@npm:10.8.0" dependencies: "@cypress/request": ^2.88.10 "@cypress/xvfb": ^1.2.4 @@ -20204,7 +18593,7 @@ __metadata: dayjs: ^1.10.4 debug: ^4.3.2 enquirer: ^2.3.6 - eventemitter2: ^6.4.3 + eventemitter2: 6.4.7 execa: 4.1.0 executable: ^4.1.1 extract-zip: 2.0.1 @@ -20229,16 +18618,16 @@ __metadata: yauzl: ^2.10.0 bin: cypress: bin/cypress - checksum: ef8a5ae54f3404f7926e1e248ba7a27c7f66e654a9603bf9df6366731d8dd75455f6ec9cc34d7e55e1a8c3cb8e0e36ce59add81b7b14466f2063cfe45e6c00f4 + checksum: c052690049980e7721e6fca563b724fde839d87d83c1478dfe26ce7d230992717c2c4028e7157bfb39ec274473e51929f49e5aab6a23c2b25cde2a439b1c3cf9 languageName: node linkType: hard -"d3-array@npm:2, d3-array@npm:^2.3.0": - version: 2.12.1 - resolution: "d3-array@npm:2.12.1" +"d3-array@npm:2 - 3, d3-array@npm:2.10.0 - 3": + version: 3.2.0 + resolution: "d3-array@npm:3.2.0" dependencies: - internmap: ^1.0.0 - checksum: 97853b7b523aded17078f37c67742f45d81e88dda2107ae9994c31b9e36c5fa5556c4c4cf39650436f247813602dfe31bf7ad067ff80f127a16903827f10c6eb + internmap: 1 - 2 + checksum: e236f6670b60b64abb6c435da25b5cbbdc2c7c0decdbf9355bc4cf6803d6da4fa820b7b78b9cbd127edb493555934a9788d45084c2f39d7c2e1a2b7aa48264a4 languageName: node linkType: hard @@ -20263,13 +18652,6 @@ __metadata: languageName: node linkType: hard -"d3-color@npm:1 - 2": - version: 2.0.0 - resolution: "d3-color@npm:2.0.0" - checksum: b887354aa383937abd04fbffed3e26e5d6a788472cd3737fb10735930e427763e69fe93398663bccf88c0b53ee3e638ac6fcf0c02226b00ed9e4327c2dfbf3dc - languageName: node - linkType: hard - "d3-color@npm:1 - 3": version: 3.1.0 resolution: "d3-color@npm:3.1.0" @@ -20319,14 +18701,14 @@ __metadata: languageName: node linkType: hard -"d3-format@npm:1 - 2": - version: 2.0.0 - resolution: "d3-format@npm:2.0.0" - checksum: c4d3c8f9941d097d514d3986f54f21434e08e5876dc08d1d65226447e8e167600d5b9210235bb03fd45327225f04f32d6e365f08f76d2f4b8bff81594851aaf7 +"d3-format@npm:1 - 3": + version: 3.1.0 + resolution: "d3-format@npm:3.1.0" + checksum: f345ec3b8ad3cab19bff5dead395bd9f5590628eb97a389b1dd89f0b204c7c4fc1d9520f13231c2c7cf14b7c9a8cf10f8ef15bde2befbab41454a569bd706ca2 languageName: node linkType: hard -"d3-interpolate@npm:1 - 3": +"d3-interpolate@npm:1 - 3, d3-interpolate@npm:1.2.0 - 3, d3-interpolate@npm:^3.0.1": version: 3.0.1 resolution: "d3-interpolate@npm:3.0.1" dependencies: @@ -20344,15 +18726,6 @@ __metadata: languageName: node linkType: hard -"d3-interpolate@npm:1.2.0 - 2, d3-interpolate@npm:^2.0.0": - version: 2.0.1 - resolution: "d3-interpolate@npm:2.0.1" - dependencies: - d3-color: 1 - 2 - checksum: 4a2018ac34fbcc3e0e7241e117087ca1b2274b8b33673913658623efacc5db013b8d876586d167b23e3145bdb34ec8e441d301299b082e1a90985b2f18d4299c - languageName: node - linkType: hard - "d3-path@npm:1": version: 1.0.9 resolution: "d3-path@npm:1.0.9" @@ -20360,13 +18733,6 @@ __metadata: languageName: node linkType: hard -"d3-path@npm:1 - 2": - version: 2.0.0 - resolution: "d3-path@npm:2.0.0" - checksum: e39e91dfb9abf9637962caede1f4ea4877f4b9e1c914868bdfc355688e9a637ba51bed0fb6180934eb596e50a4d0d1f001b5f2e98a4a3d23cc42558acfbd1f2c - languageName: node - linkType: hard - "d3-path@npm:1 - 3": version: 3.0.1 resolution: "d3-path@npm:3.0.1" @@ -20395,16 +18761,16 @@ __metadata: languageName: node linkType: hard -"d3-scale@npm:^3.0.0": - version: 3.3.0 - resolution: "d3-scale@npm:3.3.0" +"d3-scale@npm:^4.0.2": + version: 4.0.2 + resolution: "d3-scale@npm:4.0.2" dependencies: - d3-array: ^2.3.0 - d3-format: 1 - 2 - d3-interpolate: 1.2.0 - 2 - d3-time: ^2.1.1 - d3-time-format: 2 - 3 - checksum: f77e73f0fb422292211d0687914c30d26e29011a936ad2a535a868ae92f306c3545af1fe7ea5db1b3e67dbce7a6c6cd952e53d02d1d557543e7e5d30e30e52f2 + d3-array: 2.10.0 - 3 + d3-format: 1 - 3 + d3-interpolate: 1.2.0 - 3 + d3-time: 2.1.1 - 3 + d3-time-format: 2 - 4 + checksum: a9c770d283162c3bd11477c3d9d485d07f8db2071665f1a4ad23eec3e515e2cefbd369059ec677c9ac849877d1a765494e90e92051d4f21111aa56791c98729e languageName: node linkType: hard @@ -20424,16 +18790,7 @@ __metadata: languageName: node linkType: hard -"d3-shape@npm:^2.0.0": - version: 2.1.0 - resolution: "d3-shape@npm:2.1.0" - dependencies: - d3-path: 1 - 2 - checksum: 4a82a83fbb15aadee3eb6661226a34bcd793cdbcd7aa5bf980a4724efc93eb94acc6c499f0ebedc9c3144c57c0f033867d137f41e86459acbd5d7181cb27b49c - languageName: node - linkType: hard - -"d3-shape@npm:^3.0.0": +"d3-shape@npm:^3.0.0, d3-shape@npm:^3.1.0": version: 3.1.0 resolution: "d3-shape@npm:3.1.0" dependencies: @@ -20451,12 +18808,12 @@ __metadata: languageName: node linkType: hard -"d3-time-format@npm:2 - 3": - version: 3.0.0 - resolution: "d3-time-format@npm:3.0.0" +"d3-time-format@npm:2 - 4": + version: 4.1.0 + resolution: "d3-time-format@npm:4.1.0" dependencies: - d3-time: 1 - 2 - checksum: c20c1667dbea653f81d923e741f84c23e4b966002ba0d6ed94cbc70692105566e55e89d18d175404534a879383fd1123300bd12885a3c924fe924032bb0060db + d3-time: 1 - 3 + checksum: 7342bce28355378152bbd4db4e275405439cabba082d9cd01946d40581140481c8328456d91740b0fe513c51ec4a467f4471ffa390c7e0e30ea30e9ec98fcdf4 languageName: node linkType: hard @@ -20467,12 +18824,12 @@ __metadata: languageName: node linkType: hard -"d3-time@npm:1 - 2, d3-time@npm:^2.1.1": - version: 2.1.1 - resolution: "d3-time@npm:2.1.1" +"d3-time@npm:1 - 3, d3-time@npm:2.1.1 - 3": + version: 3.0.0 + resolution: "d3-time@npm:3.0.0" dependencies: - d3-array: 2 - checksum: d1c7b9658c20646e46c3dd19e11c38e02dec098e8baa7d2cd868af8eb01953668f5da499fa33dc63541cf74a26e788786f8828c4381dbbf475a76b95972979a6 + d3-array: 2 - 3 + checksum: 01646568ef01682550b7ee9f32394e4eb116a29515564861958871ed8de8fff02a25cd50dd8c4413921e6d9ecb8c8ce39be3266f655c8c18599fe58bcb253d60 languageName: node linkType: hard @@ -20562,17 +18919,10 @@ __metadata: languageName: node linkType: hard -"date-fns@npm:^2.16.1": - version: 2.28.0 - resolution: "date-fns@npm:2.28.0" - checksum: a0516b2e4f99b8bffc6cc5193349f185f195398385bdcaf07f17c2c4a24473c99d933eb0018be4142a86a6d46cb0b06be6440ad874f15e795acbedd6fd727a1f - languageName: node - linkType: hard - -"date-fns@npm:^2.18.0": - version: 2.19.0 - resolution: "date-fns@npm:2.19.0" - checksum: c8b727aa10941d76977c48c72bda3b33adeb6a89d67763c95689ef7c18729a564a6e01e87fd5f65ba44b6866e8282d636d5e8bc598f099b925597bb109a0880c +"date-fns@npm:^2.16.1, date-fns@npm:^2.18.0, date-fns@npm:^2.29.1": + version: 2.29.3 + resolution: "date-fns@npm:2.29.3" + checksum: e01cf5b62af04e05dfff921bb9c9933310ed0e1ae9a81eb8653452e64dc841acf7f6e01e1a5ae5644d0337e9a7f936175fd2cb6819dc122fdd9c5e86c56be484 languageName: node linkType: hard @@ -20584,23 +18934,23 @@ __metadata: linkType: hard "dateformat@npm:^4.5.0": - version: 4.5.1 - resolution: "dateformat@npm:4.5.1" - checksum: 2c80b0fed4977db338aa70fbdd605a50c06ec36f4ef8d8fd36193a08c4910da1172eec919a74ed93abfc134fc71dca8707877d4fd149c07f0d1c919d598283e3 + version: 4.6.3 + resolution: "dateformat@npm:4.6.3" + checksum: c3aa0617c0a5b30595122bc8d1bee6276a9221e4d392087b41cbbdf175d9662ae0e50d0d6dcdf45caeac5153c4b5b0844265f8cd2b2245451e3da19e39e3b65d languageName: node linkType: hard "dayjs@npm:^1.10.4": - version: 1.10.4 - resolution: "dayjs@npm:1.10.4" - checksum: d248d6aa1e04f8577a94978e5194c1023347bc08b7c2766d4a4d50b0b69382d3f4fd912b9fcb64ffad4ee2947d53cd8e5d707f49b14817eb7810959d8d95c938 + version: 1.11.5 + resolution: "dayjs@npm:1.11.5" + checksum: e3bbaa7b4883b31be4bf75a181f1447fbb19800c29b332852125aab96baeff3ac232dcba8b88c4ea17d3b636c99dac5fb9d1af4bb6ae26615698bbc4a852dffb languageName: node linkType: hard "debounce@npm:^1.2.0": - version: 1.2.0 - resolution: "debounce@npm:1.2.0" - checksum: e39cb593ae26344921f5a2681b40b703bdd22bc43b179f0e7515176c790997932b3a0ee6ea9864f384c6ac58cecc08158fb102c3632d5d88ab621f8230ee39ff + version: 1.2.1 + resolution: "debounce@npm:1.2.1" + checksum: 682a89506d9e54fb109526f4da255c5546102fbb8e3ae75eef3b04effaf5d4853756aee97475cd4650641869794e44f410eeb20ace2b18ea592287ab2038519e languageName: node linkType: hard @@ -20689,25 +19039,25 @@ __metadata: linkType: hard "decimal.js-light@npm:^2.4.1": - version: 2.5.0 - resolution: "decimal.js-light@npm:2.5.0" - checksum: 89d4d301f72728b10ac5def610b9ccb072cd5fa1bf80c607236bbdd28a9ec9f806faad3159c5a0a82a80a81d84e39ae470f90b6bacecae2617525c8e58f7e201 + version: 2.5.1 + resolution: "decimal.js-light@npm:2.5.1" + checksum: f5a2c7eac1c4541c8ab8a5c8abea64fc1761cefc7794bd5f8afd57a8a78d1b51785e0c4e4f85f4895a043eaa90ddca1edc3981d1263eb6ddce60f32bf5fe66c9 languageName: node linkType: hard "decimal.js@npm:^10.2.1": - version: 10.3.1 - resolution: "decimal.js@npm:10.3.1" - checksum: 0351ac9f05fe050f23227aa6a4573bee2d58fa7378fcf28d969a8c789525032effb488a90320fd3fe86a66e17b4bc507d811b15eada5b7f0e7ec5d2af4c24a59 + version: 10.4.1 + resolution: "decimal.js@npm:10.4.1" + checksum: 5da6dc74af5b73d954741b24d404ef6da07841794d9e51412a2708ec384dd7b4bced3365fb178f4cd119b7ef45f0b34344014a4dc0494c8374c5e746df3cb410 languageName: node linkType: hard "decode-named-character-reference@npm:^1.0.0": - version: 1.0.1 - resolution: "decode-named-character-reference@npm:1.0.1" + version: 1.0.2 + resolution: "decode-named-character-reference@npm:1.0.2" dependencies: character-entities: ^2.0.0 - checksum: 4f67b088213497f7e19faffc1d2bf470bd3ceffd01b3be17857d4bce455e03728b33d3770761745916b0a230ecd917a1cba3c61156f0bd13958dc4fada19580a + checksum: f4c71d3b93105f20076052f9cb1523a22a9c796b8296cd35eef1ca54239c78d182c136a848b83ff8da2071e3ae2b1d300bf29d00650a6d6e675438cc31b11d78 languageName: node linkType: hard @@ -20751,9 +19101,9 @@ __metadata: linkType: hard "deep-is@npm:^0.1.3, deep-is@npm:~0.1.3": - version: 0.1.3 - resolution: "deep-is@npm:0.1.3" - checksum: c15b04c3848a89880c94e25b077c19b47d9a30dd99048e70e5f95d943e7b246bee1da0c1376b56b01bc045be2cae7d9b1c856e68e47e9805634327de7c6cb6d5 + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 languageName: node linkType: hard @@ -20783,9 +19133,9 @@ __metadata: linkType: hard "defer-to-connect@npm:^2.0.0": - version: 2.0.0 - resolution: "defer-to-connect@npm:2.0.0" - checksum: 635a01644ea6b52268a9b15c3196ec3a4cb01f874ff09d3ec7858c4aac0ea12ac554aa8831b7ac8ae88c4761e1653f8ea05cf5eebd1236b7bedfde34db52813c + version: 2.0.1 + resolution: "defer-to-connect@npm:2.0.1" + checksum: 8a9b50d2f25446c0bfefb55a48e90afd58f85b21bcf78e9207cd7b804354f6409032a1705c2491686e202e64fc05f147aa5aa45f9aa82627563f045937f5791b languageName: node linkType: hard @@ -20872,9 +19222,9 @@ __metadata: linkType: hard "denque@npm:^2.0.1": - version: 2.0.1 - resolution: "denque@npm:2.0.1" - checksum: ec398d1e3c6c8d4f5213dcf9ad74d7faa3b461e29a0019c9742b49a97ac5e16aa7134db45fa9d841e318e7722dd1ba670a474fde9a5b0d870b3a5fc6fe914c30 + version: 2.1.0 + resolution: "denque@npm:2.1.0" + checksum: 1d4ae1d05e59ac3a3481e7b478293f4b4c813819342273f3d5b826c7ffa9753c520919ba264f377e09108d24ec6cf0ec0ac729a5686cbb8f32d797126c5dae74 languageName: node linkType: hard @@ -20906,14 +19256,7 @@ __metadata: languageName: node linkType: hard -"dequal@npm:^2.0.0": - version: 2.0.2 - resolution: "dequal@npm:2.0.2" - checksum: 86c7a2c59f7b0797ed397c74b5fcdb744e48fc19440b70ad6ac59f57550a96b0faef3f1cfd5760ec5e6d3f7cb101f634f1f80db4e727b1dc8389bf62d977c0a0 - languageName: node - linkType: hard - -"dequal@npm:^2.0.2": +"dequal@npm:^2.0.0, dequal@npm:^2.0.2": version: 2.0.3 resolution: "dequal@npm:2.0.3" checksum: 8679b850e1a3d0ebbc46ee780d5df7b478c23f335887464023a631d1b9af051ad4a6595a44220f9ff8ff95a8ddccf019b5ad778a976fd7bbf77383d36f412f90 @@ -20951,15 +19294,6 @@ __metadata: languageName: node linkType: hard -"detect-libc@npm:^1.0.3": - version: 1.0.3 - resolution: "detect-libc@npm:1.0.3" - bin: - detect-libc: ./bin/detect-libc.js - checksum: daaaed925ffa7889bd91d56e9624e6c8033911bb60f3a50a74a87500680652969dbaab9526d1e200a4c94acf80fc862a22131841145a0a8482d60a99c24f4a3e - languageName: node - linkType: hard - "detect-libc@npm:^2.0.0": version: 2.0.1 resolution: "detect-libc@npm:2.0.1" @@ -20975,9 +19309,9 @@ __metadata: linkType: hard "detect-node@npm:^2.0.4": - version: 2.0.4 - resolution: "detect-node@npm:2.0.4" - checksum: c06ae40fefbad8cb8cbb6ca819c93568b2a809e747bfc9c71f3524b027f5e988163b0ac0517fd65288b375360b30bc4822172eb05d211f99003d73cf8ec22911 + version: 2.1.0 + resolution: "detect-node@npm:2.1.0" + checksum: 832184ec458353e41533ac9c622f16c19f7c02d8b10c303dfd3a756f56be93e903616c0bb2d4226183c9351c15fc0b3dba41a17a2308262afabcfa3776e6ae6e languageName: node linkType: hard @@ -21001,7 +19335,7 @@ __metadata: languageName: node linkType: hard -"dezalgo@npm:1.0.3, dezalgo@npm:^1.0.0": +"dezalgo@npm:1.0.3": version: 1.0.3 resolution: "dezalgo@npm:1.0.3" dependencies: @@ -21011,6 +19345,16 @@ __metadata: languageName: node linkType: hard +"dezalgo@npm:^1.0.0": + version: 1.0.4 + resolution: "dezalgo@npm:1.0.4" + dependencies: + asap: ^2.0.0 + wrappy: 1 + checksum: 895389c6aead740d2ab5da4d3466d20fa30f738010a4d3f4dcccc9fc645ca31c9d10b7e1804ae489b1eb02c7986f9f1f34ba132d409b043082a86d9a4e745624 + languageName: node + linkType: hard + "diff-sequences@npm:^27.5.1": version: 27.5.1 resolution: "diff-sequences@npm:27.5.1" @@ -21018,6 +19362,13 @@ __metadata: languageName: node linkType: hard +"diff-sequences@npm:^29.0.0": + version: 29.0.0 + resolution: "diff-sequences@npm:29.0.0" + checksum: 2c084a3db03ecde26f649f6f2559974e01e174451debeb301a7e17199e73423a8e8ddeb9a35ae38638c084b4fa51296a4a20fa7f44f3db0c0ba566bdc704ed3d + languageName: node + linkType: hard + "diff2html@npm:^2.7.0": version: 2.12.2 resolution: "diff2html@npm:2.12.2" @@ -21052,9 +19403,9 @@ __metadata: linkType: hard "diff@npm:^5.0.0": - version: 5.0.0 - resolution: "diff@npm:5.0.0" - checksum: f19fe29284b633afdb2725c2a8bb7d25761ea54d321d8e67987ac851c5294be4afeab532bd84531e02583a3fe7f4014aa314a3eda84f5590e7a9e6b371ef3b46 + version: 5.1.0 + resolution: "diff@npm:5.1.0" + checksum: c7bf0df7c9bfbe1cf8a678fd1b2137c4fb11be117a67bc18a0e03ae75105e8533dbfb1cda6b46beb3586ef5aed22143ef9d70713977d5fb1f9114e21455fba90 languageName: node linkType: hard @@ -21095,11 +19446,11 @@ __metadata: linkType: hard "dns-packet@npm:^5.2.2": - version: 5.3.1 - resolution: "dns-packet@npm:5.3.1" + version: 5.4.0 + resolution: "dns-packet@npm:5.4.0" dependencies: "@leichtgewicht/ip-codec": ^2.0.1 - checksum: 196ff74a0669126cf5fc901a5849b72f625bd7a4cb163b3f4d41fbe19ed0b017cf7674daef5b0acbd448c094fcd795e501d7066f301be428e4acecfcf3c5f336 + checksum: a169963848e8539dfd8a19058562f9e1c15c0f82cbf76fa98942f11c46f3c74e7e7c82e3a8a5182d4c9e6ff19e21be738dbd098a876dde755d3aedd2cc730880 languageName: node linkType: hard @@ -21113,14 +19464,14 @@ __metadata: linkType: hard "docker-modem@npm:^3.0.0": - version: 3.0.3 - resolution: "docker-modem@npm:3.0.3" + version: 3.0.6 + resolution: "docker-modem@npm:3.0.6" dependencies: debug: ^4.1.1 readable-stream: ^3.5.0 split-ca: ^1.0.1 - ssh2: ^1.4.0 - checksum: 4ad495d17a7bbb29f48e3bf8ab74508848a3ca62c2dffc399fc0b9b2d1caccb1be54cc53001d5e0d56069e6cb4a91da4b017240733080b6648a66b40345e1f96 + ssh2: ^1.11.0 + checksum: f80abc8ddf4d6026ba460bf66c8e039ef8e41a6705086a0770ce1b7cabd91bcd4681c32a6531b79dab23ceea680a3aae363bee29e8089b55a8eb775abfb6b67d languageName: node linkType: hard @@ -21154,9 +19505,9 @@ __metadata: linkType: hard "dom-accessibility-api@npm:^0.5.6, dom-accessibility-api@npm:^0.5.9": - version: 0.5.13 - resolution: "dom-accessibility-api@npm:0.5.13" - checksum: a5a5f14c01e466d424750aaac9225f1dc43cf16d101a1c40e01a554abce63c48084707002c39b805f2ce212273c179dd6d2258175997cd06d5f79851bf52dd40 + version: 0.5.14 + resolution: "dom-accessibility-api@npm:0.5.14" + checksum: 782c813f75a09ba6735ef03b5e1624406a3829444ae49d5bdedd272a49d437ae3354f53e02ffc8c9fd9165880250f41546538f27461f839dd4ea1234e77e8d5e languageName: node linkType: hard @@ -21179,30 +19530,30 @@ __metadata: linkType: hard "dom-helpers@npm:^5.0.1": - version: 5.1.4 - resolution: "dom-helpers@npm:5.1.4" + version: 5.2.1 + resolution: "dom-helpers@npm:5.2.1" dependencies: "@babel/runtime": ^7.8.7 - csstype: ^2.6.7 - checksum: e516325d662f57db7724e6fe26ae5b36b6974f74ae2513998f408bf056670c05ed010bb3be866ac454110249a9e88aaa6451e63e4efa87f834041ef8303ace68 + csstype: ^3.0.2 + checksum: 863ba9e086f7093df3376b43e74ce4422571d404fc9828bf2c56140963d5edf0e56160f9b2f3bb61b282c07f8fc8134f023c98fd684bddcb12daf7b0f14d951c languageName: node linkType: hard "dom-serializer@npm:^1.0.1": - version: 1.2.0 - resolution: "dom-serializer@npm:1.2.0" + version: 1.4.1 + resolution: "dom-serializer@npm:1.4.1" dependencies: domelementtype: ^2.0.1 - domhandler: ^4.0.0 + domhandler: ^4.2.0 entities: ^2.0.0 - checksum: 231212b30947eb7d89f8b9d89ec82af60a634ff5fd4c3a2e42989567742d308d0aae21e82328c17df4b453deb13e11b047ce0d610581766dd25734afda23bef0 + checksum: fbb0b01f87a8a2d18e6e5a388ad0f7ec4a5c05c06d219377da1abc7bb0f674d804f4a8a94e3f71ff15f6cb7dcfc75704a54b261db672b9b3ab03da6b758b0b22 languageName: node linkType: hard "dom-walk@npm:^0.1.0": - version: 0.1.1 - resolution: "dom-walk@npm:0.1.1" - checksum: f55db10d0344b87cca1046a2356915a8e9ddee90fc97d3ebb26c4021e593cce47d24cbef18aac721421787c6a60fa14dd079a0b81f8610c9aeeec52177fd2acf + version: 0.1.2 + resolution: "dom-walk@npm:0.1.2" + checksum: 19eb0ce9c6de39d5e231530685248545d9cd2bd97b2cb3486e0bfc0f2a393a9addddfd5557463a932b52fdfcf68ad2a619020cd2c74a5fe46fbecaa8e80872f3 languageName: node linkType: hard @@ -21214,9 +19565,9 @@ __metadata: linkType: hard "domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": - version: 2.2.0 - resolution: "domelementtype@npm:2.2.0" - checksum: 24cb386198640cd58aa36f8c987f2ea61859929106d06ffcc8f547e70cb2ed82a6dc56dcb8252b21fba1f1ea07df6e4356d60bfe57f77114ca1aed6828362629 + version: 2.3.0 + resolution: "domelementtype@npm:2.3.0" + checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 languageName: node linkType: hard @@ -21229,23 +19580,30 @@ __metadata: languageName: node linkType: hard -"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0": - version: 4.3.0 - resolution: "domhandler@npm:4.3.0" +"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0, domhandler@npm:^4.3.1": + version: 4.3.1 + resolution: "domhandler@npm:4.3.1" dependencies: domelementtype: ^2.2.0 - checksum: d2a2dbf40dd99abf936b65ad83c6b530afdb3605a87cad37a11b5d9220e68423ebef1b86c89e0f6d93ffaf315cc327cf1a988652e7a9a95cce539e3984f4c64d + checksum: 4c665ceed016e1911bf7d1dadc09dc888090b64dee7851cccd2fcf5442747ec39c647bb1cb8c8919f8bbdd0f0c625a6bafeeed4b2d656bbecdbae893f43ffaaa languageName: node linkType: hard -"dompurify@npm:=2.3.10, dompurify@npm:^2.2.7, dompurify@npm:^2.2.9, dompurify@npm:^2.3.6": +"dompurify@npm:=2.3.10": version: 2.3.10 resolution: "dompurify@npm:2.3.10" checksum: ee343876b4c065e82d194818c66af76a6d2290264c7db583ad71761c11781fd626f0245f9f4670175d5707c4b8fcfb89adae80bed0418a9426a47ee7f36b0ffc languageName: node linkType: hard -"domutils@npm:^2.5.2, domutils@npm:^2.6.0": +"dompurify@npm:^2.2.7, dompurify@npm:^2.2.9, dompurify@npm:^2.3.6": + version: 2.4.0 + resolution: "dompurify@npm:2.4.0" + checksum: c93ea73cf8e3ba044588450198563e56ce6902e36d0e16e3699df2fa59e82c4fdd11d4ad04ef5024569ce96a35b46f29d0bbea522516add33cd39a7f56a8a675 + languageName: node + linkType: hard + +"domutils@npm:^2.5.2, domutils@npm:^2.8.0": version: 2.8.0 resolution: "domutils@npm:2.8.0" dependencies: @@ -21285,9 +19643,9 @@ __metadata: linkType: hard "dotenv@npm:^16.0.0": - version: 16.0.0 - resolution: "dotenv@npm:16.0.0" - checksum: 664cebb51f0a9a1d1b930f51f0271e72e26d62feaecc9dc03df39453dd494b4e724809ca480fb3ec3213382b1ed3f791aaeb83569a137f9329ce58efd4853dbf + version: 16.0.2 + resolution: "dotenv@npm:16.0.2" + checksum: ca8f9ca2d67929c7771069f4c31b4e46b9932621009e658e5afd655dde2d69b77642bf36dbc9e72bc170523dfd908a9ee41c26f034c1fdc605ace3b1b4b10faf languageName: node linkType: hard @@ -21305,14 +19663,7 @@ __metadata: languageName: node linkType: hard -"duplexer@npm:^0.1.1, duplexer@npm:~0.1.1": - version: 0.1.1 - resolution: "duplexer@npm:0.1.1" - checksum: fc7937c4a43808493cd63dfa59f4deb6cf02beea783cb17f39677b53ccacb9fba48f87731b8944048dd6dfa8f456d0725f86f3fd587ab780532d9a8e2914e8b7 - languageName: node - linkType: hard - -"duplexer@npm:^0.1.2": +"duplexer@npm:^0.1.1, duplexer@npm:^0.1.2, duplexer@npm:~0.1.1": version: 0.1.2 resolution: "duplexer@npm:0.1.2" checksum: 62ba61a830c56801db28ff6305c7d289b6dc9f859054e8c982abd8ee0b0a14d2e9a8e7d086ffee12e868d43e2bbe8a964be55ddbd8c8957714c87373c7a4f9b0 @@ -21320,14 +19671,14 @@ __metadata: linkType: hard "duplexify@npm:^4.0.0": - version: 4.1.1 - resolution: "duplexify@npm:4.1.1" + version: 4.1.2 + resolution: "duplexify@npm:4.1.2" dependencies: end-of-stream: ^1.4.1 inherits: ^2.0.3 readable-stream: ^3.1.1 stream-shift: ^1.0.0 - checksum: 1cf800f1dc1647d6e0272b811421d4ce78b7d9b12dd85c7ecd78b9e4bfba374d309ac9e3440c66461fc62adb69db49aebf49da15962c98a84d8fd33c7e9c5c5a + checksum: 964376c61c0e92f6ed0694b3ba97c84f199413dc40ab8dfdaef80b7a7f4982fcabf796214e28ed614a5bc1ec45488a29b81e7d46fa3f5ddf65bcb118c20145ad languageName: node linkType: hard @@ -21409,14 +19760,14 @@ __metadata: languageName: node linkType: hard -"ejs@npm:^3.1.6": - version: 3.1.7 - resolution: "ejs@npm:3.1.7" +"ejs@npm:^3.1.8": + version: 3.1.8 + resolution: "ejs@npm:3.1.8" dependencies: jake: ^10.8.5 bin: ejs: bin/cli.js - checksum: fe40764af39955ce8f8b116716fc8b911959946698edb49ecab85df597746c07aa65d5b74ead28a1e2ffa75b0f92d9bedd752f1c29437da6137b3518271e988c + checksum: 1d40d198ad52e315ccf37e577bdec06e24eefdc4e3c27aafa47751a03a0c7f0ec4310254c9277a5f14763c3cd4bbacce27497332b2d87c74232b9b1defef8efc languageName: node linkType: hard @@ -21437,21 +19788,14 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.17": - version: 1.4.35 - resolution: "electron-to-chromium@npm:1.4.35" - checksum: c4d7943abf370ca294129cda8432ea2f83c5b867e708aa33c7953e10f741803cfb23f83ba7341b6a76d76efb649f967b8e7b130ebe1e262971c764537ea5fd9b +"electron-to-chromium@npm:^1.4.251": + version: 1.4.254 + resolution: "electron-to-chromium@npm:1.4.254" + checksum: 32f0ecb621db44d37fc93017f742a2b1da7302c778b4d6c0fa122cc662f9c50e6576d214048dcac5c9baf835340c954c624f09f2e02c6dea9049c4a839e862e2 languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.188": - version: 1.4.194 - resolution: "electron-to-chromium@npm:1.4.194" - checksum: faea6fa96a258228a3e2953160aa6ef467bf86c856d8ee1a7c2d4a1c9edaeca51fb2bf3a0cdb17b1b485e7c9d2144fb63079119d6b210e56b370dd819954139b - languageName: node - linkType: hard - -"elliptic@npm:^6.0.0": +"elliptic@npm:^6.5.3": version: 6.5.4 resolution: "elliptic@npm:6.5.4" dependencies: @@ -21527,8 +19871,8 @@ __metadata: linkType: hard "engine.io-client@npm:~3.5.0": - version: 3.5.2 - resolution: "engine.io-client@npm:3.5.2" + version: 3.5.3 + resolution: "engine.io-client@npm:3.5.3" dependencies: component-emitter: ~1.3.0 component-inherit: 0.0.3 @@ -21541,7 +19885,7 @@ __metadata: ws: ~7.4.2 xmlhttprequest-ssl: ~1.6.2 yeast: 0.1.2 - checksum: 2a4a8407ea939c45826d3483e39fe017e66d488dfd101282a79644f75196f7b84cac9d6f981e3ace1ab231e2469c18b25d79b114f20ab58d0eaa393bf66f213e + checksum: 2732f3e9dc331f429b45cc8f4bafea6a1b6032cf57a25e4bc850de4f5d664a482e03f8a6edacc02dd513a39f7fe08dfcc3208e02b29848c45fa1b377f8d0aaa4 languageName: node linkType: hard @@ -21558,9 +19902,9 @@ __metadata: languageName: node linkType: hard -"engine.io@npm:~3.5.0": - version: 3.5.0 - resolution: "engine.io@npm:3.5.0" +"engine.io@npm:~3.6.0": + version: 3.6.0 + resolution: "engine.io@npm:3.6.0" dependencies: accepts: ~1.3.4 base64id: 2.0.0 @@ -21568,7 +19912,7 @@ __metadata: debug: ~4.1.0 engine.io-parser: ~2.2.0 ws: ~7.4.2 - checksum: 8d7eb107428301084502c65c8ae48e350587fa57edae734a88f7345debd386ed1d8a25ece7e82ba3ff1ad65300fb0123def1446a1a13127929ee5eac378af8b2 + checksum: 7c02d7f8eb04b6682228874904af588f9a98b28190867da5754310fdaac1fcc1a2872c7ef948b070cdb5af37b2f3ca43493ddc63418caebff0df848f3edc755f languageName: node linkType: hard @@ -21598,33 +19942,40 @@ __metadata: languageName: node linkType: hard -"entities@npm:^2.0.0, entities@npm:~2.1.0": +"entities@npm:^2.0.0": + version: 2.2.0 + resolution: "entities@npm:2.2.0" + checksum: 19010dacaf0912c895ea262b4f6128574f9ccf8d4b3b65c7e8334ad0079b3706376360e28d8843ff50a78aabcb8f08f0a32dbfacdc77e47ed77ca08b713669b3 + languageName: node + linkType: hard + +"entities@npm:^4.3.0": + version: 4.4.0 + resolution: "entities@npm:4.4.0" + checksum: 84d250329f4b56b40fa93ed067b194db21e8815e4eb9b59f43a086f0ecd342814f6bc483de8a77da5d64e0f626033192b1b4f1792232a7ea6b970ebe0f3187c2 + languageName: node + linkType: hard + +"entities@npm:~2.1.0": version: 2.1.0 resolution: "entities@npm:2.1.0" checksum: a10a877e489586a3f6a691fe49bf3fc4e58f06c8e80522f08214a5150ba457e7017b447d4913a3fa041bda06ee4c92517baa4d8d75373eaa79369e9639225ffd languageName: node linkType: hard -"entities@npm:^4.3.0": - version: 4.3.1 - resolution: "entities@npm:4.3.1" - checksum: e8f6d2bac238494b2355e90551893882d2675142be7e7bdfcb15248ed0652a630678ba0e3a8dc750693e736cb6011f504c27dabeb4cd3330560092e88b105090 - languageName: node - linkType: hard - "env-paths@npm:^2.2.0": - version: 2.2.0 - resolution: "env-paths@npm:2.2.0" - checksum: ba2aea38301aafd69086be1f8cb453b92946e4840cb0de9d1c88a67e6f43a6174dcddb60b218ec36db8720b12de46b0d93c2f97ad9bbec6a267b479ab37debb6 + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e languageName: node linkType: hard "envinfo@npm:^7.7.4": - version: 7.7.4 - resolution: "envinfo@npm:7.7.4" + version: 7.8.1 + resolution: "envinfo@npm:7.8.1" bin: envinfo: dist/cli.js - checksum: 73fb993dd9845c61ce52118fcbe4de4d3644d8163130e7bf266f223f32e75e2d33a2c59db83fa0f01f147f122c76567f5f613457a151eb8c6835013538506704 + checksum: de736c98d6311c78523628ff127af138451b162e57af5293c1b984ca821d0aeb9c849537d2fde0434011bed33f6bca5310ca2aab8a51a3f28fc719e89045d648 languageName: node linkType: hard @@ -21652,11 +20003,11 @@ __metadata: linkType: hard "error-stack-parser@npm:^2.0.6": - version: 2.0.6 - resolution: "error-stack-parser@npm:2.0.6" + version: 2.1.4 + resolution: "error-stack-parser@npm:2.1.4" dependencies: - stackframe: ^1.1.1 - checksum: bd8e048fcb1c0c74ab201271fec3b39c097a7c24bdef1718828d053c0584da5d7ad845253b5e4773803ee8e7450b23b0920e60a3b60dd403c1568c843058cb12 + stackframe: ^1.3.4 + checksum: 3b916d2d14c6682f287c8bfa28e14672f47eafe832701080e420e7cdbaebb2c50293868256a95706ac2330fe078cf5664713158b49bc30d7a5f2ac229ded0e18 languageName: node linkType: hard @@ -21667,43 +20018,15 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.18.0-next.1, es-abstract@npm:^1.18.0-next.2, es-abstract@npm:^1.19.1": - version: 1.19.1 - resolution: "es-abstract@npm:1.19.1" - dependencies: - call-bind: ^1.0.2 - es-to-primitive: ^1.2.1 - function-bind: ^1.1.1 - get-intrinsic: ^1.1.1 - get-symbol-description: ^1.0.0 - has: ^1.0.3 - has-symbols: ^1.0.2 - internal-slot: ^1.0.3 - is-callable: ^1.2.4 - is-negative-zero: ^2.0.1 - is-regex: ^1.1.4 - is-shared-array-buffer: ^1.0.1 - is-string: ^1.0.7 - is-weakref: ^1.0.1 - object-inspect: ^1.11.0 - object-keys: ^1.1.1 - object.assign: ^4.1.2 - string.prototype.trimend: ^1.0.4 - string.prototype.trimstart: ^1.0.4 - unbox-primitive: ^1.0.1 - checksum: b6be8410672c5364db3fb01eb786e30c7b4bb32b4af63d381c08840f4382c4a168e7855cd338bf59d4f1a1a1138f4d748d1fd40ec65aaa071876f9e9fbfed949 - languageName: node - linkType: hard - -"es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.2, es-abstract@npm:^1.19.5": - version: 1.20.1 - resolution: "es-abstract@npm:1.20.1" +"es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1, es-abstract@npm:^1.19.2, es-abstract@npm:^1.19.5, es-abstract@npm:^1.20.0": + version: 1.20.2 + resolution: "es-abstract@npm:1.20.2" dependencies: call-bind: ^1.0.2 es-to-primitive: ^1.2.1 function-bind: ^1.1.1 function.prototype.name: ^1.1.5 - get-intrinsic: ^1.1.1 + get-intrinsic: ^1.1.2 get-symbol-description: ^1.0.0 has: ^1.0.3 has-property-descriptors: ^1.0.0 @@ -21715,14 +20038,14 @@ __metadata: is-shared-array-buffer: ^1.0.2 is-string: ^1.0.7 is-weakref: ^1.0.2 - object-inspect: ^1.12.0 + object-inspect: ^1.12.2 object-keys: ^1.1.1 - object.assign: ^4.1.2 + object.assign: ^4.1.4 regexp.prototype.flags: ^1.4.3 string.prototype.trimend: ^1.0.5 string.prototype.trimstart: ^1.0.5 unbox-primitive: ^1.0.2 - checksum: 28da27ae0ed9c76df7ee8ef5c278df79dcfdb554415faf7068bb7c58f8ba8e2a16bfb59e586844be6429ab4c302ca7748979d48442224cb1140b051866d74b7f + checksum: ab893dd1f849250f5a2da82656b4e21b511f76429b25a4aea5c8b2a3007ff01cb8e112987d0dd7693b9ad9e6399f8f7be133285d6196a5ebd1b13a4ee2258f70 languageName: node linkType: hard @@ -21767,6 +20090,13 @@ __metadata: languageName: node linkType: hard +"esbuild-android-64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-android-64@npm:0.15.7" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + "esbuild-android-arm64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-android-arm64@npm:0.14.54" @@ -21774,6 +20104,13 @@ __metadata: languageName: node linkType: hard +"esbuild-android-arm64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-android-arm64@npm:0.15.7" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "esbuild-darwin-64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-darwin-64@npm:0.14.54" @@ -21781,6 +20118,13 @@ __metadata: languageName: node linkType: hard +"esbuild-darwin-64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-darwin-64@npm:0.15.7" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "esbuild-darwin-arm64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-darwin-arm64@npm:0.14.54" @@ -21788,6 +20132,13 @@ __metadata: languageName: node linkType: hard +"esbuild-darwin-arm64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-darwin-arm64@npm:0.15.7" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "esbuild-freebsd-64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-freebsd-64@npm:0.14.54" @@ -21795,6 +20146,13 @@ __metadata: languageName: node linkType: hard +"esbuild-freebsd-64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-freebsd-64@npm:0.15.7" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "esbuild-freebsd-arm64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-freebsd-arm64@npm:0.14.54" @@ -21802,6 +20160,13 @@ __metadata: languageName: node linkType: hard +"esbuild-freebsd-arm64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-freebsd-arm64@npm:0.15.7" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "esbuild-linux-32@npm:0.14.54": version: 0.14.54 resolution: "esbuild-linux-32@npm:0.14.54" @@ -21809,6 +20174,13 @@ __metadata: languageName: node linkType: hard +"esbuild-linux-32@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-linux-32@npm:0.15.7" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + "esbuild-linux-64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-linux-64@npm:0.14.54" @@ -21816,6 +20188,13 @@ __metadata: languageName: node linkType: hard +"esbuild-linux-64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-linux-64@npm:0.15.7" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + "esbuild-linux-arm64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-linux-arm64@npm:0.14.54" @@ -21823,6 +20202,13 @@ __metadata: languageName: node linkType: hard +"esbuild-linux-arm64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-linux-arm64@npm:0.15.7" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + "esbuild-linux-arm@npm:0.14.54": version: 0.14.54 resolution: "esbuild-linux-arm@npm:0.14.54" @@ -21830,6 +20216,13 @@ __metadata: languageName: node linkType: hard +"esbuild-linux-arm@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-linux-arm@npm:0.15.7" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "esbuild-linux-mips64le@npm:0.14.54": version: 0.14.54 resolution: "esbuild-linux-mips64le@npm:0.14.54" @@ -21837,6 +20230,13 @@ __metadata: languageName: node linkType: hard +"esbuild-linux-mips64le@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-linux-mips64le@npm:0.15.7" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + "esbuild-linux-ppc64le@npm:0.14.54": version: 0.14.54 resolution: "esbuild-linux-ppc64le@npm:0.14.54" @@ -21844,6 +20244,13 @@ __metadata: languageName: node linkType: hard +"esbuild-linux-ppc64le@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-linux-ppc64le@npm:0.15.7" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + "esbuild-linux-riscv64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-linux-riscv64@npm:0.14.54" @@ -21851,6 +20258,13 @@ __metadata: languageName: node linkType: hard +"esbuild-linux-riscv64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-linux-riscv64@npm:0.15.7" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + "esbuild-linux-s390x@npm:0.14.54": version: 0.14.54 resolution: "esbuild-linux-s390x@npm:0.14.54" @@ -21858,11 +20272,18 @@ __metadata: languageName: node linkType: hard +"esbuild-linux-s390x@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-linux-s390x@npm:0.15.7" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + "esbuild-loader@npm:^2.18.0": - version: 2.19.0 - resolution: "esbuild-loader@npm:2.19.0" + version: 2.20.0 + resolution: "esbuild-loader@npm:2.20.0" dependencies: - esbuild: ^0.14.39 + esbuild: ^0.15.6 joycon: ^3.0.1 json5: ^2.2.0 loader-utils: ^2.0.0 @@ -21870,7 +20291,7 @@ __metadata: webpack-sources: ^2.2.0 peerDependencies: webpack: ^4.40.0 || ^5.0.0 - checksum: 7dc8deca3ab6f8684437359ce6d407d18622ba7cb7f0a22f44861f72b34405431070a6137e366232bea2418e37a54fe04299951a588fec54058f047e65616adc + checksum: 81faee7155b35af1fdef3dffa273a14ec83e56b9efa1efb76cb1eb64964dd738809c147a87ab9d3507de11946eed51fd1ee42d476b2c9654cbda145da0d9479b languageName: node linkType: hard @@ -21881,6 +20302,13 @@ __metadata: languageName: node linkType: hard +"esbuild-netbsd-64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-netbsd-64@npm:0.15.7" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + "esbuild-openbsd-64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-openbsd-64@npm:0.14.54" @@ -21888,6 +20316,13 @@ __metadata: languageName: node linkType: hard +"esbuild-openbsd-64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-openbsd-64@npm:0.15.7" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + "esbuild-sunos-64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-sunos-64@npm:0.14.54" @@ -21895,6 +20330,13 @@ __metadata: languageName: node linkType: hard +"esbuild-sunos-64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-sunos-64@npm:0.15.7" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + "esbuild-windows-32@npm:0.14.54": version: 0.14.54 resolution: "esbuild-windows-32@npm:0.14.54" @@ -21902,6 +20344,13 @@ __metadata: languageName: node linkType: hard +"esbuild-windows-32@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-windows-32@npm:0.15.7" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "esbuild-windows-64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-windows-64@npm:0.14.54" @@ -21909,6 +20358,13 @@ __metadata: languageName: node linkType: hard +"esbuild-windows-64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-windows-64@npm:0.15.7" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "esbuild-windows-arm64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-windows-arm64@npm:0.14.54" @@ -21916,7 +20372,14 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.14.1, esbuild@npm:^0.14.10, esbuild@npm:^0.14.39": +"esbuild-windows-arm64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-windows-arm64@npm:0.15.7" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"esbuild@npm:^0.14.1, esbuild@npm:^0.14.10": version: 0.14.54 resolution: "esbuild@npm:0.14.54" dependencies: @@ -21990,6 +20453,80 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.15.6": + version: 0.15.7 + resolution: "esbuild@npm:0.15.7" + dependencies: + "@esbuild/linux-loong64": 0.15.7 + esbuild-android-64: 0.15.7 + esbuild-android-arm64: 0.15.7 + esbuild-darwin-64: 0.15.7 + esbuild-darwin-arm64: 0.15.7 + esbuild-freebsd-64: 0.15.7 + esbuild-freebsd-arm64: 0.15.7 + esbuild-linux-32: 0.15.7 + esbuild-linux-64: 0.15.7 + esbuild-linux-arm: 0.15.7 + esbuild-linux-arm64: 0.15.7 + esbuild-linux-mips64le: 0.15.7 + esbuild-linux-ppc64le: 0.15.7 + esbuild-linux-riscv64: 0.15.7 + esbuild-linux-s390x: 0.15.7 + esbuild-netbsd-64: 0.15.7 + esbuild-openbsd-64: 0.15.7 + esbuild-sunos-64: 0.15.7 + esbuild-windows-32: 0.15.7 + esbuild-windows-64: 0.15.7 + esbuild-windows-arm64: 0.15.7 + dependenciesMeta: + "@esbuild/linux-loong64": + optional: true + esbuild-android-64: + optional: true + esbuild-android-arm64: + optional: true + esbuild-darwin-64: + optional: true + esbuild-darwin-arm64: + optional: true + esbuild-freebsd-64: + optional: true + esbuild-freebsd-arm64: + optional: true + esbuild-linux-32: + optional: true + esbuild-linux-64: + optional: true + esbuild-linux-arm: + optional: true + esbuild-linux-arm64: + optional: true + esbuild-linux-mips64le: + optional: true + esbuild-linux-ppc64le: + optional: true + esbuild-linux-riscv64: + optional: true + esbuild-linux-s390x: + optional: true + esbuild-netbsd-64: + optional: true + esbuild-openbsd-64: + optional: true + esbuild-sunos-64: + optional: true + esbuild-windows-32: + optional: true + esbuild-windows-64: + optional: true + esbuild-windows-arm64: + optional: true + bin: + esbuild: bin/esbuild + checksum: 54ddaa6cf96798d817861b4f68cb8d176075dc09b6e0ed511c57e5db6fd86d2c673ac2ec631ad9b11678d58ad4a77cd6b7a3853b9c6eac29b7f5c6d38e42f92e + languageName: node + linkType: hard + "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" @@ -22105,12 +20642,14 @@ __metadata: linkType: hard "eslint-module-utils@npm:^2.1.1, eslint-module-utils@npm:^2.7.3": - version: 2.7.3 - resolution: "eslint-module-utils@npm:2.7.3" + version: 2.7.4 + resolution: "eslint-module-utils@npm:2.7.4" dependencies: debug: ^3.2.7 - find-up: ^2.1.0 - checksum: 77048263f309167a1e6a1e1b896bfb5ddd1d3859b2e2abbd9c32c432aee13d610d46e6820b1ca81b37fba437cf423a404bc6649be64ace9148a3062d1886a678 + peerDependenciesMeta: + eslint: + optional: true + checksum: 5da13645daff145a5c922896b258f8bba560722c3767254e458d894ff5fbb505d6dfd945bffa932a5b0ae06714da2379bd41011c4c20d2d59cc83e23895360f7 languageName: node linkType: hard @@ -22163,8 +20702,8 @@ __metadata: linkType: hard "eslint-plugin-jest@npm:^27.0.0": - version: 27.0.2 - resolution: "eslint-plugin-jest@npm:27.0.2" + version: 27.0.4 + resolution: "eslint-plugin-jest@npm:27.0.4" dependencies: "@typescript-eslint/utils": ^5.10.0 peerDependencies: @@ -22175,7 +20714,7 @@ __metadata: optional: true jest: optional: true - checksum: 0545568a1ddd14138f08015f5f1a99e08c0d5ef5d2f14a8e66c28c1b8296a541c1075e9660f637fcb71be01f2a709991937878fc96abc760c00efc768f4598c8 + checksum: 8408d8a53bae946527ac4120865c29b3468cf58d8e5ff3b9c75c5303bb5aa451ac7e04329fc004cf6302f84431e6c6c1f2ba9009b0150d1718df58ea490ed3f5 languageName: node linkType: hard @@ -22295,13 +20834,13 @@ __metadata: linkType: hard "eslint-visitor-keys@npm:^2.0.0": - version: 2.0.0 - resolution: "eslint-visitor-keys@npm:2.0.0" - checksum: e07e9863fb8c9b1453f5ad1a26f3cc8dd6b349b26605cc06bc0c61215ac5b6f13a4d08c875218e6c0f8ac8fc06ca6e090df769e32c569f0fd2e6a848b8a76c75 + version: 2.1.0 + resolution: "eslint-visitor-keys@npm:2.1.0" + checksum: e3081d7dd2611a35f0388bbdc2f5da60b3a3c5b8b6e928daffff7391146b434d691577aa95064c8b7faad0b8a680266bcda0a42439c18c717b80e6718d7e267d languageName: node linkType: hard -"eslint-visitor-keys@npm:^3.0.0, eslint-visitor-keys@npm:^3.3.0": +"eslint-visitor-keys@npm:^3.3.0": version: 3.3.0 resolution: "eslint-visitor-keys@npm:3.3.0" checksum: d59e68a7c5a6d0146526b0eec16ce87fbf97fe46b8281e0d41384224375c4e52f5ffb9e16d48f4ea50785cde93f766b0c898e31ab89978d88b0e1720fbfb7808 @@ -22325,10 +20864,10 @@ __metadata: linkType: hard "eslint@npm:^8.6.0": - version: 8.23.0 - resolution: "eslint@npm:8.23.0" + version: 8.23.1 + resolution: "eslint@npm:8.23.1" dependencies: - "@eslint/eslintrc": ^1.3.1 + "@eslint/eslintrc": ^1.3.2 "@humanwhocodes/config-array": ^0.10.4 "@humanwhocodes/gitignore-to-minimatch": ^1.0.2 "@humanwhocodes/module-importer": ^1.0.1 @@ -22347,7 +20886,6 @@ __metadata: fast-deep-equal: ^3.1.3 file-entry-cache: ^6.0.1 find-up: ^5.0.0 - functional-red-black-tree: ^1.0.1 glob-parent: ^6.0.1 globals: ^13.15.0 globby: ^11.1.0 @@ -22356,6 +20894,7 @@ __metadata: import-fresh: ^3.0.0 imurmurhash: ^0.1.4 is-glob: ^4.0.0 + js-sdsl: ^4.1.4 js-yaml: ^4.1.0 json-stable-stringify-without-jsonify: ^1.0.1 levn: ^0.4.1 @@ -22369,7 +20908,7 @@ __metadata: text-table: ^0.2.0 bin: eslint: bin/eslint.js - checksum: ff6075daa28d817a7ac4508f31bc108a04d9ab5056608c8651b5bf9cfea5d708ca16dea6cdab2c3c0ae99b0bf0e726af8504eaa8e17c8e12e242cb68237ead64 + checksum: a727e15492786a03b438bcf021db49f715680679846a7b8d79b98ad34576f2a570404ffe882d3c3e26f6359bff7277ef11fae5614bfe8629adb653f20d018c71 languageName: node linkType: hard @@ -22448,9 +20987,9 @@ __metadata: linkType: hard "estree-walker@npm:^2.0.1": - version: 2.0.1 - resolution: "estree-walker@npm:2.0.1" - checksum: c8e89c1e0dced789554c2c76152ef748ef226aa792eead6eee1777b6faa24e56a539639b8024f3952e80c451dd2c51f9ca8e7a360771dcaa794ad7b92243929c + version: 2.0.2 + resolution: "estree-walker@npm:2.0.2" + checksum: 6151e6f9828abe2259e57f5fd3761335bb0d2ebd76dc1a01048ccee22fabcfef3c0859300f6d83ff0d1927849368775ec5a6d265dde2f6de5a1be1721cd94efc languageName: node linkType: hard @@ -22504,10 +21043,17 @@ __metadata: languageName: node linkType: hard -"eventemitter2@npm:^6.4.3, eventemitter2@npm:^6.4.4": - version: 6.4.5 - resolution: "eventemitter2@npm:6.4.5" - checksum: 84504f9cf0cc30205cdd46783fe9df3733435e5097f13070b678023110b5ef07847651808ae280cd94c42cd5976880211c7a40321a8ff8fa56f7c5f9c5c11960 +"eventemitter2@npm:6.4.7": + version: 6.4.7 + resolution: "eventemitter2@npm:6.4.7" + checksum: 1b36a77e139d6965ebf3a36c01fa00c089ae6b80faa1911e52888f40b3a7057b36a2cc45dcd1ad87cda3798fe7b97a0aabcbb8175a8b96092a23bb7d0f039e66 + languageName: node + linkType: hard + +"eventemitter2@npm:^6.4.4": + version: 6.4.9 + resolution: "eventemitter2@npm:6.4.9" + checksum: be59577c1e1c35509c7ba0e2624335c35bbcfd9485b8a977384c6cc6759341ea1a98d3cb9dbaa5cea4fff9b687e504504e3f9c2cc1674cf3bd8a43a7c74ea3eb languageName: node linkType: hard @@ -22571,8 +21117,8 @@ __metadata: "@backstage/plugin-airbrake": ^0.3.9-next.3 "@backstage/plugin-apache-airflow": ^0.2.2-next.3 "@backstage/plugin-api-docs": ^0.8.9-next.3 + "@backstage/plugin-azure": ^0.0.0 "@backstage/plugin-azure-devops": ^0.2.0-next.3 - "@backstage/plugin-azure-functions": ^0.0.0 "@backstage/plugin-badges": ^0.2.33-next.3 "@backstage/plugin-catalog-common": ^1.0.6-next.0 "@backstage/plugin-catalog-graph": ^0.2.21-next.2 @@ -22675,8 +21221,8 @@ __metadata: "@backstage/plugin-app-backend": ^0.3.36-next.3 "@backstage/plugin-auth-backend": ^0.16.0-next.3 "@backstage/plugin-auth-node": ^0.2.5-next.3 + "@backstage/plugin-azure-backend": ^0.0.0 "@backstage/plugin-azure-devops-backend": ^0.3.15-next.2 - "@backstage/plugin-azure-functions-backend": ^0.0.0 "@backstage/plugin-badges-backend": ^0.1.30-next.1 "@backstage/plugin-catalog-backend": ^1.4.0-next.3 "@backstage/plugin-code-coverage-backend": ^0.2.2-next.2 @@ -22806,13 +21352,6 @@ __metadata: languageName: node linkType: hard -"exit-on-epipe@npm:~1.0.1": - version: 1.0.1 - resolution: "exit-on-epipe@npm:1.0.1" - checksum: e8ab4940416d19f311b3c9226e3725c6c4c6026fe682266ecc0ff33a455d585fe3e4ee757857c7bf1d0491b478cb232b8e395dfb438e65ac87317eda47304c32 - languageName: node - linkType: hard - "exit@npm:^0.1.2": version: 0.1.2 resolution: "exit@npm:0.1.2" @@ -22854,6 +21393,19 @@ __metadata: languageName: node linkType: hard +"expect@npm:^29.0.0": + version: 29.0.3 + resolution: "expect@npm:29.0.3" + dependencies: + "@jest/expect-utils": ^29.0.3 + jest-get-type: ^29.0.0 + jest-matcher-utils: ^29.0.3 + jest-message-util: ^29.0.3 + jest-util: ^29.0.3 + checksum: 21b7fd346c47896a3de8f1103d7be32dab9409eb3dc170b7a9ff5d8d564b8499bd600b9af6251fe2f46064cf4e2f1456a6c6318da15314b7d74ed6dad723b555 + languageName: node + linkType: hard + "express-prom-bundle@npm:^6.3.6": version: 6.5.0 resolution: "express-prom-bundle@npm:6.5.0" @@ -23046,9 +21598,9 @@ __metadata: linkType: hard "extsprintf@npm:^1.2.0": - version: 1.4.0 - resolution: "extsprintf@npm:1.4.0" - checksum: 184dc8a413eb4b1ff16bdce797340e7ded4d28511d56a1c9afa5a95bcff6ace154063823eaf0206dbbb0d14059d74f382a15c34b7c0636fa74a7e681295eb67e + version: 1.4.1 + resolution: "extsprintf@npm:1.4.1" + checksum: a2f29b241914a8d2bad64363de684821b6b1609d06ae68d5b539e4de6b28659715b5bea94a7265201603713b7027d35399d10b0548f09071c5513e65e8323d33 languageName: node linkType: hard @@ -23074,15 +21626,15 @@ __metadata: linkType: hard "fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.9": - version: 3.2.11 - resolution: "fast-glob@npm:3.2.11" + version: 3.2.12 + resolution: "fast-glob@npm:3.2.12" dependencies: "@nodelib/fs.stat": ^2.0.2 "@nodelib/fs.walk": ^1.2.3 glob-parent: ^5.1.2 merge2: ^1.3.0 micromatch: ^4.0.4 - checksum: f473105324a7780a20c06de842e15ddbb41d3cb7e71d1e4fe6e8373204f22245d54f5ab9e2061e6a1c613047345954d29b022e0e76f5c28b1df9858179a0e6d7 + checksum: 0b1990f6ce831c7e28c4d505edcdaad8e27e88ab9fa65eedadb730438cfc7cde4910d6c975d6b7b8dc8a73da4773702ebcfcd6e3518e73938bb1383badfe01c2 languageName: node linkType: hard @@ -23094,9 +21646,9 @@ __metadata: linkType: hard "fast-json-patch@npm:^3.0.0-1": - version: 3.0.0-1 - resolution: "fast-json-patch@npm:3.0.0-1" - checksum: d4a8dff174357a90f3e2b79812df4bcc179143524e7eb1ab84a3bd5a80bd283f6be53996abe5c38527aeb28e994f0d03084c9ce5fcd8eb3e2881986e991105aa + version: 3.1.1 + resolution: "fast-json-patch@npm:3.1.1" + checksum: c4525b61b2471df60d4b025b4118b036d99778a93431aa44d1084218182841d82ce93056f0f3bbd731a24e6a8e69820128adf1873eb2199a26c62ef58d137833 languageName: node linkType: hard @@ -23136,9 +21688,9 @@ __metadata: linkType: hard "fast-text-encoding@npm:^1.0.0, fast-text-encoding@npm:^1.0.3": - version: 1.0.3 - resolution: "fast-text-encoding@npm:1.0.3" - checksum: 3e51365896f06d0dcab128092d095a0037d274deec419fecbd2388bc236d7b387610e0c72f920c6126e00c885ab096fbfaa3645712f5b98f721bef6b064916a8 + version: 1.0.6 + resolution: "fast-text-encoding@npm:1.0.6" + checksum: 9d58f694314b3283e785bf61954902536da228607ad246905e30256f9ab8331f780ac987e7222c9f5eafd04168d07e12b8054c85cedb76a2c05af0e82387a903 languageName: node linkType: hard @@ -23159,11 +21711,11 @@ __metadata: linkType: hard "fastq@npm:^1.6.0": - version: 1.6.1 - resolution: "fastq@npm:1.6.1" + version: 1.13.0 + resolution: "fastq@npm:1.13.0" dependencies: reusify: ^1.0.4 - checksum: e9940b30758a6a6bb3595d965accb4c86b85c7b594c3387788c480a83ac5e43d933eccb6b41f510d0c944aa17af340f432b4efe791f0d0bbe0e3e06dfdcda610 + checksum: 32cf15c29afe622af187d12fc9cd93e160a0cb7c31a3bb6ace86b7dea3b28e7b72acde89c882663f307b2184e14782c6c664fa315973c03626c7d4bff070bb0b languageName: node linkType: hard @@ -23177,11 +21729,11 @@ __metadata: linkType: hard "faye-websocket@npm:^0.11.3": - version: 0.11.3 - resolution: "faye-websocket@npm:0.11.3" + version: 0.11.4 + resolution: "faye-websocket@npm:0.11.4" dependencies: websocket-driver: ">=0.5.1" - checksum: d7b2d68546812ea24e3079bd1e08bf1d79cd6d6137bfcea565d1cb1f6a5fc8fc29b689df2c1aff8b8b291d60fc808e1b27aa2896b86ba77ded10f1d9734c8e9f + checksum: d49a62caf027f871149fc2b3f3c7104dc6d62744277eb6f9f36e2d5714e847d846b9f7f0d0b7169b25a012e24a594cde11a93034b30732e4c683f20b8a5019fa languageName: node linkType: hard @@ -23202,17 +21754,17 @@ __metadata: linkType: hard "fbjs@npm:^3.0.0": - version: 3.0.0 - resolution: "fbjs@npm:3.0.0" + version: 3.0.4 + resolution: "fbjs@npm:3.0.4" dependencies: - cross-fetch: ^3.0.4 + cross-fetch: ^3.1.5 fbjs-css-vars: ^1.0.0 loose-envify: ^1.0.0 object-assign: ^4.1.0 promise: ^7.1.1 setimmediate: ^1.0.5 - ua-parser-js: ^0.7.18 - checksum: 85ec57d8dbeddd7c82bf8f111a3c7de1abc1f4d7c603d6ccbcc1ec8dce35ff5b7a113dd34acbf7930093e5533c37a2298a92d342077f967bef34dc7cf2f3f07e + ua-parser-js: ^0.7.30 + checksum: 8b23a3550fcda8a9109fca9475a3416590c18bb6825ea884192864ed686f67fcd618e308a140c9e5444fbd0168732e1ff3c092ba3d0c0ae1768969f32ba280c7 languageName: node linkType: hard @@ -23226,9 +21778,9 @@ __metadata: linkType: hard "fecha@npm:^4.2.0": - version: 4.2.0 - resolution: "fecha@npm:4.2.0" - checksum: 4eb4235959161446f6ec1a24e34eba7362187d2c96d9dd86ea4290e345d1efd2175ccb01bbef9ee852c6790aa7af2539d08361b0499ebc9bf23b4791f5666cd0 + version: 4.2.3 + resolution: "fecha@npm:4.2.3" + checksum: f94e2fb3acf5a7754165d04549460d3ae6c34830394d20c552197e3e000035d69732d74af04b9bed3283bf29fe2a9ebdcc0085e640b0be3cc3658b9726265e31 languageName: node linkType: hard @@ -23276,18 +21828,18 @@ __metadata: linkType: hard "filelist@npm:^1.0.1": - version: 1.0.3 - resolution: "filelist@npm:1.0.3" + version: 1.0.4 + resolution: "filelist@npm:1.0.4" dependencies: minimatch: ^5.0.1 - checksum: c78048691a31b91d54908ce2eac4731bf108613c7b2e4d1a05a6cbe6739bd067e4c1a3baa4f7d07b7143b8c374c0c0d59864b5c8d9168ec8e2a85f84fb7170ad + checksum: a303573b0821e17f2d5e9783688ab6fbfce5d52aaac842790ae85e704a6f5e4e3538660a63183d6453834dedf1e0f19a9dadcebfa3e926c72397694ea11f5160 languageName: node linkType: hard "filesize@npm:^8.0.6": - version: 8.0.6 - resolution: "filesize@npm:8.0.6" - checksum: a16d7bd88c943ff55185559eabd4e9779d531b281a39a4a884659fd6f58bd29c20337ad7d58dc5492477df484bb9579a7ca6ad77e57a25908a51f8224790aaa3 + version: 8.0.7 + resolution: "filesize@npm:8.0.7" + checksum: 8603d27c5287b984cb100733640645e078f5f5ad65c6d913173e01fb99e09b0747828498fd86647685ccecb69be31f3587b9739ab1e50732116b2374aff4cbf9 languageName: node linkType: hard @@ -23387,7 +21939,7 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^2.0.0, find-up@npm:^2.1.0": +"find-up@npm:^2.0.0": version: 2.1.0 resolution: "find-up@npm:2.1.0" dependencies: @@ -23462,16 +22014,16 @@ __metadata: linkType: hard "flatted@npm:^3.1.0": - version: 3.1.1 - resolution: "flatted@npm:3.1.1" - checksum: 508935e3366d95444131f0aaa801a4301f24ea5bcb900d12764e7335b46b910730cc1b5bcfcfb8eccb7c8db261ba0671c6a7ca30d10870ff7a7756dc7e731a7a + version: 3.2.7 + resolution: "flatted@npm:3.2.7" + checksum: 427633049d55bdb80201c68f7eb1cbd533e03eac541f97d3aecab8c5526f12a20ccecaeede08b57503e772c769e7f8680b37e8d482d1e5f8d7e2194687f9ea35 languageName: node linkType: hard "flow-parser@npm:0.*": - version: 0.152.0 - resolution: "flow-parser@npm:0.152.0" - checksum: 648558d3e51b6bc3ac8c2ecffc0d37511c2658ecae14b8b869a316621d08a5807253a80d4d5b3268c087cd1f5cfd9db879d4a00710d02891d1567febbdd5e15a + version: 0.187.0 + resolution: "flow-parser@npm:0.187.0" + checksum: 6106ad9a31d64e30ee4a620b50e165d6fc25739ab0ff262aa584688fdc5a25d922df6168b4d53a64d7d476da6f1f79d214b9959fd1e46e4777c95c9872346420 languageName: node linkType: hard @@ -23482,33 +22034,22 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.0": - version: 1.14.8 - resolution: "follow-redirects@npm:1.14.8" +"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.14.8, follow-redirects@npm:^1.14.9": + version: 1.15.2 + resolution: "follow-redirects@npm:1.15.2" peerDependenciesMeta: debug: optional: true - checksum: 40c67899c2e3149a27e8b6498a338ff27f39fe138fde8d7f0756cb44b073ba0bfec3d52af28f20c5bdd67263d564d0d8d7b5efefd431de95c18c42f7b4aef457 + checksum: faa66059b66358ba65c234c2f2a37fcec029dc22775f35d9ad6abac56003268baf41e55f9ee645957b32c7d9f62baf1f0b906e68267276f54ec4b4c597c2b190 languageName: node linkType: hard -"follow-redirects@npm:^1.14.8": - version: 1.15.0 - resolution: "follow-redirects@npm:1.15.0" - peerDependenciesMeta: - debug: - optional: true - checksum: eaec81c3e0ae57aae2422e38ad3539d0e7279b3a63f9681eeea319bb683dea67502c4e097136b8ce9721542b4e236e092b6b49e34e326cdd7733c274f0a3f378 - languageName: node - linkType: hard - -"follow-redirects@npm:^1.14.9": - version: 1.15.1 - resolution: "follow-redirects@npm:1.15.1" - peerDependenciesMeta: - debug: - optional: true - checksum: 6aa4e3e3cdfa3b9314801a1cd192ba756a53479d9d8cca65bf4db3a3e8834e62139245cd2f9566147c8dfe2efff1700d3e6aefd103de4004a7b99985e71dd533 +"for-each@npm:^0.3.3": + version: 0.3.3 + resolution: "for-each@npm:0.3.3" + dependencies: + is-callable: ^1.1.3 + checksum: 6c48ff2bc63362319c65e2edca4a8e1e3483a2fabc72fbe7feaf8c73db94fc7861bd53bc02c8a66a0c1dd709da6b04eec42e0abdd6b40ce47305ae92a25e5d28 languageName: node linkType: hard @@ -23519,10 +22060,10 @@ __metadata: languageName: node linkType: hard -"foreach@npm:^2.0.4, foreach@npm:^2.0.5": - version: 2.0.5 - resolution: "foreach@npm:2.0.5" - checksum: dab4fbfef0b40b69ee5eab81bcb9626b8fa8b3469c8cfa26480f3e5e1ee08c40eae07048c9a967c65aeda26e774511ccc70b3f10a604c01753c6ef24361f0fc8 +"foreach@npm:^2.0.4": + version: 2.0.6 + resolution: "foreach@npm:2.0.6" + checksum: f7b68494545ee41cbd0b0425ebf5386c265dc38ef2a9b0d5cd91a1b82172e939b4cf9387f8e0ebf6db4e368fc79ed323f2198424d5c774515ac3ed9b08901c0e languageName: node linkType: hard @@ -23534,8 +22075,8 @@ __metadata: linkType: hard "fork-ts-checker-webpack-plugin@npm:^6.5.0": - version: 6.5.0 - resolution: "fork-ts-checker-webpack-plugin@npm:6.5.0" + version: 6.5.2 + resolution: "fork-ts-checker-webpack-plugin@npm:6.5.2" dependencies: "@babel/code-frame": ^7.8.3 "@types/json-schema": ^7.0.5 @@ -23560,7 +22101,7 @@ __metadata: optional: true vue-template-compiler: optional: true - checksum: 95d145ab7936445f3a9bfa4116ef73537f97196cfaa3f5b24473dff36d034e839d3b0e034a23beefc9619eceb7a9866816bfd55afd1968e955eb3b3f8cfc35ed + checksum: c823de02ee258a26ea5c0c488b2f1825b941f72292417478689862468a9140b209ad7df52f67bd134228fe9f40e9115b604fc8f88a69338929fe52be869469b6 languageName: node linkType: hard @@ -23592,9 +22133,9 @@ __metadata: linkType: hard "form-data-encoder@npm:^1.4.3, form-data-encoder@npm:^1.7.1": - version: 1.7.1 - resolution: "form-data-encoder@npm:1.7.1" - checksum: a2a360d5588a70d323c12a140c3db23a503a38f0a5d141af1efad579dde9f9fff2e49e5f31f378cb4631518c1ab4a826452c92f0d2869e954b6b2d77b05613e1 + version: 1.7.2 + resolution: "form-data-encoder@npm:1.7.2" + checksum: aeebd87a1cb009e13cbb5e4e4008e6202ed5f6551eb6d9582ba8a062005178907b90f4887899d3c993de879159b6c0c940af8196725b428b4248cec5af3acf5f languageName: node linkType: hard @@ -23610,13 +22151,13 @@ __metadata: linkType: hard "form-data@npm:^3.0.0": - version: 3.0.0 - resolution: "form-data@npm:3.0.0" + version: 3.0.1 + resolution: "form-data@npm:3.0.1" dependencies: asynckit: ^0.4.0 combined-stream: ^1.0.8 mime-types: ^2.1.12 - checksum: 60ec3fe7e23154949ab6fef31baedf5afbfb8d6441ea8d19b211b43a5d0448be2918c9bba6218cade56a7cbd43f670d6e75f41f626f8d397d56bf8c60f4a829d + checksum: b019e8d35c8afc14a2bd8a7a92fa4f525a4726b6d5a9740e8d2623c30e308fbb58dc8469f90415a856698933c8479b01646a9dff33c87cc4e76d72aedbbf860d languageName: node linkType: hard @@ -23649,23 +22190,13 @@ __metadata: languageName: node linkType: hard -"formdata-node@npm:^4.0.0": - version: 4.3.0 - resolution: "formdata-node@npm:4.3.0" +"formdata-node@npm:^4.0.0, formdata-node@npm:^4.3.1": + version: 4.4.1 + resolution: "formdata-node@npm:4.4.1" dependencies: node-domexception: 1.0.0 - web-streams-polyfill: 4.0.0-beta.1 - checksum: d298e941126e3d0389fe4007187fd252f271ef84693710111e7ce98da83e09a1c60111fc44e2a376d17831ec4a4478515049064f45b8763df2025595c91eac9d - languageName: node - linkType: hard - -"formdata-node@npm:^4.3.1": - version: 4.3.2 - resolution: "formdata-node@npm:4.3.2" - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 4.0.0-beta.1 - checksum: e1d7aae7d579775b813ddc8ea4511fee613552715e81b36afb188d3a65b3d4df2ef69017106079ba52d9ab1e3367fea0206862d8ae64c02008ababdb341d2c3d + web-streams-polyfill: 4.0.0-beta.3 + checksum: d91d4f667cfed74827fc281594102c0dabddd03c9f8b426fc97123eedbf73f5060ee43205d89284d6854e2fc5827e030cd352ef68b93beda8decc2d72128c576 languageName: node linkType: hard @@ -23800,7 +22331,7 @@ __metadata: languageName: node linkType: hard -"fs-monkey@npm:1.0.3": +"fs-monkey@npm:^1.0.3": version: 1.0.3 resolution: "fs-monkey@npm:1.0.3" checksum: cf50804833f9b88a476911ae911fe50f61a98d986df52f890bd97e7262796d023698cb2309fa9b74fdd8974f04315b648748a0a8ee059e7d5257b293bfc409c0 @@ -23883,23 +22414,6 @@ __metadata: languageName: node linkType: hard -"gauge@npm:^4.0.0": - version: 4.0.0 - resolution: "gauge@npm:4.0.0" - dependencies: - ansi-regex: ^5.0.1 - aproba: ^1.0.3 || ^2.0.0 - color-support: ^1.1.2 - console-control-strings: ^1.0.0 - has-unicode: ^2.0.1 - signal-exit: ^3.0.0 - string-width: ^4.2.3 - strip-ansi: ^6.0.1 - wide-align: ^1.1.2 - checksum: 637b34c84f518defa89319dbef68211a24e9302182ad2a619e3be1be5b7dcf2a962c8359e889294af667440f4722e7e6e61671859e00bd8ec280a136ded89b25 - languageName: node - linkType: hard - "gauge@npm:^4.0.3": version: 4.0.4 resolution: "gauge@npm:4.0.4" @@ -23932,20 +22446,7 @@ __metadata: languageName: node linkType: hard -"gaxios@npm:^5.0.0": - version: 5.0.0 - resolution: "gaxios@npm:5.0.0" - dependencies: - abort-controller: ^3.0.0 - extend: ^3.0.2 - https-proxy-agent: ^5.0.0 - is-stream: ^2.0.0 - node-fetch: ^2.6.7 - checksum: d5f81e49db881a6d4fe78ba080a74b27c1be9128e806ff84c26dd6e44539a954551128d7c193d29a3a030510e504448810fa3c3c69af7f21d46572476f1fdef2 - languageName: node - linkType: hard - -"gaxios@npm:^5.0.1": +"gaxios@npm:^5.0.0, gaxios@npm:^5.0.1": version: 5.0.1 resolution: "gaxios@npm:5.0.1" dependencies: @@ -23986,12 +22487,12 @@ __metadata: languageName: node linkType: hard -"generic-names@npm:^2.0.1": - version: 2.0.1 - resolution: "generic-names@npm:2.0.1" +"generic-names@npm:^4.0.0": + version: 4.0.0 + resolution: "generic-names@npm:4.0.0" dependencies: - loader-utils: ^1.1.0 - checksum: 5f2d6837dcddf4d7139f7c7ee4ff6ed82564123ae363aadc7a1c1c9967724da1e10d92c904b76b6ff58912465cf63cf47d87f3b400286845f289f54d5092e78f + loader-utils: ^3.2.0 + checksum: 8dabd2505164191501b75f2861b5e1194458a344ae2a7c9776bdd72d1f50b248dff737bcdf118fff677275edb3632f2d10662e6ac122dd7b245c5baa8d303270 languageName: node linkType: hard @@ -24016,14 +22517,14 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1": - version: 1.1.2 - resolution: "get-intrinsic@npm:1.1.2" +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.2": + version: 1.1.3 + resolution: "get-intrinsic@npm:1.1.3" dependencies: function-bind: ^1.1.1 has: ^1.0.3 has-symbols: ^1.0.3 - checksum: 252f45491f2ba88ebf5b38018020c7cc3279de54b1d67ffb70c0cdf1dfa8ab31cd56467b5d117a8b4275b7a4dde91f86766b163a17a850f036528a7b2faafb2b + checksum: 152d79e87251d536cf880ba75cfc3d6c6c50e12b3a64e1ea960e73a3752b47c69f46034456eae1b0894359ce3bc64c55c186f2811f8a788b75b638b06fab228a languageName: node linkType: hard @@ -24073,11 +22574,11 @@ __metadata: linkType: hard "get-stream@npm:^5.0.0, get-stream@npm:^5.1.0": - version: 5.1.0 - resolution: "get-stream@npm:5.1.0" + version: 5.2.0 + resolution: "get-stream@npm:5.2.0" dependencies: pump: ^3.0.0 - checksum: 371e1fb3f3b009edffd379810ed52a1f0a0a621dbb3778bd844e3b002065af0790bfddde845b4a0f05f71da5d99441465f5586281497321b151a8bdd102c885a + checksum: 8bc1a23174a06b2b4ce600df38d6c98d2ef6d84e020c1ddad632ad75bac4e092eeb40e4c09e0761c35fc2dbc5e7fff5dab5e763a383582c4a167dd69a905bd12 languageName: node linkType: hard @@ -24131,8 +22632,8 @@ __metadata: linkType: hard "git-raw-commits@npm:^2.0.8": - version: 2.0.10 - resolution: "git-raw-commits@npm:2.0.10" + version: 2.0.11 + resolution: "git-raw-commits@npm:2.0.11" dependencies: dargs: ^7.0.0 lodash: ^4.17.15 @@ -24141,7 +22642,7 @@ __metadata: through2: ^4.0.0 bin: git-raw-commits: cli.js - checksum: 66e2d7b4cdeff946ac639e1bba37f5dcbd9f5c9245348b31e027e4529f6b6733d23f75768d285d5f29c1f08d3485705a4932300a81a45b77b660fe3ce6089c29 + checksum: c178af43633684106179793b6e3473e1d2bb50bb41d04e2e285ea4eef342ca4090fee6bc8a737552fde879d22346c90de5c49f18c719a0f38d4c934f258a0f79 languageName: node linkType: hard @@ -24168,12 +22669,12 @@ __metadata: linkType: hard "git-up@npm:^4.0.0": - version: 4.0.1 - resolution: "git-up@npm:4.0.1" + version: 4.0.5 + resolution: "git-up@npm:4.0.5" dependencies: is-ssh: ^1.3.0 - parse-url: ^5.0.0 - checksum: fbbd8f8f5a57dbd6830592f051564498d322acbbccec5b85b7eff41aade8e175dbd702ae9f6caa80d5ce3cb5435b03711c9d706f26e07923eba6d940fc7dcebf + parse-url: ^6.0.0 + checksum: dd8f39a115ec0523b7da369cd4c6dc94a9b11fcc652e6fc9d011a93c287e27cc34e1d1c89cff8864f9ab11a1b2bea49786951d8eb3f1e5babd351afcc63f6135 languageName: node linkType: hard @@ -24216,11 +22717,11 @@ __metadata: linkType: hard "git-url-parse@npm:^13.0.0": - version: 13.0.0 - resolution: "git-url-parse@npm:13.0.0" + version: 13.1.0 + resolution: "git-url-parse@npm:13.1.0" dependencies: git-up: ^7.0.0 - checksum: 05a3bf51fc5863d26461a815347929a7432e1ebc6763e6a7ee31f510936266f9a82e0f090d09c2c48cd6dba2f17163fa1d860ba4a3ff157083cca5a5d1961c57 + checksum: 212a9b0343e9199998b6a532efe2014476a7a1283af393663ca49ac28d4768929aad16d3322e2685236065ee394dbc93e7aa63a48956531e984c56d8b5edb54d languageName: node linkType: hard @@ -24293,7 +22794,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^8.0.0": +"glob@npm:^8.0.0, glob@npm:^8.0.1": version: 8.0.3 resolution: "glob@npm:8.0.3" dependencies: @@ -24306,20 +22807,6 @@ __metadata: languageName: node linkType: hard -"glob@npm:^8.0.1": - version: 8.0.1 - resolution: "glob@npm:8.0.1" - dependencies: - fs.realpath: ^1.0.0 - inflight: ^1.0.4 - inherits: 2 - minimatch: ^5.0.1 - once: ^1.3.0 - path-is-absolute: ^1.0.0 - checksum: 7ac782f3ef1c08005884447479e68ceb0ad56997eb2003e1e9aefae71bad3cb48eb7c49190d3d6736f2ffcd8af4985d53a46831b3d5e0052cc5756822a38b61a - languageName: node - linkType: hard - "global-agent@npm:^3.0.0": version: 3.0.0 resolution: "global-agent@npm:3.0.0" @@ -24381,20 +22868,20 @@ __metadata: linkType: hard "globals@npm:^13.15.0": - version: 13.15.0 - resolution: "globals@npm:13.15.0" + version: 13.17.0 + resolution: "globals@npm:13.17.0" dependencies: type-fest: ^0.20.2 - checksum: 383ade0873b2ab29ce6d143466c203ed960491575bc97406395e5c8434026fb02472ab2dfff5bc16689b8460269b18fda1047975295cd0183904385c51258bae + checksum: fbaf4112e59b92c9f5575e85ce65e9e17c0b82711196ec5f58beb08599bbd92fd72703d6dfc9b080381fd35b644e1b11dcf25b38cc2341ec21df942594cbc8ce languageName: node linkType: hard "globalthis@npm:^1.0.1": - version: 1.0.2 - resolution: "globalthis@npm:1.0.2" + version: 1.0.3 + resolution: "globalthis@npm:1.0.3" dependencies: define-properties: ^1.1.3 - checksum: 5a5f3c7ab94708260a98106b35946b74bb57f6b2013e39668dc9e8770b80a3418103b63a2b4aa01c31af15fdf6a2940398ffc0a408573c34c2304f928895adff + checksum: fbd7d760dc464c886d0196166d92e5ffb4c84d0730846d6621a39fbbc068aeeb9c8d1421ad330e94b7bca4bb4ea092f5f21f3d36077812af5d098b4dc006c998 languageName: node linkType: hard @@ -24426,7 +22913,7 @@ __metadata: languageName: node linkType: hard -"google-auth-library@npm:^8.0.0": +"google-auth-library@npm:^8.0.0, google-auth-library@npm:^8.0.1, google-auth-library@npm:^8.0.2": version: 8.5.1 resolution: "google-auth-library@npm:8.5.1" dependencies: @@ -24443,29 +22930,12 @@ __metadata: languageName: node linkType: hard -"google-auth-library@npm:^8.0.1, google-auth-library@npm:^8.0.2": - version: 8.4.0 - resolution: "google-auth-library@npm:8.4.0" +"google-gax@npm:^3.3.0, google-gax@npm:^3.5.1": + version: 3.5.1 + resolution: "google-gax@npm:3.5.1" dependencies: - arrify: ^2.0.0 - base64-js: ^1.3.0 - ecdsa-sig-formatter: ^1.0.11 - fast-text-encoding: ^1.0.0 - gaxios: ^5.0.0 - gcp-metadata: ^5.0.0 - gtoken: ^6.1.0 - jws: ^4.0.0 - lru-cache: ^6.0.0 - checksum: 4f3f52399c851dff3be797f888e675dbb6099613fcd934aece0d1527b9e9a77e5aadc9be12d137981d2d820a59050b0baf29ea126d2722e20a3e1adf425c93e6 - languageName: node - linkType: hard - -"google-gax@npm:^3.0.1": - version: 3.0.3 - resolution: "google-gax@npm:3.0.3" - dependencies: - "@grpc/grpc-js": ~1.6.0 - "@grpc/proto-loader": ^0.6.12 + "@grpc/grpc-js": ~1.7.0 + "@grpc/proto-loader": ^0.7.0 "@types/long": ^4.0.0 abort-controller: ^3.0.0 duplexify: ^4.0.0 @@ -24475,53 +22945,31 @@ __metadata: node-fetch: ^2.6.1 object-hash: ^3.0.0 proto3-json-serializer: ^1.0.0 - protobufjs: 6.11.3 + protobufjs: 7.1.1 + protobufjs-cli: 1.0.2 retry-request: ^5.0.0 bin: compileProtos: build/tools/compileProtos.js - checksum: 4f7f38eb39cba1ee80f9569976d4b43db6803b4ae9ebc4de0c348b129c7d6fdd3f43f9add87c07cb1026de19dd78cf101b1c8427016e7f1dcad17dc9e166acf0 - languageName: node - linkType: hard - -"google-gax@npm:^3.3.0": - version: 3.3.0 - resolution: "google-gax@npm:3.3.0" - dependencies: - "@grpc/grpc-js": ~1.6.0 - "@grpc/proto-loader": ^0.7.0 - "@types/long": ^4.0.0 - abort-controller: ^3.0.0 - duplexify: ^4.0.0 - fast-text-encoding: ^1.0.3 - google-auth-library: ^8.0.2 - is-stream-ended: ^0.1.4 - node-fetch: ^2.6.7 - object-hash: ^3.0.0 - proto3-json-serializer: ^1.0.0 - protobufjs: 7.0.0 - protobufjs-cli: 1.0.0 - retry-request: ^5.0.0 - bin: - compileProtos: build/tools/compileProtos.js - checksum: 536b27f9970d80192a8de5609e119126d80de3843c8c9ad674191d2f6d7bc4ee12c28b4d074f6f36859459734144c201b1fbf413cb710bc77a419094ce5aa68a + minifyProtoJson: build/tools/minify.js + checksum: 81ecd10981554944a117ace753b2fc8f6d82b26b244db005d01fc5e127181571de9a71ec02b28aa2e233c6fe696108617512a8b090c8304e753913f1ca441767 languageName: node linkType: hard "google-p12-pem@npm:^4.0.0": - version: 4.0.0 - resolution: "google-p12-pem@npm:4.0.0" + version: 4.0.1 + resolution: "google-p12-pem@npm:4.0.1" dependencies: node-forge: ^1.3.1 bin: gp12-pem: build/src/bin/gp12-pem.js - checksum: f41a88d339e9fe633dc915bc0f3335c0196fa318f994dcd5dfaa0f3f7aa2d99f6122e2c80bd0f4bb22f2b61ff645b7cc782a74e12ceaf6c9ad9e08cdeb4d615e + checksum: 59a5026331ea67455672e83770da29f09d979f02e06cb2227ea5916f8cca437887c2d3869f2602a686dc84437886ae9d2ac010780803cbe8e5f161c2d02d8efd languageName: node linkType: hard "google-protobuf@npm:^3.15.8, google-protobuf@npm:^3.19.1": - version: 3.20.1 - resolution: "google-protobuf@npm:3.20.1" - checksum: a440fbc329bb441b253bc421b01540918f4b66921c47a3bc57d154d2677dc917cb1a29126ff35ddc4d8872d1b5843ef1ece60b6dff506ba64a9f5807962d3f61 + version: 3.21.0 + resolution: "google-protobuf@npm:3.21.0" + checksum: 612a91b8175ab3608ad20be043d41bf757623ca3dce83b6e8b27fed79e9cecba823e6709055ab439e0d59699f48a65416300b41a36ffb5ac98144a940898fea0 languageName: node linkType: hard @@ -24544,14 +22992,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": - version: 4.2.9 - resolution: "graceful-fs@npm:4.2.9" - checksum: 68ea4e07ff2c041ada184f9278b830375f8e0b75154e3f080af6b70f66172fabb4108d19b3863a96b53fc068a310b9b6493d86d1291acc5f3861eb4b79d26ad6 - languageName: node - linkType: hard - -"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.5, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0": +"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.5, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.10 resolution: "graceful-fs@npm:4.2.10" checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da @@ -24614,26 +23055,17 @@ __metadata: languageName: node linkType: hard -"graphql-executor@npm:0.0.23": - version: 0.0.23 - resolution: "graphql-executor@npm:0.0.23" - peerDependencies: - graphql: ^15.0.0 || ^16.0.0 - checksum: 22f19ba2d80d73be33246540a5f20c87c1acc53965ac9de05cca12b004f6183f8e4083198c55554f949cdbb0c748eedeb7b9cfc606aea09f30bc7135daa00464 - languageName: node - linkType: hard - "graphql-language-service@npm:^5.0.6": - version: 5.0.6 - resolution: "graphql-language-service@npm:5.0.6" + version: 5.1.0 + resolution: "graphql-language-service@npm:5.1.0" dependencies: nullthrows: ^1.0.0 - vscode-languageserver-types: ^3.15.1 + vscode-languageserver-types: ^3.17.1 peerDependencies: graphql: ^15.5.0 || ^16.0.0 bin: graphql: dist/temp-bin.js - checksum: a7155ba934aa428278cce0f460fa3b8b12020a26a0355e60738974617a66d9b2f1bb7d41cbd72a1620a29e61f10ca438cbf72cbf2405b8f653edddfc69fec02a + checksum: 705aab1f7fea7ce509b9c4f6e4cbcad724f4049d4d40c4d458eb3dde5199ab506adfc747df7643a167a9345b6e7f5bd4b6618f612fe8bf00600963ecd04a8a69 languageName: node linkType: hard @@ -24651,16 +23083,17 @@ __metadata: languageName: node linkType: hard -"graphql-request@npm:^4.0.0": - version: 4.2.0 - resolution: "graphql-request@npm:4.2.0" +"graphql-request@npm:^5.0.0": + version: 5.0.0 + resolution: "graphql-request@npm:5.0.0" dependencies: + "@graphql-typed-document-node/core": ^3.1.1 cross-fetch: ^3.1.5 extract-files: ^9.0.0 form-data: ^3.0.0 peerDependencies: graphql: 14 - 16 - checksum: c508705ebdbb94ce4599c9236c06993dd19481d1765b8f316c8ad6eee81c18afaaf9362fa4f6f00227f26e793b4ec38a6aea44708da0ca4a1b4324f41691bbdc + checksum: 2e8900d10cded401b253a05650719321123e3b0ad5bc57523288892e0226dccf43668ec937753420084f649fb4e3f998f2547c884b746a3e91fa0a43f93e62d4 languageName: node linkType: hard @@ -24685,11 +23118,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.1 + resolution: "graphql-ws@npm:5.11.1" peerDependencies: graphql: ">=0.11 <=16" - checksum: ad8eb8a6823a32a7bd9bc6ec73a0b244f503e50318ef5db1312f1d09c5f0b0e4505ad75b08f06e4c40c6935cf5170444b19347b7b83222b4e1af01401418cb91 + checksum: ad4ae060724e38c7b360fe26700dd3f88e969706c071f065d457b04ab76aad2415d780402cf8f99facc11eca9ca2871c356c3ba66f832b4c227856c6953d4d60 languageName: node linkType: hard @@ -24707,31 +23140,7 @@ __metadata: languageName: node linkType: hard -"grpc-docs@npm:^1.0.6": - version: 1.1.2 - resolution: "grpc-docs@npm:1.1.2" - dependencies: - "@improbable-eng/grpc-web": ^0.15.0 - "@types/minimatch": ^3.0.5 - gendocu-public-apis: ^1.0.0 - google-protobuf: ^3.19.1 - grpc-docs: ^1.0.6 - js-yaml: ^4.1.0 - minimatch: ^3.0.4 - react-copy-to-clipboard: ^5.0.4 - react-dom: ^16.13.1 - react-is: ^16.8.0 - react-syntax-highlighter: ^15.4.5 - rollup: ^0.60 - rollup-plugin-smart-asset: ^2.1.2 - styled-components: ^5.3.3 - peerDependencies: - react: ^16.0.0 - checksum: ad1bac493e42bdf4cd363eed80f70f40e80ee3e7605e530958c4155e95e3c9ca6f92f6fa9f28a6c5304327c3926fc6661fc1127b79ca43ef32bc9558a0b093cc - languageName: node - linkType: hard - -"grpc-docs@npm:^1.1.2": +"grpc-docs@npm:^1.0.6, grpc-docs@npm:^1.1.2": version: 1.1.3 resolution: "grpc-docs@npm:1.1.3" dependencies: @@ -24781,13 +23190,13 @@ __metadata: linkType: hard "gtoken@npm:^6.1.0": - version: 6.1.1 - resolution: "gtoken@npm:6.1.1" + version: 6.1.2 + resolution: "gtoken@npm:6.1.2" dependencies: gaxios: ^5.0.1 google-p12-pem: ^4.0.0 jws: ^4.0.0 - checksum: f063ed3f418f5a9c33fbe599b09f56a55b18f6c8d2913f11cc2fc5025d53b96fd6ab1b4deb2c7631167d6b89d0939e4ea77f94767fcf338862ffda8911250980 + checksum: cf3210afe2ccee8feaa06f0c7eb942e217244a8563a1d0a71aa3095eea545015896741c1d48654d8de35b7b07579f93e25e5dfe817f06b7e753646b67f7a4ecf languageName: node linkType: hard @@ -24801,9 +23210,9 @@ __metadata: linkType: hard "handle-thing@npm:^2.0.0": - version: 2.0.0 - resolution: "handle-thing@npm:2.0.0" - checksum: bb6a33ec17a36a9fca92c8f98b0208dca4b5659253d77a2db7d31a0bad467d01f94e59444e226b6d35877226516176f069501c01d847047e1abcbe303363070f + version: 2.0.1 + resolution: "handle-thing@npm:2.0.1" + checksum: 68071f313062315cd9dce55710e9496873945f1dd425107007058fc1629f93002a7649fcc3e464281ce02c7e809a35f5925504ab8105d972cf649f1f47cb7d6c languageName: node linkType: hard @@ -24833,12 +23242,12 @@ __metadata: linkType: hard "har-validator@npm:~5.1.3": - version: 5.1.3 - resolution: "har-validator@npm:5.1.3" + version: 5.1.5 + resolution: "har-validator@npm:5.1.5" dependencies: - ajv: ^6.5.5 + ajv: ^6.12.3 har-schema: ^2.0.0 - checksum: 5903ddf55f4403bb102a86dc2da073593716c7aa422863c244cb406b69e006551553c904e30ed5d123788675ae827f977b3b366211dc730b33a2b619f926199f + checksum: b998a7269ca560d7f219eedc53e2c664cd87d487e428ae854a6af4573fc94f182fe9d2e3b92ab968249baec7ebaf9ead69cf975c931dc2ab282ec182ee988280 languageName: node linkType: hard @@ -24850,9 +23259,9 @@ __metadata: linkType: hard "harmony-reflect@npm:^1.4.6": - version: 1.6.1 - resolution: "harmony-reflect@npm:1.6.1" - checksum: 4cb91f86d262650d62c3ac713a2284ef0784a5c8be347188f97747db68d0e6d9801f09a3f12bacec59d5ec9d010cba64b8acb4c2c4827e172ef2ab215cdfef9d + version: 1.6.2 + resolution: "harmony-reflect@npm:1.6.2" + checksum: 2e5bae414cd2bfae5476147f9935dc69ee9b9a413206994dcb94c5b3208d4555da3d4313aff6fd14bd9991c1e3ef69cdda5c8fac1eb1d7afc064925839339b8c languageName: node linkType: hard @@ -24902,7 +23311,7 @@ __metadata: languageName: node linkType: hard -"has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": +"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": version: 1.0.3 resolution: "has-symbols@npm:1.0.3" checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 @@ -24974,12 +23383,13 @@ __metadata: linkType: hard "hash-base@npm:^3.0.0": - version: 3.0.4 - resolution: "hash-base@npm:3.0.4" + version: 3.1.0 + resolution: "hash-base@npm:3.1.0" dependencies: - inherits: ^2.0.1 - safe-buffer: ^5.0.1 - checksum: 878465a0dfcc33cce195c2804135352c590d6d10980adc91a9005fd377e77f2011256c2b7cfce472e3f2e92d561d1bf3228d2da06348a9017ce9a258b3b49764 + inherits: ^2.0.4 + readable-stream: ^3.6.0 + safe-buffer: ^5.2.0 + checksum: 26b7e97ac3de13cb23fc3145e7e3450b0530274a9562144fc2bf5c1e2983afd0e09ed7cc3b20974ba66039fad316db463da80eb452e7373e780cbee9a0d2f2dc languageName: node linkType: hard @@ -25001,9 +23411,9 @@ __metadata: linkType: hard "hast-util-parse-selector@npm:^2.0.0": - version: 2.2.4 - resolution: "hast-util-parse-selector@npm:2.2.4" - checksum: 06e8b534626517929856877df116d95b46d384cc159595270c1e5b3af7404f20843065a1c675d60944445f7356c5c876ed10d5e2d66654b62fe06ecc8b423d45 + version: 2.2.5 + resolution: "hast-util-parse-selector@npm:2.2.5" + checksum: 22ee4afbd11754562144cb3c4f3ec52524dafba4d90ee52512902d17cf11066d83b38f7bdf6ca571bbc2541f07ba30db0d234657b6ecb8ca4631587466459605 languageName: node linkType: hard @@ -25046,10 +23456,10 @@ __metadata: languageName: node linkType: hard -"headers-polyfill@npm:^3.0.4": - version: 3.0.7 - resolution: "headers-polyfill@npm:3.0.7" - checksum: ee392c1acdd2be797090837a085b14c8dc79f221e2501508afc1474667fba0627d583e06f9ab5cad57cf9dd570942d3166f791c75b92522a17c69c1e6bfcfbc4 +"headers-polyfill@npm:^3.0.4, headers-polyfill@npm:^3.1.0": + version: 3.1.0 + resolution: "headers-polyfill@npm:3.1.0" + checksum: a95257065684653b7185efbb9a380c547ea832002991b5adf0d90cd222073da2701be9dc2849d1970ecf15e8c35b383984358566afe6e76ca8ff1dbd7cdce3af languageName: node linkType: hard @@ -25074,7 +23484,7 @@ __metadata: languageName: node linkType: hard -"history@npm:^5.0.0, history@npm:^5.2.0": +"history@npm:^5.0.0": version: 5.3.0 resolution: "history@npm:5.3.0" dependencies: @@ -25129,15 +23539,6 @@ __metadata: languageName: node linkType: hard -"hosted-git-info@npm:^3.0.6": - version: 3.0.8 - resolution: "hosted-git-info@npm:3.0.8" - dependencies: - lru-cache: ^6.0.0 - checksum: 5af7a69581acb84206a7b8e009f4680c36396814e92c8a83973dfb3b87e44e44d1f7b8eaf3e4a953686482770ecb78406a4ce4666bfdfe447762434127871d8d - languageName: node - linkType: hard - "hosted-git-info@npm:^4.0.0, hosted-git-info@npm:^4.0.1": version: 4.1.0 resolution: "hosted-git-info@npm:4.1.0" @@ -25148,11 +23549,11 @@ __metadata: linkType: hard "hosted-git-info@npm:^5.0.0": - version: 5.0.0 - resolution: "hosted-git-info@npm:5.0.0" + version: 5.1.0 + resolution: "hosted-git-info@npm:5.1.0" dependencies: lru-cache: ^7.5.1 - checksum: 515e69463d123635f70d70656c5ec648951ffc1987f92a87cb4a038e1794bfed833cf87569b358b137ebbc75d992c073ed0408d420c9e5b717c2b4f0a291490c + checksum: 22abbc6a7418344c883e2df6e791e94b38192b2a61256b19c955999d878b8d5365ea51683fd1f0cc8f217e9bd121db88d5aaa7cf0407c4b7ff287b79aabacbd3 languageName: node linkType: hard @@ -25185,16 +23586,16 @@ __metadata: linkType: hard "html-entities@npm:^2.1.0, html-entities@npm:^2.3.2": - version: 2.3.2 - resolution: "html-entities@npm:2.3.2" - checksum: 522d8d202df301ff51b517a379e642023ed5c81ea9fb5674ffad88cff386165733d00b6089d5c2fcc644e44777d6072017b6216d8fa40f271d3610420d00a886 + version: 2.3.3 + resolution: "html-entities@npm:2.3.3" + checksum: 92521501da8aa5f66fee27f0f022d6e9ceae62667dae93aa6a2f636afa71ad530b7fb24a18d4d6c124c9885970cac5f8a52dbf1731741161002816ae43f98196 languageName: node linkType: hard "html-escaper@npm:^2.0.0": - version: 2.0.1 - resolution: "html-escaper@npm:2.0.1" - checksum: 5f76c4f12a155fc19dbcad7da11fe833623a84b7d120d9a96fb5c720f9fe1e3e68c1916e9c333fe383f5cdeeeb382cbcb4c22fc345a00863eba48f3a027c4878 + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974 languageName: node linkType: hard @@ -25256,19 +23657,6 @@ __metadata: languageName: node linkType: hard -"http-errors@npm:1.8.1": - version: 1.8.1 - resolution: "http-errors@npm:1.8.1" - dependencies: - depd: ~1.1.2 - inherits: 2.0.4 - setprototypeof: 1.2.0 - statuses: ">= 1.5.0 < 2" - toidentifier: 1.0.1 - checksum: d3c7e7e776fd51c0a812baff570bdf06fe49a5dc448b700ab6171b1250e4cf7db8b8f4c0b133e4bfe2451022a5790c1ca6c2cae4094dedd6ac8304a1267f91d2 - languageName: node - linkType: hard - "http-errors@npm:2.0.0, http-errors@npm:^2.0.0": version: 2.0.0 resolution: "http-errors@npm:2.0.0" @@ -25295,9 +23683,9 @@ __metadata: linkType: hard "http-parser-js@npm:>=0.5.1": - version: 0.5.3 - resolution: "http-parser-js@npm:0.5.3" - checksum: 6f3142c5f60ad995a6895a1dc4f70f8cef0910745366e97cbcb99caa604590dbcc11006b00989ad306837d6b820e9bfc6e801c4060ed19a0e4df83caa8577cb5 + version: 0.5.8 + resolution: "http-parser-js@npm:0.5.8" + checksum: 6bbdf2429858e8cf13c62375b0bfb6dc3955ca0f32e58237488bc86cd2378f31d31785fd3ac4ce93f1c74e0189cf8823c91f5cb061696214fd368d2452dc871d languageName: node linkType: hard @@ -25375,12 +23763,12 @@ __metadata: linkType: hard "http2-wrapper@npm:^1.0.0-beta.5.2": - version: 1.0.0-beta.5.2 - resolution: "http2-wrapper@npm:1.0.0-beta.5.2" + version: 1.0.3 + resolution: "http2-wrapper@npm:1.0.3" dependencies: quick-lru: ^5.1.1 resolve-alpn: ^1.0.0 - checksum: c2b572ded523dbf52d8107f61791b527f85e9ce03e811f452e7e3c9e59925ebd1e757c60f8b46a549778675546e8ace189091a1764eb4601db46aa51292b84d0 + checksum: 74160b862ec699e3f859739101ff592d52ce1cb207b7950295bf7962e4aa1597ef709b4292c673bece9c9b300efad0559fc86c71b1409c7a1e02b7229456003e languageName: node linkType: hard @@ -25455,9 +23843,9 @@ __metadata: linkType: hard "hyphenate-style-name@npm:^1.0.2, hyphenate-style-name@npm:^1.0.3": - version: 1.0.3 - resolution: "hyphenate-style-name@npm:1.0.3" - checksum: e333f610e7cb32210861ff8c55f99582cdc39e4737903936a7eb61702c98f8db45f33d54f9d230221fabc4d321b2ab8382b8af50d24a1eba21916f2edddd7b85 + version: 1.0.4 + resolution: "hyphenate-style-name@npm:1.0.4" + checksum: 4f5bf4b055089754924babebaa23c17845937bcca6aee95d5d015f8fa1e6814279002bd6a9e541e3fac2cd02519fc76305396727066c57c8e21a7e73e7a12137 languageName: node linkType: hard @@ -25526,11 +23914,11 @@ __metadata: linkType: hard "ignore-walk@npm:^3.0.3": - version: 3.0.3 - resolution: "ignore-walk@npm:3.0.3" + version: 3.0.4 + resolution: "ignore-walk@npm:3.0.4" dependencies: minimatch: ^3.0.4 - checksum: 34bc6f0497276a9bfad7ba1ae301c7d16bc6424890755a21d90536eaa1f4b7acd598686a01033e64345483b2fef41dad8f93794af73c8b13a7cf21a3cae34a4e + checksum: 9e9c5ef6c3e0ed7ef5d797991abb554dbb7e60d5fedf6cf05c7129819689eba2b462f625c6e3561e0fc79841904eb829565513eeeab1b44f4fbec4d3146b1a8d languageName: node linkType: hard @@ -25613,12 +24001,12 @@ __metadata: linkType: hard "import-fresh@npm:^3.0.0, import-fresh@npm:^3.1.0, import-fresh@npm:^3.2.1": - version: 3.2.1 - resolution: "import-fresh@npm:3.2.1" + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" dependencies: parent-module: ^1.0.0 resolve-from: ^4.0.0 - checksum: caef42418a087c3951fb676943a7f21ba8971aa07f9b622dff4af7edcef4160e1b172dccd85a88d7eb109cf41406a4592f70259e6b3b33aeafd042bb61f81d96 + checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa languageName: node linkType: hard @@ -25646,14 +24034,14 @@ __metadata: linkType: hard "import-local@npm:^3.0.2": - version: 3.0.2 - resolution: "import-local@npm:3.0.2" + version: 3.1.0 + resolution: "import-local@npm:3.1.0" dependencies: pkg-dir: ^4.2.0 resolve-cwd: ^3.0.0 bin: import-local-fixture: fixtures/cli.js - checksum: c74d9f9484c878cda1de3434613c7ff72d5dadcf20e5482542232d7c2575b713ff88701d6675fcf09a3684cb23fb407c8b333b9cbc59438712723d058d8e976c + checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd languageName: node linkType: hard @@ -25664,15 +24052,6 @@ __metadata: languageName: node linkType: hard -"indefinite-observable@npm:^2.0.1": - version: 2.0.1 - resolution: "indefinite-observable@npm:2.0.1" - dependencies: - symbol-observable: 1.2.0 - checksum: b4305c999b7596901f8798e569b8faa030361dfb77f8b720e229558a29f544826f7e8987c55cc2a84c37ff2723594a965b96a40a6c71daae92b918f3eb393077 - languageName: node - linkType: hard - "indent-string@npm:^4.0.0": version: 4.0.0 resolution: "indent-string@npm:4.0.0" @@ -25680,13 +24059,6 @@ __metadata: languageName: node linkType: hard -"indexes-of@npm:^1.0.1": - version: 1.0.1 - resolution: "indexes-of@npm:1.0.1" - checksum: 4f9799b1739a62f3e02d09f6f4162cf9673025282af7fa36e790146e7f4e216dad3e776a25b08536c093209c9fcb5ea7bd04b082d42686a45f58ff401d6da32e - languageName: node - linkType: hard - "indexof@npm:0.0.1": version: 0.0.1 resolution: "indexof@npm:0.0.1" @@ -25747,18 +24119,17 @@ __metadata: linkType: hard "init-package-json@npm:^2.0.2": - version: 2.0.2 - resolution: "init-package-json@npm:2.0.2" + version: 2.0.5 + resolution: "init-package-json@npm:2.0.5" dependencies: - glob: ^7.1.1 - npm-package-arg: ^8.1.0 + npm-package-arg: ^8.1.5 promzard: ^0.3.0 read: ~1.0.1 - read-package-json: ^3.0.0 - semver: ^7.3.2 + read-package-json: ^4.1.1 + semver: ^7.3.5 validate-npm-package-license: ^3.0.4 validate-npm-package-name: ^3.0.0 - checksum: d8bfd3bd0de46411768011d441c6c96299e639279d7720184f51796533d0088a04a1010ad675718ec899bf6991e84a5e2de6b1ffa3c9357cea919b87c9fb4f73 + checksum: cbd3e2e79156d6e8722699f571e509e0733dde31ac4cb58c0aadb63f7cef1a131037c6d549bd6af5757032a51252b1bdb86a70f68ed6c10f866f203e5fb4f9ba languageName: node linkType: hard @@ -25770,11 +24141,11 @@ __metadata: linkType: hard "inline-style-prefixer@npm:^6.0.0": - version: 6.0.0 - resolution: "inline-style-prefixer@npm:6.0.0" + version: 6.0.1 + resolution: "inline-style-prefixer@npm:6.0.1" dependencies: css-in-js-utils: ^2.0.0 - checksum: 1331a6184bed03d145e3b9a98363fc7a245590ea1a495df7376a99386737893d4318f8ecf873e2be8431cff1de91512b7a4b9e36326933d5647db0088b63ef4f + checksum: 0bfa6fa89faa21e425c71425910c37c7b35a16ea753586c408fcc9246c84937c1b8184e6ce792139cda5de5cce8e1bc9eb0ba9f30968bdc97e7a06ece21c0737 languageName: node linkType: hard @@ -25855,10 +24226,10 @@ __metadata: languageName: node linkType: hard -"internmap@npm:^1.0.0": - version: 1.0.1 - resolution: "internmap@npm:1.0.1" - checksum: 9d00f8c0cf873a24a53a5a937120dab634c41f383105e066bb318a61864e6292d24eb9516e8e7dccfb4420ec42ca474a0f28ac9a6cc82536898fa09bbbe53813 +"internmap@npm:1 - 2": + version: 2.0.3 + resolution: "internmap@npm:2.0.3" + checksum: 7ca41ec6aba8f0072fc32fa8a023450a9f44503e2d8e403583c55714b25efd6390c38a87161ec456bf42d7bc83aab62eb28f5aef34876b1ac4e60693d5e1d241 languageName: node linkType: hard @@ -25902,9 +24273,9 @@ __metadata: languageName: node linkType: hard -"ioredis@npm:^5.1.0": - version: 5.1.0 - resolution: "ioredis@npm:5.1.0" +"ioredis@npm:^5.2.3": + version: 5.2.3 + resolution: "ioredis@npm:5.2.3" dependencies: "@ioredis/commands": ^1.1.1 cluster-key-slot: ^1.1.0 @@ -25915,7 +24286,7 @@ __metadata: redis-errors: ^1.2.0 redis-parser: ^3.0.0 standard-as-callback: ^2.1.0 - checksum: 7b1c137836ee136a634926df4ec68cc2393772a32ecda8e30dd305d7b9182af02d600456e661f96a6ceada17560ce7b6458948fd09b8adc277a1d287325777dd + checksum: 2cb7f0f4217e6774accad3620af1b7114722721c1d1824be2c9f0c2a77ab9629f2e0848d18b1a7208bc37796ae1207cb3e0898fce61900cfe797da0382724ad1 languageName: node linkType: hard @@ -25926,10 +24297,10 @@ __metadata: languageName: node linkType: hard -"ip@npm:^1.1.5": - version: 1.1.5 - resolution: "ip@npm:1.1.5" - checksum: 30133981f082a060a32644f6a7746e9ba7ac9e2bc07ecc8bbdda3ee8ca9bec1190724c390e45a1ee7695e7edfd2a8f7dda2c104ec5f7ac5068c00648504c7e5a +"ip@npm:^2.0.0": + version: 2.0.0 + resolution: "ip@npm:2.0.0" + checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 languageName: node linkType: hard @@ -25947,13 +24318,6 @@ __metadata: languageName: node linkType: hard -"is-absolute-url@npm:^3.0.3": - version: 3.0.3 - resolution: "is-absolute-url@npm:3.0.3" - checksum: 5159b51d065d9ad29e16a2f78d6c0e41c43227caf90a45e659c54ea6fd50ef0595b1871ce392e84b1df7cfdcad9a8e66eec0813a029112188435abf115accb16 - languageName: node - linkType: hard - "is-absolute@npm:^1.0.0": version: 1.0.0 resolution: "is-absolute@npm:1.0.0" @@ -25989,13 +24353,6 @@ __metadata: languageName: node linkType: hard -"is-alphabetical@npm:^2.0.0": - version: 2.0.0 - resolution: "is-alphabetical@npm:2.0.0" - checksum: 7193b3ffaa1b7657b71a4e25aea51f4bd750e589d7e1cc2e349edb942b0145873923477a689b248fe553602e0a3793bc012a13763c56dbc0241d14f3b98d8dc9 - languageName: node - linkType: hard - "is-alphanumerical@npm:^1.0.0": version: 1.0.4 resolution: "is-alphanumerical@npm:1.0.4" @@ -26006,20 +24363,13 @@ __metadata: languageName: node linkType: hard -"is-alphanumerical@npm:^2.0.0": - version: 2.0.0 - resolution: "is-alphanumerical@npm:2.0.0" - dependencies: - is-alphabetical: ^2.0.0 - is-decimal: ^2.0.0 - checksum: 50a5003efd6824aba9f69bae8b37c76c2c7b76f0c6251dcc9a54408437364f5ae70da7f010e24a056c4bf19e20b0116d95f248be1089528a8b6696e28c1f0b0b - languageName: node - linkType: hard - "is-arguments@npm:^1.0.4": - version: 1.0.4 - resolution: "is-arguments@npm:1.0.4" - checksum: a40ce1580cbb28b67790afe91d9c39a9016f165e724021f2c61da016d7382a1b04a202d9d4ea1c8b5d7fda7c15144aa5c4e92ea4ed0896e2b95f4f665a966cd5 + version: 1.1.1 + resolution: "is-arguments@npm:1.1.1" + dependencies: + call-bind: ^1.0.2 + has-tostringtag: ^1.0.0 + checksum: 7f02700ec2171b691ef3e4d0e3e6c0ba408e8434368504bb593d0d7c891c0dbfda6d19d30808b904a6cb1929bca648c061ba438c39f296c2a8ca083229c49f27 languageName: node linkType: hard @@ -26073,25 +24423,25 @@ __metadata: linkType: hard "is-buffer@npm:^2.0.0": - version: 2.0.4 - resolution: "is-buffer@npm:2.0.4" - checksum: b1616ff40c1644e219d6038819044608e31edcc60eb287e5f214391222dea889a68c659f0654865ce34b6c4dcfa2c8cae0174343a0f6ae3f2150f7856326cb80 + version: 2.0.5 + resolution: "is-buffer@npm:2.0.5" + checksum: 764c9ad8b523a9f5a32af29bdf772b08eb48c04d2ad0a7240916ac2688c983bf5f8504bf25b35e66240edeb9d9085461f9b5dae1f3d2861c6b06a65fe983de42 languageName: node linkType: hard "is-builtin-module@npm:^3.1.0": - version: 3.1.0 - resolution: "is-builtin-module@npm:3.1.0" + version: 3.2.0 + resolution: "is-builtin-module@npm:3.2.0" dependencies: - builtin-modules: ^3.0.0 - checksum: f1e5dd2cd5f252d4d799b20a0c8c4f7e9c399c4d141749af76ca0121058d4062c3015d026f1b1409dd3d2a4ddfb9b15cf6eb9c370fed53fea8652ce35b5e95cb + builtin-modules: ^3.3.0 + checksum: 0315751b898feff0646511c896e88b608a755c5025d0ce9a3ad25783de50be870e47dafb838cebbb06fbb2a948b209ea55348eee267836c9dd40d3a11ec717d3 languageName: node linkType: hard -"is-callable@npm:^1.1.4, is-callable@npm:^1.2.4": - version: 1.2.4 - resolution: "is-callable@npm:1.2.4" - checksum: 1a28d57dc435797dae04b173b65d6d1e77d4f16276e9eff973f994eadcfdc30a017e6a597f092752a083c1103cceb56c91e3dadc6692fedb9898dfaba701575f +"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.4": + version: 1.2.6 + resolution: "is-callable@npm:1.2.6" + checksum: 7667d6a6be66df00741cfa18c657877c46a00139ea7ea7765251e9db0182745c9ee173506941a329d6914e34e59e9cc80029fb3f68bbf8c22a6c155ee6ea77b3 languageName: node linkType: hard @@ -26117,25 +24467,7 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.1.0, is-core-module@npm:^2.2.0": - version: 2.8.1 - resolution: "is-core-module@npm:2.8.1" - dependencies: - has: ^1.0.3 - checksum: 418b7bc10768a73c41c7ef497e293719604007f88934a6ffc5f7c78702791b8528102fb4c9e56d006d69361549b3d9519440214a74aefc7e0b79e5e4411d377f - languageName: node - linkType: hard - -"is-core-module@npm:^2.8.0, is-core-module@npm:^2.8.1": - version: 2.9.0 - resolution: "is-core-module@npm:2.9.0" - dependencies: - has: ^1.0.3 - checksum: b27034318b4b462f1c8f1dfb1b32baecd651d891a4e2d1922135daeff4141dfced2b82b07aef83ef54275c4a3526aa38da859223664d0868ca24182badb784ce - languageName: node - linkType: hard - -"is-core-module@npm:^2.9.0": +"is-core-module@npm:^2.1.0, is-core-module@npm:^2.5.0, is-core-module@npm:^2.8.1, is-core-module@npm:^2.9.0": version: 2.10.0 resolution: "is-core-module@npm:2.10.0" dependencies: @@ -26178,13 +24510,6 @@ __metadata: languageName: node linkType: hard -"is-decimal@npm:^2.0.0": - version: 2.0.0 - resolution: "is-decimal@npm:2.0.0" - checksum: 274ff0ef14e5694a2f698d65225680fb9b0c9a9da36afd320a9b5224aec1182679792ec6684fe15e3576ad3de91a2e1f6662e0e0e2f7bda6a50c026cd8030959 - languageName: node - linkType: hard - "is-descriptor@npm:^0.1.0": version: 0.1.6 resolution: "is-descriptor@npm:0.1.6" @@ -26287,9 +24612,11 @@ __metadata: linkType: hard "is-generator-function@npm:^1.0.7": - version: 1.0.8 - resolution: "is-generator-function@npm:1.0.8" - checksum: ff6a510416885616fa57a2a1e043224a386ed37451c3686cc1ed38a63acd59b240f09b5d937aa86dedc3a7fb91ae6c0ce6477149d4b6f9be608a870e038b38bd + version: 1.0.10 + resolution: "is-generator-function@npm:1.0.10" + dependencies: + has-tostringtag: ^1.0.0 + checksum: d54644e7dbaccef15ceb1e5d91d680eb5068c9ee9f9eb0a9e04173eb5542c9b51b5ab52c5537f5703e48d5fddfd376817c1ca07a84a407b7115b769d4bdde72b languageName: node linkType: hard @@ -26309,13 +24636,6 @@ __metadata: languageName: node linkType: hard -"is-hexadecimal@npm:^2.0.0": - version: 2.0.0 - resolution: "is-hexadecimal@npm:2.0.0" - checksum: 62d03640345e13a3edcccbd5c80e47088c7163e54ab6e945f77fd5bf2b1e8571fb7fd4c2d6eff9f2720a6db81cb13377f0acd0b245344b69dc85be5239b8a6f6 - languageName: node - linkType: hard - "is-in-browser@npm:^1.0.2, is-in-browser@npm:^1.1.3": version: 1.1.3 resolution: "is-in-browser@npm:1.1.3" @@ -26363,7 +24683,7 @@ __metadata: languageName: node linkType: hard -"is-negative-zero@npm:^2.0.1, is-negative-zero@npm:^2.0.2": +"is-negative-zero@npm:^2.0.2": version: 2.0.2 resolution: "is-negative-zero@npm:2.0.2" checksum: f3232194c47a549da60c3d509c9a09be442507616b69454716692e37ae9f37c4dea264fb208ad0c9f3efd15a796a46b79df07c7e53c6227c32170608b809149a @@ -26410,9 +24730,9 @@ __metadata: linkType: hard "is-object@npm:^1.0.1": - version: 1.0.1 - resolution: "is-object@npm:1.0.1" - checksum: 845eea5ecea9723c04809c9c502a19f318b486f796b128a7b8e5a228c7256c3db8c8201043577542075632e292cd4dfeb04627f12f53817d7bd9f30485cf4c34 + version: 1.0.2 + resolution: "is-object@npm:1.0.2" + checksum: 971219c4b1985b9751f65e4c8296d3104f0457b0e8a70849e848a4a2208bc47317d73b3b85d4a369619cb2df8284dc22584cb2695a7d99aca5e8d0aa64fc075a languageName: node linkType: hard @@ -26452,9 +24772,9 @@ __metadata: linkType: hard "is-plain-obj@npm:^4.0.0": - version: 4.0.0 - resolution: "is-plain-obj@npm:4.0.0" - checksum: a6bb55a90636345a64c6153b74d85a9b6440f9975f4dcc57eed596c280b7ba228c71c406355a3147ed0488330d2743d5756e052c9492b1aa4f7dcd281f08c4b6 + version: 4.1.0 + resolution: "is-plain-obj@npm:4.1.0" + checksum: 6dc45da70d04a81f35c9310971e78a6a3c7a63547ef782e3a07ee3674695081b6ca4e977fbb8efc48dae3375e0b34558d2bcd722aec9bddfa2d7db5b041be8ce languageName: node linkType: hard @@ -26488,13 +24808,6 @@ __metadata: languageName: node linkType: hard -"is-promise@npm:^2.1.0": - version: 2.2.2 - resolution: "is-promise@npm:2.2.2" - checksum: 18bf7d1c59953e0ad82a1ed963fb3dc0d135c8f299a14f89a17af312fc918373136e56028e8831700e1933519630cc2fd4179a777030330fde20d34e96f40c78 - languageName: node - linkType: hard - "is-promise@npm:^4.0.0": version: 4.0.0 resolution: "is-promise@npm:4.0.0" @@ -26537,13 +24850,6 @@ __metadata: languageName: node linkType: hard -"is-resolvable@npm:^1.1.0": - version: 1.1.0 - resolution: "is-resolvable@npm:1.1.0" - checksum: 2ddff983be0cabc2c8d60246365755f8fb322f5fb9db834740d3e694c635c1b74c1bd674cf221e072fc4bd911ef3f08f2247d390e476f7e80af9092443193c68 - languageName: node - linkType: hard - "is-root@npm:^2.1.0": version: 2.1.0 resolution: "is-root@npm:2.1.0" @@ -26560,7 +24866,7 @@ __metadata: languageName: node linkType: hard -"is-shared-array-buffer@npm:^1.0.1, is-shared-array-buffer@npm:^1.0.2": +"is-shared-array-buffer@npm:^1.0.2": version: 1.0.2 resolution: "is-shared-array-buffer@npm:1.0.2" dependencies: @@ -26569,16 +24875,7 @@ __metadata: languageName: node linkType: hard -"is-ssh@npm:^1.3.0": - version: 1.3.1 - resolution: "is-ssh@npm:1.3.1" - dependencies: - protocols: ^1.1.0 - checksum: 769a6ce56477881b66cc3f9ef7924785d32bd904d7fff39bef8eac08251fc5cc9e02fd4b3d99f0b357312b550c2122d9202a887f5630c67cf890263f2c7f1acc - languageName: node - linkType: hard - -"is-ssh@npm:^1.4.0": +"is-ssh@npm:^1.3.0, is-ssh@npm:^1.4.0": version: 1.4.0 resolution: "is-ssh@npm:1.4.0" dependencies: @@ -26644,16 +24941,16 @@ __metadata: languageName: node linkType: hard -"is-typed-array@npm:^1.1.3": - version: 1.1.5 - resolution: "is-typed-array@npm:1.1.5" +"is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.9": + version: 1.1.9 + resolution: "is-typed-array@npm:1.1.9" dependencies: - available-typed-arrays: ^1.0.2 + available-typed-arrays: ^1.0.5 call-bind: ^1.0.2 - es-abstract: ^1.18.0-next.2 - foreach: ^2.0.5 - has-symbols: ^1.0.1 - checksum: ba435c83dc1dc0f205c0169f7e93a082816c6b261631a55e473f6f4e18fdf76c1997b326e2e63ae6139e0f75fb47d76252fc76ce75e6b2a74aa41c39743774cb + es-abstract: ^1.20.0 + for-each: ^0.3.3 + has-tostringtag: ^1.0.0 + checksum: 11910f1e58755fef43bf0074e52fa5b932bf101ec65d613e0a83d40e8e4c6e3f2ee142d624ebc7624c091d3bbe921131f8db7d36ecbbb71909f2fe310c1faa65 languageName: node linkType: hard @@ -26696,7 +24993,7 @@ __metadata: languageName: node linkType: hard -"is-weakref@npm:^1.0.1, is-weakref@npm:^1.0.2": +"is-weakref@npm:^1.0.2": version: 1.0.2 resolution: "is-weakref@npm:1.0.2" dependencies: @@ -26749,20 +25046,13 @@ __metadata: languageName: node linkType: hard -"isbinaryfile@npm:^4.0.10": +"isbinaryfile@npm:^4.0.10, isbinaryfile@npm:^4.0.8": version: 4.0.10 resolution: "isbinaryfile@npm:4.0.10" checksum: a6b28db7e23ac7a77d3707567cac81356ea18bd602a4f21f424f862a31d0e7ab4f250759c98a559ece35ffe4d99f0d339f1ab884ffa9795172f632ab8f88e686 languageName: node linkType: hard -"isbinaryfile@npm:^4.0.8": - version: 4.0.8 - resolution: "isbinaryfile@npm:4.0.8" - checksum: 606e3bb648d1a0dee23459d1d937bb2560e66a5281ec7c9ff50e585402d73321ac268d0f34cb7393125b3ebc4c7962d39e50a01cdb8904b52fce08b7ccd2bf9f - languageName: node - linkType: hard - "isbinaryfile@npm:^5.0.0": version: 5.0.0 resolution: "isbinaryfile@npm:5.0.0" @@ -26824,8 +25114,8 @@ __metadata: linkType: hard "isomorphic-git@npm:^1.8.0": - version: 1.20.0 - resolution: "isomorphic-git@npm:1.20.0" + version: 1.21.0 + resolution: "isomorphic-git@npm:1.21.0" dependencies: async-lock: ^1.1.0 clean-git-ref: ^2.0.1 @@ -26840,7 +25130,7 @@ __metadata: simple-get: ^4.0.1 bin: isogit: cli.cjs - checksum: 4f5af69b02795d656c171c2347186ac0b04269db23ab4ec3fb0204cda5cb89cceaacae8eb44ee3e1870fcbc930518c63a6e82a9fc7428719e08be5c3d6d88396 + checksum: afbdf98000c586fdcb96f84c054d6ada392b0d2422a7b7baad89e5f5881a79426f8555bdadeebe25202be18bb8eaee3881f8c04b6a289d04b916790bdd5dd5df languageName: node linkType: hard @@ -26869,14 +25159,7 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-coverage@npm:^3.0.0": - version: 3.0.0 - resolution: "istanbul-lib-coverage@npm:3.0.0" - checksum: ea57c2428858cc5d1e04c0e28b362950bbf6415e8ba1235cdd6f4c8dc3c57cb950db8b4e8a4f7e33abc240aa1eb816dba0d7285bdb8b70bda22bb2082492dbfc - languageName: node - linkType: hard - -"istanbul-lib-coverage@npm:^3.2.0": +"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": version: 3.2.0 resolution: "istanbul-lib-coverage@npm:3.2.0" checksum: a2a545033b9d56da04a8571ed05c8120bf10e9bce01cf8633a3a2b0d1d83dff4ac4fe78d6d5673c27fc29b7f21a41d75f83a36be09f82a61c367b56aa73c1ff9 @@ -26884,15 +25167,15 @@ __metadata: linkType: hard "istanbul-lib-instrument@npm:^5.0.4, istanbul-lib-instrument@npm:^5.1.0": - version: 5.1.0 - resolution: "istanbul-lib-instrument@npm:5.1.0" + version: 5.2.0 + resolution: "istanbul-lib-instrument@npm:5.2.0" dependencies: "@babel/core": ^7.12.3 "@babel/parser": ^7.14.7 "@istanbuljs/schema": ^0.1.2 istanbul-lib-coverage: ^3.2.0 semver: ^6.3.0 - checksum: 8b82e733c69fe9f94d2e21f3e5760c9bedb110329aa75df4bd40df95f1cac3bf38767e43f35b125cc547ceca7376b72ce7d95cc5238b7e9088345c7b589233d3 + checksum: 7c242ed782b6bf7b655656576afae8b6bd23dcc020e5fdc1472cca3dfb6ddb196a478385206d0df5219b9babf46ac4f21fea5d8ea9a431848b6cca6007012353 languageName: node linkType: hard @@ -26908,23 +25191,23 @@ __metadata: linkType: hard "istanbul-lib-source-maps@npm:^4.0.0": - version: 4.0.0 - resolution: "istanbul-lib-source-maps@npm:4.0.0" + version: 4.0.1 + resolution: "istanbul-lib-source-maps@npm:4.0.1" dependencies: debug: ^4.1.1 istanbul-lib-coverage: ^3.0.0 source-map: ^0.6.1 - checksum: 292bfb4083e5f8783cdf829a7686b1a377d0c6c2119d4343c8478e948b38146c4827cddc7eee9f57605acd63c291376d67e4a84163d37c5fc78ad0f27f7e2621 + checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 languageName: node linkType: hard "istanbul-reports@npm:^3.1.3": - version: 3.1.4 - resolution: "istanbul-reports@npm:3.1.4" + version: 3.1.5 + resolution: "istanbul-reports@npm:3.1.5" dependencies: html-escaper: ^2.0.0 istanbul-lib-report: ^3.0.0 - checksum: 2132983355710c522f6b26808015cab9a0ee8b9f5ae0db0d3edeff40b886dd83cb670fb123cb7b32dbe59473d7c00cdde2ba6136bc0acdb20a865fccea64dfe1 + checksum: 7867228f83ed39477b188ea07e7ccb9b4f5320b6f73d1db93a0981b7414fa4ef72d3f80c4692c442f90fc250d9406e71d8d7ab65bb615cb334e6292b73192b89 languageName: node linkType: hard @@ -27088,6 +25371,18 @@ __metadata: languageName: node linkType: hard +"jest-diff@npm:^29.0.3": + version: 29.0.3 + resolution: "jest-diff@npm:29.0.3" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^29.0.0 + jest-get-type: ^29.0.0 + pretty-format: ^29.0.3 + checksum: 1e12b63ea6254ea25146b6fb19f8b2d1ba334e1b8b635a007767c17dc272728afbdf41ccccce26c2a40cd9c7f3176bcfed53be2572927a3fc7b1ee5fff43eb26 + languageName: node + linkType: hard + "jest-docblock@npm:^27.5.1": version: 27.5.1 resolution: "jest-docblock@npm:27.5.1" @@ -27146,6 +25441,13 @@ __metadata: languageName: node linkType: hard +"jest-get-type@npm:^29.0.0": + version: 29.0.0 + resolution: "jest-get-type@npm:29.0.0" + checksum: 9abdd11d69788963a92fb9d813a7b887654ecc8f3a3c8bf83166d33aaf4d57ed380e74ab8ef106f57565dd235446ca6ebc607679f0c516c4633e6d09f0540a2b + languageName: node + linkType: hard + "jest-haste-map@npm:^27.5.1": version: 27.5.1 resolution: "jest-haste-map@npm:27.5.1" @@ -27217,6 +25519,18 @@ __metadata: languageName: node linkType: hard +"jest-matcher-utils@npm:^29.0.3": + version: 29.0.3 + resolution: "jest-matcher-utils@npm:29.0.3" + dependencies: + chalk: ^4.0.0 + jest-diff: ^29.0.3 + jest-get-type: ^29.0.0 + pretty-format: ^29.0.3 + checksum: e39ab74a046ada8fbd75a275bfe54bd5f8ec14a98f77e1162a49d4e1ea82e68c5a4575691767cea0f60dd0b74cb481275012bf3467cd91fdb014311c670b8a83 + languageName: node + linkType: hard + "jest-message-util@npm:^27.5.1": version: 27.5.1 resolution: "jest-message-util@npm:27.5.1" @@ -27234,6 +25548,23 @@ __metadata: languageName: node linkType: hard +"jest-message-util@npm:^29.0.3": + version: 29.0.3 + resolution: "jest-message-util@npm:29.0.3" + dependencies: + "@babel/code-frame": ^7.12.13 + "@jest/types": ^29.0.3 + "@types/stack-utils": ^2.0.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + micromatch: ^4.0.4 + pretty-format: ^29.0.3 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: 04bee1fee10106f4eb875092e5d06187930d44050a4f99e7aa1d1e42768b18d6d9e5439623d9242202942deb8a1eec08359e0cd19a43ae505d96aeaf243a3f8d + languageName: node + linkType: hard + "jest-mock@npm:^27.5.1": version: 27.5.1 resolution: "jest-mock@npm:27.5.1" @@ -27414,6 +25745,20 @@ __metadata: languageName: node linkType: hard +"jest-util@npm:^29.0.3": + version: 29.0.3 + resolution: "jest-util@npm:29.0.3" + dependencies: + "@jest/types": ^29.0.3 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: 39c31e75ba5bcb4c3ccdf0895f9fdbb83f839c432e7c6639a688beb414d681b5d50282da017c723ea1f2a7033e74a4938fd33dcff231c3e90f903173919991d5 + languageName: node + linkType: hard + "jest-validate@npm:^27.5.1": version: 27.5.1 resolution: "jest-validate@npm:27.5.1" @@ -27464,13 +25809,13 @@ __metadata: linkType: hard "jest-worker@npm:^28.0.2": - version: 28.1.1 - resolution: "jest-worker@npm:28.1.1" + version: 28.1.3 + resolution: "jest-worker@npm:28.1.3" dependencies: "@types/node": "*" merge-stream: ^2.0.0 supports-color: ^8.0.0 - checksum: 28519c43b4007e60a3756d27f1e7884192ee9161b6a9587383a64b6535f820cc4868e351a67775e0feada41465f48ccf323a8db34ae87e15a512ddac5d1424b2 + checksum: e921c9a1b8f0909da9ea07dbf3592f95b653aef3a8bb0cbcd20fc7f9a795a1304adecac31eecb308992c167e8d7e75c522061fec38a5928ace0f9571c90169ca languageName: node linkType: hard @@ -27528,36 +25873,29 @@ __metadata: linkType: hard "joi@npm:^17.4.0": - version: 17.4.2 - resolution: "joi@npm:17.4.2" + version: 17.6.0 + resolution: "joi@npm:17.6.0" dependencies: "@hapi/hoek": ^9.0.0 "@hapi/topo": ^5.0.0 - "@sideway/address": ^4.1.0 + "@sideway/address": ^4.1.3 "@sideway/formula": ^3.0.0 "@sideway/pinpoint": ^2.0.0 - checksum: 977ada1f9d38c2762689b61cec1272176968ccea731a16b71713ebaa067f140460e0b6f7eccff6fc12206fddce22e7f4ed74724651bc1b24b1e26d43280633d0 + checksum: eaf62f6c02f2edb1042f1ab04fc23a5918a2cb8f54bec84c6e1033624d8a462c10ae9518af55a3ba84f1793960450d58094eda308e7ef93c17edd4e3c8ef31d5 languageName: node linkType: hard -"jose@npm:^4.1.4": - version: 4.5.0 - resolution: "jose@npm:4.5.0" - checksum: 51142150a9f571ca318842d34ac0daec49fb70bfb6034c68fd46d8c804a8325065876067202310c8ff3cbfc5ca8e44d4712467b4da0d3cadf1e47c96989ca4ca - languageName: node - linkType: hard - -"jose@npm:^4.6.0": - version: 4.9.2 - resolution: "jose@npm:4.9.2" - checksum: d3950385a6417d988c50bd8ba5407f5960624060aa8e4662c2109f1ebcc40c418e64b721a87065d8197b4aa0ddd7fb4dad5064618956dba8e74dc630916bf40f +"jose@npm:^4.1.4, jose@npm:^4.6.0": + version: 4.9.3 + resolution: "jose@npm:4.9.3" + checksum: 95865830768dcf82774d19e92dc854c5bc9dc5d9c9626a65a2974272e3aca5d2f56678611943f85802431d2d6d6f8bff9548b7cdb7578e6fe61529bd9c82e1d3 languageName: node linkType: hard "joycon@npm:^3.0.1": - version: 3.1.0 - resolution: "joycon@npm:3.1.0" - checksum: f21f17b46142f14c92cc99f5a157ebf224717a284c45e870452be5c5ebc3bb7e07e66692fc9da3a40f6b08106ac986dc9eae2f77977db62416fe47a99b0de0ac + version: 3.1.1 + resolution: "joycon@npm:3.1.1" + checksum: 8003c9c3fc79c5c7602b1c7e9f7a2df2e9916f046b0dbad862aa589be78c15734d11beb9fe846f5e06138df22cb2ad29961b6a986ba81c4920ce2b15a7f11067 languageName: node linkType: hard @@ -27603,6 +25941,13 @@ __metadata: languageName: node linkType: hard +"js-sdsl@npm:^4.1.4": + version: 4.1.4 + resolution: "js-sdsl@npm:4.1.4" + checksum: 1977cea4ab18e0e03e28bdf0371d8b443fad65ca0988e0faa216406faf6bb943714fe8f7cc7a5bfe5f35ba3d94ddae399f4d10200f547f2c3320688b0670d726 + languageName: node + linkType: hard + "js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -27621,7 +25966,7 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.0, js-yaml@npm:^3.13.1, js-yaml@npm:^3.14.0, js-yaml@npm:^3.14.1, js-yaml@npm:^3.6.1, js-yaml@npm:^3.8.3": +"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.0, js-yaml@npm:^3.13.1, js-yaml@npm:^3.14.0, js-yaml@npm:^3.6.1, js-yaml@npm:^3.8.3": version: 3.14.1 resolution: "js-yaml@npm:3.14.1" dependencies: @@ -27805,7 +26150,7 @@ __metadata: languageName: node linkType: hard -"json-buffer@npm:3.0.1, json-buffer@npm:^3.0.1, json-buffer@npm:~3.0.1": +"json-buffer@npm:3.0.1, json-buffer@npm:^3.0.1": version: 3.0.1 resolution: "json-buffer@npm:3.0.1" checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 @@ -27991,9 +26336,9 @@ __metadata: linkType: hard "jsonc-parser@npm:^3.0.0": - version: 3.0.0 - resolution: "jsonc-parser@npm:3.0.0" - checksum: 1df2326f1f9688de30c70ff19c5b2a83ba3b89a1036160da79821d1361090775e9db502dc57a67c11b56e1186fc1ed70b887f25c5febf9a3ec4f91435836c99d + version: 3.2.0 + resolution: "jsonc-parser@npm:3.2.0" + checksum: 946dd9a5f326b745aa326d48a7257e3f4a4b62c5e98ec8e49fa2bdd8d96cef7e6febf1399f5c7016114fd1f68a1c62c6138826d5d90bc650448e3cf0951c53c7 languageName: node linkType: hard @@ -28051,9 +26396,9 @@ __metadata: linkType: hard "jsonpointer@npm:^5.0.0": - version: 5.0.0 - resolution: "jsonpointer@npm:5.0.0" - checksum: c7ec0b6bb596b81de687bc12945586bbcdc80dfb54919656d2690d76334f796a936270067ee9f1b5bbc2d9ecc551afb366ac35e6685aa61f07b5b68d1e5e857d + version: 5.0.1 + resolution: "jsonpointer@npm:5.0.1" + checksum: 0b40f712900ad0c846681ea2db23b6684b9d5eedf55807b4708c656f5894b63507d0e28ae10aa1bddbea551241035afe62b6df0800fc94c2e2806a7f3adecd7c languageName: node linkType: hard @@ -28107,89 +26452,88 @@ __metadata: linkType: hard "jss-plugin-camel-case@npm:^10.5.1": - version: 10.6.0 - resolution: "jss-plugin-camel-case@npm:10.6.0" + version: 10.9.2 + resolution: "jss-plugin-camel-case@npm:10.9.2" dependencies: "@babel/runtime": ^7.3.1 hyphenate-style-name: ^1.0.3 - jss: 10.6.0 - checksum: 75c23826deef63c3603cfb47331d1eaf9feeafd097bd115a076f2ee9fb696855d3f18b3f41455a046120fddf0ea11985259c1b8b8a37b3556f4de1a1c83affd5 + jss: 10.9.2 + checksum: 5fa617b23ce9718244691c59ace6a0d1271dbcb4430ce3e13b851ee1879c1db8ecab7e941c33802bea763a0f0e2b609d004b8a975b2063f213cdd639cdd384d2 languageName: node linkType: hard "jss-plugin-default-unit@npm:^10.5.1": - version: 10.6.0 - resolution: "jss-plugin-default-unit@npm:10.6.0" + version: 10.9.2 + resolution: "jss-plugin-default-unit@npm:10.9.2" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.6.0 - checksum: 7ae36fadf4f206a16e49c40806ef92ba1f0e60395488ab8ad4df96796b408013b38ea5ed975155ecd7833a42a96c8d5cb1e90aef011279816633e60f807ec330 + jss: 10.9.2 + checksum: 48d8d836d36dd15513d98de11fba6be373ac29e6fd5702eb2edd143c815fb9e2f9969b2af6b1b964e9b8a052828690887042f6bcb34836836d5c359e52702d0f languageName: node linkType: hard "jss-plugin-global@npm:^10.5.1": - version: 10.6.0 - resolution: "jss-plugin-global@npm:10.6.0" + version: 10.9.2 + resolution: "jss-plugin-global@npm:10.9.2" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.6.0 - checksum: 7aab58408c77071c571dd2c2132edad8d40b683513a8de534f0ec7f63926fd9d9fcf6bdda82103eb541452a723b992f061720f8e5cf2014acb7f6bbbde111f56 + jss: 10.9.2 + checksum: 9b29b0c1f169d5a1033890875df072d76364a902d0f6470f448544669a388612a9a4d51844fb2bcb6d25a1c43d67c1637f11a162c2cdd9f4b6b0a8f9c94f6090 languageName: node linkType: hard "jss-plugin-nested@npm:^10.5.1": - version: 10.6.0 - resolution: "jss-plugin-nested@npm:10.6.0" + version: 10.9.2 + resolution: "jss-plugin-nested@npm:10.9.2" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.6.0 + jss: 10.9.2 tiny-warning: ^1.0.2 - checksum: 38095127e8b5ddb0a33ccaf61a4d89dc1b0f78e6d06d079a47a14bca4aed4e885f1957d83f11c5da08b4249b2c629e8bc62b2996f1674ca1302575a7b2b11171 + checksum: ee08df07f3d553931b48037674842a8314bbc7857cc954a52f962a516bfc4b2d4e9871578b06b8fa3981edf5a927cea00021fd368d4ce315870065b7647f7b57 languageName: node linkType: hard "jss-plugin-props-sort@npm:^10.5.1": - version: 10.6.0 - resolution: "jss-plugin-props-sort@npm:10.6.0" + version: 10.9.2 + resolution: "jss-plugin-props-sort@npm:10.9.2" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.6.0 - checksum: 2917ff301e667f75efa15df865a860a50d4319d415d1169c213e66b464edc2b37b6f428be2d974ccdde7c8d61c50123f18e788143a96eacc2a1c42ad250ae375 + jss: 10.9.2 + checksum: 70bd181a458a6078f19ad4d7350570c78d26b9aabc25a1fbde673839edcc19825af7b636861b208a38aa17e551e68d0ea38599480716b4aec08e353bbe737222 languageName: node linkType: hard "jss-plugin-rule-value-function@npm:^10.5.1": - version: 10.6.0 - resolution: "jss-plugin-rule-value-function@npm:10.6.0" + version: 10.9.2 + resolution: "jss-plugin-rule-value-function@npm:10.9.2" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.6.0 + jss: 10.9.2 tiny-warning: ^1.0.2 - checksum: 709e1ce0afdc39a52cb78e371fef626f933e99992790b15771d85056176bdf69365d62cfed6ce95434752cc1a1e7e05a6f2548e4cd5999808d50a28174315be3 + checksum: b1a03209d0249f13ea6de766d3ee14c1769cd1f67d8c543c7d1ce6178c32cf15507c021ecb3e3b7585a8a7a2425dddbe0bdae02f4135c4598725a4152bebfc99 languageName: node linkType: hard "jss-plugin-vendor-prefixer@npm:^10.5.1": - version: 10.6.0 - resolution: "jss-plugin-vendor-prefixer@npm:10.6.0" + version: 10.9.2 + resolution: "jss-plugin-vendor-prefixer@npm:10.9.2" dependencies: "@babel/runtime": ^7.3.1 css-vendor: ^2.0.8 - jss: 10.6.0 - checksum: 9db048022ee2fb79a223a9f1be5976e131715057e3c0200cfcead9b9f8625023942534afa261e3c967cee6ad716bfd7d4a2f356556178f60f4eddcf83bcd8856 + jss: 10.9.2 + checksum: a5c352a500fea82e8a782a090cc9815f6331259f1a331158ed74ed77c750fb45750f5ae95f07d27922742830b45d4c3592cfaab194b3ba4a50591acbdeab04d8 languageName: node linkType: hard -"jss@npm:10.6.0, jss@npm:^10.5.1": - version: 10.6.0 - resolution: "jss@npm:10.6.0" +"jss@npm:10.9.2, jss@npm:^10.5.1": + version: 10.9.2 + resolution: "jss@npm:10.9.2" dependencies: "@babel/runtime": ^7.3.1 csstype: ^3.0.2 - indefinite-observable: ^2.0.1 is-in-browser: ^1.1.3 tiny-warning: ^1.0.2 - checksum: 529edd871ddf059beef55ee0f974ad8436fbcf050d6538e6d2d7edab53ce2c09983d2f863e42a1473dd0e42a0447e9912bce6706bb0e539226d92cdaad128d46 + checksum: 7ae5cd2f8602bf197ec90251d774b9f10d55eb2db0854ac78dc7fb6983828c202e8eb0d5c8c59c73b2f64718ebd33d6063afa799d625a995986a22dc1cc27230 languageName: node linkType: hard @@ -28205,37 +26549,27 @@ __metadata: languageName: node linkType: hard -"jsx-ast-utils@npm:^2.4.1 || ^3.0.0": - version: 3.2.0 - resolution: "jsx-ast-utils@npm:3.2.0" - dependencies: - array-includes: ^3.1.2 - object.assign: ^4.1.2 - checksum: 9f695c480212868557c5e3cd01082857e101768dc75cb904335d1a805e972d6203baa58ae0b786e7afeab1e8fdb98242fccf22dbc1734595a65845172743877c - languageName: node - linkType: hard - -"jsx-ast-utils@npm:^3.3.2": - version: 3.3.2 - resolution: "jsx-ast-utils@npm:3.3.2" +"jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.2": + version: 3.3.3 + resolution: "jsx-ast-utils@npm:3.3.3" dependencies: array-includes: ^3.1.5 - object.assign: ^4.1.2 - checksum: 61d4596d44480afc03ae0a7ebb272aa6603dc4c3645805dea0fc8d9f0693542cd0959f3ba7c0c9b16c13dd5a900c7c4310108bada273132a8355efe3fed22064 + object.assign: ^4.1.3 + checksum: a2ed78cac49a0f0c4be8b1eafe3c5257a1411341d8e7f1ac740debae003de04e5f6372bfcfbd9d082e954ffd99aac85bcda85b7c6bc11609992483f4cdc0f745 languageName: node linkType: hard -"just-diff-apply@npm:^4.0.1": - version: 4.0.1 - resolution: "just-diff-apply@npm:4.0.1" - checksum: fdb58c0c8da766943fb316158d823fe485058d6b31ec6c51f99076df76363fa1ca35d79fb23f53184bf5b7443ae470fe5f087b4a504e913a8f96474963907e2e +"just-diff-apply@npm:^5.2.0": + version: 5.4.1 + resolution: "just-diff-apply@npm:5.4.1" + checksum: e324ccfdb5df174e3ec30751f6b7e8d84a75a1c559c7b294ccba79c94390b424cc84714cb2dc72cef41e0ba0cf5ecce33e5d6dedd14f5700285de38892d81cce languageName: node linkType: hard "just-diff@npm:^5.0.1": - version: 5.0.1 - resolution: "just-diff@npm:5.0.1" - checksum: efbdb652987ca109839dba385904ea152cc73ef4c165eebb4be0af261734cf91387e529fcd52aea5ba9567b4ef76c584ee6254ccf0030dc5d0ccdab3b890a085 + version: 5.1.1 + resolution: "just-diff@npm:5.1.1" + checksum: a6dfd778658c56c0144a22a435dd0a1cae890c4c7a973dbc1c16be0b092cfb5c8ac2d42d608d9713c3fc83683722ecb1585f67c30205f2836bfbe61022bd6999 languageName: node linkType: hard @@ -28296,29 +26630,28 @@ __metadata: linkType: hard "kafkajs@npm:^2.0.0": - version: 2.1.0 - resolution: "kafkajs@npm:2.1.0" - checksum: b751b06f8005ac9ff192d98306f59c6ae018ce09acc0f959dfbfd4fbb4731fe7dfd42de0c3592d45a6b66b6d5caa40926673a02eb764b701c2953ea203ced60c + version: 2.2.0 + resolution: "kafkajs@npm:2.2.0" + checksum: a7fc1e7bb96e7574f143141e58a198a7e850f3623625ab34e05ed91d7cce04ee6dcc89c6636bc9cf6d3241badf881e38ec87f04a5d39f897291ca7f453b6e163 languageName: node linkType: hard "keyv-memcache@npm:^1.2.5": - version: 1.2.9 - resolution: "keyv-memcache@npm:1.2.9" + version: 1.3.3 + resolution: "keyv-memcache@npm:1.3.3" dependencies: json-buffer: ^3.0.1 memjs: ^1.3.0 - checksum: d5134c69be50407498b425d4b8a45204d3a69cfcc2572dd089804f95f4fd9516e7bc6e1fce0e90d036a615e79d72fe8f0f9b17c30dbc66ceabf77f891ac4bbcf + checksum: ddef602c027a325fc1d18917788799e79cf73f46cbbfefeeda893ca585531544aa4b50de6601c1c5e0427a94bb52ad64e9144c919105b26aac0b173ebcdabc28 languageName: node linkType: hard "keyv@npm:^4.0.0, keyv@npm:^4.0.3": - version: 4.3.2 - resolution: "keyv@npm:4.3.2" + version: 4.5.0 + resolution: "keyv@npm:4.5.0" dependencies: - compress-brotli: ^1.3.8 json-buffer: 3.0.1 - checksum: 237952f5faa2ed08da36677d7a3faae48b7e3c305264698cbf4480443f293a2f0c6c63c1d05f5cd4a842ee864dbb395745e6636fecd07489565776a22de7b8d6 + checksum: d294873cf88ec8f691e5edeb7b4b884f886c5f021a01902a0e243c362449db2b55419d7fb7187d059add747b7398321e39e44d391b65f94935174ce13452714d languageName: node linkType: hard @@ -28370,14 +26703,7 @@ __metadata: languageName: node linkType: hard -"kleur@npm:^4.0.3": - version: 4.1.4 - resolution: "kleur@npm:4.1.4" - checksum: 7f6db36e378045dec14acd3cbf0b1e59130c09e984ee8b8ce56dd2d2257cfff90389c1e8f8b19bd09dd5d241080566a814b4ccd99fdcef91f59ef93ec33c8a44 - languageName: node - linkType: hard - -"kleur@npm:^4.1.4": +"kleur@npm:^4.0.3, kleur@npm:^4.1.4": version: 4.1.5 resolution: "kleur@npm:4.1.5" checksum: 1dc476e32741acf0b1b5b0627ffd0d722e342c1b0da14de3e8ae97821327ca08f9fb944542fb3c126d90ac5f27f9d804edbe7c585bf7d12ef495d115e0f22c12 @@ -28438,9 +26764,9 @@ __metadata: linkType: hard "language-subtag-registry@npm:~0.3.2": - version: 0.3.21 - resolution: "language-subtag-registry@npm:0.3.21" - checksum: 5f794525a5bfcefeea155a681af1c03365b60e115b688952a53c6e0b9532b09163f57f1fcb69d6150e0e805ec0350644a4cb35da98f4902562915be9f89572a1 + version: 0.3.22 + resolution: "language-subtag-registry@npm:0.3.22" + checksum: 8ab70a7e0e055fe977ac16ea4c261faec7205ac43db5e806f72e5b59606939a3b972c4bd1e10e323b35d6ffa97c3e1c4c99f6553069dad2dfdd22020fa3eb56a languageName: node linkType: hard @@ -28461,11 +26787,11 @@ __metadata: linkType: hard "lazystream@npm:^1.0.0": - version: 1.0.0 - resolution: "lazystream@npm:1.0.0" + version: 1.0.1 + resolution: "lazystream@npm:1.0.1" dependencies: readable-stream: ^2.0.5 - checksum: 6cb9352a697bad74471671b299997edc736b400bb405dc409acfc9ffe584bb6f86898c4ace86b2f145ae32fe42ef60bd68749acb62c2ff3fa6bded721193f79c + checksum: 822c54c6b87701a6491c70d4fabc4cafcf0f87d6b656af168ee7bb3c45de9128a801cb612e6eeeefc64d298a7524a698dd49b13b0121ae50c2ae305f0dcc5310 languageName: node linkType: hard @@ -28488,8 +26814,8 @@ __metadata: linkType: hard "ldapjs@npm:^2.2.0": - version: 2.3.2 - resolution: "ldapjs@npm:2.3.2" + version: 2.3.3 + resolution: "ldapjs@npm:2.3.3" dependencies: abstract-logging: ^2.0.0 asn1: ^0.2.4 @@ -28499,7 +26825,7 @@ __metadata: once: ^1.4.0 vasync: ^2.2.0 verror: ^1.8.1 - checksum: 4eb7b18839d8fe1d8acc0ba5d2aa71aefcb25ecb6f4f9582299d73faf546984326590c44366f8b148d3a4276707006b1aaffffdc548b3c4ca753e720403da4a5 + checksum: 791cf22812805db3888dfc8aa8e4db8337e67387b318522c9965d40e678ecdb64950a6ea5930083590ec3377038620a3e63f90e985173ae6aca40e7f485290e0 languageName: node linkType: hard @@ -28595,27 +26921,27 @@ __metadata: linkType: hard "libnpmaccess@npm:^4.0.1": - version: 4.0.1 - resolution: "libnpmaccess@npm:4.0.1" + version: 4.0.3 + resolution: "libnpmaccess@npm:4.0.3" dependencies: aproba: ^2.0.0 minipass: ^3.1.1 - npm-package-arg: ^8.0.0 - npm-registry-fetch: ^9.0.0 - checksum: ca89f579311b2d348236107566f9c9a9e84678428fc267c3ed284ab99b4179ae560864fee36b676726c906e9dd83725d2e91b334d0c4cb7b2d3a52827fa75dd9 + npm-package-arg: ^8.1.2 + npm-registry-fetch: ^11.0.0 + checksum: cc6b9fa0abadb6945adbd00dcf1c22267ed0b4d35e0f6ddc50b9fe7a60aa596613110367502e3cb483f93fbe9aa7df4c575ca00b7b3d9eb429fa2aeaad5783aa languageName: node linkType: hard "libnpmpublish@npm:^4.0.0": - version: 4.0.0 - resolution: "libnpmpublish@npm:4.0.0" + version: 4.0.2 + resolution: "libnpmpublish@npm:4.0.2" dependencies: - normalize-package-data: ^3.0.0 - npm-package-arg: ^8.1.0 - npm-registry-fetch: ^9.0.0 + normalize-package-data: ^3.0.2 + npm-package-arg: ^8.1.2 + npm-registry-fetch: ^11.0.0 semver: ^7.1.3 - ssri: ^8.0.0 - checksum: 382cb15b19053b7097cdd6fe36e1c760cbb4906e5a3fac02f8909e4f2792e66f4652a655cd74c6744ad412a000a769d40fee23a58e8c38299535c0d76a1ff3a9 + ssri: ^8.0.1 + checksum: 5aa83352bb70bc9bb082107678d1e42f8f80ef1c354b37849a40fa0ab9c9e715aeba803811ee2f0da99605054aead41450e040b4d37cf543237594e1d1b97173 languageName: node linkType: hard @@ -28626,10 +26952,10 @@ __metadata: languageName: node linkType: hard -"lilconfig@npm:^2.0.3": - version: 2.0.4 - resolution: "lilconfig@npm:2.0.4" - checksum: 02ae530aa49218d782eb79e92c600ea5220828987f85aa3403fa512cadc7efe38c0ac7d0cd2edf600ad3fae1f6c1752f5b4bb78c0d9950435b044d53d507c9e1 +"lilconfig@npm:^2.0.3, lilconfig@npm:^2.0.5": + version: 2.0.6 + resolution: "lilconfig@npm:2.0.6" + checksum: 40a3cd72f103b1be5975f2ac1850810b61d4053e20ab09be8d3aeddfe042187e1ba70b4651a7e70f95efa1642e7dc8b2ae395b317b7d7753b241b43cef7c0f7d languageName: node linkType: hard @@ -28641,11 +26967,11 @@ __metadata: linkType: hard "linkify-it@npm:^3.0.1": - version: 3.0.2 - resolution: "linkify-it@npm:3.0.2" + version: 3.0.3 + resolution: "linkify-it@npm:3.0.3" dependencies: uc.micro: ^1.0.1 - checksum: 08e14854ec3c29e3578311b1cd95e469952a27f191633189a23890628939fc45c6d84fa4495abb9f7f06e60f73a31b8881d834214864d46db914a09ffc7889ae + checksum: 31367a4bb70c5bbc9703246236b504b0a8e049bcd4e0de4291fa50f0ebdebf235b5eb54db6493cb0b1319357c6eeafc4324c9f4aa34b0b943d9f2e11a1268fbc languageName: node linkType: hard @@ -28780,9 +27106,9 @@ __metadata: linkType: hard "loader-runner@npm:^4.2.0": - version: 4.2.0 - resolution: "loader-runner@npm:4.2.0" - checksum: e61aea8b6904b8af53d9de6f0484da86c462c0001f4511bedc837cec63deb9475cea813db62f702cd7930420ccb0e75c78112270ca5c8b61b374294f53c0cb3a + version: 4.3.0 + resolution: "loader-runner@npm:4.3.0" + checksum: a90e00dee9a16be118ea43fec3192d0b491fe03a32ed48a4132eb61d498f5536a03a1315531c19d284392a8726a4ecad71d82044c28d7f22ef62e029bf761569 languageName: node linkType: hard @@ -28798,13 +27124,13 @@ __metadata: linkType: hard "loader-utils@npm:^2.0.0": - version: 2.0.0 - resolution: "loader-utils@npm:2.0.0" + version: 2.0.2 + resolution: "loader-utils@npm:2.0.2" dependencies: big.js: ^5.2.2 emojis-list: ^3.0.0 json5: ^2.1.2 - checksum: 6856423131b50b6f5f259da36f498cfd7fc3c3f8bb17777cf87fdd9159e797d4ba4288d9a96415fd8da62c2906960e88f74711dee72d03a9003bddcd0d364a51 + checksum: 9078d1ed47cadc57f4c6ddbdb2add324ee7da544cea41de3b7f1128e8108fcd41cd3443a85b7ee8d7d8ac439148aa221922774efe4cf87506d4fb054d5889303 languageName: node linkType: hard @@ -29188,9 +27514,9 @@ __metadata: linkType: hard "longest-streak@npm:^3.0.0": - version: 3.0.0 - resolution: "longest-streak@npm:3.0.0" - checksum: 02de69d43c25dc0bd7f617052201ec0746f6060acefd1dd10e579d89ec996177702c92e3b526f0c88a1823988c62cd537b17cac65693f49d8af076f1ac016364 + version: 3.0.1 + resolution: "longest-streak@npm:3.0.1" + checksum: 3b59c4c04ce3c70f137e339c10d574026fa3a711c45dc0e69a63a2c0ac981e57f837e1d5b64b991eee5234c4fa46fa10886a20626fb739ed3b04b77bcf6d14a8 languageName: node linkType: hard @@ -29269,16 +27595,9 @@ __metadata: linkType: hard "lru-cache@npm:^7.10.1, lru-cache@npm:^7.4.4, lru-cache@npm:^7.5.1, lru-cache@npm:^7.7.1": - version: 7.10.1 - resolution: "lru-cache@npm:7.10.1" - checksum: e8b190d71ed0fcd7b29c71a3e9b01f851c92d1ef8865ff06b5581ca991db1e5e006920ed4da8b56da1910664ed51abfd76c46fb55e82ac252ff6c970ff910d72 - languageName: node - linkType: hard - -"lru-cache@npm:^7.3.1": - version: 7.3.1 - resolution: "lru-cache@npm:7.3.1" - checksum: 34bb50c015ffc29fd83545e912f28cea6e03fbf41c497fa220c4f131b990f9ddf95babac98745b416cbc6c0d835254d61668d09b8a4ecb476934546afc9e51bd + version: 7.14.0 + resolution: "lru-cache@npm:7.14.0" + checksum: efdd329f2c1bb790b71d497c6c59272e6bc2d7dd060ba55fc136becd3dd31fc8346edb446275504d94cb60d3c8385dbf5267b79b23789e409b2bdf302d13f0d7 languageName: node linkType: hard @@ -29303,14 +27622,7 @@ __metadata: languageName: node linkType: hard -"luxon@npm:^3.0.0": - version: 3.0.1 - resolution: "luxon@npm:3.0.1" - checksum: aa966eb919bf95b1bd819cda784d1f6f66e3fb65bd9ec7bf68b6a978eeb4e3e14f7e2275021b473f93b15b6b7ba2e5a30471e53add3929a7e695fcfd6dd40ec8 - languageName: node - linkType: hard - -"luxon@npm:^3.0.3": +"luxon@npm:^3.0.0, luxon@npm:^3.0.3": version: 3.0.3 resolution: "luxon@npm:3.0.3" checksum: 67d143f102f520761c4202086579a5cf30b230ea299da27cacb31e9f9d372cadef90f14cbe7e2621b70825b267fe00128b8176ed8b7172b48f77a403a662d5aa @@ -29327,20 +27639,20 @@ __metadata: linkType: hard "magic-string@npm:^0.25.7": - version: 0.25.7 - resolution: "magic-string@npm:0.25.7" + version: 0.25.9 + resolution: "magic-string@npm:0.25.9" dependencies: - sourcemap-codec: ^1.4.4 - checksum: 727a1fb70f9610304fe384f1df0251eb7d1d9dd779c07ef1225690361b71b216f26f5d934bfb11c919b5b0e7ba50f6240c823a6f2e44cfd33d4a07d7747ca829 + sourcemap-codec: ^1.4.8 + checksum: 9a0e55a15c7303fc360f9572a71cffba1f61451bc92c5602b1206c9d17f492403bf96f946dfce7483e66822d6b74607262e24392e87b0ac27b786e69a40e9b1a languageName: node linkType: hard "magic-string@npm:^0.26.1": - version: 0.26.1 - resolution: "magic-string@npm:0.26.1" + version: 0.26.3 + resolution: "magic-string@npm:0.26.3" dependencies: sourcemap-codec: ^1.4.8 - checksum: 23f21f5734346ddfbabd7b9834e3ecda3521e3e1db81166c1513b45b729489bbed1eafa8cd052c7db7fdc7c68ebc5c03bc00dd5a23697edda15dbecaf8c98397 + checksum: e72c9b3d90ccbde088acc5937109f73fa4be8b6a2c2ea9bf9c3c01974f1ebf09842259a74ff2ba4081008a7d49941d883cfef8c460e6c33a6eb564b58482b750 languageName: node linkType: hard @@ -29370,31 +27682,7 @@ __metadata: languageName: node linkType: hard -"make-fetch-happen@npm:^10.0.1": - version: 10.0.2 - resolution: "make-fetch-happen@npm:10.0.2" - dependencies: - agentkeepalive: ^4.2.0 - cacache: ^15.3.0 - http-cache-semantics: ^4.1.0 - http-proxy-agent: ^5.0.0 - https-proxy-agent: ^5.0.0 - is-lambda: ^1.0.1 - lru-cache: ^7.3.1 - minipass: ^3.1.6 - minipass-collect: ^1.0.2 - minipass-fetch: ^1.4.1 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - negotiator: ^0.6.3 - promise-retry: ^2.0.1 - socks-proxy-agent: ^6.1.1 - ssri: ^8.0.1 - checksum: 5a620f84ab9e28673f70b0640b15133cb329ca4dbeec17e24b5029f07b134c52d96ebac150cab99979c48c5e6e99056978ed0321e4ce1e22a4d4d6fc7148c2fd - languageName: node - linkType: hard - -"make-fetch-happen@npm:^10.0.3": +"make-fetch-happen@npm:^10.0.1, make-fetch-happen@npm:^10.0.3, make-fetch-happen@npm:^10.0.6": version: 10.2.1 resolution: "make-fetch-happen@npm:10.2.1" dependencies: @@ -29418,30 +27706,6 @@ __metadata: languageName: node linkType: hard -"make-fetch-happen@npm:^10.0.6": - version: 10.1.7 - resolution: "make-fetch-happen@npm:10.1.7" - dependencies: - agentkeepalive: ^4.2.1 - cacache: ^16.1.0 - http-cache-semantics: ^4.1.0 - http-proxy-agent: ^5.0.0 - https-proxy-agent: ^5.0.0 - is-lambda: ^1.0.1 - lru-cache: ^7.7.1 - minipass: ^3.1.6 - minipass-collect: ^1.0.2 - minipass-fetch: ^2.0.3 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - negotiator: ^0.6.3 - promise-retry: ^2.0.1 - socks-proxy-agent: ^7.0.0 - ssri: ^9.0.0 - checksum: 2b7301256e18a2f825c1c3cad14e11492428531ecdea04d846dc12c2d69658d65832746ce965e67c7f98b0d0506115674cf43676c3322709278620bfc886cf4a - languageName: node - linkType: hard - "make-fetch-happen@npm:^8.0.9": version: 8.0.14 resolution: "make-fetch-happen@npm:8.0.14" @@ -29465,7 +27729,7 @@ __metadata: languageName: node linkType: hard -"make-fetch-happen@npm:^9.1.0": +"make-fetch-happen@npm:^9.0.1, make-fetch-happen@npm:^9.1.0": version: 9.1.0 resolution: "make-fetch-happen@npm:9.1.0" dependencies: @@ -29489,12 +27753,12 @@ __metadata: languageName: node linkType: hard -"makeerror@npm:1.0.x": - version: 1.0.11 - resolution: "makeerror@npm:1.0.11" +"makeerror@npm:1.0.12": + version: 1.0.12 + resolution: "makeerror@npm:1.0.12" dependencies: - tmpl: 1.0.x - checksum: 9a62ec2d9648c5329fdc4bc7d779a7305f32b1e55422a4f14244bc890bb43287fe013eb8d965e92a0cf4c443f3e59265b1fc3125eaedb0c2361e28b1a8de565d + tmpl: 1.0.5 + checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 languageName: node linkType: hard @@ -29536,12 +27800,12 @@ __metadata: linkType: hard "markdown-it-anchor@npm:^8.4.1": - version: 8.6.4 - resolution: "markdown-it-anchor@npm:8.6.4" + version: 8.6.5 + resolution: "markdown-it-anchor@npm:8.6.5" peerDependencies: "@types/markdown-it": "*" markdown-it: "*" - checksum: bde310d0202450a228662921df9d9c2e95b3c5762512e8eed1d472fcc812fb20e6b4e98480cda88c8b56b0baf34ac70d6bf8404309c5a2321ebe62da43cd6fe6 + checksum: 9a466279e52e3c04d67f1e706f2c14df9340e64ddac6eaad22ceaeca777e381103caa942464003e98765a7555bd1ccb5055b624565cb4522a7071dce6ae93460 languageName: node linkType: hard @@ -29561,9 +27825,9 @@ __metadata: linkType: hard "markdown-table@npm:^3.0.0": - version: 3.0.1 - resolution: "markdown-table@npm:3.0.1" - checksum: 5376078ab652ba68cf855b33d338b3472d28b9f8c254dc0530261f55490261e861742a8e6625239cbbed08f899cbf0de7d2d1d5de48d3e7c6afd5f0876730227 + version: 3.0.2 + resolution: "markdown-table@npm:3.0.2" + checksum: 7bd9eb54e7ac15165f79730ac6357b8194294552f727bcb34e29f3f1b72823c1220cb61153ebf0962c8faac4d25e49c62e8e9471cd6352a67cdca99928ecade1 languageName: node linkType: hard @@ -29615,9 +27879,9 @@ __metadata: linkType: hard "math-expression-evaluator@npm:^1.2.14": - version: 1.2.22 - resolution: "math-expression-evaluator@npm:1.2.22" - checksum: 97b46e3311025699209d5178ea197e4df8286ac378075f105ab0cbc467f55a926a522a7e5a5ce8fc2d88881b6d32f1e3eacd81f34f265e7907cc5715e0f61a38 + version: 1.4.0 + resolution: "math-expression-evaluator@npm:1.4.0" + checksum: 451c7b734ccb02759980e03f10c63fb3888b6af0253582ae38e8ca7ef037e15b9b2b82ef3476e79ed257694e8eacc9156b44379d3153de8e6c071a4664f70f93 languageName: node linkType: hard @@ -29633,33 +27897,34 @@ __metadata: linkType: hard "mdast-util-definitions@npm:^5.0.0": - version: 5.1.0 - resolution: "mdast-util-definitions@npm:5.1.0" + version: 5.1.1 + resolution: "mdast-util-definitions@npm:5.1.1" dependencies: "@types/mdast": ^3.0.0 "@types/unist": ^2.0.0 - unist-util-visit: ^3.0.0 - checksum: a5237dc5925d965ec5f4c237b8d2fbc4728c18402f4f0cea0c947fb6241d7f2c7264b8bd5000363800388003d1474d57f5d5d29e0605a504bd186e59ddf8906a + unist-util-visit: ^4.0.0 + checksum: f8025e2c35f6f8641528037abe18f492ef100e00a48c92cf78b7a313f9ccdb0e30c6aed0b40539767a3f425be09e78cb0f2f9bc4131fff41ea4664a1a7314a14 languageName: node linkType: hard "mdast-util-find-and-replace@npm:^2.0.0": - version: 2.1.0 - resolution: "mdast-util-find-and-replace@npm:2.1.0" + version: 2.2.1 + resolution: "mdast-util-find-and-replace@npm:2.2.1" dependencies: escape-string-regexp: ^5.0.0 unist-util-is: ^5.0.0 - unist-util-visit-parents: ^4.0.0 - checksum: 2df955899edb71fdd9f09a639572b281ec6e9be1533469cdbd7f1f16232a576adbd423f914182684f9516897143a5a797c45182848c0f83807d2c30a582a3c03 + unist-util-visit-parents: ^5.0.0 + checksum: 9b23a6858b55cd63d0af27057efe3a6130a6f89b683a3cde76c9b93b5e20525e1eebedd8a8da391f7e99443e9dcbf2c0023c3a197766090daeee0ebf92a21fde languageName: node linkType: hard "mdast-util-from-markdown@npm:^1.0.0": - version: 1.0.2 - resolution: "mdast-util-from-markdown@npm:1.0.2" + version: 1.2.0 + resolution: "mdast-util-from-markdown@npm:1.2.0" dependencies: "@types/mdast": ^3.0.0 "@types/unist": ^2.0.0 + decode-named-character-reference: ^1.0.0 mdast-util-to-string: ^3.1.0 micromark: ^3.0.0 micromark-util-decode-numeric-character-reference: ^1.0.0 @@ -29667,9 +27932,9 @@ __metadata: micromark-util-normalize-identifier: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - parse-entities: ^3.0.0 unist-util-stringify-position: ^3.0.0 - checksum: 6127a541ac09f41bd988388f40ac7952b9a1a2b0309de79341ffe2a3c0e6875a827831c13a3dd4af81cbedf873f7d28e4a01d4be529a02adf177956f56363e13 + uvu: ^0.5.0 + checksum: fadc3521a3d95f4adbadad462ca27c28b3bfe08740ae158dc0c4a22329bf5593254d98b8fd4024ecad8c47c77ec275454dfacfb907ff1b98ff8f5de25c716d40 languageName: node linkType: hard @@ -29686,63 +27951,66 @@ __metadata: linkType: hard "mdast-util-gfm-footnote@npm:^1.0.0": - version: 1.0.0 - resolution: "mdast-util-gfm-footnote@npm:1.0.0" + version: 1.0.1 + resolution: "mdast-util-gfm-footnote@npm:1.0.1" dependencies: "@types/mdast": ^3.0.0 - mdast-util-to-markdown: ^1.0.0 + mdast-util-to-markdown: ^1.3.0 micromark-util-normalize-identifier: ^1.0.0 - unist-util-visit: ^4.0.0 - checksum: 45af2e4fee5cf425f285ac4252871630eda6e0b284babc3458495521fdeff26fcbd9b310618900ca80338c299635413c16600934a4ed5c483f8e0f4f6c812223 + checksum: 4caf69058b438c9e34004acfb1d2b20d58306898d760b889f73d27ed5702cd940be9fcb2a08f6e58b8d9d8e2b1c886c549cd7d23b659da5fb2ed87a22f44c13c languageName: node linkType: hard "mdast-util-gfm-strikethrough@npm:^1.0.0": - version: 1.0.0 - resolution: "mdast-util-gfm-strikethrough@npm:1.0.0" + version: 1.0.1 + resolution: "mdast-util-gfm-strikethrough@npm:1.0.1" dependencies: - "@types/mdast": ^3.0.3 - mdast-util-to-markdown: ^1.0.0 - checksum: 4e57d6957673493860ea602031861b0a3bb1daf204d07a2ec521b8238beba6e6d9f700f53503afd6ce9aad81d8edafeba7c307761090a3db05094ffbdad421f4 + "@types/mdast": ^3.0.0 + mdast-util-to-markdown: ^1.3.0 + checksum: ce81222ab4c130516278f8db57be23bd529e9f8c30bb16ab5b2bf294c0dfd57f2dc7a010deede65f349a8d37be73f90dbaecd962f76f70befa8f43bcd32fe5b9 languageName: node linkType: hard "mdast-util-gfm-table@npm:^1.0.0": - version: 1.0.1 - resolution: "mdast-util-gfm-table@npm:1.0.1" + version: 1.0.6 + resolution: "mdast-util-gfm-table@npm:1.0.6" dependencies: + "@types/mdast": ^3.0.0 markdown-table: ^3.0.0 - mdast-util-to-markdown: ^1.0.0 - checksum: 5b1fd47402c914d12f54fe588d7cb658e396ca63c3b2bc3ee771386bc671ba729ca7018ce2e5e8abdaf021ce4f72f49348c82226ee3d54ebe0620174ade70caa + mdast-util-from-markdown: ^1.0.0 + mdast-util-to-markdown: ^1.3.0 + checksum: 1b0469d9a9c9ca2f8d7cbd46f660963bb98984cb9b2b7e25dba05c0ea2743cc9fc46fbbfdb046735b84a3c67445f13c655dc449cefa5d38646c2edf944201f50 languageName: node linkType: hard "mdast-util-gfm-task-list-item@npm:^1.0.0": - version: 1.0.0 - resolution: "mdast-util-gfm-task-list-item@npm:1.0.0" + version: 1.0.1 + resolution: "mdast-util-gfm-task-list-item@npm:1.0.1" dependencies: - "@types/mdast": ^3.0.3 - mdast-util-to-markdown: ^1.0.0 - checksum: 7771c08a9cc03f58fff59d00af9ddc3aab6f64d85192186c344df4937a03809acd38189f1c8a05860026b9149a6953959e80a291a770d89d88eae92ef49ad463 + "@types/mdast": ^3.0.0 + mdast-util-to-markdown: ^1.3.0 + checksum: 9bb0f162532f8e11e571802ed19301572479fe9507652c8fb3f648279bbde3baa9f6377d9492dbba61eedd96755f8aff9c7c259287875544fb751907d79da69e languageName: node linkType: hard "mdast-util-gfm@npm:^2.0.0": - version: 2.0.0 - resolution: "mdast-util-gfm@npm:2.0.0" + version: 2.0.1 + resolution: "mdast-util-gfm@npm:2.0.1" dependencies: + mdast-util-from-markdown: ^1.0.0 mdast-util-gfm-autolink-literal: ^1.0.0 mdast-util-gfm-footnote: ^1.0.0 mdast-util-gfm-strikethrough: ^1.0.0 mdast-util-gfm-table: ^1.0.0 mdast-util-gfm-task-list-item: ^1.0.0 - checksum: 70c35ee810b15895adef654ccb7d12bf633eb03105e56a0d0acca693d5f81c9819073262f9ab98fb1c7059eabbc0c658a05dd60c48ed9e1e8d5d7ea0d91e5c00 + mdast-util-to-markdown: ^1.0.0 + checksum: 8b39e6694521094ae28d12cbeff074ef3ec3f7f7ec59fbddd4e8a45a275e092c6ba6ecee4c720938eb3ee072ebd41d743b08cc0ab9171612a5aeddc1e78ae882 languageName: node linkType: hard "mdast-util-to-hast@npm:^12.1.0": - version: 12.1.1 - resolution: "mdast-util-to-hast@npm:12.1.1" + version: 12.2.2 + resolution: "mdast-util-to-hast@npm:12.2.2" dependencies: "@types/hast": ^2.0.0 "@types/mdast": ^3.0.0 @@ -29750,17 +28018,18 @@ __metadata: mdast-util-definitions: ^5.0.0 mdurl: ^1.0.0 micromark-util-sanitize-uri: ^1.0.0 + trim-lines: ^3.0.0 unist-builder: ^3.0.0 unist-util-generated: ^2.0.0 unist-util-position: ^4.0.0 unist-util-visit: ^4.0.0 - checksum: 4c5a73e0463493d5ab2c033d42f8daead24d0808969bf21c3a720786784a347cedc1d3ae26b37737dbe3ea0839bc130bf7e20f3bc02e2387e6e7b0a5f94bafe4 + checksum: 94275d2cbc617317846033728c89997780e49f3da680e176dcfe8fdb051a9a20f421af4f7f8609381606c9c494287b3d1f5b32fdb843c7cf4f6f7d19e0370f18 languageName: node linkType: hard -"mdast-util-to-markdown@npm:^1.0.0": - version: 1.2.3 - resolution: "mdast-util-to-markdown@npm:1.2.3" +"mdast-util-to-markdown@npm:^1.0.0, mdast-util-to-markdown@npm:^1.3.0": + version: 1.3.0 + resolution: "mdast-util-to-markdown@npm:1.3.0" dependencies: "@types/mdast": ^3.0.0 "@types/unist": ^2.0.0 @@ -29769,7 +28038,7 @@ __metadata: micromark-util-decode-string: ^1.0.0 unist-util-visit: ^4.0.0 zwitch: ^2.0.0 - checksum: 2a904f8af5dfe75650eda59e7f1b728c0dfb54fb37698274e78e99383b692aaba9d1a75092150960224b844b3a78cbdf813b31b2101d267159b7a43d56f58f3e + checksum: 0ea4fc11b7a49b15d400d50044429c45222cb9bc583553288c7c54704d051f25049233817129ba56a6f581f1e20916e5c540870a80987318747a95b44a36ba3e languageName: node linkType: hard @@ -29802,16 +28071,16 @@ __metadata: linkType: hard "mem-fs-editor@npm:^8.1.2 || ^9.0.0": - version: 9.3.0 - resolution: "mem-fs-editor@npm:9.3.0" + version: 9.5.0 + resolution: "mem-fs-editor@npm:9.5.0" dependencies: binaryextensions: ^4.16.0 commondir: ^1.0.1 deep-extend: ^0.6.0 - ejs: ^3.1.6 - globby: ^11.0.3 + ejs: ^3.1.8 + globby: ^11.1.0 isbinaryfile: ^4.0.8 - minimatch: ^3.0.4 + minimatch: ^3.1.2 multimatch: ^5.0.0 normalize-path: ^3.0.0 textextensions: ^5.13.0 @@ -29820,7 +28089,7 @@ __metadata: peerDependenciesMeta: mem-fs: optional: true - checksum: ec61cbded585b61efaf5b04a6d9eb8e96bb2ce7baeeae98443e2ec7e0cb22a060af98f5fb4edd5d8fcfbd05eff0396b0b5d6929d3add4f65eed7616ef94a272a + checksum: 65919d02f596c14245cc75f0493e0221973753ce9bd490b6eb47026e7d64cb18cb17c8760441c65c56c51d83bf6fbc2e6c0a858fa162dfd2054ee3d0210d3579 languageName: node linkType: hard @@ -29836,12 +28105,12 @@ __metadata: languageName: node linkType: hard -"memfs@npm:^3.1.2, memfs@npm:^3.4.1": - version: 3.4.1 - resolution: "memfs@npm:3.4.1" +"memfs@npm:^3.1.2, memfs@npm:^3.4.1, memfs@npm:^3.4.3": + version: 3.4.7 + resolution: "memfs@npm:3.4.7" dependencies: - fs-monkey: 1.0.3 - checksum: 6d2f49d447d1be24ff9c747618933784eeb059189bc6a0d77b7a51c7daf06e2d3a74674a2e2ff1520e2c312bf91e719ed37144cf05087379b3ba0aef0b6aa062 + fs-monkey: ^1.0.3 + checksum: fab88266dc576dc4999e38bdf531d703fb798affac2e0dd3fc17470878486844027b2766008ba80c0103b443f52cf9068a5c00f4e1ecf04106f4b29c11855822 languageName: node linkType: hard @@ -29911,14 +28180,7 @@ __metadata: languageName: node linkType: hard -"merge2@npm:^1.3.0": - version: 1.3.0 - resolution: "merge2@npm:1.3.0" - checksum: bff71d47cd8c01edf2222f205f1c312cae0082e2c05b06123b0990605447dc395208367bb1d1635caec6083d3e6bb0756df05ac24cdc15cb630d5af6daa8eb7c - languageName: node - linkType: hard - -"merge2@npm:^1.4.1": +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": version: 1.4.1 resolution: "merge2@npm:1.4.1" checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 @@ -29933,14 +28195,14 @@ __metadata: linkType: hard "meros@npm:^1.1.4": - version: 1.1.4 - resolution: "meros@npm:1.1.4" + version: 1.2.0 + resolution: "meros@npm:1.2.0" peerDependencies: "@types/node": ">=12" peerDependenciesMeta: "@types/node": optional: true - checksum: f85f33ea05a0e20598f034696b477924254b742b6d81f77c8bbd7dee1f875656a3d98a1a2a988c481fef7de5c313715ee409b3cb3058ae6c4fe16a7f2fc598a3 + checksum: 95ec2dc352ad4ffe7a8572676d0399e8cfe67bb3ebe03ce5b03ebb4d990527994528260ff47a7efedc1348a8ee46bfe782564127bd1566d4790e1189b0a1ed29 languageName: node linkType: hard @@ -29983,20 +28245,21 @@ __metadata: linkType: hard "micromark-extension-gfm-autolink-literal@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-extension-gfm-autolink-literal@npm:1.0.0" + version: 1.0.3 + resolution: "micromark-extension-gfm-autolink-literal@npm:1.0.3" dependencies: micromark-util-character: ^1.0.0 micromark-util-sanitize-uri: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - checksum: 8cefa45928ba2fdb6c572c6912214aa533e762ec4287fb5d47b6e2f92eb6a907c80e24e134b44b2b8ab9cac2a94d930c9c1f74a56a152a5daab23486e0a6a13f + uvu: ^0.5.0 + checksum: bb181972ac346ca73ca1ab0b80b80c9d6509ed149799d2217d5442670f499c38a94edff73d32fa52b390d89640974cfbd7f29e4ad7d599581d5e1cabcae636a2 languageName: node linkType: hard "micromark-extension-gfm-footnote@npm:^1.0.0": - version: 1.0.3 - resolution: "micromark-extension-gfm-footnote@npm:1.0.3" + version: 1.0.4 + resolution: "micromark-extension-gfm-footnote@npm:1.0.4" dependencies: micromark-core-commonmark: ^1.0.0 micromark-factory-space: ^1.0.0 @@ -30004,54 +28267,58 @@ __metadata: micromark-util-normalize-identifier: ^1.0.0 micromark-util-sanitize-uri: ^1.0.0 micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 uvu: ^0.5.0 - checksum: 81aaf12d23ed73df405639d94896b9840ba8854c2490ae0b33b7f05b39635a71dfde27a98bce278092293bc5e4b268b7092fd2596ceb6c1c5ba45143e4e8fbf2 + checksum: 8daa203f5cf753338d5ecdbaae6b3ab6319d34b6013b90ea6860bed299418cecf86e69e48dabe42562e334760c738c77c5acdb47e75ae26f5f01f02f3bf0952d languageName: node linkType: hard "micromark-extension-gfm-strikethrough@npm:^1.0.0": - version: 1.0.1 - resolution: "micromark-extension-gfm-strikethrough@npm:1.0.1" + version: 1.0.4 + resolution: "micromark-extension-gfm-strikethrough@npm:1.0.4" dependencies: micromark-util-chunked: ^1.0.0 micromark-util-classify-character: ^1.0.0 micromark-util-resolve-all: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - checksum: 720aa4e47ac4701faf5640be40a97a249b880d5f8f2787106a0d12bd11dd8ab9e29a513af738743be07d42a02734e024184114b719435160e012c4ba9f7464bd + uvu: ^0.5.0 + checksum: f43d316b85fe93df1711cdcdc99a5320b941239349234bd262fc708cb67ad47bdfb41d1a7ebe2a5829816b0e9d3107380a5c1e558cb536a75354cbe4857823ba languageName: node linkType: hard "micromark-extension-gfm-table@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-extension-gfm-table@npm:1.0.0" + version: 1.0.5 + resolution: "micromark-extension-gfm-table@npm:1.0.5" dependencies: micromark-factory-space: ^1.0.0 micromark-util-character: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - checksum: 0c489daa32b9fc812b3f52f051fe38dab91e52f59791050b422f4ee141936747a14ad26a05d834b2e398f4c0a22b34a3106d914b1e2accf6dc5b3b16ccf35680 + uvu: ^0.5.0 + checksum: f0aab3b4333cc24b1534b08dc4cce986dd606df8b7ed913e5a1de9fe2d3ae67b2435663c0bc271b528874af4928e580e1ad540ea9117d7f2d74edb28859c97ef languageName: node linkType: hard "micromark-extension-gfm-tagfilter@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-extension-gfm-tagfilter@npm:1.0.0" + version: 1.0.1 + resolution: "micromark-extension-gfm-tagfilter@npm:1.0.1" dependencies: micromark-util-types: ^1.0.0 - checksum: 8a5988f46a7ce39c15e45ead46a7890dd3a9903c6c50f6d6f4e5a7b95c04042654728a7921f1224001f274059c9fefd3c65e63eff67a1299e19d94fff83e0457 + checksum: 63e8d68f25871722900a67a8001d5da21f19ea707f3566fc7d0b2eb1f6d52476848bb6a41576cf22470565124af9497c5aae842355faa4c14ec19cb1847e71ec languageName: node linkType: hard "micromark-extension-gfm-task-list-item@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-extension-gfm-task-list-item@npm:1.0.0" + version: 1.0.3 + resolution: "micromark-extension-gfm-task-list-item@npm:1.0.3" dependencies: micromark-factory-space: ^1.0.0 micromark-util-character: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - checksum: a8bc41ce4c5599cde45804737381ca5136b43c64c05034e396e476958232916d3bc23e585d3f71c59f03666c568bced41f177a76497267259b813ab4987dd3a5 + uvu: ^0.5.0 + checksum: d320b0c5301f87e211c06a2330d1ee0fee6da14f0d6d44d5211055b465dadff34390cd6b258a5e0ca376fcda3364fef9a12fe6e26a0c858231fa3b98ddbf7785 languageName: node linkType: hard @@ -30083,13 +28350,14 @@ __metadata: linkType: hard "micromark-factory-label@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-factory-label@npm:1.0.0" + version: 1.0.2 + resolution: "micromark-factory-label@npm:1.0.2" dependencies: micromark-util-character: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - checksum: 37f34d8e42e3a606a636419ffe0f99fd7f6054778365aac56d1cc11585d1cd46000dbf938319abb2ea5e245803679d3cfa46afb5aecf2702bfd963113481f14c + uvu: ^0.5.0 + checksum: 957e9366bdc8dbc1437c0706ff96972fa985ab4b1274abcae12f6094f527cbf5c69e7f2304c23c7f4b96e311ff7911d226563b8b43dcfcd4091e8c985fb97ce6 languageName: node linkType: hard @@ -30104,14 +28372,15 @@ __metadata: linkType: hard "micromark-factory-title@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-factory-title@npm:1.0.0" + version: 1.0.2 + resolution: "micromark-factory-title@npm:1.0.2" dependencies: micromark-factory-space: ^1.0.0 micromark-util-character: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - checksum: d9bf0779c49f013fea5fc5daadcee91e1703c81c1b5091337e806c24f1ea224d69f534d174aba2eccff7826620af71bb3db83b1caf14cbb89bea53f4e8e38bc3 + uvu: ^0.5.0 + checksum: 9a9cf66babde0bad1e25d6c1087082bfde6dfc319a36cab67c89651cc1a53d0e21cdec83262b5a4c33bff49f0e3c8dc2a7bd464e991d40dbea166a8f9b37e5b2 languageName: node linkType: hard @@ -30177,27 +28446,28 @@ __metadata: linkType: hard "micromark-util-decode-string@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-util-decode-string@npm:1.0.0" + version: 1.0.2 + resolution: "micromark-util-decode-string@npm:1.0.2" dependencies: + decode-named-character-reference: ^1.0.0 micromark-util-character: ^1.0.0 micromark-util-decode-numeric-character-reference: ^1.0.0 - parse-entities: ^3.0.0 - checksum: 9c7e6e3950e675f39058935e065e8774a1ef26a0d386eb45abd96fb8c0312c8a72464c672f41a3c7668974ac2a7cb2ad23b84eee3775b0bd4c47947d9fc64888 + micromark-util-symbol: ^1.0.0 + checksum: 2dbb41c9691cc71505d39706405139fb7d6699429d577a524c7c248ac0cfd09d3dd212ad8e91c143a00b2896f26f81136edc67c5bda32d20446f0834d261b17a languageName: node linkType: hard "micromark-util-encode@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-util-encode@npm:1.0.0" - checksum: 16985a6b355721307553d1893da364e83144ef068f84978071a9b4b3d884b65c3138f8330fb039aac10f75766b4906e03c5e62baafb1bf5e731f959878277712 + version: 1.0.1 + resolution: "micromark-util-encode@npm:1.0.1" + checksum: 9290583abfdc79ea3e7eb92c012c47a0e14327888f8aaa6f57ff79b3058d8e7743716b9d91abca3646f15ab3d78fdad9779fdb4ccf13349cd53309dfc845253a languageName: node linkType: hard "micromark-util-html-tag-name@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-util-html-tag-name@npm:1.0.0" - checksum: ed07ce9b9bb30cc4ea57f733089b3a253a6132c0608ccfc105eadb32f1f80bbd2347bf8a74f897fe039d7805a59f602fd4dd15f6adc7926d40b3646da2888d0f + version: 1.1.0 + resolution: "micromark-util-html-tag-name@npm:1.1.0" + checksum: a9b783cec89ec813648d59799464c1950fe281ae797b2a965f98ad0167d7fa1a247718eff023b4c015f47211a172f9446b8e6b98aad50e3cd44a3337317dad2c languageName: node linkType: hard @@ -30231,36 +28501,38 @@ __metadata: linkType: hard "micromark-util-subtokenize@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-util-subtokenize@npm:1.0.0" + version: 1.0.2 + resolution: "micromark-util-subtokenize@npm:1.0.2" dependencies: micromark-util-chunked: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - checksum: 58272616564c0c91b8c38e4c3e4516489d90eba3a82ff8dc946e7af0fb8b7828618d1e260c090cdcde5ca4c2d2b772e8506535e6af154653db974485ce4f3fa0 + uvu: ^0.5.0 + checksum: c32ee58a7e1384ab1161a9ee02fbb04ad7b6e96d0b8c93dba9803c329a53d07f22ab394c7a96b2e30d6b8fbe3585b85817dba07277b1317111fc234e166bd2d1 languageName: node linkType: hard "micromark-util-symbol@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-util-symbol@npm:1.0.0" - checksum: 704e30468efcfd52cefc077981e3502620c9cbef8b2395ec4d556893ac4ab76531c1be1c4edd78c8d71526d4e4b404e3bad131cf6832dc19366f3ab3f81cd815 + version: 1.0.1 + resolution: "micromark-util-symbol@npm:1.0.1" + checksum: c6a3023b3a7432c15864b5e33a1bcb5042ac7aa097f2f452e587bef45433d42d39e0a5cce12fbea91e0671098ba0c3f62a2b30ce1cde66ecbb5e8336acf4391d languageName: node linkType: hard "micromark-util-types@npm:^1.0.0, micromark-util-types@npm:^1.0.1": - version: 1.0.1 - resolution: "micromark-util-types@npm:1.0.1" - checksum: 5da351efe8e7e6e341a6a0d6396846a484a5ee1406eddb7da1541f22f29035c1574e481bc159e15fe032c42afcf85e699f37257b89d7f43872d7b89efd1682a0 + version: 1.0.2 + resolution: "micromark-util-types@npm:1.0.2" + checksum: 08dc901b7c06ee3dfeb54befca05cbdab9525c1cf1c1080967c3878c9e72cb9856c7e8ff6112816e18ead36ce6f99d55aaa91560768f2f6417b415dcba1244df languageName: node linkType: hard "micromark@npm:^3.0.0": - version: 3.0.5 - resolution: "micromark@npm:3.0.5" + version: 3.0.10 + resolution: "micromark@npm:3.0.10" dependencies: "@types/debug": ^4.0.0 debug: ^4.0.0 + decode-named-character-reference: ^1.0.0 micromark-core-commonmark: ^1.0.1 micromark-factory-space: ^1.0.0 micromark-util-character: ^1.0.0 @@ -30274,8 +28546,8 @@ __metadata: micromark-util-subtokenize: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.1 - parse-entities: ^3.0.0 - checksum: 613208b6e7e967e7da0c773950d25acc7154e9bfedfe66a4946c77f34d95ef1c7c08cc9a31142cdf4d84ccbfab310fece15f74dae1f1f70348390266ede26ebf + uvu: ^0.5.0 + checksum: 04663fe0308cccfbf338111b41d3d82d6445d1d2b834c9fc1880e1ea3874c4a3b81adfafe62b0bc7708ba0a86889885ea31b4dbb39f1f72190c3aab46b743bb1 languageName: node linkType: hard @@ -30545,8 +28817,8 @@ __metadata: linkType: hard "minipass-fetch@npm:^2.0.3": - version: 2.1.0 - resolution: "minipass-fetch@npm:2.1.0" + version: 2.1.2 + resolution: "minipass-fetch@npm:2.1.2" dependencies: encoding: ^0.1.13 minipass: ^3.1.6 @@ -30555,7 +28827,7 @@ __metadata: dependenciesMeta: encoding: optional: true - checksum: 1334732859a3f7959ed22589bafd9c40384b885aebb5932328071c33f86b3eb181d54c86919675d1825ab5f1c8e4f328878c863873258d113c29d79a4b0c9c9f + checksum: 3f216be79164e915fc91210cea1850e488793c740534985da017a4cbc7a5ff50506956d0f73bb0cb60e4fe91be08b6b61ef35101706d3ef5da2c8709b5f08f91 languageName: node linkType: hard @@ -30596,25 +28868,7 @@ __metadata: languageName: node linkType: hard -"minipass@npm:*": - version: 3.3.4 - resolution: "minipass@npm:3.3.4" - dependencies: - yallist: ^4.0.0 - checksum: 5d95a7738c54852ba78d484141e850c792e062666a2d0c681a5ac1021275beb7e1acb077e59f9523ff1defb80901aea4e30fac10ded9a20a25d819a42916ef1b - languageName: node - linkType: hard - -"minipass@npm:^3.0.0, minipass@npm:^3.1.0, minipass@npm:^3.1.1, minipass@npm:^3.1.3, minipass@npm:^3.1.6": - version: 3.1.6 - resolution: "minipass@npm:3.1.6" - dependencies: - yallist: ^4.0.0 - checksum: 57a04041413a3531a65062452cb5175f93383ef245d6f4a2961d34386eb9aa8ac11ac7f16f791f5e8bbaf1dfb1ef01596870c88e8822215db57aa591a5bb0a77 - languageName: node - linkType: hard - -"minipass@npm:^3.3.5": +"minipass@npm:^3.0.0, minipass@npm:^3.1.0, minipass@npm:^3.1.1, minipass@npm:^3.1.3, minipass@npm:^3.1.6, minipass@npm:^3.3.5": version: 3.3.5 resolution: "minipass@npm:3.3.5" dependencies: @@ -30650,14 +28904,7 @@ __metadata: languageName: node linkType: hard -"mkdirp-classic@npm:^0.5.2": - version: 0.5.2 - resolution: "mkdirp-classic@npm:0.5.2" - checksum: 771d69e289bbf1a14390d7971aac8c80182caea55ebab58f9d84fd8ad989fcdee6a13a03506393ef6287ec60359ebb97994e4fea0628369c422f5d4aaa579f42 - languageName: node - linkType: hard - -"mkdirp-classic@npm:^0.5.3": +"mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3": version: 0.5.3 resolution: "mkdirp-classic@npm:0.5.3" checksum: 3f4e088208270bbcc148d53b73e9a5bd9eef05ad2cbf3b3d0ff8795278d50dd1d11a8ef1875ff5aea3fa888931f95bfcb2ad5b7c1061cfefd6284d199e6776ac @@ -30683,13 +28930,13 @@ __metadata: linkType: hard "mkdirp@npm:^0.5.1": - version: 0.5.5 - resolution: "mkdirp@npm:0.5.5" + version: 0.5.6 + resolution: "mkdirp@npm:0.5.6" dependencies: - minimist: ^1.2.5 + minimist: ^1.2.6 bin: mkdirp: bin/cmd.js - checksum: 3bce20ea525f9477befe458ab85284b0b66c8dc3812f94155af07c827175948cdd8114852ac6c6d82009b13c1048c37f6d98743eb019651ee25c39acc8aabe7d + checksum: 0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 languageName: node linkType: hard @@ -30836,11 +29083,11 @@ __metadata: linkType: hard "msw@npm:^0.47.0": - version: 0.47.0 - resolution: "msw@npm:0.47.0" + version: 0.47.3 + resolution: "msw@npm:0.47.3" dependencies: "@mswjs/cookies": ^0.2.2 - "@mswjs/interceptors": ^0.17.2 + "@mswjs/interceptors": ^0.17.5 "@open-draft/until": ^1.0.3 "@types/cookie": ^0.4.1 "@types/js-levenshtein": ^1.1.1 @@ -30848,7 +29095,7 @@ __metadata: chokidar: ^3.4.2 cookie: ^0.4.2 graphql: ^15.0.0 || ^16.0.0 - headers-polyfill: ^3.0.4 + headers-polyfill: ^3.1.0 inquirer: ^8.2.0 is-node-process: ^1.0.1 js-levenshtein: ^1.1.6 @@ -30866,19 +29113,19 @@ __metadata: optional: true bin: msw: cli/index.js - checksum: d48cd73327da0e44700595ebaaf0b8ee5f1b6c56c081d65ceed52dd8f49b64ce7a6734c84f8ab1093594e0c87b2554b6c35f7f92894c93148540dbfac826c441 + checksum: 1be018c7b2eff982409967cccb5c604e45f65710ee9698bab57fbe794f8426d1a4d33e52b75ef395c6d226948c799241c7c2c7748ec4f5b741e7f25bcbafbd1e languageName: node linkType: hard -"multicast-dns@npm:^7.2.4": - version: 7.2.4 - resolution: "multicast-dns@npm:7.2.4" +"multicast-dns@npm:^7.2.5": + version: 7.2.5 + resolution: "multicast-dns@npm:7.2.5" dependencies: dns-packet: ^5.2.2 thunky: ^1.0.2 bin: multicast-dns: cli.js - checksum: 45a78628a8f26479c4018122d689a8b22aff034699a1913dac0b9891e4111162b3222c85bba642d624270a90e51129607f1e41aa701e0108cc974246bc9fe828 + checksum: 00b8a57df152d4cd0297946320a94b7c3cdf75a46a2247f32f958a8927dea42958177f9b7fdae69fab2e4e033fb3416881af1f5e9055a3e1542888767139e2fb languageName: node linkType: hard @@ -30938,18 +29185,18 @@ __metadata: languageName: node linkType: hard -"nan@npm:^2.14.1, nan@npm:^2.15.0": - version: 2.15.0 - resolution: "nan@npm:2.15.0" +"nan@npm:^2.15.0, nan@npm:^2.16.0": + version: 2.16.0 + resolution: "nan@npm:2.16.0" dependencies: node-gyp: latest - checksum: 33e1bb4dfca447fe37d4bb5889be55de154828632c8d38646db67293a21afd61ed9909cdf1b886214a64707d935926c4e60e2b09de9edfc2ad58de31d6ce8f39 + checksum: cb16937273ea55b01ea47df244094c12297ce6b29b36e845d349f1f7c268b8d7c5abd126a102c5678a1e1afd0d36bba35ea0cc959e364928ce60561c9306064a languageName: node linkType: hard "nano-css@npm:^5.3.1": - version: 5.3.1 - resolution: "nano-css@npm:5.3.1" + version: 5.3.5 + resolution: "nano-css@npm:5.3.5" dependencies: css-tree: ^1.1.2 csstype: ^3.0.6 @@ -30962,7 +29209,7 @@ __metadata: peerDependencies: react: "*" react-dom: "*" - checksum: 45517871e8c15a00769bfc9eb5e466d9c193b0a7423050eb77eb21003a1ccfd13863f01bf68490be830de019f4a0ae945d5b91eb23c5898d341ac8968ba3f18b + checksum: 8d4e59a2a29477221af47320d850a7dcee1ac51774fb5a0dce6ee59b22174c7149f75108235de85559581fbb2b93aa222a2b32ea53c93ba3f5d322c4d098c355 languageName: node linkType: hard @@ -30973,16 +29220,7 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.1.23": - version: 3.3.1 - resolution: "nanoid@npm:3.3.1" - bin: - nanoid: bin/nanoid.cjs - checksum: 4ef0969e1bbe866fc223eb32276cbccb0961900bfe79104fa5abe34361979dead8d0e061410a5c03bc3d47455685adf32c09d6f27790f4a6898fb51f7df7ec86 - languageName: node - linkType: hard - -"nanoid@npm:^3.3.4": +"nanoid@npm:^3.1.23, nanoid@npm:^3.3.4": version: 3.3.4 resolution: "nanoid@npm:3.3.4" bin: @@ -31077,11 +29315,11 @@ __metadata: linkType: hard "node-abi@npm:^3.3.0": - version: 3.8.0 - resolution: "node-abi@npm:3.8.0" + version: 3.24.0 + resolution: "node-abi@npm:3.24.0" dependencies: semver: ^7.3.5 - checksum: 3644dd51f4f189358ef56055407501aa698632d67448585b38c46c81a482a0c3bfb06da513ac4060a12ce5f607f208ba9d9c8280f1c38329670b709bd735fcae + checksum: d90ab48802497b2203800cac71018668e99c246435395ca4f67afcabf689e7e81568ed36e8036bae79a052b63ea5707375bece6ca0a1d2e2b99bfafde7a5c9b2 languageName: node linkType: hard @@ -31158,7 +29396,7 @@ __metadata: languageName: node linkType: hard -"node-gyp@npm:latest": +"node-gyp@npm:^9.0.0, node-gyp@npm:latest": version: 9.1.0 resolution: "node-gyp@npm:9.1.0" dependencies: @@ -31216,20 +29454,6 @@ __metadata: languageName: node linkType: hard -"node-modules-regexp@npm:^1.0.0": - version: 1.0.0 - resolution: "node-modules-regexp@npm:1.0.0" - checksum: 99541903536c5ce552786f0fca7f06b88df595e62e423c21fa86a1674ee2363dad1f7482d1bec20b4bd9fa5f262f88e6e5cb788fc56411113f2fe2e97783a3a7 - languageName: node - linkType: hard - -"node-releases@npm:^2.0.1": - version: 2.0.1 - resolution: "node-releases@npm:2.0.1" - checksum: b20dd8d4bced11f75060f0387e05e76b9dc4a0451f7bb3516eade6f50499ea7768ba95d8a60d520c193402df1e58cb3fe301510cc1c1ad68949c3d57b5149866 - languageName: node - linkType: hard - "node-releases@npm:^2.0.6": version: 2.0.6 resolution: "node-releases@npm:2.0.6" @@ -31291,27 +29515,27 @@ __metadata: languageName: node linkType: hard -"normalize-package-data@npm:^3.0.0": - version: 3.0.0 - resolution: "normalize-package-data@npm:3.0.0" +"normalize-package-data@npm:^3.0.0, normalize-package-data@npm:^3.0.2": + version: 3.0.3 + resolution: "normalize-package-data@npm:3.0.3" dependencies: - hosted-git-info: ^3.0.6 - resolve: ^1.17.0 - semver: ^7.3.2 + hosted-git-info: ^4.0.1 + is-core-module: ^2.5.0 + semver: ^7.3.4 validate-npm-package-license: ^3.0.1 - checksum: 665ad6e3d0463f56ee8acc1f8f71c5f62535e4c689ed389521c36e8fd34273306f978c934154de3a43f5b128ed7010872ce3381948f8d4a63d70f50ed01ac2e0 + checksum: bbcee00339e7c26fdbc760f9b66d429258e2ceca41a5df41f5df06cc7652de8d82e8679ff188ca095cad8eff2b6118d7d866af2b68400f74602fbcbce39c160a languageName: node linkType: hard "normalize-package-data@npm:^4.0.0": - version: 4.0.0 - resolution: "normalize-package-data@npm:4.0.0" + version: 4.0.1 + resolution: "normalize-package-data@npm:4.0.1" dependencies: hosted-git-info: ^5.0.0 is-core-module: ^2.8.1 semver: ^7.3.5 validate-npm-package-license: ^3.0.4 - checksum: b0f47de4295a0f8499bd478e84b9f9592a29f65227c2b4446ae80f7dff6e7a5ec6ef25ea8f06f3dcb9b7b7d945c2daa274385925b3d85e77e34eaffa0b42e316 + checksum: 292e0aa740e73d62f84bbd9d55d4bfc078155f32d5d7572c32c9807f96d543af0f43ff7e5c80bfa6238667123fd68bd83cd412eae9b27b85b271fb041f624528 languageName: node linkType: hard @@ -31331,13 +29555,6 @@ __metadata: languageName: node linkType: hard -"normalize-url@npm:^3.3.0": - version: 3.3.0 - resolution: "normalize-url@npm:3.3.0" - checksum: f6aa4a1a94c3b799812f3e7fc987fb4599d869bfa8e9a160b6f2c5a2b4e62ada998d64dca30d9e20769d8bd95d3da1da3d4841dba2cc3c4d85364e1eb46219a2 - languageName: node - linkType: hard - "normalize-url@npm:^6.0.1, normalize-url@npm:^6.1.0": version: 6.1.0 resolution: "normalize-url@npm:6.1.0" @@ -31407,19 +29624,20 @@ __metadata: linkType: hard "npm-package-arg@npm:^9.0.0, npm-package-arg@npm:^9.0.1": - version: 9.0.2 - resolution: "npm-package-arg@npm:9.0.2" + version: 9.1.0 + resolution: "npm-package-arg@npm:9.1.0" dependencies: hosted-git-info: ^5.0.0 + proc-log: ^2.0.1 semver: ^7.3.5 validate-npm-package-name: ^4.0.0 - checksum: 07828f330f611214a0aa1e87f402b30b3dc90388671470ad8dc1551f28b0cb886f1f75fa7c37e894a9598640a555c05643642994ecacb9a6c68f655e571968f7 + checksum: 277c21477731a4f1e31bde36f0db5f5470deb2a008db2aaf1b015d588b23cb225c75f90291ea241235e86682a03de972bbe69fc805c921a786ea9616955990b9 languageName: node linkType: hard "npm-packlist@npm:^2.1.4": - version: 2.1.4 - resolution: "npm-packlist@npm:2.1.4" + version: 2.2.2 + resolution: "npm-packlist@npm:2.2.2" dependencies: glob: ^7.1.6 ignore-walk: ^3.0.3 @@ -31427,7 +29645,7 @@ __metadata: npm-normalize-package-bin: ^1.0.1 bin: npm-packlist: bin/index.js - checksum: 916eb67d81c52124b01e20a72168e83fed6fbc168fb6ecd659f5581f515818b9668dab9c1a6b19c7fd6dbe583ad2ed7ceb06924aa884336696f1b08f0f637b22 + checksum: 799ce94b077e4dc366a9a5bcc5f006669263bb1a48d6948161aed915fd2f11dea8a7cf516a63fc78e5df059915591dade5928f0738baadc99a8ab4685d8b58c3 languageName: node linkType: hard @@ -31472,14 +29690,28 @@ __metadata: linkType: hard "npm-pick-manifest@npm:^7.0.0": - version: 7.0.1 - resolution: "npm-pick-manifest@npm:7.0.1" + version: 7.0.2 + resolution: "npm-pick-manifest@npm:7.0.2" dependencies: npm-install-checks: ^5.0.0 - npm-normalize-package-bin: ^1.0.1 + npm-normalize-package-bin: ^2.0.0 npm-package-arg: ^9.0.0 semver: ^7.3.5 - checksum: 9a4a8e64d2214783b2b74a361845000f5d91bb40c7858e2a30af2ac7876d9296efc37f8cacf60335e96a45effee2035b033d9bdefb4889757cc60d85959accbb + checksum: a93ec449c12219a2be8556837db9ac5332914f304a69469bb6f1f47717adc6e262aa318f79166f763512688abd9c4e4b6a2d83b2dd19753a7abe5f0360f2c8bc + languageName: node + linkType: hard + +"npm-registry-fetch@npm:^11.0.0": + version: 11.0.0 + resolution: "npm-registry-fetch@npm:11.0.0" + dependencies: + make-fetch-happen: ^9.0.1 + minipass: ^3.1.3 + minipass-fetch: ^1.3.0 + minipass-json-stream: ^1.0.1 + minizlib: ^2.0.0 + npm-package-arg: ^8.0.0 + checksum: dda149cd86f8ee73db1b0a0302fbf59983ef03ad180051caa9aad1de9f1e099aaa77adcda3ca2c3bd9d98958e9e6593bd56ee21d3f660746b0a65fafbf5ae161 languageName: node linkType: hard @@ -31498,8 +29730,8 @@ __metadata: linkType: hard "npm-registry-fetch@npm:^13.0.0, npm-registry-fetch@npm:^13.0.1": - version: 13.1.1 - resolution: "npm-registry-fetch@npm:13.1.1" + version: 13.3.1 + resolution: "npm-registry-fetch@npm:13.3.1" dependencies: make-fetch-happen: ^10.0.6 minipass: ^3.1.6 @@ -31508,7 +29740,7 @@ __metadata: minizlib: ^2.1.2 npm-package-arg: ^9.0.1 proc-log: ^2.0.0 - checksum: e085faf5cdc1cfe9b8f825065a0823531b2a28799d84614b3971e344dde087f9089c0f0220360771a81f110c5444978c6f7309084ff7d7d396252b068148bb44 + checksum: 5a941c2c799568e0dbccfc15f280444da398dadf2eede1b1921f08ddd5cb5f32c7cb4d16be96401f95a33073aeec13a3fd928c753790d3c412c2e64e7f7c6ee4 languageName: node linkType: hard @@ -31546,7 +29778,7 @@ __metadata: languageName: node linkType: hard -"npmlog@npm:^4.0.1, npmlog@npm:^4.1.2": +"npmlog@npm:^4.1.2": version: 4.1.2 resolution: "npmlog@npm:4.1.2" dependencies: @@ -31570,19 +29802,7 @@ __metadata: languageName: node linkType: hard -"npmlog@npm:^6.0.0": - version: 6.0.1 - resolution: "npmlog@npm:6.0.1" - dependencies: - are-we-there-yet: ^3.0.0 - console-control-strings: ^1.1.0 - gauge: ^4.0.0 - set-blocking: ^2.0.0 - checksum: f1a4078a73ebc89896a832bbf869f491c32ecb12e0434b9a7499878ce8f29f22e72befe3c53cd8cdc9dbf4b4057297e783ab0b6746a8b067734de6205af4d538 - languageName: node - linkType: hard - -"npmlog@npm:^6.0.2": +"npmlog@npm:^6.0.0, npmlog@npm:^6.0.2": version: 6.0.2 resolution: "npmlog@npm:6.0.2" dependencies: @@ -31594,12 +29814,12 @@ __metadata: languageName: node linkType: hard -"nth-check@npm:^2.0.0": - version: 2.0.1 - resolution: "nth-check@npm:2.0.1" +"nth-check@npm:^2.0.1": + version: 2.1.1 + resolution: "nth-check@npm:2.1.1" dependencies: boolbase: ^1.0.0 - checksum: 5386d035c48438ff304fe687704d93886397349d1bed136de97aeae464caba10e8ffac55a04b215b86b3bc8897f33e0a5aa1045a9d8b2f251ae61b2a3ad3e450 + checksum: 5afc3dafcd1573b08877ca8e6148c52abd565f1d06b1eb08caf982e3fa289a82f2cae697ffb55b5021e146d60443f1590a5d6b944844e944714a5b549675bcd3 languageName: node linkType: hard @@ -31636,9 +29856,9 @@ __metadata: linkType: hard "nwsapi@npm:^2.2.0": - version: 2.2.0 - resolution: "nwsapi@npm:2.2.0" - checksum: 5ef4a9bc0c1a5b7f2e014aa6a4b359a257503b796618ed1ef0eb852098f77e772305bb0e92856e4bbfa3e6c75da48c0113505c76f144555ff38867229c2400a7 + version: 2.2.2 + resolution: "nwsapi@npm:2.2.2" + checksum: 43769106292bc95f776756ca2f3513dab7b4d506a97c67baec32406447841a35f65f29c1f95ab5d42785210fd41668beed33ca16fa058780be43b101ad73e205 languageName: node linkType: hard @@ -31688,7 +29908,7 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.11.0, object-inspect@npm:^1.12.0, object-inspect@npm:^1.12.2, object-inspect@npm:^1.9.0": +"object-inspect@npm:^1.12.2, object-inspect@npm:^1.9.0": version: 1.12.2 resolution: "object-inspect@npm:1.12.2" checksum: a534fc1b8534284ed71f25ce3a496013b7ea030f3d1b77118f6b7b1713829262be9e6243acbcb3ef8c626e2b64186112cb7f6db74e37b2789b9c789ca23048b2 @@ -31711,19 +29931,7 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.1.0": - version: 4.1.2 - resolution: "object.assign@npm:4.1.2" - dependencies: - call-bind: ^1.0.0 - define-properties: ^1.1.3 - has-symbols: ^1.0.1 - object-keys: ^1.1.1 - checksum: d621d832ed7b16ac74027adb87196804a500d80d9aca536fccb7ba48d33a7e9306a75f94c1d29cbfa324bc091bfc530bc24789568efdaee6a47fcfa298993814 - languageName: node - linkType: hard - -"object.assign@npm:^4.1.2": +"object.assign@npm:^4.1.0, object.assign@npm:^4.1.3, object.assign@npm:^4.1.4": version: 4.1.4 resolution: "object.assign@npm:4.1.4" dependencies: @@ -31795,11 +30003,11 @@ __metadata: linkType: hard "octokit-plugin-create-pull-request@npm:^3.10.0": - version: 3.12.2 - resolution: "octokit-plugin-create-pull-request@npm:3.12.2" + version: 3.13.1 + resolution: "octokit-plugin-create-pull-request@npm:3.13.1" dependencies: "@octokit/types": ^6.8.2 - checksum: 1f23b6ab62f148795eb7d0109bbfbaf022760ccd17eca2d8d6e0dd860ec76d509fcc0e94841caedaf1e5fe48885cec080fdf8c1cddf0736d0c119070eb7f371f + checksum: 169e393046cecc51b9c9be23321086fc60681bfdfe2bcec5477d0916e5b8e3b64b54588f631f61d98677a0561f5d44fa85589abd75ff851122c798795921292b languageName: node linkType: hard @@ -31833,7 +30041,7 @@ __metadata: languageName: node linkType: hard -"on-finished@npm:2.4.1": +"on-finished@npm:2.4.1, on-finished@npm:^2.3.0": version: 2.4.1 resolution: "on-finished@npm:2.4.1" dependencies: @@ -31842,7 +30050,7 @@ __metadata: languageName: node linkType: hard -"on-finished@npm:^2.3.0, on-finished@npm:~2.3.0": +"on-finished@npm:~2.3.0": version: 2.3.0 resolution: "on-finished@npm:2.3.0" dependencies: @@ -31906,12 +30114,12 @@ __metadata: linkType: hard "openapi-sampler@npm:^1.2.1": - version: 1.2.1 - resolution: "openapi-sampler@npm:1.2.1" + version: 1.3.0 + resolution: "openapi-sampler@npm:1.3.0" dependencies: "@types/json-schema": ^7.0.7 json-pointer: 0.6.2 - checksum: 831abc601eb3e43539b0716b938f4e78f2ddfdc164bc47590422be435e46fd2b1a82fb5e954978460fc5a0cef14bb232ff07fc2561ab34bdcd45b67beb6d0e58 + checksum: 5f4e8612ae4d8ffe21f3b0d972879828675c3de812b3c2a0a436c7191847384c888d0ee5812c6aa5318d2a82b102db56b00e9ac06da5e9d290343790c9c93776 languageName: node linkType: hard @@ -32024,9 +30232,9 @@ __metadata: linkType: hard "p-cancelable@npm:^2.0.0": - version: 2.0.0 - resolution: "p-cancelable@npm:2.0.0" - checksum: dbe887e06ec72a918b3f3d41819aa57b5c4248ddf7162477727046bd2775d6e3e52390521198625599198e9bb5d592f3b0064e96fc0940cdf4e01233e2296664 + version: 2.1.1 + resolution: "p-cancelable@npm:2.1.1" + checksum: 3dba12b4fb4a1e3e34524535c7858fc82381bbbd0f247cc32dedc4018592a3950ce66b106d0880b4ec4c2d8d6576f98ca885dc1d7d0f274d1370be20e9523ddf languageName: node linkType: hard @@ -32071,16 +30279,7 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^2.0.0": - version: 2.2.2 - resolution: "p-limit@npm:2.2.2" - dependencies: - p-try: ^2.0.0 - checksum: 20c395084f4bbcb6330c21ed5408a482c7e03bb68fbf9d4667fb0f49de944a7474f788b214ca087090868dfce3f3fff4a4830b0951c8a979469786635b172fb2 - languageName: node - linkType: hard - -"p-limit@npm:^2.2.0": +"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0": version: 2.3.0 resolution: "p-limit@npm:2.3.0" dependencies: @@ -32182,12 +30381,12 @@ __metadata: linkType: hard "p-retry@npm:^4.5.0": - version: 4.5.0 - resolution: "p-retry@npm:4.5.0" + version: 4.6.2 + resolution: "p-retry@npm:4.6.2" dependencies: - "@types/retry": ^0.12.0 - retry: ^0.12.0 - checksum: 129cbf070401b4b5fea7c959a85a62d26ac29593bcb59e34ce1544a0cace3674cd1f66c370ba8ec95184cf5745546ea2d5e31b75395cf40a4e34358684867b67 + "@types/retry": 0.12.0 + retry: ^0.13.1 + checksum: 45c270bfddaffb4a895cea16cb760dcc72bdecb6cb45fef1971fa6ea2e91ddeafddefe01e444ac73e33b1b3d5d29fb0dd18a7effb294262437221ddc03ce0f2e languageName: node linkType: hard @@ -32270,13 +30469,13 @@ __metadata: linkType: hard "pacote@npm:^13.0.3, pacote@npm:^13.0.5, pacote@npm:^13.4.1": - version: 13.6.0 - resolution: "pacote@npm:13.6.0" + version: 13.6.2 + resolution: "pacote@npm:13.6.2" dependencies: "@npmcli/git": ^3.0.0 "@npmcli/installed-package-contents": ^1.0.7 "@npmcli/promise-spawn": ^3.0.0 - "@npmcli/run-script": ^3.0.1 + "@npmcli/run-script": ^4.1.0 cacache: ^16.0.0 chownr: ^2.0.0 fs-minipass: ^2.1.0 @@ -32296,7 +30495,7 @@ __metadata: tar: ^6.1.11 bin: pacote: lib/bin.js - checksum: 9e68300fbe35d4f004444f949b88ce3f5a92c44b92b63e57514962b228ef78bb1a92208f8f2a5fc8066e639c76a442e1cf6fad2a1d29efa63f07aece3cccc6f7 + checksum: a7b7f97094ab570a23e1c174537e9953a4d53176cc4b18bac77d7728bd89e2b9fa331d0f78fa463add03df79668a918bbdaa2750819504ee39242063abf53c6e languageName: node linkType: hard @@ -32333,17 +30532,16 @@ __metadata: languageName: node linkType: hard -"parse-asn1@npm:^5.0.0": - version: 5.1.5 - resolution: "parse-asn1@npm:5.1.5" +"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.5": + version: 5.1.6 + resolution: "parse-asn1@npm:5.1.6" dependencies: - asn1.js: ^4.0.0 + asn1.js: ^5.2.0 browserify-aes: ^1.0.0 - create-hash: ^1.1.0 evp_bytestokey: ^1.0.0 pbkdf2: ^3.0.3 safe-buffer: ^5.1.1 - checksum: e3bf40ce4953ec66754fd692bafdd99d9f00a6bb05822361f47222f959ddf5d1f9928088cda3892433f81eee6394ac1d1d9dd4dbd5d5cdc567b644a2cf860a0a + checksum: 9243311d1f88089bc9f2158972aa38d1abd5452f7b7cabf84954ed766048fe574d434d82c6f5a39b988683e96fb84cd933071dda38927e03469dc8c8d14463c7 languageName: node linkType: hard @@ -32372,13 +30570,13 @@ __metadata: linkType: hard "parse-conflict-json@npm:^2.0.1": - version: 2.0.1 - resolution: "parse-conflict-json@npm:2.0.1" + version: 2.0.2 + resolution: "parse-conflict-json@npm:2.0.2" dependencies: json-parse-even-better-errors: ^2.3.1 just-diff: ^5.0.1 - just-diff-apply: ^4.0.1 - checksum: 398728731f3b7330d2885075f1dad0abd6fb943fca6aaa5f0edf46ccf06fe72b3ae09327f19447e98052fdfbf8bcfeee3aa14d7eb843846ec158b871a7fc1bba + just-diff-apply: ^5.2.0 + checksum: 076f65c958696586daefb153f59d575dfb59648be43116a21b74d5ff69ec63dd56f585a27cc2da56d8e64ca5abf0373d6619b8330c035131f8d1e990c8406378 languageName: node linkType: hard @@ -32396,20 +30594,6 @@ __metadata: languageName: node linkType: hard -"parse-entities@npm:^3.0.0": - version: 3.0.0 - resolution: "parse-entities@npm:3.0.0" - dependencies: - character-entities: ^2.0.0 - character-entities-legacy: ^2.0.0 - character-reference-invalid: ^2.0.0 - is-alphanumerical: ^2.0.0 - is-decimal: ^2.0.0 - is-hexadecimal: ^2.0.0 - checksum: 78a1039ace8822f641465a52660b84c3018a2e6345ee0534a2f9f8aa064a11cc9dba7523fa24103ce12b617b8e7b378f244a5d070a834b29feb97baf63c657ed - languageName: node - linkType: hard - "parse-filepath@npm:^1.0.2": version: 1.0.2 resolution: "parse-filepath@npm:1.0.2" @@ -32422,9 +30606,9 @@ __metadata: linkType: hard "parse-headers@npm:^2.0.0": - version: 2.0.4 - resolution: "parse-headers@npm:2.0.4" - checksum: 29519ac013e100c11a67d0fc64eb33ae86523abf547f71dba36d484dcd16a2835dd11f31303f4ded27c40133dca5a5fe4d15b77f49091e470a6f74a023c59c4a + version: 2.0.5 + resolution: "parse-headers@npm:2.0.5" + checksum: 3e97f01e4c7f960bfbfd0ee489f0bd8d3c72b6c814f1f79b66abec2cca8eaf8e4ecd89deba0b6e61266469aed87350bc932001181c01ff8c29a59e696abe251f languageName: node linkType: hard @@ -32467,12 +30651,14 @@ __metadata: linkType: hard "parse-path@npm:^4.0.0": - version: 4.0.1 - resolution: "parse-path@npm:4.0.1" + version: 4.0.4 + resolution: "parse-path@npm:4.0.4" dependencies: is-ssh: ^1.3.0 protocols: ^1.4.0 - checksum: dbe025d5827359fee9162932757bf7eb964220a6636ec6d233f9acc981a646aa605d5b49df585792a56e9fdd238d8d5daf2d532d1cd45642f15a47817e4352f6 + qs: ^6.9.4 + query-string: ^6.13.8 + checksum: 909e628c35baebeb3bdcaa376e2c5a21632a9094079ac55e04b3311db28219b15e517e10987dd49a13a904f2605b747b6368b0092130e0f2ff9bc5ffc40ceb63 languageName: node linkType: hard @@ -32494,15 +30680,15 @@ __metadata: languageName: node linkType: hard -"parse-url@npm:^5.0.0": - version: 5.0.1 - resolution: "parse-url@npm:5.0.1" +"parse-url@npm:^6.0.0": + version: 6.0.5 + resolution: "parse-url@npm:6.0.5" dependencies: is-ssh: ^1.3.0 - normalize-url: ^3.3.0 + normalize-url: ^6.1.0 parse-path: ^4.0.0 protocols: ^1.4.0 - checksum: 05c8e88f8c918b11a4feeedfa693a547987eb11266e852746d362bfb92662bd79fa5a422dd41ed297d73e2cfe659dad8c594d97f4ca9e523bec1af289a9a4366 + checksum: b583800f63a8a293c5d53ee6b28b99293c742791fba4f14c1b829547a78bad93500fe0d448f8d8e2087a3c4d39deab236ed3837830ea522272e8c5852f21d223 languageName: node linkType: hard @@ -32631,13 +30817,13 @@ __metadata: linkType: hard "passport-oauth1@npm:1.x.x": - version: 1.1.0 - resolution: "passport-oauth1@npm:1.1.0" + version: 1.2.0 + resolution: "passport-oauth1@npm:1.2.0" dependencies: oauth: 0.9.x passport-strategy: 1.x.x utils-merge: 1.x.x - checksum: 49ce8b8d17846bfdb6b1e659b7757eb2c0f239539b1901533bc00b7bdaa4c40662db804698364a60d61c284eae69d5f5d312bc04f2b8fc70ea1897a40f107fde + checksum: b38444da71bf3468a53599d908b45e4043c7dd04cce0ded3398a91f161ce076c5973f42ddad47e5012f8b1cccea71b60890b35560491921d0858c36b364ac471 languageName: node linkType: hard @@ -32844,9 +31030,9 @@ __metadata: linkType: hard "path-to-regexp@npm:^6.2.0": - version: 6.2.0 - resolution: "path-to-regexp@npm:6.2.0" - checksum: a6aca74d2d6e2e7594d812f653cf85e9cb5054d3a8d80f099722a44ef6ad22639b02078e5ea83d11db16321c3e4359e3f1ab0274fa78dad0754a6e53f630b0fc + version: 6.2.1 + resolution: "path-to-regexp@npm:6.2.1" + checksum: f0227af8284ea13300f4293ba111e3635142f976d4197f14d5ad1f124aebd9118783dd2e5f1fe16f7273743cc3dbeddfb7493f237bb27c10fdae07020cc9b698 languageName: node linkType: hard @@ -32894,22 +31080,22 @@ __metadata: linkType: hard "pbkdf2@npm:^3.0.3": - version: 3.0.17 - resolution: "pbkdf2@npm:3.0.17" + version: 3.1.2 + resolution: "pbkdf2@npm:3.1.2" dependencies: create-hash: ^1.1.2 create-hmac: ^1.1.4 ripemd160: ^2.0.1 safe-buffer: ^5.0.1 sha.js: ^2.4.8 - checksum: 9c9062b4bf300bfc03214a8665ab1c8ede227fca1d5bd8b8d0a9d317a941ff64c80b19810288a8cc0f774d603dce249d4b734e62b68dfc784be4ad1e6c0a81f5 + checksum: 2c950a100b1da72123449208e231afc188d980177d021d7121e96a2de7f2abbc96ead2b87d03d8fe5c318face097f203270d7e27908af9f471c165a4e8e69c92 languageName: node linkType: hard -"peek-readable@npm:^4.0.1": - version: 4.0.1 - resolution: "peek-readable@npm:4.0.1" - checksum: aed788748585fe2dc55ac8a1ea4dd75b9f30c71a790bbd53f785aab757e6b765a6b6a4b19343242f24fdfc416a81d5ec40635ead75379b94af5b0e9d647d087d +"peek-readable@npm:^4.1.0": + version: 4.1.0 + resolution: "peek-readable@npm:4.1.0" + checksum: 02c673f9bc816f8e4e74a054c097225ad38d457d745b775e2b96faf404a54473b2f62f5bcd496f5ebc28696708bcc5e95bed409856f4bef5ed62eae9b4ac0dab languageName: node linkType: hard @@ -32991,11 +31177,11 @@ __metadata: linkType: hard "pgpass@npm:1.x": - version: 1.0.2 - resolution: "pgpass@npm:1.0.2" + version: 1.0.5 + resolution: "pgpass@npm:1.0.5" dependencies: - split: ^1.0.0 - checksum: 377bf4c3e489ff28a93ae3b1cf3f99a8f9b85153ae9c587345a07e40c1b036e81bd414e5d0bdb204a43f45390e728bbb314c71e067d7b0dda39c3b7097df09a0 + split2: ^4.1.0 + checksum: 947ac096c031eebdf08d989de2e9f6f156b8133d6858c7c2c06c041e1e71dda6f5f3bad3c0ec1e96a09497bbc6ef89e762eefe703b5ef9cb2804392ec52ec400 languageName: node linkType: hard @@ -33130,16 +31316,7 @@ __metadata: languageName: node linkType: hard -"pirates@npm:^4.0.0": - version: 4.0.1 - resolution: "pirates@npm:4.0.1" - dependencies: - node-modules-regexp: ^1.0.0 - checksum: 091e232aac19f0049a681838fa9fcb4af824b5b1eb0e9325aa07b9d13245bfe3e4fa57a7766b9fdcd19cb89f2c15c688b46023be3047cb288023a0c079d3b2a3 - languageName: node - linkType: hard - -"pirates@npm:^4.0.1, pirates@npm:^4.0.4": +"pirates@npm:^4.0.1, pirates@npm:^4.0.4, pirates@npm:^4.0.5": version: 4.0.5 resolution: "pirates@npm:4.0.5" checksum: c9994e61b85260bec6c4fc0307016340d9b0c4f4b6550a957afaaff0c9b1ad58fbbea5cfcf083860a25cb27a375442e2b0edf52e2e1e40e69934e08dcc52d227 @@ -33226,162 +31403,169 @@ __metadata: languageName: node linkType: hard -"postcss-calc@npm:^8.0.0": - version: 8.0.0 - resolution: "postcss-calc@npm:8.0.0" +"postcss-calc@npm:^8.2.3": + version: 8.2.4 + resolution: "postcss-calc@npm:8.2.4" dependencies: - postcss-selector-parser: ^6.0.2 - postcss-value-parser: ^4.0.2 + postcss-selector-parser: ^6.0.9 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.2 - checksum: d945c49f317d6e8f220bce33075f2eec8e26052158a5a694186c11a26d23098b0300a3d44f666fda2feaa3ec93a636282881ee50b9e32776e08e5338e4a8c887 + checksum: 314b4cebb0c4ed0cf8356b4bce71eca78f5a7842e6a3942a3bba49db168d5296b2bd93c3f735ae1c616f2651d94719ade33becc03c73d2d79c7394fb7f73eabb languageName: node linkType: hard -"postcss-colormin@npm:^5.2.1": - version: 5.2.1 - resolution: "postcss-colormin@npm:5.2.1" +"postcss-colormin@npm:^5.3.0": + version: 5.3.0 + resolution: "postcss-colormin@npm:5.3.0" dependencies: browserslist: ^4.16.6 caniuse-api: ^3.0.0 colord: ^2.9.1 - postcss-value-parser: ^4.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: c5337ae9477a6ad787a5bd366a6a418da65fd6212e4dade2ba14c5975faec5b16b69533fc0e5130f34b42a81bc2d1db17436b60f204ef7935cfc555187731579 + checksum: 3d3e3cc25071407fb73d68541ca1039ebd154fceb649041461a8a3cab0400cc89b42dbb34a4eeaf573be4ba2370ce23af5e01aff5e03a8d72275f40605577212 languageName: node linkType: hard -"postcss-convert-values@npm:^5.0.2": - version: 5.0.2 - resolution: "postcss-convert-values@npm:5.0.2" +"postcss-convert-values@npm:^5.1.2": + version: 5.1.2 + resolution: "postcss-convert-values@npm:5.1.2" dependencies: - postcss-value-parser: ^4.1.0 + browserslist: ^4.20.3 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: 02a31f72b3365345db8aa1d83b084c96975d99a6494359378069431fd810e78ebf3bd96d03a598255daa8f6e2cd63722f119ddec9d24f66b6974b57819feb034 + checksum: b1615daf12d3425bf4edee9451de402702f41019ccfc85f7883d87438becf533b3061a5a3567865029c534147a6c90e89b4c42ae6741c768c879a68d35aea812 languageName: node linkType: hard -"postcss-discard-comments@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-discard-comments@npm:5.0.1" +"postcss-discard-comments@npm:^5.1.2": + version: 5.1.2 + resolution: "postcss-discard-comments@npm:5.1.2" peerDependencies: postcss: ^8.2.15 - checksum: c561952bbffa799cfc96216098d7ccc14b1dc776f0a8038c52eafe89fbec02701a234f35f7244aa06d58127103e7dd5f0bfd1db18a53c1438fef5c0a9b2dbddf + checksum: abfd064ebc27aeaf5037643dd51ffaff74d1fa4db56b0523d073ace4248cbb64ffd9787bd6924b0983a9d0bd0e9bf9f10d73b120e50391dc236e0d26c812fa2a languageName: node linkType: hard -"postcss-discard-duplicates@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-discard-duplicates@npm:5.0.1" +"postcss-discard-duplicates@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-discard-duplicates@npm:5.1.0" peerDependencies: postcss: ^8.2.15 - checksum: becb68fd5ccd632fe51413a6ab4fd5c8aa3aae9d12947238014c2fb7816a2e0eb9a5454ee7207cac19f4a093c799be6053f13bf4048e97e20d88d5af4a0656bc + checksum: 88d6964201b1f4ed6bf7a32cefe68e86258bb6e42316ca01d9b32bdb18e7887d02594f89f4a2711d01b51ea6e3fcca8c54be18a59770fe5f4521c61d3eb6ca35 languageName: node linkType: hard -"postcss-discard-empty@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-discard-empty@npm:5.0.1" +"postcss-discard-empty@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-discard-empty@npm:5.1.1" peerDependencies: postcss: ^8.2.15 - checksum: 2465ddabb18774c4996c18b8370498cf71597a23c45518ea75e7b73cd8f003b0be52ea9f27f28e24bba408d08ec5152e019cc595611bb097748993c1788d9f4f + checksum: 970adb12fae5c214c0768236ad9a821552626e77dedbf24a8213d19cc2c4a531a757cd3b8cdd3fc22fb1742471b8692a1db5efe436a71236dec12b1318ee8ff4 languageName: node linkType: hard -"postcss-discard-overridden@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-discard-overridden@npm:5.0.1" +"postcss-discard-overridden@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-discard-overridden@npm:5.1.0" peerDependencies: postcss: ^8.2.15 - checksum: 7da9a4bda963145c45b0b51ddf7684e37072569d6f5d22f6cab9f37ea953426274f52eeec87391cd2bd1dd561a6a26cbd1f39debb124ccd8b665b760eda849b4 + checksum: d64d4a545aa2c81b22542895cfcddc787d24119f294d35d29b0599a1c818b3cc51f4ee80b80f5a0a09db282453dd5ac49f104c2117cc09112d0ac9b40b499a41 languageName: node linkType: hard "postcss-load-config@npm:^3.0.0": - version: 3.0.1 - resolution: "postcss-load-config@npm:3.0.1" + version: 3.1.4 + resolution: "postcss-load-config@npm:3.1.4" dependencies: - cosmiconfig: ^7.0.0 - import-cwd: ^3.0.0 - checksum: f30ee3945d2534c1ab2f69181924318325bcbfacfcb3e3a48db3b9f7ffd5812ea27515a27c4f8dba127fdb41b1ca28c3d401c72ea6ed7e85decd04c66bd14c07 + lilconfig: ^2.0.5 + yaml: ^1.10.2 + peerDependencies: + postcss: ">=8.0.9" + ts-node: ">=9.0.0" + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + checksum: 1c589504c2d90b1568aecae8238ab993c17dba2c44f848a8f13619ba556d26a1c09644d5e6361b5784e721e94af37b604992f9f3dc0483e687a0cc1cc5029a34 languageName: node linkType: hard -"postcss-merge-longhand@npm:^5.0.4": - version: 5.0.4 - resolution: "postcss-merge-longhand@npm:5.0.4" +"postcss-merge-longhand@npm:^5.1.6": + version: 5.1.6 + resolution: "postcss-merge-longhand@npm:5.1.6" dependencies: - postcss-value-parser: ^4.1.0 - stylehacks: ^5.0.1 + postcss-value-parser: ^4.2.0 + stylehacks: ^5.1.0 peerDependencies: postcss: ^8.2.15 - checksum: 6c5ff2ae0e9def05a59cbb432b5cbbdb968816b83c4e38fdf14fa596ef21e36442f61b53984d56dca6165d91e74eadc720270b2887a4a1ef5e25ee171b7d7ea0 + checksum: 327b5474d9e84b8d8aed3e24444938cbf1274326d357b551b700203f03f7bcb615381b92b933770ffe35b154677205af08875373413f2c5e625c34730599707b languageName: node linkType: hard -"postcss-merge-rules@npm:^5.0.3": - version: 5.0.3 - resolution: "postcss-merge-rules@npm:5.0.3" +"postcss-merge-rules@npm:^5.1.2": + version: 5.1.2 + resolution: "postcss-merge-rules@npm:5.1.2" dependencies: browserslist: ^4.16.6 caniuse-api: ^3.0.0 - cssnano-utils: ^2.0.1 + cssnano-utils: ^3.1.0 postcss-selector-parser: ^6.0.5 peerDependencies: postcss: ^8.2.15 - checksum: 2e701693c6086cc88ac9e4d30a64471bd8da2e33b7e788b7bcbb4e91ecf87bbddc73529a1308a77953e0a2969f57f22714028547b8469db364b3d0d26b39eae2 + checksum: fcbc415999a35248dcce03064a5456123663507b05ff0f1de5c97b6effc68014ab0ffd5f06e71cf08d401f037932e271b7db33124c73260f3630a1441212a0c8 languageName: node linkType: hard -"postcss-minify-font-values@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-minify-font-values@npm:5.0.1" +"postcss-minify-font-values@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-minify-font-values@npm:5.1.0" dependencies: - postcss-value-parser: ^4.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: 56aeb2cad5b3c4ca736b7fd7fa331d82281fbecc47e0e275a6a1203b436dbaa9f0772f668c3265dbf7ea2026c68d77c752cf9abe65bd3c65a53e696ae277e6e6 + checksum: 35e858fa41efa05acdeb28f1c76579c409fdc7eabb1744c3bd76e895bb9fea341a016746362a67609688ab2471f587202b9a3e14ea28ad677754d663a2777ece languageName: node linkType: hard -"postcss-minify-gradients@npm:^5.0.3": - version: 5.0.3 - resolution: "postcss-minify-gradients@npm:5.0.3" +"postcss-minify-gradients@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-minify-gradients@npm:5.1.1" dependencies: colord: ^2.9.1 - cssnano-utils: ^2.0.1 - postcss-value-parser: ^4.1.0 + cssnano-utils: ^3.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: 9ba5f28baeff45da8a5e759a748d5c26792e955d2cc061975c54f07d18f81518595353ddcd53dc5587342856425eefe909886b0a47bca392a9c9fcff297aab9e + checksum: 27354072a07c5e6dab36731103b94ca2354d4ed3c5bc6aacfdf2ede5a55fa324679d8fee5450800bc50888dbb5e9ed67569c0012040c2be128143d0cebb36d67 languageName: node linkType: hard -"postcss-minify-params@npm:^5.0.2": - version: 5.0.2 - resolution: "postcss-minify-params@npm:5.0.2" +"postcss-minify-params@npm:^5.1.3": + version: 5.1.3 + resolution: "postcss-minify-params@npm:5.1.3" dependencies: - alphanum-sort: ^1.0.2 browserslist: ^4.16.6 - cssnano-utils: ^2.0.1 - postcss-value-parser: ^4.1.0 + cssnano-utils: ^3.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: 234e833e0d187106dd949a8973662168ba27e2a036ae4af979921375328ee77673ba5def616426ab9554f9224af8e3c73822193af5cbbdf98aadc0e39775724b + checksum: 2d218f6b82474310c866b690210595a5e6a4c695f174f9100b018adb4a171bd67b1adaba26c241b3d41a4ea0f4962e0f5a77cf12ae60d9db76f80b0c7cbd6bcd languageName: node linkType: hard -"postcss-minify-selectors@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-minify-selectors@npm:5.1.0" +"postcss-minify-selectors@npm:^5.2.1": + version: 5.2.1 + resolution: "postcss-minify-selectors@npm:5.2.1" dependencies: - alphanum-sort: ^1.0.2 postcss-selector-parser: ^6.0.5 peerDependencies: postcss: ^8.2.15 - checksum: bf938e70a77b54d68709ec5e9a500b932e177b2278b5c405c3b59fb6f8315f2013e7b327ba76105949bf3c9ba6d6bef80ced4077cababb8e0015d87b4a086b50 + checksum: 6fdbc84f99a60d56b43df8930707da397775e4c36062a106aea2fd2ac81b5e24e584a1892f4baa4469fa495cb87d1422560eaa8f6c9d500f9f0b691a5f95bab5 languageName: node linkType: hard @@ -33430,10 +31614,10 @@ __metadata: linkType: hard "postcss-modules@npm:^4.0.0": - version: 4.0.0 - resolution: "postcss-modules@npm:4.0.0" + version: 4.3.1 + resolution: "postcss-modules@npm:4.3.1" dependencies: - generic-names: ^2.0.1 + generic-names: ^4.0.0 icss-replace-symbols: ^1.1.0 lodash.camelcase: ^4.3.0 postcss-modules-extract-imports: ^3.0.0 @@ -33443,192 +31627,174 @@ __metadata: string-hash: ^1.1.1 peerDependencies: postcss: ^8.0.0 - checksum: 8f50c241718955b94807b1066a843fc8c9a356bd28db7f9c30ddcc7dcf0b6a61d7e41c6b41ed5d6d7cfc341891f150fc69d57387910256588bbbe5bfd4ff74d6 + checksum: fa592183bb3d96c4aaf535e3b9b3bcfc54274cbb5b337616543c24ec68cd56675e9fd8aabf994e627513af628d090e43d2f1f4928ff6cdd4b9d3b1ba3fce4d42 languageName: node linkType: hard -"postcss-normalize-charset@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-normalize-charset@npm:5.0.1" +"postcss-normalize-charset@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-charset@npm:5.1.0" peerDependencies: postcss: ^8.2.15 - checksum: b74720bf0487809143a30e1965ff756698650abdd072f4fe81f0a32ce41e84c140f107b39ad0babf4d319aa620d1d4e01d1f89dc7c7b3f55fd3b27f243ee26e1 + checksum: e79d92971fc05b8b3c9b72f3535a574e077d13c69bef68156a0965f397fdf157de670da72b797f57b0e3bac8f38155b5dd1735ecab143b9cc4032d72138193b4 languageName: node linkType: hard -"postcss-normalize-display-values@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-normalize-display-values@npm:5.0.1" +"postcss-normalize-display-values@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-display-values@npm:5.1.0" dependencies: - cssnano-utils: ^2.0.1 - postcss-value-parser: ^4.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: ee84d379abd3fefcb23c09789a5f9d384a7f275d56e51b6ea149bf7a1cf512381bff0c3f00d938d0f91ab7c7fe00b19ace280cc3f84a100cd3cd8a604c4c7406 + checksum: b6eb7b9b02c3bdd62bbc54e01e2b59733d73a1c156905d238e178762962efe0c6f5104544da39f32cade8a4fb40f10ff54b63a8ebfbdff51e8780afb9fbdcf86 languageName: node linkType: hard -"postcss-normalize-positions@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-normalize-positions@npm:5.0.1" +"postcss-normalize-positions@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-normalize-positions@npm:5.1.1" dependencies: - postcss-value-parser: ^4.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: 71a97ff851b78cdce8cc1ef21f91d40ddb2aca55d1bdc56056df27037efd9c208290f863ce0adf58a3060f8bb6eb3d66b4cf6d9a1e3ccbb03ba4eb0a0d1b6da4 + checksum: d9afc233729c496463c7b1cdd06732469f401deb387484c3a2422125b46ec10b4af794c101f8c023af56f01970b72b535e88373b9058ecccbbf88db81662b3c4 languageName: node linkType: hard -"postcss-normalize-repeat-style@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-normalize-repeat-style@npm:5.0.1" +"postcss-normalize-repeat-style@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-normalize-repeat-style@npm:5.1.1" dependencies: - cssnano-utils: ^2.0.1 - postcss-value-parser: ^4.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: 24f21dd8eee0f5ef9119e71ba57174f675d16fe9a8f368656d64a4e5f2d69cb41ae42f70b814e5ef40f93857ff759205642f78781ff8854f473b7d726e93bc99 + checksum: 2c6ad2b0ae10a1fda156b948c34f78c8f1e185513593de4d7e2480973586675520edfec427645fa168c337b0a6b3ceca26f92b96149741ca98a9806dad30d534 languageName: node linkType: hard -"postcss-normalize-string@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-normalize-string@npm:5.0.1" +"postcss-normalize-string@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-string@npm:5.1.0" dependencies: - postcss-value-parser: ^4.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: 4b42d41a05780517647b9a55888d314bfdfda2042f7a84050555e64da5eccade966fdca645c4ef66503fa95d642e89f2950e5b556b2a38a1a8f3120a24816c73 + checksum: 6e549c6e5b2831e34c7bdd46d8419e2278f6af1d5eef6d26884a37c162844e60339340c57e5e06058cdbe32f27fc6258eef233e811ed2f71168ef2229c236ada languageName: node linkType: hard -"postcss-normalize-timing-functions@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-normalize-timing-functions@npm:5.0.1" +"postcss-normalize-timing-functions@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-timing-functions@npm:5.1.0" dependencies: - cssnano-utils: ^2.0.1 - postcss-value-parser: ^4.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: fa58de8f9f6f8d4b507f9f029b18a0903a69a3b5088a2a1306e22163d81ca041d0f179888f5696516a9f75e188df904b0e082ec522b497a46ad1bfc24b06f348 + checksum: da550f50e90b0b23e17b67449a7d1efd1aa68288e66d4aa7614ca6f5cc012896be1972b7168eee673d27da36504faccf7b9f835c0f7e81243f966a42c8c030aa languageName: node linkType: hard -"postcss-normalize-unicode@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-normalize-unicode@npm:5.0.1" +"postcss-normalize-unicode@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-unicode@npm:5.1.0" dependencies: - browserslist: ^4.16.0 - postcss-value-parser: ^4.1.0 + browserslist: ^4.16.6 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: d5a0e0c107639847709c1e9badf09267ee7c67206ac4c19df4f9479308866f0592773ff4063e58d48a6a1d638637a0f7b187ec429ddd3385bab32a06e2d020fd + checksum: 3570c90050f190811b5dbf7b4cf4f30f0b627c1ba5fbe5ad332e8b0aa7ef14b3d0aa2af1cb1074d0267aec8c9771e28866d867c8a8a0c433b6c34e50445f9c16 languageName: node linkType: hard -"postcss-normalize-url@npm:^5.0.3": - version: 5.0.3 - resolution: "postcss-normalize-url@npm:5.0.3" +"postcss-normalize-url@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-normalize-url@npm:5.1.0" dependencies: - is-absolute-url: ^3.0.3 normalize-url: ^6.0.1 - postcss-value-parser: ^4.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: 34dfc8d1d71f0cf073d3f3edfc94a5381d659275103240c15bb3d4f424e70ceec431dc663c7403e1b813d98f45fb5174f7f0c3fe9fb6b00cdbd62f3ac2f0032c + checksum: 3bd4b3246d6600230bc827d1760b24cb3101827ec97570e3016cbe04dc0dd28f4dbe763245d1b9d476e182c843008fbea80823061f1d2219b96f0d5c724a24c0 languageName: node linkType: hard -"postcss-normalize-whitespace@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-normalize-whitespace@npm:5.0.1" +"postcss-normalize-whitespace@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-normalize-whitespace@npm:5.1.1" dependencies: - postcss-value-parser: ^4.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: cefb27d2443d4a8fc34aa2a0aebd470d7d5a58d9adcf39f5e2a80455f4ab37b171a24f58dc47b3111232c1adbb1c8702f80c0ecac1cfcef03e48e00dac6a4a58 + checksum: 12d8fb6d1c1cba208cc08c1830959b7d7ad447c3f5581873f7e185f99a9a4230c43d3af21ca12c818e4690a5085a95b01635b762ad4a7bef69d642609b4c0e19 languageName: node linkType: hard -"postcss-ordered-values@npm:^5.0.2": - version: 5.0.2 - resolution: "postcss-ordered-values@npm:5.0.2" +"postcss-ordered-values@npm:^5.1.3": + version: 5.1.3 + resolution: "postcss-ordered-values@npm:5.1.3" dependencies: - cssnano-utils: ^2.0.1 - postcss-value-parser: ^4.1.0 + cssnano-utils: ^3.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: 80b1cab96e3e9caf23de9b5436b36d7dc1efdd7ff9ee7b02c5ddc88c3564ec5adfa08e66f64c3b335beeb74a8c690a89e1594be14f2d5b708deb2c259de69619 + checksum: 6f3ca85b6ceffc68aadaf319d9ee4c5ac16d93195bf8cba2d1559b631555ad61941461cda6d3909faab86e52389846b2b36345cff8f0c3f4eb345b1b8efadcf9 languageName: node linkType: hard -"postcss-reduce-initial@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-reduce-initial@npm:5.0.1" +"postcss-reduce-initial@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-reduce-initial@npm:5.1.0" dependencies: - browserslist: ^4.16.0 + browserslist: ^4.16.6 caniuse-api: ^3.0.0 peerDependencies: postcss: ^8.2.15 - checksum: c33306694ebd98e8a9402bf9eef1b1724e351e884d0c10f4c77ee34e8f603442d45c20862794ee05793b29d5c10f23b0e3f5697f02600b568911d48be41d421a + checksum: 2cb10fa3fa7d7df9e4376df64d19177debd5cfe6d8fde52327d27de425eb28d5d85fa45c857cf7c0aed35d16455b6f4762b53959480f92a1dfa4b51a1d780a32 languageName: node linkType: hard -"postcss-reduce-transforms@npm:^5.0.1": - version: 5.0.1 - resolution: "postcss-reduce-transforms@npm:5.0.1" +"postcss-reduce-transforms@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-reduce-transforms@npm:5.1.0" dependencies: - cssnano-utils: ^2.0.1 - postcss-value-parser: ^4.1.0 + postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: 89e033ba1fe92057e6196237d5ae6f30b7ca86a98d91a01aa1853baea36ea6c092d29d354d3281000a618445a780c30277868b10d517015317fdc8b97739d34e + checksum: 0c6af2cba20e3ff63eb9ad045e634ddfb9c3e5c0e614c020db2a02f3aa20632318c4ede9e0c995f9225d9a101e673de91c0a6e10bb2fa5da6d6c75d15a55882f languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4": - version: 6.0.4 - resolution: "postcss-selector-parser@npm:6.0.4" - dependencies: - cssesc: ^3.0.0 - indexes-of: ^1.0.1 - uniq: ^1.0.1 - util-deprecate: ^1.0.2 - checksum: 2030e3439a5841d0d1bbe3e7a77515bc677397b0073691e8dc4e1168ecd8a7adc8aba2ce7f274d1b2654b73c94818758d335ecbf85e1b29705d17180030f8164 - languageName: node - linkType: hard - -"postcss-selector-parser@npm:^6.0.5": - version: 6.0.6 - resolution: "postcss-selector-parser@npm:6.0.6" +"postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.9": + version: 6.0.10 + resolution: "postcss-selector-parser@npm:6.0.10" dependencies: cssesc: ^3.0.0 util-deprecate: ^1.0.2 - checksum: 3602758798048bffbd6a97d6f009b32a993d6fd2cc70775bb59593e803d7fa8738822ecffb2fafc745edf7fad297dad53c30d2cfe78446a7d3f4a4a258cb15b2 + checksum: 46afaa60e3d1998bd7adf6caa374baf857cc58d3ff944e29459c9a9e4680a7fe41597bd5b755fc81d7c388357e9bf67c0251d047c640a09f148e13606b8a8608 languageName: node linkType: hard -"postcss-svgo@npm:^5.0.3": - version: 5.0.3 - resolution: "postcss-svgo@npm:5.0.3" +"postcss-svgo@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-svgo@npm:5.1.0" dependencies: - postcss-value-parser: ^4.1.0 + postcss-value-parser: ^4.2.0 svgo: ^2.7.0 peerDependencies: postcss: ^8.2.15 - checksum: 7da0bfd6ecae300f1d82432d987ed3a4034a1502c4c458a0cf7284e172e8e86aa5098a89d9c23ee6b1360695c969f0f61ed776dd8098e26ee2a0b132ff1a7a5d + checksum: d86eb5213d9f700cf5efe3073799b485fb7cacae0c731db3d7749c9c2b1c9bc85e95e0baeca439d699ff32ea24815fc916c4071b08f67ed8219df229ce1129bd languageName: node linkType: hard -"postcss-unique-selectors@npm:^5.0.2": - version: 5.0.2 - resolution: "postcss-unique-selectors@npm:5.0.2" +"postcss-unique-selectors@npm:^5.1.1": + version: 5.1.1 + resolution: "postcss-unique-selectors@npm:5.1.1" dependencies: - alphanum-sort: ^1.0.2 postcss-selector-parser: ^6.0.5 peerDependencies: postcss: ^8.2.15 - checksum: ad0f7a8a4f1ed958544c1ede62a1c4b0978e01627a6ef0642f7b044d0f9fdb331318a91f8312f418a773b0f2df06c50896cfaf7e5dd3d0142bd1e5ba75dc9eb7 + checksum: 637e7b786e8558265775c30400c54b6b3b24d4748923f4a39f16a65fd0e394f564ccc9f0a1d3c0e770618a7637a7502ea1d0d79f731d429cb202255253c23278 languageName: node linkType: hard @@ -33672,9 +31838,9 @@ __metadata: linkType: hard "postgres-date@npm:~1.0.4": - version: 1.0.5 - resolution: "postgres-date@npm:1.0.5" - checksum: 67e5b65daf5080394ef9cd12e15dd9e9720a54dcefa5e1f0dbd85512b761c1b837858cac7763c1c29f398a7a39854de9815d13479eab032317313ed50280ebb3 + version: 1.0.7 + resolution: "postgres-date@npm:1.0.7" + checksum: 5745001d47e51cd767e46bcb1710649cd705d91a24d42fa661c454b6dcbb7353c066a5047983c90a626cd3bbfea9e626cc6fa84a35ec57e5bbb28b49f78e13ed languageName: node linkType: hard @@ -33688,8 +31854,8 @@ __metadata: linkType: hard "prebuild-install@npm:^7.1.0": - version: 7.1.0 - resolution: "prebuild-install@npm:7.1.0" + version: 7.1.1 + resolution: "prebuild-install@npm:7.1.1" dependencies: detect-libc: ^2.0.0 expand-template: ^2.0.3 @@ -33698,7 +31864,6 @@ __metadata: mkdirp-classic: ^0.5.3 napi-build-utils: ^1.0.1 node-abi: ^3.3.0 - npmlog: ^4.0.1 pump: ^3.0.0 rc: ^1.2.7 simple-get: ^4.0.0 @@ -33706,7 +31871,7 @@ __metadata: tunnel-agent: ^0.6.0 bin: prebuild-install: bin.js - checksum: 204f2d89c6d6179fa1039036514aa72f7d0b537e421ef72c40840286e318f41489f00f22c6acc725cce6e10d43825b69dcabeaadfc917db781c58cd56fc25f90 + checksum: dbf96d0146b6b5827fc8f67f72074d2e19c69628b9a7a0a17d0fad1bf37e9f06922896972e074197fc00a52eae912993e6ef5a0d471652f561df5cb516f3f467 languageName: node linkType: hard @@ -33778,7 +31943,7 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^27.0.0, pretty-format@npm:^27.5.1": +"pretty-format@npm:^27.0.0, pretty-format@npm:^27.0.2, pretty-format@npm:^27.5.1": version: 27.5.1 resolution: "pretty-format@npm:27.5.1" dependencies: @@ -33789,28 +31954,25 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^27.0.2": - version: 27.3.1 - resolution: "pretty-format@npm:27.3.1" +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.0.3": + version: 29.0.3 + resolution: "pretty-format@npm:29.0.3" dependencies: - "@jest/types": ^27.2.5 - ansi-regex: ^5.0.1 + "@jest/schemas": ^29.0.0 ansi-styles: ^5.0.0 - react-is: ^17.0.1 - checksum: 2979eae85a4f7ba1c3946faa8f5c6497cc80dc64ba499ccd5fdada267f82dc664f315a4c1cdd4c0b4b97edbae399a7bf0a957cc1b87feb91cd95f1e436834fed + react-is: ^18.0.0 + checksum: 239aa73b09919b195353e62530908b43883af66e3ba8ecb5fda77578b20f297fd774fcf53abbedcb6cfff72521e8a220052a49e6a0e29418082d06386da27bac languageName: node linkType: hard -"printj@npm:~1.1.0": - version: 1.1.2 - resolution: "printj@npm:1.1.2" - bin: - printj: ./bin/printj.njs - checksum: 1c0c66844545415e339356ad62009cdc467819817b1e0341aba428087a1414d46b84089edb4e77ef24705829f8aae6349724b9c7bd89d8690302b2de7a89b315 +"prismjs@npm:^1.27.0": + version: 1.29.0 + resolution: "prismjs@npm:1.29.0" + checksum: 007a8869d4456ff8049dc59404e32d5666a07d99c3b0e30a18bd3b7676dfa07d1daae9d0f407f20983865fd8da56de91d09cb08e6aa61f5bc420a27c0beeaf93 languageName: node linkType: hard -"prismjs@npm:^1.27.0, prismjs@npm:~1.27.0": +"prismjs@npm:~1.27.0": version: 1.27.0 resolution: "prismjs@npm:1.27.0" checksum: 85c7f4a3e999073502cc9e1882af01e3709706369ec254b60bff1149eda701f40d02512acab956012dc7e61cfd61743a3a34c1bd0737e8dbacd79141e5698bbc @@ -33824,7 +31986,7 @@ __metadata: languageName: node linkType: hard -"proc-log@npm:^2.0.0": +"proc-log@npm:^2.0.0, proc-log@npm:^2.0.1": version: 2.0.1 resolution: "proc-log@npm:2.0.1" checksum: f6f23564ff759097db37443e6e2765af84979a703d2c52c1b9df506ee9f87caa101ba49d8fdc115c1a313ec78e37e8134704e9069e6a870f3499d98bb24c436f @@ -33955,9 +32117,9 @@ __metadata: linkType: hard "property-expr@npm:^2.0.4": - version: 2.0.4 - resolution: "property-expr@npm:2.0.4" - checksum: 7ac142e189f0feef685f327f582efe13bfbc24a0b6e2328afdb38520bc140caa5f91dfa9529f2539b4468d85dc83a593e1ef0e0f7401b525368bb634b323bf54 + version: 2.0.5 + resolution: "property-expr@npm:2.0.5" + checksum: 4ebe82ce45aaf1527e96e2ab84d75d25217167ec3ff6378cf83a84fb4abc746e7c65768a79d275881602ae82f168f9a6dfaa7f5e331d0fcc83d692770bcce5f1 languageName: node linkType: hard @@ -33971,9 +32133,9 @@ __metadata: linkType: hard "property-information@npm:^6.0.0": - version: 6.0.1 - resolution: "property-information@npm:6.0.1" - checksum: 9a147208ae3bb98629012d384cd8184f5021d60aee9f67d0459605e0c94e2f24db9e263d2b67c333e79981cd7349172a524638681d6e167ddf1c7f06cb2ff2c6 + version: 6.1.1 + resolution: "property-information@npm:6.1.1" + checksum: 654b1e5c3578e1d522bd22b7cf48881f5054789969ddbefea22e5359805fda5dbf0c5ef76bb26516da26fedac8752587ddc4c8f3b9e16bc0c6e7feb8b6086864 languageName: node linkType: hard @@ -33985,17 +32147,17 @@ __metadata: linkType: hard "proto3-json-serializer@npm:^1.0.0": - version: 1.0.0 - resolution: "proto3-json-serializer@npm:1.0.0" + version: 1.1.0 + resolution: "proto3-json-serializer@npm:1.1.0" dependencies: - protobufjs: ^6.11.2 - checksum: 47ac3b7c48eb177aba3e59431704c5db24d670827bd47ef7488e3529ab85e0de4833ed22615945fa72597dd382aa505b8dd427c917c4c50d31e7570d8af21294 + protobufjs: ^7.0.0 + checksum: a68f7102746a21e2fe6d7afdf89f47b94084a1165ca3062e284922ecca12f20a3ec911bc5f3fdb63fc0cfc9a0cff2b4396befb988c66061ae686d17ff0b6a9fd languageName: node linkType: hard -"protobufjs-cli@npm:1.0.0": - version: 1.0.0 - resolution: "protobufjs-cli@npm:1.0.0" +"protobufjs-cli@npm:1.0.2": + version: 1.0.2 + resolution: "protobufjs-cli@npm:1.0.2" dependencies: chalk: ^4.0.0 escodegen: ^1.13.0 @@ -34012,13 +32174,13 @@ __metadata: bin: pbjs: bin/pbjs pbts: bin/pbts - checksum: 3346b3ebb0b8a1e6eb2c319f92d0e193632c8068a4b3f2379e8a655c03c359a7a723606f356014eaba70e23423a9e112c274262dfb36369ca57eb6219248bf38 + checksum: 75dfa8bb76ea390c4f4926120439892fce6c730ec56960e85d5f03cac9c390fd7467d1254833542d722616ab4cb64a622e6de2fb7c75e7c42972878ae447b773 languageName: node linkType: hard -"protobufjs@npm:6.11.3, protobufjs@npm:^6.10.0, protobufjs@npm:^6.11.2": - version: 6.11.3 - resolution: "protobufjs@npm:6.11.3" +"protobufjs@npm:7.1.1, protobufjs@npm:^7.0.0": + version: 7.1.1 + resolution: "protobufjs@npm:7.1.1" dependencies: "@protobufjs/aspromise": ^1.1.2 "@protobufjs/base64": ^1.1.2 @@ -34030,41 +32192,16 @@ __metadata: "@protobufjs/path": ^1.1.2 "@protobufjs/pool": ^1.1.0 "@protobufjs/utf8": ^1.1.0 - "@types/long": ^4.0.1 - "@types/node": ">=13.7.0" - long: ^4.0.0 - bin: - pbjs: bin/pbjs - pbts: bin/pbts - checksum: 4a6ce1964167e4c45c53fd8a312d7646415c777dd31b4ba346719947b88e61654912326101f927da387d6b6473ab52a7ea4f54d6f15d63b31130ce28e2e15070 - languageName: node - linkType: hard - -"protobufjs@npm:7.0.0, protobufjs@npm:^7.0.0": - version: 7.0.0 - resolution: "protobufjs@npm:7.0.0" - dependencies: - "@protobufjs/aspromise": ^1.1.2 - "@protobufjs/base64": ^1.1.2 - "@protobufjs/codegen": ^2.0.4 - "@protobufjs/eventemitter": ^1.1.0 - "@protobufjs/fetch": ^1.1.0 - "@protobufjs/float": ^1.0.2 - "@protobufjs/inquire": ^1.1.0 - "@protobufjs/path": ^1.1.2 - "@protobufjs/pool": ^1.1.0 - "@protobufjs/utf8": ^1.1.0 - "@types/long": ^4.0.1 "@types/node": ">=13.7.0" long: ^5.0.0 - checksum: 84c12ceef34d190bb0e08c7203a4e066c66b67fa788ac18575b5c45a269a515c3921b13116e12fe55ffe1fd4831ce208481d44231b75dbe0a8730ab4ca51c84b + checksum: f6b0e7cec29056cefb83902009b39d24ac14a6117b52bc9b291b29778dad010e42d5563a20045e4de89b880114f4214f984396c8296a0d1b22f5dc7d9fe6705e languageName: node linkType: hard -"protocols@npm:^1.1.0, protocols@npm:^1.4.0": - version: 1.4.7 - resolution: "protocols@npm:1.4.7" - checksum: e4be48f9304303bdbca6159cbbf04edc91ff34921e6e3e3e75ea29eb02e64b38191b73f3404d14f551af87b53572a321b59a402b31a3a2005d62b668b35a8b53 +"protocols@npm:^1.4.0": + version: 1.4.8 + resolution: "protocols@npm:1.4.8" + checksum: 2d555c013df0b05402970f67f7207c9955a92b1d13ffa503c814b5fe2f6dde7ac6a03320e0975c1f5832b0113327865e0b3b28bfcad023c25ddb54b53fab8684 languageName: node linkType: hard @@ -34118,9 +32255,9 @@ __metadata: linkType: hard "psl@npm:^1.1.28, psl@npm:^1.1.33": - version: 1.8.0 - resolution: "psl@npm:1.8.0" - checksum: 6150048ed2da3f919478bee8a82f3828303bc0fc730fb015a48f83c9977682c7b28c60ab01425a72d82a2891a1681627aa530a991d50c086b48a3be27744bde7 + version: 1.9.0 + resolution: "psl@npm:1.9.0" + checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d languageName: node linkType: hard @@ -34218,7 +32355,7 @@ __metadata: languageName: node linkType: hard -"qs@npm:6.10.3, qs@npm:^6.10.1, qs@npm:^6.10.2, qs@npm:^6.10.3, qs@npm:^6.9.1, qs@npm:^6.9.4, qs@npm:^6.9.6": +"qs@npm:6.10.3": version: 6.10.3 resolution: "qs@npm:6.10.3" dependencies: @@ -34234,29 +32371,43 @@ __metadata: languageName: node linkType: hard -"qs@npm:6.9.7": - version: 6.9.7 - resolution: "qs@npm:6.9.7" - checksum: 5bbd263332ccf320a1f36d04a2019a5834dc20bcb736431eaccde2a39dcba03fb26d2fd00174f5d7bc26aaad1cad86124b18440883ac042ea2a0fca6170c1bf1 +"qs@npm:^6.10.1, qs@npm:^6.10.2, qs@npm:^6.10.3, qs@npm:^6.9.1, qs@npm:^6.9.4, qs@npm:^6.9.6": + version: 6.11.0 + resolution: "qs@npm:6.11.0" + dependencies: + side-channel: ^1.0.4 + checksum: 6e1f29dd5385f7488ec74ac7b6c92f4d09a90408882d0c208414a34dd33badc1a621019d4c799a3df15ab9b1d0292f97c1dd71dc7c045e69f81a8064e5af7297 languageName: node linkType: hard "qs@npm:~6.5.2": - version: 6.5.2 - resolution: "qs@npm:6.5.2" - checksum: 24af7b9928ba2141233fba2912876ff100403dba1b08b20c3b490da9ea6c636760445ea2211a079e7dfa882a5cf8f738337b3748c8bdd0f93358fa8881d2db8f + version: 6.5.3 + resolution: "qs@npm:6.5.3" + checksum: 6f20bf08cabd90c458e50855559539a28d00b2f2e7dddcb66082b16a43188418cb3cb77cbd09268bcef6022935650f0534357b8af9eeb29bf0f27ccb17655692 languageName: node linkType: hard -"query-string@npm:^7.0.0": - version: 7.0.0 - resolution: "query-string@npm:7.0.0" +"query-string@npm:^6.13.8": + version: 6.14.1 + resolution: "query-string@npm:6.14.1" dependencies: decode-uri-component: ^0.2.0 filter-obj: ^1.1.0 split-on-first: ^1.0.0 strict-uri-encode: ^2.0.0 - checksum: 6e3c4376ff01f49bf2300b36e37291e2d3be8df4fe1839d048dd89d4166b92ecd67525c88ca66b61cbc5612ca29fa4e40002d25a74f59b99f7022045b9e7abd2 + checksum: f2c7347578fa0f3fd4eaace506470cb4e9dc52d409a7ddbd613f614b9a594d750877e193b5d5e843c7477b3b295b857ec328903c943957adc41a3efb6c929449 + languageName: node + linkType: hard + +"query-string@npm:^7.0.0": + version: 7.1.1 + resolution: "query-string@npm:7.1.1" + dependencies: + decode-uri-component: ^0.2.0 + filter-obj: ^1.1.0 + split-on-first: ^1.0.0 + strict-uri-encode: ^2.0.0 + checksum: b227d1f588ae93f9f0ad078c6b811295fa151dc5a160a03bb2bac5fa0e6919cb1daa570aad1d288e77c8e89fde5362ba505b1014e6e793da9b1e885b59a690a6 languageName: node linkType: hard @@ -34281,6 +32432,13 @@ __metadata: languageName: node linkType: hard +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 + languageName: node + linkType: hard + "quick-format-unescaped@npm:^3.0.3": version: 3.0.3 resolution: "quick-format-unescaped@npm:3.0.3" @@ -34303,9 +32461,9 @@ __metadata: linkType: hard "raf-schd@npm:^4.0.2": - version: 4.0.2 - resolution: "raf-schd@npm:4.0.2" - checksum: 9af6e00e36b2844371c61da071cf1fa0d6093dc20eadc654fbb3d940a713df61f037c2e24287eebe8201a41b6acc910b865a4e24010b3a09aba7f4a9616b975a + version: 4.0.3 + resolution: "raf-schd@npm:4.0.3" + checksum: 45514041c5ad31fa96aef3bb3c572a843b92da2f2cd1cb4a47c9ad58e48761d3a4126e18daa32b2bfa0bc2551a42d8f324a0e40e536cb656969929602b4e8b58 languageName: node linkType: hard @@ -34375,18 +32533,6 @@ __metadata: languageName: node linkType: hard -"raw-body@npm:2.4.3": - version: 2.4.3 - resolution: "raw-body@npm:2.4.3" - dependencies: - bytes: 3.1.2 - http-errors: 1.8.1 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - checksum: d2961fa3c71c9c22dc2c3fd60ff377bf36dfed7d7a748f2b25d585934a3e9df565bb9aa5bc2e3a716ea941f4bc2a6ddc795c8b0cf7219fb071029b59b1985394 - languageName: node - linkType: hard - "raw-body@npm:2.5.1, raw-body@npm:^2.4.1": version: 2.5.1 resolution: "raw-body@npm:2.5.1" @@ -34414,16 +32560,16 @@ __metadata: linkType: hard "rc-util@npm:^5.16.1": - version: 5.16.1 - resolution: "rc-util@npm:5.16.1" + version: 5.24.3 + resolution: "rc-util@npm:5.24.3" dependencies: - "@babel/runtime": ^7.12.5 + "@babel/runtime": ^7.18.3 react-is: ^16.12.0 shallowequal: ^1.1.0 peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: f2a6fd262d91d0b2ee1d84853c5ab212c9138b535ce5df8fa807fad4d8772539cbf0fee8cf7044ce9d47d8847950dfa5ae2f884c40eda9b0e9879050e4d549ec + checksum: 1f141d114f42dbce9f51cc2e408da7c706bba453880efe85c02155aab4e790690cd2b97fdbe501a8524c7f95a35757973bf0bbf59619b455407e63b8d2ebee17 languageName: node linkType: hard @@ -34442,20 +32588,20 @@ __metadata: linkType: hard "react-beautiful-dnd@npm:^13.0.0": - version: 13.0.0 - resolution: "react-beautiful-dnd@npm:13.0.0" + version: 13.1.1 + resolution: "react-beautiful-dnd@npm:13.1.1" dependencies: - "@babel/runtime": ^7.8.4 + "@babel/runtime": ^7.9.2 css-box-model: ^1.2.0 memoize-one: ^5.1.1 raf-schd: ^4.0.2 - react-redux: ^7.1.1 + react-redux: ^7.2.0 redux: ^4.0.4 use-memo-one: ^1.1.1 peerDependencies: - react: ^16.8.5 - react-dom: ^16.8.5 - checksum: ccf98ce502b5a290daa304d24a1b3ea0e54d43627cda0cdc8eeb65bb84c99e3928098f13e2b09452d02e94974800adaa0a269756500716f19b40ba0bcf9b597b + react: ^16.8.5 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.5 || ^17.0.0 || ^18.0.0 + checksum: 5f90f7c0ab77a14dfcd496cbd94bbde457612f380c6fc815f3bba7b52effd75132948fcaa661a902a184bb1e6ae5896dcf5b0c77c4ddf809a2c65288f3eed5a7 languageName: node linkType: hard @@ -34564,13 +32710,13 @@ __metadata: linkType: hard "react-error-boundary@npm:^3.1.0": - version: 3.1.3 - resolution: "react-error-boundary@npm:3.1.3" + version: 3.1.4 + resolution: "react-error-boundary@npm:3.1.4" dependencies: "@babel/runtime": ^7.12.5 peerDependencies: react: ">=16.13.1" - checksum: 0a05af404aa054c54d7bc65a1814810093bf136c3ad4b3576a51d8509ee8fc302adfb66405da501fc01e839db557dd0d994b487e651897e36293907bb61458cf + checksum: f36270a5d775a25c8920f854c0d91649ceea417b15b5bc51e270a959b0476647bb79abb4da3be7dd9a4597b029214e8fe43ea914a7f16fa7543c91f784977f1b languageName: node linkType: hard @@ -34613,11 +32759,11 @@ __metadata: linkType: hard "react-hook-form@npm:^7.12.2, react-hook-form@npm:^7.13.0": - version: 7.32.2 - resolution: "react-hook-form@npm:7.32.2" + version: 7.35.0 + resolution: "react-hook-form@npm:7.35.0" peerDependencies: react: ^16.8.0 || ^17 || ^18 - checksum: abe8ba146c313d206f99a01260457bc72af03b2c73d7bd4be5af11598140ec45ef1ef37bac64b80c4dbc298d6aa21af4caa259a133f305a04ddf583faa18e7d0 + checksum: e0e78de4a08fdae9eebf248ddefd99ff35d4964ef2815006704ae4a43972786f62dede3847b41e29d3e89ea6cb16c8f5837b1e00238aa65f7c38cb52aabcaf5b languageName: node linkType: hard @@ -34672,7 +32818,7 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.8.0 || ^17.0.0, react-is@npm:^17.0.1": +"react-is@npm:^16.8.0 || ^17.0.0, react-is@npm:^17.0.1, react-is@npm:^17.0.2": version: 17.0.2 resolution: "react-is@npm:17.0.2" checksum: 9d6d111d8990dc98bc5402c1266a808b0459b5d54830bbea24c12d908b536df7883f268a7868cfaedde3dd9d4e0d574db456f84d2e6df9c4526f99bb4b5344d8 @@ -34680,9 +32826,9 @@ __metadata: linkType: hard "react-is@npm:^18.0.0": - version: 18.0.0 - resolution: "react-is@npm:18.0.0" - checksum: d38f6afee4d8d791cdd69c715841c01a503c9b06da6158e0893447cea6ba50cd262dca9bde84127720cf44fd05c58185eafc32accace4bb2deb03b3cdbeb6b6b + version: 18.2.0 + resolution: "react-is@npm:18.2.0" + checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e languageName: node linkType: hard @@ -34719,24 +32865,24 @@ __metadata: languageName: node linkType: hard -"react-redux@npm:^7.1.1, react-redux@npm:^7.2.4": - version: 7.2.5 - resolution: "react-redux@npm:7.2.5" +"react-redux@npm:^7.2.0, react-redux@npm:^7.2.4": + version: 7.2.8 + resolution: "react-redux@npm:7.2.8" dependencies: - "@babel/runtime": ^7.12.1 - "@types/react-redux": ^7.1.16 + "@babel/runtime": ^7.15.4 + "@types/react-redux": ^7.1.20 hoist-non-react-statics: ^3.3.2 loose-envify: ^1.4.0 prop-types: ^15.7.2 - react-is: ^16.13.1 + react-is: ^17.0.2 peerDependencies: - react: ^16.8.3 || ^17 + react: ^16.8.3 || ^17 || ^18 peerDependenciesMeta: react-dom: optional: true react-native: optional: true - checksum: 04ac4a4178067cbcfc05506dfea9f7e01730093a5752f050567f7ae4a38c03c96da9d8fed051f8ab1ecede5ea8a15ee41c5f6c5eeb7f04f37e4d13e431ec7830 + checksum: ecf1933e91013f2d41bfc781515b536bf81eb1f70ff228607841094c8330fe77d522372b359687e51c0b52b9888dba73db9ac0486aace1896ab9eb9daec102d5 languageName: node linkType: hard @@ -34761,17 +32907,15 @@ __metadata: languageName: node linkType: hard -"react-resize-detector@npm:^6.6.3": - version: 6.7.8 - resolution: "react-resize-detector@npm:6.7.8" +"react-resize-detector@npm:^7.1.2": + version: 7.1.2 + resolution: "react-resize-detector@npm:7.1.2" dependencies: - "@types/resize-observer-browser": ^0.1.6 lodash: ^4.17.21 - resize-observer-polyfill: ^1.5.1 peerDependencies: - react: ^16.0.0 || ^17.0.0 - react-dom: ^16.0.0 || ^17.0.0 - checksum: dc8acbe216f70a60466d55d4f47c1468fecf074544a1e07234461b36eefed2b222f6e550c91e7ae02983e2842308d2a48ba8383029efb5d27ac749c48e3a09ae + react: ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 + checksum: 55f4abad7f7523d16b081b5ab20f75c539a54a08253ce7e9df473d48386f42ceca6c31584ba9fa26e3528b498ef6685ec77fb9a22cffc97df05fb326d0bf1b26 languageName: node linkType: hard @@ -34802,41 +32946,40 @@ __metadata: linkType: hard "react-router-dom-stable@npm:react-router-dom@^6.3.0, react-router-dom@npm:^6.3.0": - version: 6.3.0 - resolution: "react-router-dom@npm:6.3.0" + version: 6.4.0 + resolution: "react-router-dom@npm:6.4.0" dependencies: - history: ^5.2.0 - react-router: 6.3.0 + react-router: 6.4.0 peerDependencies: react: ">=16.8" react-dom: ">=16.8" - checksum: 77603a654f8a8dc7f65535a2e5917a65f8d9ffcb06546d28dd297e52adcc4b8a84377e0115f48dca330b080af2da3e78f29d590c89307094d36927d2b1751ec3 + checksum: 5595bb168ce4a67ff72c1e3c1a9509bd1931da00f19c29d325b68a5a189577342d071a3c25f7c11dc7b489bcd48144206e4bc65e5be15ee9bc92515f0c1a0737 languageName: node linkType: hard -"react-router-stable@npm:react-router@^6.3.0, react-router@npm:6.3.0, react-router@npm:^6.3.0": - version: 6.3.0 - resolution: "react-router@npm:6.3.0" +"react-router-stable@npm:react-router@^6.3.0, react-router@npm:6.4.0, react-router@npm:^6.3.0": + version: 6.4.0 + resolution: "react-router@npm:6.4.0" dependencies: - history: ^5.2.0 + "@remix-run/router": 1.0.0 peerDependencies: react: ">=16.8" - checksum: 7be673f5e72104be01e6ab274516bdb932efd93305243170690f6560e3bd1035dd1df3d3c9ce1e0f452638a2529f43a1e77dcf0934fc8031c4783da657be13ca + checksum: d2bc04f9a5a931256f35217cbbb0da7047bb5368831d300153155222b2994c9a263f598fe2ef213d530663b86cef59a9bef1912f60bd11779214794164fa290c languageName: node linkType: hard "react-side-effect@npm:^2.1.0": - version: 2.1.0 - resolution: "react-side-effect@npm:2.1.0" + version: 2.1.2 + resolution: "react-side-effect@npm:2.1.2" peerDependencies: - react: ^16.3.0 - checksum: 9bd58e63d6b38246f5a7f2e11aeaa57e52edf117eb3fc1304acee1b4de96d4b0a73cebf4cc874445edddb8196b72d015c60714e4b03152323fac8a70cdcecde6 + react: ^16.3.0 || ^17.0.0 || ^18.0.0 + checksum: c5eb1f42b464fb093bca59aaae0f1b2060373a2aaff95275b8781493628cdbbb6acdd6014e7883782c65c361f35a30f28cc515d68a1263ddb39cbbc47110be53 languageName: node linkType: hard "react-smooth@npm:^1.0.5": - version: 1.0.5 - resolution: "react-smooth@npm:1.0.5" + version: 1.0.6 + resolution: "react-smooth@npm:1.0.6" dependencies: lodash: ~4.17.4 prop-types: ^15.6.0 @@ -34845,22 +32988,21 @@ __metadata: peerDependencies: react: ^15.0.0 || ^16.0.0 react-dom: ^15.0.0 || ^16.0.0 - checksum: 29a2a00e09e0f5d4dea4424f945dc7dab9b611184c60b01bd24082b6293f9e5e4bafe0e4386d4c52a2c9c651caff3eeb5ce0966917a0bd06ba1165306853c822 + checksum: ade69a9e120a275a0b67b7c8335168d3f7c74be4a3f1c60d099ab1c565cfa7bbf30dd49279214e7e847d86720f57bafce986d43814d17cbc13e8217fdac018f5 languageName: node linkType: hard -"react-smooth@npm:^2.0.0": - version: 2.0.0 - resolution: "react-smooth@npm:2.0.0" +"react-smooth@npm:^2.0.1": + version: 2.0.1 + resolution: "react-smooth@npm:2.0.1" dependencies: fast-equals: ^2.0.0 - raf: ^3.4.0 react-transition-group: 2.9.0 peerDependencies: prop-types: ^15.6.0 - react: ^15.0.0 || ^16.0.0 || ^17.0.0 - react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 4eff3fb93067b538e046df2c56a2f99b25f4c3a2aafc1c59707d1a0150f7f0afab408afdc1a47ffa3556adbdb5c915d6035a9a28da878e68771dce7568cc6f69 + react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + checksum: 65678491cbd506573f2dba82778ebf8259714d68dd227e0ee7c0e204bcbc7839cf97401620b4223814066581f1dce0493f97162a03dc2a68058b5a7ad2b41085 languageName: node linkType: hard @@ -34933,8 +33075,8 @@ __metadata: linkType: hard "react-transition-group@npm:^4.0.0, react-transition-group@npm:^4.4.0": - version: 4.4.1 - resolution: "react-transition-group@npm:4.4.1" + version: 4.4.5 + resolution: "react-transition-group@npm:4.4.5" dependencies: "@babel/runtime": ^7.5.5 dom-helpers: ^5.0.1 @@ -34943,7 +33085,7 @@ __metadata: peerDependencies: react: ">=16.6.0" react-dom: ">=16.6.0" - checksum: 0bcd8af483709832e318dcef84c26ebddeb866bf4f58010286367ef0c1e7c5106e00cfc65688b9102414cb3d572c63909c2eb7ea972b4420fc70a78c10b6e8ad + checksum: 75602840106aa9c6545149d6d7ae1502fb7b7abadcce70a6954c4b64a438ff1cd16fc77a0a1e5197cdd72da398f39eb929ea06f9005c45b132ed34e056ebdeb1 languageName: node linkType: hard @@ -34983,12 +33125,12 @@ __metadata: linkType: hard "react-virtualized-auto-sizer@npm:^1.0.6": - version: 1.0.6 - resolution: "react-virtualized-auto-sizer@npm:1.0.6" + version: 1.0.7 + resolution: "react-virtualized-auto-sizer@npm:1.0.7" peerDependencies: - react: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 - react-dom: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 - checksum: 81270e9d328e9b779515f42b6aa8dea2f21097f69fc776906d6b7d31ada03706d34408a6318baf59531f180402fbf74fdb9928ab65d53442a134b7ee5ba01265 + react: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0-rc + react-dom: ^15.3.0 || ^16.0.0-alpha || ^17.0.0 || ^18.0.0-rc + checksum: 7f2f013c422771828c6613c7890f792aa90a033ea2b41c489c67ca2c6793eefa94d25232c1050fdf69cdd626fad9e3821c5003d45fa6fc831184cd09232023c2 languageName: node linkType: hard @@ -35022,6 +33164,13 @@ __metadata: languageName: node linkType: hard +"read-cmd-shim@npm:^3.0.0": + version: 3.0.1 + resolution: "read-cmd-shim@npm:3.0.1" + checksum: 79fe66aa78eddcca8dc196765ae3168b3a56e2b69ba54071525eb00a9eeee8cc83b3d5f784432c3d8ce868787fdc059b1a1e0b605246b5108c9003fc927ea263 + languageName: node + linkType: hard + "read-package-json-fast@npm:^2.0.1, read-package-json-fast@npm:^2.0.2, read-package-json-fast@npm:^2.0.3": version: 2.0.3 resolution: "read-package-json-fast@npm:2.0.3" @@ -35033,26 +33182,38 @@ __metadata: linkType: hard "read-package-json@npm:^3.0.0": - version: 3.0.0 - resolution: "read-package-json@npm:3.0.0" + version: 3.0.1 + resolution: "read-package-json@npm:3.0.1" dependencies: glob: ^7.1.1 json-parse-even-better-errors: ^2.3.0 normalize-package-data: ^3.0.0 npm-normalize-package-bin: ^1.0.0 - checksum: f17d10f7c3bd641c0462184cdeacfe22f9494911d4ab3232dd987accc75b6c26387c4573811486e733d1b403780de8c9b2187a51f8d56ff7165f79c199ddce71 + checksum: 963904f00f70283e89b8a4a06b51b1453e7e23a9a029af3030e301f8c2429a2bad21a72c53943cdb735c9a7b643282d5b0b1a09b7d31f74640e81311127f8f68 + languageName: node + linkType: hard + +"read-package-json@npm:^4.1.1": + version: 4.1.2 + resolution: "read-package-json@npm:4.1.2" + dependencies: + glob: ^7.1.1 + json-parse-even-better-errors: ^2.3.0 + normalize-package-data: ^3.0.0 + npm-normalize-package-bin: ^1.0.0 + checksum: 729acda12fdbff6cee8cee7b6023a16e85c02406e2427b3cd091948d945940cfb6a6ebe7a8b4df967d483f360d0ec12fb83ab80de3e7bbb2ba2c426d07fd774e languageName: node linkType: hard "read-package-json@npm:^5.0.0": - version: 5.0.1 - resolution: "read-package-json@npm:5.0.1" + version: 5.0.2 + resolution: "read-package-json@npm:5.0.2" dependencies: glob: ^8.0.1 json-parse-even-better-errors: ^2.3.1 normalize-package-data: ^4.0.0 - npm-normalize-package-bin: ^1.0.1 - checksum: e8c2ad72df1f17e71268feabdb9bb0153ed2c7d38a05b759c5c49cf368a754bdd3c0e8a279fbc8d707802ff91d2cf144a995e6ebd5534de2848d52ab2c14034d + npm-normalize-package-bin: ^2.0.0 + checksum: 0882ac9cec1bc92fb5515e9727611fb2909351e1e5c840dce3503cbb25b4cd48eb44b61071986e0fc51043208161f07d364a7336206c8609770186818753b51a languageName: node linkType: hard @@ -35178,11 +33339,11 @@ __metadata: linkType: hard "readdir-glob@npm:^1.0.0": - version: 1.1.1 - resolution: "readdir-glob@npm:1.1.1" + version: 1.1.2 + resolution: "readdir-glob@npm:1.1.2" dependencies: - minimatch: ^3.0.4 - checksum: 8dc4ff606aa9ac8f6ac628dfad918aed6514c8b427922928f2ef380a1be106d5b6f1d106af34607955ad504f89f39d83a9b42c5316ed8b96b5f75391e33a6afc + minimatch: ^5.1.0 + checksum: 1e5f701d3c94af5653e1736dfef99e991869c6e1c87bf08835d8c641f767e73ae25b829d3d1f8504fab8cad49b70b718ef960d3afee5be45cd779ccaeb264ed4 languageName: node linkType: hard @@ -35208,14 +33369,14 @@ __metadata: linkType: hard "recast@npm:^0.20.3, recast@npm:^0.20.4": - version: 0.20.4 - resolution: "recast@npm:0.20.4" + version: 0.20.5 + resolution: "recast@npm:0.20.5" dependencies: ast-types: 0.14.2 esprima: ~4.0.0 source-map: ~0.6.1 tslib: ^2.0.1 - checksum: d858095cbd89908e401c5f51734c410a3a80b7dfcc099fe2e4b1ec4cf8b6f046d24830628edad5047cc3ff3cbed9828dc90271a81f5a243a4722d0a8078e6d57 + checksum: 14c35115cd9965950724cb2968f069a247fa79ce890643ab6dc3795c705b363f7b92a45238e9f765387c306763be9955f72047bb9d15b5d60b0a55f9e7912d5a languageName: node linkType: hard @@ -35251,27 +33412,28 @@ __metadata: linkType: hard "recharts@npm:^2.1.5": - version: 2.1.9 - resolution: "recharts@npm:2.1.9" + version: 2.1.14 + resolution: "recharts@npm:2.1.14" dependencies: - "@types/d3-interpolate": ^2.0.0 - "@types/d3-scale": ^3.0.0 - "@types/d3-shape": ^2.0.0 + "@types/d3-interpolate": ^3.0.1 + "@types/d3-scale": ^4.0.2 + "@types/d3-shape": ^3.1.0 classnames: ^2.2.5 - d3-interpolate: ^2.0.0 - d3-scale: ^3.0.0 - d3-shape: ^2.0.0 + d3-interpolate: ^3.0.1 + d3-scale: ^4.0.2 + d3-shape: ^3.1.0 eventemitter3: ^4.0.1 lodash: ^4.17.19 react-is: ^16.10.2 - react-resize-detector: ^6.6.3 - react-smooth: ^2.0.0 + react-resize-detector: ^7.1.2 + react-smooth: ^2.0.1 recharts-scale: ^0.4.4 reduce-css-calc: ^2.1.8 peerDependencies: - react: ^16.0.0 || ^17.0.0 - react-dom: ^16.0.0 || ^17.0.0 - checksum: 5751ba78b08c9bf43b381750e302716df7ebc838a26bc8695892b1dd8293f858256d5b949defbb2d07395e7cf8873484b397ea804a60743e366e3211309c7433 + prop-types: ^15.6.0 + react: ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 + checksum: 58f11fe8c9c4c36ddfe464ed896a7fd61b3c6cedeeab07cd86f286604dc11e96d2dc9288c55bb9c4e3c083ee325ffcccb5d0e6bc43a747c72110d25300624b22 languageName: node linkType: hard @@ -35368,11 +33530,11 @@ __metadata: linkType: hard "redux@npm:^4.0.0, redux@npm:^4.0.4, redux@npm:^4.1.2": - version: 4.1.2 - resolution: "redux@npm:4.1.2" + version: 4.2.0 + resolution: "redux@npm:4.2.0" dependencies: "@babel/runtime": ^7.9.2 - checksum: 6a839cee5bd580c5298d968e9e2302150e961318253819bcd97f9d945a5a409559eacddf6026f4118bb68b681c593d90e8a2c5bbf278f014aff9bf0d2d8fa084 + checksum: 75f3955c89b3f18edf5411e5fb482aa2e4f41a416183e8802a6bf6472c4fc3d47675b8b321d147f8af8e0f616436ac507bf5a25f1c4d6180e797b549c7db2c1d languageName: node linkType: hard @@ -35394,28 +33556,12 @@ __metadata: languageName: node linkType: hard -"regenerate-unicode-properties@npm:^10.0.1": - version: 10.0.1 - resolution: "regenerate-unicode-properties@npm:10.0.1" +"regenerate-unicode-properties@npm:^10.1.0": + version: 10.1.0 + resolution: "regenerate-unicode-properties@npm:10.1.0" dependencies: regenerate: ^1.4.2 - checksum: 1b638b7087d8143e5be3e20e2cda197ea0440fa0bc2cc49646b2f50c5a2b1acdc54b21e4215805a5a2dd487c686b2291accd5ad00619534098d2667e76247754 - languageName: node - linkType: hard - -"regenerate-unicode-properties@npm:^8.2.0": - version: 8.2.0 - resolution: "regenerate-unicode-properties@npm:8.2.0" - dependencies: - regenerate: ^1.4.0 - checksum: ee7db70ab25b95f2e3f39537089fc3eddba0b39fc9b982d6602f127996ce873d8c55584d5428486ca00dc0a85d174d943354943cd4a745cda475c8fe314b4f8a - languageName: node - linkType: hard - -"regenerate@npm:^1.4.0": - version: 1.4.0 - resolution: "regenerate@npm:1.4.0" - checksum: 8b74ff9d6becc577eecf59ce6eb969c1ce4e6fdabf262d024decd59757741a4598d867cde10dc4ef7ca2a1a415bbf05ddda839cd046050c909117966e118bd5b + checksum: b1a8929588433ab8b9dc1a34cf3665b3b472f79f2af6ceae00d905fc496b332b9af09c6718fb28c730918f19a00dc1d7310adbaa9b72a2ec7ad2f435da8ace17 languageName: node linkType: hard @@ -35484,67 +33630,35 @@ __metadata: languageName: node linkType: hard -"regexpu-core@npm:^4.7.1": - version: 4.7.1 - resolution: "regexpu-core@npm:4.7.1" - dependencies: - regenerate: ^1.4.0 - regenerate-unicode-properties: ^8.2.0 - regjsgen: ^0.5.1 - regjsparser: ^0.6.4 - unicode-match-property-ecmascript: ^1.0.4 - unicode-match-property-value-ecmascript: ^1.2.0 - checksum: 368b4aab72132ba3c8bd114822572c920d390ae99d3d219e0c7f872c6a0a3b1fbe30c88188ff90ec6f8e681667fa8e51d84a78bb05c460996a0df6a060b7ae80 - languageName: node - linkType: hard - "regexpu-core@npm:^5.1.0": - version: 5.1.0 - resolution: "regexpu-core@npm:5.1.0" + version: 5.2.1 + resolution: "regexpu-core@npm:5.2.1" dependencies: regenerate: ^1.4.2 - regenerate-unicode-properties: ^10.0.1 - regjsgen: ^0.6.0 - regjsparser: ^0.8.2 + regenerate-unicode-properties: ^10.1.0 + regjsgen: ^0.7.1 + regjsparser: ^0.9.1 unicode-match-property-ecmascript: ^2.0.0 unicode-match-property-value-ecmascript: ^2.0.0 - checksum: 7b4eb8d182d9d10537a220a93138df5bc7eaf4ed53e36b95e8427d33ed8a2b081468f1a15d3e5fcee66517e1df7f5ca180b999e046d060badd97150f2ffe87b2 + checksum: c1244db79f7a4597414cd7fdf5171fa73905f0cbc684385c78127fc6198f9cade8fe829a1c4036c8ec57ac75b1ffb8c196451abdd2e153f26a4d8043fa10bbb3 languageName: node linkType: hard -"regjsgen@npm:^0.5.1": - version: 0.5.1 - resolution: "regjsgen@npm:0.5.1" - checksum: 946e4bb6c456bb4612fcd823faffe58b0d742e7ec8b4d0d6d43546827de43479e8f9a3172582b36b90c84d7dd240cb2fec892fc699e4304a51bc377f73e13247 +"regjsgen@npm:^0.7.1": + version: 0.7.1 + resolution: "regjsgen@npm:0.7.1" + checksum: 7cac399921c58db8e16454869283ff66871531180218064fa938ac05c11c2976792a00706c3c78bbc625e1d793ca373065ea90564e06189a751a7b4ae33acadc languageName: node linkType: hard -"regjsgen@npm:^0.6.0": - version: 0.6.0 - resolution: "regjsgen@npm:0.6.0" - checksum: c5158ebd735e75074e41292ade1ff05d85566d205426cc61501e360c450a63baced8512ee3ae238e5c0a0e42969563c7875b08fa69d6f0402daf36bcb3e4d348 - languageName: node - linkType: hard - -"regjsparser@npm:^0.6.4": - version: 0.6.4 - resolution: "regjsparser@npm:0.6.4" +"regjsparser@npm:^0.9.1": + version: 0.9.1 + resolution: "regjsparser@npm:0.9.1" dependencies: jsesc: ~0.5.0 bin: regjsparser: bin/parser - checksum: 6058749f802a519d37ebbd6ee6c584a65045c3ae4822a54d53666fd56dfdc3363c6905cf9840956becf34111793fe284db75d57342f4263291b29da0a404e9fe - languageName: node - linkType: hard - -"regjsparser@npm:^0.8.2": - version: 0.8.4 - resolution: "regjsparser@npm:0.8.4" - dependencies: - jsesc: ~0.5.0 - bin: - regjsparser: bin/parser - checksum: d069b932491761cda127ce11f6bd2729c3b1b394a35200ec33f1199e937423db28ceb86cf33f0a97c76ecd7c0f8db996476579eaf0d80a1f74c1934f4ca8b27a + checksum: 5e1b76afe8f1d03c3beaf9e0d935dd467589c3625f6d65fb8ffa14f224d783a0fed4bf49c2c1b8211043ef92b6117313419edf055a098ed8342e340586741afc languageName: node linkType: hard @@ -35586,13 +33700,13 @@ __metadata: linkType: hard "remark-parse@npm:^10.0.0": - version: 10.0.0 - resolution: "remark-parse@npm:10.0.0" + version: 10.0.1 + resolution: "remark-parse@npm:10.0.1" dependencies: "@types/mdast": ^3.0.0 mdast-util-from-markdown: ^1.0.0 unified: ^10.0.0 - checksum: cebd0d8f95b7b0b827277773ddafd05d295a450a2a712f085ccedad2572678712785869b7a0dea53c215f124c22dad5b5247c29d461729933565ed7b5f262e6d + checksum: 505088e564ab53ff054433368adbb7b551f69240c7d9768975529837a86f1d0f085e72d6211929c5c42db315273df4afc94f3d3a8662ffdb69468534c6643d29 languageName: node linkType: hard @@ -35655,9 +33769,9 @@ __metadata: linkType: hard "repeat-element@npm:^1.1.2": - version: 1.1.3 - resolution: "repeat-element@npm:1.1.3" - checksum: 0743a136b484117016ad587577ede60a3ffe604b74e57bd5d7d0aa041fe2f1c956e6b2f3ff83c86f4db9fac022c3fa2da8e58b9d3618b8b4cb1c3d041bcc422f + version: 1.1.4 + resolution: "repeat-element@npm:1.1.4" + checksum: 1edd0301b7edad71808baad226f0890ba709443f03a698224c9ee4f2494c317892dc5211b2ba8cbea7194a9ddbcac01e283bd66de0467ab24ee1fc1a3711d8a9 languageName: node linkType: hard @@ -35770,9 +33884,9 @@ __metadata: linkType: hard "reselect@npm:^4.1.5": - version: 4.1.5 - resolution: "reselect@npm:4.1.5" - checksum: 54c13c1e795b2ea70cba8384138aebe78adda00cbea303cc94b64da0a70d74c896cc9a03115ae38b8bff990e7a60dcd6452ab68cbec01b0b38c1afda70714cf0 + version: 4.1.6 + resolution: "reselect@npm:4.1.6" + checksum: 3ea1058422904063ec93c8f4693fe33dcb2178bbf417ace8db5b2c797a5875cf357d9308d11ed3942ee22507dd34ecfbf1f3a21340a4f31c206cab1d36ceef31 languageName: node linkType: hard @@ -35784,9 +33898,9 @@ __metadata: linkType: hard "resolve-alpn@npm:^1.0.0": - version: 1.0.0 - resolution: "resolve-alpn@npm:1.0.0" - checksum: 146b739f14fad759bc137e7642b4859a7d7a290b61e00db37a468f159932ccefe610006604e6aa7ba2a2991cbd627246f0c74717e8942b7c805c346da35c3f3f + version: 1.2.1 + resolution: "resolve-alpn@npm:1.2.1" + checksum: f558071fcb2c60b04054c99aebd572a2af97ef64128d59bef7ab73bd50d896a222a056de40ffc545b633d99b304c259ea9d0c06830d5c867c34f0bfa60b8eae0 languageName: node linkType: hard @@ -35827,20 +33941,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.6, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0": - version: 1.21.0 - resolution: "resolve@npm:1.21.0" - dependencies: - is-core-module: ^2.8.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: d7d9092a5c04a048bea16c7e5a2eb605ac3e8363a0cc5644de1fde17d5028e8d5f4343aab1d99bd327b98e91a66ea83e242718150c64dfedcb96e5e7aad6c4f5 - languageName: node - linkType: hard - -"resolve@npm:^1.10.0": +"resolve@npm:^1.1.6, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.0": version: 1.22.1 resolution: "resolve@npm:1.22.1" dependencies: @@ -35853,26 +33954,16 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.22.0": - version: 1.22.0 - resolution: "resolve@npm:1.22.0" +"resolve@npm:^2.0.0-next.3": + version: 2.0.0-next.4 + resolution: "resolve@npm:2.0.0-next.4" dependencies: - is-core-module: ^2.8.1 + is-core-module: ^2.9.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: a2d14cc437b3a23996f8c7367eee5c7cf8149c586b07ca2ae00e96581ce59455555a1190be9aa92154785cf9f2042646c200d0e00e0bbd2b8a995a93a0ed3e4e - languageName: node - linkType: hard - -"resolve@npm:^2.0.0-next.3": - version: 2.0.0-next.3 - resolution: "resolve@npm:2.0.0-next.3" - dependencies: - is-core-module: ^2.2.0 - path-parse: ^1.0.6 - checksum: f34b3b93ada77d64a6d590c06a83e198f3a827624c4ec972260905fa6c4d612164fbf0200d16d2beefea4ad1755b001f4a9a1293d8fc2322a8f7d6bf692c4ff5 + checksum: c438ac9a650f2030fd074219d7f12ceb983b475da2d89ad3d6dd05fbf6b7a0a8cd37d4d10b43cb1f632bc19f22246ab7f36ebda54d84a29bfb2910a0680906d3 languageName: node linkType: hard @@ -35895,20 +33986,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.17.0#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin": - version: 1.21.0 - resolution: "resolve@patch:resolve@npm%3A1.21.0#~builtin::version=1.21.0&hash=07638b" - dependencies: - is-core-module: ^2.8.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: a0a4d1f7409e73190f31f901f8a619960bb3bd4ae38ba3a54c7ea7e1c87758d28a73256bb8d6a35996a903d1bf14f53883f0dcac6c571c063cb8162d813ad26e - languageName: node - linkType: hard - -"resolve@patch:resolve@^1.10.0#~builtin": +"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.17.0#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.0#~builtin": version: 1.22.1 resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=07638b" dependencies: @@ -35921,26 +33999,16 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.22.0#~builtin": - version: 1.22.0 - resolution: "resolve@patch:resolve@npm%3A1.22.0#~builtin::version=1.22.0&hash=07638b" +"resolve@patch:resolve@^2.0.0-next.3#~builtin": + version: 2.0.0-next.4 + resolution: "resolve@patch:resolve@npm%3A2.0.0-next.4#~builtin::version=2.0.0-next.4&hash=07638b" dependencies: - is-core-module: ^2.8.1 + is-core-module: ^2.9.0 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: c79ecaea36c872ee4a79e3db0d3d4160b593f2ca16e031d8283735acd01715a203607e9ded3f91f68899c2937fa0d49390cddbe0fb2852629212f3cda283f4a7 - languageName: node - linkType: hard - -"resolve@patch:resolve@^2.0.0-next.3#~builtin": - version: 2.0.0-next.3 - resolution: "resolve@patch:resolve@npm%3A2.0.0-next.3#~builtin::version=2.0.0-next.3&hash=07638b" - dependencies: - is-core-module: ^2.2.0 - path-parse: ^1.0.6 - checksum: 21684b4d99a4877337cdbd5484311c811b3e8910edb5d868eec85c6e6550b0f570d911f9a384f9e176172d6713f2715bd0b0887fa512cb8c6aeece018de6a9f8 + checksum: 4bf9f4f8a458607af90518ff73c67a4bc1a38b5a23fef2bb0ccbd45e8be89820a1639b637b0ba377eb2be9eedfb1739a84cde24fe4cd670c8207d8fea922b011 languageName: node linkType: hard @@ -35964,11 +34032,11 @@ __metadata: linkType: hard "responselike@npm:^2.0.0": - version: 2.0.0 - resolution: "responselike@npm:2.0.0" + version: 2.0.1 + resolution: "responselike@npm:2.0.1" dependencies: lowercase-keys: ^2.0.0 - checksum: 6a4d32c37d4e88678ae0a9d69fcc90aafa15b1a3eab455bd65c06af3c6c4976afc47d07a0e5a60d277ab041a465f43bf0a581e0d7ab33786e7a7741573f2e487 + checksum: b122535466e9c97b55e69c7f18e2be0ce3823c5d47ee8de0d9c0b114aa55741c6db8bfbfce3766a94d1272e61bfb1ebf0a15e9310ac5629fbb7446a861b4fd3a languageName: node linkType: hard @@ -35997,16 +34065,16 @@ __metadata: linkType: hard "retry-request@npm:^5.0.0": - version: 5.0.0 - resolution: "retry-request@npm:5.0.0" + version: 5.0.2 + resolution: "retry-request@npm:5.0.2" dependencies: debug: ^4.1.1 extend: ^3.0.2 - checksum: f1c6eba3a380e994f2693d1734320e1291de16c11d25b3c4ac2f636b60dff02d8b6a977388a60c5a7d269a3ce5f9a72eb65734e0a614ce91e927fba549ed390e + checksum: d6c95d27f4468aa5557605d811cfaa5862be0eaff9fc5f18a338a7c17a7972fbec5b6142abb6b1e494b4c02df875fec2f1c3a281bf79900d33607d8536277ffe languageName: node linkType: hard -"retry@npm:0.13.1": +"retry@npm:0.13.1, retry@npm:^0.13.1": version: 0.13.1 resolution: "retry@npm:0.13.1" checksum: 47c4d5be674f7c13eee4cfe927345023972197dbbdfba5d3af7e461d13b44de1bfd663bfc80d2f601f8ef3fc8164c16dd99655a221921954a65d044a2fc1233b @@ -36028,9 +34096,9 @@ __metadata: linkType: hard "rfc4648@npm:^1.3.0": - version: 1.4.0 - resolution: "rfc4648@npm:1.4.0" - checksum: 4bcbc88d0625197d733b4927d470385a0894e2f0eb58e26e85d94a31d26d0d7b3640f947066d991698062b0d6232195fccef60cc54c1222b7d017114cf00c767 + version: 1.5.2 + resolution: "rfc4648@npm:1.5.2" + checksum: bc3d9c4fbfdbbb363c640f9cb56fc01d2e1ca64305b2b6409aaf59cb85c1adecb2545c03deee8889cce2685e15fb7dd47581665c288e4f45068ffece2642f2e8 languageName: node linkType: hard @@ -36213,8 +34281,8 @@ __metadata: linkType: hard "rollup@npm:^2.60.2": - version: 2.77.3 - resolution: "rollup@npm:2.77.3" + version: 2.79.0 + resolution: "rollup@npm:2.79.0" dependencies: fsevents: ~2.3.2 dependenciesMeta: @@ -36222,7 +34290,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: b179c68249584565ddb5664a241e8e48c293b2207718d885b08ee25797d98857a383f06b544bb89819407da5a71557f4713309a278f61c4778bb32b1d3321a1c + checksum: 166f1ffea1898e157003920065b3a328e7012ea6808860ee8fe5d1ce94804fcce9985c95a3c0f7fe9c611aff0d09a70f073f1d6f715c8faba28e4e40f71ee3bb languageName: node linkType: hard @@ -36264,27 +34332,27 @@ __metadata: linkType: soft "rtl-css-js@npm:^1.14.0": - version: 1.14.0 - resolution: "rtl-css-js@npm:1.14.0" + version: 1.16.0 + resolution: "rtl-css-js@npm:1.16.0" dependencies: "@babel/runtime": ^7.1.2 - checksum: 46e7f52058d7ac2dc7a6271f6858ce2e05f64be4d6a3eae712b52bf29c4de97fda8e30490c425bed620db87cc0b8a3ab4a457489ab0dba0868724bac27e6f893 + checksum: 51756329f691cacd3e1b48f0f9d04a69338a90013f2d2942ca1ae3b069c952f70055f5fd76c66921e9a5cb956276252376a847c3294bd0ee54be9ceb32ea868c languageName: node linkType: hard "run-async@npm:^2.4.0": - version: 2.4.0 - resolution: "run-async@npm:2.4.0" - dependencies: - is-promise: ^2.1.0 - checksum: 268b64e78c4f0dbeaabfdfdc809930a6ed97b7235c191fc337629fac3d38f04d7b838eb942f6bb5645dbb5bd9019d573cfe0f74e187f95ed042657bb4e4aa70d + version: 2.4.1 + resolution: "run-async@npm:2.4.1" + checksum: a2c88aa15df176f091a2878eb840e68d0bdee319d8d97bbb89112223259cebecb94bc0defd735662b83c2f7a30bed8cddb7d1674eb48ae7322dc602b22d03797 languageName: node linkType: hard "run-parallel@npm:^1.1.9": - version: 1.1.9 - resolution: "run-parallel@npm:1.1.9" - checksum: 8bbeda89c2c1dbfeaa0cdb9f17e93a011ac58ef77339ef1e61a62208b67c8e7b661891df677bb7c5be84b8792e27061177368d500b3c731bb019b0c71e667591 + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: ^1.2.2 + checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d languageName: node linkType: hard @@ -36295,7 +34363,7 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:7.5.5, rxjs@npm:^7.1.0, rxjs@npm:^7.5.1, rxjs@npm:^7.5.5": +"rxjs@npm:7.5.5": version: 7.5.5 resolution: "rxjs@npm:7.5.5" dependencies: @@ -36313,7 +34381,7 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:^7.0.0": +"rxjs@npm:^7.0.0, rxjs@npm:^7.1.0, rxjs@npm:^7.5.1, rxjs@npm:^7.5.5": version: 7.5.6 resolution: "rxjs@npm:7.5.6" dependencies: @@ -36338,7 +34406,7 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 @@ -36478,9 +34546,9 @@ __metadata: linkType: hard "screenfull@npm:^5.1.0": - version: 5.1.0 - resolution: "screenfull@npm:5.1.0" - checksum: e8ab486ba2310055aeabd84d8f76f1c9e729669942a4b1bdd675131333076ac9ee6655fb41c2507de3be93865e120cf3641e5ff636090f9e2458170827e650c7 + version: 5.2.0 + resolution: "screenfull@npm:5.2.0" + checksum: 21eae33b780eb4679ea0ea2d14734b11168cf35049c45a2bf24ddeb39c67a788e7a8fb46d8b61ca6d8367fd67ce9dd4fc8bfe476489249c7189c2a79cf83f51a languageName: node linkType: hard @@ -36492,9 +34560,9 @@ __metadata: linkType: hard "secure-json-parse@npm:^2.4.0": - version: 2.4.0 - resolution: "secure-json-parse@npm:2.4.0" - checksum: efaafcaa08a4646ca829b29168474f57fb289a0ca7a1d77b66b55a0292785bc6eb9143b21cfc50b37dd12a823c25b12aa1771f18314ed5a616a1f8f12a318533 + version: 2.5.0 + resolution: "secure-json-parse@npm:2.5.0" + checksum: 84147a32615ce0d93d2fbba60cde85ae362f45cc948ea134e4d6d1e678bb4b7f3a5ce9b9692ed052baefeb2e1c8ba183b34920390e6a089925b97b0d8f7ab064 languageName: node linkType: hard @@ -36506,11 +34574,11 @@ __metadata: linkType: hard "selfsigned@npm:^2.0.0, selfsigned@npm:^2.0.1": - version: 2.0.1 - resolution: "selfsigned@npm:2.0.1" + version: 2.1.1 + resolution: "selfsigned@npm:2.1.1" dependencies: node-forge: ^1 - checksum: 864e65c2f31ca877bce3ccdaa3bdef5e1e992b63b2a03641e00c24cd305bf2acce093431d1fed2e5ae9f526558db4be5e90baa2b3474c0428fcf7e25cc86ac93 + checksum: aa9ce2150a54838978d5c0aee54d7ebe77649a32e4e690eb91775f71fdff773874a4fbafd0ac73d8ec3b702ff8a395c604df4f8e8868528f36fd6c15076fb43a languageName: node linkType: hard @@ -36537,15 +34605,6 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.0.0, semver@npm:~7.0.0": - version: 7.0.0 - resolution: "semver@npm:7.0.0" - bin: - semver: bin/semver.js - checksum: 272c11bf8d083274ef79fe40a81c55c184dff84dd58e3c325299d0927ba48cece1f020793d138382b85f89bab5002a35a5ba59a3a68a7eebbb597eb733838778 - languageName: node - linkType: hard - "semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0": version: 6.3.0 resolution: "semver@npm:6.3.0" @@ -36566,6 +34625,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:~7.0.0": + version: 7.0.0 + resolution: "semver@npm:7.0.0" + bin: + semver: bin/semver.js + checksum: 272c11bf8d083274ef79fe40a81c55c184dff84dd58e3c325299d0927ba48cece1f020793d138382b85f89bab5002a35a5ba59a3a68a7eebbb597eb733838778 + languageName: node + linkType: hard + "send@npm:0.18.0": version: 0.18.0 resolution: "send@npm:0.18.0" @@ -36683,9 +34751,9 @@ __metadata: linkType: hard "set-cookie-parser@npm:^2.4.6": - version: 2.4.8 - resolution: "set-cookie-parser@npm:2.4.8" - checksum: e15b5df9a56ab06d4895286033a6aff7b318ad024310df058b5821b3539cc06f716ef529618cac0dd78df40e37830de715f388c0f97f84062dd9be2326efcd0c + version: 2.5.1 + resolution: "set-cookie-parser@npm:2.5.1" + checksum: b99c37f976e68ae6eb7c758bf2bbce1e60bb54e3eccedaa25f2da45b77b9cab58d90674cf9edd7aead6fbeac6308f2eb48713320a47ca120d0e838d0194513b6 languageName: node linkType: hard @@ -37046,9 +35114,9 @@ __metadata: languageName: node linkType: hard -"socket.io-client@npm:2.4.0, socket.io-client@npm:^2.2.0": - version: 2.4.0 - resolution: "socket.io-client@npm:2.4.0" +"socket.io-client@npm:2.5.0, socket.io-client@npm:^2.2.0": + version: 2.5.0 + resolution: "socket.io-client@npm:2.5.0" dependencies: backo2: 1.0.2 component-bind: 1.0.0 @@ -37061,7 +35129,7 @@ __metadata: parseuri: 0.0.6 socket.io-parser: ~3.3.0 to-array: 0.1.4 - checksum: d5f16c6d836f6672f89896e785dccdb15ea4a78719daf9bc7954b5943e6ecbae97a56f4a8a33e22418ab0ce38e05a54770d2080bbf6c6d5c0c3a72b60a895800 + checksum: a33accaf02c4a4c47ac9b09018fa4b9fa67a648a0cc92602e520ec884520050796786eb0df78fc1a9bf51e7b3d7b50ba4ffd3bda6e44df2c253a77100124669c languageName: node linkType: hard @@ -37088,16 +35156,16 @@ __metadata: linkType: hard "socket.io@npm:^2.2.0": - version: 2.4.1 - resolution: "socket.io@npm:2.4.1" + version: 2.5.0 + resolution: "socket.io@npm:2.5.0" dependencies: debug: ~4.1.0 - engine.io: ~3.5.0 + engine.io: ~3.6.0 has-binary2: ~1.0.2 socket.io-adapter: ~1.1.0 - socket.io-client: 2.4.0 + socket.io-client: 2.5.0 socket.io-parser: ~3.4.0 - checksum: 290e4e8dae5c38628c5164cae12fc8154165233a46ecc241768a44f0add8f1243a0b13239385573fbbe9e4fb6424c199381461b577d504dc47529f5e1e7b6e4d + checksum: 6f20a413352cb0a8bb13063249fe425c81fb54beca1bdd71221262305cf21232e6a37fdd4a232b5695dbd4d3204281a9313829c9c373c5ba01c5bd7218edd094 languageName: node linkType: hard @@ -37113,24 +35181,24 @@ __metadata: linkType: hard "socks-proxy-agent@npm:^5.0.0": - version: 5.0.0 - resolution: "socks-proxy-agent@npm:5.0.0" + version: 5.0.1 + resolution: "socks-proxy-agent@npm:5.0.1" dependencies: - agent-base: 6 + agent-base: ^6.0.2 debug: 4 socks: ^2.3.3 - checksum: 1dd30d1cc346c33b3180a5bbe75ed93979ca3a916f453a6802f64642f07d30af7e93a640a607c920f10d4b1dfe1d0eec485f64c2a93c951a8d9a50090e6a7776 + checksum: 1b60c4977b2fef783f0fc4dc619cd2758aafdb43f3cf679f1e3627cb6c6e752811cee5513ebb4157ad26786033d2f85029440f197d321e8293b38cc5aab01e06 languageName: node linkType: hard -"socks-proxy-agent@npm:^6.0.0, socks-proxy-agent@npm:^6.1.1": - version: 6.1.1 - resolution: "socks-proxy-agent@npm:6.1.1" +"socks-proxy-agent@npm:^6.0.0": + version: 6.2.1 + resolution: "socks-proxy-agent@npm:6.2.1" dependencies: agent-base: ^6.0.2 - debug: ^4.3.1 - socks: ^2.6.1 - checksum: 9a8a4f791bba0060315cf7291ca6f9db37d6fc280fd0860d73d8887d3efe4c22e823aa25a8d5375f6079279f8dc91b50c075345179bf832bfe3c7c26d3582e3c + debug: ^4.3.3 + socks: ^2.6.2 + checksum: 9ca089d489e5ee84af06741135c4b0d2022977dad27ac8d649478a114cdce87849e8d82b7c22b51501a4116e231241592946fc7fae0afc93b65030ee57084f58 languageName: node linkType: hard @@ -37145,13 +35213,13 @@ __metadata: languageName: node linkType: hard -"socks@npm:^2.3.3, socks@npm:^2.6.1, socks@npm:^2.6.2": - version: 2.6.2 - resolution: "socks@npm:2.6.2" +"socks@npm:^2.3.3, socks@npm:^2.6.2": + version: 2.7.0 + resolution: "socks@npm:2.7.0" dependencies: - ip: ^1.1.5 + ip: ^2.0.0 smart-buffer: ^4.2.0 - checksum: dd9194293059d737759d5c69273850ad4149f448426249325c4bea0e340d1cf3d266c3b022694b0dcf5d31f759de23657244c481fc1e8322add80b7985c36b5e + checksum: 0b5d94e2b3c11e7937b40fc5dac1e80d8b92a330e68c51f1d271ce6980c70adca42a3f8cd47c4a5769956bada074823b53374f2dc5f2ea5c2121b222dec6eadf languageName: node linkType: hard @@ -37221,9 +35289,9 @@ __metadata: linkType: hard "source-map-url@npm:^0.4.0": - version: 0.4.0 - resolution: "source-map-url@npm:0.4.0" - checksum: 63ed54045fcd7b4ec7ca17513f48fdc23b573eef679326ecf1a31333e1aaecc0a9c085adaa7d118283b160e65b71cc72da9e1385f2de4ac5ed68294e3920d719 + version: 0.4.1 + resolution: "source-map-url@npm:0.4.1" + checksum: 64c5c2c77aff815a6e61a4120c309ae4cac01298d9bcbb3deb1b46a4dd4c46d4a1eaeda79ec9f684766ae80e8dc86367b89326ce9dd2b89947bd9291fc1ac08c languageName: node linkType: hard @@ -37234,7 +35302,7 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.5.0, source-map@npm:^0.5.6": +"source-map@npm:^0.5.6": version: 0.5.7 resolution: "source-map@npm:0.5.7" checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d @@ -37249,13 +35317,13 @@ __metadata: linkType: hard "source-map@npm:^0.7.3": - version: 0.7.3 - resolution: "source-map@npm:0.7.3" - checksum: cd24efb3b8fa69b64bf28e3c1b1a500de77e84260c5b7f2b873f88284df17974157cc88d386ee9b6d081f08fdd8242f3fc05c953685a6ad81aad94c7393dedea + version: 0.7.4 + resolution: "source-map@npm:0.7.4" + checksum: 01cc5a74b1f0e1d626a58d36ad6898ea820567e87f18dfc9d24a9843a351aaa2ec09b87422589906d6ff1deed29693e176194dc88bcae7c9a852dc74b311dbf5 languageName: node linkType: hard -"sourcemap-codec@npm:^1.4.4, sourcemap-codec@npm:^1.4.8": +"sourcemap-codec@npm:^1.4.8": version: 1.4.8 resolution: "sourcemap-codec@npm:1.4.8" checksum: b57981c05611afef31605732b598ccf65124a9fcb03b833532659ac4d29ac0f7bfacbc0d6c5a28a03e84c7510e7e556d758d0bb57786e214660016fb94279316 @@ -37277,9 +35345,9 @@ __metadata: linkType: hard "spawn-command@npm:^0.0.2-1": - version: 0.0.2-1 - resolution: "spawn-command@npm:0.0.2-1" - checksum: 2cac8519332193d1ed37d57298c4a1f73095e9edd20440fbab4aa47f531da83831734f2b51c44bb42b2747bf3485dec3fa2b0a1003f74c67561f2636622e328b + version: 0.0.2 + resolution: "spawn-command@npm:0.0.2" + checksum: e35c5d28177b4d461d33c88cc11f6f3a5079e2b132c11e1746453bbb7a0c0b8a634f07541a2a234fa4758239d88203b758def509161b651e81958894c0b4b64b languageName: node linkType: hard @@ -37386,6 +35454,13 @@ __metadata: languageName: node linkType: hard +"split2@npm:^4.1.0": + version: 4.1.0 + resolution: "split2@npm:4.1.0" + checksum: ec581597cb74c13cdfb5e2047543dd40cb1e8e9803c7b1e0c29ede05f2b4f049b2d6e7f2788a225d544549375719658b8f38e9366364dec35dc7a12edfda5ee5 + languageName: node + linkType: hard + "split@npm:0.3": version: 0.3.3 resolution: "split@npm:0.3.3" @@ -37428,9 +35503,9 @@ __metadata: linkType: hard "sqlstring@npm:^2.3.2": - version: 2.3.2 - resolution: "sqlstring@npm:2.3.2" - checksum: 6d17a604dcf724046ff0f0dec562164fc217968e7a962e6ed6cca6ae8d8cd7b264c595627fe74d485200274ad8913f88d4fb9e75469d0305b1a647492b7168e0 + version: 2.3.3 + resolution: "sqlstring@npm:2.3.3" + checksum: 1e7e2d51c38a0cf7372e875408ca100b6e0c9a941ab7773975ea41fb36e5528e404dc787689be855780cf6d0a829ff71027964ae3a05a7446e91dce26672fda7 languageName: node linkType: hard @@ -37444,26 +35519,26 @@ __metadata: languageName: node linkType: hard -"ssh2@npm:^1.4.0": - version: 1.5.0 - resolution: "ssh2@npm:1.5.0" +"ssh2@npm:^1.11.0, ssh2@npm:^1.4.0": + version: 1.11.0 + resolution: "ssh2@npm:1.11.0" dependencies: asn1: ^0.2.4 bcrypt-pbkdf: ^1.0.2 - cpu-features: 0.0.2 - nan: ^2.15.0 + cpu-features: ~0.0.4 + nan: ^2.16.0 dependenciesMeta: cpu-features: optional: true nan: optional: true - checksum: 6a2252c12d9587eeb31c499d1d13bb14a255d08243762e1a92b2db76add8912b2c8c25103c79b92e156d598c1e2781c5523b58aa9e85aee06fea365e4cc188bb + checksum: e40cb9f171741a807c170dc555078aa8c49dc93dd36fc9c8be026fce1cfd31f0d37078d9b60a0f2cfb11d0e007ed5407376b72f8a0ef9f2cb89574632bbfb824 languageName: node linkType: hard "sshpk@npm:^1.14.1, sshpk@npm:^1.7.0": - version: 1.16.1 - resolution: "sshpk@npm:1.16.1" + version: 1.17.0 + resolution: "sshpk@npm:1.17.0" dependencies: asn1: ~0.2.3 assert-plus: ^1.0.0 @@ -37478,7 +35553,7 @@ __metadata: sshpk-conv: bin/sshpk-conv sshpk-sign: bin/sshpk-sign sshpk-verify: bin/sshpk-verify - checksum: 5e76afd1cedc780256f688b7c09327a8a650902d18e284dfeac97489a735299b03c3e72c6e8d22af03dbbe4d6f123fdfd5f3c4ed6bedbec72b9529a55051b857 + checksum: ba109f65c8e6c35133b8e6ed5576abeff8aa8d614824b7275ec3ca308f081fef483607c28d97780c1e235818b0f93ed8c8b56d0a5968d5a23fd6af57718c7597 languageName: node linkType: hard @@ -37508,11 +35583,11 @@ __metadata: linkType: hard "stack-generator@npm:^2.0.5": - version: 2.0.5 - resolution: "stack-generator@npm:2.0.5" + version: 2.0.10 + resolution: "stack-generator@npm:2.0.10" dependencies: - stackframe: ^1.1.1 - checksum: a85c45a6f166319b31e9298da1e05b778b768553c2126eeeccfa5c4402fc810de1c541ec0b92db63238d68b3e08f4f57544adc27255e52f25f8edcabcc9caf63 + stackframe: ^1.3.4 + checksum: 4fc3978a934424218a0aa9f398034e1f78153d5ff4f4ff9c62478c672debb47dd58de05b09fc3900530cbb526d72c93a6e6c9353bacc698e3b1c00ca3dda0c47 languageName: node linkType: hard @@ -37532,20 +35607,20 @@ __metadata: languageName: node linkType: hard -"stackframe@npm:^1.1.1": - version: 1.1.1 - resolution: "stackframe@npm:1.1.1" - checksum: 6031b30cc070972be6b12f4f4109e62150912ddbc8d6d2bc1707387bfa74b69ec298aa1211b9bf8dc4cf4f5245a5cdb72dda4b7c0467ea0cce2d10e4f10ffe3a +"stackframe@npm:^1.3.4": + version: 1.3.4 + resolution: "stackframe@npm:1.3.4" + checksum: bae1596873595c4610993fa84f86a3387d67586401c1816ea048c0196800c0646c4d2da98c2ee80557fd9eff05877efe33b91ba6cd052658ed96ddc85d19067d languageName: node linkType: hard "stacktrace-gps@npm:^3.0.4": - version: 3.0.4 - resolution: "stacktrace-gps@npm:3.0.4" + version: 3.1.2 + resolution: "stacktrace-gps@npm:3.1.2" dependencies: source-map: 0.5.6 - stackframe: ^1.1.1 - checksum: b98cb77632d38e6cbc243da4c47ca5f4bef918985c233bb4cfe8bfdc60fde92b53ce0630b16cf24d81560f1442e2ff92ccf6e2fe19031c90fb775d8e86037d9b + stackframe: ^1.3.4 + checksum: 85daa232d138239b6ae0f4bcdd87d15d302a045d93625db17614030945b5314e204b5fbcf9bee5b6f4f9e6af5fca05f65c27fe910894b861ef6853b99470aa1c languageName: node linkType: hard @@ -37603,7 +35678,7 @@ __metadata: languageName: node linkType: hard -"statuses@npm:>= 1.4.0 < 2, statuses@npm:>= 1.5.0 < 2": +"statuses@npm:>= 1.4.0 < 2": version: 1.5.0 resolution: "statuses@npm:1.5.0" checksum: c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c @@ -37688,16 +35763,7 @@ __metadata: languageName: node linkType: hard -"strict-event-emitter@npm:^0.2.0": - version: 0.2.0 - resolution: "strict-event-emitter@npm:0.2.0" - dependencies: - events: ^3.3.0 - checksum: b2bc33aa01e66010f6356368df7b043cc2a96645b5a8caf47226f349d1702f844375ece9d90e69ff1714599c4ef959031d23d3ffb224738a286b88fedcb42a4a - languageName: node - linkType: hard - -"strict-event-emitter@npm:^0.2.4": +"strict-event-emitter@npm:^0.2.0, strict-event-emitter@npm:^0.2.4": version: 0.2.4 resolution: "strict-event-emitter@npm:0.2.4" dependencies: @@ -37735,12 +35801,12 @@ __metadata: linkType: hard "string-length@npm:^4.0.1": - version: 4.0.1 - resolution: "string-length@npm:4.0.1" + version: 4.0.2 + resolution: "string-length@npm:4.0.2" dependencies: char-regex: ^1.0.2 strip-ansi: ^6.0.0 - checksum: 7bd3191668ddafa6f574a8b17a1bd1b085737d64ceefa51f72cdd19c45a730422cd70d984eee7584d6e5b5c84b6318633c6d6a720a4bfd7c58769985fa77573e + checksum: ce85533ef5113fcb7e522bcf9e62cb33871aa99b3729cec5595f4447f660b0cefd542ca6df4150c97a677d58b0cb727a3fe09ac1de94071d05526c73579bf505 languageName: node linkType: hard @@ -37793,7 +35859,7 @@ __metadata: languageName: node linkType: hard -"string.prototype.trimend@npm:^1.0.4, string.prototype.trimend@npm:^1.0.5": +"string.prototype.trimend@npm:^1.0.5": version: 1.0.5 resolution: "string.prototype.trimend@npm:1.0.5" dependencies: @@ -37804,7 +35870,7 @@ __metadata: languageName: node linkType: hard -"string.prototype.trimstart@npm:^1.0.4, string.prototype.trimstart@npm:^1.0.5": +"string.prototype.trimstart@npm:^1.0.5": version: 1.0.5 resolution: "string.prototype.trimstart@npm:1.0.5" dependencies: @@ -37962,12 +36028,12 @@ __metadata: linkType: hard "strtok3@npm:^6.2.4": - version: 6.2.4 - resolution: "strtok3@npm:6.2.4" + version: 6.3.0 + resolution: "strtok3@npm:6.3.0" dependencies: "@tokenizer/token": ^0.3.0 - peek-readable: ^4.0.1 - checksum: 327b48a79d464542e9ae922c1af3aacc6e6673be31442ab82648ee4afa8cf67f23b426d3e6e77a496ff6e0c9ddc009d9242a224ee05186a100325b633759d0ec + peek-readable: ^4.1.0 + checksum: 90732cff3f325aef7c47c511f609b593e0873ec77b5081810071cde941344e6a0ee3ccb0cae1a9f5b4e12c81a2546fd6b322fabcdfbd1dd08362c2ce5291334a languageName: node linkType: hard @@ -38032,22 +36098,22 @@ __metadata: languageName: node linkType: hard -"stylehacks@npm:^5.0.1": - version: 5.0.1 - resolution: "stylehacks@npm:5.0.1" +"stylehacks@npm:^5.1.0": + version: 5.1.0 + resolution: "stylehacks@npm:5.1.0" dependencies: - browserslist: ^4.16.0 + browserslist: ^4.16.6 postcss-selector-parser: ^6.0.4 peerDependencies: postcss: ^8.2.15 - checksum: 777dbed3987e04f713b9d74e08f66ab4c23c76cabb07c666c0ae9a06e58e8961063e17b5c7b9c23421b75e9caa9fb78084688e509624e57b19c92c174fbd964d + checksum: 310b3452c11fd443b0d327aa2d5b43ae7479407339204b7ad11cf2e16d33b690c1cbf47a21b737ef112411e53563f0f996c5fa3642d135c896329950a008277f languageName: node linkType: hard "stylis@npm:^4.0.6": - version: 4.0.7 - resolution: "stylis@npm:4.0.7" - checksum: 4f9fdc4b131b54cdc5988aaf23e796fcf77927c9d2f3147f6b23b8f3a9568eb38ce91b338b9d1b50a50391da32969c34ff68ff971c453fc3a5af89941c60ab06 + version: 4.1.2 + resolution: "stylis@npm:4.1.2" + checksum: de5771526216ca156f7ccdece70d0e2b4d5611a2a64f34d0165707b06bd8b6ba7913f2eb9b7998c0f9145077079f46d5084b6a60c97ec10b8d776bef293e9f8c languageName: node linkType: hard @@ -38067,8 +36133,8 @@ __metadata: linkType: hard "sucrase@npm:^3.18.0, sucrase@npm:^3.20.2": - version: 3.25.0 - resolution: "sucrase@npm:3.25.0" + version: 3.27.0 + resolution: "sucrase@npm:3.27.0" dependencies: commander: ^4.0.0 glob: 7.1.6 @@ -38079,7 +36145,7 @@ __metadata: bin: sucrase: bin/sucrase sucrase-node: bin/sucrase-node - checksum: 4a20a4a821f46e1010da22417e6edafe637bac9a5414e71fc626a569fd3d266a1fcf010073c7627c296223e41fc871fb30678b6238fb95873e49be7973b8743b + checksum: a834c3fec170600a7bad84320f3d1b2bc52aacfeacd77970c98e56faad71ff1248bea91203878637adb647cf0fc70dd1a7d81c7a542f64dd37cca79c4398056f languageName: node linkType: hard @@ -38140,12 +36206,12 @@ __metadata: linkType: hard "supports-hyperlinks@npm:^2.0.0": - version: 2.1.0 - resolution: "supports-hyperlinks@npm:2.1.0" + version: 2.3.0 + resolution: "supports-hyperlinks@npm:2.3.0" dependencies: has-flag: ^4.0.0 supports-color: ^7.0.0 - checksum: e4f430c870a258c9854b8bd7f166a9c1e76e3b851da84d4399d6a8f1d4a485e4ec36c16455dde80acf06c86e7c0a6df76ed22b6a4644a6ae3eced8616b3f21b5 + checksum: 9ee0de3c8ce919d453511b2b1588a8205bd429d98af94a01df87411391010fe22ca463f268c84b2ce2abad019dfff8452aa02806eeb5c905a8d7ad5c4f4c52b8 languageName: node linkType: hard @@ -38273,7 +36339,7 @@ __metadata: languageName: node linkType: hard -"symbol-observable@npm:1.2.0, symbol-observable@npm:^1.0.4": +"symbol-observable@npm:^1.0.4": version: 1.2.0 resolution: "symbol-observable@npm:1.2.0" checksum: 48ffbc22e3d75f9853b3ff2ae94a44d84f386415110aea5effc24d84c502e03a4a6b7a8f75ebaf7b585780bda34eb5d6da3121f826a6f93398429d30032971b6 @@ -38287,16 +36353,6 @@ __metadata: languageName: node linkType: hard -"sync-fetch@npm:^0.4.0": - version: 0.4.1 - resolution: "sync-fetch@npm:0.4.1" - dependencies: - buffer: ^5.7.1 - node-fetch: ^2.6.1 - checksum: cbd1932d9a8de9da52880c23124313bbc5a81887330e66645d192857ee05eeda2ac5700cd6e89f61eeb57a7c44f2c3da96323ed73a657862fb4a6c82bdbd13bd - languageName: node - linkType: hard - "taffydb@npm:2.6.2": version: 2.6.2 resolution: "taffydb@npm:2.6.2" @@ -38377,11 +36433,11 @@ __metadata: linkType: hard "tdigest@npm:^0.1.1": - version: 0.1.1 - resolution: "tdigest@npm:0.1.1" + version: 0.1.2 + resolution: "tdigest@npm:0.1.2" dependencies: - bintrees: 1.0.1 - checksum: 4d05fd70fb0aa70aa101d01557722b7ef9a91b2ebf8dfc274ca9852220397a74e4ed6e59c55335b4b1dd0ac5e1b65d25b8d32ae01278fc3b783c40f6d84303e2 + bintrees: 1.0.2 + checksum: 44de8246752b6f8c2924685f969fd3d94c36949f22b0907e99bef2b2220726dd8467f4730ea96b06040b9aa2587c0866049640039d1b956952dfa962bc2075a3 languageName: node linkType: hard @@ -38429,15 +36485,15 @@ __metadata: linkType: soft "teeny-request@npm:^8.0.0": - version: 8.0.0 - resolution: "teeny-request@npm:8.0.0" + version: 8.0.1 + resolution: "teeny-request@npm:8.0.1" dependencies: http-proxy-agent: ^5.0.0 https-proxy-agent: ^5.0.0 node-fetch: ^2.6.1 stream-events: ^1.0.5 uuid: ^8.0.0 - checksum: a867fb58406308e3ee8415f6b6612471a78af136971575bb51eb3ecf4b76d2ea363936da5eb68bbc28ef3d3af59e24dcf0803f1e80c8eb658c73cc9a53881c52 + checksum: de37b23d5fe480dd36e99eb4e80f09d18737da0841f9d3f502b05c96183361ec7aef70db211d51d3527f967cbc94593781a392be6d285df576e5a74cc970627b languageName: node linkType: hard @@ -38474,7 +36530,7 @@ __metadata: languageName: node linkType: hard -"terser-webpack-plugin@npm:*, terser-webpack-plugin@npm:^5.1.3": +"terser-webpack-plugin@npm:^5.1.3": version: 5.3.6 resolution: "terser-webpack-plugin@npm:5.3.6" dependencies: @@ -38496,9 +36552,9 @@ __metadata: languageName: node linkType: hard -"terser@npm:^5.10.0, terser@npm:^5.14.1": - version: 5.14.2 - resolution: "terser@npm:5.14.2" +"terser@npm:^5.10.0, terser@npm:^5.14.1, terser@npm:^5.3.8": + version: 5.15.0 + resolution: "terser@npm:5.15.0" dependencies: "@jridgewell/source-map": ^0.3.2 acorn: ^8.5.0 @@ -38506,7 +36562,7 @@ __metadata: source-map-support: ~0.5.20 bin: terser: bin/terser - checksum: cabb50a640d6c2cfb351e4f43dc7bf7436f649755bb83eb78b2cacda426d5e0979bd44e6f92d713f3ca0f0866e322739b9ced888ebbce6508ad872d08de74fcc + checksum: b2358c989fcb76b4a1c265f60e175c950d3f776e5f619a9f58f54e8d2d792cd6b4cca86071834075f3b9943556d695357bafdd4ee2390de2fc9fd96ba3efa8c8 languageName: node linkType: hard @@ -38522,8 +36578,8 @@ __metadata: linkType: hard "testcontainers@npm:^8.1.2": - version: 8.13.1 - resolution: "testcontainers@npm:8.13.1" + version: 8.13.2 + resolution: "testcontainers@npm:8.13.2" dependencies: "@balena/dockerignore": ^1.0.2 "@types/archiver": ^5.3.1 @@ -38537,7 +36593,7 @@ __metadata: properties-reader: ^2.2.0 ssh-remote-port-forward: ^1.0.4 tar-fs: ^2.1.1 - checksum: a15345bed5a7e28cf521a01348ca5c0a9de67e274b628345ac91e6db69793c0f2044fb7634166d849eac1d9ea592c79319bdc7e1ec6c5a0208e2e74548c57a5a + checksum: f73cdd78a0b532b7fd921de020241c70e855e4010d689ba520bed712f5448a39010f886bf2d8699f5ee8388ab73e901cd6a7b8ea04a8617092c3e630bef5a5f3 languageName: node linkType: hard @@ -38570,9 +36626,9 @@ __metadata: linkType: hard "textextensions@npm:^5.12.0, textextensions@npm:^5.13.0": - version: 5.14.0 - resolution: "textextensions@npm:5.14.0" - checksum: 1f610ccf2a2c1445fb7156c23b5c8defd608c74e8047df18abd4b9ee44c74d29b453ba104d14c53c91f9026670f7c923114cd12200ee5ec458cc518fd0798c74 + version: 5.15.0 + resolution: "textextensions@npm:5.15.0" + checksum: aa172e941e81b44e0d35fa217f758a0d8ba0342dac31539914225a2382b5792ef58bff3ec9009b9c85b0c0605f5a79a906bd97827a2e591d647137fcdbf867d3 languageName: node linkType: hard @@ -38656,11 +36712,11 @@ __metadata: linkType: hard "timers-browserify@npm:^2.0.4": - version: 2.0.11 - resolution: "timers-browserify@npm:2.0.11" + version: 2.0.12 + resolution: "timers-browserify@npm:2.0.12" dependencies: setimmediate: ^1.0.4 - checksum: 2a2ecbfd0c2380078d4a1e63e4eeb46884156d8fca0efe34d6fd8c615d68ef1a7785888629157ab0e5720e3c0d7f57bf1766b2ad037feb9aea07cbff1623092c + checksum: ec37ae299066bef6c464dcac29c7adafba1999e7227a9bdc4e105a459bee0f0b27234a46bfd7ab4041da79619e06a58433472867a913d01c26f8a203f87cee70 languageName: node linkType: hard @@ -38671,17 +36727,10 @@ __metadata: languageName: node linkType: hard -"timsort@npm:^0.3.0, timsort@npm:~0.3.0": - version: 0.3.0 - resolution: "timsort@npm:0.3.0" - checksum: 1a66cb897dacabd7dd7c91b7e2301498ca9e224de2edb9e42d19f5b17c4b6dc62a8d4cbc64f28be82aaf1541cb5a78ab49aa818f42a2989ebe049a64af731e2a - languageName: node - linkType: hard - "tiny-invariant@npm:^1.0.6": - version: 1.1.0 - resolution: "tiny-invariant@npm:1.1.0" - checksum: 27d29bbb9e1d1d86e25766711c28ad91af6d67c87d561167077ac7fbce5212b97bbfe875e70bc369808e075748c825864c9b61f0e9f8652275ec86bcf4dcc924 + version: 1.2.0 + resolution: "tiny-invariant@npm:1.2.0" + checksum: e09a718a7c4a499ba592cdac61f015d87427a0867ca07f50c11fd9b623f90cdba18937b515d4a5e4f43dac92370498d7bdaee0d0e7a377a61095e02c4a92eade languageName: node linkType: hard @@ -38716,11 +36765,11 @@ __metadata: linkType: hard "tmp-promise@npm:^3.0.2": - version: 3.0.2 - resolution: "tmp-promise@npm:3.0.2" + version: 3.0.3 + resolution: "tmp-promise@npm:3.0.3" dependencies: tmp: ^0.2.0 - checksum: 2d8457c9512e896633f64fab33e5e3fd273c4d8fca33cfc74a04a104a0b921d15ed3e832c4f2a50108635ac88264afef85abddbe5ad8480e15f55fc7f8e76969 + checksum: f854f5307dcee6455927ec3da9398f139897faf715c5c6dcee6d9471ae85136983ea06662eba2edf2533bdcb0fca66d16648e79e14381e30c7fb20be9c1aa62c languageName: node linkType: hard @@ -38742,7 +36791,7 @@ __metadata: languageName: node linkType: hard -"tmpl@npm:1.0.x": +"tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5" checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 @@ -38825,12 +36874,12 @@ __metadata: linkType: hard "token-types@npm:^4.1.1": - version: 4.1.1 - resolution: "token-types@npm:4.1.1" + version: 4.2.1 + resolution: "token-types@npm:4.2.1" dependencies: "@tokenizer/token": ^0.3.0 ieee754: ^1.2.1 - checksum: 8fe4e84611f6c575439b24003650064a2abe8f7c848cdf84dfa233792e4081226e538d567825954d536eadee3a17d902db62ce652b2b1191b772caf1c7d0e312 + checksum: cce256766b33e0f08ceffefa2198fb4961a417866d00780e58625999ab5c0699821407053e64eadc41b00bbb6c0d0c4d02fbd2199940d8a3ccb71e1b148ab9a2 languageName: node linkType: hard @@ -38871,13 +36920,14 @@ __metadata: linkType: hard "tough-cookie@npm:^4.0.0": - version: 4.0.0 - resolution: "tough-cookie@npm:4.0.0" + version: 4.1.2 + resolution: "tough-cookie@npm:4.1.2" dependencies: psl: ^1.1.33 punycode: ^2.1.1 - universalify: ^0.1.2 - checksum: 0891b37eb7d17faa3479d47f0dce2e3007f2583094ad272f2670d120fbcc3df3b0b0a631ba96ecad49f9e2297d93ff8995ce0d3292d08dd7eabe162f5b224d69 + universalify: ^0.2.0 + url-parse: ^1.5.3 + checksum: a7359e9a3e875121a84d6ba40cc184dec5784af84f67f3a56d1d2ae39b87c0e004e6ba7c7331f9622a7d2c88609032473488b28fe9f59a1fec115674589de39a languageName: node linkType: hard @@ -38937,6 +36987,13 @@ __metadata: languageName: node linkType: hard +"trim-lines@npm:^3.0.0": + version: 3.0.1 + resolution: "trim-lines@npm:3.0.1" + checksum: e241da104682a0e0d807222cc1496b92e716af4db7a002f4aeff33ae6a0024fef93165d49eab11aa07c71e1347c42d46563f91dfaa4d3fb945aa535cdead53ed + languageName: node + linkType: hard + "trim-newlines@npm:^3.0.0": version: 3.0.1 resolution: "trim-newlines@npm:3.0.1" @@ -38944,13 +37001,6 @@ __metadata: languageName: node linkType: hard -"trim-off-newlines@npm:^1.0.0": - version: 1.0.3 - resolution: "trim-off-newlines@npm:1.0.3" - checksum: faf042bb7dd4cb097ab6d358cd51012a9ff5e06f7f2c6570da2ef6f01da9da3ff22ab01080866815e3927ffbf367d57c6aab4c275c67662676b60c563142a558 - languageName: node - linkType: hard - "triple-beam@npm:^1.3.0": version: 1.3.0 resolution: "triple-beam@npm:1.3.0" @@ -38959,9 +37009,9 @@ __metadata: linkType: hard "trough@npm:^2.0.0": - version: 2.0.2 - resolution: "trough@npm:2.0.2" - checksum: e0c18f3fb4c26e84d7864528f49a3f43a8fef8245d6ffe1fced90a867ea88be9838948fd98cf838da448700f5e4ec909576a469719db5e9833f5b58fed26dfa0 + version: 2.1.0 + resolution: "trough@npm:2.1.0" + checksum: a577bb561c2b401cc0e1d9e188fcfcdf63b09b151ff56a668da12197fe97cac15e3d77d5b51f426ccfd94255744a9118e9e9935afe81a3644fa1be9783c82886 languageName: node linkType: hard @@ -38996,9 +37046,9 @@ __metadata: linkType: hard "ts-log@npm:^2.2.3": - version: 2.2.3 - resolution: "ts-log@npm:2.2.3" - checksum: 8aa34a2724d7915ddc6de8d0c27eb48f67206b52c42656f1ea2a7ffb080fa664db5fb22b42bd3c72b5b95cc6eb4612196b7d1e28f4bc146191ebc2a9683af548 + version: 2.2.5 + resolution: "ts-log@npm:2.2.5" + checksum: 28f78ab15b8555d56c089dbc243327d8ce4331219956242a29fc4cb3bad6bb0cb8234dd17a292381a1b1dba99a7e4849a2181b2e1a303e8247e9f4ca4e284f2d languageName: node linkType: hard @@ -39069,7 +37119,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:2.3.1, tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.2.0, tslib@npm:^2.3.1, tslib@npm:~2.3.0": +"tslib@npm:2.3.1": version: 2.3.1 resolution: "tslib@npm:2.3.1" checksum: de17a98d4614481f7fcb5cd53ffc1aaf8654313be0291e1bfaee4b4bb31a20494b7d218ff2e15017883e8ea9626599b3b0e0229c18383ba9dce89da2adf15cb9 @@ -39083,7 +37133,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.1.0, tslib@npm:^2.4.0, tslib@npm:~2.4.0": +"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:~2.4.0": version: 2.4.0 resolution: "tslib@npm:2.4.0" checksum: 8c4aa6a3c5a754bf76aefc38026134180c053b7bd2f81338cb5e5ebf96fefa0f417bff221592bf801077f5bf990562f6264fecbc42cd3309b33872cb6fc3b113 @@ -39247,13 +37297,13 @@ __metadata: linkType: hard "typed-rest-client@npm:^1.8.4": - version: 1.8.4 - resolution: "typed-rest-client@npm:1.8.4" + version: 1.8.9 + resolution: "typed-rest-client@npm:1.8.9" dependencies: qs: ^6.9.1 tunnel: 0.0.6 underscore: ^1.12.1 - checksum: 238e2139724310fed39756ae734fbc811e803abaa7598720ad6cc5ab7f160d415d8107551422b186f6b2e08c5761c0e7b66ca47d60b2ccd952bb5e20d3b92f3c + checksum: 615c95872d9b4d4caa7eb44d639d9044fc41602a16c3855b87deae9e97d6df168c9501a40a1fe003ced4984335684b3dfdadcf24ac0b50657f4cd9026df40e1c languageName: node linkType: hard @@ -39291,7 +37341,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:~4.6.0, typescript@npm:~4.6.3": +"typescript@npm:~4.6.0": version: 4.6.4 resolution: "typescript@npm:4.6.4" bin: @@ -39301,7 +37351,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:~4.7.0": +"typescript@npm:~4.7.0, typescript@npm:~4.7.4": version: 4.7.4 resolution: "typescript@npm:4.7.4" bin: @@ -39311,7 +37361,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@~4.6.0#~builtin, typescript@patch:typescript@~4.6.3#~builtin": +"typescript@patch:typescript@~4.6.0#~builtin": version: 4.6.4 resolution: "typescript@patch:typescript@npm%3A4.6.4#~builtin::version=4.6.4&hash=a1c5e5" bin: @@ -39321,7 +37371,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@~4.7.0#~builtin": +"typescript@patch:typescript@~4.7.0#~builtin, typescript@patch:typescript@~4.7.4#~builtin": version: 4.7.4 resolution: "typescript@patch:typescript@npm%3A4.7.4#~builtin::version=4.7.4&hash=a1c5e5" bin: @@ -39331,10 +37381,10 @@ __metadata: languageName: node linkType: hard -"ua-parser-js@npm:^0.7.18": - version: 0.7.28 - resolution: "ua-parser-js@npm:0.7.28" - checksum: a7da4ad54527211e878ee016c2ef64efad5c2f5a31277d36c9da93b4c89ecaa64f391ad4cf158ada76a9ad8e53004a950705ff1c2f27a52ca8bfb3f1381c39ff +"ua-parser-js@npm:^0.7.30": + version: 0.7.31 + resolution: "ua-parser-js@npm:0.7.31" + checksum: e2f8324a83d1715601576af85b2b6c03890699aaa7272950fc77ea925c70c5e4f75060ae147dc92124e49f7f0e3d6dd2b0a91e7f40d267e92df8894be967ba8b languageName: node linkType: hard @@ -39345,16 +37395,7 @@ __metadata: languageName: node linkType: hard -"uglify-js@npm:^3.1.4": - version: 3.14.3 - resolution: "uglify-js@npm:3.14.3" - bin: - uglifyjs: bin/uglifyjs - checksum: eef57b4fec031f687bef46182c33de5eff6bc40fec8d46152f3b92bb044602dd524a04e33ca5f7391f82db969b92ef6aded860f8a4ee5f4bf796d7420b030236 - languageName: node - linkType: hard - -"uglify-js@npm:^3.7.7": +"uglify-js@npm:^3.1.4, uglify-js@npm:^3.7.7": version: 3.17.0 resolution: "uglify-js@npm:3.17.0" bin: @@ -39372,13 +37413,20 @@ __metadata: languageName: node linkType: hard -"uid2@npm:0.0.3, uid2@npm:0.0.x": +"uid2@npm:0.0.3": version: 0.0.3 resolution: "uid2@npm:0.0.3" checksum: c8f64acfa94aa42d90c1a61ba9df0162f0db0d28c211e21cf5792b3d70b7ad9fd75d19c7cadcce81896ea111335e57e65891a3b6d0a1343a9adf45abf3d4c47d languageName: node linkType: hard +"uid2@npm:0.0.x": + version: 0.0.4 + resolution: "uid2@npm:0.0.4" + checksum: e92325ce2e3b7be504b19e835dbb5a8b0495031f364b08ca46745468ed0ae0f202a4fdaf99a1a2715844156efc3ab410456ae24a0f7c0ae4b0a2e9f2784edfd9 + languageName: node + linkType: hard + "uid2@npm:^1.0.0": version: 1.0.0 resolution: "uid2@npm:1.0.0" @@ -39386,7 +37434,7 @@ __metadata: languageName: node linkType: hard -"unbox-primitive@npm:^1.0.1, unbox-primitive@npm:^1.0.2": +"unbox-primitive@npm:^1.0.2": version: 1.0.2 resolution: "unbox-primitive@npm:1.0.2" dependencies: @@ -39422,38 +37470,17 @@ __metadata: languageName: node linkType: hard -"underscore@npm:^1.12.1, underscore@npm:^1.9.1": - version: 1.13.1 - resolution: "underscore@npm:1.13.1" - checksum: 69bb4e6dd92c387ad322dd5b105f496fa64896d92ff1eea987610920d452667a12bca0938def4c4d60acd12da62410540fd268e7ca4f2480d89324498382fcac - languageName: node - linkType: hard - -"underscore@npm:~1.13.2": +"underscore@npm:^1.12.1, underscore@npm:^1.9.1, underscore@npm:~1.13.2": version: 1.13.4 resolution: "underscore@npm:1.13.4" checksum: 6b04f66cd454e8793a552dc49c71e24e5208a29b9d9c0af988a96948af79103399c36fb15db43f3629bfed152f8b1fe94f44e1249e9d196069c0fc7edfadb636 languageName: node linkType: hard -"undici@npm:5.5.1": - version: 5.5.1 - resolution: "undici@npm:5.5.1" - checksum: c041c9093df7ec683479a9555581206a7c7bebfc1ed6e8669920e55618461fc4ce08938e2fbf8ef7d692c2813c44392b5ed25c58396ee4a72ffd1f1f953712c9 - languageName: node - linkType: hard - "undici@npm:^5.8.0": - version: 5.8.0 - resolution: "undici@npm:5.8.0" - checksum: 7b486ad064da00628d3906e140b86223023cd3494c811da8d7aa1375c2392fe6a6ac421af236c056fd3d3136bba3a91b99e0505dde071dd946070946eb0718b8 - languageName: node - linkType: hard - -"unicode-canonical-property-names-ecmascript@npm:^1.0.4": - version: 1.0.4 - resolution: "unicode-canonical-property-names-ecmascript@npm:1.0.4" - checksum: cc1973b18d0e1a151711e5551f87f4b3086c4f542cd5142aa691307d5720fd725fa7d36c24e12e944e108b91c72554237b0c236772d35592839434da5506c40f + version: 5.10.0 + resolution: "undici@npm:5.10.0" + checksum: 7ba2b71dccc74cd2bdf645b83e9aaef374ae04855943d0a2f42a3d0b9e5556f37cc9b5156fb5288277a2fa95fd46a56f3ae0d5cf73db3f008d75ec41104b136c languageName: node linkType: hard @@ -39464,16 +37491,6 @@ __metadata: languageName: node linkType: hard -"unicode-match-property-ecmascript@npm:^1.0.4": - version: 1.0.4 - resolution: "unicode-match-property-ecmascript@npm:1.0.4" - dependencies: - unicode-canonical-property-names-ecmascript: ^1.0.4 - unicode-property-aliases-ecmascript: ^1.0.4 - checksum: 08e269fac71b5ace0f8331df9e87b9b533fe97b00c43ea58de69ae81816581490f846050e0c472279a3e7434524feba99915a93816f90dbbc0a30bcbd082da88 - languageName: node - linkType: hard - "unicode-match-property-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-match-property-ecmascript@npm:2.0.0" @@ -39484,13 +37501,6 @@ __metadata: languageName: node linkType: hard -"unicode-match-property-value-ecmascript@npm:^1.2.0": - version: 1.2.0 - resolution: "unicode-match-property-value-ecmascript@npm:1.2.0" - checksum: 2e663cfec8e2cf317b69613566314979f717034ea8f58a237dd63234795044a87337410064fe839774d71e1d7e12195520e9edd69ed8e28f2a9eb28a2db38595 - languageName: node - linkType: hard - "unicode-match-property-value-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-match-property-value-ecmascript@npm:2.0.0" @@ -39498,17 +37508,10 @@ __metadata: languageName: node linkType: hard -"unicode-property-aliases-ecmascript@npm:^1.0.4": - version: 1.1.0 - resolution: "unicode-property-aliases-ecmascript@npm:1.1.0" - checksum: 1a96dc462d251bb1c5237f7bc77956b29f01cefce7f3e7448430742930961557c3d1515a9669715ebb06209bf01072e2f78ba1627247017daa84346414bc02f1 - languageName: node - linkType: hard - "unicode-property-aliases-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-property-aliases-ecmascript@npm:2.0.0" - checksum: dda4d39128cbbede2ac60fbb85493d979ec65913b8a486bf7cb7a375a2346fa48cbf9dc6f1ae23376e7e8e684c2b411434891e151e865a661b40a85407db51d0 + version: 2.1.0 + resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" + checksum: 243524431893649b62cc674d877bd64ef292d6071dd2fd01ab4d5ad26efbc104ffcd064f93f8a06b7e4ec54c172bf03f6417921a0d8c3a9994161fe1f88f815b languageName: node linkType: hard @@ -39522,8 +37525,8 @@ __metadata: linkType: hard "unified@npm:^10.0.0": - version: 10.1.0 - resolution: "unified@npm:10.1.0" + version: 10.1.2 + resolution: "unified@npm:10.1.2" dependencies: "@types/unist": ^2.0.0 bail: ^2.0.0 @@ -39532,7 +37535,7 @@ __metadata: is-plain-obj: ^4.0.0 trough: ^2.0.0 vfile: ^5.0.0 - checksum: b7e1d8dcf61d139ff57df1d393b177098a7fa53bddd47dd8c44cdfe983557d653719fd0ba3668a0be89a4a6189907327d56c2d13b21361e3d07b74f51b0d98ef + checksum: 053e7c65ede644607f87bd625a299e4b709869d2f76ec8138569e6e886903b6988b21cd9699e471eda42bee189527be0a9dac05936f1d069a5e65d0125d5d756 languageName: node linkType: hard @@ -39548,13 +37551,6 @@ __metadata: languageName: node linkType: hard -"uniq@npm:^1.0.1": - version: 1.0.1 - resolution: "uniq@npm:1.0.1" - checksum: 8206535f83745ea83f9da7035f3b983fd6ed5e35b8ed7745441944e4065b616bc67cf0d0a23a86b40ee0074426f0607f0a138f9b78e124eb6a7a6a6966055709 - languageName: node - linkType: hard - "unique-filename@npm:^1.1.1": version: 1.1.1 resolution: "unique-filename@npm:1.1.1" @@ -39564,6 +37560,15 @@ __metadata: languageName: node linkType: hard +"unique-filename@npm:^2.0.0": + version: 2.0.1 + resolution: "unique-filename@npm:2.0.1" + dependencies: + unique-slug: ^3.0.0 + checksum: 807acf3381aff319086b64dc7125a9a37c09c44af7620bd4f7f3247fcd5565660ac12d8b80534dcbfd067e6fe88a67e621386dd796a8af828d1337a8420a255f + languageName: node + linkType: hard + "unique-slug@npm:^2.0.0": version: 2.0.2 resolution: "unique-slug@npm:2.0.2" @@ -39573,6 +37578,15 @@ __metadata: languageName: node linkType: hard +"unique-slug@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-slug@npm:3.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 49f8d915ba7f0101801b922062ee46b7953256c93ceca74303bd8e6413ae10aa7e8216556b54dc5382895e8221d04f1efaf75f945c2e4a515b4139f77aa6640c + languageName: node + linkType: hard + "unist-builder@npm:^3.0.0": version: 3.0.0 resolution: "unist-builder@npm:3.0.0" @@ -39597,60 +37611,41 @@ __metadata: linkType: hard "unist-util-position@npm:^4.0.0": - version: 4.0.1 - resolution: "unist-util-position@npm:4.0.1" - checksum: 0fad25db3906eda7a4f6b769e094f124ab99c528db2f3d140d85abd9133e0e89dde2e4b593c69830d58921b089323067bbc6c4832529352d879b32b7297a3aa3 + version: 4.0.3 + resolution: "unist-util-position@npm:4.0.3" + dependencies: + "@types/unist": ^2.0.0 + checksum: 0d89973628d40f19345cbcc50008f7f56d411afa54434bbe6c224b22d26aaf9d4500da2de363f1f01945acab1f1c31920c514253149eb546ff9b8bbc1ea94209 languageName: node linkType: hard "unist-util-stringify-position@npm:^3.0.0": - version: 3.0.0 - resolution: "unist-util-stringify-position@npm:3.0.0" + version: 3.0.2 + resolution: "unist-util-stringify-position@npm:3.0.2" dependencies: "@types/unist": ^2.0.0 - checksum: 460d5e16065942da7acd2578e92f4b8421c5af1f3f15ebc858db90865be69a5454dd6638d73f855cc82b1fa9e6e941a258f97b3f5f3be4f2766b0e6f6c45a031 + checksum: 2dfd7a0fb2a55e99cc319c3bf7f9f1f73ed652978fa70d19117faa7245d20f21738ec926ecc47f341705ca1bb157e87ced0b6bb5ecaa666bd2ae6b2510d6a671 languageName: node linkType: hard -"unist-util-visit-parents@npm:^4.0.0": - version: 4.1.1 - resolution: "unist-util-visit-parents@npm:4.1.1" +"unist-util-visit-parents@npm:^5.0.0, unist-util-visit-parents@npm:^5.1.1": + version: 5.1.1 + resolution: "unist-util-visit-parents@npm:5.1.1" dependencies: "@types/unist": ^2.0.0 unist-util-is: ^5.0.0 - checksum: 49d78984a6dd858a989f849d2b4330c8a04d1ee99c0e9920a5e37668cf847dab95db77a3bf0c8aaeb3e66abeae12e2d454949ec401614efef377d8f82d215662 - languageName: node - linkType: hard - -"unist-util-visit-parents@npm:^5.0.0": - version: 5.1.0 - resolution: "unist-util-visit-parents@npm:5.1.0" - dependencies: - "@types/unist": ^2.0.0 - unist-util-is: ^5.0.0 - checksum: 7c413dbb3dfcb679109fa8f0965d9abf117c3c53fa7b8823f68cac0ea53adbe98c1ce954d36c034e086c966b48b1d44d42c85f7bf6b42a032f728ac338929513 - languageName: node - linkType: hard - -"unist-util-visit@npm:^3.0.0": - version: 3.1.0 - resolution: "unist-util-visit@npm:3.1.0" - dependencies: - "@types/unist": ^2.0.0 - unist-util-is: ^5.0.0 - unist-util-visit-parents: ^4.0.0 - checksum: c37dbc0c5509f85f3abdf46d927b3dd11e6c419159771b1f1a5ce446d36ac993d04b087e28bc6173a172e0fbe9d77e997f120029b2b449766ebe55b6f6e0cc2c + checksum: c699d18f5b26461dee37612b84c243fd5457c98f4c0540d9ba8bee05062aece5f3b4fb1af6b07423ce6750d8926e8c01fc2b1a4de1e54925ef6795c177ed8e18 languageName: node linkType: hard "unist-util-visit@npm:^4.0.0": - version: 4.1.0 - resolution: "unist-util-visit@npm:4.1.0" + version: 4.1.1 + resolution: "unist-util-visit@npm:4.1.1" dependencies: "@types/unist": ^2.0.0 unist-util-is: ^5.0.0 - unist-util-visit-parents: ^5.0.0 - checksum: 3521abee2ed4535092aac073d05f46255475c89781b8e9d8c951a473d91b5d6e4d5912ae4a68a4c1cf17a42ed0108cb93103c7f5c736977529969997451363fb + unist-util-visit-parents: ^5.1.1 + checksum: c4a63734b0a5b439c62d20901bb472bdafdbbcd80c383e254aedeb98b23d0bae815a331e776ce7d63ea3c8018a54318abb8709d07cdf7dd094f79b2f07bb39f0 languageName: node linkType: hard @@ -39671,13 +37666,20 @@ __metadata: languageName: node linkType: hard -"universalify@npm:^0.1.0, universalify@npm:^0.1.2": +"universalify@npm:^0.1.0": version: 0.1.2 resolution: "universalify@npm:0.1.2" checksum: 40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff languageName: node linkType: hard +"universalify@npm:^0.2.0": + version: 0.2.0 + resolution: "universalify@npm:0.2.0" + checksum: e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 + languageName: node + linkType: hard + "universalify@npm:^2.0.0": version: 2.0.0 resolution: "universalify@npm:2.0.0" @@ -39725,9 +37727,9 @@ __metadata: languageName: node linkType: hard -"update-browserslist-db@npm:^1.0.4": - version: 1.0.5 - resolution: "update-browserslist-db@npm:1.0.5" +"update-browserslist-db@npm:^1.0.9": + version: 1.0.9 + resolution: "update-browserslist-db@npm:1.0.9" dependencies: escalade: ^3.1.1 picocolors: ^1.0.0 @@ -39735,7 +37737,7 @@ __metadata: browserslist: ">= 4.21.0" bin: browserslist-lint: cli.js - checksum: 7e425fe5dbbebdccf72a84ce70ec47fc74dce561d28f47bc2b84a1c2b84179a862c2261b18ab66a5e73e261c7e2ef9e11c6129112989d4d52e8f75a56bb923f8 + checksum: f625899b236f6a4d7f62b56be1b8da230c5563d1fef84d3ef148f2e1a3f11a5a4b3be4fd7e3703e51274c116194017775b10afb4de09eb2c0d09d36b90f1f578 languageName: node linkType: hard @@ -39758,11 +37760,11 @@ __metadata: linkType: hard "uri-js@npm:^4.2.2": - version: 4.2.2 - resolution: "uri-js@npm:4.2.2" + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" dependencies: punycode: ^2.1.0 - checksum: 5a91c55d8ae6d9a1ff9dc1b0774888a99aae7cc6e9056c57b709275c0f6753b05cd1a9f2728a1479244b93a9f57ab37c60d277a48d9f2d032d6ae65837bf9bc7 + checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 languageName: node linkType: hard @@ -39773,7 +37775,7 @@ __metadata: languageName: node linkType: hard -"url-parse@npm:^1.5.8": +"url-parse@npm:^1.5.3, url-parse@npm:^1.5.8": version: 1.5.10 resolution: "url-parse@npm:1.5.10" dependencies: @@ -39784,9 +37786,9 @@ __metadata: linkType: hard "url-value-parser@npm:^2.0.0": - version: 2.0.3 - resolution: "url-value-parser@npm:2.0.3" - checksum: f13a2693b633896329956372a58a1c0f6666d72b87c85dff05564a132c1a5d2a698ca3097a481bf06afc1f5007c08ec67499136736c25c38f3ee84e877d72732 + version: 2.2.0 + resolution: "url-value-parser@npm:2.2.0" + checksum: d5fd52b3526bb5db20384c6ab95ff8f8d1f37daaadfb2a8d8c70f60810997a60d80dbff35de681850356d2117c948ca9cb9c5d903d75fb63f021c890d63440c6 languageName: node linkType: hard @@ -39833,11 +37835,11 @@ __metadata: linkType: hard "use-memo-one@npm:^1.1.1": - version: 1.1.1 - resolution: "use-memo-one@npm:1.1.1" + version: 1.1.3 + resolution: "use-memo-one@npm:1.1.3" peerDependencies: - react: ^16.8.0 - checksum: 39ede232b8c95e6e1ff4f9d9b3f45826b6c1a51a8baae562f49867c569929323ec1e100186aa5111b84f6650bcf273746faf2739091cbe13d6c2e8d3306cc254 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 8f08eba26d69406b61bb4b8dacdd5a92bd6aef5b53d346dfe87954f7330ee10ecabc937cc7854635155d46053828e85c10b5a5aff7a04720e6a97b9f42999bac languageName: node linkType: hard @@ -39956,7 +37958,7 @@ __metadata: languageName: node linkType: hard -"uuid@npm:^3.3.2": +"uuid@npm:^3.3.2, uuid@npm:^3.4.0": version: 3.4.0 resolution: "uuid@npm:3.4.0" bin: @@ -39966,8 +37968,8 @@ __metadata: linkType: hard "uvu@npm:^0.5.0": - version: 0.5.3 - resolution: "uvu@npm:0.5.3" + version: 0.5.6 + resolution: "uvu@npm:0.5.6" dependencies: dequal: ^2.0.0 diff: ^5.0.0 @@ -39975,7 +37977,7 @@ __metadata: sade: ^1.7.3 bin: uvu: bin.js - checksum: 0cf8e9e6ec79199dacc64fe0e9f82b5bf1d2308f3c54ec1aba5d1ca0a4beff4f173cae0f87bc52d35121565fd232b969fbf52cca3707e20517e62645e19b898e + checksum: 09460a37975627de9fcad396e5078fb844d01aaf64a6399ebfcfd9e55f1c2037539b47611e8631f89be07656962af0cf48c334993db82b9ae9c3d25ce3862168 languageName: node linkType: hard @@ -40094,15 +38096,15 @@ __metadata: linkType: hard "vasync@npm:^2.2.0": - version: 2.2.0 - resolution: "vasync@npm:2.2.0" + version: 2.2.1 + resolution: "vasync@npm:2.2.1" dependencies: verror: 1.10.0 - checksum: dcfafe19a6d3e51b6cc30e98f8e25dec5b4b71bb699eafa5e1840275337f8345753a86a036428442abae7c2cb4ff8f352cd64e245f8c7aaeac89efc512081e91 + checksum: dca14090436f1b30d4887737af47bc8333795a6d45e520e583ca2c4476d841bf68606cbc79071cfd980e3e42e630736d66a598b9100a505663442ae2e7c2f92f languageName: node linkType: hard -"verror@npm:1.10.0, verror@npm:^1.8.1": +"verror@npm:1.10.0": version: 1.10.0 resolution: "verror@npm:1.10.0" dependencies: @@ -40113,25 +38115,36 @@ __metadata: languageName: node linkType: hard +"verror@npm:^1.8.1": + version: 1.10.1 + resolution: "verror@npm:1.10.1" + dependencies: + assert-plus: ^1.0.0 + core-util-is: 1.0.2 + extsprintf: ^1.2.0 + checksum: 690a8d6ad5a4001672290e9719e3107c86269bc45fe19f844758eecf502e59f8aa9631b19b839f6d3dea562334884d22d1eb95ae7c863032075a9212c889e116 + languageName: node + linkType: hard + "vfile-message@npm:^3.0.0": - version: 3.0.2 - resolution: "vfile-message@npm:3.0.2" + version: 3.1.2 + resolution: "vfile-message@npm:3.1.2" dependencies: "@types/unist": ^2.0.0 unist-util-stringify-position: ^3.0.0 - checksum: 02d50c6652a38c96dbb8cbcc1e8d5b083799a3bf99ba1cf85332e2129e9b569582201fca03839a4205161fe578ebbb31d9bdc52b2cff352051546c99bdd97df3 + checksum: 96fbd9e9b5e0babb5ee61e3a716dc7a6a8c28f2c8c711837d95c88b782161b31549ad16059a78990d7b836d0f4d3b4d8c9ffde44370d48d9cac991fc1e3e17c5 languageName: node linkType: hard "vfile@npm:^5.0.0": - version: 5.1.0 - resolution: "vfile@npm:5.1.0" + version: 5.3.5 + resolution: "vfile@npm:5.3.5" dependencies: "@types/unist": ^2.0.0 is-buffer: ^2.0.0 unist-util-stringify-position: ^3.0.0 vfile-message: ^3.0.0 - checksum: f626578bfdff42bd38c4117ad1f43d2c4bebe2df9ca1a861ece542f4f42dfa415405cb96c4a01759fee1bdcf778281c936467497c71a0d097c73367e8c11f30a + checksum: 14a9ea19d1801bb99fc9a451d220d2ee84d891bae52094db660f9bf637c1cada0c45a3e00962ff3e901da16dd5051367e25a4a214e40db57ae40f57363796b45 languageName: node linkType: hard @@ -40181,10 +38194,10 @@ __metadata: languageName: node linkType: hard -"vscode-languageserver-types@npm:^3.15.1": - version: 3.15.1 - resolution: "vscode-languageserver-types@npm:3.15.1" - checksum: 28c1cb0d5b7ad7c719015a6eb5f774c000fe68c41bbd4a3fd0cbe6d862f27eec075d6bfb14c9d86c22d0e8711c2df8194295bf1e7d6ac0c359cab348c5e14887 +"vscode-languageserver-types@npm:^3.17.1": + version: 3.17.2 + resolution: "vscode-languageserver-types@npm:3.17.2" + checksum: ef2d862d22f622b64de0f428773d50a5928ec6cdd485960a7564ebe4fd4a3c8bcd956f29eb15bc45a0f353846e62f39f6c764d2ab85ce774b8724411ba84342f languageName: node linkType: hard @@ -40198,9 +38211,9 @@ __metadata: linkType: hard "w3c-keyname@npm:^2.2.4": - version: 2.2.4 - resolution: "w3c-keyname@npm:2.2.4" - checksum: 890180452bdd7d25f05deb97b3c0839911264432a7c5dd8dc4c9d9b6384237a66d66b7c2a145440b607826d5aa61cd90098cfffcf50b50c0e4c2259b0d208038 + version: 2.2.6 + resolution: "w3c-keyname@npm:2.2.6" + checksum: 59a31d23ca9953c01c99ed6695fee5b6ea36eb2412d76a21fe4302ab33a3f5cd96c006a763940b6115c3d042c16d3564eeee1156832217d028af0518098b3a42 languageName: node linkType: hard @@ -40243,15 +38256,15 @@ __metadata: linkType: hard "walker@npm:^1.0.7": - version: 1.0.7 - resolution: "walker@npm:1.0.7" + version: 1.0.8 + resolution: "walker@npm:1.0.8" dependencies: - makeerror: 1.0.x - checksum: 4038fcf92f6ab0288267ad05008aec9e089a759f1bd32e1ea45cc2eb498eb12095ec43cf8ca2bf23a465f4580a0d33b25b89f450ba521dd27083cbc695ee6bf5 + makeerror: 1.0.12 + checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c languageName: node linkType: hard -"watchpack@npm:^2.0.0-beta.10, watchpack@npm:^2.4.0": +"watchpack@npm:^2.4.0": version: 2.4.0 resolution: "watchpack@npm:2.4.0" dependencies: @@ -40292,17 +38305,17 @@ __metadata: languageName: node linkType: hard -"web-streams-polyfill@npm:4.0.0-beta.1": - version: 4.0.0-beta.1 - resolution: "web-streams-polyfill@npm:4.0.0-beta.1" - checksum: 94c21d3aba1c26e5942bb210ffd60c6990cbc750d34bdf548ed93ed845f0a6eac89cdae1dd0195afaba15fbcf4aaca9e397ee40fa4d1f2c191d04d43717bd065 +"web-streams-polyfill@npm:4.0.0-beta.3": + version: 4.0.0-beta.3 + resolution: "web-streams-polyfill@npm:4.0.0-beta.3" + checksum: dfec1fbf52b9140e4183a941e380487b6c3d5d3838dd1259be81506c1c9f2abfcf5aeb670aeeecfd9dff4271a6d8fef931b193c7bedfb42542a3b05ff36c0d16 languageName: node linkType: hard "web-streams-polyfill@npm:^3.2.0": - version: 3.2.0 - resolution: "web-streams-polyfill@npm:3.2.0" - checksum: e23ad0649392fa0159dbfc6bb27474c308c3f332d9078cfef3c06c154165bef18732c5814126147c6c712f604216ddc950c171c854e3821f020e0d2d721a5958 + version: 3.2.1 + resolution: "web-streams-polyfill@npm:3.2.1" + checksum: b119c78574b6d65935e35098c2afdcd752b84268e18746606af149e3c424e15621b6f1ff0b42b2676dc012fc4f0d313f964b41a4b5031e525faa03997457da02 languageName: node linkType: hard @@ -40341,23 +38354,23 @@ __metadata: linkType: hard "webpack-dev-middleware@npm:^5.3.1": - version: 5.3.1 - resolution: "webpack-dev-middleware@npm:5.3.1" + version: 5.3.3 + resolution: "webpack-dev-middleware@npm:5.3.3" dependencies: colorette: ^2.0.10 - memfs: ^3.4.1 + memfs: ^3.4.3 mime-types: ^2.1.31 range-parser: ^1.2.1 schema-utils: ^4.0.0 peerDependencies: webpack: ^4.0.0 || ^5.0.0 - checksum: 32e36b5893dde4107e5bb758afdc7fc61fd238a62635cb2964ed6b61e363793275a40870479daeae3fa3b87678c1311f44ba7492f6ebf30fe9360f2aab30bae1 + checksum: dd332cc6da61222c43d25e5a2155e23147b777ff32fdf1f1a0a8777020c072fbcef7756360ce2a13939c3f534c06b4992a4d659318c4a7fe2c0530b52a8a6621 languageName: node linkType: hard "webpack-dev-server@npm:^4.7.3": - version: 4.10.1 - resolution: "webpack-dev-server@npm:4.10.1" + version: 4.11.0 + resolution: "webpack-dev-server@npm:4.11.0" dependencies: "@types/bonjour": ^3.5.9 "@types/connect-history-api-fallback": ^1.3.5 @@ -40395,7 +38408,7 @@ __metadata: optional: true bin: webpack-dev-server: bin/webpack-dev-server.js - checksum: d026e6be63058ba5f881c58c9d49367a26c43d76bb7c2a1d9fb80eeae644099cc098913b4e9f32e2ed89eff0e7cc08e03cae8a1c4e7a1c8f67c5c673ab70761e + checksum: b2c7e9810138d0c6fa670a890410a74b29d4dd23d428e92e61e0233c542689f57caf9b31c031fbcc772170b6710b0752e81fa9cbc41ac0deefdc32d5749ce08d languageName: node linkType: hard @@ -40423,7 +38436,7 @@ __metadata: languageName: node linkType: hard -"webpack@npm:^5, webpack@npm:^5.70.0": +"webpack@npm:^5, webpack@npm:^5.1.0, webpack@npm:^5.70.0": version: 5.74.0 resolution: "webpack@npm:5.74.0" dependencies: @@ -40567,17 +38580,16 @@ __metadata: linkType: hard "which-typed-array@npm:^1.1.2": - version: 1.1.4 - resolution: "which-typed-array@npm:1.1.4" + version: 1.1.8 + resolution: "which-typed-array@npm:1.1.8" dependencies: - available-typed-arrays: ^1.0.2 - call-bind: ^1.0.0 - es-abstract: ^1.18.0-next.1 - foreach: ^2.0.5 - function-bind: ^1.1.1 - has-symbols: ^1.0.1 - is-typed-array: ^1.1.3 - checksum: 369597a623b0e446eb7b6ce9e2f515c2f6a0b3f5040b9c592d9ed07fb3357a90ab45311230f7e687cf0f0d410b47e98fba620dbb7eece9f556309a3448b4fa3e + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + es-abstract: ^1.20.0 + for-each: ^0.3.3 + has-tostringtag: ^1.0.0 + is-typed-array: ^1.1.9 + checksum: bedf4d30a738e848404fe67fe0ace33433a7298cf3f5a4d4b2c624ba99c4d25f06a7fd6f3566c3d16af5f8a54f0c6293cbfded5b1208ce11812753990223b45a languageName: node linkType: hard @@ -40633,9 +38645,10 @@ __metadata: linkType: hard "winston@npm:^3.2.1, winston@npm:^3.7.2, winston@npm:^3.8.1": - version: 3.8.1 - resolution: "winston@npm:3.8.1" + version: 3.8.2 + resolution: "winston@npm:3.8.2" dependencies: + "@colors/colors": 1.5.0 "@dabh/diagnostics": ^2.0.2 async: ^3.2.3 is-stream: ^2.0.0 @@ -40646,7 +38659,7 @@ __metadata: stack-trace: 0.0.x triple-beam: ^1.3.0 winston-transport: ^4.5.0 - checksum: 14637222a4239f1ee7e629dbbf0c65161abe95eeb7acd275caf210c5d47d93254fdb007291ea75b5e241d4bb6dd3c29d000bd04ae5420a347711ae7cd0b2da88 + checksum: f7b901798b92ab9e93c850110bf6e98500e9a0e762b62dab410cf928b2a4145533dfa6d3d2b24f7bf0dc94b53808d5bd28aaaeff9a4b43b89ea4c798cce308ea languageName: node linkType: hard @@ -40727,12 +38740,12 @@ __metadata: linkType: hard "write-file-atomic@npm:^4.0.0": - version: 4.0.1 - resolution: "write-file-atomic@npm:4.0.1" + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" dependencies: imurmurhash: ^0.1.4 signal-exit: ^3.0.7 - checksum: 8f780232533ca6223c63c9b9c01c4386ca8c625ebe5017a9ed17d037aec19462ae17109e0aa155bff5966ee4ae7a27b67a99f55caf3f32ffd84155e9da3929fc + checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c languageName: node linkType: hard @@ -40775,7 +38788,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:8.8.1, ws@npm:^8.3.0": +"ws@npm:8.8.1, ws@npm:^8.3.0, ws@npm:^8.4.2": version: 8.8.1 resolution: "ws@npm:8.8.1" peerDependencies: @@ -40790,7 +38803,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^5.2.0 || ^6.0.0 || ^7.0.0": +"ws@npm:^5.2.0 || ^6.0.0 || ^7.0.0, ws@npm:^7.3.1, ws@npm:^7.4.6": version: 7.5.9 resolution: "ws@npm:7.5.9" peerDependencies: @@ -40805,36 +38818,6 @@ __metadata: languageName: node linkType: hard -"ws@npm:^7.3.1, ws@npm:^7.4.6": - version: 7.5.6 - resolution: "ws@npm:7.5.6" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 0c2ffc9a539dd61dd2b00ff6cc5c98a3371e2521011fe23da4b3578bb7ac26cbdf7ca8a68e8e08023c122ae247013216dde2a20c908de415a6bcc87bdef68c87 - languageName: node - linkType: hard - -"ws@npm:^8.4.2": - version: 8.5.0 - resolution: "ws@npm:8.5.0" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 76f2f90e40344bf18fd544194e7067812fb1372b2a37865678d8f12afe4b478ff2ebc0c7c0aff82cd5e6b66fc43d889eec0f1865c2365d8f7a66d92da7744a77 - languageName: node - linkType: hard - "ws@npm:~7.4.2": version: 7.4.6 resolution: "ws@npm:7.4.6" @@ -40879,12 +38862,12 @@ __metadata: linkType: hard "xml-crypto@npm:^2.1.3": - version: 2.1.3 - resolution: "xml-crypto@npm:2.1.3" + version: 2.1.4 + resolution: "xml-crypto@npm:2.1.4" dependencies: "@xmldom/xmldom": ^0.7.0 xpath: 0.0.32 - checksum: 04273568b4ed3d1422b7e93ae7c5e8e14180e9d377038a5767ef6af4d1da2ec766f3a476f4cf0140ecedb93036dac63e563f60d9bb249c5a344d77c93c07ff87 + checksum: a4ff9803d5cbdc8af4f55660ff16fd60f7f5157cfca2043ac68897938f868b037886b7e2132b965c06ecd6dd60bad1be8e8377324b9c9a73e79f3c85cfbe734c languageName: node linkType: hard @@ -40990,14 +38973,14 @@ __metadata: linkType: hard "xss@npm:^1.0.8": - version: 1.0.10 - resolution: "xss@npm:1.0.10" + version: 1.0.14 + resolution: "xss@npm:1.0.14" dependencies: commander: ^2.20.3 cssfilter: 0.0.10 bin: xss: bin/xss - checksum: 0dbc70a716020d854569610d5bc949ba9d3b7f530b7af5508ffe84edaea228c34a4e1227f71cb3a4741373b1c49c3cb691f69dddefda45a594a31f112ae6a738 + checksum: 77c6a60a5f96490098ef837c3b49321c0f31963f323c748cb0a01bc02fc6e465a6accbe4c54cad62f8d6ffe647d984be173879433af861883f6213d9416d3f53 languageName: node linkType: hard @@ -41071,7 +39054,7 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:20.2.4, yargs-parser@npm:^20.2.3": +"yargs-parser@npm:20.2.4": version: 20.2.4 resolution: "yargs-parser@npm:20.2.4" checksum: d251998a374b2743a20271c2fd752b9fbef24eb881d53a3b99a7caa5e8227fcafd9abf1f345ac5de46435821be25ec12189a11030c12ee6481fef6863ed8b924 @@ -41088,7 +39071,7 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^20.2.2": +"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3": version: 20.2.9 resolution: "yargs-parser@npm:20.2.9" checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 @@ -41146,22 +39129,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^17.0.0, yargs@npm:^17.2.1": - version: 17.3.1 - resolution: "yargs@npm:17.3.1" - dependencies: - cliui: ^7.0.2 - escalade: ^3.1.1 - get-caller-file: ^2.0.5 - require-directory: ^2.1.1 - string-width: ^4.2.3 - y18n: ^5.0.5 - yargs-parser: ^21.0.0 - checksum: 64fc2e32c56739f1d14d2d24acd17a6944c3c8e3e3558f09fc1953ac112e868cc16013d282886b9d5be22187f8b9ed4f60741a6b1011f595ce2718805a656852 - languageName: node - linkType: hard - -"yargs@npm:^17.1.1, yargs@npm:^17.3.1": +"yargs@npm:^17.0.0, yargs@npm:^17.1.1, yargs@npm:^17.2.1, yargs@npm:^17.3.1": version: 17.5.1 resolution: "yargs@npm:17.5.1" dependencies: @@ -41325,10 +39293,10 @@ __metadata: linkType: hard "z-schema@npm:~5.0.2": - version: 5.0.2 - resolution: "z-schema@npm:5.0.2" + version: 5.0.4 + resolution: "z-schema@npm:5.0.4" dependencies: - commander: ^2.7.1 + commander: ^2.20.3 lodash.get: ^4.4.2 lodash.isequal: ^4.5.0 validator: ^13.7.0 @@ -41337,7 +39305,7 @@ __metadata: optional: true bin: z-schema: bin/z-schema - checksum: 084b2f16043ac0a892914ee29cc0b4fafd9338133eec0345cd6ced25e814f647fa67be1090ad5f606759c2c1f2f8c28127960ba187f437f1caf6fb8cd45d7336 + checksum: afa4e0039a104a53eeb6977bf754ef44e32042aecbf3b5eb18b82649763abd5c2608e47d6d6902291359b41e76130594d7f2b6132316d819c3529f17d4d3464d languageName: node linkType: hard @@ -41367,9 +39335,9 @@ __metadata: linkType: hard "zod@npm:^3.11.6, zod@npm:^3.9.5": - version: 3.18.0 - resolution: "zod@npm:3.18.0" - checksum: 86a9a9928f4b40a07020d4b9832842fa4a70050c2d7bd1b2866bc1acfd734aa53a40f87a99a4312a637341a608b0105770c7a1f83b56df78e97691b4f5badcd8 + version: 3.19.1 + resolution: "zod@npm:3.19.1" + checksum: 56e420ea5845912324a8fc61833714a2aec84954e418b52660d76502183c6e62fef9447cbfa64349640c5ce190cf2c24267e006bb80f066183e2f3fa9fe11864 languageName: node linkType: hard From 70d5c4b2be457b35a82ef874d7b13c30d36a21de Mon Sep 17 00:00:00 2001 From: Wesley Date: Sat, 17 Sep 2022 11:26:46 +0200 Subject: [PATCH 022/278] fix yarn lock Signed-off-by: Wesley --- yarn.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3618607822..ad23b59799 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2054,7 +2054,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/backend-common@^0.15.1-next.2, @backstage/backend-common@^0.15.1-next.3, @backstage/backend-common@workspace:packages/backend-common": +"@backstage/backend-common@^0.15.1-next.3, @backstage/backend-common@workspace:packages/backend-common": version: 0.0.0-use.local resolution: "@backstage/backend-common@workspace:packages/backend-common" dependencies: @@ -3252,7 +3252,7 @@ __metadata: dependencies: "@azure/arm-resourcegraph": ^4.2.1 "@azure/identity": ^2.1.0 - "@backstage/backend-common": ^0.15.1-next.2 + "@backstage/backend-common": ^0.15.1-next.3 "@backstage/cli": ^0.19.0-next.2 "@backstage/config": ^1.0.2-next.0 "@backstage/plugin-azure-common": ^0.0.0 From e81e013f882a5cfec3ec4eb9b54303a9423b306d Mon Sep 17 00:00:00 2001 From: Wesley Date: Tue, 20 Sep 2022 10:33:40 +0200 Subject: [PATCH 023/278] fixed yarn.lock build api-report's changed annotation to match 'arm' name prettier applied Signed-off-by: Wesley --- .changeset/tasty-colts-hug.md | 2 +- plugins/azure-backend/README.md | 4 +- plugins/azure-backend/api-report.md | 55 + plugins/azure-backend/package.json | 6 +- plugins/azure-backend/src/index.ts | 1 + plugins/azure/README.md | 14 +- plugins/azure/api-report.md | 58 + plugins/azure/package.json | 23 +- .../AzureSitesOverview.tsx | 14 +- .../src/hooks/useServiceEntityAnnotations.ts | 8 +- plugins/azure/src/mocks/mocks.ts | 2 +- yarn.lock | 9099 ++++++++++------- 12 files changed, 5705 insertions(+), 3581 deletions(-) create mode 100644 plugins/azure-backend/api-report.md create mode 100644 plugins/azure/api-report.md diff --git a/.changeset/tasty-colts-hug.md b/.changeset/tasty-colts-hug.md index ed76ab0048..040b24d3dc 100644 --- a/.changeset/tasty-colts-hug.md +++ b/.changeset/tasty-colts-hug.md @@ -4,4 +4,4 @@ '@backstage/plugin-azure-common': minor --- -Azure Functions Plugin support based on annotation supplied by the entity. +Generic azure plugin based on an annotation supplied by a given entity. diff --git a/plugins/azure-backend/README.md b/plugins/azure-backend/README.md index 98d72836b6..af9de5ff3c 100644 --- a/plugins/azure-backend/README.md +++ b/plugins/azure-backend/README.md @@ -70,9 +70,7 @@ Here's how to get the backend plugin up and running: async function main() { // ... // Add this line under the other lines that follow the useHotMemoize pattern - const azureEnv = useHotMemoize(module, () => - createEnv('azure'), - ); + const azureEnv = useHotMemoize(module, () => createEnv('azure')); // ... // Insert this line under the other lines that add their routers to apiRouter in the same way diff --git a/plugins/azure-backend/api-report.md b/plugins/azure-backend/api-report.md new file mode 100644 index 0000000000..85d63acb3b --- /dev/null +++ b/plugins/azure-backend/api-report.md @@ -0,0 +1,55 @@ +## API Report File for "@backstage/plugin-azure-backend" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { Config } from '@backstage/config'; +import express from 'express'; +import { Logger } from 'winston'; +import { SiteList } from '@backstage/plugin-azure-common'; + +// @public (undocumented) +export class AzureConfig { + constructor( + domain: string, + tenantId: string, + subscriptions?: string[] | undefined, + clientId?: string | undefined, + clientSecret?: string | undefined, + ); + // (undocumented) + readonly clientId?: string | undefined; + // (undocumented) + readonly clientSecret?: string | undefined; + // (undocumented) + readonly domain: string; + // (undocumented) + static fromConfig(config: Config): AzureConfig; + // (undocumented) + readonly subscriptions?: string[] | undefined; + // (undocumented) + readonly tenantId: string; +} + +// @public (undocumented) +export class AzureSitesApi { + constructor(config: AzureConfig); + // (undocumented) + static fromConfig(config: Config): AzureSitesApi; + // (undocumented) + list({ name }: { name: string }): Promise; +} + +// @public (undocumented) +export function createRouter(options: RouterOptions): Promise; + +// @public (undocumented) +export interface RouterOptions { + // (undocumented) + azureSitesApi: AzureSitesApi; + // (undocumented) + logger: Logger; +} + +// (No @packageDocumentation comment for this package) +``` diff --git a/plugins/azure-backend/package.json b/plugins/azure-backend/package.json index 2a111ec57b..d24fed48b7 100644 --- a/plugins/azure-backend/package.json +++ b/plugins/azure-backend/package.json @@ -38,7 +38,7 @@ "@backstage/backend-common": "^0.15.1-next.3", "@backstage/config": "^1.0.2-next.0", "@backstage/plugin-azure-common": "^0.0.0", - "@types/express": "*", + "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", "node-fetch": "^2.6.7", @@ -46,9 +46,9 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", + "@backstage/cli": "^0.19.0-next.3", "@types/supertest": "^2.0.8", - "msw": "^0.44.0" + "msw": "^0.47.0" }, "files": [ "dist" diff --git a/plugins/azure-backend/src/index.ts b/plugins/azure-backend/src/index.ts index 2746fa2c7c..97f94e4470 100644 --- a/plugins/azure-backend/src/index.ts +++ b/plugins/azure-backend/src/index.ts @@ -16,3 +16,4 @@ export * from './service/router'; export * from './api'; +export * from './config'; diff --git a/plugins/azure/README.md b/plugins/azure/README.md index 00b8e690d6..00d22aacd5 100644 --- a/plugins/azure/README.md +++ b/plugins/azure/README.md @@ -10,9 +10,9 @@ _Inspired by [roadie.io AWS Lamda plugin](https://roadie.io/backstage/plugins/aw ## Plugin Setup -The following sections will help you get the Azure Functions plugin setup and running +The following sections will help you get the Azure plugin setup and running -### Azure Functions Backend +### Azure Backend You need to set up the Azure backend plugin before you move forward with any of these steps if you haven't already. @@ -21,10 +21,10 @@ You need to set up the Azure backend plugin before you move forward with any of To be able to use the Azure plugin you need to add the following annotation to any entities you want to use it with: ```yaml -portal.azure.com/resource-name: +azure.com/microsoft.web/sites: ``` -`` can be an exact or partial name for the site. +`` supports case-insensitive exact / partial value. Example of Partial Matching: @@ -39,7 +39,7 @@ func-testapp-us The annotation you will use to have the three functions' app appear in the overview table would look like this: ```yaml -portal.azure.com/resource-name: func-testapp +azure.com/microsoft.web/sites: func-testapp ``` ### Install the component @@ -54,14 +54,14 @@ yarn add @backstage/plugin-azure ```ts // In packages/app/src/components/catalog/EntityPage.tsx -import { EntityAzureSitesOverviewWidget, isAzureResourceNameAvailable } from '@backstage/plugin-azure'; +import { EntityAzureSitesOverviewWidget, isAzureWebSiteNameAvailable } from '@backstage/plugin-azure'; ... const serviceEntityPage = ( //... - Boolean(isAzureResourceNameAvailable(e))} path="/azure" title="Azure"> + Boolean(isAzureWebSiteNameAvailable(e))} path="/azure" title="Azure"> //... diff --git a/plugins/azure/api-report.md b/plugins/azure/api-report.md new file mode 100644 index 0000000000..a3d6381c09 --- /dev/null +++ b/plugins/azure/api-report.md @@ -0,0 +1,58 @@ +## API Report File for "@backstage/plugin-azure" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +/// + +import { ApiRef } from '@backstage/core-plugin-api'; +import { BackstagePlugin } from '@backstage/core-plugin-api'; +import { DiscoveryApi } from '@backstage/core-plugin-api'; +import { Entity } from '@backstage/catalog-model'; +import { IdentityApi } from '@backstage/core-plugin-api'; +import { RouteRef } from '@backstage/core-plugin-api'; +import { SiteList } from '@backstage/plugin-azure-common'; + +// @public (undocumented) +export const azureSiteApiRef: ApiRef; + +// @public (undocumented) +export type AzureSitesApi = { + list: ({ name }: { name: string }) => Promise; +}; + +// @public (undocumented) +export class AzureSitesApiBackendClient implements AzureSitesApi { + constructor(options: { + discoveryApi: DiscoveryApi; + identityApi: IdentityApi; + }); + // (undocumented) + list({ name }: { name: string }): Promise; +} + +// @public (undocumented) +export const AzureSitesOverviewWidget: () => JSX.Element; + +// @public (undocumented) +export const azureSitesPlugin: BackstagePlugin< + { + entityContent: RouteRef; + }, + {}, + {} +>; + +// @public (undocumented) +export const EntityAzureSitesOverviewWidget: () => JSX.Element; + +// @public (undocumented) +export const entityContentRouteRef: RouteRef; + +// @public (undocumented) +export const isAzureWebSiteNameAvailable: ( + entity: Entity, +) => string | undefined; + +// (No @packageDocumentation comment for this package) +``` diff --git a/plugins/azure/package.json b/plugins/azure/package.json index 50d5b7310c..a0999f8e89 100644 --- a/plugins/azure/package.json +++ b/plugins/azure/package.json @@ -34,32 +34,31 @@ }, "dependencies": { "@backstage/catalog-model": "^1.1.1-next.0", - "@backstage/core-components": "^0.11.1-next.2", - "@backstage/core-plugin-api": "^1.0.6-next.2", + "@backstage/core-components": "^0.11.1-next.3", + "@backstage/core-plugin-api": "^1.0.6-next.3", "@backstage/plugin-azure-common": "^0.0.0", - "@backstage/plugin-catalog-react": "^1.1.4-next.1", + "@backstage/plugin-catalog-react": "^1.1.4-next.2", "@backstage/theme": "^0.2.16", - "@material-ui/core": "^4.9.13", + "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", - "luxon": "^3.0.3", + "luxon": "^3.0.0", "react-use": "^17.2.4" }, "peerDependencies": { "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0-next.2", - "@backstage/core-app-api": "^1.1.0-next.2", - "@backstage/dev-utils": "^1.0.6-next.1", - "@backstage/test-utils": "^1.2.0-next.2", + "@backstage/cli": "^0.19.0-next.3", + "@backstage/core-app-api": "^1.1.0-next.3", + "@backstage/dev-utils": "^1.0.6-next.2", + "@backstage/test-utils": "^1.2.0-next.3", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", - "@types/jest": "*", - "@types/node": "*", + "@types/node": "^16.11.26", "cross-fetch": "^3.1.5", - "msw": "^0.44.0" + "msw": "^0.47.0" }, "files": [ "dist" diff --git a/plugins/azure/src/components/AzureSitesOverviewComponent/AzureSitesOverview.tsx b/plugins/azure/src/components/AzureSitesOverviewComponent/AzureSitesOverview.tsx index ef23d7fb2a..755a42f5da 100644 --- a/plugins/azure/src/components/AzureSitesOverviewComponent/AzureSitesOverview.tsx +++ b/plugins/azure/src/components/AzureSitesOverviewComponent/AzureSitesOverview.tsx @@ -18,7 +18,7 @@ import React from 'react'; import { Entity } from '@backstage/catalog-model'; import { useSites } from '../../hooks/useSites'; import { - AZURE_RESOURCE_NAME_ANNOTATION, + AZURE_WEB_SITE_NAME_ANNOTATION, useServiceEntityAnnotations, } from '../../hooks/useServiceEntityAnnotations'; import { @@ -30,14 +30,14 @@ import { useEntity } from '@backstage/plugin-catalog-react'; import { AzureSitesOverviewTable } from '../AzureSitesOverviewTableComponent/AzureSitesOverviewTable'; /** @public */ -export const isAzureResourceNameAvailable = (entity: Entity) => - entity?.metadata.annotations?.[AZURE_RESOURCE_NAME_ANNOTATION]; +export const isAzureWebSiteNameAvailable = (entity: Entity) => + entity?.metadata.annotations?.[AZURE_WEB_SITE_NAME_ANNOTATION]; const AzureSitesOverview = ({ entity }: { entity: Entity }) => { - const { resourceName } = useServiceEntityAnnotations(entity); + const { webSiteName } = useServiceEntityAnnotations(entity); const [sites] = useSites({ - name: resourceName, + name: webSiteName, }); if (sites.error) { @@ -60,10 +60,10 @@ const AzureSitesOverview = ({ entity }: { entity: Entity }) => { export const AzureSitesOverviewWidget = () => { const { entity } = useEntity(); - if (!isAzureResourceNameAvailable(entity)) { + if (!isAzureWebSiteNameAvailable(entity)) { return ( ); } diff --git a/plugins/azure/src/hooks/useServiceEntityAnnotations.ts b/plugins/azure/src/hooks/useServiceEntityAnnotations.ts index e998012aab..2e993d8dea 100644 --- a/plugins/azure/src/hooks/useServiceEntityAnnotations.ts +++ b/plugins/azure/src/hooks/useServiceEntityAnnotations.ts @@ -16,12 +16,12 @@ import { Entity } from '@backstage/catalog-model'; -export const AZURE_RESOURCE_NAME_ANNOTATION = 'portal.azure.com/resource-name'; +export const AZURE_WEB_SITE_NAME_ANNOTATION = 'azure.com/microsoft.web/sites'; export const useServiceEntityAnnotations = (entity: Entity) => { - const resourceName = - entity?.metadata.annotations?.[AZURE_RESOURCE_NAME_ANNOTATION] ?? ''; + const webSiteName = + entity?.metadata.annotations?.[AZURE_WEB_SITE_NAME_ANNOTATION] ?? ''; return { - resourceName, + webSiteName, }; }; diff --git a/plugins/azure/src/mocks/mocks.ts b/plugins/azure/src/mocks/mocks.ts index 9cc739baa9..155a0f2494 100644 --- a/plugins/azure/src/mocks/mocks.ts +++ b/plugins/azure/src/mocks/mocks.ts @@ -20,7 +20,7 @@ export const entityMock = { metadata: { namespace: 'default', annotations: { - 'portal.azure.com/resource-name': 'func-mock', + 'azure.com/microsoft.web/sites': 'func-mock', }, name: 'sample-azure-service', description: 'A service for testing Backstage functionality.', diff --git a/yarn.lock b/yarn.lock index ad23b59799..9f597a635a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13,16 +13,15 @@ __metadata: linkType: hard "@ampproject/remapping@npm:^2.1.0": - version: 2.2.0 - resolution: "@ampproject/remapping@npm:2.2.0" + version: 2.1.2 + resolution: "@ampproject/remapping@npm:2.1.2" dependencies: - "@jridgewell/gen-mapping": ^0.1.0 - "@jridgewell/trace-mapping": ^0.3.9 - checksum: d74d170d06468913921d72430259424b7e4c826b5a7d39ff839a29d547efb97dc577caa8ba3fb5cf023624e9af9d09651afc3d4112a45e2050328abc9b3a2292 + "@jridgewell/trace-mapping": ^0.3.0 + checksum: e023f92cdd9723f3042cde3b4d922adfeef0e198aa73486b0b6c034ad36af5f96e5c0cc72b335b30b2eb9852d907efc92af6bfcd3f4b4d286177ee32a189cf92 languageName: node linkType: hard -"@apidevtools/json-schema-ref-parser@npm:9.0.6": +"@apidevtools/json-schema-ref-parser@npm:9.0.6, @apidevtools/json-schema-ref-parser@npm:^9.0.6": version: 9.0.6 resolution: "@apidevtools/json-schema-ref-parser@npm:9.0.6" dependencies: @@ -33,18 +32,6 @@ __metadata: languageName: node linkType: hard -"@apidevtools/json-schema-ref-parser@npm:^9.0.6": - version: 9.0.9 - resolution: "@apidevtools/json-schema-ref-parser@npm:9.0.9" - dependencies: - "@jsdevtools/ono": ^7.1.3 - "@types/json-schema": ^7.0.6 - call-me-maybe: ^1.0.1 - js-yaml: ^4.1.0 - checksum: b21f6bdd37d2942c3967ee77569bc74fadd1b922f688daf5ef85057789a2c3a7f4afc473aa2f3a93ec950dabb6ef365f8bd9cf51e4e062a1ee1e59b989f8f9b4 - languageName: node - linkType: hard - "@apidevtools/openapi-schemas@npm:^2.1.0": version: 2.1.0 resolution: "@apidevtools/openapi-schemas@npm:2.1.0" @@ -77,13 +64,11 @@ __metadata: linkType: hard "@apollo/explorer@npm:^1.1.1": - version: 1.2.0 - resolution: "@apollo/explorer@npm:1.2.0" + version: 1.1.1 + resolution: "@apollo/explorer@npm:1.1.1" dependencies: - "@types/whatwg-mimetype": ^3.0.0 graphql-ws: ^5.9.0 subscriptions-transport-ws: ^0.11.0 - whatwg-mimetype: ^3.0.0 peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -95,7 +80,31 @@ __metadata: optional: true use-deep-compare-effect: optional: true - checksum: 67cf0b5e8a23abb71ad1e68266529b8e8e1ce66652208c9942c554f21148364fd49afa5e619ecfddf611dd19067aa81ab8b2e828944122dfdc81e79a27ccf37c + checksum: f9a22c76c557a50c5a1779dc593dd3de970073558f209808faa8d6678a1469a733b564baeb741c36345d81a782230791443ebc4f2de317d90a10893ef1a18882 + languageName: node + linkType: hard + +"@apollo/protobufjs@npm:1.2.2": + version: 1.2.2 + resolution: "@apollo/protobufjs@npm:1.2.2" + dependencies: + "@protobufjs/aspromise": ^1.1.2 + "@protobufjs/base64": ^1.1.2 + "@protobufjs/codegen": ^2.0.4 + "@protobufjs/eventemitter": ^1.1.0 + "@protobufjs/fetch": ^1.1.0 + "@protobufjs/float": ^1.0.2 + "@protobufjs/inquire": ^1.1.0 + "@protobufjs/path": ^1.1.2 + "@protobufjs/pool": ^1.1.0 + "@protobufjs/utf8": ^1.1.0 + "@types/long": ^4.0.0 + "@types/node": ^10.1.0 + long: ^4.0.0 + bin: + apollo-pbjs: bin/pbjs + apollo-pbts: bin/pbts + checksum: 3f3ec1f428cbcc53760daa6f1076c9043a5aa270b2c9a2ca9f97610eabd3ee1aea08dd36fac658bab83eb6607bc62340bbc6c13ba6bba3c6776df71d68b55929 languageName: node linkType: hard @@ -204,11 +213,11 @@ __metadata: linkType: hard "@apollographql/apollo-tools@npm:^0.5.3": - version: 0.5.4 - resolution: "@apollographql/apollo-tools@npm:0.5.4" + version: 0.5.3 + resolution: "@apollographql/apollo-tools@npm:0.5.3" peerDependencies: graphql: ^14.2.1 || ^15.0.0 || ^16.0.0 - checksum: 673eaaf371504939b58c2717334e237639d3c277ec9b1b9cc7a53a1ad24ded456a6e49bbf2ecf26a64f4b92b04c12cd48f6e22066c6041ae30f2ba4720fb01b6 + checksum: 652f16f8ae4afb65a2cb62a47e46882f49368f8f2c115f421773c3f8aa47b466ab9a6758fc18138495bd010baea5fda05d3c313edd11c4f4b3e8f8783b54d5a2 languageName: node linkType: hard @@ -276,11 +285,11 @@ __metadata: linkType: hard "@asyncapi/parser@npm:^1.15.0": - version: 1.16.0 - resolution: "@asyncapi/parser@npm:1.16.0" + version: 1.15.0 + resolution: "@asyncapi/parser@npm:1.15.0" dependencies: "@apidevtools/json-schema-ref-parser": ^9.0.6 - "@asyncapi/specs": ^3.0.0 + "@asyncapi/specs": ^2.14.0 "@fmvilas/pseudo-yaml-ast": ^0.3.1 ajv: ^6.10.1 js-yaml: ^3.13.1 @@ -288,7 +297,7 @@ __metadata: lodash.clonedeep: ^4.5.0 node-fetch: ^2.6.0 tiny-merge-patch: ^0.1.2 - checksum: 5a832309c61382496482cdd26a1c85ee8e8f2ac85fd85c1275f2afc0410cdba47ee9ff3057591867a3709380a4d1fc67588841ebd77476b1e452b6f51efe82f6 + checksum: e9435265b4671f6a4c2451e054751ea637dd466b1f6b6848622781fbf6fa9fc93c292ed8791bf38816f63cd9c352f09727ab2d34f76d62f8f21c084b0125445b languageName: node linkType: hard @@ -312,19 +321,19 @@ __metadata: languageName: node linkType: hard -"@asyncapi/specs@npm:^3.0.0": - version: 3.1.0 - resolution: "@asyncapi/specs@npm:3.1.0" - checksum: c2e9f4641e28dd1f7867b49e7102b1b719961aa3954122232fa402a926eaf0bf55e89a733b91dc8b055045a39b230a143df4776b7a20ab387f8074f59f976845 +"@asyncapi/specs@npm:^2.14.0": + version: 2.14.0 + resolution: "@asyncapi/specs@npm:2.14.0" + checksum: 066c23c493df54c44c319433bdcf8482a3acd584e32c0073e6a9f5b167d61bde23a252621be2b28bbaf1466636f6cafaab570795de403f0c671358784d4b12ed languageName: node linkType: hard "@azure/abort-controller@npm:^1.0.0": - version: 1.1.0 - resolution: "@azure/abort-controller@npm:1.1.0" + version: 1.0.2 + resolution: "@azure/abort-controller@npm:1.0.2" dependencies: - tslib: ^2.2.0 - checksum: 0f45e504d4aea799486867179afe7589255f6c111951279958e9d0aa5faebb2c96b8f88e3e3c958ce07b02bcba0b0cddb1bbec94705f573a48ecdb93eec1a92a + tslib: ^2.0.0 + checksum: 2af40548b521fcd8c9c3a9b04f25ab00fecd873f659cfb3bd0b38a507643a2c7f32c367e4ea8a0ffa6ef3ab084e13285c9792ad9133a1ac03d60e7ea70ea381c languageName: node linkType: hard @@ -340,7 +349,14 @@ __metadata: languageName: node linkType: hard -"@azure/core-auth@npm:^1.1.4, @azure/core-auth@npm:^1.3.0, @azure/core-auth@npm:^1.4.0": +"@azure/core-asynciterator-polyfill@npm:^1.0.0": + version: 1.0.0 + resolution: "@azure/core-asynciterator-polyfill@npm:1.0.0" + checksum: b6d3ab3f0ffc0a9f426a1d2cc90b81778730b14d81af7dcab9760c9e241f7c0f6843d45fad572dcd1379232b3fb2cacd76d110a0d54a999ceb1bf0fd9ed39e99 + languageName: node + linkType: hard + +"@azure/core-auth@npm:^1.1.4": version: 1.4.0 resolution: "@azure/core-auth@npm:1.4.0" dependencies: @@ -350,29 +366,39 @@ __metadata: languageName: node linkType: hard -"@azure/core-client@npm:^1.4.0": - version: 1.6.1 - resolution: "@azure/core-client@npm:1.6.1" +"@azure/core-auth@npm:^1.3.0": + version: 1.3.2 + resolution: "@azure/core-auth@npm:1.3.2" dependencies: "@azure/abort-controller": ^1.0.0 - "@azure/core-auth": ^1.4.0 - "@azure/core-rest-pipeline": ^1.9.1 - "@azure/core-tracing": ^1.0.0 - "@azure/core-util": ^1.0.0 + tslib: ^2.2.0 + checksum: 8b27de6f8a82a63643524757ef774b1637b0d5c7769b387c73bebeb918717e7193ad1d2413638fb02b28de8199f261c1a902e3d04f75d1ef684af33529d9e98d + languageName: node + linkType: hard + +"@azure/core-client@npm:^1.4.0": + version: 1.5.0 + resolution: "@azure/core-client@npm:1.5.0" + dependencies: + "@azure/abort-controller": ^1.0.0 + "@azure/core-asynciterator-polyfill": ^1.0.0 + "@azure/core-auth": ^1.3.0 + "@azure/core-rest-pipeline": ^1.5.0 + "@azure/core-tracing": 1.0.0-preview.13 "@azure/logger": ^1.0.0 tslib: ^2.2.0 - checksum: 400890a9b5f0c8801ff92005c3cba7bb5124634e321735406731bef33688a79f23d28b49fccdfab90814dade41a13f3d3cb99f80151a2bff17628416e811afb6 + checksum: dc51cdeae0788a14c57fed1b420e9d86d9b6cd29a1b7a3cecec5d8fad7664e4857415568cf4dd363fd3a845f0f4ee39904390d4f2e927206a8d50f87d66089a5 languageName: node linkType: hard "@azure/core-http@npm:^2.0.0": - version: 2.2.7 - resolution: "@azure/core-http@npm:2.2.7" + version: 2.2.4 + resolution: "@azure/core-http@npm:2.2.4" dependencies: "@azure/abort-controller": ^1.0.0 + "@azure/core-asynciterator-polyfill": ^1.0.0 "@azure/core-auth": ^1.3.0 "@azure/core-tracing": 1.0.0-preview.13 - "@azure/core-util": ^1.1.0 "@azure/logger": ^1.0.0 "@types/node-fetch": ^2.5.0 "@types/tunnel": ^0.0.3 @@ -384,45 +410,45 @@ __metadata: tunnel: ^0.0.6 uuid: ^8.3.0 xml2js: ^0.4.19 - checksum: d9097c26adb9c452724855ad6c92dd0f043b9ce606621f70351a627014b915124f26e34d79de7b1a5eb4ed921cc4fdbaf6ea0cdecbe2e4fb0a60b301f5339ea4 + checksum: abda8c34c6d54f61b77080b1d4c01b3828cf9a344eb100346ebcc5ef9903d8f57651fbc73c0230afad5fe497c5c6da576a77cf43827f87417cecac7d7e612967 languageName: node linkType: hard "@azure/core-lro@npm:^2.2.0": - version: 2.3.1 - resolution: "@azure/core-lro@npm:2.3.1" + version: 2.2.4 + resolution: "@azure/core-lro@npm:2.2.4" dependencies: "@azure/abort-controller": ^1.0.0 + "@azure/core-tracing": 1.0.0-preview.13 "@azure/logger": ^1.0.0 tslib: ^2.2.0 - checksum: 9b0efeff46f85a4bfe1f1ec20c7df81256464879f6b9cc974e57e7e9be9b5209640eb5090b296f3821a7b3e0441fbf1caf7c215426d7f788261c61c414cdd548 + checksum: f3db331409f95fc71206acd9f64efbbdf43a83d86c2012bdd19e577a603225b3a7e74e827e5c6aad1cf18024bdd8110c4cf341f7386fc83c5cb86ab72f5ad9ca languageName: node linkType: hard "@azure/core-paging@npm:^1.1.1": - version: 1.3.0 - resolution: "@azure/core-paging@npm:1.3.0" + version: 1.1.3 + resolution: "@azure/core-paging@npm:1.1.3" dependencies: - tslib: ^2.2.0 - checksum: 3fbf3d6474e2346f7c3ea8344a41bf41e053789efbbd29df78365e9c9ca66e143da3e5407d8c9dd5ddc82a65680185cd6f0ec851c48635776d18a6a605a98e78 + "@azure/core-asynciterator-polyfill": ^1.0.0 + checksum: 4864a6daaf0b30dbc59b0e9974d89a578f938ab2a1e1dce301efc89ff51d234fffbd3625b6caef7e3a02f04b2607abad587eb9f5bd2f84c9bdef68257c0ef63e languageName: node linkType: hard -"@azure/core-rest-pipeline@npm:^1.1.0, @azure/core-rest-pipeline@npm:^1.9.1": - version: 1.9.2 - resolution: "@azure/core-rest-pipeline@npm:1.9.2" +"@azure/core-rest-pipeline@npm:^1.1.0, @azure/core-rest-pipeline@npm:^1.5.0": + version: 1.5.0 + resolution: "@azure/core-rest-pipeline@npm:1.5.0" dependencies: "@azure/abort-controller": ^1.0.0 - "@azure/core-auth": ^1.4.0 - "@azure/core-tracing": ^1.0.1 - "@azure/core-util": ^1.0.0 + "@azure/core-auth": ^1.3.0 + "@azure/core-tracing": 1.0.0-preview.13 "@azure/logger": ^1.0.0 form-data: ^4.0.0 - http-proxy-agent: ^5.0.0 + http-proxy-agent: ^4.0.1 https-proxy-agent: ^5.0.0 tslib: ^2.2.0 uuid: ^8.3.0 - checksum: cdfdaf8bdb0778f40ecfeb8b5da0b4f8643d641b75bb5869485afd38f7c3127ab088ac2fe2980df03d28fb6715928e04560343ee6416246aebe75443c4dd2906 + checksum: 1503305db569f4d66353d7a93630c9f87995620312f9f05c262102e40c0f929e134aa221b2bf8f8b49f259fb0119c84a07a6a5ef2ead7f37d213b1c3f164f7fa languageName: node linkType: hard @@ -436,7 +462,7 @@ __metadata: languageName: node linkType: hard -"@azure/core-tracing@npm:^1.0.0, @azure/core-tracing@npm:^1.0.1": +"@azure/core-tracing@npm:^1.0.0": version: 1.0.1 resolution: "@azure/core-tracing@npm:1.0.1" dependencies: @@ -445,12 +471,12 @@ __metadata: languageName: node linkType: hard -"@azure/core-util@npm:^1.0.0, @azure/core-util@npm:^1.1.0": - version: 1.1.0 - resolution: "@azure/core-util@npm:1.1.0" +"@azure/core-util@npm:^1.0.0": + version: 1.0.0 + resolution: "@azure/core-util@npm:1.0.0" dependencies: tslib: ^2.2.0 - checksum: b5aa12c1709f3a7647917e9bea2b82806973677ea509de484fd1a97631a8a7aaab3864dc36dab0f661b49c31046ca87178a57ab4a38a8bccaab167eb6819fc1f + checksum: a0a9cce9452f78babb224fa2ea5566811bd946c55e5c867ca75e6ecd7fcf796b2ec2aa7424e141f03d8e14141e80f048897d0d3c227a7ff0bbaa9ba3d2fc14c9 languageName: node linkType: hard @@ -479,11 +505,11 @@ __metadata: linkType: hard "@azure/logger@npm:^1.0.0": - version: 1.0.3 - resolution: "@azure/logger@npm:1.0.3" + version: 1.0.1 + resolution: "@azure/logger@npm:1.0.1" dependencies: - tslib: ^2.2.0 - checksum: f3443c70c678a7449a5f3be09488a0a15711c506c9da6a81fa9e43178128ddf5db3abc02c99359d188e4ef47d703c5e5f206df71b0e01884245de3220ab1205b + tslib: ^2.0.0 + checksum: a9312a3a2c19cb23a48a08adfc37dc618755f00428c4bac549bcf996f5bb19a1e220172f44ca33d126b7001192261ce2c92d665748e2cb3ea16798a63a5c8982 languageName: node linkType: hard @@ -516,29 +542,29 @@ __metadata: linkType: hard "@azure/msal-browser@npm:^2.26.0": - version: 2.28.3 - resolution: "@azure/msal-browser@npm:2.28.3" + version: 2.27.0 + resolution: "@azure/msal-browser@npm:2.27.0" dependencies: - "@azure/msal-common": ^7.4.1 - checksum: 13e5367a94eedb19d5415b44a203e775f16bca0646180652ba3d0baef88a68c51af4ca72294defb3c02aea74685c70fbd0dfc747a3385e9d611c00839c046146 + "@azure/msal-common": ^7.1.0 + checksum: 6cafb4d41a92f1bbb82e7128f64ccd6538ec116a2521f412108d94c4173601d31ea62febb7b22206dcae691e6a01cf7f9ce92793420599437b50a24c7e6ab851 languageName: node linkType: hard -"@azure/msal-common@npm:^7.0.0, @azure/msal-common@npm:^7.4.1": - version: 7.4.1 - resolution: "@azure/msal-common@npm:7.4.1" - checksum: a4e21bf010ceaee6b580bd8e00b81386830f1b6d3e9bbd5498f0ede83765b82092958370ccbce087d4229c4e6c7b27f464d81fe8a469c0c705e8714e0eeff169 +"@azure/msal-common@npm:^7.0.0, @azure/msal-common@npm:^7.1.0": + version: 7.1.0 + resolution: "@azure/msal-common@npm:7.1.0" + checksum: 761a8b9363c7b620d831aba7d7e7a66e341685e306034b027b57dc31dae11abdf86c3187c08fc8008448c845ffdcbbc42c767c75355625cf87aba25ba7e2832e languageName: node linkType: hard "@azure/msal-node@npm:^1.10.0": - version: 1.14.0 - resolution: "@azure/msal-node@npm:1.14.0" + version: 1.11.0 + resolution: "@azure/msal-node@npm:1.11.0" dependencies: - "@azure/msal-common": ^7.4.1 + "@azure/msal-common": ^7.1.0 jsonwebtoken: ^8.5.1 uuid: ^8.3.0 - checksum: 9ea3f5ceff99dab3f25919c7d35fab8c300493bc37d6c67033eaed7befa583eb04fd5cda7d7a40457c78721081a50b80966da73e8694142ca69a28660eaa03f6 + checksum: b7fff0e756e9f3ba351ddbfd097a7885bc14e735f80d504f2e309c251a333c6a2f8755b0d462e5aee386439530d659c2d0d71c1345b7d3f85e87cc5b4f21299e languageName: node linkType: hard @@ -567,7 +593,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.16.7, @babel/code-frame@npm:^7.18.6, @babel/code-frame@npm:^7.8.3": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.18.6": version: 7.18.6 resolution: "@babel/code-frame@npm:7.18.6" dependencies: @@ -576,48 +602,148 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.18.8, @babel/compat-data@npm:^7.19.1": - version: 7.19.1 - resolution: "@babel/compat-data@npm:7.19.1" - checksum: f985887ea08a140e4af87a94d3fb17af0345491eb97f5a85b1840255c2e2a97429f32a8fd12a7aae9218af5f1024f1eb12a5cd280d2d69b2337583c17ea506ba +"@babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.16.7, @babel/code-frame@npm:^7.8.3": + version: 7.16.7 + resolution: "@babel/code-frame@npm:7.16.7" + dependencies: + "@babel/highlight": ^7.16.7 + checksum: db2f7faa31bc2c9cf63197b481b30ea57147a5fc1a6fab60e5d6c02cdfbf6de8e17b5121f99917b3dabb5eeb572da078312e70697415940383efc140d4e0808b languageName: node linkType: hard -"@babel/core@npm:^7.1.0, @babel/core@npm:^7.12.3, @babel/core@npm:^7.13.16, @babel/core@npm:^7.14.0, @babel/core@npm:^7.18.5, @babel/core@npm:^7.7.2, @babel/core@npm:^7.8.0": - version: 7.19.1 - resolution: "@babel/core@npm:7.19.1" +"@babel/compat-data@npm:^7.13.11, @babel/compat-data@npm:^7.16.4": + version: 7.16.8 + resolution: "@babel/compat-data@npm:7.16.8" + checksum: 10da2dac5ea9589c251412b00920889910e476c1ab24cd7095577635bc3a27c785151c89db4e26285fd39f509510ec29ab9d7e721f4fc16e4aec221cacde784b + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.17.7": + version: 7.17.7 + resolution: "@babel/compat-data@npm:7.17.7" + checksum: bf13476676884ce9afc199747ff82f3bcd6d42a9cfb01ce91bdb762b83ea11ec619b6ec532d1a80469ab14f191f33b5d4b9f8796fa8be3bc728d42b0c5e737e3 + languageName: node + linkType: hard + +"@babel/compat-data@npm:^7.18.8": + version: 7.18.8 + resolution: "@babel/compat-data@npm:7.18.8" + checksum: 3096aafad74936477ebdd039bcf342fba84eb3100e608f3360850fb63e1efa1c66037c4824f814d62f439ab47d25164439343a6e92e9b4357024fdf571505eb9 + languageName: node + linkType: hard + +"@babel/core@npm:^7.1.0, @babel/core@npm:^7.13.16, @babel/core@npm:^7.14.0": + version: 7.16.12 + resolution: "@babel/core@npm:7.16.12" + dependencies: + "@babel/code-frame": ^7.16.7 + "@babel/generator": ^7.16.8 + "@babel/helper-compilation-targets": ^7.16.7 + "@babel/helper-module-transforms": ^7.16.7 + "@babel/helpers": ^7.16.7 + "@babel/parser": ^7.16.12 + "@babel/template": ^7.16.7 + "@babel/traverse": ^7.16.10 + "@babel/types": ^7.16.8 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.1.2 + semver: ^6.3.0 + source-map: ^0.5.0 + checksum: 29b56f3cb7c329fc038a2efaccf64ac3025835676b3d90f57f2265b6acd477a970114d09021b38d019ac8f20b2bb1596a9e79ce1f820d6b8cf0e4a802891817c + languageName: node + linkType: hard + +"@babel/core@npm:^7.12.3, @babel/core@npm:^7.7.2, @babel/core@npm:^7.8.0": + version: 7.17.8 + resolution: "@babel/core@npm:7.17.8" + dependencies: + "@ampproject/remapping": ^2.1.0 + "@babel/code-frame": ^7.16.7 + "@babel/generator": ^7.17.7 + "@babel/helper-compilation-targets": ^7.17.7 + "@babel/helper-module-transforms": ^7.17.7 + "@babel/helpers": ^7.17.8 + "@babel/parser": ^7.17.8 + "@babel/template": ^7.16.7 + "@babel/traverse": ^7.17.3 + "@babel/types": ^7.17.0 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.1.2 + semver: ^6.3.0 + checksum: 0e686b1be444d25494424065238931f2b3df908bf072b72bab973acfd6d27a481fc280c9cd8a3c6fe2c46beee50e0d2307468d8b15b64dc4036f025e75f6609d + languageName: node + linkType: hard + +"@babel/core@npm:^7.18.5": + version: 7.18.9 + resolution: "@babel/core@npm:7.18.9" dependencies: "@ampproject/remapping": ^2.1.0 "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.19.0 - "@babel/helper-compilation-targets": ^7.19.1 - "@babel/helper-module-transforms": ^7.19.0 - "@babel/helpers": ^7.19.0 - "@babel/parser": ^7.19.1 - "@babel/template": ^7.18.10 - "@babel/traverse": ^7.19.1 - "@babel/types": ^7.19.0 + "@babel/generator": ^7.18.9 + "@babel/helper-compilation-targets": ^7.18.9 + "@babel/helper-module-transforms": ^7.18.9 + "@babel/helpers": ^7.18.9 + "@babel/parser": ^7.18.9 + "@babel/template": ^7.18.6 + "@babel/traverse": ^7.18.9 + "@babel/types": ^7.18.9 convert-source-map: ^1.7.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 json5: ^2.2.1 semver: ^6.3.0 - checksum: 941c8c119b80bdba5fafc80bbaa424d51146b6d3c30b8fae35879358dd37c11d3d0926bc7e970a0861229656eedaa8c884d4a3a25cc904086eb73b827a2f1168 + checksum: 64b9088b03fdf659b334864ef93bed85d60c17b27fcbd72970f8eb9e0d3266ffa5a1926960f648f2db36b0bafec615f947ea5117d200599a0661b9f0a9cdf323 languageName: node linkType: hard -"@babel/generator@npm:^7.14.0, @babel/generator@npm:^7.19.0, @babel/generator@npm:^7.7.2": - version: 7.19.0 - resolution: "@babel/generator@npm:7.19.0" +"@babel/generator@npm:^7.14.0, @babel/generator@npm:^7.16.8, @babel/generator@npm:^7.7.2": + version: 7.16.8 + resolution: "@babel/generator@npm:7.16.8" dependencies: - "@babel/types": ^7.19.0 + "@babel/types": ^7.16.8 + jsesc: ^2.5.1 + source-map: ^0.5.0 + checksum: 83af38b34735605c9d5f774c87a46c2cffaf666b28e9eeba883b2d7076412257e5c2264c26d9740ce44da6955fdaf857659391db02c012714a2a6dc19e403105 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.17.3, @babel/generator@npm:^7.17.7": + version: 7.17.7 + resolution: "@babel/generator@npm:7.17.7" + dependencies: + "@babel/types": ^7.17.0 + jsesc: ^2.5.1 + source-map: ^0.5.0 + checksum: e7344b9b4559115f2754ecc2ae9508412ea6a8f617544cd3d3f17cabc727bd30630765f96c8a4ebc8901ded1492a3a6c23d695a4f1e8f3042f860b30c891985c + languageName: node + linkType: hard + +"@babel/generator@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/generator@npm:7.18.9" + dependencies: + "@babel/types": ^7.18.9 "@jridgewell/gen-mapping": ^0.3.2 jsesc: ^2.5.1 - checksum: aa3d5785cf8f8e81672dcc61aef351188efeadb20d9f66d79113d82cbcf3bbbdeb829989fa14582108572ddbc4e4027bdceb06ccaf5ec40fa93c2dda8fbcd4aa + checksum: 1c271e0c6f33e59f7845d88a1b0b9b0dce88164e80dec9274a716efa54c260e405e9462b160843e73f45382bf5b24d8e160e0121207e480c29b30e2ed0eb16d4 languageName: node linkType: hard -"@babel/helper-annotate-as-pure@npm:^7.16.0, @babel/helper-annotate-as-pure@npm:^7.18.6": +"@babel/helper-annotate-as-pure@npm:^7.16.0, @babel/helper-annotate-as-pure@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-annotate-as-pure@npm:7.16.7" + dependencies: + "@babel/types": ^7.16.7 + checksum: d235be963fed5d48a8a4cfabc41c3f03fad6a947810dbcab9cebed7f819811457e10d99b4b2e942ad71baa7ee8e3cd3f5f38a4e4685639ddfddb7528d9a07179 + languageName: node + linkType: hard + +"@babel/helper-annotate-as-pure@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" dependencies: @@ -636,66 +762,134 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.19.0, @babel/helper-compilation-targets@npm:^7.19.1": - version: 7.19.1 - resolution: "@babel/helper-compilation-targets@npm:7.19.1" +"@babel/helper-compilation-targets@npm:^7.13.0, @babel/helper-compilation-targets@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-compilation-targets@npm:7.16.7" dependencies: - "@babel/compat-data": ^7.19.1 - "@babel/helper-validator-option": ^7.18.6 - browserslist: ^4.21.3 + "@babel/compat-data": ^7.16.4 + "@babel/helper-validator-option": ^7.16.7 + browserslist: ^4.17.5 semver: ^6.3.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: c2d3039265e498b341a6b597f855f2fcef02659050fefedf36ad4e6815e6aafe1011a761214cc80d98260ed07ab15a8cbe959a0458e97bec5f05a450e1b1741b + checksum: 7238aaee78c011a42fb5ca92e5eff098752f7b314c2111d7bb9cdd58792fcab1b9c819b59f6a0851dc210dc09dc06b30d130a23982753e70eb3111bc65204842 languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/helper-create-class-features-plugin@npm:7.19.0" +"@babel/helper-compilation-targets@npm:^7.17.7": + version: 7.17.7 + resolution: "@babel/helper-compilation-targets@npm:7.17.7" + dependencies: + "@babel/compat-data": ^7.17.7 + "@babel/helper-validator-option": ^7.16.7 + browserslist: ^4.17.5 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 24bf851539d5ec8e73779304b5d1ad5b0be09a74459ecc7d9baee9a0fa38ad016e9eaf4b5704504ae8da32f91ce0e31857bbbd9686854caeffd38f58226d3760 + languageName: node + linkType: hard + +"@babel/helper-compilation-targets@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-compilation-targets@npm:7.18.9" + dependencies: + "@babel/compat-data": ^7.18.8 + "@babel/helper-validator-option": ^7.18.6 + browserslist: ^4.20.2 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 2a9d71e124e098a9f45de4527ddd1982349d231827d341e00da9dfb967e260ecc7662c8b62abee4a010fb34d5f07a8d2155c974e0bc1928144cee5644910621d + languageName: node + linkType: hard + +"@babel/helper-create-class-features-plugin@npm:^7.16.7": + version: 7.16.10 + resolution: "@babel/helper-create-class-features-plugin@npm:7.16.10" + dependencies: + "@babel/helper-annotate-as-pure": ^7.16.7 + "@babel/helper-environment-visitor": ^7.16.7 + "@babel/helper-function-name": ^7.16.7 + "@babel/helper-member-expression-to-functions": ^7.16.7 + "@babel/helper-optimise-call-expression": ^7.16.7 + "@babel/helper-replace-supers": ^7.16.7 + "@babel/helper-split-export-declaration": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 2ab266aac7f94403311f63a17d32abb718ff040339bcae19880091de3fdb4e8d7196cb4e680f01a92924eb1a00a143364456e452c511c0b7b6e0b1a4b0e696da + languageName: node + linkType: hard + +"@babel/helper-create-class-features-plugin@npm:^7.18.6": + version: 7.18.9 + resolution: "@babel/helper-create-class-features-plugin@npm:7.18.9" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.19.0 + "@babel/helper-function-name": ^7.18.9 "@babel/helper-member-expression-to-functions": ^7.18.9 "@babel/helper-optimise-call-expression": ^7.18.6 "@babel/helper-replace-supers": ^7.18.9 "@babel/helper-split-export-declaration": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0 - checksum: f0c6fb77b6f113d70f308e7093f60dd465b697818badf5df0519d8dd12b6bfb1f4ad300b923207ce9f9c1c940ef58bff12ac4270c0863eadf9e303b7dd6d01b6 + checksum: 020dba79b92ee9a98520dad81dddb47d75b34b7b4392672cbefc59db6f5e89a96c5eb95bb1cc46b2fddf913ef63dfe6d17168f56b059af5c6965bb37b6ce1d82 languageName: node linkType: hard -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.19.0" +"@babel/helper-create-regexp-features-plugin@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.16.7" + dependencies: + "@babel/helper-annotate-as-pure": ^7.16.7 + regexpu-core: ^4.7.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: f6015e0b81deddcbf09fde6c39d3acd55aa3ad45cbf04dae5e2ce2432cd5a63c4a0fa67eaeaa13c6cc526e7618234b9d252c924a5c99a01e6ce8ae882d485f38 + languageName: node + linkType: hard + +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.18.6" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 regexpu-core: ^5.1.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 811cc90afe9fc25a74ed37fc0c1361a4a91b0b940235dd3958e3f03b366d40a903b40fc93b51bcb93be774aba573219f8f215664bea1d1301f58797ca6854f3f + checksum: 2d76e660cbfd0bfcb01ca9f177f0e9091c871a6b99f68ece6bcf4ab4a9df073485bdc2d87ecdfbde44b7f3723b26d13085d0f92082adb3ae80d31b246099f10a languageName: node linkType: hard -"@babel/helper-define-polyfill-provider@npm:^0.3.3": - version: 0.3.3 - resolution: "@babel/helper-define-polyfill-provider@npm:0.3.3" +"@babel/helper-define-polyfill-provider@npm:^0.3.1": + version: 0.3.1 + resolution: "@babel/helper-define-polyfill-provider@npm:0.3.1" dependencies: - "@babel/helper-compilation-targets": ^7.17.7 - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-compilation-targets": ^7.13.0 + "@babel/helper-module-imports": ^7.12.13 + "@babel/helper-plugin-utils": ^7.13.0 + "@babel/traverse": ^7.13.0 debug: ^4.1.1 lodash.debounce: ^4.0.8 resolve: ^1.14.2 semver: ^6.1.2 peerDependencies: "@babel/core": ^7.4.0-0 - checksum: 8e3fe75513302e34f6d92bd67b53890e8545e6c5bca8fe757b9979f09d68d7e259f6daea90dc9e01e332c4f8781bda31c5fe551c82a277f9bc0bec007aed497c + checksum: e3e93cb22febfc0449a210cdafb278e5e1a038af2ca2b02f5dee71c7a49e8ba26e469d631ee11a4243885961a62bb2e5b0a4deb3ec1d7918a33c953d05c3e584 languageName: node linkType: hard -"@babel/helper-environment-visitor@npm:^7.18.9": +"@babel/helper-environment-visitor@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-environment-visitor@npm:7.16.7" + dependencies: + "@babel/types": ^7.16.7 + checksum: c03a10105d9ebd1fe632a77356b2e6e2f3c44edba9a93b0dc3591b6a66bd7a2e323dd9502f9ce96fc6401234abff1907aa877b6674f7826b61c953f7c8204bbe + languageName: node + linkType: hard + +"@babel/helper-environment-visitor@npm:^7.18.6, @babel/helper-environment-visitor@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-environment-visitor@npm:7.18.9" checksum: b25101f6162ddca2d12da73942c08ad203d7668e06663df685634a8fde54a98bc015f6f62938e8554457a592a024108d45b8f3e651fd6dcdb877275b73cc4420 @@ -711,13 +905,42 @@ __metadata: languageName: node linkType: hard -"@babel/helper-function-name@npm:^7.18.9, @babel/helper-function-name@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/helper-function-name@npm:7.19.0" +"@babel/helper-function-name@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-function-name@npm:7.16.7" dependencies: - "@babel/template": ^7.18.10 - "@babel/types": ^7.19.0 - checksum: eac1f5db428ba546270c2b8d750c24eb528b8fcfe50c81de2e0bdebf0e20f24bec688d4331533b782e4a907fad435244621ca2193cfcf80a86731299840e0f6e + "@babel/helper-get-function-arity": ^7.16.7 + "@babel/template": ^7.16.7 + "@babel/types": ^7.16.7 + checksum: fc77cbe7b10cfa2a262d7a37dca575c037f20419dfe0c5d9317f589599ca24beb5f5c1057748011159149eaec47fe32338c6c6412376fcded68200df470161e1 + languageName: node + linkType: hard + +"@babel/helper-function-name@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-function-name@npm:7.18.9" + dependencies: + "@babel/template": ^7.18.6 + "@babel/types": ^7.18.9 + checksum: d04c44e0272f887c0c868651be7fc3c5690531bea10936f00d4cca3f6d5db65e76dfb49e8d553c42ae1fe1eba61ccce9f3d93ba2df50a66408c8d4c3cc61cf0c + languageName: node + linkType: hard + +"@babel/helper-get-function-arity@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-get-function-arity@npm:7.16.7" + dependencies: + "@babel/types": ^7.16.7 + checksum: 25d969fb207ff2ad5f57a90d118f6c42d56a0171022e200aaa919ba7dc95ae7f92ec71cdea6c63ef3629a0dc962ab4c78e09ca2b437185ab44539193f796e0c3 + languageName: node + linkType: hard + +"@babel/helper-hoist-variables@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-hoist-variables@npm:7.16.7" + dependencies: + "@babel/types": ^7.16.7 + checksum: 6ae1641f4a751cd9045346e3f61c3d9ec1312fd779ab6d6fecfe2a96e59a481ad5d7e40d2a840894c13b3fd6114345b157f9e3062fc5f1580f284636e722de60 languageName: node linkType: hard @@ -730,6 +953,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-member-expression-to-functions@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-member-expression-to-functions@npm:7.16.7" + dependencies: + "@babel/types": ^7.16.7 + checksum: e275378022278a7e7974a3f65566690f1804ac88c5f4e848725cf936f61cd1e2557e88cfb6cb4fea92ae5a95ad89d78dbccc9a53715d4363f84c9fd109272c18 + languageName: node + linkType: hard + "@babel/helper-member-expression-to-functions@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-member-expression-to-functions@npm:7.18.9" @@ -739,7 +971,16 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.16.0, @babel/helper-module-imports@npm:^7.18.6": +"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.16.0, @babel/helper-module-imports@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-module-imports@npm:7.16.7" + dependencies: + "@babel/types": ^7.16.7 + checksum: ddd2c4a600a2e9a4fee192ab92bf35a627c5461dbab4af31b903d9ba4d6b6e59e0ff3499fde4e2e9a0eebe24906f00b636f8b4d9bd72ff24d50e6618215c3212 + languageName: node + linkType: hard + +"@babel/helper-module-imports@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-module-imports@npm:7.18.6" dependencies: @@ -748,19 +989,60 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.18.6, @babel/helper-module-transforms@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/helper-module-transforms@npm:7.19.0" +"@babel/helper-module-transforms@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-module-transforms@npm:7.16.7" + dependencies: + "@babel/helper-environment-visitor": ^7.16.7 + "@babel/helper-module-imports": ^7.16.7 + "@babel/helper-simple-access": ^7.16.7 + "@babel/helper-split-export-declaration": ^7.16.7 + "@babel/helper-validator-identifier": ^7.16.7 + "@babel/template": ^7.16.7 + "@babel/traverse": ^7.16.7 + "@babel/types": ^7.16.7 + checksum: 6e930ce776c979f299cdbeaf80187f4ab086d75287b96ecc1c6896d392fcb561065f0d6219fc06fa79b4ceb4bbdc1a9847da8099aba9b077d0a9e583500fb673 + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.17.7": + version: 7.17.7 + resolution: "@babel/helper-module-transforms@npm:7.17.7" + dependencies: + "@babel/helper-environment-visitor": ^7.16.7 + "@babel/helper-module-imports": ^7.16.7 + "@babel/helper-simple-access": ^7.17.7 + "@babel/helper-split-export-declaration": ^7.16.7 + "@babel/helper-validator-identifier": ^7.16.7 + "@babel/template": ^7.16.7 + "@babel/traverse": ^7.17.3 + "@babel/types": ^7.17.0 + checksum: 0b8f023aa7ff82dc4864349d54c4557865ad8ba54d78f6d78a86b05ca40f65c2d60acb4a54c5c309e7a4356beb9a89b876e54af4b3c4801ad25f62ec3721f0ae + languageName: node + linkType: hard + +"@babel/helper-module-transforms@npm:^7.18.6, @babel/helper-module-transforms@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-module-transforms@npm:7.18.9" dependencies: "@babel/helper-environment-visitor": ^7.18.9 "@babel/helper-module-imports": ^7.18.6 "@babel/helper-simple-access": ^7.18.6 "@babel/helper-split-export-declaration": ^7.18.6 "@babel/helper-validator-identifier": ^7.18.6 - "@babel/template": ^7.18.10 - "@babel/traverse": ^7.19.0 - "@babel/types": ^7.19.0 - checksum: 4483276c66f56cf3b5b063634092ad9438c2593725de5c143ba277dda82f1501e6d73b311c1b28036f181dbe36eaeff29f24726cde37a599d4e735af294e5359 + "@babel/template": ^7.18.6 + "@babel/traverse": ^7.18.9 + "@babel/types": ^7.18.9 + checksum: af08c60ea239ff3d40eda542fceaab69de17e713f131e80ead08c975ba7a47dd55d439cb48cfb14ae7ec96704a10c989ff5a5240e52a39101cb44a49467ce058 + languageName: node + linkType: hard + +"@babel/helper-optimise-call-expression@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-optimise-call-expression@npm:7.16.7" + dependencies: + "@babel/types": ^7.16.7 + checksum: 925feb877d5a30a71db56e2be498b3abbd513831311c0188850896c4c1ada865eea795dce5251a1539b0f883ef82493f057f84286dd01abccc4736acfafe15ea languageName: node linkType: hard @@ -773,14 +1055,21 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": - version: 7.19.0 - resolution: "@babel/helper-plugin-utils@npm:7.19.0" - checksum: eedc996c633c8c207921c26ec2989eae0976336ecd9b9f1ac526498f52b5d136f7cd03c32b6fdf8d46a426f907c142de28592f383c42e5fba1e904cbffa05345 +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.13.0, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": + version: 7.16.7 + resolution: "@babel/helper-plugin-utils@npm:7.16.7" + checksum: d08dd86554a186c2538547cd537552e4029f704994a9201d41d82015c10ed7f58f9036e8d1527c3760f042409163269d308b0b3706589039c5f1884619c6d4ce languageName: node linkType: hard -"@babel/helper-remap-async-to-generator@npm:^7.18.6, @babel/helper-remap-async-to-generator@npm:^7.18.9": +"@babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-plugin-utils@npm:7.18.9" + checksum: ebae876cd60f1fe238c7210986093845fa5c4cad5feeda843ea4d780bf068256717650376d3af2a5e760f2ed6a35c065ae144f99c47da3e54aa6cba99d8804e0 + languageName: node + linkType: hard + +"@babel/helper-remap-async-to-generator@npm:^7.18.6": version: 7.18.9 resolution: "@babel/helper-remap-async-to-generator@npm:7.18.9" dependencies: @@ -794,16 +1083,47 @@ __metadata: languageName: node linkType: hard +"@babel/helper-replace-supers@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-replace-supers@npm:7.16.7" + dependencies: + "@babel/helper-environment-visitor": ^7.16.7 + "@babel/helper-member-expression-to-functions": ^7.16.7 + "@babel/helper-optimise-call-expression": ^7.16.7 + "@babel/traverse": ^7.16.7 + "@babel/types": ^7.16.7 + checksum: e5c0b6eb3dad8410a6255f93b580dde9b3c1564646c6ef751de59d5b2a65b5caa80cc9e568155f04bbae895ad0f54305c2e833dbd971a4f641f970c90b3d892b + languageName: node + linkType: hard + "@babel/helper-replace-supers@npm:^7.18.6, @babel/helper-replace-supers@npm:^7.18.9": - version: 7.19.1 - resolution: "@babel/helper-replace-supers@npm:7.19.1" + version: 7.18.9 + resolution: "@babel/helper-replace-supers@npm:7.18.9" dependencies: "@babel/helper-environment-visitor": ^7.18.9 "@babel/helper-member-expression-to-functions": ^7.18.9 "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/traverse": ^7.19.1 - "@babel/types": ^7.19.0 - checksum: a0e4bf79ebe7d2bb5947169e47a0b4439c73fb0ec57d446cf3ea81b736721129ec373c3f94d2ebd2716b26dd65f8e6c083dac898170d42905e7ba815a2f52c25 + "@babel/traverse": ^7.18.9 + "@babel/types": ^7.18.9 + checksum: 2de8b29cc4bfa4e241da2de16abd5571709f6eb394206dc16e3a7816976d1691635dd4bc930881e9d798f44b48a5f1849dc7f51a62946f3e8270452be1ec5352 + languageName: node + linkType: hard + +"@babel/helper-simple-access@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-simple-access@npm:7.16.7" + dependencies: + "@babel/types": ^7.16.7 + checksum: 8d22c46c5ec2ead0686c4d5a3d1d12b5190c59be676bfe0d9d89df62b437b51d1a3df2ccfb8a77dded2e585176ebf12986accb6d45a18cff229eef3b10344f4b + languageName: node + linkType: hard + +"@babel/helper-simple-access@npm:^7.17.7": + version: 7.17.7 + resolution: "@babel/helper-simple-access@npm:7.17.7" + dependencies: + "@babel/types": ^7.17.0 + checksum: 58a9bfd054720024f6ff47fbb113c96061dc2bd31a5e5285756bd3c2e83918c6926900e00150d0fb175d899494fe7d69bf2a8b278c32ef6f6bea8d032e6a3831 languageName: node linkType: hard @@ -816,6 +1136,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.16.0": + version: 7.16.0 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.16.0" + dependencies: + "@babel/types": ^7.16.0 + checksum: b9ed2896eb253e6a85f472b0d4098ed80403758ad1a4e34b02b11e8276e3083297526758b1a3e6886e292987266f10622d7dbced3508cc22b296a74903b41cfb + languageName: node + linkType: hard + "@babel/helper-skip-transparent-expression-wrappers@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.18.9" @@ -825,6 +1154,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-split-export-declaration@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-split-export-declaration@npm:7.16.7" + dependencies: + "@babel/types": ^7.16.7 + checksum: e10aaf135465c55114627951b79115f24bc7af72ecbb58d541d66daf1edaee5dde7cae3ec8c3639afaf74526c03ae3ce723444e3b5b3dc77140c456cd84bcaa1 + languageName: node + linkType: hard + "@babel/helper-split-export-declaration@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-split-export-declaration@npm:7.18.6" @@ -841,10 +1179,17 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.18.6": - version: 7.19.1 - resolution: "@babel/helper-validator-identifier@npm:7.19.1" - checksum: 0eca5e86a729162af569b46c6c41a63e18b43dbe09fda1d2a3c8924f7d617116af39cac5e4cd5d431bb760b4dca3c0970e0c444789b1db42bcf1fa41fbad0a3a +"@babel/helper-validator-identifier@npm:^7.16.7, @babel/helper-validator-identifier@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/helper-validator-identifier@npm:7.18.6" + checksum: e295254d616bbe26e48c196a198476ab4d42a73b90478c9842536cf910ead887f5af6b5c4df544d3052a25ccb3614866fa808dc1e3a5a4291acd444e243c0648 + languageName: node + linkType: hard + +"@babel/helper-validator-option@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helper-validator-option@npm:7.16.7" + checksum: c5ccc451911883cc9f12125d47be69434f28094475c1b9d2ada7c3452e6ac98a1ee8ddd364ca9e3f9855fcdee96cdeafa32543ebd9d17fee7a1062c202e80570 languageName: node linkType: hard @@ -856,29 +1201,62 @@ __metadata: linkType: hard "@babel/helper-wrap-function@npm:^7.18.9": - version: 7.19.0 - resolution: "@babel/helper-wrap-function@npm:7.19.0" + version: 7.18.9 + resolution: "@babel/helper-wrap-function@npm:7.18.9" dependencies: - "@babel/helper-function-name": ^7.19.0 - "@babel/template": ^7.18.10 - "@babel/traverse": ^7.19.0 - "@babel/types": ^7.19.0 - checksum: 2453a6b134f12cc779179188c4358a66252c29b634a8195c0cf626e17f9806c3c4c40e159cd8056c2ec82b69b9056a088014fa43d6ccc1aca67da8d9605da8fd + "@babel/helper-function-name": ^7.18.9 + "@babel/template": ^7.18.6 + "@babel/traverse": ^7.18.9 + "@babel/types": ^7.18.9 + checksum: da818e519b48bbaa748a4fa87b0ba681bc627c9eb9557008d5307d42d3f536fe435b775163088dd9639b0120c8ea1ae1021777f48806f9f83397f4df622b88d3 languageName: node linkType: hard -"@babel/helpers@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/helpers@npm:7.19.0" +"@babel/helpers@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/helpers@npm:7.16.7" dependencies: - "@babel/template": ^7.18.10 - "@babel/traverse": ^7.19.0 - "@babel/types": ^7.19.0 - checksum: e50e78e0dbb0435075fa3f85021a6bcae529589800bca0292721afd7f7c874bea54508d6dc57eca16e5b8224f8142c6b0e32e3b0140029dc09865da747da4623 + "@babel/template": ^7.16.7 + "@babel/traverse": ^7.16.7 + "@babel/types": ^7.16.7 + checksum: 75504c76b66a29b91f954fcc0867dfe275a4cfba5b44df6d64405df74ea72f967fccfa63d62c31c423c5502d113290000c581e0e4858a214f0303d7ecf55c29f languageName: node linkType: hard -"@babel/highlight@npm:^7.0.0, @babel/highlight@npm:^7.18.6": +"@babel/helpers@npm:^7.17.8": + version: 7.17.8 + resolution: "@babel/helpers@npm:7.17.8" + dependencies: + "@babel/template": ^7.16.7 + "@babel/traverse": ^7.17.3 + "@babel/types": ^7.17.0 + checksum: 463dad58119fefebf2d0201bfa53ec9607aa00356908895640fc07589747fb3c2e0dfee4019f3e8c9781e57c9aa5dff4c72ec8d1b031c4ed8349f90b6aefe99d + languageName: node + linkType: hard + +"@babel/helpers@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helpers@npm:7.18.9" + dependencies: + "@babel/template": ^7.18.6 + "@babel/traverse": ^7.18.9 + "@babel/types": ^7.18.9 + checksum: d0bd8255d36bfc65dc52ce75f7fea778c70287da2d64981db4c84fbdf9581409ecbd6433deff1c81da3a5acf26d7e4c364b3a4445efacf88f4f48e77c5b34d8d + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.0.0": + version: 7.16.10 + resolution: "@babel/highlight@npm:7.16.10" + dependencies: + "@babel/helper-validator-identifier": ^7.16.7 + chalk: ^2.0.0 + js-tokens: ^4.0.0 + checksum: 1f1bdd752a90844f4efc22166a46303fb651ba0fd75a06daba3ebae2575ab3edc1da9827c279872a3aaf305f50a18473c5fa1966752726a2b253065fd4c0745e + languageName: node + linkType: hard + +"@babel/highlight@npm:^7.16.7, @babel/highlight@npm:^7.18.6": version: 7.18.6 resolution: "@babel/highlight@npm:7.18.6" dependencies: @@ -889,12 +1267,30 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.18.10, @babel/parser@npm:^7.19.1, @babel/parser@npm:^7.9.4": - version: 7.19.1 - resolution: "@babel/parser@npm:7.19.1" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.13.16, @babel/parser@npm:^7.14.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.16.10, @babel/parser@npm:^7.16.12, @babel/parser@npm:^7.16.7, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.17.3, @babel/parser@npm:^7.17.8": + version: 7.17.9 + resolution: "@babel/parser@npm:7.17.9" bin: parser: ./bin/babel-parser.js - checksum: b1e0acb346b2a533c857e1e97ac0886cdcbd76aafef67835a2b23f760c10568eb53ad8a27dd5f862d8ba4e583742e6067f107281ccbd68959d61bc61e4ddaa51 + checksum: ea59c985ebfae7c0299c8ea63ed34903202f51665db8d59c55b4366e20270b74d7367a2c211fdd2db20f25750df89adcc85ab6c8692061c6459a88efb79f43e6 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.18.6, @babel/parser@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/parser@npm:7.18.9" + bin: + parser: ./bin/babel-parser.js + checksum: 81a966b334e3ef397e883c64026265a5ae0ad435a86f52a84f60a5ee1efc0738c1f42c55e0dc5f191cc6a83ba0c61350433eee417bf1dff160ca5f3cfde244c6 + languageName: node + linkType: hard + +"@babel/parser@npm:^7.9.4": + version: 7.18.13 + resolution: "@babel/parser@npm:7.18.13" + bin: + parser: ./bin/babel-parser.js + checksum: 8b41c35607668495d67d9a7c5f61768aaab26acf887efdadc2781aed54046981480ef40aeda0b84d61aed02cf0c4ff4b028d5f83ab85e17e2ddff318f9243b8b languageName: node linkType: hard @@ -922,21 +1318,33 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-async-generator-functions@npm:^7.19.1": - version: 7.19.1 - resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.19.1" +"@babel/plugin-proposal-async-generator-functions@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.18.6" dependencies: - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-plugin-utils": ^7.19.0 - "@babel/helper-remap-async-to-generator": ^7.18.9 + "@babel/helper-environment-visitor": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-remap-async-to-generator": ^7.18.6 "@babel/plugin-syntax-async-generators": ^7.8.4 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f101555b00aee6ee0107c9e40d872ad646bbd3094abdbeda56d17b107df69a0cb49e5d02dcf5f9d8753e25564e798d08429f12d811aaa1b307b6a725c0b8159c + checksum: 3f708808ba6f8a9bd18805b1b22ab90ec0b362d949111a776e0bade5391f143f55479dcc444b2cec25fc89ac21035ee92e9a5ec37c02c610639197a0c2f7dcb0 languageName: node linkType: hard -"@babel/plugin-proposal-class-properties@npm:^7.0.0, @babel/plugin-proposal-class-properties@npm:^7.13.0, @babel/plugin-proposal-class-properties@npm:^7.18.6": +"@babel/plugin-proposal-class-properties@npm:^7.0.0, @babel/plugin-proposal-class-properties@npm:^7.13.0": + version: 7.16.7 + resolution: "@babel/plugin-proposal-class-properties@npm:7.16.7" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.16.7 + "@babel/helper-plugin-utils": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 3977e841e17b45b47be749b9a5b67b9e8b25ff0840f9fdad3f00cbcb35db4f5ff15f074939fe19b01207a29688c432cc2c682351959350834d62920b7881f803 + languageName: node + linkType: hard + +"@babel/plugin-proposal-class-properties@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6" dependencies: @@ -1009,7 +1417,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.13.8, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.18.6": +"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.13.8": + version: 7.16.7 + resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": ^7.16.7 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: bfafc2701697b5c763dbbb65dd97b56979bfb0922e35be27733699a837aeff22316313ddfdd0fb45129efa3f86617219b77110d05338bc4dca4385d8ce83dd19 + languageName: node + linkType: hard + +"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.18.6" dependencies: @@ -1033,7 +1453,22 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0, @babel/plugin-proposal-object-rest-spread@npm:^7.18.9": +"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0": + version: 7.16.7 + resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.16.7" + dependencies: + "@babel/compat-data": ^7.16.4 + "@babel/helper-compilation-targets": ^7.16.7 + "@babel/helper-plugin-utils": ^7.16.7 + "@babel/plugin-syntax-object-rest-spread": ^7.8.3 + "@babel/plugin-transform-parameters": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2d3740e4df6d3f51d57862100c45c000104571aa98b7f798fdfc05ae0c12b9e7cc9b55f4a28612d626e29f3369a1481a0ee8a0241b23508b9d3da00c55f99d41 + languageName: node + linkType: hard + +"@babel/plugin-proposal-object-rest-spread@npm:^7.18.9": version: 7.18.9 resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.18.9" dependencies: @@ -1060,7 +1495,20 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-optional-chaining@npm:^7.13.12, @babel/plugin-proposal-optional-chaining@npm:^7.18.9": +"@babel/plugin-proposal-optional-chaining@npm:^7.13.12": + version: 7.16.7 + resolution: "@babel/plugin-proposal-optional-chaining@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-skip-transparent-expression-wrappers": ^7.16.0 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e4a6c1ac7e6817b92a673ea52ab0b7dc1fb39d29fb0820cd414e10ae2cd132bd186b4238dcca881a29fc38fe9d38ed24fc111ba22ca20086481682d343f4f130 + languageName: node + linkType: hard + +"@babel/plugin-proposal-optional-chaining@npm:^7.18.9": version: 7.18.9 resolution: "@babel/plugin-proposal-optional-chaining@npm:7.18.9" dependencies: @@ -1099,7 +1547,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-unicode-property-regex@npm:^7.18.6, @babel/plugin-proposal-unicode-property-regex@npm:^7.4.4": +"@babel/plugin-proposal-unicode-property-regex@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-proposal-unicode-property-regex@npm:7.18.6" dependencies: @@ -1111,6 +1559,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-unicode-property-regex@npm:^7.4.4": + version: 7.16.7 + resolution: "@babel/plugin-proposal-unicode-property-regex@npm:7.16.7" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.16.7 + "@babel/helper-plugin-utils": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2b8a33713d456183f0b7d011011e7bd932c08cc06216399a7b2015ab39284b511993dc10a89bbb15d1d728e6a2ef42ca08c3202619aa148cbd48052422ea3995 + languageName: node + linkType: hard + "@babel/plugin-syntax-async-generators@npm:^7.8.4": version: 7.8.4 resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" @@ -1177,14 +1637,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-flow@npm:^7.0.0, @babel/plugin-syntax-flow@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-syntax-flow@npm:7.18.6" +"@babel/plugin-syntax-flow@npm:^7.0.0, @babel/plugin-syntax-flow@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-syntax-flow@npm:7.16.7" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.16.7 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: abe82062b3eef14de7d2b3c0e4fecf80a3e796ca497e9df616d12dd250968abf71495ee85a955b43a6c827137203f0c409450cf792732ed0d6907c806580ea71 + checksum: b1ab0bd9b78e4aa5fb48714d6514f3d08d72693807c6044a5be4f301a9bb677b5648fbdae11c8bc93923da6b320a1898560c307933021bdb75ee39e577ed74ee languageName: node linkType: hard @@ -1221,7 +1681,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.0.0, @babel/plugin-syntax-jsx@npm:^7.18.6": +"@babel/plugin-syntax-jsx@npm:^7.0.0, @babel/plugin-syntax-jsx@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-syntax-jsx@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: cd9b0e53c50e8ddb0afaf0f42e0b221a94e4f59aee32a591364266a31195c48cac5fef288d02c1c935686bda982d2e0f1ed61cceb995fc9f6fb09ef5ebecdd2b + languageName: node + linkType: hard + +"@babel/plugin-syntax-jsx@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-syntax-jsx@npm:7.18.6" dependencies: @@ -1320,7 +1791,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.18.6, @babel/plugin-syntax-typescript@npm:^7.7.2": +"@babel/plugin-syntax-typescript@npm:^7.16.7, @babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.16.7 + resolution: "@babel/plugin-syntax-typescript@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 661e636060609ede9a402e22603b01784c21fabb0a637e65f561c8159351fe0130bbc11fdefe31902107885e3332fc34d95eb652ac61d3f61f2d61f5da20609e + languageName: node + linkType: hard + +"@babel/plugin-syntax-typescript@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-syntax-typescript@npm:7.18.6" dependencies: @@ -1331,7 +1813,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.0.0, @babel/plugin-transform-arrow-functions@npm:^7.18.6": +"@babel/plugin-transform-arrow-functions@npm:^7.0.0": + version: 7.16.7 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 2a6aa982c6fc80f4de7ccd973507ce5464fab129987cb6661136a7b9b6a020c2b329b912cbc46a68d39b5a18451ba833dcc8d1ca8d615597fec98624ac2add54 + languageName: node + linkType: hard + +"@babel/plugin-transform-arrow-functions@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-arrow-functions@npm:7.18.6" dependencies: @@ -1355,7 +1848,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoped-functions@npm:^7.0.0, @babel/plugin-transform-block-scoped-functions@npm:^7.18.6": +"@babel/plugin-transform-block-scoped-functions@npm:^7.0.0": + version: 7.16.7 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 591e9f75437bb32ebf9506d28d5c9659c66c0e8e0c19b12924d808d898e68309050aadb783ccd70bb4956555067326ecfa17a402bc77eb3ece3c6863d40b9016 + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoped-functions@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.18.6" dependencies: @@ -1366,7 +1870,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.0.0, @babel/plugin-transform-block-scoping@npm:^7.18.9": +"@babel/plugin-transform-block-scoping@npm:^7.0.0": + version: 7.16.7 + resolution: "@babel/plugin-transform-block-scoping@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: f93b5441af573fc274655f1707aeb4f67a43e926b58f56d89cc35a27877ae0bf198648603cbc19f442579489138f93c3838905895f109aa356996dbc3ed97a68 + languageName: node + linkType: hard + +"@babel/plugin-transform-block-scoping@npm:^7.18.9": version: 7.18.9 resolution: "@babel/plugin-transform-block-scoping@npm:7.18.9" dependencies: @@ -1377,26 +1892,54 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.0.0, @babel/plugin-transform-classes@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/plugin-transform-classes@npm:7.19.0" +"@babel/plugin-transform-classes@npm:^7.0.0": + version: 7.16.7 + resolution: "@babel/plugin-transform-classes@npm:7.16.7" + dependencies: + "@babel/helper-annotate-as-pure": ^7.16.7 + "@babel/helper-environment-visitor": ^7.16.7 + "@babel/helper-function-name": ^7.16.7 + "@babel/helper-optimise-call-expression": ^7.16.7 + "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-replace-supers": ^7.16.7 + "@babel/helper-split-export-declaration": ^7.16.7 + globals: ^11.1.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 791526a1bf3c4659b94d619536e3181d3ad54887d50539066628c6e695789a3bb264dc1fbc8540169d62a222f623df54defb490c1811ae63bad1e3557d6b3bb0 + languageName: node + linkType: hard + +"@babel/plugin-transform-classes@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-classes@npm:7.18.9" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-compilation-targets": ^7.19.0 "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.19.0 + "@babel/helper-function-name": ^7.18.9 "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/helper-plugin-utils": ^7.19.0 + "@babel/helper-plugin-utils": ^7.18.9 "@babel/helper-replace-supers": ^7.18.9 "@babel/helper-split-export-declaration": ^7.18.6 globals: ^11.1.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 5500953031fc3eae73f717c7b59ef406158a4a710d566a0f78a4944240bcf98f817f07cf1d6af0e749e21f0dfee29c36412b75d57b0a753c3ad823b70c596b79 + checksum: d7e953c0cf32af64e75db1277d2556c04635f32691ef462436897840be6f8021d4f85ee96134cb796a12dda549cf53346fedf96b671885f881bc4037c9d120ad languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.0.0, @babel/plugin-transform-computed-properties@npm:^7.18.9": +"@babel/plugin-transform-computed-properties@npm:^7.0.0": + version: 7.16.7 + resolution: "@babel/plugin-transform-computed-properties@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 28b17f7cfe643f45920b76dc040cab40d4e54eccf5074fba2658c484feacda9b4885b3854ffaf26292189783fdecc97211519c61831b6708fcbf739cfbcbf31c + languageName: node + linkType: hard + +"@babel/plugin-transform-computed-properties@npm:^7.18.9": version: 7.18.9 resolution: "@babel/plugin-transform-computed-properties@npm:7.18.9" dependencies: @@ -1407,18 +1950,29 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.0.0, @babel/plugin-transform-destructuring@npm:^7.18.13": - version: 7.18.13 - resolution: "@babel/plugin-transform-destructuring@npm:7.18.13" +"@babel/plugin-transform-destructuring@npm:^7.0.0": + version: 7.16.7 + resolution: "@babel/plugin-transform-destructuring@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: d1c2e15e7be2a7c57ac8ec4df06fbb706c7ecc872ab7bc2193606e6d6a01929b6d5a1bb41540e41180e42a5ce0e70dce22e7896cb6578dd581d554f77780971b + languageName: node + linkType: hard + +"@babel/plugin-transform-destructuring@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-destructuring@npm:7.18.9" dependencies: "@babel/helper-plugin-utils": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 83e44ec93a4cfbf69376db8836d00ec803820081bf0f8b6cea73a9b3cd320b8285768d5b385744af4a27edda4b6502245c52d3ed026ea61356faf57bfe78effb + checksum: 1a9b85dff67fd248fa8a2488ef59df3eb4dd4ca6007ff7db9f780c7873630a13bc16cfb2ad8f4c4ca966e42978410d1e4b306545941fe62769f2683f34973acd languageName: node linkType: hard -"@babel/plugin-transform-dotall-regex@npm:^7.18.6, @babel/plugin-transform-dotall-regex@npm:^7.4.4": +"@babel/plugin-transform-dotall-regex@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-dotall-regex@npm:7.18.6" dependencies: @@ -1430,6 +1984,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-dotall-regex@npm:^7.4.4": + version: 7.16.7 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.16.7" + dependencies: + "@babel/helper-create-regexp-features-plugin": ^7.16.7 + "@babel/helper-plugin-utils": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 554570dddfd5bfd87ab307be520f69a3d4ed2d2db677c165971b400d4c96656d0c165b318e69f1735612dcd12e04c0ee257697dc26800e8a572ca73bc05fa0f4 + languageName: node + linkType: hard + "@babel/plugin-transform-duplicate-keys@npm:^7.18.9": version: 7.18.9 resolution: "@babel/plugin-transform-duplicate-keys@npm:7.18.9" @@ -1453,19 +2019,30 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-flow-strip-types@npm:^7.0.0, @babel/plugin-transform-flow-strip-types@npm:^7.18.6": - version: 7.19.0 - resolution: "@babel/plugin-transform-flow-strip-types@npm:7.19.0" +"@babel/plugin-transform-flow-strip-types@npm:^7.0.0, @babel/plugin-transform-flow-strip-types@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-flow-strip-types@npm:7.16.7" dependencies: - "@babel/helper-plugin-utils": ^7.19.0 - "@babel/plugin-syntax-flow": ^7.18.6 + "@babel/helper-plugin-utils": ^7.16.7 + "@babel/plugin-syntax-flow": ^7.16.7 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c35339bf80c2a2b9abb9e2ce0382e1d9cc3ef7db2af127f4ec3d184bad2aec3269f3fcac5fdcd565439732803acad72eb9e7d5a18e439221526fdc041c9e8e1e + checksum: 4b4801c91d805d95957781e537f88e9f34c7f8a4c262c4d230af2ab7a920889c542860e505149a856d4c16916ffb02df4f3af161733adeedb7671555d1510bba languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.0.0, @babel/plugin-transform-for-of@npm:^7.18.8": +"@babel/plugin-transform-for-of@npm:^7.0.0": + version: 7.16.7 + resolution: "@babel/plugin-transform-for-of@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 35c9264ee4bef814818123d70afe8b2f0a85753a0a9dc7b73f93a71cadc5d7de852f1a3e300a7c69a491705805704611de1e2ccceb5686f7828d6bca2e5a7306 + languageName: node + linkType: hard + +"@babel/plugin-transform-for-of@npm:^7.18.8": version: 7.18.8 resolution: "@babel/plugin-transform-for-of@npm:7.18.8" dependencies: @@ -1476,7 +2053,20 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.0.0, @babel/plugin-transform-function-name@npm:^7.18.9": +"@babel/plugin-transform-function-name@npm:^7.0.0": + version: 7.16.7 + resolution: "@babel/plugin-transform-function-name@npm:7.16.7" + dependencies: + "@babel/helper-compilation-targets": ^7.16.7 + "@babel/helper-function-name": ^7.16.7 + "@babel/helper-plugin-utils": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4d97d0b84461cdd5d5aa2d010cdaf30f1f83a92a0dedd3686cbc7e90dc1249a70246f5bac0c1f3cd3f1dbfb03f7aac437776525a0c90cafd459776ea4fcc6bde + languageName: node + linkType: hard + +"@babel/plugin-transform-function-name@npm:^7.18.9": version: 7.18.9 resolution: "@babel/plugin-transform-function-name@npm:7.18.9" dependencies: @@ -1489,7 +2079,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.0.0, @babel/plugin-transform-literals@npm:^7.18.9": +"@babel/plugin-transform-literals@npm:^7.0.0": + version: 7.16.7 + resolution: "@babel/plugin-transform-literals@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a9565d999fc7a72a391ef843cf66028c38ca858537c7014d9ea8ea587a59e5f952d9754bdcca6ca0446e84653e297d417d4faedccb9e4221af1aa30f25d918e0 + languageName: node + linkType: hard + +"@babel/plugin-transform-literals@npm:^7.18.9": version: 7.18.9 resolution: "@babel/plugin-transform-literals@npm:7.18.9" dependencies: @@ -1500,7 +2101,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.0.0, @babel/plugin-transform-member-expression-literals@npm:^7.18.6": +"@babel/plugin-transform-member-expression-literals@npm:^7.0.0": + version: 7.16.7 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fdf5b22abab2b770e69348ce7f99796c3e0e1e7ce266afdbe995924284704930fa989323bdbda7070db8adb45a72f39eaa1dbebf18b67fc44035ec00c6ae3300 + languageName: node + linkType: hard + +"@babel/plugin-transform-member-expression-literals@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-member-expression-literals@npm:7.18.6" dependencies: @@ -1524,7 +2136,21 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.0.0, @babel/plugin-transform-modules-commonjs@npm:^7.13.8, @babel/plugin-transform-modules-commonjs@npm:^7.18.6": +"@babel/plugin-transform-modules-commonjs@npm:^7.0.0, @babel/plugin-transform-modules-commonjs@npm:^7.13.8": + version: 7.16.8 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.16.8" + dependencies: + "@babel/helper-module-transforms": ^7.16.7 + "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-simple-access": ^7.16.7 + babel-plugin-dynamic-import-node: ^2.3.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: c0ac00f5457e12cac7825b14725b6fc787bef78945181469ff79f07ef0fd7df021cb00fe1d3a9f35fc9bc92ae59e6e3fc9075a70b627dfe10e00d0907892aace + languageName: node + linkType: hard + +"@babel/plugin-transform-modules-commonjs@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-modules-commonjs@npm:7.18.6" dependencies: @@ -1538,18 +2164,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.19.0" +"@babel/plugin-transform-modules-systemjs@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.18.9" dependencies: "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-module-transforms": ^7.19.0 - "@babel/helper-plugin-utils": ^7.19.0 + "@babel/helper-module-transforms": ^7.18.9 + "@babel/helper-plugin-utils": ^7.18.9 "@babel/helper-validator-identifier": ^7.18.6 babel-plugin-dynamic-import-node: ^2.3.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: a0742deee4a076d6fc303d036c1ea2bea9b7d91af390483fe91fc415f9cb43925bb5dd930fdcb8fcdc9d4c7a22774a3cec521c67f1422a9b473debcb85ee57f9 + checksum: 6122d9901ed5dc56d9db843efc9249fe20d769a11989bbbf5a806ed4f086def949185198aa767888481babf70fc52b6b3e297a991e2b02b4f34ffb03d998d1e3 languageName: node linkType: hard @@ -1565,15 +2191,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.19.1": - version: 7.19.1 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.19.1" +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.18.6" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.19.0 - "@babel/helper-plugin-utils": ^7.19.0 + "@babel/helper-create-regexp-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0 - checksum: 8a40f5d04f2140c44fe890a5a3fd72abc2a88445443ac2bd92e1e85d9366d3eb8f1ebb7e2c89d2daeaf213d9b28cb65605502ac9b155936d48045eeda6053494 + checksum: 6ef64aa3dad68df139eeaa7b6e9bb626be8f738ed5ed4db765d516944b1456d513b6bad3bb60fff22babe73de26436fd814a4228705b2d3d2fdb272c31da35e2 languageName: node linkType: hard @@ -1588,7 +2214,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.0.0, @babel/plugin-transform-object-super@npm:^7.18.6": +"@babel/plugin-transform-object-super@npm:^7.0.0": + version: 7.16.7 + resolution: "@babel/plugin-transform-object-super@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-replace-supers": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 46e3c879f4a93e904f2ecf83233d40c48c832bdbd82a67cab1f432db9aa51702e40d9e51e5800613e12299974f90f4ed3869e1273dbca8642984266320c5f341 + languageName: node + linkType: hard + +"@babel/plugin-transform-object-super@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-object-super@npm:7.18.6" dependencies: @@ -1600,7 +2238,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.18.8": +"@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.16.7": + version: 7.16.7 + resolution: "@babel/plugin-transform-parameters@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 4d6904376db82d0b35f0a6cce08f630daf8608d94e903d6c7aff5bd742b251651bd1f88cdf9f16cad98aba5fc7c61da8635199364865fad6367d5ae37cf56cc1 + languageName: node + linkType: hard + +"@babel/plugin-transform-parameters@npm:^7.18.8": version: 7.18.8 resolution: "@babel/plugin-transform-parameters@npm:7.18.8" dependencies: @@ -1611,7 +2260,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.0.0, @babel/plugin-transform-property-literals@npm:^7.18.6": +"@babel/plugin-transform-property-literals@npm:^7.0.0": + version: 7.16.7 + resolution: "@babel/plugin-transform-property-literals@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b5674458991a9b0e8738989d70faa88c7f98ed3df923c119f1225069eed72fe5e0ce947b1adc91e378f5822fbdeb7a672f496fd1c75c4babcc88169e3a7c3229 + languageName: node + linkType: hard + +"@babel/plugin-transform-property-literals@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-property-literals@npm:7.18.6" dependencies: @@ -1623,17 +2283,28 @@ __metadata: linkType: hard "@babel/plugin-transform-react-constant-elements@npm:^7.17.12": - version: 7.18.12 - resolution: "@babel/plugin-transform-react-constant-elements@npm:7.18.12" + version: 7.18.9 + resolution: "@babel/plugin-transform-react-constant-elements@npm:7.18.9" dependencies: "@babel/helper-plugin-utils": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d83fbc65e8eb32b64fc83c64436d85dba44e2c358b906e5eb3709d22b05bdeada2f92af1e85e26fda88bb8d688b06546b9a98fee17c82563ae00f19827ba0c79 + checksum: bbdc4bc38317e62bb729d6d2b48bfac4cca52cb476a1a537a6fe693610852a6f2c3b3f616e1c73f17fb4b0dae551b1c96f898b7867a02ff2fbe3e858a346c767 languageName: node linkType: hard -"@babel/plugin-transform-react-display-name@npm:^7.0.0, @babel/plugin-transform-react-display-name@npm:^7.18.6": +"@babel/plugin-transform-react-display-name@npm:^7.0.0": + version: 7.16.7 + resolution: "@babel/plugin-transform-react-display-name@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 483154413671ab0a25ae37520b7cf5bfab0958c484a3707c6799b1f1436d1e51481bcc03fbfcdbf90bf6b46818d931ae35e515141d8354c3287351b4467376ba + languageName: node + linkType: hard + +"@babel/plugin-transform-react-display-name@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-react-display-name@npm:7.18.6" dependencies: @@ -1655,18 +2326,33 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx@npm:^7.0.0, @babel/plugin-transform-react-jsx@npm:^7.18.6": - version: 7.19.0 - resolution: "@babel/plugin-transform-react-jsx@npm:7.19.0" +"@babel/plugin-transform-react-jsx@npm:^7.0.0": + version: 7.16.7 + resolution: "@babel/plugin-transform-react-jsx@npm:7.16.7" + dependencies: + "@babel/helper-annotate-as-pure": ^7.16.7 + "@babel/helper-module-imports": ^7.16.7 + "@babel/helper-plugin-utils": ^7.16.7 + "@babel/plugin-syntax-jsx": ^7.16.7 + "@babel/types": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 0e82346d7c99b4467946d535a8c626a988e5670f65a15dee8520ce9cf4f0147c99decc1cbb4bd352083eaafd259ee3e4299854cac6304a83666d488edf4e58f6 + languageName: node + linkType: hard + +"@babel/plugin-transform-react-jsx@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-react-jsx@npm:7.18.6" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 "@babel/helper-module-imports": ^7.18.6 - "@babel/helper-plugin-utils": ^7.19.0 + "@babel/helper-plugin-utils": ^7.18.6 "@babel/plugin-syntax-jsx": ^7.18.6 - "@babel/types": ^7.19.0 + "@babel/types": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d7d6f0b8f24b1f6b7cf8062c4e91c59af82489a993e51859bd49c2d62a2d2b77fd40b02a9a1d0e6d874cf4ce56a05fa3564b964587d00c94ebc62593524052ec + checksum: 46129eaf1ab7a7a73e3e8c9d9859b630f5b381c5e19fb1559e2db7b943a7825b6715ad950623fb03fe7bd31ed618ce1d0bd539b13fa030a50c39d5a873a5ba00 languageName: node linkType: hard @@ -1705,7 +2391,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.0.0, @babel/plugin-transform-shorthand-properties@npm:^7.18.6": +"@babel/plugin-transform-shorthand-properties@npm:^7.0.0": + version: 7.16.7 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: ca381ecf8f48696512172deca40af46b1f64e3497186fdc2c9009286d8f06b468c4d61cdc392dc8b0c165298117dda67be9e2ff0e99d7691b0503f1240d4c62b + languageName: node + linkType: hard + +"@babel/plugin-transform-shorthand-properties@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-transform-shorthand-properties@npm:7.18.6" dependencies: @@ -1716,15 +2413,27 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.0.0, @babel/plugin-transform-spread@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/plugin-transform-spread@npm:7.19.0" +"@babel/plugin-transform-spread@npm:^7.0.0": + version: 7.16.7 + resolution: "@babel/plugin-transform-spread@npm:7.16.7" dependencies: - "@babel/helper-plugin-utils": ^7.19.0 + "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-skip-transparent-expression-wrappers": ^7.16.0 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 6e961af1a70586bb72dd85e8296cee857c5dadd73225fccd0fe261c0d98652a82d69c65f3e9dc31ce019a12e9677262678479b96bd2d9140ddf6514618362828 + languageName: node + linkType: hard + +"@babel/plugin-transform-spread@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/plugin-transform-spread@npm:7.18.9" + dependencies: + "@babel/helper-plugin-utils": ^7.18.9 "@babel/helper-skip-transparent-expression-wrappers": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: e73a4deb095999185e70b524d0ff4e35df50fcda58299e700a6149a15bbc1a9b369ef1cef384e15a54b3c3ce316cc0f054dbf249dcd0d1ca59f4281dd4df9718 + checksum: 59489dd6212bd21debdf77746d9fa02dfe36f7062dc08742b8841d04312a26ea37bc0d71c71a6e37c3ab81dce744faa7f23fa94b0915593458f6adc35c087766 languageName: node linkType: hard @@ -1739,7 +2448,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.0.0, @babel/plugin-transform-template-literals@npm:^7.18.9": +"@babel/plugin-transform-template-literals@npm:^7.0.0": + version: 7.16.7 + resolution: "@babel/plugin-transform-template-literals@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: b55a519dd8b957247ebad3cab21918af5adca4f6e6c87819501cfe3d4d4bccda25bc296c7dfc8a30909b4ad905902aeb9d55ad955cb9f5cbc74b42dab32baa18 + languageName: node + linkType: hard + +"@babel/plugin-transform-template-literals@npm:^7.18.9": version: 7.18.9 resolution: "@babel/plugin-transform-template-literals@npm:7.18.9" dependencies: @@ -1761,27 +2481,40 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.18.6": - version: 7.19.1 - resolution: "@babel/plugin-transform-typescript@npm:7.19.1" +"@babel/plugin-transform-typescript@npm:^7.16.7": + version: 7.16.8 + resolution: "@babel/plugin-transform-typescript@npm:7.16.8" dependencies: - "@babel/helper-create-class-features-plugin": ^7.19.0 - "@babel/helper-plugin-utils": ^7.19.0 - "@babel/plugin-syntax-typescript": ^7.18.6 + "@babel/helper-create-class-features-plugin": ^7.16.7 + "@babel/helper-plugin-utils": ^7.16.7 + "@babel/plugin-syntax-typescript": ^7.16.7 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 434752f9cfb3cfe5dc0a3c8118b404bb7340b665c01cf6b817a9d6dafa10ca128fccecf4c507286fb00a92b89bcabeb8256e67c18aef5db9fdc4eb8a71881d70 + checksum: a76d0afcbd550208cf2e7cdedb4f2d3ca3fa287640a4858a5ee0a28270b784d7d20d5a51b5997dc84514e066a5ebef9e0a0f74ed9fffae09e73984786dd08036 languageName: node linkType: hard -"@babel/plugin-transform-unicode-escapes@npm:^7.18.10": - version: 7.18.10 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.18.10" +"@babel/plugin-transform-typescript@npm:^7.18.6": + version: 7.18.8 + resolution: "@babel/plugin-transform-typescript@npm:7.18.8" dependencies: - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-create-class-features-plugin": ^7.18.6 + "@babel/helper-plugin-utils": ^7.18.6 + "@babel/plugin-syntax-typescript": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f5baca55cb3c11bc08ec589f5f522d85c1ab509b4d11492437e45027d64ae0b22f0907bd1381e8d7f2a436384bb1f9ad89d19277314242c5c2671a0f91d0f9cd + checksum: 627211f1658870274fcabf38a71bb08ae219e3ac672423083574fabe2c857f28d39243cb7279adada8468c912a7beebc0622770ed66885a1e33b84ccc8bfd7df + languageName: node + linkType: hard + +"@babel/plugin-transform-unicode-escapes@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.18.6" + dependencies: + "@babel/helper-plugin-utils": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 297a03706723164a777263f76a8d89bccfb1d3fbc5e1075079dfd84372a5416d579da7d44c650abf935a1150a995bfce0e61966447b657f958e51c4ea45b72dc languageName: node linkType: hard @@ -1798,16 +2531,16 @@ __metadata: linkType: hard "@babel/preset-env@npm:^7.18.2": - version: 7.19.1 - resolution: "@babel/preset-env@npm:7.19.1" + version: 7.18.9 + resolution: "@babel/preset-env@npm:7.18.9" dependencies: - "@babel/compat-data": ^7.19.1 - "@babel/helper-compilation-targets": ^7.19.1 - "@babel/helper-plugin-utils": ^7.19.0 + "@babel/compat-data": ^7.18.8 + "@babel/helper-compilation-targets": ^7.18.9 + "@babel/helper-plugin-utils": ^7.18.9 "@babel/helper-validator-option": ^7.18.6 "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.18.6 "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.18.9 - "@babel/plugin-proposal-async-generator-functions": ^7.19.1 + "@babel/plugin-proposal-async-generator-functions": ^7.18.6 "@babel/plugin-proposal-class-properties": ^7.18.6 "@babel/plugin-proposal-class-static-block": ^7.18.6 "@babel/plugin-proposal-dynamic-import": ^7.18.6 @@ -1841,9 +2574,9 @@ __metadata: "@babel/plugin-transform-async-to-generator": ^7.18.6 "@babel/plugin-transform-block-scoped-functions": ^7.18.6 "@babel/plugin-transform-block-scoping": ^7.18.9 - "@babel/plugin-transform-classes": ^7.19.0 + "@babel/plugin-transform-classes": ^7.18.9 "@babel/plugin-transform-computed-properties": ^7.18.9 - "@babel/plugin-transform-destructuring": ^7.18.13 + "@babel/plugin-transform-destructuring": ^7.18.9 "@babel/plugin-transform-dotall-regex": ^7.18.6 "@babel/plugin-transform-duplicate-keys": ^7.18.9 "@babel/plugin-transform-exponentiation-operator": ^7.18.6 @@ -1853,9 +2586,9 @@ __metadata: "@babel/plugin-transform-member-expression-literals": ^7.18.6 "@babel/plugin-transform-modules-amd": ^7.18.6 "@babel/plugin-transform-modules-commonjs": ^7.18.6 - "@babel/plugin-transform-modules-systemjs": ^7.19.0 + "@babel/plugin-transform-modules-systemjs": ^7.18.9 "@babel/plugin-transform-modules-umd": ^7.18.6 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.19.1 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.18.6 "@babel/plugin-transform-new-target": ^7.18.6 "@babel/plugin-transform-object-super": ^7.18.6 "@babel/plugin-transform-parameters": ^7.18.8 @@ -1863,35 +2596,35 @@ __metadata: "@babel/plugin-transform-regenerator": ^7.18.6 "@babel/plugin-transform-reserved-words": ^7.18.6 "@babel/plugin-transform-shorthand-properties": ^7.18.6 - "@babel/plugin-transform-spread": ^7.19.0 + "@babel/plugin-transform-spread": ^7.18.9 "@babel/plugin-transform-sticky-regex": ^7.18.6 "@babel/plugin-transform-template-literals": ^7.18.9 "@babel/plugin-transform-typeof-symbol": ^7.18.9 - "@babel/plugin-transform-unicode-escapes": ^7.18.10 + "@babel/plugin-transform-unicode-escapes": ^7.18.6 "@babel/plugin-transform-unicode-regex": ^7.18.6 "@babel/preset-modules": ^0.1.5 - "@babel/types": ^7.19.0 - babel-plugin-polyfill-corejs2: ^0.3.3 - babel-plugin-polyfill-corejs3: ^0.6.0 - babel-plugin-polyfill-regenerator: ^0.4.1 - core-js-compat: ^3.25.1 + "@babel/types": ^7.18.9 + babel-plugin-polyfill-corejs2: ^0.3.1 + babel-plugin-polyfill-corejs3: ^0.5.2 + babel-plugin-polyfill-regenerator: ^0.3.1 + core-js-compat: ^3.22.1 semver: ^6.3.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 3fcd4f3e768b8b0c9e8f9fb2b23d694d838d3cc936c783aaa9c436b863ae24811059b6ffed80e2ac7d54e7d2c18b0a190f4de05298cf461d27b2817b617ea71f + checksum: 311002b9255d1aa261afe712ab73a93687652437804e2f44e6cc55438f8b199463f53bb2b8e0912b0034f208a42eee664a9e126a6061ca504a792ede97dd027e languageName: node linkType: hard "@babel/preset-flow@npm:^7.13.13": - version: 7.18.6 - resolution: "@babel/preset-flow@npm:7.18.6" + version: 7.16.7 + resolution: "@babel/preset-flow@npm:7.16.7" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/helper-validator-option": ^7.18.6 - "@babel/plugin-transform-flow-strip-types": ^7.18.6 + "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-validator-option": ^7.16.7 + "@babel/plugin-transform-flow-strip-types": ^7.16.7 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 9100d4eab3402e6601e361a5b235e46d90cfd389c12db19e2a071e1082ca2a00c04bd47eb185ce68d8979e7c8f3e548cd5d61b86dcd701135468fb929c3aecb6 + checksum: b73c743a6bdfb51fe907adbc425a82469145ea15f32b43096804e28ba30921c4ac3199f86e11d1cefbce95c3a5404aaf3534152f5a12358c57303c05dfc51b4f languageName: node linkType: hard @@ -1926,7 +2659,20 @@ __metadata: languageName: node linkType: hard -"@babel/preset-typescript@npm:^7.13.0, @babel/preset-typescript@npm:^7.17.12": +"@babel/preset-typescript@npm:^7.13.0": + version: 7.16.7 + resolution: "@babel/preset-typescript@npm:7.16.7" + dependencies: + "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-validator-option": ^7.16.7 + "@babel/plugin-transform-typescript": ^7.16.7 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 44e2f3fa302befe0dc50a01b79e5aa8c27a9c7047c46df665beae97201173030646ddf7c83d7d3ed3724fc38151745b11693e7b4502c81c4cd67781ff5677da5 + languageName: node + linkType: hard + +"@babel/preset-typescript@npm:^7.17.12": version: 7.18.6 resolution: "@babel/preset-typescript@npm:7.18.6" dependencies: @@ -1940,76 +2686,181 @@ __metadata: linkType: hard "@babel/register@npm:^7.13.16": - version: 7.18.9 - resolution: "@babel/register@npm:7.18.9" + version: 7.16.9 + resolution: "@babel/register@npm:7.16.9" dependencies: clone-deep: ^4.0.1 find-cache-dir: ^2.0.0 make-dir: ^2.1.0 - pirates: ^4.0.5 + pirates: ^4.0.0 source-map-support: ^0.5.16 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4aeaff97e061a397f632659082ba86c539ef8194697b236d991c10d1c2ea8f73213d3b5b3b2c24625951a1ef726b7a7d2e70f70ffcb37f79ef0c1a745eebef21 + checksum: bbe9552c9e5816aec2bf7d899b43f95fd649714f38d14de48f42c895cc9ef65708f1359f393c235d5f02224c115544aeeb174495682a07734cdf9484ed2e6175 languageName: node linkType: hard -"@babel/runtime-corejs3@npm:^7.10.2, @babel/runtime-corejs3@npm:^7.11.2, @babel/runtime-corejs3@npm:^7.18.9": - version: 7.19.1 - resolution: "@babel/runtime-corejs3@npm:7.19.1" +"@babel/runtime-corejs3@npm:^7.10.2, @babel/runtime-corejs3@npm:^7.11.2": + version: 7.17.2 + resolution: "@babel/runtime-corejs3@npm:7.17.2" dependencies: - core-js-pure: ^3.25.1 + core-js-pure: ^3.20.2 regenerator-runtime: ^0.13.4 - checksum: 38a1e8fcd2ba1f76c951259c98a5a11052123923adbf30ec8b2fec202dbbe38c6db61658ef9398e00c30f799e2e54ea036e56a09f43229261918bf5ec1b7d03a + checksum: fc7ba261913c66347434051c74b00f320fb5fda7c72f4a4378045b39e31a39420bba2b2cf3fd59367834b43689215b12cb0587a599c95e9619562e1ebec071a7 languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.10.4, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.6, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.18.9, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": - version: 7.19.0 - resolution: "@babel/runtime@npm:7.19.0" +"@babel/runtime-corejs3@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/runtime-corejs3@npm:7.18.9" + dependencies: + core-js-pure: ^3.20.2 + regenerator-runtime: ^0.13.4 + checksum: 249158b660ac996fa4f4b0d1ab5810db060af40fac4d0bb5da23f55539a151313ae254aa64afc2ab7000d95167824e21a689f74bc24b36fd0f5ca030d522133d + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.14.6, @babel/runtime@npm:^7.15.4, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.2, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": + version: 7.17.7 + resolution: "@babel/runtime@npm:7.17.7" dependencies: regenerator-runtime: ^0.13.4 - checksum: fa69c351bb05e1db3ceb9a02fdcf620c234180af68cdda02152d3561015f6d55277265d3109815992f96d910f3db709458cae4f8df1c3def66f32e0867d82294 + checksum: d9ec9e2c5ebbf503ac865ebd70d0216443d0fa8380bab572aa44ccf8fafde8b8b9846badfdbba3572f79075c9a196845aa3f42a435fd34ec832acd2bc1467d37 languageName: node linkType: hard -"@babel/template@npm:^7.18.10, @babel/template@npm:^7.3.3": - version: 7.18.10 - resolution: "@babel/template@npm:7.18.10" +"@babel/runtime@npm:^7.10.4, @babel/runtime@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/runtime@npm:7.18.9" dependencies: - "@babel/code-frame": ^7.18.6 - "@babel/parser": ^7.18.10 - "@babel/types": ^7.18.10 - checksum: 93a6aa094af5f355a72bd55f67fa1828a046c70e46f01b1606e6118fa1802b6df535ca06be83cc5a5e834022be95c7b714f0a268b5f20af984465a71e28f1473 + regenerator-runtime: ^0.13.4 + checksum: 36dd736baba7164e82b3cc9d43e081f0cb2d05ff867ad39cac515d99546cee75b7f782018b02a3dcf5f2ef3d27f319faa68965fdfec49d4912c60c6002353a2e languageName: node linkType: hard -"@babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.19.0, @babel/traverse@npm:^7.19.1, @babel/traverse@npm:^7.4.5, @babel/traverse@npm:^7.7.2": - version: 7.19.1 - resolution: "@babel/traverse@npm:7.19.1" +"@babel/runtime@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/runtime@npm:7.18.6" + dependencies: + regenerator-runtime: ^0.13.4 + checksum: 8b707b64ae0524db617d0c49933b258b96376a38307dc0be8fb42db5697608bcc1eba459acce541e376cff5ed5c5287d24db5780bd776b7c75ba2c2e26ff8a2c + languageName: node + linkType: hard + +"@babel/template@npm:^7.16.7, @babel/template@npm:^7.3.3": + version: 7.16.7 + resolution: "@babel/template@npm:7.16.7" + dependencies: + "@babel/code-frame": ^7.16.7 + "@babel/parser": ^7.16.7 + "@babel/types": ^7.16.7 + checksum: 10cd112e89276e00f8b11b55a51c8b2f1262c318283a980f4d6cdb0286dc05734b9aaeeb9f3ad3311900b09bc913e02343fcaa9d4a4f413964aaab04eb84ac4a + languageName: node + linkType: hard + +"@babel/template@npm:^7.18.6": + version: 7.18.6 + resolution: "@babel/template@npm:7.18.6" dependencies: "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.19.0 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.19.0 - "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.19.1 - "@babel/types": ^7.19.0 + "@babel/parser": ^7.18.6 + "@babel/types": ^7.18.6 + checksum: cb02ed804b7b1938dbecef4e01562013b80681843dd391933315b3dd9880820def3b5b1bff6320d6e4c6a1d63d1d5799630d658ec6b0369c5505e7e4029c38fb + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.13.0, @babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.16.10, @babel/traverse@npm:^7.16.7, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.4.5, @babel/traverse@npm:^7.7.2": + version: 7.16.10 + resolution: "@babel/traverse@npm:7.16.10" + dependencies: + "@babel/code-frame": ^7.16.7 + "@babel/generator": ^7.16.8 + "@babel/helper-environment-visitor": ^7.16.7 + "@babel/helper-function-name": ^7.16.7 + "@babel/helper-hoist-variables": ^7.16.7 + "@babel/helper-split-export-declaration": ^7.16.7 + "@babel/parser": ^7.16.10 + "@babel/types": ^7.16.8 debug: ^4.1.0 globals: ^11.1.0 - checksum: 9d782b5089ebc989e54c2406814ed1206cb745ed2734e6602dee3e23d4b6ebbb703ff86e536276630f8de83fda6cde99f0634e3c3d847ddb40572d0303ba8800 + checksum: 58f52314f8a02157cd3004712e703e6b22dff57cee4bc1ab1954c511c6f885fd7763ea68d2d5f006891bc7b77b1f2e9c8c7cb0354f580c8343d5559ed971d087 languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.16.8, @babel/types@npm:^7.18.10, @babel/types@npm:^7.18.4, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.19.0, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.19.0 - resolution: "@babel/types@npm:7.19.0" +"@babel/traverse@npm:^7.17.3": + version: 7.17.3 + resolution: "@babel/traverse@npm:7.17.3" + dependencies: + "@babel/code-frame": ^7.16.7 + "@babel/generator": ^7.17.3 + "@babel/helper-environment-visitor": ^7.16.7 + "@babel/helper-function-name": ^7.16.7 + "@babel/helper-hoist-variables": ^7.16.7 + "@babel/helper-split-export-declaration": ^7.16.7 + "@babel/parser": ^7.17.3 + "@babel/types": ^7.17.0 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: 780d7ecf711758174989794891af08d378f81febdb8932056c0d9979524bf0298e28f8e7708a872d7781151506c28f56c85c63ea3f1f654662c2fcb8a3eb9fdc + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/traverse@npm:7.18.9" + dependencies: + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.18.9 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.18.9 + "@babel/helper-hoist-variables": ^7.18.6 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/parser": ^7.18.9 + "@babel/types": ^7.18.9 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: 0445a51952ea1664a5719d9b1f8bf04be6f1933bcf54915fecc544c844a5dad2ac56f3b555723bbf741ef680d7fd64f6a5d69cfd08d518a4089c79a734270162 + languageName: node + linkType: hard + +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.16.0, @babel/types@npm:^7.16.7, @babel/types@npm:^7.16.8, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": + version: 7.16.8 + resolution: "@babel/types@npm:7.16.8" + dependencies: + "@babel/helper-validator-identifier": ^7.16.7 + to-fast-properties: ^2.0.0 + checksum: 4f6a187b2924df70e21d6e6c0822f91b1b936fe060bc92bb477b93bd8a712c88fe41a73f85c0ec53b033353374fe33e773b04ffc340ad36afd8f647dd05c4ee1 + languageName: node + linkType: hard + +"@babel/types@npm:^7.17.0": + version: 7.17.0 + resolution: "@babel/types@npm:7.17.0" + dependencies: + "@babel/helper-validator-identifier": ^7.16.7 + to-fast-properties: ^2.0.0 + checksum: 12e5a287986fe557188e87b2c5202223f1dc83d9239a196ab936fdb9f8c1eb0be717ff19f934b5fad4e29a75586d5798f74bed209bccea1c20376b9952056f0e + languageName: node + linkType: hard + +"@babel/types@npm:^7.18.4, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/types@npm:7.18.9" + dependencies: + "@babel/helper-validator-identifier": ^7.18.6 + to-fast-properties: ^2.0.0 + checksum: f0e0147267895fd8a5b82133e711ce7ce99941f3ce63647e0e3b00656a7afe48a8aa48edbae27543b701794d2b29a562a08f51f88f41df401abce7c3acc5e13a + languageName: node + linkType: hard + +"@babel/types@npm:^7.8.3": + version: 7.18.13 + resolution: "@babel/types@npm:7.18.13" dependencies: "@babel/helper-string-parser": ^7.18.10 "@babel/helper-validator-identifier": ^7.18.6 to-fast-properties: ^2.0.0 - checksum: 9b346715a68aeede70ba9c685a144b0b26c53bcd595d448e24c8fa8df4d5956a5712e56ebadb7c85dcc32f218ee42788e37b93d50d3295c992072224cb3ef3fe + checksum: abc3ad1f3b6864df0ea0e778bcdf7d2c5ee2293811192962d50e8a8c05c1aeec90a48275f53b2a45aad882ed8bef9477ae1f8e70ac1d44d039e14930d1388dcc languageName: node linkType: hard @@ -3253,14 +4104,14 @@ __metadata: "@azure/arm-resourcegraph": ^4.2.1 "@azure/identity": ^2.1.0 "@backstage/backend-common": ^0.15.1-next.3 - "@backstage/cli": ^0.19.0-next.2 + "@backstage/cli": ^0.19.0-next.3 "@backstage/config": ^1.0.2-next.0 "@backstage/plugin-azure-common": ^0.0.0 - "@types/express": "*" + "@types/express": ^4.17.6 "@types/supertest": ^2.0.8 express: ^4.17.1 express-promise-router: ^4.1.0 - msw: ^0.44.0 + msw: ^0.47.0 node-fetch: ^2.6.7 winston: ^3.2.1 yn: ^4.0.0 @@ -3343,26 +4194,25 @@ __metadata: resolution: "@backstage/plugin-azure@workspace:plugins/azure" dependencies: "@backstage/catalog-model": ^1.1.1-next.0 - "@backstage/cli": ^0.19.0-next.2 - "@backstage/core-app-api": ^1.1.0-next.2 - "@backstage/core-components": ^0.11.1-next.2 - "@backstage/core-plugin-api": ^1.0.6-next.2 - "@backstage/dev-utils": ^1.0.6-next.1 + "@backstage/cli": ^0.19.0-next.3 + "@backstage/core-app-api": ^1.1.0-next.3 + "@backstage/core-components": ^0.11.1-next.3 + "@backstage/core-plugin-api": ^1.0.6-next.3 + "@backstage/dev-utils": ^1.0.6-next.2 "@backstage/plugin-azure-common": ^0.0.0 - "@backstage/plugin-catalog-react": ^1.1.4-next.1 - "@backstage/test-utils": ^1.2.0-next.2 + "@backstage/plugin-catalog-react": ^1.1.4-next.2 + "@backstage/test-utils": ^1.2.0-next.3 "@backstage/theme": ^0.2.16 - "@material-ui/core": ^4.9.13 + "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.57 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 - "@types/jest": "*" - "@types/node": "*" + "@types/node": ^16.11.26 cross-fetch: ^3.1.5 - luxon: ^3.0.3 - msw: ^0.44.0 + luxon: ^3.0.0 + msw: ^0.47.0 react-use: ^17.2.4 peerDependencies: react: ^16.13.1 || ^17.0.0 @@ -3945,7 +4795,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-react@^1.1.4-next.0, @backstage/plugin-catalog-react@^1.1.4-next.1, @backstage/plugin-catalog-react@^1.1.4-next.2, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": +"@backstage/plugin-catalog-react@^1.1.4-next.0, @backstage/plugin-catalog-react@^1.1.4-next.2, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-react@workspace:plugins/catalog-react" dependencies: @@ -7016,8 +7866,8 @@ __metadata: linkType: hard "@codemirror/autocomplete@npm:^6.0.0": - version: 6.2.0 - resolution: "@codemirror/autocomplete@npm:6.2.0" + version: 6.0.2 + resolution: "@codemirror/autocomplete@npm:6.0.2" dependencies: "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 @@ -7028,19 +7878,19 @@ __metadata: "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 "@lezer/common": ^1.0.0 - checksum: fc20334d54b8e59abb48f0a813b0c409804a87eb918b6e46aa098fcb7125a7e1902cfa1628d4dc92ee3a535b3bebce4f8ce778fbc7b339cb796ca05b10150b37 + checksum: f843572333ae8d0ac772952d3f261e53ebed16a4914ec7089d0de5496089daa24f45c3c4609e1817328a081447bbe0bc40aa82d8c42f29071ad6179020a59dac languageName: node linkType: hard -"@codemirror/commands@npm:^6.0.0, @codemirror/commands@npm:^6.1.0": - version: 6.1.0 - resolution: "@codemirror/commands@npm:6.1.0" +"@codemirror/commands@npm:^6.0.0": + version: 6.0.0 + resolution: "@codemirror/commands@npm:6.0.0" dependencies: "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 "@lezer/common": ^1.0.0 - checksum: 0b95ed5b657590adda3171ef8cb1b662078ed1c02109b414bbd71503ae8cac3d5d56a56a159020178a4e8f1e7168bd3c5f5782eb2d90a6e25f067fc8c39dbc87 + checksum: 5b3bac420635316f9fb324e38b76a281a4d1425f80e6a5e66a34cf1508414e5d182f494e3c30936b27f86aa67403c1af4137bca5df0f0e53b2a4baa49a25caf2 languageName: node linkType: hard @@ -7079,43 +7929,43 @@ __metadata: linkType: hard "@codemirror/search@npm:^6.0.0": - version: 6.2.0 - resolution: "@codemirror/search@npm:6.2.0" + version: 6.0.0 + resolution: "@codemirror/search@npm:6.0.0" dependencies: "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 crelt: ^1.0.5 - checksum: 1d25a847d3ebde3b3e8ee796c9a874c5e77622cebf361887f4ce7c9b9c1de196c9e74b488602032b5a3eeff31d3c983ea67e7fdba8b0b4775b40abb066e58d63 + checksum: e40b55f1ff1287a8b5b321f633bff638c9d4a411ada524b36b275344a13f9f4a66b7c5176d8a142a6a7761d1591d18dc535c88897f30b9885508a2890162fc72 languageName: node linkType: hard -"@codemirror/state@npm:^6.0.0, @codemirror/state@npm:^6.1.1": - version: 6.1.1 - resolution: "@codemirror/state@npm:6.1.1" - checksum: 26b767af3a3385479d9bb6a31b5d4fb7d2485d4f502c3056aa3117c12ba0b4e80bbbf358d81e81a03d147e404b7ef65cc1449058b2f869f698882d1969b74996 +"@codemirror/state@npm:^6.0.0": + version: 6.0.1 + resolution: "@codemirror/state@npm:6.0.1" + checksum: fcb5aa5e1ce455ed1261616beb6cdb9e855f9cf11618a1ef7f61142622a0aba4551605356d381d2fa96f021f932b71323808369bf8edadfa69d745252b7e6ccd languageName: node linkType: hard "@codemirror/theme-one-dark@npm:^6.0.0": - version: 6.1.0 - resolution: "@codemirror/theme-one-dark@npm:6.1.0" + version: 6.0.0 + resolution: "@codemirror/theme-one-dark@npm:6.0.0" dependencies: "@codemirror/language": ^6.0.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 "@lezer/highlight": ^1.0.0 - checksum: 7454742006f0ea23ed36b1c8e232d55bd1cdf6cd3c9b5ad7f7212a4b5fe7907eecaeb1d908fed2022c2ca5d667176c93e9f071c939d54449cfe740dc028a16d8 + checksum: 916f23e3ce0e003224e4bcee209ebcae57eb620c942adb180d7e0a1a0f2091bb042723d07cbd855c7016cb86fae66aa374de115001dcbe3d033f86c1624c3f9b languageName: node linkType: hard "@codemirror/view@npm:^6.0.0": - version: 6.2.4 - resolution: "@codemirror/view@npm:6.2.4" + version: 6.2.2 + resolution: "@codemirror/view@npm:6.2.2" dependencies: "@codemirror/state": ^6.0.0 style-mod: ^4.0.0 w3c-keyname: ^2.2.4 - checksum: 5fd3dfe92f00c91e3f51a9881decdbc5ffbf3399d8d92258ee37b2b6ceab01053bdd527e15a0f87256c82e11e7c46a70d9fca463035c25ae78a3a3718a818297 + checksum: 6983c51362367d3885961fa233d302e75dfb103cd83ec78e6a044c2420e61466b5e94cfb73a9e840b04765577e8bbb269eb1ad45fa21abd28efda4ae780791db languageName: node linkType: hard @@ -7172,13 +8022,13 @@ __metadata: linkType: hard "@dabh/diagnostics@npm:^2.0.2": - version: 2.0.3 - resolution: "@dabh/diagnostics@npm:2.0.3" + version: 2.0.2 + resolution: "@dabh/diagnostics@npm:2.0.2" dependencies: colorspace: 1.1.x enabled: 2.0.x kuler: ^2.0.0 - checksum: 4879600c55c8315a0fb85fbb19057bad1adc08f0a080a8cb4e2b63f723c379bfc4283b68123a2b078d367b327dd8df12fcb27464efe791addc0a48b9df6d79a1 + checksum: 4d95cc31249a840b6cc3dba3dc4345a9295265413456068a0d07b69fa0ec6a5a5bc2c39e56ec04c6509ac1f4d9c17fc80baaaddd5caa1abcdd3aaeffe2b63cec languageName: node linkType: hard @@ -7261,18 +8111,18 @@ __metadata: linkType: hard "@emotion/is-prop-valid@npm:^1.1.0": - version: 1.2.0 - resolution: "@emotion/is-prop-valid@npm:1.2.0" + version: 1.1.2 + resolution: "@emotion/is-prop-valid@npm:1.1.2" dependencies: - "@emotion/memoize": ^0.8.0 - checksum: cc7a19850a4c5b24f1514665289442c8c641709e6f7711067ad550e05df331da0692a16148e85eda6f47e31b3261b64d74c5e25194d053223be16231f969d633 + "@emotion/memoize": ^0.7.4 + checksum: 58b1f2d429a589f8f5bc2c33a8732cbb7bbcb17131a103511ef9a94ac754d7eeb53d627f947da480cd977f9d419fd92e244991680292f3287204159652745707 languageName: node linkType: hard -"@emotion/memoize@npm:^0.8.0": - version: 0.8.0 - resolution: "@emotion/memoize@npm:0.8.0" - checksum: c87bb110b829edd8e1c13b90a6bc37cebc39af29c7599a1e66a48e06f9bec43e8e53495ba86278cc52e7589549492c8dfdc81d19f4fdec0cee6ba13d2ad2c928 +"@emotion/memoize@npm:^0.7.4": + version: 0.7.5 + resolution: "@emotion/memoize@npm:0.7.5" + checksum: 83da8d4a7649a92c72f960817692bc6be13cc13e107b9f7e878d63766525ed4402881bfeb3cda61145c050281e7e260f114a0a2870515527346f2ef896b915b3 languageName: node linkType: hard @@ -7297,13 +8147,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.15.7": - version: 0.15.7 - resolution: "@esbuild/linux-loong64@npm:0.15.7" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - "@eslint/eslintrc@npm:^1.3.2": version: 1.3.2 resolution: "@eslint/eslintrc@npm:1.3.2" @@ -7330,7 +8173,14 @@ __metadata: languageName: node linkType: hard -"@gar/promisify@npm:^1.0.1, @gar/promisify@npm:^1.1.3": +"@gar/promisify@npm:^1.0.1": + version: 1.1.2 + resolution: "@gar/promisify@npm:1.1.2" + checksum: d05081e0887a49c178b75ee3067bd6ee086f73c154d121b854fb2e044e8a89cb1cbb6de3a0dd93a519b80f0531fda68b099dd7256205f7fbb3490324342f2217 + languageName: node + linkType: hard + +"@gar/promisify@npm:^1.1.3": version: 1.1.3 resolution: "@gar/promisify@npm:1.1.3" checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1 @@ -7397,14 +8247,14 @@ __metadata: linkType: hard "@google-cloud/firestore@npm:^6.0.0": - version: 6.2.0 - resolution: "@google-cloud/firestore@npm:6.2.0" + version: 6.0.0 + resolution: "@google-cloud/firestore@npm:6.0.0" dependencies: fast-deep-equal: ^3.1.1 functional-red-black-tree: ^1.0.1 - google-gax: ^3.5.1 + google-gax: ^3.0.1 protobufjs: ^7.0.0 - checksum: fce0d729d63b5722df0dcedb78c8b494b2876de128128de8c8dc7d9add1ff7e00a8df1d04e7e2210a71331e623877e67149593341f714d2b0f92b6fef73dfcbd + checksum: 4b51ed6da004fe9c699cecde3e663f4b6c94937fdf4dd01c27a22df9845bac202d9869d39d8b4a3b9bd38637762754f925b32e4ea4f8ffb755fcf6528988aadf languageName: node linkType: hard @@ -7426,15 +8276,15 @@ __metadata: linkType: hard "@google-cloud/promisify@npm:^3.0.0": - version: 3.0.1 - resolution: "@google-cloud/promisify@npm:3.0.1" - checksum: 44b4de760425d6ea328f6208c46219cfcc44383b4015c67a6b18b55b8fee5b754a11f80ed481a7d779bc471950b2b856dce51e36e8004b0d2f73a93e50d756ce + version: 3.0.0 + resolution: "@google-cloud/promisify@npm:3.0.0" + checksum: 5339e36bd5bc7957ae72b959e21c5d50fe028ad8eae9affb6e8e172aab715f3bf6a7b3c01720d6b4b67ea080d91dd30ac00f0dc88d455620c8bb10df263385a2 languageName: node linkType: hard "@google-cloud/storage@npm:^6.0.0": - version: 6.5.0 - resolution: "@google-cloud/storage@npm:6.5.0" + version: 6.4.2 + resolution: "@google-cloud/storage@npm:6.4.2" dependencies: "@google-cloud/paginator": ^3.0.7 "@google-cloud/projectify": ^3.0.0 @@ -7454,7 +8304,7 @@ __metadata: retry-request: ^5.0.0 teeny-request: ^8.0.0 uuid: ^8.0.0 - checksum: b97dc19814e4154ef0920202e79feaf14c3d7de2ea9aa295bc2e2784b3b0ba4e7feabdd4b499d0f2e996accc4fa965b974174bdb60d5f51408967a268bdc5b9f + checksum: ebd8bf46675f21b429915d9889c56574acc395745126e40f96803334c1e2d8b35a60d22b1f0ecf9db4bb67c373f53e4eeef9406af334cdf9c0ca8461da777ab3 languageName: node linkType: hard @@ -7568,7 +8418,23 @@ __metadata: languageName: node linkType: hard -"@graphql-codegen/plugin-helpers@npm:^2.6.2, @graphql-codegen/plugin-helpers@npm:^2.7.0": +"@graphql-codegen/plugin-helpers@npm:^2.6.2": + version: 2.6.2 + resolution: "@graphql-codegen/plugin-helpers@npm:2.6.2" + dependencies: + "@graphql-tools/utils": ^8.8.0 + change-case-all: 1.0.14 + common-tags: 1.8.2 + import-from: 4.0.0 + lodash: ~4.17.0 + tslib: ~2.4.0 + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 972b5d6e13d8cdfde5fe3d79b79e7e0af7c3931619a10d48b931e1d101e95694e29fa83d66e25df1427827faf841f5884b5a677bb659a5de08ece95854a25736 + languageName: node + linkType: hard + +"@graphql-codegen/plugin-helpers@npm:^2.7.0": version: 2.7.0 resolution: "@graphql-codegen/plugin-helpers@npm:2.7.0" dependencies: @@ -7649,16 +8515,44 @@ __metadata: linkType: hard "@graphql-tools/apollo-engine-loader@npm:^7.3.6": - version: 7.3.13 - resolution: "@graphql-tools/apollo-engine-loader@npm:7.3.13" + version: 7.3.6 + resolution: "@graphql-tools/apollo-engine-loader@npm:7.3.6" dependencies: "@ardatan/sync-fetch": 0.0.1 - "@graphql-tools/utils": 8.12.0 - "@whatwg-node/fetch": ^0.4.0 + "@graphql-tools/utils": 8.9.0 + "@whatwg-node/fetch": ^0.2.4 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: a3a11a00e039d382d4af0dc3f90efe1a54ca0686ec88ffd7aeaba7e1e26fbe1d2cf3f70e607d07b5db8974384cc22df6350a9fb0962cc0c5735b256486447bcc + checksum: e9711b32fd90d41c97ea8eb6bcc68e5a78374114fdd628ae9f1d4855cc163aecda78d22697c0f6ab556f816a01d27d684bd756ed1b777e7fa42b63200c240b90 + languageName: node + linkType: hard + +"@graphql-tools/batch-execute@npm:8.4.6": + version: 8.4.6 + resolution: "@graphql-tools/batch-execute@npm:8.4.6" + dependencies: + "@graphql-tools/utils": 8.6.9 + dataloader: 2.1.0 + tslib: ~2.3.0 + value-or-promise: 1.0.11 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 613b47b15b6055e2f7e9fa28b8a9751faf30f4e8e30f348446fcacdb300015adeea126436f3f0c9d1798a6df925dff3d99175ec826763c3308db1f08f8db3000 + languageName: node + linkType: hard + +"@graphql-tools/batch-execute@npm:8.5.0": + version: 8.5.0 + resolution: "@graphql-tools/batch-execute@npm:8.5.0" + dependencies: + "@graphql-tools/utils": 8.8.0 + dataloader: 2.1.0 + tslib: ^2.4.0 + value-or-promise: 1.0.11 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 9bb0363f4c0c6e6c919c38965164b1e9241aaa1caf071a6f70e93c62d48e7784eec2b4d87b6df02f9d84bbf63e8c981ade6aa8e86eb69f099aac5fb4484deacd languageName: node linkType: hard @@ -7676,32 +8570,51 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/batch-execute@npm:8.5.6": - version: 8.5.6 - resolution: "@graphql-tools/batch-execute@npm:8.5.6" - dependencies: - "@graphql-tools/utils": 8.12.0 - dataloader: 2.1.0 - tslib: ^2.4.0 - value-or-promise: 1.0.11 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: a5afd4adfc70ba3694c194a5bbdaf425d66fedc4b83f0f41347dd1f2bc2c61fc98d4c36badc246aced7baa068de2aab336b6cb4b8b91f006a40060cfc4186959 - languageName: node - linkType: hard - "@graphql-tools/code-file-loader@npm:^7.3.1": - version: 7.3.6 - resolution: "@graphql-tools/code-file-loader@npm:7.3.6" + version: 7.3.1 + resolution: "@graphql-tools/code-file-loader@npm:7.3.1" dependencies: - "@graphql-tools/graphql-tag-pluck": 7.3.6 - "@graphql-tools/utils": 8.12.0 + "@graphql-tools/graphql-tag-pluck": 7.3.1 + "@graphql-tools/utils": 8.9.0 globby: ^11.0.3 tslib: ^2.4.0 unixify: ^1.0.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: a63b0c512d1a6b56fc6aebc933a779d8b155aedc060ee37fcdcacd909341024db9546d5f93b49ad676ee348e3303b048c9ef190263f3747e016f818a04c49133 + checksum: 2055d8499fba9e8b8cbea8aa811ae57ab549973eb9a1bb309ff15c8e5fad71c1b425027d5c292b0cc5c3d00d5796721d3a8611a60a7305f5702c2948a105a28e + languageName: node + linkType: hard + +"@graphql-tools/delegate@npm:8.7.7": + version: 8.7.7 + resolution: "@graphql-tools/delegate@npm:8.7.7" + dependencies: + "@graphql-tools/batch-execute": 8.4.6 + "@graphql-tools/schema": 8.3.10 + "@graphql-tools/utils": 8.6.9 + dataloader: 2.1.0 + graphql-executor: 0.0.23 + tslib: ~2.3.0 + value-or-promise: 1.0.11 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 1f06d645c6382eee72bf779949cb631688c20f0a9260c729810a87cf3afae13166ae1ef34aa80de4895c06a0128da910de933d900835aa8a81f39e3ccfa9bbfe + languageName: node + linkType: hard + +"@graphql-tools/delegate@npm:8.8.0": + version: 8.8.0 + resolution: "@graphql-tools/delegate@npm:8.8.0" + dependencies: + "@graphql-tools/batch-execute": 8.5.0 + "@graphql-tools/schema": 8.5.0 + "@graphql-tools/utils": 8.8.0 + dataloader: 2.1.0 + tslib: ~2.4.0 + value-or-promise: 1.0.11 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: ceeb69345556d7d8ddb3d8862ba4d7cf970c962b26ef6ed6835d2915ceb450e92ab1aa4f8dda6efa53f0b27992f8a866aa956eb15086eb8aa381267d011e0ccc languageName: node linkType: hard @@ -7721,121 +8634,185 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/delegate@npm:9.0.6": - version: 9.0.6 - resolution: "@graphql-tools/delegate@npm:9.0.6" - dependencies: - "@graphql-tools/batch-execute": 8.5.6 - "@graphql-tools/schema": 9.0.4 - "@graphql-tools/utils": 8.12.0 - dataloader: 2.1.0 - tslib: ~2.4.0 - value-or-promise: 1.0.11 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 3ddba11137878c51e9ca821710bde23c6ce6cb63fe69eb0544930187f97dbdb18f6f80a6758bb5d42607301489f619143a16d729e1a198bd9dd87cb00a48ebdd - languageName: node - linkType: hard - "@graphql-tools/git-loader@npm:^7.2.1": - version: 7.2.6 - resolution: "@graphql-tools/git-loader@npm:7.2.6" + version: 7.2.1 + resolution: "@graphql-tools/git-loader@npm:7.2.1" dependencies: - "@graphql-tools/graphql-tag-pluck": 7.3.6 - "@graphql-tools/utils": 8.12.0 + "@graphql-tools/graphql-tag-pluck": 7.3.1 + "@graphql-tools/utils": 8.9.0 is-glob: 4.0.3 micromatch: ^4.0.4 tslib: ^2.4.0 unixify: ^1.0.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: e1e2bd75889b01e71b00b6f7c8af3b9ad38759248cdd1c7ecc82db0484a902fd2176e20488550914d06c540f60dcc271e6c21937297ba6f6c627f5f4231a3920 + checksum: 28b5d07e52aedd45dcfe49f3a7ca472b7cb083bc1b54b6b905e05691e7c76abbd198ecf8b2875bedc5f2cbadbbb7fe6713087dd0018b63cdfb8e80af3a91922f languageName: node linkType: hard "@graphql-tools/github-loader@npm:^7.3.6": - version: 7.3.13 - resolution: "@graphql-tools/github-loader@npm:7.3.13" + version: 7.3.6 + resolution: "@graphql-tools/github-loader@npm:7.3.6" dependencies: "@ardatan/sync-fetch": 0.0.1 - "@graphql-tools/graphql-tag-pluck": 7.3.6 - "@graphql-tools/utils": 8.12.0 - "@whatwg-node/fetch": ^0.4.0 + "@graphql-tools/graphql-tag-pluck": 7.3.1 + "@graphql-tools/utils": 8.9.0 + "@whatwg-node/fetch": ^0.2.4 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 8a76e89df9cd2f9fa2a4cdfe3912e1857e634104152403d51b0395eb65aea656a08c1b44236ab93d6157eae0074d5428b9f3404edb4569b88c5668b6f9006763 + checksum: 6198e458d8cfdf3e899c1a5d94842b3b4798706434182d3cf07c2386913fbd3d91c8a0c28a404f4f5ca695b3ee771bf3930bf51a6df0802e699bf8b07c207cec languageName: node linkType: hard -"@graphql-tools/graphql-file-loader@npm:^7.3.7, @graphql-tools/graphql-file-loader@npm:^7.5.0": - version: 7.5.5 - resolution: "@graphql-tools/graphql-file-loader@npm:7.5.5" +"@graphql-tools/graphql-file-loader@npm:^7.3.7": + version: 7.4.0 + resolution: "@graphql-tools/graphql-file-loader@npm:7.4.0" dependencies: - "@graphql-tools/import": 6.7.6 - "@graphql-tools/utils": 8.12.0 + "@graphql-tools/import": 6.7.0 + "@graphql-tools/utils": 8.8.0 globby: ^11.0.3 tslib: ^2.4.0 unixify: ^1.0.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: cb711db9d8f62e678a842d7e3edee6b1a0b6f8654be5a6b9c4483f776a3102843ecdcb173c2f9b530883586b48ac1eb8195aeebc9a42d26d92c2d2fa0b74c972 + checksum: e6221b78dfd15e2a73cd34d039780173dee7464276b9fd78ee3494c5a894f0904cabd27084a531c252c01f84aaba763b7f089bc10b268f0f18a01e266093eec2 languageName: node linkType: hard -"@graphql-tools/graphql-tag-pluck@npm:7.3.6": - version: 7.3.6 - resolution: "@graphql-tools/graphql-tag-pluck@npm:7.3.6" +"@graphql-tools/graphql-file-loader@npm:^7.5.0": + version: 7.5.0 + resolution: "@graphql-tools/graphql-file-loader@npm:7.5.0" + dependencies: + "@graphql-tools/import": 6.7.1 + "@graphql-tools/utils": 8.9.0 + globby: ^11.0.3 + tslib: ^2.4.0 + unixify: ^1.0.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 57f9f64a26f62d25fcb65282d27a8f6cce8d99fd0ec8f1d5b31ab43fd5698876760e4df42fd96f2b5ea524f2e755768496ee2b3516d559d43270330551371359 + languageName: node + linkType: hard + +"@graphql-tools/graphql-tag-pluck@npm:7.3.1": + version: 7.3.1 + resolution: "@graphql-tools/graphql-tag-pluck@npm:7.3.1" dependencies: "@babel/parser": ^7.16.8 "@babel/traverse": ^7.16.8 "@babel/types": ^7.16.8 - "@graphql-tools/utils": 8.12.0 + "@graphql-tools/utils": 8.9.0 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 3543a41a3b84dc014ce5d0824c8275b8d8592e55bbcd8f955a0968a6b9c00c11d82d90b6bbb533f2d09f94e07d10ec70d53696470ee32fad00d055767909d164 + checksum: a822f509ce1400cc2541dcaf6c60fca7ca61088f64f7e2c785f18e9c5a3aac964ce7f319a1f62ba6e9fc0cf76b47cfa4cba3b03b514adaae0bcf198c6e1964b9 languageName: node linkType: hard -"@graphql-tools/import@npm:6.7.6": - version: 6.7.6 - resolution: "@graphql-tools/import@npm:6.7.6" +"@graphql-tools/import@npm:6.7.0": + version: 6.7.0 + resolution: "@graphql-tools/import@npm:6.7.0" dependencies: - "@graphql-tools/utils": 8.12.0 + "@graphql-tools/utils": 8.8.0 resolve-from: 5.0.0 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 83b63dd7b45905627a7296d84102538c9450df90ad58edff601a6ebec2fd2dbae3d3d368f9f5335c62adf2ac772dcebf675f037373a5a60ef2c847a3216ff902 + checksum: 9c2f3404b1d40f37e611f1866a1f569b41cc56b07a95a822d19b25cac00341868324457f239dc9856e19cac50e27142d25f948de5e10051838af9913c565821f languageName: node linkType: hard -"@graphql-tools/json-file-loader@npm:^7.3.7, @graphql-tools/json-file-loader@npm:^7.4.1": - version: 7.4.6 - resolution: "@graphql-tools/json-file-loader@npm:7.4.6" +"@graphql-tools/import@npm:6.7.1": + version: 6.7.1 + resolution: "@graphql-tools/import@npm:6.7.1" dependencies: - "@graphql-tools/utils": 8.12.0 + "@graphql-tools/utils": 8.9.0 + resolve-from: 5.0.0 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 1ba6ff176851eff345ccfd37616bd2d800fba074b88abb9a777b59fe153a1e55f2c24d8c033b141303267212f6a01eb874088e403b7efdf10c01c9ec7833af49 + languageName: node + linkType: hard + +"@graphql-tools/json-file-loader@npm:^7.3.7": + version: 7.4.0 + resolution: "@graphql-tools/json-file-loader@npm:7.4.0" + dependencies: + "@graphql-tools/utils": 8.8.0 globby: ^11.0.3 tslib: ^2.4.0 unixify: ^1.0.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 53b1ae5cc88d50c9104f637316e0578422d85fd4edcd16e4ee7a8eb4405e61470ff3e6fb9b623678dc1c83c3cf219da8257ce69981b714328dc57e6c430bff29 + checksum: 20bca3e92b049fc7937d4a07376f8231f44cca5eacfa1d8cdd0b35cbe3981502d388f366fd13174f26bfa9a252deeb689aaba385d092d588476a2f2f0b4fdb4d languageName: node linkType: hard -"@graphql-tools/load@npm:^7.5.5, @graphql-tools/load@npm:^7.7.1": - version: 7.7.7 - resolution: "@graphql-tools/load@npm:7.7.7" +"@graphql-tools/json-file-loader@npm:^7.4.1": + version: 7.4.1 + resolution: "@graphql-tools/json-file-loader@npm:7.4.1" dependencies: - "@graphql-tools/schema": 9.0.4 - "@graphql-tools/utils": 8.12.0 + "@graphql-tools/utils": 8.9.0 + globby: ^11.0.3 + tslib: ^2.4.0 + unixify: ^1.0.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 9eae0fd4229b60fa93d3e523e7255eeb2400bda44a2e73ba036955c514be4f02c83e7578c4749c4a7e84b44d318d4c65979b745ddb34fa4d219449f455e3e873 + languageName: node + linkType: hard + +"@graphql-tools/load@npm:^7.5.5": + version: 7.7.0 + resolution: "@graphql-tools/load@npm:7.7.0" + dependencies: + "@graphql-tools/schema": 8.5.0 + "@graphql-tools/utils": 8.8.0 p-limit: 3.1.0 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 59590c07c029b5b2427116408f91cb1f5ab359bdf0a9314a8d31cedc540c235d1daddbbc8ab6369db1ea7e654cf52ca9d4f185058290acc8c5c3183d1bb68ef7 + checksum: 91f2b4f3e72b2991aee6f562aebd5024f2279e5336879322c44e1dafb38af407944a178c55234c39157635d0179798d022e937e960273bd86b752fd316cbaf73 + languageName: node + linkType: hard + +"@graphql-tools/load@npm:^7.7.1": + version: 7.7.1 + resolution: "@graphql-tools/load@npm:7.7.1" + dependencies: + "@graphql-tools/schema": 8.5.1 + "@graphql-tools/utils": 8.9.0 + p-limit: 3.1.0 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 4abaab346dab9547f547fe619476e5de54698121174f579f3473f2d5678891c249482a3e56f9b748400d5062c9bd3b5d5d5e56885555e5a3422cafa2afd6022e + languageName: node + linkType: hard + +"@graphql-tools/merge@npm:8.2.10": + version: 8.2.10 + resolution: "@graphql-tools/merge@npm:8.2.10" + dependencies: + "@graphql-tools/utils": 8.6.9 + tslib: ~2.3.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 7059d9f68cfb9b7c04d6024f528e5638fab165e681b3307877a6bad0fc461686595d19375350875bb5f4f7572b21d10272a1e4b08a8af5b6a67950a4a950012b + languageName: node + linkType: hard + +"@graphql-tools/merge@npm:8.3.0, @graphql-tools/merge@npm:^8.2.6": + version: 8.3.0 + resolution: "@graphql-tools/merge@npm:8.3.0" + dependencies: + "@graphql-tools/utils": 8.8.0 + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: f2239149d8a816d1158c5bf9f2507662faf7f77eeb8d6f6962111f69d7aedab1557f6cd8beac75bf62f0caf56a3c98ba83608207cd0614ad3119c68390d86bbe languageName: node linkType: hard @@ -7851,7 +8828,7 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/merge@npm:8.3.6, @graphql-tools/merge@npm:^8.2.6": +"@graphql-tools/merge@npm:8.3.6": version: 8.3.6 resolution: "@graphql-tools/merge@npm:8.3.6" dependencies: @@ -7864,43 +8841,43 @@ __metadata: linkType: hard "@graphql-tools/mock@npm:^8.1.2": - version: 8.7.6 - resolution: "@graphql-tools/mock@npm:8.7.6" + version: 8.6.8 + resolution: "@graphql-tools/mock@npm:8.6.8" dependencies: - "@graphql-tools/schema": 9.0.4 - "@graphql-tools/utils": 8.12.0 + "@graphql-tools/schema": 8.3.10 + "@graphql-tools/utils": 8.6.9 fast-json-stable-stringify: ^2.1.0 - tslib: ^2.4.0 + tslib: ~2.3.0 peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 41fd32f9aa83cc0da2166bd1c27d779ccf4f87c290e3acc5bfeb6f77218f29ebe425843d00e34485a17347966e9d258e98cb27c01e2a95820ae68523ef5f8078 + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 594abfbb7766806e07910624d80e5c27cdf15e0b2d1a0eff4336b2d6c63bde3587ae6f7c889374217cb0893d8e9e87f696daf1cf1ce2fdae787dae22b8b4d228 languageName: node linkType: hard "@graphql-tools/optimize@npm:^1.3.0": - version: 1.3.1 - resolution: "@graphql-tools/optimize@npm:1.3.1" + version: 1.3.0 + resolution: "@graphql-tools/optimize@npm:1.3.0" dependencies: tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 4eed041bc3199a70ab426eeb10bc4af65f18fa0c5907613aec236fd7e14918d0f895e12489df6ff501562415eef64c99777a3ca6f6a4ee3c796b68e7cb778342 + checksum: 56a5e8e3079a7ac69639410143315bafd43175c0366a95cf037698b64799ff80fc737b747b7751a4de31b44a679f67b7499468c556ca457932d5d1052db73f19 languageName: node linkType: hard "@graphql-tools/prisma-loader@npm:^7.2.7": - version: 7.2.22 - resolution: "@graphql-tools/prisma-loader@npm:7.2.22" + version: 7.2.7 + resolution: "@graphql-tools/prisma-loader@npm:7.2.7" dependencies: - "@graphql-tools/url-loader": 7.16.2 - "@graphql-tools/utils": 8.12.0 + "@graphql-tools/url-loader": 7.13.2 + "@graphql-tools/utils": 8.9.0 "@types/js-yaml": ^4.0.0 "@types/json-stable-stringify": ^1.0.32 "@types/jsonwebtoken": ^8.5.0 chalk: ^4.1.0 debug: ^4.3.1 dotenv: ^16.0.0 - graphql-request: ^5.0.0 + graphql-request: ^4.0.0 http-proxy-agent: ^5.0.0 https-proxy-agent: ^5.0.0 isomorphic-fetch: ^3.0.0 @@ -7913,24 +8890,52 @@ __metadata: yaml-ast-parser: ^0.0.43 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: d6881b1a40ff00d5b6ea68f271e088518a32a880f7cb0dbca1cf835d287a7c7c50816cb559d9e2ee61cc94fd3aac27faca8923d1b356ad9de7039052bc334554 + checksum: 986e33b1ec4044a26b31f8363ca0531d742e4ea67f9601ba150ec7ff6cc6fd1fb0d949057837ecf9fec6c3174a83689eb1fca6134462f368bc9d37546d4cde28 languageName: node linkType: hard "@graphql-tools/relay-operation-optimizer@npm:^6.5.0": - version: 6.5.6 - resolution: "@graphql-tools/relay-operation-optimizer@npm:6.5.6" + version: 6.5.0 + resolution: "@graphql-tools/relay-operation-optimizer@npm:6.5.0" dependencies: "@ardatan/relay-compiler": 12.0.0 - "@graphql-tools/utils": 8.12.0 + "@graphql-tools/utils": 8.8.0 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 12efc88c775221a333a97a517bec160b449778cf3de5377048a81d213b0f67d82c0f2de631ba31e3443355650317ea8af5a2e107a00517dbf73d8e8720e797fb + checksum: eea705c0508b801806d36a6031997868d1aa35a2bee0a21c36e5ac345691a9fec88c9c00bc3c96fa998aa28deb2be667d65e6123ac469f22072f3eba2781b5ad languageName: node linkType: hard -"@graphql-tools/schema@npm:8.5.1, @graphql-tools/schema@npm:^8.0.0, @graphql-tools/schema@npm:^8.3.1": +"@graphql-tools/schema@npm:8.3.10, @graphql-tools/schema@npm:^8.0.0, @graphql-tools/schema@npm:^8.3.1": + version: 8.3.10 + resolution: "@graphql-tools/schema@npm:8.3.10" + dependencies: + "@graphql-tools/merge": 8.2.10 + "@graphql-tools/utils": 8.6.9 + tslib: ~2.3.0 + value-or-promise: 1.0.11 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 8b225f4ae87d3f1d8d9772df605a27dfde069a2372f2af0a1459859c4310c5fef8243c1276c1959e316420f1584d739b9f52c55dd230d2ad177cde1019155b81 + languageName: node + linkType: hard + +"@graphql-tools/schema@npm:8.5.0": + version: 8.5.0 + resolution: "@graphql-tools/schema@npm:8.5.0" + dependencies: + "@graphql-tools/merge": 8.3.0 + "@graphql-tools/utils": 8.8.0 + tslib: ^2.4.0 + value-or-promise: 1.0.11 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 8eeefdd66e2fe674990039f81733a868ee589057cb44832e65fe99a8b17ab0c6b40dabf41a840b3458a4eb63665fb9603029269d6d919f916ae97e213a4434ba + languageName: node + linkType: hard + +"@graphql-tools/schema@npm:8.5.1": version: 8.5.1 resolution: "@graphql-tools/schema@npm:8.5.1" dependencies: @@ -7944,7 +8949,7 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/schema@npm:9.0.4, @graphql-tools/schema@npm:^9.0.0": +"@graphql-tools/schema@npm:^9.0.0": version: 9.0.4 resolution: "@graphql-tools/schema@npm:9.0.4" dependencies: @@ -7958,16 +8963,17 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/url-loader@npm:7.16.2, @graphql-tools/url-loader@npm:^7.13.2, @graphql-tools/url-loader@npm:^7.9.7": - version: 7.16.2 - resolution: "@graphql-tools/url-loader@npm:7.16.2" +"@graphql-tools/url-loader@npm:7.13.2, @graphql-tools/url-loader@npm:^7.13.2": + version: 7.13.2 + resolution: "@graphql-tools/url-loader@npm:7.13.2" dependencies: "@ardatan/sync-fetch": 0.0.1 - "@graphql-tools/delegate": 9.0.6 - "@graphql-tools/utils": 8.12.0 - "@graphql-tools/wrap": 9.2.1 + "@graphql-tools/delegate": 8.8.1 + "@graphql-tools/utils": 8.9.0 + "@graphql-tools/wrap": 8.5.1 + "@n1ru4l/graphql-live-query": ^0.9.0 "@types/ws": ^8.0.0 - "@whatwg-node/fetch": ^0.4.0 + "@whatwg-node/fetch": ^0.2.4 dset: ^3.1.2 extract-files: ^11.0.0 graphql-ws: ^5.4.1 @@ -7978,11 +8984,36 @@ __metadata: ws: ^8.3.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 18084f784dd079c6dbb2c2690e45673923a57886632c2c41c96549165261d48ccf786b87762b9fb22436b6c8629a410f54e51a64fdb890aca3981d84bb4142d9 + checksum: 21928a4a12ad07bed0c0729ec183277a1462da6b4a4fa8f083bf2fc7acb80137feb17f7fca283a58f2a8544f024bd5bcefc44c442f9cd58104656bb3f164c089 languageName: node linkType: hard -"@graphql-tools/utils@npm:8.12.0, @graphql-tools/utils@npm:^8.6.5, @graphql-tools/utils@npm:^8.8.0, @graphql-tools/utils@npm:^8.9.0": +"@graphql-tools/url-loader@npm:^7.9.7": + version: 7.12.1 + resolution: "@graphql-tools/url-loader@npm:7.12.1" + dependencies: + "@graphql-tools/delegate": 8.8.0 + "@graphql-tools/utils": 8.8.0 + "@graphql-tools/wrap": 8.5.0 + "@n1ru4l/graphql-live-query": ^0.9.0 + "@types/ws": ^8.0.0 + cross-undici-fetch: ^0.4.11 + dset: ^3.1.2 + extract-files: ^11.0.0 + graphql-ws: ^5.4.1 + isomorphic-ws: ^5.0.0 + meros: ^1.1.4 + sync-fetch: ^0.4.0 + tslib: ^2.4.0 + value-or-promise: ^1.0.11 + ws: ^8.3.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 8b49650f08a175f006519d9c771cd20e0d8462e5c07c58e3e9acad76b56fca22a74cb452898d83535f5113030fe37d453d37554a4ece09d6baceb029788d545e + languageName: node + linkType: hard + +"@graphql-tools/utils@npm:8.12.0": version: 8.12.0 resolution: "@graphql-tools/utils@npm:8.12.0" dependencies: @@ -7993,7 +9024,29 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/utils@npm:8.9.0": +"@graphql-tools/utils@npm:8.6.9": + version: 8.6.9 + resolution: "@graphql-tools/utils@npm:8.6.9" + dependencies: + tslib: ~2.3.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: 73b9569a9c2409f86a6a9005f19026cfab6d136bf884dfbff436996a47fb0561ae24d3f6bb2abcfd600197aab85d6dfc177b9a0cbaba23905ba0c7591ef12110 + languageName: node + linkType: hard + +"@graphql-tools/utils@npm:8.8.0, @graphql-tools/utils@npm:^8.6.5, @graphql-tools/utils@npm:^8.8.0": + version: 8.8.0 + resolution: "@graphql-tools/utils@npm:8.8.0" + dependencies: + tslib: ^2.4.0 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 631aa690fcf7c01c42829af93f2af1c62d2eeaca99a74f2ae9d6424b7662383391fff37443d61f76fd9f00243b33d0ba0a7df8792c835e1db1fd1b4cee2f32f0 + languageName: node + linkType: hard + +"@graphql-tools/utils@npm:8.9.0, @graphql-tools/utils@npm:^8.9.0": version: 8.9.0 resolution: "@graphql-tools/utils@npm:8.9.0" dependencies: @@ -8004,22 +9057,22 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/wrap@npm:9.2.1": - version: 9.2.1 - resolution: "@graphql-tools/wrap@npm:9.2.1" +"@graphql-tools/wrap@npm:8.5.0": + version: 8.5.0 + resolution: "@graphql-tools/wrap@npm:8.5.0" dependencies: - "@graphql-tools/delegate": 9.0.6 - "@graphql-tools/schema": 9.0.4 - "@graphql-tools/utils": 8.12.0 + "@graphql-tools/delegate": 8.8.0 + "@graphql-tools/schema": 8.5.0 + "@graphql-tools/utils": 8.8.0 tslib: ^2.4.0 value-or-promise: 1.0.11 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 601b3e389db9f62c0cf208b22bbcb5640eed7c678ad02c8e3b784961a2e6e7e92aeae7f2070d9a5f15de99dfaf26ea70fb1f87c3f26f56f84f4a0f40690c9b3f + checksum: d2eaed461dad099f3f8b56ba9172b58967def4ebd32b2eacf906b9447025220a2f0a0782b42a087e5579383a67c8029cd451643ec8b751bff8ea778cdc0399da languageName: node linkType: hard -"@graphql-tools/wrap@npm:^8.3.1": +"@graphql-tools/wrap@npm:8.5.1": version: 8.5.1 resolution: "@graphql-tools/wrap@npm:8.5.1" dependencies: @@ -8034,7 +9087,22 @@ __metadata: languageName: node linkType: hard -"@graphql-typed-document-node/core@npm:^3.1.0, @graphql-typed-document-node/core@npm:^3.1.1": +"@graphql-tools/wrap@npm:^8.3.1": + version: 8.4.16 + resolution: "@graphql-tools/wrap@npm:8.4.16" + dependencies: + "@graphql-tools/delegate": 8.7.7 + "@graphql-tools/schema": 8.3.10 + "@graphql-tools/utils": 8.6.9 + tslib: ~2.3.0 + value-or-promise: 1.0.11 + peerDependencies: + graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 + checksum: d369133824f44fbb5d0ab8d3dcd27c98594e082514acbaf6bb0fc0d178c34d214a80079235b3f26a8d04f860276782087d24bc9a10c016eaa60b6896781c8786 + languageName: node + linkType: hard + +"@graphql-typed-document-node/core@npm:^3.1.0": version: 3.1.1 resolution: "@graphql-typed-document-node/core@npm:3.1.1" peerDependencies: @@ -8043,13 +9111,28 @@ __metadata: languageName: node linkType: hard -"@grpc/grpc-js@npm:~1.7.0": - version: 1.7.0 - resolution: "@grpc/grpc-js@npm:1.7.0" +"@grpc/grpc-js@npm:~1.6.0": + version: 1.6.7 + resolution: "@grpc/grpc-js@npm:1.6.7" dependencies: - "@grpc/proto-loader": ^0.7.0 + "@grpc/proto-loader": ^0.6.4 "@types/node": ">=12.12.47" - checksum: 22eee49f9f5aea1abf9566426d993fe4457c94c2afacd3dfb932cc46dbc06ad6ce8f1422fac357d592dd0c75a5cf03405ea15310064ab3c45e1e418f22c48c2b + checksum: 2668b08c2eec433970561384b22cf81443106835077ff1d8b7989cb5519fb7d2284c7a46b6ae94968f3b488ffbd9326ba9b4fbe4971a185d3b89eb0ee99e4fcd + languageName: node + linkType: hard + +"@grpc/proto-loader@npm:^0.6.12, @grpc/proto-loader@npm:^0.6.4": + version: 0.6.12 + resolution: "@grpc/proto-loader@npm:0.6.12" + dependencies: + "@types/long": ^4.0.1 + lodash.camelcase: ^4.3.0 + long: ^4.0.0 + protobufjs: ^6.10.0 + yargs: ^16.2.0 + bin: + proto-loader-gen-types: build/bin/proto-loader-gen-types.js + checksum: 19bb53811e650e9a975cafa1e0cb084870235cff957695a38a8429c4a71435d584740c1d780fb51882ff4d4863cb9c81393d4dc25c55f5078be283f5ea5289a9 languageName: node linkType: hard @@ -8069,18 +9152,18 @@ __metadata: linkType: hard "@hapi/hoek@npm:^9.0.0": - version: 9.3.0 - resolution: "@hapi/hoek@npm:9.3.0" - checksum: 4771c7a776242c3c022b168046af4e324d116a9d2e1d60631ee64f474c6e38d1bb07092d898bf95c7bc5d334c5582798a1456321b2e53ca817d4e7c88bc25b43 + version: 9.0.4 + resolution: "@hapi/hoek@npm:9.0.4" + checksum: a5503ebaad5407e0c99d0656b0bbc3e9ccac9eddc9b9f66e0358a2da9a9dd173c63c9f7c5e46504a05e1fc41d853e9a19617e258d4fcbe1a4be7f9e61da83920 languageName: node linkType: hard "@hapi/topo@npm:^5.0.0": - version: 5.1.0 - resolution: "@hapi/topo@npm:5.1.0" + version: 5.0.0 + resolution: "@hapi/topo@npm:5.0.0" dependencies: "@hapi/hoek": ^9.0.0 - checksum: 604dfd5dde76d5c334bd03f9001fce69c7ce529883acf92da96f4fe7e51221bf5e5110e964caca287a6a616ba027c071748ab636ff178ad750547fba611d6014 + checksum: 8aa81f71696f88d7daeab4547e120e43c6ab78081a4f215eec5103dd858f3122a703512cdacc43aa7e27d99607345165acfeb2ee69e556e63afd50c5c57a36c3 languageName: node linkType: hard @@ -8227,9 +9310,9 @@ __metadata: linkType: soft "@ioredis/commands@npm:^1.1.1": - version: 1.2.0 - resolution: "@ioredis/commands@npm:1.2.0" - checksum: 9b20225ba36ef3e5caf69b3c0720597c3016cc9b1e157f519ea388f621dd9037177f84cfe7e25c4c32dad7dd90c70ff9123cd411f747e053cf292193c9c461e2 + version: 1.1.1 + resolution: "@ioredis/commands@npm:1.1.1" + checksum: 66a9dc315dc077826fef4057c027c77c5af3fba247e6a5156c6847700fec8968a1b180bca344120ad561f5654cda54ed63119f790a041b0a010cacf02421ecff languageName: node linkType: hard @@ -8241,22 +9324,21 @@ __metadata: linkType: hard "@istanbuljs/load-nyc-config@npm:^1.0.0": - version: 1.1.0 - resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" + version: 1.0.0 + resolution: "@istanbuljs/load-nyc-config@npm:1.0.0" dependencies: camelcase: ^5.3.1 find-up: ^4.1.0 - get-package-type: ^0.1.0 js-yaml: ^3.13.1 resolve-from: ^5.0.0 - checksum: d578da5e2e804d5c93228450a1380e1a3c691de4953acc162f387b717258512a3e07b83510a936d9fab03eac90817473917e24f5d16297af3867f59328d58568 + checksum: 6671bd5029a30c1215106d12f870a67a0f6d58f1e038173c84e0006f22f6e724eeee9e5ca8ae1bcb3e741d8ec4fd4390fdf92092c66302a3db189e16446c9cfc languageName: node linkType: hard "@istanbuljs/schema@npm:^0.1.2": - version: 0.1.3 - resolution: "@istanbuljs/schema@npm:0.1.3" - checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 + version: 0.1.2 + resolution: "@istanbuljs/schema@npm:0.1.2" + checksum: 5ce9facf2f0e3f4a93e56853cdfd78456e22d2c210c677530046e9c634ddc323dd62423ac711cd3554b5be06052c87fb8e0c266aa9010726940654c357290e78 languageName: node linkType: hard @@ -8336,15 +9418,6 @@ __metadata: languageName: node linkType: hard -"@jest/expect-utils@npm:^29.0.3": - version: 29.0.3 - resolution: "@jest/expect-utils@npm:29.0.3" - dependencies: - jest-get-type: ^29.0.0 - checksum: af6fa6e0b9cdf42f5778ff0b70c2049ec768598f720ea473773e0c0bebd2416a32ecbede94cfdc95572a021eda5302a9295a5c416ad5ce155c4ec277c40129da - languageName: node - linkType: hard - "@jest/fake-timers@npm:^27.5.1": version: 27.5.1 resolution: "@jest/fake-timers@npm:27.5.1" @@ -8408,15 +9481,6 @@ __metadata: languageName: node linkType: hard -"@jest/schemas@npm:^29.0.0": - version: 29.0.0 - resolution: "@jest/schemas@npm:29.0.0" - dependencies: - "@sinclair/typebox": ^0.24.1 - checksum: 41355c78f09eb1097e57a3c5d0ca11c9099e235e01ea5fa4e3953562a79a6a9296c1d300f1ba50ca75236048829e056b00685cd2f1ff8285e56fd2ce01249acb - languageName: node - linkType: hard - "@jest/source-map@npm:^27.5.1": version: 27.5.1 resolution: "@jest/source-map@npm:27.5.1" @@ -8475,6 +9539,19 @@ __metadata: languageName: node linkType: hard +"@jest/types@npm:^27.2.5": + version: 27.2.5 + resolution: "@jest/types@npm:27.2.5" + dependencies: + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^16.0.0 + chalk: ^4.0.0 + checksum: 322603c24354a5333b5b7a670464422a46e0244a5a96a35552a7018eb4ac2e84c3b7657336b0ea6aa114963f9b6d0da8b8f6f963cb044fea9e7bc04d464b0ab1 + languageName: node + linkType: hard + "@jest/types@npm:^27.5.1": version: 27.5.1 resolution: "@jest/types@npm:27.5.1" @@ -8488,20 +9565,6 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^29.0.3": - version: 29.0.3 - resolution: "@jest/types@npm:29.0.3" - dependencies: - "@jest/schemas": ^29.0.0 - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^3.0.0 - "@types/node": "*" - "@types/yargs": ^17.0.8 - chalk: ^4.0.0 - checksum: 3bd33e64d87a5421b860396ac7f7b9b8d5abbf0f300f4379bb20c8e3a6169fbbd078933ce0649827cd63e23330c4effeb6b222fa94e8dd0df638dfff6c1fed41 - languageName: node - linkType: hard - "@jimp/bmp@npm:^0.10.3": version: 0.10.3 resolution: "@jimp/bmp@npm:0.10.3" @@ -8963,16 +10026,6 @@ __metadata: languageName: node linkType: hard -"@jridgewell/gen-mapping@npm:^0.1.0": - version: 0.1.1 - resolution: "@jridgewell/gen-mapping@npm:0.1.1" - dependencies: - "@jridgewell/set-array": ^1.0.0 - "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: 3bcc21fe786de6ffbf35c399a174faab05eb23ce6a03e8769569de28abbf4facc2db36a9ddb0150545ae23a8d35a7cf7237b2aa9e9356a7c626fb4698287d5cc - languageName: node - linkType: hard - "@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": version: 0.3.2 resolution: "@jridgewell/gen-mapping@npm:0.3.2" @@ -8991,7 +10044,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/set-array@npm:^1.0.0, @jridgewell/set-array@npm:^1.0.1": +"@jridgewell/set-array@npm:^1.0.1": version: 1.1.2 resolution: "@jridgewell/set-array@npm:1.1.2" checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e @@ -9025,7 +10078,17 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.14, @jridgewell/trace-mapping@npm:^0.3.9": +"@jridgewell/trace-mapping@npm:^0.3.0": + version: 0.3.4 + resolution: "@jridgewell/trace-mapping@npm:0.3.4" + dependencies: + "@jridgewell/resolve-uri": ^3.0.3 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: ab8bce84bbbc8c34f3ba8325ed926f8f2d3098983c10442a80c55764c4eb6e47d5b92d8ff20a0dd868c3e76a3535651fd8a0138182c290dbfc8396195685c37b + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.14": version: 0.3.15 resolution: "@jridgewell/trace-mapping@npm:0.3.15" dependencies: @@ -9035,6 +10098,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.14 + resolution: "@jridgewell/trace-mapping@npm:0.3.14" + dependencies: + "@jridgewell/resolve-uri": ^3.0.3 + "@jridgewell/sourcemap-codec": ^1.4.10 + checksum: b9537b9630ffb631aef9651a085fe361881cde1772cd482c257fe3c78c8fd5388d681f504a9c9fe1081b1c05e8f75edf55ee10fdb58d92bbaa8dbf6a7bd6b18c + languageName: node + linkType: hard + "@jsdevtools/ono@npm:^7.1.3": version: 7.1.3 resolution: "@jsdevtools/ono@npm:7.1.3" @@ -9043,25 +10116,32 @@ __metadata: linkType: hard "@juggle/resize-observer@npm:^3.3.1": - version: 3.4.0 - resolution: "@juggle/resize-observer@npm:3.4.0" - checksum: 2505028c05cc2e17639fcad06218b1c4b60f932a4ebb4b41ab546ef8c157031ae377e3f560903801f6d01706dbefd4943b6c4704bf19ed86dfa1c62f1473a570 + version: 3.3.1 + resolution: "@juggle/resize-observer@npm:3.3.1" + checksum: ddabc4044276a2cb57d469c4917206c7e39f2463aa8e3430e33e4eda554412afe29c22afa40e6708b49dad5d56768dc83acd68a704b1dcd49a0906bb96b991b2 languageName: node linkType: hard "@keyv/redis@npm:^2.2.3": - version: 2.5.1 - resolution: "@keyv/redis@npm:2.5.1" + version: 2.3.8 + resolution: "@keyv/redis@npm:2.3.8" dependencies: - ioredis: ^5.2.3 - checksum: 1e61ad21a2ec1c21bbc47b686ace86f2e663bd96299a45e041b392a49f73a2bc12f58fc1683ac25ab543c5761cab8051447aa4ab450db44d1519790269be3bd9 + ioredis: ^5.1.0 + checksum: 7927d870094161db5bf90677008f6a584235162a0981f875a8616d244d2ba1da525858f656f434aea2a923fb39c5ce0cf88fd9720061e5f025c9db59146e6f48 languageName: node linkType: hard "@kubernetes/client-node@npm:^0.17.0": - version: 0.17.1 - resolution: "@kubernetes/client-node@npm:0.17.1" + version: 0.17.0 + resolution: "@kubernetes/client-node@npm:0.17.0" dependencies: + "@types/js-yaml": ^4.0.1 + "@types/node": ^10.12.0 + "@types/request": ^2.47.1 + "@types/stream-buffers": ^3.0.3 + "@types/tar": ^4.0.3 + "@types/underscore": ^1.8.9 + "@types/ws": ^6.0.1 byline: ^5.0.0 execa: 5.0.0 isomorphic-ws: ^4.0.1 @@ -9077,17 +10157,14 @@ __metadata: tslib: ^1.9.3 underscore: ^1.9.1 ws: ^7.3.1 - dependenciesMeta: - openid-client: - optional: true - checksum: 834ab0ca1f8583b06c4102395ad712c115a6f99201f8dd7f0b59c1a0a5da67b006d1fe5857ad909d762b9cf82a75503665df19fdb640bf620f6123ddb36c8872 + checksum: 5a6edce96946966d8b61359ab043b42e69d1b31178133bc3bf4b5a5c9191766986e08f85d6ae814b56546ed20389817a79dca5101342543d79d750f30cba21f7 languageName: node linkType: hard "@leichtgewicht/ip-codec@npm:^2.0.1": - version: 2.0.4 - resolution: "@leichtgewicht/ip-codec@npm:2.0.4" - checksum: 468de1f04d33de6d300892683d7c8aecbf96d1e2c5fe084f95f816e50a054d45b7c1ebfb141a1447d844b86a948733f6eebd92234da8581c84a1ad4de2946a2d + version: 2.0.3 + resolution: "@leichtgewicht/ip-codec@npm:2.0.3" + checksum: 5b6bee0481c82ac05c748322e34ac68aa01757451b4f49f1ab9cc91e420a1ea4cd0fc4678251e6fa41d566a3e3683cca3e179fb767c87845286863ac98b54f15 languageName: node linkType: hard @@ -9894,9 +10971,9 @@ __metadata: linkType: hard "@lezer/common@npm:^1.0.0": - version: 1.0.1 - resolution: "@lezer/common@npm:1.0.1" - checksum: 05bda2b0b90713a511502e1e0c67842996cb86415cd701c46eb49f8fa117552229a4bc7244f1e8e0025e3563294a52911eebd70d06a4bc987280fca5d148c34b + version: 1.0.0 + resolution: "@lezer/common@npm:1.0.0" + checksum: 0ba652b39f9ff073a6a8a3376a74279f2c2d2ccdd4d2bb57c7b607341dbdbf64baf9c23a196314f09349d175623bc73a6a0b6a0eeb2cc63f3a1190fd631f7c31 languageName: node linkType: hard @@ -9910,11 +10987,11 @@ __metadata: linkType: hard "@lezer/lr@npm:^1.0.0": - version: 1.2.3 - resolution: "@lezer/lr@npm:1.2.3" + version: 1.0.0 + resolution: "@lezer/lr@npm:1.0.0" dependencies: "@lezer/common": ^1.0.0 - checksum: 118db077d32f6eb9d6b219c766d7e5715c6c004d89d76ed0137ea2a364aeca67f21dc5924ea67a649b5de1d13bfbb85571923b38536e6995820eb0a5c8844594 + checksum: 1365a2d1fa0a40815a03a635506a0215475b778d8b8907d274b8ee4b0732fcb7266799b50db7c4517254da1d245c153c348fd0d7b1db93b7d66926b9c538ee43 languageName: node linkType: hard @@ -9945,27 +11022,27 @@ __metadata: linkType: hard "@mapbox/node-pre-gyp@npm:^1.0.0": - version: 1.0.10 - resolution: "@mapbox/node-pre-gyp@npm:1.0.10" + version: 1.0.5 + resolution: "@mapbox/node-pre-gyp@npm:1.0.5" dependencies: - detect-libc: ^2.0.0 + detect-libc: ^1.0.3 https-proxy-agent: ^5.0.0 make-dir: ^3.1.0 - node-fetch: ^2.6.7 + node-fetch: ^2.6.1 nopt: ^5.0.0 - npmlog: ^5.0.1 + npmlog: ^4.1.2 rimraf: ^3.0.2 - semver: ^7.3.5 - tar: ^6.1.11 + semver: ^7.3.4 + tar: ^6.1.0 bin: node-pre-gyp: bin/node-pre-gyp - checksum: 1a98db05d955b74dad3814679593df293b9194853698f3f5f1ed00ecd93128cdd4b14fb8767fe44ac6981ef05c23effcfdc88710e7c1de99ccb6f647890597c8 + checksum: c1f182a707f5782e47b77a76e9d6a073fb043999cf9ad965bc86732e88db27ad00926d1602918edb7105f05cde67871b84a178ee9844eb742319ade419636675 languageName: node linkType: hard "@material-table/core@npm:^3.1.0": - version: 3.2.5 - resolution: "@material-table/core@npm:3.2.5" + version: 3.1.0 + resolution: "@material-table/core@npm:3.1.0" dependencies: "@babel/runtime": ^7.12.5 "@date-io/date-fns": ^1.3.13 @@ -9978,13 +11055,12 @@ __metadata: prop-types: ^15.7.2 react-beautiful-dnd: ^13.0.0 react-double-scrollbar: 0.0.15 - uuid: ^3.4.0 peerDependencies: "@date-io/core": ^1.3.13 "@material-ui/core": ^4.11.2 react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 707e85cfcb8c1cfc8eb78ea6991509879f774081d7a54ad428f702fe00478b6d3707d0fd85f4ad443ebcfac0c0cab79c046c4d5083adcbc767615445667b50cf + checksum: c54114733c061d99424859465c25fdd0c51314f533d37269ee41062195bb34b5bd7eabae8e7b14532b90baee9363d00333b00d1619c01b821a7ee974053c4947 languageName: node linkType: hard @@ -10213,52 +11289,52 @@ __metadata: linkType: hard "@microsoft/api-documenter@npm:^7.17.11": - version: 7.19.13 - resolution: "@microsoft/api-documenter@npm:7.19.13" + version: 7.17.11 + resolution: "@microsoft/api-documenter@npm:7.17.11" dependencies: - "@microsoft/api-extractor-model": 7.24.1 + "@microsoft/api-extractor-model": 7.17.2 "@microsoft/tsdoc": 0.14.1 - "@rushstack/node-core-library": 3.51.2 - "@rushstack/ts-command-line": 4.12.3 + "@rushstack/node-core-library": 3.45.4 + "@rushstack/ts-command-line": 4.10.10 colors: ~1.2.1 js-yaml: ~3.13.1 resolve: ~1.17.0 bin: api-documenter: bin/api-documenter - checksum: 3b5ddea06f6acea37102e4acd6784f9a642d34eb3c547ce8d1c0cff3cdbacb4146ce41be3907a797eb7f7be30b05d87b61a27ba0b6af3ebab35daf656efae441 + checksum: 55f5c5d15dc8d97fc0582dc501e84f4ef9b9cbff71e9bf662d6262751ed38e691907f34ab4d57785cf2f03acf82c4957def804f77d1c85383ff2a80da51c7a60 languageName: node linkType: hard -"@microsoft/api-extractor-model@npm:7.24.1, @microsoft/api-extractor-model@npm:^7.17.2": - version: 7.24.1 - resolution: "@microsoft/api-extractor-model@npm:7.24.1" +"@microsoft/api-extractor-model@npm:7.17.2, @microsoft/api-extractor-model@npm:^7.17.2": + version: 7.17.2 + resolution: "@microsoft/api-extractor-model@npm:7.17.2" dependencies: "@microsoft/tsdoc": 0.14.1 "@microsoft/tsdoc-config": ~0.16.1 - "@rushstack/node-core-library": 3.51.2 - checksum: 3c5b688cd4f77324749c5dd15f912a91a7dd8bab71667bdc87b0d999fae8ce84859da9efc99c5e3fd9659d88e0069783d5c1c64232852c4bf88ac38ab9957e19 + "@rushstack/node-core-library": 3.45.4 + checksum: 94c1c63674d85bf69cff9abbf94a1b2d2f5b6e3b651b8483d8949e39424cb29df156b589a297ca19f85ad1ff6380389e58a03198e7fe1ec34b59d5cae2166de7 languageName: node linkType: hard "@microsoft/api-extractor@npm:^7.23.0": - version: 7.31.1 - resolution: "@microsoft/api-extractor@npm:7.31.1" + version: 7.23.0 + resolution: "@microsoft/api-extractor@npm:7.23.0" dependencies: - "@microsoft/api-extractor-model": 7.24.1 + "@microsoft/api-extractor-model": 7.17.2 "@microsoft/tsdoc": 0.14.1 "@microsoft/tsdoc-config": ~0.16.1 - "@rushstack/node-core-library": 3.51.2 - "@rushstack/rig-package": 0.3.15 - "@rushstack/ts-command-line": 4.12.3 + "@rushstack/node-core-library": 3.45.4 + "@rushstack/rig-package": 0.3.11 + "@rushstack/ts-command-line": 4.10.10 colors: ~1.2.1 lodash: ~4.17.15 resolve: ~1.17.0 semver: ~7.3.0 source-map: ~0.6.1 - typescript: ~4.7.4 + typescript: ~4.6.3 bin: api-extractor: bin/api-extractor - checksum: 7c09a2939901e56f77c566466b86bb81d81180da16b6183f052f229c6582a861c6144f9d0cebaf21d19da8ddc3fb3476f6452435fadca876d1076de8bd373f3f + checksum: 61d3609d7aa76bece292551eb9c7a1c04c2fa304962c8b7e97aa3b3add0431a225c022e32993e384a51290e121542c6a6b3ad4be24f5315a4c1501cf821018a2 languageName: node linkType: hard @@ -10270,14 +11346,14 @@ __metadata: linkType: hard "@microsoft/tsdoc-config@npm:~0.16.1": - version: 0.16.2 - resolution: "@microsoft/tsdoc-config@npm:0.16.2" + version: 0.16.1 + resolution: "@microsoft/tsdoc-config@npm:0.16.1" dependencies: - "@microsoft/tsdoc": 0.14.2 + "@microsoft/tsdoc": 0.14.1 ajv: ~6.12.6 jju: ~1.4.0 resolve: ~1.19.0 - checksum: 12b0d703154076bcaac75ca42e804e4fc292672396441e54346d7eadd0d6b57f90980eda2b1bab89b224af86da34a2389f9054002e282011e795ca5919a4386f + checksum: 2b2121803caf6584fe0264ad16f8fa10de68438c0b82bd25f918606052af5312050f38b6abd4bcf3d40f120713aab144762a7a280fa22dd12e5571cd08e348e1 languageName: node linkType: hard @@ -10288,14 +11364,24 @@ __metadata: languageName: node linkType: hard -"@microsoft/tsdoc@npm:0.14.2, @microsoft/tsdoc@npm:^0.14.1": +"@microsoft/tsdoc@npm:^0.14.1": version: 0.14.2 resolution: "@microsoft/tsdoc@npm:0.14.2" checksum: b167c89e916ba73ee20b9c9d5dba6aa3a0de25ed3d50050e8a344dca7cd43cb2e1059bd515c820369b6e708901dd3fda476a42bc643ca74a35671ce77f724a3a languageName: node linkType: hard -"@mswjs/cookies@npm:^0.2.0, @mswjs/cookies@npm:^0.2.2": +"@mswjs/cookies@npm:^0.2.0": + version: 0.2.0 + resolution: "@mswjs/cookies@npm:0.2.0" + dependencies: + "@types/set-cookie-parser": ^2.4.0 + set-cookie-parser: ^2.4.6 + checksum: 218d169df02cda261e68e0203812a68affa6396d0041b23c70c4865cf757bebc47ffe3f66df39b94f666f004da42cb9b56e61f089b21c59e6cb88abce8537f19 + languageName: node + linkType: hard + +"@mswjs/cookies@npm:^0.2.2": version: 0.2.2 resolution: "@mswjs/cookies@npm:0.2.2" dependencies: @@ -10319,7 +11405,7 @@ __metadata: languageName: node linkType: hard -"@mswjs/interceptors@npm:^0.17.2, @mswjs/interceptors@npm:^0.17.5": +"@mswjs/interceptors@npm:^0.17.5": version: 0.17.5 resolution: "@mswjs/interceptors@npm:0.17.5" dependencies: @@ -10335,10 +11421,19 @@ __metadata: languageName: node linkType: hard +"@n1ru4l/graphql-live-query@npm:^0.9.0": + version: 0.9.0 + resolution: "@n1ru4l/graphql-live-query@npm:0.9.0" + peerDependencies: + graphql: ^15.4.0 || ^16.0.0 + checksum: 746c7a2b23440a2daee5737aece454c756bf9f3e77decd53feed921f88907743301b569209d124afde63271b3f9db59a1fb997c0c280205662a7622992057e4a + languageName: node + linkType: hard + "@n1ru4l/push-pull-async-iterable-iterator@npm:^3.1.0": - version: 3.2.0 - resolution: "@n1ru4l/push-pull-async-iterable-iterator@npm:3.2.0" - checksum: 2c7bdbc6c3d8f0aa05c2e3e80c4a856f766e6113a86198fd0df2448117f7cfa71ee2946f6aa7e745caec6ac04d19a5a61c6c80c6fdbf686d43984b3791f0a04d + version: 3.1.0 + resolution: "@n1ru4l/push-pull-async-iterable-iterator@npm:3.1.0" + checksum: 1762a3c9b8c131e575c375450a408360551ae47b7c481c8115a73e2533ded134cc1d365e02c8c058c281b8b91764041568a0525250346c64fe57825877d4d5ab languageName: node linkType: hard @@ -10396,30 +11491,30 @@ __metadata: languageName: node linkType: hard -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" +"@nodelib/fs.scandir@npm:2.1.3": + version: 2.1.3 + resolution: "@nodelib/fs.scandir@npm:2.1.3" dependencies: - "@nodelib/fs.stat": 2.0.5 + "@nodelib/fs.stat": 2.0.3 run-parallel: ^1.1.9 - checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 + checksum: 0054efbba1385629886fe017d99f7045cb8300d6de1923f7a37e05e480c853abbedaff90f6a6b88fd0d406e1cd1e97fb60bd4e059b44468b174f46bef2e21dd1 languageName: node linkType: hard -"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 +"@nodelib/fs.stat@npm:2.0.3, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.3 + resolution: "@nodelib/fs.stat@npm:2.0.3" + checksum: d3612efceea83fb0bec4e64967888ff0c3e5fbbae96121bc526bbbe5529f32fc6f8a785b550f397d20f09c84dc1e5a6c8e9fd7f9b8b62387a8f80f680be8430e languageName: node linkType: hard "@nodelib/fs.walk@npm:^1.2.3": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" + version: 1.2.4 + resolution: "@nodelib/fs.walk@npm:1.2.4" dependencies: - "@nodelib/fs.scandir": 2.1.5 + "@nodelib/fs.scandir": 2.1.3 fastq: ^1.6.0 - checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 + checksum: a971d1dcc1cf593e25651738e915be201053b63775c39c1ee221d2adee6316503ad6043136ceda0e099724875f2d72ea04b3b57c0e3a20b7f280bd3e951ae2e4 languageName: node linkType: hard @@ -10510,29 +11605,29 @@ __metadata: linkType: hard "@npmcli/ci-detect@npm:^1.0.0": - version: 1.4.0 - resolution: "@npmcli/ci-detect@npm:1.4.0" - checksum: c262fc86dd543efb8a721dec39ab333f99861abff5850136c2dcbee58610ccb1f5e66c3c669903b1bcf0668084c1fe6c443a90490fba771223fb6db137e9bfc5 + version: 1.3.0 + resolution: "@npmcli/ci-detect@npm:1.3.0" + checksum: 3ba5e974c71596edf5327def31fd6af02f7ca4ec08bce39f9cfb44132dda748f9f5ad631d6f1b168e983c58d01555d31ff37f26c7d45731a9784fb936a5af11e languageName: node linkType: hard "@npmcli/fs@npm:^1.0.0": - version: 1.1.1 - resolution: "@npmcli/fs@npm:1.1.1" + version: 1.0.0 + resolution: "@npmcli/fs@npm:1.0.0" dependencies: "@gar/promisify": ^1.0.1 semver: ^7.3.5 - checksum: f5ad92f157ed222e4e31c352333d0901df02c7c04311e42a81d8eb555d4ec4276ea9c635011757de20cc476755af33e91622838de573b17e52e2e7703f0a9965 + checksum: f2b4990107dd2a5b18794c89aaff6f62f3a67883d49a20602fdfc353cbc7f8c5fd50edeffdc769e454900e01b8b8e43d0b9eb524d00963d69f3c829be1a2e8ac languageName: node linkType: hard "@npmcli/fs@npm:^2.1.0": - version: 2.1.2 - resolution: "@npmcli/fs@npm:2.1.2" + version: 2.1.0 + resolution: "@npmcli/fs@npm:2.1.0" dependencies: "@gar/promisify": ^1.1.3 semver: ^7.3.5 - checksum: 405074965e72d4c9d728931b64d2d38e6ea12066d4fad651ac253d175e413c06fe4350970c783db0d749181da8fe49c42d3880bd1cbc12cd68e3a7964d820225 + checksum: 6ec6d678af6da49f9dac50cd882d7f661934dd278972ffbaacde40d9eaa2871292d634000a0cca9510f6fc29855fbd4af433e1adbff90a524ec3eaf140f1219b languageName: node linkType: hard @@ -10553,8 +11648,8 @@ __metadata: linkType: hard "@npmcli/git@npm:^3.0.0": - version: 3.0.2 - resolution: "@npmcli/git@npm:3.0.2" + version: 3.0.1 + resolution: "@npmcli/git@npm:3.0.1" dependencies: "@npmcli/promise-spawn": ^3.0.0 lru-cache: ^7.4.4 @@ -10565,7 +11660,7 @@ __metadata: promise-retry: ^2.0.1 semver: ^7.3.5 which: ^2.0.2 - checksum: bdfd1229bb1113ad4883ef89b74b5dc442a2c96225d830491dd0dec4fa83d083b93cde92b6978d4956a8365521e61bc8dc1891fb905c7c693d5d6aa178f2ab44 + checksum: 0e289d11e2d6034652993f2d05f68396d8377603a1c1f983b2d0893e7591a22bcf3896a43c7dfbcc43f03c308a110f0b9ec37e0191e48b0bd1d236e0f57a3ec6 languageName: node linkType: hard @@ -10581,15 +11676,27 @@ __metadata: languageName: node linkType: hard -"@npmcli/map-workspaces@npm:^2.0.0, @npmcli/map-workspaces@npm:^2.0.3": - version: 2.0.4 - resolution: "@npmcli/map-workspaces@npm:2.0.4" +"@npmcli/map-workspaces@npm:^2.0.0": + version: 2.0.0 + resolution: "@npmcli/map-workspaces@npm:2.0.0" + dependencies: + "@npmcli/name-from-folder": ^1.0.1 + glob: ^7.1.6 + minimatch: ^3.0.4 + read-package-json-fast: ^2.0.1 + checksum: 33707f80cc556aca2d748e228bbe62b6d7ae4a6e95b18b94ca64dd72e9c071ace29e7dd140bce4c2f96a238e40030212ee0ac00dda6026c7b2e23b2f173d75c8 + languageName: node + linkType: hard + +"@npmcli/map-workspaces@npm:^2.0.3": + version: 2.0.3 + resolution: "@npmcli/map-workspaces@npm:2.0.3" dependencies: "@npmcli/name-from-folder": ^1.0.1 glob: ^8.0.1 minimatch: ^5.0.1 read-package-json-fast: ^2.0.3 - checksum: cc8d662ac5115ad9822742a11e11d2d32eda74214bd0f4efec30c9cd833975b5b4c8409fe54ddbb451b040b17a943f770976506cba0f26cfccd58d99b5880d6f + checksum: c9878a22168d3f2d8df9e339ed0799628db3ea8502bd623b5bbe7b0dfcac065b3310e4093df94667a4a28ef2c54c02ce6956467a8aaa2e150305f2fe1cd64f9d languageName: node linkType: hard @@ -10606,18 +11713,27 @@ __metadata: linkType: hard "@npmcli/metavuln-calculator@npm:^3.0.1": - version: 3.1.1 - resolution: "@npmcli/metavuln-calculator@npm:3.1.1" + version: 3.1.0 + resolution: "@npmcli/metavuln-calculator@npm:3.1.0" dependencies: cacache: ^16.0.0 json-parse-even-better-errors: ^2.3.1 pacote: ^13.0.3 semver: ^7.3.5 - checksum: dc9846fdb82a1f4274ff8943f81452c75615bd9bca523c862956ea2c32e18c5a4be5572e169104d3a0eb262b7ede72c8dbbc202a4ab3b3f4946fa55f226dcc64 + checksum: 39fb474e239d3f221178f0c2f6089cd4a2fce8183343b7f52f8f9fe0b3cb0a98b386b15c9afe63a0b0dc2ae5302497d00eb2de2f4b3431953dbf05e69d613c9a languageName: node linkType: hard -"@npmcli/move-file@npm:^1.0.1, @npmcli/move-file@npm:^1.1.0": +"@npmcli/move-file@npm:^1.0.1": + version: 1.0.1 + resolution: "@npmcli/move-file@npm:1.0.1" + dependencies: + mkdirp: ^1.0.4 + checksum: 878b39fc1f0b4c0b434ef0a97b80149fb74c5ec06246280238a2bc5f562a3c5e758e31f583c6431eb916537c1505697e4ac7b9f9e68cb28951bf7eb8150de5f0 + languageName: node + linkType: hard + +"@npmcli/move-file@npm:^1.1.0": version: 1.1.2 resolution: "@npmcli/move-file@npm:1.1.2" dependencies: @@ -10628,12 +11744,12 @@ __metadata: linkType: hard "@npmcli/move-file@npm:^2.0.0": - version: 2.0.1 - resolution: "@npmcli/move-file@npm:2.0.1" + version: 2.0.0 + resolution: "@npmcli/move-file@npm:2.0.0" dependencies: mkdirp: ^1.0.4 rimraf: ^3.0.2 - checksum: 52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380 + checksum: 1388777b507b0c592d53f41b9d182e1a8de7763bc625fc07999b8edbc22325f074e5b3ec90af79c89d6987fdb2325bc66d59f483258543c14a43661621f841b0 languageName: node linkType: hard @@ -10706,7 +11822,7 @@ __metadata: languageName: node linkType: hard -"@npmcli/run-script@npm:^3.0.0, @npmcli/run-script@npm:^3.0.2": +"@npmcli/run-script@npm:^3.0.0, @npmcli/run-script@npm:^3.0.1, @npmcli/run-script@npm:^3.0.2": version: 3.0.3 resolution: "@npmcli/run-script@npm:3.0.3" dependencies: @@ -10718,19 +11834,6 @@ __metadata: languageName: node linkType: hard -"@npmcli/run-script@npm:^4.1.0": - version: 4.2.1 - resolution: "@npmcli/run-script@npm:4.2.1" - dependencies: - "@npmcli/node-gyp": ^2.0.0 - "@npmcli/promise-spawn": ^3.0.0 - node-gyp: ^9.0.0 - read-package-json-fast: ^2.0.3 - which: ^2.0.2 - checksum: 7b8d6676353f157e68b26baf848e01e5d887bcf90ce81a52f23fc9a5d93e6ffb60057532d664cfd7aeeb76d464d0c8b0d314ee6cccb56943acb3b6c570b756c8 - languageName: node - linkType: hard - "@nuxtjs/opencollective@npm:0.3.2": version: 0.3.2 resolution: "@nuxtjs/opencollective@npm:0.3.2" @@ -10745,17 +11848,17 @@ __metadata: linkType: hard "@octokit/app@npm:^13.0.5": - version: 13.0.8 - resolution: "@octokit/app@npm:13.0.8" + version: 13.0.5 + resolution: "@octokit/app@npm:13.0.5" dependencies: "@octokit/auth-app": ^4.0.0 "@octokit/auth-unauthenticated": ^3.0.0 "@octokit/core": ^4.0.0 - "@octokit/oauth-app": ^4.0.7 - "@octokit/plugin-paginate-rest": ^4.0.0 - "@octokit/types": ^7.0.0 + "@octokit/oauth-app": ^4.0.4 + "@octokit/plugin-paginate-rest": ^3.0.0 + "@octokit/types": ^6.27.1 "@octokit/webhooks": ^10.0.0 - checksum: 87c6dbb5872dc2cbf06eee913c8a34d91c963ebfea2f617311b5b833d897e81c39bcc900e518587dde3cb9c61be6f5937663aa6b21a4c7638ee01533524e8d82 + checksum: 15fdff892f0ec82a1121b94e82eb09aad8a868147efecb0613dc44b06aeb8252f5a4caade2d929644fd7fa8bff2df56f1fb702506574dafa3df8653421a6015a languageName: node linkType: hard @@ -10778,52 +11881,64 @@ __metadata: linkType: hard "@octokit/auth-oauth-app@npm:^5.0.0": - version: 5.0.2 - resolution: "@octokit/auth-oauth-app@npm:5.0.2" + version: 5.0.1 + resolution: "@octokit/auth-oauth-app@npm:5.0.1" dependencies: "@octokit/auth-oauth-device": ^4.0.0 "@octokit/auth-oauth-user": ^2.0.0 "@octokit/request": ^5.6.3 - "@octokit/types": ^7.0.0 + "@octokit/types": ^6.0.3 "@types/btoa-lite": ^1.0.0 btoa-lite: ^1.0.0 universal-user-agent: ^6.0.0 - checksum: 3863cdb41c578cb1d2815777ef71ba3d231e4c335d136251ccab8b360e7980b02c93a86d0c91bcf25a2f1dae9b8f1817976077381e74992b907a92de12602a41 + checksum: 8e499a071fa0452805e17cdbeb2df58dab9e2ef5d3a2b3d643c529f86d1048ca5cf629fb573b69894d57af0b8528edf13bef669e7fa399511879833840c8ed02 + languageName: node + linkType: hard + +"@octokit/auth-oauth-device@npm:^3.1.1": + version: 3.1.1 + resolution: "@octokit/auth-oauth-device@npm:3.1.1" + dependencies: + "@octokit/oauth-methods": ^1.1.0 + "@octokit/request": ^5.4.14 + "@octokit/types": ^6.10.0 + universal-user-agent: ^6.0.0 + checksum: e769840fb2953ea7b5d677c249a28766137ed0d2960feee9a5a8eb68737d5f5df0630f855d755f5711823fc11b0a8c2d502288e16c2f577da7aacf0f9853faa6 languageName: node linkType: hard "@octokit/auth-oauth-device@npm:^4.0.0": - version: 4.0.2 - resolution: "@octokit/auth-oauth-device@npm:4.0.2" + version: 4.0.0 + resolution: "@octokit/auth-oauth-device@npm:4.0.0" dependencies: "@octokit/oauth-methods": ^2.0.0 "@octokit/request": ^6.0.0 - "@octokit/types": ^7.0.0 + "@octokit/types": ^6.10.0 universal-user-agent: ^6.0.0 - checksum: 49cd76ae8644fa537a6dd0155b85321a46a517d2064a0cb69ee2a9cfa5b081cd70a906958e002ee4e63895e966d942a28b2be9c527490f25b8685e229d17addd + checksum: 171304f616edf860dcf6980f90bad8bbefb9c093107241791fee7f6d8dcd708dd7c52c601299b37038b53108b874c8d164fffcaa206eecd13b2f9babc60e2f66 languageName: node linkType: hard "@octokit/auth-oauth-user@npm:^2.0.0": - version: 2.0.3 - resolution: "@octokit/auth-oauth-user@npm:2.0.3" + version: 2.0.0 + resolution: "@octokit/auth-oauth-user@npm:2.0.0" dependencies: - "@octokit/auth-oauth-device": ^4.0.0 - "@octokit/oauth-methods": ^2.0.0 + "@octokit/auth-oauth-device": ^3.1.1 + "@octokit/oauth-methods": ^1.1.0 "@octokit/request": ^6.0.0 - "@octokit/types": ^7.0.0 + "@octokit/types": ^6.12.2 btoa-lite: ^1.0.0 universal-user-agent: ^6.0.0 - checksum: a62f85021bf251de3987abdda747079f5b479d37de898f35c92816dda0e538a8837e1487ee639414fa83ab710d786c8bc1ea84c39c6a505f5d47dcc45beb9fb7 + checksum: a9a939e9b1ba79793634234393dbcdc9cda33c84cb2b580d7090c1a737a87cd1b8c35fad42573fc1c84c20ffd4f22ba8d6047ab3af2b10f11a1f870236b8a0a9 languageName: node linkType: hard "@octokit/auth-token@npm:^2.4.4": - version: 2.5.0 - resolution: "@octokit/auth-token@npm:2.5.0" + version: 2.4.4 + resolution: "@octokit/auth-token@npm:2.4.4" dependencies: - "@octokit/types": ^6.0.3 - checksum: 45949296c09abcd6beb4c3f69d45b0c1f265f9581d2a9683cf4d1800c4cf8259c2f58d58e44c16c20bffb85a0282a176c0d51f4af300e428b863f27b910e6297 + "@octokit/types": ^6.0.0 + checksum: ee2c90af0f3274b482b6e615f7c200928a8f86b0596ec95f0e49219515578990118bf1db3baff723191b0e2a94d82af376f357df0ba9a2d8d732b77e9b801feb languageName: node linkType: hard @@ -10837,31 +11952,30 @@ __metadata: linkType: hard "@octokit/auth-unauthenticated@npm:^3.0.0": - version: 3.0.2 - resolution: "@octokit/auth-unauthenticated@npm:3.0.2" + version: 3.0.0 + resolution: "@octokit/auth-unauthenticated@npm:3.0.0" dependencies: - "@octokit/request-error": ^3.0.0 - "@octokit/types": ^7.0.0 - checksum: 974c52134574e9869d05628b10c4e83fdf0538204fd8a50b055215ad2a02319127fa7394572798af28a5ea0ced0b28876fde70fe4637a546c2777b0c4434cabb + "@octokit/request-error": ^2.1.0 + "@octokit/types": ^6.0.3 + checksum: 3b2674f6ef363ee1053cf7e978f1efaec39b85b695bdf0c7fe25fbef028a125c7e548e7d67b32f823aef1938a85f32bfe8de0a5b6071bf21ca4bff596bc62a56 languageName: node linkType: hard -"@octokit/core@npm:^3.5.1": - version: 3.6.0 - resolution: "@octokit/core@npm:3.6.0" +"@octokit/core@npm:^3.2.3": + version: 3.2.4 + resolution: "@octokit/core@npm:3.2.4" dependencies: "@octokit/auth-token": ^2.4.4 "@octokit/graphql": ^4.5.8 - "@octokit/request": ^5.6.3 - "@octokit/request-error": ^2.0.5 + "@octokit/request": ^5.4.12 "@octokit/types": ^6.0.3 - before-after-hook: ^2.2.0 + before-after-hook: ^2.1.0 universal-user-agent: ^6.0.0 - checksum: f81160129037bd8555d47db60cd5381637b7e3602ad70735a7bdf8f3d250c7b7114a666bb12ef7a8746a326a5d72ed30a1b8f8a5a170007f7285c8e217bef1f0 + checksum: f9d48423e45103c3e759231f0b4671c7d7d481f8fa7ead7316dc3d126465b697fd1a8f7f258950f22f602a58aacb7524b4b9f617d284f74429df7bd51ad67052 languageName: node linkType: hard -"@octokit/core@npm:^4.0.0, @octokit/core@npm:^4.0.4": +"@octokit/core@npm:^4.0.0": version: 4.0.5 resolution: "@octokit/core@npm:4.0.5" dependencies: @@ -10876,6 +11990,21 @@ __metadata: languageName: node linkType: hard +"@octokit/core@npm:^4.0.4": + version: 4.0.4 + resolution: "@octokit/core@npm:4.0.4" + dependencies: + "@octokit/auth-token": ^3.0.0 + "@octokit/graphql": ^5.0.0 + "@octokit/request": ^6.0.0 + "@octokit/request-error": ^3.0.0 + "@octokit/types": ^6.0.3 + before-after-hook: ^2.2.0 + universal-user-agent: ^6.0.0 + checksum: c9ae1e5706ab568a725cc5dba314049fbd37d77f1595dd2c19733abddfd72f4e1d46d6980e212d845dde4625ce5f170af951ac0eb0d7bc09e56a159b88cbe5dd + languageName: node + linkType: hard + "@octokit/endpoint@npm:^6.0.1": version: 6.0.12 resolution: "@octokit/endpoint@npm:6.0.12" @@ -10888,13 +12017,13 @@ __metadata: linkType: hard "@octokit/endpoint@npm:^7.0.0": - version: 7.0.2 - resolution: "@octokit/endpoint@npm:7.0.2" + version: 7.0.1 + resolution: "@octokit/endpoint@npm:7.0.1" dependencies: "@octokit/types": ^7.0.0 is-plain-object: ^5.0.0 universal-user-agent: ^6.0.0 - checksum: 81743b228e903d27e426280a63f1d2c2771b3bda4a2e577f6f25f075a1eb577b6c853b62abed1a6bfa0fa01322dac9b71e2f07c75cd7946d952b1c8f6032d96d + checksum: a0ff70202e8355845e9462df4e56e7ce4b32f15eddfb169d91e9939b7602fb05c78088b9d1ac9936b1655d61a883c7fe7b08e8f60c100ee05f40844bb4a95097 languageName: node linkType: hard @@ -10920,9 +12049,9 @@ __metadata: languageName: node linkType: hard -"@octokit/oauth-app@npm:^4.0.6, @octokit/oauth-app@npm:^4.0.7": - version: 4.0.8 - resolution: "@octokit/oauth-app@npm:4.0.8" +"@octokit/oauth-app@npm:^4.0.4, @octokit/oauth-app@npm:^4.0.6": + version: 4.0.6 + resolution: "@octokit/oauth-app@npm:4.0.6" dependencies: "@octokit/auth-oauth-app": ^5.0.0 "@octokit/auth-oauth-user": ^2.0.0 @@ -10931,9 +12060,20 @@ __metadata: "@octokit/oauth-authorization-url": ^5.0.0 "@octokit/oauth-methods": ^2.0.0 "@types/aws-lambda": ^8.10.83 + aws-lambda: ^1.0.7 fromentries: ^1.3.1 universal-user-agent: ^6.0.0 - checksum: 25324abb6e965963911af8df8f0ce3d61120b455eac99aa7b5c263724cd1ae62d657ac4a1d915c45ad7c55db4723c964f4f7d06e3eacefe676d6ae7f5b31c5cb + dependenciesMeta: + aws-lambda: + optional: true + checksum: 0d7ceadda4668748a436f52f6c4ae3160a4a5c81a92592c0a6cfc75b0a065ed480880d8861efcabc6ca41b3ccf753d1c1044782a6c8d5fb481d6e8a0acf6d32e + languageName: node + linkType: hard + +"@octokit/oauth-authorization-url@npm:^4.3.1": + version: 4.3.1 + resolution: "@octokit/oauth-authorization-url@npm:4.3.1" + checksum: 2d8e78d178d55ac63b2405b8421dc5443a79b3583c4eedd8de8342c7ee48e122c5887361adeb2bddf13f84f49b2ac747b99d035f85747aac165582161dc6a9de languageName: node linkType: hard @@ -10944,16 +12084,36 @@ __metadata: languageName: node linkType: hard +"@octokit/oauth-methods@npm:^1.1.0": + version: 1.2.2 + resolution: "@octokit/oauth-methods@npm:1.2.2" + dependencies: + "@octokit/oauth-authorization-url": ^4.3.1 + "@octokit/request": ^5.4.14 + "@octokit/request-error": ^2.0.5 + "@octokit/types": ^6.12.2 + btoa-lite: ^1.0.0 + checksum: 36df0292335cc896dbb1f2bcf03b29c693cd270b8213b4b6c291696e3354bdf47f3700a7cdc54bcd9d718be1b7bf00ed1703fd6ba134d33a009d2508c2bd0090 + languageName: node + linkType: hard + "@octokit/oauth-methods@npm:^2.0.0": - version: 2.0.3 - resolution: "@octokit/oauth-methods@npm:2.0.3" + version: 2.0.2 + resolution: "@octokit/oauth-methods@npm:2.0.2" dependencies: "@octokit/oauth-authorization-url": ^5.0.0 "@octokit/request": ^6.0.0 "@octokit/request-error": ^3.0.0 - "@octokit/types": ^7.0.0 + "@octokit/types": ^6.12.2 btoa-lite: ^1.0.0 - checksum: 9cc4635128eb665217ed8ba0aaeb245fd14a09c2c4781e58346e1716cfa122482de9ea5b46a5a763526c71068e6700539da3af451bb9bc7059218a9fb7be352f + checksum: 008b0fc52b175fee8ff7d0505ff86bf4e4bc1b69d2c3e6dff9f5a3abbdaefc4730d624ebbc8df8366b7639f9543037d1d22a1ffae180a429182721e8a106d737 + languageName: node + linkType: hard + +"@octokit/openapi-types@npm:^11.2.0": + version: 11.2.0 + resolution: "@octokit/openapi-types@npm:11.2.0" + checksum: eb373ea496bc96bf0233505a0916eb38cb193d1829cab935e1cf1fd21839c402a1d835d3c0326290c756c0ed980a64d0ae73ad3c5d5decde9000f0828aa7ff52 languageName: node linkType: hard @@ -10964,10 +12124,17 @@ __metadata: languageName: node linkType: hard -"@octokit/openapi-types@npm:^13.11.0": - version: 13.12.0 - resolution: "@octokit/openapi-types@npm:13.12.0" - checksum: d8f2598d95b7031799af54c6af0bfcd03f59372f417248a7bf04f60d1ac79019d41aff3ed5285760bd80e3b674a611043385ace4067346277e8c95ff6437a2e7 +"@octokit/openapi-types@npm:^13.0.0": + version: 13.0.1 + resolution: "@octokit/openapi-types@npm:13.0.1" + checksum: a54dcd7af90470737f4e1ff071d1d5b6d963210f31a658bb17ccb618e5d52164ec1e9cfd3ff3e50a28eccda262fbb20a46b65e70697fc483ccb32a49e444718c + languageName: node + linkType: hard + +"@octokit/openapi-types@npm:^7.3.2": + version: 7.4.0 + resolution: "@octokit/openapi-types@npm:7.4.0" + checksum: a480cd1fb3d167b9a55e9cc1a8112086b00a0be67e4010d4b05009ed2fff9e70d21ffad293fbbf5f35c66e64b263eb61277f99926044c6b4d956ada6791eb89e languageName: node linkType: hard @@ -10978,25 +12145,45 @@ __metadata: languageName: node linkType: hard -"@octokit/plugin-paginate-rest@npm:^2.16.8": - version: 2.21.3 - resolution: "@octokit/plugin-paginate-rest@npm:2.21.3" +"@octokit/plugin-paginate-rest@npm:^2.6.2": + version: 2.7.0 + resolution: "@octokit/plugin-paginate-rest@npm:2.7.0" dependencies: - "@octokit/types": ^6.40.0 + "@octokit/types": ^6.0.1 peerDependencies: "@octokit/core": ">=2" - checksum: acf31de2ba4021bceec7ff49c5b0e25309fc3c009d407f153f928ddf436ab66cd4217344138378d5523f5fb233896e1db58c9c7b3ffd9612a66d760bc5d319ed + checksum: 68a61e6acb07965a5bd8be5302aeaa46d8e9038e65fa047a85f834fc25c4773f085a878e73eac79c072cb0ace7e4e5187c8549ab6c6d749e620e0f341ee83835 + languageName: node + linkType: hard + +"@octokit/plugin-paginate-rest@npm:^3.0.0": + version: 3.0.0 + resolution: "@octokit/plugin-paginate-rest@npm:3.0.0" + dependencies: + "@octokit/types": ^6.39.0 + peerDependencies: + "@octokit/core": ">=4" + checksum: 1d2c900254f3dcd43f7ba69dfd12ff63f93a0d39a1bf542b1d0f006e95da4924ae0a26044c864ad7fb0309047f44becaf76293aae334d14c946910d65edd2523 languageName: node linkType: hard "@octokit/plugin-paginate-rest@npm:^4.0.0": - version: 4.3.1 - resolution: "@octokit/plugin-paginate-rest@npm:4.3.1" + version: 4.0.0 + resolution: "@octokit/plugin-paginate-rest@npm:4.0.0" dependencies: - "@octokit/types": ^7.5.0 + "@octokit/types": ^7.0.0 peerDependencies: "@octokit/core": ">=4" - checksum: 96d420fc9944cd3cb67c41d47781ee00d406e34622ed6a6cc1995ee9602e1ab23b51e30f5a5d3b80d4b62879234e0c21fe6c654b267ccb9550379f2e0051e681 + checksum: a3fbc1d540cc919df8935dea88b36d59ae85f417713476d8679f1cf8b733cfb44b96d3020094bd7f8daa7b84e4ac9b8403c1cdad323289d586fdb2ed1dcae7c0 + languageName: node + linkType: hard + +"@octokit/plugin-request-log@npm:^1.0.2": + version: 1.0.2 + resolution: "@octokit/plugin-request-log@npm:1.0.2" + peerDependencies: + "@octokit/core": ">=3" + checksum: b28fc7b588b8a205396b01b6be61c2aeac6f2a67180aec1d8185b3e0df7eae7b355a8dddcab8dd3b250de0eba90bdd7fa1daff5ec76ff03491f7707b3544a79f languageName: node linkType: hard @@ -11009,27 +12196,27 @@ __metadata: languageName: node linkType: hard -"@octokit/plugin-rest-endpoint-methods@npm:^5.12.0": - version: 5.16.2 - resolution: "@octokit/plugin-rest-endpoint-methods@npm:5.16.2" +"@octokit/plugin-rest-endpoint-methods@npm:5.3.1": + version: 5.3.1 + resolution: "@octokit/plugin-rest-endpoint-methods@npm:5.3.1" dependencies: - "@octokit/types": ^6.39.0 + "@octokit/types": ^6.16.2 deprecation: ^2.3.1 peerDependencies: "@octokit/core": ">=3" - checksum: 30fcc50c335d1093f03573d9fa3a4b7d027fc98b215c43e07e82ee8dabfa0af0cf1b963feb542312ae32d897a2f68dc671577206f30850215517bebedc5a2c73 + checksum: 7bc7e294dd66af4b2692ce93d28544f2c3473b4fbe5d935cbe6f7765339e5a83bb12977a403af5d093e8fd038fa707bfd68f81b9d38d4038391de64be73d003c languageName: node linkType: hard "@octokit/plugin-rest-endpoint-methods@npm:^6.0.0": - version: 6.6.2 - resolution: "@octokit/plugin-rest-endpoint-methods@npm:6.6.2" + version: 6.3.0 + resolution: "@octokit/plugin-rest-endpoint-methods@npm:6.3.0" dependencies: - "@octokit/types": ^7.5.0 + "@octokit/types": ^7.0.0 deprecation: ^2.3.1 peerDependencies: "@octokit/core": ">=3" - checksum: 3c3fe12e6f0463aeb77b6a7ea6da0b1928ed179b27745c778c32ead3796fe4352322dc103095d141d548aa6b0d91bb0196e4a2d5d60cd71fc820c3774e23c1f4 + checksum: 8fefbdcfc16fe39aa216c440cf52c2861f6c0c905f1fdfbd0e720fb59815c079100b877535bcd428cb782ef31a8d508470d69d4ecf307b8af4ccc34a5669c050 languageName: node linkType: hard @@ -11044,14 +12231,14 @@ __metadata: linkType: hard "@octokit/plugin-throttling@npm:^4.0.1": - version: 4.3.0 - resolution: "@octokit/plugin-throttling@npm:4.3.0" + version: 4.0.1 + resolution: "@octokit/plugin-throttling@npm:4.0.1" dependencies: - "@octokit/types": ^7.0.0 + "@octokit/types": ^6.0.1 bottleneck: ^2.15.3 peerDependencies: "@octokit/core": ^4.0.0 - checksum: f2c23c070c9a1afee80a195a4da66dca568be40be3be5532bb32eabc0e22a53ab591f7109a9499ac9eaebbc873c08cca48c90e4f8af2e2010db5f8bd99e280ae + checksum: 7642e5968922b8348510782e7675189810d6ed6cb3fc6ae231fd4614ebdb011759628c8f5fbca40f37e5a2cf69898b8b58cdb7722ae75da59012430c6cf7b4d8 languageName: node linkType: hard @@ -11077,7 +12264,7 @@ __metadata: languageName: node linkType: hard -"@octokit/request@npm:^5.6.0, @octokit/request@npm:^5.6.3": +"@octokit/request@npm:^5.4.12, @octokit/request@npm:^5.4.14, @octokit/request@npm:^5.6.0, @octokit/request@npm:^5.6.3": version: 5.6.3 resolution: "@octokit/request@npm:5.6.3" dependencies: @@ -11106,14 +12293,14 @@ __metadata: linkType: hard "@octokit/rest@npm:^18.1.0, @octokit/rest@npm:^18.5.3": - version: 18.12.0 - resolution: "@octokit/rest@npm:18.12.0" + version: 18.5.6 + resolution: "@octokit/rest@npm:18.5.6" dependencies: - "@octokit/core": ^3.5.1 - "@octokit/plugin-paginate-rest": ^2.16.8 - "@octokit/plugin-request-log": ^1.0.4 - "@octokit/plugin-rest-endpoint-methods": ^5.12.0 - checksum: c18bd6676a60b66819b016b0f969fcd04d8dfa04d01b7af9af9a7410ff028c621c995185e29454c23c47906da506c1e01620711259989a964ebbfd9106f5b715 + "@octokit/core": ^3.2.3 + "@octokit/plugin-paginate-rest": ^2.6.2 + "@octokit/plugin-request-log": ^1.0.2 + "@octokit/plugin-rest-endpoint-methods": 5.3.1 + checksum: f8db5a06692515413b0124edec2b1d77b35bac99659d4b7b9df2aee01b6b145d7fd6deed602addc79d69429095f1d2fee627e9230cc108f1a389041ab270cb91 languageName: node linkType: hard @@ -11138,7 +12325,16 @@ __metadata: languageName: node linkType: hard -"@octokit/types@npm:^6.0.3, @octokit/types@npm:^6.14.2, @octokit/types@npm:^6.16.1, @octokit/types@npm:^6.39.0, @octokit/types@npm:^6.40.0, @octokit/types@npm:^6.8.2": +"@octokit/types@npm:^6.0.0, @octokit/types@npm:^6.0.1, @octokit/types@npm:^6.10.0, @octokit/types@npm:^6.12.2, @octokit/types@npm:^6.14.2, @octokit/types@npm:^6.16.2, @octokit/types@npm:^6.8.2": + version: 6.16.4 + resolution: "@octokit/types@npm:6.16.4" + dependencies: + "@octokit/openapi-types": ^7.3.2 + checksum: 872dadb1566b874724e6b30a14cf91ae1a9f8664aaaa9d1bb94ce78466291d8cc83ca47aa5bb5baa6260e71fe42100c84f7d52c2df52938dbc9c86359c38cb70 + languageName: node + linkType: hard + +"@octokit/types@npm:^6.0.3, @octokit/types@npm:^6.16.1, @octokit/types@npm:^6.39.0": version: 6.41.0 resolution: "@octokit/types@npm:6.41.0" dependencies: @@ -11147,12 +12343,21 @@ __metadata: languageName: node linkType: hard -"@octokit/types@npm:^7.0.0, @octokit/types@npm:^7.5.0": - version: 7.5.0 - resolution: "@octokit/types@npm:7.5.0" +"@octokit/types@npm:^6.27.1": + version: 6.34.0 + resolution: "@octokit/types@npm:6.34.0" dependencies: - "@octokit/openapi-types": ^13.11.0 - checksum: ded2fa77d939e54e97c9561120c19990781686250a0fbb36c3c8fe63f2c6ab081eca065e67a830a5731e1f0d9a4b8a8c26f858e28e1beb0f0c31aed31284e087 + "@octokit/openapi-types": ^11.2.0 + checksum: f122b9aee8f6baddd515e34a0913e73b21d4bc82d6ee59d77a8aaf01b4a02c10867dd013003d087a83dc96db23511893669015af6d30c27cece185e21cf1df89 + languageName: node + linkType: hard + +"@octokit/types@npm:^7.0.0": + version: 7.0.0 + resolution: "@octokit/types@npm:7.0.0" + dependencies: + "@octokit/openapi-types": ^13.0.0 + checksum: 54d714c1e8296da7ff68eec6a72061313a3f4836793fe844a120aa8604336e03423c631d6316fa2ab00c34aae7a4be0ecb6aed192d04f891084e00674d176fcb languageName: node linkType: hard @@ -11190,11 +12395,12 @@ __metadata: linkType: hard "@openapi-contrib/openapi-schema-to-json-schema@npm:^3.0.0": - version: 3.2.0 - resolution: "@openapi-contrib/openapi-schema-to-json-schema@npm:3.2.0" + version: 3.0.3 + resolution: "@openapi-contrib/openapi-schema-to-json-schema@npm:3.0.3" dependencies: fast-deep-equal: ^3.1.3 - checksum: c47cbf85bee3e38e06a627efbbdffd78c95cdadebf6d935092c8ff616e31a69fcfd739a5d9cca5b4b2c6aef49f8dbced6c300eac1f8ade66b3fab403df19ccb2 + lodash.clonedeep: ^4.5.0 + checksum: 2296925669a4a78548f8ba055fbfc1f292274572ecb082d1465b6a6255799f43f0538880009bf4010b2fa9e7c84e97f8aa04d22b330fd469677c594ed98df314 languageName: node linkType: hard @@ -11236,20 +12442,20 @@ __metadata: linkType: hard "@opentelemetry/api@npm:^1.0.1": - version: 1.2.0 - resolution: "@opentelemetry/api@npm:1.2.0" - checksum: 764efa81bf939200a8e80520a4735b23038abafc60c80420b007ae2bbb7ad843d806894414e95d974c2ef1b81d4ae8a3106804e1af7b5090240cfeb2467db099 + version: 1.0.4 + resolution: "@opentelemetry/api@npm:1.0.4" + checksum: 793e9b5c21666b647a60c58c46c3e00ad1dac38505102b026ad0ef617571d637aca54a18533a73c1e288c95b5ac77e2db17f96467f11833ac1165338e1184260 languageName: node linkType: hard "@peculiar/asn1-schema@npm:^2.1.6": - version: 2.3.0 - resolution: "@peculiar/asn1-schema@npm:2.3.0" + version: 2.2.0 + resolution: "@peculiar/asn1-schema@npm:2.2.0" dependencies: asn1js: ^3.0.5 pvtsutils: ^1.3.2 tslib: ^2.4.0 - checksum: aa510c68de83be94a8d0e96ca1f7c92d2bd790867eed887c0db32d6b2fc49c5dd9d8269648e9665686ba9b2fd8469324c61e04fed50f7aad3f68a0ca0e1cde4b + checksum: 83c8b4e82d8f829ece3ad1aa96d4e2f0c5f16a5255bb066a1174bd020b031d456469d82786a561e5758af0e56d0391ae5e8c6b3657e73d438f49998ff3cf471f languageName: node linkType: hard @@ -11410,13 +12616,6 @@ __metadata: languageName: node linkType: hard -"@remix-run/router@npm:1.0.0": - version: 1.0.0 - resolution: "@remix-run/router@npm:1.0.0" - checksum: 2e7543c71432c49bc0e6cab287ce561c56bf33ad91f929cdbf4c9bd08636bc676f2bf6b048a95fc1f5c74c40600ab59ce248d1de34a1acb7c2e43f567b0e96b5 - languageName: node - linkType: hard - "@rjsf/core@npm:^3.2.1": version: 3.2.1 resolution: "@rjsf/core@npm:3.2.1" @@ -11625,7 +12824,17 @@ __metadata: languageName: node linkType: hard -"@rollup/pluginutils@npm:^4.1.1, @rollup/pluginutils@npm:^4.2.1": +"@rollup/pluginutils@npm:^4.1.1": + version: 4.1.1 + resolution: "@rollup/pluginutils@npm:4.1.1" + dependencies: + estree-walker: ^2.0.1 + picomatch: ^2.2.2 + checksum: 405f681c7d32661980aa3caa928ff22e1c06f0e081db1550e6ab9c179dc9d3d8d63c05dcc7338fe65ab3f856a56c465696a51300b83e98171956fcb141106e39 + languageName: node + linkType: hard + +"@rollup/pluginutils@npm:^4.2.1": version: 4.2.1 resolution: "@rollup/pluginutils@npm:4.2.1" dependencies: @@ -11635,9 +12844,9 @@ __metadata: languageName: node linkType: hard -"@rushstack/node-core-library@npm:3.51.2": - version: 3.51.2 - resolution: "@rushstack/node-core-library@npm:3.51.2" +"@rushstack/node-core-library@npm:3.45.4": + version: 3.45.4 + resolution: "@rushstack/node-core-library@npm:3.45.4" dependencies: "@types/node": 12.20.24 colors: ~1.2.1 @@ -11646,30 +12855,31 @@ __metadata: jju: ~1.4.0 resolve: ~1.17.0 semver: ~7.3.0 + timsort: ~0.3.0 z-schema: ~5.0.2 - checksum: 0f9ac85fccc43220897a307f1b8612e319c49973a7435d43bc2252976d8c01d930bd9c04a6645d3199f39b7564e9c4edd9539b97556e702a339f4b57673d8797 + checksum: f7049be8c145ef1d1ee2ee29b917440a3c88a5e4906c5b6bebe0d4c7854c93b759b7563475be383a4cedf8afd3914b34a6b988fe67b8dfce33545223b2a46cca languageName: node linkType: hard -"@rushstack/rig-package@npm:0.3.15": - version: 0.3.15 - resolution: "@rushstack/rig-package@npm:0.3.15" +"@rushstack/rig-package@npm:0.3.11": + version: 0.3.11 + resolution: "@rushstack/rig-package@npm:0.3.11" dependencies: resolve: ~1.17.0 strip-json-comments: ~3.1.1 - checksum: dd3cfc679ca17d286273eb3e177456d5cae2a5c8d07d26a589f75903966932d985ccd4256b79d14da5b2a20c14c4b19975101db8849abe8c9484c0fa3650f7b8 + checksum: a6354152a9ac7503a217e7903d2739d35f305b2331f880fca94e6f309ba78e86b58fa8eda888238429bc4203a5cef4df4218f80e636fa75290e68875b971697a languageName: node linkType: hard -"@rushstack/ts-command-line@npm:4.12.3": - version: 4.12.3 - resolution: "@rushstack/ts-command-line@npm:4.12.3" +"@rushstack/ts-command-line@npm:4.10.10": + version: 4.10.10 + resolution: "@rushstack/ts-command-line@npm:4.10.10" dependencies: "@types/argparse": 1.0.38 argparse: ~1.0.9 colors: ~1.2.1 string-argv: ~0.3.1 - checksum: d1aa2e4e84801653f0805cdd260b333508c3de37716fe3df77a69ea0d9b59c870054724afd52aa09d64e45c717b62e1bb1072117b2884b6c799ac885cc71480c + checksum: e2d47cbe6df4c47e297ef84b83f1f6f2306ae14cd765066ea966f3e6ed48e1382d20c942a324ff9e389f5e673a9e1ba477f5b9514303709fcf85f28e14cdd26c languageName: node linkType: hard @@ -11684,12 +12894,12 @@ __metadata: languageName: node linkType: hard -"@sideway/address@npm:^4.1.3": - version: 4.1.4 - resolution: "@sideway/address@npm:4.1.4" +"@sideway/address@npm:^4.1.0": + version: 4.1.1 + resolution: "@sideway/address@npm:4.1.1" dependencies: "@hapi/hoek": ^9.0.0 - checksum: b9fca2a93ac2c975ba12e0a6d97853832fb1f4fb02393015e012b47fa916a75ca95102d77214b2a29a2784740df2407951af8c5dde054824c65577fd293c4cdb + checksum: 0a86af89c12d19836ed1e57ad35db6f62711259ed02b2879c5ebac58abdc57e3cd1bffd89dd5c727e57015f13610d788d814ead7b1289c776b32706768daab45 languageName: node linkType: hard @@ -11707,17 +12917,10 @@ __metadata: languageName: node linkType: hard -"@sinclair/typebox@npm:^0.24.1": - version: 0.24.42 - resolution: "@sinclair/typebox@npm:0.24.42" - checksum: 83a3083b71063ad270669308634f7c5b473272da71cbc405343b2ff774d641ec2be0993e0a61386f8ef3f8b786c173dc01921a5bc6627d95657eb98f19f1a4c4 - languageName: node - linkType: hard - "@sindresorhus/is@npm:^4.0.0": - version: 4.6.0 - resolution: "@sindresorhus/is@npm:4.6.0" - checksum: 83839f13da2c29d55c97abc3bc2c55b250d33a0447554997a85c539e058e57b8da092da396e252b11ec24a0279a0bed1f537fa26302209327060643e327f81d2 + version: 4.0.0 + resolution: "@sindresorhus/is@npm:4.0.0" + checksum: 0e010f79820099b0a7cb8e1c982f822fc4407ff65d2898708b04e1675949eb6885a470fd7274843f83b84e0d3b74fe0de1ff9291d66553228d68202daca5bbaf languageName: node linkType: hard @@ -11760,50 +12963,50 @@ __metadata: linkType: hard "@sinonjs/text-encoding@npm:^0.7.1": - version: 0.7.2 - resolution: "@sinonjs/text-encoding@npm:0.7.2" - checksum: fe690002a32ba06906cf87e2e8fe84d1590294586f2a7fd180a65355b53660c155c3273d8011a5f2b77209b819aa7306678ae6e4aea0df014bd7ffd4bbbcf1ab + version: 0.7.1 + resolution: "@sinonjs/text-encoding@npm:0.7.1" + checksum: 130de0bb568c5f8a611ec21d1a4e3f80ab0c5ec333010f49cfc1adc5cba6d8808699c8a587a46b0f0b016a1f4c1389bc96141e773e8460fcbb441875b2e91ba7 languageName: node linkType: hard "@spotify/eslint-config-base@npm:^14.0.0": - version: 14.1.0 - resolution: "@spotify/eslint-config-base@npm:14.1.0" + version: 14.0.1 + resolution: "@spotify/eslint-config-base@npm:14.0.1" peerDependencies: eslint: ">=7.x" - checksum: 41a7688c77bee908529a86b6a7a1e7c2e4f392f768b2f1db675ec53a5213cc0b9d4eaafc04048d2ca35fe1ee8b39c79c19db1fb9bf6afc4aa14c1bfde134b4e7 + checksum: 8893e7c903c07ede7f3a03b5b6af03b65d2f334615d30fecb527ce4d888970168b73dbaef43275f9ece9e7b0193e13e6807e506507b32bdde9b64000cc52c8b1 languageName: node linkType: hard "@spotify/eslint-config-react@npm:^14.0.0": - version: 14.1.0 - resolution: "@spotify/eslint-config-react@npm:14.1.0" + version: 14.0.1 + resolution: "@spotify/eslint-config-react@npm:14.0.1" peerDependencies: eslint: ">=8.x" eslint-plugin-jsx-a11y: 6.x eslint-plugin-react: ">=7.7.0 <8" eslint-plugin-react-hooks: ^4.0.0 - checksum: d4e54469594b92f7e09b94ca5c1bff3a9398eb3a92c93c02f29bd63fe82a0eb30c730da3d30127f9ad599d11815479fd5e9b120816839a37d89449dc444c12f6 + checksum: d8545c3c3967bb8b923bd55dad2c50b5e2eb6d716cd9dcbbfa32417c3a6e786537ee3263ebedae99bd45abe3378acb0879c9644a729820ea61dd5d9e45e55465 languageName: node linkType: hard "@spotify/eslint-config-typescript@npm:^14.0.0": - version: 14.1.0 - resolution: "@spotify/eslint-config-typescript@npm:14.1.0" + version: 14.0.1 + resolution: "@spotify/eslint-config-typescript@npm:14.0.1" peerDependencies: "@typescript-eslint/eslint-plugin": ">=5" "@typescript-eslint/parser": ">=5" eslint: ">=8.x" - checksum: 3350bda1fb567658f52f55ad97bc1fc2c929afbd7fadf6a6ce58e1ab8d632f61bcc0b049871b95454455e3bffdd25fd23841608c82a1a8482314eebbc7a135ae + checksum: faf3ab89880e626d388e9ae212dd3486d6f91ca4d079020066c22d44c3df215dc61439c4e65ef3fc4eb5c3ea9893d5b504a2d251694d7a333d8803991349535b languageName: node linkType: hard "@spotify/prettier-config@npm:^14.0.0": - version: 14.1.0 - resolution: "@spotify/prettier-config@npm:14.1.0" + version: 14.0.1 + resolution: "@spotify/prettier-config@npm:14.0.1" peerDependencies: prettier: 2.x - checksum: e3ab33524944bbf424b38ee1a22fae42442997f3288208b0933f1d9aa0db258540a188e7695be842c00cbda0321a335f74a171204f4b9d90a75187f303a92b17 + checksum: 07fb33ff3bb4678ab3bfe2f6f5da2cfb366de427c544e94178f5f8c75b3708282f7ea1a4344404e4ad1bbc5b38fccfde10795528cdfe7f61a8afed62076f8fe9 languageName: node linkType: hard @@ -11998,126 +13201,126 @@ __metadata: languageName: node linkType: hard -"@swc/core-android-arm-eabi@npm:1.3.1": - version: 1.3.1 - resolution: "@swc/core-android-arm-eabi@npm:1.3.1" +"@swc/core-android-arm-eabi@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-android-arm-eabi@npm:1.2.249" dependencies: "@swc/wasm": 1.2.122 conditions: os=android & cpu=arm languageName: node linkType: hard -"@swc/core-android-arm64@npm:1.3.1": - version: 1.3.1 - resolution: "@swc/core-android-arm64@npm:1.3.1" +"@swc/core-android-arm64@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-android-arm64@npm:1.2.249" dependencies: "@swc/wasm": 1.2.130 conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.1": - version: 1.3.1 - resolution: "@swc/core-darwin-arm64@npm:1.3.1" +"@swc/core-darwin-arm64@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-darwin-arm64@npm:1.2.249" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.1": - version: 1.3.1 - resolution: "@swc/core-darwin-x64@npm:1.3.1" +"@swc/core-darwin-x64@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-darwin-x64@npm:1.2.249" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-freebsd-x64@npm:1.3.1": - version: 1.3.1 - resolution: "@swc/core-freebsd-x64@npm:1.3.1" +"@swc/core-freebsd-x64@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-freebsd-x64@npm:1.2.249" dependencies: "@swc/wasm": 1.2.130 conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.1": - version: 1.3.1 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.1" +"@swc/core-linux-arm-gnueabihf@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.2.249" dependencies: "@swc/wasm": 1.2.130 conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.1": - version: 1.3.1 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.1" +"@swc/core-linux-arm64-gnu@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-linux-arm64-gnu@npm:1.2.249" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.1": - version: 1.3.1 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.1" +"@swc/core-linux-arm64-musl@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-linux-arm64-musl@npm:1.2.249" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.1": - version: 1.3.1 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.1" +"@swc/core-linux-x64-gnu@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-linux-x64-gnu@npm:1.2.249" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.1": - version: 1.3.1 - resolution: "@swc/core-linux-x64-musl@npm:1.3.1" +"@swc/core-linux-x64-musl@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-linux-x64-musl@npm:1.2.249" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.1": - version: 1.3.1 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.1" +"@swc/core-win32-arm64-msvc@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-win32-arm64-msvc@npm:1.2.249" dependencies: "@swc/wasm": 1.2.130 conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.1": - version: 1.3.1 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.1" +"@swc/core-win32-ia32-msvc@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-win32-ia32-msvc@npm:1.2.249" dependencies: "@swc/wasm": 1.2.130 conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.1": - version: 1.3.1 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.1" +"@swc/core-win32-x64-msvc@npm:1.2.249": + version: 1.2.249 + resolution: "@swc/core-win32-x64-msvc@npm:1.2.249" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.2.239": - version: 1.3.1 - resolution: "@swc/core@npm:1.3.1" + version: 1.2.249 + resolution: "@swc/core@npm:1.2.249" dependencies: - "@swc/core-android-arm-eabi": 1.3.1 - "@swc/core-android-arm64": 1.3.1 - "@swc/core-darwin-arm64": 1.3.1 - "@swc/core-darwin-x64": 1.3.1 - "@swc/core-freebsd-x64": 1.3.1 - "@swc/core-linux-arm-gnueabihf": 1.3.1 - "@swc/core-linux-arm64-gnu": 1.3.1 - "@swc/core-linux-arm64-musl": 1.3.1 - "@swc/core-linux-x64-gnu": 1.3.1 - "@swc/core-linux-x64-musl": 1.3.1 - "@swc/core-win32-arm64-msvc": 1.3.1 - "@swc/core-win32-ia32-msvc": 1.3.1 - "@swc/core-win32-x64-msvc": 1.3.1 + "@swc/core-android-arm-eabi": 1.2.249 + "@swc/core-android-arm64": 1.2.249 + "@swc/core-darwin-arm64": 1.2.249 + "@swc/core-darwin-x64": 1.2.249 + "@swc/core-freebsd-x64": 1.2.249 + "@swc/core-linux-arm-gnueabihf": 1.2.249 + "@swc/core-linux-arm64-gnu": 1.2.249 + "@swc/core-linux-arm64-musl": 1.2.249 + "@swc/core-linux-x64-gnu": 1.2.249 + "@swc/core-linux-x64-musl": 1.2.249 + "@swc/core-win32-arm64-msvc": 1.2.249 + "@swc/core-win32-ia32-msvc": 1.2.249 + "@swc/core-win32-x64-msvc": 1.2.249 dependenciesMeta: "@swc/core-android-arm-eabi": optional: true @@ -12147,7 +13350,7 @@ __metadata: optional: true bin: swcx: run_swcx.js - checksum: 68e0dcaf4dc8f5ad0e5d7181f3b095ca78afd8c9de5464fbf3c569eb371845beac35239e700da0c6ec1e09415a98c73fbba21ace278b21bc7aaa079e6544c73a + checksum: c47f17fefccd94fb7be3787e832f3e3fd62c07e22f8bf566435bd1de032efd9fdefb4a64e0eefd684a9a24902509a235afeacb5ed93e03512fa09064bf1e1268 languageName: node linkType: hard @@ -12186,26 +13389,27 @@ __metadata: linkType: hard "@szmarczak/http-timer@npm:^4.0.5": - version: 4.0.6 - resolution: "@szmarczak/http-timer@npm:4.0.6" + version: 4.0.5 + resolution: "@szmarczak/http-timer@npm:4.0.5" dependencies: defer-to-connect: ^2.0.0 - checksum: c29df3bcec6fc3bdec2b17981d89d9c9fc9bd7d0c9bcfe92821dc533f4440bc890ccde79971838b4ceed1921d456973c4180d7175ee1d0023ad0562240a58d95 + checksum: 27b713859bc7d370f81631eea99879a9d496e1def5d33752fccd6c80dba32cde2094f378c8d07d56f236b08afb4b3621fbf6254faaca52b1a8146ece1eba8428 languageName: node linkType: hard -"@tanstack/query-core@npm:4.3.4": - version: 4.3.4 - resolution: "@tanstack/query-core@npm:4.3.4" - checksum: d8cbe18a297114a0e63f3a9bbf0885d8f0a9ff081edf79cc98c59ca555511bfc824dc82da82826dcb870c076224ead1a4420bea505ae10baf406b6400bf1b46d +"@tanstack/query-core@npm:4.2.3": + version: 4.2.3 + resolution: "@tanstack/query-core@npm:4.2.3" + checksum: b37efdc32b1731575eba398eda3b7a4cd3ed25ee1032d5200124c37ab4e58711d310e2e29e9e51284553a7c03c85e55cf8da6833bc3b1e215e0e43e7399ab3ca languageName: node linkType: hard "@tanstack/react-query@npm:^4.1.3": - version: 4.3.4 - resolution: "@tanstack/react-query@npm:4.3.4" + version: 4.2.3 + resolution: "@tanstack/react-query@npm:4.2.3" dependencies: - "@tanstack/query-core": 4.3.4 + "@tanstack/query-core": 4.2.3 + "@types/use-sync-external-store": ^0.0.3 use-sync-external-store: ^1.2.0 peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -12216,7 +13420,7 @@ __metadata: optional: true react-native: optional: true - checksum: 87c43ec85c34bff97f315167554c970d2428391df8f2e2dee8e562ec7f4f7724babc770c24ea8a0714b3d3144fb8b0e0cd65325150c395ca5057245bd44cc813 + checksum: 0a38ae05271e1669c6efd5cc77608103b6dfde577ecdc88c3f0e72953aea11c102c9b5a49fa2ca822f260a68f9f9646c5e847e7d87c99117b2c2e3b1356cbc8b languageName: node linkType: hard @@ -12268,8 +13472,8 @@ __metadata: linkType: hard "@testing-library/dom@npm:^8.0.0, @testing-library/dom@npm:^8.1.0": - version: 8.18.0 - resolution: "@testing-library/dom@npm:8.18.0" + version: 8.11.3 + resolution: "@testing-library/dom@npm:8.11.3" dependencies: "@babel/code-frame": ^7.10.4 "@babel/runtime": ^7.12.5 @@ -12279,7 +13483,7 @@ __metadata: dom-accessibility-api: ^0.5.9 lz-string: ^1.4.4 pretty-format: ^27.0.2 - checksum: 24fd4fad91a5939a300f8a6c0c79d49dc7576823a2c0713d8ee67fea4f41e47e6a3122c04d45cc2844a25ed12bbe59a299d1e2055d53c707c8cad4d672767d13 + checksum: 2245d254b6058590e25de86fb7b3c75e4a31096901a191f80d3efb9fa7e1e273043416f370c8770feb9f3ccc73a1550a877a3b003b593f1728ae828fcb52cd62 languageName: node linkType: hard @@ -12337,11 +13541,11 @@ __metadata: linkType: hard "@testing-library/user-event@npm:^14.0.0": - version: 14.4.3 - resolution: "@testing-library/user-event@npm:14.4.3" + version: 14.3.0 + resolution: "@testing-library/user-event@npm:14.3.0" peerDependencies: "@testing-library/dom": ">=7.21.4" - checksum: 852c48ea6db1c9471b18276617c84fec4320771e466cd58339a732ca3fd73ad35e5a43ae14f51af51a8d0a150dcf60fcaab049ef367871207bea8f92c4b8195e + checksum: cbd5954460496519cb2ff3fa506ca598d7e4c2e3d2f2e129b21909758f5ec87573aad7d6c79aebffd4bd0ea843315b3064a2a76e545f196bd4c82489cb3afc1d languageName: node linkType: hard @@ -12460,16 +13664,16 @@ __metadata: linkType: hard "@types/aria-query@npm:^4.2.0": - version: 4.2.2 - resolution: "@types/aria-query@npm:4.2.2" - checksum: 6f2ce11d91e2d665f3873258db19da752d91d85d3679eb5efcdf9c711d14492287e1e4eb52613b28e60375841a9e428594e745b68436c963d8bad4bf72188df3 + version: 4.2.0 + resolution: "@types/aria-query@npm:4.2.0" + checksum: e4a3748c5511deb88e93c6faf2acb0730233ff75018e9aaed95e3d2833880e9d0eda7e08e4315a827872471779471585671d08bae00ac8b9813fc140194b52e5 languageName: node linkType: hard "@types/aws-lambda@npm:^8.10.83": - version: 8.10.104 - resolution: "@types/aws-lambda@npm:8.10.104" - checksum: a4f0f7e088819d86e289af9d0a2c4066afbf5ee9f0589e212bbac70c3c4d83297c2ae5c354ae3b4d10815785e3dc1517f604ead021b524888db9176e8fdbb511 + version: 8.10.92 + resolution: "@types/aws-lambda@npm:8.10.92" + checksum: 71c44d83a1c88aa6dbc920baedfb2d100b8843a3d210c695ccaafb30dfb75f04398b0e5368100022acbf75c55d456c61774242f20dd70915fc63d85430cbcf8a languageName: node linkType: hard @@ -12482,44 +13686,57 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:^7.0.0, @types/babel__core@npm:^7.1.14": - version: 7.1.19 - resolution: "@types/babel__core@npm:7.1.19" +"@types/babel__core@npm:^7.0.0": + version: 7.1.9 + resolution: "@types/babel__core@npm:7.1.9" dependencies: "@babel/parser": ^7.1.0 "@babel/types": ^7.0.0 "@types/babel__generator": "*" "@types/babel__template": "*" "@types/babel__traverse": "*" - checksum: 8c9fa87a1c2224cbec251683a58bebb0d74c497118034166aaa0491a4e2627998a6621fc71f8a60ffd27d9c0c52097defedf7637adc6618d0331c15adb302338 + checksum: d92c530efc3e50147f7956fc2aa49162508d2c5abffea7818051dfa9a9c9bc263b7d3da7d6fa826669ff8c68d733bbaced2dfdd486282b8bd013ccc3a0a3b7f6 + languageName: node + linkType: hard + +"@types/babel__core@npm:^7.1.14": + version: 7.1.18 + resolution: "@types/babel__core@npm:7.1.18" + dependencies: + "@babel/parser": ^7.1.0 + "@babel/types": ^7.0.0 + "@types/babel__generator": "*" + "@types/babel__template": "*" + "@types/babel__traverse": "*" + checksum: 2e5b5d7c84f347d3789575486e58b0df5c91613abc3d27e716274aba3048518e07e1f068250ba829e2ed58532ccc88da595ce95ba2688e7bbcd7c25a3c6627ed languageName: node linkType: hard "@types/babel__generator@npm:*": - version: 7.6.4 - resolution: "@types/babel__generator@npm:7.6.4" + version: 7.6.1 + resolution: "@types/babel__generator@npm:7.6.1" dependencies: "@babel/types": ^7.0.0 - checksum: 20effbbb5f8a3a0211e95959d06ae70c097fb6191011b73b38fe86deebefad8e09ee014605e0fd3cdaedc73d158be555866810e9166e1f09e4cfd880b874dcb0 + checksum: d4b1f967fdf3fcc9648bce12ed3de5492abe645c643be36a3ce348051a7da405f2fea504821468a99bfb2089e622faa1fa85688ceb482bb6c8c4af85db31a752 languageName: node linkType: hard "@types/babel__template@npm:*": - version: 7.4.1 - resolution: "@types/babel__template@npm:7.4.1" + version: 7.0.2 + resolution: "@types/babel__template@npm:7.0.2" dependencies: "@babel/parser": ^7.1.0 "@babel/types": ^7.0.0 - checksum: 649fe8b42c2876be1fd28c6ed9b276f78152d5904ec290b6c861d9ef324206e0a5c242e8305c421ac52ecf6358fa7e32ab7a692f55370484825c1df29b1596ee + checksum: ce04f0ab702d7d4c753c09e08db3e61e5fc69375ea70f5c991110511b7286124070ca70e260e8074614f8a339424de7e387c08033eaf0a9f5c81a93e350965a8 languageName: node linkType: hard "@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.4, @types/babel__traverse@npm:^7.0.6": - version: 7.18.1 - resolution: "@types/babel__traverse@npm:7.18.1" + version: 7.0.15 + resolution: "@types/babel__traverse@npm:7.0.15" dependencies: "@babel/types": ^7.3.0 - checksum: a7158b13e5e4b844565217d04a0a09c1cf04e67de90972318960028effbd5e7400f2567b72c5f790acffdab9b4adce8d68f435a2f0c2b16e2c9c45994ace98f2 + checksum: 6a45519ebf58e6b1197a0177211099fc3ed613d2a435cf9470c39217af35f29013f7984e1f8c2e160a93b588767cfbbcf0d7f77eae399dfcca18d5257f04cbc2 languageName: node linkType: hard @@ -12559,23 +13776,30 @@ __metadata: linkType: hard "@types/cacheable-request@npm:^6.0.1": - version: 6.0.2 - resolution: "@types/cacheable-request@npm:6.0.2" + version: 6.0.1 + resolution: "@types/cacheable-request@npm:6.0.1" dependencies: "@types/http-cache-semantics": "*" "@types/keyv": "*" "@types/node": "*" "@types/responselike": "*" - checksum: 667d25808dbf46fe104d6f029e0281ff56058d50c7c1b9182774b3e38bb9c1124f56e4c367ba54f92dbde2d1cc573f26eb0e9748710b2822bc0fd1e5498859c6 + checksum: c25b1bfa2f4f2cc1ca8e1bebad99f2e2c502a3fc09b5270765bfd6b57b1b73b9fab7127acb618beb04c646534a21c62b052aa6942bdfc461ee49387ec9975cd5 + languageName: node + linkType: hard + +"@types/caseless@npm:*": + version: 0.12.2 + resolution: "@types/caseless@npm:0.12.2" + checksum: 430d15911184ad11e0a8aa21d1ec15fcc93b90b63570c37bf16ebd34457482bfc8de3f5eb6771e0ef986ce183270d4297823b0f492c346255967e78f7292388b languageName: node linkType: hard "@types/classnames@npm:^2.2.9": - version: 2.3.0 - resolution: "@types/classnames@npm:2.3.0" + version: 2.3.1 + resolution: "@types/classnames@npm:2.3.1" dependencies: classnames: "*" - checksum: e1bd6de60fc5e4ead601838078b10f378d6a66ad21112922856de59a1f450b1361f597aa3ca34f2cc33bc030f950112872fddfde43c5189bec89737a8b237f24 + checksum: 09a17ea08fcb83380921efdfdac94cfa162f87025cae0bf6f4ba508c2fa5f436459ce7612905a3f968fdddb68c03b8e6ff08e762ed2d0c110c5c4fceb244dc55 languageName: node linkType: hard @@ -12658,11 +13882,11 @@ __metadata: linkType: hard "@types/connect@npm:*": - version: 3.4.35 - resolution: "@types/connect@npm:3.4.35" + version: 3.4.33 + resolution: "@types/connect@npm:3.4.33" dependencies: "@types/node": "*" - checksum: fe81351470f2d3165e8b12ce33542eef89ea893e36dd62e8f7d72566dfb7e448376ae962f9f3ea888547ce8b55a40020ca0e01d637fab5d99567673084542641 + checksum: 1220403e0cd05c6f51c03b83eed0f4e086f252d50c13279effd38d8bfea5cae82db012b134d31004cb8e4705f83d8ad62dddd71028baa190bf6f31c8d9ac916b languageName: node linkType: hard @@ -12683,9 +13907,9 @@ __metadata: linkType: hard "@types/cookiejar@npm:*": - version: 2.1.2 - resolution: "@types/cookiejar@npm:2.1.2" - checksum: f6e1903454007f86edd6c3520cbb4d553e1d4e17eaf1f77f6f75e3270f48cc828d74397a113a36942f5fe52f9fa71067bcfa738f53ad468fcca0bc52cb1cbd28 + version: 2.1.1 + resolution: "@types/cookiejar@npm:2.1.1" + checksum: 7b2967a3344e8e646e79e1dc09ef30a70c4ceeb348364c4eb75b56e2f2e695605fbddd40a50f468b2b5932d2ffb58694ba550f0f52d074c972023910c77de2f6 languageName: node linkType: hard @@ -12714,9 +13938,16 @@ __metadata: linkType: hard "@types/d3-color@npm:*": - version: 3.1.0 - resolution: "@types/d3-color@npm:3.1.0" - checksum: b1856f17d6366559a68eaba0164f30727e9dc5eaf1b3a6c8844354da228860240423d19fa4de65bff9da26b4ead8843eab14b1566962665412e8fd82c3810554 + version: 3.0.2 + resolution: "@types/d3-color@npm:3.0.2" + checksum: 9009aa52e41638442ca4884666e694f177b650b46df5d2495f80437659545c9f3afd598ab95c4ff6d0d13e445df4bd893a89887ca3d34239279a37215d148873 + languageName: node + linkType: hard + +"@types/d3-color@npm:^2": + version: 2.0.3 + resolution: "@types/d3-color@npm:2.0.3" + checksum: b4a963b15f4fe0e7e49b0898df3e51b46392d91c21038b7ec61aef0f13e04bd7bcfebf06c9fad9ee92317c9682a105e18942c9295a7e2715855622d4d6fc415a languageName: node linkType: hard @@ -12727,7 +13958,7 @@ __metadata: languageName: node linkType: hard -"@types/d3-interpolate@npm:*, @types/d3-interpolate@npm:^3.0.1": +"@types/d3-interpolate@npm:*": version: 3.0.1 resolution: "@types/d3-interpolate@npm:3.0.1" dependencies: @@ -12736,6 +13967,15 @@ __metadata: languageName: node linkType: hard +"@types/d3-interpolate@npm:^2.0.0": + version: 2.0.2 + resolution: "@types/d3-interpolate@npm:2.0.2" + dependencies: + "@types/d3-color": ^2 + checksum: 78c47193da3c114a7d78580c6f8d9915f11df92ce78fe08d13052cf49fab91dcdca938895a778cdc6f9820ebf16df3e0e339c17491a8c2b1140cdd2e09553084 + languageName: node + linkType: hard + "@types/d3-path@npm:*": version: 3.0.0 resolution: "@types/d3-path@npm:3.0.0" @@ -12750,12 +13990,19 @@ __metadata: languageName: node linkType: hard -"@types/d3-scale@npm:^4.0.2": - version: 4.0.2 - resolution: "@types/d3-scale@npm:4.0.2" +"@types/d3-path@npm:^2": + version: 2.0.1 + resolution: "@types/d3-path@npm:2.0.1" + checksum: 2fe04503ec56de47e2b8482e5a55e2eaf2940444f2cea00a5fb740d52d24bddfe13e900e392c1edebf2127b11557db09aeae6f5669f49a35caac4fe1a9d43b84 + languageName: node + linkType: hard + +"@types/d3-scale@npm:^3.0.0": + version: 3.3.2 + resolution: "@types/d3-scale@npm:3.3.2" dependencies: - "@types/d3-time": "*" - checksum: 6b3c0337f38f82b582d9f3190fde82edfce7ffafb371e5b2464c443137c2660bac644099d259f1f5cc829085eb5688bed0bea2b336a957d0845433bd07bf2ddd + "@types/d3-time": ^2 + checksum: 65dbf85f07a4d6ac26396075b0faa1930cfebb96dc248629d4b82c22457c89161d0f070f9a5554adccee80b959e2c6d7c1ef6b7355743afe91050d71014fe3cf languageName: node linkType: hard @@ -12775,7 +14022,16 @@ __metadata: languageName: node linkType: hard -"@types/d3-shape@npm:^3.0.1, @types/d3-shape@npm:^3.1.0": +"@types/d3-shape@npm:^2.0.0": + version: 2.1.3 + resolution: "@types/d3-shape@npm:2.1.3" + dependencies: + "@types/d3-path": ^2 + checksum: d0855a1e2c11a4ab23367c86ef0cc104e12bf216f2c007fa5955da7179b60b0426d0e9ddbbbdf93d4342e7dd24c7bcfc3a2bc6258744e03fc44ca460a063dcc3 + languageName: node + linkType: hard + +"@types/d3-shape@npm:^3.0.1": version: 3.1.0 resolution: "@types/d3-shape@npm:3.1.0" dependencies: @@ -12784,10 +14040,10 @@ __metadata: languageName: node linkType: hard -"@types/d3-time@npm:*": - version: 3.0.0 - resolution: "@types/d3-time@npm:3.0.0" - checksum: e76adb056daccf80107f4db190ac6deb77e8774f00362bb6c76f178e67f2f217422fe502b654edbc9ac6451f6619045b9f6f5fe0db1ec5520e2ada377af7c72e +"@types/d3-time@npm:^2": + version: 2.1.1 + resolution: "@types/d3-time@npm:2.1.1" + checksum: 115048d0cd312a3172ef7c03615dfbdbd8b92a93fd7b6d9ca93c49c704fcdb9575f4c57955eb54eb757b9834acaaf47fc52eae103d06246c59ae120de4559cbc languageName: node linkType: hard @@ -12854,12 +14110,12 @@ __metadata: linkType: hard "@types/eslint-scope@npm:^3.7.3": - version: 3.7.4 - resolution: "@types/eslint-scope@npm:3.7.4" + version: 3.7.3 + resolution: "@types/eslint-scope@npm:3.7.3" dependencies: "@types/eslint": "*" "@types/estree": "*" - checksum: ea6a9363e92f301cd3888194469f9ec9d0021fe0a397a97a6dd689e7545c75de0bd2153dfb13d3ab532853a278b6572c6f678ce846980669e41029d205653460 + checksum: 6772b05e1b92003d1f295e81bc847a61f4fbe8ddab77ffa49e84ed3f9552513bdde677eb53ef167753901282857dd1d604d9f82eddb34a233495932b2dc3dc17 languageName: node linkType: hard @@ -12873,10 +14129,10 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:*": - version: 1.0.0 - resolution: "@types/estree@npm:1.0.0" - checksum: 910d97fb7092c6738d30a7430ae4786a38542023c6302b95d46f49420b797f21619cdde11fa92b338366268795884111c2eb10356e4bd2c8ad5b92941e9e6443 +"@types/estree@npm:*, @types/estree@npm:^0.0.51": + version: 0.0.51 + resolution: "@types/estree@npm:0.0.51" + checksum: e56a3bcf759fd9185e992e7fdb3c6a5f81e8ff120e871641607581fb3728d16c811702a7d40fa5f869b7f7b4437ab6a87eb8d98ffafeee51e85bbe955932a189 languageName: node linkType: hard @@ -12887,13 +14143,6 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:^0.0.51": - version: 0.0.51 - resolution: "@types/estree@npm:0.0.51" - checksum: e56a3bcf759fd9185e992e7fdb3c6a5f81e8ff120e871641607581fb3728d16c811702a7d40fa5f869b7f7b4437ab6a87eb8d98ffafeee51e85bbe955932a189 - languageName: node - linkType: hard - "@types/event-source-polyfill@npm:^1.0.0": version: 1.0.0 resolution: "@types/event-source-polyfill@npm:1.0.0" @@ -12908,14 +14157,14 @@ __metadata: languageName: node linkType: hard -"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.18, @types/express-serve-static-core@npm:^4.17.5": - version: 4.17.31 - resolution: "@types/express-serve-static-core@npm:4.17.31" +"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.18": + version: 4.17.29 + resolution: "@types/express-serve-static-core@npm:4.17.29" dependencies: "@types/node": "*" "@types/qs": "*" "@types/range-parser": "*" - checksum: 009bfbe1070837454a1056aa710d0390ee5fb8c05dfe5a1691cc3e2ca88dc256f80e1ca27cb51a978681631d2f6431bfc9ec352ea46dd0c6eb183d0170bde5df + checksum: ec4194dc59276ec6dd906887fc377be0cadf4aaa4d535d9052ab9624937ef2b984a8d9da2c11c96979e21f3d9f78f1da93e767dbcec637f7f13d2e3003151145 languageName: node linkType: hard @@ -12930,6 +14179,17 @@ __metadata: languageName: node linkType: hard +"@types/express-serve-static-core@npm:^4.17.5": + version: 4.17.31 + resolution: "@types/express-serve-static-core@npm:4.17.31" + dependencies: + "@types/node": "*" + "@types/qs": "*" + "@types/range-parser": "*" + checksum: 009bfbe1070837454a1056aa710d0390ee5fb8c05dfe5a1691cc3e2ca88dc256f80e1ca27cb51a978681631d2f6431bfc9ec352ea46dd0c6eb183d0170bde5df + languageName: node + linkType: hard + "@types/express-session@npm:^1.17.2": version: 1.17.5 resolution: "@types/express-session@npm:1.17.5" @@ -12949,19 +14209,7 @@ __metadata: languageName: node linkType: hard -"@types/express@npm:*, @types/express@npm:^4.17.13, @types/express@npm:^4.17.6": - version: 4.17.14 - resolution: "@types/express@npm:4.17.14" - dependencies: - "@types/body-parser": "*" - "@types/express-serve-static-core": ^4.17.18 - "@types/qs": "*" - "@types/serve-static": "*" - checksum: 15c1af46d02de834e4a225eccaa9d85c0370fdbb3ed4e1bc2d323d24872309961542b993ae236335aeb3e278630224a6ea002078d39e651d78a3b0356b1eaa79 - languageName: node - linkType: hard - -"@types/express@npm:4.17.13": +"@types/express@npm:*, @types/express@npm:4.17.13, @types/express@npm:^4.17.13, @types/express@npm:^4.17.6": version: 4.17.13 resolution: "@types/express@npm:4.17.13" dependencies: @@ -12997,12 +14245,12 @@ __metadata: linkType: hard "@types/glob@npm:*": - version: 8.0.0 - resolution: "@types/glob@npm:8.0.0" + version: 7.1.3 + resolution: "@types/glob@npm:7.1.3" dependencies: "@types/minimatch": "*" "@types/node": "*" - checksum: 1817b05f5a8aed851d102a65b5e926d5c777bef927ea62b36d635860eef5364f2046bb5a692d135b6f2b28f34e4a9d44ade9396122c0845bcc7636d35f624747 + checksum: e0eef12285f548f15d887145590594a04ccce7f7e645fb047cbac18cb093f25d507ffbcc725312294c224bb78cf980fce33e5807de8d6f8a868b4186253499d4 languageName: node linkType: hard @@ -13058,9 +14306,9 @@ __metadata: linkType: hard "@types/http-cache-semantics@npm:*": - version: 4.0.1 - resolution: "@types/http-cache-semantics@npm:4.0.1" - checksum: 1048aacf627829f0d5f00184e16548205cd9f964bf0841c29b36bc504509230c40bc57c39778703a1c965a6f5b416ae2cbf4c1d4589c889d2838dd9dbfccf6e9 + version: 4.0.0 + resolution: "@types/http-cache-semantics@npm:4.0.0" + checksum: c820774eb1d9d8d0c13077834e870cc1afd2500dc9d0ac1b67abc050c7c115aee4024f90fda65b50babc258de0464fc4459709e4fa12552f65094328e5a551c6 languageName: node linkType: hard @@ -13117,9 +14365,9 @@ __metadata: linkType: hard "@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": - version: 2.0.4 - resolution: "@types/istanbul-lib-coverage@npm:2.0.4" - checksum: a25d7589ee65c94d31464c16b72a9dc81dfa0bea9d3e105ae03882d616e2a0712a9c101a599ec482d297c3591e16336962878cb3eb1a0a62d5b76d277a890ce7 + version: 2.0.1 + resolution: "@types/istanbul-lib-coverage@npm:2.0.1" + checksum: eb8abb8b56fb8f645c46c482c5a438d78fc44ce2eb82a47491d552eba94fc3d81bc404996f220921c16df3eb6126ec01890f4acaebd0f71249b37e110eacdd3a languageName: node linkType: hard @@ -13133,11 +14381,11 @@ __metadata: linkType: hard "@types/istanbul-reports@npm:^3.0.0": - version: 3.0.1 - resolution: "@types/istanbul-reports@npm:3.0.1" + version: 3.0.0 + resolution: "@types/istanbul-reports@npm:3.0.0" dependencies: "@types/istanbul-lib-report": "*" - checksum: f1ad54bc68f37f60b30c7915886b92f86b847033e597f9b34f2415acdbe5ed742fa559a0a40050d74cdba3b6a63c342cac1f3a64dba5b68b66a6941f4abd7903 + checksum: 286a18cff19c4dac4321b9ea406a3560faf577fb2a4df5abf9d577fa81ba831c9baa7d40d03f1daf7fe613d468546b731c00b844b72fad9834c583311a35bb7b languageName: node linkType: hard @@ -13160,12 +14408,12 @@ __metadata: linkType: hard "@types/jest@npm:*": - version: 29.0.3 - resolution: "@types/jest@npm:29.0.3" + version: 27.4.1 + resolution: "@types/jest@npm:27.4.1" dependencies: - expect: ^29.0.0 - pretty-format: ^29.0.0 - checksum: 14a8ec1954540ec59f4072c3c4dbc6b5d5ff616556c98671aca26606bdf9d49616a3f269f3e488c80cd481ee19880351575c1f6895827628818e193600c121e0 + jest-matcher-utils: ^27.0.0 + pretty-format: ^27.0.0 + checksum: 5184f3eef4832d01ee8f59bed15eec45ccc8e29c724a5e6ce37bf74396b37bdf04f557000f45ba4fc38ae6075cf9cfcce3d7a75abc981023c61ceb27230a93e4 languageName: node linkType: hard @@ -13189,9 +14437,9 @@ __metadata: linkType: hard "@types/js-cookie@npm:^2.2.6": - version: 2.2.7 - resolution: "@types/js-cookie@npm:2.2.7" - checksum: 851f47e94ca1fc43661d8f51614d67a613e7810c91b876d0a3b311ce72f7df800107fd02a08cb6948184e12c120b4f058edca2f50424d8798bdcffd6627281e3 + version: 2.2.6 + resolution: "@types/js-cookie@npm:2.2.6" + checksum: 97c50ff6cd0a27409b028aad94b0c4eb5cc43623532a1bdbbcccdb200539593eff3cc7f0d874b6b9bee586167638e3a10093c811ff6603ff2a9639564c82b3b1 languageName: node linkType: hard @@ -13202,7 +14450,7 @@ __metadata: languageName: node linkType: hard -"@types/js-yaml@npm:^4.0.0": +"@types/js-yaml@npm:^4.0.0, @types/js-yaml@npm:^4.0.1": version: 4.0.5 resolution: "@types/js-yaml@npm:4.0.5" checksum: 7dcac8c50fec31643cc9d6444b5503239a861414cdfaa7ae9a38bc22597c4d850c4b8cec3d82d73b3fbca408348ce223b0408d598b32e094470dfffc6d486b4d @@ -13219,6 +14467,13 @@ __metadata: languageName: node linkType: hard +"@types/json-buffer@npm:~3.0.0": + version: 3.0.0 + resolution: "@types/json-buffer@npm:3.0.0" + checksum: 6b0a371dd603f0eec9d00874574bae195382570e832560dadf2193ee0d1062b8e0694bbae9798bc758632361c227b1e3b19e3bd914043b498640470a2da38b77 + languageName: node + linkType: hard + "@types/json-schema-merge-allof@npm:^0.6.0": version: 0.6.1 resolution: "@types/json-schema-merge-allof@npm:0.6.1" @@ -13236,9 +14491,9 @@ __metadata: linkType: hard "@types/json-stable-stringify@npm:^1.0.32": - version: 1.0.34 - resolution: "@types/json-stable-stringify@npm:1.0.34" - checksum: 45767ecef0f6aae5680c3be6488d5c493f16046e34f182d7e6a2c69a667aab035799752c6f03017c883b134ad3f80e3f78d7e7da81a9c1f3d01676126baf5d0e + version: 1.0.32 + resolution: "@types/json-stable-stringify@npm:1.0.32" + checksum: 3091ddc8d15c6cce1a847ba1f8db21e7c2564c7b8bc6923a873801d936228f775096b517d62653fbcebedcb2a7992555dc6ed11517ef050e75525cdf1d1bce8d languageName: node linkType: hard @@ -13250,11 +14505,11 @@ __metadata: linkType: hard "@types/jsonwebtoken@npm:^8.3.3, @types/jsonwebtoken@npm:^8.5.0": - version: 8.5.9 - resolution: "@types/jsonwebtoken@npm:8.5.9" + version: 8.5.0 + resolution: "@types/jsonwebtoken@npm:8.5.0" dependencies: "@types/node": "*" - checksum: 33815ab02d1371b423118316b7706d2f2ec03eeee5e1494be72da50425d2384e5e0a09ea193f7a5ab4b4f6a9c5847147305f50e965f3d927a95bdf8adb471b2a + checksum: e8f9ab96ec5cf76195c0d31cf555371824b673939064efec698ca99525ce46476af54debd1f66bd732e6079e134848b97163797009c4b47a767448a0c6ddaeda languageName: node linkType: hard @@ -13268,20 +14523,20 @@ __metadata: linkType: hard "@types/keyv@npm:*": - version: 3.1.4 - resolution: "@types/keyv@npm:3.1.4" + version: 3.1.1 + resolution: "@types/keyv@npm:3.1.1" dependencies: "@types/node": "*" - checksum: e009a2bfb50e90ca9b7c6e8f648f8464067271fd99116f881073fa6fa76dc8d0133181dd65e6614d5fb1220d671d67b0124aef7d97dc02d7e342ab143a47779d + checksum: ee0d098693bf4af44be756eed02daf95f5d0fd4b5b02da952a5952e08842baddf6a986a9ea5f9e460729782f1a0a47848c892ad96ea188b66a363feb49a1536f languageName: node linkType: hard "@types/ldapjs@npm:^2.2.0": - version: 2.2.4 - resolution: "@types/ldapjs@npm:2.2.4" + version: 2.2.2 + resolution: "@types/ldapjs@npm:2.2.2" dependencies: "@types/node": "*" - checksum: 3f240809927e1292380e5977579d7edffb6e5e41b35510c7091b51da19e7387d4ebff0f254c0b145f3cf5d5485b6bb39c77335d857d092e6f4e9ce5a6682a872 + checksum: e5da993f06240251dad1e095564c722124ed08d915781fb3046f7933cde94b5d2681030ab9f48d4aa5d72b655b501bfd6f2ad4ea41d557d0e1a08d574ed058bf languageName: node linkType: hard @@ -13293,9 +14548,9 @@ __metadata: linkType: hard "@types/lodash@npm:^4.14.151, @types/lodash@npm:^4.14.173, @types/lodash@npm:^4.14.175": - version: 4.14.185 - resolution: "@types/lodash@npm:4.14.185" - checksum: f81d13da5ecab110ca9c5c7cc2bedc3c9802a6acf668576aecd1b8f4b134ed81d06c15f1e600fb08f05975098280a0d97d30cddfc2cb39ec1c6b56e971ca53b3 + version: 4.14.184 + resolution: "@types/lodash@npm:4.14.184" + checksum: 6d9a4d67f7f9d0ec3fd21174f3dd3d00629dc1227eb469450eace53adbc1f7e2330699c28d0fe093e5f0fef0f0e763098be1f779268857213224af082b62be21 languageName: node linkType: hard @@ -13321,9 +14576,9 @@ __metadata: linkType: hard "@types/luxon@npm:*, @types/luxon@npm:^3.0.0": - version: 3.0.1 - resolution: "@types/luxon@npm:3.0.1" - checksum: a81444f9b474ea9b3063ab4cc68b917a2634e38b4e229f86c78c35023a32bf5e8d1044d7c229c011291662c976cb6c4cf109dc3d2077c571790a31779a554178 + version: 3.0.0 + resolution: "@types/luxon@npm:3.0.0" + checksum: 7738d3f4b91097a8139eca966ab53c6b40bb417b2cc2014c3bbd0aee033d6ff54af14c62046c2eb042434923b6bf796874f24b2af90e07ef422e6d841463d4b2 languageName: node linkType: hard @@ -13344,7 +14599,7 @@ __metadata: languageName: node linkType: hard -"@types/mdast@npm:^3.0.0": +"@types/mdast@npm:^3.0.0, @types/mdast@npm:^3.0.3": version: 3.0.10 resolution: "@types/mdast@npm:3.0.10" dependencies: @@ -13367,27 +14622,27 @@ __metadata: languageName: node linkType: hard -"@types/mime@npm:*": - version: 3.0.1 - resolution: "@types/mime@npm:3.0.1" - checksum: 4040fac73fd0cea2460e29b348c1a6173da747f3a87da0dbce80dd7a9355a3d0e51d6d9a401654f3e5550620e3718b5a899b2ec1debf18424e298a2c605346e7 +"@types/mime@npm:^1": + version: 1.3.2 + resolution: "@types/mime@npm:1.3.2" + checksum: 0493368244cced1a69cb791b485a260a422e6fcc857782e1178d1e6f219f1b161793e9f87f5fae1b219af0f50bee24fcbe733a18b4be8fdd07a38a8fb91146fd languageName: node linkType: hard -"@types/minimatch@npm:*, @types/minimatch@npm:^5.0.0": - version: 5.1.2 - resolution: "@types/minimatch@npm:5.1.2" - checksum: 0391a282860c7cb6fe262c12b99564732401bdaa5e395bee9ca323c312c1a0f45efbf34dce974682036e857db59a5c9b1da522f3d6055aeead7097264c8705a8 - languageName: node - linkType: hard - -"@types/minimatch@npm:^3.0.3, @types/minimatch@npm:^3.0.5": +"@types/minimatch@npm:*, @types/minimatch@npm:^3.0.3, @types/minimatch@npm:^3.0.5": version: 3.0.5 resolution: "@types/minimatch@npm:3.0.5" checksum: c41d136f67231c3131cf1d4ca0b06687f4a322918a3a5adddc87ce90ed9dbd175a3610adee36b106ae68c0b92c637c35e02b58c8a56c424f71d30993ea220b92 languageName: node linkType: hard +"@types/minimatch@npm:^5.0.0": + version: 5.1.2 + resolution: "@types/minimatch@npm:5.1.2" + checksum: 0391a282860c7cb6fe262c12b99564732401bdaa5e395bee9ca323c312c1a0f45efbf34dce974682036e857db59a5c9b1da522f3d6055aeead7097264c8705a8 + languageName: node + linkType: hard + "@types/minimist@npm:^1.2.0": version: 1.2.2 resolution: "@types/minimist@npm:1.2.2" @@ -13395,6 +14650,15 @@ __metadata: languageName: node linkType: hard +"@types/minipass@npm:*": + version: 3.3.5 + resolution: "@types/minipass@npm:3.3.5" + dependencies: + minipass: "*" + checksum: 160f4ae5416697c947e0c0ee1225fe25973acf73a30d01bdf202447f12bd32ba3ea33d2fc4f2517a038dc408022a5aff5f7a1d92da0157a9b04276d1b0209550 + languageName: node + linkType: hard + "@types/mock-fs@npm:^4.10.0, @types/mock-fs@npm:^4.13.0": version: 4.13.1 resolution: "@types/mock-fs@npm:4.13.1" @@ -13440,10 +14704,10 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:>= 8, @types/node@npm:>=12.12.47, @types/node@npm:>=13.7.0": - version: 18.7.18 - resolution: "@types/node@npm:18.7.18" - checksum: 8aec61f0f96e2a69ce51f1f40f949ca578bbb4fe05d7c0b8ce3aeeb848e90f755837f17f6ac132ca404d974fe9b2974150ad3b4984fc9dc7c3ceddb10bae0167 +"@types/node@npm:*, @types/node@npm:>=12.12.47, @types/node@npm:>=13.7.0": + version: 17.0.25 + resolution: "@types/node@npm:17.0.25" + checksum: 6a820bd624e69ea772f52a6cdb326484eff5829443dc981939373929ade109f58c21698b9f0a831bd6ceea799e722a75dc49c5fa7a6bc32a81e1cbdfc6507b64 languageName: node linkType: hard @@ -13454,7 +14718,14 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^10.1.0": +"@types/node@npm:>= 8": + version: 18.7.4 + resolution: "@types/node@npm:18.7.4" + checksum: 051d2147e4d8129fceb63ee9384259b2f224dbc4e4b0c46d96a6b61cbaad4e3fe4060950e7f4fc3d5692b1e6ea47e68ad03b61155754bfa169593747cfe3f8f4 + languageName: node + linkType: hard + +"@types/node@npm:^10.1.0, @types/node@npm:^10.12.0": version: 10.17.60 resolution: "@types/node@npm:10.17.60" checksum: 2cdb3a77d071ba8513e5e8306fa64bf50e3c3302390feeaeff1fd325dd25c8441369715dfc8e3701011a72fed5958c7dfa94eb9239a81b3c286caa4d97db6eef @@ -13462,16 +14733,16 @@ __metadata: linkType: hard "@types/node@npm:^12.7.1": - version: 12.20.55 - resolution: "@types/node@npm:12.20.55" - checksum: e4f86785f4092706e0d3b0edff8dca5a13b45627e4b36700acd8dfe6ad53db71928c8dee914d4276c7fd3b6ccd829aa919811c9eb708a2c8e4c6eb3701178c37 + version: 12.20.48 + resolution: "@types/node@npm:12.20.48" + checksum: 48bd705bda1af2332c50fb24819bba7b0eac791b07c24c098c39b10940170a53bd3c4755aedc3409c7114c539f1f86ea657aa6838d164fd135e3b89b9f9aa772 languageName: node linkType: hard "@types/node@npm:^14.14.31": - version: 14.18.29 - resolution: "@types/node@npm:14.18.29" - checksum: 43481c1c066dd01578ff137f437a8a901f8fcd3cdc068c36047c444861ab4aac8a62fb4eb6d03738df02006336c90619bfc7860d4e5b259916956942d2e68e88 + version: 14.18.16 + resolution: "@types/node@npm:14.18.16" + checksum: 1999799309dc8620a2adf9a5d5e48416af87321bae4c950b4aa8018fcef2c3b6c1fcf98c39eae06f6492c03a643a5a44e2bb3750cd2574d9cf7eac33bac50e24 languageName: node linkType: hard @@ -13483,9 +14754,9 @@ __metadata: linkType: hard "@types/node@npm:^16.0.0, @types/node@npm:^16.11.26, @types/node@npm:^16.9.2": - version: 16.11.59 - resolution: "@types/node@npm:16.11.59" - checksum: b3a2986ef8f8216bb7fd1187dcf2e69aca3e6b6b5fdfd6abf4cf11c44e3cdd587fae875a28dc4ef257e2b369e2c5290642aff6a0a9d702f3385a78f561293259 + version: 16.11.56 + resolution: "@types/node@npm:16.11.56" + checksum: b4efade16eb08a39810921c54a1637e69c8f3184a20d87e8fe74d557d9bda73f0829ac318e2a30a32b1903e4b099812defd1dfe438be70b98dbfbea5b0d99a53 languageName: node linkType: hard @@ -13574,7 +14845,18 @@ __metadata: languageName: node linkType: hard -"@types/passport-oauth2@npm:*, @types/passport-oauth2@npm:^1.4.11": +"@types/passport-oauth2@npm:*": + version: 1.4.9 + resolution: "@types/passport-oauth2@npm:1.4.9" + dependencies: + "@types/express": "*" + "@types/oauth": "*" + "@types/passport": "*" + checksum: a7dc84ba1c166c73445974c138f7776be39e9c04e0f66ae84a55c89d91292f1cc30ea063c250183c4557fe35ecbdb581b0b28cc958217aff211aa6fa45889767 + languageName: node + linkType: hard + +"@types/passport-oauth2@npm:^1.4.11": version: 1.4.11 resolution: "@types/passport-oauth2@npm:1.4.11" dependencies: @@ -13605,7 +14887,16 @@ __metadata: languageName: node linkType: hard -"@types/passport@npm:*, @types/passport@npm:^1.0.3": +"@types/passport@npm:*": + version: 1.0.10 + resolution: "@types/passport@npm:1.0.10" + dependencies: + "@types/express": "*" + checksum: bd9704b64db7a16d53bd547bb436fb5a1cf9747dbe888a10b124603aeccf297f162a5b0854409cd6ee6bff1a8e9cdf989b07738f600f37949abfa8f8e5960deb + languageName: node + linkType: hard + +"@types/passport@npm:^1.0.3": version: 1.0.11 resolution: "@types/passport@npm:1.0.11" dependencies: @@ -13622,9 +14913,9 @@ __metadata: linkType: hard "@types/prettier@npm:^2.1.5": - version: 2.7.0 - resolution: "@types/prettier@npm:2.7.0" - checksum: bf5d0c7c1270909b39399539ac106d20ddaa85fe92eb1d59922dc99159604b4f8d5e41b0045fb29c8011585cf5bca2350b7441ef3d9816c08bd0e10ebd4b31d4 + version: 2.4.3 + resolution: "@types/prettier@npm:2.4.3" + checksum: b240434daabac54700c862b0bb52a83fec396e0e9c847447119ba41fd8404d79aadfa174e6306fb094b29efadac586344b7606c3a71c286b71755ab2579d54df languageName: node linkType: hard @@ -13645,16 +14936,16 @@ __metadata: linkType: hard "@types/qs@npm:*": - version: 6.9.7 - resolution: "@types/qs@npm:6.9.7" - checksum: 7fd6f9c25053e9b5bb6bc9f9f76c1d89e6c04f7707a7ba0e44cc01f17ef5284adb82f230f542c2d5557d69407c9a40f0f3515e8319afd14e1e16b5543ac6cdba + version: 6.9.6 + resolution: "@types/qs@npm:6.9.6" + checksum: 01871b1cf7062717ec76fcb9b29ddae1e04fcfadc1c76d86ec2571e72f27bf09ff31b094b295be8d4ca664aeec9b8965563680b31fcab7aba1ed93afac5181cd languageName: node linkType: hard "@types/range-parser@npm:*": - version: 1.2.4 - resolution: "@types/range-parser@npm:1.2.4" - checksum: b7c0dfd5080a989d6c8bb0b6750fc0933d9acabeb476da6fe71d8bdf1ab65e37c136169d84148034802f48378ab94e3c37bb4ef7656b2bec2cb9c0f8d4146a95 + version: 1.2.3 + resolution: "@types/range-parser@npm:1.2.3" + checksum: a0a4218214d2c599e2128a8965e9183d1f0b8fc614def43a2183cf80534d10fcf86357c823c7907e779df0ab048fd1fa3818b4c8f0f6f99ba150a3f99df7d03d languageName: node linkType: hard @@ -13676,15 +14967,15 @@ __metadata: languageName: node linkType: hard -"@types/react-redux@npm:^7.1.20": - version: 7.1.24 - resolution: "@types/react-redux@npm:7.1.24" +"@types/react-redux@npm:^7.1.16": + version: 7.1.19 + resolution: "@types/react-redux@npm:7.1.19" dependencies: "@types/hoist-non-react-statics": ^3.3.0 "@types/react": "*" hoist-non-react-statics: ^3.3.0 redux: ^4.0.0 - checksum: 6582246581331ac7fbbd44aa1f1c136c8a9c8febbcf462432ac81302263308c21e1a2e7868beb7f73bbcb52a8e67935d133cb37f5bdcb6564eaff3a811805101 + checksum: 32a1b21f6a5e45cd6e78fdb4b86974ea444a35539c3c1270d66132527b2c45051f9642a3e2296616c72407dc019d0629c0183bcca64fbf3ba19443484cb70df7 languageName: node linkType: hard @@ -13716,11 +15007,11 @@ __metadata: linkType: hard "@types/react-transition-group@npm:^4.2.0": - version: 4.4.5 - resolution: "@types/react-transition-group@npm:4.4.5" + version: 4.2.4 + resolution: "@types/react-transition-group@npm:4.2.4" dependencies: "@types/react": "*" - checksum: 265f1c74061556708ffe8d15559e35c60d6c11478c9950d3735575d2c116ca69f461d85effa06d73a613eb8b73c84fd32682feb57cf7c5f9e4284021dbca25b0 + checksum: a8abb3ad3c6e0575c630b591503a78ae3a94e21d1285905a49c36168e5d3de68b0886e2c6d75b751e30f2dc6e4245351cde30e4b3ff2649aec345f2088961e2c languageName: node linkType: hard @@ -13743,13 +15034,13 @@ __metadata: linkType: hard "@types/react@npm:^17": - version: 17.0.50 - resolution: "@types/react@npm:17.0.50" + version: 17.0.45 + resolution: "@types/react@npm:17.0.45" dependencies: "@types/prop-types": "*" "@types/scheduler": "*" csstype: ^3.0.2 - checksum: b5629dff7c2f3e9fcba95a19b2b3bfd78d7cacc33ba5fc26413dba653d34afcac3b93ddabe563e8062382688a1eac7db68e93739bb8e712d27637a03aaafbbb8 + checksum: 3cc13a02824c13f6fa4807a83abd065ac1d9943359e76bd995cc7cd2b4148c1176ebd54a30a9f4eb8a0f141ff359d712876f256c4fee707e4290607ef8410b3e languageName: node linkType: hard @@ -13779,6 +15070,25 @@ __metadata: languageName: node linkType: hard +"@types/request@npm:^2.47.1": + version: 2.48.5 + resolution: "@types/request@npm:2.48.5" + dependencies: + "@types/caseless": "*" + "@types/node": "*" + "@types/tough-cookie": "*" + form-data: ^2.5.0 + checksum: 02572a0558b9a95ae1a2fa3912b45c4c12f587e25773b2d9bdbf5dfa6f2da5e3787d22256ee0dc4836250f39cf2dcb39fc4ded5bf554c0f948a623c8772e8bd3 + languageName: node + linkType: hard + +"@types/resize-observer-browser@npm:^0.1.6": + version: 0.1.7 + resolution: "@types/resize-observer-browser@npm:0.1.7" + checksum: 0377eaac8bb7a17b983b49a156006032380b459bfebefc54a5aa2f7f8a9786d2b60723e8837c61ef733330b478f4f26293e9edbdc8006238e4f80c878c56c988 + languageName: node + linkType: hard + "@types/resolve@npm:1.17.1": version: 1.17.1 resolution: "@types/resolve@npm:1.17.1" @@ -13797,7 +15107,7 @@ __metadata: languageName: node linkType: hard -"@types/retry@npm:0.12.0": +"@types/retry@npm:^0.12.0": version: 0.12.0 resolution: "@types/retry@npm:0.12.0" checksum: 61a072c7639f6e8126588bf1eb1ce8835f2cb9c2aba795c4491cf6310e013267b0c8488039857c261c387e9728c1b43205099223f160bb6a76b4374f741b5603 @@ -13833,9 +15143,9 @@ __metadata: linkType: hard "@types/scheduler@npm:*": - version: 0.16.2 - resolution: "@types/scheduler@npm:0.16.2" - checksum: b6b4dcfeae6deba2e06a70941860fb1435730576d3689225a421280b7742318d1548b3d22c1f66ab68e414f346a9542f29240bc955b6332c5b11e561077583bc + version: 0.16.1 + resolution: "@types/scheduler@npm:0.16.1" + checksum: 2ff8034df029a6cbb3623b05fa895cac4fc504806a8e948ebe29675a1edfa5ac04faac7611016076b3ffefc2037bbe344ad1978304059b2d4c78e513ec43c7bf languageName: node linkType: hard @@ -13871,22 +15181,32 @@ __metadata: languageName: node linkType: hard -"@types/serve-static@npm:*, @types/serve-static@npm:^1.13.10": - version: 1.15.0 - resolution: "@types/serve-static@npm:1.15.0" +"@types/serve-static@npm:*": + version: 1.13.9 + resolution: "@types/serve-static@npm:1.13.9" dependencies: - "@types/mime": "*" + "@types/mime": ^1 "@types/node": "*" - checksum: b6ac93d471fb0f53ddcac1f9b67572a09cd62806f7db5855244b28f6f421139626f24799392566e97d1ffc61b12f9de7f30380c39fcae3c8a161fe161d44edf2 + checksum: 5c5f3b64e9fe7c51fb428ef70f1f2365b897fc3c8400be6d6afc8db0f152639182b360361ebd3d0cbaeb607b125dee03bf0c50bf7e08642ff150028f05bb7381 + languageName: node + linkType: hard + +"@types/serve-static@npm:^1.13.10": + version: 1.13.10 + resolution: "@types/serve-static@npm:1.13.10" + dependencies: + "@types/mime": ^1 + "@types/node": "*" + checksum: eaca858739483e3ded254cad7d7a679dc2c8b3f52c8bb0cd845b3b7eb1984bde0371fdcb0a5c83aa12e6daf61b6beb762545021f520f08a1fe882a3fa4ea5554 languageName: node linkType: hard "@types/set-cookie-parser@npm:^2.4.0": - version: 2.4.2 - resolution: "@types/set-cookie-parser@npm:2.4.2" + version: 2.4.0 + resolution: "@types/set-cookie-parser@npm:2.4.0" dependencies: "@types/node": "*" - checksum: c31bf04eb9620829dc3c91bced74ac934ad039d20d20893fb5acac0f08769cbd4eef3bf7502a0289c7be59c3e9cfa456147b4e88bff47dd1b9efb4995ba5d5a3 + checksum: dfd9f31079e44ad5922c142564e8cfc43c8ed61dafd4f22ab3862dd76971398a6063b4e8e89a047607e7a0ff0914a0e4b16a51ff2fc9b73c4196744666762685 languageName: node linkType: hard @@ -13898,9 +15218,9 @@ __metadata: linkType: hard "@types/sizzle@npm:*, @types/sizzle@npm:^2.3.2": - version: 2.3.3 - resolution: "@types/sizzle@npm:2.3.3" - checksum: 586a9fb1f6ff3e325e0f2cc1596a460615f0bc8a28f6e276ac9b509401039dd242fa8b34496d3a30c52f5b495873922d09a9e76c50c2ab2bcc70ba3fb9c4e160 + version: 2.3.2 + resolution: "@types/sizzle@npm:2.3.2" + checksum: 783b6382934d8f12f2e21220a01c4557150f07abd18336f392664fb74ceaa9a9d59b7c859c0b82fd3f15b6484774cd0d493261fe64c78ee399bf198a8fe8d89d languageName: node linkType: hard @@ -13914,24 +15234,15 @@ __metadata: linkType: hard "@types/ssh2-streams@npm:*": - version: 0.1.9 - resolution: "@types/ssh2-streams@npm:0.1.9" + version: 0.1.8 + resolution: "@types/ssh2-streams@npm:0.1.8" dependencies: "@types/node": "*" - checksum: 190f3c235bf19787cd255f366d3ac9233875750095f3c73d15e72a1e67a826aed7e7c389603c5e89cb6420b87ff6dffc566f9174e546ddb7ff8c8dc2e8b00def + checksum: 1df7035f66165e1719cd61c365cbeb8c3221d645bcd57519a7f0f7b1cb9ff7b37e190480f9a2a8ed95cf126cac066c0f1ca6d365101f828966903e36efb59fcc languageName: node linkType: hard -"@types/ssh2@npm:*": - version: 1.11.5 - resolution: "@types/ssh2@npm:1.11.5" - dependencies: - "@types/node": "*" - checksum: ee7caae274e5f8e3c9d96aca94248142d39c9147e47f9700cec43aa9c680c75b66d970941ec34cfc622c00d87a1a983d0d92bb2e4a34b70e8d10213347446496 - languageName: node - linkType: hard - -"@types/ssh2@npm:^0.5.48": +"@types/ssh2@npm:*, @types/ssh2@npm:^0.5.48": version: 0.5.52 resolution: "@types/ssh2@npm:0.5.52" dependencies: @@ -13942,9 +15253,9 @@ __metadata: linkType: hard "@types/stack-utils@npm:^2.0.0": - version: 2.0.1 - resolution: "@types/stack-utils@npm:2.0.1" - checksum: 205fdbe3326b7046d7eaf5e494d8084f2659086a266f3f9cf00bccc549c8e36e407f88168ad4383c8b07099957ad669f75f2532ed4bc70be2b037330f7bae019 + version: 2.0.0 + resolution: "@types/stack-utils@npm:2.0.0" + checksum: b3fbae25b073116977ecb5c67d22f14567b51a7792403b0bf46e5de8f29bde3bd4ec1626afb22065495ca7f1c699c8bd66720050c94b8f8f9bcefbee79d161fd languageName: node linkType: hard @@ -13957,22 +15268,31 @@ __metadata: languageName: node linkType: hard +"@types/stream-buffers@npm:^3.0.3": + version: 3.0.3 + resolution: "@types/stream-buffers@npm:3.0.3" + dependencies: + "@types/node": "*" + checksum: c3456fa2a18f89d31c54fe169621d8288a9735fb7e92aba45786642659d93be26fa0b4caa5c1043b21f4cfaeeefc24d247fa833586a8a0f3aecedf03adb7b5ac + languageName: node + linkType: hard + "@types/styled-jsx@npm:^2.2.8": - version: 2.2.9 - resolution: "@types/styled-jsx@npm:2.2.9" + version: 2.2.8 + resolution: "@types/styled-jsx@npm:2.2.8" dependencies: "@types/react": "*" - checksum: 0e7e9bce8435116168b2470c7599b3b6ad5775c678d5dc06b64b0bc4fe369c59603c794a7298e2ca4e209aa0135f98df89793a3a0778251c1907b34198c55e9e + checksum: 6f1e5d893da847595a625c0281a78350d03c0650a7abb7aedbf5a20ccb085d925185823df611f6aff45fa908904bc3736f8d8bafd7b990b1563d25d92339904f languageName: node linkType: hard "@types/superagent@npm:*": - version: 4.1.15 - resolution: "@types/superagent@npm:4.1.15" + version: 4.1.7 + resolution: "@types/superagent@npm:4.1.7" dependencies: "@types/cookiejar": "*" "@types/node": "*" - checksum: 347cd74ef0a29e6b9c6d32253c3fb0dd39a31618b50752f84d36b6a9246237bb6b68c9b436c1f94adabc2df89d9f1939e4782f4c850f98b9c2fe431ad4e565a4 + checksum: 090a9fd148d82550a8feda89df4a9f3051ff2e253b02cf5f84e01c23f6e5225c0bf814d600167449c5bd090a02e42449dfbe8fa089fc24b7c10e397d814e37b9 languageName: node linkType: hard @@ -14003,6 +15323,16 @@ __metadata: languageName: node linkType: hard +"@types/tar@npm:^4.0.3": + version: 4.0.5 + resolution: "@types/tar@npm:4.0.5" + dependencies: + "@types/minipass": "*" + "@types/node": "*" + checksum: 476d8af8f4cffcd973de026e043271be76171f9cb07bb869ba38a193ce89ee361b59ff8484e28b57216266063d91502c5208d2ab6b976e7370d9bdf4c4dadadc + languageName: node + linkType: hard + "@types/tar@npm:^6.1.1": version: 6.1.2 resolution: "@types/tar@npm:6.1.2" @@ -14023,12 +15353,11 @@ __metadata: linkType: hard "@types/terser-webpack-plugin@npm:^5.0.4": - version: 5.0.4 - resolution: "@types/terser-webpack-plugin@npm:5.0.4" + version: 5.2.0 + resolution: "@types/terser-webpack-plugin@npm:5.2.0" dependencies: - terser: ^5.3.8 - webpack: ^5.1.0 - checksum: 7b3845526d4ed7b636f7b2f8f35b5d7e45211f7a55afc85e32a66655eaf65cd193e2fec195bcdb473c0d9a5b2828798b9c23196fdc86e9cd2e9420227012f438 + terser-webpack-plugin: "*" + checksum: 475b0f160c9f83641255f6516b69d7908b9e3e8e8ab653f3a257690249f9614f9386c0897eba6e4e35182ec0d83f57454d62fb94b38ae7c171891641350072ee languageName: node linkType: hard @@ -14050,6 +15379,13 @@ __metadata: languageName: node linkType: hard +"@types/tough-cookie@npm:*": + version: 4.0.0 + resolution: "@types/tough-cookie@npm:4.0.0" + checksum: 454fa8d4d64532992274ebf2ff5ea0061b0dd32a2282255a3e793f04a8b64a9c4c1f9e0f4ed83c514c852b7b604d69336c66c80de4a857cb41a81e9572981e7f + languageName: node + linkType: hard + "@types/trusted-types@npm:*": version: 2.0.2 resolution: "@types/trusted-types@npm:2.0.2" @@ -14066,6 +15402,13 @@ __metadata: languageName: node linkType: hard +"@types/underscore@npm:^1.8.9": + version: 1.10.23 + resolution: "@types/underscore@npm:1.10.23" + checksum: 5e9458888e8c09a0f61f93f5958d4ce57e02e317b21444319f7e4a11796445e58a78d6c743dad17365aa8fb9c31fa23d5f4d30a9047fa2df30d446ccc5e42023 + languageName: node + linkType: hard + "@types/unist@npm:*, @types/unist@npm:^2.0.0": version: 2.0.6 resolution: "@types/unist@npm:2.0.6" @@ -14073,6 +15416,13 @@ __metadata: languageName: node linkType: hard +"@types/use-sync-external-store@npm:^0.0.3": + version: 0.0.3 + resolution: "@types/use-sync-external-store@npm:0.0.3" + checksum: 161ddb8eec5dbe7279ac971531217e9af6b99f7783213566d2b502e2e2378ea19cf5e5ea4595039d730aa79d3d35c6567d48599f69773a02ffcff1776ec2a44e + languageName: node + linkType: hard + "@types/uuid@npm:^8.0.0": version: 8.3.4 resolution: "@types/uuid@npm:8.3.4" @@ -14108,10 +15458,12 @@ __metadata: languageName: node linkType: hard -"@types/whatwg-mimetype@npm:^3.0.0": - version: 3.0.0 - resolution: "@types/whatwg-mimetype@npm:3.0.0" - checksum: 98254edcddb5b9580aa41c19e6c96d2bfb178285d5c2560e3a1f321f14da70192adc82950baecd2cad5876098b0677fbe813db1edf9ab9ba0a9996f0bf2bb703 +"@types/ws@npm:^6.0.1": + version: 6.0.4 + resolution: "@types/ws@npm:6.0.4" + dependencies: + "@types/node": "*" + checksum: b2656a76bfad0c17bb1e3fc237ba7122431c1373669977ed8edef45934c82f71c75d8c71f0a576dc6d98b0954fd94cae0166c6b4ccb40f7e0ee29cc92673519c languageName: node linkType: hard @@ -14134,9 +15486,9 @@ __metadata: linkType: hard "@types/yargs-parser@npm:*": - version: 21.0.0 - resolution: "@types/yargs-parser@npm:21.0.0" - checksum: b2f4c8d12ac18a567440379909127cf2cec393daffb73f246d0a25df36ea983b93b7e9e824251f959e9f928cbc7c1aab6728d0a0ff15d6145f66cec2be67d9a2 + version: 15.0.0 + resolution: "@types/yargs-parser@npm:15.0.0" + checksum: 333ab73a1f9c82c64b2fac2441558e58f062fbe7affc35bb53b8e755b62cdd32b1bbc6f4da23773887a2189bf04395e2a8c710df344df4cd578993aeefe98053 languageName: node linkType: hard @@ -14149,15 +15501,6 @@ __metadata: languageName: node linkType: hard -"@types/yargs@npm:^17.0.8": - version: 17.0.12 - resolution: "@types/yargs@npm:17.0.12" - dependencies: - "@types/yargs-parser": "*" - checksum: 5b41d21d8624199f89db82209b2adab2e47867b3677e852fde65698be2ca48364b14c2e70cb0adc9bca4a2102c93dad2409cae0ad666ea36ae031ae1cb08a7b5 - languageName: node - linkType: hard - "@types/yarnpkg__lockfile@npm:^1.1.4": version: 1.1.5 resolution: "@types/yarnpkg__lockfile@npm:1.1.5" @@ -14165,7 +15508,7 @@ __metadata: languageName: node linkType: hard -"@types/yauzl@npm:^2.10.0, @types/yauzl@npm:^2.9.1": +"@types/yauzl@npm:^2.10.0": version: 2.10.0 resolution: "@types/yauzl@npm:2.10.0" dependencies: @@ -14174,6 +15517,15 @@ __metadata: languageName: node linkType: hard +"@types/yauzl@npm:^2.9.1": + version: 2.9.2 + resolution: "@types/yauzl@npm:2.9.2" + dependencies: + "@types/node": "*" + checksum: dfb49abe82605615712fc694eaa4f7068fe30aa03f38c085e2c2e74408beaad30471d36da9654a811482ece2ea4405575fd99b19c0aa327ed2a9736b554bbf43 + languageName: node + linkType: hard + "@types/yup@npm:^0.29.13": version: 0.29.14 resolution: "@types/yup@npm:0.29.14" @@ -14189,12 +15541,12 @@ __metadata: linkType: hard "@typescript-eslint/eslint-plugin@npm:^5.9.0": - version: 5.37.0 - resolution: "@typescript-eslint/eslint-plugin@npm:5.37.0" + version: 5.36.2 + resolution: "@typescript-eslint/eslint-plugin@npm:5.36.2" dependencies: - "@typescript-eslint/scope-manager": 5.37.0 - "@typescript-eslint/type-utils": 5.37.0 - "@typescript-eslint/utils": 5.37.0 + "@typescript-eslint/scope-manager": 5.36.2 + "@typescript-eslint/type-utils": 5.36.2 + "@typescript-eslint/utils": 5.36.2 debug: ^4.3.4 functional-red-black-tree: ^1.0.1 ignore: ^5.2.0 @@ -14207,54 +15559,79 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 9ef75628fcd6f5425002d0172514ad27e51c6ca438aba65ad445be3c63187de3cb294bcc994bd2859dff4fc0221a22da497b34990e8165dcfd1fec33d7d17fb3 + checksum: edcd9fcecdeb22a689b421cafe3b7adc859bf2fd6227aecdd7412c319c808e7bab063c8f94af32116cfc971962f9780d181cb0a4aa999951c2d2be1f84c6c376 languageName: node linkType: hard "@typescript-eslint/experimental-utils@npm:^5.0.0": - version: 5.37.0 - resolution: "@typescript-eslint/experimental-utils@npm:5.37.0" + version: 5.9.0 + resolution: "@typescript-eslint/experimental-utils@npm:5.9.0" dependencies: - "@typescript-eslint/utils": 5.37.0 + "@types/json-schema": ^7.0.9 + "@typescript-eslint/scope-manager": 5.9.0 + "@typescript-eslint/types": 5.9.0 + "@typescript-eslint/typescript-estree": 5.9.0 + eslint-scope: ^5.1.1 + eslint-utils: ^3.0.0 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 1a9633118a481f7a89a00797abc57dc1fb046ff650f44c3a2a1f796a4def4ab3a9fc6c6b83c9e803e4b6251f4098fad437bb6e2082327a6faa3e200aa1e475ec + checksum: 731b27840642b644e65f4ae321ed47e973ffadacd1aa24a19b02b4b298b5bcfbfa16c2d3d034e87a08c3c45f942c5b974f7619cb143eb23fb950f37418dce791 languageName: node linkType: hard "@typescript-eslint/parser@npm:^5.9.0": - version: 5.37.0 - resolution: "@typescript-eslint/parser@npm:5.37.0" + version: 5.36.2 + resolution: "@typescript-eslint/parser@npm:5.36.2" dependencies: - "@typescript-eslint/scope-manager": 5.37.0 - "@typescript-eslint/types": 5.37.0 - "@typescript-eslint/typescript-estree": 5.37.0 + "@typescript-eslint/scope-manager": 5.36.2 + "@typescript-eslint/types": 5.36.2 + "@typescript-eslint/typescript-estree": 5.36.2 debug: ^4.3.4 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 33343e27c9602820d43ee12de9797365d97a5cf3f716e750fa44de760f2a2c6800f3bc4fa54931ac70c0e0ede77a92224f8151da7f30fed3bf692a029d6659af + checksum: d6cc22cbc7aacb5ecebf55eb1d681cb6b964b108e147b418295c3e48701a77768cff128c16da421ae50eabb9f1296ecec7fa3cc5f2ccb63a3febf79f98b4195f languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.37.0": - version: 5.37.0 - resolution: "@typescript-eslint/scope-manager@npm:5.37.0" +"@typescript-eslint/scope-manager@npm:5.20.0": + version: 5.20.0 + resolution: "@typescript-eslint/scope-manager@npm:5.20.0" dependencies: - "@typescript-eslint/types": 5.37.0 - "@typescript-eslint/visitor-keys": 5.37.0 - checksum: 1c439e21ffa63ebaadb8c8363e9d668132a835a28203e5b779366bfa56772f332e5dedb50d63dffb836839b9d9c4e66aa9e3ea47b8c59465b18a0cbd063ec7a3 + "@typescript-eslint/types": 5.20.0 + "@typescript-eslint/visitor-keys": 5.20.0 + checksum: 904fd43f559dc2579958496ffad837eca124940b4a172666f0ea54ed606074d9ec7d2bec0f2141c3f9a8b894dd2644817cb86809e79a7a73ecba2b7babcdb5c9 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:5.37.0": - version: 5.37.0 - resolution: "@typescript-eslint/type-utils@npm:5.37.0" +"@typescript-eslint/scope-manager@npm:5.36.2": + version: 5.36.2 + resolution: "@typescript-eslint/scope-manager@npm:5.36.2" dependencies: - "@typescript-eslint/typescript-estree": 5.37.0 - "@typescript-eslint/utils": 5.37.0 + "@typescript-eslint/types": 5.36.2 + "@typescript-eslint/visitor-keys": 5.36.2 + checksum: 93ff655f7c237c88ec6dc5911202dd8f81bd8909b27f1a758a9d77e9791040f1ee6fe2891314bde75c808ce586246e98003a1b1396937b0312f2440016dea751 + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:5.9.0": + version: 5.9.0 + resolution: "@typescript-eslint/scope-manager@npm:5.9.0" + dependencies: + "@typescript-eslint/types": 5.9.0 + "@typescript-eslint/visitor-keys": 5.9.0 + checksum: 46e7ab0cef558e7faf1aa8d122a265e196566c0073292f5b2f9cede1f63f52860be8e4ef90251c15e0922339c15852584cb5337382035baff87f1203c0c8d1b5 + languageName: node + linkType: hard + +"@typescript-eslint/type-utils@npm:5.36.2": + version: 5.36.2 + resolution: "@typescript-eslint/type-utils@npm:5.36.2" + dependencies: + "@typescript-eslint/typescript-estree": 5.36.2 + "@typescript-eslint/utils": 5.36.2 debug: ^4.3.4 tsutils: ^3.21.0 peerDependencies: @@ -14262,23 +15639,55 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 79dac78eefdbdb3c168da6b303381461af3523e2b45fdeb821eb05e6a5cac797a8850e1dd9e1b6cd1a7c22408acfa2a09854a0f85ff038518c312db8eae9aa4f + checksum: c202b7d2cd08ed7f7d1ad7e430e9e1596478e147f0d485d02babfda0211c55fa950de1dc4d1c950008a8a047a31c1e982e97fe5558f93d496830eb9d9532bc71 languageName: node linkType: hard -"@typescript-eslint/types@npm:5.37.0": - version: 5.37.0 - resolution: "@typescript-eslint/types@npm:5.37.0" - checksum: 899e59e7775fa95c2d9fcac5cc02cc49d83af5f1ffc706df495046c3b3733f79d5489568b01bfaf8c9ae4636e057056866adc783113036f774580086d0189f21 +"@typescript-eslint/types@npm:5.20.0": + version: 5.20.0 + resolution: "@typescript-eslint/types@npm:5.20.0" + checksum: d7f6e51e23f59feee8857340828c47a98a0dd5eaa1b045e936dc11199b55754cf78ae5cd8d56c1fafb1b5a40a6f472c1ac921072951217caffe3f06a717fa61c languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.37.0": - version: 5.37.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.37.0" +"@typescript-eslint/types@npm:5.36.2": + version: 5.36.2 + resolution: "@typescript-eslint/types@npm:5.36.2" + checksum: 736cb8a76b58f2f9a7d066933094c5510ffe31479ea8b804a829ec85942420f1b55e0eb2688fbdaaaa9c0e5b3b590fb8f14bbd745353696b4fd33fda620d417b + languageName: node + linkType: hard + +"@typescript-eslint/types@npm:5.9.0": + version: 5.9.0 + resolution: "@typescript-eslint/types@npm:5.9.0" + checksum: 7c4e142600aec266b41418dab1d0cee8cace980b6990692df6522de6eab6705bf515aef36180e4a38c62acb10c92fb474269ac6856a4266d6b035068cd83fad3 + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:5.20.0": + version: 5.20.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.20.0" dependencies: - "@typescript-eslint/types": 5.37.0 - "@typescript-eslint/visitor-keys": 5.37.0 + "@typescript-eslint/types": 5.20.0 + "@typescript-eslint/visitor-keys": 5.20.0 + debug: ^4.3.2 + globby: ^11.0.4 + is-glob: ^4.0.3 + semver: ^7.3.5 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 2b709292b7df3675d1f8eaf2f4e1ecf491f70fc525012c6a0fb5164aa893c165317b0a419022b8b00aaed502864d5b5b84092b58a9950d2633248e8d7627abd8 + languageName: node + linkType: hard + +"@typescript-eslint/typescript-estree@npm:5.36.2": + version: 5.36.2 + resolution: "@typescript-eslint/typescript-estree@npm:5.36.2" + dependencies: + "@typescript-eslint/types": 5.36.2 + "@typescript-eslint/visitor-keys": 5.36.2 debug: ^4.3.4 globby: ^11.1.0 is-glob: ^4.0.3 @@ -14287,39 +15696,93 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 80365a50fa11ed39bf54d9ef06e264fbbf3bdbcc55b7d7d555ef0be915edae40ec30e98d08b3f6ef048e1874450cbcb1e7d9f429d4f420dacbbde45d3376a7bc + checksum: 2827ff57a114b6107ea6d555f3855007133b08a7c2bafba0cfa0c935d8b99fd7b49e982d48cccc1c5ba550d95748d0239f5e2109893f12a165d76ed64a0d261b languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.37.0, @typescript-eslint/utils@npm:^5.10.0": - version: 5.37.0 - resolution: "@typescript-eslint/utils@npm:5.37.0" +"@typescript-eslint/typescript-estree@npm:5.9.0": + version: 5.9.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.9.0" + dependencies: + "@typescript-eslint/types": 5.9.0 + "@typescript-eslint/visitor-keys": 5.9.0 + debug: ^4.3.2 + globby: ^11.0.4 + is-glob: ^4.0.3 + semver: ^7.3.5 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 71e3f720e335fb08e66950d32b723484aa4d1f4a3163e82259f4be2d11091545070c2e71472be470403cb6f82bf1abe84fa89c1d0b1d47adc8550b3f70aabfb5 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:5.36.2": + version: 5.36.2 + resolution: "@typescript-eslint/utils@npm:5.36.2" dependencies: "@types/json-schema": ^7.0.9 - "@typescript-eslint/scope-manager": 5.37.0 - "@typescript-eslint/types": 5.37.0 - "@typescript-eslint/typescript-estree": 5.37.0 + "@typescript-eslint/scope-manager": 5.36.2 + "@typescript-eslint/types": 5.36.2 + "@typescript-eslint/typescript-estree": 5.36.2 eslint-scope: ^5.1.1 eslint-utils: ^3.0.0 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: dc6c19ab07b50113f6fa3722518b2f31ce04036ec018855587d4c467108cb4e3c2866e54ed2e18ce61d1e7d0eaab24f94ee39574031b7d8e1c05e4b83ff84ef2 + checksum: 45356cf55a8733e3ab1f2c3c19cdaefdb79857e35eb1433c29b81f3df071e9cef8a286bc407abe243889a21d9e793e999f92f03b9c727a0fac1c17a48e64c42a languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.37.0": - version: 5.37.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.37.0" +"@typescript-eslint/utils@npm:^5.10.0": + version: 5.20.0 + resolution: "@typescript-eslint/utils@npm:5.20.0" dependencies: - "@typescript-eslint/types": 5.37.0 - eslint-visitor-keys: ^3.3.0 - checksum: d6193550f77413aead0cb267e058df80b80a488c8fb4e39beb5f0a70b971c41682a6391903fbc5f3dd859a872016288c434d631b8efc3ac5a04edbdb7b63b5f6 + "@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 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: e387cf96124e34d079804220c5cb9134148fb3efc68d852a344453e285e3016e0b7e37b11308ef58c0e7afc638f145002cebc27c5da0fd03e0c074ff97d8210e languageName: node linkType: hard -"@uiw/codemirror-extensions-basic-setup@npm:4.12.3": - version: 4.12.3 - resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.12.3" +"@typescript-eslint/visitor-keys@npm:5.20.0": + version: 5.20.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.20.0" + dependencies: + "@typescript-eslint/types": 5.20.0 + eslint-visitor-keys: ^3.0.0 + checksum: 1e1aa5f14fd60f1846ee26947d571953898dc82eb635a7eab3984c6b7db9bb8897743416713a129cc95c8cd63325cc0c64b3935d264f73100911fc5da76fc65f + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:5.36.2": + version: 5.36.2 + resolution: "@typescript-eslint/visitor-keys@npm:5.36.2" + dependencies: + "@typescript-eslint/types": 5.36.2 + eslint-visitor-keys: ^3.3.0 + checksum: 87ccdcfa5cdedaa3a1aac30d656969f4f5910b62bcaacdf80a514dbf0cbbd8e79b55f8e987eab34cc79ece8ce4b8c19d5caf8b0afb74e0b0d7ab39fb29aa8eba + languageName: node + linkType: hard + +"@typescript-eslint/visitor-keys@npm:5.9.0": + version: 5.9.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.9.0" + dependencies: + "@typescript-eslint/types": 5.9.0 + eslint-visitor-keys: ^3.0.0 + checksum: 34a595b83b0e7d4f387d6c81b272804b94a1a91478c5f856fdfdd227595bf8562bf3f5d732606d10b4522c3f2617d09d4bacd2193f757a324ea66b3144a68903 + languageName: node + linkType: hard + +"@uiw/codemirror-extensions-basic-setup@npm:4.11.6": + version: 4.11.6 + resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.11.6" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/commands": ^6.0.0 @@ -14336,29 +15799,26 @@ __metadata: "@codemirror/search": ">=6.0.0" "@codemirror/state": ">=6.0.0" "@codemirror/view": ">=6.0.0" - checksum: 14c5c6694b2f5ce34bba2ed3fa7017a268c36f3ba234711580d31243603a14adc2b31ebec7d665cd6687917a8ac617d6ac453861d32bf277f43b65946ac1c656 + checksum: 706a64a098380c404499a228ba3e28f472d39b20088ed794c586005d227340e77c5320a09b9574e8ec51f7d13ca1b98816606de0e7f3c9407761493c41c9801f languageName: node linkType: hard "@uiw/react-codemirror@npm:^4.9.3": - version: 4.12.3 - resolution: "@uiw/react-codemirror@npm:4.12.3" + version: 4.11.6 + resolution: "@uiw/react-codemirror@npm:4.11.6" dependencies: "@babel/runtime": ^7.18.6 - "@codemirror/commands": ^6.1.0 - "@codemirror/state": ^6.1.1 "@codemirror/theme-one-dark": ^6.0.0 - "@uiw/codemirror-extensions-basic-setup": 4.12.3 + "@uiw/codemirror-extensions-basic-setup": 4.11.6 codemirror: ^6.0.0 peerDependencies: "@babel/runtime": ">=7.11.0" - "@codemirror/state": ">=6.0.0" "@codemirror/theme-one-dark": ">=6.0.0" "@codemirror/view": ">=6.0.0" codemirror: ">=6.0.0" react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 504003e6162dbe672072ace980117d1eeb9264282d6ad314de0398e0d29925133bc8d8c484c3aadb91b6ebedb8ebb259307b838cc31d39ab4792af5ab061949c + checksum: f630400ef57ff1928962244854805acb37f259606bc21967861c9ffaf80168d7c6c5052058299e96f7694635e218c6497ef4c5f3086109b35669b7cf5e2ee297 languageName: node linkType: hard @@ -14513,6 +15973,23 @@ __metadata: languageName: node linkType: hard +"@whatwg-node/fetch@npm:^0.2.4": + version: 0.2.6 + resolution: "@whatwg-node/fetch@npm:0.2.6" + dependencies: + "@peculiar/webcrypto": ^1.4.0 + abort-controller: ^3.0.0 + busboy: ^1.6.0 + event-target-polyfill: ^0.0.3 + form-data-encoder: ^1.7.1 + formdata-node: ^4.3.1 + node-fetch: ^2.6.7 + undici: ^5.8.0 + web-streams-polyfill: ^3.2.0 + checksum: 12ee718be802860fbde2647ec0139dba598a278b0248326c0a314591b7096c84c34b16f5317273b0b11f3bbc6ff0d5d1df08983b4e9f5c3f0d779fde727f21af + languageName: node + linkType: hard + "@whatwg-node/fetch@npm:^0.3.0": version: 0.3.2 resolution: "@whatwg-node/fetch@npm:0.3.2" @@ -14530,23 +16007,6 @@ __metadata: languageName: node linkType: hard -"@whatwg-node/fetch@npm:^0.4.0": - version: 0.4.3 - resolution: "@whatwg-node/fetch@npm:0.4.3" - dependencies: - "@peculiar/webcrypto": ^1.4.0 - abort-controller: ^3.0.0 - busboy: ^1.6.0 - event-target-polyfill: ^0.0.3 - form-data-encoder: ^1.7.1 - formdata-node: ^4.3.1 - node-fetch: ^2.6.7 - undici: ^5.8.0 - web-streams-polyfill: ^3.2.0 - checksum: 45f798227833f64cadf71aa3304a7be1439f9fe1047ba5a846dba21585e52752a3bf08a9b509f2bb294ad42bfa1ff1ab3a5bf1665231019fe4e9a720ef876064 - languageName: node - linkType: hard - "@xmldom/xmldom@npm:^0.7.0, @xmldom/xmldom@npm:^0.7.5": version: 0.7.5 resolution: "@xmldom/xmldom@npm:0.7.5" @@ -14583,12 +16043,12 @@ __metadata: linkType: hard "@yarnpkg/parsers@npm:^3.0.0-rc.4": - version: 3.0.0-rc.18 - resolution: "@yarnpkg/parsers@npm:3.0.0-rc.18" + version: 3.0.0-rc.20 + resolution: "@yarnpkg/parsers@npm:3.0.0-rc.20" dependencies: js-yaml: ^3.10.0 tslib: ^2.4.0 - checksum: 73cc59cb2349ce78a376d6ad7953117360de9aff866f42329a3e957ebabbbd4cbd91bfe79e30aa3bf07f126af66b72c00a7fc733724ac93d7f46d420ba81beec + checksum: a0dfc2d4d824322ae779363870ad7705b42161ad5e90c992404bf5dc0454a046a6f04144303c9bb047239e480b882b4105272127f2ba080b865180276c46deda languageName: node linkType: hard @@ -14619,9 +16079,9 @@ __metadata: linkType: hard "abab@npm:^2.0.3, abab@npm:^2.0.5": - version: 2.0.6 - resolution: "abab@npm:2.0.6" - checksum: 6ffc1af4ff315066c62600123990d87551ceb0aafa01e6539da77b0f5987ac7019466780bf480f1787576d4385e3690c81ccc37cfda12819bf510b8ab47e5a3e + version: 2.0.5 + resolution: "abab@npm:2.0.5" + checksum: 0ec951b46d5418c2c2f923021ec193eaebdb4e802ffd5506286781b454be722a13a8430f98085cd3e204918401d9130ec6cc8f5ae19be315b3a0e857d83196e1 languageName: node linkType: hard @@ -14642,9 +16102,9 @@ __metadata: linkType: hard "abstract-logging@npm:^2.0.0": - version: 2.0.1 - resolution: "abstract-logging@npm:2.0.1" - checksum: 6967d15e5abbafd17f56eaf30ba8278c99333586fa4f7935fd80e93cfdc006c37fcc819c5d63ee373a12e6cb2d0417f7c3c6b9e42b957a25af9937d26749415e + version: 2.0.0 + resolution: "abstract-logging@npm:2.0.0" + checksum: 2f3e0ef758a18d98ddfd4fc01532724d6ada0945e2f679a0ad3b73fbe4b3594b1a3047dafb25bb88d3cb4031c4ea6090b25f8f5b7cfb4d2c7bcf125a56aca6df languageName: node linkType: hard @@ -14669,11 +16129,11 @@ __metadata: linkType: hard "acorn-import-assertions@npm:^1.7.6": - version: 1.8.0 - resolution: "acorn-import-assertions@npm:1.8.0" + version: 1.7.6 + resolution: "acorn-import-assertions@npm:1.7.6" peerDependencies: acorn: ^8 - checksum: 5c4cf7c850102ba7ae0eeae0deb40fb3158c8ca5ff15c0bca43b5c47e307a1de3d8ef761788f881343680ea374631ae9e9615ba8876fee5268dbe068c98bcba6 + checksum: bc8a1585abd70ebfb3a6b3112f5e3974fee3ac598230f916a3857f0ad4fa7e72197be532c49d1feeb83678ef264f34bee9bf1934dfb2f276d88468134a51fa9f languageName: node linkType: hard @@ -14687,9 +16147,9 @@ __metadata: linkType: hard "acorn-walk@npm:^7.1.1": - version: 7.2.0 - resolution: "acorn-walk@npm:7.2.0" - checksum: 9252158a79b9d92f1bc0dd6acc0fcfb87a67339e84bcc301bb33d6078936d27e35d606b4d35626d2962cd43c256d6f27717e70cbe15c04fff999ab0b2260b21f + version: 7.1.1 + resolution: "acorn-walk@npm:7.1.1" + checksum: 046be0b8094b16459d94dadc550adb0cf5ace3fad02880cb4fd968e2250e988d0022f1f169c60b2fecc77bc711c46f91a6b1b7b72d6c458b008c9e821e89cfff languageName: node linkType: hard @@ -14709,7 +16169,16 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.7.0, acorn@npm:^8.7.1, acorn@npm:^8.8.0": +"acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.7.0, acorn@npm:^8.7.1": + version: 8.7.1 + resolution: "acorn@npm:8.7.1" + bin: + acorn: bin/acorn + checksum: aca0aabf98826717920ac2583fdcad0a6fbe4e583fdb6e843af2594e907455aeafe30b1e14f1757cd83ce1776773cf8296ffc3a4acf13f0bd3dfebcf1db6ae80 + languageName: node + linkType: hard + +"acorn@npm:^8.8.0": version: 8.8.0 resolution: "acorn@npm:8.8.0" bin: @@ -14726,9 +16195,9 @@ __metadata: linkType: hard "address@npm:^1.0.1, address@npm:^1.1.2": - version: 1.2.1 - resolution: "address@npm:1.2.1" - checksum: e4c0f961464ccad09c3f7ed3a8d12f609354a87dd1ad379e43661e9684446fbf158be3edeef85e1590dfc6c88c0897c5908bc18f232eb86e43993a2ada5820fa + version: 1.1.2 + resolution: "address@npm:1.1.2" + checksum: d966deee6ab9a0f96ed1d25dc73e91a248f64479c91f9daeb15237b8e3c39a02faac4e6afe8987ef9e5aea60a1593cef5882b7456ab2e6196fc0229a93ec39c2 languageName: node linkType: hard @@ -14748,7 +16217,18 @@ __metadata: languageName: node linkType: hard -"agentkeepalive@npm:^4.1.3, agentkeepalive@npm:^4.1.4, agentkeepalive@npm:^4.2.1": +"agentkeepalive@npm:^4.1.3, agentkeepalive@npm:^4.1.4, agentkeepalive@npm:^4.2.0": + version: 4.2.0 + resolution: "agentkeepalive@npm:4.2.0" + dependencies: + debug: ^4.1.0 + depd: ^1.1.2 + humanize-ms: ^1.2.1 + checksum: 89806f83ceebbcaabf6bd581a8dce4870910fd2a11f66df8f505b4cd4ce4ca5ab9e6eec8d11ce8531a6b60f6748b75b0775e0e2fa33871503ef00d535418a19a + languageName: node + linkType: hard + +"agentkeepalive@npm:^4.2.1": version: 4.2.1 resolution: "agentkeepalive@npm:4.2.1" dependencies: @@ -14815,7 +16295,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.10.0, ajv@npm:^6.10.1, ajv@npm:^6.12.2, ajv@npm:^6.12.3, ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:^6.7.0, ajv@npm:~6.12.6": +"ajv@npm:^6.10.0, ajv@npm:^6.10.1, ajv@npm:^6.12.2, ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:^6.5.5, ajv@npm:^6.7.0, ajv@npm:~6.12.6": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -14839,6 +16319,13 @@ __metadata: languageName: node linkType: hard +"alphanum-sort@npm:^1.0.2": + version: 1.0.2 + resolution: "alphanum-sort@npm:1.0.2" + checksum: 5a32d0b3c0944e65d22ff3ae2f88d7a4f8d88a78a703033caeae33f2944915e053d283d02f630dc94823edc7757148ecdcf39fd687a5117bda5c10133a03a7d8 + languageName: node + linkType: hard + "already@npm:^3.2.0": version: 3.4.0 resolution: "already@npm:3.4.0" @@ -14895,9 +16382,9 @@ __metadata: linkType: hard "ansi-regex@npm:^4.1.0": - version: 4.1.1 - resolution: "ansi-regex@npm:4.1.1" - checksum: b1a6ee44cb6ecdabaa770b2ed500542714d4395d71c7e5c25baa631f680fb2ad322eb9ba697548d498a6fd366949fc8b5bfcf48d49a32803611f648005b01888 + version: 4.1.0 + resolution: "ansi-regex@npm:4.1.0" + checksum: 97aa4659538d53e5e441f5ef2949a3cffcb838e57aeaad42c4194e9d7ddb37246a6526c4ca85d3940a9d1e19b11cc2e114530b54c9d700c8baf163c31779baf8 languageName: node linkType: hard @@ -14934,9 +16421,9 @@ __metadata: linkType: hard "ansi-styles@npm:^6.0.0": - version: 6.1.1 - resolution: "ansi-styles@npm:6.1.1" - checksum: f2b1ed658ead23caf77effe7b875960cacd70d1ebe47c830e191358b242d688cf52a28d55ef9b19d102f792e8c1dec34bd865db264f1c7f4f63dd3a5fa84677e + version: 6.1.0 + resolution: "ansi-styles@npm:6.1.0" + checksum: 7a7f8528c07a9d20c3a92bccd2b6bc3bb4d26e5cb775c02826921477377bd495d615d61f710d56216344b6238d1d11ef2b0348e146c5b128715578bfb3217229 languageName: node linkType: hard @@ -14974,7 +16461,16 @@ __metadata: languageName: node linkType: hard -"apollo-reporting-protobuf@npm:^3.3.1, apollo-reporting-protobuf@npm:^3.3.2": +"apollo-reporting-protobuf@npm:^3.3.1": + version: 3.3.1 + resolution: "apollo-reporting-protobuf@npm:3.3.1" + dependencies: + "@apollo/protobufjs": 1.2.2 + checksum: 1933affb1640d5905e29f8a41becdba1981effd767660748517ea1d4ef30db4c6789b17eba02f11dafd29b46b56d95cd15cbc3eb319d0a90affbdd0f2d168473 + languageName: node + linkType: hard + +"apollo-reporting-protobuf@npm:^3.3.2": version: 3.3.2 resolution: "apollo-reporting-protobuf@npm:3.3.2" dependencies: @@ -15159,22 +16655,22 @@ __metadata: linkType: hard "are-we-there-yet@npm:^3.0.0": - version: 3.0.1 - resolution: "are-we-there-yet@npm:3.0.1" + version: 3.0.0 + resolution: "are-we-there-yet@npm:3.0.0" dependencies: delegates: ^1.0.0 readable-stream: ^3.6.0 - checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 + checksum: 348edfdd931b0b50868b55402c01c3f64df1d4c229ab6f063539a5025fd6c5f5bb8a0cab409bbed8d75d34762d22aa91b7c20b4204eb8177063158d9ba792981 languageName: node linkType: hard "are-we-there-yet@npm:~1.1.2": - version: 1.1.7 - resolution: "are-we-there-yet@npm:1.1.7" + version: 1.1.5 + resolution: "are-we-there-yet@npm:1.1.5" dependencies: delegates: ^1.0.0 readable-stream: ^2.0.6 - checksum: 70d251719c969b2745bfe5ddf3ebaefa846a636e90a6d5212573676af5d6670e15457761d4725731e19cbebdce42c4ab0cbedf23ab047f2a08274985aa10a3c7 + checksum: 9a746b1dbce4122f44002b0c39fbba5b2c6f52c00e88b6ccba6fc68652323f8a1355a20e8ab94846995626d8de3bf67669a3b4a037dff0885db14607168f2b15 languageName: node linkType: hard @@ -15202,14 +16698,14 @@ __metadata: linkType: hard "args@npm:^5.0.0": - version: 5.0.3 - resolution: "args@npm:5.0.3" + version: 5.0.1 + resolution: "args@npm:5.0.1" dependencies: camelcase: 5.0.0 chalk: 2.4.2 leven: 2.1.0 mri: 1.1.4 - checksum: ac39e656090f9364d7a2a42216a572dfe36d3e4d16d87ca4c1c9552a1c325dc222b642124cb96cdeeafb46662922910191f5aa12142cc4ca117b6d85454c8423 + checksum: 51e2a05f32d15b8e292f000e6b232118df61b8f4fd446b17bb4e99df9ab47fe2c4a01924d7f967a6f08e82f9c19be277b08ed22bceff058aca849144ef8efed3 languageName: node linkType: hard @@ -15224,9 +16720,9 @@ __metadata: linkType: hard "aria-query@npm:^5.0.0": - version: 5.0.2 - resolution: "aria-query@npm:5.0.2" - checksum: 2ecb77a64b9bbb030f5267b8672042b9559bdc507348d7c5efc14a6c180b06704c63481b162913f0466391837569b6d84f93ab18d73629e7bfa34c4f927c1fbc + version: 5.0.0 + resolution: "aria-query@npm:5.0.0" + checksum: c41f98866c5a304561ee8cae55856711cddad6f3f85d8cb43cc5f79667078d9b8979ce32d244c1ff364e6463a4d0b6865804a33ccc717fed701b281cf7dc6296 languageName: node linkType: hard @@ -15258,6 +16754,13 @@ __metadata: languageName: node linkType: hard +"array-filter@npm:^1.0.0": + version: 1.0.0 + resolution: "array-filter@npm:1.0.0" + checksum: 467054291f522d7f633b1f5e79aac9008ade50a7354e0178d9ec8f0091ec03bc19a41d4eb22985daf2279a5c27be6d7cf410733539e7fccb0742145b89aca438 + languageName: node + linkType: hard + "array-flatten@npm:1.1.1": version: 1.1.1 resolution: "array-flatten@npm:1.1.1" @@ -15279,7 +16782,20 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.1.4, array-includes@npm:^3.1.5": +"array-includes@npm:^3.1.2, array-includes@npm:^3.1.4": + version: 3.1.4 + resolution: "array-includes@npm:3.1.4" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + es-abstract: ^1.19.1 + get-intrinsic: ^1.1.1 + is-string: ^1.0.7 + checksum: 69967c38c52698f84b50a7aed5554aadc89c6ac6399b6d92ad061a5952f8423b4bba054c51d40963f791dfa294d7247cdd7988b6b1f2c5861477031c6386e1c0 + languageName: node + linkType: hard + +"array-includes@npm:^3.1.5": version: 3.1.5 resolution: "array-includes@npm:3.1.5" dependencies: @@ -15322,7 +16838,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.flat@npm:^1.2.3, array.prototype.flat@npm:^1.2.5": +"array.prototype.flat@npm:^1.2.3": version: 1.3.0 resolution: "array.prototype.flat@npm:1.3.0" dependencies: @@ -15334,6 +16850,17 @@ __metadata: languageName: node linkType: hard +"array.prototype.flat@npm:^1.2.5": + version: 1.2.5 + resolution: "array.prototype.flat@npm:1.2.5" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + es-abstract: ^1.19.0 + checksum: 9cc6414b111abfc7717e39546e4887b1e5ec74df8f1618d83425deaa95752bf05d475d1d241253b4d88d4a01f8e1bc84845ad5b7cc2047f8db2f614512acd40e + languageName: node + linkType: hard + "array.prototype.flatmap@npm:^1.3.0": version: 1.3.0 resolution: "array.prototype.flatmap@npm:1.3.0" @@ -15374,24 +16901,23 @@ __metadata: languageName: node linkType: hard -"asn1.js@npm:^5.2.0": - version: 5.4.1 - resolution: "asn1.js@npm:5.4.1" +"asn1.js@npm:^4.0.0": + version: 4.10.1 + resolution: "asn1.js@npm:4.10.1" dependencies: bn.js: ^4.0.0 inherits: ^2.0.1 minimalistic-assert: ^1.0.0 - safer-buffer: ^2.1.0 - checksum: 3786a101ac6f304bd4e9a7df79549a7561950a13d4bcaec0c7790d44c80d147c1a94ba3d4e663673406064642a40b23fcd6c82a9952468e386c1a1376d747f9a + checksum: 9289a1a55401238755e3142511d7b8f6fc32f08c86ff68bd7100da8b6c186179dd6b14234fba2f7f6099afcd6758a816708485efe44bc5b2a6ec87d9ceeddbb5 languageName: node linkType: hard "asn1@npm:^0.2.4, asn1@npm:~0.2.3": - version: 0.2.6 - resolution: "asn1@npm:0.2.6" + version: 0.2.4 + resolution: "asn1@npm:0.2.4" dependencies: safer-buffer: ~2.1.0 - checksum: 39f2ae343b03c15ad4f238ba561e626602a3de8d94ae536c46a4a93e69578826305366dc09fbb9b56aec39b4982a463682f259c38e59f6fa380cd72cd61e493d + checksum: aa5d6f77b1e0597df53824c68cfe82d1d89ce41cb3520148611f025fbb3101b2d25dd6a40ad34e4fac10f6b19ed5e8628cd4b7d212261e80e83f02b39ee5663c languageName: node linkType: hard @@ -15454,9 +16980,9 @@ __metadata: linkType: hard "async-lock@npm:^1.1.0": - version: 1.3.2 - resolution: "async-lock@npm:1.3.2" - checksum: d66d6163d4a5c1d09f60118d850da53394a2b8ccae28e0613a88fc33e8b0c2b3266c4f6ed0bc5c9889ad8a926fc886a3e06600775c7264289e8814e39018cd7f + version: 1.2.4 + resolution: "async-lock@npm:1.2.4" + checksum: 9b8cf65bb9ac7b58ff95539a03b73d51f64d0aea95cde1ebf787859670a8998f0a5258f118db6b54305bf6ed20cf3a2f923f4dd69a58d472fa78cca436c42342 languageName: node linkType: hard @@ -15470,9 +16996,9 @@ __metadata: linkType: hard "async@npm:^3.2.0, async@npm:^3.2.3": - version: 3.2.4 - resolution: "async@npm:3.2.4" - checksum: 43d07459a4e1d09b84a20772414aa684ff4de085cbcaec6eea3c7a8f8150e8c62aa6cd4e699fe8ee93c3a5b324e777d34642531875a0817a35697522c1b02e89 + version: 3.2.3 + resolution: "async@npm:3.2.3" + checksum: c4bee57ab2249af3dc83ca3ef9acfa8e822c0d5e5aa41bae3eaf7f673648343cd64ecd7d26091ffd357f3f044428b17b5f00098494b6cf8b6b3e9681f0636ca1 languageName: node linkType: hard @@ -15514,18 +17040,34 @@ __metadata: linkType: hard "autolinker@npm:^3.11.0": - version: 3.16.2 - resolution: "autolinker@npm:3.16.2" + version: 3.14.1 + resolution: "autolinker@npm:3.14.1" dependencies: - tslib: ^2.3.0 - checksum: 1d5d20ef23586629ec3c341052e6bb6250399cf5e66db21540c17b2f5b1137066435fb274a2115b57464d05e75b85afad61ef7cdf6ea693ef2920a3748b7249d + tslib: ^1.9.3 + checksum: e8c0b07053a6d1557953325e500d6e59f4c7c5bb2ae97d0ace9229019133fc0f058ef41636bfc74b6581d98bc4a5e15631dc00cfe0993d0c41b525e2e0652e37 languageName: node linkType: hard -"available-typed-arrays@npm:^1.0.5": - version: 1.0.5 - resolution: "available-typed-arrays@npm:1.0.5" - checksum: 20eb47b3cefd7db027b9bbb993c658abd36d4edd3fe1060e83699a03ee275b0c9b216cc076ff3f2db29073225fb70e7613987af14269ac1fe2a19803ccc97f1a +"available-typed-arrays@npm:^1.0.2": + version: 1.0.2 + resolution: "available-typed-arrays@npm:1.0.2" + dependencies: + array-filter: ^1.0.0 + checksum: 915a89f31bb9ba51f7396d5ae7d8eff99bc6d6ba9f337068a6916e9ba56fa47bfea7ea69f6f6ad131eac57f76582c721e5f0594e8fea7156894313fc41203fbd + languageName: node + linkType: hard + +"aws-lambda@npm:^1.0.7": + version: 1.0.7 + resolution: "aws-lambda@npm:1.0.7" + dependencies: + aws-sdk: ^2.814.0 + commander: ^3.0.2 + js-yaml: ^3.14.1 + watchpack: ^2.0.0-beta.10 + bin: + lambda: bin/lambda + checksum: 11316e87b5c4fc36e6bd0495742a3c0ed13befc9527a7b251a58180d141d9afd68b684f37aeb3b53d117d3c2f96747eace31826b683543f1edddc03f392865fd languageName: node linkType: hard @@ -15552,9 +17094,9 @@ __metadata: languageName: node linkType: hard -"aws-sdk@npm:^2.1122.0, aws-sdk@npm:^2.840.0, aws-sdk@npm:^2.948.0": - version: 2.1218.0 - resolution: "aws-sdk@npm:2.1218.0" +"aws-sdk@npm:^2.1122.0, aws-sdk@npm:^2.814.0, aws-sdk@npm:^2.840.0, aws-sdk@npm:^2.948.0": + version: 2.1209.0 + resolution: "aws-sdk@npm:2.1209.0" dependencies: buffer: 4.9.2 events: 1.1.1 @@ -15566,7 +17108,7 @@ __metadata: util: ^0.12.4 uuid: 8.0.0 xml2js: 0.4.19 - checksum: e1bb41bf8b647e5f6e64f5955beb3972473916af31187d87d20f0a3ed6dab23dff47d490c0d351bb500f331823ec72956c8b510cf232be4bf25386b98652be41 + checksum: da4cae7da28b218dfa67398e5a63acb894b1636337e2842f6e0800bad6eb5fc692d0b703dc84f67fdc9f1d59ee9f82f4ccc9d71fe8fb6a49a8292697ab77b92c languageName: node linkType: hard @@ -15711,39 +17253,39 @@ __metadata: languageName: node linkType: hard -"babel-plugin-polyfill-corejs2@npm:^0.3.3": - version: 0.3.3 - resolution: "babel-plugin-polyfill-corejs2@npm:0.3.3" +"babel-plugin-polyfill-corejs2@npm:^0.3.1": + version: 0.3.1 + resolution: "babel-plugin-polyfill-corejs2@npm:0.3.1" dependencies: - "@babel/compat-data": ^7.17.7 - "@babel/helper-define-polyfill-provider": ^0.3.3 + "@babel/compat-data": ^7.13.11 + "@babel/helper-define-polyfill-provider": ^0.3.1 semver: ^6.1.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 7db3044993f3dddb3cc3d407bc82e640964a3bfe22de05d90e1f8f7a5cb71460011ab136d3c03c6c1ba428359ebf635688cd6205e28d0469bba221985f5c6179 + checksum: ca873f14ccd6d2942013345a956de8165d0913556ec29756a748157140f5312f79eed487674e0ca562285880f05829b3712d72e1e4b412c2ce46bd6a50b4b975 languageName: node linkType: hard -"babel-plugin-polyfill-corejs3@npm:^0.6.0": - version: 0.6.0 - resolution: "babel-plugin-polyfill-corejs3@npm:0.6.0" +"babel-plugin-polyfill-corejs3@npm:^0.5.2": + version: 0.5.2 + resolution: "babel-plugin-polyfill-corejs3@npm:0.5.2" dependencies: - "@babel/helper-define-polyfill-provider": ^0.3.3 - core-js-compat: ^3.25.1 + "@babel/helper-define-polyfill-provider": ^0.3.1 + core-js-compat: ^3.21.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 470bb8c59f7c0912bd77fe1b5a2e72f349b3f65bbdee1d60d6eb7e1f4a085c6f24b2dd5ab4ac6c2df6444a96b070ef6790eccc9edb6a2668c60d33133bfb62c6 + checksum: 2f3184c73f80f00ac876a5ebcad945fd8d2ae70e5f85b7ab6cc3bc69bc74025f4f7070de7abbb2a7274c78e130bd34fc13f4c85342da28205930364a1ef0aa21 languageName: node linkType: hard -"babel-plugin-polyfill-regenerator@npm:^0.4.1": - version: 0.4.1 - resolution: "babel-plugin-polyfill-regenerator@npm:0.4.1" +"babel-plugin-polyfill-regenerator@npm:^0.3.1": + version: 0.3.1 + resolution: "babel-plugin-polyfill-regenerator@npm:0.3.1" dependencies: - "@babel/helper-define-polyfill-provider": ^0.3.3 + "@babel/helper-define-polyfill-provider": ^0.3.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: ab0355efbad17d29492503230387679dfb780b63b25408990d2e4cf421012dae61d6199ddc309f4d2409ce4e9d3002d187702700dd8f4f8770ebbba651ed066c + checksum: f1473df7b700d6795ca41301b1e65a0aff15ce6c1463fc0ce2cf0c821114b0330920f59d4cebf52976363ee817ba29ad2758544a4661a724b08191080b9fe1da languageName: node linkType: hard @@ -15788,8 +17330,8 @@ __metadata: linkType: hard "babel-preset-current-node-syntax@npm:^1.0.0": - version: 1.0.1 - resolution: "babel-preset-current-node-syntax@npm:1.0.1" + version: 1.0.0 + resolution: "babel-preset-current-node-syntax@npm:1.0.0" dependencies: "@babel/plugin-syntax-async-generators": ^7.8.4 "@babel/plugin-syntax-bigint": ^7.8.3 @@ -15805,7 +17347,7 @@ __metadata: "@babel/plugin-syntax-top-level-await": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0 - checksum: d118c2742498c5492c095bc8541f4076b253e705b5f1ad9a2e7d302d81a84866f0070346662355c8e25fc02caa28dc2da8d69bcd67794a0d60c4d6fab6913cc8 + checksum: 05c193dcf11eae66bd43621d49e346c0b94ba18a9d193a612a36cef30732ac5f62092312de76140400551dd13c457a8e79c96ebafb445cc491d993f7ccb9a9de languageName: node linkType: hard @@ -15897,9 +17439,9 @@ __metadata: linkType: hard "bail@npm:^2.0.0": - version: 2.0.2 - resolution: "bail@npm:2.0.2" - checksum: aab4e8ccdc8d762bf3fdfce8e706601695620c0c2eda256dd85088dc0be3cfd7ff126f6e99c2bee1f24f5d418414aacf09d7f9702f16d6963df2fa488cda8824 + version: 2.0.1 + resolution: "bail@npm:2.0.1" + checksum: 5e80e3d71c52f134bf51e9e89570c4e81e50e9ace0126954e4594699cafdf01136535bedf36780ef77802c88be3d3cfb0d0f83495d8d7ddf90e948e4fbaf99c3 languageName: node linkType: hard @@ -15992,7 +17534,7 @@ __metadata: languageName: node linkType: hard -"before-after-hook@npm:^2.2.0": +"before-after-hook@npm:^2.1.0, before-after-hook@npm:^2.2.0": version: 2.2.2 resolution: "before-after-hook@npm:2.2.2" checksum: dc2e1ffe389e5afbef2a46790b1b5a50247ed57aba67649cfa9ec2552d248cc9278f222e72fb5a8ff59bbb39d78fbaa97e7234ead0c6b5e8418b67a8644ce207 @@ -16039,37 +17581,37 @@ __metadata: linkType: hard "big.js@npm:^6.1.1": - version: 6.2.1 - resolution: "big.js@npm:6.2.1" - checksum: 0b234a2fd56c52bed2798ed2020bcab6fef5e9523b99a05406ad071d1aed6ee97ada9fb8de9576092da74c68825c276e19015743b8d1baea269b60a5c666b0cd + version: 6.2.0 + resolution: "big.js@npm:6.2.0" + checksum: 42bcbf0be703c4ae8669c969d0e108f9e1730f20e85bd779e31f7a92d28f6b3e87de96e25ef8657edc0b5dc945a0f66c184ec2654276b86f49e4e9ba025f131a languageName: node linkType: hard "bignumber.js@npm:^9.0.0": - version: 9.1.0 - resolution: "bignumber.js@npm:9.1.0" - checksum: 52ec2bb5a3874d7dc1a1018f28f8f7aff4683515ffd09d6c2d93191343c76567ae0ee32cc45149d53afb2b904bc62ed471a307b35764beea7e9db78e56bef6c6 + version: 9.0.1 + resolution: "bignumber.js@npm:9.0.1" + checksum: 6e72f6069d9db32fc8d27561164de9f811b15f9144be61f323d8b36150a239eea50c92e20ba38af2ba5e717af10b8ef12db8f9948fe2ff02bf17ede5239d15d3 languageName: node linkType: hard "bin-links@npm:^3.0.0": - version: 3.0.3 - resolution: "bin-links@npm:3.0.3" + version: 3.0.0 + resolution: "bin-links@npm:3.0.0" dependencies: - cmd-shim: ^5.0.0 + cmd-shim: ^4.0.1 mkdirp-infer-owner: ^2.0.0 - npm-normalize-package-bin: ^2.0.0 - read-cmd-shim: ^3.0.0 + npm-normalize-package-bin: ^1.0.0 + read-cmd-shim: ^2.0.0 rimraf: ^3.0.0 write-file-atomic: ^4.0.0 - checksum: ea2dc6f91a6ef8b3840ceb48530bbeb8d6d1c6f7985fe1409b16d7e7db39432f0cb5ce15cc2788bb86d989abad6e2c7fba3500996a210a682eec18fb26a66e72 + checksum: 61cec54a913bf1897c29db1ac277c022cc97a7189a55b2ed7343e75955800e4ec149e76b134f9c685947e37196282d652bf1f9fa893919283827b61ca289b170 languageName: node linkType: hard "binary-extensions@npm:^2.0.0": - version: 2.2.0 - resolution: "binary-extensions@npm:2.2.0" - checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 + version: 2.0.0 + resolution: "binary-extensions@npm:2.0.0" + checksum: 554f65d3378cf71c3185c17dec3ca58334b8ff6ae242db3107284765ce33b2af19efd20c11faec41907a40534929e34b3a98e7d391c61e4211b45732dccb1115 languageName: node linkType: hard @@ -16096,10 +17638,10 @@ __metadata: languageName: node linkType: hard -"bintrees@npm:1.0.2": - version: 1.0.2 - resolution: "bintrees@npm:1.0.2" - checksum: 56a52b7d3634e30002b1eda740d2517a22fa8e9e2eb088e919f37c030a0ed86e364ab59e472fc770fc8751308054bb1c892979d150e11d9e11ac33bcc1b5d16e +"bintrees@npm:1.0.1": + version: 1.0.1 + resolution: "bintrees@npm:1.0.1" + checksum: 71d00ce450ee7ad080a3c86ae5f05fac841bdf95c0d78f3b3bbf8f754c19d7cb732f0f9213a46ed27cbec47eb124ffe2b686bef870718a4b9918c23210b55c73 languageName: node linkType: hard @@ -16142,21 +17684,14 @@ __metadata: languageName: node linkType: hard -"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.11.9": +"bn.js@npm:^4.0.0, bn.js@npm:^4.1.0, bn.js@npm:^4.1.1, bn.js@npm:^4.11.9": version: 4.12.0 resolution: "bn.js@npm:4.12.0" checksum: 39afb4f15f4ea537b55eaf1446c896af28ac948fdcf47171961475724d1bb65118cca49fa6e3d67706e4790955ec0e74de584e45c8f1ef89f46c812bee5b5a12 languageName: node linkType: hard -"bn.js@npm:^5.0.0, bn.js@npm:^5.1.1": - version: 5.2.1 - resolution: "bn.js@npm:5.2.1" - checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3 - languageName: node - linkType: hard - -"body-parser@npm:1.20.0, body-parser@npm:^1.19.0": +"body-parser@npm:1.20.0": version: 1.20.0 resolution: "body-parser@npm:1.20.0" dependencies: @@ -16176,15 +17711,33 @@ __metadata: languageName: node linkType: hard +"body-parser@npm:^1.19.0": + version: 1.19.2 + resolution: "body-parser@npm:1.19.2" + dependencies: + bytes: 3.1.2 + content-type: ~1.0.4 + debug: 2.6.9 + depd: ~1.1.2 + http-errors: 1.8.1 + iconv-lite: 0.4.24 + on-finished: ~2.3.0 + qs: 6.9.7 + raw-body: 2.4.3 + type-is: ~1.6.18 + checksum: 7f777ea65670e2622ca4a785b5dcb2a68451b3bb8d4d0f41091d307d56b640dba588a9ae04d85dda2cdd5e42788266a783528d5417e5643720fd611fd52522e7 + languageName: node + linkType: hard + "bonjour-service@npm:^1.0.11": - version: 1.0.14 - resolution: "bonjour-service@npm:1.0.14" + version: 1.0.11 + resolution: "bonjour-service@npm:1.0.11" dependencies: array-flatten: ^2.1.2 dns-equal: ^1.0.0 fast-deep-equal: ^3.1.3 - multicast-dns: ^7.2.5 - checksum: 4a825bbf1824147ba8295a182fb3e86a8bae5159a08e2f118e829a0c988043a559f1f6e4eab425fe17ee9a1f080115d30430e78962e53f75bb03e2021ee7c5b2 + multicast-dns: ^7.2.4 + checksum: b6093a856de9bc303551f1639945318e93782d3c40f03e38def3e2f079f478afd5385cf46538ade86f07205ac4b5f059105832b01eb9ce142fc69d27c006982f languageName: node linkType: hard @@ -16322,30 +17875,28 @@ __metadata: languageName: node linkType: hard -"browserify-rsa@npm:^4.0.0, browserify-rsa@npm:^4.0.1": - version: 4.1.0 - resolution: "browserify-rsa@npm:4.1.0" +"browserify-rsa@npm:^4.0.0": + version: 4.0.1 + resolution: "browserify-rsa@npm:4.0.1" dependencies: - bn.js: ^5.0.0 + bn.js: ^4.1.0 randombytes: ^2.0.1 - checksum: 155f0c135873efc85620571a33d884aa8810e40176125ad424ec9d85016ff105a07f6231650914a760cca66f29af0494087947b7be34880dd4599a0cd3c38e54 + checksum: e5d8406e65f8e9a2e038f6fa0cb30108269a1ab33c1563ddc78fb0fff1a43ea21d44bd3dcd01a783683f60dcbc4b58c63120a11f6d09939e3f84af378e6caef8 languageName: node linkType: hard "browserify-sign@npm:^4.0.0": - version: 4.2.1 - resolution: "browserify-sign@npm:4.2.1" + version: 4.0.4 + resolution: "browserify-sign@npm:4.0.4" dependencies: - bn.js: ^5.1.1 - browserify-rsa: ^4.0.1 - create-hash: ^1.2.0 - create-hmac: ^1.1.7 - elliptic: ^6.5.3 - inherits: ^2.0.4 - parse-asn1: ^5.1.5 - readable-stream: ^3.6.0 - safe-buffer: ^5.2.0 - checksum: 0221f190e3f5b2d40183fa51621be7e838d9caa329fe1ba773406b7637855f37b30f5d83e52ff8f244ed12ffe6278dd9983638609ed88c841ce547e603855707 + bn.js: ^4.1.1 + browserify-rsa: ^4.0.0 + create-hash: ^1.1.0 + create-hmac: ^1.1.2 + elliptic: ^6.0.0 + inherits: ^2.0.1 + parse-asn1: ^5.0.0 + checksum: b1e6f6383f6abbbd5e0f4eb0161cd211cb79af636dd14b5f038db7f3a309b3e026e7e8d7428e3f072a9baace57051a2f45cff311f3b26a901e8be921c3dab847 languageName: node linkType: hard @@ -16358,17 +17909,32 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.16.6, browserslist@npm:^4.18.1, browserslist@npm:^4.20.3, browserslist@npm:^4.21.3": - version: 4.21.4 - resolution: "browserslist@npm:4.21.4" +"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.16.0, browserslist@npm:^4.16.6, browserslist@npm:^4.17.5, browserslist@npm:^4.18.1": + version: 4.19.1 + resolution: "browserslist@npm:4.19.1" dependencies: - caniuse-lite: ^1.0.30001400 - electron-to-chromium: ^1.4.251 - node-releases: ^2.0.6 - update-browserslist-db: ^1.0.9 + caniuse-lite: ^1.0.30001286 + electron-to-chromium: ^1.4.17 + escalade: ^3.1.1 + node-releases: ^2.0.1 + picocolors: ^1.0.0 bin: browserslist: cli.js - checksum: 4af3793704dbb4615bcd29059ab472344dc7961c8680aa6c4bb84f05340e14038d06a5aead58724eae69455b8fade8b8c69f1638016e87e5578969d74c078b79 + checksum: c0777fd483691638fd6801e16c9d809e1d65f6d2b06db2e806654be51045cbab1452a89841a2c5caea2cbe19d621b4f1d391cffbb24512aa33280039ab345875 + languageName: node + linkType: hard + +"browserslist@npm:^4.20.2, browserslist@npm:^4.21.2": + version: 4.21.2 + resolution: "browserslist@npm:4.21.2" + dependencies: + caniuse-lite: ^1.0.30001366 + electron-to-chromium: ^1.4.188 + node-releases: ^2.0.6 + update-browserslist-db: ^1.0.4 + bin: + browserslist: cli.js + checksum: 30fe59f8b065f99665ea63819d29c797660f7975857c290f61f570403abed4d7039ca15b6fd21e39a57b87e1a9262f94676114040766fc0da6ccc11faf9fc377 languageName: node linkType: hard @@ -16441,7 +18007,7 @@ __metadata: languageName: node linkType: hard -"buffer@npm:^5.2.0, buffer@npm:^5.2.1, buffer@npm:^5.5.0, buffer@npm:^5.6.0": +"buffer@npm:^5.2.0, buffer@npm:^5.2.1, buffer@npm:^5.5.0, buffer@npm:^5.6.0, buffer@npm:^5.7.1": version: 5.7.1 resolution: "buffer@npm:5.7.1" dependencies: @@ -16461,17 +18027,10 @@ __metadata: languageName: node linkType: hard -"buildcheck@npm:0.0.3": - version: 0.0.3 - resolution: "buildcheck@npm:0.0.3" - checksum: baf30605c56e80c2ca0502e40e18f2ebc7075bb4a861c941c0b36cd468b27957ed11a62248003ce99b9e5f91a7dfa859b30aad4fa50f0090c77a6f596ba20e6d - languageName: node - linkType: hard - -"builtin-modules@npm:^3.3.0": - version: 3.3.0 - resolution: "builtin-modules@npm:3.3.0" - checksum: db021755d7ed8be048f25668fe2117620861ef6703ea2c65ed2779c9e3636d5c3b82325bd912244293959ff3ae303afa3471f6a15bf5060c103e4cc3a839749d +"builtin-modules@npm:^3.0.0": + version: 3.2.0 + resolution: "builtin-modules@npm:3.2.0" + checksum: 0265aa1ba78e1a16f4e18668d815cb43fb364e6a6b8aa9189c6f44c7b894a551a43b323c40206959d2d4b2568c1f2805607ad6c88adc306a776ce6904cca6715 languageName: node linkType: hard @@ -16515,9 +18074,9 @@ __metadata: linkType: hard "byte-size@npm:^7.0.0": - version: 7.0.1 - resolution: "byte-size@npm:7.0.1" - checksum: 6791663a6d53bf950e896f119d3648fe8d7e8ae677e2ccdae84d0e5b78f21126e25f9d73aa19be2a297cb27abd36b6f5c361c0de36ebb2f3eb8a853f2ac99a4a + version: 7.0.0 + resolution: "byte-size@npm:7.0.0" + checksum: 6cdd45fb64ac3f80d5cbbc01df7974a4613b3e64bd792b6b8211c8669ca3d1f7efd9379ba24cebfc371ce3e890817dcdaf0bd7ed99571fe2de4b946e6c31a138 languageName: node linkType: hard @@ -16535,7 +18094,7 @@ __metadata: languageName: node linkType: hard -"cacache@npm:^15.0.3, cacache@npm:^15.0.5, cacache@npm:^15.2.0": +"cacache@npm:^15.0.3, cacache@npm:^15.0.5, cacache@npm:^15.2.0, cacache@npm:^15.3.0": version: 15.3.0 resolution: "cacache@npm:15.3.0" dependencies: @@ -16562,8 +18121,8 @@ __metadata: linkType: hard "cacache@npm:^16.0.0, cacache@npm:^16.0.6, cacache@npm:^16.1.0": - version: 16.1.3 - resolution: "cacache@npm:16.1.3" + version: 16.1.1 + resolution: "cacache@npm:16.1.1" dependencies: "@npmcli/fs": ^2.1.0 "@npmcli/move-file": ^2.0.0 @@ -16582,8 +18141,8 @@ __metadata: rimraf: ^3.0.2 ssri: ^9.0.0 tar: ^6.1.11 - unique-filename: ^2.0.0 - checksum: d91409e6e57d7d9a3a25e5dcc589c84e75b178ae8ea7de05cbf6b783f77a5fae938f6e8fda6f5257ed70000be27a681e1e44829251bfffe4c10216002f8f14e6 + unique-filename: ^1.1.1 + checksum: 488524617008b793f0249b0c4ea2c330c710ca997921376e15650cc2415a8054491ae2dee9f01382c2015602c0641f3f977faf2fa7361aa33d2637dcfb03907a languageName: node linkType: hard @@ -16605,9 +18164,9 @@ __metadata: linkType: hard "cacheable-lookup@npm:^5.0.3": - version: 5.0.4 - resolution: "cacheable-lookup@npm:5.0.4" - checksum: 763e02cf9196bc9afccacd8c418d942fc2677f22261969a4c2c2e760fa44a2351a81557bd908291c3921fe9beb10b976ba8fa50c5ca837c5a0dd945f16468f2d + version: 5.0.3 + resolution: "cacheable-lookup@npm:5.0.3" + checksum: ad5a6d5cd1630ab03b63741b610f3ed71593879b3de9ba43e6767129b2cbb8303fe24af4ec808584531a85c5605a614902cfdc41f5b6200d8c5f029d6b90c430 languageName: node linkType: hard @@ -16737,10 +18296,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001400": - version: 1.0.30001402 - resolution: "caniuse-lite@npm:1.0.30001402" - checksum: 6068ccccd64b357f75388cb2303cf351b686b20800571d0a845bff5c0e0d24f83df0133afbbdd8177a33eb087c93d39ecf359035a52b2feac5f182c946f706ee +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001286, caniuse-lite@npm:^1.0.30001366": + version: 1.0.30001392 + resolution: "caniuse-lite@npm:1.0.30001392" + checksum: b46fdb4cd63f43e608c9378e9a4cfc1092407fccda32f13f53db8818e0e654e5b2b9e7aee76b95a1a4fd3f2c2eabd1157aef19905f2c60dfcec136b27ac5fce6 languageName: node linkType: hard @@ -16784,9 +18343,9 @@ __metadata: linkType: hard "ccount@npm:^2.0.0": - version: 2.0.1 - resolution: "ccount@npm:2.0.1" - checksum: 48193dada54c9e260e0acf57fc16171a225305548f9ad20d5471e0f7a8c026aedd8747091dccb0d900cde7df4e4ddbd235df0d8de4a64c71b12f0d3303eeafd4 + version: 2.0.0 + resolution: "ccount@npm:2.0.0" + checksum: b238baa1415f259264a8b5fa552929ae1dc46cb46bd94a79deb29d7a814cc4cc36500b24184c38a9f0332d19c6acbb386d5bb5f4f03396140be92edd7294db1c languageName: node linkType: hard @@ -16892,6 +18451,13 @@ __metadata: languageName: node linkType: hard +"character-entities-legacy@npm:^2.0.0": + version: 2.0.0 + resolution: "character-entities-legacy@npm:2.0.0" + checksum: c8941cc75d2a82f36adadc7eaa0116da13ba7600ef2c689c1932ed7b58380e84e2d7237c8795a30017623d3d889c9840aa3327076754af4a329f3030b4cc431e + languageName: node + linkType: hard + "character-entities@npm:^1.0.0": version: 1.2.4 resolution: "character-entities@npm:1.2.4" @@ -16900,9 +18466,9 @@ __metadata: linkType: hard "character-entities@npm:^2.0.0": - version: 2.0.2 - resolution: "character-entities@npm:2.0.2" - checksum: cf1643814023697f725e47328fcec17923b8f1799102a8a79c1514e894815651794a2bffd84bb1b3a4b124b050154e4529ed6e81f7c8068a734aecf07a6d3def + version: 2.0.0 + resolution: "character-entities@npm:2.0.0" + checksum: bacbcacab87fcd61a4f226d9079eb1a582092d1fca581e72a6997d8b0d498225a75413e4401e5fb310f1e8be7bfa8e1485a96f9f12de31178c637c7195fcc78e languageName: node linkType: hard @@ -16913,6 +18479,13 @@ __metadata: languageName: node linkType: hard +"character-reference-invalid@npm:^2.0.0": + version: 2.0.0 + resolution: "character-reference-invalid@npm:2.0.0" + checksum: 0d33a2eb4a7e7b57ed171175faefb0d53434e92203bb9a3e66051cf55de299efe263f39e8c2611733cde100e9229193c1a186148570ba336d5ab0cf5993d6ed5 + languageName: node + linkType: hard + "chardet@npm:^0.7.0": version: 0.7.0 resolution: "chardet@npm:0.7.0" @@ -16968,9 +18541,11 @@ __metadata: linkType: hard "chrome-trace-event@npm:^1.0.2": - version: 1.0.3 - resolution: "chrome-trace-event@npm:1.0.3" - checksum: cb8b1fc7e881aaef973bd0c4a43cd353c2ad8323fb471a041e64f7c2dd849cde4aad15f8b753331a32dda45c973f032c8a03b8177fc85d60eaa75e91e08bfb97 + version: 1.0.2 + resolution: "chrome-trace-event@npm:1.0.2" + dependencies: + tslib: ^1.9.0 + checksum: a104606fd07e6191848fa15d4031ac41c1715d025074574bdbb27d998a20d75d860a2060a5aca840bfbf97ec2ef6b72df9b387ed4109a8fc6eb5c362477c9294 languageName: node linkType: hard @@ -16982,9 +18557,9 @@ __metadata: linkType: hard "ci-info@npm:^3.1.0, ci-info@npm:^3.2.0": - version: 3.4.0 - resolution: "ci-info@npm:3.4.0" - checksum: 7f660730170a6ce248e173b670587a0c583e31526d21afcd21f77c811c1aaeb8926999081542d1f30e12cce1df582d4c88709fa45f44c00498b46bdf21d4d21a + version: 3.3.2 + resolution: "ci-info@npm:3.3.2" + checksum: fd81f1edd2d3b0f6cb077b2e84365136d87b9db8c055928c1ad69da8a76c2c2f19cba8ea51b90238302157ca927f91f92b653e933f2398dde4867500f08d6e62 languageName: node linkType: hard @@ -17027,18 +18602,18 @@ __metadata: linkType: hard "classnames@npm:*, classnames@npm:^2.2.5, classnames@npm:^2.2.6, classnames@npm:^2.3.1": - version: 2.3.2 - resolution: "classnames@npm:2.3.2" - checksum: 2c62199789618d95545c872787137262e741f9db13328e216b093eea91c85ef2bfb152c1f9e63027204e2559a006a92eb74147d46c800a9f96297ae1d9f96f4e + version: 2.3.1 + resolution: "classnames@npm:2.3.1" + checksum: 14db8889d56c267a591f08b0834989fe542d47fac659af5a539e110cc4266694e8de86e4e3bbd271157dbd831361310a8293e0167141e80b0f03a0f175c80960 languageName: node linkType: hard "clean-css@npm:^5.2.2": - version: 5.3.1 - resolution: "clean-css@npm:5.3.1" + version: 5.2.2 + resolution: "clean-css@npm:5.2.2" dependencies: source-map: ~0.6.0 - checksum: 860696c60503cbfec480b5f92f62729246304b55950571af7292f2687b57f86b277f2b9fefe6f64643d409008018b78383972b55c2cc859792dcc8658988fb16 + checksum: 10855820829b8b6ea94e462313fdc177b297aca5c7870a969591549d6a766824f912b5e58773bd345b2a7effae863ab492258b5a77a40029fba6d11d861cbee3 languageName: node linkType: hard @@ -17066,31 +18641,31 @@ __metadata: linkType: hard "cli-spinners@npm:^2.5.0": - version: 2.7.0 - resolution: "cli-spinners@npm:2.7.0" - checksum: a9afaf73f58d1f951fb23742f503631b3cf513f43f4c7acb1b640100eb76bfa16efbcd1994d149ffc6603a6d75dd3d4a516a76f125f90dce437de9b16fd0ee6f + version: 2.5.0 + resolution: "cli-spinners@npm:2.5.0" + checksum: 9cd7c3e22f9243c2b8436bd405d4c7aa5c7b432112fed0c9b7e1d773f8d12fb30e15083ed45474b28d5e8de490d4299dc8a213c327931a25cc998a44b4a2d747 languageName: node linkType: hard "cli-table3@npm:~0.6.1": - version: 0.6.3 - resolution: "cli-table3@npm:0.6.3" + version: 0.6.1 + resolution: "cli-table3@npm:0.6.1" dependencies: - "@colors/colors": 1.5.0 + colors: 1.4.0 string-width: ^4.2.0 dependenciesMeta: - "@colors/colors": + colors: optional: true - checksum: 09897f68467973f827c04e7eaadf13b55f8aec49ecd6647cc276386ea660059322e2dd8020a8b6b84d422dbdd619597046fa89cbbbdc95b2cea149a2df7c096c + checksum: 956e175f8eb019c26465b9f1e51121c08d8978e2aab04be7f8520ea8a4e67906fcbd8516dfb77e386ae3730ef0281aa21a65613dffbfa3d62969263252bd25a9 languageName: node linkType: hard "cli-table@npm:^0.3.1": - version: 0.3.11 - resolution: "cli-table@npm:0.3.11" + version: 0.3.6 + resolution: "cli-table@npm:0.3.6" dependencies: colors: 1.0.3 - checksum: 59fb61f992ac9bc8610ed98c72bf7f5d396c5afb42926b6747b46b0f8bb98a0dfa097998e77542ac334c1eb7c18dbf4f104d5783493273c5ec4c34084aa7c663 + checksum: b0cd08578c810240920438cc2b3ffb4b4f5106b29f3362707f1d8cfc0c0440ad2afb70b96e30ce37f72f0ffe1e844ae7341dde4df17d51ad345eb186a5903af2 languageName: node linkType: hard @@ -17173,11 +18748,11 @@ __metadata: linkType: hard "clone-response@npm:^1.0.2": - version: 1.0.3 - resolution: "clone-response@npm:1.0.3" + version: 1.0.2 + resolution: "clone-response@npm:1.0.2" dependencies: mimic-response: ^1.0.0 - checksum: 4e671cac39b11c60aa8ba0a450657194a5d6504df51bca3fac5b3bd0145c4f8e8464898f87c8406b83232e3bc5cca555f51c1f9c8ac023969ebfbf7f6bdabb2e + checksum: 2d0e61547fc66276e0903be9654ada422515f5a15741691352000d47e8c00c226061221074ce2c0064d12e975e84a8687cfd35d8b405750cb4e772f87b256eda languageName: node linkType: hard @@ -17214,9 +18789,9 @@ __metadata: linkType: hard "clsx@npm:^1.0.2, clsx@npm:^1.0.4": - version: 1.2.1 - resolution: "clsx@npm:1.2.1" - checksum: 30befca8019b2eb7dbad38cff6266cf543091dae2825c856a62a8ccf2c3ab9c2907c4d12b288b73101196767f66812365400a227581484a05f968b0307cfaf12 + version: 1.1.1 + resolution: "clsx@npm:1.1.1" + checksum: ff052650329773b9b245177305fc4c4dc3129f7b2be84af4f58dc5defa99538c61d4207be7419405a5f8f3d92007c954f4daba5a7b74e563d5de71c28c830063 languageName: node linkType: hard @@ -17227,7 +18802,7 @@ __metadata: languageName: node linkType: hard -"cmd-shim@npm:^4.1.0": +"cmd-shim@npm:^4.0.1, cmd-shim@npm:^4.1.0": version: 4.1.0 resolution: "cmd-shim@npm:4.1.0" dependencies: @@ -17236,15 +18811,6 @@ __metadata: languageName: node linkType: hard -"cmd-shim@npm:^5.0.0": - version: 5.0.0 - resolution: "cmd-shim@npm:5.0.0" - dependencies: - mkdirp-infer-owner: ^2.0.0 - checksum: 83d2a46cdf4adbb38d3d3184364b2df0e4c001ac770f5ca94373825d7a48838b4cb8a59534ef48f02b0d556caa047728589ca65c640c17c0b417b3afb34acfbb - languageName: node - linkType: hard - "co@npm:^4.6.0": version: 4.6.0 resolution: "co@npm:4.6.0" @@ -17253,9 +18819,11 @@ __metadata: linkType: hard "code-block-writer@npm:^11.0.0": - version: 11.0.3 - resolution: "code-block-writer@npm:11.0.3" - checksum: f0a2605f19963d7087267c9b0fd0b05a6638a50e7b29b70f97aa01a514f59475b0626f8aa092188df853ee6d96745426dfa132d6a677795df462c6ce32c21639 + version: 11.0.0 + resolution: "code-block-writer@npm:11.0.0" + dependencies: + tslib: 2.3.1 + checksum: d3d92a06f762d5926ecdb2033e4f30eb4c51aca365ea69ef424afbce7cc2b1518a50deff2645cc17b6fa53f234d664631f2268a4caf91af6a1fd696aa0b2fefb languageName: node linkType: hard @@ -17287,15 +18855,15 @@ __metadata: linkType: hard "codemirror@npm:^5.65.3": - version: 5.65.8 - resolution: "codemirror@npm:5.65.8" - checksum: e56a59c2251b357b3d95862f77ac8b8d2b1b0c52db58a2dcf5b8b0531fd249ad4458cbd9a469ce1513475ba48ba39ffd16bd3876eb3870a1305bcafcb157239f + version: 5.65.3 + resolution: "codemirror@npm:5.65.3" + checksum: 89bc7f99c15a021bfd3671a943e58589cd5108f08738882d79458a4f432a05ff1d50bb664e7d0c02c639ec98241c9840f1fd9de5f458a7b0e15628892839aef0 languageName: node linkType: hard "codemirror@npm:^6.0.0": - version: 6.0.1 - resolution: "codemirror@npm:6.0.1" + version: 6.0.0 + resolution: "codemirror@npm:6.0.0" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/commands": ^6.0.0 @@ -17304,7 +18872,7 @@ __metadata: "@codemirror/search": ^6.0.0 "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 - checksum: 1a78f7077ac5801bdbff162aa0c61bf2b974603c7e9a477198c3ce50c789af674a061d7c293c58b73807eda345c2b5228c38ad2aabb9319d552d5486f785cbef + checksum: 42fb2b5ac5d4b8616a733de5efd7913764c1d13dcc27f732af5ed5e98f657a53ab5549437b53d73ed89d004423141ee65612a5e54c451538ef6d75afed4cd3e2 languageName: node linkType: hard @@ -17321,9 +18889,9 @@ __metadata: linkType: hard "collect-v8-coverage@npm:^1.0.0": - version: 1.0.1 - resolution: "collect-v8-coverage@npm:1.0.1" - checksum: 4efe0a1fccd517b65478a2364b33dadd0a43fc92a56f59aaece9b6186fe5177b2de471253587de7c91516f07c7268c2f6770b6cbcffc0e0ece353b766ec87e55 + version: 1.0.0 + resolution: "collect-v8-coverage@npm:1.0.0" + checksum: 99d6059eb0e04bf792e27824d43d1139ede28914b7f55ddedd9c43594926221579fa6925ecc7e2f47dec14f5199e5ea3afbfc1da9a32ad542f859022d57f9d80 languageName: node linkType: hard @@ -17344,7 +18912,7 @@ __metadata: languageName: node linkType: hard -"color-convert@npm:^1.9.0, color-convert@npm:^1.9.3": +"color-convert@npm:^1.9.0, color-convert@npm:^1.9.1": version: 1.9.3 resolution: "color-convert@npm:1.9.3" dependencies: @@ -17376,13 +18944,13 @@ __metadata: languageName: node linkType: hard -"color-string@npm:^1.6.0, color-string@npm:^1.9.0": - version: 1.9.1 - resolution: "color-string@npm:1.9.1" +"color-string@npm:^1.5.2, color-string@npm:^1.9.0": + version: 1.9.0 + resolution: "color-string@npm:1.9.0" dependencies: color-name: ^1.0.0 simple-swizzle: ^0.2.2 - checksum: c13fe7cff7885f603f49105827d621ce87f4571d78ba28ef4a3f1a104304748f620615e6bf065ecd2145d0d9dad83a3553f52bb25ede7239d18e9f81622f1cc5 + checksum: 93c6678b847f8cfa47d19677fd19e1d4b19d7a33f100644400357c298266080b5bca64e5f874fa8ac8cc0aa0606ad44f7a838b4e6fd05e6affea190a68555bb4 languageName: node linkType: hard @@ -17395,13 +18963,13 @@ __metadata: languageName: node linkType: hard -"color@npm:^3.1.3": - version: 3.2.1 - resolution: "color@npm:3.2.1" +"color@npm:3.0.x": + version: 3.0.0 + resolution: "color@npm:3.0.0" dependencies: - color-convert: ^1.9.3 - color-string: ^1.6.0 - checksum: f81220e8b774d35865c2561be921f5652117638dcda7ca4029262046e37fc2444ac7bbfdd110cf1fd9c074a4ee5eda8f85944ffbdda26186b602dd9bb05f6400 + color-convert: ^1.9.1 + color-string: ^1.5.2 + checksum: 273fe5d4c2a322dbc0e184ef6c891cbefefa11af7c6a8ed6001ff6986af747038cf3258bd4f4b715415f287c556efc8d1f0368bc02240877610ae1d427887537 languageName: node linkType: hard @@ -17416,19 +18984,26 @@ __metadata: linkType: hard "colord@npm:^2.9.1": - version: 2.9.3 - resolution: "colord@npm:2.9.3" - checksum: 95d909bfbcfd8d5605cbb5af56f2d1ce2b323990258fd7c0d2eb0e6d3bb177254d7fb8213758db56bb4ede708964f78c6b992b326615f81a18a6aaf11d64c650 + version: 2.9.1 + resolution: "colord@npm:2.9.1" + checksum: c47ff86c6ffc28ac55812c64fe35563809ccf860687506e4127137dcd27595b49610b85dcf3551b39a1c19af6a1a41ed41a42043ef6e795f787f29e4e49b4014 languageName: node linkType: hard -"colorette@npm:2.0.19, colorette@npm:^2.0.10, colorette@npm:^2.0.16, colorette@npm:^2.0.17": +"colorette@npm:2.0.19, colorette@npm:^2.0.16, colorette@npm:^2.0.17": version: 2.0.19 resolution: "colorette@npm:2.0.19" checksum: 888cf5493f781e5fcf54ce4d49e9d7d698f96ea2b2ef67906834bb319a392c667f9ec69f4a10e268d2946d13a9503d2d19b3abaaaf174e3451bfe91fb9d82427 languageName: node linkType: hard +"colorette@npm:^2.0.10": + version: 2.0.16 + resolution: "colorette@npm:2.0.16" + checksum: cd55596a3a2d1071c1a28eee7fd8a5387593ff1bd10a3e8d0a6221499311fe34a9f2b9272d77c391e0e003dcdc8934fb2f8d106e7ef1f7516f8060c901d41a27 + languageName: node + linkType: hard + "colors@npm:1.0.3": version: 1.0.3 resolution: "colors@npm:1.0.3" @@ -17436,6 +19011,13 @@ __metadata: languageName: node linkType: hard +"colors@npm:1.4.0": + version: 1.4.0 + resolution: "colors@npm:1.4.0" + checksum: 98aa2c2418ad87dedf25d781be69dc5fc5908e279d9d30c34d8b702e586a0474605b3a189511482b9d5ed0d20c867515d22749537f7bc546256c6014f3ebdcec + languageName: node + linkType: hard + "colors@npm:~1.2.1": version: 1.2.5 resolution: "colors@npm:1.2.5" @@ -17444,22 +19026,22 @@ __metadata: linkType: hard "colorspace@npm:1.1.x": - version: 1.1.4 - resolution: "colorspace@npm:1.1.4" + version: 1.1.2 + resolution: "colorspace@npm:1.1.2" dependencies: - color: ^3.1.3 + color: 3.0.x text-hex: 1.0.x - checksum: bb3934ef3c417e961e6d03d7ca60ea6e175947029bfadfcdb65109b01881a1c0ecf9c2b0b59abcd0ee4a0d7c1eae93beed01b0e65848936472270a0b341ebce8 + checksum: a959ec1669176aa72185067b7d04dae1cef2698456e1a452a035ce8adcac95673fbb1547e3240903355bcbaa67e031cca0b8b4f7d42c256b3dd94dcead8e1405 languageName: node linkType: hard "columnify@npm:^1.5.4": - version: 1.6.0 - resolution: "columnify@npm:1.6.0" + version: 1.5.4 + resolution: "columnify@npm:1.5.4" dependencies: - strip-ansi: ^6.0.1 + strip-ansi: ^3.0.0 wcwidth: ^1.0.0 - checksum: 0d590023616a27bcd2135c0f6ddd6fac94543263f9995538bbe391068976e30545e5534d369737ec7c3e9db4e53e70a277462de46aeb5a36e6997b4c7559c335 + checksum: f0693937412ec41d387f8ae89ff8cd5811a07ad636f753f0276ba8394fd76c0f610621ebeb379d6adcb30d98696919546dbbf93a28bd4e546efc7e30d905edc2 languageName: node linkType: hard @@ -17514,13 +19096,20 @@ __metadata: languageName: node linkType: hard -"commander@npm:^2.20.0, commander@npm:^2.20.3": +"commander@npm:^2.20.0, commander@npm:^2.20.3, commander@npm:^2.7.1": version: 2.20.3 resolution: "commander@npm:2.20.3" checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e languageName: node linkType: hard +"commander@npm:^3.0.2": + version: 3.0.2 + resolution: "commander@npm:3.0.2" + checksum: 6d14ad030d1904428139487ed31febcb04c1604db2b8d9fae711f60ee6718828dc0e11602249e91c8a97b0e721e9c6d53edbc166bad3cde1596851d59a8f824d + languageName: node + linkType: hard + "commander@npm:^4.0.0": version: 4.1.1 resolution: "commander@npm:4.1.1" @@ -17615,15 +19204,25 @@ __metadata: languageName: node linkType: hard +"compress-brotli@npm:^1.3.8": + version: 1.3.8 + resolution: "compress-brotli@npm:1.3.8" + dependencies: + "@types/json-buffer": ~3.0.0 + json-buffer: ~3.0.1 + checksum: de7589d692d40eb362f6c91070b5e51bc10b05a89eabb4a7c76c1aa21b625756f8c101c6999e4df0c4dc6199c5ca2e1353573bfdcca5615810f27485394162a5 + languageName: node + linkType: hard + "compress-commons@npm:^4.1.0": - version: 4.1.1 - resolution: "compress-commons@npm:4.1.1" + version: 4.1.0 + resolution: "compress-commons@npm:4.1.0" dependencies: buffer-crc32: ^0.2.13 - crc32-stream: ^4.0.2 + crc32-stream: ^4.0.1 normalize-path: ^3.0.0 readable-stream: ^3.6.0 - checksum: 0176483211a7304a4a8aa52dbcc149a4c9181ac8a04bfbcc3d1a379174bf5fa56c3b15cec19e5ae3d31f1b1ce35ebb275b792b867000c77bac7162ce4e0ca268 + checksum: 3348bea7a1cce04b430f6ec3125eebbc0e23bd8dd14d30ec2fb113d3733f95ae6b12d5b33ad794e7ceab70f57e38a6c2642d96a64bc83e490a3ddae8db469949 languageName: node linkType: hard @@ -17721,11 +19320,11 @@ __metadata: linkType: hard "concurrently@npm:^7.0.0": - version: 7.4.0 - resolution: "concurrently@npm:7.4.0" + version: 7.3.0 + resolution: "concurrently@npm:7.3.0" dependencies: chalk: ^4.1.0 - date-fns: ^2.29.1 + date-fns: ^2.16.1 lodash: ^4.17.21 rxjs: ^7.0.0 shell-quote: ^1.7.3 @@ -17734,19 +19333,18 @@ __metadata: tree-kill: ^1.2.2 yargs: ^17.3.1 bin: - conc: dist/bin/concurrently.js concurrently: dist/bin/concurrently.js - checksum: cc547866ad8d009d184ca3a7115d6636052a5f56f5429d123092d651286043d7233f6429257e30e50f509894cd12798ea831896ac18092d8135f67ffcc8ac3ea + checksum: 5de845e4947c550a6ff74ecc80e1897109abe339fe8a7fa117e7b8978362566ac4ee070e4475bdaa6fc453f780fadb9089739a02606e27e04affaa7dd8905d2d languageName: node linkType: hard "config-chain@npm:^1.1.12": - version: 1.1.13 - resolution: "config-chain@npm:1.1.13" + version: 1.1.12 + resolution: "config-chain@npm:1.1.12" dependencies: ini: ^1.3.4 proto-list: ~1.2.1 - checksum: 828137a28e7c2fc4b7fb229bd0cd6c1397bcf83434de54347e608154008f411749041ee392cbe42fab6307e02de4c12480260bf769b7d44b778fdea3839eafab + checksum: a16332f87212b4015afcdfc95fe42b40b162e7f10b4f4370ab3239979b6e69a41b4e6fb34d7891aa028a557f2340da236f810df433b18dfa5c408b2eb8489bf7 languageName: node linkType: hard @@ -17829,12 +19427,12 @@ __metadata: linkType: hard "conventional-changelog-angular@npm:^5.0.12": - version: 5.0.13 - resolution: "conventional-changelog-angular@npm:5.0.13" + version: 5.0.12 + resolution: "conventional-changelog-angular@npm:5.0.12" dependencies: compare-func: ^2.0.0 q: ^1.5.1 - checksum: 6ed4972fce25a50f9f038c749cc9db501363131b0fb2efc1fccecba14e4b1c80651d0d758d4c350a609f32010c66fa343eefd49c02e79e911884be28f53f3f90 + checksum: 552db8762d210a5172b1ad8cd95312e2e2a0483ba43f8d30b075a56ccf05231fdca1d4d5843028d43bec6bc7f903f480005efc5386587321a15a1fc4d2b73016 languageName: node linkType: hard @@ -17897,8 +19495,8 @@ __metadata: linkType: hard "conventional-commits-parser@npm:^3.2.0": - version: 3.2.4 - resolution: "conventional-commits-parser@npm:3.2.4" + version: 3.2.1 + resolution: "conventional-commits-parser@npm:3.2.1" dependencies: JSONStream: ^1.0.4 is-text-path: ^1.0.1 @@ -17906,9 +19504,10 @@ __metadata: meow: ^8.0.0 split2: ^3.0.0 through2: ^4.0.0 + trim-off-newlines: ^1.0.0 bin: conventional-commits-parser: cli.js - checksum: 1627ff203bc9586d89e47a7fe63acecf339aba74903b9114e23d28094f79d4e2d6389bf146ae561461dcba8fc42e7bc228165d2b173f15756c43f1d32bc50bfd + checksum: 01b83c625ac3d8f9dca0510a5e21385c9bb410b80bcb60dcfdef20e1fa7fe7fad5a280aa5e1dff8ac32ea0aea5966fa973696557d38f831f8630d4fcf31756d5 languageName: node linkType: hard @@ -17931,11 +19530,11 @@ __metadata: linkType: hard "convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": - version: 1.8.0 - resolution: "convert-source-map@npm:1.8.0" + version: 1.7.0 + resolution: "convert-source-map@npm:1.7.0" dependencies: safe-buffer: ~5.1.1 - checksum: 985d974a2d33e1a2543ada51c93e1ba2f73eaed608dc39f229afc78f71dcc4c8b7d7c684aa647e3c6a3a204027444d69e53e169ce94e8d1fa8d7dee80c9c8fed + checksum: bcd2e3ea7d37f96b85a6e362c8a89402ccc73757256e3ee53aa2c22fe915adb854c66b1f81111be815a3a6a6ce3c58e8001858e883c9d5b4fe08a853fa865967 languageName: node linkType: hard @@ -17992,27 +19591,28 @@ __metadata: linkType: hard "copy-to-clipboard@npm:^3, copy-to-clipboard@npm:^3.2.0, copy-to-clipboard@npm:^3.3.1": - version: 3.3.2 - resolution: "copy-to-clipboard@npm:3.3.2" + version: 3.3.1 + resolution: "copy-to-clipboard@npm:3.3.1" dependencies: toggle-selection: ^1.0.6 - checksum: 968ec7ec3d0cf3067542b63dd244ba5d05e743899d7a0361fb0a3130e731d277f5ea54ea4d90fc88cc66eea2e4c67dc2dd8698e4ed360f921af5aa7c60b889ac + checksum: 3c7b1c333dc6a4b2e9905f52e4df6bbd34ff9f9c97ecd3ca55378a6bc1c191bb12a3252e6289c7b436e9188cff0360d393c0161626851d2301607860bbbdcfd5 languageName: node linkType: hard -"core-js-compat@npm:^3.25.1": - version: 3.25.1 - resolution: "core-js-compat@npm:3.25.1" +"core-js-compat@npm:^3.21.0, core-js-compat@npm:^3.22.1": + version: 3.23.5 + resolution: "core-js-compat@npm:3.23.5" dependencies: - browserslist: ^4.21.3 - checksum: 34dbec657adc2f660f4cd701709c9c5e27cbd608211c65df09458f80f3e357b9492ba1c5173e17cca72d889dcc6da01268cadf88fb407cf1726e76d301c6143e + browserslist: ^4.21.2 + semver: 7.0.0 + checksum: c2398a39239a782ba1b9531a80b25f8d9fb8d98de8bf980f32140e9be3d2852afb797517afdf3a15f9319bcd25d594b3d3d2a500dce7c338532532565c9e83cb languageName: node linkType: hard -"core-js-pure@npm:^3.25.1, core-js-pure@npm:^3.6.5, core-js-pure@npm:^3.8.1": - version: 3.25.1 - resolution: "core-js-pure@npm:3.25.1" - checksum: 0123131ec7ab3a1e56f0b4df4ae659de03d9c245ce281637d4d0f18f9839d8e0cfbfa989bd577ce1b67826f889a7dcc734421f697cf1bbe59f605f29c537a678 +"core-js-pure@npm:^3.20.2, core-js-pure@npm:^3.6.5, core-js-pure@npm:^3.8.1": + version: 3.21.1 + resolution: "core-js-pure@npm:3.21.1" + checksum: 00a5dff599b7fb0b30746a638b9d0edbdc0df24ed1580ca56be595fbe3c78c375d37fc4e1bff23627109229702c9ee8ea2587a66b8280eb33b85160aa4e401e9 languageName: node linkType: hard @@ -18023,27 +19623,27 @@ __metadata: languageName: node linkType: hard -"core-js@npm:^3.4.1, core-js@npm:^3.6.5": - version: 3.25.1 - resolution: "core-js@npm:3.25.1" - checksum: bfacb078e790913841e2d5008b9b6705ae56ed23f83c7f0ae08d330d874561012611089d53b71520105234ed0abba36f28d91b391514a16541a8c8d98c464239 +"core-js@npm:^3.4.1": + version: 3.25.0 + resolution: "core-js@npm:3.25.0" + checksum: 5a72740bf5babaf2e6203da4c0e831a0b97c3fe6f21b4c1aa8601d3a927660a22128dd8f0e86ce84778c4e5372ab0fc03c7944afa7e215c7fb13b2c79d5d5504 languageName: node linkType: hard -"core-util-is@npm:1.0.2": +"core-js@npm:^3.6.5": + version: 3.25.2 + resolution: "core-js@npm:3.25.2" + checksum: e93c6c645d44d98973efb07750975552ad405f080f5a563a99972ff6b2c5c6ee25705f55accd363f5dccd51e9e5f56be25e2be6c14a7294da65763e0e5659c02 + languageName: node + linkType: hard + +"core-util-is@npm:1.0.2, core-util-is@npm:~1.0.0": version: 1.0.2 resolution: "core-util-is@npm:1.0.2" checksum: 7a4c925b497a2c91421e25bf76d6d8190f0b2359a9200dbeed136e63b2931d6294d3b1893eda378883ed363cd950f44a12a401384c609839ea616befb7927dab languageName: node linkType: hard -"core-util-is@npm:~1.0.0": - version: 1.0.3 - resolution: "core-util-is@npm:1.0.3" - checksum: 9de8597363a8e9b9952491ebe18167e3b36e7707569eed0ebf14f8bba773611376466ae34575bca8cfe3c767890c859c74056084738f09d4e4a6f902b2ad7d99 - languageName: node - linkType: hard - "cors@npm:^2.8.5": version: 2.8.5 resolution: "cors@npm:2.8.5" @@ -18064,14 +19664,14 @@ __metadata: linkType: hard "cosmiconfig-typescript-loader@npm:^4.0.0": - version: 4.1.0 - resolution: "cosmiconfig-typescript-loader@npm:4.1.0" + version: 4.0.0 + resolution: "cosmiconfig-typescript-loader@npm:4.0.0" peerDependencies: "@types/node": "*" cosmiconfig: ">=7" ts-node: ">=10" typescript: ">=3" - checksum: 434f68e75ea8559deb0058cb06ac0a25ec5c0e65fafc21a891bac863e18cf944bd881b0d80188d02f599e061c3f0e42156f6405e4a299975e40cb1bd740a9b24 + checksum: 9151ffe62d0b3b0bac7435add229febf04d72f4db8199390813fef071343865e91e823bd75210f9aabe218dc97a2cc2c776120c0dc886e9164947b80a910c19b languageName: node linkType: hard @@ -18101,47 +19701,49 @@ __metadata: languageName: node linkType: hard -"cpu-features@npm:~0.0.4": - version: 0.0.4 - resolution: "cpu-features@npm:0.0.4" +"cpu-features@npm:0.0.2": + version: 0.0.2 + resolution: "cpu-features@npm:0.0.2" dependencies: - buildcheck: 0.0.3 - nan: ^2.15.0 + nan: ^2.14.1 node-gyp: latest - checksum: a20d58e41e63182b34753dfe23bd1d967944ec13d84b70849b5d334fb4a558b7e71e7f955ed86c8e75dd65b5c5b882f1c494174d342cb6d8a062d77f79d39596 + checksum: 15177f9a2d465e4d84390f902c977b34f237dadb29fd8553853b13d906ffe5f15be9f091c72db4f34c71412d5ff4e0e4edf04caebc875b02d1d7ecfce2963299 languageName: node linkType: hard "crc-32@npm:^1.2.0": - version: 1.2.2 - resolution: "crc-32@npm:1.2.2" + version: 1.2.0 + resolution: "crc-32@npm:1.2.0" + dependencies: + exit-on-epipe: ~1.0.1 + printj: ~1.1.0 bin: - crc32: bin/crc32.njs - checksum: ad2d0ad0cbd465b75dcaeeff0600f8195b686816ab5f3ba4c6e052a07f728c3e70df2e3ca9fd3d4484dc4ba70586e161ca5a2334ec8bf5a41bf022a6103ff243 + crc32: ./bin/crc32.njs + checksum: 7bcde8bea262f6629ac3c70e20bdfa3d058dc77091705ce8620513f76f19b41fc273ddd65a716eef9b4e33fbb61ff7f9b266653d214319aef27e4223789c6b9e languageName: node linkType: hard -"crc32-stream@npm:^4.0.2": - version: 4.0.2 - resolution: "crc32-stream@npm:4.0.2" +"crc32-stream@npm:^4.0.1": + version: 4.0.1 + resolution: "crc32-stream@npm:4.0.1" dependencies: crc-32: ^1.2.0 readable-stream: ^3.4.0 - checksum: 1099559283b86e8a55390228b57ff4d57a74cac6aa8086aa4730f84317c9f93e914aeece115352f2d706a9df7ed75327ffacd86cfe23f040aef821231b528e76 + checksum: 39c2e0d5d7a3388e85ccf27ef0b30475f98902d34e7a048decc1665ff67f98f17f850059b28942fdf5582cb836eaa5184453ec35a6ea2442ce3bc10c8f1ee8a4 languageName: node linkType: hard "create-ecdh@npm:^4.0.0": - version: 4.0.4 - resolution: "create-ecdh@npm:4.0.4" + version: 4.0.3 + resolution: "create-ecdh@npm:4.0.3" dependencies: bn.js: ^4.1.0 - elliptic: ^6.5.3 - checksum: 0dd7fca9711d09e152375b79acf1e3f306d1a25ba87b8ff14c2fd8e68b83aafe0a7dd6c4e540c9ffbdd227a5fa1ad9b81eca1f233c38bb47770597ba247e614b + elliptic: ^6.0.0 + checksum: 0678955daf937c188c69b2a601ebcbe4ab02ca3c1aa04f62d5fb5511430d0141802207eabf9aa100351920ea89bfcbe53ba8bd4c013a1a3453fd807549a5ede2 languageName: node linkType: hard -"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2, create-hash@npm:^1.2.0": +"create-hash@npm:^1.1.0, create-hash@npm:^1.1.2": version: 1.2.0 resolution: "create-hash@npm:1.2.0" dependencies: @@ -18154,7 +19756,7 @@ __metadata: languageName: node linkType: hard -"create-hmac@npm:^1.1.0, create-hmac@npm:^1.1.4, create-hmac@npm:^1.1.7": +"create-hmac@npm:^1.1.0, create-hmac@npm:^1.1.2, create-hmac@npm:^1.1.4": version: 1.1.7 resolution: "create-hmac@npm:1.1.7" dependencies: @@ -18183,11 +19785,11 @@ __metadata: linkType: hard "cron@npm:^2.0.0": - version: 2.1.0 - resolution: "cron@npm:2.1.0" + version: 2.0.0 + resolution: "cron@npm:2.0.0" dependencies: luxon: ^1.23.x - checksum: 9395875c091f56db7964491c249cb143d2e4ba77560d7132da783943c1b0537ef1814eb8f552c81eda5a2aa153216dd3f5b7ff63e372a68a063fcfafe8231f91 + checksum: 179ec137ada4ceb44cafe51c55491e84954308d7012d2a44539f0dadbbb1ffbbe3072c2f7aaa88595d60bd56e0d536aae2e4aaa4430c869317d6c2abd966988b languageName: node linkType: hard @@ -18210,7 +19812,7 @@ __metadata: languageName: node linkType: hard -"cross-fetch@npm:3.1.5, cross-fetch@npm:^3.1.3, cross-fetch@npm:^3.1.5": +"cross-fetch@npm:3.1.5, cross-fetch@npm:^3.0.4, cross-fetch@npm:^3.1.3, cross-fetch@npm:^3.1.5": version: 3.1.5 resolution: "cross-fetch@npm:3.1.5" dependencies: @@ -18241,6 +19843,21 @@ __metadata: languageName: node linkType: hard +"cross-undici-fetch@npm:^0.4.11": + version: 0.4.11 + resolution: "cross-undici-fetch@npm:0.4.11" + dependencies: + abort-controller: ^3.0.0 + busboy: ^1.6.0 + form-data-encoder: ^1.7.1 + formdata-node: ^4.3.1 + node-fetch: ^2.6.7 + undici: 5.5.1 + web-streams-polyfill: ^3.2.0 + checksum: 76927df814f5ac8f5656d69099d20f9970acdfe309a46908913c68e17cf16f4454eeeae3dfc6e9f6fb9efddf1c11a10b805a97d02dedd258efcd3e575e09bc3f + languageName: node + linkType: hard + "crypto-browserify@npm:^3.11.0": version: 3.12.0 resolution: "crypto-browserify@npm:3.12.0" @@ -18287,12 +19904,14 @@ __metadata: languageName: node linkType: hard -"css-declaration-sorter@npm:^6.3.0": - version: 6.3.1 - resolution: "css-declaration-sorter@npm:6.3.1" +"css-declaration-sorter@npm:^6.0.3": + version: 6.1.3 + resolution: "css-declaration-sorter@npm:6.1.3" + dependencies: + timsort: ^0.3.0 peerDependencies: postcss: ^8.0.9 - checksum: ff0d9989ee21ec4c42430b9bb86c43f973ed5024d68f30edc1e3fb07a22828ce3c3e5b922019f2ccbff606722e43c407c5c76e3cddac523ac4afcb31e4b2601c + checksum: 6fdacdce48e1351a8fd73472b7dfaae573ce7d4f5bba8385afc9c765d01055920b851d288228ecb0d535d163b22f8d7941e095b9da995956cd3309e41d1bffa2 languageName: node linkType: hard @@ -18325,15 +19944,15 @@ __metadata: linkType: hard "css-select@npm:^4.1.3": - version: 4.3.0 - resolution: "css-select@npm:4.3.0" + version: 4.1.3 + resolution: "css-select@npm:4.1.3" dependencies: boolbase: ^1.0.0 - css-what: ^6.0.1 - domhandler: ^4.3.1 - domutils: ^2.8.0 - nth-check: ^2.0.1 - checksum: d6202736839194dd7f910320032e7cfc40372f025e4bf21ca5bf6eb0a33264f322f50ba9c0adc35dadd342d3d6fae5ca244779a4873afbfa76561e343f2058e0 + css-what: ^5.0.0 + domhandler: ^4.2.0 + domutils: ^2.6.0 + nth-check: ^2.0.0 + checksum: 40928f1aa6c71faf36430e7f26bcbb8ab51d07b98b754caacb71906400a195df5e6c7020a94f2982f02e52027b9bd57c99419220cf7020968c3415f14e4be5f8 languageName: node linkType: hard @@ -18375,10 +19994,10 @@ __metadata: languageName: node linkType: hard -"css-what@npm:^6.0.1": - version: 6.1.0 - resolution: "css-what@npm:6.1.0" - checksum: b975e547e1e90b79625918f84e67db5d33d896e6de846c9b584094e529f0c63e2ab85ee33b9daffd05bff3a146a1916bec664e18bb76dd5f66cbff9fc13b2bbe +"css-what@npm:^5.0.0": + version: 5.1.0 + resolution: "css-what@npm:5.1.0" + checksum: 0b75d1bac95c885c168573c85744a6c6843d8c33345f54f717218b37ea6296b0e99bb12105930ea170fd4a921990392a7c790c16c585c1d8960c49e2b7ec39f7 languageName: node linkType: hard @@ -18405,64 +20024,65 @@ __metadata: languageName: node linkType: hard -"cssnano-preset-default@npm:^5.2.12": - version: 5.2.12 - resolution: "cssnano-preset-default@npm:5.2.12" +"cssnano-preset-default@npm:^5.1.7": + version: 5.1.7 + resolution: "cssnano-preset-default@npm:5.1.7" dependencies: - css-declaration-sorter: ^6.3.0 - cssnano-utils: ^3.1.0 - postcss-calc: ^8.2.3 - postcss-colormin: ^5.3.0 - postcss-convert-values: ^5.1.2 - postcss-discard-comments: ^5.1.2 - postcss-discard-duplicates: ^5.1.0 - postcss-discard-empty: ^5.1.1 - postcss-discard-overridden: ^5.1.0 - postcss-merge-longhand: ^5.1.6 - postcss-merge-rules: ^5.1.2 - postcss-minify-font-values: ^5.1.0 - postcss-minify-gradients: ^5.1.1 - postcss-minify-params: ^5.1.3 - postcss-minify-selectors: ^5.2.1 - postcss-normalize-charset: ^5.1.0 - postcss-normalize-display-values: ^5.1.0 - postcss-normalize-positions: ^5.1.1 - postcss-normalize-repeat-style: ^5.1.1 - postcss-normalize-string: ^5.1.0 - postcss-normalize-timing-functions: ^5.1.0 - postcss-normalize-unicode: ^5.1.0 - postcss-normalize-url: ^5.1.0 - postcss-normalize-whitespace: ^5.1.1 - postcss-ordered-values: ^5.1.3 - postcss-reduce-initial: ^5.1.0 - postcss-reduce-transforms: ^5.1.0 - postcss-svgo: ^5.1.0 - postcss-unique-selectors: ^5.1.1 + css-declaration-sorter: ^6.0.3 + cssnano-utils: ^2.0.1 + postcss-calc: ^8.0.0 + postcss-colormin: ^5.2.1 + postcss-convert-values: ^5.0.2 + postcss-discard-comments: ^5.0.1 + postcss-discard-duplicates: ^5.0.1 + postcss-discard-empty: ^5.0.1 + postcss-discard-overridden: ^5.0.1 + postcss-merge-longhand: ^5.0.4 + postcss-merge-rules: ^5.0.3 + postcss-minify-font-values: ^5.0.1 + postcss-minify-gradients: ^5.0.3 + postcss-minify-params: ^5.0.2 + postcss-minify-selectors: ^5.1.0 + postcss-normalize-charset: ^5.0.1 + postcss-normalize-display-values: ^5.0.1 + postcss-normalize-positions: ^5.0.1 + postcss-normalize-repeat-style: ^5.0.1 + postcss-normalize-string: ^5.0.1 + postcss-normalize-timing-functions: ^5.0.1 + postcss-normalize-unicode: ^5.0.1 + postcss-normalize-url: ^5.0.3 + postcss-normalize-whitespace: ^5.0.1 + postcss-ordered-values: ^5.0.2 + postcss-reduce-initial: ^5.0.1 + postcss-reduce-transforms: ^5.0.1 + postcss-svgo: ^5.0.3 + postcss-unique-selectors: ^5.0.2 peerDependencies: postcss: ^8.2.15 - checksum: 3d6c05e7719f05c577c3123dc8f823ddc055ec5402ee8184cea1832c209a87ab11aa2aa2cba3e6f4ae6e144c1f3f5122fad1bc7c3086bc3441770f2733e03f58 + checksum: 179b9a113d5e7fc887eb5ce4841ec83834e95afc85a28c767b34a8736fe0fe098a5963c225b18a1b553d566c7a74908951a0ceed97f2fbf5cdfafcce10db37ff languageName: node linkType: hard -"cssnano-utils@npm:^3.1.0": - version: 3.1.0 - resolution: "cssnano-utils@npm:3.1.0" +"cssnano-utils@npm:^2.0.1": + version: 2.0.1 + resolution: "cssnano-utils@npm:2.0.1" peerDependencies: postcss: ^8.2.15 - checksum: 975c84ce9174cf23bb1da1e9faed8421954607e9ea76440cd3bb0c1bea7e17e490d800fca5ae2812d1d9e9d5524eef23ede0a3f52497d7ccc628e5d7321536f2 + checksum: e27f7648fdb999667ba607fd8d56e28d4dbf4bf458c625fc84f460f70fa0fcd491991f309ca27cc0609a24fb3af49b3d0b9b205921e0edd7de57ca27048652e3 languageName: node linkType: hard "cssnano@npm:^5.0.1": - version: 5.1.13 - resolution: "cssnano@npm:5.1.13" + version: 5.0.11 + resolution: "cssnano@npm:5.0.11" dependencies: - cssnano-preset-default: ^5.2.12 + cssnano-preset-default: ^5.1.7 + is-resolvable: ^1.1.0 lilconfig: ^2.0.3 yaml: ^1.10.2 peerDependencies: postcss: ^8.2.15 - checksum: 3af0810c98626794e3386e690cd633c73ce472cb138f1011b69956de5071920ddce9d45f857018bb72cd2c3ed19674d65edade591110a6d5acd7c3109ef5d5d6 + checksum: 9b7d6a4a796175e73a019ec94e112dbf1fb66173716e099116fa8b33568fb1875d7cc1bf728033f4c2861c65d92b66be15618127182dd1f9872387d2d55fddcd languageName: node linkType: hard @@ -18498,17 +20118,17 @@ __metadata: languageName: node linkType: hard -"csstype@npm:^2.5.2": - version: 2.6.21 - resolution: "csstype@npm:2.6.21" - checksum: 2ce8bc832375146eccdf6115a1f8565a27015b74cce197c35103b4494955e9516b246140425ad24103864076aa3e1257ac9bab25a06c8d931dd87a6428c9dccf +"csstype@npm:^2.5.2, csstype@npm:^2.6.7": + version: 2.6.17 + resolution: "csstype@npm:2.6.17" + checksum: 6eee5cf81a4b1b2f0e8707b4accd7504f7cceb4b5a496d58c6e4fcea1a70c1443a975e45d722c892d372ffe788fa278ddfe4d70c5f881375f34e48bb99c70ecc languageName: node linkType: hard "csstype@npm:^3.0.2, csstype@npm:^3.0.6": - version: 3.1.1 - resolution: "csstype@npm:3.1.1" - checksum: 1f7b4f5fdd955b7444b18ebdddf3f5c699159f13e9cf8ac9027ae4a60ae226aef9bbb14a6e12ca7dba3358b007cee6354b116e720262867c398de6c955ea451d + version: 3.0.7 + resolution: "csstype@npm:3.0.7" + checksum: 2f30c993be570c6d0de334b979a718370ee9bca9569c90340f13e05e542146c55b22e87372b858c061f9f8ded494da7a4715957882f9356cf9993ba11ab6f09c languageName: node linkType: hard @@ -18571,8 +20191,8 @@ __metadata: linkType: hard "cypress@npm:^10.0.0": - version: 10.8.0 - resolution: "cypress@npm:10.8.0" + version: 10.7.0 + resolution: "cypress@npm:10.7.0" dependencies: "@cypress/request": ^2.88.10 "@cypress/xvfb": ^1.2.4 @@ -18593,7 +20213,7 @@ __metadata: dayjs: ^1.10.4 debug: ^4.3.2 enquirer: ^2.3.6 - eventemitter2: 6.4.7 + eventemitter2: ^6.4.3 execa: 4.1.0 executable: ^4.1.1 extract-zip: 2.0.1 @@ -18618,16 +20238,16 @@ __metadata: yauzl: ^2.10.0 bin: cypress: bin/cypress - checksum: c052690049980e7721e6fca563b724fde839d87d83c1478dfe26ce7d230992717c2c4028e7157bfb39ec274473e51929f49e5aab6a23c2b25cde2a439b1c3cf9 + checksum: ef8a5ae54f3404f7926e1e248ba7a27c7f66e654a9603bf9df6366731d8dd75455f6ec9cc34d7e55e1a8c3cb8e0e36ce59add81b7b14466f2063cfe45e6c00f4 languageName: node linkType: hard -"d3-array@npm:2 - 3, d3-array@npm:2.10.0 - 3": - version: 3.2.0 - resolution: "d3-array@npm:3.2.0" +"d3-array@npm:2, d3-array@npm:^2.3.0": + version: 2.12.1 + resolution: "d3-array@npm:2.12.1" dependencies: - internmap: 1 - 2 - checksum: e236f6670b60b64abb6c435da25b5cbbdc2c7c0decdbf9355bc4cf6803d6da4fa820b7b78b9cbd127edb493555934a9788d45084c2f39d7c2e1a2b7aa48264a4 + internmap: ^1.0.0 + checksum: 97853b7b523aded17078f37c67742f45d81e88dda2107ae9994c31b9e36c5fa5556c4c4cf39650436f247813602dfe31bf7ad067ff80f127a16903827f10c6eb languageName: node linkType: hard @@ -18652,6 +20272,13 @@ __metadata: languageName: node linkType: hard +"d3-color@npm:1 - 2": + version: 2.0.0 + resolution: "d3-color@npm:2.0.0" + checksum: b887354aa383937abd04fbffed3e26e5d6a788472cd3737fb10735930e427763e69fe93398663bccf88c0b53ee3e638ac6fcf0c02226b00ed9e4327c2dfbf3dc + languageName: node + linkType: hard + "d3-color@npm:1 - 3": version: 3.1.0 resolution: "d3-color@npm:3.1.0" @@ -18701,14 +20328,14 @@ __metadata: languageName: node linkType: hard -"d3-format@npm:1 - 3": - version: 3.1.0 - resolution: "d3-format@npm:3.1.0" - checksum: f345ec3b8ad3cab19bff5dead395bd9f5590628eb97a389b1dd89f0b204c7c4fc1d9520f13231c2c7cf14b7c9a8cf10f8ef15bde2befbab41454a569bd706ca2 +"d3-format@npm:1 - 2": + version: 2.0.0 + resolution: "d3-format@npm:2.0.0" + checksum: c4d3c8f9941d097d514d3986f54f21434e08e5876dc08d1d65226447e8e167600d5b9210235bb03fd45327225f04f32d6e365f08f76d2f4b8bff81594851aaf7 languageName: node linkType: hard -"d3-interpolate@npm:1 - 3, d3-interpolate@npm:1.2.0 - 3, d3-interpolate@npm:^3.0.1": +"d3-interpolate@npm:1 - 3": version: 3.0.1 resolution: "d3-interpolate@npm:3.0.1" dependencies: @@ -18726,6 +20353,15 @@ __metadata: languageName: node linkType: hard +"d3-interpolate@npm:1.2.0 - 2, d3-interpolate@npm:^2.0.0": + version: 2.0.1 + resolution: "d3-interpolate@npm:2.0.1" + dependencies: + d3-color: 1 - 2 + checksum: 4a2018ac34fbcc3e0e7241e117087ca1b2274b8b33673913658623efacc5db013b8d876586d167b23e3145bdb34ec8e441d301299b082e1a90985b2f18d4299c + languageName: node + linkType: hard + "d3-path@npm:1": version: 1.0.9 resolution: "d3-path@npm:1.0.9" @@ -18733,6 +20369,13 @@ __metadata: languageName: node linkType: hard +"d3-path@npm:1 - 2": + version: 2.0.0 + resolution: "d3-path@npm:2.0.0" + checksum: e39e91dfb9abf9637962caede1f4ea4877f4b9e1c914868bdfc355688e9a637ba51bed0fb6180934eb596e50a4d0d1f001b5f2e98a4a3d23cc42558acfbd1f2c + languageName: node + linkType: hard + "d3-path@npm:1 - 3": version: 3.0.1 resolution: "d3-path@npm:3.0.1" @@ -18761,16 +20404,16 @@ __metadata: languageName: node linkType: hard -"d3-scale@npm:^4.0.2": - version: 4.0.2 - resolution: "d3-scale@npm:4.0.2" +"d3-scale@npm:^3.0.0": + version: 3.3.0 + resolution: "d3-scale@npm:3.3.0" dependencies: - d3-array: 2.10.0 - 3 - d3-format: 1 - 3 - d3-interpolate: 1.2.0 - 3 - d3-time: 2.1.1 - 3 - d3-time-format: 2 - 4 - checksum: a9c770d283162c3bd11477c3d9d485d07f8db2071665f1a4ad23eec3e515e2cefbd369059ec677c9ac849877d1a765494e90e92051d4f21111aa56791c98729e + d3-array: ^2.3.0 + d3-format: 1 - 2 + d3-interpolate: 1.2.0 - 2 + d3-time: ^2.1.1 + d3-time-format: 2 - 3 + checksum: f77e73f0fb422292211d0687914c30d26e29011a936ad2a535a868ae92f306c3545af1fe7ea5db1b3e67dbce7a6c6cd952e53d02d1d557543e7e5d30e30e52f2 languageName: node linkType: hard @@ -18790,7 +20433,16 @@ __metadata: languageName: node linkType: hard -"d3-shape@npm:^3.0.0, d3-shape@npm:^3.1.0": +"d3-shape@npm:^2.0.0": + version: 2.1.0 + resolution: "d3-shape@npm:2.1.0" + dependencies: + d3-path: 1 - 2 + checksum: 4a82a83fbb15aadee3eb6661226a34bcd793cdbcd7aa5bf980a4724efc93eb94acc6c499f0ebedc9c3144c57c0f033867d137f41e86459acbd5d7181cb27b49c + languageName: node + linkType: hard + +"d3-shape@npm:^3.0.0": version: 3.1.0 resolution: "d3-shape@npm:3.1.0" dependencies: @@ -18808,12 +20460,12 @@ __metadata: languageName: node linkType: hard -"d3-time-format@npm:2 - 4": - version: 4.1.0 - resolution: "d3-time-format@npm:4.1.0" +"d3-time-format@npm:2 - 3": + version: 3.0.0 + resolution: "d3-time-format@npm:3.0.0" dependencies: - d3-time: 1 - 3 - checksum: 7342bce28355378152bbd4db4e275405439cabba082d9cd01946d40581140481c8328456d91740b0fe513c51ec4a467f4471ffa390c7e0e30ea30e9ec98fcdf4 + d3-time: 1 - 2 + checksum: c20c1667dbea653f81d923e741f84c23e4b966002ba0d6ed94cbc70692105566e55e89d18d175404534a879383fd1123300bd12885a3c924fe924032bb0060db languageName: node linkType: hard @@ -18824,12 +20476,12 @@ __metadata: languageName: node linkType: hard -"d3-time@npm:1 - 3, d3-time@npm:2.1.1 - 3": - version: 3.0.0 - resolution: "d3-time@npm:3.0.0" +"d3-time@npm:1 - 2, d3-time@npm:^2.1.1": + version: 2.1.1 + resolution: "d3-time@npm:2.1.1" dependencies: - d3-array: 2 - 3 - checksum: 01646568ef01682550b7ee9f32394e4eb116a29515564861958871ed8de8fff02a25cd50dd8c4413921e6d9ecb8c8ce39be3266f655c8c18599fe58bcb253d60 + d3-array: 2 + checksum: d1c7b9658c20646e46c3dd19e11c38e02dec098e8baa7d2cd868af8eb01953668f5da499fa33dc63541cf74a26e788786f8828c4381dbbf475a76b95972979a6 languageName: node linkType: hard @@ -18919,10 +20571,17 @@ __metadata: languageName: node linkType: hard -"date-fns@npm:^2.16.1, date-fns@npm:^2.18.0, date-fns@npm:^2.29.1": - version: 2.29.3 - resolution: "date-fns@npm:2.29.3" - checksum: e01cf5b62af04e05dfff921bb9c9933310ed0e1ae9a81eb8653452e64dc841acf7f6e01e1a5ae5644d0337e9a7f936175fd2cb6819dc122fdd9c5e86c56be484 +"date-fns@npm:^2.16.1": + version: 2.28.0 + resolution: "date-fns@npm:2.28.0" + checksum: a0516b2e4f99b8bffc6cc5193349f185f195398385bdcaf07f17c2c4a24473c99d933eb0018be4142a86a6d46cb0b06be6440ad874f15e795acbedd6fd727a1f + languageName: node + linkType: hard + +"date-fns@npm:^2.18.0": + version: 2.19.0 + resolution: "date-fns@npm:2.19.0" + checksum: c8b727aa10941d76977c48c72bda3b33adeb6a89d67763c95689ef7c18729a564a6e01e87fd5f65ba44b6866e8282d636d5e8bc598f099b925597bb109a0880c languageName: node linkType: hard @@ -18934,23 +20593,23 @@ __metadata: linkType: hard "dateformat@npm:^4.5.0": - version: 4.6.3 - resolution: "dateformat@npm:4.6.3" - checksum: c3aa0617c0a5b30595122bc8d1bee6276a9221e4d392087b41cbbdf175d9662ae0e50d0d6dcdf45caeac5153c4b5b0844265f8cd2b2245451e3da19e39e3b65d + version: 4.5.1 + resolution: "dateformat@npm:4.5.1" + checksum: 2c80b0fed4977db338aa70fbdd605a50c06ec36f4ef8d8fd36193a08c4910da1172eec919a74ed93abfc134fc71dca8707877d4fd149c07f0d1c919d598283e3 languageName: node linkType: hard "dayjs@npm:^1.10.4": - version: 1.11.5 - resolution: "dayjs@npm:1.11.5" - checksum: e3bbaa7b4883b31be4bf75a181f1447fbb19800c29b332852125aab96baeff3ac232dcba8b88c4ea17d3b636c99dac5fb9d1af4bb6ae26615698bbc4a852dffb + version: 1.10.4 + resolution: "dayjs@npm:1.10.4" + checksum: d248d6aa1e04f8577a94978e5194c1023347bc08b7c2766d4a4d50b0b69382d3f4fd912b9fcb64ffad4ee2947d53cd8e5d707f49b14817eb7810959d8d95c938 languageName: node linkType: hard "debounce@npm:^1.2.0": - version: 1.2.1 - resolution: "debounce@npm:1.2.1" - checksum: 682a89506d9e54fb109526f4da255c5546102fbb8e3ae75eef3b04effaf5d4853756aee97475cd4650641869794e44f410eeb20ace2b18ea592287ab2038519e + version: 1.2.0 + resolution: "debounce@npm:1.2.0" + checksum: e39cb593ae26344921f5a2681b40b703bdd22bc43b179f0e7515176c790997932b3a0ee6ea9864f384c6ac58cecc08158fb102c3632d5d88ab621f8230ee39ff languageName: node linkType: hard @@ -19039,25 +20698,25 @@ __metadata: linkType: hard "decimal.js-light@npm:^2.4.1": - version: 2.5.1 - resolution: "decimal.js-light@npm:2.5.1" - checksum: f5a2c7eac1c4541c8ab8a5c8abea64fc1761cefc7794bd5f8afd57a8a78d1b51785e0c4e4f85f4895a043eaa90ddca1edc3981d1263eb6ddce60f32bf5fe66c9 + version: 2.5.0 + resolution: "decimal.js-light@npm:2.5.0" + checksum: 89d4d301f72728b10ac5def610b9ccb072cd5fa1bf80c607236bbdd28a9ec9f806faad3159c5a0a82a80a81d84e39ae470f90b6bacecae2617525c8e58f7e201 languageName: node linkType: hard "decimal.js@npm:^10.2.1": - version: 10.4.1 - resolution: "decimal.js@npm:10.4.1" - checksum: 5da6dc74af5b73d954741b24d404ef6da07841794d9e51412a2708ec384dd7b4bced3365fb178f4cd119b7ef45f0b34344014a4dc0494c8374c5e746df3cb410 + version: 10.3.1 + resolution: "decimal.js@npm:10.3.1" + checksum: 0351ac9f05fe050f23227aa6a4573bee2d58fa7378fcf28d969a8c789525032effb488a90320fd3fe86a66e17b4bc507d811b15eada5b7f0e7ec5d2af4c24a59 languageName: node linkType: hard "decode-named-character-reference@npm:^1.0.0": - version: 1.0.2 - resolution: "decode-named-character-reference@npm:1.0.2" + version: 1.0.1 + resolution: "decode-named-character-reference@npm:1.0.1" dependencies: character-entities: ^2.0.0 - checksum: f4c71d3b93105f20076052f9cb1523a22a9c796b8296cd35eef1ca54239c78d182c136a848b83ff8da2071e3ae2b1d300bf29d00650a6d6e675438cc31b11d78 + checksum: 4f67b088213497f7e19faffc1d2bf470bd3ceffd01b3be17857d4bce455e03728b33d3770761745916b0a230ecd917a1cba3c61156f0bd13958dc4fada19580a languageName: node linkType: hard @@ -19101,9 +20760,9 @@ __metadata: linkType: hard "deep-is@npm:^0.1.3, deep-is@npm:~0.1.3": - version: 0.1.4 - resolution: "deep-is@npm:0.1.4" - checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 + version: 0.1.3 + resolution: "deep-is@npm:0.1.3" + checksum: c15b04c3848a89880c94e25b077c19b47d9a30dd99048e70e5f95d943e7b246bee1da0c1376b56b01bc045be2cae7d9b1c856e68e47e9805634327de7c6cb6d5 languageName: node linkType: hard @@ -19133,9 +20792,9 @@ __metadata: linkType: hard "defer-to-connect@npm:^2.0.0": - version: 2.0.1 - resolution: "defer-to-connect@npm:2.0.1" - checksum: 8a9b50d2f25446c0bfefb55a48e90afd58f85b21bcf78e9207cd7b804354f6409032a1705c2491686e202e64fc05f147aa5aa45f9aa82627563f045937f5791b + version: 2.0.0 + resolution: "defer-to-connect@npm:2.0.0" + checksum: 635a01644ea6b52268a9b15c3196ec3a4cb01f874ff09d3ec7858c4aac0ea12ac554aa8831b7ac8ae88c4761e1653f8ea05cf5eebd1236b7bedfde34db52813c languageName: node linkType: hard @@ -19222,9 +20881,9 @@ __metadata: linkType: hard "denque@npm:^2.0.1": - version: 2.1.0 - resolution: "denque@npm:2.1.0" - checksum: 1d4ae1d05e59ac3a3481e7b478293f4b4c813819342273f3d5b826c7ffa9753c520919ba264f377e09108d24ec6cf0ec0ac729a5686cbb8f32d797126c5dae74 + version: 2.0.1 + resolution: "denque@npm:2.0.1" + checksum: ec398d1e3c6c8d4f5213dcf9ad74d7faa3b461e29a0019c9742b49a97ac5e16aa7134db45fa9d841e318e7722dd1ba670a474fde9a5b0d870b3a5fc6fe914c30 languageName: node linkType: hard @@ -19256,7 +20915,14 @@ __metadata: languageName: node linkType: hard -"dequal@npm:^2.0.0, dequal@npm:^2.0.2": +"dequal@npm:^2.0.0": + version: 2.0.2 + resolution: "dequal@npm:2.0.2" + checksum: 86c7a2c59f7b0797ed397c74b5fcdb744e48fc19440b70ad6ac59f57550a96b0faef3f1cfd5760ec5e6d3f7cb101f634f1f80db4e727b1dc8389bf62d977c0a0 + languageName: node + linkType: hard + +"dequal@npm:^2.0.2": version: 2.0.3 resolution: "dequal@npm:2.0.3" checksum: 8679b850e1a3d0ebbc46ee780d5df7b478c23f335887464023a631d1b9af051ad4a6595a44220f9ff8ff95a8ddccf019b5ad778a976fd7bbf77383d36f412f90 @@ -19294,6 +20960,15 @@ __metadata: languageName: node linkType: hard +"detect-libc@npm:^1.0.3": + version: 1.0.3 + resolution: "detect-libc@npm:1.0.3" + bin: + detect-libc: ./bin/detect-libc.js + checksum: daaaed925ffa7889bd91d56e9624e6c8033911bb60f3a50a74a87500680652969dbaab9526d1e200a4c94acf80fc862a22131841145a0a8482d60a99c24f4a3e + languageName: node + linkType: hard + "detect-libc@npm:^2.0.0": version: 2.0.1 resolution: "detect-libc@npm:2.0.1" @@ -19309,9 +20984,9 @@ __metadata: linkType: hard "detect-node@npm:^2.0.4": - version: 2.1.0 - resolution: "detect-node@npm:2.1.0" - checksum: 832184ec458353e41533ac9c622f16c19f7c02d8b10c303dfd3a756f56be93e903616c0bb2d4226183c9351c15fc0b3dba41a17a2308262afabcfa3776e6ae6e + version: 2.0.4 + resolution: "detect-node@npm:2.0.4" + checksum: c06ae40fefbad8cb8cbb6ca819c93568b2a809e747bfc9c71f3524b027f5e988163b0ac0517fd65288b375360b30bc4822172eb05d211f99003d73cf8ec22911 languageName: node linkType: hard @@ -19335,7 +21010,7 @@ __metadata: languageName: node linkType: hard -"dezalgo@npm:1.0.3": +"dezalgo@npm:1.0.3, dezalgo@npm:^1.0.0": version: 1.0.3 resolution: "dezalgo@npm:1.0.3" dependencies: @@ -19345,16 +21020,6 @@ __metadata: languageName: node linkType: hard -"dezalgo@npm:^1.0.0": - version: 1.0.4 - resolution: "dezalgo@npm:1.0.4" - dependencies: - asap: ^2.0.0 - wrappy: 1 - checksum: 895389c6aead740d2ab5da4d3466d20fa30f738010a4d3f4dcccc9fc645ca31c9d10b7e1804ae489b1eb02c7986f9f1f34ba132d409b043082a86d9a4e745624 - languageName: node - linkType: hard - "diff-sequences@npm:^27.5.1": version: 27.5.1 resolution: "diff-sequences@npm:27.5.1" @@ -19362,13 +21027,6 @@ __metadata: languageName: node linkType: hard -"diff-sequences@npm:^29.0.0": - version: 29.0.0 - resolution: "diff-sequences@npm:29.0.0" - checksum: 2c084a3db03ecde26f649f6f2559974e01e174451debeb301a7e17199e73423a8e8ddeb9a35ae38638c084b4fa51296a4a20fa7f44f3db0c0ba566bdc704ed3d - languageName: node - linkType: hard - "diff2html@npm:^2.7.0": version: 2.12.2 resolution: "diff2html@npm:2.12.2" @@ -19403,9 +21061,9 @@ __metadata: linkType: hard "diff@npm:^5.0.0": - version: 5.1.0 - resolution: "diff@npm:5.1.0" - checksum: c7bf0df7c9bfbe1cf8a678fd1b2137c4fb11be117a67bc18a0e03ae75105e8533dbfb1cda6b46beb3586ef5aed22143ef9d70713977d5fb1f9114e21455fba90 + version: 5.0.0 + resolution: "diff@npm:5.0.0" + checksum: f19fe29284b633afdb2725c2a8bb7d25761ea54d321d8e67987ac851c5294be4afeab532bd84531e02583a3fe7f4014aa314a3eda84f5590e7a9e6b371ef3b46 languageName: node linkType: hard @@ -19446,11 +21104,11 @@ __metadata: linkType: hard "dns-packet@npm:^5.2.2": - version: 5.4.0 - resolution: "dns-packet@npm:5.4.0" + version: 5.3.1 + resolution: "dns-packet@npm:5.3.1" dependencies: "@leichtgewicht/ip-codec": ^2.0.1 - checksum: a169963848e8539dfd8a19058562f9e1c15c0f82cbf76fa98942f11c46f3c74e7e7c82e3a8a5182d4c9e6ff19e21be738dbd098a876dde755d3aedd2cc730880 + checksum: 196ff74a0669126cf5fc901a5849b72f625bd7a4cb163b3f4d41fbe19ed0b017cf7674daef5b0acbd448c094fcd795e501d7066f301be428e4acecfcf3c5f336 languageName: node linkType: hard @@ -19464,14 +21122,14 @@ __metadata: linkType: hard "docker-modem@npm:^3.0.0": - version: 3.0.6 - resolution: "docker-modem@npm:3.0.6" + version: 3.0.3 + resolution: "docker-modem@npm:3.0.3" dependencies: debug: ^4.1.1 readable-stream: ^3.5.0 split-ca: ^1.0.1 - ssh2: ^1.11.0 - checksum: f80abc8ddf4d6026ba460bf66c8e039ef8e41a6705086a0770ce1b7cabd91bcd4681c32a6531b79dab23ceea680a3aae363bee29e8089b55a8eb775abfb6b67d + ssh2: ^1.4.0 + checksum: 4ad495d17a7bbb29f48e3bf8ab74508848a3ca62c2dffc399fc0b9b2d1caccb1be54cc53001d5e0d56069e6cb4a91da4b017240733080b6648a66b40345e1f96 languageName: node linkType: hard @@ -19505,9 +21163,9 @@ __metadata: linkType: hard "dom-accessibility-api@npm:^0.5.6, dom-accessibility-api@npm:^0.5.9": - version: 0.5.14 - resolution: "dom-accessibility-api@npm:0.5.14" - checksum: 782c813f75a09ba6735ef03b5e1624406a3829444ae49d5bdedd272a49d437ae3354f53e02ffc8c9fd9165880250f41546538f27461f839dd4ea1234e77e8d5e + version: 0.5.13 + resolution: "dom-accessibility-api@npm:0.5.13" + checksum: a5a5f14c01e466d424750aaac9225f1dc43cf16d101a1c40e01a554abce63c48084707002c39b805f2ce212273c179dd6d2258175997cd06d5f79851bf52dd40 languageName: node linkType: hard @@ -19530,30 +21188,30 @@ __metadata: linkType: hard "dom-helpers@npm:^5.0.1": - version: 5.2.1 - resolution: "dom-helpers@npm:5.2.1" + version: 5.1.4 + resolution: "dom-helpers@npm:5.1.4" dependencies: "@babel/runtime": ^7.8.7 - csstype: ^3.0.2 - checksum: 863ba9e086f7093df3376b43e74ce4422571d404fc9828bf2c56140963d5edf0e56160f9b2f3bb61b282c07f8fc8134f023c98fd684bddcb12daf7b0f14d951c + csstype: ^2.6.7 + checksum: e516325d662f57db7724e6fe26ae5b36b6974f74ae2513998f408bf056670c05ed010bb3be866ac454110249a9e88aaa6451e63e4efa87f834041ef8303ace68 languageName: node linkType: hard "dom-serializer@npm:^1.0.1": - version: 1.4.1 - resolution: "dom-serializer@npm:1.4.1" + version: 1.2.0 + resolution: "dom-serializer@npm:1.2.0" dependencies: domelementtype: ^2.0.1 - domhandler: ^4.2.0 + domhandler: ^4.0.0 entities: ^2.0.0 - checksum: fbb0b01f87a8a2d18e6e5a388ad0f7ec4a5c05c06d219377da1abc7bb0f674d804f4a8a94e3f71ff15f6cb7dcfc75704a54b261db672b9b3ab03da6b758b0b22 + checksum: 231212b30947eb7d89f8b9d89ec82af60a634ff5fd4c3a2e42989567742d308d0aae21e82328c17df4b453deb13e11b047ce0d610581766dd25734afda23bef0 languageName: node linkType: hard "dom-walk@npm:^0.1.0": - version: 0.1.2 - resolution: "dom-walk@npm:0.1.2" - checksum: 19eb0ce9c6de39d5e231530685248545d9cd2bd97b2cb3486e0bfc0f2a393a9addddfd5557463a932b52fdfcf68ad2a619020cd2c74a5fe46fbecaa8e80872f3 + version: 0.1.1 + resolution: "dom-walk@npm:0.1.1" + checksum: f55db10d0344b87cca1046a2356915a8e9ddee90fc97d3ebb26c4021e593cce47d24cbef18aac721421787c6a60fa14dd079a0b81f8610c9aeeec52177fd2acf languageName: node linkType: hard @@ -19565,9 +21223,9 @@ __metadata: linkType: hard "domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": - version: 2.3.0 - resolution: "domelementtype@npm:2.3.0" - checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 + version: 2.2.0 + resolution: "domelementtype@npm:2.2.0" + checksum: 24cb386198640cd58aa36f8c987f2ea61859929106d06ffcc8f547e70cb2ed82a6dc56dcb8252b21fba1f1ea07df6e4356d60bfe57f77114ca1aed6828362629 languageName: node linkType: hard @@ -19580,30 +21238,23 @@ __metadata: languageName: node linkType: hard -"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0, domhandler@npm:^4.3.1": - version: 4.3.1 - resolution: "domhandler@npm:4.3.1" +"domhandler@npm:^4.0.0, domhandler@npm:^4.2.0": + version: 4.3.0 + resolution: "domhandler@npm:4.3.0" dependencies: domelementtype: ^2.2.0 - checksum: 4c665ceed016e1911bf7d1dadc09dc888090b64dee7851cccd2fcf5442747ec39c647bb1cb8c8919f8bbdd0f0c625a6bafeeed4b2d656bbecdbae893f43ffaaa + checksum: d2a2dbf40dd99abf936b65ad83c6b530afdb3605a87cad37a11b5d9220e68423ebef1b86c89e0f6d93ffaf315cc327cf1a988652e7a9a95cce539e3984f4c64d languageName: node linkType: hard -"dompurify@npm:=2.3.10": +"dompurify@npm:=2.3.10, dompurify@npm:^2.2.7, dompurify@npm:^2.2.9, dompurify@npm:^2.3.6": version: 2.3.10 resolution: "dompurify@npm:2.3.10" checksum: ee343876b4c065e82d194818c66af76a6d2290264c7db583ad71761c11781fd626f0245f9f4670175d5707c4b8fcfb89adae80bed0418a9426a47ee7f36b0ffc languageName: node linkType: hard -"dompurify@npm:^2.2.7, dompurify@npm:^2.2.9, dompurify@npm:^2.3.6": - version: 2.4.0 - resolution: "dompurify@npm:2.4.0" - checksum: c93ea73cf8e3ba044588450198563e56ce6902e36d0e16e3699df2fa59e82c4fdd11d4ad04ef5024569ce96a35b46f29d0bbea522516add33cd39a7f56a8a675 - languageName: node - linkType: hard - -"domutils@npm:^2.5.2, domutils@npm:^2.8.0": +"domutils@npm:^2.5.2, domutils@npm:^2.6.0": version: 2.8.0 resolution: "domutils@npm:2.8.0" dependencies: @@ -19643,9 +21294,9 @@ __metadata: linkType: hard "dotenv@npm:^16.0.0": - version: 16.0.2 - resolution: "dotenv@npm:16.0.2" - checksum: ca8f9ca2d67929c7771069f4c31b4e46b9932621009e658e5afd655dde2d69b77642bf36dbc9e72bc170523dfd908a9ee41c26f034c1fdc605ace3b1b4b10faf + version: 16.0.0 + resolution: "dotenv@npm:16.0.0" + checksum: 664cebb51f0a9a1d1b930f51f0271e72e26d62feaecc9dc03df39453dd494b4e724809ca480fb3ec3213382b1ed3f791aaeb83569a137f9329ce58efd4853dbf languageName: node linkType: hard @@ -19663,7 +21314,14 @@ __metadata: languageName: node linkType: hard -"duplexer@npm:^0.1.1, duplexer@npm:^0.1.2, duplexer@npm:~0.1.1": +"duplexer@npm:^0.1.1, duplexer@npm:~0.1.1": + version: 0.1.1 + resolution: "duplexer@npm:0.1.1" + checksum: fc7937c4a43808493cd63dfa59f4deb6cf02beea783cb17f39677b53ccacb9fba48f87731b8944048dd6dfa8f456d0725f86f3fd587ab780532d9a8e2914e8b7 + languageName: node + linkType: hard + +"duplexer@npm:^0.1.2": version: 0.1.2 resolution: "duplexer@npm:0.1.2" checksum: 62ba61a830c56801db28ff6305c7d289b6dc9f859054e8c982abd8ee0b0a14d2e9a8e7d086ffee12e868d43e2bbe8a964be55ddbd8c8957714c87373c7a4f9b0 @@ -19671,14 +21329,14 @@ __metadata: linkType: hard "duplexify@npm:^4.0.0": - version: 4.1.2 - resolution: "duplexify@npm:4.1.2" + version: 4.1.1 + resolution: "duplexify@npm:4.1.1" dependencies: end-of-stream: ^1.4.1 inherits: ^2.0.3 readable-stream: ^3.1.1 stream-shift: ^1.0.0 - checksum: 964376c61c0e92f6ed0694b3ba97c84f199413dc40ab8dfdaef80b7a7f4982fcabf796214e28ed614a5bc1ec45488a29b81e7d46fa3f5ddf65bcb118c20145ad + checksum: 1cf800f1dc1647d6e0272b811421d4ce78b7d9b12dd85c7ecd78b9e4bfba374d309ac9e3440c66461fc62adb69db49aebf49da15962c98a84d8fd33c7e9c5c5a languageName: node linkType: hard @@ -19760,14 +21418,14 @@ __metadata: languageName: node linkType: hard -"ejs@npm:^3.1.8": - version: 3.1.8 - resolution: "ejs@npm:3.1.8" +"ejs@npm:^3.1.6": + version: 3.1.7 + resolution: "ejs@npm:3.1.7" dependencies: jake: ^10.8.5 bin: ejs: bin/cli.js - checksum: 1d40d198ad52e315ccf37e577bdec06e24eefdc4e3c27aafa47751a03a0c7f0ec4310254c9277a5f14763c3cd4bbacce27497332b2d87c74232b9b1defef8efc + checksum: fe40764af39955ce8f8b116716fc8b911959946698edb49ecab85df597746c07aa65d5b74ead28a1e2ffa75b0f92d9bedd752f1c29437da6137b3518271e988c languageName: node linkType: hard @@ -19788,14 +21446,21 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.251": - version: 1.4.254 - resolution: "electron-to-chromium@npm:1.4.254" - checksum: 32f0ecb621db44d37fc93017f742a2b1da7302c778b4d6c0fa122cc662f9c50e6576d214048dcac5c9baf835340c954c624f09f2e02c6dea9049c4a839e862e2 +"electron-to-chromium@npm:^1.4.17": + version: 1.4.35 + resolution: "electron-to-chromium@npm:1.4.35" + checksum: c4d7943abf370ca294129cda8432ea2f83c5b867e708aa33c7953e10f741803cfb23f83ba7341b6a76d76efb649f967b8e7b130ebe1e262971c764537ea5fd9b languageName: node linkType: hard -"elliptic@npm:^6.5.3": +"electron-to-chromium@npm:^1.4.188": + version: 1.4.194 + resolution: "electron-to-chromium@npm:1.4.194" + checksum: faea6fa96a258228a3e2953160aa6ef467bf86c856d8ee1a7c2d4a1c9edaeca51fb2bf3a0cdb17b1b485e7c9d2144fb63079119d6b210e56b370dd819954139b + languageName: node + linkType: hard + +"elliptic@npm:^6.0.0": version: 6.5.4 resolution: "elliptic@npm:6.5.4" dependencies: @@ -19871,8 +21536,8 @@ __metadata: linkType: hard "engine.io-client@npm:~3.5.0": - version: 3.5.3 - resolution: "engine.io-client@npm:3.5.3" + version: 3.5.2 + resolution: "engine.io-client@npm:3.5.2" dependencies: component-emitter: ~1.3.0 component-inherit: 0.0.3 @@ -19885,7 +21550,7 @@ __metadata: ws: ~7.4.2 xmlhttprequest-ssl: ~1.6.2 yeast: 0.1.2 - checksum: 2732f3e9dc331f429b45cc8f4bafea6a1b6032cf57a25e4bc850de4f5d664a482e03f8a6edacc02dd513a39f7fe08dfcc3208e02b29848c45fa1b377f8d0aaa4 + checksum: 2a4a8407ea939c45826d3483e39fe017e66d488dfd101282a79644f75196f7b84cac9d6f981e3ace1ab231e2469c18b25d79b114f20ab58d0eaa393bf66f213e languageName: node linkType: hard @@ -19902,9 +21567,9 @@ __metadata: languageName: node linkType: hard -"engine.io@npm:~3.6.0": - version: 3.6.0 - resolution: "engine.io@npm:3.6.0" +"engine.io@npm:~3.5.0": + version: 3.5.0 + resolution: "engine.io@npm:3.5.0" dependencies: accepts: ~1.3.4 base64id: 2.0.0 @@ -19912,7 +21577,7 @@ __metadata: debug: ~4.1.0 engine.io-parser: ~2.2.0 ws: ~7.4.2 - checksum: 7c02d7f8eb04b6682228874904af588f9a98b28190867da5754310fdaac1fcc1a2872c7ef948b070cdb5af37b2f3ca43493ddc63418caebff0df848f3edc755f + checksum: 8d7eb107428301084502c65c8ae48e350587fa57edae734a88f7345debd386ed1d8a25ece7e82ba3ff1ad65300fb0123def1446a1a13127929ee5eac378af8b2 languageName: node linkType: hard @@ -19942,40 +21607,33 @@ __metadata: languageName: node linkType: hard -"entities@npm:^2.0.0": - version: 2.2.0 - resolution: "entities@npm:2.2.0" - checksum: 19010dacaf0912c895ea262b4f6128574f9ccf8d4b3b65c7e8334ad0079b3706376360e28d8843ff50a78aabcb8f08f0a32dbfacdc77e47ed77ca08b713669b3 - languageName: node - linkType: hard - -"entities@npm:^4.3.0": - version: 4.4.0 - resolution: "entities@npm:4.4.0" - checksum: 84d250329f4b56b40fa93ed067b194db21e8815e4eb9b59f43a086f0ecd342814f6bc483de8a77da5d64e0f626033192b1b4f1792232a7ea6b970ebe0f3187c2 - languageName: node - linkType: hard - -"entities@npm:~2.1.0": +"entities@npm:^2.0.0, entities@npm:~2.1.0": version: 2.1.0 resolution: "entities@npm:2.1.0" checksum: a10a877e489586a3f6a691fe49bf3fc4e58f06c8e80522f08214a5150ba457e7017b447d4913a3fa041bda06ee4c92517baa4d8d75373eaa79369e9639225ffd languageName: node linkType: hard +"entities@npm:^4.3.0": + version: 4.3.1 + resolution: "entities@npm:4.3.1" + checksum: e8f6d2bac238494b2355e90551893882d2675142be7e7bdfcb15248ed0652a630678ba0e3a8dc750693e736cb6011f504c27dabeb4cd3330560092e88b105090 + languageName: node + linkType: hard + "env-paths@npm:^2.2.0": - version: 2.2.1 - resolution: "env-paths@npm:2.2.1" - checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e + version: 2.2.0 + resolution: "env-paths@npm:2.2.0" + checksum: ba2aea38301aafd69086be1f8cb453b92946e4840cb0de9d1c88a67e6f43a6174dcddb60b218ec36db8720b12de46b0d93c2f97ad9bbec6a267b479ab37debb6 languageName: node linkType: hard "envinfo@npm:^7.7.4": - version: 7.8.1 - resolution: "envinfo@npm:7.8.1" + version: 7.7.4 + resolution: "envinfo@npm:7.7.4" bin: envinfo: dist/cli.js - checksum: de736c98d6311c78523628ff127af138451b162e57af5293c1b984ca821d0aeb9c849537d2fde0434011bed33f6bca5310ca2aab8a51a3f28fc719e89045d648 + checksum: 73fb993dd9845c61ce52118fcbe4de4d3644d8163130e7bf266f223f32e75e2d33a2c59db83fa0f01f147f122c76567f5f613457a151eb8c6835013538506704 languageName: node linkType: hard @@ -20003,11 +21661,11 @@ __metadata: linkType: hard "error-stack-parser@npm:^2.0.6": - version: 2.1.4 - resolution: "error-stack-parser@npm:2.1.4" + version: 2.0.6 + resolution: "error-stack-parser@npm:2.0.6" dependencies: - stackframe: ^1.3.4 - checksum: 3b916d2d14c6682f287c8bfa28e14672f47eafe832701080e420e7cdbaebb2c50293868256a95706ac2330fe078cf5664713158b49bc30d7a5f2ac229ded0e18 + stackframe: ^1.1.1 + checksum: bd8e048fcb1c0c74ab201271fec3b39c097a7c24bdef1718828d053c0584da5d7ad845253b5e4773803ee8e7450b23b0920e60a3b60dd403c1568c843058cb12 languageName: node linkType: hard @@ -20018,15 +21676,43 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1, es-abstract@npm:^1.19.2, es-abstract@npm:^1.19.5, es-abstract@npm:^1.20.0": - version: 1.20.2 - resolution: "es-abstract@npm:1.20.2" +"es-abstract@npm:^1.18.0-next.1, es-abstract@npm:^1.18.0-next.2, es-abstract@npm:^1.19.1": + version: 1.19.1 + resolution: "es-abstract@npm:1.19.1" + dependencies: + call-bind: ^1.0.2 + es-to-primitive: ^1.2.1 + function-bind: ^1.1.1 + get-intrinsic: ^1.1.1 + get-symbol-description: ^1.0.0 + has: ^1.0.3 + has-symbols: ^1.0.2 + internal-slot: ^1.0.3 + is-callable: ^1.2.4 + is-negative-zero: ^2.0.1 + is-regex: ^1.1.4 + is-shared-array-buffer: ^1.0.1 + is-string: ^1.0.7 + is-weakref: ^1.0.1 + object-inspect: ^1.11.0 + object-keys: ^1.1.1 + object.assign: ^4.1.2 + string.prototype.trimend: ^1.0.4 + string.prototype.trimstart: ^1.0.4 + unbox-primitive: ^1.0.1 + checksum: b6be8410672c5364db3fb01eb786e30c7b4bb32b4af63d381c08840f4382c4a168e7855cd338bf59d4f1a1a1138f4d748d1fd40ec65aaa071876f9e9fbfed949 + languageName: node + linkType: hard + +"es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.2, es-abstract@npm:^1.19.5": + version: 1.20.1 + resolution: "es-abstract@npm:1.20.1" dependencies: call-bind: ^1.0.2 es-to-primitive: ^1.2.1 function-bind: ^1.1.1 function.prototype.name: ^1.1.5 - get-intrinsic: ^1.1.2 + get-intrinsic: ^1.1.1 get-symbol-description: ^1.0.0 has: ^1.0.3 has-property-descriptors: ^1.0.0 @@ -20038,14 +21724,14 @@ __metadata: is-shared-array-buffer: ^1.0.2 is-string: ^1.0.7 is-weakref: ^1.0.2 - object-inspect: ^1.12.2 + object-inspect: ^1.12.0 object-keys: ^1.1.1 - object.assign: ^4.1.4 + object.assign: ^4.1.2 regexp.prototype.flags: ^1.4.3 string.prototype.trimend: ^1.0.5 string.prototype.trimstart: ^1.0.5 unbox-primitive: ^1.0.2 - checksum: ab893dd1f849250f5a2da82656b4e21b511f76429b25a4aea5c8b2a3007ff01cb8e112987d0dd7693b9ad9e6399f8f7be133285d6196a5ebd1b13a4ee2258f70 + checksum: 28da27ae0ed9c76df7ee8ef5c278df79dcfdb554415faf7068bb7c58f8ba8e2a16bfb59e586844be6429ab4c302ca7748979d48442224cb1140b051866d74b7f languageName: node linkType: hard @@ -20090,13 +21776,6 @@ __metadata: languageName: node linkType: hard -"esbuild-android-64@npm:0.15.7": - version: 0.15.7 - resolution: "esbuild-android-64@npm:0.15.7" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - "esbuild-android-arm64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-android-arm64@npm:0.14.54" @@ -20104,13 +21783,6 @@ __metadata: languageName: node linkType: hard -"esbuild-android-arm64@npm:0.15.7": - version: 0.15.7 - resolution: "esbuild-android-arm64@npm:0.15.7" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - "esbuild-darwin-64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-darwin-64@npm:0.14.54" @@ -20118,13 +21790,6 @@ __metadata: languageName: node linkType: hard -"esbuild-darwin-64@npm:0.15.7": - version: 0.15.7 - resolution: "esbuild-darwin-64@npm:0.15.7" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - "esbuild-darwin-arm64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-darwin-arm64@npm:0.14.54" @@ -20132,13 +21797,6 @@ __metadata: languageName: node linkType: hard -"esbuild-darwin-arm64@npm:0.15.7": - version: 0.15.7 - resolution: "esbuild-darwin-arm64@npm:0.15.7" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - "esbuild-freebsd-64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-freebsd-64@npm:0.14.54" @@ -20146,13 +21804,6 @@ __metadata: languageName: node linkType: hard -"esbuild-freebsd-64@npm:0.15.7": - version: 0.15.7 - resolution: "esbuild-freebsd-64@npm:0.15.7" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - "esbuild-freebsd-arm64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-freebsd-arm64@npm:0.14.54" @@ -20160,13 +21811,6 @@ __metadata: languageName: node linkType: hard -"esbuild-freebsd-arm64@npm:0.15.7": - version: 0.15.7 - resolution: "esbuild-freebsd-arm64@npm:0.15.7" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - "esbuild-linux-32@npm:0.14.54": version: 0.14.54 resolution: "esbuild-linux-32@npm:0.14.54" @@ -20174,13 +21818,6 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-32@npm:0.15.7": - version: 0.15.7 - resolution: "esbuild-linux-32@npm:0.15.7" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - "esbuild-linux-64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-linux-64@npm:0.14.54" @@ -20188,13 +21825,6 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-64@npm:0.15.7": - version: 0.15.7 - resolution: "esbuild-linux-64@npm:0.15.7" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - "esbuild-linux-arm64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-linux-arm64@npm:0.14.54" @@ -20202,13 +21832,6 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-arm64@npm:0.15.7": - version: 0.15.7 - resolution: "esbuild-linux-arm64@npm:0.15.7" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - "esbuild-linux-arm@npm:0.14.54": version: 0.14.54 resolution: "esbuild-linux-arm@npm:0.14.54" @@ -20216,13 +21839,6 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-arm@npm:0.15.7": - version: 0.15.7 - resolution: "esbuild-linux-arm@npm:0.15.7" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - "esbuild-linux-mips64le@npm:0.14.54": version: 0.14.54 resolution: "esbuild-linux-mips64le@npm:0.14.54" @@ -20230,13 +21846,6 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-mips64le@npm:0.15.7": - version: 0.15.7 - resolution: "esbuild-linux-mips64le@npm:0.15.7" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - "esbuild-linux-ppc64le@npm:0.14.54": version: 0.14.54 resolution: "esbuild-linux-ppc64le@npm:0.14.54" @@ -20244,13 +21853,6 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-ppc64le@npm:0.15.7": - version: 0.15.7 - resolution: "esbuild-linux-ppc64le@npm:0.15.7" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - "esbuild-linux-riscv64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-linux-riscv64@npm:0.14.54" @@ -20258,13 +21860,6 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-riscv64@npm:0.15.7": - version: 0.15.7 - resolution: "esbuild-linux-riscv64@npm:0.15.7" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - "esbuild-linux-s390x@npm:0.14.54": version: 0.14.54 resolution: "esbuild-linux-s390x@npm:0.14.54" @@ -20272,18 +21867,11 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-s390x@npm:0.15.7": - version: 0.15.7 - resolution: "esbuild-linux-s390x@npm:0.15.7" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - "esbuild-loader@npm:^2.18.0": - version: 2.20.0 - resolution: "esbuild-loader@npm:2.20.0" + version: 2.19.0 + resolution: "esbuild-loader@npm:2.19.0" dependencies: - esbuild: ^0.15.6 + esbuild: ^0.14.39 joycon: ^3.0.1 json5: ^2.2.0 loader-utils: ^2.0.0 @@ -20291,7 +21879,7 @@ __metadata: webpack-sources: ^2.2.0 peerDependencies: webpack: ^4.40.0 || ^5.0.0 - checksum: 81faee7155b35af1fdef3dffa273a14ec83e56b9efa1efb76cb1eb64964dd738809c147a87ab9d3507de11946eed51fd1ee42d476b2c9654cbda145da0d9479b + checksum: 7dc8deca3ab6f8684437359ce6d407d18622ba7cb7f0a22f44861f72b34405431070a6137e366232bea2418e37a54fe04299951a588fec54058f047e65616adc languageName: node linkType: hard @@ -20302,13 +21890,6 @@ __metadata: languageName: node linkType: hard -"esbuild-netbsd-64@npm:0.15.7": - version: 0.15.7 - resolution: "esbuild-netbsd-64@npm:0.15.7" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - "esbuild-openbsd-64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-openbsd-64@npm:0.14.54" @@ -20316,13 +21897,6 @@ __metadata: languageName: node linkType: hard -"esbuild-openbsd-64@npm:0.15.7": - version: 0.15.7 - resolution: "esbuild-openbsd-64@npm:0.15.7" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - "esbuild-sunos-64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-sunos-64@npm:0.14.54" @@ -20330,13 +21904,6 @@ __metadata: languageName: node linkType: hard -"esbuild-sunos-64@npm:0.15.7": - version: 0.15.7 - resolution: "esbuild-sunos-64@npm:0.15.7" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - "esbuild-windows-32@npm:0.14.54": version: 0.14.54 resolution: "esbuild-windows-32@npm:0.14.54" @@ -20344,13 +21911,6 @@ __metadata: languageName: node linkType: hard -"esbuild-windows-32@npm:0.15.7": - version: 0.15.7 - resolution: "esbuild-windows-32@npm:0.15.7" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - "esbuild-windows-64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-windows-64@npm:0.14.54" @@ -20358,13 +21918,6 @@ __metadata: languageName: node linkType: hard -"esbuild-windows-64@npm:0.15.7": - version: 0.15.7 - resolution: "esbuild-windows-64@npm:0.15.7" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - "esbuild-windows-arm64@npm:0.14.54": version: 0.14.54 resolution: "esbuild-windows-arm64@npm:0.14.54" @@ -20372,14 +21925,7 @@ __metadata: languageName: node linkType: hard -"esbuild-windows-arm64@npm:0.15.7": - version: 0.15.7 - resolution: "esbuild-windows-arm64@npm:0.15.7" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"esbuild@npm:^0.14.1, esbuild@npm:^0.14.10": +"esbuild@npm:^0.14.1, esbuild@npm:^0.14.10, esbuild@npm:^0.14.39": version: 0.14.54 resolution: "esbuild@npm:0.14.54" dependencies: @@ -20453,80 +21999,6 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.15.6": - version: 0.15.7 - resolution: "esbuild@npm:0.15.7" - dependencies: - "@esbuild/linux-loong64": 0.15.7 - esbuild-android-64: 0.15.7 - esbuild-android-arm64: 0.15.7 - esbuild-darwin-64: 0.15.7 - esbuild-darwin-arm64: 0.15.7 - esbuild-freebsd-64: 0.15.7 - esbuild-freebsd-arm64: 0.15.7 - esbuild-linux-32: 0.15.7 - esbuild-linux-64: 0.15.7 - esbuild-linux-arm: 0.15.7 - esbuild-linux-arm64: 0.15.7 - esbuild-linux-mips64le: 0.15.7 - esbuild-linux-ppc64le: 0.15.7 - esbuild-linux-riscv64: 0.15.7 - esbuild-linux-s390x: 0.15.7 - esbuild-netbsd-64: 0.15.7 - esbuild-openbsd-64: 0.15.7 - esbuild-sunos-64: 0.15.7 - esbuild-windows-32: 0.15.7 - esbuild-windows-64: 0.15.7 - esbuild-windows-arm64: 0.15.7 - dependenciesMeta: - "@esbuild/linux-loong64": - optional: true - esbuild-android-64: - optional: true - esbuild-android-arm64: - optional: true - esbuild-darwin-64: - optional: true - esbuild-darwin-arm64: - optional: true - esbuild-freebsd-64: - optional: true - esbuild-freebsd-arm64: - optional: true - esbuild-linux-32: - optional: true - esbuild-linux-64: - optional: true - esbuild-linux-arm: - optional: true - esbuild-linux-arm64: - optional: true - esbuild-linux-mips64le: - optional: true - esbuild-linux-ppc64le: - optional: true - esbuild-linux-riscv64: - optional: true - esbuild-linux-s390x: - optional: true - esbuild-netbsd-64: - optional: true - esbuild-openbsd-64: - optional: true - esbuild-sunos-64: - optional: true - esbuild-windows-32: - optional: true - esbuild-windows-64: - optional: true - esbuild-windows-arm64: - optional: true - bin: - esbuild: bin/esbuild - checksum: 54ddaa6cf96798d817861b4f68cb8d176075dc09b6e0ed511c57e5db6fd86d2c673ac2ec631ad9b11678d58ad4a77cd6b7a3853b9c6eac29b7f5c6d38e42f92e - languageName: node - linkType: hard - "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" @@ -20642,14 +22114,12 @@ __metadata: linkType: hard "eslint-module-utils@npm:^2.1.1, eslint-module-utils@npm:^2.7.3": - version: 2.7.4 - resolution: "eslint-module-utils@npm:2.7.4" + version: 2.7.3 + resolution: "eslint-module-utils@npm:2.7.3" dependencies: debug: ^3.2.7 - peerDependenciesMeta: - eslint: - optional: true - checksum: 5da13645daff145a5c922896b258f8bba560722c3767254e458d894ff5fbb505d6dfd945bffa932a5b0ae06714da2379bd41011c4c20d2d59cc83e23895360f7 + find-up: ^2.1.0 + checksum: 77048263f309167a1e6a1e1b896bfb5ddd1d3859b2e2abbd9c32c432aee13d610d46e6820b1ca81b37fba437cf423a404bc6649be64ace9148a3062d1886a678 languageName: node linkType: hard @@ -20834,13 +22304,13 @@ __metadata: linkType: hard "eslint-visitor-keys@npm:^2.0.0": - version: 2.1.0 - resolution: "eslint-visitor-keys@npm:2.1.0" - checksum: e3081d7dd2611a35f0388bbdc2f5da60b3a3c5b8b6e928daffff7391146b434d691577aa95064c8b7faad0b8a680266bcda0a42439c18c717b80e6718d7e267d + version: 2.0.0 + resolution: "eslint-visitor-keys@npm:2.0.0" + checksum: e07e9863fb8c9b1453f5ad1a26f3cc8dd6b349b26605cc06bc0c61215ac5b6f13a4d08c875218e6c0f8ac8fc06ca6e090df769e32c569f0fd2e6a848b8a76c75 languageName: node linkType: hard -"eslint-visitor-keys@npm:^3.3.0": +"eslint-visitor-keys@npm:^3.0.0, eslint-visitor-keys@npm:^3.3.0": version: 3.3.0 resolution: "eslint-visitor-keys@npm:3.3.0" checksum: d59e68a7c5a6d0146526b0eec16ce87fbf97fe46b8281e0d41384224375c4e52f5ffb9e16d48f4ea50785cde93f766b0c898e31ab89978d88b0e1720fbfb7808 @@ -20987,9 +22457,9 @@ __metadata: linkType: hard "estree-walker@npm:^2.0.1": - version: 2.0.2 - resolution: "estree-walker@npm:2.0.2" - checksum: 6151e6f9828abe2259e57f5fd3761335bb0d2ebd76dc1a01048ccee22fabcfef3c0859300f6d83ff0d1927849368775ec5a6d265dde2f6de5a1be1721cd94efc + version: 2.0.1 + resolution: "estree-walker@npm:2.0.1" + checksum: c8e89c1e0dced789554c2c76152ef748ef226aa792eead6eee1777b6faa24e56a539639b8024f3952e80c451dd2c51f9ca8e7a360771dcaa794ad7b92243929c languageName: node linkType: hard @@ -21043,17 +22513,10 @@ __metadata: languageName: node linkType: hard -"eventemitter2@npm:6.4.7": - version: 6.4.7 - resolution: "eventemitter2@npm:6.4.7" - checksum: 1b36a77e139d6965ebf3a36c01fa00c089ae6b80faa1911e52888f40b3a7057b36a2cc45dcd1ad87cda3798fe7b97a0aabcbb8175a8b96092a23bb7d0f039e66 - languageName: node - linkType: hard - -"eventemitter2@npm:^6.4.4": - version: 6.4.9 - resolution: "eventemitter2@npm:6.4.9" - checksum: be59577c1e1c35509c7ba0e2624335c35bbcfd9485b8a977384c6cc6759341ea1a98d3cb9dbaa5cea4fff9b687e504504e3f9c2cc1674cf3bd8a43a7c74ea3eb +"eventemitter2@npm:^6.4.3, eventemitter2@npm:^6.4.4": + version: 6.4.5 + resolution: "eventemitter2@npm:6.4.5" + checksum: 84504f9cf0cc30205cdd46783fe9df3733435e5097f13070b678023110b5ef07847651808ae280cd94c42cd5976880211c7a40321a8ff8fa56f7c5f9c5c11960 languageName: node linkType: hard @@ -21352,6 +22815,13 @@ __metadata: languageName: node linkType: hard +"exit-on-epipe@npm:~1.0.1": + version: 1.0.1 + resolution: "exit-on-epipe@npm:1.0.1" + checksum: e8ab4940416d19f311b3c9226e3725c6c4c6026fe682266ecc0ff33a455d585fe3e4ee757857c7bf1d0491b478cb232b8e395dfb438e65ac87317eda47304c32 + languageName: node + linkType: hard + "exit@npm:^0.1.2": version: 0.1.2 resolution: "exit@npm:0.1.2" @@ -21393,19 +22863,6 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.0.0": - version: 29.0.3 - resolution: "expect@npm:29.0.3" - dependencies: - "@jest/expect-utils": ^29.0.3 - jest-get-type: ^29.0.0 - jest-matcher-utils: ^29.0.3 - jest-message-util: ^29.0.3 - jest-util: ^29.0.3 - checksum: 21b7fd346c47896a3de8f1103d7be32dab9409eb3dc170b7a9ff5d8d564b8499bd600b9af6251fe2f46064cf4e2f1456a6c6318da15314b7d74ed6dad723b555 - languageName: node - linkType: hard - "express-prom-bundle@npm:^6.3.6": version: 6.5.0 resolution: "express-prom-bundle@npm:6.5.0" @@ -21598,9 +23055,9 @@ __metadata: linkType: hard "extsprintf@npm:^1.2.0": - version: 1.4.1 - resolution: "extsprintf@npm:1.4.1" - checksum: a2f29b241914a8d2bad64363de684821b6b1609d06ae68d5b539e4de6b28659715b5bea94a7265201603713b7027d35399d10b0548f09071c5513e65e8323d33 + version: 1.4.0 + resolution: "extsprintf@npm:1.4.0" + checksum: 184dc8a413eb4b1ff16bdce797340e7ded4d28511d56a1c9afa5a95bcff6ace154063823eaf0206dbbb0d14059d74f382a15c34b7c0636fa74a7e681295eb67e languageName: node linkType: hard @@ -21626,15 +23083,15 @@ __metadata: linkType: hard "fast-glob@npm:^3.2.11, fast-glob@npm:^3.2.9": - version: 3.2.12 - resolution: "fast-glob@npm:3.2.12" + version: 3.2.11 + resolution: "fast-glob@npm:3.2.11" dependencies: "@nodelib/fs.stat": ^2.0.2 "@nodelib/fs.walk": ^1.2.3 glob-parent: ^5.1.2 merge2: ^1.3.0 micromatch: ^4.0.4 - checksum: 0b1990f6ce831c7e28c4d505edcdaad8e27e88ab9fa65eedadb730438cfc7cde4910d6c975d6b7b8dc8a73da4773702ebcfcd6e3518e73938bb1383badfe01c2 + checksum: f473105324a7780a20c06de842e15ddbb41d3cb7e71d1e4fe6e8373204f22245d54f5ab9e2061e6a1c613047345954d29b022e0e76f5c28b1df9858179a0e6d7 languageName: node linkType: hard @@ -21646,9 +23103,9 @@ __metadata: linkType: hard "fast-json-patch@npm:^3.0.0-1": - version: 3.1.1 - resolution: "fast-json-patch@npm:3.1.1" - checksum: c4525b61b2471df60d4b025b4118b036d99778a93431aa44d1084218182841d82ce93056f0f3bbd731a24e6a8e69820128adf1873eb2199a26c62ef58d137833 + version: 3.0.0-1 + resolution: "fast-json-patch@npm:3.0.0-1" + checksum: d4a8dff174357a90f3e2b79812df4bcc179143524e7eb1ab84a3bd5a80bd283f6be53996abe5c38527aeb28e994f0d03084c9ce5fcd8eb3e2881986e991105aa languageName: node linkType: hard @@ -21688,9 +23145,9 @@ __metadata: linkType: hard "fast-text-encoding@npm:^1.0.0, fast-text-encoding@npm:^1.0.3": - version: 1.0.6 - resolution: "fast-text-encoding@npm:1.0.6" - checksum: 9d58f694314b3283e785bf61954902536da228607ad246905e30256f9ab8331f780ac987e7222c9f5eafd04168d07e12b8054c85cedb76a2c05af0e82387a903 + version: 1.0.3 + resolution: "fast-text-encoding@npm:1.0.3" + checksum: 3e51365896f06d0dcab128092d095a0037d274deec419fecbd2388bc236d7b387610e0c72f920c6126e00c885ab096fbfaa3645712f5b98f721bef6b064916a8 languageName: node linkType: hard @@ -21711,11 +23168,11 @@ __metadata: linkType: hard "fastq@npm:^1.6.0": - version: 1.13.0 - resolution: "fastq@npm:1.13.0" + version: 1.6.1 + resolution: "fastq@npm:1.6.1" dependencies: reusify: ^1.0.4 - checksum: 32cf15c29afe622af187d12fc9cd93e160a0cb7c31a3bb6ace86b7dea3b28e7b72acde89c882663f307b2184e14782c6c664fa315973c03626c7d4bff070bb0b + checksum: e9940b30758a6a6bb3595d965accb4c86b85c7b594c3387788c480a83ac5e43d933eccb6b41f510d0c944aa17af340f432b4efe791f0d0bbe0e3e06dfdcda610 languageName: node linkType: hard @@ -21729,11 +23186,11 @@ __metadata: linkType: hard "faye-websocket@npm:^0.11.3": - version: 0.11.4 - resolution: "faye-websocket@npm:0.11.4" + version: 0.11.3 + resolution: "faye-websocket@npm:0.11.3" dependencies: websocket-driver: ">=0.5.1" - checksum: d49a62caf027f871149fc2b3f3c7104dc6d62744277eb6f9f36e2d5714e847d846b9f7f0d0b7169b25a012e24a594cde11a93034b30732e4c683f20b8a5019fa + checksum: d7b2d68546812ea24e3079bd1e08bf1d79cd6d6137bfcea565d1cb1f6a5fc8fc29b689df2c1aff8b8b291d60fc808e1b27aa2896b86ba77ded10f1d9734c8e9f languageName: node linkType: hard @@ -21754,17 +23211,17 @@ __metadata: linkType: hard "fbjs@npm:^3.0.0": - version: 3.0.4 - resolution: "fbjs@npm:3.0.4" + version: 3.0.0 + resolution: "fbjs@npm:3.0.0" dependencies: - cross-fetch: ^3.1.5 + cross-fetch: ^3.0.4 fbjs-css-vars: ^1.0.0 loose-envify: ^1.0.0 object-assign: ^4.1.0 promise: ^7.1.1 setimmediate: ^1.0.5 - ua-parser-js: ^0.7.30 - checksum: 8b23a3550fcda8a9109fca9475a3416590c18bb6825ea884192864ed686f67fcd618e308a140c9e5444fbd0168732e1ff3c092ba3d0c0ae1768969f32ba280c7 + ua-parser-js: ^0.7.18 + checksum: 85ec57d8dbeddd7c82bf8f111a3c7de1abc1f4d7c603d6ccbcc1ec8dce35ff5b7a113dd34acbf7930093e5533c37a2298a92d342077f967bef34dc7cf2f3f07e languageName: node linkType: hard @@ -21778,9 +23235,9 @@ __metadata: linkType: hard "fecha@npm:^4.2.0": - version: 4.2.3 - resolution: "fecha@npm:4.2.3" - checksum: f94e2fb3acf5a7754165d04549460d3ae6c34830394d20c552197e3e000035d69732d74af04b9bed3283bf29fe2a9ebdcc0085e640b0be3cc3658b9726265e31 + version: 4.2.0 + resolution: "fecha@npm:4.2.0" + checksum: 4eb4235959161446f6ec1a24e34eba7362187d2c96d9dd86ea4290e345d1efd2175ccb01bbef9ee852c6790aa7af2539d08361b0499ebc9bf23b4791f5666cd0 languageName: node linkType: hard @@ -21828,18 +23285,18 @@ __metadata: linkType: hard "filelist@npm:^1.0.1": - version: 1.0.4 - resolution: "filelist@npm:1.0.4" + version: 1.0.3 + resolution: "filelist@npm:1.0.3" dependencies: minimatch: ^5.0.1 - checksum: a303573b0821e17f2d5e9783688ab6fbfce5d52aaac842790ae85e704a6f5e4e3538660a63183d6453834dedf1e0f19a9dadcebfa3e926c72397694ea11f5160 + checksum: c78048691a31b91d54908ce2eac4731bf108613c7b2e4d1a05a6cbe6739bd067e4c1a3baa4f7d07b7143b8c374c0c0d59864b5c8d9168ec8e2a85f84fb7170ad languageName: node linkType: hard "filesize@npm:^8.0.6": - version: 8.0.7 - resolution: "filesize@npm:8.0.7" - checksum: 8603d27c5287b984cb100733640645e078f5f5ad65c6d913173e01fb99e09b0747828498fd86647685ccecb69be31f3587b9739ab1e50732116b2374aff4cbf9 + version: 8.0.6 + resolution: "filesize@npm:8.0.6" + checksum: a16d7bd88c943ff55185559eabd4e9779d531b281a39a4a884659fd6f58bd29c20337ad7d58dc5492477df484bb9579a7ca6ad77e57a25908a51f8224790aaa3 languageName: node linkType: hard @@ -21939,7 +23396,7 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^2.0.0": +"find-up@npm:^2.0.0, find-up@npm:^2.1.0": version: 2.1.0 resolution: "find-up@npm:2.1.0" dependencies: @@ -22014,16 +23471,16 @@ __metadata: linkType: hard "flatted@npm:^3.1.0": - version: 3.2.7 - resolution: "flatted@npm:3.2.7" - checksum: 427633049d55bdb80201c68f7eb1cbd533e03eac541f97d3aecab8c5526f12a20ccecaeede08b57503e772c769e7f8680b37e8d482d1e5f8d7e2194687f9ea35 + version: 3.1.1 + resolution: "flatted@npm:3.1.1" + checksum: 508935e3366d95444131f0aaa801a4301f24ea5bcb900d12764e7335b46b910730cc1b5bcfcfb8eccb7c8db261ba0671c6a7ca30d10870ff7a7756dc7e731a7a languageName: node linkType: hard "flow-parser@npm:0.*": - version: 0.187.0 - resolution: "flow-parser@npm:0.187.0" - checksum: 6106ad9a31d64e30ee4a620b50e165d6fc25739ab0ff262aa584688fdc5a25d922df6168b4d53a64d7d476da6f1f79d214b9959fd1e46e4777c95c9872346420 + version: 0.152.0 + resolution: "flow-parser@npm:0.152.0" + checksum: 648558d3e51b6bc3ac8c2ecffc0d37511c2658ecae14b8b869a316621d08a5807253a80d4d5b3268c087cd1f5cfd9db879d4a00710d02891d1567febbdd5e15a languageName: node linkType: hard @@ -22034,22 +23491,33 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.14.8, follow-redirects@npm:^1.14.9": - version: 1.15.2 - resolution: "follow-redirects@npm:1.15.2" +"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.0": + version: 1.14.8 + resolution: "follow-redirects@npm:1.14.8" peerDependenciesMeta: debug: optional: true - checksum: faa66059b66358ba65c234c2f2a37fcec029dc22775f35d9ad6abac56003268baf41e55f9ee645957b32c7d9f62baf1f0b906e68267276f54ec4b4c597c2b190 + checksum: 40c67899c2e3149a27e8b6498a338ff27f39fe138fde8d7f0756cb44b073ba0bfec3d52af28f20c5bdd67263d564d0d8d7b5efefd431de95c18c42f7b4aef457 languageName: node linkType: hard -"for-each@npm:^0.3.3": - version: 0.3.3 - resolution: "for-each@npm:0.3.3" - dependencies: - is-callable: ^1.1.3 - checksum: 6c48ff2bc63362319c65e2edca4a8e1e3483a2fabc72fbe7feaf8c73db94fc7861bd53bc02c8a66a0c1dd709da6b04eec42e0abdd6b40ce47305ae92a25e5d28 +"follow-redirects@npm:^1.14.8": + version: 1.15.0 + resolution: "follow-redirects@npm:1.15.0" + peerDependenciesMeta: + debug: + optional: true + checksum: eaec81c3e0ae57aae2422e38ad3539d0e7279b3a63f9681eeea319bb683dea67502c4e097136b8ce9721542b4e236e092b6b49e34e326cdd7733c274f0a3f378 + languageName: node + linkType: hard + +"follow-redirects@npm:^1.14.9": + version: 1.15.1 + resolution: "follow-redirects@npm:1.15.1" + peerDependenciesMeta: + debug: + optional: true + checksum: 6aa4e3e3cdfa3b9314801a1cd192ba756a53479d9d8cca65bf4db3a3e8834e62139245cd2f9566147c8dfe2efff1700d3e6aefd103de4004a7b99985e71dd533 languageName: node linkType: hard @@ -22060,10 +23528,10 @@ __metadata: languageName: node linkType: hard -"foreach@npm:^2.0.4": - version: 2.0.6 - resolution: "foreach@npm:2.0.6" - checksum: f7b68494545ee41cbd0b0425ebf5386c265dc38ef2a9b0d5cd91a1b82172e939b4cf9387f8e0ebf6db4e368fc79ed323f2198424d5c774515ac3ed9b08901c0e +"foreach@npm:^2.0.4, foreach@npm:^2.0.5": + version: 2.0.5 + resolution: "foreach@npm:2.0.5" + checksum: dab4fbfef0b40b69ee5eab81bcb9626b8fa8b3469c8cfa26480f3e5e1ee08c40eae07048c9a967c65aeda26e774511ccc70b3f10a604c01753c6ef24361f0fc8 languageName: node linkType: hard @@ -22075,8 +23543,8 @@ __metadata: linkType: hard "fork-ts-checker-webpack-plugin@npm:^6.5.0": - version: 6.5.2 - resolution: "fork-ts-checker-webpack-plugin@npm:6.5.2" + version: 6.5.0 + resolution: "fork-ts-checker-webpack-plugin@npm:6.5.0" dependencies: "@babel/code-frame": ^7.8.3 "@types/json-schema": ^7.0.5 @@ -22101,7 +23569,7 @@ __metadata: optional: true vue-template-compiler: optional: true - checksum: c823de02ee258a26ea5c0c488b2f1825b941f72292417478689862468a9140b209ad7df52f67bd134228fe9f40e9115b604fc8f88a69338929fe52be869469b6 + checksum: 95d145ab7936445f3a9bfa4116ef73537f97196cfaa3f5b24473dff36d034e839d3b0e034a23beefc9619eceb7a9866816bfd55afd1968e955eb3b3f8cfc35ed languageName: node linkType: hard @@ -22133,9 +23601,9 @@ __metadata: linkType: hard "form-data-encoder@npm:^1.4.3, form-data-encoder@npm:^1.7.1": - version: 1.7.2 - resolution: "form-data-encoder@npm:1.7.2" - checksum: aeebd87a1cb009e13cbb5e4e4008e6202ed5f6551eb6d9582ba8a062005178907b90f4887899d3c993de879159b6c0c940af8196725b428b4248cec5af3acf5f + version: 1.7.1 + resolution: "form-data-encoder@npm:1.7.1" + checksum: a2a360d5588a70d323c12a140c3db23a503a38f0a5d141af1efad579dde9f9fff2e49e5f31f378cb4631518c1ab4a826452c92f0d2869e954b6b2d77b05613e1 languageName: node linkType: hard @@ -22151,13 +23619,13 @@ __metadata: linkType: hard "form-data@npm:^3.0.0": - version: 3.0.1 - resolution: "form-data@npm:3.0.1" + version: 3.0.0 + resolution: "form-data@npm:3.0.0" dependencies: asynckit: ^0.4.0 combined-stream: ^1.0.8 mime-types: ^2.1.12 - checksum: b019e8d35c8afc14a2bd8a7a92fa4f525a4726b6d5a9740e8d2623c30e308fbb58dc8469f90415a856698933c8479b01646a9dff33c87cc4e76d72aedbbf860d + checksum: 60ec3fe7e23154949ab6fef31baedf5afbfb8d6441ea8d19b211b43a5d0448be2918c9bba6218cade56a7cbd43f670d6e75f41f626f8d397d56bf8c60f4a829d languageName: node linkType: hard @@ -22190,13 +23658,23 @@ __metadata: languageName: node linkType: hard -"formdata-node@npm:^4.0.0, formdata-node@npm:^4.3.1": - version: 4.4.1 - resolution: "formdata-node@npm:4.4.1" +"formdata-node@npm:^4.0.0": + version: 4.3.0 + resolution: "formdata-node@npm:4.3.0" dependencies: node-domexception: 1.0.0 - web-streams-polyfill: 4.0.0-beta.3 - checksum: d91d4f667cfed74827fc281594102c0dabddd03c9f8b426fc97123eedbf73f5060ee43205d89284d6854e2fc5827e030cd352ef68b93beda8decc2d72128c576 + web-streams-polyfill: 4.0.0-beta.1 + checksum: d298e941126e3d0389fe4007187fd252f271ef84693710111e7ce98da83e09a1c60111fc44e2a376d17831ec4a4478515049064f45b8763df2025595c91eac9d + languageName: node + linkType: hard + +"formdata-node@npm:^4.3.1": + version: 4.3.2 + resolution: "formdata-node@npm:4.3.2" + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 4.0.0-beta.1 + checksum: e1d7aae7d579775b813ddc8ea4511fee613552715e81b36afb188d3a65b3d4df2ef69017106079ba52d9ab1e3367fea0206862d8ae64c02008ababdb341d2c3d languageName: node linkType: hard @@ -22331,7 +23809,7 @@ __metadata: languageName: node linkType: hard -"fs-monkey@npm:^1.0.3": +"fs-monkey@npm:1.0.3": version: 1.0.3 resolution: "fs-monkey@npm:1.0.3" checksum: cf50804833f9b88a476911ae911fe50f61a98d986df52f890bd97e7262796d023698cb2309fa9b74fdd8974f04315b648748a0a8ee059e7d5257b293bfc409c0 @@ -22414,6 +23892,23 @@ __metadata: languageName: node linkType: hard +"gauge@npm:^4.0.0": + version: 4.0.0 + resolution: "gauge@npm:4.0.0" + dependencies: + ansi-regex: ^5.0.1 + aproba: ^1.0.3 || ^2.0.0 + color-support: ^1.1.2 + console-control-strings: ^1.0.0 + has-unicode: ^2.0.1 + signal-exit: ^3.0.0 + string-width: ^4.2.3 + strip-ansi: ^6.0.1 + wide-align: ^1.1.2 + checksum: 637b34c84f518defa89319dbef68211a24e9302182ad2a619e3be1be5b7dcf2a962c8359e889294af667440f4722e7e6e61671859e00bd8ec280a136ded89b25 + languageName: node + linkType: hard + "gauge@npm:^4.0.3": version: 4.0.4 resolution: "gauge@npm:4.0.4" @@ -22446,7 +23941,20 @@ __metadata: languageName: node linkType: hard -"gaxios@npm:^5.0.0, gaxios@npm:^5.0.1": +"gaxios@npm:^5.0.0": + version: 5.0.0 + resolution: "gaxios@npm:5.0.0" + dependencies: + abort-controller: ^3.0.0 + extend: ^3.0.2 + https-proxy-agent: ^5.0.0 + is-stream: ^2.0.0 + node-fetch: ^2.6.7 + checksum: d5f81e49db881a6d4fe78ba080a74b27c1be9128e806ff84c26dd6e44539a954551128d7c193d29a3a030510e504448810fa3c3c69af7f21d46572476f1fdef2 + languageName: node + linkType: hard + +"gaxios@npm:^5.0.1": version: 5.0.1 resolution: "gaxios@npm:5.0.1" dependencies: @@ -22487,12 +23995,12 @@ __metadata: languageName: node linkType: hard -"generic-names@npm:^4.0.0": - version: 4.0.0 - resolution: "generic-names@npm:4.0.0" +"generic-names@npm:^2.0.1": + version: 2.0.1 + resolution: "generic-names@npm:2.0.1" dependencies: - loader-utils: ^3.2.0 - checksum: 8dabd2505164191501b75f2861b5e1194458a344ae2a7c9776bdd72d1f50b248dff737bcdf118fff677275edb3632f2d10662e6ac122dd7b245c5baa8d303270 + loader-utils: ^1.1.0 + checksum: 5f2d6837dcddf4d7139f7c7ee4ff6ed82564123ae363aadc7a1c1c9967724da1e10d92c904b76b6ff58912465cf63cf47d87f3b400286845f289f54d5092e78f languageName: node linkType: hard @@ -22517,14 +24025,14 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.2": - version: 1.1.3 - resolution: "get-intrinsic@npm:1.1.3" +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1": + version: 1.1.2 + resolution: "get-intrinsic@npm:1.1.2" dependencies: function-bind: ^1.1.1 has: ^1.0.3 has-symbols: ^1.0.3 - checksum: 152d79e87251d536cf880ba75cfc3d6c6c50e12b3a64e1ea960e73a3752b47c69f46034456eae1b0894359ce3bc64c55c186f2811f8a788b75b638b06fab228a + checksum: 252f45491f2ba88ebf5b38018020c7cc3279de54b1d67ffb70c0cdf1dfa8ab31cd56467b5d117a8b4275b7a4dde91f86766b163a17a850f036528a7b2faafb2b languageName: node linkType: hard @@ -22574,11 +24082,11 @@ __metadata: linkType: hard "get-stream@npm:^5.0.0, get-stream@npm:^5.1.0": - version: 5.2.0 - resolution: "get-stream@npm:5.2.0" + version: 5.1.0 + resolution: "get-stream@npm:5.1.0" dependencies: pump: ^3.0.0 - checksum: 8bc1a23174a06b2b4ce600df38d6c98d2ef6d84e020c1ddad632ad75bac4e092eeb40e4c09e0761c35fc2dbc5e7fff5dab5e763a383582c4a167dd69a905bd12 + checksum: 371e1fb3f3b009edffd379810ed52a1f0a0a621dbb3778bd844e3b002065af0790bfddde845b4a0f05f71da5d99441465f5586281497321b151a8bdd102c885a languageName: node linkType: hard @@ -22632,8 +24140,8 @@ __metadata: linkType: hard "git-raw-commits@npm:^2.0.8": - version: 2.0.11 - resolution: "git-raw-commits@npm:2.0.11" + version: 2.0.10 + resolution: "git-raw-commits@npm:2.0.10" dependencies: dargs: ^7.0.0 lodash: ^4.17.15 @@ -22642,7 +24150,7 @@ __metadata: through2: ^4.0.0 bin: git-raw-commits: cli.js - checksum: c178af43633684106179793b6e3473e1d2bb50bb41d04e2e285ea4eef342ca4090fee6bc8a737552fde879d22346c90de5c49f18c719a0f38d4c934f258a0f79 + checksum: 66e2d7b4cdeff946ac639e1bba37f5dcbd9f5c9245348b31e027e4529f6b6733d23f75768d285d5f29c1f08d3485705a4932300a81a45b77b660fe3ce6089c29 languageName: node linkType: hard @@ -22669,12 +24177,12 @@ __metadata: linkType: hard "git-up@npm:^4.0.0": - version: 4.0.5 - resolution: "git-up@npm:4.0.5" + version: 4.0.1 + resolution: "git-up@npm:4.0.1" dependencies: is-ssh: ^1.3.0 - parse-url: ^6.0.0 - checksum: dd8f39a115ec0523b7da369cd4c6dc94a9b11fcc652e6fc9d011a93c287e27cc34e1d1c89cff8864f9ab11a1b2bea49786951d8eb3f1e5babd351afcc63f6135 + parse-url: ^5.0.0 + checksum: fbbd8f8f5a57dbd6830592f051564498d322acbbccec5b85b7eff41aade8e175dbd702ae9f6caa80d5ce3cb5435b03711c9d706f26e07923eba6d940fc7dcebf languageName: node linkType: hard @@ -22717,11 +24225,11 @@ __metadata: linkType: hard "git-url-parse@npm:^13.0.0": - version: 13.1.0 - resolution: "git-url-parse@npm:13.1.0" + version: 13.0.0 + resolution: "git-url-parse@npm:13.0.0" dependencies: git-up: ^7.0.0 - checksum: 212a9b0343e9199998b6a532efe2014476a7a1283af393663ca49ac28d4768929aad16d3322e2685236065ee394dbc93e7aa63a48956531e984c56d8b5edb54d + checksum: 05a3bf51fc5863d26461a815347929a7432e1ebc6763e6a7ee31f510936266f9a82e0f090d09c2c48cd6dba2f17163fa1d860ba4a3ff157083cca5a5d1961c57 languageName: node linkType: hard @@ -22794,7 +24302,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^8.0.0, glob@npm:^8.0.1": +"glob@npm:^8.0.0": version: 8.0.3 resolution: "glob@npm:8.0.3" dependencies: @@ -22807,6 +24315,20 @@ __metadata: languageName: node linkType: hard +"glob@npm:^8.0.1": + version: 8.0.1 + resolution: "glob@npm:8.0.1" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^5.0.1 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: 7ac782f3ef1c08005884447479e68ceb0ad56997eb2003e1e9aefae71bad3cb48eb7c49190d3d6736f2ffcd8af4985d53a46831b3d5e0052cc5756822a38b61a + languageName: node + linkType: hard + "global-agent@npm:^3.0.0": version: 3.0.0 resolution: "global-agent@npm:3.0.0" @@ -22868,20 +24390,20 @@ __metadata: linkType: hard "globals@npm:^13.15.0": - version: 13.17.0 - resolution: "globals@npm:13.17.0" + version: 13.15.0 + resolution: "globals@npm:13.15.0" dependencies: type-fest: ^0.20.2 - checksum: fbaf4112e59b92c9f5575e85ce65e9e17c0b82711196ec5f58beb08599bbd92fd72703d6dfc9b080381fd35b644e1b11dcf25b38cc2341ec21df942594cbc8ce + checksum: 383ade0873b2ab29ce6d143466c203ed960491575bc97406395e5c8434026fb02472ab2dfff5bc16689b8460269b18fda1047975295cd0183904385c51258bae languageName: node linkType: hard "globalthis@npm:^1.0.1": - version: 1.0.3 - resolution: "globalthis@npm:1.0.3" + version: 1.0.2 + resolution: "globalthis@npm:1.0.2" dependencies: define-properties: ^1.1.3 - checksum: fbd7d760dc464c886d0196166d92e5ffb4c84d0730846d6621a39fbbc068aeeb9c8d1421ad330e94b7bca4bb4ea092f5f21f3d36077812af5d098b4dc006c998 + checksum: 5a5f3c7ab94708260a98106b35946b74bb57f6b2013e39668dc9e8770b80a3418103b63a2b4aa01c31af15fdf6a2940398ffc0a408573c34c2304f928895adff languageName: node linkType: hard @@ -22913,7 +24435,7 @@ __metadata: languageName: node linkType: hard -"google-auth-library@npm:^8.0.0, google-auth-library@npm:^8.0.1, google-auth-library@npm:^8.0.2": +"google-auth-library@npm:^8.0.0": version: 8.5.1 resolution: "google-auth-library@npm:8.5.1" dependencies: @@ -22930,12 +24452,29 @@ __metadata: languageName: node linkType: hard -"google-gax@npm:^3.3.0, google-gax@npm:^3.5.1": - version: 3.5.1 - resolution: "google-gax@npm:3.5.1" +"google-auth-library@npm:^8.0.1, google-auth-library@npm:^8.0.2": + version: 8.4.0 + resolution: "google-auth-library@npm:8.4.0" dependencies: - "@grpc/grpc-js": ~1.7.0 - "@grpc/proto-loader": ^0.7.0 + arrify: ^2.0.0 + base64-js: ^1.3.0 + ecdsa-sig-formatter: ^1.0.11 + fast-text-encoding: ^1.0.0 + gaxios: ^5.0.0 + gcp-metadata: ^5.0.0 + gtoken: ^6.1.0 + jws: ^4.0.0 + lru-cache: ^6.0.0 + checksum: 4f3f52399c851dff3be797f888e675dbb6099613fcd934aece0d1527b9e9a77e5aadc9be12d137981d2d820a59050b0baf29ea126d2722e20a3e1adf425c93e6 + languageName: node + linkType: hard + +"google-gax@npm:^3.0.1": + version: 3.0.3 + resolution: "google-gax@npm:3.0.3" + dependencies: + "@grpc/grpc-js": ~1.6.0 + "@grpc/proto-loader": ^0.6.12 "@types/long": ^4.0.0 abort-controller: ^3.0.0 duplexify: ^4.0.0 @@ -22945,31 +24484,53 @@ __metadata: node-fetch: ^2.6.1 object-hash: ^3.0.0 proto3-json-serializer: ^1.0.0 - protobufjs: 7.1.1 - protobufjs-cli: 1.0.2 + protobufjs: 6.11.3 retry-request: ^5.0.0 bin: compileProtos: build/tools/compileProtos.js - minifyProtoJson: build/tools/minify.js - checksum: 81ecd10981554944a117ace753b2fc8f6d82b26b244db005d01fc5e127181571de9a71ec02b28aa2e233c6fe696108617512a8b090c8304e753913f1ca441767 + checksum: 4f7f38eb39cba1ee80f9569976d4b43db6803b4ae9ebc4de0c348b129c7d6fdd3f43f9add87c07cb1026de19dd78cf101b1c8427016e7f1dcad17dc9e166acf0 + languageName: node + linkType: hard + +"google-gax@npm:^3.3.0": + version: 3.3.0 + resolution: "google-gax@npm:3.3.0" + dependencies: + "@grpc/grpc-js": ~1.6.0 + "@grpc/proto-loader": ^0.7.0 + "@types/long": ^4.0.0 + abort-controller: ^3.0.0 + duplexify: ^4.0.0 + fast-text-encoding: ^1.0.3 + google-auth-library: ^8.0.2 + is-stream-ended: ^0.1.4 + node-fetch: ^2.6.7 + object-hash: ^3.0.0 + proto3-json-serializer: ^1.0.0 + protobufjs: 7.0.0 + protobufjs-cli: 1.0.0 + retry-request: ^5.0.0 + bin: + compileProtos: build/tools/compileProtos.js + checksum: 536b27f9970d80192a8de5609e119126d80de3843c8c9ad674191d2f6d7bc4ee12c28b4d074f6f36859459734144c201b1fbf413cb710bc77a419094ce5aa68a languageName: node linkType: hard "google-p12-pem@npm:^4.0.0": - version: 4.0.1 - resolution: "google-p12-pem@npm:4.0.1" + version: 4.0.0 + resolution: "google-p12-pem@npm:4.0.0" dependencies: node-forge: ^1.3.1 bin: gp12-pem: build/src/bin/gp12-pem.js - checksum: 59a5026331ea67455672e83770da29f09d979f02e06cb2227ea5916f8cca437887c2d3869f2602a686dc84437886ae9d2ac010780803cbe8e5f161c2d02d8efd + checksum: f41a88d339e9fe633dc915bc0f3335c0196fa318f994dcd5dfaa0f3f7aa2d99f6122e2c80bd0f4bb22f2b61ff645b7cc782a74e12ceaf6c9ad9e08cdeb4d615e languageName: node linkType: hard "google-protobuf@npm:^3.15.8, google-protobuf@npm:^3.19.1": - version: 3.21.0 - resolution: "google-protobuf@npm:3.21.0" - checksum: 612a91b8175ab3608ad20be043d41bf757623ca3dce83b6e8b27fed79e9cecba823e6709055ab439e0d59699f48a65416300b41a36ffb5ac98144a940898fea0 + version: 3.20.1 + resolution: "google-protobuf@npm:3.20.1" + checksum: a440fbc329bb441b253bc421b01540918f4b66921c47a3bc57d154d2677dc917cb1a29126ff35ddc4d8872d1b5843ef1ece60b6dff506ba64a9f5807962d3f61 languageName: node linkType: hard @@ -22992,7 +24553,14 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.5, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.15, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": + version: 4.2.9 + resolution: "graceful-fs@npm:4.2.9" + checksum: 68ea4e07ff2c041ada184f9278b830375f8e0b75154e3f080af6b70f66172fabb4108d19b3863a96b53fc068a310b9b6493d86d1291acc5f3861eb4b79d26ad6 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.5, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0": version: 4.2.10 resolution: "graceful-fs@npm:4.2.10" checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da @@ -23055,17 +24623,26 @@ __metadata: languageName: node linkType: hard +"graphql-executor@npm:0.0.23": + version: 0.0.23 + resolution: "graphql-executor@npm:0.0.23" + peerDependencies: + graphql: ^15.0.0 || ^16.0.0 + checksum: 22f19ba2d80d73be33246540a5f20c87c1acc53965ac9de05cca12b004f6183f8e4083198c55554f949cdbb0c748eedeb7b9cfc606aea09f30bc7135daa00464 + languageName: node + linkType: hard + "graphql-language-service@npm:^5.0.6": - version: 5.1.0 - resolution: "graphql-language-service@npm:5.1.0" + version: 5.0.6 + resolution: "graphql-language-service@npm:5.0.6" dependencies: nullthrows: ^1.0.0 - vscode-languageserver-types: ^3.17.1 + vscode-languageserver-types: ^3.15.1 peerDependencies: graphql: ^15.5.0 || ^16.0.0 bin: graphql: dist/temp-bin.js - checksum: 705aab1f7fea7ce509b9c4f6e4cbcad724f4049d4d40c4d458eb3dde5199ab506adfc747df7643a167a9345b6e7f5bd4b6618f612fe8bf00600963ecd04a8a69 + checksum: a7155ba934aa428278cce0f460fa3b8b12020a26a0355e60738974617a66d9b2f1bb7d41cbd72a1620a29e61f10ca438cbf72cbf2405b8f653edddfc69fec02a languageName: node linkType: hard @@ -23083,17 +24660,16 @@ __metadata: languageName: node linkType: hard -"graphql-request@npm:^5.0.0": - version: 5.0.0 - resolution: "graphql-request@npm:5.0.0" +"graphql-request@npm:^4.0.0": + version: 4.2.0 + resolution: "graphql-request@npm:4.2.0" dependencies: - "@graphql-typed-document-node/core": ^3.1.1 cross-fetch: ^3.1.5 extract-files: ^9.0.0 form-data: ^3.0.0 peerDependencies: graphql: 14 - 16 - checksum: 2e8900d10cded401b253a05650719321123e3b0ad5bc57523288892e0226dccf43668ec937753420084f649fb4e3f998f2547c884b746a3e91fa0a43f93e62d4 + checksum: c508705ebdbb94ce4599c9236c06993dd19481d1765b8f316c8ad6eee81c18afaaf9362fa4f6f00227f26e793b4ec38a6aea44708da0ca4a1b4324f41691bbdc languageName: node linkType: hard @@ -23118,11 +24694,11 @@ __metadata: linkType: hard "graphql-ws@npm:^5.4.1, graphql-ws@npm:^5.9.0": - version: 5.11.1 - resolution: "graphql-ws@npm:5.11.1" + version: 5.10.1 + resolution: "graphql-ws@npm:5.10.1" peerDependencies: graphql: ">=0.11 <=16" - checksum: ad4ae060724e38c7b360fe26700dd3f88e969706c071f065d457b04ab76aad2415d780402cf8f99facc11eca9ca2871c356c3ba66f832b4c227856c6953d4d60 + checksum: ad8eb8a6823a32a7bd9bc6ec73a0b244f503e50318ef5db1312f1d09c5f0b0e4505ad75b08f06e4c40c6935cf5170444b19347b7b83222b4e1af01401418cb91 languageName: node linkType: hard @@ -23140,7 +24716,31 @@ __metadata: languageName: node linkType: hard -"grpc-docs@npm:^1.0.6, grpc-docs@npm:^1.1.2": +"grpc-docs@npm:^1.0.6": + version: 1.1.2 + resolution: "grpc-docs@npm:1.1.2" + dependencies: + "@improbable-eng/grpc-web": ^0.15.0 + "@types/minimatch": ^3.0.5 + gendocu-public-apis: ^1.0.0 + google-protobuf: ^3.19.1 + grpc-docs: ^1.0.6 + js-yaml: ^4.1.0 + minimatch: ^3.0.4 + react-copy-to-clipboard: ^5.0.4 + react-dom: ^16.13.1 + react-is: ^16.8.0 + react-syntax-highlighter: ^15.4.5 + rollup: ^0.60 + rollup-plugin-smart-asset: ^2.1.2 + styled-components: ^5.3.3 + peerDependencies: + react: ^16.0.0 + checksum: ad1bac493e42bdf4cd363eed80f70f40e80ee3e7605e530958c4155e95e3c9ca6f92f6fa9f28a6c5304327c3926fc6661fc1127b79ca43ef32bc9558a0b093cc + languageName: node + linkType: hard + +"grpc-docs@npm:^1.1.2": version: 1.1.3 resolution: "grpc-docs@npm:1.1.3" dependencies: @@ -23190,13 +24790,13 @@ __metadata: linkType: hard "gtoken@npm:^6.1.0": - version: 6.1.2 - resolution: "gtoken@npm:6.1.2" + version: 6.1.1 + resolution: "gtoken@npm:6.1.1" dependencies: gaxios: ^5.0.1 google-p12-pem: ^4.0.0 jws: ^4.0.0 - checksum: cf3210afe2ccee8feaa06f0c7eb942e217244a8563a1d0a71aa3095eea545015896741c1d48654d8de35b7b07579f93e25e5dfe817f06b7e753646b67f7a4ecf + checksum: f063ed3f418f5a9c33fbe599b09f56a55b18f6c8d2913f11cc2fc5025d53b96fd6ab1b4deb2c7631167d6b89d0939e4ea77f94767fcf338862ffda8911250980 languageName: node linkType: hard @@ -23210,9 +24810,9 @@ __metadata: linkType: hard "handle-thing@npm:^2.0.0": - version: 2.0.1 - resolution: "handle-thing@npm:2.0.1" - checksum: 68071f313062315cd9dce55710e9496873945f1dd425107007058fc1629f93002a7649fcc3e464281ce02c7e809a35f5925504ab8105d972cf649f1f47cb7d6c + version: 2.0.0 + resolution: "handle-thing@npm:2.0.0" + checksum: bb6a33ec17a36a9fca92c8f98b0208dca4b5659253d77a2db7d31a0bad467d01f94e59444e226b6d35877226516176f069501c01d847047e1abcbe303363070f languageName: node linkType: hard @@ -23242,12 +24842,12 @@ __metadata: linkType: hard "har-validator@npm:~5.1.3": - version: 5.1.5 - resolution: "har-validator@npm:5.1.5" + version: 5.1.3 + resolution: "har-validator@npm:5.1.3" dependencies: - ajv: ^6.12.3 + ajv: ^6.5.5 har-schema: ^2.0.0 - checksum: b998a7269ca560d7f219eedc53e2c664cd87d487e428ae854a6af4573fc94f182fe9d2e3b92ab968249baec7ebaf9ead69cf975c931dc2ab282ec182ee988280 + checksum: 5903ddf55f4403bb102a86dc2da073593716c7aa422863c244cb406b69e006551553c904e30ed5d123788675ae827f977b3b366211dc730b33a2b619f926199f languageName: node linkType: hard @@ -23259,9 +24859,9 @@ __metadata: linkType: hard "harmony-reflect@npm:^1.4.6": - version: 1.6.2 - resolution: "harmony-reflect@npm:1.6.2" - checksum: 2e5bae414cd2bfae5476147f9935dc69ee9b9a413206994dcb94c5b3208d4555da3d4313aff6fd14bd9991c1e3ef69cdda5c8fac1eb1d7afc064925839339b8c + version: 1.6.1 + resolution: "harmony-reflect@npm:1.6.1" + checksum: 4cb91f86d262650d62c3ac713a2284ef0784a5c8be347188f97747db68d0e6d9801f09a3f12bacec59d5ec9d010cba64b8acb4c2c4827e172ef2ab215cdfef9d languageName: node linkType: hard @@ -23311,7 +24911,7 @@ __metadata: languageName: node linkType: hard -"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": +"has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": version: 1.0.3 resolution: "has-symbols@npm:1.0.3" checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 @@ -23383,13 +24983,12 @@ __metadata: linkType: hard "hash-base@npm:^3.0.0": - version: 3.1.0 - resolution: "hash-base@npm:3.1.0" + version: 3.0.4 + resolution: "hash-base@npm:3.0.4" dependencies: - inherits: ^2.0.4 - readable-stream: ^3.6.0 - safe-buffer: ^5.2.0 - checksum: 26b7e97ac3de13cb23fc3145e7e3450b0530274a9562144fc2bf5c1e2983afd0e09ed7cc3b20974ba66039fad316db463da80eb452e7373e780cbee9a0d2f2dc + inherits: ^2.0.1 + safe-buffer: ^5.0.1 + checksum: 878465a0dfcc33cce195c2804135352c590d6d10980adc91a9005fd377e77f2011256c2b7cfce472e3f2e92d561d1bf3228d2da06348a9017ce9a258b3b49764 languageName: node linkType: hard @@ -23411,9 +25010,9 @@ __metadata: linkType: hard "hast-util-parse-selector@npm:^2.0.0": - version: 2.2.5 - resolution: "hast-util-parse-selector@npm:2.2.5" - checksum: 22ee4afbd11754562144cb3c4f3ec52524dafba4d90ee52512902d17cf11066d83b38f7bdf6ca571bbc2541f07ba30db0d234657b6ecb8ca4631587466459605 + version: 2.2.4 + resolution: "hast-util-parse-selector@npm:2.2.4" + checksum: 06e8b534626517929856877df116d95b46d384cc159595270c1e5b3af7404f20843065a1c675d60944445f7356c5c876ed10d5e2d66654b62fe06ecc8b423d45 languageName: node linkType: hard @@ -23456,7 +25055,14 @@ __metadata: languageName: node linkType: hard -"headers-polyfill@npm:^3.0.4, headers-polyfill@npm:^3.1.0": +"headers-polyfill@npm:^3.0.4": + version: 3.0.7 + resolution: "headers-polyfill@npm:3.0.7" + checksum: ee392c1acdd2be797090837a085b14c8dc79f221e2501508afc1474667fba0627d583e06f9ab5cad57cf9dd570942d3166f791c75b92522a17c69c1e6bfcfbc4 + languageName: node + linkType: hard + +"headers-polyfill@npm:^3.1.0": version: 3.1.0 resolution: "headers-polyfill@npm:3.1.0" checksum: a95257065684653b7185efbb9a380c547ea832002991b5adf0d90cd222073da2701be9dc2849d1970ecf15e8c35b383984358566afe6e76ca8ff1dbd7cdce3af @@ -23484,7 +25090,7 @@ __metadata: languageName: node linkType: hard -"history@npm:^5.0.0": +"history@npm:^5.0.0, history@npm:^5.2.0": version: 5.3.0 resolution: "history@npm:5.3.0" dependencies: @@ -23539,6 +25145,15 @@ __metadata: languageName: node linkType: hard +"hosted-git-info@npm:^3.0.6": + version: 3.0.8 + resolution: "hosted-git-info@npm:3.0.8" + dependencies: + lru-cache: ^6.0.0 + checksum: 5af7a69581acb84206a7b8e009f4680c36396814e92c8a83973dfb3b87e44e44d1f7b8eaf3e4a953686482770ecb78406a4ce4666bfdfe447762434127871d8d + languageName: node + linkType: hard + "hosted-git-info@npm:^4.0.0, hosted-git-info@npm:^4.0.1": version: 4.1.0 resolution: "hosted-git-info@npm:4.1.0" @@ -23549,11 +25164,11 @@ __metadata: linkType: hard "hosted-git-info@npm:^5.0.0": - version: 5.1.0 - resolution: "hosted-git-info@npm:5.1.0" + version: 5.0.0 + resolution: "hosted-git-info@npm:5.0.0" dependencies: lru-cache: ^7.5.1 - checksum: 22abbc6a7418344c883e2df6e791e94b38192b2a61256b19c955999d878b8d5365ea51683fd1f0cc8f217e9bd121db88d5aaa7cf0407c4b7ff287b79aabacbd3 + checksum: 515e69463d123635f70d70656c5ec648951ffc1987f92a87cb4a038e1794bfed833cf87569b358b137ebbc75d992c073ed0408d420c9e5b717c2b4f0a291490c languageName: node linkType: hard @@ -23586,16 +25201,16 @@ __metadata: linkType: hard "html-entities@npm:^2.1.0, html-entities@npm:^2.3.2": - version: 2.3.3 - resolution: "html-entities@npm:2.3.3" - checksum: 92521501da8aa5f66fee27f0f022d6e9ceae62667dae93aa6a2f636afa71ad530b7fb24a18d4d6c124c9885970cac5f8a52dbf1731741161002816ae43f98196 + version: 2.3.2 + resolution: "html-entities@npm:2.3.2" + checksum: 522d8d202df301ff51b517a379e642023ed5c81ea9fb5674ffad88cff386165733d00b6089d5c2fcc644e44777d6072017b6216d8fa40f271d3610420d00a886 languageName: node linkType: hard "html-escaper@npm:^2.0.0": - version: 2.0.2 - resolution: "html-escaper@npm:2.0.2" - checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974 + version: 2.0.1 + resolution: "html-escaper@npm:2.0.1" + checksum: 5f76c4f12a155fc19dbcad7da11fe833623a84b7d120d9a96fb5c720f9fe1e3e68c1916e9c333fe383f5cdeeeb382cbcb4c22fc345a00863eba48f3a027c4878 languageName: node linkType: hard @@ -23657,6 +25272,19 @@ __metadata: languageName: node linkType: hard +"http-errors@npm:1.8.1": + version: 1.8.1 + resolution: "http-errors@npm:1.8.1" + dependencies: + depd: ~1.1.2 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: ">= 1.5.0 < 2" + toidentifier: 1.0.1 + checksum: d3c7e7e776fd51c0a812baff570bdf06fe49a5dc448b700ab6171b1250e4cf7db8b8f4c0b133e4bfe2451022a5790c1ca6c2cae4094dedd6ac8304a1267f91d2 + languageName: node + linkType: hard + "http-errors@npm:2.0.0, http-errors@npm:^2.0.0": version: 2.0.0 resolution: "http-errors@npm:2.0.0" @@ -23683,9 +25311,9 @@ __metadata: linkType: hard "http-parser-js@npm:>=0.5.1": - version: 0.5.8 - resolution: "http-parser-js@npm:0.5.8" - checksum: 6bbdf2429858e8cf13c62375b0bfb6dc3955ca0f32e58237488bc86cd2378f31d31785fd3ac4ce93f1c74e0189cf8823c91f5cb061696214fd368d2452dc871d + version: 0.5.3 + resolution: "http-parser-js@npm:0.5.3" + checksum: 6f3142c5f60ad995a6895a1dc4f70f8cef0910745366e97cbcb99caa604590dbcc11006b00989ad306837d6b820e9bfc6e801c4060ed19a0e4df83caa8577cb5 languageName: node linkType: hard @@ -23763,12 +25391,12 @@ __metadata: linkType: hard "http2-wrapper@npm:^1.0.0-beta.5.2": - version: 1.0.3 - resolution: "http2-wrapper@npm:1.0.3" + version: 1.0.0-beta.5.2 + resolution: "http2-wrapper@npm:1.0.0-beta.5.2" dependencies: quick-lru: ^5.1.1 resolve-alpn: ^1.0.0 - checksum: 74160b862ec699e3f859739101ff592d52ce1cb207b7950295bf7962e4aa1597ef709b4292c673bece9c9b300efad0559fc86c71b1409c7a1e02b7229456003e + checksum: c2b572ded523dbf52d8107f61791b527f85e9ce03e811f452e7e3c9e59925ebd1e757c60f8b46a549778675546e8ace189091a1764eb4601db46aa51292b84d0 languageName: node linkType: hard @@ -23843,9 +25471,9 @@ __metadata: linkType: hard "hyphenate-style-name@npm:^1.0.2, hyphenate-style-name@npm:^1.0.3": - version: 1.0.4 - resolution: "hyphenate-style-name@npm:1.0.4" - checksum: 4f5bf4b055089754924babebaa23c17845937bcca6aee95d5d015f8fa1e6814279002bd6a9e541e3fac2cd02519fc76305396727066c57c8e21a7e73e7a12137 + version: 1.0.3 + resolution: "hyphenate-style-name@npm:1.0.3" + checksum: e333f610e7cb32210861ff8c55f99582cdc39e4737903936a7eb61702c98f8db45f33d54f9d230221fabc4d321b2ab8382b8af50d24a1eba21916f2edddd7b85 languageName: node linkType: hard @@ -23914,11 +25542,11 @@ __metadata: linkType: hard "ignore-walk@npm:^3.0.3": - version: 3.0.4 - resolution: "ignore-walk@npm:3.0.4" + version: 3.0.3 + resolution: "ignore-walk@npm:3.0.3" dependencies: minimatch: ^3.0.4 - checksum: 9e9c5ef6c3e0ed7ef5d797991abb554dbb7e60d5fedf6cf05c7129819689eba2b462f625c6e3561e0fc79841904eb829565513eeeab1b44f4fbec4d3146b1a8d + checksum: 34bc6f0497276a9bfad7ba1ae301c7d16bc6424890755a21d90536eaa1f4b7acd598686a01033e64345483b2fef41dad8f93794af73c8b13a7cf21a3cae34a4e languageName: node linkType: hard @@ -24001,12 +25629,12 @@ __metadata: linkType: hard "import-fresh@npm:^3.0.0, import-fresh@npm:^3.1.0, import-fresh@npm:^3.2.1": - version: 3.3.0 - resolution: "import-fresh@npm:3.3.0" + version: 3.2.1 + resolution: "import-fresh@npm:3.2.1" dependencies: parent-module: ^1.0.0 resolve-from: ^4.0.0 - checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa + checksum: caef42418a087c3951fb676943a7f21ba8971aa07f9b622dff4af7edcef4160e1b172dccd85a88d7eb109cf41406a4592f70259e6b3b33aeafd042bb61f81d96 languageName: node linkType: hard @@ -24034,14 +25662,14 @@ __metadata: linkType: hard "import-local@npm:^3.0.2": - version: 3.1.0 - resolution: "import-local@npm:3.1.0" + version: 3.0.2 + resolution: "import-local@npm:3.0.2" dependencies: pkg-dir: ^4.2.0 resolve-cwd: ^3.0.0 bin: import-local-fixture: fixtures/cli.js - checksum: bfcdb63b5e3c0e245e347f3107564035b128a414c4da1172a20dc67db2504e05ede4ac2eee1252359f78b0bfd7b19ef180aec427c2fce6493ae782d73a04cddd + checksum: c74d9f9484c878cda1de3434613c7ff72d5dadcf20e5482542232d7c2575b713ff88701d6675fcf09a3684cb23fb407c8b333b9cbc59438712723d058d8e976c languageName: node linkType: hard @@ -24052,6 +25680,15 @@ __metadata: languageName: node linkType: hard +"indefinite-observable@npm:^2.0.1": + version: 2.0.1 + resolution: "indefinite-observable@npm:2.0.1" + dependencies: + symbol-observable: 1.2.0 + checksum: b4305c999b7596901f8798e569b8faa030361dfb77f8b720e229558a29f544826f7e8987c55cc2a84c37ff2723594a965b96a40a6c71daae92b918f3eb393077 + languageName: node + linkType: hard + "indent-string@npm:^4.0.0": version: 4.0.0 resolution: "indent-string@npm:4.0.0" @@ -24059,6 +25696,13 @@ __metadata: languageName: node linkType: hard +"indexes-of@npm:^1.0.1": + version: 1.0.1 + resolution: "indexes-of@npm:1.0.1" + checksum: 4f9799b1739a62f3e02d09f6f4162cf9673025282af7fa36e790146e7f4e216dad3e776a25b08536c093209c9fcb5ea7bd04b082d42686a45f58ff401d6da32e + languageName: node + linkType: hard + "indexof@npm:0.0.1": version: 0.0.1 resolution: "indexof@npm:0.0.1" @@ -24119,17 +25763,18 @@ __metadata: linkType: hard "init-package-json@npm:^2.0.2": - version: 2.0.5 - resolution: "init-package-json@npm:2.0.5" + version: 2.0.2 + resolution: "init-package-json@npm:2.0.2" dependencies: - npm-package-arg: ^8.1.5 + glob: ^7.1.1 + npm-package-arg: ^8.1.0 promzard: ^0.3.0 read: ~1.0.1 - read-package-json: ^4.1.1 - semver: ^7.3.5 + read-package-json: ^3.0.0 + semver: ^7.3.2 validate-npm-package-license: ^3.0.4 validate-npm-package-name: ^3.0.0 - checksum: cbd3e2e79156d6e8722699f571e509e0733dde31ac4cb58c0aadb63f7cef1a131037c6d549bd6af5757032a51252b1bdb86a70f68ed6c10f866f203e5fb4f9ba + checksum: d8bfd3bd0de46411768011d441c6c96299e639279d7720184f51796533d0088a04a1010ad675718ec899bf6991e84a5e2de6b1ffa3c9357cea919b87c9fb4f73 languageName: node linkType: hard @@ -24141,11 +25786,11 @@ __metadata: linkType: hard "inline-style-prefixer@npm:^6.0.0": - version: 6.0.1 - resolution: "inline-style-prefixer@npm:6.0.1" + version: 6.0.0 + resolution: "inline-style-prefixer@npm:6.0.0" dependencies: css-in-js-utils: ^2.0.0 - checksum: 0bfa6fa89faa21e425c71425910c37c7b35a16ea753586c408fcc9246c84937c1b8184e6ce792139cda5de5cce8e1bc9eb0ba9f30968bdc97e7a06ece21c0737 + checksum: 1331a6184bed03d145e3b9a98363fc7a245590ea1a495df7376a99386737893d4318f8ecf873e2be8431cff1de91512b7a4b9e36326933d5647db0088b63ef4f languageName: node linkType: hard @@ -24226,10 +25871,10 @@ __metadata: languageName: node linkType: hard -"internmap@npm:1 - 2": - version: 2.0.3 - resolution: "internmap@npm:2.0.3" - checksum: 7ca41ec6aba8f0072fc32fa8a023450a9f44503e2d8e403583c55714b25efd6390c38a87161ec456bf42d7bc83aab62eb28f5aef34876b1ac4e60693d5e1d241 +"internmap@npm:^1.0.0": + version: 1.0.1 + resolution: "internmap@npm:1.0.1" + checksum: 9d00f8c0cf873a24a53a5a937120dab634c41f383105e066bb318a61864e6292d24eb9516e8e7dccfb4420ec42ca474a0f28ac9a6cc82536898fa09bbbe53813 languageName: node linkType: hard @@ -24273,9 +25918,9 @@ __metadata: languageName: node linkType: hard -"ioredis@npm:^5.2.3": - version: 5.2.3 - resolution: "ioredis@npm:5.2.3" +"ioredis@npm:^5.1.0": + version: 5.1.0 + resolution: "ioredis@npm:5.1.0" dependencies: "@ioredis/commands": ^1.1.1 cluster-key-slot: ^1.1.0 @@ -24286,7 +25931,7 @@ __metadata: redis-errors: ^1.2.0 redis-parser: ^3.0.0 standard-as-callback: ^2.1.0 - checksum: 2cb7f0f4217e6774accad3620af1b7114722721c1d1824be2c9f0c2a77ab9629f2e0848d18b1a7208bc37796ae1207cb3e0898fce61900cfe797da0382724ad1 + checksum: 7b1c137836ee136a634926df4ec68cc2393772a32ecda8e30dd305d7b9182af02d600456e661f96a6ceada17560ce7b6458948fd09b8adc277a1d287325777dd languageName: node linkType: hard @@ -24297,10 +25942,10 @@ __metadata: languageName: node linkType: hard -"ip@npm:^2.0.0": - version: 2.0.0 - resolution: "ip@npm:2.0.0" - checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 +"ip@npm:^1.1.5": + version: 1.1.5 + resolution: "ip@npm:1.1.5" + checksum: 30133981f082a060a32644f6a7746e9ba7ac9e2bc07ecc8bbdda3ee8ca9bec1190724c390e45a1ee7695e7edfd2a8f7dda2c104ec5f7ac5068c00648504c7e5a languageName: node linkType: hard @@ -24318,6 +25963,13 @@ __metadata: languageName: node linkType: hard +"is-absolute-url@npm:^3.0.3": + version: 3.0.3 + resolution: "is-absolute-url@npm:3.0.3" + checksum: 5159b51d065d9ad29e16a2f78d6c0e41c43227caf90a45e659c54ea6fd50ef0595b1871ce392e84b1df7cfdcad9a8e66eec0813a029112188435abf115accb16 + languageName: node + linkType: hard + "is-absolute@npm:^1.0.0": version: 1.0.0 resolution: "is-absolute@npm:1.0.0" @@ -24353,6 +26005,13 @@ __metadata: languageName: node linkType: hard +"is-alphabetical@npm:^2.0.0": + version: 2.0.0 + resolution: "is-alphabetical@npm:2.0.0" + checksum: 7193b3ffaa1b7657b71a4e25aea51f4bd750e589d7e1cc2e349edb942b0145873923477a689b248fe553602e0a3793bc012a13763c56dbc0241d14f3b98d8dc9 + languageName: node + linkType: hard + "is-alphanumerical@npm:^1.0.0": version: 1.0.4 resolution: "is-alphanumerical@npm:1.0.4" @@ -24363,13 +26022,20 @@ __metadata: languageName: node linkType: hard -"is-arguments@npm:^1.0.4": - version: 1.1.1 - resolution: "is-arguments@npm:1.1.1" +"is-alphanumerical@npm:^2.0.0": + version: 2.0.0 + resolution: "is-alphanumerical@npm:2.0.0" dependencies: - call-bind: ^1.0.2 - has-tostringtag: ^1.0.0 - checksum: 7f02700ec2171b691ef3e4d0e3e6c0ba408e8434368504bb593d0d7c891c0dbfda6d19d30808b904a6cb1929bca648c061ba438c39f296c2a8ca083229c49f27 + is-alphabetical: ^2.0.0 + is-decimal: ^2.0.0 + checksum: 50a5003efd6824aba9f69bae8b37c76c2c7b76f0c6251dcc9a54408437364f5ae70da7f010e24a056c4bf19e20b0116d95f248be1089528a8b6696e28c1f0b0b + languageName: node + linkType: hard + +"is-arguments@npm:^1.0.4": + version: 1.0.4 + resolution: "is-arguments@npm:1.0.4" + checksum: a40ce1580cbb28b67790afe91d9c39a9016f165e724021f2c61da016d7382a1b04a202d9d4ea1c8b5d7fda7c15144aa5c4e92ea4ed0896e2b95f4f665a966cd5 languageName: node linkType: hard @@ -24423,25 +26089,25 @@ __metadata: linkType: hard "is-buffer@npm:^2.0.0": - version: 2.0.5 - resolution: "is-buffer@npm:2.0.5" - checksum: 764c9ad8b523a9f5a32af29bdf772b08eb48c04d2ad0a7240916ac2688c983bf5f8504bf25b35e66240edeb9d9085461f9b5dae1f3d2861c6b06a65fe983de42 + version: 2.0.4 + resolution: "is-buffer@npm:2.0.4" + checksum: b1616ff40c1644e219d6038819044608e31edcc60eb287e5f214391222dea889a68c659f0654865ce34b6c4dcfa2c8cae0174343a0f6ae3f2150f7856326cb80 languageName: node linkType: hard "is-builtin-module@npm:^3.1.0": - version: 3.2.0 - resolution: "is-builtin-module@npm:3.2.0" + version: 3.1.0 + resolution: "is-builtin-module@npm:3.1.0" dependencies: - builtin-modules: ^3.3.0 - checksum: 0315751b898feff0646511c896e88b608a755c5025d0ce9a3ad25783de50be870e47dafb838cebbb06fbb2a948b209ea55348eee267836c9dd40d3a11ec717d3 + builtin-modules: ^3.0.0 + checksum: f1e5dd2cd5f252d4d799b20a0c8c4f7e9c399c4d141749af76ca0121058d4062c3015d026f1b1409dd3d2a4ddfb9b15cf6eb9c370fed53fea8652ce35b5e95cb languageName: node linkType: hard -"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.4": - version: 1.2.6 - resolution: "is-callable@npm:1.2.6" - checksum: 7667d6a6be66df00741cfa18c657877c46a00139ea7ea7765251e9db0182745c9ee173506941a329d6914e34e59e9cc80029fb3f68bbf8c22a6c155ee6ea77b3 +"is-callable@npm:^1.1.4, is-callable@npm:^1.2.4": + version: 1.2.4 + resolution: "is-callable@npm:1.2.4" + checksum: 1a28d57dc435797dae04b173b65d6d1e77d4f16276e9eff973f994eadcfdc30a017e6a597f092752a083c1103cceb56c91e3dadc6692fedb9898dfaba701575f languageName: node linkType: hard @@ -24467,7 +26133,25 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.1.0, is-core-module@npm:^2.5.0, is-core-module@npm:^2.8.1, is-core-module@npm:^2.9.0": +"is-core-module@npm:^2.1.0, is-core-module@npm:^2.2.0": + version: 2.8.1 + resolution: "is-core-module@npm:2.8.1" + dependencies: + has: ^1.0.3 + checksum: 418b7bc10768a73c41c7ef497e293719604007f88934a6ffc5f7c78702791b8528102fb4c9e56d006d69361549b3d9519440214a74aefc7e0b79e5e4411d377f + languageName: node + linkType: hard + +"is-core-module@npm:^2.8.0, is-core-module@npm:^2.8.1": + version: 2.9.0 + resolution: "is-core-module@npm:2.9.0" + dependencies: + has: ^1.0.3 + checksum: b27034318b4b462f1c8f1dfb1b32baecd651d891a4e2d1922135daeff4141dfced2b82b07aef83ef54275c4a3526aa38da859223664d0868ca24182badb784ce + languageName: node + linkType: hard + +"is-core-module@npm:^2.9.0": version: 2.10.0 resolution: "is-core-module@npm:2.10.0" dependencies: @@ -24510,6 +26194,13 @@ __metadata: languageName: node linkType: hard +"is-decimal@npm:^2.0.0": + version: 2.0.0 + resolution: "is-decimal@npm:2.0.0" + checksum: 274ff0ef14e5694a2f698d65225680fb9b0c9a9da36afd320a9b5224aec1182679792ec6684fe15e3576ad3de91a2e1f6662e0e0e2f7bda6a50c026cd8030959 + languageName: node + linkType: hard + "is-descriptor@npm:^0.1.0": version: 0.1.6 resolution: "is-descriptor@npm:0.1.6" @@ -24612,11 +26303,9 @@ __metadata: linkType: hard "is-generator-function@npm:^1.0.7": - version: 1.0.10 - resolution: "is-generator-function@npm:1.0.10" - dependencies: - has-tostringtag: ^1.0.0 - checksum: d54644e7dbaccef15ceb1e5d91d680eb5068c9ee9f9eb0a9e04173eb5542c9b51b5ab52c5537f5703e48d5fddfd376817c1ca07a84a407b7115b769d4bdde72b + version: 1.0.8 + resolution: "is-generator-function@npm:1.0.8" + checksum: ff6a510416885616fa57a2a1e043224a386ed37451c3686cc1ed38a63acd59b240f09b5d937aa86dedc3a7fb91ae6c0ce6477149d4b6f9be608a870e038b38bd languageName: node linkType: hard @@ -24636,6 +26325,13 @@ __metadata: languageName: node linkType: hard +"is-hexadecimal@npm:^2.0.0": + version: 2.0.0 + resolution: "is-hexadecimal@npm:2.0.0" + checksum: 62d03640345e13a3edcccbd5c80e47088c7163e54ab6e945f77fd5bf2b1e8571fb7fd4c2d6eff9f2720a6db81cb13377f0acd0b245344b69dc85be5239b8a6f6 + languageName: node + linkType: hard + "is-in-browser@npm:^1.0.2, is-in-browser@npm:^1.1.3": version: 1.1.3 resolution: "is-in-browser@npm:1.1.3" @@ -24683,7 +26379,7 @@ __metadata: languageName: node linkType: hard -"is-negative-zero@npm:^2.0.2": +"is-negative-zero@npm:^2.0.1, is-negative-zero@npm:^2.0.2": version: 2.0.2 resolution: "is-negative-zero@npm:2.0.2" checksum: f3232194c47a549da60c3d509c9a09be442507616b69454716692e37ae9f37c4dea264fb208ad0c9f3efd15a796a46b79df07c7e53c6227c32170608b809149a @@ -24730,9 +26426,9 @@ __metadata: linkType: hard "is-object@npm:^1.0.1": - version: 1.0.2 - resolution: "is-object@npm:1.0.2" - checksum: 971219c4b1985b9751f65e4c8296d3104f0457b0e8a70849e848a4a2208bc47317d73b3b85d4a369619cb2df8284dc22584cb2695a7d99aca5e8d0aa64fc075a + version: 1.0.1 + resolution: "is-object@npm:1.0.1" + checksum: 845eea5ecea9723c04809c9c502a19f318b486f796b128a7b8e5a228c7256c3db8c8201043577542075632e292cd4dfeb04627f12f53817d7bd9f30485cf4c34 languageName: node linkType: hard @@ -24772,9 +26468,9 @@ __metadata: linkType: hard "is-plain-obj@npm:^4.0.0": - version: 4.1.0 - resolution: "is-plain-obj@npm:4.1.0" - checksum: 6dc45da70d04a81f35c9310971e78a6a3c7a63547ef782e3a07ee3674695081b6ca4e977fbb8efc48dae3375e0b34558d2bcd722aec9bddfa2d7db5b041be8ce + version: 4.0.0 + resolution: "is-plain-obj@npm:4.0.0" + checksum: a6bb55a90636345a64c6153b74d85a9b6440f9975f4dcc57eed596c280b7ba228c71c406355a3147ed0488330d2743d5756e052c9492b1aa4f7dcd281f08c4b6 languageName: node linkType: hard @@ -24808,6 +26504,13 @@ __metadata: languageName: node linkType: hard +"is-promise@npm:^2.1.0": + version: 2.2.2 + resolution: "is-promise@npm:2.2.2" + checksum: 18bf7d1c59953e0ad82a1ed963fb3dc0d135c8f299a14f89a17af312fc918373136e56028e8831700e1933519630cc2fd4179a777030330fde20d34e96f40c78 + languageName: node + linkType: hard + "is-promise@npm:^4.0.0": version: 4.0.0 resolution: "is-promise@npm:4.0.0" @@ -24850,6 +26553,13 @@ __metadata: languageName: node linkType: hard +"is-resolvable@npm:^1.1.0": + version: 1.1.0 + resolution: "is-resolvable@npm:1.1.0" + checksum: 2ddff983be0cabc2c8d60246365755f8fb322f5fb9db834740d3e694c635c1b74c1bd674cf221e072fc4bd911ef3f08f2247d390e476f7e80af9092443193c68 + languageName: node + linkType: hard + "is-root@npm:^2.1.0": version: 2.1.0 resolution: "is-root@npm:2.1.0" @@ -24866,7 +26576,7 @@ __metadata: languageName: node linkType: hard -"is-shared-array-buffer@npm:^1.0.2": +"is-shared-array-buffer@npm:^1.0.1, is-shared-array-buffer@npm:^1.0.2": version: 1.0.2 resolution: "is-shared-array-buffer@npm:1.0.2" dependencies: @@ -24875,7 +26585,16 @@ __metadata: languageName: node linkType: hard -"is-ssh@npm:^1.3.0, is-ssh@npm:^1.4.0": +"is-ssh@npm:^1.3.0": + version: 1.3.1 + resolution: "is-ssh@npm:1.3.1" + dependencies: + protocols: ^1.1.0 + checksum: 769a6ce56477881b66cc3f9ef7924785d32bd904d7fff39bef8eac08251fc5cc9e02fd4b3d99f0b357312b550c2122d9202a887f5630c67cf890263f2c7f1acc + languageName: node + linkType: hard + +"is-ssh@npm:^1.4.0": version: 1.4.0 resolution: "is-ssh@npm:1.4.0" dependencies: @@ -24941,16 +26660,16 @@ __metadata: languageName: node linkType: hard -"is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.9": - version: 1.1.9 - resolution: "is-typed-array@npm:1.1.9" +"is-typed-array@npm:^1.1.3": + version: 1.1.5 + resolution: "is-typed-array@npm:1.1.5" dependencies: - available-typed-arrays: ^1.0.5 + available-typed-arrays: ^1.0.2 call-bind: ^1.0.2 - es-abstract: ^1.20.0 - for-each: ^0.3.3 - has-tostringtag: ^1.0.0 - checksum: 11910f1e58755fef43bf0074e52fa5b932bf101ec65d613e0a83d40e8e4c6e3f2ee142d624ebc7624c091d3bbe921131f8db7d36ecbbb71909f2fe310c1faa65 + es-abstract: ^1.18.0-next.2 + foreach: ^2.0.5 + has-symbols: ^1.0.1 + checksum: ba435c83dc1dc0f205c0169f7e93a082816c6b261631a55e473f6f4e18fdf76c1997b326e2e63ae6139e0f75fb47d76252fc76ce75e6b2a74aa41c39743774cb languageName: node linkType: hard @@ -24993,7 +26712,7 @@ __metadata: languageName: node linkType: hard -"is-weakref@npm:^1.0.2": +"is-weakref@npm:^1.0.1, is-weakref@npm:^1.0.2": version: 1.0.2 resolution: "is-weakref@npm:1.0.2" dependencies: @@ -25046,13 +26765,20 @@ __metadata: languageName: node linkType: hard -"isbinaryfile@npm:^4.0.10, isbinaryfile@npm:^4.0.8": +"isbinaryfile@npm:^4.0.10": version: 4.0.10 resolution: "isbinaryfile@npm:4.0.10" checksum: a6b28db7e23ac7a77d3707567cac81356ea18bd602a4f21f424f862a31d0e7ab4f250759c98a559ece35ffe4d99f0d339f1ab884ffa9795172f632ab8f88e686 languageName: node linkType: hard +"isbinaryfile@npm:^4.0.8": + version: 4.0.8 + resolution: "isbinaryfile@npm:4.0.8" + checksum: 606e3bb648d1a0dee23459d1d937bb2560e66a5281ec7c9ff50e585402d73321ac268d0f34cb7393125b3ebc4c7962d39e50a01cdb8904b52fce08b7ccd2bf9f + languageName: node + linkType: hard + "isbinaryfile@npm:^5.0.0": version: 5.0.0 resolution: "isbinaryfile@npm:5.0.0" @@ -25114,8 +26840,8 @@ __metadata: linkType: hard "isomorphic-git@npm:^1.8.0": - version: 1.21.0 - resolution: "isomorphic-git@npm:1.21.0" + version: 1.20.0 + resolution: "isomorphic-git@npm:1.20.0" dependencies: async-lock: ^1.1.0 clean-git-ref: ^2.0.1 @@ -25130,7 +26856,7 @@ __metadata: simple-get: ^4.0.1 bin: isogit: cli.cjs - checksum: afbdf98000c586fdcb96f84c054d6ada392b0d2422a7b7baad89e5f5881a79426f8555bdadeebe25202be18bb8eaee3881f8c04b6a289d04b916790bdd5dd5df + checksum: 4f5af69b02795d656c171c2347186ac0b04269db23ab4ec3fb0204cda5cb89cceaacae8eb44ee3e1870fcbc930518c63a6e82a9fc7428719e08be5c3d6d88396 languageName: node linkType: hard @@ -25159,7 +26885,14 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": +"istanbul-lib-coverage@npm:^3.0.0": + version: 3.0.0 + resolution: "istanbul-lib-coverage@npm:3.0.0" + checksum: ea57c2428858cc5d1e04c0e28b362950bbf6415e8ba1235cdd6f4c8dc3c57cb950db8b4e8a4f7e33abc240aa1eb816dba0d7285bdb8b70bda22bb2082492dbfc + languageName: node + linkType: hard + +"istanbul-lib-coverage@npm:^3.2.0": version: 3.2.0 resolution: "istanbul-lib-coverage@npm:3.2.0" checksum: a2a545033b9d56da04a8571ed05c8120bf10e9bce01cf8633a3a2b0d1d83dff4ac4fe78d6d5673c27fc29b7f21a41d75f83a36be09f82a61c367b56aa73c1ff9 @@ -25167,15 +26900,15 @@ __metadata: linkType: hard "istanbul-lib-instrument@npm:^5.0.4, istanbul-lib-instrument@npm:^5.1.0": - version: 5.2.0 - resolution: "istanbul-lib-instrument@npm:5.2.0" + version: 5.1.0 + resolution: "istanbul-lib-instrument@npm:5.1.0" dependencies: "@babel/core": ^7.12.3 "@babel/parser": ^7.14.7 "@istanbuljs/schema": ^0.1.2 istanbul-lib-coverage: ^3.2.0 semver: ^6.3.0 - checksum: 7c242ed782b6bf7b655656576afae8b6bd23dcc020e5fdc1472cca3dfb6ddb196a478385206d0df5219b9babf46ac4f21fea5d8ea9a431848b6cca6007012353 + checksum: 8b82e733c69fe9f94d2e21f3e5760c9bedb110329aa75df4bd40df95f1cac3bf38767e43f35b125cc547ceca7376b72ce7d95cc5238b7e9088345c7b589233d3 languageName: node linkType: hard @@ -25191,23 +26924,23 @@ __metadata: linkType: hard "istanbul-lib-source-maps@npm:^4.0.0": - version: 4.0.1 - resolution: "istanbul-lib-source-maps@npm:4.0.1" + version: 4.0.0 + resolution: "istanbul-lib-source-maps@npm:4.0.0" dependencies: debug: ^4.1.1 istanbul-lib-coverage: ^3.0.0 source-map: ^0.6.1 - checksum: 21ad3df45db4b81852b662b8d4161f6446cd250c1ddc70ef96a585e2e85c26ed7cd9c2a396a71533cfb981d1a645508bc9618cae431e55d01a0628e7dec62ef2 + checksum: 292bfb4083e5f8783cdf829a7686b1a377d0c6c2119d4343c8478e948b38146c4827cddc7eee9f57605acd63c291376d67e4a84163d37c5fc78ad0f27f7e2621 languageName: node linkType: hard "istanbul-reports@npm:^3.1.3": - version: 3.1.5 - resolution: "istanbul-reports@npm:3.1.5" + version: 3.1.4 + resolution: "istanbul-reports@npm:3.1.4" dependencies: html-escaper: ^2.0.0 istanbul-lib-report: ^3.0.0 - checksum: 7867228f83ed39477b188ea07e7ccb9b4f5320b6f73d1db93a0981b7414fa4ef72d3f80c4692c442f90fc250d9406e71d8d7ab65bb615cb334e6292b73192b89 + checksum: 2132983355710c522f6b26808015cab9a0ee8b9f5ae0db0d3edeff40b886dd83cb670fb123cb7b32dbe59473d7c00cdde2ba6136bc0acdb20a865fccea64dfe1 languageName: node linkType: hard @@ -25371,18 +27104,6 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^29.0.3": - version: 29.0.3 - resolution: "jest-diff@npm:29.0.3" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^29.0.0 - jest-get-type: ^29.0.0 - pretty-format: ^29.0.3 - checksum: 1e12b63ea6254ea25146b6fb19f8b2d1ba334e1b8b635a007767c17dc272728afbdf41ccccce26c2a40cd9c7f3176bcfed53be2572927a3fc7b1ee5fff43eb26 - languageName: node - linkType: hard - "jest-docblock@npm:^27.5.1": version: 27.5.1 resolution: "jest-docblock@npm:27.5.1" @@ -25441,13 +27162,6 @@ __metadata: languageName: node linkType: hard -"jest-get-type@npm:^29.0.0": - version: 29.0.0 - resolution: "jest-get-type@npm:29.0.0" - checksum: 9abdd11d69788963a92fb9d813a7b887654ecc8f3a3c8bf83166d33aaf4d57ed380e74ab8ef106f57565dd235446ca6ebc607679f0c516c4633e6d09f0540a2b - languageName: node - linkType: hard - "jest-haste-map@npm:^27.5.1": version: 27.5.1 resolution: "jest-haste-map@npm:27.5.1" @@ -25519,18 +27233,6 @@ __metadata: languageName: node linkType: hard -"jest-matcher-utils@npm:^29.0.3": - version: 29.0.3 - resolution: "jest-matcher-utils@npm:29.0.3" - dependencies: - chalk: ^4.0.0 - jest-diff: ^29.0.3 - jest-get-type: ^29.0.0 - pretty-format: ^29.0.3 - checksum: e39ab74a046ada8fbd75a275bfe54bd5f8ec14a98f77e1162a49d4e1ea82e68c5a4575691767cea0f60dd0b74cb481275012bf3467cd91fdb014311c670b8a83 - languageName: node - linkType: hard - "jest-message-util@npm:^27.5.1": version: 27.5.1 resolution: "jest-message-util@npm:27.5.1" @@ -25548,23 +27250,6 @@ __metadata: languageName: node linkType: hard -"jest-message-util@npm:^29.0.3": - version: 29.0.3 - resolution: "jest-message-util@npm:29.0.3" - dependencies: - "@babel/code-frame": ^7.12.13 - "@jest/types": ^29.0.3 - "@types/stack-utils": ^2.0.0 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - micromatch: ^4.0.4 - pretty-format: ^29.0.3 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: 04bee1fee10106f4eb875092e5d06187930d44050a4f99e7aa1d1e42768b18d6d9e5439623d9242202942deb8a1eec08359e0cd19a43ae505d96aeaf243a3f8d - languageName: node - linkType: hard - "jest-mock@npm:^27.5.1": version: 27.5.1 resolution: "jest-mock@npm:27.5.1" @@ -25745,20 +27430,6 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^29.0.3": - version: 29.0.3 - resolution: "jest-util@npm:29.0.3" - dependencies: - "@jest/types": ^29.0.3 - "@types/node": "*" - chalk: ^4.0.0 - ci-info: ^3.2.0 - graceful-fs: ^4.2.9 - picomatch: ^2.2.3 - checksum: 39c31e75ba5bcb4c3ccdf0895f9fdbb83f839c432e7c6639a688beb414d681b5d50282da017c723ea1f2a7033e74a4938fd33dcff231c3e90f903173919991d5 - languageName: node - linkType: hard - "jest-validate@npm:^27.5.1": version: 27.5.1 resolution: "jest-validate@npm:27.5.1" @@ -25809,13 +27480,13 @@ __metadata: linkType: hard "jest-worker@npm:^28.0.2": - version: 28.1.3 - resolution: "jest-worker@npm:28.1.3" + version: 28.1.1 + resolution: "jest-worker@npm:28.1.1" dependencies: "@types/node": "*" merge-stream: ^2.0.0 supports-color: ^8.0.0 - checksum: e921c9a1b8f0909da9ea07dbf3592f95b653aef3a8bb0cbcd20fc7f9a795a1304adecac31eecb308992c167e8d7e75c522061fec38a5928ace0f9571c90169ca + checksum: 28519c43b4007e60a3756d27f1e7884192ee9161b6a9587383a64b6535f820cc4868e351a67775e0feada41465f48ccf323a8db34ae87e15a512ddac5d1424b2 languageName: node linkType: hard @@ -25873,19 +27544,26 @@ __metadata: linkType: hard "joi@npm:^17.4.0": - version: 17.6.0 - resolution: "joi@npm:17.6.0" + version: 17.4.2 + resolution: "joi@npm:17.4.2" dependencies: "@hapi/hoek": ^9.0.0 "@hapi/topo": ^5.0.0 - "@sideway/address": ^4.1.3 + "@sideway/address": ^4.1.0 "@sideway/formula": ^3.0.0 "@sideway/pinpoint": ^2.0.0 - checksum: eaf62f6c02f2edb1042f1ab04fc23a5918a2cb8f54bec84c6e1033624d8a462c10ae9518af55a3ba84f1793960450d58094eda308e7ef93c17edd4e3c8ef31d5 + checksum: 977ada1f9d38c2762689b61cec1272176968ccea731a16b71713ebaa067f140460e0b6f7eccff6fc12206fddce22e7f4ed74724651bc1b24b1e26d43280633d0 languageName: node linkType: hard -"jose@npm:^4.1.4, jose@npm:^4.6.0": +"jose@npm:^4.1.4": + version: 4.5.0 + resolution: "jose@npm:4.5.0" + checksum: 51142150a9f571ca318842d34ac0daec49fb70bfb6034c68fd46d8c804a8325065876067202310c8ff3cbfc5ca8e44d4712467b4da0d3cadf1e47c96989ca4ca + languageName: node + linkType: hard + +"jose@npm:^4.6.0": version: 4.9.3 resolution: "jose@npm:4.9.3" checksum: 95865830768dcf82774d19e92dc854c5bc9dc5d9c9626a65a2974272e3aca5d2f56678611943f85802431d2d6d6f8bff9548b7cdb7578e6fe61529bd9c82e1d3 @@ -25893,9 +27571,9 @@ __metadata: linkType: hard "joycon@npm:^3.0.1": - version: 3.1.1 - resolution: "joycon@npm:3.1.1" - checksum: 8003c9c3fc79c5c7602b1c7e9f7a2df2e9916f046b0dbad862aa589be78c15734d11beb9fe846f5e06138df22cb2ad29961b6a986ba81c4920ce2b15a7f11067 + version: 3.1.0 + resolution: "joycon@npm:3.1.0" + checksum: f21f17b46142f14c92cc99f5a157ebf224717a284c45e870452be5c5ebc3bb7e07e66692fc9da3a40f6b08106ac986dc9eae2f77977db62416fe47a99b0de0ac languageName: node linkType: hard @@ -25966,7 +27644,7 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.0, js-yaml@npm:^3.13.1, js-yaml@npm:^3.14.0, js-yaml@npm:^3.6.1, js-yaml@npm:^3.8.3": +"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.0, js-yaml@npm:^3.13.1, js-yaml@npm:^3.14.0, js-yaml@npm:^3.14.1, js-yaml@npm:^3.6.1, js-yaml@npm:^3.8.3": version: 3.14.1 resolution: "js-yaml@npm:3.14.1" dependencies: @@ -26150,7 +27828,7 @@ __metadata: languageName: node linkType: hard -"json-buffer@npm:3.0.1, json-buffer@npm:^3.0.1": +"json-buffer@npm:3.0.1, json-buffer@npm:^3.0.1, json-buffer@npm:~3.0.1": version: 3.0.1 resolution: "json-buffer@npm:3.0.1" checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 @@ -26336,9 +28014,9 @@ __metadata: linkType: hard "jsonc-parser@npm:^3.0.0": - version: 3.2.0 - resolution: "jsonc-parser@npm:3.2.0" - checksum: 946dd9a5f326b745aa326d48a7257e3f4a4b62c5e98ec8e49fa2bdd8d96cef7e6febf1399f5c7016114fd1f68a1c62c6138826d5d90bc650448e3cf0951c53c7 + version: 3.0.0 + resolution: "jsonc-parser@npm:3.0.0" + checksum: 1df2326f1f9688de30c70ff19c5b2a83ba3b89a1036160da79821d1361090775e9db502dc57a67c11b56e1186fc1ed70b887f25c5febf9a3ec4f91435836c99d languageName: node linkType: hard @@ -26396,9 +28074,9 @@ __metadata: linkType: hard "jsonpointer@npm:^5.0.0": - version: 5.0.1 - resolution: "jsonpointer@npm:5.0.1" - checksum: 0b40f712900ad0c846681ea2db23b6684b9d5eedf55807b4708c656f5894b63507d0e28ae10aa1bddbea551241035afe62b6df0800fc94c2e2806a7f3adecd7c + version: 5.0.0 + resolution: "jsonpointer@npm:5.0.0" + checksum: c7ec0b6bb596b81de687bc12945586bbcdc80dfb54919656d2690d76334f796a936270067ee9f1b5bbc2d9ecc551afb366ac35e6685aa61f07b5b68d1e5e857d languageName: node linkType: hard @@ -26452,88 +28130,89 @@ __metadata: linkType: hard "jss-plugin-camel-case@npm:^10.5.1": - version: 10.9.2 - resolution: "jss-plugin-camel-case@npm:10.9.2" + version: 10.6.0 + resolution: "jss-plugin-camel-case@npm:10.6.0" dependencies: "@babel/runtime": ^7.3.1 hyphenate-style-name: ^1.0.3 - jss: 10.9.2 - checksum: 5fa617b23ce9718244691c59ace6a0d1271dbcb4430ce3e13b851ee1879c1db8ecab7e941c33802bea763a0f0e2b609d004b8a975b2063f213cdd639cdd384d2 + jss: 10.6.0 + checksum: 75c23826deef63c3603cfb47331d1eaf9feeafd097bd115a076f2ee9fb696855d3f18b3f41455a046120fddf0ea11985259c1b8b8a37b3556f4de1a1c83affd5 languageName: node linkType: hard "jss-plugin-default-unit@npm:^10.5.1": - version: 10.9.2 - resolution: "jss-plugin-default-unit@npm:10.9.2" + version: 10.6.0 + resolution: "jss-plugin-default-unit@npm:10.6.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.9.2 - checksum: 48d8d836d36dd15513d98de11fba6be373ac29e6fd5702eb2edd143c815fb9e2f9969b2af6b1b964e9b8a052828690887042f6bcb34836836d5c359e52702d0f + jss: 10.6.0 + checksum: 7ae36fadf4f206a16e49c40806ef92ba1f0e60395488ab8ad4df96796b408013b38ea5ed975155ecd7833a42a96c8d5cb1e90aef011279816633e60f807ec330 languageName: node linkType: hard "jss-plugin-global@npm:^10.5.1": - version: 10.9.2 - resolution: "jss-plugin-global@npm:10.9.2" + version: 10.6.0 + resolution: "jss-plugin-global@npm:10.6.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.9.2 - checksum: 9b29b0c1f169d5a1033890875df072d76364a902d0f6470f448544669a388612a9a4d51844fb2bcb6d25a1c43d67c1637f11a162c2cdd9f4b6b0a8f9c94f6090 + jss: 10.6.0 + checksum: 7aab58408c77071c571dd2c2132edad8d40b683513a8de534f0ec7f63926fd9d9fcf6bdda82103eb541452a723b992f061720f8e5cf2014acb7f6bbbde111f56 languageName: node linkType: hard "jss-plugin-nested@npm:^10.5.1": - version: 10.9.2 - resolution: "jss-plugin-nested@npm:10.9.2" + version: 10.6.0 + resolution: "jss-plugin-nested@npm:10.6.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.9.2 + jss: 10.6.0 tiny-warning: ^1.0.2 - checksum: ee08df07f3d553931b48037674842a8314bbc7857cc954a52f962a516bfc4b2d4e9871578b06b8fa3981edf5a927cea00021fd368d4ce315870065b7647f7b57 + checksum: 38095127e8b5ddb0a33ccaf61a4d89dc1b0f78e6d06d079a47a14bca4aed4e885f1957d83f11c5da08b4249b2c629e8bc62b2996f1674ca1302575a7b2b11171 languageName: node linkType: hard "jss-plugin-props-sort@npm:^10.5.1": - version: 10.9.2 - resolution: "jss-plugin-props-sort@npm:10.9.2" + version: 10.6.0 + resolution: "jss-plugin-props-sort@npm:10.6.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.9.2 - checksum: 70bd181a458a6078f19ad4d7350570c78d26b9aabc25a1fbde673839edcc19825af7b636861b208a38aa17e551e68d0ea38599480716b4aec08e353bbe737222 + jss: 10.6.0 + checksum: 2917ff301e667f75efa15df865a860a50d4319d415d1169c213e66b464edc2b37b6f428be2d974ccdde7c8d61c50123f18e788143a96eacc2a1c42ad250ae375 languageName: node linkType: hard "jss-plugin-rule-value-function@npm:^10.5.1": - version: 10.9.2 - resolution: "jss-plugin-rule-value-function@npm:10.9.2" + version: 10.6.0 + resolution: "jss-plugin-rule-value-function@npm:10.6.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.9.2 + jss: 10.6.0 tiny-warning: ^1.0.2 - checksum: b1a03209d0249f13ea6de766d3ee14c1769cd1f67d8c543c7d1ce6178c32cf15507c021ecb3e3b7585a8a7a2425dddbe0bdae02f4135c4598725a4152bebfc99 + checksum: 709e1ce0afdc39a52cb78e371fef626f933e99992790b15771d85056176bdf69365d62cfed6ce95434752cc1a1e7e05a6f2548e4cd5999808d50a28174315be3 languageName: node linkType: hard "jss-plugin-vendor-prefixer@npm:^10.5.1": - version: 10.9.2 - resolution: "jss-plugin-vendor-prefixer@npm:10.9.2" + version: 10.6.0 + resolution: "jss-plugin-vendor-prefixer@npm:10.6.0" dependencies: "@babel/runtime": ^7.3.1 css-vendor: ^2.0.8 - jss: 10.9.2 - checksum: a5c352a500fea82e8a782a090cc9815f6331259f1a331158ed74ed77c750fb45750f5ae95f07d27922742830b45d4c3592cfaab194b3ba4a50591acbdeab04d8 + jss: 10.6.0 + checksum: 9db048022ee2fb79a223a9f1be5976e131715057e3c0200cfcead9b9f8625023942534afa261e3c967cee6ad716bfd7d4a2f356556178f60f4eddcf83bcd8856 languageName: node linkType: hard -"jss@npm:10.9.2, jss@npm:^10.5.1": - version: 10.9.2 - resolution: "jss@npm:10.9.2" +"jss@npm:10.6.0, jss@npm:^10.5.1": + version: 10.6.0 + resolution: "jss@npm:10.6.0" dependencies: "@babel/runtime": ^7.3.1 csstype: ^3.0.2 + indefinite-observable: ^2.0.1 is-in-browser: ^1.1.3 tiny-warning: ^1.0.2 - checksum: 7ae5cd2f8602bf197ec90251d774b9f10d55eb2db0854ac78dc7fb6983828c202e8eb0d5c8c59c73b2f64718ebd33d6063afa799d625a995986a22dc1cc27230 + checksum: 529edd871ddf059beef55ee0f974ad8436fbcf050d6538e6d2d7edab53ce2c09983d2f863e42a1473dd0e42a0447e9912bce6706bb0e539226d92cdaad128d46 languageName: node linkType: hard @@ -26549,27 +28228,37 @@ __metadata: languageName: node linkType: hard -"jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.2": - version: 3.3.3 - resolution: "jsx-ast-utils@npm:3.3.3" +"jsx-ast-utils@npm:^2.4.1 || ^3.0.0": + version: 3.2.0 + resolution: "jsx-ast-utils@npm:3.2.0" dependencies: - array-includes: ^3.1.5 - object.assign: ^4.1.3 - checksum: a2ed78cac49a0f0c4be8b1eafe3c5257a1411341d8e7f1ac740debae003de04e5f6372bfcfbd9d082e954ffd99aac85bcda85b7c6bc11609992483f4cdc0f745 + array-includes: ^3.1.2 + object.assign: ^4.1.2 + checksum: 9f695c480212868557c5e3cd01082857e101768dc75cb904335d1a805e972d6203baa58ae0b786e7afeab1e8fdb98242fccf22dbc1734595a65845172743877c languageName: node linkType: hard -"just-diff-apply@npm:^5.2.0": - version: 5.4.1 - resolution: "just-diff-apply@npm:5.4.1" - checksum: e324ccfdb5df174e3ec30751f6b7e8d84a75a1c559c7b294ccba79c94390b424cc84714cb2dc72cef41e0ba0cf5ecce33e5d6dedd14f5700285de38892d81cce +"jsx-ast-utils@npm:^3.3.2": + version: 3.3.2 + resolution: "jsx-ast-utils@npm:3.3.2" + dependencies: + array-includes: ^3.1.5 + object.assign: ^4.1.2 + checksum: 61d4596d44480afc03ae0a7ebb272aa6603dc4c3645805dea0fc8d9f0693542cd0959f3ba7c0c9b16c13dd5a900c7c4310108bada273132a8355efe3fed22064 + languageName: node + linkType: hard + +"just-diff-apply@npm:^4.0.1": + version: 4.0.1 + resolution: "just-diff-apply@npm:4.0.1" + checksum: fdb58c0c8da766943fb316158d823fe485058d6b31ec6c51f99076df76363fa1ca35d79fb23f53184bf5b7443ae470fe5f087b4a504e913a8f96474963907e2e languageName: node linkType: hard "just-diff@npm:^5.0.1": - version: 5.1.1 - resolution: "just-diff@npm:5.1.1" - checksum: a6dfd778658c56c0144a22a435dd0a1cae890c4c7a973dbc1c16be0b092cfb5c8ac2d42d608d9713c3fc83683722ecb1585f67c30205f2836bfbe61022bd6999 + version: 5.0.1 + resolution: "just-diff@npm:5.0.1" + checksum: efbdb652987ca109839dba385904ea152cc73ef4c165eebb4be0af261734cf91387e529fcd52aea5ba9567b4ef76c584ee6254ccf0030dc5d0ccdab3b890a085 languageName: node linkType: hard @@ -26630,28 +28319,29 @@ __metadata: linkType: hard "kafkajs@npm:^2.0.0": - version: 2.2.0 - resolution: "kafkajs@npm:2.2.0" - checksum: a7fc1e7bb96e7574f143141e58a198a7e850f3623625ab34e05ed91d7cce04ee6dcc89c6636bc9cf6d3241badf881e38ec87f04a5d39f897291ca7f453b6e163 + version: 2.1.0 + resolution: "kafkajs@npm:2.1.0" + checksum: b751b06f8005ac9ff192d98306f59c6ae018ce09acc0f959dfbfd4fbb4731fe7dfd42de0c3592d45a6b66b6d5caa40926673a02eb764b701c2953ea203ced60c languageName: node linkType: hard "keyv-memcache@npm:^1.2.5": - version: 1.3.3 - resolution: "keyv-memcache@npm:1.3.3" + version: 1.2.9 + resolution: "keyv-memcache@npm:1.2.9" dependencies: json-buffer: ^3.0.1 memjs: ^1.3.0 - checksum: ddef602c027a325fc1d18917788799e79cf73f46cbbfefeeda893ca585531544aa4b50de6601c1c5e0427a94bb52ad64e9144c919105b26aac0b173ebcdabc28 + checksum: d5134c69be50407498b425d4b8a45204d3a69cfcc2572dd089804f95f4fd9516e7bc6e1fce0e90d036a615e79d72fe8f0f9b17c30dbc66ceabf77f891ac4bbcf languageName: node linkType: hard "keyv@npm:^4.0.0, keyv@npm:^4.0.3": - version: 4.5.0 - resolution: "keyv@npm:4.5.0" + version: 4.3.2 + resolution: "keyv@npm:4.3.2" dependencies: + compress-brotli: ^1.3.8 json-buffer: 3.0.1 - checksum: d294873cf88ec8f691e5edeb7b4b884f886c5f021a01902a0e243c362449db2b55419d7fb7187d059add747b7398321e39e44d391b65f94935174ce13452714d + checksum: 237952f5faa2ed08da36677d7a3faae48b7e3c305264698cbf4480443f293a2f0c6c63c1d05f5cd4a842ee864dbb395745e6636fecd07489565776a22de7b8d6 languageName: node linkType: hard @@ -26703,7 +28393,14 @@ __metadata: languageName: node linkType: hard -"kleur@npm:^4.0.3, kleur@npm:^4.1.4": +"kleur@npm:^4.0.3": + version: 4.1.4 + resolution: "kleur@npm:4.1.4" + checksum: 7f6db36e378045dec14acd3cbf0b1e59130c09e984ee8b8ce56dd2d2257cfff90389c1e8f8b19bd09dd5d241080566a814b4ccd99fdcef91f59ef93ec33c8a44 + languageName: node + linkType: hard + +"kleur@npm:^4.1.4": version: 4.1.5 resolution: "kleur@npm:4.1.5" checksum: 1dc476e32741acf0b1b5b0627ffd0d722e342c1b0da14de3e8ae97821327ca08f9fb944542fb3c126d90ac5f27f9d804edbe7c585bf7d12ef495d115e0f22c12 @@ -26764,9 +28461,9 @@ __metadata: linkType: hard "language-subtag-registry@npm:~0.3.2": - version: 0.3.22 - resolution: "language-subtag-registry@npm:0.3.22" - checksum: 8ab70a7e0e055fe977ac16ea4c261faec7205ac43db5e806f72e5b59606939a3b972c4bd1e10e323b35d6ffa97c3e1c4c99f6553069dad2dfdd22020fa3eb56a + version: 0.3.21 + resolution: "language-subtag-registry@npm:0.3.21" + checksum: 5f794525a5bfcefeea155a681af1c03365b60e115b688952a53c6e0b9532b09163f57f1fcb69d6150e0e805ec0350644a4cb35da98f4902562915be9f89572a1 languageName: node linkType: hard @@ -26787,11 +28484,11 @@ __metadata: linkType: hard "lazystream@npm:^1.0.0": - version: 1.0.1 - resolution: "lazystream@npm:1.0.1" + version: 1.0.0 + resolution: "lazystream@npm:1.0.0" dependencies: readable-stream: ^2.0.5 - checksum: 822c54c6b87701a6491c70d4fabc4cafcf0f87d6b656af168ee7bb3c45de9128a801cb612e6eeeefc64d298a7524a698dd49b13b0121ae50c2ae305f0dcc5310 + checksum: 6cb9352a697bad74471671b299997edc736b400bb405dc409acfc9ffe584bb6f86898c4ace86b2f145ae32fe42ef60bd68749acb62c2ff3fa6bded721193f79c languageName: node linkType: hard @@ -26814,8 +28511,8 @@ __metadata: linkType: hard "ldapjs@npm:^2.2.0": - version: 2.3.3 - resolution: "ldapjs@npm:2.3.3" + version: 2.3.2 + resolution: "ldapjs@npm:2.3.2" dependencies: abstract-logging: ^2.0.0 asn1: ^0.2.4 @@ -26825,7 +28522,7 @@ __metadata: once: ^1.4.0 vasync: ^2.2.0 verror: ^1.8.1 - checksum: 791cf22812805db3888dfc8aa8e4db8337e67387b318522c9965d40e678ecdb64950a6ea5930083590ec3377038620a3e63f90e985173ae6aca40e7f485290e0 + checksum: 4eb7b18839d8fe1d8acc0ba5d2aa71aefcb25ecb6f4f9582299d73faf546984326590c44366f8b148d3a4276707006b1aaffffdc548b3c4ca753e720403da4a5 languageName: node linkType: hard @@ -26921,27 +28618,27 @@ __metadata: linkType: hard "libnpmaccess@npm:^4.0.1": - version: 4.0.3 - resolution: "libnpmaccess@npm:4.0.3" + version: 4.0.1 + resolution: "libnpmaccess@npm:4.0.1" dependencies: aproba: ^2.0.0 minipass: ^3.1.1 - npm-package-arg: ^8.1.2 - npm-registry-fetch: ^11.0.0 - checksum: cc6b9fa0abadb6945adbd00dcf1c22267ed0b4d35e0f6ddc50b9fe7a60aa596613110367502e3cb483f93fbe9aa7df4c575ca00b7b3d9eb429fa2aeaad5783aa + npm-package-arg: ^8.0.0 + npm-registry-fetch: ^9.0.0 + checksum: ca89f579311b2d348236107566f9c9a9e84678428fc267c3ed284ab99b4179ae560864fee36b676726c906e9dd83725d2e91b334d0c4cb7b2d3a52827fa75dd9 languageName: node linkType: hard "libnpmpublish@npm:^4.0.0": - version: 4.0.2 - resolution: "libnpmpublish@npm:4.0.2" + version: 4.0.0 + resolution: "libnpmpublish@npm:4.0.0" dependencies: - normalize-package-data: ^3.0.2 - npm-package-arg: ^8.1.2 - npm-registry-fetch: ^11.0.0 + normalize-package-data: ^3.0.0 + npm-package-arg: ^8.1.0 + npm-registry-fetch: ^9.0.0 semver: ^7.1.3 - ssri: ^8.0.1 - checksum: 5aa83352bb70bc9bb082107678d1e42f8f80ef1c354b37849a40fa0ab9c9e715aeba803811ee2f0da99605054aead41450e040b4d37cf543237594e1d1b97173 + ssri: ^8.0.0 + checksum: 382cb15b19053b7097cdd6fe36e1c760cbb4906e5a3fac02f8909e4f2792e66f4652a655cd74c6744ad412a000a769d40fee23a58e8c38299535c0d76a1ff3a9 languageName: node linkType: hard @@ -26952,10 +28649,10 @@ __metadata: languageName: node linkType: hard -"lilconfig@npm:^2.0.3, lilconfig@npm:^2.0.5": - version: 2.0.6 - resolution: "lilconfig@npm:2.0.6" - checksum: 40a3cd72f103b1be5975f2ac1850810b61d4053e20ab09be8d3aeddfe042187e1ba70b4651a7e70f95efa1642e7dc8b2ae395b317b7d7753b241b43cef7c0f7d +"lilconfig@npm:^2.0.3": + version: 2.0.4 + resolution: "lilconfig@npm:2.0.4" + checksum: 02ae530aa49218d782eb79e92c600ea5220828987f85aa3403fa512cadc7efe38c0ac7d0cd2edf600ad3fae1f6c1752f5b4bb78c0d9950435b044d53d507c9e1 languageName: node linkType: hard @@ -26967,11 +28664,11 @@ __metadata: linkType: hard "linkify-it@npm:^3.0.1": - version: 3.0.3 - resolution: "linkify-it@npm:3.0.3" + version: 3.0.2 + resolution: "linkify-it@npm:3.0.2" dependencies: uc.micro: ^1.0.1 - checksum: 31367a4bb70c5bbc9703246236b504b0a8e049bcd4e0de4291fa50f0ebdebf235b5eb54db6493cb0b1319357c6eeafc4324c9f4aa34b0b943d9f2e11a1268fbc + checksum: 08e14854ec3c29e3578311b1cd95e469952a27f191633189a23890628939fc45c6d84fa4495abb9f7f06e60f73a31b8881d834214864d46db914a09ffc7889ae languageName: node linkType: hard @@ -27106,9 +28803,9 @@ __metadata: linkType: hard "loader-runner@npm:^4.2.0": - version: 4.3.0 - resolution: "loader-runner@npm:4.3.0" - checksum: a90e00dee9a16be118ea43fec3192d0b491fe03a32ed48a4132eb61d498f5536a03a1315531c19d284392a8726a4ecad71d82044c28d7f22ef62e029bf761569 + version: 4.2.0 + resolution: "loader-runner@npm:4.2.0" + checksum: e61aea8b6904b8af53d9de6f0484da86c462c0001f4511bedc837cec63deb9475cea813db62f702cd7930420ccb0e75c78112270ca5c8b61b374294f53c0cb3a languageName: node linkType: hard @@ -27124,13 +28821,13 @@ __metadata: linkType: hard "loader-utils@npm:^2.0.0": - version: 2.0.2 - resolution: "loader-utils@npm:2.0.2" + version: 2.0.0 + resolution: "loader-utils@npm:2.0.0" dependencies: big.js: ^5.2.2 emojis-list: ^3.0.0 json5: ^2.1.2 - checksum: 9078d1ed47cadc57f4c6ddbdb2add324ee7da544cea41de3b7f1128e8108fcd41cd3443a85b7ee8d7d8ac439148aa221922774efe4cf87506d4fb054d5889303 + checksum: 6856423131b50b6f5f259da36f498cfd7fc3c3f8bb17777cf87fdd9159e797d4ba4288d9a96415fd8da62c2906960e88f74711dee72d03a9003bddcd0d364a51 languageName: node linkType: hard @@ -27514,9 +29211,9 @@ __metadata: linkType: hard "longest-streak@npm:^3.0.0": - version: 3.0.1 - resolution: "longest-streak@npm:3.0.1" - checksum: 3b59c4c04ce3c70f137e339c10d574026fa3a711c45dc0e69a63a2c0ac981e57f837e1d5b64b991eee5234c4fa46fa10886a20626fb739ed3b04b77bcf6d14a8 + version: 3.0.0 + resolution: "longest-streak@npm:3.0.0" + checksum: 02de69d43c25dc0bd7f617052201ec0746f6060acefd1dd10e579d89ec996177702c92e3b526f0c88a1823988c62cd537b17cac65693f49d8af076f1ac016364 languageName: node linkType: hard @@ -27595,9 +29292,16 @@ __metadata: linkType: hard "lru-cache@npm:^7.10.1, lru-cache@npm:^7.4.4, lru-cache@npm:^7.5.1, lru-cache@npm:^7.7.1": - version: 7.14.0 - resolution: "lru-cache@npm:7.14.0" - checksum: efdd329f2c1bb790b71d497c6c59272e6bc2d7dd060ba55fc136becd3dd31fc8346edb446275504d94cb60d3c8385dbf5267b79b23789e409b2bdf302d13f0d7 + version: 7.10.1 + resolution: "lru-cache@npm:7.10.1" + checksum: e8b190d71ed0fcd7b29c71a3e9b01f851c92d1ef8865ff06b5581ca991db1e5e006920ed4da8b56da1910664ed51abfd76c46fb55e82ac252ff6c970ff910d72 + languageName: node + linkType: hard + +"lru-cache@npm:^7.3.1": + version: 7.3.1 + resolution: "lru-cache@npm:7.3.1" + checksum: 34bb50c015ffc29fd83545e912f28cea6e03fbf41c497fa220c4f131b990f9ddf95babac98745b416cbc6c0d835254d61668d09b8a4ecb476934546afc9e51bd languageName: node linkType: hard @@ -27622,10 +29326,10 @@ __metadata: languageName: node linkType: hard -"luxon@npm:^3.0.0, luxon@npm:^3.0.3": - version: 3.0.3 - resolution: "luxon@npm:3.0.3" - checksum: 67d143f102f520761c4202086579a5cf30b230ea299da27cacb31e9f9d372cadef90f14cbe7e2621b70825b267fe00128b8176ed8b7172b48f77a403a662d5aa +"luxon@npm:^3.0.0": + version: 3.0.1 + resolution: "luxon@npm:3.0.1" + checksum: aa966eb919bf95b1bd819cda784d1f6f66e3fb65bd9ec7bf68b6a978eeb4e3e14f7e2275021b473f93b15b6b7ba2e5a30471e53add3929a7e695fcfd6dd40ec8 languageName: node linkType: hard @@ -27639,20 +29343,20 @@ __metadata: linkType: hard "magic-string@npm:^0.25.7": - version: 0.25.9 - resolution: "magic-string@npm:0.25.9" + version: 0.25.7 + resolution: "magic-string@npm:0.25.7" dependencies: - sourcemap-codec: ^1.4.8 - checksum: 9a0e55a15c7303fc360f9572a71cffba1f61451bc92c5602b1206c9d17f492403bf96f946dfce7483e66822d6b74607262e24392e87b0ac27b786e69a40e9b1a + sourcemap-codec: ^1.4.4 + checksum: 727a1fb70f9610304fe384f1df0251eb7d1d9dd779c07ef1225690361b71b216f26f5d934bfb11c919b5b0e7ba50f6240c823a6f2e44cfd33d4a07d7747ca829 languageName: node linkType: hard "magic-string@npm:^0.26.1": - version: 0.26.3 - resolution: "magic-string@npm:0.26.3" + version: 0.26.1 + resolution: "magic-string@npm:0.26.1" dependencies: sourcemap-codec: ^1.4.8 - checksum: e72c9b3d90ccbde088acc5937109f73fa4be8b6a2c2ea9bf9c3c01974f1ebf09842259a74ff2ba4081008a7d49941d883cfef8c460e6c33a6eb564b58482b750 + checksum: 23f21f5734346ddfbabd7b9834e3ecda3521e3e1db81166c1513b45b729489bbed1eafa8cd052c7db7fdc7c68ebc5c03bc00dd5a23697edda15dbecaf8c98397 languageName: node linkType: hard @@ -27682,7 +29386,31 @@ __metadata: languageName: node linkType: hard -"make-fetch-happen@npm:^10.0.1, make-fetch-happen@npm:^10.0.3, make-fetch-happen@npm:^10.0.6": +"make-fetch-happen@npm:^10.0.1": + version: 10.0.2 + resolution: "make-fetch-happen@npm:10.0.2" + dependencies: + agentkeepalive: ^4.2.0 + cacache: ^15.3.0 + http-cache-semantics: ^4.1.0 + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.0 + is-lambda: ^1.0.1 + lru-cache: ^7.3.1 + minipass: ^3.1.6 + minipass-collect: ^1.0.2 + minipass-fetch: ^1.4.1 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^0.6.3 + promise-retry: ^2.0.1 + socks-proxy-agent: ^6.1.1 + ssri: ^8.0.1 + checksum: 5a620f84ab9e28673f70b0640b15133cb329ca4dbeec17e24b5029f07b134c52d96ebac150cab99979c48c5e6e99056978ed0321e4ce1e22a4d4d6fc7148c2fd + languageName: node + linkType: hard + +"make-fetch-happen@npm:^10.0.3": version: 10.2.1 resolution: "make-fetch-happen@npm:10.2.1" dependencies: @@ -27706,6 +29434,30 @@ __metadata: languageName: node linkType: hard +"make-fetch-happen@npm:^10.0.6": + version: 10.1.7 + resolution: "make-fetch-happen@npm:10.1.7" + dependencies: + agentkeepalive: ^4.2.1 + cacache: ^16.1.0 + http-cache-semantics: ^4.1.0 + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.0 + is-lambda: ^1.0.1 + lru-cache: ^7.7.1 + minipass: ^3.1.6 + minipass-collect: ^1.0.2 + minipass-fetch: ^2.0.3 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^0.6.3 + promise-retry: ^2.0.1 + socks-proxy-agent: ^7.0.0 + ssri: ^9.0.0 + checksum: 2b7301256e18a2f825c1c3cad14e11492428531ecdea04d846dc12c2d69658d65832746ce965e67c7f98b0d0506115674cf43676c3322709278620bfc886cf4a + languageName: node + linkType: hard + "make-fetch-happen@npm:^8.0.9": version: 8.0.14 resolution: "make-fetch-happen@npm:8.0.14" @@ -27729,7 +29481,7 @@ __metadata: languageName: node linkType: hard -"make-fetch-happen@npm:^9.0.1, make-fetch-happen@npm:^9.1.0": +"make-fetch-happen@npm:^9.1.0": version: 9.1.0 resolution: "make-fetch-happen@npm:9.1.0" dependencies: @@ -27753,12 +29505,12 @@ __metadata: languageName: node linkType: hard -"makeerror@npm:1.0.12": - version: 1.0.12 - resolution: "makeerror@npm:1.0.12" +"makeerror@npm:1.0.x": + version: 1.0.11 + resolution: "makeerror@npm:1.0.11" dependencies: - tmpl: 1.0.5 - checksum: b38a025a12c8146d6eeea5a7f2bf27d51d8ad6064da8ca9405fcf7bf9b54acd43e3b30ddd7abb9b1bfa4ddb266019133313482570ddb207de568f71ecfcf6060 + tmpl: 1.0.x + checksum: 9a62ec2d9648c5329fdc4bc7d779a7305f32b1e55422a4f14244bc890bb43287fe013eb8d965e92a0cf4c443f3e59265b1fc3125eaedb0c2361e28b1a8de565d languageName: node linkType: hard @@ -27800,12 +29552,12 @@ __metadata: linkType: hard "markdown-it-anchor@npm:^8.4.1": - version: 8.6.5 - resolution: "markdown-it-anchor@npm:8.6.5" + version: 8.6.4 + resolution: "markdown-it-anchor@npm:8.6.4" peerDependencies: "@types/markdown-it": "*" markdown-it: "*" - checksum: 9a466279e52e3c04d67f1e706f2c14df9340e64ddac6eaad22ceaeca777e381103caa942464003e98765a7555bd1ccb5055b624565cb4522a7071dce6ae93460 + checksum: bde310d0202450a228662921df9d9c2e95b3c5762512e8eed1d472fcc812fb20e6b4e98480cda88c8b56b0baf34ac70d6bf8404309c5a2321ebe62da43cd6fe6 languageName: node linkType: hard @@ -27825,9 +29577,9 @@ __metadata: linkType: hard "markdown-table@npm:^3.0.0": - version: 3.0.2 - resolution: "markdown-table@npm:3.0.2" - checksum: 7bd9eb54e7ac15165f79730ac6357b8194294552f727bcb34e29f3f1b72823c1220cb61153ebf0962c8faac4d25e49c62e8e9471cd6352a67cdca99928ecade1 + version: 3.0.1 + resolution: "markdown-table@npm:3.0.1" + checksum: 5376078ab652ba68cf855b33d338b3472d28b9f8c254dc0530261f55490261e861742a8e6625239cbbed08f899cbf0de7d2d1d5de48d3e7c6afd5f0876730227 languageName: node linkType: hard @@ -27879,9 +29631,9 @@ __metadata: linkType: hard "math-expression-evaluator@npm:^1.2.14": - version: 1.4.0 - resolution: "math-expression-evaluator@npm:1.4.0" - checksum: 451c7b734ccb02759980e03f10c63fb3888b6af0253582ae38e8ca7ef037e15b9b2b82ef3476e79ed257694e8eacc9156b44379d3153de8e6c071a4664f70f93 + version: 1.2.22 + resolution: "math-expression-evaluator@npm:1.2.22" + checksum: 97b46e3311025699209d5178ea197e4df8286ac378075f105ab0cbc467f55a926a522a7e5a5ce8fc2d88881b6d32f1e3eacd81f34f265e7907cc5715e0f61a38 languageName: node linkType: hard @@ -27897,34 +29649,33 @@ __metadata: linkType: hard "mdast-util-definitions@npm:^5.0.0": - version: 5.1.1 - resolution: "mdast-util-definitions@npm:5.1.1" + version: 5.1.0 + resolution: "mdast-util-definitions@npm:5.1.0" dependencies: "@types/mdast": ^3.0.0 "@types/unist": ^2.0.0 - unist-util-visit: ^4.0.0 - checksum: f8025e2c35f6f8641528037abe18f492ef100e00a48c92cf78b7a313f9ccdb0e30c6aed0b40539767a3f425be09e78cb0f2f9bc4131fff41ea4664a1a7314a14 + unist-util-visit: ^3.0.0 + checksum: a5237dc5925d965ec5f4c237b8d2fbc4728c18402f4f0cea0c947fb6241d7f2c7264b8bd5000363800388003d1474d57f5d5d29e0605a504bd186e59ddf8906a languageName: node linkType: hard "mdast-util-find-and-replace@npm:^2.0.0": - version: 2.2.1 - resolution: "mdast-util-find-and-replace@npm:2.2.1" + version: 2.1.0 + resolution: "mdast-util-find-and-replace@npm:2.1.0" dependencies: escape-string-regexp: ^5.0.0 unist-util-is: ^5.0.0 - unist-util-visit-parents: ^5.0.0 - checksum: 9b23a6858b55cd63d0af27057efe3a6130a6f89b683a3cde76c9b93b5e20525e1eebedd8a8da391f7e99443e9dcbf2c0023c3a197766090daeee0ebf92a21fde + unist-util-visit-parents: ^4.0.0 + checksum: 2df955899edb71fdd9f09a639572b281ec6e9be1533469cdbd7f1f16232a576adbd423f914182684f9516897143a5a797c45182848c0f83807d2c30a582a3c03 languageName: node linkType: hard "mdast-util-from-markdown@npm:^1.0.0": - version: 1.2.0 - resolution: "mdast-util-from-markdown@npm:1.2.0" + version: 1.0.2 + resolution: "mdast-util-from-markdown@npm:1.0.2" dependencies: "@types/mdast": ^3.0.0 "@types/unist": ^2.0.0 - decode-named-character-reference: ^1.0.0 mdast-util-to-string: ^3.1.0 micromark: ^3.0.0 micromark-util-decode-numeric-character-reference: ^1.0.0 @@ -27932,9 +29683,9 @@ __metadata: micromark-util-normalize-identifier: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 + parse-entities: ^3.0.0 unist-util-stringify-position: ^3.0.0 - uvu: ^0.5.0 - checksum: fadc3521a3d95f4adbadad462ca27c28b3bfe08740ae158dc0c4a22329bf5593254d98b8fd4024ecad8c47c77ec275454dfacfb907ff1b98ff8f5de25c716d40 + checksum: 6127a541ac09f41bd988388f40ac7952b9a1a2b0309de79341ffe2a3c0e6875a827831c13a3dd4af81cbedf873f7d28e4a01d4be529a02adf177956f56363e13 languageName: node linkType: hard @@ -27951,66 +29702,63 @@ __metadata: linkType: hard "mdast-util-gfm-footnote@npm:^1.0.0": - version: 1.0.1 - resolution: "mdast-util-gfm-footnote@npm:1.0.1" + version: 1.0.0 + resolution: "mdast-util-gfm-footnote@npm:1.0.0" dependencies: "@types/mdast": ^3.0.0 - mdast-util-to-markdown: ^1.3.0 + mdast-util-to-markdown: ^1.0.0 micromark-util-normalize-identifier: ^1.0.0 - checksum: 4caf69058b438c9e34004acfb1d2b20d58306898d760b889f73d27ed5702cd940be9fcb2a08f6e58b8d9d8e2b1c886c549cd7d23b659da5fb2ed87a22f44c13c + unist-util-visit: ^4.0.0 + checksum: 45af2e4fee5cf425f285ac4252871630eda6e0b284babc3458495521fdeff26fcbd9b310618900ca80338c299635413c16600934a4ed5c483f8e0f4f6c812223 languageName: node linkType: hard "mdast-util-gfm-strikethrough@npm:^1.0.0": - version: 1.0.1 - resolution: "mdast-util-gfm-strikethrough@npm:1.0.1" + version: 1.0.0 + resolution: "mdast-util-gfm-strikethrough@npm:1.0.0" dependencies: - "@types/mdast": ^3.0.0 - mdast-util-to-markdown: ^1.3.0 - checksum: ce81222ab4c130516278f8db57be23bd529e9f8c30bb16ab5b2bf294c0dfd57f2dc7a010deede65f349a8d37be73f90dbaecd962f76f70befa8f43bcd32fe5b9 + "@types/mdast": ^3.0.3 + mdast-util-to-markdown: ^1.0.0 + checksum: 4e57d6957673493860ea602031861b0a3bb1daf204d07a2ec521b8238beba6e6d9f700f53503afd6ce9aad81d8edafeba7c307761090a3db05094ffbdad421f4 languageName: node linkType: hard "mdast-util-gfm-table@npm:^1.0.0": - version: 1.0.6 - resolution: "mdast-util-gfm-table@npm:1.0.6" + version: 1.0.1 + resolution: "mdast-util-gfm-table@npm:1.0.1" dependencies: - "@types/mdast": ^3.0.0 markdown-table: ^3.0.0 - mdast-util-from-markdown: ^1.0.0 - mdast-util-to-markdown: ^1.3.0 - checksum: 1b0469d9a9c9ca2f8d7cbd46f660963bb98984cb9b2b7e25dba05c0ea2743cc9fc46fbbfdb046735b84a3c67445f13c655dc449cefa5d38646c2edf944201f50 + mdast-util-to-markdown: ^1.0.0 + checksum: 5b1fd47402c914d12f54fe588d7cb658e396ca63c3b2bc3ee771386bc671ba729ca7018ce2e5e8abdaf021ce4f72f49348c82226ee3d54ebe0620174ade70caa languageName: node linkType: hard "mdast-util-gfm-task-list-item@npm:^1.0.0": - version: 1.0.1 - resolution: "mdast-util-gfm-task-list-item@npm:1.0.1" + version: 1.0.0 + resolution: "mdast-util-gfm-task-list-item@npm:1.0.0" dependencies: - "@types/mdast": ^3.0.0 - mdast-util-to-markdown: ^1.3.0 - checksum: 9bb0f162532f8e11e571802ed19301572479fe9507652c8fb3f648279bbde3baa9f6377d9492dbba61eedd96755f8aff9c7c259287875544fb751907d79da69e + "@types/mdast": ^3.0.3 + mdast-util-to-markdown: ^1.0.0 + checksum: 7771c08a9cc03f58fff59d00af9ddc3aab6f64d85192186c344df4937a03809acd38189f1c8a05860026b9149a6953959e80a291a770d89d88eae92ef49ad463 languageName: node linkType: hard "mdast-util-gfm@npm:^2.0.0": - version: 2.0.1 - resolution: "mdast-util-gfm@npm:2.0.1" + version: 2.0.0 + resolution: "mdast-util-gfm@npm:2.0.0" dependencies: - mdast-util-from-markdown: ^1.0.0 mdast-util-gfm-autolink-literal: ^1.0.0 mdast-util-gfm-footnote: ^1.0.0 mdast-util-gfm-strikethrough: ^1.0.0 mdast-util-gfm-table: ^1.0.0 mdast-util-gfm-task-list-item: ^1.0.0 - mdast-util-to-markdown: ^1.0.0 - checksum: 8b39e6694521094ae28d12cbeff074ef3ec3f7f7ec59fbddd4e8a45a275e092c6ba6ecee4c720938eb3ee072ebd41d743b08cc0ab9171612a5aeddc1e78ae882 + checksum: 70c35ee810b15895adef654ccb7d12bf633eb03105e56a0d0acca693d5f81c9819073262f9ab98fb1c7059eabbc0c658a05dd60c48ed9e1e8d5d7ea0d91e5c00 languageName: node linkType: hard "mdast-util-to-hast@npm:^12.1.0": - version: 12.2.2 - resolution: "mdast-util-to-hast@npm:12.2.2" + version: 12.1.1 + resolution: "mdast-util-to-hast@npm:12.1.1" dependencies: "@types/hast": ^2.0.0 "@types/mdast": ^3.0.0 @@ -28018,18 +29766,17 @@ __metadata: mdast-util-definitions: ^5.0.0 mdurl: ^1.0.0 micromark-util-sanitize-uri: ^1.0.0 - trim-lines: ^3.0.0 unist-builder: ^3.0.0 unist-util-generated: ^2.0.0 unist-util-position: ^4.0.0 unist-util-visit: ^4.0.0 - checksum: 94275d2cbc617317846033728c89997780e49f3da680e176dcfe8fdb051a9a20f421af4f7f8609381606c9c494287b3d1f5b32fdb843c7cf4f6f7d19e0370f18 + checksum: 4c5a73e0463493d5ab2c033d42f8daead24d0808969bf21c3a720786784a347cedc1d3ae26b37737dbe3ea0839bc130bf7e20f3bc02e2387e6e7b0a5f94bafe4 languageName: node linkType: hard -"mdast-util-to-markdown@npm:^1.0.0, mdast-util-to-markdown@npm:^1.3.0": - version: 1.3.0 - resolution: "mdast-util-to-markdown@npm:1.3.0" +"mdast-util-to-markdown@npm:^1.0.0": + version: 1.2.3 + resolution: "mdast-util-to-markdown@npm:1.2.3" dependencies: "@types/mdast": ^3.0.0 "@types/unist": ^2.0.0 @@ -28038,7 +29785,7 @@ __metadata: micromark-util-decode-string: ^1.0.0 unist-util-visit: ^4.0.0 zwitch: ^2.0.0 - checksum: 0ea4fc11b7a49b15d400d50044429c45222cb9bc583553288c7c54704d051f25049233817129ba56a6f581f1e20916e5c540870a80987318747a95b44a36ba3e + checksum: 2a904f8af5dfe75650eda59e7f1b728c0dfb54fb37698274e78e99383b692aaba9d1a75092150960224b844b3a78cbdf813b31b2101d267159b7a43d56f58f3e languageName: node linkType: hard @@ -28071,16 +29818,16 @@ __metadata: linkType: hard "mem-fs-editor@npm:^8.1.2 || ^9.0.0": - version: 9.5.0 - resolution: "mem-fs-editor@npm:9.5.0" + version: 9.3.0 + resolution: "mem-fs-editor@npm:9.3.0" dependencies: binaryextensions: ^4.16.0 commondir: ^1.0.1 deep-extend: ^0.6.0 - ejs: ^3.1.8 - globby: ^11.1.0 + ejs: ^3.1.6 + globby: ^11.0.3 isbinaryfile: ^4.0.8 - minimatch: ^3.1.2 + minimatch: ^3.0.4 multimatch: ^5.0.0 normalize-path: ^3.0.0 textextensions: ^5.13.0 @@ -28089,7 +29836,7 @@ __metadata: peerDependenciesMeta: mem-fs: optional: true - checksum: 65919d02f596c14245cc75f0493e0221973753ce9bd490b6eb47026e7d64cb18cb17c8760441c65c56c51d83bf6fbc2e6c0a858fa162dfd2054ee3d0210d3579 + checksum: ec61cbded585b61efaf5b04a6d9eb8e96bb2ce7baeeae98443e2ec7e0cb22a060af98f5fb4edd5d8fcfbd05eff0396b0b5d6929d3add4f65eed7616ef94a272a languageName: node linkType: hard @@ -28105,12 +29852,12 @@ __metadata: languageName: node linkType: hard -"memfs@npm:^3.1.2, memfs@npm:^3.4.1, memfs@npm:^3.4.3": - version: 3.4.7 - resolution: "memfs@npm:3.4.7" +"memfs@npm:^3.1.2, memfs@npm:^3.4.1": + version: 3.4.1 + resolution: "memfs@npm:3.4.1" dependencies: - fs-monkey: ^1.0.3 - checksum: fab88266dc576dc4999e38bdf531d703fb798affac2e0dd3fc17470878486844027b2766008ba80c0103b443f52cf9068a5c00f4e1ecf04106f4b29c11855822 + fs-monkey: 1.0.3 + checksum: 6d2f49d447d1be24ff9c747618933784eeb059189bc6a0d77b7a51c7daf06e2d3a74674a2e2ff1520e2c312bf91e719ed37144cf05087379b3ba0aef0b6aa062 languageName: node linkType: hard @@ -28180,7 +29927,14 @@ __metadata: languageName: node linkType: hard -"merge2@npm:^1.3.0, merge2@npm:^1.4.1": +"merge2@npm:^1.3.0": + version: 1.3.0 + resolution: "merge2@npm:1.3.0" + checksum: bff71d47cd8c01edf2222f205f1c312cae0082e2c05b06123b0990605447dc395208367bb1d1635caec6083d3e6bb0756df05ac24cdc15cb630d5af6daa8eb7c + languageName: node + linkType: hard + +"merge2@npm:^1.4.1": version: 1.4.1 resolution: "merge2@npm:1.4.1" checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 @@ -28195,14 +29949,14 @@ __metadata: linkType: hard "meros@npm:^1.1.4": - version: 1.2.0 - resolution: "meros@npm:1.2.0" + version: 1.1.4 + resolution: "meros@npm:1.1.4" peerDependencies: "@types/node": ">=12" peerDependenciesMeta: "@types/node": optional: true - checksum: 95ec2dc352ad4ffe7a8572676d0399e8cfe67bb3ebe03ce5b03ebb4d990527994528260ff47a7efedc1348a8ee46bfe782564127bd1566d4790e1189b0a1ed29 + checksum: f85f33ea05a0e20598f034696b477924254b742b6d81f77c8bbd7dee1f875656a3d98a1a2a988c481fef7de5c313715ee409b3cb3058ae6c4fe16a7f2fc598a3 languageName: node linkType: hard @@ -28245,21 +29999,20 @@ __metadata: linkType: hard "micromark-extension-gfm-autolink-literal@npm:^1.0.0": - version: 1.0.3 - resolution: "micromark-extension-gfm-autolink-literal@npm:1.0.3" + version: 1.0.0 + resolution: "micromark-extension-gfm-autolink-literal@npm:1.0.0" dependencies: micromark-util-character: ^1.0.0 micromark-util-sanitize-uri: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: bb181972ac346ca73ca1ab0b80b80c9d6509ed149799d2217d5442670f499c38a94edff73d32fa52b390d89640974cfbd7f29e4ad7d599581d5e1cabcae636a2 + checksum: 8cefa45928ba2fdb6c572c6912214aa533e762ec4287fb5d47b6e2f92eb6a907c80e24e134b44b2b8ab9cac2a94d930c9c1f74a56a152a5daab23486e0a6a13f languageName: node linkType: hard "micromark-extension-gfm-footnote@npm:^1.0.0": - version: 1.0.4 - resolution: "micromark-extension-gfm-footnote@npm:1.0.4" + version: 1.0.3 + resolution: "micromark-extension-gfm-footnote@npm:1.0.3" dependencies: micromark-core-commonmark: ^1.0.0 micromark-factory-space: ^1.0.0 @@ -28267,58 +30020,54 @@ __metadata: micromark-util-normalize-identifier: ^1.0.0 micromark-util-sanitize-uri: ^1.0.0 micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 uvu: ^0.5.0 - checksum: 8daa203f5cf753338d5ecdbaae6b3ab6319d34b6013b90ea6860bed299418cecf86e69e48dabe42562e334760c738c77c5acdb47e75ae26f5f01f02f3bf0952d + checksum: 81aaf12d23ed73df405639d94896b9840ba8854c2490ae0b33b7f05b39635a71dfde27a98bce278092293bc5e4b268b7092fd2596ceb6c1c5ba45143e4e8fbf2 languageName: node linkType: hard "micromark-extension-gfm-strikethrough@npm:^1.0.0": - version: 1.0.4 - resolution: "micromark-extension-gfm-strikethrough@npm:1.0.4" + version: 1.0.1 + resolution: "micromark-extension-gfm-strikethrough@npm:1.0.1" dependencies: micromark-util-chunked: ^1.0.0 micromark-util-classify-character: ^1.0.0 micromark-util-resolve-all: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: f43d316b85fe93df1711cdcdc99a5320b941239349234bd262fc708cb67ad47bdfb41d1a7ebe2a5829816b0e9d3107380a5c1e558cb536a75354cbe4857823ba + checksum: 720aa4e47ac4701faf5640be40a97a249b880d5f8f2787106a0d12bd11dd8ab9e29a513af738743be07d42a02734e024184114b719435160e012c4ba9f7464bd languageName: node linkType: hard "micromark-extension-gfm-table@npm:^1.0.0": - version: 1.0.5 - resolution: "micromark-extension-gfm-table@npm:1.0.5" + version: 1.0.0 + resolution: "micromark-extension-gfm-table@npm:1.0.0" dependencies: micromark-factory-space: ^1.0.0 micromark-util-character: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: f0aab3b4333cc24b1534b08dc4cce986dd606df8b7ed913e5a1de9fe2d3ae67b2435663c0bc271b528874af4928e580e1ad540ea9117d7f2d74edb28859c97ef + checksum: 0c489daa32b9fc812b3f52f051fe38dab91e52f59791050b422f4ee141936747a14ad26a05d834b2e398f4c0a22b34a3106d914b1e2accf6dc5b3b16ccf35680 languageName: node linkType: hard "micromark-extension-gfm-tagfilter@npm:^1.0.0": - version: 1.0.1 - resolution: "micromark-extension-gfm-tagfilter@npm:1.0.1" + version: 1.0.0 + resolution: "micromark-extension-gfm-tagfilter@npm:1.0.0" dependencies: micromark-util-types: ^1.0.0 - checksum: 63e8d68f25871722900a67a8001d5da21f19ea707f3566fc7d0b2eb1f6d52476848bb6a41576cf22470565124af9497c5aae842355faa4c14ec19cb1847e71ec + checksum: 8a5988f46a7ce39c15e45ead46a7890dd3a9903c6c50f6d6f4e5a7b95c04042654728a7921f1224001f274059c9fefd3c65e63eff67a1299e19d94fff83e0457 languageName: node linkType: hard "micromark-extension-gfm-task-list-item@npm:^1.0.0": - version: 1.0.3 - resolution: "micromark-extension-gfm-task-list-item@npm:1.0.3" + version: 1.0.0 + resolution: "micromark-extension-gfm-task-list-item@npm:1.0.0" dependencies: micromark-factory-space: ^1.0.0 micromark-util-character: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: d320b0c5301f87e211c06a2330d1ee0fee6da14f0d6d44d5211055b465dadff34390cd6b258a5e0ca376fcda3364fef9a12fe6e26a0c858231fa3b98ddbf7785 + checksum: a8bc41ce4c5599cde45804737381ca5136b43c64c05034e396e476958232916d3bc23e585d3f71c59f03666c568bced41f177a76497267259b813ab4987dd3a5 languageName: node linkType: hard @@ -28350,14 +30099,13 @@ __metadata: linkType: hard "micromark-factory-label@npm:^1.0.0": - version: 1.0.2 - resolution: "micromark-factory-label@npm:1.0.2" + version: 1.0.0 + resolution: "micromark-factory-label@npm:1.0.0" dependencies: micromark-util-character: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: 957e9366bdc8dbc1437c0706ff96972fa985ab4b1274abcae12f6094f527cbf5c69e7f2304c23c7f4b96e311ff7911d226563b8b43dcfcd4091e8c985fb97ce6 + checksum: 37f34d8e42e3a606a636419ffe0f99fd7f6054778365aac56d1cc11585d1cd46000dbf938319abb2ea5e245803679d3cfa46afb5aecf2702bfd963113481f14c languageName: node linkType: hard @@ -28372,15 +30120,14 @@ __metadata: linkType: hard "micromark-factory-title@npm:^1.0.0": - version: 1.0.2 - resolution: "micromark-factory-title@npm:1.0.2" + version: 1.0.0 + resolution: "micromark-factory-title@npm:1.0.0" dependencies: micromark-factory-space: ^1.0.0 micromark-util-character: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: 9a9cf66babde0bad1e25d6c1087082bfde6dfc319a36cab67c89651cc1a53d0e21cdec83262b5a4c33bff49f0e3c8dc2a7bd464e991d40dbea166a8f9b37e5b2 + checksum: d9bf0779c49f013fea5fc5daadcee91e1703c81c1b5091337e806c24f1ea224d69f534d174aba2eccff7826620af71bb3db83b1caf14cbb89bea53f4e8e38bc3 languageName: node linkType: hard @@ -28446,28 +30193,27 @@ __metadata: linkType: hard "micromark-util-decode-string@npm:^1.0.0": - version: 1.0.2 - resolution: "micromark-util-decode-string@npm:1.0.2" + version: 1.0.0 + resolution: "micromark-util-decode-string@npm:1.0.0" dependencies: - decode-named-character-reference: ^1.0.0 micromark-util-character: ^1.0.0 micromark-util-decode-numeric-character-reference: ^1.0.0 - micromark-util-symbol: ^1.0.0 - checksum: 2dbb41c9691cc71505d39706405139fb7d6699429d577a524c7c248ac0cfd09d3dd212ad8e91c143a00b2896f26f81136edc67c5bda32d20446f0834d261b17a + parse-entities: ^3.0.0 + checksum: 9c7e6e3950e675f39058935e065e8774a1ef26a0d386eb45abd96fb8c0312c8a72464c672f41a3c7668974ac2a7cb2ad23b84eee3775b0bd4c47947d9fc64888 languageName: node linkType: hard "micromark-util-encode@npm:^1.0.0": - version: 1.0.1 - resolution: "micromark-util-encode@npm:1.0.1" - checksum: 9290583abfdc79ea3e7eb92c012c47a0e14327888f8aaa6f57ff79b3058d8e7743716b9d91abca3646f15ab3d78fdad9779fdb4ccf13349cd53309dfc845253a + version: 1.0.0 + resolution: "micromark-util-encode@npm:1.0.0" + checksum: 16985a6b355721307553d1893da364e83144ef068f84978071a9b4b3d884b65c3138f8330fb039aac10f75766b4906e03c5e62baafb1bf5e731f959878277712 languageName: node linkType: hard "micromark-util-html-tag-name@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-html-tag-name@npm:1.1.0" - checksum: a9b783cec89ec813648d59799464c1950fe281ae797b2a965f98ad0167d7fa1a247718eff023b4c015f47211a172f9446b8e6b98aad50e3cd44a3337317dad2c + version: 1.0.0 + resolution: "micromark-util-html-tag-name@npm:1.0.0" + checksum: ed07ce9b9bb30cc4ea57f733089b3a253a6132c0608ccfc105eadb32f1f80bbd2347bf8a74f897fe039d7805a59f602fd4dd15f6adc7926d40b3646da2888d0f languageName: node linkType: hard @@ -28501,38 +30247,36 @@ __metadata: linkType: hard "micromark-util-subtokenize@npm:^1.0.0": - version: 1.0.2 - resolution: "micromark-util-subtokenize@npm:1.0.2" + version: 1.0.0 + resolution: "micromark-util-subtokenize@npm:1.0.0" dependencies: micromark-util-chunked: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: c32ee58a7e1384ab1161a9ee02fbb04ad7b6e96d0b8c93dba9803c329a53d07f22ab394c7a96b2e30d6b8fbe3585b85817dba07277b1317111fc234e166bd2d1 + checksum: 58272616564c0c91b8c38e4c3e4516489d90eba3a82ff8dc946e7af0fb8b7828618d1e260c090cdcde5ca4c2d2b772e8506535e6af154653db974485ce4f3fa0 languageName: node linkType: hard "micromark-util-symbol@npm:^1.0.0": - version: 1.0.1 - resolution: "micromark-util-symbol@npm:1.0.1" - checksum: c6a3023b3a7432c15864b5e33a1bcb5042ac7aa097f2f452e587bef45433d42d39e0a5cce12fbea91e0671098ba0c3f62a2b30ce1cde66ecbb5e8336acf4391d + version: 1.0.0 + resolution: "micromark-util-symbol@npm:1.0.0" + checksum: 704e30468efcfd52cefc077981e3502620c9cbef8b2395ec4d556893ac4ab76531c1be1c4edd78c8d71526d4e4b404e3bad131cf6832dc19366f3ab3f81cd815 languageName: node linkType: hard "micromark-util-types@npm:^1.0.0, micromark-util-types@npm:^1.0.1": - version: 1.0.2 - resolution: "micromark-util-types@npm:1.0.2" - checksum: 08dc901b7c06ee3dfeb54befca05cbdab9525c1cf1c1080967c3878c9e72cb9856c7e8ff6112816e18ead36ce6f99d55aaa91560768f2f6417b415dcba1244df + version: 1.0.1 + resolution: "micromark-util-types@npm:1.0.1" + checksum: 5da351efe8e7e6e341a6a0d6396846a484a5ee1406eddb7da1541f22f29035c1574e481bc159e15fe032c42afcf85e699f37257b89d7f43872d7b89efd1682a0 languageName: node linkType: hard "micromark@npm:^3.0.0": - version: 3.0.10 - resolution: "micromark@npm:3.0.10" + version: 3.0.5 + resolution: "micromark@npm:3.0.5" dependencies: "@types/debug": ^4.0.0 debug: ^4.0.0 - decode-named-character-reference: ^1.0.0 micromark-core-commonmark: ^1.0.1 micromark-factory-space: ^1.0.0 micromark-util-character: ^1.0.0 @@ -28546,8 +30290,8 @@ __metadata: micromark-util-subtokenize: ^1.0.0 micromark-util-symbol: ^1.0.0 micromark-util-types: ^1.0.1 - uvu: ^0.5.0 - checksum: 04663fe0308cccfbf338111b41d3d82d6445d1d2b834c9fc1880e1ea3874c4a3b81adfafe62b0bc7708ba0a86889885ea31b4dbb39f1f72190c3aab46b743bb1 + parse-entities: ^3.0.0 + checksum: 613208b6e7e967e7da0c773950d25acc7154e9bfedfe66a4946c77f34d95ef1c7c08cc9a31142cdf4d84ccbfab310fece15f74dae1f1f70348390266ede26ebf languageName: node linkType: hard @@ -28817,8 +30561,8 @@ __metadata: linkType: hard "minipass-fetch@npm:^2.0.3": - version: 2.1.2 - resolution: "minipass-fetch@npm:2.1.2" + version: 2.1.0 + resolution: "minipass-fetch@npm:2.1.0" dependencies: encoding: ^0.1.13 minipass: ^3.1.6 @@ -28827,7 +30571,7 @@ __metadata: dependenciesMeta: encoding: optional: true - checksum: 3f216be79164e915fc91210cea1850e488793c740534985da017a4cbc7a5ff50506956d0f73bb0cb60e4fe91be08b6b61ef35101706d3ef5da2c8709b5f08f91 + checksum: 1334732859a3f7959ed22589bafd9c40384b885aebb5932328071c33f86b3eb181d54c86919675d1825ab5f1c8e4f328878c863873258d113c29d79a4b0c9c9f languageName: node linkType: hard @@ -28868,7 +30612,25 @@ __metadata: languageName: node linkType: hard -"minipass@npm:^3.0.0, minipass@npm:^3.1.0, minipass@npm:^3.1.1, minipass@npm:^3.1.3, minipass@npm:^3.1.6, minipass@npm:^3.3.5": +"minipass@npm:*": + version: 3.3.4 + resolution: "minipass@npm:3.3.4" + dependencies: + yallist: ^4.0.0 + checksum: 5d95a7738c54852ba78d484141e850c792e062666a2d0c681a5ac1021275beb7e1acb077e59f9523ff1defb80901aea4e30fac10ded9a20a25d819a42916ef1b + languageName: node + linkType: hard + +"minipass@npm:^3.0.0, minipass@npm:^3.1.0, minipass@npm:^3.1.1, minipass@npm:^3.1.3, minipass@npm:^3.1.6": + version: 3.1.6 + resolution: "minipass@npm:3.1.6" + dependencies: + yallist: ^4.0.0 + checksum: 57a04041413a3531a65062452cb5175f93383ef245d6f4a2961d34386eb9aa8ac11ac7f16f791f5e8bbaf1dfb1ef01596870c88e8822215db57aa591a5bb0a77 + languageName: node + linkType: hard + +"minipass@npm:^3.3.5": version: 3.3.5 resolution: "minipass@npm:3.3.5" dependencies: @@ -28904,7 +30666,14 @@ __metadata: languageName: node linkType: hard -"mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3": +"mkdirp-classic@npm:^0.5.2": + version: 0.5.2 + resolution: "mkdirp-classic@npm:0.5.2" + checksum: 771d69e289bbf1a14390d7971aac8c80182caea55ebab58f9d84fd8ad989fcdee6a13a03506393ef6287ec60359ebb97994e4fea0628369c422f5d4aaa579f42 + languageName: node + linkType: hard + +"mkdirp-classic@npm:^0.5.3": version: 0.5.3 resolution: "mkdirp-classic@npm:0.5.3" checksum: 3f4e088208270bbcc148d53b73e9a5bd9eef05ad2cbf3b3d0ff8795278d50dd1d11a8ef1875ff5aea3fa888931f95bfcb2ad5b7c1061cfefd6284d199e6776ac @@ -28930,13 +30699,13 @@ __metadata: linkType: hard "mkdirp@npm:^0.5.1": - version: 0.5.6 - resolution: "mkdirp@npm:0.5.6" + version: 0.5.5 + resolution: "mkdirp@npm:0.5.5" dependencies: - minimist: ^1.2.6 + minimist: ^1.2.5 bin: mkdirp: bin/cmd.js - checksum: 0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 + checksum: 3bce20ea525f9477befe458ab85284b0b66c8dc3812f94155af07c827175948cdd8114852ac6c6d82009b13c1048c37f6d98743eb019651ee25c39acc8aabe7d languageName: node linkType: hard @@ -29047,41 +30816,6 @@ __metadata: languageName: node linkType: hard -"msw@npm:^0.44.0": - version: 0.44.2 - resolution: "msw@npm:0.44.2" - dependencies: - "@mswjs/cookies": ^0.2.2 - "@mswjs/interceptors": ^0.17.2 - "@open-draft/until": ^1.0.3 - "@types/cookie": ^0.4.1 - "@types/js-levenshtein": ^1.1.1 - chalk: 4.1.1 - chokidar: ^3.4.2 - cookie: ^0.4.2 - graphql: ^16.3.0 - headers-polyfill: ^3.0.4 - inquirer: ^8.2.0 - is-node-process: ^1.0.1 - js-levenshtein: ^1.1.6 - node-fetch: ^2.6.7 - outvariant: ^1.3.0 - path-to-regexp: ^6.2.0 - statuses: ^2.0.0 - strict-event-emitter: ^0.2.0 - type-fest: ^1.2.2 - yargs: ^17.3.1 - peerDependencies: - typescript: ">= 4.2.x <= 4.7.x" - peerDependenciesMeta: - typescript: - optional: true - bin: - msw: cli/index.js - checksum: 739d536ee09d1c0a2cbc9dbe917f167c42115a6548f99780850ce9a63a5e7c377cf9b5f1a3b497e85ce7304025ab22966e997fe73adbd8d2ab968b8685f15a24 - languageName: node - linkType: hard - "msw@npm:^0.47.0": version: 0.47.3 resolution: "msw@npm:0.47.3" @@ -29117,15 +30851,15 @@ __metadata: languageName: node linkType: hard -"multicast-dns@npm:^7.2.5": - version: 7.2.5 - resolution: "multicast-dns@npm:7.2.5" +"multicast-dns@npm:^7.2.4": + version: 7.2.4 + resolution: "multicast-dns@npm:7.2.4" dependencies: dns-packet: ^5.2.2 thunky: ^1.0.2 bin: multicast-dns: cli.js - checksum: 00b8a57df152d4cd0297946320a94b7c3cdf75a46a2247f32f958a8927dea42958177f9b7fdae69fab2e4e033fb3416881af1f5e9055a3e1542888767139e2fb + checksum: 45a78628a8f26479c4018122d689a8b22aff034699a1913dac0b9891e4111162b3222c85bba642d624270a90e51129607f1e41aa701e0108cc974246bc9fe828 languageName: node linkType: hard @@ -29185,18 +30919,18 @@ __metadata: languageName: node linkType: hard -"nan@npm:^2.15.0, nan@npm:^2.16.0": - version: 2.16.0 - resolution: "nan@npm:2.16.0" +"nan@npm:^2.14.1, nan@npm:^2.15.0": + version: 2.15.0 + resolution: "nan@npm:2.15.0" dependencies: node-gyp: latest - checksum: cb16937273ea55b01ea47df244094c12297ce6b29b36e845d349f1f7c268b8d7c5abd126a102c5678a1e1afd0d36bba35ea0cc959e364928ce60561c9306064a + checksum: 33e1bb4dfca447fe37d4bb5889be55de154828632c8d38646db67293a21afd61ed9909cdf1b886214a64707d935926c4e60e2b09de9edfc2ad58de31d6ce8f39 languageName: node linkType: hard "nano-css@npm:^5.3.1": - version: 5.3.5 - resolution: "nano-css@npm:5.3.5" + version: 5.3.1 + resolution: "nano-css@npm:5.3.1" dependencies: css-tree: ^1.1.2 csstype: ^3.0.6 @@ -29209,7 +30943,7 @@ __metadata: peerDependencies: react: "*" react-dom: "*" - checksum: 8d4e59a2a29477221af47320d850a7dcee1ac51774fb5a0dce6ee59b22174c7149f75108235de85559581fbb2b93aa222a2b32ea53c93ba3f5d322c4d098c355 + checksum: 45517871e8c15a00769bfc9eb5e466d9c193b0a7423050eb77eb21003a1ccfd13863f01bf68490be830de019f4a0ae945d5b91eb23c5898d341ac8968ba3f18b languageName: node linkType: hard @@ -29220,7 +30954,16 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.1.23, nanoid@npm:^3.3.4": +"nanoid@npm:^3.1.23": + version: 3.3.1 + resolution: "nanoid@npm:3.3.1" + bin: + nanoid: bin/nanoid.cjs + checksum: 4ef0969e1bbe866fc223eb32276cbccb0961900bfe79104fa5abe34361979dead8d0e061410a5c03bc3d47455685adf32c09d6f27790f4a6898fb51f7df7ec86 + languageName: node + linkType: hard + +"nanoid@npm:^3.3.4": version: 3.3.4 resolution: "nanoid@npm:3.3.4" bin: @@ -29315,11 +31058,11 @@ __metadata: linkType: hard "node-abi@npm:^3.3.0": - version: 3.24.0 - resolution: "node-abi@npm:3.24.0" + version: 3.8.0 + resolution: "node-abi@npm:3.8.0" dependencies: semver: ^7.3.5 - checksum: d90ab48802497b2203800cac71018668e99c246435395ca4f67afcabf689e7e81568ed36e8036bae79a052b63ea5707375bece6ca0a1d2e2b99bfafde7a5c9b2 + checksum: 3644dd51f4f189358ef56055407501aa698632d67448585b38c46c81a482a0c3bfb06da513ac4060a12ce5f607f208ba9d9c8280f1c38329670b709bd735fcae languageName: node linkType: hard @@ -29396,7 +31139,7 @@ __metadata: languageName: node linkType: hard -"node-gyp@npm:^9.0.0, node-gyp@npm:latest": +"node-gyp@npm:latest": version: 9.1.0 resolution: "node-gyp@npm:9.1.0" dependencies: @@ -29454,6 +31197,20 @@ __metadata: languageName: node linkType: hard +"node-modules-regexp@npm:^1.0.0": + version: 1.0.0 + resolution: "node-modules-regexp@npm:1.0.0" + checksum: 99541903536c5ce552786f0fca7f06b88df595e62e423c21fa86a1674ee2363dad1f7482d1bec20b4bd9fa5f262f88e6e5cb788fc56411113f2fe2e97783a3a7 + languageName: node + linkType: hard + +"node-releases@npm:^2.0.1": + version: 2.0.1 + resolution: "node-releases@npm:2.0.1" + checksum: b20dd8d4bced11f75060f0387e05e76b9dc4a0451f7bb3516eade6f50499ea7768ba95d8a60d520c193402df1e58cb3fe301510cc1c1ad68949c3d57b5149866 + languageName: node + linkType: hard + "node-releases@npm:^2.0.6": version: 2.0.6 resolution: "node-releases@npm:2.0.6" @@ -29515,27 +31272,27 @@ __metadata: languageName: node linkType: hard -"normalize-package-data@npm:^3.0.0, normalize-package-data@npm:^3.0.2": - version: 3.0.3 - resolution: "normalize-package-data@npm:3.0.3" +"normalize-package-data@npm:^3.0.0": + version: 3.0.0 + resolution: "normalize-package-data@npm:3.0.0" dependencies: - hosted-git-info: ^4.0.1 - is-core-module: ^2.5.0 - semver: ^7.3.4 + hosted-git-info: ^3.0.6 + resolve: ^1.17.0 + semver: ^7.3.2 validate-npm-package-license: ^3.0.1 - checksum: bbcee00339e7c26fdbc760f9b66d429258e2ceca41a5df41f5df06cc7652de8d82e8679ff188ca095cad8eff2b6118d7d866af2b68400f74602fbcbce39c160a + checksum: 665ad6e3d0463f56ee8acc1f8f71c5f62535e4c689ed389521c36e8fd34273306f978c934154de3a43f5b128ed7010872ce3381948f8d4a63d70f50ed01ac2e0 languageName: node linkType: hard "normalize-package-data@npm:^4.0.0": - version: 4.0.1 - resolution: "normalize-package-data@npm:4.0.1" + version: 4.0.0 + resolution: "normalize-package-data@npm:4.0.0" dependencies: hosted-git-info: ^5.0.0 is-core-module: ^2.8.1 semver: ^7.3.5 validate-npm-package-license: ^3.0.4 - checksum: 292e0aa740e73d62f84bbd9d55d4bfc078155f32d5d7572c32c9807f96d543af0f43ff7e5c80bfa6238667123fd68bd83cd412eae9b27b85b271fb041f624528 + checksum: b0f47de4295a0f8499bd478e84b9f9592a29f65227c2b4446ae80f7dff6e7a5ec6ef25ea8f06f3dcb9b7b7d945c2daa274385925b3d85e77e34eaffa0b42e316 languageName: node linkType: hard @@ -29555,6 +31312,13 @@ __metadata: languageName: node linkType: hard +"normalize-url@npm:^3.3.0": + version: 3.3.0 + resolution: "normalize-url@npm:3.3.0" + checksum: f6aa4a1a94c3b799812f3e7fc987fb4599d869bfa8e9a160b6f2c5a2b4e62ada998d64dca30d9e20769d8bd95d3da1da3d4841dba2cc3c4d85364e1eb46219a2 + languageName: node + linkType: hard + "normalize-url@npm:^6.0.1, normalize-url@npm:^6.1.0": version: 6.1.0 resolution: "normalize-url@npm:6.1.0" @@ -29624,20 +31388,19 @@ __metadata: linkType: hard "npm-package-arg@npm:^9.0.0, npm-package-arg@npm:^9.0.1": - version: 9.1.0 - resolution: "npm-package-arg@npm:9.1.0" + version: 9.0.2 + resolution: "npm-package-arg@npm:9.0.2" dependencies: hosted-git-info: ^5.0.0 - proc-log: ^2.0.1 semver: ^7.3.5 validate-npm-package-name: ^4.0.0 - checksum: 277c21477731a4f1e31bde36f0db5f5470deb2a008db2aaf1b015d588b23cb225c75f90291ea241235e86682a03de972bbe69fc805c921a786ea9616955990b9 + checksum: 07828f330f611214a0aa1e87f402b30b3dc90388671470ad8dc1551f28b0cb886f1f75fa7c37e894a9598640a555c05643642994ecacb9a6c68f655e571968f7 languageName: node linkType: hard "npm-packlist@npm:^2.1.4": - version: 2.2.2 - resolution: "npm-packlist@npm:2.2.2" + version: 2.1.4 + resolution: "npm-packlist@npm:2.1.4" dependencies: glob: ^7.1.6 ignore-walk: ^3.0.3 @@ -29645,7 +31408,7 @@ __metadata: npm-normalize-package-bin: ^1.0.1 bin: npm-packlist: bin/index.js - checksum: 799ce94b077e4dc366a9a5bcc5f006669263bb1a48d6948161aed915fd2f11dea8a7cf516a63fc78e5df059915591dade5928f0738baadc99a8ab4685d8b58c3 + checksum: 916eb67d81c52124b01e20a72168e83fed6fbc168fb6ecd659f5581f515818b9668dab9c1a6b19c7fd6dbe583ad2ed7ceb06924aa884336696f1b08f0f637b22 languageName: node linkType: hard @@ -29690,28 +31453,14 @@ __metadata: linkType: hard "npm-pick-manifest@npm:^7.0.0": - version: 7.0.2 - resolution: "npm-pick-manifest@npm:7.0.2" + version: 7.0.1 + resolution: "npm-pick-manifest@npm:7.0.1" dependencies: npm-install-checks: ^5.0.0 - npm-normalize-package-bin: ^2.0.0 + npm-normalize-package-bin: ^1.0.1 npm-package-arg: ^9.0.0 semver: ^7.3.5 - checksum: a93ec449c12219a2be8556837db9ac5332914f304a69469bb6f1f47717adc6e262aa318f79166f763512688abd9c4e4b6a2d83b2dd19753a7abe5f0360f2c8bc - languageName: node - linkType: hard - -"npm-registry-fetch@npm:^11.0.0": - version: 11.0.0 - resolution: "npm-registry-fetch@npm:11.0.0" - dependencies: - make-fetch-happen: ^9.0.1 - minipass: ^3.1.3 - minipass-fetch: ^1.3.0 - minipass-json-stream: ^1.0.1 - minizlib: ^2.0.0 - npm-package-arg: ^8.0.0 - checksum: dda149cd86f8ee73db1b0a0302fbf59983ef03ad180051caa9aad1de9f1e099aaa77adcda3ca2c3bd9d98958e9e6593bd56ee21d3f660746b0a65fafbf5ae161 + checksum: 9a4a8e64d2214783b2b74a361845000f5d91bb40c7858e2a30af2ac7876d9296efc37f8cacf60335e96a45effee2035b033d9bdefb4889757cc60d85959accbb languageName: node linkType: hard @@ -29730,8 +31479,8 @@ __metadata: linkType: hard "npm-registry-fetch@npm:^13.0.0, npm-registry-fetch@npm:^13.0.1": - version: 13.3.1 - resolution: "npm-registry-fetch@npm:13.3.1" + version: 13.1.1 + resolution: "npm-registry-fetch@npm:13.1.1" dependencies: make-fetch-happen: ^10.0.6 minipass: ^3.1.6 @@ -29740,7 +31489,7 @@ __metadata: minizlib: ^2.1.2 npm-package-arg: ^9.0.1 proc-log: ^2.0.0 - checksum: 5a941c2c799568e0dbccfc15f280444da398dadf2eede1b1921f08ddd5cb5f32c7cb4d16be96401f95a33073aeec13a3fd928c753790d3c412c2e64e7f7c6ee4 + checksum: e085faf5cdc1cfe9b8f825065a0823531b2a28799d84614b3971e344dde087f9089c0f0220360771a81f110c5444978c6f7309084ff7d7d396252b068148bb44 languageName: node linkType: hard @@ -29778,7 +31527,7 @@ __metadata: languageName: node linkType: hard -"npmlog@npm:^4.1.2": +"npmlog@npm:^4.0.1, npmlog@npm:^4.1.2": version: 4.1.2 resolution: "npmlog@npm:4.1.2" dependencies: @@ -29802,7 +31551,19 @@ __metadata: languageName: node linkType: hard -"npmlog@npm:^6.0.0, npmlog@npm:^6.0.2": +"npmlog@npm:^6.0.0": + version: 6.0.1 + resolution: "npmlog@npm:6.0.1" + dependencies: + are-we-there-yet: ^3.0.0 + console-control-strings: ^1.1.0 + gauge: ^4.0.0 + set-blocking: ^2.0.0 + checksum: f1a4078a73ebc89896a832bbf869f491c32ecb12e0434b9a7499878ce8f29f22e72befe3c53cd8cdc9dbf4b4057297e783ab0b6746a8b067734de6205af4d538 + languageName: node + linkType: hard + +"npmlog@npm:^6.0.2": version: 6.0.2 resolution: "npmlog@npm:6.0.2" dependencies: @@ -29814,12 +31575,12 @@ __metadata: languageName: node linkType: hard -"nth-check@npm:^2.0.1": - version: 2.1.1 - resolution: "nth-check@npm:2.1.1" +"nth-check@npm:^2.0.0": + version: 2.0.1 + resolution: "nth-check@npm:2.0.1" dependencies: boolbase: ^1.0.0 - checksum: 5afc3dafcd1573b08877ca8e6148c52abd565f1d06b1eb08caf982e3fa289a82f2cae697ffb55b5021e146d60443f1590a5d6b944844e944714a5b549675bcd3 + checksum: 5386d035c48438ff304fe687704d93886397349d1bed136de97aeae464caba10e8ffac55a04b215b86b3bc8897f33e0a5aa1045a9d8b2f251ae61b2a3ad3e450 languageName: node linkType: hard @@ -29856,9 +31617,9 @@ __metadata: linkType: hard "nwsapi@npm:^2.2.0": - version: 2.2.2 - resolution: "nwsapi@npm:2.2.2" - checksum: 43769106292bc95f776756ca2f3513dab7b4d506a97c67baec32406447841a35f65f29c1f95ab5d42785210fd41668beed33ca16fa058780be43b101ad73e205 + version: 2.2.0 + resolution: "nwsapi@npm:2.2.0" + checksum: 5ef4a9bc0c1a5b7f2e014aa6a4b359a257503b796618ed1ef0eb852098f77e772305bb0e92856e4bbfa3e6c75da48c0113505c76f144555ff38867229c2400a7 languageName: node linkType: hard @@ -29908,7 +31669,7 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.12.2, object-inspect@npm:^1.9.0": +"object-inspect@npm:^1.11.0, object-inspect@npm:^1.12.0, object-inspect@npm:^1.12.2, object-inspect@npm:^1.9.0": version: 1.12.2 resolution: "object-inspect@npm:1.12.2" checksum: a534fc1b8534284ed71f25ce3a496013b7ea030f3d1b77118f6b7b1713829262be9e6243acbcb3ef8c626e2b64186112cb7f6db74e37b2789b9c789ca23048b2 @@ -29931,7 +31692,19 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.1.0, object.assign@npm:^4.1.3, object.assign@npm:^4.1.4": +"object.assign@npm:^4.1.0": + version: 4.1.2 + resolution: "object.assign@npm:4.1.2" + dependencies: + call-bind: ^1.0.0 + define-properties: ^1.1.3 + has-symbols: ^1.0.1 + object-keys: ^1.1.1 + checksum: d621d832ed7b16ac74027adb87196804a500d80d9aca536fccb7ba48d33a7e9306a75f94c1d29cbfa324bc091bfc530bc24789568efdaee6a47fcfa298993814 + languageName: node + linkType: hard + +"object.assign@npm:^4.1.2": version: 4.1.4 resolution: "object.assign@npm:4.1.4" dependencies: @@ -30003,11 +31776,11 @@ __metadata: linkType: hard "octokit-plugin-create-pull-request@npm:^3.10.0": - version: 3.13.1 - resolution: "octokit-plugin-create-pull-request@npm:3.13.1" + version: 3.12.2 + resolution: "octokit-plugin-create-pull-request@npm:3.12.2" dependencies: "@octokit/types": ^6.8.2 - checksum: 169e393046cecc51b9c9be23321086fc60681bfdfe2bcec5477d0916e5b8e3b64b54588f631f61d98677a0561f5d44fa85589abd75ff851122c798795921292b + checksum: 1f23b6ab62f148795eb7d0109bbfbaf022760ccd17eca2d8d6e0dd860ec76d509fcc0e94841caedaf1e5fe48885cec080fdf8c1cddf0736d0c119070eb7f371f languageName: node linkType: hard @@ -30041,7 +31814,7 @@ __metadata: languageName: node linkType: hard -"on-finished@npm:2.4.1, on-finished@npm:^2.3.0": +"on-finished@npm:2.4.1": version: 2.4.1 resolution: "on-finished@npm:2.4.1" dependencies: @@ -30050,7 +31823,7 @@ __metadata: languageName: node linkType: hard -"on-finished@npm:~2.3.0": +"on-finished@npm:^2.3.0, on-finished@npm:~2.3.0": version: 2.3.0 resolution: "on-finished@npm:2.3.0" dependencies: @@ -30114,12 +31887,12 @@ __metadata: linkType: hard "openapi-sampler@npm:^1.2.1": - version: 1.3.0 - resolution: "openapi-sampler@npm:1.3.0" + version: 1.2.1 + resolution: "openapi-sampler@npm:1.2.1" dependencies: "@types/json-schema": ^7.0.7 json-pointer: 0.6.2 - checksum: 5f4e8612ae4d8ffe21f3b0d972879828675c3de812b3c2a0a436c7191847384c888d0ee5812c6aa5318d2a82b102db56b00e9ac06da5e9d290343790c9c93776 + checksum: 831abc601eb3e43539b0716b938f4e78f2ddfdc164bc47590422be435e46fd2b1a82fb5e954978460fc5a0cef14bb232ff07fc2561ab34bdcd45b67beb6d0e58 languageName: node linkType: hard @@ -30232,9 +32005,9 @@ __metadata: linkType: hard "p-cancelable@npm:^2.0.0": - version: 2.1.1 - resolution: "p-cancelable@npm:2.1.1" - checksum: 3dba12b4fb4a1e3e34524535c7858fc82381bbbd0f247cc32dedc4018592a3950ce66b106d0880b4ec4c2d8d6576f98ca885dc1d7d0f274d1370be20e9523ddf + version: 2.0.0 + resolution: "p-cancelable@npm:2.0.0" + checksum: dbe887e06ec72a918b3f3d41819aa57b5c4248ddf7162477727046bd2775d6e3e52390521198625599198e9bb5d592f3b0064e96fc0940cdf4e01233e2296664 languageName: node linkType: hard @@ -30279,7 +32052,16 @@ __metadata: languageName: node linkType: hard -"p-limit@npm:^2.0.0, p-limit@npm:^2.2.0": +"p-limit@npm:^2.0.0": + version: 2.2.2 + resolution: "p-limit@npm:2.2.2" + dependencies: + p-try: ^2.0.0 + checksum: 20c395084f4bbcb6330c21ed5408a482c7e03bb68fbf9d4667fb0f49de944a7474f788b214ca087090868dfce3f3fff4a4830b0951c8a979469786635b172fb2 + languageName: node + linkType: hard + +"p-limit@npm:^2.2.0": version: 2.3.0 resolution: "p-limit@npm:2.3.0" dependencies: @@ -30381,12 +32163,12 @@ __metadata: linkType: hard "p-retry@npm:^4.5.0": - version: 4.6.2 - resolution: "p-retry@npm:4.6.2" + version: 4.5.0 + resolution: "p-retry@npm:4.5.0" dependencies: - "@types/retry": 0.12.0 - retry: ^0.13.1 - checksum: 45c270bfddaffb4a895cea16cb760dcc72bdecb6cb45fef1971fa6ea2e91ddeafddefe01e444ac73e33b1b3d5d29fb0dd18a7effb294262437221ddc03ce0f2e + "@types/retry": ^0.12.0 + retry: ^0.12.0 + checksum: 129cbf070401b4b5fea7c959a85a62d26ac29593bcb59e34ce1544a0cace3674cd1f66c370ba8ec95184cf5745546ea2d5e31b75395cf40a4e34358684867b67 languageName: node linkType: hard @@ -30469,13 +32251,13 @@ __metadata: linkType: hard "pacote@npm:^13.0.3, pacote@npm:^13.0.5, pacote@npm:^13.4.1": - version: 13.6.2 - resolution: "pacote@npm:13.6.2" + version: 13.6.0 + resolution: "pacote@npm:13.6.0" dependencies: "@npmcli/git": ^3.0.0 "@npmcli/installed-package-contents": ^1.0.7 "@npmcli/promise-spawn": ^3.0.0 - "@npmcli/run-script": ^4.1.0 + "@npmcli/run-script": ^3.0.1 cacache: ^16.0.0 chownr: ^2.0.0 fs-minipass: ^2.1.0 @@ -30495,7 +32277,7 @@ __metadata: tar: ^6.1.11 bin: pacote: lib/bin.js - checksum: a7b7f97094ab570a23e1c174537e9953a4d53176cc4b18bac77d7728bd89e2b9fa331d0f78fa463add03df79668a918bbdaa2750819504ee39242063abf53c6e + checksum: 9e68300fbe35d4f004444f949b88ce3f5a92c44b92b63e57514962b228ef78bb1a92208f8f2a5fc8066e639c76a442e1cf6fad2a1d29efa63f07aece3cccc6f7 languageName: node linkType: hard @@ -30532,16 +32314,17 @@ __metadata: languageName: node linkType: hard -"parse-asn1@npm:^5.0.0, parse-asn1@npm:^5.1.5": - version: 5.1.6 - resolution: "parse-asn1@npm:5.1.6" +"parse-asn1@npm:^5.0.0": + version: 5.1.5 + resolution: "parse-asn1@npm:5.1.5" dependencies: - asn1.js: ^5.2.0 + asn1.js: ^4.0.0 browserify-aes: ^1.0.0 + create-hash: ^1.1.0 evp_bytestokey: ^1.0.0 pbkdf2: ^3.0.3 safe-buffer: ^5.1.1 - checksum: 9243311d1f88089bc9f2158972aa38d1abd5452f7b7cabf84954ed766048fe574d434d82c6f5a39b988683e96fb84cd933071dda38927e03469dc8c8d14463c7 + checksum: e3bf40ce4953ec66754fd692bafdd99d9f00a6bb05822361f47222f959ddf5d1f9928088cda3892433f81eee6394ac1d1d9dd4dbd5d5cdc567b644a2cf860a0a languageName: node linkType: hard @@ -30570,13 +32353,13 @@ __metadata: linkType: hard "parse-conflict-json@npm:^2.0.1": - version: 2.0.2 - resolution: "parse-conflict-json@npm:2.0.2" + version: 2.0.1 + resolution: "parse-conflict-json@npm:2.0.1" dependencies: json-parse-even-better-errors: ^2.3.1 just-diff: ^5.0.1 - just-diff-apply: ^5.2.0 - checksum: 076f65c958696586daefb153f59d575dfb59648be43116a21b74d5ff69ec63dd56f585a27cc2da56d8e64ca5abf0373d6619b8330c035131f8d1e990c8406378 + just-diff-apply: ^4.0.1 + checksum: 398728731f3b7330d2885075f1dad0abd6fb943fca6aaa5f0edf46ccf06fe72b3ae09327f19447e98052fdfbf8bcfeee3aa14d7eb843846ec158b871a7fc1bba languageName: node linkType: hard @@ -30594,6 +32377,20 @@ __metadata: languageName: node linkType: hard +"parse-entities@npm:^3.0.0": + version: 3.0.0 + resolution: "parse-entities@npm:3.0.0" + dependencies: + character-entities: ^2.0.0 + character-entities-legacy: ^2.0.0 + character-reference-invalid: ^2.0.0 + is-alphanumerical: ^2.0.0 + is-decimal: ^2.0.0 + is-hexadecimal: ^2.0.0 + checksum: 78a1039ace8822f641465a52660b84c3018a2e6345ee0534a2f9f8aa064a11cc9dba7523fa24103ce12b617b8e7b378f244a5d070a834b29feb97baf63c657ed + languageName: node + linkType: hard + "parse-filepath@npm:^1.0.2": version: 1.0.2 resolution: "parse-filepath@npm:1.0.2" @@ -30606,9 +32403,9 @@ __metadata: linkType: hard "parse-headers@npm:^2.0.0": - version: 2.0.5 - resolution: "parse-headers@npm:2.0.5" - checksum: 3e97f01e4c7f960bfbfd0ee489f0bd8d3c72b6c814f1f79b66abec2cca8eaf8e4ecd89deba0b6e61266469aed87350bc932001181c01ff8c29a59e696abe251f + version: 2.0.4 + resolution: "parse-headers@npm:2.0.4" + checksum: 29519ac013e100c11a67d0fc64eb33ae86523abf547f71dba36d484dcd16a2835dd11f31303f4ded27c40133dca5a5fe4d15b77f49091e470a6f74a023c59c4a languageName: node linkType: hard @@ -30651,14 +32448,12 @@ __metadata: linkType: hard "parse-path@npm:^4.0.0": - version: 4.0.4 - resolution: "parse-path@npm:4.0.4" + version: 4.0.1 + resolution: "parse-path@npm:4.0.1" dependencies: is-ssh: ^1.3.0 protocols: ^1.4.0 - qs: ^6.9.4 - query-string: ^6.13.8 - checksum: 909e628c35baebeb3bdcaa376e2c5a21632a9094079ac55e04b3311db28219b15e517e10987dd49a13a904f2605b747b6368b0092130e0f2ff9bc5ffc40ceb63 + checksum: dbe025d5827359fee9162932757bf7eb964220a6636ec6d233f9acc981a646aa605d5b49df585792a56e9fdd238d8d5daf2d532d1cd45642f15a47817e4352f6 languageName: node linkType: hard @@ -30680,15 +32475,15 @@ __metadata: languageName: node linkType: hard -"parse-url@npm:^6.0.0": - version: 6.0.5 - resolution: "parse-url@npm:6.0.5" +"parse-url@npm:^5.0.0": + version: 5.0.1 + resolution: "parse-url@npm:5.0.1" dependencies: is-ssh: ^1.3.0 - normalize-url: ^6.1.0 + normalize-url: ^3.3.0 parse-path: ^4.0.0 protocols: ^1.4.0 - checksum: b583800f63a8a293c5d53ee6b28b99293c742791fba4f14c1b829547a78bad93500fe0d448f8d8e2087a3c4d39deab236ed3837830ea522272e8c5852f21d223 + checksum: 05c8e88f8c918b11a4feeedfa693a547987eb11266e852746d362bfb92662bd79fa5a422dd41ed297d73e2cfe659dad8c594d97f4ca9e523bec1af289a9a4366 languageName: node linkType: hard @@ -30817,13 +32612,13 @@ __metadata: linkType: hard "passport-oauth1@npm:1.x.x": - version: 1.2.0 - resolution: "passport-oauth1@npm:1.2.0" + version: 1.1.0 + resolution: "passport-oauth1@npm:1.1.0" dependencies: oauth: 0.9.x passport-strategy: 1.x.x utils-merge: 1.x.x - checksum: b38444da71bf3468a53599d908b45e4043c7dd04cce0ded3398a91f161ce076c5973f42ddad47e5012f8b1cccea71b60890b35560491921d0858c36b364ac471 + checksum: 49ce8b8d17846bfdb6b1e659b7757eb2c0f239539b1901533bc00b7bdaa4c40662db804698364a60d61c284eae69d5f5d312bc04f2b8fc70ea1897a40f107fde languageName: node linkType: hard @@ -31030,9 +32825,9 @@ __metadata: linkType: hard "path-to-regexp@npm:^6.2.0": - version: 6.2.1 - resolution: "path-to-regexp@npm:6.2.1" - checksum: f0227af8284ea13300f4293ba111e3635142f976d4197f14d5ad1f124aebd9118783dd2e5f1fe16f7273743cc3dbeddfb7493f237bb27c10fdae07020cc9b698 + version: 6.2.0 + resolution: "path-to-regexp@npm:6.2.0" + checksum: a6aca74d2d6e2e7594d812f653cf85e9cb5054d3a8d80f099722a44ef6ad22639b02078e5ea83d11db16321c3e4359e3f1ab0274fa78dad0754a6e53f630b0fc languageName: node linkType: hard @@ -31080,22 +32875,22 @@ __metadata: linkType: hard "pbkdf2@npm:^3.0.3": - version: 3.1.2 - resolution: "pbkdf2@npm:3.1.2" + version: 3.0.17 + resolution: "pbkdf2@npm:3.0.17" dependencies: create-hash: ^1.1.2 create-hmac: ^1.1.4 ripemd160: ^2.0.1 safe-buffer: ^5.0.1 sha.js: ^2.4.8 - checksum: 2c950a100b1da72123449208e231afc188d980177d021d7121e96a2de7f2abbc96ead2b87d03d8fe5c318face097f203270d7e27908af9f471c165a4e8e69c92 + checksum: 9c9062b4bf300bfc03214a8665ab1c8ede227fca1d5bd8b8d0a9d317a941ff64c80b19810288a8cc0f774d603dce249d4b734e62b68dfc784be4ad1e6c0a81f5 languageName: node linkType: hard -"peek-readable@npm:^4.1.0": - version: 4.1.0 - resolution: "peek-readable@npm:4.1.0" - checksum: 02c673f9bc816f8e4e74a054c097225ad38d457d745b775e2b96faf404a54473b2f62f5bcd496f5ebc28696708bcc5e95bed409856f4bef5ed62eae9b4ac0dab +"peek-readable@npm:^4.0.1": + version: 4.0.1 + resolution: "peek-readable@npm:4.0.1" + checksum: aed788748585fe2dc55ac8a1ea4dd75b9f30c71a790bbd53f785aab757e6b765a6b6a4b19343242f24fdfc416a81d5ec40635ead75379b94af5b0e9d647d087d languageName: node linkType: hard @@ -31177,11 +32972,11 @@ __metadata: linkType: hard "pgpass@npm:1.x": - version: 1.0.5 - resolution: "pgpass@npm:1.0.5" + version: 1.0.2 + resolution: "pgpass@npm:1.0.2" dependencies: - split2: ^4.1.0 - checksum: 947ac096c031eebdf08d989de2e9f6f156b8133d6858c7c2c06c041e1e71dda6f5f3bad3c0ec1e96a09497bbc6ef89e762eefe703b5ef9cb2804392ec52ec400 + split: ^1.0.0 + checksum: 377bf4c3e489ff28a93ae3b1cf3f99a8f9b85153ae9c587345a07e40c1b036e81bd414e5d0bdb204a43f45390e728bbb314c71e067d7b0dda39c3b7097df09a0 languageName: node linkType: hard @@ -31316,7 +33111,16 @@ __metadata: languageName: node linkType: hard -"pirates@npm:^4.0.1, pirates@npm:^4.0.4, pirates@npm:^4.0.5": +"pirates@npm:^4.0.0": + version: 4.0.1 + resolution: "pirates@npm:4.0.1" + dependencies: + node-modules-regexp: ^1.0.0 + checksum: 091e232aac19f0049a681838fa9fcb4af824b5b1eb0e9325aa07b9d13245bfe3e4fa57a7766b9fdcd19cb89f2c15c688b46023be3047cb288023a0c079d3b2a3 + languageName: node + linkType: hard + +"pirates@npm:^4.0.1, pirates@npm:^4.0.4": version: 4.0.5 resolution: "pirates@npm:4.0.5" checksum: c9994e61b85260bec6c4fc0307016340d9b0c4f4b6550a957afaaff0c9b1ad58fbbea5cfcf083860a25cb27a375442e2b0edf52e2e1e40e69934e08dcc52d227 @@ -31403,169 +33207,162 @@ __metadata: languageName: node linkType: hard -"postcss-calc@npm:^8.2.3": - version: 8.2.4 - resolution: "postcss-calc@npm:8.2.4" +"postcss-calc@npm:^8.0.0": + version: 8.0.0 + resolution: "postcss-calc@npm:8.0.0" dependencies: - postcss-selector-parser: ^6.0.9 - postcss-value-parser: ^4.2.0 + postcss-selector-parser: ^6.0.2 + postcss-value-parser: ^4.0.2 peerDependencies: postcss: ^8.2.2 - checksum: 314b4cebb0c4ed0cf8356b4bce71eca78f5a7842e6a3942a3bba49db168d5296b2bd93c3f735ae1c616f2651d94719ade33becc03c73d2d79c7394fb7f73eabb + checksum: d945c49f317d6e8f220bce33075f2eec8e26052158a5a694186c11a26d23098b0300a3d44f666fda2feaa3ec93a636282881ee50b9e32776e08e5338e4a8c887 languageName: node linkType: hard -"postcss-colormin@npm:^5.3.0": - version: 5.3.0 - resolution: "postcss-colormin@npm:5.3.0" +"postcss-colormin@npm:^5.2.1": + version: 5.2.1 + resolution: "postcss-colormin@npm:5.2.1" dependencies: browserslist: ^4.16.6 caniuse-api: ^3.0.0 colord: ^2.9.1 - postcss-value-parser: ^4.2.0 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: 3d3e3cc25071407fb73d68541ca1039ebd154fceb649041461a8a3cab0400cc89b42dbb34a4eeaf573be4ba2370ce23af5e01aff5e03a8d72275f40605577212 + checksum: c5337ae9477a6ad787a5bd366a6a418da65fd6212e4dade2ba14c5975faec5b16b69533fc0e5130f34b42a81bc2d1db17436b60f204ef7935cfc555187731579 languageName: node linkType: hard -"postcss-convert-values@npm:^5.1.2": - version: 5.1.2 - resolution: "postcss-convert-values@npm:5.1.2" +"postcss-convert-values@npm:^5.0.2": + version: 5.0.2 + resolution: "postcss-convert-values@npm:5.0.2" dependencies: - browserslist: ^4.20.3 - postcss-value-parser: ^4.2.0 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: b1615daf12d3425bf4edee9451de402702f41019ccfc85f7883d87438becf533b3061a5a3567865029c534147a6c90e89b4c42ae6741c768c879a68d35aea812 + checksum: 02a31f72b3365345db8aa1d83b084c96975d99a6494359378069431fd810e78ebf3bd96d03a598255daa8f6e2cd63722f119ddec9d24f66b6974b57819feb034 languageName: node linkType: hard -"postcss-discard-comments@npm:^5.1.2": - version: 5.1.2 - resolution: "postcss-discard-comments@npm:5.1.2" +"postcss-discard-comments@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-discard-comments@npm:5.0.1" peerDependencies: postcss: ^8.2.15 - checksum: abfd064ebc27aeaf5037643dd51ffaff74d1fa4db56b0523d073ace4248cbb64ffd9787bd6924b0983a9d0bd0e9bf9f10d73b120e50391dc236e0d26c812fa2a + checksum: c561952bbffa799cfc96216098d7ccc14b1dc776f0a8038c52eafe89fbec02701a234f35f7244aa06d58127103e7dd5f0bfd1db18a53c1438fef5c0a9b2dbddf languageName: node linkType: hard -"postcss-discard-duplicates@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-discard-duplicates@npm:5.1.0" +"postcss-discard-duplicates@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-discard-duplicates@npm:5.0.1" peerDependencies: postcss: ^8.2.15 - checksum: 88d6964201b1f4ed6bf7a32cefe68e86258bb6e42316ca01d9b32bdb18e7887d02594f89f4a2711d01b51ea6e3fcca8c54be18a59770fe5f4521c61d3eb6ca35 + checksum: becb68fd5ccd632fe51413a6ab4fd5c8aa3aae9d12947238014c2fb7816a2e0eb9a5454ee7207cac19f4a093c799be6053f13bf4048e97e20d88d5af4a0656bc languageName: node linkType: hard -"postcss-discard-empty@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-discard-empty@npm:5.1.1" +"postcss-discard-empty@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-discard-empty@npm:5.0.1" peerDependencies: postcss: ^8.2.15 - checksum: 970adb12fae5c214c0768236ad9a821552626e77dedbf24a8213d19cc2c4a531a757cd3b8cdd3fc22fb1742471b8692a1db5efe436a71236dec12b1318ee8ff4 + checksum: 2465ddabb18774c4996c18b8370498cf71597a23c45518ea75e7b73cd8f003b0be52ea9f27f28e24bba408d08ec5152e019cc595611bb097748993c1788d9f4f languageName: node linkType: hard -"postcss-discard-overridden@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-discard-overridden@npm:5.1.0" +"postcss-discard-overridden@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-discard-overridden@npm:5.0.1" peerDependencies: postcss: ^8.2.15 - checksum: d64d4a545aa2c81b22542895cfcddc787d24119f294d35d29b0599a1c818b3cc51f4ee80b80f5a0a09db282453dd5ac49f104c2117cc09112d0ac9b40b499a41 + checksum: 7da9a4bda963145c45b0b51ddf7684e37072569d6f5d22f6cab9f37ea953426274f52eeec87391cd2bd1dd561a6a26cbd1f39debb124ccd8b665b760eda849b4 languageName: node linkType: hard "postcss-load-config@npm:^3.0.0": - version: 3.1.4 - resolution: "postcss-load-config@npm:3.1.4" + version: 3.0.1 + resolution: "postcss-load-config@npm:3.0.1" dependencies: - lilconfig: ^2.0.5 - yaml: ^1.10.2 - peerDependencies: - postcss: ">=8.0.9" - ts-node: ">=9.0.0" - peerDependenciesMeta: - postcss: - optional: true - ts-node: - optional: true - checksum: 1c589504c2d90b1568aecae8238ab993c17dba2c44f848a8f13619ba556d26a1c09644d5e6361b5784e721e94af37b604992f9f3dc0483e687a0cc1cc5029a34 + cosmiconfig: ^7.0.0 + import-cwd: ^3.0.0 + checksum: f30ee3945d2534c1ab2f69181924318325bcbfacfcb3e3a48db3b9f7ffd5812ea27515a27c4f8dba127fdb41b1ca28c3d401c72ea6ed7e85decd04c66bd14c07 languageName: node linkType: hard -"postcss-merge-longhand@npm:^5.1.6": - version: 5.1.6 - resolution: "postcss-merge-longhand@npm:5.1.6" +"postcss-merge-longhand@npm:^5.0.4": + version: 5.0.4 + resolution: "postcss-merge-longhand@npm:5.0.4" dependencies: - postcss-value-parser: ^4.2.0 - stylehacks: ^5.1.0 + postcss-value-parser: ^4.1.0 + stylehacks: ^5.0.1 peerDependencies: postcss: ^8.2.15 - checksum: 327b5474d9e84b8d8aed3e24444938cbf1274326d357b551b700203f03f7bcb615381b92b933770ffe35b154677205af08875373413f2c5e625c34730599707b + checksum: 6c5ff2ae0e9def05a59cbb432b5cbbdb968816b83c4e38fdf14fa596ef21e36442f61b53984d56dca6165d91e74eadc720270b2887a4a1ef5e25ee171b7d7ea0 languageName: node linkType: hard -"postcss-merge-rules@npm:^5.1.2": - version: 5.1.2 - resolution: "postcss-merge-rules@npm:5.1.2" +"postcss-merge-rules@npm:^5.0.3": + version: 5.0.3 + resolution: "postcss-merge-rules@npm:5.0.3" dependencies: browserslist: ^4.16.6 caniuse-api: ^3.0.0 - cssnano-utils: ^3.1.0 + cssnano-utils: ^2.0.1 postcss-selector-parser: ^6.0.5 peerDependencies: postcss: ^8.2.15 - checksum: fcbc415999a35248dcce03064a5456123663507b05ff0f1de5c97b6effc68014ab0ffd5f06e71cf08d401f037932e271b7db33124c73260f3630a1441212a0c8 + checksum: 2e701693c6086cc88ac9e4d30a64471bd8da2e33b7e788b7bcbb4e91ecf87bbddc73529a1308a77953e0a2969f57f22714028547b8469db364b3d0d26b39eae2 languageName: node linkType: hard -"postcss-minify-font-values@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-minify-font-values@npm:5.1.0" +"postcss-minify-font-values@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-minify-font-values@npm:5.0.1" dependencies: - postcss-value-parser: ^4.2.0 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: 35e858fa41efa05acdeb28f1c76579c409fdc7eabb1744c3bd76e895bb9fea341a016746362a67609688ab2471f587202b9a3e14ea28ad677754d663a2777ece + checksum: 56aeb2cad5b3c4ca736b7fd7fa331d82281fbecc47e0e275a6a1203b436dbaa9f0772f668c3265dbf7ea2026c68d77c752cf9abe65bd3c65a53e696ae277e6e6 languageName: node linkType: hard -"postcss-minify-gradients@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-minify-gradients@npm:5.1.1" +"postcss-minify-gradients@npm:^5.0.3": + version: 5.0.3 + resolution: "postcss-minify-gradients@npm:5.0.3" dependencies: colord: ^2.9.1 - cssnano-utils: ^3.1.0 - postcss-value-parser: ^4.2.0 + cssnano-utils: ^2.0.1 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: 27354072a07c5e6dab36731103b94ca2354d4ed3c5bc6aacfdf2ede5a55fa324679d8fee5450800bc50888dbb5e9ed67569c0012040c2be128143d0cebb36d67 + checksum: 9ba5f28baeff45da8a5e759a748d5c26792e955d2cc061975c54f07d18f81518595353ddcd53dc5587342856425eefe909886b0a47bca392a9c9fcff297aab9e languageName: node linkType: hard -"postcss-minify-params@npm:^5.1.3": - version: 5.1.3 - resolution: "postcss-minify-params@npm:5.1.3" +"postcss-minify-params@npm:^5.0.2": + version: 5.0.2 + resolution: "postcss-minify-params@npm:5.0.2" dependencies: + alphanum-sort: ^1.0.2 browserslist: ^4.16.6 - cssnano-utils: ^3.1.0 - postcss-value-parser: ^4.2.0 + cssnano-utils: ^2.0.1 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: 2d218f6b82474310c866b690210595a5e6a4c695f174f9100b018adb4a171bd67b1adaba26c241b3d41a4ea0f4962e0f5a77cf12ae60d9db76f80b0c7cbd6bcd + checksum: 234e833e0d187106dd949a8973662168ba27e2a036ae4af979921375328ee77673ba5def616426ab9554f9224af8e3c73822193af5cbbdf98aadc0e39775724b languageName: node linkType: hard -"postcss-minify-selectors@npm:^5.2.1": - version: 5.2.1 - resolution: "postcss-minify-selectors@npm:5.2.1" +"postcss-minify-selectors@npm:^5.1.0": + version: 5.1.0 + resolution: "postcss-minify-selectors@npm:5.1.0" dependencies: + alphanum-sort: ^1.0.2 postcss-selector-parser: ^6.0.5 peerDependencies: postcss: ^8.2.15 - checksum: 6fdbc84f99a60d56b43df8930707da397775e4c36062a106aea2fd2ac81b5e24e584a1892f4baa4469fa495cb87d1422560eaa8f6c9d500f9f0b691a5f95bab5 + checksum: bf938e70a77b54d68709ec5e9a500b932e177b2278b5c405c3b59fb6f8315f2013e7b327ba76105949bf3c9ba6d6bef80ced4077cababb8e0015d87b4a086b50 languageName: node linkType: hard @@ -31614,10 +33411,10 @@ __metadata: linkType: hard "postcss-modules@npm:^4.0.0": - version: 4.3.1 - resolution: "postcss-modules@npm:4.3.1" + version: 4.0.0 + resolution: "postcss-modules@npm:4.0.0" dependencies: - generic-names: ^4.0.0 + generic-names: ^2.0.1 icss-replace-symbols: ^1.1.0 lodash.camelcase: ^4.3.0 postcss-modules-extract-imports: ^3.0.0 @@ -31627,174 +33424,192 @@ __metadata: string-hash: ^1.1.1 peerDependencies: postcss: ^8.0.0 - checksum: fa592183bb3d96c4aaf535e3b9b3bcfc54274cbb5b337616543c24ec68cd56675e9fd8aabf994e627513af628d090e43d2f1f4928ff6cdd4b9d3b1ba3fce4d42 + checksum: 8f50c241718955b94807b1066a843fc8c9a356bd28db7f9c30ddcc7dcf0b6a61d7e41c6b41ed5d6d7cfc341891f150fc69d57387910256588bbbe5bfd4ff74d6 languageName: node linkType: hard -"postcss-normalize-charset@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-normalize-charset@npm:5.1.0" +"postcss-normalize-charset@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-normalize-charset@npm:5.0.1" peerDependencies: postcss: ^8.2.15 - checksum: e79d92971fc05b8b3c9b72f3535a574e077d13c69bef68156a0965f397fdf157de670da72b797f57b0e3bac8f38155b5dd1735ecab143b9cc4032d72138193b4 + checksum: b74720bf0487809143a30e1965ff756698650abdd072f4fe81f0a32ce41e84c140f107b39ad0babf4d319aa620d1d4e01d1f89dc7c7b3f55fd3b27f243ee26e1 languageName: node linkType: hard -"postcss-normalize-display-values@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-normalize-display-values@npm:5.1.0" +"postcss-normalize-display-values@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-normalize-display-values@npm:5.0.1" dependencies: - postcss-value-parser: ^4.2.0 + cssnano-utils: ^2.0.1 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: b6eb7b9b02c3bdd62bbc54e01e2b59733d73a1c156905d238e178762962efe0c6f5104544da39f32cade8a4fb40f10ff54b63a8ebfbdff51e8780afb9fbdcf86 + checksum: ee84d379abd3fefcb23c09789a5f9d384a7f275d56e51b6ea149bf7a1cf512381bff0c3f00d938d0f91ab7c7fe00b19ace280cc3f84a100cd3cd8a604c4c7406 languageName: node linkType: hard -"postcss-normalize-positions@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-normalize-positions@npm:5.1.1" +"postcss-normalize-positions@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-normalize-positions@npm:5.0.1" dependencies: - postcss-value-parser: ^4.2.0 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: d9afc233729c496463c7b1cdd06732469f401deb387484c3a2422125b46ec10b4af794c101f8c023af56f01970b72b535e88373b9058ecccbbf88db81662b3c4 + checksum: 71a97ff851b78cdce8cc1ef21f91d40ddb2aca55d1bdc56056df27037efd9c208290f863ce0adf58a3060f8bb6eb3d66b4cf6d9a1e3ccbb03ba4eb0a0d1b6da4 languageName: node linkType: hard -"postcss-normalize-repeat-style@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-normalize-repeat-style@npm:5.1.1" +"postcss-normalize-repeat-style@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-normalize-repeat-style@npm:5.0.1" dependencies: - postcss-value-parser: ^4.2.0 + cssnano-utils: ^2.0.1 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: 2c6ad2b0ae10a1fda156b948c34f78c8f1e185513593de4d7e2480973586675520edfec427645fa168c337b0a6b3ceca26f92b96149741ca98a9806dad30d534 + checksum: 24f21dd8eee0f5ef9119e71ba57174f675d16fe9a8f368656d64a4e5f2d69cb41ae42f70b814e5ef40f93857ff759205642f78781ff8854f473b7d726e93bc99 languageName: node linkType: hard -"postcss-normalize-string@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-normalize-string@npm:5.1.0" +"postcss-normalize-string@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-normalize-string@npm:5.0.1" dependencies: - postcss-value-parser: ^4.2.0 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: 6e549c6e5b2831e34c7bdd46d8419e2278f6af1d5eef6d26884a37c162844e60339340c57e5e06058cdbe32f27fc6258eef233e811ed2f71168ef2229c236ada + checksum: 4b42d41a05780517647b9a55888d314bfdfda2042f7a84050555e64da5eccade966fdca645c4ef66503fa95d642e89f2950e5b556b2a38a1a8f3120a24816c73 languageName: node linkType: hard -"postcss-normalize-timing-functions@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-normalize-timing-functions@npm:5.1.0" +"postcss-normalize-timing-functions@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-normalize-timing-functions@npm:5.0.1" dependencies: - postcss-value-parser: ^4.2.0 + cssnano-utils: ^2.0.1 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: da550f50e90b0b23e17b67449a7d1efd1aa68288e66d4aa7614ca6f5cc012896be1972b7168eee673d27da36504faccf7b9f835c0f7e81243f966a42c8c030aa + checksum: fa58de8f9f6f8d4b507f9f029b18a0903a69a3b5088a2a1306e22163d81ca041d0f179888f5696516a9f75e188df904b0e082ec522b497a46ad1bfc24b06f348 languageName: node linkType: hard -"postcss-normalize-unicode@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-normalize-unicode@npm:5.1.0" +"postcss-normalize-unicode@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-normalize-unicode@npm:5.0.1" dependencies: - browserslist: ^4.16.6 - postcss-value-parser: ^4.2.0 + browserslist: ^4.16.0 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: 3570c90050f190811b5dbf7b4cf4f30f0b627c1ba5fbe5ad332e8b0aa7ef14b3d0aa2af1cb1074d0267aec8c9771e28866d867c8a8a0c433b6c34e50445f9c16 + checksum: d5a0e0c107639847709c1e9badf09267ee7c67206ac4c19df4f9479308866f0592773ff4063e58d48a6a1d638637a0f7b187ec429ddd3385bab32a06e2d020fd languageName: node linkType: hard -"postcss-normalize-url@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-normalize-url@npm:5.1.0" +"postcss-normalize-url@npm:^5.0.3": + version: 5.0.3 + resolution: "postcss-normalize-url@npm:5.0.3" dependencies: + is-absolute-url: ^3.0.3 normalize-url: ^6.0.1 - postcss-value-parser: ^4.2.0 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: 3bd4b3246d6600230bc827d1760b24cb3101827ec97570e3016cbe04dc0dd28f4dbe763245d1b9d476e182c843008fbea80823061f1d2219b96f0d5c724a24c0 + checksum: 34dfc8d1d71f0cf073d3f3edfc94a5381d659275103240c15bb3d4f424e70ceec431dc663c7403e1b813d98f45fb5174f7f0c3fe9fb6b00cdbd62f3ac2f0032c languageName: node linkType: hard -"postcss-normalize-whitespace@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-normalize-whitespace@npm:5.1.1" +"postcss-normalize-whitespace@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-normalize-whitespace@npm:5.0.1" dependencies: - postcss-value-parser: ^4.2.0 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: 12d8fb6d1c1cba208cc08c1830959b7d7ad447c3f5581873f7e185f99a9a4230c43d3af21ca12c818e4690a5085a95b01635b762ad4a7bef69d642609b4c0e19 + checksum: cefb27d2443d4a8fc34aa2a0aebd470d7d5a58d9adcf39f5e2a80455f4ab37b171a24f58dc47b3111232c1adbb1c8702f80c0ecac1cfcef03e48e00dac6a4a58 languageName: node linkType: hard -"postcss-ordered-values@npm:^5.1.3": - version: 5.1.3 - resolution: "postcss-ordered-values@npm:5.1.3" +"postcss-ordered-values@npm:^5.0.2": + version: 5.0.2 + resolution: "postcss-ordered-values@npm:5.0.2" dependencies: - cssnano-utils: ^3.1.0 - postcss-value-parser: ^4.2.0 + cssnano-utils: ^2.0.1 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: 6f3ca85b6ceffc68aadaf319d9ee4c5ac16d93195bf8cba2d1559b631555ad61941461cda6d3909faab86e52389846b2b36345cff8f0c3f4eb345b1b8efadcf9 + checksum: 80b1cab96e3e9caf23de9b5436b36d7dc1efdd7ff9ee7b02c5ddc88c3564ec5adfa08e66f64c3b335beeb74a8c690a89e1594be14f2d5b708deb2c259de69619 languageName: node linkType: hard -"postcss-reduce-initial@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-reduce-initial@npm:5.1.0" +"postcss-reduce-initial@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-reduce-initial@npm:5.0.1" dependencies: - browserslist: ^4.16.6 + browserslist: ^4.16.0 caniuse-api: ^3.0.0 peerDependencies: postcss: ^8.2.15 - checksum: 2cb10fa3fa7d7df9e4376df64d19177debd5cfe6d8fde52327d27de425eb28d5d85fa45c857cf7c0aed35d16455b6f4762b53959480f92a1dfa4b51a1d780a32 + checksum: c33306694ebd98e8a9402bf9eef1b1724e351e884d0c10f4c77ee34e8f603442d45c20862794ee05793b29d5c10f23b0e3f5697f02600b568911d48be41d421a languageName: node linkType: hard -"postcss-reduce-transforms@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-reduce-transforms@npm:5.1.0" +"postcss-reduce-transforms@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-reduce-transforms@npm:5.0.1" dependencies: - postcss-value-parser: ^4.2.0 + cssnano-utils: ^2.0.1 + postcss-value-parser: ^4.1.0 peerDependencies: postcss: ^8.2.15 - checksum: 0c6af2cba20e3ff63eb9ad045e634ddfb9c3e5c0e614c020db2a02f3aa20632318c4ede9e0c995f9225d9a101e673de91c0a6e10bb2fa5da6d6c75d15a55882f + checksum: 89e033ba1fe92057e6196237d5ae6f30b7ca86a98d91a01aa1853baea36ea6c092d29d354d3281000a618445a780c30277868b10d517015317fdc8b97739d34e languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.9": - version: 6.0.10 - resolution: "postcss-selector-parser@npm:6.0.10" +"postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4": + version: 6.0.4 + resolution: "postcss-selector-parser@npm:6.0.4" + dependencies: + cssesc: ^3.0.0 + indexes-of: ^1.0.1 + uniq: ^1.0.1 + util-deprecate: ^1.0.2 + checksum: 2030e3439a5841d0d1bbe3e7a77515bc677397b0073691e8dc4e1168ecd8a7adc8aba2ce7f274d1b2654b73c94818758d335ecbf85e1b29705d17180030f8164 + languageName: node + linkType: hard + +"postcss-selector-parser@npm:^6.0.5": + version: 6.0.6 + resolution: "postcss-selector-parser@npm:6.0.6" dependencies: cssesc: ^3.0.0 util-deprecate: ^1.0.2 - checksum: 46afaa60e3d1998bd7adf6caa374baf857cc58d3ff944e29459c9a9e4680a7fe41597bd5b755fc81d7c388357e9bf67c0251d047c640a09f148e13606b8a8608 + checksum: 3602758798048bffbd6a97d6f009b32a993d6fd2cc70775bb59593e803d7fa8738822ecffb2fafc745edf7fad297dad53c30d2cfe78446a7d3f4a4a258cb15b2 languageName: node linkType: hard -"postcss-svgo@npm:^5.1.0": - version: 5.1.0 - resolution: "postcss-svgo@npm:5.1.0" +"postcss-svgo@npm:^5.0.3": + version: 5.0.3 + resolution: "postcss-svgo@npm:5.0.3" dependencies: - postcss-value-parser: ^4.2.0 + postcss-value-parser: ^4.1.0 svgo: ^2.7.0 peerDependencies: postcss: ^8.2.15 - checksum: d86eb5213d9f700cf5efe3073799b485fb7cacae0c731db3d7749c9c2b1c9bc85e95e0baeca439d699ff32ea24815fc916c4071b08f67ed8219df229ce1129bd + checksum: 7da0bfd6ecae300f1d82432d987ed3a4034a1502c4c458a0cf7284e172e8e86aa5098a89d9c23ee6b1360695c969f0f61ed776dd8098e26ee2a0b132ff1a7a5d languageName: node linkType: hard -"postcss-unique-selectors@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-unique-selectors@npm:5.1.1" +"postcss-unique-selectors@npm:^5.0.2": + version: 5.0.2 + resolution: "postcss-unique-selectors@npm:5.0.2" dependencies: + alphanum-sort: ^1.0.2 postcss-selector-parser: ^6.0.5 peerDependencies: postcss: ^8.2.15 - checksum: 637e7b786e8558265775c30400c54b6b3b24d4748923f4a39f16a65fd0e394f564ccc9f0a1d3c0e770618a7637a7502ea1d0d79f731d429cb202255253c23278 + checksum: ad0f7a8a4f1ed958544c1ede62a1c4b0978e01627a6ef0642f7b044d0f9fdb331318a91f8312f418a773b0f2df06c50896cfaf7e5dd3d0142bd1e5ba75dc9eb7 languageName: node linkType: hard @@ -31838,9 +33653,9 @@ __metadata: linkType: hard "postgres-date@npm:~1.0.4": - version: 1.0.7 - resolution: "postgres-date@npm:1.0.7" - checksum: 5745001d47e51cd767e46bcb1710649cd705d91a24d42fa661c454b6dcbb7353c066a5047983c90a626cd3bbfea9e626cc6fa84a35ec57e5bbb28b49f78e13ed + version: 1.0.5 + resolution: "postgres-date@npm:1.0.5" + checksum: 67e5b65daf5080394ef9cd12e15dd9e9720a54dcefa5e1f0dbd85512b761c1b837858cac7763c1c29f398a7a39854de9815d13479eab032317313ed50280ebb3 languageName: node linkType: hard @@ -31854,8 +33669,8 @@ __metadata: linkType: hard "prebuild-install@npm:^7.1.0": - version: 7.1.1 - resolution: "prebuild-install@npm:7.1.1" + version: 7.1.0 + resolution: "prebuild-install@npm:7.1.0" dependencies: detect-libc: ^2.0.0 expand-template: ^2.0.3 @@ -31864,6 +33679,7 @@ __metadata: mkdirp-classic: ^0.5.3 napi-build-utils: ^1.0.1 node-abi: ^3.3.0 + npmlog: ^4.0.1 pump: ^3.0.0 rc: ^1.2.7 simple-get: ^4.0.0 @@ -31871,7 +33687,7 @@ __metadata: tunnel-agent: ^0.6.0 bin: prebuild-install: bin.js - checksum: dbf96d0146b6b5827fc8f67f72074d2e19c69628b9a7a0a17d0fad1bf37e9f06922896972e074197fc00a52eae912993e6ef5a0d471652f561df5cb516f3f467 + checksum: 204f2d89c6d6179fa1039036514aa72f7d0b537e421ef72c40840286e318f41489f00f22c6acc725cce6e10d43825b69dcabeaadfc917db781c58cd56fc25f90 languageName: node linkType: hard @@ -31943,7 +33759,7 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^27.0.0, pretty-format@npm:^27.0.2, pretty-format@npm:^27.5.1": +"pretty-format@npm:^27.0.0, pretty-format@npm:^27.5.1": version: 27.5.1 resolution: "pretty-format@npm:27.5.1" dependencies: @@ -31954,25 +33770,28 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.0.3": - version: 29.0.3 - resolution: "pretty-format@npm:29.0.3" +"pretty-format@npm:^27.0.2": + version: 27.3.1 + resolution: "pretty-format@npm:27.3.1" dependencies: - "@jest/schemas": ^29.0.0 + "@jest/types": ^27.2.5 + ansi-regex: ^5.0.1 ansi-styles: ^5.0.0 - react-is: ^18.0.0 - checksum: 239aa73b09919b195353e62530908b43883af66e3ba8ecb5fda77578b20f297fd774fcf53abbedcb6cfff72521e8a220052a49e6a0e29418082d06386da27bac + react-is: ^17.0.1 + checksum: 2979eae85a4f7ba1c3946faa8f5c6497cc80dc64ba499ccd5fdada267f82dc664f315a4c1cdd4c0b4b97edbae399a7bf0a957cc1b87feb91cd95f1e436834fed languageName: node linkType: hard -"prismjs@npm:^1.27.0": - version: 1.29.0 - resolution: "prismjs@npm:1.29.0" - checksum: 007a8869d4456ff8049dc59404e32d5666a07d99c3b0e30a18bd3b7676dfa07d1daae9d0f407f20983865fd8da56de91d09cb08e6aa61f5bc420a27c0beeaf93 +"printj@npm:~1.1.0": + version: 1.1.2 + resolution: "printj@npm:1.1.2" + bin: + printj: ./bin/printj.njs + checksum: 1c0c66844545415e339356ad62009cdc467819817b1e0341aba428087a1414d46b84089edb4e77ef24705829f8aae6349724b9c7bd89d8690302b2de7a89b315 languageName: node linkType: hard -"prismjs@npm:~1.27.0": +"prismjs@npm:^1.27.0, prismjs@npm:~1.27.0": version: 1.27.0 resolution: "prismjs@npm:1.27.0" checksum: 85c7f4a3e999073502cc9e1882af01e3709706369ec254b60bff1149eda701f40d02512acab956012dc7e61cfd61743a3a34c1bd0737e8dbacd79141e5698bbc @@ -31986,7 +33805,7 @@ __metadata: languageName: node linkType: hard -"proc-log@npm:^2.0.0, proc-log@npm:^2.0.1": +"proc-log@npm:^2.0.0": version: 2.0.1 resolution: "proc-log@npm:2.0.1" checksum: f6f23564ff759097db37443e6e2765af84979a703d2c52c1b9df506ee9f87caa101ba49d8fdc115c1a313ec78e37e8134704e9069e6a870f3499d98bb24c436f @@ -32117,9 +33936,9 @@ __metadata: linkType: hard "property-expr@npm:^2.0.4": - version: 2.0.5 - resolution: "property-expr@npm:2.0.5" - checksum: 4ebe82ce45aaf1527e96e2ab84d75d25217167ec3ff6378cf83a84fb4abc746e7c65768a79d275881602ae82f168f9a6dfaa7f5e331d0fcc83d692770bcce5f1 + version: 2.0.4 + resolution: "property-expr@npm:2.0.4" + checksum: 7ac142e189f0feef685f327f582efe13bfbc24a0b6e2328afdb38520bc140caa5f91dfa9529f2539b4468d85dc83a593e1ef0e0f7401b525368bb634b323bf54 languageName: node linkType: hard @@ -32133,9 +33952,9 @@ __metadata: linkType: hard "property-information@npm:^6.0.0": - version: 6.1.1 - resolution: "property-information@npm:6.1.1" - checksum: 654b1e5c3578e1d522bd22b7cf48881f5054789969ddbefea22e5359805fda5dbf0c5ef76bb26516da26fedac8752587ddc4c8f3b9e16bc0c6e7feb8b6086864 + version: 6.0.1 + resolution: "property-information@npm:6.0.1" + checksum: 9a147208ae3bb98629012d384cd8184f5021d60aee9f67d0459605e0c94e2f24db9e263d2b67c333e79981cd7349172a524638681d6e167ddf1c7f06cb2ff2c6 languageName: node linkType: hard @@ -32147,17 +33966,17 @@ __metadata: linkType: hard "proto3-json-serializer@npm:^1.0.0": - version: 1.1.0 - resolution: "proto3-json-serializer@npm:1.1.0" + version: 1.0.0 + resolution: "proto3-json-serializer@npm:1.0.0" dependencies: - protobufjs: ^7.0.0 - checksum: a68f7102746a21e2fe6d7afdf89f47b94084a1165ca3062e284922ecca12f20a3ec911bc5f3fdb63fc0cfc9a0cff2b4396befb988c66061ae686d17ff0b6a9fd + protobufjs: ^6.11.2 + checksum: 47ac3b7c48eb177aba3e59431704c5db24d670827bd47ef7488e3529ab85e0de4833ed22615945fa72597dd382aa505b8dd427c917c4c50d31e7570d8af21294 languageName: node linkType: hard -"protobufjs-cli@npm:1.0.2": - version: 1.0.2 - resolution: "protobufjs-cli@npm:1.0.2" +"protobufjs-cli@npm:1.0.0": + version: 1.0.0 + resolution: "protobufjs-cli@npm:1.0.0" dependencies: chalk: ^4.0.0 escodegen: ^1.13.0 @@ -32174,13 +33993,13 @@ __metadata: bin: pbjs: bin/pbjs pbts: bin/pbts - checksum: 75dfa8bb76ea390c4f4926120439892fce6c730ec56960e85d5f03cac9c390fd7467d1254833542d722616ab4cb64a622e6de2fb7c75e7c42972878ae447b773 + checksum: 3346b3ebb0b8a1e6eb2c319f92d0e193632c8068a4b3f2379e8a655c03c359a7a723606f356014eaba70e23423a9e112c274262dfb36369ca57eb6219248bf38 languageName: node linkType: hard -"protobufjs@npm:7.1.1, protobufjs@npm:^7.0.0": - version: 7.1.1 - resolution: "protobufjs@npm:7.1.1" +"protobufjs@npm:6.11.3, protobufjs@npm:^6.10.0, protobufjs@npm:^6.11.2": + version: 6.11.3 + resolution: "protobufjs@npm:6.11.3" dependencies: "@protobufjs/aspromise": ^1.1.2 "@protobufjs/base64": ^1.1.2 @@ -32192,16 +34011,41 @@ __metadata: "@protobufjs/path": ^1.1.2 "@protobufjs/pool": ^1.1.0 "@protobufjs/utf8": ^1.1.0 + "@types/long": ^4.0.1 "@types/node": ">=13.7.0" - long: ^5.0.0 - checksum: f6b0e7cec29056cefb83902009b39d24ac14a6117b52bc9b291b29778dad010e42d5563a20045e4de89b880114f4214f984396c8296a0d1b22f5dc7d9fe6705e + long: ^4.0.0 + bin: + pbjs: bin/pbjs + pbts: bin/pbts + checksum: 4a6ce1964167e4c45c53fd8a312d7646415c777dd31b4ba346719947b88e61654912326101f927da387d6b6473ab52a7ea4f54d6f15d63b31130ce28e2e15070 languageName: node linkType: hard -"protocols@npm:^1.4.0": - version: 1.4.8 - resolution: "protocols@npm:1.4.8" - checksum: 2d555c013df0b05402970f67f7207c9955a92b1d13ffa503c814b5fe2f6dde7ac6a03320e0975c1f5832b0113327865e0b3b28bfcad023c25ddb54b53fab8684 +"protobufjs@npm:7.0.0, protobufjs@npm:^7.0.0": + version: 7.0.0 + resolution: "protobufjs@npm:7.0.0" + dependencies: + "@protobufjs/aspromise": ^1.1.2 + "@protobufjs/base64": ^1.1.2 + "@protobufjs/codegen": ^2.0.4 + "@protobufjs/eventemitter": ^1.1.0 + "@protobufjs/fetch": ^1.1.0 + "@protobufjs/float": ^1.0.2 + "@protobufjs/inquire": ^1.1.0 + "@protobufjs/path": ^1.1.2 + "@protobufjs/pool": ^1.1.0 + "@protobufjs/utf8": ^1.1.0 + "@types/long": ^4.0.1 + "@types/node": ">=13.7.0" + long: ^5.0.0 + checksum: 84c12ceef34d190bb0e08c7203a4e066c66b67fa788ac18575b5c45a269a515c3921b13116e12fe55ffe1fd4831ce208481d44231b75dbe0a8730ab4ca51c84b + languageName: node + linkType: hard + +"protocols@npm:^1.1.0, protocols@npm:^1.4.0": + version: 1.4.7 + resolution: "protocols@npm:1.4.7" + checksum: e4be48f9304303bdbca6159cbbf04edc91ff34921e6e3e3e75ea29eb02e64b38191b73f3404d14f551af87b53572a321b59a402b31a3a2005d62b668b35a8b53 languageName: node linkType: hard @@ -32255,9 +34099,9 @@ __metadata: linkType: hard "psl@npm:^1.1.28, psl@npm:^1.1.33": - version: 1.9.0 - resolution: "psl@npm:1.9.0" - checksum: 20c4277f640c93d393130673f392618e9a8044c6c7bf61c53917a0fddb4952790f5f362c6c730a9c32b124813e173733f9895add8d26f566ed0ea0654b2e711d + version: 1.8.0 + resolution: "psl@npm:1.8.0" + checksum: 6150048ed2da3f919478bee8a82f3828303bc0fc730fb015a48f83c9977682c7b28c60ab01425a72d82a2891a1681627aa530a991d50c086b48a3be27744bde7 languageName: node linkType: hard @@ -32355,7 +34199,7 @@ __metadata: languageName: node linkType: hard -"qs@npm:6.10.3": +"qs@npm:6.10.3, qs@npm:^6.10.1, qs@npm:^6.10.2, qs@npm:^6.10.3, qs@npm:^6.9.1, qs@npm:^6.9.4, qs@npm:^6.9.6": version: 6.10.3 resolution: "qs@npm:6.10.3" dependencies: @@ -32371,43 +34215,29 @@ __metadata: languageName: node linkType: hard -"qs@npm:^6.10.1, qs@npm:^6.10.2, qs@npm:^6.10.3, qs@npm:^6.9.1, qs@npm:^6.9.4, qs@npm:^6.9.6": - version: 6.11.0 - resolution: "qs@npm:6.11.0" - dependencies: - side-channel: ^1.0.4 - checksum: 6e1f29dd5385f7488ec74ac7b6c92f4d09a90408882d0c208414a34dd33badc1a621019d4c799a3df15ab9b1d0292f97c1dd71dc7c045e69f81a8064e5af7297 +"qs@npm:6.9.7": + version: 6.9.7 + resolution: "qs@npm:6.9.7" + checksum: 5bbd263332ccf320a1f36d04a2019a5834dc20bcb736431eaccde2a39dcba03fb26d2fd00174f5d7bc26aaad1cad86124b18440883ac042ea2a0fca6170c1bf1 languageName: node linkType: hard "qs@npm:~6.5.2": - version: 6.5.3 - resolution: "qs@npm:6.5.3" - checksum: 6f20bf08cabd90c458e50855559539a28d00b2f2e7dddcb66082b16a43188418cb3cb77cbd09268bcef6022935650f0534357b8af9eeb29bf0f27ccb17655692 - languageName: node - linkType: hard - -"query-string@npm:^6.13.8": - version: 6.14.1 - resolution: "query-string@npm:6.14.1" - dependencies: - decode-uri-component: ^0.2.0 - filter-obj: ^1.1.0 - split-on-first: ^1.0.0 - strict-uri-encode: ^2.0.0 - checksum: f2c7347578fa0f3fd4eaace506470cb4e9dc52d409a7ddbd613f614b9a594d750877e193b5d5e843c7477b3b295b857ec328903c943957adc41a3efb6c929449 + version: 6.5.2 + resolution: "qs@npm:6.5.2" + checksum: 24af7b9928ba2141233fba2912876ff100403dba1b08b20c3b490da9ea6c636760445ea2211a079e7dfa882a5cf8f738337b3748c8bdd0f93358fa8881d2db8f languageName: node linkType: hard "query-string@npm:^7.0.0": - version: 7.1.1 - resolution: "query-string@npm:7.1.1" + version: 7.0.0 + resolution: "query-string@npm:7.0.0" dependencies: decode-uri-component: ^0.2.0 filter-obj: ^1.1.0 split-on-first: ^1.0.0 strict-uri-encode: ^2.0.0 - checksum: b227d1f588ae93f9f0ad078c6b811295fa151dc5a160a03bb2bac5fa0e6919cb1daa570aad1d288e77c8e89fde5362ba505b1014e6e793da9b1e885b59a690a6 + checksum: 6e3c4376ff01f49bf2300b36e37291e2d3be8df4fe1839d048dd89d4166b92ecd67525c88ca66b61cbc5612ca29fa4e40002d25a74f59b99f7022045b9e7abd2 languageName: node linkType: hard @@ -32432,13 +34262,6 @@ __metadata: languageName: node linkType: hard -"queue-microtask@npm:^1.2.2": - version: 1.2.3 - resolution: "queue-microtask@npm:1.2.3" - checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 - languageName: node - linkType: hard - "quick-format-unescaped@npm:^3.0.3": version: 3.0.3 resolution: "quick-format-unescaped@npm:3.0.3" @@ -32461,9 +34284,9 @@ __metadata: linkType: hard "raf-schd@npm:^4.0.2": - version: 4.0.3 - resolution: "raf-schd@npm:4.0.3" - checksum: 45514041c5ad31fa96aef3bb3c572a843b92da2f2cd1cb4a47c9ad58e48761d3a4126e18daa32b2bfa0bc2551a42d8f324a0e40e536cb656969929602b4e8b58 + version: 4.0.2 + resolution: "raf-schd@npm:4.0.2" + checksum: 9af6e00e36b2844371c61da071cf1fa0d6093dc20eadc654fbb3d940a713df61f037c2e24287eebe8201a41b6acc910b865a4e24010b3a09aba7f4a9616b975a languageName: node linkType: hard @@ -32533,6 +34356,18 @@ __metadata: languageName: node linkType: hard +"raw-body@npm:2.4.3": + version: 2.4.3 + resolution: "raw-body@npm:2.4.3" + dependencies: + bytes: 3.1.2 + http-errors: 1.8.1 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + checksum: d2961fa3c71c9c22dc2c3fd60ff377bf36dfed7d7a748f2b25d585934a3e9df565bb9aa5bc2e3a716ea941f4bc2a6ddc795c8b0cf7219fb071029b59b1985394 + languageName: node + linkType: hard + "raw-body@npm:2.5.1, raw-body@npm:^2.4.1": version: 2.5.1 resolution: "raw-body@npm:2.5.1" @@ -32560,16 +34395,16 @@ __metadata: linkType: hard "rc-util@npm:^5.16.1": - version: 5.24.3 - resolution: "rc-util@npm:5.24.3" + version: 5.16.1 + resolution: "rc-util@npm:5.16.1" dependencies: - "@babel/runtime": ^7.18.3 + "@babel/runtime": ^7.12.5 react-is: ^16.12.0 shallowequal: ^1.1.0 peerDependencies: react: ">=16.9.0" react-dom: ">=16.9.0" - checksum: 1f141d114f42dbce9f51cc2e408da7c706bba453880efe85c02155aab4e790690cd2b97fdbe501a8524c7f95a35757973bf0bbf59619b455407e63b8d2ebee17 + checksum: f2a6fd262d91d0b2ee1d84853c5ab212c9138b535ce5df8fa807fad4d8772539cbf0fee8cf7044ce9d47d8847950dfa5ae2f884c40eda9b0e9879050e4d549ec languageName: node linkType: hard @@ -32588,20 +34423,20 @@ __metadata: linkType: hard "react-beautiful-dnd@npm:^13.0.0": - version: 13.1.1 - resolution: "react-beautiful-dnd@npm:13.1.1" + version: 13.0.0 + resolution: "react-beautiful-dnd@npm:13.0.0" dependencies: - "@babel/runtime": ^7.9.2 + "@babel/runtime": ^7.8.4 css-box-model: ^1.2.0 memoize-one: ^5.1.1 raf-schd: ^4.0.2 - react-redux: ^7.2.0 + react-redux: ^7.1.1 redux: ^4.0.4 use-memo-one: ^1.1.1 peerDependencies: - react: ^16.8.5 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.5 || ^17.0.0 || ^18.0.0 - checksum: 5f90f7c0ab77a14dfcd496cbd94bbde457612f380c6fc815f3bba7b52effd75132948fcaa661a902a184bb1e6ae5896dcf5b0c77c4ddf809a2c65288f3eed5a7 + react: ^16.8.5 + react-dom: ^16.8.5 + checksum: ccf98ce502b5a290daa304d24a1b3ea0e54d43627cda0cdc8eeb65bb84c99e3928098f13e2b09452d02e94974800adaa0a269756500716f19b40ba0bcf9b597b languageName: node linkType: hard @@ -32710,13 +34545,13 @@ __metadata: linkType: hard "react-error-boundary@npm:^3.1.0": - version: 3.1.4 - resolution: "react-error-boundary@npm:3.1.4" + version: 3.1.3 + resolution: "react-error-boundary@npm:3.1.3" dependencies: "@babel/runtime": ^7.12.5 peerDependencies: react: ">=16.13.1" - checksum: f36270a5d775a25c8920f854c0d91649ceea417b15b5bc51e270a959b0476647bb79abb4da3be7dd9a4597b029214e8fe43ea914a7f16fa7543c91f784977f1b + checksum: 0a05af404aa054c54d7bc65a1814810093bf136c3ad4b3576a51d8509ee8fc302adfb66405da501fc01e839db557dd0d994b487e651897e36293907bb61458cf languageName: node linkType: hard @@ -32759,11 +34594,11 @@ __metadata: linkType: hard "react-hook-form@npm:^7.12.2, react-hook-form@npm:^7.13.0": - version: 7.35.0 - resolution: "react-hook-form@npm:7.35.0" + version: 7.32.2 + resolution: "react-hook-form@npm:7.32.2" peerDependencies: react: ^16.8.0 || ^17 || ^18 - checksum: e0e78de4a08fdae9eebf248ddefd99ff35d4964ef2815006704ae4a43972786f62dede3847b41e29d3e89ea6cb16c8f5837b1e00238aa65f7c38cb52aabcaf5b + checksum: abe8ba146c313d206f99a01260457bc72af03b2c73d7bd4be5af11598140ec45ef1ef37bac64b80c4dbc298d6aa21af4caa259a133f305a04ddf583faa18e7d0 languageName: node linkType: hard @@ -32818,7 +34653,7 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.8.0 || ^17.0.0, react-is@npm:^17.0.1, react-is@npm:^17.0.2": +"react-is@npm:^16.8.0 || ^17.0.0, react-is@npm:^17.0.1": version: 17.0.2 resolution: "react-is@npm:17.0.2" checksum: 9d6d111d8990dc98bc5402c1266a808b0459b5d54830bbea24c12d908b536df7883f268a7868cfaedde3dd9d4e0d574db456f84d2e6df9c4526f99bb4b5344d8 @@ -32826,9 +34661,9 @@ __metadata: linkType: hard "react-is@npm:^18.0.0": - version: 18.2.0 - resolution: "react-is@npm:18.2.0" - checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e + version: 18.0.0 + resolution: "react-is@npm:18.0.0" + checksum: d38f6afee4d8d791cdd69c715841c01a503c9b06da6158e0893447cea6ba50cd262dca9bde84127720cf44fd05c58185eafc32accace4bb2deb03b3cdbeb6b6b languageName: node linkType: hard @@ -32865,24 +34700,24 @@ __metadata: languageName: node linkType: hard -"react-redux@npm:^7.2.0, react-redux@npm:^7.2.4": - version: 7.2.8 - resolution: "react-redux@npm:7.2.8" +"react-redux@npm:^7.1.1, react-redux@npm:^7.2.4": + version: 7.2.5 + resolution: "react-redux@npm:7.2.5" dependencies: - "@babel/runtime": ^7.15.4 - "@types/react-redux": ^7.1.20 + "@babel/runtime": ^7.12.1 + "@types/react-redux": ^7.1.16 hoist-non-react-statics: ^3.3.2 loose-envify: ^1.4.0 prop-types: ^15.7.2 - react-is: ^17.0.2 + react-is: ^16.13.1 peerDependencies: - react: ^16.8.3 || ^17 || ^18 + react: ^16.8.3 || ^17 peerDependenciesMeta: react-dom: optional: true react-native: optional: true - checksum: ecf1933e91013f2d41bfc781515b536bf81eb1f70ff228607841094c8330fe77d522372b359687e51c0b52b9888dba73db9ac0486aace1896ab9eb9daec102d5 + checksum: 04ac4a4178067cbcfc05506dfea9f7e01730093a5752f050567f7ae4a38c03c96da9d8fed051f8ab1ecede5ea8a15ee41c5f6c5eeb7f04f37e4d13e431ec7830 languageName: node linkType: hard @@ -32907,15 +34742,17 @@ __metadata: languageName: node linkType: hard -"react-resize-detector@npm:^7.1.2": - version: 7.1.2 - resolution: "react-resize-detector@npm:7.1.2" +"react-resize-detector@npm:^6.6.3": + version: 6.7.8 + resolution: "react-resize-detector@npm:6.7.8" dependencies: + "@types/resize-observer-browser": ^0.1.6 lodash: ^4.17.21 + resize-observer-polyfill: ^1.5.1 peerDependencies: - react: ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 - checksum: 55f4abad7f7523d16b081b5ab20f75c539a54a08253ce7e9df473d48386f42ceca6c31584ba9fa26e3528b498ef6685ec77fb9a22cffc97df05fb326d0bf1b26 + react: ^16.0.0 || ^17.0.0 + react-dom: ^16.0.0 || ^17.0.0 + checksum: dc8acbe216f70a60466d55d4f47c1468fecf074544a1e07234461b36eefed2b222f6e550c91e7ae02983e2842308d2a48ba8383029efb5d27ac749c48e3a09ae languageName: node linkType: hard @@ -32946,40 +34783,41 @@ __metadata: linkType: hard "react-router-dom-stable@npm:react-router-dom@^6.3.0, react-router-dom@npm:^6.3.0": - version: 6.4.0 - resolution: "react-router-dom@npm:6.4.0" + version: 6.3.0 + resolution: "react-router-dom@npm:6.3.0" dependencies: - react-router: 6.4.0 + history: ^5.2.0 + react-router: 6.3.0 peerDependencies: react: ">=16.8" react-dom: ">=16.8" - checksum: 5595bb168ce4a67ff72c1e3c1a9509bd1931da00f19c29d325b68a5a189577342d071a3c25f7c11dc7b489bcd48144206e4bc65e5be15ee9bc92515f0c1a0737 + checksum: 77603a654f8a8dc7f65535a2e5917a65f8d9ffcb06546d28dd297e52adcc4b8a84377e0115f48dca330b080af2da3e78f29d590c89307094d36927d2b1751ec3 languageName: node linkType: hard -"react-router-stable@npm:react-router@^6.3.0, react-router@npm:6.4.0, react-router@npm:^6.3.0": - version: 6.4.0 - resolution: "react-router@npm:6.4.0" +"react-router-stable@npm:react-router@^6.3.0, react-router@npm:6.3.0, react-router@npm:^6.3.0": + version: 6.3.0 + resolution: "react-router@npm:6.3.0" dependencies: - "@remix-run/router": 1.0.0 + history: ^5.2.0 peerDependencies: react: ">=16.8" - checksum: d2bc04f9a5a931256f35217cbbb0da7047bb5368831d300153155222b2994c9a263f598fe2ef213d530663b86cef59a9bef1912f60bd11779214794164fa290c + checksum: 7be673f5e72104be01e6ab274516bdb932efd93305243170690f6560e3bd1035dd1df3d3c9ce1e0f452638a2529f43a1e77dcf0934fc8031c4783da657be13ca languageName: node linkType: hard "react-side-effect@npm:^2.1.0": - version: 2.1.2 - resolution: "react-side-effect@npm:2.1.2" + version: 2.1.0 + resolution: "react-side-effect@npm:2.1.0" peerDependencies: - react: ^16.3.0 || ^17.0.0 || ^18.0.0 - checksum: c5eb1f42b464fb093bca59aaae0f1b2060373a2aaff95275b8781493628cdbbb6acdd6014e7883782c65c361f35a30f28cc515d68a1263ddb39cbbc47110be53 + react: ^16.3.0 + checksum: 9bd58e63d6b38246f5a7f2e11aeaa57e52edf117eb3fc1304acee1b4de96d4b0a73cebf4cc874445edddb8196b72d015c60714e4b03152323fac8a70cdcecde6 languageName: node linkType: hard "react-smooth@npm:^1.0.5": - version: 1.0.6 - resolution: "react-smooth@npm:1.0.6" + version: 1.0.5 + resolution: "react-smooth@npm:1.0.5" dependencies: lodash: ~4.17.4 prop-types: ^15.6.0 @@ -32988,21 +34826,22 @@ __metadata: peerDependencies: react: ^15.0.0 || ^16.0.0 react-dom: ^15.0.0 || ^16.0.0 - checksum: ade69a9e120a275a0b67b7c8335168d3f7c74be4a3f1c60d099ab1c565cfa7bbf30dd49279214e7e847d86720f57bafce986d43814d17cbc13e8217fdac018f5 + checksum: 29a2a00e09e0f5d4dea4424f945dc7dab9b611184c60b01bd24082b6293f9e5e4bafe0e4386d4c52a2c9c651caff3eeb5ce0966917a0bd06ba1165306853c822 languageName: node linkType: hard -"react-smooth@npm:^2.0.1": - version: 2.0.1 - resolution: "react-smooth@npm:2.0.1" +"react-smooth@npm:^2.0.0": + version: 2.0.0 + resolution: "react-smooth@npm:2.0.0" dependencies: fast-equals: ^2.0.0 + raf: ^3.4.0 react-transition-group: 2.9.0 peerDependencies: prop-types: ^15.6.0 - react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - checksum: 65678491cbd506573f2dba82778ebf8259714d68dd227e0ee7c0e204bcbc7839cf97401620b4223814066581f1dce0493f97162a03dc2a68058b5a7ad2b41085 + react: ^15.0.0 || ^16.0.0 || ^17.0.0 + react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 + checksum: 4eff3fb93067b538e046df2c56a2f99b25f4c3a2aafc1c59707d1a0150f7f0afab408afdc1a47ffa3556adbdb5c915d6035a9a28da878e68771dce7568cc6f69 languageName: node linkType: hard @@ -33075,8 +34914,8 @@ __metadata: linkType: hard "react-transition-group@npm:^4.0.0, react-transition-group@npm:^4.4.0": - version: 4.4.5 - resolution: "react-transition-group@npm:4.4.5" + version: 4.4.1 + resolution: "react-transition-group@npm:4.4.1" dependencies: "@babel/runtime": ^7.5.5 dom-helpers: ^5.0.1 @@ -33085,7 +34924,7 @@ __metadata: peerDependencies: react: ">=16.6.0" react-dom: ">=16.6.0" - checksum: 75602840106aa9c6545149d6d7ae1502fb7b7abadcce70a6954c4b64a438ff1cd16fc77a0a1e5197cdd72da398f39eb929ea06f9005c45b132ed34e056ebdeb1 + checksum: 0bcd8af483709832e318dcef84c26ebddeb866bf4f58010286367ef0c1e7c5106e00cfc65688b9102414cb3d572c63909c2eb7ea972b4420fc70a78c10b6e8ad languageName: node linkType: hard @@ -33164,13 +35003,6 @@ __metadata: languageName: node linkType: hard -"read-cmd-shim@npm:^3.0.0": - version: 3.0.1 - resolution: "read-cmd-shim@npm:3.0.1" - checksum: 79fe66aa78eddcca8dc196765ae3168b3a56e2b69ba54071525eb00a9eeee8cc83b3d5f784432c3d8ce868787fdc059b1a1e0b605246b5108c9003fc927ea263 - languageName: node - linkType: hard - "read-package-json-fast@npm:^2.0.1, read-package-json-fast@npm:^2.0.2, read-package-json-fast@npm:^2.0.3": version: 2.0.3 resolution: "read-package-json-fast@npm:2.0.3" @@ -33182,38 +35014,26 @@ __metadata: linkType: hard "read-package-json@npm:^3.0.0": - version: 3.0.1 - resolution: "read-package-json@npm:3.0.1" + version: 3.0.0 + resolution: "read-package-json@npm:3.0.0" dependencies: glob: ^7.1.1 json-parse-even-better-errors: ^2.3.0 normalize-package-data: ^3.0.0 npm-normalize-package-bin: ^1.0.0 - checksum: 963904f00f70283e89b8a4a06b51b1453e7e23a9a029af3030e301f8c2429a2bad21a72c53943cdb735c9a7b643282d5b0b1a09b7d31f74640e81311127f8f68 - languageName: node - linkType: hard - -"read-package-json@npm:^4.1.1": - version: 4.1.2 - resolution: "read-package-json@npm:4.1.2" - dependencies: - glob: ^7.1.1 - json-parse-even-better-errors: ^2.3.0 - normalize-package-data: ^3.0.0 - npm-normalize-package-bin: ^1.0.0 - checksum: 729acda12fdbff6cee8cee7b6023a16e85c02406e2427b3cd091948d945940cfb6a6ebe7a8b4df967d483f360d0ec12fb83ab80de3e7bbb2ba2c426d07fd774e + checksum: f17d10f7c3bd641c0462184cdeacfe22f9494911d4ab3232dd987accc75b6c26387c4573811486e733d1b403780de8c9b2187a51f8d56ff7165f79c199ddce71 languageName: node linkType: hard "read-package-json@npm:^5.0.0": - version: 5.0.2 - resolution: "read-package-json@npm:5.0.2" + version: 5.0.1 + resolution: "read-package-json@npm:5.0.1" dependencies: glob: ^8.0.1 json-parse-even-better-errors: ^2.3.1 normalize-package-data: ^4.0.0 - npm-normalize-package-bin: ^2.0.0 - checksum: 0882ac9cec1bc92fb5515e9727611fb2909351e1e5c840dce3503cbb25b4cd48eb44b61071986e0fc51043208161f07d364a7336206c8609770186818753b51a + npm-normalize-package-bin: ^1.0.1 + checksum: e8c2ad72df1f17e71268feabdb9bb0153ed2c7d38a05b759c5c49cf368a754bdd3c0e8a279fbc8d707802ff91d2cf144a995e6ebd5534de2848d52ab2c14034d languageName: node linkType: hard @@ -33339,11 +35159,11 @@ __metadata: linkType: hard "readdir-glob@npm:^1.0.0": - version: 1.1.2 - resolution: "readdir-glob@npm:1.1.2" + version: 1.1.1 + resolution: "readdir-glob@npm:1.1.1" dependencies: - minimatch: ^5.1.0 - checksum: 1e5f701d3c94af5653e1736dfef99e991869c6e1c87bf08835d8c641f767e73ae25b829d3d1f8504fab8cad49b70b718ef960d3afee5be45cd779ccaeb264ed4 + minimatch: ^3.0.4 + checksum: 8dc4ff606aa9ac8f6ac628dfad918aed6514c8b427922928f2ef380a1be106d5b6f1d106af34607955ad504f89f39d83a9b42c5316ed8b96b5f75391e33a6afc languageName: node linkType: hard @@ -33369,14 +35189,14 @@ __metadata: linkType: hard "recast@npm:^0.20.3, recast@npm:^0.20.4": - version: 0.20.5 - resolution: "recast@npm:0.20.5" + version: 0.20.4 + resolution: "recast@npm:0.20.4" dependencies: ast-types: 0.14.2 esprima: ~4.0.0 source-map: ~0.6.1 tslib: ^2.0.1 - checksum: 14c35115cd9965950724cb2968f069a247fa79ce890643ab6dc3795c705b363f7b92a45238e9f765387c306763be9955f72047bb9d15b5d60b0a55f9e7912d5a + checksum: d858095cbd89908e401c5f51734c410a3a80b7dfcc099fe2e4b1ec4cf8b6f046d24830628edad5047cc3ff3cbed9828dc90271a81f5a243a4722d0a8078e6d57 languageName: node linkType: hard @@ -33412,28 +35232,27 @@ __metadata: linkType: hard "recharts@npm:^2.1.5": - version: 2.1.14 - resolution: "recharts@npm:2.1.14" + version: 2.1.9 + resolution: "recharts@npm:2.1.9" dependencies: - "@types/d3-interpolate": ^3.0.1 - "@types/d3-scale": ^4.0.2 - "@types/d3-shape": ^3.1.0 + "@types/d3-interpolate": ^2.0.0 + "@types/d3-scale": ^3.0.0 + "@types/d3-shape": ^2.0.0 classnames: ^2.2.5 - d3-interpolate: ^3.0.1 - d3-scale: ^4.0.2 - d3-shape: ^3.1.0 + d3-interpolate: ^2.0.0 + d3-scale: ^3.0.0 + d3-shape: ^2.0.0 eventemitter3: ^4.0.1 lodash: ^4.17.19 react-is: ^16.10.2 - react-resize-detector: ^7.1.2 - react-smooth: ^2.0.1 + react-resize-detector: ^6.6.3 + react-smooth: ^2.0.0 recharts-scale: ^0.4.4 reduce-css-calc: ^2.1.8 peerDependencies: - prop-types: ^15.6.0 - react: ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 - checksum: 58f11fe8c9c4c36ddfe464ed896a7fd61b3c6cedeeab07cd86f286604dc11e96d2dc9288c55bb9c4e3c083ee325ffcccb5d0e6bc43a747c72110d25300624b22 + react: ^16.0.0 || ^17.0.0 + react-dom: ^16.0.0 || ^17.0.0 + checksum: 5751ba78b08c9bf43b381750e302716df7ebc838a26bc8695892b1dd8293f858256d5b949defbb2d07395e7cf8873484b397ea804a60743e366e3211309c7433 languageName: node linkType: hard @@ -33530,11 +35349,11 @@ __metadata: linkType: hard "redux@npm:^4.0.0, redux@npm:^4.0.4, redux@npm:^4.1.2": - version: 4.2.0 - resolution: "redux@npm:4.2.0" + version: 4.1.2 + resolution: "redux@npm:4.1.2" dependencies: "@babel/runtime": ^7.9.2 - checksum: 75f3955c89b3f18edf5411e5fb482aa2e4f41a416183e8802a6bf6472c4fc3d47675b8b321d147f8af8e0f616436ac507bf5a25f1c4d6180e797b549c7db2c1d + checksum: 6a839cee5bd580c5298d968e9e2302150e961318253819bcd97f9d945a5a409559eacddf6026f4118bb68b681c593d90e8a2c5bbf278f014aff9bf0d2d8fa084 languageName: node linkType: hard @@ -33556,12 +35375,28 @@ __metadata: languageName: node linkType: hard -"regenerate-unicode-properties@npm:^10.1.0": - version: 10.1.0 - resolution: "regenerate-unicode-properties@npm:10.1.0" +"regenerate-unicode-properties@npm:^10.0.1": + version: 10.0.1 + resolution: "regenerate-unicode-properties@npm:10.0.1" dependencies: regenerate: ^1.4.2 - checksum: b1a8929588433ab8b9dc1a34cf3665b3b472f79f2af6ceae00d905fc496b332b9af09c6718fb28c730918f19a00dc1d7310adbaa9b72a2ec7ad2f435da8ace17 + checksum: 1b638b7087d8143e5be3e20e2cda197ea0440fa0bc2cc49646b2f50c5a2b1acdc54b21e4215805a5a2dd487c686b2291accd5ad00619534098d2667e76247754 + languageName: node + linkType: hard + +"regenerate-unicode-properties@npm:^8.2.0": + version: 8.2.0 + resolution: "regenerate-unicode-properties@npm:8.2.0" + dependencies: + regenerate: ^1.4.0 + checksum: ee7db70ab25b95f2e3f39537089fc3eddba0b39fc9b982d6602f127996ce873d8c55584d5428486ca00dc0a85d174d943354943cd4a745cda475c8fe314b4f8a + languageName: node + linkType: hard + +"regenerate@npm:^1.4.0": + version: 1.4.0 + resolution: "regenerate@npm:1.4.0" + checksum: 8b74ff9d6becc577eecf59ce6eb969c1ce4e6fdabf262d024decd59757741a4598d867cde10dc4ef7ca2a1a415bbf05ddda839cd046050c909117966e118bd5b languageName: node linkType: hard @@ -33630,35 +35465,67 @@ __metadata: languageName: node linkType: hard +"regexpu-core@npm:^4.7.1": + version: 4.7.1 + resolution: "regexpu-core@npm:4.7.1" + dependencies: + regenerate: ^1.4.0 + regenerate-unicode-properties: ^8.2.0 + regjsgen: ^0.5.1 + regjsparser: ^0.6.4 + unicode-match-property-ecmascript: ^1.0.4 + unicode-match-property-value-ecmascript: ^1.2.0 + checksum: 368b4aab72132ba3c8bd114822572c920d390ae99d3d219e0c7f872c6a0a3b1fbe30c88188ff90ec6f8e681667fa8e51d84a78bb05c460996a0df6a060b7ae80 + languageName: node + linkType: hard + "regexpu-core@npm:^5.1.0": - version: 5.2.1 - resolution: "regexpu-core@npm:5.2.1" + version: 5.1.0 + resolution: "regexpu-core@npm:5.1.0" dependencies: regenerate: ^1.4.2 - regenerate-unicode-properties: ^10.1.0 - regjsgen: ^0.7.1 - regjsparser: ^0.9.1 + regenerate-unicode-properties: ^10.0.1 + regjsgen: ^0.6.0 + regjsparser: ^0.8.2 unicode-match-property-ecmascript: ^2.0.0 unicode-match-property-value-ecmascript: ^2.0.0 - checksum: c1244db79f7a4597414cd7fdf5171fa73905f0cbc684385c78127fc6198f9cade8fe829a1c4036c8ec57ac75b1ffb8c196451abdd2e153f26a4d8043fa10bbb3 + checksum: 7b4eb8d182d9d10537a220a93138df5bc7eaf4ed53e36b95e8427d33ed8a2b081468f1a15d3e5fcee66517e1df7f5ca180b999e046d060badd97150f2ffe87b2 languageName: node linkType: hard -"regjsgen@npm:^0.7.1": - version: 0.7.1 - resolution: "regjsgen@npm:0.7.1" - checksum: 7cac399921c58db8e16454869283ff66871531180218064fa938ac05c11c2976792a00706c3c78bbc625e1d793ca373065ea90564e06189a751a7b4ae33acadc +"regjsgen@npm:^0.5.1": + version: 0.5.1 + resolution: "regjsgen@npm:0.5.1" + checksum: 946e4bb6c456bb4612fcd823faffe58b0d742e7ec8b4d0d6d43546827de43479e8f9a3172582b36b90c84d7dd240cb2fec892fc699e4304a51bc377f73e13247 languageName: node linkType: hard -"regjsparser@npm:^0.9.1": - version: 0.9.1 - resolution: "regjsparser@npm:0.9.1" +"regjsgen@npm:^0.6.0": + version: 0.6.0 + resolution: "regjsgen@npm:0.6.0" + checksum: c5158ebd735e75074e41292ade1ff05d85566d205426cc61501e360c450a63baced8512ee3ae238e5c0a0e42969563c7875b08fa69d6f0402daf36bcb3e4d348 + languageName: node + linkType: hard + +"regjsparser@npm:^0.6.4": + version: 0.6.4 + resolution: "regjsparser@npm:0.6.4" dependencies: jsesc: ~0.5.0 bin: regjsparser: bin/parser - checksum: 5e1b76afe8f1d03c3beaf9e0d935dd467589c3625f6d65fb8ffa14f224d783a0fed4bf49c2c1b8211043ef92b6117313419edf055a098ed8342e340586741afc + checksum: 6058749f802a519d37ebbd6ee6c584a65045c3ae4822a54d53666fd56dfdc3363c6905cf9840956becf34111793fe284db75d57342f4263291b29da0a404e9fe + languageName: node + linkType: hard + +"regjsparser@npm:^0.8.2": + version: 0.8.4 + resolution: "regjsparser@npm:0.8.4" + dependencies: + jsesc: ~0.5.0 + bin: + regjsparser: bin/parser + checksum: d069b932491761cda127ce11f6bd2729c3b1b394a35200ec33f1199e937423db28ceb86cf33f0a97c76ecd7c0f8db996476579eaf0d80a1f74c1934f4ca8b27a languageName: node linkType: hard @@ -33700,13 +35567,13 @@ __metadata: linkType: hard "remark-parse@npm:^10.0.0": - version: 10.0.1 - resolution: "remark-parse@npm:10.0.1" + version: 10.0.0 + resolution: "remark-parse@npm:10.0.0" dependencies: "@types/mdast": ^3.0.0 mdast-util-from-markdown: ^1.0.0 unified: ^10.0.0 - checksum: 505088e564ab53ff054433368adbb7b551f69240c7d9768975529837a86f1d0f085e72d6211929c5c42db315273df4afc94f3d3a8662ffdb69468534c6643d29 + checksum: cebd0d8f95b7b0b827277773ddafd05d295a450a2a712f085ccedad2572678712785869b7a0dea53c215f124c22dad5b5247c29d461729933565ed7b5f262e6d languageName: node linkType: hard @@ -33769,9 +35636,9 @@ __metadata: linkType: hard "repeat-element@npm:^1.1.2": - version: 1.1.4 - resolution: "repeat-element@npm:1.1.4" - checksum: 1edd0301b7edad71808baad226f0890ba709443f03a698224c9ee4f2494c317892dc5211b2ba8cbea7194a9ddbcac01e283bd66de0467ab24ee1fc1a3711d8a9 + version: 1.1.3 + resolution: "repeat-element@npm:1.1.3" + checksum: 0743a136b484117016ad587577ede60a3ffe604b74e57bd5d7d0aa041fe2f1c956e6b2f3ff83c86f4db9fac022c3fa2da8e58b9d3618b8b4cb1c3d041bcc422f languageName: node linkType: hard @@ -33884,9 +35751,9 @@ __metadata: linkType: hard "reselect@npm:^4.1.5": - version: 4.1.6 - resolution: "reselect@npm:4.1.6" - checksum: 3ea1058422904063ec93c8f4693fe33dcb2178bbf417ace8db5b2c797a5875cf357d9308d11ed3942ee22507dd34ecfbf1f3a21340a4f31c206cab1d36ceef31 + version: 4.1.5 + resolution: "reselect@npm:4.1.5" + checksum: 54c13c1e795b2ea70cba8384138aebe78adda00cbea303cc94b64da0a70d74c896cc9a03115ae38b8bff990e7a60dcd6452ab68cbec01b0b38c1afda70714cf0 languageName: node linkType: hard @@ -33898,9 +35765,9 @@ __metadata: linkType: hard "resolve-alpn@npm:^1.0.0": - version: 1.2.1 - resolution: "resolve-alpn@npm:1.2.1" - checksum: f558071fcb2c60b04054c99aebd572a2af97ef64128d59bef7ab73bd50d896a222a056de40ffc545b633d99b304c259ea9d0c06830d5c867c34f0bfa60b8eae0 + version: 1.0.0 + resolution: "resolve-alpn@npm:1.0.0" + checksum: 146b739f14fad759bc137e7642b4859a7d7a290b61e00db37a468f159932ccefe610006604e6aa7ba2a2991cbd627246f0c74717e8942b7c805c346da35c3f3f languageName: node linkType: hard @@ -33941,7 +35808,20 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.6, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.0": +"resolve@npm:^1.1.6, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0": + version: 1.21.0 + resolution: "resolve@npm:1.21.0" + dependencies: + is-core-module: ^2.8.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: d7d9092a5c04a048bea16c7e5a2eb605ac3e8363a0cc5644de1fde17d5028e8d5f4343aab1d99bd327b98e91a66ea83e242718150c64dfedcb96e5e7aad6c4f5 + languageName: node + linkType: hard + +"resolve@npm:^1.10.0": version: 1.22.1 resolution: "resolve@npm:1.22.1" dependencies: @@ -33954,16 +35834,26 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^2.0.0-next.3": - version: 2.0.0-next.4 - resolution: "resolve@npm:2.0.0-next.4" +"resolve@npm:^1.22.0": + version: 1.22.0 + resolution: "resolve@npm:1.22.0" dependencies: - is-core-module: ^2.9.0 + is-core-module: ^2.8.1 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: c438ac9a650f2030fd074219d7f12ceb983b475da2d89ad3d6dd05fbf6b7a0a8cd37d4d10b43cb1f632bc19f22246ab7f36ebda54d84a29bfb2910a0680906d3 + checksum: a2d14cc437b3a23996f8c7367eee5c7cf8149c586b07ca2ae00e96581ce59455555a1190be9aa92154785cf9f2042646c200d0e00e0bbd2b8a995a93a0ed3e4e + languageName: node + linkType: hard + +"resolve@npm:^2.0.0-next.3": + version: 2.0.0-next.3 + resolution: "resolve@npm:2.0.0-next.3" + dependencies: + is-core-module: ^2.2.0 + path-parse: ^1.0.6 + checksum: f34b3b93ada77d64a6d590c06a83e198f3a827624c4ec972260905fa6c4d612164fbf0200d16d2beefea4ad1755b001f4a9a1293d8fc2322a8f7d6bf692c4ff5 languageName: node linkType: hard @@ -33986,7 +35876,20 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.17.0#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.0#~builtin": +"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.17.0#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin": + version: 1.21.0 + resolution: "resolve@patch:resolve@npm%3A1.21.0#~builtin::version=1.21.0&hash=07638b" + dependencies: + is-core-module: ^2.8.0 + path-parse: ^1.0.7 + supports-preserve-symlinks-flag: ^1.0.0 + bin: + resolve: bin/resolve + checksum: a0a4d1f7409e73190f31f901f8a619960bb3bd4ae38ba3a54c7ea7e1c87758d28a73256bb8d6a35996a903d1bf14f53883f0dcac6c571c063cb8162d813ad26e + languageName: node + linkType: hard + +"resolve@patch:resolve@^1.10.0#~builtin": version: 1.22.1 resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=07638b" dependencies: @@ -33999,16 +35902,26 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^2.0.0-next.3#~builtin": - version: 2.0.0-next.4 - resolution: "resolve@patch:resolve@npm%3A2.0.0-next.4#~builtin::version=2.0.0-next.4&hash=07638b" +"resolve@patch:resolve@^1.22.0#~builtin": + version: 1.22.0 + resolution: "resolve@patch:resolve@npm%3A1.22.0#~builtin::version=1.22.0&hash=07638b" dependencies: - is-core-module: ^2.9.0 + is-core-module: ^2.8.1 path-parse: ^1.0.7 supports-preserve-symlinks-flag: ^1.0.0 bin: resolve: bin/resolve - checksum: 4bf9f4f8a458607af90518ff73c67a4bc1a38b5a23fef2bb0ccbd45e8be89820a1639b637b0ba377eb2be9eedfb1739a84cde24fe4cd670c8207d8fea922b011 + checksum: c79ecaea36c872ee4a79e3db0d3d4160b593f2ca16e031d8283735acd01715a203607e9ded3f91f68899c2937fa0d49390cddbe0fb2852629212f3cda283f4a7 + languageName: node + linkType: hard + +"resolve@patch:resolve@^2.0.0-next.3#~builtin": + version: 2.0.0-next.3 + resolution: "resolve@patch:resolve@npm%3A2.0.0-next.3#~builtin::version=2.0.0-next.3&hash=07638b" + dependencies: + is-core-module: ^2.2.0 + path-parse: ^1.0.6 + checksum: 21684b4d99a4877337cdbd5484311c811b3e8910edb5d868eec85c6e6550b0f570d911f9a384f9e176172d6713f2715bd0b0887fa512cb8c6aeece018de6a9f8 languageName: node linkType: hard @@ -34032,11 +35945,11 @@ __metadata: linkType: hard "responselike@npm:^2.0.0": - version: 2.0.1 - resolution: "responselike@npm:2.0.1" + version: 2.0.0 + resolution: "responselike@npm:2.0.0" dependencies: lowercase-keys: ^2.0.0 - checksum: b122535466e9c97b55e69c7f18e2be0ce3823c5d47ee8de0d9c0b114aa55741c6db8bfbfce3766a94d1272e61bfb1ebf0a15e9310ac5629fbb7446a861b4fd3a + checksum: 6a4d32c37d4e88678ae0a9d69fcc90aafa15b1a3eab455bd65c06af3c6c4976afc47d07a0e5a60d277ab041a465f43bf0a581e0d7ab33786e7a7741573f2e487 languageName: node linkType: hard @@ -34065,16 +35978,16 @@ __metadata: linkType: hard "retry-request@npm:^5.0.0": - version: 5.0.2 - resolution: "retry-request@npm:5.0.2" + version: 5.0.0 + resolution: "retry-request@npm:5.0.0" dependencies: debug: ^4.1.1 extend: ^3.0.2 - checksum: d6c95d27f4468aa5557605d811cfaa5862be0eaff9fc5f18a338a7c17a7972fbec5b6142abb6b1e494b4c02df875fec2f1c3a281bf79900d33607d8536277ffe + checksum: f1c6eba3a380e994f2693d1734320e1291de16c11d25b3c4ac2f636b60dff02d8b6a977388a60c5a7d269a3ce5f9a72eb65734e0a614ce91e927fba549ed390e languageName: node linkType: hard -"retry@npm:0.13.1, retry@npm:^0.13.1": +"retry@npm:0.13.1": version: 0.13.1 resolution: "retry@npm:0.13.1" checksum: 47c4d5be674f7c13eee4cfe927345023972197dbbdfba5d3af7e461d13b44de1bfd663bfc80d2f601f8ef3fc8164c16dd99655a221921954a65d044a2fc1233b @@ -34096,9 +36009,9 @@ __metadata: linkType: hard "rfc4648@npm:^1.3.0": - version: 1.5.2 - resolution: "rfc4648@npm:1.5.2" - checksum: bc3d9c4fbfdbbb363c640f9cb56fc01d2e1ca64305b2b6409aaf59cb85c1adecb2545c03deee8889cce2685e15fb7dd47581665c288e4f45068ffece2642f2e8 + version: 1.4.0 + resolution: "rfc4648@npm:1.4.0" + checksum: 4bcbc88d0625197d733b4927d470385a0894e2f0eb58e26e85d94a31d26d0d7b3640f947066d991698062b0d6232195fccef60cc54c1222b7d017114cf00c767 languageName: node linkType: hard @@ -34281,8 +36194,8 @@ __metadata: linkType: hard "rollup@npm:^2.60.2": - version: 2.79.0 - resolution: "rollup@npm:2.79.0" + version: 2.77.3 + resolution: "rollup@npm:2.77.3" dependencies: fsevents: ~2.3.2 dependenciesMeta: @@ -34290,7 +36203,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 166f1ffea1898e157003920065b3a328e7012ea6808860ee8fe5d1ce94804fcce9985c95a3c0f7fe9c611aff0d09a70f073f1d6f715c8faba28e4e40f71ee3bb + checksum: b179c68249584565ddb5664a241e8e48c293b2207718d885b08ee25797d98857a383f06b544bb89819407da5a71557f4713309a278f61c4778bb32b1d3321a1c languageName: node linkType: hard @@ -34332,27 +36245,27 @@ __metadata: linkType: soft "rtl-css-js@npm:^1.14.0": - version: 1.16.0 - resolution: "rtl-css-js@npm:1.16.0" + version: 1.14.0 + resolution: "rtl-css-js@npm:1.14.0" dependencies: "@babel/runtime": ^7.1.2 - checksum: 51756329f691cacd3e1b48f0f9d04a69338a90013f2d2942ca1ae3b069c952f70055f5fd76c66921e9a5cb956276252376a847c3294bd0ee54be9ceb32ea868c + checksum: 46e7f52058d7ac2dc7a6271f6858ce2e05f64be4d6a3eae712b52bf29c4de97fda8e30490c425bed620db87cc0b8a3ab4a457489ab0dba0868724bac27e6f893 languageName: node linkType: hard "run-async@npm:^2.4.0": - version: 2.4.1 - resolution: "run-async@npm:2.4.1" - checksum: a2c88aa15df176f091a2878eb840e68d0bdee319d8d97bbb89112223259cebecb94bc0defd735662b83c2f7a30bed8cddb7d1674eb48ae7322dc602b22d03797 + version: 2.4.0 + resolution: "run-async@npm:2.4.0" + dependencies: + is-promise: ^2.1.0 + checksum: 268b64e78c4f0dbeaabfdfdc809930a6ed97b7235c191fc337629fac3d38f04d7b838eb942f6bb5645dbb5bd9019d573cfe0f74e187f95ed042657bb4e4aa70d languageName: node linkType: hard "run-parallel@npm:^1.1.9": - version: 1.2.0 - resolution: "run-parallel@npm:1.2.0" - dependencies: - queue-microtask: ^1.2.2 - checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d + version: 1.1.9 + resolution: "run-parallel@npm:1.1.9" + checksum: 8bbeda89c2c1dbfeaa0cdb9f17e93a011ac58ef77339ef1e61a62208b67c8e7b661891df677bb7c5be84b8792e27061177368d500b3c731bb019b0c71e667591 languageName: node linkType: hard @@ -34363,7 +36276,7 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:7.5.5": +"rxjs@npm:7.5.5, rxjs@npm:^7.1.0, rxjs@npm:^7.5.1, rxjs@npm:^7.5.5": version: 7.5.5 resolution: "rxjs@npm:7.5.5" dependencies: @@ -34381,7 +36294,7 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:^7.0.0, rxjs@npm:^7.1.0, rxjs@npm:^7.5.1, rxjs@npm:^7.5.5": +"rxjs@npm:^7.0.0": version: 7.5.6 resolution: "rxjs@npm:7.5.6" dependencies: @@ -34406,7 +36319,7 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:^5.2.0, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.2.1, safe-buffer@npm:>=5.1.0, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:^5.1.1, safe-buffer@npm:^5.1.2, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 @@ -34546,9 +36459,9 @@ __metadata: linkType: hard "screenfull@npm:^5.1.0": - version: 5.2.0 - resolution: "screenfull@npm:5.2.0" - checksum: 21eae33b780eb4679ea0ea2d14734b11168cf35049c45a2bf24ddeb39c67a788e7a8fb46d8b61ca6d8367fd67ce9dd4fc8bfe476489249c7189c2a79cf83f51a + version: 5.1.0 + resolution: "screenfull@npm:5.1.0" + checksum: e8ab486ba2310055aeabd84d8f76f1c9e729669942a4b1bdd675131333076ac9ee6655fb41c2507de3be93865e120cf3641e5ff636090f9e2458170827e650c7 languageName: node linkType: hard @@ -34560,9 +36473,9 @@ __metadata: linkType: hard "secure-json-parse@npm:^2.4.0": - version: 2.5.0 - resolution: "secure-json-parse@npm:2.5.0" - checksum: 84147a32615ce0d93d2fbba60cde85ae362f45cc948ea134e4d6d1e678bb4b7f3a5ce9b9692ed052baefeb2e1c8ba183b34920390e6a089925b97b0d8f7ab064 + version: 2.4.0 + resolution: "secure-json-parse@npm:2.4.0" + checksum: efaafcaa08a4646ca829b29168474f57fb289a0ca7a1d77b66b55a0292785bc6eb9143b21cfc50b37dd12a823c25b12aa1771f18314ed5a616a1f8f12a318533 languageName: node linkType: hard @@ -34574,11 +36487,11 @@ __metadata: linkType: hard "selfsigned@npm:^2.0.0, selfsigned@npm:^2.0.1": - version: 2.1.1 - resolution: "selfsigned@npm:2.1.1" + version: 2.0.1 + resolution: "selfsigned@npm:2.0.1" dependencies: node-forge: ^1 - checksum: aa9ce2150a54838978d5c0aee54d7ebe77649a32e4e690eb91775f71fdff773874a4fbafd0ac73d8ec3b702ff8a395c604df4f8e8868528f36fd6c15076fb43a + checksum: 864e65c2f31ca877bce3ccdaa3bdef5e1e992b63b2a03641e00c24cd305bf2acce093431d1fed2e5ae9f526558db4be5e90baa2b3474c0428fcf7e25cc86ac93 languageName: node linkType: hard @@ -34605,6 +36518,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:7.0.0, semver@npm:~7.0.0": + version: 7.0.0 + resolution: "semver@npm:7.0.0" + bin: + semver: bin/semver.js + checksum: 272c11bf8d083274ef79fe40a81c55c184dff84dd58e3c325299d0927ba48cece1f020793d138382b85f89bab5002a35a5ba59a3a68a7eebbb597eb733838778 + languageName: node + linkType: hard + "semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0": version: 6.3.0 resolution: "semver@npm:6.3.0" @@ -34625,15 +36547,6 @@ __metadata: languageName: node linkType: hard -"semver@npm:~7.0.0": - version: 7.0.0 - resolution: "semver@npm:7.0.0" - bin: - semver: bin/semver.js - checksum: 272c11bf8d083274ef79fe40a81c55c184dff84dd58e3c325299d0927ba48cece1f020793d138382b85f89bab5002a35a5ba59a3a68a7eebbb597eb733838778 - languageName: node - linkType: hard - "send@npm:0.18.0": version: 0.18.0 resolution: "send@npm:0.18.0" @@ -34751,9 +36664,9 @@ __metadata: linkType: hard "set-cookie-parser@npm:^2.4.6": - version: 2.5.1 - resolution: "set-cookie-parser@npm:2.5.1" - checksum: b99c37f976e68ae6eb7c758bf2bbce1e60bb54e3eccedaa25f2da45b77b9cab58d90674cf9edd7aead6fbeac6308f2eb48713320a47ca120d0e838d0194513b6 + version: 2.4.8 + resolution: "set-cookie-parser@npm:2.4.8" + checksum: e15b5df9a56ab06d4895286033a6aff7b318ad024310df058b5821b3539cc06f716ef529618cac0dd78df40e37830de715f388c0f97f84062dd9be2326efcd0c languageName: node linkType: hard @@ -35114,9 +37027,9 @@ __metadata: languageName: node linkType: hard -"socket.io-client@npm:2.5.0, socket.io-client@npm:^2.2.0": - version: 2.5.0 - resolution: "socket.io-client@npm:2.5.0" +"socket.io-client@npm:2.4.0, socket.io-client@npm:^2.2.0": + version: 2.4.0 + resolution: "socket.io-client@npm:2.4.0" dependencies: backo2: 1.0.2 component-bind: 1.0.0 @@ -35129,7 +37042,7 @@ __metadata: parseuri: 0.0.6 socket.io-parser: ~3.3.0 to-array: 0.1.4 - checksum: a33accaf02c4a4c47ac9b09018fa4b9fa67a648a0cc92602e520ec884520050796786eb0df78fc1a9bf51e7b3d7b50ba4ffd3bda6e44df2c253a77100124669c + checksum: d5f16c6d836f6672f89896e785dccdb15ea4a78719daf9bc7954b5943e6ecbae97a56f4a8a33e22418ab0ce38e05a54770d2080bbf6c6d5c0c3a72b60a895800 languageName: node linkType: hard @@ -35156,16 +37069,16 @@ __metadata: linkType: hard "socket.io@npm:^2.2.0": - version: 2.5.0 - resolution: "socket.io@npm:2.5.0" + version: 2.4.1 + resolution: "socket.io@npm:2.4.1" dependencies: debug: ~4.1.0 - engine.io: ~3.6.0 + engine.io: ~3.5.0 has-binary2: ~1.0.2 socket.io-adapter: ~1.1.0 - socket.io-client: 2.5.0 + socket.io-client: 2.4.0 socket.io-parser: ~3.4.0 - checksum: 6f20a413352cb0a8bb13063249fe425c81fb54beca1bdd71221262305cf21232e6a37fdd4a232b5695dbd4d3204281a9313829c9c373c5ba01c5bd7218edd094 + checksum: 290e4e8dae5c38628c5164cae12fc8154165233a46ecc241768a44f0add8f1243a0b13239385573fbbe9e4fb6424c199381461b577d504dc47529f5e1e7b6e4d languageName: node linkType: hard @@ -35181,24 +37094,24 @@ __metadata: linkType: hard "socks-proxy-agent@npm:^5.0.0": - version: 5.0.1 - resolution: "socks-proxy-agent@npm:5.0.1" + version: 5.0.0 + resolution: "socks-proxy-agent@npm:5.0.0" dependencies: - agent-base: ^6.0.2 + agent-base: 6 debug: 4 socks: ^2.3.3 - checksum: 1b60c4977b2fef783f0fc4dc619cd2758aafdb43f3cf679f1e3627cb6c6e752811cee5513ebb4157ad26786033d2f85029440f197d321e8293b38cc5aab01e06 + checksum: 1dd30d1cc346c33b3180a5bbe75ed93979ca3a916f453a6802f64642f07d30af7e93a640a607c920f10d4b1dfe1d0eec485f64c2a93c951a8d9a50090e6a7776 languageName: node linkType: hard -"socks-proxy-agent@npm:^6.0.0": - version: 6.2.1 - resolution: "socks-proxy-agent@npm:6.2.1" +"socks-proxy-agent@npm:^6.0.0, socks-proxy-agent@npm:^6.1.1": + version: 6.1.1 + resolution: "socks-proxy-agent@npm:6.1.1" dependencies: agent-base: ^6.0.2 - debug: ^4.3.3 - socks: ^2.6.2 - checksum: 9ca089d489e5ee84af06741135c4b0d2022977dad27ac8d649478a114cdce87849e8d82b7c22b51501a4116e231241592946fc7fae0afc93b65030ee57084f58 + debug: ^4.3.1 + socks: ^2.6.1 + checksum: 9a8a4f791bba0060315cf7291ca6f9db37d6fc280fd0860d73d8887d3efe4c22e823aa25a8d5375f6079279f8dc91b50c075345179bf832bfe3c7c26d3582e3c languageName: node linkType: hard @@ -35213,13 +37126,13 @@ __metadata: languageName: node linkType: hard -"socks@npm:^2.3.3, socks@npm:^2.6.2": - version: 2.7.0 - resolution: "socks@npm:2.7.0" +"socks@npm:^2.3.3, socks@npm:^2.6.1, socks@npm:^2.6.2": + version: 2.6.2 + resolution: "socks@npm:2.6.2" dependencies: - ip: ^2.0.0 + ip: ^1.1.5 smart-buffer: ^4.2.0 - checksum: 0b5d94e2b3c11e7937b40fc5dac1e80d8b92a330e68c51f1d271ce6980c70adca42a3f8cd47c4a5769956bada074823b53374f2dc5f2ea5c2121b222dec6eadf + checksum: dd9194293059d737759d5c69273850ad4149f448426249325c4bea0e340d1cf3d266c3b022694b0dcf5d31f759de23657244c481fc1e8322add80b7985c36b5e languageName: node linkType: hard @@ -35289,9 +37202,9 @@ __metadata: linkType: hard "source-map-url@npm:^0.4.0": - version: 0.4.1 - resolution: "source-map-url@npm:0.4.1" - checksum: 64c5c2c77aff815a6e61a4120c309ae4cac01298d9bcbb3deb1b46a4dd4c46d4a1eaeda79ec9f684766ae80e8dc86367b89326ce9dd2b89947bd9291fc1ac08c + version: 0.4.0 + resolution: "source-map-url@npm:0.4.0" + checksum: 63ed54045fcd7b4ec7ca17513f48fdc23b573eef679326ecf1a31333e1aaecc0a9c085adaa7d118283b160e65b71cc72da9e1385f2de4ac5ed68294e3920d719 languageName: node linkType: hard @@ -35302,7 +37215,7 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.5.6": +"source-map@npm:^0.5.0, source-map@npm:^0.5.6": version: 0.5.7 resolution: "source-map@npm:0.5.7" checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d @@ -35317,13 +37230,13 @@ __metadata: linkType: hard "source-map@npm:^0.7.3": - version: 0.7.4 - resolution: "source-map@npm:0.7.4" - checksum: 01cc5a74b1f0e1d626a58d36ad6898ea820567e87f18dfc9d24a9843a351aaa2ec09b87422589906d6ff1deed29693e176194dc88bcae7c9a852dc74b311dbf5 + version: 0.7.3 + resolution: "source-map@npm:0.7.3" + checksum: cd24efb3b8fa69b64bf28e3c1b1a500de77e84260c5b7f2b873f88284df17974157cc88d386ee9b6d081f08fdd8242f3fc05c953685a6ad81aad94c7393dedea languageName: node linkType: hard -"sourcemap-codec@npm:^1.4.8": +"sourcemap-codec@npm:^1.4.4, sourcemap-codec@npm:^1.4.8": version: 1.4.8 resolution: "sourcemap-codec@npm:1.4.8" checksum: b57981c05611afef31605732b598ccf65124a9fcb03b833532659ac4d29ac0f7bfacbc0d6c5a28a03e84c7510e7e556d758d0bb57786e214660016fb94279316 @@ -35345,9 +37258,9 @@ __metadata: linkType: hard "spawn-command@npm:^0.0.2-1": - version: 0.0.2 - resolution: "spawn-command@npm:0.0.2" - checksum: e35c5d28177b4d461d33c88cc11f6f3a5079e2b132c11e1746453bbb7a0c0b8a634f07541a2a234fa4758239d88203b758def509161b651e81958894c0b4b64b + version: 0.0.2-1 + resolution: "spawn-command@npm:0.0.2-1" + checksum: 2cac8519332193d1ed37d57298c4a1f73095e9edd20440fbab4aa47f531da83831734f2b51c44bb42b2747bf3485dec3fa2b0a1003f74c67561f2636622e328b languageName: node linkType: hard @@ -35454,13 +37367,6 @@ __metadata: languageName: node linkType: hard -"split2@npm:^4.1.0": - version: 4.1.0 - resolution: "split2@npm:4.1.0" - checksum: ec581597cb74c13cdfb5e2047543dd40cb1e8e9803c7b1e0c29ede05f2b4f049b2d6e7f2788a225d544549375719658b8f38e9366364dec35dc7a12edfda5ee5 - languageName: node - linkType: hard - "split@npm:0.3": version: 0.3.3 resolution: "split@npm:0.3.3" @@ -35503,9 +37409,9 @@ __metadata: linkType: hard "sqlstring@npm:^2.3.2": - version: 2.3.3 - resolution: "sqlstring@npm:2.3.3" - checksum: 1e7e2d51c38a0cf7372e875408ca100b6e0c9a941ab7773975ea41fb36e5528e404dc787689be855780cf6d0a829ff71027964ae3a05a7446e91dce26672fda7 + version: 2.3.2 + resolution: "sqlstring@npm:2.3.2" + checksum: 6d17a604dcf724046ff0f0dec562164fc217968e7a962e6ed6cca6ae8d8cd7b264c595627fe74d485200274ad8913f88d4fb9e75469d0305b1a647492b7168e0 languageName: node linkType: hard @@ -35519,26 +37425,26 @@ __metadata: languageName: node linkType: hard -"ssh2@npm:^1.11.0, ssh2@npm:^1.4.0": - version: 1.11.0 - resolution: "ssh2@npm:1.11.0" +"ssh2@npm:^1.4.0": + version: 1.5.0 + resolution: "ssh2@npm:1.5.0" dependencies: asn1: ^0.2.4 bcrypt-pbkdf: ^1.0.2 - cpu-features: ~0.0.4 - nan: ^2.16.0 + cpu-features: 0.0.2 + nan: ^2.15.0 dependenciesMeta: cpu-features: optional: true nan: optional: true - checksum: e40cb9f171741a807c170dc555078aa8c49dc93dd36fc9c8be026fce1cfd31f0d37078d9b60a0f2cfb11d0e007ed5407376b72f8a0ef9f2cb89574632bbfb824 + checksum: 6a2252c12d9587eeb31c499d1d13bb14a255d08243762e1a92b2db76add8912b2c8c25103c79b92e156d598c1e2781c5523b58aa9e85aee06fea365e4cc188bb languageName: node linkType: hard "sshpk@npm:^1.14.1, sshpk@npm:^1.7.0": - version: 1.17.0 - resolution: "sshpk@npm:1.17.0" + version: 1.16.1 + resolution: "sshpk@npm:1.16.1" dependencies: asn1: ~0.2.3 assert-plus: ^1.0.0 @@ -35553,7 +37459,7 @@ __metadata: sshpk-conv: bin/sshpk-conv sshpk-sign: bin/sshpk-sign sshpk-verify: bin/sshpk-verify - checksum: ba109f65c8e6c35133b8e6ed5576abeff8aa8d614824b7275ec3ca308f081fef483607c28d97780c1e235818b0f93ed8c8b56d0a5968d5a23fd6af57718c7597 + checksum: 5e76afd1cedc780256f688b7c09327a8a650902d18e284dfeac97489a735299b03c3e72c6e8d22af03dbbe4d6f123fdfd5f3c4ed6bedbec72b9529a55051b857 languageName: node linkType: hard @@ -35583,11 +37489,11 @@ __metadata: linkType: hard "stack-generator@npm:^2.0.5": - version: 2.0.10 - resolution: "stack-generator@npm:2.0.10" + version: 2.0.5 + resolution: "stack-generator@npm:2.0.5" dependencies: - stackframe: ^1.3.4 - checksum: 4fc3978a934424218a0aa9f398034e1f78153d5ff4f4ff9c62478c672debb47dd58de05b09fc3900530cbb526d72c93a6e6c9353bacc698e3b1c00ca3dda0c47 + stackframe: ^1.1.1 + checksum: a85c45a6f166319b31e9298da1e05b778b768553c2126eeeccfa5c4402fc810de1c541ec0b92db63238d68b3e08f4f57544adc27255e52f25f8edcabcc9caf63 languageName: node linkType: hard @@ -35607,20 +37513,20 @@ __metadata: languageName: node linkType: hard -"stackframe@npm:^1.3.4": - version: 1.3.4 - resolution: "stackframe@npm:1.3.4" - checksum: bae1596873595c4610993fa84f86a3387d67586401c1816ea048c0196800c0646c4d2da98c2ee80557fd9eff05877efe33b91ba6cd052658ed96ddc85d19067d +"stackframe@npm:^1.1.1": + version: 1.1.1 + resolution: "stackframe@npm:1.1.1" + checksum: 6031b30cc070972be6b12f4f4109e62150912ddbc8d6d2bc1707387bfa74b69ec298aa1211b9bf8dc4cf4f5245a5cdb72dda4b7c0467ea0cce2d10e4f10ffe3a languageName: node linkType: hard "stacktrace-gps@npm:^3.0.4": - version: 3.1.2 - resolution: "stacktrace-gps@npm:3.1.2" + version: 3.0.4 + resolution: "stacktrace-gps@npm:3.0.4" dependencies: source-map: 0.5.6 - stackframe: ^1.3.4 - checksum: 85daa232d138239b6ae0f4bcdd87d15d302a045d93625db17614030945b5314e204b5fbcf9bee5b6f4f9e6af5fca05f65c27fe910894b861ef6853b99470aa1c + stackframe: ^1.1.1 + checksum: b98cb77632d38e6cbc243da4c47ca5f4bef918985c233bb4cfe8bfdc60fde92b53ce0630b16cf24d81560f1442e2ff92ccf6e2fe19031c90fb775d8e86037d9b languageName: node linkType: hard @@ -35678,7 +37584,7 @@ __metadata: languageName: node linkType: hard -"statuses@npm:>= 1.4.0 < 2": +"statuses@npm:>= 1.4.0 < 2, statuses@npm:>= 1.5.0 < 2": version: 1.5.0 resolution: "statuses@npm:1.5.0" checksum: c469b9519de16a4bb19600205cffb39ee471a5f17b82589757ca7bd40a8d92ebb6ed9f98b5a540c5d302ccbc78f15dc03cc0280dd6e00df1335568a5d5758a5c @@ -35763,7 +37669,16 @@ __metadata: languageName: node linkType: hard -"strict-event-emitter@npm:^0.2.0, strict-event-emitter@npm:^0.2.4": +"strict-event-emitter@npm:^0.2.0": + version: 0.2.0 + resolution: "strict-event-emitter@npm:0.2.0" + dependencies: + events: ^3.3.0 + checksum: b2bc33aa01e66010f6356368df7b043cc2a96645b5a8caf47226f349d1702f844375ece9d90e69ff1714599c4ef959031d23d3ffb224738a286b88fedcb42a4a + languageName: node + linkType: hard + +"strict-event-emitter@npm:^0.2.4": version: 0.2.4 resolution: "strict-event-emitter@npm:0.2.4" dependencies: @@ -35801,12 +37716,12 @@ __metadata: linkType: hard "string-length@npm:^4.0.1": - version: 4.0.2 - resolution: "string-length@npm:4.0.2" + version: 4.0.1 + resolution: "string-length@npm:4.0.1" dependencies: char-regex: ^1.0.2 strip-ansi: ^6.0.0 - checksum: ce85533ef5113fcb7e522bcf9e62cb33871aa99b3729cec5595f4447f660b0cefd542ca6df4150c97a677d58b0cb727a3fe09ac1de94071d05526c73579bf505 + checksum: 7bd3191668ddafa6f574a8b17a1bd1b085737d64ceefa51f72cdd19c45a730422cd70d984eee7584d6e5b5c84b6318633c6d6a720a4bfd7c58769985fa77573e languageName: node linkType: hard @@ -35859,7 +37774,7 @@ __metadata: languageName: node linkType: hard -"string.prototype.trimend@npm:^1.0.5": +"string.prototype.trimend@npm:^1.0.4, string.prototype.trimend@npm:^1.0.5": version: 1.0.5 resolution: "string.prototype.trimend@npm:1.0.5" dependencies: @@ -35870,7 +37785,7 @@ __metadata: languageName: node linkType: hard -"string.prototype.trimstart@npm:^1.0.5": +"string.prototype.trimstart@npm:^1.0.4, string.prototype.trimstart@npm:^1.0.5": version: 1.0.5 resolution: "string.prototype.trimstart@npm:1.0.5" dependencies: @@ -36028,12 +37943,12 @@ __metadata: linkType: hard "strtok3@npm:^6.2.4": - version: 6.3.0 - resolution: "strtok3@npm:6.3.0" + version: 6.2.4 + resolution: "strtok3@npm:6.2.4" dependencies: "@tokenizer/token": ^0.3.0 - peek-readable: ^4.1.0 - checksum: 90732cff3f325aef7c47c511f609b593e0873ec77b5081810071cde941344e6a0ee3ccb0cae1a9f5b4e12c81a2546fd6b322fabcdfbd1dd08362c2ce5291334a + peek-readable: ^4.0.1 + checksum: 327b48a79d464542e9ae922c1af3aacc6e6673be31442ab82648ee4afa8cf67f23b426d3e6e77a496ff6e0c9ddc009d9242a224ee05186a100325b633759d0ec languageName: node linkType: hard @@ -36098,22 +38013,22 @@ __metadata: languageName: node linkType: hard -"stylehacks@npm:^5.1.0": - version: 5.1.0 - resolution: "stylehacks@npm:5.1.0" +"stylehacks@npm:^5.0.1": + version: 5.0.1 + resolution: "stylehacks@npm:5.0.1" dependencies: - browserslist: ^4.16.6 + browserslist: ^4.16.0 postcss-selector-parser: ^6.0.4 peerDependencies: postcss: ^8.2.15 - checksum: 310b3452c11fd443b0d327aa2d5b43ae7479407339204b7ad11cf2e16d33b690c1cbf47a21b737ef112411e53563f0f996c5fa3642d135c896329950a008277f + checksum: 777dbed3987e04f713b9d74e08f66ab4c23c76cabb07c666c0ae9a06e58e8961063e17b5c7b9c23421b75e9caa9fb78084688e509624e57b19c92c174fbd964d languageName: node linkType: hard "stylis@npm:^4.0.6": - version: 4.1.2 - resolution: "stylis@npm:4.1.2" - checksum: de5771526216ca156f7ccdece70d0e2b4d5611a2a64f34d0165707b06bd8b6ba7913f2eb9b7998c0f9145077079f46d5084b6a60c97ec10b8d776bef293e9f8c + version: 4.0.7 + resolution: "stylis@npm:4.0.7" + checksum: 4f9fdc4b131b54cdc5988aaf23e796fcf77927c9d2f3147f6b23b8f3a9568eb38ce91b338b9d1b50a50391da32969c34ff68ff971c453fc3a5af89941c60ab06 languageName: node linkType: hard @@ -36133,8 +38048,8 @@ __metadata: linkType: hard "sucrase@npm:^3.18.0, sucrase@npm:^3.20.2": - version: 3.27.0 - resolution: "sucrase@npm:3.27.0" + version: 3.25.0 + resolution: "sucrase@npm:3.25.0" dependencies: commander: ^4.0.0 glob: 7.1.6 @@ -36145,7 +38060,7 @@ __metadata: bin: sucrase: bin/sucrase sucrase-node: bin/sucrase-node - checksum: a834c3fec170600a7bad84320f3d1b2bc52aacfeacd77970c98e56faad71ff1248bea91203878637adb647cf0fc70dd1a7d81c7a542f64dd37cca79c4398056f + checksum: 4a20a4a821f46e1010da22417e6edafe637bac9a5414e71fc626a569fd3d266a1fcf010073c7627c296223e41fc871fb30678b6238fb95873e49be7973b8743b languageName: node linkType: hard @@ -36206,12 +38121,12 @@ __metadata: linkType: hard "supports-hyperlinks@npm:^2.0.0": - version: 2.3.0 - resolution: "supports-hyperlinks@npm:2.3.0" + version: 2.1.0 + resolution: "supports-hyperlinks@npm:2.1.0" dependencies: has-flag: ^4.0.0 supports-color: ^7.0.0 - checksum: 9ee0de3c8ce919d453511b2b1588a8205bd429d98af94a01df87411391010fe22ca463f268c84b2ce2abad019dfff8452aa02806eeb5c905a8d7ad5c4f4c52b8 + checksum: e4f430c870a258c9854b8bd7f166a9c1e76e3b851da84d4399d6a8f1d4a485e4ec36c16455dde80acf06c86e7c0a6df76ed22b6a4644a6ae3eced8616b3f21b5 languageName: node linkType: hard @@ -36339,7 +38254,7 @@ __metadata: languageName: node linkType: hard -"symbol-observable@npm:^1.0.4": +"symbol-observable@npm:1.2.0, symbol-observable@npm:^1.0.4": version: 1.2.0 resolution: "symbol-observable@npm:1.2.0" checksum: 48ffbc22e3d75f9853b3ff2ae94a44d84f386415110aea5effc24d84c502e03a4a6b7a8f75ebaf7b585780bda34eb5d6da3121f826a6f93398429d30032971b6 @@ -36353,6 +38268,16 @@ __metadata: languageName: node linkType: hard +"sync-fetch@npm:^0.4.0": + version: 0.4.1 + resolution: "sync-fetch@npm:0.4.1" + dependencies: + buffer: ^5.7.1 + node-fetch: ^2.6.1 + checksum: cbd1932d9a8de9da52880c23124313bbc5a81887330e66645d192857ee05eeda2ac5700cd6e89f61eeb57a7c44f2c3da96323ed73a657862fb4a6c82bdbd13bd + languageName: node + linkType: hard + "taffydb@npm:2.6.2": version: 2.6.2 resolution: "taffydb@npm:2.6.2" @@ -36433,11 +38358,11 @@ __metadata: linkType: hard "tdigest@npm:^0.1.1": - version: 0.1.2 - resolution: "tdigest@npm:0.1.2" + version: 0.1.1 + resolution: "tdigest@npm:0.1.1" dependencies: - bintrees: 1.0.2 - checksum: 44de8246752b6f8c2924685f969fd3d94c36949f22b0907e99bef2b2220726dd8467f4730ea96b06040b9aa2587c0866049640039d1b956952dfa962bc2075a3 + bintrees: 1.0.1 + checksum: 4d05fd70fb0aa70aa101d01557722b7ef9a91b2ebf8dfc274ca9852220397a74e4ed6e59c55335b4b1dd0ac5e1b65d25b8d32ae01278fc3b783c40f6d84303e2 languageName: node linkType: hard @@ -36485,15 +38410,15 @@ __metadata: linkType: soft "teeny-request@npm:^8.0.0": - version: 8.0.1 - resolution: "teeny-request@npm:8.0.1" + version: 8.0.0 + resolution: "teeny-request@npm:8.0.0" dependencies: http-proxy-agent: ^5.0.0 https-proxy-agent: ^5.0.0 node-fetch: ^2.6.1 stream-events: ^1.0.5 uuid: ^8.0.0 - checksum: de37b23d5fe480dd36e99eb4e80f09d18737da0841f9d3f502b05c96183361ec7aef70db211d51d3527f967cbc94593781a392be6d285df576e5a74cc970627b + checksum: a867fb58406308e3ee8415f6b6612471a78af136971575bb51eb3ecf4b76d2ea363936da5eb68bbc28ef3d3af59e24dcf0803f1e80c8eb658c73cc9a53881c52 languageName: node linkType: hard @@ -36530,7 +38455,7 @@ __metadata: languageName: node linkType: hard -"terser-webpack-plugin@npm:^5.1.3": +"terser-webpack-plugin@npm:*, terser-webpack-plugin@npm:^5.1.3": version: 5.3.6 resolution: "terser-webpack-plugin@npm:5.3.6" dependencies: @@ -36552,9 +38477,9 @@ __metadata: languageName: node linkType: hard -"terser@npm:^5.10.0, terser@npm:^5.14.1, terser@npm:^5.3.8": - version: 5.15.0 - resolution: "terser@npm:5.15.0" +"terser@npm:^5.10.0, terser@npm:^5.14.1": + version: 5.14.2 + resolution: "terser@npm:5.14.2" dependencies: "@jridgewell/source-map": ^0.3.2 acorn: ^8.5.0 @@ -36562,7 +38487,7 @@ __metadata: source-map-support: ~0.5.20 bin: terser: bin/terser - checksum: b2358c989fcb76b4a1c265f60e175c950d3f776e5f619a9f58f54e8d2d792cd6b4cca86071834075f3b9943556d695357bafdd4ee2390de2fc9fd96ba3efa8c8 + checksum: cabb50a640d6c2cfb351e4f43dc7bf7436f649755bb83eb78b2cacda426d5e0979bd44e6f92d713f3ca0f0866e322739b9ced888ebbce6508ad872d08de74fcc languageName: node linkType: hard @@ -36578,8 +38503,8 @@ __metadata: linkType: hard "testcontainers@npm:^8.1.2": - version: 8.13.2 - resolution: "testcontainers@npm:8.13.2" + version: 8.13.1 + resolution: "testcontainers@npm:8.13.1" dependencies: "@balena/dockerignore": ^1.0.2 "@types/archiver": ^5.3.1 @@ -36593,7 +38518,7 @@ __metadata: properties-reader: ^2.2.0 ssh-remote-port-forward: ^1.0.4 tar-fs: ^2.1.1 - checksum: f73cdd78a0b532b7fd921de020241c70e855e4010d689ba520bed712f5448a39010f886bf2d8699f5ee8388ab73e901cd6a7b8ea04a8617092c3e630bef5a5f3 + checksum: a15345bed5a7e28cf521a01348ca5c0a9de67e274b628345ac91e6db69793c0f2044fb7634166d849eac1d9ea592c79319bdc7e1ec6c5a0208e2e74548c57a5a languageName: node linkType: hard @@ -36626,9 +38551,9 @@ __metadata: linkType: hard "textextensions@npm:^5.12.0, textextensions@npm:^5.13.0": - version: 5.15.0 - resolution: "textextensions@npm:5.15.0" - checksum: aa172e941e81b44e0d35fa217f758a0d8ba0342dac31539914225a2382b5792ef58bff3ec9009b9c85b0c0605f5a79a906bd97827a2e591d647137fcdbf867d3 + version: 5.14.0 + resolution: "textextensions@npm:5.14.0" + checksum: 1f610ccf2a2c1445fb7156c23b5c8defd608c74e8047df18abd4b9ee44c74d29b453ba104d14c53c91f9026670f7c923114cd12200ee5ec458cc518fd0798c74 languageName: node linkType: hard @@ -36712,11 +38637,11 @@ __metadata: linkType: hard "timers-browserify@npm:^2.0.4": - version: 2.0.12 - resolution: "timers-browserify@npm:2.0.12" + version: 2.0.11 + resolution: "timers-browserify@npm:2.0.11" dependencies: setimmediate: ^1.0.4 - checksum: ec37ae299066bef6c464dcac29c7adafba1999e7227a9bdc4e105a459bee0f0b27234a46bfd7ab4041da79619e06a58433472867a913d01c26f8a203f87cee70 + checksum: 2a2ecbfd0c2380078d4a1e63e4eeb46884156d8fca0efe34d6fd8c615d68ef1a7785888629157ab0e5720e3c0d7f57bf1766b2ad037feb9aea07cbff1623092c languageName: node linkType: hard @@ -36727,10 +38652,17 @@ __metadata: languageName: node linkType: hard +"timsort@npm:^0.3.0, timsort@npm:~0.3.0": + version: 0.3.0 + resolution: "timsort@npm:0.3.0" + checksum: 1a66cb897dacabd7dd7c91b7e2301498ca9e224de2edb9e42d19f5b17c4b6dc62a8d4cbc64f28be82aaf1541cb5a78ab49aa818f42a2989ebe049a64af731e2a + languageName: node + linkType: hard + "tiny-invariant@npm:^1.0.6": - version: 1.2.0 - resolution: "tiny-invariant@npm:1.2.0" - checksum: e09a718a7c4a499ba592cdac61f015d87427a0867ca07f50c11fd9b623f90cdba18937b515d4a5e4f43dac92370498d7bdaee0d0e7a377a61095e02c4a92eade + version: 1.1.0 + resolution: "tiny-invariant@npm:1.1.0" + checksum: 27d29bbb9e1d1d86e25766711c28ad91af6d67c87d561167077ac7fbce5212b97bbfe875e70bc369808e075748c825864c9b61f0e9f8652275ec86bcf4dcc924 languageName: node linkType: hard @@ -36765,11 +38697,11 @@ __metadata: linkType: hard "tmp-promise@npm:^3.0.2": - version: 3.0.3 - resolution: "tmp-promise@npm:3.0.3" + version: 3.0.2 + resolution: "tmp-promise@npm:3.0.2" dependencies: tmp: ^0.2.0 - checksum: f854f5307dcee6455927ec3da9398f139897faf715c5c6dcee6d9471ae85136983ea06662eba2edf2533bdcb0fca66d16648e79e14381e30c7fb20be9c1aa62c + checksum: 2d8457c9512e896633f64fab33e5e3fd273c4d8fca33cfc74a04a104a0b921d15ed3e832c4f2a50108635ac88264afef85abddbe5ad8480e15f55fc7f8e76969 languageName: node linkType: hard @@ -36791,7 +38723,7 @@ __metadata: languageName: node linkType: hard -"tmpl@npm:1.0.5": +"tmpl@npm:1.0.x": version: 1.0.5 resolution: "tmpl@npm:1.0.5" checksum: cd922d9b853c00fe414c5a774817be65b058d54a2d01ebb415840960406c669a0fc632f66df885e24cb022ec812739199ccbdb8d1164c3e513f85bfca5ab2873 @@ -36874,12 +38806,12 @@ __metadata: linkType: hard "token-types@npm:^4.1.1": - version: 4.2.1 - resolution: "token-types@npm:4.2.1" + version: 4.1.1 + resolution: "token-types@npm:4.1.1" dependencies: "@tokenizer/token": ^0.3.0 ieee754: ^1.2.1 - checksum: cce256766b33e0f08ceffefa2198fb4961a417866d00780e58625999ab5c0699821407053e64eadc41b00bbb6c0d0c4d02fbd2199940d8a3ccb71e1b148ab9a2 + checksum: 8fe4e84611f6c575439b24003650064a2abe8f7c848cdf84dfa233792e4081226e538d567825954d536eadee3a17d902db62ce652b2b1191b772caf1c7d0e312 languageName: node linkType: hard @@ -36920,14 +38852,13 @@ __metadata: linkType: hard "tough-cookie@npm:^4.0.0": - version: 4.1.2 - resolution: "tough-cookie@npm:4.1.2" + version: 4.0.0 + resolution: "tough-cookie@npm:4.0.0" dependencies: psl: ^1.1.33 punycode: ^2.1.1 - universalify: ^0.2.0 - url-parse: ^1.5.3 - checksum: a7359e9a3e875121a84d6ba40cc184dec5784af84f67f3a56d1d2ae39b87c0e004e6ba7c7331f9622a7d2c88609032473488b28fe9f59a1fec115674589de39a + universalify: ^0.1.2 + checksum: 0891b37eb7d17faa3479d47f0dce2e3007f2583094ad272f2670d120fbcc3df3b0b0a631ba96ecad49f9e2297d93ff8995ce0d3292d08dd7eabe162f5b224d69 languageName: node linkType: hard @@ -36987,13 +38918,6 @@ __metadata: languageName: node linkType: hard -"trim-lines@npm:^3.0.0": - version: 3.0.1 - resolution: "trim-lines@npm:3.0.1" - checksum: e241da104682a0e0d807222cc1496b92e716af4db7a002f4aeff33ae6a0024fef93165d49eab11aa07c71e1347c42d46563f91dfaa4d3fb945aa535cdead53ed - languageName: node - linkType: hard - "trim-newlines@npm:^3.0.0": version: 3.0.1 resolution: "trim-newlines@npm:3.0.1" @@ -37001,6 +38925,13 @@ __metadata: languageName: node linkType: hard +"trim-off-newlines@npm:^1.0.0": + version: 1.0.3 + resolution: "trim-off-newlines@npm:1.0.3" + checksum: faf042bb7dd4cb097ab6d358cd51012a9ff5e06f7f2c6570da2ef6f01da9da3ff22ab01080866815e3927ffbf367d57c6aab4c275c67662676b60c563142a558 + languageName: node + linkType: hard + "triple-beam@npm:^1.3.0": version: 1.3.0 resolution: "triple-beam@npm:1.3.0" @@ -37009,9 +38940,9 @@ __metadata: linkType: hard "trough@npm:^2.0.0": - version: 2.1.0 - resolution: "trough@npm:2.1.0" - checksum: a577bb561c2b401cc0e1d9e188fcfcdf63b09b151ff56a668da12197fe97cac15e3d77d5b51f426ccfd94255744a9118e9e9935afe81a3644fa1be9783c82886 + version: 2.0.2 + resolution: "trough@npm:2.0.2" + checksum: e0c18f3fb4c26e84d7864528f49a3f43a8fef8245d6ffe1fced90a867ea88be9838948fd98cf838da448700f5e4ec909576a469719db5e9833f5b58fed26dfa0 languageName: node linkType: hard @@ -37046,9 +38977,9 @@ __metadata: linkType: hard "ts-log@npm:^2.2.3": - version: 2.2.5 - resolution: "ts-log@npm:2.2.5" - checksum: 28f78ab15b8555d56c089dbc243327d8ce4331219956242a29fc4cb3bad6bb0cb8234dd17a292381a1b1dba99a7e4849a2181b2e1a303e8247e9f4ca4e284f2d + version: 2.2.3 + resolution: "ts-log@npm:2.2.3" + checksum: 8aa34a2724d7915ddc6de8d0c27eb48f67206b52c42656f1ea2a7ffb080fa664db5fb22b42bd3c72b5b95cc6eb4612196b7d1e28f4bc146191ebc2a9683af548 languageName: node linkType: hard @@ -37119,7 +39050,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:2.3.1": +"tslib@npm:2.3.1, tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.2.0, tslib@npm:^2.3.1, tslib@npm:~2.3.0": version: 2.3.1 resolution: "tslib@npm:2.3.1" checksum: de17a98d4614481f7fcb5cd53ffc1aaf8654313be0291e1bfaee4b4bb31a20494b7d218ff2e15017883e8ea9626599b3b0e0229c18383ba9dce89da2adf15cb9 @@ -37133,7 +39064,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:~2.4.0": +"tslib@npm:^2.1.0, tslib@npm:^2.4.0, tslib@npm:~2.4.0": version: 2.4.0 resolution: "tslib@npm:2.4.0" checksum: 8c4aa6a3c5a754bf76aefc38026134180c053b7bd2f81338cb5e5ebf96fefa0f417bff221592bf801077f5bf990562f6264fecbc42cd3309b33872cb6fc3b113 @@ -37297,13 +39228,13 @@ __metadata: linkType: hard "typed-rest-client@npm:^1.8.4": - version: 1.8.9 - resolution: "typed-rest-client@npm:1.8.9" + version: 1.8.4 + resolution: "typed-rest-client@npm:1.8.4" dependencies: qs: ^6.9.1 tunnel: 0.0.6 underscore: ^1.12.1 - checksum: 615c95872d9b4d4caa7eb44d639d9044fc41602a16c3855b87deae9e97d6df168c9501a40a1fe003ced4984335684b3dfdadcf24ac0b50657f4cd9026df40e1c + checksum: 238e2139724310fed39756ae734fbc811e803abaa7598720ad6cc5ab7f160d415d8107551422b186f6b2e08c5761c0e7b66ca47d60b2ccd952bb5e20d3b92f3c languageName: node linkType: hard @@ -37341,7 +39272,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:~4.6.0": +"typescript@npm:~4.6.0, typescript@npm:~4.6.3": version: 4.6.4 resolution: "typescript@npm:4.6.4" bin: @@ -37351,7 +39282,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:~4.7.0, typescript@npm:~4.7.4": +"typescript@npm:~4.7.0": version: 4.7.4 resolution: "typescript@npm:4.7.4" bin: @@ -37361,7 +39292,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@~4.6.0#~builtin": +"typescript@patch:typescript@~4.6.0#~builtin, typescript@patch:typescript@~4.6.3#~builtin": version: 4.6.4 resolution: "typescript@patch:typescript@npm%3A4.6.4#~builtin::version=4.6.4&hash=a1c5e5" bin: @@ -37371,7 +39302,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@~4.7.0#~builtin, typescript@patch:typescript@~4.7.4#~builtin": +"typescript@patch:typescript@~4.7.0#~builtin": version: 4.7.4 resolution: "typescript@patch:typescript@npm%3A4.7.4#~builtin::version=4.7.4&hash=a1c5e5" bin: @@ -37381,10 +39312,10 @@ __metadata: languageName: node linkType: hard -"ua-parser-js@npm:^0.7.30": - version: 0.7.31 - resolution: "ua-parser-js@npm:0.7.31" - checksum: e2f8324a83d1715601576af85b2b6c03890699aaa7272950fc77ea925c70c5e4f75060ae147dc92124e49f7f0e3d6dd2b0a91e7f40d267e92df8894be967ba8b +"ua-parser-js@npm:^0.7.18": + version: 0.7.28 + resolution: "ua-parser-js@npm:0.7.28" + checksum: a7da4ad54527211e878ee016c2ef64efad5c2f5a31277d36c9da93b4c89ecaa64f391ad4cf158ada76a9ad8e53004a950705ff1c2f27a52ca8bfb3f1381c39ff languageName: node linkType: hard @@ -37395,7 +39326,16 @@ __metadata: languageName: node linkType: hard -"uglify-js@npm:^3.1.4, uglify-js@npm:^3.7.7": +"uglify-js@npm:^3.1.4": + version: 3.14.3 + resolution: "uglify-js@npm:3.14.3" + bin: + uglifyjs: bin/uglifyjs + checksum: eef57b4fec031f687bef46182c33de5eff6bc40fec8d46152f3b92bb044602dd524a04e33ca5f7391f82db969b92ef6aded860f8a4ee5f4bf796d7420b030236 + languageName: node + linkType: hard + +"uglify-js@npm:^3.7.7": version: 3.17.0 resolution: "uglify-js@npm:3.17.0" bin: @@ -37413,20 +39353,13 @@ __metadata: languageName: node linkType: hard -"uid2@npm:0.0.3": +"uid2@npm:0.0.3, uid2@npm:0.0.x": version: 0.0.3 resolution: "uid2@npm:0.0.3" checksum: c8f64acfa94aa42d90c1a61ba9df0162f0db0d28c211e21cf5792b3d70b7ad9fd75d19c7cadcce81896ea111335e57e65891a3b6d0a1343a9adf45abf3d4c47d languageName: node linkType: hard -"uid2@npm:0.0.x": - version: 0.0.4 - resolution: "uid2@npm:0.0.4" - checksum: e92325ce2e3b7be504b19e835dbb5a8b0495031f364b08ca46745468ed0ae0f202a4fdaf99a1a2715844156efc3ab410456ae24a0f7c0ae4b0a2e9f2784edfd9 - languageName: node - linkType: hard - "uid2@npm:^1.0.0": version: 1.0.0 resolution: "uid2@npm:1.0.0" @@ -37434,7 +39367,7 @@ __metadata: languageName: node linkType: hard -"unbox-primitive@npm:^1.0.2": +"unbox-primitive@npm:^1.0.1, unbox-primitive@npm:^1.0.2": version: 1.0.2 resolution: "unbox-primitive@npm:1.0.2" dependencies: @@ -37470,17 +39403,38 @@ __metadata: languageName: node linkType: hard -"underscore@npm:^1.12.1, underscore@npm:^1.9.1, underscore@npm:~1.13.2": +"underscore@npm:^1.12.1, underscore@npm:^1.9.1": + version: 1.13.1 + resolution: "underscore@npm:1.13.1" + checksum: 69bb4e6dd92c387ad322dd5b105f496fa64896d92ff1eea987610920d452667a12bca0938def4c4d60acd12da62410540fd268e7ca4f2480d89324498382fcac + languageName: node + linkType: hard + +"underscore@npm:~1.13.2": version: 1.13.4 resolution: "underscore@npm:1.13.4" checksum: 6b04f66cd454e8793a552dc49c71e24e5208a29b9d9c0af988a96948af79103399c36fb15db43f3629bfed152f8b1fe94f44e1249e9d196069c0fc7edfadb636 languageName: node linkType: hard +"undici@npm:5.5.1": + version: 5.5.1 + resolution: "undici@npm:5.5.1" + checksum: c041c9093df7ec683479a9555581206a7c7bebfc1ed6e8669920e55618461fc4ce08938e2fbf8ef7d692c2813c44392b5ed25c58396ee4a72ffd1f1f953712c9 + languageName: node + linkType: hard + "undici@npm:^5.8.0": - version: 5.10.0 - resolution: "undici@npm:5.10.0" - checksum: 7ba2b71dccc74cd2bdf645b83e9aaef374ae04855943d0a2f42a3d0b9e5556f37cc9b5156fb5288277a2fa95fd46a56f3ae0d5cf73db3f008d75ec41104b136c + version: 5.8.0 + resolution: "undici@npm:5.8.0" + checksum: 7b486ad064da00628d3906e140b86223023cd3494c811da8d7aa1375c2392fe6a6ac421af236c056fd3d3136bba3a91b99e0505dde071dd946070946eb0718b8 + languageName: node + linkType: hard + +"unicode-canonical-property-names-ecmascript@npm:^1.0.4": + version: 1.0.4 + resolution: "unicode-canonical-property-names-ecmascript@npm:1.0.4" + checksum: cc1973b18d0e1a151711e5551f87f4b3086c4f542cd5142aa691307d5720fd725fa7d36c24e12e944e108b91c72554237b0c236772d35592839434da5506c40f languageName: node linkType: hard @@ -37491,6 +39445,16 @@ __metadata: languageName: node linkType: hard +"unicode-match-property-ecmascript@npm:^1.0.4": + version: 1.0.4 + resolution: "unicode-match-property-ecmascript@npm:1.0.4" + dependencies: + unicode-canonical-property-names-ecmascript: ^1.0.4 + unicode-property-aliases-ecmascript: ^1.0.4 + checksum: 08e269fac71b5ace0f8331df9e87b9b533fe97b00c43ea58de69ae81816581490f846050e0c472279a3e7434524feba99915a93816f90dbbc0a30bcbd082da88 + languageName: node + linkType: hard + "unicode-match-property-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-match-property-ecmascript@npm:2.0.0" @@ -37501,6 +39465,13 @@ __metadata: languageName: node linkType: hard +"unicode-match-property-value-ecmascript@npm:^1.2.0": + version: 1.2.0 + resolution: "unicode-match-property-value-ecmascript@npm:1.2.0" + checksum: 2e663cfec8e2cf317b69613566314979f717034ea8f58a237dd63234795044a87337410064fe839774d71e1d7e12195520e9edd69ed8e28f2a9eb28a2db38595 + languageName: node + linkType: hard + "unicode-match-property-value-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-match-property-value-ecmascript@npm:2.0.0" @@ -37508,10 +39479,17 @@ __metadata: languageName: node linkType: hard +"unicode-property-aliases-ecmascript@npm:^1.0.4": + version: 1.1.0 + resolution: "unicode-property-aliases-ecmascript@npm:1.1.0" + checksum: 1a96dc462d251bb1c5237f7bc77956b29f01cefce7f3e7448430742930961557c3d1515a9669715ebb06209bf01072e2f78ba1627247017daa84346414bc02f1 + languageName: node + linkType: hard + "unicode-property-aliases-ecmascript@npm:^2.0.0": - version: 2.1.0 - resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" - checksum: 243524431893649b62cc674d877bd64ef292d6071dd2fd01ab4d5ad26efbc104ffcd064f93f8a06b7e4ec54c172bf03f6417921a0d8c3a9994161fe1f88f815b + version: 2.0.0 + resolution: "unicode-property-aliases-ecmascript@npm:2.0.0" + checksum: dda4d39128cbbede2ac60fbb85493d979ec65913b8a486bf7cb7a375a2346fa48cbf9dc6f1ae23376e7e8e684c2b411434891e151e865a661b40a85407db51d0 languageName: node linkType: hard @@ -37525,8 +39503,8 @@ __metadata: linkType: hard "unified@npm:^10.0.0": - version: 10.1.2 - resolution: "unified@npm:10.1.2" + version: 10.1.0 + resolution: "unified@npm:10.1.0" dependencies: "@types/unist": ^2.0.0 bail: ^2.0.0 @@ -37535,7 +39513,7 @@ __metadata: is-plain-obj: ^4.0.0 trough: ^2.0.0 vfile: ^5.0.0 - checksum: 053e7c65ede644607f87bd625a299e4b709869d2f76ec8138569e6e886903b6988b21cd9699e471eda42bee189527be0a9dac05936f1d069a5e65d0125d5d756 + checksum: b7e1d8dcf61d139ff57df1d393b177098a7fa53bddd47dd8c44cdfe983557d653719fd0ba3668a0be89a4a6189907327d56c2d13b21361e3d07b74f51b0d98ef languageName: node linkType: hard @@ -37551,6 +39529,13 @@ __metadata: languageName: node linkType: hard +"uniq@npm:^1.0.1": + version: 1.0.1 + resolution: "uniq@npm:1.0.1" + checksum: 8206535f83745ea83f9da7035f3b983fd6ed5e35b8ed7745441944e4065b616bc67cf0d0a23a86b40ee0074426f0607f0a138f9b78e124eb6a7a6a6966055709 + languageName: node + linkType: hard + "unique-filename@npm:^1.1.1": version: 1.1.1 resolution: "unique-filename@npm:1.1.1" @@ -37560,15 +39545,6 @@ __metadata: languageName: node linkType: hard -"unique-filename@npm:^2.0.0": - version: 2.0.1 - resolution: "unique-filename@npm:2.0.1" - dependencies: - unique-slug: ^3.0.0 - checksum: 807acf3381aff319086b64dc7125a9a37c09c44af7620bd4f7f3247fcd5565660ac12d8b80534dcbfd067e6fe88a67e621386dd796a8af828d1337a8420a255f - languageName: node - linkType: hard - "unique-slug@npm:^2.0.0": version: 2.0.2 resolution: "unique-slug@npm:2.0.2" @@ -37578,15 +39554,6 @@ __metadata: languageName: node linkType: hard -"unique-slug@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-slug@npm:3.0.0" - dependencies: - imurmurhash: ^0.1.4 - checksum: 49f8d915ba7f0101801b922062ee46b7953256c93ceca74303bd8e6413ae10aa7e8216556b54dc5382895e8221d04f1efaf75f945c2e4a515b4139f77aa6640c - languageName: node - linkType: hard - "unist-builder@npm:^3.0.0": version: 3.0.0 resolution: "unist-builder@npm:3.0.0" @@ -37611,41 +39578,60 @@ __metadata: linkType: hard "unist-util-position@npm:^4.0.0": - version: 4.0.3 - resolution: "unist-util-position@npm:4.0.3" - dependencies: - "@types/unist": ^2.0.0 - checksum: 0d89973628d40f19345cbcc50008f7f56d411afa54434bbe6c224b22d26aaf9d4500da2de363f1f01945acab1f1c31920c514253149eb546ff9b8bbc1ea94209 + version: 4.0.1 + resolution: "unist-util-position@npm:4.0.1" + checksum: 0fad25db3906eda7a4f6b769e094f124ab99c528db2f3d140d85abd9133e0e89dde2e4b593c69830d58921b089323067bbc6c4832529352d879b32b7297a3aa3 languageName: node linkType: hard "unist-util-stringify-position@npm:^3.0.0": - version: 3.0.2 - resolution: "unist-util-stringify-position@npm:3.0.2" + version: 3.0.0 + resolution: "unist-util-stringify-position@npm:3.0.0" dependencies: "@types/unist": ^2.0.0 - checksum: 2dfd7a0fb2a55e99cc319c3bf7f9f1f73ed652978fa70d19117faa7245d20f21738ec926ecc47f341705ca1bb157e87ced0b6bb5ecaa666bd2ae6b2510d6a671 + checksum: 460d5e16065942da7acd2578e92f4b8421c5af1f3f15ebc858db90865be69a5454dd6638d73f855cc82b1fa9e6e941a258f97b3f5f3be4f2766b0e6f6c45a031 languageName: node linkType: hard -"unist-util-visit-parents@npm:^5.0.0, unist-util-visit-parents@npm:^5.1.1": - version: 5.1.1 - resolution: "unist-util-visit-parents@npm:5.1.1" +"unist-util-visit-parents@npm:^4.0.0": + version: 4.1.1 + resolution: "unist-util-visit-parents@npm:4.1.1" dependencies: "@types/unist": ^2.0.0 unist-util-is: ^5.0.0 - checksum: c699d18f5b26461dee37612b84c243fd5457c98f4c0540d9ba8bee05062aece5f3b4fb1af6b07423ce6750d8926e8c01fc2b1a4de1e54925ef6795c177ed8e18 + checksum: 49d78984a6dd858a989f849d2b4330c8a04d1ee99c0e9920a5e37668cf847dab95db77a3bf0c8aaeb3e66abeae12e2d454949ec401614efef377d8f82d215662 + languageName: node + linkType: hard + +"unist-util-visit-parents@npm:^5.0.0": + version: 5.1.0 + resolution: "unist-util-visit-parents@npm:5.1.0" + dependencies: + "@types/unist": ^2.0.0 + unist-util-is: ^5.0.0 + checksum: 7c413dbb3dfcb679109fa8f0965d9abf117c3c53fa7b8823f68cac0ea53adbe98c1ce954d36c034e086c966b48b1d44d42c85f7bf6b42a032f728ac338929513 + languageName: node + linkType: hard + +"unist-util-visit@npm:^3.0.0": + version: 3.1.0 + resolution: "unist-util-visit@npm:3.1.0" + dependencies: + "@types/unist": ^2.0.0 + unist-util-is: ^5.0.0 + unist-util-visit-parents: ^4.0.0 + checksum: c37dbc0c5509f85f3abdf46d927b3dd11e6c419159771b1f1a5ce446d36ac993d04b087e28bc6173a172e0fbe9d77e997f120029b2b449766ebe55b6f6e0cc2c languageName: node linkType: hard "unist-util-visit@npm:^4.0.0": - version: 4.1.1 - resolution: "unist-util-visit@npm:4.1.1" + version: 4.1.0 + resolution: "unist-util-visit@npm:4.1.0" dependencies: "@types/unist": ^2.0.0 unist-util-is: ^5.0.0 - unist-util-visit-parents: ^5.1.1 - checksum: c4a63734b0a5b439c62d20901bb472bdafdbbcd80c383e254aedeb98b23d0bae815a331e776ce7d63ea3c8018a54318abb8709d07cdf7dd094f79b2f07bb39f0 + unist-util-visit-parents: ^5.0.0 + checksum: 3521abee2ed4535092aac073d05f46255475c89781b8e9d8c951a473d91b5d6e4d5912ae4a68a4c1cf17a42ed0108cb93103c7f5c736977529969997451363fb languageName: node linkType: hard @@ -37666,20 +39652,13 @@ __metadata: languageName: node linkType: hard -"universalify@npm:^0.1.0": +"universalify@npm:^0.1.0, universalify@npm:^0.1.2": version: 0.1.2 resolution: "universalify@npm:0.1.2" checksum: 40cdc60f6e61070fe658ca36016a8f4ec216b29bf04a55dce14e3710cc84c7448538ef4dad3728d0bfe29975ccd7bfb5f414c45e7b78883567fb31b246f02dff languageName: node linkType: hard -"universalify@npm:^0.2.0": - version: 0.2.0 - resolution: "universalify@npm:0.2.0" - checksum: e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 - languageName: node - linkType: hard - "universalify@npm:^2.0.0": version: 2.0.0 resolution: "universalify@npm:2.0.0" @@ -37727,9 +39706,9 @@ __metadata: languageName: node linkType: hard -"update-browserslist-db@npm:^1.0.9": - version: 1.0.9 - resolution: "update-browserslist-db@npm:1.0.9" +"update-browserslist-db@npm:^1.0.4": + version: 1.0.5 + resolution: "update-browserslist-db@npm:1.0.5" dependencies: escalade: ^3.1.1 picocolors: ^1.0.0 @@ -37737,7 +39716,7 @@ __metadata: browserslist: ">= 4.21.0" bin: browserslist-lint: cli.js - checksum: f625899b236f6a4d7f62b56be1b8da230c5563d1fef84d3ef148f2e1a3f11a5a4b3be4fd7e3703e51274c116194017775b10afb4de09eb2c0d09d36b90f1f578 + checksum: 7e425fe5dbbebdccf72a84ce70ec47fc74dce561d28f47bc2b84a1c2b84179a862c2261b18ab66a5e73e261c7e2ef9e11c6129112989d4d52e8f75a56bb923f8 languageName: node linkType: hard @@ -37760,11 +39739,11 @@ __metadata: linkType: hard "uri-js@npm:^4.2.2": - version: 4.4.1 - resolution: "uri-js@npm:4.4.1" + version: 4.2.2 + resolution: "uri-js@npm:4.2.2" dependencies: punycode: ^2.1.0 - checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 + checksum: 5a91c55d8ae6d9a1ff9dc1b0774888a99aae7cc6e9056c57b709275c0f6753b05cd1a9f2728a1479244b93a9f57ab37c60d277a48d9f2d032d6ae65837bf9bc7 languageName: node linkType: hard @@ -37775,7 +39754,7 @@ __metadata: languageName: node linkType: hard -"url-parse@npm:^1.5.3, url-parse@npm:^1.5.8": +"url-parse@npm:^1.5.8": version: 1.5.10 resolution: "url-parse@npm:1.5.10" dependencies: @@ -37786,9 +39765,9 @@ __metadata: linkType: hard "url-value-parser@npm:^2.0.0": - version: 2.2.0 - resolution: "url-value-parser@npm:2.2.0" - checksum: d5fd52b3526bb5db20384c6ab95ff8f8d1f37daaadfb2a8d8c70f60810997a60d80dbff35de681850356d2117c948ca9cb9c5d903d75fb63f021c890d63440c6 + version: 2.0.3 + resolution: "url-value-parser@npm:2.0.3" + checksum: f13a2693b633896329956372a58a1c0f6666d72b87c85dff05564a132c1a5d2a698ca3097a481bf06afc1f5007c08ec67499136736c25c38f3ee84e877d72732 languageName: node linkType: hard @@ -37835,11 +39814,11 @@ __metadata: linkType: hard "use-memo-one@npm:^1.1.1": - version: 1.1.3 - resolution: "use-memo-one@npm:1.1.3" + version: 1.1.1 + resolution: "use-memo-one@npm:1.1.1" peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 8f08eba26d69406b61bb4b8dacdd5a92bd6aef5b53d346dfe87954f7330ee10ecabc937cc7854635155d46053828e85c10b5a5aff7a04720e6a97b9f42999bac + react: ^16.8.0 + checksum: 39ede232b8c95e6e1ff4f9d9b3f45826b6c1a51a8baae562f49867c569929323ec1e100186aa5111b84f6650bcf273746faf2739091cbe13d6c2e8d3306cc254 languageName: node linkType: hard @@ -37958,7 +39937,7 @@ __metadata: languageName: node linkType: hard -"uuid@npm:^3.3.2, uuid@npm:^3.4.0": +"uuid@npm:^3.3.2": version: 3.4.0 resolution: "uuid@npm:3.4.0" bin: @@ -37968,8 +39947,8 @@ __metadata: linkType: hard "uvu@npm:^0.5.0": - version: 0.5.6 - resolution: "uvu@npm:0.5.6" + version: 0.5.3 + resolution: "uvu@npm:0.5.3" dependencies: dequal: ^2.0.0 diff: ^5.0.0 @@ -37977,7 +39956,7 @@ __metadata: sade: ^1.7.3 bin: uvu: bin.js - checksum: 09460a37975627de9fcad396e5078fb844d01aaf64a6399ebfcfd9e55f1c2037539b47611e8631f89be07656962af0cf48c334993db82b9ae9c3d25ce3862168 + checksum: 0cf8e9e6ec79199dacc64fe0e9f82b5bf1d2308f3c54ec1aba5d1ca0a4beff4f173cae0f87bc52d35121565fd232b969fbf52cca3707e20517e62645e19b898e languageName: node linkType: hard @@ -38096,15 +40075,15 @@ __metadata: linkType: hard "vasync@npm:^2.2.0": - version: 2.2.1 - resolution: "vasync@npm:2.2.1" + version: 2.2.0 + resolution: "vasync@npm:2.2.0" dependencies: verror: 1.10.0 - checksum: dca14090436f1b30d4887737af47bc8333795a6d45e520e583ca2c4476d841bf68606cbc79071cfd980e3e42e630736d66a598b9100a505663442ae2e7c2f92f + checksum: dcfafe19a6d3e51b6cc30e98f8e25dec5b4b71bb699eafa5e1840275337f8345753a86a036428442abae7c2cb4ff8f352cd64e245f8c7aaeac89efc512081e91 languageName: node linkType: hard -"verror@npm:1.10.0": +"verror@npm:1.10.0, verror@npm:^1.8.1": version: 1.10.0 resolution: "verror@npm:1.10.0" dependencies: @@ -38115,36 +40094,25 @@ __metadata: languageName: node linkType: hard -"verror@npm:^1.8.1": - version: 1.10.1 - resolution: "verror@npm:1.10.1" - dependencies: - assert-plus: ^1.0.0 - core-util-is: 1.0.2 - extsprintf: ^1.2.0 - checksum: 690a8d6ad5a4001672290e9719e3107c86269bc45fe19f844758eecf502e59f8aa9631b19b839f6d3dea562334884d22d1eb95ae7c863032075a9212c889e116 - languageName: node - linkType: hard - "vfile-message@npm:^3.0.0": - version: 3.1.2 - resolution: "vfile-message@npm:3.1.2" + version: 3.0.2 + resolution: "vfile-message@npm:3.0.2" dependencies: "@types/unist": ^2.0.0 unist-util-stringify-position: ^3.0.0 - checksum: 96fbd9e9b5e0babb5ee61e3a716dc7a6a8c28f2c8c711837d95c88b782161b31549ad16059a78990d7b836d0f4d3b4d8c9ffde44370d48d9cac991fc1e3e17c5 + checksum: 02d50c6652a38c96dbb8cbcc1e8d5b083799a3bf99ba1cf85332e2129e9b569582201fca03839a4205161fe578ebbb31d9bdc52b2cff352051546c99bdd97df3 languageName: node linkType: hard "vfile@npm:^5.0.0": - version: 5.3.5 - resolution: "vfile@npm:5.3.5" + version: 5.1.0 + resolution: "vfile@npm:5.1.0" dependencies: "@types/unist": ^2.0.0 is-buffer: ^2.0.0 unist-util-stringify-position: ^3.0.0 vfile-message: ^3.0.0 - checksum: 14a9ea19d1801bb99fc9a451d220d2ee84d891bae52094db660f9bf637c1cada0c45a3e00962ff3e901da16dd5051367e25a4a214e40db57ae40f57363796b45 + checksum: f626578bfdff42bd38c4117ad1f43d2c4bebe2df9ca1a861ece542f4f42dfa415405cb96c4a01759fee1bdcf778281c936467497c71a0d097c73367e8c11f30a languageName: node linkType: hard @@ -38194,10 +40162,10 @@ __metadata: languageName: node linkType: hard -"vscode-languageserver-types@npm:^3.17.1": - version: 3.17.2 - resolution: "vscode-languageserver-types@npm:3.17.2" - checksum: ef2d862d22f622b64de0f428773d50a5928ec6cdd485960a7564ebe4fd4a3c8bcd956f29eb15bc45a0f353846e62f39f6c764d2ab85ce774b8724411ba84342f +"vscode-languageserver-types@npm:^3.15.1": + version: 3.15.1 + resolution: "vscode-languageserver-types@npm:3.15.1" + checksum: 28c1cb0d5b7ad7c719015a6eb5f774c000fe68c41bbd4a3fd0cbe6d862f27eec075d6bfb14c9d86c22d0e8711c2df8194295bf1e7d6ac0c359cab348c5e14887 languageName: node linkType: hard @@ -38211,9 +40179,9 @@ __metadata: linkType: hard "w3c-keyname@npm:^2.2.4": - version: 2.2.6 - resolution: "w3c-keyname@npm:2.2.6" - checksum: 59a31d23ca9953c01c99ed6695fee5b6ea36eb2412d76a21fe4302ab33a3f5cd96c006a763940b6115c3d042c16d3564eeee1156832217d028af0518098b3a42 + version: 2.2.4 + resolution: "w3c-keyname@npm:2.2.4" + checksum: 890180452bdd7d25f05deb97b3c0839911264432a7c5dd8dc4c9d9b6384237a66d66b7c2a145440b607826d5aa61cd90098cfffcf50b50c0e4c2259b0d208038 languageName: node linkType: hard @@ -38256,15 +40224,15 @@ __metadata: linkType: hard "walker@npm:^1.0.7": - version: 1.0.8 - resolution: "walker@npm:1.0.8" + version: 1.0.7 + resolution: "walker@npm:1.0.7" dependencies: - makeerror: 1.0.12 - checksum: ad7a257ea1e662e57ef2e018f97b3c02a7240ad5093c392186ce0bcf1f1a60bbadd520d073b9beb921ed99f64f065efb63dfc8eec689a80e569f93c1c5d5e16c + makeerror: 1.0.x + checksum: 4038fcf92f6ab0288267ad05008aec9e089a759f1bd32e1ea45cc2eb498eb12095ec43cf8ca2bf23a465f4580a0d33b25b89f450ba521dd27083cbc695ee6bf5 languageName: node linkType: hard -"watchpack@npm:^2.4.0": +"watchpack@npm:^2.0.0-beta.10, watchpack@npm:^2.4.0": version: 2.4.0 resolution: "watchpack@npm:2.4.0" dependencies: @@ -38305,17 +40273,17 @@ __metadata: languageName: node linkType: hard -"web-streams-polyfill@npm:4.0.0-beta.3": - version: 4.0.0-beta.3 - resolution: "web-streams-polyfill@npm:4.0.0-beta.3" - checksum: dfec1fbf52b9140e4183a941e380487b6c3d5d3838dd1259be81506c1c9f2abfcf5aeb670aeeecfd9dff4271a6d8fef931b193c7bedfb42542a3b05ff36c0d16 +"web-streams-polyfill@npm:4.0.0-beta.1": + version: 4.0.0-beta.1 + resolution: "web-streams-polyfill@npm:4.0.0-beta.1" + checksum: 94c21d3aba1c26e5942bb210ffd60c6990cbc750d34bdf548ed93ed845f0a6eac89cdae1dd0195afaba15fbcf4aaca9e397ee40fa4d1f2c191d04d43717bd065 languageName: node linkType: hard "web-streams-polyfill@npm:^3.2.0": - version: 3.2.1 - resolution: "web-streams-polyfill@npm:3.2.1" - checksum: b119c78574b6d65935e35098c2afdcd752b84268e18746606af149e3c424e15621b6f1ff0b42b2676dc012fc4f0d313f964b41a4b5031e525faa03997457da02 + version: 3.2.0 + resolution: "web-streams-polyfill@npm:3.2.0" + checksum: e23ad0649392fa0159dbfc6bb27474c308c3f332d9078cfef3c06c154165bef18732c5814126147c6c712f604216ddc950c171c854e3821f020e0d2d721a5958 languageName: node linkType: hard @@ -38354,23 +40322,23 @@ __metadata: linkType: hard "webpack-dev-middleware@npm:^5.3.1": - version: 5.3.3 - resolution: "webpack-dev-middleware@npm:5.3.3" + version: 5.3.1 + resolution: "webpack-dev-middleware@npm:5.3.1" dependencies: colorette: ^2.0.10 - memfs: ^3.4.3 + memfs: ^3.4.1 mime-types: ^2.1.31 range-parser: ^1.2.1 schema-utils: ^4.0.0 peerDependencies: webpack: ^4.0.0 || ^5.0.0 - checksum: dd332cc6da61222c43d25e5a2155e23147b777ff32fdf1f1a0a8777020c072fbcef7756360ce2a13939c3f534c06b4992a4d659318c4a7fe2c0530b52a8a6621 + checksum: 32e36b5893dde4107e5bb758afdc7fc61fd238a62635cb2964ed6b61e363793275a40870479daeae3fa3b87678c1311f44ba7492f6ebf30fe9360f2aab30bae1 languageName: node linkType: hard "webpack-dev-server@npm:^4.7.3": - version: 4.11.0 - resolution: "webpack-dev-server@npm:4.11.0" + version: 4.10.1 + resolution: "webpack-dev-server@npm:4.10.1" dependencies: "@types/bonjour": ^3.5.9 "@types/connect-history-api-fallback": ^1.3.5 @@ -38408,7 +40376,7 @@ __metadata: optional: true bin: webpack-dev-server: bin/webpack-dev-server.js - checksum: b2c7e9810138d0c6fa670a890410a74b29d4dd23d428e92e61e0233c542689f57caf9b31c031fbcc772170b6710b0752e81fa9cbc41ac0deefdc32d5749ce08d + checksum: d026e6be63058ba5f881c58c9d49367a26c43d76bb7c2a1d9fb80eeae644099cc098913b4e9f32e2ed89eff0e7cc08e03cae8a1c4e7a1c8f67c5c673ab70761e languageName: node linkType: hard @@ -38436,7 +40404,7 @@ __metadata: languageName: node linkType: hard -"webpack@npm:^5, webpack@npm:^5.1.0, webpack@npm:^5.70.0": +"webpack@npm:^5, webpack@npm:^5.70.0": version: 5.74.0 resolution: "webpack@npm:5.74.0" dependencies: @@ -38580,16 +40548,17 @@ __metadata: linkType: hard "which-typed-array@npm:^1.1.2": - version: 1.1.8 - resolution: "which-typed-array@npm:1.1.8" + version: 1.1.4 + resolution: "which-typed-array@npm:1.1.4" dependencies: - available-typed-arrays: ^1.0.5 - call-bind: ^1.0.2 - es-abstract: ^1.20.0 - for-each: ^0.3.3 - has-tostringtag: ^1.0.0 - is-typed-array: ^1.1.9 - checksum: bedf4d30a738e848404fe67fe0ace33433a7298cf3f5a4d4b2c624ba99c4d25f06a7fd6f3566c3d16af5f8a54f0c6293cbfded5b1208ce11812753990223b45a + available-typed-arrays: ^1.0.2 + call-bind: ^1.0.0 + es-abstract: ^1.18.0-next.1 + foreach: ^2.0.5 + function-bind: ^1.1.1 + has-symbols: ^1.0.1 + is-typed-array: ^1.1.3 + checksum: 369597a623b0e446eb7b6ce9e2f515c2f6a0b3f5040b9c592d9ed07fb3357a90ab45311230f7e687cf0f0d410b47e98fba620dbb7eece9f556309a3448b4fa3e languageName: node linkType: hard @@ -38645,10 +40614,9 @@ __metadata: linkType: hard "winston@npm:^3.2.1, winston@npm:^3.7.2, winston@npm:^3.8.1": - version: 3.8.2 - resolution: "winston@npm:3.8.2" + version: 3.8.1 + resolution: "winston@npm:3.8.1" dependencies: - "@colors/colors": 1.5.0 "@dabh/diagnostics": ^2.0.2 async: ^3.2.3 is-stream: ^2.0.0 @@ -38659,7 +40627,7 @@ __metadata: stack-trace: 0.0.x triple-beam: ^1.3.0 winston-transport: ^4.5.0 - checksum: f7b901798b92ab9e93c850110bf6e98500e9a0e762b62dab410cf928b2a4145533dfa6d3d2b24f7bf0dc94b53808d5bd28aaaeff9a4b43b89ea4c798cce308ea + checksum: 14637222a4239f1ee7e629dbbf0c65161abe95eeb7acd275caf210c5d47d93254fdb007291ea75b5e241d4bb6dd3c29d000bd04ae5420a347711ae7cd0b2da88 languageName: node linkType: hard @@ -38740,12 +40708,12 @@ __metadata: linkType: hard "write-file-atomic@npm:^4.0.0": - version: 4.0.2 - resolution: "write-file-atomic@npm:4.0.2" + version: 4.0.1 + resolution: "write-file-atomic@npm:4.0.1" dependencies: imurmurhash: ^0.1.4 signal-exit: ^3.0.7 - checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c + checksum: 8f780232533ca6223c63c9b9c01c4386ca8c625ebe5017a9ed17d037aec19462ae17109e0aa155bff5966ee4ae7a27b67a99f55caf3f32ffd84155e9da3929fc languageName: node linkType: hard @@ -38788,7 +40756,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:8.8.1, ws@npm:^8.3.0, ws@npm:^8.4.2": +"ws@npm:8.8.1, ws@npm:^8.3.0": version: 8.8.1 resolution: "ws@npm:8.8.1" peerDependencies: @@ -38803,7 +40771,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^5.2.0 || ^6.0.0 || ^7.0.0, ws@npm:^7.3.1, ws@npm:^7.4.6": +"ws@npm:^5.2.0 || ^6.0.0 || ^7.0.0": version: 7.5.9 resolution: "ws@npm:7.5.9" peerDependencies: @@ -38818,6 +40786,36 @@ __metadata: languageName: node linkType: hard +"ws@npm:^7.3.1, ws@npm:^7.4.6": + version: 7.5.6 + resolution: "ws@npm:7.5.6" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 0c2ffc9a539dd61dd2b00ff6cc5c98a3371e2521011fe23da4b3578bb7ac26cbdf7ca8a68e8e08023c122ae247013216dde2a20c908de415a6bcc87bdef68c87 + languageName: node + linkType: hard + +"ws@npm:^8.4.2": + version: 8.5.0 + resolution: "ws@npm:8.5.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 76f2f90e40344bf18fd544194e7067812fb1372b2a37865678d8f12afe4b478ff2ebc0c7c0aff82cd5e6b66fc43d889eec0f1865c2365d8f7a66d92da7744a77 + languageName: node + linkType: hard + "ws@npm:~7.4.2": version: 7.4.6 resolution: "ws@npm:7.4.6" @@ -38862,12 +40860,12 @@ __metadata: linkType: hard "xml-crypto@npm:^2.1.3": - version: 2.1.4 - resolution: "xml-crypto@npm:2.1.4" + version: 2.1.3 + resolution: "xml-crypto@npm:2.1.3" dependencies: "@xmldom/xmldom": ^0.7.0 xpath: 0.0.32 - checksum: a4ff9803d5cbdc8af4f55660ff16fd60f7f5157cfca2043ac68897938f868b037886b7e2132b965c06ecd6dd60bad1be8e8377324b9c9a73e79f3c85cfbe734c + checksum: 04273568b4ed3d1422b7e93ae7c5e8e14180e9d377038a5767ef6af4d1da2ec766f3a476f4cf0140ecedb93036dac63e563f60d9bb249c5a344d77c93c07ff87 languageName: node linkType: hard @@ -38973,14 +40971,14 @@ __metadata: linkType: hard "xss@npm:^1.0.8": - version: 1.0.14 - resolution: "xss@npm:1.0.14" + version: 1.0.10 + resolution: "xss@npm:1.0.10" dependencies: commander: ^2.20.3 cssfilter: 0.0.10 bin: xss: bin/xss - checksum: 77c6a60a5f96490098ef837c3b49321c0f31963f323c748cb0a01bc02fc6e465a6accbe4c54cad62f8d6ffe647d984be173879433af861883f6213d9416d3f53 + checksum: 0dbc70a716020d854569610d5bc949ba9d3b7f530b7af5508ffe84edaea228c34a4e1227f71cb3a4741373b1c49c3cb691f69dddefda45a594a31f112ae6a738 languageName: node linkType: hard @@ -39054,7 +41052,7 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:20.2.4": +"yargs-parser@npm:20.2.4, yargs-parser@npm:^20.2.3": version: 20.2.4 resolution: "yargs-parser@npm:20.2.4" checksum: d251998a374b2743a20271c2fd752b9fbef24eb881d53a3b99a7caa5e8227fcafd9abf1f345ac5de46435821be25ec12189a11030c12ee6481fef6863ed8b924 @@ -39071,7 +41069,7 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3": +"yargs-parser@npm:^20.2.2": version: 20.2.9 resolution: "yargs-parser@npm:20.2.9" checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 @@ -39129,7 +41127,22 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^17.0.0, yargs@npm:^17.1.1, yargs@npm:^17.2.1, yargs@npm:^17.3.1": +"yargs@npm:^17.0.0, yargs@npm:^17.2.1": + version: 17.3.1 + resolution: "yargs@npm:17.3.1" + dependencies: + cliui: ^7.0.2 + escalade: ^3.1.1 + get-caller-file: ^2.0.5 + require-directory: ^2.1.1 + string-width: ^4.2.3 + y18n: ^5.0.5 + yargs-parser: ^21.0.0 + checksum: 64fc2e32c56739f1d14d2d24acd17a6944c3c8e3e3558f09fc1953ac112e868cc16013d282886b9d5be22187f8b9ed4f60741a6b1011f595ce2718805a656852 + languageName: node + linkType: hard + +"yargs@npm:^17.1.1, yargs@npm:^17.3.1": version: 17.5.1 resolution: "yargs@npm:17.5.1" dependencies: @@ -39293,10 +41306,10 @@ __metadata: linkType: hard "z-schema@npm:~5.0.2": - version: 5.0.4 - resolution: "z-schema@npm:5.0.4" + version: 5.0.2 + resolution: "z-schema@npm:5.0.2" dependencies: - commander: ^2.20.3 + commander: ^2.7.1 lodash.get: ^4.4.2 lodash.isequal: ^4.5.0 validator: ^13.7.0 @@ -39305,7 +41318,7 @@ __metadata: optional: true bin: z-schema: bin/z-schema - checksum: afa4e0039a104a53eeb6977bf754ef44e32042aecbf3b5eb18b82649763abd5c2608e47d6d6902291359b41e76130594d7f2b6132316d819c3529f17d4d3464d + checksum: 084b2f16043ac0a892914ee29cc0b4fafd9338133eec0345cd6ced25e814f647fa67be1090ad5f606759c2c1f2f8c28127960ba187f437f1caf6fb8cd45d7336 languageName: node linkType: hard @@ -39335,9 +41348,9 @@ __metadata: linkType: hard "zod@npm:^3.11.6, zod@npm:^3.9.5": - version: 3.19.1 - resolution: "zod@npm:3.19.1" - checksum: 56e420ea5845912324a8fc61833714a2aec84954e418b52660d76502183c6e62fef9447cbfa64349640c5ce190cf2c24267e006bb80f066183e2f3fa9fe11864 + version: 3.18.0 + resolution: "zod@npm:3.18.0" + checksum: 86a9a9928f4b40a07020d4b9832842fa4a70050c2d7bd1b2866bc1acfd734aa53a40f87a99a4312a637341a608b0105770c7a1f83b56df78e97691b4f5badcd8 languageName: node linkType: hard From fb6eb274f52304c89e2bcbd9026f2725f27534fa Mon Sep 17 00:00:00 2001 From: Wesley Pattison Date: Mon, 26 Sep 2022 12:00:32 +0200 Subject: [PATCH 024/278] change plugin name back to azure-functions. apply PR feedback Signed-off-by: Wesley Pattison --- .changeset/tasty-colts-hug.md | 8 +-- .../{azure.yaml => azure-functions.yaml} | 6 +- packages/app/package.json | 2 +- packages/backend/package.json | 2 +- .../.eslintrc.js | 0 .../README.md | 6 +- .../api-report.md | 13 ++-- .../package.json | 6 +- .../schema.d.ts | 2 +- .../src/api/AzureSitesApi.ts | 22 +++--- .../src/api/index.ts | 0 .../src/config.ts | 8 +-- .../src/index.ts | 0 .../src/run.ts | 0 .../src/service/router.ts | 0 .../src/service/standaloneServer.ts | 0 .../src/setupTests.ts | 0 .../.eslintrc.js | 0 .../api-report.md | 13 ++-- .../package.json | 4 +- .../src/index.ts | 0 .../src/types.ts | 11 ++- .../{azure => azure-functions}/.eslintrc.js | 0 plugins/{azure => azure-functions}/README.md | 4 +- .../{azure => azure-functions}/api-report.md | 9 +-- .../{azure => azure-functions}/dev/index.tsx | 0 .../docs/functions-table.png | Bin .../{azure => azure-functions}/package.json | 6 +- .../src/api/AzureSitesApi.ts | 7 +- .../src/api/AzureSitesApiBackendClient.ts | 13 ++-- .../src/api/index.ts | 0 .../AzureSitesOverview.tsx | 0 .../AzureSitesOverviewTable.test.tsx | 0 .../AzureSitesOverviewTable.tsx | 20 +++--- .../src/hooks/useServiceEntityAnnotations.ts | 0 .../src/hooks/useSites.ts | 13 ++-- .../{azure => azure-functions}/src/index.ts | 0 .../src/mocks/mocks.ts | 4 +- .../src/plugin.test.ts | 0 .../{azure => azure-functions}/src/plugin.ts | 0 .../{azure => azure-functions}/src/routes.ts | 0 .../src/setupTests.ts | 0 yarn.lock | 68 +++++++++--------- 43 files changed, 137 insertions(+), 110 deletions(-) rename microsite/data/plugins/{azure.yaml => azure-functions.yaml} (66%) rename plugins/{azure-backend => azure-functions-backend}/.eslintrc.js (100%) rename plugins/{azure-backend => azure-functions-backend}/README.md (92%) rename plugins/{azure-backend => azure-functions-backend}/api-report.md (73%) rename plugins/{azure-backend => azure-functions-backend}/package.json (88%) rename plugins/{azure-backend => azure-functions-backend}/schema.d.ts (97%) rename plugins/{azure-backend => azure-functions-backend}/src/api/AzureSitesApi.ts (81%) rename plugins/{azure-backend => azure-functions-backend}/src/api/index.ts (100%) rename plugins/{azure-backend => azure-functions-backend}/src/config.ts (86%) rename plugins/{azure-backend => azure-functions-backend}/src/index.ts (100%) rename plugins/{azure-backend => azure-functions-backend}/src/run.ts (100%) rename plugins/{azure-backend => azure-functions-backend}/src/service/router.ts (100%) rename plugins/{azure-backend => azure-functions-backend}/src/service/standaloneServer.ts (100%) rename plugins/{azure-backend => azure-functions-backend}/src/setupTests.ts (100%) rename plugins/{azure-common => azure-functions-common}/.eslintrc.js (100%) rename plugins/{azure-common => azure-functions-common}/api-report.md (65%) rename plugins/{azure-common => azure-functions-common}/package.json (89%) rename plugins/{azure-common => azure-functions-common}/src/index.ts (100%) rename plugins/{azure-common => azure-functions-common}/src/types.ts (84%) rename plugins/{azure => azure-functions}/.eslintrc.js (100%) rename plugins/{azure => azure-functions}/README.md (94%) rename plugins/{azure => azure-functions}/api-report.md (79%) rename plugins/{azure => azure-functions}/dev/index.tsx (100%) rename plugins/{azure => azure-functions}/docs/functions-table.png (100%) rename plugins/{azure => azure-functions}/package.json (91%) rename plugins/{azure => azure-functions}/src/api/AzureSitesApi.ts (81%) rename plugins/{azure => azure-functions}/src/api/AzureSitesApiBackendClient.ts (85%) rename plugins/{azure => azure-functions}/src/api/index.ts (100%) rename plugins/{azure => azure-functions}/src/components/AzureSitesOverviewComponent/AzureSitesOverview.tsx (100%) rename plugins/{azure => azure-functions}/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.test.tsx (100%) rename plugins/{azure => azure-functions}/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.tsx (83%) rename plugins/{azure => azure-functions}/src/hooks/useServiceEntityAnnotations.ts (100%) rename plugins/{azure => azure-functions}/src/hooks/useSites.ts (81%) rename plugins/{azure => azure-functions}/src/index.ts (100%) rename plugins/{azure => azure-functions}/src/mocks/mocks.ts (94%) rename plugins/{azure => azure-functions}/src/plugin.test.ts (100%) rename plugins/{azure => azure-functions}/src/plugin.ts (100%) rename plugins/{azure => azure-functions}/src/routes.ts (100%) rename plugins/{azure => azure-functions}/src/setupTests.ts (100%) diff --git a/.changeset/tasty-colts-hug.md b/.changeset/tasty-colts-hug.md index 040b24d3dc..d5ee029aaf 100644 --- a/.changeset/tasty-colts-hug.md +++ b/.changeset/tasty-colts-hug.md @@ -1,7 +1,7 @@ --- -'@backstage/plugin-azure': minor -'@backstage/plugin-azure-backend': minor -'@backstage/plugin-azure-common': minor +'@backstage/plugin-azure-functions': minor +'@backstage/plugin-azure-functions-backend': minor +'@backstage/plugin-azure-functions-common': minor --- -Generic azure plugin based on an annotation supplied by a given entity. +Basic Azure Functions support for a given entity. View the current status of the function app, quickly jump to Function's Overview page, or Log Stream page. diff --git a/microsite/data/plugins/azure.yaml b/microsite/data/plugins/azure-functions.yaml similarity index 66% rename from microsite/data/plugins/azure.yaml rename to microsite/data/plugins/azure-functions.yaml index f2bc181264..bc5b003726 100644 --- a/microsite/data/plugins/azure.yaml +++ b/microsite/data/plugins/azure-functions.yaml @@ -4,6 +4,6 @@ author: FRISS authorUrl: https://friss.com category: Infrastructure description: View related Azure information for your components in Backstage. -documentation: https://github.com/backstage/backstage/tree/master/plugins/azure -iconUrl: img/azure-icon.svg -npmPackageName: '@backstage/plugin-azure' +documentation: https://github.com/backstage/backstage/tree/master/plugins/azure-functions +iconUrl: img/azurefunctions-icon.svg +npmPackageName: '@backstage/plugin-azure-functions' diff --git a/packages/app/package.json b/packages/app/package.json index f8f1d63d53..ae8873a507 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -18,8 +18,8 @@ "@backstage/plugin-airbrake": "^0.3.9", "@backstage/plugin-apache-airflow": "^0.2.2", "@backstage/plugin-api-docs": "^0.8.9", - "@backstage/plugin-azure": "^0.0.0", "@backstage/plugin-azure-devops": "^0.2.0", + "@backstage/plugin-azure-functions": "^0.0.0", "@backstage/plugin-badges": "^0.2.33", "@backstage/plugin-catalog-common": "^1.0.6", "@backstage/plugin-catalog-graph": "^0.2.21", diff --git a/packages/backend/package.json b/packages/backend/package.json index 6228f4ce88..4dfe6747a4 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -35,8 +35,8 @@ "@backstage/plugin-app-backend": "^0.3.36", "@backstage/plugin-auth-backend": "^0.16.0", "@backstage/plugin-auth-node": "^0.2.5", - "@backstage/plugin-azure-backend": "^0.0.0", "@backstage/plugin-azure-devops-backend": "^0.3.15", + "@backstage/plugin-azure-functions-backend": "^0.0.0", "@backstage/plugin-badges-backend": "^0.1.30", "@backstage/plugin-catalog-backend": "^1.4.0", "@backstage/plugin-code-coverage-backend": "^0.2.2", diff --git a/plugins/azure-backend/.eslintrc.js b/plugins/azure-functions-backend/.eslintrc.js similarity index 100% rename from plugins/azure-backend/.eslintrc.js rename to plugins/azure-functions-backend/.eslintrc.js diff --git a/plugins/azure-backend/README.md b/plugins/azure-functions-backend/README.md similarity index 92% rename from plugins/azure-backend/README.md rename to plugins/azure-functions-backend/README.md index af9de5ff3c..dc898ccc52 100644 --- a/plugins/azure-backend/README.md +++ b/plugins/azure-functions-backend/README.md @@ -33,11 +33,11 @@ Configuration Details: Here's how to get the backend plugin up and running: -1. First we need to add the `@backstage/plugin-azure-backend` package to your backend: +1. First we need to add the `@backstage/plugin-azure-functions-backend` package to your backend: ```sh # From the Backstage root directory - yarn add --cwd packages/backend @backstage/plugin-azure-backend + yarn add --cwd packages/backend @backstage/plugin-azure-functions-backend ``` 2. Then we will create a new file named `packages/backend/src/plugins/azure.ts`, and add the following to it: @@ -46,7 +46,7 @@ Here's how to get the backend plugin up and running: import { createRouter, AzureSitesApi, - } from '@backstage/plugin-azure-backend'; + } from '@backstage/plugin-azure-functions-backend'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; diff --git a/plugins/azure-backend/api-report.md b/plugins/azure-functions-backend/api-report.md similarity index 73% rename from plugins/azure-backend/api-report.md rename to plugins/azure-functions-backend/api-report.md index 85d63acb3b..b8d8871595 100644 --- a/plugins/azure-backend/api-report.md +++ b/plugins/azure-functions-backend/api-report.md @@ -1,15 +1,16 @@ -## API Report File for "@backstage/plugin-azure-backend" +## API Report File for "@backstage/plugin-azure-functions-backend" > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { AzureSiteListRequest } from '@backstage/plugin-azure-functions-common'; +import { AzureSiteListResponse } from '@backstage/plugin-azure-functions-common'; import { Config } from '@backstage/config'; import express from 'express'; import { Logger } from 'winston'; -import { SiteList } from '@backstage/plugin-azure-common'; // @public (undocumented) -export class AzureConfig { +export class AzureFunctionsConfig { constructor( domain: string, tenantId: string, @@ -24,7 +25,7 @@ export class AzureConfig { // (undocumented) readonly domain: string; // (undocumented) - static fromConfig(config: Config): AzureConfig; + static fromConfig(config: Config): AzureFunctionsConfig; // (undocumented) readonly subscriptions?: string[] | undefined; // (undocumented) @@ -33,11 +34,11 @@ export class AzureConfig { // @public (undocumented) export class AzureSitesApi { - constructor(config: AzureConfig); + constructor(config: AzureFunctionsConfig); // (undocumented) static fromConfig(config: Config): AzureSitesApi; // (undocumented) - list({ name }: { name: string }): Promise; + list(request: AzureSiteListRequest): Promise; } // @public (undocumented) diff --git a/plugins/azure-backend/package.json b/plugins/azure-functions-backend/package.json similarity index 88% rename from plugins/azure-backend/package.json rename to plugins/azure-functions-backend/package.json index 678b855d47..2cef855e2f 100644 --- a/plugins/azure-backend/package.json +++ b/plugins/azure-functions-backend/package.json @@ -1,5 +1,5 @@ { - "name": "@backstage/plugin-azure-backend", + "name": "@backstage/plugin-azure-functions-backend", "version": "0.0.0", "main": "src/index.ts", "types": "src/index.ts", @@ -17,7 +17,7 @@ "repository": { "type": "git", "url": "https://github.com/backstage/backstage", - "directory": "plugins/azure-backend" + "directory": "plugins/azure-functions-backend" }, "keywords": [ "backstage", @@ -37,7 +37,7 @@ "@azure/identity": "^2.1.0", "@backstage/backend-common": "^0.15.1", "@backstage/config": "^1.0.2", - "@backstage/plugin-azure-common": "^0.0.0", + "@backstage/plugin-azure-functions-common": "^0.0.0", "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", diff --git a/plugins/azure-backend/schema.d.ts b/plugins/azure-functions-backend/schema.d.ts similarity index 97% rename from plugins/azure-backend/schema.d.ts rename to plugins/azure-functions-backend/schema.d.ts index 9db9a99252..b94590ddb5 100644 --- a/plugins/azure-backend/schema.d.ts +++ b/plugins/azure-functions-backend/schema.d.ts @@ -15,7 +15,7 @@ */ export interface Config { - azure: { + azureFunctions: { /** @visibility backend */ domain: string; /** @visibility backend */ diff --git a/plugins/azure-backend/src/api/AzureSitesApi.ts b/plugins/azure-functions-backend/src/api/AzureSitesApi.ts similarity index 81% rename from plugins/azure-backend/src/api/AzureSitesApi.ts rename to plugins/azure-functions-backend/src/api/AzureSitesApi.ts index 3c307c5d75..e00c49e4d3 100644 --- a/plugins/azure-backend/src/api/AzureSitesApi.ts +++ b/plugins/azure-functions-backend/src/api/AzureSitesApi.ts @@ -20,8 +20,12 @@ import { ClientSecretCredential, } from '@azure/identity'; import { ResourceGraphClient } from '@azure/arm-resourcegraph'; -import { Site, SiteList } from '@backstage/plugin-azure-common'; -import { AzureConfig } from '../config'; +import { + AzureSite, + AzureSiteListRequest, + AzureSiteListResponse, +} from '@backstage/plugin-azure-functions-common'; +import { AzureFunctionsConfig } from '../config'; /** @public */ export class AzureSitesApi { @@ -29,7 +33,7 @@ export class AzureSitesApi { `https://portal.azure.com/#@${domain}/resource`; private readonly client: ResourceGraphClient; - constructor(private readonly config: AzureConfig) { + constructor(private readonly config: AzureFunctionsConfig) { const creds = config.clientId && config.clientSecret ? new ClientSecretCredential( @@ -43,14 +47,14 @@ export class AzureSitesApi { } static fromConfig(config: Config): AzureSitesApi { - return new AzureSitesApi(AzureConfig.fromConfig(config)); + return new AzureSitesApi(AzureFunctionsConfig.fromConfig(config)); } - async list({ name }: { name: string }): Promise { - const items: Site[] = []; + async list(request: AzureSiteListRequest): Promise { + const items: AzureSite[] = []; try { const result = await this.client.resources({ - query: `resources | where type == 'microsoft.web/sites' | where name contains '${name}'`, + query: `resources | where type == 'microsoft.web/sites' | where name contains '${request.name}'`, subscriptions: this.config.subscriptions, }); for (const v of result.data) { @@ -70,8 +74,8 @@ export class AzureSitesApi { tags: v.properties.tags!, }); } - } catch (ex) { - console.log(ex); + } catch (ex: any) { + throw ex; } return { items: items }; } diff --git a/plugins/azure-backend/src/api/index.ts b/plugins/azure-functions-backend/src/api/index.ts similarity index 100% rename from plugins/azure-backend/src/api/index.ts rename to plugins/azure-functions-backend/src/api/index.ts diff --git a/plugins/azure-backend/src/config.ts b/plugins/azure-functions-backend/src/config.ts similarity index 86% rename from plugins/azure-backend/src/config.ts rename to plugins/azure-functions-backend/src/config.ts index 48e15ac54b..70301a17fa 100644 --- a/plugins/azure-backend/src/config.ts +++ b/plugins/azure-functions-backend/src/config.ts @@ -17,7 +17,7 @@ import { Config } from '@backstage/config'; /** @public */ -export class AzureConfig { +export class AzureFunctionsConfig { constructor( public readonly domain: string, public readonly tenantId: string, @@ -26,10 +26,10 @@ export class AzureConfig { public readonly clientSecret?: string, ) {} - static fromConfig(config: Config): AzureConfig { - const azConfig = config.getConfig('azure'); + static fromConfig(config: Config): AzureFunctionsConfig { + const azConfig = config.getConfig('azureFunctions'); - return new AzureConfig( + return new AzureFunctionsConfig( azConfig.getString('domain'), azConfig.getString('tenantId'), azConfig diff --git a/plugins/azure-backend/src/index.ts b/plugins/azure-functions-backend/src/index.ts similarity index 100% rename from plugins/azure-backend/src/index.ts rename to plugins/azure-functions-backend/src/index.ts diff --git a/plugins/azure-backend/src/run.ts b/plugins/azure-functions-backend/src/run.ts similarity index 100% rename from plugins/azure-backend/src/run.ts rename to plugins/azure-functions-backend/src/run.ts diff --git a/plugins/azure-backend/src/service/router.ts b/plugins/azure-functions-backend/src/service/router.ts similarity index 100% rename from plugins/azure-backend/src/service/router.ts rename to plugins/azure-functions-backend/src/service/router.ts diff --git a/plugins/azure-backend/src/service/standaloneServer.ts b/plugins/azure-functions-backend/src/service/standaloneServer.ts similarity index 100% rename from plugins/azure-backend/src/service/standaloneServer.ts rename to plugins/azure-functions-backend/src/service/standaloneServer.ts diff --git a/plugins/azure-backend/src/setupTests.ts b/plugins/azure-functions-backend/src/setupTests.ts similarity index 100% rename from plugins/azure-backend/src/setupTests.ts rename to plugins/azure-functions-backend/src/setupTests.ts diff --git a/plugins/azure-common/.eslintrc.js b/plugins/azure-functions-common/.eslintrc.js similarity index 100% rename from plugins/azure-common/.eslintrc.js rename to plugins/azure-functions-common/.eslintrc.js diff --git a/plugins/azure-common/api-report.md b/plugins/azure-functions-common/api-report.md similarity index 65% rename from plugins/azure-common/api-report.md rename to plugins/azure-functions-common/api-report.md index fece374b84..12fed0f08c 100644 --- a/plugins/azure-common/api-report.md +++ b/plugins/azure-functions-common/api-report.md @@ -1,10 +1,10 @@ -## API Report File for "@backstage/plugin-azure-common" +## API Report File for "@backstage/plugin-azure-functions-common" > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts // @public (undocumented) -export type Site = { +export type AzureSite = { href: string; logstreamHref: string; name: string; @@ -19,8 +19,13 @@ export type Site = { }; // @public (undocumented) -export type SiteList = { - items: Site[]; +export type AzureSiteListRequest = { + name: string; +}; + +// @public (undocumented) +export type AzureSiteListResponse = { + items: AzureSite[]; }; // (No @packageDocumentation comment for this package) diff --git a/plugins/azure-common/package.json b/plugins/azure-functions-common/package.json similarity index 89% rename from plugins/azure-common/package.json rename to plugins/azure-functions-common/package.json index cbe4afa840..a3db83cd64 100644 --- a/plugins/azure-common/package.json +++ b/plugins/azure-functions-common/package.json @@ -1,5 +1,5 @@ { - "name": "@backstage/plugin-azure-common", + "name": "@backstage/plugin-azure-functions-common", "description": "Common functionalities for the azure plugin", "version": "0.0.0", "main": "src/index.ts", @@ -18,7 +18,7 @@ "repository": { "type": "git", "url": "https://github.com/backstage/backstage", - "directory": "plugins/azure-common" + "directory": "plugins/azure-functions-common" }, "keywords": [ "backstage" diff --git a/plugins/azure-common/src/index.ts b/plugins/azure-functions-common/src/index.ts similarity index 100% rename from plugins/azure-common/src/index.ts rename to plugins/azure-functions-common/src/index.ts diff --git a/plugins/azure-common/src/types.ts b/plugins/azure-functions-common/src/types.ts similarity index 84% rename from plugins/azure-common/src/types.ts rename to plugins/azure-functions-common/src/types.ts index 3de98748d3..5364b43421 100644 --- a/plugins/azure-common/src/types.ts +++ b/plugins/azure-functions-common/src/types.ts @@ -15,7 +15,7 @@ */ /** @public */ -export type Site = { +export type AzureSite = { href: string; logstreamHref: string; name: string; @@ -30,6 +30,11 @@ export type Site = { }; /** @public */ -export type SiteList = { - items: Site[]; +export type AzureSiteListRequest = { + name: string; +}; + +/** @public */ +export type AzureSiteListResponse = { + items: AzureSite[]; }; diff --git a/plugins/azure/.eslintrc.js b/plugins/azure-functions/.eslintrc.js similarity index 100% rename from plugins/azure/.eslintrc.js rename to plugins/azure-functions/.eslintrc.js diff --git a/plugins/azure/README.md b/plugins/azure-functions/README.md similarity index 94% rename from plugins/azure/README.md rename to plugins/azure-functions/README.md index 00d22aacd5..c4e59e9116 100644 --- a/plugins/azure/README.md +++ b/plugins/azure-functions/README.md @@ -47,14 +47,14 @@ azure.com/microsoft.web/sites: func-testapp 1. Install the plugin in the `packages/app` directory ```sh -yarn add @backstage/plugin-azure +yarn add @backstage/plugin-azure-functions ``` 2. Add widget component to your Backstage instance: ```ts // In packages/app/src/components/catalog/EntityPage.tsx -import { EntityAzureSitesOverviewWidget, isAzureWebSiteNameAvailable } from '@backstage/plugin-azure'; +import { EntityAzureSitesOverviewWidget, isAzureWebSiteNameAvailable } from '@backstage/plugin-azure-functions'; ... diff --git a/plugins/azure/api-report.md b/plugins/azure-functions/api-report.md similarity index 79% rename from plugins/azure/api-report.md rename to plugins/azure-functions/api-report.md index a3d6381c09..bed1c36c4d 100644 --- a/plugins/azure/api-report.md +++ b/plugins/azure-functions/api-report.md @@ -1,4 +1,4 @@ -## API Report File for "@backstage/plugin-azure" +## API Report File for "@backstage/plugin-azure-functions" > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). @@ -6,19 +6,20 @@ /// import { ApiRef } from '@backstage/core-plugin-api'; +import { AzureSiteListRequest } from '@backstage/plugin-azure-functions-common'; +import { AzureSiteListResponse } from '@backstage/plugin-azure-functions-common'; import { BackstagePlugin } from '@backstage/core-plugin-api'; import { DiscoveryApi } from '@backstage/core-plugin-api'; import { Entity } from '@backstage/catalog-model'; import { IdentityApi } from '@backstage/core-plugin-api'; import { RouteRef } from '@backstage/core-plugin-api'; -import { SiteList } from '@backstage/plugin-azure-common'; // @public (undocumented) export const azureSiteApiRef: ApiRef; // @public (undocumented) export type AzureSitesApi = { - list: ({ name }: { name: string }) => Promise; + list: (request: AzureSiteListRequest) => Promise; }; // @public (undocumented) @@ -28,7 +29,7 @@ export class AzureSitesApiBackendClient implements AzureSitesApi { identityApi: IdentityApi; }); // (undocumented) - list({ name }: { name: string }): Promise; + list(request: AzureSiteListRequest): Promise; } // @public (undocumented) diff --git a/plugins/azure/dev/index.tsx b/plugins/azure-functions/dev/index.tsx similarity index 100% rename from plugins/azure/dev/index.tsx rename to plugins/azure-functions/dev/index.tsx diff --git a/plugins/azure/docs/functions-table.png b/plugins/azure-functions/docs/functions-table.png similarity index 100% rename from plugins/azure/docs/functions-table.png rename to plugins/azure-functions/docs/functions-table.png diff --git a/plugins/azure/package.json b/plugins/azure-functions/package.json similarity index 91% rename from plugins/azure/package.json rename to plugins/azure-functions/package.json index f37371ff3c..119d66f838 100644 --- a/plugins/azure/package.json +++ b/plugins/azure-functions/package.json @@ -1,5 +1,5 @@ { - "name": "@backstage/plugin-azure", + "name": "@backstage/plugin-azure-functions", "version": "0.0.0", "main": "src/index.ts", "types": "src/index.ts", @@ -17,7 +17,7 @@ "repository": { "type": "git", "url": "https://github.com/backstage/backstage", - "directory": "plugins/azure" + "directory": "plugins/azure-functions" }, "keywords": [ "backstage", @@ -36,7 +36,7 @@ "@backstage/catalog-model": "^1.1.1", "@backstage/core-components": "^0.11.1", "@backstage/core-plugin-api": "^1.0.6", - "@backstage/plugin-azure-common": "^0.0.0", + "@backstage/plugin-azure-functions-common": "^0.0.0", "@backstage/plugin-catalog-react": "^1.1.4", "@backstage/theme": "^0.2.16", "@material-ui/core": "^4.12.2", diff --git a/plugins/azure/src/api/AzureSitesApi.ts b/plugins/azure-functions/src/api/AzureSitesApi.ts similarity index 81% rename from plugins/azure/src/api/AzureSitesApi.ts rename to plugins/azure-functions/src/api/AzureSitesApi.ts index 86751a4fa2..cc2700fe82 100644 --- a/plugins/azure/src/api/AzureSitesApi.ts +++ b/plugins/azure-functions/src/api/AzureSitesApi.ts @@ -15,7 +15,10 @@ */ import { createApiRef } from '@backstage/core-plugin-api'; -import { SiteList } from '@backstage/plugin-azure-common'; +import { + AzureSiteListRequest, + AzureSiteListResponse, +} from '@backstage/plugin-azure-functions-common'; /** @public */ export const azureSiteApiRef = createApiRef({ @@ -24,5 +27,5 @@ export const azureSiteApiRef = createApiRef({ /** @public */ export type AzureSitesApi = { - list: ({ name }: { name: string }) => Promise; + list: (request: AzureSiteListRequest) => Promise; }; diff --git a/plugins/azure/src/api/AzureSitesApiBackendClient.ts b/plugins/azure-functions/src/api/AzureSitesApiBackendClient.ts similarity index 85% rename from plugins/azure/src/api/AzureSitesApiBackendClient.ts rename to plugins/azure-functions/src/api/AzureSitesApiBackendClient.ts index 27e55e4d31..7fcee74341 100644 --- a/plugins/azure/src/api/AzureSitesApiBackendClient.ts +++ b/plugins/azure-functions/src/api/AzureSitesApiBackendClient.ts @@ -15,7 +15,10 @@ */ import { AzureSitesApi } from './AzureSitesApi'; -import { SiteList } from '@backstage/plugin-azure-common'; +import { + AzureSiteListRequest, + AzureSiteListResponse, +} from '@backstage/plugin-azure-functions-common'; import { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api'; /** @public */ @@ -30,9 +33,11 @@ export class AzureSitesApiBackendClient implements AzureSitesApi { this.identityApi = options.identityApi; } - async list({ name }: { name: string }): Promise { + async list(request: AzureSiteListRequest): Promise { try { - const url = `${await this.discoveryApi.getBaseUrl('azure')}/list/${name}`; + const url = `${await this.discoveryApi.getBaseUrl('azure')}/list/${ + request.name + }`; const { token: accessToken } = await this.identityApi.getCredentials(); const response = await fetch(url, { method: 'GET', @@ -43,7 +48,7 @@ export class AzureSitesApiBackendClient implements AzureSitesApi { }); return await response.json(); } catch (e: any) { - throw new Error('MissingAzureBackendException'); + throw new Error(e); } } } diff --git a/plugins/azure/src/api/index.ts b/plugins/azure-functions/src/api/index.ts similarity index 100% rename from plugins/azure/src/api/index.ts rename to plugins/azure-functions/src/api/index.ts diff --git a/plugins/azure/src/components/AzureSitesOverviewComponent/AzureSitesOverview.tsx b/plugins/azure-functions/src/components/AzureSitesOverviewComponent/AzureSitesOverview.tsx similarity index 100% rename from plugins/azure/src/components/AzureSitesOverviewComponent/AzureSitesOverview.tsx rename to plugins/azure-functions/src/components/AzureSitesOverviewComponent/AzureSitesOverview.tsx diff --git a/plugins/azure/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.test.tsx b/plugins/azure-functions/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.test.tsx similarity index 100% rename from plugins/azure/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.test.tsx rename to plugins/azure-functions/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.test.tsx diff --git a/plugins/azure/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.tsx b/plugins/azure-functions/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.tsx similarity index 83% rename from plugins/azure/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.tsx rename to plugins/azure-functions/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.tsx index 0b07c5aaaa..c26fb6bc55 100644 --- a/plugins/azure/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.tsx +++ b/plugins/azure-functions/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.tsx @@ -16,7 +16,7 @@ import React from 'react'; import { Box, Card, Link, LinearProgress } from '@material-ui/core'; -import { Site } from '@backstage/plugin-azure-common'; +import { AzureSite } from '@backstage/plugin-azure-functions-common'; import { Table, TableColumn } from '@backstage/core-components'; import FlashOnIcon from '@material-ui/icons/FlashOn'; import { DateTime } from 'luxon'; @@ -48,15 +48,15 @@ const State = ({ value }: { value: States }) => { }; type TableProps = { - data: Site[]; + data: AzureSite[]; loading: boolean; }; -const DEFAULT_COLUMNS: TableColumn[] = [ +const DEFAULT_COLUMNS: TableColumn[] = [ { title: 'name', highlight: true, - render: (func: Site) => { + render: (func: AzureSite) => { return ( {func.name} @@ -66,19 +66,19 @@ const DEFAULT_COLUMNS: TableColumn[] = [ }, { title: 'kind', - render: (func: Site) => func.kind ?? 'unknown', + render: (func: AzureSite) => func.kind ?? 'unknown', }, { title: 'location', - render: (func: Site) => func.location ?? 'unknown', + render: (func: AzureSite) => func.location ?? 'unknown', }, { title: 'status', - render: (func: Site) => , + render: (func: AzureSite) => , }, { title: 'last modified', - render: (func: Site) => + render: (func: AzureSite) => DateTime.fromISO(func.lastModifiedDate).toLocaleString( DateTime.DATETIME_MED, ), @@ -86,7 +86,7 @@ const DEFAULT_COLUMNS: TableColumn[] = [ { title: 'logs', align: 'right', - render: (func: Site) => { + render: (func: AzureSite) => { return ( View Logs @@ -98,7 +98,7 @@ const DEFAULT_COLUMNS: TableColumn[] = [ /** @public */ export const AzureSitesOverviewTable = ({ data, loading }: TableProps) => { - const columns: TableColumn[] = [...DEFAULT_COLUMNS]; + const columns: TableColumn[] = [...DEFAULT_COLUMNS]; const tableStyle = { minWidth: '0', width: '100%', diff --git a/plugins/azure/src/hooks/useServiceEntityAnnotations.ts b/plugins/azure-functions/src/hooks/useServiceEntityAnnotations.ts similarity index 100% rename from plugins/azure/src/hooks/useServiceEntityAnnotations.ts rename to plugins/azure-functions/src/hooks/useServiceEntityAnnotations.ts diff --git a/plugins/azure/src/hooks/useSites.ts b/plugins/azure-functions/src/hooks/useSites.ts similarity index 81% rename from plugins/azure/src/hooks/useSites.ts rename to plugins/azure-functions/src/hooks/useSites.ts index c734b0abca..f321fca3e1 100644 --- a/plugins/azure/src/hooks/useSites.ts +++ b/plugins/azure-functions/src/hooks/useSites.ts @@ -16,7 +16,7 @@ import useAsyncRetry from 'react-use/lib/useAsyncRetry'; import { useApi, errorApiRef } from '@backstage/core-plugin-api'; -import { SiteList } from '@backstage/plugin-azure-common'; +import { AzureSiteListResponse } from '@backstage/plugin-azure-functions-common'; import { azureSiteApiRef } from '../api'; import { useCallback } from 'react'; @@ -37,15 +37,18 @@ export function useSites({ name }: { name: string }) { value: data, error, retry, - } = useAsyncRetry(async () => { + } = useAsyncRetry(async () => { try { const sites = await list(); return sites; } catch (e) { if (e instanceof Error) { - if (e?.message === 'MissingAzureBackendException') { - errorApi.post(new Error('Please add azure-backend plugin')); - return null; + if (e?.message === 'AbortError') { + errorApi.post( + new Error( + 'Timeout reaching backend plugin, please add azure-backend plugin', + ), + ); } errorApi.post(e); } diff --git a/plugins/azure/src/index.ts b/plugins/azure-functions/src/index.ts similarity index 100% rename from plugins/azure/src/index.ts rename to plugins/azure-functions/src/index.ts diff --git a/plugins/azure/src/mocks/mocks.ts b/plugins/azure-functions/src/mocks/mocks.ts similarity index 94% rename from plugins/azure/src/mocks/mocks.ts rename to plugins/azure-functions/src/mocks/mocks.ts index 155a0f2494..1af6fa86e3 100644 --- a/plugins/azure/src/mocks/mocks.ts +++ b/plugins/azure-functions/src/mocks/mocks.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { Site } from '@backstage/plugin-azure-common'; +import { AzureSite } from '@backstage/plugin-azure-functions-common'; export const entityMock = { metadata: { @@ -36,7 +36,7 @@ export const entityMock = { }; // https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.Web/sites/{{functionsName}}?api-version=2022-03-01 -export const siteMock: Site = { +export const siteMock: AzureSite = { name: 'func-mock', kind: 'functionapp', resourceGroup: 'mock-resourcegroup', diff --git a/plugins/azure/src/plugin.test.ts b/plugins/azure-functions/src/plugin.test.ts similarity index 100% rename from plugins/azure/src/plugin.test.ts rename to plugins/azure-functions/src/plugin.test.ts diff --git a/plugins/azure/src/plugin.ts b/plugins/azure-functions/src/plugin.ts similarity index 100% rename from plugins/azure/src/plugin.ts rename to plugins/azure-functions/src/plugin.ts diff --git a/plugins/azure/src/routes.ts b/plugins/azure-functions/src/routes.ts similarity index 100% rename from plugins/azure/src/routes.ts rename to plugins/azure-functions/src/routes.ts diff --git a/plugins/azure/src/setupTests.ts b/plugins/azure-functions/src/setupTests.ts similarity index 100% rename from plugins/azure/src/setupTests.ts rename to plugins/azure-functions/src/setupTests.ts diff --git a/yarn.lock b/yarn.lock index 805109ea15..66887e8d2e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3946,35 +3946,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-azure-backend@^0.0.0, @backstage/plugin-azure-backend@workspace:plugins/azure-backend": - version: 0.0.0-use.local - resolution: "@backstage/plugin-azure-backend@workspace:plugins/azure-backend" - dependencies: - "@azure/arm-resourcegraph": ^4.2.1 - "@azure/identity": ^2.1.0 - "@backstage/backend-common": ^0.15.1 - "@backstage/cli": ^0.19.0 - "@backstage/config": ^1.0.2 - "@backstage/plugin-azure-common": ^0.0.0 - "@types/express": ^4.17.6 - "@types/supertest": ^2.0.8 - express: ^4.17.1 - express-promise-router: ^4.1.0 - msw: ^0.47.0 - node-fetch: ^2.6.7 - winston: ^3.2.1 - yn: ^4.0.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-azure-common@^0.0.0, @backstage/plugin-azure-common@workspace:plugins/azure-common": - version: 0.0.0-use.local - resolution: "@backstage/plugin-azure-common@workspace:plugins/azure-common" - dependencies: - "@backstage/cli": ^0.19.0 - languageName: unknown - linkType: soft - "@backstage/plugin-azure-devops-backend@^0.3.15, @backstage/plugin-azure-devops-backend@workspace:plugins/azure-devops-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-azure-devops-backend@workspace:plugins/azure-devops-backend" @@ -4038,9 +4009,38 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-azure@^0.0.0, @backstage/plugin-azure@workspace:plugins/azure": +"@backstage/plugin-azure-functions-backend@^0.0.0, @backstage/plugin-azure-functions-backend@workspace:plugins/azure-functions-backend": version: 0.0.0-use.local - resolution: "@backstage/plugin-azure@workspace:plugins/azure" + resolution: "@backstage/plugin-azure-functions-backend@workspace:plugins/azure-functions-backend" + dependencies: + "@azure/arm-resourcegraph": ^4.2.1 + "@azure/identity": ^2.1.0 + "@backstage/backend-common": ^0.15.1 + "@backstage/cli": ^0.19.0 + "@backstage/config": ^1.0.2 + "@backstage/plugin-azure-functions-common": ^0.0.0 + "@types/express": ^4.17.6 + "@types/supertest": ^2.0.8 + express: ^4.17.1 + express-promise-router: ^4.1.0 + msw: ^0.47.0 + node-fetch: ^2.6.7 + winston: ^3.2.1 + yn: ^4.0.0 + languageName: unknown + linkType: soft + +"@backstage/plugin-azure-functions-common@^0.0.0, @backstage/plugin-azure-functions-common@workspace:plugins/azure-functions-common": + version: 0.0.0-use.local + resolution: "@backstage/plugin-azure-functions-common@workspace:plugins/azure-functions-common" + dependencies: + "@backstage/cli": ^0.19.0 + languageName: unknown + linkType: soft + +"@backstage/plugin-azure-functions@^0.0.0, @backstage/plugin-azure-functions@workspace:plugins/azure-functions": + version: 0.0.0-use.local + resolution: "@backstage/plugin-azure-functions@workspace:plugins/azure-functions" dependencies: "@backstage/catalog-model": ^1.1.1 "@backstage/cli": ^0.19.0 @@ -4048,7 +4048,7 @@ __metadata: "@backstage/core-components": ^0.11.1 "@backstage/core-plugin-api": ^1.0.6 "@backstage/dev-utils": ^1.0.6 - "@backstage/plugin-azure-common": ^0.0.0 + "@backstage/plugin-azure-functions-common": ^0.0.0 "@backstage/plugin-catalog-react": ^1.1.4 "@backstage/test-utils": ^1.2.0 "@backstage/theme": ^0.2.16 @@ -22401,8 +22401,8 @@ __metadata: "@backstage/plugin-airbrake": ^0.3.9 "@backstage/plugin-apache-airflow": ^0.2.2 "@backstage/plugin-api-docs": ^0.8.9 - "@backstage/plugin-azure": ^0.0.0 "@backstage/plugin-azure-devops": ^0.2.0 + "@backstage/plugin-azure-functions": ^0.0.0 "@backstage/plugin-badges": ^0.2.33 "@backstage/plugin-catalog-common": ^1.0.6 "@backstage/plugin-catalog-graph": ^0.2.21 @@ -22506,8 +22506,8 @@ __metadata: "@backstage/plugin-app-backend": ^0.3.36 "@backstage/plugin-auth-backend": ^0.16.0 "@backstage/plugin-auth-node": ^0.2.5 - "@backstage/plugin-azure-backend": ^0.0.0 "@backstage/plugin-azure-devops-backend": ^0.3.15 + "@backstage/plugin-azure-functions-backend": ^0.0.0 "@backstage/plugin-badges-backend": ^0.1.30 "@backstage/plugin-catalog-backend": ^1.4.0 "@backstage/plugin-code-coverage-backend": ^0.2.2 From a690bf9d59e92d5130796afdefe7501749c7f050 Mon Sep 17 00:00:00 2001 From: Wesley Pattison Date: Mon, 26 Sep 2022 12:09:53 +0200 Subject: [PATCH 025/278] update package.json to match others. yarn lock update Signed-off-by: Wesley Pattison --- plugins/azure-functions-backend/package.json | 8 +-- plugins/azure-functions-common/package.json | 2 +- plugins/azure-functions/package.json | 20 ++++---- yarn.lock | 54 ++++++++++---------- 4 files changed, 42 insertions(+), 42 deletions(-) diff --git a/plugins/azure-functions-backend/package.json b/plugins/azure-functions-backend/package.json index 2cef855e2f..99e134e53e 100644 --- a/plugins/azure-functions-backend/package.json +++ b/plugins/azure-functions-backend/package.json @@ -35,9 +35,9 @@ "dependencies": { "@azure/arm-resourcegraph": "^4.2.1", "@azure/identity": "^2.1.0", - "@backstage/backend-common": "^0.15.1", - "@backstage/config": "^1.0.2", - "@backstage/plugin-azure-functions-common": "^0.0.0", + "@backstage/backend-common": "workspace:^", + "@backstage/config": "workspace:^", + "@backstage/plugin-azure-functions-common": "workspace:^", "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", @@ -46,7 +46,7 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0", + "@backstage/cli": "workspace:^", "@types/supertest": "^2.0.8", "msw": "^0.47.0" }, diff --git a/plugins/azure-functions-common/package.json b/plugins/azure-functions-common/package.json index a3db83cd64..3faa3260ae 100644 --- a/plugins/azure-functions-common/package.json +++ b/plugins/azure-functions-common/package.json @@ -32,7 +32,7 @@ "postpack": "backstage-cli package postpack" }, "devDependencies": { - "@backstage/cli": "^0.19.0" + "@backstage/cli": "workspace:^" }, "files": [ "dist" diff --git a/plugins/azure-functions/package.json b/plugins/azure-functions/package.json index 119d66f838..84999a1665 100644 --- a/plugins/azure-functions/package.json +++ b/plugins/azure-functions/package.json @@ -33,12 +33,12 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/catalog-model": "^1.1.1", - "@backstage/core-components": "^0.11.1", - "@backstage/core-plugin-api": "^1.0.6", - "@backstage/plugin-azure-functions-common": "^0.0.0", - "@backstage/plugin-catalog-react": "^1.1.4", - "@backstage/theme": "^0.2.16", + "@backstage/catalog-model": "workspace:^", + "@backstage/core-components": "workspace:^", + "@backstage/core-plugin-api": "workspace:^", + "@backstage/plugin-azure-functions-common": "workspace:^", + "@backstage/plugin-catalog-react": "workspace:^", + "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", @@ -49,10 +49,10 @@ "react": "^16.13.1 || ^17.0.0" }, "devDependencies": { - "@backstage/cli": "^0.19.0", - "@backstage/core-app-api": "^1.1.0", - "@backstage/dev-utils": "^1.0.6", - "@backstage/test-utils": "^1.2.0", + "@backstage/cli": "workspace:^", + "@backstage/core-app-api": "workspace:^", + "@backstage/dev-utils": "workspace:^", + "@backstage/test-utils": "workspace:^", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", diff --git a/yarn.lock b/yarn.lock index 45da2c9375..abe058c220 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3048,7 +3048,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/backend-common@^0.15.1, @backstage/backend-common@workspace:^, @backstage/backend-common@workspace:packages/backend-common": +"@backstage/backend-common@workspace:^, @backstage/backend-common@workspace:packages/backend-common": version: 0.0.0-use.local resolution: "@backstage/backend-common@workspace:packages/backend-common" dependencies: @@ -3215,7 +3215,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/catalog-model@^1.0.0, @backstage/catalog-model@^1.1.1, @backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model": +"@backstage/catalog-model@^1.0.0, @backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model": version: 0.0.0-use.local resolution: "@backstage/catalog-model@workspace:packages/catalog-model" dependencies: @@ -3242,7 +3242,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/cli@^0.19.0, @backstage/cli@workspace:*, @backstage/cli@workspace:^, @backstage/cli@workspace:packages/cli": +"@backstage/cli@workspace:*, @backstage/cli@workspace:^, @backstage/cli@workspace:packages/cli": version: 0.0.0-use.local resolution: "@backstage/cli@workspace:packages/cli" dependencies: @@ -3429,7 +3429,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/config@^1.0.2, @backstage/config@workspace:^, @backstage/config@workspace:packages/config": +"@backstage/config@workspace:^, @backstage/config@workspace:packages/config": version: 0.0.0-use.local resolution: "@backstage/config@workspace:packages/config" dependencies: @@ -3441,7 +3441,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-app-api@^1.1.0, @backstage/core-app-api@workspace:^, @backstage/core-app-api@workspace:packages/core-app-api": +"@backstage/core-app-api@workspace:^, @backstage/core-app-api@workspace:packages/core-app-api": version: 0.0.0-use.local resolution: "@backstage/core-app-api@workspace:packages/core-app-api" dependencies: @@ -3475,7 +3475,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-components@^0.11.0, @backstage/core-components@^0.11.1, @backstage/core-components@workspace:^, @backstage/core-components@workspace:packages/core-components": +"@backstage/core-components@^0.11.0, @backstage/core-components@workspace:^, @backstage/core-components@workspace:packages/core-components": version: 0.0.0-use.local resolution: "@backstage/core-components@workspace:packages/core-components" dependencies: @@ -3547,7 +3547,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-plugin-api@^1.0.0, @backstage/core-plugin-api@^1.0.6, @backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api": +"@backstage/core-plugin-api@^1.0.0, @backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api": version: 0.0.0-use.local resolution: "@backstage/core-plugin-api@workspace:packages/core-plugin-api" dependencies: @@ -3601,7 +3601,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/dev-utils@^1.0.6, @backstage/dev-utils@workspace:^, @backstage/dev-utils@workspace:packages/dev-utils": +"@backstage/dev-utils@workspace:^, @backstage/dev-utils@workspace:packages/dev-utils": version: 0.0.0-use.local resolution: "@backstage/dev-utils@workspace:packages/dev-utils" dependencies: @@ -4159,10 +4159,10 @@ __metadata: dependencies: "@azure/arm-resourcegraph": ^4.2.1 "@azure/identity": ^2.1.0 - "@backstage/backend-common": ^0.15.1 - "@backstage/cli": ^0.19.0 - "@backstage/config": ^1.0.2 - "@backstage/plugin-azure-functions-common": ^0.0.0 + "@backstage/backend-common": "workspace:^" + "@backstage/cli": "workspace:^" + "@backstage/config": "workspace:^" + "@backstage/plugin-azure-functions-common": "workspace:^" "@types/express": ^4.17.6 "@types/supertest": ^2.0.8 express: ^4.17.1 @@ -4174,11 +4174,11 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-azure-functions-common@^0.0.0, @backstage/plugin-azure-functions-common@workspace:plugins/azure-functions-common": +"@backstage/plugin-azure-functions-common@workspace:^, @backstage/plugin-azure-functions-common@workspace:plugins/azure-functions-common": version: 0.0.0-use.local resolution: "@backstage/plugin-azure-functions-common@workspace:plugins/azure-functions-common" dependencies: - "@backstage/cli": ^0.19.0 + "@backstage/cli": "workspace:^" languageName: unknown linkType: soft @@ -4186,16 +4186,16 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-azure-functions@workspace:plugins/azure-functions" dependencies: - "@backstage/catalog-model": ^1.1.1 - "@backstage/cli": ^0.19.0 - "@backstage/core-app-api": ^1.1.0 - "@backstage/core-components": ^0.11.1 - "@backstage/core-plugin-api": ^1.0.6 - "@backstage/dev-utils": ^1.0.6 - "@backstage/plugin-azure-functions-common": ^0.0.0 - "@backstage/plugin-catalog-react": ^1.1.4 - "@backstage/test-utils": ^1.2.0 - "@backstage/theme": ^0.2.16 + "@backstage/catalog-model": "workspace:^" + "@backstage/cli": "workspace:^" + "@backstage/core-app-api": "workspace:^" + "@backstage/core-components": "workspace:^" + "@backstage/core-plugin-api": "workspace:^" + "@backstage/dev-utils": "workspace:^" + "@backstage/plugin-azure-functions-common": "workspace:^" + "@backstage/plugin-catalog-react": "workspace:^" + "@backstage/test-utils": "workspace:^" + "@backstage/theme": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.57 @@ -4778,7 +4778,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-react@^1.0.0, @backstage/plugin-catalog-react@^1.1.4, @backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": +"@backstage/plugin-catalog-react@^1.0.0, @backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-react@workspace:plugins/catalog-react" dependencies: @@ -7512,7 +7512,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/test-utils@^1.2.0, @backstage/test-utils@workspace:^, @backstage/test-utils@workspace:packages/test-utils": +"@backstage/test-utils@workspace:^, @backstage/test-utils@workspace:packages/test-utils": version: 0.0.0-use.local resolution: "@backstage/test-utils@workspace:packages/test-utils" dependencies: @@ -7542,7 +7542,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/theme@^0.2.16, @backstage/theme@^0.2.6, @backstage/theme@^0.2.7, @backstage/theme@^0.2.9, @backstage/theme@workspace:^, @backstage/theme@workspace:packages/theme": +"@backstage/theme@^0.2.6, @backstage/theme@^0.2.7, @backstage/theme@^0.2.9, @backstage/theme@workspace:^, @backstage/theme@workspace:packages/theme": version: 0.0.0-use.local resolution: "@backstage/theme@workspace:packages/theme" dependencies: From fbf2d1256b9c3bb80666ddcfb1a45f9c9ea1f56d Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Thu, 22 Sep 2022 00:17:52 +0200 Subject: [PATCH 026/278] move github search to the backend Signed-off-by: Kiss Miklos --- plugins/catalog-backend/package.json | 2 + .../src/ingestion/GitHubLocationAnalyzer.ts | 88 +++++++++++++++++++ .../src/ingestion/LocationAnalyzer.ts | 41 ++++++++- .../catalog-backend/src/ingestion/types.ts | 16 +++- .../src/service/CatalogBuilder.ts | 5 +- .../src/service/standaloneServer.ts | 1 + plugins/catalog-import/package.json | 1 + .../src/api/CatalogImportClient.ts | 86 ++---------------- yarn.lock | 5 +- 9 files changed, 159 insertions(+), 86 deletions(-) create mode 100644 plugins/catalog-backend/src/ingestion/GitHubLocationAnalyzer.ts diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index f5ab216a7f..1e2d732f35 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -38,6 +38,7 @@ "@backstage/catalog-client": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", + "@backstage/core-plugin-api": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", "@backstage/plugin-catalog-common": "workspace:^", @@ -47,6 +48,7 @@ "@backstage/plugin-scaffolder-common": "workspace:^", "@backstage/plugin-search-common": "workspace:^", "@backstage/types": "workspace:^", + "@octokit/rest": "^19.0.4", "@types/express": "^4.17.6", "codeowners-utils": "^1.0.2", "core-js": "^3.6.5", diff --git a/plugins/catalog-backend/src/ingestion/GitHubLocationAnalyzer.ts b/plugins/catalog-backend/src/ingestion/GitHubLocationAnalyzer.ts new file mode 100644 index 0000000000..b96b50649e --- /dev/null +++ b/plugins/catalog-backend/src/ingestion/GitHubLocationAnalyzer.ts @@ -0,0 +1,88 @@ +/* + * 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 { CatalogClient } from '@backstage/catalog-client'; +import { GitHubIntegration } from '@backstage/integration'; +import { DiscoveryApi } from '@backstage/plugin-permission-common'; +import { Octokit } from '@octokit/rest'; +import { trimEnd } from 'lodash'; +import { AnalyzeLocationExistingEntity, BaseLocationAnalyzer } from './types'; + +export type GitHubLocationAnalyzerOptions = { + integration: GitHubIntegration; + catalogFilename?: string; + + discovery: DiscoveryApi; +}; +export class GitHubLocationAnalyzer implements BaseLocationAnalyzer { + private readonly integration: GitHubIntegration; + private readonly catalogFilename: string; + private readonly discovery: DiscoveryApi; + + constructor(options: GitHubLocationAnalyzerOptions) { + this.integration = options.integration; + this.catalogFilename = options.catalogFilename || 'catalog-info.yaml'; + this.discovery = options.discovery; + } + + async analyze( + owner: string, + repo: string, + url: string, + ): Promise { + const octo = new Octokit({ + auth: this.integration.config.token, + baseUrl: this.integration.config.apiBaseUrl, + }); + const query = `filename:${this.catalogFilename} repo:${owner}/${repo} `; + + const catalogClient = new CatalogClient({ discoveryApi: this.discovery }); + + const searchResult = await octo.search.code({ q: query }).catch(e => { + throw new Error(`Couldn't search repository for metadata file, ${e}`); + }); + + const exists = searchResult.data.total_count > 0; + if (exists) { + const repoInformation = await octo.repos.get({ owner, repo }).catch(e => { + throw new Error(`Couldn't fetch repo data, ${e}`); + }); + const defaultBranch = repoInformation.data.default_branch; + + return await Promise.all( + searchResult.data.items + .map(i => `${trimEnd(url, '/')}/blob/${defaultBranch}/${i.path}`) + .map(async target => { + const result = await catalogClient.addLocation({ + type: 'url', + target, + dryRun: true, + }); + return { + target, + exists: result.exists, + entities: result.entities.map(e => ({ + kind: e.kind, + namespace: e.metadata.namespace ?? 'default', + name: e.metadata.name, + })), + }; + }), + ); + } + return []; + } +} diff --git a/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts b/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts index b84dff7de8..c7354a40bc 100644 --- a/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts +++ b/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts @@ -17,25 +17,40 @@ import { Logger } from 'winston'; import parseGitUrl from 'git-url-parse'; import { Entity } from '@backstage/catalog-model'; -import { ScmIntegrationRegistry } from '@backstage/integration'; +import { + GitHubIntegration, + ScmIntegrationRegistry, +} from '@backstage/integration'; import { AnalyzeLocationRequest, AnalyzeLocationResponse, LocationAnalyzer, } from './types'; +import { DiscoveryApi } from '@backstage/plugin-permission-common'; +import { GitHubLocationAnalyzer } from './GitHubLocationAnalyzer'; export class RepoLocationAnalyzer implements LocationAnalyzer { private readonly logger: Logger; private readonly scmIntegrations: ScmIntegrationRegistry; + private readonly discovery: DiscoveryApi; - constructor(logger: Logger, scmIntegrations: ScmIntegrationRegistry) { + constructor( + logger: Logger, + scmIntegrations: ScmIntegrationRegistry, + discovery: DiscoveryApi, + ) { this.logger = logger; this.scmIntegrations = scmIntegrations; + this.discovery = discovery; } async analyzeLocation( request: AnalyzeLocationRequest, ): Promise { + const integration = this.scmIntegrations.byUrl( + request.location.target, + ) as GitHubIntegration; const { owner, name } = parseGitUrl(request.location.target); + const entity: Entity = { apiVersion: 'backstage.io/v1alpha1', kind: 'Component', @@ -45,8 +60,8 @@ export class RepoLocationAnalyzer implements LocationAnalyzer { spec: { type: 'other', lifecycle: 'unknown' }, }; - const integration = this.scmIntegrations.byUrl(request.location.target); let annotationPrefix; + let analyzer; switch (integration?.type) { case 'azure': annotationPrefix = 'dev.azure.com'; @@ -56,6 +71,10 @@ export class RepoLocationAnalyzer implements LocationAnalyzer { break; case 'github': annotationPrefix = 'github.com'; + analyzer = new GitHubLocationAnalyzer({ + integration, + discovery: this.discovery, + }); break; case 'gitlab': annotationPrefix = 'gitlab.com'; @@ -63,6 +82,22 @@ export class RepoLocationAnalyzer implements LocationAnalyzer { default: break; } + if (analyzer) { + const existingEntityFiles = await analyzer.analyze( + owner, + name, + request.location.target, + ); + if (existingEntityFiles.length > 0) { + this.logger.debug( + `entity for ${request.location.target} already exists.`, + ); + return { + existingEntityFiles, + generateEntities: [], + }; + } + } if (annotationPrefix) { entity.metadata.annotations = { diff --git a/plugins/catalog-backend/src/ingestion/types.ts b/plugins/catalog-backend/src/ingestion/types.ts index 2602bd080f..149795d166 100644 --- a/plugins/catalog-backend/src/ingestion/types.ts +++ b/plugins/catalog-backend/src/ingestion/types.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { Entity } from '@backstage/catalog-model'; +import { CompoundEntityRef, Entity } from '@backstage/catalog-model'; import { RecursivePartial } from '../util/RecursivePartial'; import { LocationSpec } from '@backstage/plugin-catalog-node'; @@ -50,9 +50,9 @@ export type AnalyzeLocationResponse = { * @public */ export type AnalyzeLocationExistingEntity = { - location: LocationSpec; - isRegistered: boolean; - entity: Entity; + target: string; + exists: boolean | undefined; + entities: CompoundEntityRef[]; }; /** @@ -98,3 +98,11 @@ export type AnalyzeLocationEntityField = { */ description: string; }; + +export interface BaseLocationAnalyzer { + analyze( + owner: string, + repo: string, + url: string, + ): Promise; +} diff --git a/plugins/catalog-backend/src/service/CatalogBuilder.ts b/plugins/catalog-backend/src/service/CatalogBuilder.ts index d47ace1454..2e20b0d4c3 100644 --- a/plugins/catalog-backend/src/service/CatalogBuilder.ts +++ b/plugins/catalog-backend/src/service/CatalogBuilder.ts @@ -96,6 +96,7 @@ import { RESOURCE_TYPE_CATALOG_ENTITY, } from '@backstage/plugin-catalog-common'; import { AuthorizedLocationService } from './AuthorizedLocationService'; +import { DiscoveryApi } from '@backstage/core-plugin-api'; /** @public */ export type CatalogEnvironment = { @@ -104,6 +105,7 @@ export type CatalogEnvironment = { config: Config; reader: UrlReader; permissions: PermissionEvaluator | PermissionAuthorizer; + discovery: DiscoveryApi; }; /** @@ -478,7 +480,8 @@ export class CatalogBuilder { ); const locationAnalyzer = - this.locationAnalyzer ?? new RepoLocationAnalyzer(logger, integrations); + this.locationAnalyzer ?? + new RepoLocationAnalyzer(logger, integrations, this.env.discovery); const locationService = new AuthorizedLocationService( new DefaultLocationService(locationStore, orchestrator, { allowedLocationTypes: this.allowedLocationType, diff --git a/plugins/catalog-backend/src/service/standaloneServer.ts b/plugins/catalog-backend/src/service/standaloneServer.ts index e48515fb8b..51195ccdd7 100644 --- a/plugins/catalog-backend/src/service/standaloneServer.ts +++ b/plugins/catalog-backend/src/service/standaloneServer.ts @@ -70,6 +70,7 @@ export async function startStandaloneServer( config, reader, permissions, + discovery, }); const catalog = await builder.build(); diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index 2a4ea4642c..055955c9c7 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -40,6 +40,7 @@ "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", "@backstage/integration-react": "workspace:^", + "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-catalog-react": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", diff --git a/plugins/catalog-import/src/api/CatalogImportClient.ts b/plugins/catalog-import/src/api/CatalogImportClient.ts index c12e391ec9..0533b558c8 100644 --- a/plugins/catalog-import/src/api/CatalogImportClient.ts +++ b/plugins/catalog-import/src/api/CatalogImportClient.ts @@ -15,7 +15,6 @@ */ import { CatalogApi } from '@backstage/catalog-client'; -import { CompoundEntityRef } from '@backstage/catalog-model'; import { ConfigApi, DiscoveryApi, @@ -28,11 +27,10 @@ import { import { ScmAuthApi } from '@backstage/integration-react'; import { Octokit } from '@octokit/rest'; import { Base64 } from 'js-base64'; -import { PartialEntity } from '../types'; import { AnalyzeResult, CatalogImportApi } from './CatalogImportApi'; import { getGithubIntegrationConfig } from './GitHub'; -import { trimEnd } from 'lodash'; import { getBranchName, getCatalogFilename } from '../components/helpers'; +import { AnalyzeLocationResponse } from '@backstage/plugin-catalog-backend'; /** * The default implementation of the {@link CatalogImportApi}. @@ -105,16 +103,14 @@ export class CatalogImportClient implements CatalogImportApi { ); } - // TODO: this could be part of the analyze-location endpoint - const locations = await this.checkGitHubForExistingCatalogInfo({ - ...ghConfig, - url, + const analyzation = await this.analyzeLocation({ + repo: url, }); - if (locations.length > 0) { + if (analyzation.existingEntityFiles.length > 0) { return { type: 'locations', - locations, + locations: analyzation.existingEntityFiles, }; } @@ -122,9 +118,7 @@ export class CatalogImportClient implements CatalogImportApi { type: 'repository', integrationType: 'github', url: url, - generatedEntities: await this.generateEntityDefinitions({ - repo: url, - }), + generatedEntities: analyzation.generateEntities.map((x: any) => x.entity), }; } @@ -174,9 +168,9 @@ the component will become available.\n\nFor more information, read an \ } // TODO: this could be part of the catalog api - private async generateEntityDefinitions(options: { + private async analyzeLocation(options: { repo: string; - }): Promise { + }): Promise { const { token } = await this.identityApi.getCredentials(); const response = await fetch( `${await this.discoveryApi.getBaseUrl('catalog')}/analyze-location`, @@ -200,69 +194,7 @@ the component will become available.\n\nFor more information, read an \ } const payload = await response.json(); - return payload.generateEntities.map((x: any) => x.entity); - } - - // TODO: this response should better be part of the analyze-locations response and scm-independent / implemented per scm - private async checkGitHubForExistingCatalogInfo(options: { - url: string; - owner: string; - repo: string; - githubIntegrationConfig: GitHubIntegrationConfig; - }): Promise< - Array<{ - target: string; - entities: CompoundEntityRef[]; - }> - > { - const { url, owner, repo, githubIntegrationConfig } = options; - - const { token } = await this.scmAuthApi.getCredentials({ url }); - const octo = new Octokit({ - auth: token, - baseUrl: githubIntegrationConfig.apiBaseUrl, - }); - const catalogFilename = getCatalogFilename(this.configApi); - const query = `repo:${owner}/${repo}+filename:${catalogFilename}`; - - const searchResult = await octo.search.code({ q: query }).catch(e => { - throw new Error( - formatHttpErrorMessage( - "Couldn't search repository for metadata file.", - e, - ), - ); - }); - const exists = searchResult.data.total_count > 0; - if (exists) { - const repoInformation = await octo.repos.get({ owner, repo }).catch(e => { - throw new Error(formatHttpErrorMessage("Couldn't fetch repo data", e)); - }); - const defaultBranch = repoInformation.data.default_branch; - - return await Promise.all( - searchResult.data.items - .map(i => `${trimEnd(url, '/')}/blob/${defaultBranch}/${i.path}`) - .map(async target => { - const result = await this.catalogApi.addLocation({ - type: 'url', - target, - dryRun: true, - }); - return { - target, - exists: result.exists, - entities: result.entities.map(e => ({ - kind: e.kind, - namespace: e.metadata.namespace ?? 'default', - name: e.metadata.name, - })), - }; - }), - ); - } - - return []; + return payload; } // TODO: extract this function and implement for non-github diff --git a/yarn.lock b/yarn.lock index 1178b3d940..fbb8955c8f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4659,6 +4659,7 @@ __metadata: "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" + "@backstage/core-plugin-api": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" "@backstage/plugin-catalog-common": "workspace:^" @@ -4669,6 +4670,7 @@ __metadata: "@backstage/plugin-search-backend-node": "workspace:^" "@backstage/plugin-search-common": "workspace:^" "@backstage/types": "workspace:^" + "@octokit/rest": ^19.0.4 "@types/core-js": ^2.5.4 "@types/express": ^4.17.6 "@types/git-url-parse": ^9.0.0 @@ -4796,6 +4798,7 @@ __metadata: "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" "@backstage/integration-react": "workspace:^" + "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-catalog-react": "workspace:^" "@backstage/test-utils": "workspace:^" "@material-ui/core": ^4.12.2 @@ -11576,7 +11579,7 @@ __metadata: languageName: node linkType: hard -"@octokit/rest@npm:^19.0.3": +"@octokit/rest@npm:^19.0.3, @octokit/rest@npm:^19.0.4": version: 19.0.4 resolution: "@octokit/rest@npm:19.0.4" dependencies: From 272d95bd70993ce2db9f13c7a51ce0e0d8f10295 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Thu, 22 Sep 2022 00:20:25 +0200 Subject: [PATCH 027/278] more useful name Signed-off-by: Kiss Miklos --- .../catalog-backend/src/ingestion/GitHubLocationAnalyzer.ts | 4 ++-- plugins/catalog-backend/src/ingestion/types.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/catalog-backend/src/ingestion/GitHubLocationAnalyzer.ts b/plugins/catalog-backend/src/ingestion/GitHubLocationAnalyzer.ts index b96b50649e..885544bfd5 100644 --- a/plugins/catalog-backend/src/ingestion/GitHubLocationAnalyzer.ts +++ b/plugins/catalog-backend/src/ingestion/GitHubLocationAnalyzer.ts @@ -19,7 +19,7 @@ import { GitHubIntegration } from '@backstage/integration'; import { DiscoveryApi } from '@backstage/plugin-permission-common'; import { Octokit } from '@octokit/rest'; import { trimEnd } from 'lodash'; -import { AnalyzeLocationExistingEntity, BaseLocationAnalyzer } from './types'; +import { AnalyzeLocationExistingEntity, ScmLocationAnalyzer } from './types'; export type GitHubLocationAnalyzerOptions = { integration: GitHubIntegration; @@ -27,7 +27,7 @@ export type GitHubLocationAnalyzerOptions = { discovery: DiscoveryApi; }; -export class GitHubLocationAnalyzer implements BaseLocationAnalyzer { +export class GitHubLocationAnalyzer implements ScmLocationAnalyzer { private readonly integration: GitHubIntegration; private readonly catalogFilename: string; private readonly discovery: DiscoveryApi; diff --git a/plugins/catalog-backend/src/ingestion/types.ts b/plugins/catalog-backend/src/ingestion/types.ts index 149795d166..f7b1760441 100644 --- a/plugins/catalog-backend/src/ingestion/types.ts +++ b/plugins/catalog-backend/src/ingestion/types.ts @@ -99,7 +99,7 @@ export type AnalyzeLocationEntityField = { description: string; }; -export interface BaseLocationAnalyzer { +export interface ScmLocationAnalyzer { analyze( owner: string, repo: string, From af7fffa3a40c3922a26a3eee4405a48ae943d902 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Thu, 22 Sep 2022 01:07:23 +0200 Subject: [PATCH 028/278] api-report Signed-off-by: Kiss Miklos --- plugins/catalog-backend/api-report.md | 9 ++++++--- plugins/catalog-backend/src/service/CatalogPlugin.ts | 4 ++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index f18d396114..d3abca1c94 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -18,10 +18,12 @@ import { CatalogProcessorParser } from '@backstage/plugin-catalog-node'; import { CatalogProcessorRefreshKeysResult } from '@backstage/plugin-catalog-node'; import { CatalogProcessorRelationResult } from '@backstage/plugin-catalog-node'; import { CatalogProcessorResult } from '@backstage/plugin-catalog-node'; +import { CompoundEntityRef } from '@backstage/catalog-model'; import { ConditionalPolicyDecision } from '@backstage/plugin-permission-common'; import { Conditions } from '@backstage/plugin-permission-node'; import { Config } from '@backstage/config'; import { DeferredEntity } from '@backstage/plugin-catalog-node'; +import { DiscoveryApi } from '@backstage/core-plugin-api'; import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; import { Entity } from '@backstage/catalog-model'; import { EntityPolicy } from '@backstage/catalog-model'; @@ -64,9 +66,9 @@ export type AnalyzeLocationEntityField = { // @public export type AnalyzeLocationExistingEntity = { - location: LocationSpec; - isRegistered: boolean; - entity: Entity; + target: string; + exists: boolean | undefined; + entities: CompoundEntityRef[]; }; // @public @@ -218,6 +220,7 @@ export type CatalogEnvironment = { config: Config; reader: UrlReader; permissions: PermissionEvaluator | PermissionAuthorizer; + discovery: DiscoveryApi; }; // @alpha diff --git a/plugins/catalog-backend/src/service/CatalogPlugin.ts b/plugins/catalog-backend/src/service/CatalogPlugin.ts index 64e1e52494..3619460c4d 100644 --- a/plugins/catalog-backend/src/service/CatalogPlugin.ts +++ b/plugins/catalog-backend/src/service/CatalogPlugin.ts @@ -22,6 +22,7 @@ import { permissionsServiceRef, urlReaderServiceRef, httpRouterServiceRef, + discoveryServiceRef, } from '@backstage/backend-plugin-api'; import { CatalogBuilder } from './CatalogBuilder'; import { @@ -78,6 +79,7 @@ export const catalogPlugin = createBackendPlugin({ permissions: permissionsServiceRef, database: databaseServiceRef, httpRouter: httpRouterServiceRef, + discovery: discoveryServiceRef, }, async init({ logger, @@ -86,6 +88,7 @@ export const catalogPlugin = createBackendPlugin({ database, permissions, httpRouter, + discovery, }) { const winstonLogger = loggerToWinstonLogger(logger); const builder = await CatalogBuilder.create({ @@ -94,6 +97,7 @@ export const catalogPlugin = createBackendPlugin({ permissions, database, logger: winstonLogger, + discovery, }); builder.addProcessor(...processingExtensions.processors); builder.addEntityProvider(...processingExtensions.entityProviders); From b2e6cb6acfb4e5c452ee89704b61ae0d63c4eb2c Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Sat, 24 Sep 2022 17:59:57 +0200 Subject: [PATCH 029/278] add changeset Signed-off-by: Kiss Miklos --- .changeset/curvy-pets-wash.md | 5 +++++ .changeset/fuzzy-dolls-shake.md | 5 +++++ 2 files changed, 10 insertions(+) create mode 100644 .changeset/curvy-pets-wash.md create mode 100644 .changeset/fuzzy-dolls-shake.md diff --git a/.changeset/curvy-pets-wash.md b/.changeset/curvy-pets-wash.md new file mode 100644 index 0000000000..7e43228fbc --- /dev/null +++ b/.changeset/curvy-pets-wash.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Moved the code search for the existing catalog-info.yaml files to the backend from the frontend. It means it will use the configured GitHub integration's credentials diff --git a/.changeset/fuzzy-dolls-shake.md b/.changeset/fuzzy-dolls-shake.md new file mode 100644 index 0000000000..92380b37ec --- /dev/null +++ b/.changeset/fuzzy-dolls-shake.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-import': minor +--- + +Moved the code search for the existing catalog-info.yaml files to the backend from the frontend. It means it will use the configured GitHub integration's credentials From c0833d0d3f319602b975ca5d08ff14180b27c8dc Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Mon, 26 Sep 2022 12:19:15 +0200 Subject: [PATCH 030/278] use the correct type Signed-off-by: Kiss Miklos --- plugins/catalog-backend/api-report.md | 3 +-- plugins/catalog-backend/package.json | 1 - plugins/catalog-backend/src/service/CatalogBuilder.ts | 9 ++++++--- yarn.lock | 1 - 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index d3abca1c94..e1aec05e33 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -23,7 +23,6 @@ import { ConditionalPolicyDecision } from '@backstage/plugin-permission-common'; import { Conditions } from '@backstage/plugin-permission-node'; import { Config } from '@backstage/config'; import { DeferredEntity } from '@backstage/plugin-catalog-node'; -import { DiscoveryApi } from '@backstage/core-plugin-api'; import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; import { Entity } from '@backstage/catalog-model'; import { EntityPolicy } from '@backstage/catalog-model'; @@ -220,7 +219,7 @@ export type CatalogEnvironment = { config: Config; reader: UrlReader; permissions: PermissionEvaluator | PermissionAuthorizer; - discovery: DiscoveryApi; + discovery: PluginEndpointDiscovery; }; // @alpha diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index 1e2d732f35..8232f1d05a 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -38,7 +38,6 @@ "@backstage/catalog-client": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", - "@backstage/core-plugin-api": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", "@backstage/plugin-catalog-common": "workspace:^", diff --git a/plugins/catalog-backend/src/service/CatalogBuilder.ts b/plugins/catalog-backend/src/service/CatalogBuilder.ts index 2e20b0d4c3..f1d29f015c 100644 --- a/plugins/catalog-backend/src/service/CatalogBuilder.ts +++ b/plugins/catalog-backend/src/service/CatalogBuilder.ts @@ -14,7 +14,11 @@ * limitations under the License. */ -import { PluginDatabaseManager, UrlReader } from '@backstage/backend-common'; +import { + PluginDatabaseManager, + PluginEndpointDiscovery, + UrlReader, +} from '@backstage/backend-common'; import { DefaultNamespaceEntityPolicy, Entity, @@ -96,7 +100,6 @@ import { RESOURCE_TYPE_CATALOG_ENTITY, } from '@backstage/plugin-catalog-common'; import { AuthorizedLocationService } from './AuthorizedLocationService'; -import { DiscoveryApi } from '@backstage/core-plugin-api'; /** @public */ export type CatalogEnvironment = { @@ -105,7 +108,7 @@ export type CatalogEnvironment = { config: Config; reader: UrlReader; permissions: PermissionEvaluator | PermissionAuthorizer; - discovery: DiscoveryApi; + discovery: PluginEndpointDiscovery; }; /** diff --git a/yarn.lock b/yarn.lock index fbb8955c8f..c3155dbfee 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4659,7 +4659,6 @@ __metadata: "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" "@backstage/plugin-catalog-common": "workspace:^" From a08b7939bb4f6fb436ea2e6e09b15da3ec340bce Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Mon, 26 Sep 2022 12:53:47 +0200 Subject: [PATCH 031/278] use the correct discovery type Signed-off-by: Kiss Miklos --- plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts b/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts index c7354a40bc..1fbb6a3d47 100644 --- a/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts +++ b/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts @@ -26,18 +26,18 @@ import { AnalyzeLocationResponse, LocationAnalyzer, } from './types'; -import { DiscoveryApi } from '@backstage/plugin-permission-common'; +import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { GitHubLocationAnalyzer } from './GitHubLocationAnalyzer'; export class RepoLocationAnalyzer implements LocationAnalyzer { private readonly logger: Logger; private readonly scmIntegrations: ScmIntegrationRegistry; - private readonly discovery: DiscoveryApi; + private readonly discovery: PluginEndpointDiscovery; constructor( logger: Logger, scmIntegrations: ScmIntegrationRegistry, - discovery: DiscoveryApi, + discovery: PluginEndpointDiscovery, ) { this.logger = logger; this.scmIntegrations = scmIntegrations; @@ -82,6 +82,7 @@ export class RepoLocationAnalyzer implements LocationAnalyzer { default: break; } + if (analyzer) { const existingEntityFiles = await analyzer.analyze( owner, From 73db439b1d799717e4f3e70e6cbeb9e68f1227ee Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Mon, 26 Sep 2022 14:08:29 +0200 Subject: [PATCH 032/278] do not change public facing api Signed-off-by: Kiss Miklos --- plugins/catalog-backend/api-report.md | 7 ++--- .../src/ingestion/GitHubLocationAnalyzer.ts | 21 ++++++-------- .../catalog-backend/src/ingestion/types.ts | 8 ++--- .../src/api/CatalogImportClient.ts | 29 ++++++++++++++++++- 4 files changed, 44 insertions(+), 21 deletions(-) diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index e1aec05e33..5745588873 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -18,7 +18,6 @@ import { CatalogProcessorParser } from '@backstage/plugin-catalog-node'; import { CatalogProcessorRefreshKeysResult } from '@backstage/plugin-catalog-node'; import { CatalogProcessorRelationResult } from '@backstage/plugin-catalog-node'; import { CatalogProcessorResult } from '@backstage/plugin-catalog-node'; -import { CompoundEntityRef } from '@backstage/catalog-model'; import { ConditionalPolicyDecision } from '@backstage/plugin-permission-common'; import { Conditions } from '@backstage/plugin-permission-node'; import { Config } from '@backstage/config'; @@ -65,9 +64,9 @@ export type AnalyzeLocationEntityField = { // @public export type AnalyzeLocationExistingEntity = { - target: string; - exists: boolean | undefined; - entities: CompoundEntityRef[]; + location: LocationSpec; + isRegistered: boolean; + entity: Entity; }; // @public diff --git a/plugins/catalog-backend/src/ingestion/GitHubLocationAnalyzer.ts b/plugins/catalog-backend/src/ingestion/GitHubLocationAnalyzer.ts index 885544bfd5..46fa87cd92 100644 --- a/plugins/catalog-backend/src/ingestion/GitHubLocationAnalyzer.ts +++ b/plugins/catalog-backend/src/ingestion/GitHubLocationAnalyzer.ts @@ -24,7 +24,6 @@ import { AnalyzeLocationExistingEntity, ScmLocationAnalyzer } from './types'; export type GitHubLocationAnalyzerOptions = { integration: GitHubIntegration; catalogFilename?: string; - discovery: DiscoveryApi; }; export class GitHubLocationAnalyzer implements ScmLocationAnalyzer { @@ -62,26 +61,24 @@ export class GitHubLocationAnalyzer implements ScmLocationAnalyzer { }); const defaultBranch = repoInformation.data.default_branch; - return await Promise.all( + const result = await Promise.all( searchResult.data.items .map(i => `${trimEnd(url, '/')}/blob/${defaultBranch}/${i.path}`) .map(async target => { - const result = await catalogClient.addLocation({ + const addLocationResult = await catalogClient.addLocation({ type: 'url', target, dryRun: true, }); - return { - target, - exists: result.exists, - entities: result.entities.map(e => ({ - kind: e.kind, - namespace: e.metadata.namespace ?? 'default', - name: e.metadata.name, - })), - }; + return addLocationResult.entities.map(e => ({ + location: { type: 'url', target }, + isRegistered: !!addLocationResult.exists, + entity: e, + })); }), ); + + return result.flat(); } return []; } diff --git a/plugins/catalog-backend/src/ingestion/types.ts b/plugins/catalog-backend/src/ingestion/types.ts index f7b1760441..9da7b037aa 100644 --- a/plugins/catalog-backend/src/ingestion/types.ts +++ b/plugins/catalog-backend/src/ingestion/types.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { CompoundEntityRef, Entity } from '@backstage/catalog-model'; +import { Entity } from '@backstage/catalog-model'; import { RecursivePartial } from '../util/RecursivePartial'; import { LocationSpec } from '@backstage/plugin-catalog-node'; @@ -50,9 +50,9 @@ export type AnalyzeLocationResponse = { * @public */ export type AnalyzeLocationExistingEntity = { - target: string; - exists: boolean | undefined; - entities: CompoundEntityRef[]; + location: LocationSpec; + isRegistered: boolean; + entity: Entity; }; /** diff --git a/plugins/catalog-import/src/api/CatalogImportClient.ts b/plugins/catalog-import/src/api/CatalogImportClient.ts index 0533b558c8..7aa3365488 100644 --- a/plugins/catalog-import/src/api/CatalogImportClient.ts +++ b/plugins/catalog-import/src/api/CatalogImportClient.ts @@ -31,6 +31,7 @@ import { AnalyzeResult, CatalogImportApi } from './CatalogImportApi'; import { getGithubIntegrationConfig } from './GitHub'; import { getBranchName, getCatalogFilename } from '../components/helpers'; import { AnalyzeLocationResponse } from '@backstage/plugin-catalog-backend'; +import { CompoundEntityRef } from '@backstage/catalog-model'; /** * The default implementation of the {@link CatalogImportApi}. @@ -108,9 +109,35 @@ export class CatalogImportClient implements CatalogImportApi { }); if (analyzation.existingEntityFiles.length > 0) { + const locations = analyzation.existingEntityFiles.reduce< + Record< + string, + { + target: string; + exists?: boolean; + entities: CompoundEntityRef[]; + } + > + >((state, curr) => { + state[curr.location.target] = { + target: curr.location.target, + exists: curr.isRegistered, + entities: [ + ...(curr.location.target in state + ? state[curr.location.target].entities + : []), + { + name: curr.entity.metadata.name, + namespace: curr.entity.metadata.namespace ?? 'default', + kind: curr.entity.kind, + }, + ], + }; + return state; + }, {}); return { type: 'locations', - locations: analyzation.existingEntityFiles, + locations: Object.values(locations), }; } From 421b620af34f9afbbc028cd6fee2bdde5bd29c76 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Tue, 27 Sep 2022 10:46:15 +0200 Subject: [PATCH 033/278] add tests Signed-off-by: Kiss Miklos --- .../src/ingestion/LocationAnalyzer.ts | 4 +- .../analyzers/GitHubLocationAnalyzer.test.ts | 126 ++++++++++++++++++ .../{ => analyzers}/GitHubLocationAnalyzer.ts | 47 +++---- 3 files changed, 151 insertions(+), 26 deletions(-) create mode 100644 plugins/catalog-backend/src/ingestion/analyzers/GitHubLocationAnalyzer.test.ts rename plugins/catalog-backend/src/ingestion/{ => analyzers}/GitHubLocationAnalyzer.ts (67%) diff --git a/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts b/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts index 1fbb6a3d47..efd6a05fcf 100644 --- a/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts +++ b/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts @@ -27,7 +27,7 @@ import { LocationAnalyzer, } from './types'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; -import { GitHubLocationAnalyzer } from './GitHubLocationAnalyzer'; +import { GitHubLocationAnalyzer } from './analyzers/GitHubLocationAnalyzer'; export class RepoLocationAnalyzer implements LocationAnalyzer { private readonly logger: Logger; @@ -85,8 +85,6 @@ export class RepoLocationAnalyzer implements LocationAnalyzer { if (analyzer) { const existingEntityFiles = await analyzer.analyze( - owner, - name, request.location.target, ); if (existingEntityFiles.length > 0) { diff --git a/plugins/catalog-backend/src/ingestion/analyzers/GitHubLocationAnalyzer.test.ts b/plugins/catalog-backend/src/ingestion/analyzers/GitHubLocationAnalyzer.test.ts new file mode 100644 index 0000000000..11bb3137c7 --- /dev/null +++ b/plugins/catalog-backend/src/ingestion/analyzers/GitHubLocationAnalyzer.test.ts @@ -0,0 +1,126 @@ +/* + * 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. + */ + +const octokit = { + search: { + code: jest.fn(), + }, + repos: { + get: jest.fn(), + }, +}; + +jest.mock('@octokit/rest', () => { + class Octokit { + constructor() { + return octokit; + } + } + return { Octokit }; +}); + +import { PluginEndpointDiscovery } from '@backstage/backend-common'; +import { GitHubLocationAnalyzer } from './GitHubLocationAnalyzer'; +import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; +import { setupServer } from 'msw/node'; +import { rest } from 'msw'; +import { GitHubIntegration } from '@backstage/integration'; + +const server = setupServer(); + +describe('GitHubLocationAnalyzer', () => { + const mockDiscoveryApi: jest.Mocked = { + getBaseUrl: jest.fn().mockResolvedValue('http://localhost:7007'), + getExternalBaseUrl: jest.fn(), + }; + const integration = new GitHubIntegration({ + host: 'h.com', + apiBaseUrl: 'a', + rawBaseUrl: 'r', + token: 't', + }); + + setupRequestMockHandlers(server); + + beforeEach(() => { + server.use( + rest.post('http://localhost:7007/locations', async (req, res, ctx) => { + return res( + ctx.status(201), + ctx.json({ + location: 'test', + exists: false, + entities: [ + { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Location', + metadata: { + name: 'test-entity', + }, + spec: { + type: 'url', + target: 'whatever', + }, + }, + { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + title: 'Test Entity', + name: 'test-entity-2', + description: 'The expected description 2', + }, + spec: { + type: 'some-type', + lifecycle: 'experimental', + owner: 'someone', + }, + }, + ], + }), + ); + }), + ); + }); + + it('should analyze', async () => { + octokit.search.code.mockImplementation((opts: { q: string }) => { + if (opts.q === 'filename:catalog-info.yaml repo:foo/bar') { + return Promise.resolve({ + data: { items: [{ path: 'catalog-info.yaml' }], total_count: 1 }, + }); + } + return Promise.reject(); + }); + + octokit.repos.get.mockResolvedValue({ + data: { default_branch: 'my_default_branch' }, + }); + + const analyzer = new GitHubLocationAnalyzer({ + discovery: mockDiscoveryApi, + integration, + }); + const result = await analyzer.analyze('https://github.com/foo/bar'); + + expect(result[0].isRegistered).toBeFalsy(); + expect(result[0].location).toEqual({ + type: 'url', + target: + 'https://github.com/foo/bar/blob/my_default_branch/catalog-info.yaml', + }); + }); +}); diff --git a/plugins/catalog-backend/src/ingestion/GitHubLocationAnalyzer.ts b/plugins/catalog-backend/src/ingestion/analyzers/GitHubLocationAnalyzer.ts similarity index 67% rename from plugins/catalog-backend/src/ingestion/GitHubLocationAnalyzer.ts rename to plugins/catalog-backend/src/ingestion/analyzers/GitHubLocationAnalyzer.ts index 46fa87cd92..2e42f202f9 100644 --- a/plugins/catalog-backend/src/ingestion/GitHubLocationAnalyzer.ts +++ b/plugins/catalog-backend/src/ingestion/analyzers/GitHubLocationAnalyzer.ts @@ -14,12 +14,13 @@ * limitations under the License. */ -import { CatalogClient } from '@backstage/catalog-client'; +import { CatalogApi, CatalogClient } from '@backstage/catalog-client'; import { GitHubIntegration } from '@backstage/integration'; import { DiscoveryApi } from '@backstage/plugin-permission-common'; import { Octokit } from '@octokit/rest'; import { trimEnd } from 'lodash'; -import { AnalyzeLocationExistingEntity, ScmLocationAnalyzer } from './types'; +import parseGitUrl from 'git-url-parse'; +import { AnalyzeLocationExistingEntity, ScmLocationAnalyzer } from '../types'; export type GitHubLocationAnalyzerOptions = { integration: GitHubIntegration; @@ -27,45 +28,45 @@ export type GitHubLocationAnalyzerOptions = { discovery: DiscoveryApi; }; export class GitHubLocationAnalyzer implements ScmLocationAnalyzer { - private readonly integration: GitHubIntegration; private readonly catalogFilename: string; private readonly discovery: DiscoveryApi; + private readonly octokitClient: Octokit; + private readonly catalogClient: CatalogApi; constructor(options: GitHubLocationAnalyzerOptions) { - this.integration = options.integration; this.catalogFilename = options.catalogFilename || 'catalog-info.yaml'; this.discovery = options.discovery; + this.octokitClient = new Octokit({ + auth: options.integration.config.token, + baseUrl: options.integration.config.apiBaseUrl, + }); + this.catalogClient = new CatalogClient({ discoveryApi: this.discovery }); } - async analyze( - owner: string, - repo: string, - url: string, - ): Promise { - const octo = new Octokit({ - auth: this.integration.config.token, - baseUrl: this.integration.config.apiBaseUrl, - }); - const query = `filename:${this.catalogFilename} repo:${owner}/${repo} `; + async analyze(url: string): Promise { + const { owner, name: repo } = parseGitUrl(url); + const query = `filename:${this.catalogFilename} repo:${owner}/${repo}`; - const catalogClient = new CatalogClient({ discoveryApi: this.discovery }); - - const searchResult = await octo.search.code({ q: query }).catch(e => { - throw new Error(`Couldn't search repository for metadata file, ${e}`); - }); + const searchResult = await this.octokitClient.search + .code({ q: query }) + .catch(e => { + throw new Error(`Couldn't search repository for metadata file, ${e}`); + }); const exists = searchResult.data.total_count > 0; if (exists) { - const repoInformation = await octo.repos.get({ owner, repo }).catch(e => { - throw new Error(`Couldn't fetch repo data, ${e}`); - }); + const repoInformation = await this.octokitClient.repos + .get({ owner, repo }) + .catch(e => { + throw new Error(`Couldn't fetch repo data, ${e}`); + }); const defaultBranch = repoInformation.data.default_branch; const result = await Promise.all( searchResult.data.items .map(i => `${trimEnd(url, '/')}/blob/${defaultBranch}/${i.path}`) .map(async target => { - const addLocationResult = await catalogClient.addLocation({ + const addLocationResult = await this.catalogClient.addLocation({ type: 'url', target, dryRun: true, From 48117acb8cc65825931b2473f5d1b3f1915c16b3 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Tue, 27 Sep 2022 15:49:01 +0200 Subject: [PATCH 034/278] refactor Signed-off-by: Kiss Miklos --- .../src/ingestion/LocationAnalyzer.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts b/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts index efd6a05fcf..f1fede65df 100644 --- a/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts +++ b/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts @@ -51,15 +51,6 @@ export class RepoLocationAnalyzer implements LocationAnalyzer { ) as GitHubIntegration; const { owner, name } = parseGitUrl(request.location.target); - const entity: Entity = { - apiVersion: 'backstage.io/v1alpha1', - kind: 'Component', - metadata: { - name: name, - }, - spec: { type: 'other', lifecycle: 'unknown' }, - }; - let annotationPrefix; let analyzer; switch (integration?.type) { @@ -98,6 +89,15 @@ export class RepoLocationAnalyzer implements LocationAnalyzer { } } + const entity: Entity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + name: name, + }, + spec: { type: 'other', lifecycle: 'unknown' }, + }; + if (annotationPrefix) { entity.metadata.annotations = { [`${annotationPrefix}/project-slug`]: `${owner}/${name}`, From fe99c5d41466d814f43b805093265205f12f85d1 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Tue, 27 Sep 2022 15:56:04 +0200 Subject: [PATCH 035/278] fox tsc Signed-off-by: Kiss Miklos --- .../src/ingestion/analyzers/GitHubLocationAnalyzer.test.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/catalog-backend/src/ingestion/analyzers/GitHubLocationAnalyzer.test.ts b/plugins/catalog-backend/src/ingestion/analyzers/GitHubLocationAnalyzer.test.ts index 11bb3137c7..7f02fee620 100644 --- a/plugins/catalog-backend/src/ingestion/analyzers/GitHubLocationAnalyzer.test.ts +++ b/plugins/catalog-backend/src/ingestion/analyzers/GitHubLocationAnalyzer.test.ts @@ -57,7 +57,7 @@ describe('GitHubLocationAnalyzer', () => { beforeEach(() => { server.use( - rest.post('http://localhost:7007/locations', async (req, res, ctx) => { + rest.post('http://localhost:7007/locations', async (_, res, ctx) => { return res( ctx.status(201), ctx.json({ @@ -123,4 +123,5 @@ describe('GitHubLocationAnalyzer', () => { 'https://github.com/foo/bar/blob/my_default_branch/catalog-info.yaml', }); }); + it('should'); }); From 11f8f63b0705d0c079938961ceba6442f4146441 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Tue, 27 Sep 2022 19:21:21 +0200 Subject: [PATCH 036/278] test optional entity filename for search Signed-off-by: Kiss Miklos --- plugins/catalog-backend/api-report.md | 1 + .../src/ingestion/LocationAnalyzer.ts | 1 + .../analyzers/GitHubLocationAnalyzer.test.ts | 31 +++- .../catalog-backend/src/ingestion/types.ts | 1 + .../src/service/createRouter.ts | 10 +- .../src/api/CatalogImportClient.test.ts | 162 +++++++++++++----- .../src/api/CatalogImportClient.ts | 7 + 7 files changed, 164 insertions(+), 49 deletions(-) diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index 5745588873..bf53badd87 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -78,6 +78,7 @@ export type AnalyzeLocationGenerateEntity = { // @public (undocumented) export type AnalyzeLocationRequest = { location: LocationSpec; + catalogFilename?: string; }; // @public (undocumented) diff --git a/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts b/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts index f1fede65df..24c5821d92 100644 --- a/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts +++ b/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts @@ -65,6 +65,7 @@ export class RepoLocationAnalyzer implements LocationAnalyzer { analyzer = new GitHubLocationAnalyzer({ integration, discovery: this.discovery, + catalogFilename: request.catalogFilename, }); break; case 'gitlab': diff --git a/plugins/catalog-backend/src/ingestion/analyzers/GitHubLocationAnalyzer.test.ts b/plugins/catalog-backend/src/ingestion/analyzers/GitHubLocationAnalyzer.test.ts index 7f02fee620..fbc9ae3454 100644 --- a/plugins/catalog-backend/src/ingestion/analyzers/GitHubLocationAnalyzer.test.ts +++ b/plugins/catalog-backend/src/ingestion/analyzers/GitHubLocationAnalyzer.test.ts @@ -94,6 +94,10 @@ describe('GitHubLocationAnalyzer', () => { ); }), ); + + octokit.repos.get.mockResolvedValue({ + data: { default_branch: 'my_default_branch' }, + }); }); it('should analyze', async () => { @@ -106,10 +110,6 @@ describe('GitHubLocationAnalyzer', () => { return Promise.reject(); }); - octokit.repos.get.mockResolvedValue({ - data: { default_branch: 'my_default_branch' }, - }); - const analyzer = new GitHubLocationAnalyzer({ discovery: mockDiscoveryApi, integration, @@ -123,5 +123,26 @@ describe('GitHubLocationAnalyzer', () => { 'https://github.com/foo/bar/blob/my_default_branch/catalog-info.yaml', }); }); - it('should'); + it('should use the provided entity filename for search', async () => { + octokit.search.code.mockImplementation((opts: { q: string }) => { + if (opts.q === 'filename:anvil.yaml repo:foo/bar') { + return Promise.resolve({ + data: { items: [{ path: 'anvil.yaml' }], total_count: 1 }, + }); + } + return Promise.reject(); + }); + + const analyzer = new GitHubLocationAnalyzer({ + discovery: mockDiscoveryApi, + integration, + catalogFilename: 'anvil.yaml', + }); + const result = await analyzer.analyze('https://github.com/foo/bar'); + + expect(result[0].location).toEqual({ + type: 'url', + target: 'https://github.com/foo/bar/blob/my_default_branch/anvil.yaml', + }); + }); }); diff --git a/plugins/catalog-backend/src/ingestion/types.ts b/plugins/catalog-backend/src/ingestion/types.ts index 9da7b037aa..8dc833abd8 100644 --- a/plugins/catalog-backend/src/ingestion/types.ts +++ b/plugins/catalog-backend/src/ingestion/types.ts @@ -34,6 +34,7 @@ export type LocationAnalyzer = { /** @public */ export type AnalyzeLocationRequest = { location: LocationSpec; + catalogFilename?: string; }; /** @public */ diff --git a/plugins/catalog-backend/src/service/createRouter.ts b/plugins/catalog-backend/src/service/createRouter.ts index 639893dcc1..93a4e20726 100644 --- a/plugins/catalog-backend/src/service/createRouter.ts +++ b/plugins/catalog-backend/src/service/createRouter.ts @@ -229,9 +229,15 @@ export async function createRouter( router.post('/analyze-location', async (req, res) => { const body = await validateRequestBody( req, - z.object({ location: locationInput }), + z.object({ + location: locationInput, + catalogFilename: z.string().optional(), + }), ); - const schema = z.object({ location: locationInput }); + const schema = z.object({ + location: locationInput, + catalogFilename: z.string().optional(), + }); const output = await locationAnalyzer.analyzeLocation(schema.parse(body)); res.status(200).json(output); }); diff --git a/plugins/catalog-import/src/api/CatalogImportClient.test.ts b/plugins/catalog-import/src/api/CatalogImportClient.test.ts index 30b9f47d99..d507ac3bef 100644 --- a/plugins/catalog-import/src/api/CatalogImportClient.test.ts +++ b/plugins/catalog-import/src/api/CatalogImportClient.test.ts @@ -297,7 +297,7 @@ describe('CatalogImportClient', () => { it('should find locations from github', async () => { (new Octokit().search.code as any as jest.Mock).mockResolvedValueOnce({ data: { - total_count: 2, + total_count: 3, items: [ { path: 'simple/path/catalog-info.yaml' }, { path: 'co/mple/x/path/catalog-info.yaml' }, @@ -305,24 +305,72 @@ describe('CatalogImportClient', () => { ], }, }); - - catalogApi.addLocation.mockImplementation(async ({ type, target }) => ({ - location: { - id: 'id-0', - type: type ?? 'url', - target, - }, - entities: [ - { - apiVersion: '1', - kind: 'k', - metadata: { - name: 'e', - namespace: 'n', + server.use( + rest.post(`${mockBaseUrl}/analyze-location`, (req, res, ctx) => { + expect(req.body).toEqual({ + location: { + target: 'https://github.com/backstage/backstage', + type: 'url', }, - }, - ], - })); + }); + + return res( + ctx.json({ + generateEntities: [], + existingEntityFiles: [ + { + isRegistered: false, + location: { + type: 'url', + target: + 'https://github.com/backstage/backstage/blob/main/simple/path/catalog-info.yaml', + }, + entity: { + apiVersion: '1', + kind: 'k', + metadata: { + name: 'e', + namespace: 'n', + }, + }, + }, + { + isRegistered: false, + location: { + type: 'url', + target: + 'https://github.com/backstage/backstage/blob/main/co/mple/x/path/catalog-info.yaml', + }, + entity: { + apiVersion: '1', + kind: 'k', + metadata: { + name: 'e', + namespace: 'n', + }, + }, + }, + { + isRegistered: false, + location: { + type: 'url', + target: + 'https://github.com/backstage/backstage/blob/main/catalog-info.yaml', + }, + entity: { + apiVersion: '1', + kind: 'k', + metadata: { + name: 'e', + namespace: 'n', + }, + }, + }, + ], + }), + ); + }), + ); await expect( catalogImportClient.analyzeUrl( @@ -332,16 +380,19 @@ describe('CatalogImportClient', () => { locations: [ { entities: [{ kind: 'k', name: 'e', namespace: 'n' }], + exists: false, target: 'https://github.com/backstage/backstage/blob/main/simple/path/catalog-info.yaml', }, { entities: [{ kind: 'k', name: 'e', namespace: 'n' }], + exists: false, target: 'https://github.com/backstage/backstage/blob/main/co/mple/x/path/catalog-info.yaml', }, { entities: [{ kind: 'k', name: 'e', namespace: 'n' }], + exists: false, target: 'https://github.com/backstage/backstage/blob/main/catalog-info.yaml', }, @@ -426,31 +477,57 @@ describe('CatalogImportClient', () => { }), ); - catalogApi.addLocation.mockImplementation(async ({ type, target }) => ({ - location: { - id: 'id-0', - type: type ?? 'url', - target, - }, - entities: [ - { - apiVersion: '1', - kind: 'Location', - metadata: { - name: 'my-entity', - namespace: 'my-namespace', + server.use( + rest.post(`${mockBaseUrl}/analyze-location`, (req, res, ctx) => { + expect(req.body).toEqual({ + location: { + target: 'https://github.com/acme-corp/our-awesome-api', + type: 'url', }, - }, - { - apiVersion: '1', - kind: 'Component', - metadata: { - name: 'my-entity', - namespace: 'my-namespace', - }, - }, - ], - })); + catalogFilename: 'anvil.yaml', + }); + + return res( + ctx.json({ + generateEntities: [], + existingEntityFiles: [ + { + isRegistered: false, + location: { + type: 'url', + target: + 'https://github.com/acme-corp/our-awesome-api/blob/main/anvil.yaml', + }, + entity: { + apiVersion: '1', + kind: 'Location', + metadata: { + name: 'my-entity', + namespace: 'my-namespace', + }, + }, + }, + { + isRegistered: false, + location: { + type: 'url', + target: + 'https://github.com/acme-corp/our-awesome-api/blob/main/anvil.yaml', + }, + entity: { + apiVersion: '1', + kind: 'Component', + metadata: { + name: 'my-entity', + namespace: 'my-namespace', + }, + }, + }, + ], + }), + ); + }), + ); await expect( catalogImportClient.analyzeUrl(repositoryUrl), @@ -470,6 +547,7 @@ describe('CatalogImportClient', () => { }, ], target: `${repositoryUrl}/blob/main/${entityFilename}`, + exists: false, }, ], type: 'locations', diff --git a/plugins/catalog-import/src/api/CatalogImportClient.ts b/plugins/catalog-import/src/api/CatalogImportClient.ts index 7aa3365488..5dd3a3178f 100644 --- a/plugins/catalog-import/src/api/CatalogImportClient.ts +++ b/plugins/catalog-import/src/api/CatalogImportClient.ts @@ -209,6 +209,13 @@ the component will become available.\n\nFor more information, read an \ method: 'POST', body: JSON.stringify({ location: { type: 'url', target: options.repo }, + ...(this.configApi.getOptionalString( + 'catalog.import.entityFilename', + ) && { + catalogFilename: this.configApi.getOptionalString( + 'catalog.import.entityFilename', + ), + }), }), }, ).catch(e => { From 7cdf917b082b8a6cda2adc9ccceb5109462b5989 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 29 Sep 2022 16:14:15 +0000 Subject: [PATCH 037/278] Update dependency @codemirror/view to v6.3.0 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index d1a6809ab6..c7be844a40 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8107,13 +8107,13 @@ __metadata: linkType: hard "@codemirror/view@npm:^6.0.0": - version: 6.2.5 - resolution: "@codemirror/view@npm:6.2.5" + version: 6.3.0 + resolution: "@codemirror/view@npm:6.3.0" dependencies: "@codemirror/state": ^6.0.0 style-mod: ^4.0.0 w3c-keyname: ^2.2.4 - checksum: 0db9c3475790531912a86d5bb60f895ea11d19786a4c877703a602c840d45c2fd92ad6aea6b8648c7dccf88b7250ee1cbc5ca1c1797e5410440e7eb17a970a62 + checksum: 8fe39a1c47799b9bca8b815d7fd5c33bcde06cc8b98c26c87729ccca6d5afbc005671c8b00d8678209bcfc079f6894f4e61f26618d8b8133a79befa0828c789f languageName: node linkType: hard From 59ad2b9d259d04b96f001a8b4b5cb6e15e0ceef8 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Thu, 29 Sep 2022 19:28:26 +0200 Subject: [PATCH 038/278] move github deps to their own plugin Signed-off-by: Kiss Miklos --- .../package.json | 3 + .../analyzers/GitHubLocationAnalyzer.test.ts | 29 ++++++---- .../src}/analyzers/GitHubLocationAnalyzer.ts | 58 ++++++++++++------- .../src/index.ts | 1 + .../src/lib/github.ts | 33 +++++++++++ .../src/lib/index.ts | 1 + .../src/ingestion/LocationAnalyzer.ts | 24 ++++---- .../catalog-backend/src/ingestion/index.ts | 2 + .../catalog-backend/src/ingestion/types.ts | 18 +++--- .../src/service/CatalogBuilder.ts | 23 +++++++- yarn.lock | 1 + 11 files changed, 140 insertions(+), 53 deletions(-) rename plugins/{catalog-backend/src/ingestion => catalog-backend-module-github/src}/analyzers/GitHubLocationAnalyzer.test.ts (89%) rename plugins/{catalog-backend/src/ingestion => catalog-backend-module-github/src}/analyzers/GitHubLocationAnalyzer.ts (62%) diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json index 23d9cbecfc..950c7723e8 100644 --- a/plugins/catalog-backend-module-github/package.json +++ b/plugins/catalog-backend-module-github/package.json @@ -36,6 +36,7 @@ "@backstage/backend-common": "workspace:^", "@backstage/backend-plugin-api": "workspace:^", "@backstage/backend-tasks": "workspace:^", + "@backstage/catalog-client": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", @@ -44,6 +45,8 @@ "@backstage/plugin-catalog-node": "workspace:^", "@backstage/types": "workspace:^", "@octokit/graphql": "^5.0.0", + "@octokit/rest": "^19.0.4", + "git-url-parse": "^13.1.0", "lodash": "^4.17.21", "msw": "^0.47.0", "node-fetch": "^2.6.7", diff --git a/plugins/catalog-backend/src/ingestion/analyzers/GitHubLocationAnalyzer.test.ts b/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.test.ts similarity index 89% rename from plugins/catalog-backend/src/ingestion/analyzers/GitHubLocationAnalyzer.test.ts rename to plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.test.ts index fbc9ae3454..5ceb9cf85c 100644 --- a/plugins/catalog-backend/src/ingestion/analyzers/GitHubLocationAnalyzer.test.ts +++ b/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.test.ts @@ -46,12 +46,17 @@ describe('GitHubLocationAnalyzer', () => { getBaseUrl: jest.fn().mockResolvedValue('http://localhost:7007'), getExternalBaseUrl: jest.fn(), }; - const integration = new GitHubIntegration({ - host: 'h.com', - apiBaseUrl: 'a', - rawBaseUrl: 'r', - token: 't', - }); + const integrations = { + list: jest.fn(), + byHost: jest.fn(), + byUrl: () => + new GitHubIntegration({ + host: 'h.com', + apiBaseUrl: 'a', + rawBaseUrl: 'r', + token: 't', + }), + }; setupRequestMockHandlers(server); @@ -112,9 +117,11 @@ describe('GitHubLocationAnalyzer', () => { const analyzer = new GitHubLocationAnalyzer({ discovery: mockDiscoveryApi, - integration, + integrations, + }); + const result = await analyzer.analyze({ + url: 'https://github.com/foo/bar', }); - const result = await analyzer.analyze('https://github.com/foo/bar'); expect(result[0].isRegistered).toBeFalsy(); expect(result[0].location).toEqual({ @@ -135,10 +142,12 @@ describe('GitHubLocationAnalyzer', () => { const analyzer = new GitHubLocationAnalyzer({ discovery: mockDiscoveryApi, - integration, + integrations, + }); + const result = await analyzer.analyze({ + url: 'https://github.com/foo/bar', catalogFilename: 'anvil.yaml', }); - const result = await analyzer.analyze('https://github.com/foo/bar'); expect(result[0].location).toEqual({ type: 'url', diff --git a/plugins/catalog-backend/src/ingestion/analyzers/GitHubLocationAnalyzer.ts b/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.ts similarity index 62% rename from plugins/catalog-backend/src/ingestion/analyzers/GitHubLocationAnalyzer.ts rename to plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.ts index 2e42f202f9..218d56410d 100644 --- a/plugins/catalog-backend/src/ingestion/analyzers/GitHubLocationAnalyzer.ts +++ b/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.ts @@ -15,39 +15,57 @@ */ import { CatalogApi, CatalogClient } from '@backstage/catalog-client'; -import { GitHubIntegration } from '@backstage/integration'; -import { DiscoveryApi } from '@backstage/plugin-permission-common'; +import { + GitHubIntegration, + ScmIntegrationsGroup, +} from '@backstage/integration'; import { Octokit } from '@octokit/rest'; import { trimEnd } from 'lodash'; import parseGitUrl from 'git-url-parse'; -import { AnalyzeLocationExistingEntity, ScmLocationAnalyzer } from '../types'; +import { + AnalyzeLocationExistingEntity, + AnalyzeOptions, + ScmLocationAnalyzer, +} from '@backstage/plugin-catalog-backend'; +import { PluginEndpointDiscovery } from '@backstage/backend-common'; export type GitHubLocationAnalyzerOptions = { - integration: GitHubIntegration; + integrations: ScmIntegrationsGroup; catalogFilename?: string; - discovery: DiscoveryApi; + discovery: PluginEndpointDiscovery; }; export class GitHubLocationAnalyzer implements ScmLocationAnalyzer { - private readonly catalogFilename: string; - private readonly discovery: DiscoveryApi; - private readonly octokitClient: Octokit; private readonly catalogClient: CatalogApi; + private readonly integrations: ScmIntegrationsGroup; constructor(options: GitHubLocationAnalyzerOptions) { - this.catalogFilename = options.catalogFilename || 'catalog-info.yaml'; - this.discovery = options.discovery; - this.octokitClient = new Octokit({ - auth: options.integration.config.token, - baseUrl: options.integration.config.apiBaseUrl, - }); - this.catalogClient = new CatalogClient({ discoveryApi: this.discovery }); + this.integrations = options.integrations; + this.catalogClient = new CatalogClient({ discoveryApi: options.discovery }); } - - async analyze(url: string): Promise { + getIntegrationType() { + return 'github'; + } + async analyze({ + url, + catalogFilename, + }: AnalyzeOptions): Promise { const { owner, name: repo } = parseGitUrl(url); - const query = `filename:${this.catalogFilename} repo:${owner}/${repo}`; - const searchResult = await this.octokitClient.search + const catalogFile = catalogFilename || 'catalog-info.yaml'; + + const query = `filename:${catalogFile} repo:${owner}/${repo}`; + + const integration = this.integrations.byUrl(url); + if (!integration) { + throw new Error('Make sure you have a GitHub integration configured'); + } + + const octokitClient = new Octokit({ + auth: integration.config.token, + baseUrl: integration.config.apiBaseUrl, + }); + + const searchResult = await octokitClient.search .code({ q: query }) .catch(e => { throw new Error(`Couldn't search repository for metadata file, ${e}`); @@ -55,7 +73,7 @@ export class GitHubLocationAnalyzer implements ScmLocationAnalyzer { const exists = searchResult.data.total_count > 0; if (exists) { - const repoInformation = await this.octokitClient.repos + const repoInformation = await octokitClient.repos .get({ owner, repo }) .catch(e => { throw new Error(`Couldn't fetch repo data, ${e}`); diff --git a/plugins/catalog-backend-module-github/src/index.ts b/plugins/catalog-backend-module-github/src/index.ts index d793d48f1e..e856277873 100644 --- a/plugins/catalog-backend-module-github/src/index.ts +++ b/plugins/catalog-backend-module-github/src/index.ts @@ -29,3 +29,4 @@ export type { GitHubOrgEntityProviderOptions } from './providers/GitHubOrgEntity export type { GithubMultiOrgConfig } from './lib'; export { githubEntityProviderCatalogModule } from './module'; export type { GithubEntityProviderCatalogModuleOptions } from './module'; +export { GitHubLocationAnalyzer } from './analyzers/GitHubLocationAnalyzer'; diff --git a/plugins/catalog-backend-module-github/src/lib/github.ts b/plugins/catalog-backend-module-github/src/lib/github.ts index 6a944af330..ec904a52e0 100644 --- a/plugins/catalog-backend-module-github/src/lib/github.ts +++ b/plugins/catalog-backend-module-github/src/lib/github.ts @@ -308,6 +308,39 @@ export async function getOrganizationRepositories( return { repositories }; } +export async function getRepository( + client: typeof graphql, + org: string, + name: string, +): Promise { + const query = ` + query repositories($org: String!, $name: String!) { + repository(name: $name, owner: $org) { + name + url + isArchived + repositoryTopics(first: 100) { + nodes { + ... on RepositoryTopic { + topic { + name + } + } + } + } + defaultBranchRef { + name + } + } + }`; + + const repository: Repository = await client(query, { + org, + name, + }); + return repository; +} + /** * Gets all the users out of a GitHub organization. * diff --git a/plugins/catalog-backend-module-github/src/lib/index.ts b/plugins/catalog-backend-module-github/src/lib/index.ts index 26ec3e8516..28cbe898d6 100644 --- a/plugins/catalog-backend-module-github/src/lib/index.ts +++ b/plugins/catalog-backend-module-github/src/lib/index.ts @@ -20,6 +20,7 @@ export { getOrganizationRepositories, getOrganizationTeams, getOrganizationUsers, + getRepository, } from './github'; export { assignGroupsToUsers, buildOrgHierarchy } from './org'; export { parseGitHubOrgUrl } from './util'; diff --git a/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts b/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts index 24c5821d92..7992903b65 100644 --- a/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts +++ b/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts @@ -25,23 +25,22 @@ import { AnalyzeLocationRequest, AnalyzeLocationResponse, LocationAnalyzer, + ScmLocationAnalyzer, } from './types'; -import { PluginEndpointDiscovery } from '@backstage/backend-common'; -import { GitHubLocationAnalyzer } from './analyzers/GitHubLocationAnalyzer'; export class RepoLocationAnalyzer implements LocationAnalyzer { private readonly logger: Logger; private readonly scmIntegrations: ScmIntegrationRegistry; - private readonly discovery: PluginEndpointDiscovery; + private readonly analyzers: ScmLocationAnalyzer[]; constructor( logger: Logger, scmIntegrations: ScmIntegrationRegistry, - discovery: PluginEndpointDiscovery, + analyzers: ScmLocationAnalyzer[], ) { this.logger = logger; this.scmIntegrations = scmIntegrations; - this.discovery = discovery; + this.analyzers = analyzers; } async analyzeLocation( request: AnalyzeLocationRequest, @@ -52,7 +51,6 @@ export class RepoLocationAnalyzer implements LocationAnalyzer { const { owner, name } = parseGitUrl(request.location.target); let annotationPrefix; - let analyzer; switch (integration?.type) { case 'azure': annotationPrefix = 'dev.azure.com'; @@ -62,11 +60,6 @@ export class RepoLocationAnalyzer implements LocationAnalyzer { break; case 'github': annotationPrefix = 'github.com'; - analyzer = new GitHubLocationAnalyzer({ - integration, - discovery: this.discovery, - catalogFilename: request.catalogFilename, - }); break; case 'gitlab': annotationPrefix = 'gitlab.com'; @@ -75,10 +68,13 @@ export class RepoLocationAnalyzer implements LocationAnalyzer { break; } + const analyzer = this.analyzers.find( + a => a.getIntegrationType() === integration.type, + ); if (analyzer) { - const existingEntityFiles = await analyzer.analyze( - request.location.target, - ); + const existingEntityFiles = await analyzer.analyze({ + url: request.location.target, + }); if (existingEntityFiles.length > 0) { this.logger.debug( `entity for ${request.location.target} already exists.`, diff --git a/plugins/catalog-backend/src/ingestion/index.ts b/plugins/catalog-backend/src/ingestion/index.ts index c97d029b5c..0b00809043 100644 --- a/plugins/catalog-backend/src/ingestion/index.ts +++ b/plugins/catalog-backend/src/ingestion/index.ts @@ -21,4 +21,6 @@ export type { AnalyzeLocationRequest, AnalyzeLocationResponse, LocationAnalyzer, + ScmLocationAnalyzer, + AnalyzeOptions, } from './types'; diff --git a/plugins/catalog-backend/src/ingestion/types.ts b/plugins/catalog-backend/src/ingestion/types.ts index 8dc833abd8..961be78572 100644 --- a/plugins/catalog-backend/src/ingestion/types.ts +++ b/plugins/catalog-backend/src/ingestion/types.ts @@ -100,10 +100,14 @@ export type AnalyzeLocationEntityField = { description: string; }; -export interface ScmLocationAnalyzer { - analyze( - owner: string, - repo: string, - url: string, - ): Promise; -} +export type AnalyzeOptions = { + url: string; + catalogFilename?: string; +}; +/** @public */ +export type ScmLocationAnalyzer = { + /** The integration type this location analyzer can work with */ + getIntegrationType(): string; + /** This function is responsible to figure out if the catalog file is already present in the repository */ + analyze(options: AnalyzeOptions): Promise; +}; diff --git a/plugins/catalog-backend/src/service/CatalogBuilder.ts b/plugins/catalog-backend/src/service/CatalogBuilder.ts index f1d29f015c..97379ac491 100644 --- a/plugins/catalog-backend/src/service/CatalogBuilder.ts +++ b/plugins/catalog-backend/src/service/CatalogBuilder.ts @@ -60,7 +60,7 @@ import { yamlPlaceholderResolver, } from '../modules/core/PlaceholderProcessor'; import { defaultEntityDataParser } from '../modules/util/parse'; -import { LocationAnalyzer } from '../ingestion/types'; +import { LocationAnalyzer, ScmLocationAnalyzer } from '../ingestion/types'; import { CatalogProcessingEngine } from '../processing'; import { DefaultProcessingDatabase } from '../database/DefaultProcessingDatabase'; import { applyDatabaseMigrations } from '../database/migrations'; @@ -120,6 +120,9 @@ export type CatalogEnvironment = { * after the processors' pre-processing steps. All policies are given the * chance to inspect the entity, and all of them have to pass in order for * the entity to be considered valid from an overall point of view. + * - Location analyzers can be added. These are responsible to analyze the + * the existence of a catalog-info.yaml file int he provided git repository + * when you use the /catalog-import page with a repository url. * - Placeholder resolvers can be replaced or added. These run on the raw * structured data between the parsing and pre-processing steps, to replace * dollar-prefixed entries with their actual values (like $file). @@ -140,6 +143,7 @@ export class CatalogBuilder { private fieldFormatValidators: Partial; private entityProviders: EntityProvider[]; private processors: CatalogProcessor[]; + private locationAnalyzers: ScmLocationAnalyzer[]; private processorsReplace: boolean; private parser: CatalogProcessorParser | undefined; private onProcessingError?: (event: { @@ -170,6 +174,7 @@ export class CatalogBuilder { this.fieldFormatValidators = {}; this.entityProviders = []; this.processors = []; + this.locationAnalyzers = []; this.processorsReplace = false; this.parser = undefined; this.permissionRules = Object.values(catalogPermissionRules); @@ -340,6 +345,20 @@ export class CatalogBuilder { ]; } + /** + * Adds Location Analyzers. These are responsible for figuring out + * if the repository already contains a catalog-info.yaml file when + * you register a repostiroy in the /catalog-import page + * + * @param locationAnalyzers - One or more location analyzers + */ + addLocationAnalyzers( + ...analyzers: Array> + ): CatalogBuilder { + this.locationAnalyzers.push(...analyzers.flat()); + return this; + } + /** * Sets up the catalog to use a custom parser for entity data. * @@ -484,7 +503,7 @@ export class CatalogBuilder { const locationAnalyzer = this.locationAnalyzer ?? - new RepoLocationAnalyzer(logger, integrations, this.env.discovery); + new RepoLocationAnalyzer(logger, integrations, this.locationAnalyzers); const locationService = new AuthorizedLocationService( new DefaultLocationService(locationStore, orchestrator, { allowedLocationTypes: this.allowedLocationType, diff --git a/yarn.lock b/yarn.lock index c3155dbfee..718736394b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4550,6 +4550,7 @@ __metadata: "@backstage/plugin-catalog-node": "workspace:^" "@backstage/types": "workspace:^" "@octokit/graphql": ^5.0.0 + "@octokit/rest": ^19.0.4 "@types/lodash": ^4.14.151 lodash: ^4.17.21 msw: ^0.47.0 From 7022aebf35b0c3def2b84593b48c6c6290fd79b7 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Thu, 29 Sep 2022 19:32:42 +0200 Subject: [PATCH 039/278] add changeset Signed-off-by: Kiss Miklos --- .changeset/moody-carrots-shout.md | 5 +++ .../src/lib/github.ts | 33 ------------------- yarn.lock | 4 ++- 3 files changed, 8 insertions(+), 34 deletions(-) create mode 100644 .changeset/moody-carrots-shout.md diff --git a/.changeset/moody-carrots-shout.md b/.changeset/moody-carrots-shout.md new file mode 100644 index 0000000000..a1c357041f --- /dev/null +++ b/.changeset/moody-carrots-shout.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-github': minor +--- + +Added `GitHubLocationAnalyzer`. This can be used to add to the `CatalogBuilder`. When added this will be used by `RepoLocationAnalyzer` to figure out if the given url that you are trying to import from the /catalog-import page already contains catalog-info.yaml files. diff --git a/plugins/catalog-backend-module-github/src/lib/github.ts b/plugins/catalog-backend-module-github/src/lib/github.ts index ec904a52e0..6a944af330 100644 --- a/plugins/catalog-backend-module-github/src/lib/github.ts +++ b/plugins/catalog-backend-module-github/src/lib/github.ts @@ -308,39 +308,6 @@ export async function getOrganizationRepositories( return { repositories }; } -export async function getRepository( - client: typeof graphql, - org: string, - name: string, -): Promise { - const query = ` - query repositories($org: String!, $name: String!) { - repository(name: $name, owner: $org) { - name - url - isArchived - repositoryTopics(first: 100) { - nodes { - ... on RepositoryTopic { - topic { - name - } - } - } - } - defaultBranchRef { - name - } - } - }`; - - const repository: Repository = await client(query, { - org, - name, - }); - return repository; -} - /** * Gets all the users out of a GitHub organization. * diff --git a/yarn.lock b/yarn.lock index 718736394b..a418c7e297 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4541,6 +4541,7 @@ __metadata: "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-tasks": "workspace:^" "@backstage/backend-test-utils": "workspace:^" + "@backstage/catalog-client": "workspace:^" "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" @@ -4552,6 +4553,7 @@ __metadata: "@octokit/graphql": ^5.0.0 "@octokit/rest": ^19.0.4 "@types/lodash": ^4.14.151 + git-url-parse: ^13.1.0 lodash: ^4.17.21 msw: ^0.47.0 node-fetch: ^2.6.7 @@ -23512,7 +23514,7 @@ __metadata: languageName: node linkType: hard -"git-url-parse@npm:^13.0.0": +"git-url-parse@npm:^13.0.0, git-url-parse@npm:^13.1.0": version: 13.1.0 resolution: "git-url-parse@npm:13.1.0" dependencies: From 2f5b97df6c30087e0ba353424ea7b0749d6f3b1d Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Thu, 29 Sep 2022 19:38:51 +0200 Subject: [PATCH 040/278] get correct integration from config Signed-off-by: Kiss Miklos --- .../src/analyzers/GitHubLocationAnalyzer.ts | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.ts b/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.ts index 218d56410d..7ab92565ce 100644 --- a/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.ts +++ b/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.ts @@ -15,10 +15,7 @@ */ import { CatalogApi, CatalogClient } from '@backstage/catalog-client'; -import { - GitHubIntegration, - ScmIntegrationsGroup, -} from '@backstage/integration'; +import { ScmIntegrations } from '@backstage/integration'; import { Octokit } from '@octokit/rest'; import { trimEnd } from 'lodash'; import parseGitUrl from 'git-url-parse'; @@ -28,18 +25,18 @@ import { ScmLocationAnalyzer, } from '@backstage/plugin-catalog-backend'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; +import { Config } from '@backstage/config'; export type GitHubLocationAnalyzerOptions = { - integrations: ScmIntegrationsGroup; - catalogFilename?: string; + config: Config; discovery: PluginEndpointDiscovery; }; export class GitHubLocationAnalyzer implements ScmLocationAnalyzer { private readonly catalogClient: CatalogApi; - private readonly integrations: ScmIntegrationsGroup; + private readonly config: Config; constructor(options: GitHubLocationAnalyzerOptions) { - this.integrations = options.integrations; + this.config = options.config; this.catalogClient = new CatalogClient({ discoveryApi: options.discovery }); } getIntegrationType() { @@ -55,7 +52,9 @@ export class GitHubLocationAnalyzer implements ScmLocationAnalyzer { const query = `filename:${catalogFile} repo:${owner}/${repo}`; - const integration = this.integrations.byUrl(url); + const integration = ScmIntegrations.fromConfig(this.config).github.byUrl( + url, + ); if (!integration) { throw new Error('Make sure you have a GitHub integration configured'); } From 3cbe42d8a97a331444286c6b05b77cad4642ebe7 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Thu, 29 Sep 2022 19:42:11 +0200 Subject: [PATCH 041/278] fix tests Signed-off-by: Kiss Miklos --- .../analyzers/GitHubLocationAnalyzer.test.ts | 21 ++++++++----------- .../src/lib/index.ts | 1 - 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.test.ts b/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.test.ts index 5ceb9cf85c..f4996f232a 100644 --- a/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.test.ts +++ b/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.test.ts @@ -37,7 +37,7 @@ import { GitHubLocationAnalyzer } from './GitHubLocationAnalyzer'; import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import { setupServer } from 'msw/node'; import { rest } from 'msw'; -import { GitHubIntegration } from '@backstage/integration'; +import { ConfigReader } from '@backstage/config'; const server = setupServer(); @@ -46,17 +46,14 @@ describe('GitHubLocationAnalyzer', () => { getBaseUrl: jest.fn().mockResolvedValue('http://localhost:7007'), getExternalBaseUrl: jest.fn(), }; - const integrations = { - list: jest.fn(), - byHost: jest.fn(), - byUrl: () => - new GitHubIntegration({ + const config = new ConfigReader({ + integrations: { + github: { host: 'h.com', - apiBaseUrl: 'a', - rawBaseUrl: 'r', token: 't', - }), - }; + }, + }, + }); setupRequestMockHandlers(server); @@ -117,7 +114,7 @@ describe('GitHubLocationAnalyzer', () => { const analyzer = new GitHubLocationAnalyzer({ discovery: mockDiscoveryApi, - integrations, + config, }); const result = await analyzer.analyze({ url: 'https://github.com/foo/bar', @@ -142,7 +139,7 @@ describe('GitHubLocationAnalyzer', () => { const analyzer = new GitHubLocationAnalyzer({ discovery: mockDiscoveryApi, - integrations, + config, }); const result = await analyzer.analyze({ url: 'https://github.com/foo/bar', diff --git a/plugins/catalog-backend-module-github/src/lib/index.ts b/plugins/catalog-backend-module-github/src/lib/index.ts index 28cbe898d6..26ec3e8516 100644 --- a/plugins/catalog-backend-module-github/src/lib/index.ts +++ b/plugins/catalog-backend-module-github/src/lib/index.ts @@ -20,7 +20,6 @@ export { getOrganizationRepositories, getOrganizationTeams, getOrganizationUsers, - getRepository, } from './github'; export { assignGroupsToUsers, buildOrgHierarchy } from './org'; export { parseGitHubOrgUrl } from './util'; From e74ac1c708e09bf4fff5020a017ab3244f066c65 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Fri, 30 Sep 2022 10:34:10 +0200 Subject: [PATCH 042/278] add analyzers to the CatalogBuilder Signed-off-by: Kiss Miklos --- .changeset/moody-carrots-shout.md | 2 +- .../api-report.md | 22 +++++++++++++++++++ .../src/analyzers/GitHubLocationAnalyzer.ts | 2 ++ .../src/index.ts | 1 + plugins/catalog-backend/api-report.md | 16 +++++++++++++- plugins/catalog-backend/package.json | 1 - .../src/ingestion/LocationAnalyzer.ts | 11 +++------- .../catalog-backend/src/ingestion/types.ts | 2 ++ .../src/service/CatalogBuilder.ts | 7 +----- .../src/service/CatalogPlugin.ts | 4 ---- .../src/service/standaloneServer.ts | 1 - 11 files changed, 47 insertions(+), 22 deletions(-) diff --git a/.changeset/moody-carrots-shout.md b/.changeset/moody-carrots-shout.md index a1c357041f..1b1555a5dd 100644 --- a/.changeset/moody-carrots-shout.md +++ b/.changeset/moody-carrots-shout.md @@ -2,4 +2,4 @@ '@backstage/plugin-catalog-backend-module-github': minor --- -Added `GitHubLocationAnalyzer`. This can be used to add to the `CatalogBuilder`. When added this will be used by `RepoLocationAnalyzer` to figure out if the given url that you are trying to import from the /catalog-import page already contains catalog-info.yaml files. +Added `GitHubLocationAnalyzer`. This can be used to add to the `CatalogBuilder`. When added this will be used by `RepoLocationAnalyzer` to figure out if the given URL that you are trying to import from the /catalog-import page already contains catalog-info.yaml files. diff --git a/plugins/catalog-backend-module-github/api-report.md b/plugins/catalog-backend-module-github/api-report.md index 8e8055bafc..0d6c8c015f 100644 --- a/plugins/catalog-backend-module-github/api-report.md +++ b/plugins/catalog-backend-module-github/api-report.md @@ -3,6 +3,8 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { AnalyzeLocationExistingEntity } from '@backstage/plugin-catalog-backend'; +import { AnalyzeOptions } from '@backstage/plugin-catalog-backend'; import { BackendFeature } from '@backstage/backend-plugin-api'; import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; import { CatalogProcessorEmit } from '@backstage/plugin-catalog-backend'; @@ -13,7 +15,9 @@ import { GithubCredentialsProvider } from '@backstage/integration'; import { GitHubIntegrationConfig } from '@backstage/integration'; import { LocationSpec } from '@backstage/plugin-catalog-backend'; import { Logger } from 'winston'; +import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { ScmIntegrationRegistry } from '@backstage/integration'; +import { ScmLocationAnalyzer } from '@backstage/plugin-catalog-backend'; import { TaskRunner } from '@backstage/backend-tasks'; import { TaskScheduleDefinition } from '@backstage/backend-tasks'; @@ -70,6 +74,24 @@ export type GithubEntityProviderCatalogModuleOptions = { schedule?: TaskScheduleDefinition; }; +// @public (undocumented) +export class GitHubLocationAnalyzer implements ScmLocationAnalyzer { + constructor(options: GitHubLocationAnalyzerOptions); + // (undocumented) + analyze({ + url, + catalogFilename, + }: AnalyzeOptions): Promise; + // (undocumented) + getIntegrationType(): string; +} + +// @public (undocumented) +export type GitHubLocationAnalyzerOptions = { + config: Config; + discovery: PluginEndpointDiscovery; +}; + // @public export type GithubMultiOrgConfig = Array<{ name: string; diff --git a/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.ts b/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.ts index 7ab92565ce..a043b894cd 100644 --- a/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.ts +++ b/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.ts @@ -27,10 +27,12 @@ import { import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { Config } from '@backstage/config'; +/** @public */ export type GitHubLocationAnalyzerOptions = { config: Config; discovery: PluginEndpointDiscovery; }; +/** @public */ export class GitHubLocationAnalyzer implements ScmLocationAnalyzer { private readonly catalogClient: CatalogApi; private readonly config: Config; diff --git a/plugins/catalog-backend-module-github/src/index.ts b/plugins/catalog-backend-module-github/src/index.ts index e856277873..ca7c72f11b 100644 --- a/plugins/catalog-backend-module-github/src/index.ts +++ b/plugins/catalog-backend-module-github/src/index.ts @@ -30,3 +30,4 @@ export type { GithubMultiOrgConfig } from './lib'; export { githubEntityProviderCatalogModule } from './module'; export type { GithubEntityProviderCatalogModuleOptions } from './module'; export { GitHubLocationAnalyzer } from './analyzers/GitHubLocationAnalyzer'; +export type { GitHubLocationAnalyzerOptions } from './analyzers/GitHubLocationAnalyzer'; diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index bf53badd87..15cb23d1aa 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -87,6 +87,12 @@ export type AnalyzeLocationResponse = { generateEntities: AnalyzeLocationGenerateEntity[]; }; +// @public (undocumented) +export type AnalyzeOptions = { + url: string; + catalogFilename?: string; +}; + // @public (undocumented) export class AnnotateLocationEntityProcessor implements CatalogProcessor { constructor(options: { integrations: ScmIntegrationRegistry }); @@ -134,6 +140,9 @@ export class CatalogBuilder { addEntityProvider( ...providers: Array> ): CatalogBuilder; + addLocationAnalyzers( + ...analyzers: Array> + ): CatalogBuilder; // @alpha addPermissionRules( ...permissionRules: Array< @@ -219,7 +228,6 @@ export type CatalogEnvironment = { config: Config; reader: UrlReader; permissions: PermissionEvaluator | PermissionAuthorizer; - discovery: PluginEndpointDiscovery; }; // @alpha @@ -533,6 +541,12 @@ export type ProcessingIntervalFunction = () => number; export { processingResult }; +// @public (undocumented) +export type ScmLocationAnalyzer = { + getIntegrationType(): string; + analyze(options: AnalyzeOptions): Promise; +}; + // @public (undocumented) export class UrlReaderProcessor implements CatalogProcessor { constructor(options: { reader: UrlReader; logger: Logger }); diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index 8232f1d05a..f5ab216a7f 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -47,7 +47,6 @@ "@backstage/plugin-scaffolder-common": "workspace:^", "@backstage/plugin-search-common": "workspace:^", "@backstage/types": "workspace:^", - "@octokit/rest": "^19.0.4", "@types/express": "^4.17.6", "codeowners-utils": "^1.0.2", "core-js": "^3.6.5", diff --git a/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts b/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts index 7992903b65..11f9799759 100644 --- a/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts +++ b/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts @@ -17,10 +17,7 @@ import { Logger } from 'winston'; import parseGitUrl from 'git-url-parse'; import { Entity } from '@backstage/catalog-model'; -import { - GitHubIntegration, - ScmIntegrationRegistry, -} from '@backstage/integration'; +import { ScmIntegrationRegistry } from '@backstage/integration'; import { AnalyzeLocationRequest, AnalyzeLocationResponse, @@ -45,9 +42,7 @@ export class RepoLocationAnalyzer implements LocationAnalyzer { async analyzeLocation( request: AnalyzeLocationRequest, ): Promise { - const integration = this.scmIntegrations.byUrl( - request.location.target, - ) as GitHubIntegration; + const integration = this.scmIntegrations.byUrl(request.location.target); const { owner, name } = parseGitUrl(request.location.target); let annotationPrefix; @@ -69,7 +64,7 @@ export class RepoLocationAnalyzer implements LocationAnalyzer { } const analyzer = this.analyzers.find( - a => a.getIntegrationType() === integration.type, + a => a.getIntegrationType() === integration?.type, ); if (analyzer) { const existingEntityFiles = await analyzer.analyze({ diff --git a/plugins/catalog-backend/src/ingestion/types.ts b/plugins/catalog-backend/src/ingestion/types.ts index 961be78572..b68a4681b1 100644 --- a/plugins/catalog-backend/src/ingestion/types.ts +++ b/plugins/catalog-backend/src/ingestion/types.ts @@ -100,10 +100,12 @@ export type AnalyzeLocationEntityField = { description: string; }; +/** @public */ export type AnalyzeOptions = { url: string; catalogFilename?: string; }; + /** @public */ export type ScmLocationAnalyzer = { /** The integration type this location analyzer can work with */ diff --git a/plugins/catalog-backend/src/service/CatalogBuilder.ts b/plugins/catalog-backend/src/service/CatalogBuilder.ts index 97379ac491..e65625d637 100644 --- a/plugins/catalog-backend/src/service/CatalogBuilder.ts +++ b/plugins/catalog-backend/src/service/CatalogBuilder.ts @@ -14,11 +14,7 @@ * limitations under the License. */ -import { - PluginDatabaseManager, - PluginEndpointDiscovery, - UrlReader, -} from '@backstage/backend-common'; +import { PluginDatabaseManager, UrlReader } from '@backstage/backend-common'; import { DefaultNamespaceEntityPolicy, Entity, @@ -108,7 +104,6 @@ export type CatalogEnvironment = { config: Config; reader: UrlReader; permissions: PermissionEvaluator | PermissionAuthorizer; - discovery: PluginEndpointDiscovery; }; /** diff --git a/plugins/catalog-backend/src/service/CatalogPlugin.ts b/plugins/catalog-backend/src/service/CatalogPlugin.ts index 3619460c4d..64e1e52494 100644 --- a/plugins/catalog-backend/src/service/CatalogPlugin.ts +++ b/plugins/catalog-backend/src/service/CatalogPlugin.ts @@ -22,7 +22,6 @@ import { permissionsServiceRef, urlReaderServiceRef, httpRouterServiceRef, - discoveryServiceRef, } from '@backstage/backend-plugin-api'; import { CatalogBuilder } from './CatalogBuilder'; import { @@ -79,7 +78,6 @@ export const catalogPlugin = createBackendPlugin({ permissions: permissionsServiceRef, database: databaseServiceRef, httpRouter: httpRouterServiceRef, - discovery: discoveryServiceRef, }, async init({ logger, @@ -88,7 +86,6 @@ export const catalogPlugin = createBackendPlugin({ database, permissions, httpRouter, - discovery, }) { const winstonLogger = loggerToWinstonLogger(logger); const builder = await CatalogBuilder.create({ @@ -97,7 +94,6 @@ export const catalogPlugin = createBackendPlugin({ permissions, database, logger: winstonLogger, - discovery, }); builder.addProcessor(...processingExtensions.processors); builder.addEntityProvider(...processingExtensions.entityProviders); diff --git a/plugins/catalog-backend/src/service/standaloneServer.ts b/plugins/catalog-backend/src/service/standaloneServer.ts index 51195ccdd7..e48515fb8b 100644 --- a/plugins/catalog-backend/src/service/standaloneServer.ts +++ b/plugins/catalog-backend/src/service/standaloneServer.ts @@ -70,7 +70,6 @@ export async function startStandaloneServer( config, reader, permissions, - discovery, }); const catalog = await builder.build(); From 6dc9afcb16276cb2443ebe050266ad56cecd5785 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Fri, 30 Sep 2022 10:43:57 +0200 Subject: [PATCH 043/278] add yarn.lock Signed-off-by: Kiss Miklos --- yarn.lock | 1 - 1 file changed, 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index a418c7e297..8fbe52e29a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4672,7 +4672,6 @@ __metadata: "@backstage/plugin-search-backend-node": "workspace:^" "@backstage/plugin-search-common": "workspace:^" "@backstage/types": "workspace:^" - "@octokit/rest": ^19.0.4 "@types/core-js": ^2.5.4 "@types/express": ^4.17.6 "@types/git-url-parse": ^9.0.0 From c6e3dfee15e15049efa9c5e75edb7222ce0f45d0 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Fri, 30 Sep 2022 13:19:50 +0200 Subject: [PATCH 044/278] fix tests Signed-off-by: Kiss Miklos --- .../src/analyzers/GitHubLocationAnalyzer.test.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.test.ts b/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.test.ts index f4996f232a..9502c47c6e 100644 --- a/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.test.ts +++ b/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.test.ts @@ -48,10 +48,12 @@ describe('GitHubLocationAnalyzer', () => { }; const config = new ConfigReader({ integrations: { - github: { - host: 'h.com', - token: 't', - }, + github: [ + { + host: 'h.com', + token: 't', + }, + ], }, }); From d13018990e8423637b421f9c98c7c68dc2bf2d8d Mon Sep 17 00:00:00 2001 From: Wesley Pattison Date: Fri, 30 Sep 2022 18:36:17 +0200 Subject: [PATCH 045/278] fix annotation fix readme Signed-off-by: Wesley Pattison --- plugins/azure-functions-backend/README.md | 2 +- plugins/azure-functions/README.md | 4 ++-- .../azure-functions/src/hooks/useServiceEntityAnnotations.ts | 2 +- plugins/azure-functions/src/mocks/mocks.ts | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins/azure-functions-backend/README.md b/plugins/azure-functions-backend/README.md index dc898ccc52..e220cca00f 100644 --- a/plugins/azure-functions-backend/README.md +++ b/plugins/azure-functions-backend/README.md @@ -13,7 +13,7 @@ The following sections will help you get the Azure Backend plugin setup and runn The Azure plugin requires the following YAML to be added to your app-config.yaml: ```yaml -azure: +azureFunctions: domain: tenantId: clientId: diff --git a/plugins/azure-functions/README.md b/plugins/azure-functions/README.md index c4e59e9116..ed7e18c3f0 100644 --- a/plugins/azure-functions/README.md +++ b/plugins/azure-functions/README.md @@ -21,7 +21,7 @@ You need to set up the Azure backend plugin before you move forward with any of To be able to use the Azure plugin you need to add the following annotation to any entities you want to use it with: ```yaml -azure.com/microsoft.web/sites: +azure.com/microsoft-web-sites: ``` `` supports case-insensitive exact / partial value. @@ -39,7 +39,7 @@ func-testapp-us The annotation you will use to have the three functions' app appear in the overview table would look like this: ```yaml -azure.com/microsoft.web/sites: func-testapp +azure.com/microsoft-web-sites: func-testapp ``` ### Install the component diff --git a/plugins/azure-functions/src/hooks/useServiceEntityAnnotations.ts b/plugins/azure-functions/src/hooks/useServiceEntityAnnotations.ts index 2e993d8dea..08070dc8e4 100644 --- a/plugins/azure-functions/src/hooks/useServiceEntityAnnotations.ts +++ b/plugins/azure-functions/src/hooks/useServiceEntityAnnotations.ts @@ -16,7 +16,7 @@ import { Entity } from '@backstage/catalog-model'; -export const AZURE_WEB_SITE_NAME_ANNOTATION = 'azure.com/microsoft.web/sites'; +export const AZURE_WEB_SITE_NAME_ANNOTATION = 'azure.com/microsoft-web-sites'; export const useServiceEntityAnnotations = (entity: Entity) => { const webSiteName = entity?.metadata.annotations?.[AZURE_WEB_SITE_NAME_ANNOTATION] ?? ''; diff --git a/plugins/azure-functions/src/mocks/mocks.ts b/plugins/azure-functions/src/mocks/mocks.ts index 1af6fa86e3..134bd32c5d 100644 --- a/plugins/azure-functions/src/mocks/mocks.ts +++ b/plugins/azure-functions/src/mocks/mocks.ts @@ -20,7 +20,7 @@ export const entityMock = { metadata: { namespace: 'default', annotations: { - 'azure.com/microsoft.web/sites': 'func-mock', + 'azure.com/microsoft-web-sites': 'func-mock', }, name: 'sample-azure-service', description: 'A service for testing Backstage functionality.', From e8e5f4bb060d6c765cdfe7cb399df96373fa9a2d Mon Sep 17 00:00:00 2001 From: Wesley Pattison Date: Fri, 30 Sep 2022 20:48:58 +0200 Subject: [PATCH 046/278] fix url, and apply some more renaming Signed-off-by: Wesley Pattison --- plugins/azure-functions/src/api/AzureSitesApi.ts | 2 +- plugins/azure-functions/src/api/AzureSitesApiBackendClient.ts | 2 +- plugins/azure-functions/src/plugin.ts | 2 +- plugins/azure-functions/src/routes.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/azure-functions/src/api/AzureSitesApi.ts b/plugins/azure-functions/src/api/AzureSitesApi.ts index cc2700fe82..5ff921a419 100644 --- a/plugins/azure-functions/src/api/AzureSitesApi.ts +++ b/plugins/azure-functions/src/api/AzureSitesApi.ts @@ -22,7 +22,7 @@ import { /** @public */ export const azureSiteApiRef = createApiRef({ - id: 'plugin.azure.service', + id: 'plugin.azure-functions.service', }); /** @public */ diff --git a/plugins/azure-functions/src/api/AzureSitesApiBackendClient.ts b/plugins/azure-functions/src/api/AzureSitesApiBackendClient.ts index 7fcee74341..125d9e39d5 100644 --- a/plugins/azure-functions/src/api/AzureSitesApiBackendClient.ts +++ b/plugins/azure-functions/src/api/AzureSitesApiBackendClient.ts @@ -35,7 +35,7 @@ export class AzureSitesApiBackendClient implements AzureSitesApi { async list(request: AzureSiteListRequest): Promise { try { - const url = `${await this.discoveryApi.getBaseUrl('azure')}/list/${ + const url = `${await this.discoveryApi.getBaseUrl('azure-functions')}/list/${ request.name }`; const { token: accessToken } = await this.identityApi.getCredentials(); diff --git a/plugins/azure-functions/src/plugin.ts b/plugins/azure-functions/src/plugin.ts index 6b6eff84b8..6a5272e21a 100644 --- a/plugins/azure-functions/src/plugin.ts +++ b/plugins/azure-functions/src/plugin.ts @@ -31,7 +31,7 @@ export const entityContentRouteRef = createRouteRef({ /** @public */ export const azureSitesPlugin = createPlugin({ - id: 'azure', + id: 'azureFunctions', apis: [ createApiFactory({ api: azureSiteApiRef, diff --git a/plugins/azure-functions/src/routes.ts b/plugins/azure-functions/src/routes.ts index f52a3fd5be..61234c4da5 100644 --- a/plugins/azure-functions/src/routes.ts +++ b/plugins/azure-functions/src/routes.ts @@ -17,5 +17,5 @@ import { createRouteRef } from '@backstage/core-plugin-api'; export const rootRouteRef = createRouteRef({ - id: 'azure', + id: 'azure-functions', }); From 4d3df7ebfeb74898bbe4897673cf1a30c3defc33 Mon Sep 17 00:00:00 2001 From: Wesley Pattison Date: Fri, 30 Sep 2022 21:24:25 +0200 Subject: [PATCH 047/278] apply prettier Signed-off-by: Wesley Pattison --- .../azure-functions/src/api/AzureSitesApiBackendClient.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/azure-functions/src/api/AzureSitesApiBackendClient.ts b/plugins/azure-functions/src/api/AzureSitesApiBackendClient.ts index 125d9e39d5..a19cf270e5 100644 --- a/plugins/azure-functions/src/api/AzureSitesApiBackendClient.ts +++ b/plugins/azure-functions/src/api/AzureSitesApiBackendClient.ts @@ -35,9 +35,9 @@ export class AzureSitesApiBackendClient implements AzureSitesApi { async list(request: AzureSiteListRequest): Promise { try { - const url = `${await this.discoveryApi.getBaseUrl('azure-functions')}/list/${ - request.name - }`; + const url = `${await this.discoveryApi.getBaseUrl( + 'azure-functions', + )}/list/${request.name}`; const { token: accessToken } = await this.identityApi.getCredentials(); const response = await fetch(url, { method: 'GET', From 6c2995fa1b3d02fd92c1f9abc02dc8523117e8de Mon Sep 17 00:00:00 2001 From: bnechyporenko Date: Sun, 2 Oct 2022 16:11:26 +0200 Subject: [PATCH 048/278] Make it possible to enable useLongPollingLogs in scaffolder plugin Signed-off-by: bnechyporenko --- plugins/scaffolder/src/plugin.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/plugins/scaffolder/src/plugin.ts b/plugins/scaffolder/src/plugin.ts index f9b359d93a..f64525ac8e 100644 --- a/plugins/scaffolder/src/plugin.ts +++ b/plugins/scaffolder/src/plugin.ts @@ -20,7 +20,7 @@ import { EntityPicker } from './components/fields/EntityPicker/EntityPicker'; import { entityNamePickerValidation } from './components/fields/EntityNamePicker'; import { EntityNamePicker } from './components/fields/EntityNamePicker/EntityNamePicker'; import { OwnerPicker } from './components/fields/OwnerPicker/OwnerPicker'; -import { repoPickerValidation } from './components/fields/RepoUrlPicker'; +import { repoPickerValidation } from './components'; import { RepoUrlPicker } from './components/fields/RepoUrlPicker/RepoUrlPicker'; import { createScaffolderFieldExtension } from './extensions'; import { @@ -30,6 +30,7 @@ import { viewTechDocRouteRef, } from './routes'; import { + configApiRef, createApiFactory, createPlugin, createRoutableExtension, @@ -50,17 +51,27 @@ export const scaffolderPlugin = createPlugin({ createApiFactory({ api: scaffolderApiRef, deps: { + configApi: configApiRef, discoveryApi: discoveryApiRef, scmIntegrationsApi: scmIntegrationsApiRef, fetchApi: fetchApiRef, identityApi: identityApiRef, }, - factory: ({ discoveryApi, scmIntegrationsApi, fetchApi, identityApi }) => + factory: ({ + configApi, + discoveryApi, + scmIntegrationsApi, + fetchApi, + identityApi, + }) => new ScaffolderClient({ discoveryApi, scmIntegrationsApi, fetchApi, identityApi, + useLongPollingLogs: + configApi.getOptionalBoolean('scaffolder.useLongPollingLogs') ?? + false, }), }), ], From c8077a9f4ef86d720e70952460845eef6636c16a Mon Sep 17 00:00:00 2001 From: bnechyporenko Date: Sun, 2 Oct 2022 16:17:49 +0200 Subject: [PATCH 049/278] Make it possible to enable useLongPollingLogs in scaffolder plugin Signed-off-by: bnechyporenko --- .changeset/sixty-llamas-itch.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .changeset/sixty-llamas-itch.md diff --git a/.changeset/sixty-llamas-itch.md b/.changeset/sixty-llamas-itch.md new file mode 100644 index 0000000000..6bb8e85163 --- /dev/null +++ b/.changeset/sixty-llamas-itch.md @@ -0,0 +1,14 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Make it possible to enable useLongPollingLogs in scaffolder plugin. + +For that you have to add to your app-config.yaml file this snippet: + +```yaml +scaffolder: + useLongPollingLogs: true +``` + +By default, the value is falsy. From 0950e2fb99f3d6493113e7d604b66347052b9935 Mon Sep 17 00:00:00 2001 From: Bogdan Nechyporenko Date: Sun, 2 Oct 2022 19:49:06 +0200 Subject: [PATCH 050/278] Update sixty-llamas-itch.md Updated the doc Signed-off-by: acierto --- .changeset/sixty-llamas-itch.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/sixty-llamas-itch.md b/.changeset/sixty-llamas-itch.md index 6bb8e85163..49e0bb3752 100644 --- a/.changeset/sixty-llamas-itch.md +++ b/.changeset/sixty-llamas-itch.md @@ -11,4 +11,4 @@ scaffolder: useLongPollingLogs: true ``` -By default, the value is falsy. +By default, the value is `false`. From cbf5d11fdfeebbfdb0baa8ad7d29ab50316897d3 Mon Sep 17 00:00:00 2001 From: Mengnan Gong Date: Mon, 3 Oct 2022 14:42:33 +0800 Subject: [PATCH 051/278] Handle the error when fetching pod metrics Include the `PodStatus` into the `FetchResponse` union type. Now the method `fetchPodMetricsByNamespaces` accepts a set of namespaces and return a `FetchResponseWrapper`, which is consistent with other public fetch methods. The Kubernetes errors happened when fetching pod metrics is now captured and returned to the frontend. Signed-off-by: Mengnan Gong --- .changeset/wet-cameras-call.md | 8 +++ plugins/kubernetes-backend/api-report.md | 7 +- .../src/service/KubernetesBuilder.test.ts | 9 ++- .../service/KubernetesFanOutHandler.test.ts | 72 +++++++++++-------- .../src/service/KubernetesFanOutHandler.ts | 36 ++++++---- .../src/service/KubernetesFetcher.ts | 21 ++++-- plugins/kubernetes-backend/src/types/types.ts | 7 +- plugins/kubernetes-common/api-report.md | 12 +++- plugins/kubernetes-common/src/types.ts | 10 ++- 9 files changed, 118 insertions(+), 64 deletions(-) create mode 100644 .changeset/wet-cameras-call.md diff --git a/.changeset/wet-cameras-call.md b/.changeset/wet-cameras-call.md new file mode 100644 index 0000000000..5524e23d15 --- /dev/null +++ b/.changeset/wet-cameras-call.md @@ -0,0 +1,8 @@ +--- +'@backstage/plugin-kubernetes-backend': minor +'@backstage/plugin-kubernetes-common': minor +--- + +The Kubernetes errors when fetching pod metrics are now captured and returned to the frontend. + +Include the `PodStatusFetchResponse` into the `FetchResponse` union type. Now the method `fetchPodMetricsByNamespaces` accepts a set of namespaces and returns a `FetchResponseWrapper`, just like other public fetch methods in the fetcher. diff --git a/plugins/kubernetes-backend/api-report.md b/plugins/kubernetes-backend/api-report.md index 4219387819..91a95bc078 100644 --- a/plugins/kubernetes-backend/api-report.md +++ b/plugins/kubernetes-backend/api-report.md @@ -22,7 +22,6 @@ import { Logger } from 'winston'; import { Metrics } from '@kubernetes/client-node'; import type { ObjectsByEntityResponse } from '@backstage/plugin-kubernetes-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; -import { PodStatus } from '@kubernetes/client-node/dist/top'; import { TokenCredential } from '@azure/identity'; // @alpha (undocumented) @@ -267,10 +266,10 @@ export interface KubernetesFetcher { params: ObjectFetchParams, ): Promise; // (undocumented) - fetchPodMetricsByNamespace( + fetchPodMetricsByNamespaces( clusterDetails: ClusterDetails, - namespace: string, - ): Promise; + namespaces: Set, + ): Promise; } // @alpha (undocumented) diff --git a/plugins/kubernetes-backend/src/service/KubernetesBuilder.test.ts b/plugins/kubernetes-backend/src/service/KubernetesBuilder.test.ts index ed56c2da8a..2766f9abfc 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesBuilder.test.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesBuilder.test.ts @@ -30,7 +30,6 @@ import { } from '../types/types'; import { KubernetesBuilder } from './KubernetesBuilder'; import { KubernetesFanOutHandler } from './KubernetesFanOutHandler'; -import { PodStatus } from '@kubernetes/client-node'; import { CatalogApi } from '@backstage/catalog-client'; describe('KubernetesBuilder', () => { @@ -222,11 +221,11 @@ describe('KubernetesBuilder', () => { }; const fetcher: KubernetesFetcher = { - fetchPodMetricsByNamespace( + fetchPodMetricsByNamespaces( _clusterDetails: ClusterDetails, - _namespace: string, - ): Promise { - return Promise.resolve([]); + _namespaces: Set, + ): Promise { + return Promise.resolve({ errors: [], responses: [] }); }, fetchObjectsForService( _params: ObjectFetchParams, diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts index 04256ed3dc..8627795a7f 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts @@ -18,13 +18,13 @@ import { getVoidLogger } from '@backstage/backend-common'; import { ClusterDetails, CustomResource, + FetchResponseWrapper, ObjectFetchParams, } from '../types/types'; import { KubernetesFanOutHandler } from './KubernetesFanOutHandler'; -import { PodStatus } from '@kubernetes/client-node/dist/top'; const fetchObjectsForService = jest.fn(); -const fetchPodMetricsByNamespace = jest.fn(); +const fetchPodMetricsByNamespaces = jest.fn(); const getClustersByEntity = jest.fn(); @@ -55,8 +55,9 @@ const mockFetch = (mock: jest.Mock) => { }; const mockMetrics = (mock: jest.Mock) => { - mock.mockImplementation((clusterDetails: ClusterDetails, namespace: string) => - Promise.resolve(generatePodStatus(clusterDetails.name, namespace)), + mock.mockImplementation( + (clusterDetails: ClusterDetails, namespaces: Set) => + Promise.resolve(generatePodStatus(clusterDetails.name, namespaces)), ); }; @@ -143,7 +144,7 @@ function mockFetchAndGetKubernetesFanOutHandler( customResources: CustomResource[], ) { mockFetch(fetchObjectsForService); - mockMetrics(fetchPodMetricsByNamespace); + mockMetrics(fetchPodMetricsByNamespaces); return getKubernetesFanOutHandler(customResources); } @@ -153,7 +154,7 @@ function getKubernetesFanOutHandler(customResources: CustomResource[]) { logger: getVoidLogger(), fetcher: { fetchObjectsForService, - fetchPodMetricsByNamespace, + fetchPodMetricsByNamespaces, }, serviceLocator: { getClustersByEntity, @@ -164,24 +165,32 @@ function getKubernetesFanOutHandler(customResources: CustomResource[]) { function generatePodStatus( _clusterName: string, - _namespace: string, -): PodStatus[] { - return [ - { - Pod: {}, - CPU: { - CurrentUsage: 100, - RequestTotal: 101, - LimitTotal: 102, - }, - Memory: { - CurrentUsage: BigInt('1000'), - RequestTotal: BigInt('1001'), - LimitTotal: BigInt('1002'), - }, - Containers: [], - }, - ] as any; + _namespaces: Set, +): FetchResponseWrapper { + return { + errors: [], + responses: Array.from(_namespaces).map(() => { + return { + type: 'podstatus', + resources: [ + { + Pod: {}, + CPU: { + CurrentUsage: 100, + RequestTotal: 101, + LimitTotal: 102, + }, + Memory: { + CurrentUsage: BigInt('1000'), + RequestTotal: BigInt('1001'), + LimitTotal: BigInt('1002'), + }, + Containers: [], + }, + ], + }; + }), + }; } function generateMockResourcesAndErrors( @@ -292,9 +301,9 @@ describe('getKubernetesObjectsByEntity', () => { expect(getClustersByEntity.mock.calls.length).toBe(1); expect(fetchObjectsForService.mock.calls.length).toBe(1); - expect(fetchPodMetricsByNamespace.mock.calls.length).toBe(1); - expect(fetchPodMetricsByNamespace.mock.calls[0][1]).toBe( - 'ns-test-component-test-cluster', + expect(fetchPodMetricsByNamespaces.mock.calls.length).toBe(1); + expect(fetchPodMetricsByNamespaces.mock.calls[0][1]).toStrictEqual( + new Set(['ns-test-component-test-cluster']), ); expect(result).toStrictEqual({ @@ -433,7 +442,7 @@ describe('getKubernetesObjectsByEntity', () => { }), ); - mockMetrics(fetchPodMetricsByNamespace); + mockMetrics(fetchPodMetricsByNamespaces); const sut = getKubernetesFanOutHandler([]); @@ -444,9 +453,10 @@ describe('getKubernetesObjectsByEntity', () => { expect(getClustersByEntity.mock.calls.length).toBe(1); expect(fetchObjectsForService.mock.calls.length).toBe(1); - expect(fetchPodMetricsByNamespace.mock.calls.length).toBe(2); - expect(fetchPodMetricsByNamespace.mock.calls[0][1]).toBe('ns-a'); - expect(fetchPodMetricsByNamespace.mock.calls[1][1]).toBe('ns-b'); + expect(fetchPodMetricsByNamespaces.mock.calls.length).toBe(1); + expect(fetchPodMetricsByNamespaces.mock.calls[0][1]).toStrictEqual( + new Set(['ns-a', 'ns-b']), + ); expect(result).toStrictEqual({ items: [ diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts index 23163d1004..7de3e70249 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts @@ -40,6 +40,7 @@ import { PodFetchResponse, KubernetesRequestAuth, CustomResourceMatcher, + PodStatusFetchResponse, } from '@backstage/plugin-kubernetes-common'; import { ContainerStatus, @@ -162,19 +163,22 @@ const toClientSafeContainer = ( }; const toClientSafePodMetrics = ( - podMetrics: PodStatus[][], + podMetrics: PodStatusFetchResponse[], ): ClientPodStatus[] => { - return podMetrics.flat().map((pd: PodStatus): ClientPodStatus => { - return { - pod: pd.Pod, - memory: toClientSafeResource(pd.Memory), - cpu: toClientSafeResource(pd.CPU), - containers: pd.Containers.map(toClientSafeContainer), - }; - }); + return podMetrics + .map(r => r.resources) + .flat() + .map((pd: PodStatus): ClientPodStatus => { + return { + pod: pd.Pod, + memory: toClientSafeResource(pd.Memory), + cpu: toClientSafeResource(pd.CPU), + containers: pd.Containers.map(toClientSafeContainer), + }; + }); }; -type responseWithMetrics = [FetchResponseWrapper, PodStatus[][]]; +type responseWithMetrics = [FetchResponseWrapper, PodStatusFetchResponse[]]; export class KubernetesFanOutHandler { private readonly logger: Logger; @@ -345,11 +349,17 @@ export class KubernetesFanOutHandler { .filter(isString), ); - const podMetrics = Array.from(namespaces).map(ns => - this.fetcher.fetchPodMetricsByNamespace(clusterDetails, ns), + if (namespaces.size === 0) { + return [result, []]; + } + + const podMetrics = await this.fetcher.fetchPodMetricsByNamespaces( + clusterDetails, + namespaces, ); - return Promise.all([result, Promise.all(podMetrics)]); + result.errors.concat(podMetrics.errors); + return [result, podMetrics.responses as PodStatusFetchResponse[]]; } private getAuthTranslator(provider: string): KubernetesAuthTranslator { diff --git a/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts b/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts index 1189dfa390..6c61f10700 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts @@ -29,9 +29,9 @@ import { FetchResponse, KubernetesFetchError, KubernetesErrorTypes, + PodStatusFetchResponse, } from '@backstage/plugin-kubernetes-common'; import { KubernetesClientProvider } from './KubernetesClientProvider'; -import { PodStatus } from '@kubernetes/client-node/dist/top'; export interface Clients { core: CoreV1Api; @@ -104,10 +104,10 @@ export class KubernetesClientBasedFetcher implements KubernetesFetcher { return Promise.all(fetchResults).then(fetchResultsToResponseWrapper); } - fetchPodMetricsByNamespace( + fetchPodMetricsByNamespaces( clusterDetails: ClusterDetails, - namespace: string, - ): Promise { + namespaces: Set, + ): Promise { const metricsClient = this.kubernetesClientProvider.getMetricsClient(clusterDetails); const coreApi = @@ -115,7 +115,18 @@ export class KubernetesClientBasedFetcher implements KubernetesFetcher { clusterDetails, ); - return topPods(coreApi, metricsClient, namespace); + const fetchResults = Array.from(namespaces).map(ns => + topPods(coreApi, metricsClient, ns) + .then(r => { + return { + type: 'podstatus', + resources: r, + } as PodStatusFetchResponse; + }) + .catch(this.captureKubernetesErrorsRethrowOthers.bind(this)), + ); + + return Promise.all(fetchResults).then(fetchResultsToResponseWrapper); } private captureKubernetesErrorsRethrowOthers(e: any): KubernetesFetchError { diff --git a/plugins/kubernetes-backend/src/types/types.ts b/plugins/kubernetes-backend/src/types/types.ts index 5ddfe7367d..b7393ce7a3 100644 --- a/plugins/kubernetes-backend/src/types/types.ts +++ b/plugins/kubernetes-backend/src/types/types.ts @@ -25,7 +25,6 @@ import type { KubernetesRequestBody, ObjectsByEntityResponse, } from '@backstage/plugin-kubernetes-common'; -import { PodStatus } from '@kubernetes/client-node/dist/top'; /** * @@ -53,10 +52,10 @@ export interface KubernetesFetcher { fetchObjectsForService( params: ObjectFetchParams, ): Promise; - fetchPodMetricsByNamespace( + fetchPodMetricsByNamespaces( clusterDetails: ClusterDetails, - namespace: string, - ): Promise; + namespaces: Set, + ): Promise; } /** diff --git a/plugins/kubernetes-common/api-report.md b/plugins/kubernetes-common/api-report.md index 85015662c6..3ed89d2a56 100644 --- a/plugins/kubernetes-common/api-report.md +++ b/plugins/kubernetes-common/api-report.md @@ -5,6 +5,7 @@ ```ts import { Entity } from '@backstage/catalog-model'; import type { JsonObject } from '@backstage/types'; +import { PodStatus } from '@kubernetes/client-node'; import { V1ConfigMap } from '@kubernetes/client-node'; import { V1CronJob } from '@kubernetes/client-node'; import { V1DaemonSet } from '@kubernetes/client-node'; @@ -147,7 +148,8 @@ export type FetchResponse = | IngressesFetchResponse | CustomResourceFetchResponse | StatefulSetsFetchResponse - | DaemonSetsFetchResponse; + | DaemonSetsFetchResponse + | PodStatusFetchResponse; // @public (undocumented) export interface HorizontalPodAutoscalersFetchResponse { @@ -230,6 +232,14 @@ export interface PodFetchResponse { type: 'pods'; } +// @public (undocumented) +export interface PodStatusFetchResponse { + // (undocumented) + resources: Array; + // (undocumented) + type: 'podstatus'; +} + // @public (undocumented) export interface ReplicaSetsFetchResponse { // (undocumented) diff --git a/plugins/kubernetes-common/src/types.ts b/plugins/kubernetes-common/src/types.ts index 149caadb15..58fc81f3ff 100644 --- a/plugins/kubernetes-common/src/types.ts +++ b/plugins/kubernetes-common/src/types.ts @@ -16,6 +16,7 @@ import type { JsonObject } from '@backstage/types'; import { + PodStatus, V1ConfigMap, V1CronJob, V1DaemonSet, @@ -134,7 +135,8 @@ export type FetchResponse = | IngressesFetchResponse | CustomResourceFetchResponse | StatefulSetsFetchResponse - | DaemonSetsFetchResponse; + | DaemonSetsFetchResponse + | PodStatusFetchResponse; /** @public */ export interface PodFetchResponse { @@ -214,6 +216,12 @@ export interface DaemonSetsFetchResponse { resources: Array; } +/** @public */ +export interface PodStatusFetchResponse { + type: 'podstatus'; + resources: Array; +} + /** @public */ export interface KubernetesFetchError { errorType: KubernetesErrorTypes; From 21b0e398a6106c3bc5f6c6c8716c6b27bf3bca2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mikl=C3=B3s=20Kiss?= Date: Mon, 3 Oct 2022 14:54:14 +0200 Subject: [PATCH 052/278] Update plugins/catalog-backend/src/service/CatalogBuilder.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Johan Haals Signed-off-by: MiklĂłs Kiss --- plugins/catalog-backend/src/service/CatalogBuilder.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/catalog-backend/src/service/CatalogBuilder.ts b/plugins/catalog-backend/src/service/CatalogBuilder.ts index e65625d637..5a737791ae 100644 --- a/plugins/catalog-backend/src/service/CatalogBuilder.ts +++ b/plugins/catalog-backend/src/service/CatalogBuilder.ts @@ -116,7 +116,7 @@ export type CatalogEnvironment = { * chance to inspect the entity, and all of them have to pass in order for * the entity to be considered valid from an overall point of view. * - Location analyzers can be added. These are responsible to analyze the - * the existence of a catalog-info.yaml file int he provided git repository + * the existence of a catalog-info.yaml file in the provided git repository * when you use the /catalog-import page with a repository url. * - Placeholder resolvers can be replaced or added. These run on the raw * structured data between the parsing and pre-processing steps, to replace From e8357aae54bad6e2a26fa6bb52c64b50e36b7e26 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Mon, 3 Oct 2022 15:10:14 +0200 Subject: [PATCH 053/278] add more details to changesets Signed-off-by: Kiss Miklos --- .changeset/curvy-pets-wash.md | 4 ++-- .changeset/fuzzy-dolls-shake.md | 20 +++++++++++++++++-- .changeset/moody-carrots-shout.md | 2 +- .../src/service/CatalogBuilder.ts | 2 +- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/.changeset/curvy-pets-wash.md b/.changeset/curvy-pets-wash.md index 7e43228fbc..a0e9571b18 100644 --- a/.changeset/curvy-pets-wash.md +++ b/.changeset/curvy-pets-wash.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-catalog-backend': patch +'@backstage/plugin-catalog-backend': minor --- -Moved the code search for the existing catalog-info.yaml files to the backend from the frontend. It means it will use the configured GitHub integration's credentials +Added a new method `addLocationAnalyzers` to the `CatalogBuilder`. With this you can add location analyzers to your catalog. These analyzers will be used by the /analyze-location endpoint to decide if the provided URL contains any catalog-info.yaml files already or not. diff --git a/.changeset/fuzzy-dolls-shake.md b/.changeset/fuzzy-dolls-shake.md index 92380b37ec..0148a703a4 100644 --- a/.changeset/fuzzy-dolls-shake.md +++ b/.changeset/fuzzy-dolls-shake.md @@ -1,5 +1,21 @@ --- -'@backstage/plugin-catalog-import': minor +'@backstage/plugin-catalog-import': patch --- -Moved the code search for the existing catalog-info.yaml files to the backend from the frontend. It means it will use the configured GitHub integration's credentials +**Breaking** +Moved the code search for the existing catalog-info.yaml files to the backend from the frontend. It means it will use the configured GitHub integration's credentials. + +Add the following to your `CatalogBuilder` to have the repo URL ingestion working again. + +```ts +// catalog.ts +import { GitHubLocationAnalyzer } from '@backstage/plugin-catalog-backend-module-github'; +... + builder.addLocationAnalyzers( + new GitHubLocationAnalyzer({ + discovery: env.discovery, + config: env.config, + }), + ); +... +``` diff --git a/.changeset/moody-carrots-shout.md b/.changeset/moody-carrots-shout.md index 1b1555a5dd..486590e0ba 100644 --- a/.changeset/moody-carrots-shout.md +++ b/.changeset/moody-carrots-shout.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-catalog-backend-module-github': minor +'@backstage/plugin-catalog-backend-module-github': patch --- Added `GitHubLocationAnalyzer`. This can be used to add to the `CatalogBuilder`. When added this will be used by `RepoLocationAnalyzer` to figure out if the given URL that you are trying to import from the /catalog-import page already contains catalog-info.yaml files. diff --git a/plugins/catalog-backend/src/service/CatalogBuilder.ts b/plugins/catalog-backend/src/service/CatalogBuilder.ts index 5a737791ae..deed865314 100644 --- a/plugins/catalog-backend/src/service/CatalogBuilder.ts +++ b/plugins/catalog-backend/src/service/CatalogBuilder.ts @@ -343,7 +343,7 @@ export class CatalogBuilder { /** * Adds Location Analyzers. These are responsible for figuring out * if the repository already contains a catalog-info.yaml file when - * you register a repostiroy in the /catalog-import page + * you register a repository in the /catalog-import page * * @param locationAnalyzers - One or more location analyzers */ From 41de015847824dff329e5beb3f276b8a26d19040 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Mon, 3 Oct 2022 16:34:53 +0200 Subject: [PATCH 054/278] make breaking change a minor change Signed-off-by: Kiss Miklos --- .changeset/fuzzy-dolls-shake.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/fuzzy-dolls-shake.md b/.changeset/fuzzy-dolls-shake.md index 0148a703a4..35ebcf6103 100644 --- a/.changeset/fuzzy-dolls-shake.md +++ b/.changeset/fuzzy-dolls-shake.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-catalog-import': patch +'@backstage/plugin-catalog-import': minor --- **Breaking** From 290a8cd57730a62519a2528a9e5789f4b2202776 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Mon, 3 Oct 2022 17:28:34 +0200 Subject: [PATCH 055/278] use the existing versions Signed-off-by: Kiss Miklos --- plugins/catalog-backend-module-github/package.json | 4 ++-- yarn.lock | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json index 950c7723e8..f99b951149 100644 --- a/plugins/catalog-backend-module-github/package.json +++ b/plugins/catalog-backend-module-github/package.json @@ -45,8 +45,8 @@ "@backstage/plugin-catalog-node": "workspace:^", "@backstage/types": "workspace:^", "@octokit/graphql": "^5.0.0", - "@octokit/rest": "^19.0.4", - "git-url-parse": "^13.1.0", + "@octokit/rest": "^19.0.3", + "git-url-parse": "^13.0.0", "lodash": "^4.17.21", "msw": "^0.47.0", "node-fetch": "^2.6.7", diff --git a/yarn.lock b/yarn.lock index 8fbe52e29a..5563c9ffbe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4551,9 +4551,9 @@ __metadata: "@backstage/plugin-catalog-node": "workspace:^" "@backstage/types": "workspace:^" "@octokit/graphql": ^5.0.0 - "@octokit/rest": ^19.0.4 + "@octokit/rest": ^19.0.3 "@types/lodash": ^4.14.151 - git-url-parse: ^13.1.0 + git-url-parse: ^13.0.0 lodash: ^4.17.21 msw: ^0.47.0 node-fetch: ^2.6.7 @@ -11580,7 +11580,7 @@ __metadata: languageName: node linkType: hard -"@octokit/rest@npm:^19.0.3, @octokit/rest@npm:^19.0.4": +"@octokit/rest@npm:^19.0.3": version: 19.0.4 resolution: "@octokit/rest@npm:19.0.4" dependencies: @@ -23513,7 +23513,7 @@ __metadata: languageName: node linkType: hard -"git-url-parse@npm:^13.0.0, git-url-parse@npm:^13.1.0": +"git-url-parse@npm:^13.0.0": version: 13.1.0 resolution: "git-url-parse@npm:13.1.0" dependencies: From 1effb063c2d073f458dfbf4a43d56dfcb144f30b Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Mon, 3 Oct 2022 17:37:27 +0200 Subject: [PATCH 056/278] more general description comment Signed-off-by: Kiss Miklos --- .../catalog-backend/src/service/CatalogBuilder.ts | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/plugins/catalog-backend/src/service/CatalogBuilder.ts b/plugins/catalog-backend/src/service/CatalogBuilder.ts index deed865314..d5bc7057dd 100644 --- a/plugins/catalog-backend/src/service/CatalogBuilder.ts +++ b/plugins/catalog-backend/src/service/CatalogBuilder.ts @@ -115,9 +115,10 @@ export type CatalogEnvironment = { * after the processors' pre-processing steps. All policies are given the * chance to inspect the entity, and all of them have to pass in order for * the entity to be considered valid from an overall point of view. - * - Location analyzers can be added. These are responsible to analyze the - * the existence of a catalog-info.yaml file in the provided git repository - * when you use the /catalog-import page with a repository url. + * - Location analyzers can be added. These are responsible for analyzing + * repositories when onboarding them into the catalog, by finding + * catalog-info.yaml files and other artifacts that can help automatically + * register or create catalog data on the user's behalf. * - Placeholder resolvers can be replaced or added. These run on the raw * structured data between the parsing and pre-processing steps, to replace * dollar-prefixed entries with their actual values (like $file). @@ -341,9 +342,10 @@ export class CatalogBuilder { } /** - * Adds Location Analyzers. These are responsible for figuring out - * if the repository already contains a catalog-info.yaml file when - * you register a repository in the /catalog-import page + * Adds Location Analyzers. These are responsible for analyzing + * repositories when onboarding them into the catalog, by finding + * catalog-info.yaml files and other artifacts that can help automatically + * register or create catalog data on the user's behalf. * * @param locationAnalyzers - One or more location analyzers */ From 99cf6b11b1c6ae9cd2223cd4c99c39acc029d817 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Mon, 3 Oct 2022 17:38:33 +0200 Subject: [PATCH 057/278] don't use any Signed-off-by: Kiss Miklos --- plugins/catalog-import/src/api/CatalogImportClient.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/catalog-import/src/api/CatalogImportClient.ts b/plugins/catalog-import/src/api/CatalogImportClient.ts index 5dd3a3178f..d019b40045 100644 --- a/plugins/catalog-import/src/api/CatalogImportClient.ts +++ b/plugins/catalog-import/src/api/CatalogImportClient.ts @@ -145,7 +145,7 @@ export class CatalogImportClient implements CatalogImportApi { type: 'repository', integrationType: 'github', url: url, - generatedEntities: analyzation.generateEntities.map((x: any) => x.entity), + generatedEntities: analyzation.generateEntities.map(x => x.entity), }; } From a18c07d308616660bea9b38a53aa5fec0021dc11 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Mon, 3 Oct 2022 19:24:36 +0200 Subject: [PATCH 058/278] make the return of analyze an object Signed-off-by: Kiss Miklos --- .../src/analyzers/GitHubLocationAnalyzer.test.ts | 6 +++--- .../src/analyzers/GitHubLocationAnalyzer.ts | 9 +++------ .../catalog-backend/src/ingestion/LocationAnalyzer.ts | 6 +++--- plugins/catalog-backend/src/ingestion/types.ts | 6 ++++-- 4 files changed, 13 insertions(+), 14 deletions(-) diff --git a/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.test.ts b/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.test.ts index 9502c47c6e..0dcc131502 100644 --- a/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.test.ts +++ b/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.test.ts @@ -122,8 +122,8 @@ describe('GitHubLocationAnalyzer', () => { url: 'https://github.com/foo/bar', }); - expect(result[0].isRegistered).toBeFalsy(); - expect(result[0].location).toEqual({ + expect(result.existing[0].isRegistered).toBeFalsy(); + expect(result.existing[0].location).toEqual({ type: 'url', target: 'https://github.com/foo/bar/blob/my_default_branch/catalog-info.yaml', @@ -148,7 +148,7 @@ describe('GitHubLocationAnalyzer', () => { catalogFilename: 'anvil.yaml', }); - expect(result[0].location).toEqual({ + expect(result.existing[0].location).toEqual({ type: 'url', target: 'https://github.com/foo/bar/blob/my_default_branch/anvil.yaml', }); diff --git a/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.ts b/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.ts index a043b894cd..085f82de49 100644 --- a/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.ts +++ b/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.ts @@ -44,10 +44,7 @@ export class GitHubLocationAnalyzer implements ScmLocationAnalyzer { getIntegrationType() { return 'github'; } - async analyze({ - url, - catalogFilename, - }: AnalyzeOptions): Promise { + async analyze({ url, catalogFilename }: AnalyzeOptions) { const { owner, name: repo } = parseGitUrl(url); const catalogFile = catalogFilename || 'catalog-info.yaml'; @@ -98,8 +95,8 @@ export class GitHubLocationAnalyzer implements ScmLocationAnalyzer { }), ); - return result.flat(); + return { existing: result.flat() }; } - return []; + return { existing: [] }; } } diff --git a/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts b/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts index 11f9799759..b863f00f2c 100644 --- a/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts +++ b/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts @@ -67,15 +67,15 @@ export class RepoLocationAnalyzer implements LocationAnalyzer { a => a.getIntegrationType() === integration?.type, ); if (analyzer) { - const existingEntityFiles = await analyzer.analyze({ + const analyzerResult = await analyzer.analyze({ url: request.location.target, }); - if (existingEntityFiles.length > 0) { + if (analyzerResult.existing.length > 0) { this.logger.debug( `entity for ${request.location.target} already exists.`, ); return { - existingEntityFiles, + existingEntityFiles: analyzerResult.existing, generateEntities: [], }; } diff --git a/plugins/catalog-backend/src/ingestion/types.ts b/plugins/catalog-backend/src/ingestion/types.ts index b68a4681b1..40b4574f78 100644 --- a/plugins/catalog-backend/src/ingestion/types.ts +++ b/plugins/catalog-backend/src/ingestion/types.ts @@ -110,6 +110,8 @@ export type AnalyzeOptions = { export type ScmLocationAnalyzer = { /** The integration type this location analyzer can work with */ getIntegrationType(): string; - /** This function is responsible to figure out if the catalog file is already present in the repository */ - analyze(options: AnalyzeOptions): Promise; + /** This function can return an array of already existing entities */ + analyze(options: AnalyzeOptions): Promise<{ + existing: AnalyzeLocationExistingEntity[]; + }>; }; From ce865b69cf6425742517cd8ce86ed013fe71c031 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Mon, 3 Oct 2022 19:55:50 +0200 Subject: [PATCH 059/278] invert the control on the analyzer support Signed-off-by: Kiss Miklos --- .../src/analyzers/GitHubLocationAnalyzer.ts | 7 ++++--- plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts | 4 ++-- plugins/catalog-backend/src/ingestion/types.ts | 4 ++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.ts b/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.ts index 085f82de49..d1112d2cc0 100644 --- a/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.ts +++ b/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.ts @@ -20,7 +20,6 @@ import { Octokit } from '@octokit/rest'; import { trimEnd } from 'lodash'; import parseGitUrl from 'git-url-parse'; import { - AnalyzeLocationExistingEntity, AnalyzeOptions, ScmLocationAnalyzer, } from '@backstage/plugin-catalog-backend'; @@ -41,8 +40,10 @@ export class GitHubLocationAnalyzer implements ScmLocationAnalyzer { this.config = options.config; this.catalogClient = new CatalogClient({ discoveryApi: options.discovery }); } - getIntegrationType() { - return 'github'; + supports(url: string) { + const integrations = ScmIntegrations.fromConfig(this.config); + const integration = integrations.byUrl(url); + return integration?.type === 'github'; } async analyze({ url, catalogFilename }: AnalyzeOptions) { const { owner, name: repo } = parseGitUrl(url); diff --git a/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts b/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts index b863f00f2c..3dc08a81c3 100644 --- a/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts +++ b/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts @@ -63,8 +63,8 @@ export class RepoLocationAnalyzer implements LocationAnalyzer { break; } - const analyzer = this.analyzers.find( - a => a.getIntegrationType() === integration?.type, + const analyzer = this.analyzers.find(a => + a.supports(request.location.target), ); if (analyzer) { const analyzerResult = await analyzer.analyze({ diff --git a/plugins/catalog-backend/src/ingestion/types.ts b/plugins/catalog-backend/src/ingestion/types.ts index 40b4574f78..c5237af6d3 100644 --- a/plugins/catalog-backend/src/ingestion/types.ts +++ b/plugins/catalog-backend/src/ingestion/types.ts @@ -108,8 +108,8 @@ export type AnalyzeOptions = { /** @public */ export type ScmLocationAnalyzer = { - /** The integration type this location analyzer can work with */ - getIntegrationType(): string; + /** The method that decides if this analyzer can work with the provided url */ + supports(url: string): boolean; /** This function can return an array of already existing entities */ analyze(options: AnalyzeOptions): Promise<{ existing: AnalyzeLocationExistingEntity[]; From 41568be052894270a0f4dd697cc1035fb13cf56d Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Tue, 4 Oct 2022 00:50:01 +0200 Subject: [PATCH 060/278] generate api-reports Signed-off-by: Kiss Miklos --- .../api-report.md | 18 ++++++++++++------ plugins/catalog-backend/api-report.md | 6 ++++-- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/plugins/catalog-backend-module-github/api-report.md b/plugins/catalog-backend-module-github/api-report.md index 0d6c8c015f..c89a34c259 100644 --- a/plugins/catalog-backend-module-github/api-report.md +++ b/plugins/catalog-backend-module-github/api-report.md @@ -3,12 +3,12 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { AnalyzeLocationExistingEntity } from '@backstage/plugin-catalog-backend'; import { AnalyzeOptions } from '@backstage/plugin-catalog-backend'; import { BackendFeature } from '@backstage/backend-plugin-api'; import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; import { CatalogProcessorEmit } from '@backstage/plugin-catalog-backend'; import { Config } from '@backstage/config'; +import { Entity } from '@backstage/catalog-model'; import { EntityProvider } from '@backstage/plugin-catalog-backend'; import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; import { GithubCredentialsProvider } from '@backstage/integration'; @@ -78,12 +78,18 @@ export type GithubEntityProviderCatalogModuleOptions = { export class GitHubLocationAnalyzer implements ScmLocationAnalyzer { constructor(options: GitHubLocationAnalyzerOptions); // (undocumented) - analyze({ - url, - catalogFilename, - }: AnalyzeOptions): Promise; + analyze({ url, catalogFilename }: AnalyzeOptions): Promise<{ + existing: { + location: { + type: string; + target: string; + }; + isRegistered: boolean; + entity: Entity; + }[]; + }>; // (undocumented) - getIntegrationType(): string; + supports(url: string): boolean; } // @public (undocumented) diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index 15cb23d1aa..ede024e296 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -543,8 +543,10 @@ export { processingResult }; // @public (undocumented) export type ScmLocationAnalyzer = { - getIntegrationType(): string; - analyze(options: AnalyzeOptions): Promise; + supports(url: string): boolean; + analyze(options: AnalyzeOptions): Promise<{ + existing: AnalyzeLocationExistingEntity[]; + }>; }; // @public (undocumented) From e9b41910717694bd30c0cdf6960068b2a08c7013 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Wed, 28 Sep 2022 15:07:28 +0100 Subject: [PATCH 061/278] Added parameter scheamas to permission rules Signed-off-by: Harry Hogg --- .../src/permissions/rules/createPropertyRule.ts | 5 +++++ .../catalog-backend/src/permissions/rules/hasAnnotation.ts | 5 +++++ plugins/catalog-backend/src/permissions/rules/hasLabel.ts | 2 ++ .../catalog-backend/src/permissions/rules/isEntityKind.ts | 2 ++ .../catalog-backend/src/permissions/rules/isEntityOwner.ts | 2 ++ plugins/catalog-backend/src/service/createRouter.test.ts | 2 ++ .../src/service/PermissionIntegrationClient.test.ts | 3 +++ .../src/integration/createConditionExports.test.ts | 3 +++ .../src/integration/createConditionFactory.test.ts | 2 ++ .../src/integration/createConditionTransformer.test.ts | 3 +++ .../integration/createPermissionIntegrationRouter.test.ts | 3 +++ plugins/permission-node/src/integration/util.test.ts | 3 +++ plugins/permission-node/src/types.ts | 6 ++++++ plugins/playlist-backend/package.json | 3 ++- plugins/playlist-backend/src/permissions/rules.ts | 3 +++ yarn.lock | 1 + 16 files changed, 47 insertions(+), 1 deletion(-) diff --git a/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts b/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts index 57de5eb922..12725c1fcd 100644 --- a/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts +++ b/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts @@ -18,12 +18,17 @@ import { get } from 'lodash'; import { Entity } from '@backstage/catalog-model'; import { RESOURCE_TYPE_CATALOG_ENTITY } from '@backstage/plugin-catalog-common'; import { createCatalogPermissionRule } from './util'; +import { z } from 'zod'; export const createPropertyRule = (propertyType: 'metadata' | 'spec') => createCatalogPermissionRule({ name: `HAS_${propertyType.toUpperCase()}`, description: `Allow entities which have the specified ${propertyType} subfield.`, resourceType: RESOURCE_TYPE_CATALOG_ENTITY, + schema: z.tuple([ + z.string().describe('Property name'), + z.string().optional().describe('Property value'), + ]), apply: (resource: Entity, key: string, value?: string) => { const foundValue = get(resource[propertyType], key); diff --git a/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts b/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts index 22dbd307a6..4042c34636 100644 --- a/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts +++ b/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts @@ -16,6 +16,7 @@ import { Entity } from '@backstage/catalog-model'; import { RESOURCE_TYPE_CATALOG_ENTITY } from '@backstage/plugin-catalog-common'; +import { z } from 'zod'; import { createCatalogPermissionRule } from './util'; /** @@ -31,6 +32,10 @@ export const hasAnnotation = createCatalogPermissionRule({ description: 'Allow entities which are annotated with the specified annotation', resourceType: RESOURCE_TYPE_CATALOG_ENTITY, + schema: z.tuple([ + z.string().describe('Annotation name'), + z.string().optional().describe('Annotation value'), + ]), apply: (resource: Entity, annotation: string, value?: string) => !!resource.metadata.annotations?.hasOwnProperty(annotation) && (value === undefined diff --git a/plugins/catalog-backend/src/permissions/rules/hasLabel.ts b/plugins/catalog-backend/src/permissions/rules/hasLabel.ts index 9f37cbfb59..3d1a18f8b3 100644 --- a/plugins/catalog-backend/src/permissions/rules/hasLabel.ts +++ b/plugins/catalog-backend/src/permissions/rules/hasLabel.ts @@ -16,6 +16,7 @@ import { Entity } from '@backstage/catalog-model'; import { RESOURCE_TYPE_CATALOG_ENTITY } from '@backstage/plugin-catalog-common'; +import { z } from 'zod'; import { createCatalogPermissionRule } from './util'; /** @@ -27,6 +28,7 @@ export const hasLabel = createCatalogPermissionRule({ name: 'HAS_LABEL', description: 'Allow entities which have the specified label metadata.', resourceType: RESOURCE_TYPE_CATALOG_ENTITY, + schema: z.tuple([z.string().describe('Label name')]), apply: (resource: Entity, label: string) => !!resource.metadata.labels?.hasOwnProperty(label), toQuery: (label: string) => ({ diff --git a/plugins/catalog-backend/src/permissions/rules/isEntityKind.ts b/plugins/catalog-backend/src/permissions/rules/isEntityKind.ts index 3bd600e8fe..70467558dd 100644 --- a/plugins/catalog-backend/src/permissions/rules/isEntityKind.ts +++ b/plugins/catalog-backend/src/permissions/rules/isEntityKind.ts @@ -15,6 +15,7 @@ */ import { Entity } from '@backstage/catalog-model'; import { RESOURCE_TYPE_CATALOG_ENTITY } from '@backstage/plugin-catalog-common'; +import { z } from 'zod'; import { EntitiesSearchFilter } from '../../catalog/types'; import { createCatalogPermissionRule } from './util'; @@ -27,6 +28,7 @@ export const isEntityKind = createCatalogPermissionRule({ name: 'IS_ENTITY_KIND', description: 'Allow entities with the specified kind', resourceType: RESOURCE_TYPE_CATALOG_ENTITY, + schema: z.tuple([z.array(z.string().describe('List of entity kinds'))]), apply(resource: Entity, kinds: string[]) { const resourceKind = resource.kind.toLocaleLowerCase('en-US'); return kinds.some(kind => kind.toLocaleLowerCase('en-US') === resourceKind); diff --git a/plugins/catalog-backend/src/permissions/rules/isEntityOwner.ts b/plugins/catalog-backend/src/permissions/rules/isEntityOwner.ts index 5403da2310..c0cc7c9911 100644 --- a/plugins/catalog-backend/src/permissions/rules/isEntityOwner.ts +++ b/plugins/catalog-backend/src/permissions/rules/isEntityOwner.ts @@ -16,6 +16,7 @@ import { Entity, RELATION_OWNED_BY } from '@backstage/catalog-model'; import { RESOURCE_TYPE_CATALOG_ENTITY } from '@backstage/plugin-catalog-common'; +import { z } from 'zod'; import { createCatalogPermissionRule } from './util'; /** @@ -28,6 +29,7 @@ export const isEntityOwner = createCatalogPermissionRule({ name: 'IS_ENTITY_OWNER', description: 'Allow entities owned by the current user', resourceType: RESOURCE_TYPE_CATALOG_ENTITY, + schema: z.tuple([z.array(z.string().describe('List of owners'))]), apply: (resource: Entity, claims: string[]) => { if (!resource.relations) { return false; diff --git a/plugins/catalog-backend/src/service/createRouter.test.ts b/plugins/catalog-backend/src/service/createRouter.test.ts index 16a36eb8c4..163e5e0747 100644 --- a/plugins/catalog-backend/src/service/createRouter.test.ts +++ b/plugins/catalog-backend/src/service/createRouter.test.ts @@ -36,6 +36,7 @@ import { } from '@backstage/plugin-permission-node'; import { RESOURCE_TYPE_CATALOG_ENTITY } from '@backstage/plugin-catalog-common'; import { CatalogProcessingOrchestrator } from '../processing/types'; +import { z } from 'zod'; describe('createRouter readonly disabled', () => { let entitiesCatalog: jest.Mocked; @@ -695,6 +696,7 @@ describe('NextRouter permissioning', () => { name: 'FAKE_RULE', description: 'fake rule', resourceType: RESOURCE_TYPE_CATALOG_ENTITY, + schema: z.tuple([]), apply: () => true, toQuery: () => ({ key: '', values: [] }), }); diff --git a/plugins/permission-backend/src/service/PermissionIntegrationClient.test.ts b/plugins/permission-backend/src/service/PermissionIntegrationClient.test.ts index 4c50e1646f..6c05a825ab 100644 --- a/plugins/permission-backend/src/service/PermissionIntegrationClient.test.ts +++ b/plugins/permission-backend/src/service/PermissionIntegrationClient.test.ts @@ -30,6 +30,7 @@ import { createPermissionRule, } from '@backstage/plugin-permission-node'; import { PermissionIntegrationClient } from './PermissionIntegrationClient'; +import { z } from 'zod'; describe('PermissionIntegrationClient', () => { describe('applyConditions', () => { @@ -279,6 +280,7 @@ describe('PermissionIntegrationClient', () => { name: 'RULE_1', description: 'Test rule 1', resourceType: 'test-resource', + schema: z.tuple([z.enum(['yes', 'no'])]), apply: (_resource: any, input: 'yes' | 'no') => input === 'yes', toQuery: () => { throw new Error('Not implemented'); @@ -288,6 +290,7 @@ describe('PermissionIntegrationClient', () => { name: 'RULE_2', description: 'Test rule 2', resourceType: 'test-resource', + schema: z.tuple([z.enum(['yes', 'no'])]), apply: (_resource: any, input: 'yes' | 'no') => input === 'yes', toQuery: () => { throw new Error('Not implemented'); diff --git a/plugins/permission-node/src/integration/createConditionExports.test.ts b/plugins/permission-node/src/integration/createConditionExports.test.ts index 54d5652996..ed0ab49b5c 100644 --- a/plugins/permission-node/src/integration/createConditionExports.test.ts +++ b/plugins/permission-node/src/integration/createConditionExports.test.ts @@ -18,6 +18,7 @@ import { AuthorizeResult, createPermission, } from '@backstage/plugin-permission-common'; +import { z } from 'zod'; import { createConditionExports } from './createConditionExports'; import { createPermissionRule } from './createPermissionRule'; @@ -30,6 +31,7 @@ const testIntegration = () => name: 'testRule1', description: 'Test rule 1', resourceType: 'test-resource', + schema: z.tuple([z.string(), z.number()]), apply: jest.fn( (_resource: any, _firstParam: string, _secondParam: number) => true, ), @@ -42,6 +44,7 @@ const testIntegration = () => name: 'testRule2', description: 'Test rule 2', resourceType: 'test-resource', + schema: z.tuple([z.object({})]), apply: jest.fn((_resource: any, _firstParam: object) => false), toQuery: jest.fn((firstParam: object) => ({ query: 'testRule2', diff --git a/plugins/permission-node/src/integration/createConditionFactory.test.ts b/plugins/permission-node/src/integration/createConditionFactory.test.ts index 1941b5ac0b..433d37b3f6 100644 --- a/plugins/permission-node/src/integration/createConditionFactory.test.ts +++ b/plugins/permission-node/src/integration/createConditionFactory.test.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import { z } from 'zod'; import { createConditionFactory } from './createConditionFactory'; import { createPermissionRule } from './createPermissionRule'; @@ -22,6 +23,7 @@ describe('createConditionFactory', () => { name: 'test-rule', description: 'test-description', resourceType: 'test-resource', + schema: z.tuple([]), apply: jest.fn(), toQuery: jest.fn(), }); diff --git a/plugins/permission-node/src/integration/createConditionTransformer.test.ts b/plugins/permission-node/src/integration/createConditionTransformer.test.ts index 917449561d..421bbcb2f4 100644 --- a/plugins/permission-node/src/integration/createConditionTransformer.test.ts +++ b/plugins/permission-node/src/integration/createConditionTransformer.test.ts @@ -18,6 +18,7 @@ import { PermissionCondition, PermissionCriteria, } from '@backstage/plugin-permission-common'; +import { z } from 'zod'; import { createConditionTransformer } from './createConditionTransformer'; import { createPermissionRule } from './createPermissionRule'; @@ -26,6 +27,7 @@ const transformConditions = createConditionTransformer([ name: 'test-rule-1', description: 'Test rule 1', resourceType: 'test-resource', + schema: z.tuple([]), apply: jest.fn(), toQuery: jest.fn( (firstParam: string, secondParam: number) => @@ -36,6 +38,7 @@ const transformConditions = createConditionTransformer([ name: 'test-rule-2', description: 'Test rule 2', resourceType: 'test-resource', + schema: z.tuple([]), apply: jest.fn(), toQuery: jest.fn( (firstParam: object) => `test-rule-2:${JSON.stringify(firstParam)}`, diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts index ac4005c487..829b1b3614 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts @@ -21,6 +21,7 @@ import { } from '@backstage/plugin-permission-common'; import express, { Express, Router } from 'express'; import request, { Response } from 'supertest'; +import { z } from 'zod'; import { createPermissionIntegrationRouter } from './createPermissionIntegrationRouter'; import { createPermissionRule } from './createPermissionRule'; @@ -39,6 +40,7 @@ const testRule1 = createPermissionRule({ name: 'test-rule-1', description: 'Test rule 1', resourceType: 'test-resource', + schema: z.tuple([z.string(), z.number()]), apply: (_resource: any, _firstParam: string, _secondParam: number) => true, toQuery: (_firstParam: string, _secondParam: number) => ({}), }); @@ -47,6 +49,7 @@ const testRule2 = createPermissionRule({ name: 'test-rule-2', description: 'Test rule 2', resourceType: 'test-resource', + schema: z.tuple([z.object({})]), apply: (_resource: any, _firstParam: object) => false, toQuery: (_firstParam: object) => ({}), }); diff --git a/plugins/permission-node/src/integration/util.test.ts b/plugins/permission-node/src/integration/util.test.ts index 6c1c270953..1572964a7d 100644 --- a/plugins/permission-node/src/integration/util.test.ts +++ b/plugins/permission-node/src/integration/util.test.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import { z } from 'zod'; import { createPermissionRule } from './createPermissionRule'; import { createGetRule, @@ -30,6 +31,7 @@ describe('permission integration utils', () => { name: 'test-rule-1', description: 'Test rule 1', resourceType: 'test-resource', + schema: z.tuple([]), apply: jest.fn(), toQuery: jest.fn(), }); @@ -38,6 +40,7 @@ describe('permission integration utils', () => { name: 'test-rule-2', description: 'Test rule 2', resourceType: 'test-resource', + schema: z.tuple([]), apply: jest.fn(), toQuery: jest.fn(), }); diff --git a/plugins/permission-node/src/types.ts b/plugins/permission-node/src/types.ts index 66b4a7b22b..7beb5bb92d 100644 --- a/plugins/permission-node/src/types.ts +++ b/plugins/permission-node/src/types.ts @@ -15,6 +15,7 @@ */ import type { PermissionCriteria } from '@backstage/plugin-permission-common'; +import { z } from 'zod'; /** * A conditional rule that can be provided in an @@ -42,6 +43,11 @@ export type PermissionRule< description: string; resourceType: TResourceType; + /** + * A ZodSchema that documents the parameters that this rule accepts. + */ + schema: z.ZodSchema; + /** * Apply this rule to a resource already loaded from a backing data source. The params are * arguments supplied for the rule; for example, a rule could be `isOwner` with entityRefs as the diff --git a/plugins/playlist-backend/package.json b/plugins/playlist-backend/package.json index 9e4ab86020..bee5d292b9 100644 --- a/plugins/playlist-backend/package.json +++ b/plugins/playlist-backend/package.json @@ -39,7 +39,8 @@ "node-fetch": "^2.6.7", "uuid": "^8.2.0", "winston": "^3.2.1", - "yn": "^4.0.0" + "yn": "^4.0.0", + "zod": "^3.11.6" }, "devDependencies": { "@backstage/cli": "workspace:^", diff --git a/plugins/playlist-backend/src/permissions/rules.ts b/plugins/playlist-backend/src/permissions/rules.ts index cbf81bee65..de2d3df5e4 100644 --- a/plugins/playlist-backend/src/permissions/rules.ts +++ b/plugins/playlist-backend/src/permissions/rules.ts @@ -19,6 +19,7 @@ import { PLAYLIST_LIST_RESOURCE_TYPE, PlaylistMetadata, } from '@backstage/plugin-playlist-common'; +import { z } from 'zod'; import { ListPlaylistsFilter } from '../service'; @@ -32,6 +33,7 @@ const isOwner = createPlaylistPermissionRule({ name: 'IS_OWNER', description: 'Should allow only if the playlist belongs to the user', resourceType: PLAYLIST_LIST_RESOURCE_TYPE, + schema: z.tuple([z.array(z.string().describe('List of owners'))]), apply: (list: PlaylistMetadata, userOwnershipRefs: string[]) => userOwnershipRefs.includes(list.owner), toQuery: (userOwnershipRefs: string[]) => ({ @@ -44,6 +46,7 @@ const isPublic = createPlaylistPermissionRule({ name: 'IS_PUBLIC', description: 'Should allow only if the playlist is public', resourceType: PLAYLIST_LIST_RESOURCE_TYPE, + schema: z.tuple([]), apply: (list: PlaylistMetadata) => list.public, toQuery: () => ({ key: 'public', values: [true] }), }); diff --git a/yarn.lock b/yarn.lock index e5f10c942a..a6bb179e7c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6427,6 +6427,7 @@ __metadata: uuid: ^8.2.0 winston: ^3.2.1 yn: ^4.0.0 + zod: ^3.11.6 languageName: unknown linkType: soft From 9fe88c4fab903b293a43f0bfdc87469dc05fa359 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Wed, 28 Sep 2022 15:08:43 +0100 Subject: [PATCH 062/278] Added parameter validation using the param schemas Signed-off-by: Harry Hogg --- .../createConditionTransformer.test.ts | 4 +-- .../integration/createConditionTransformer.ts | 10 +++++++- .../createPermissionIntegrationRouter.test.ts | 25 +++++++++++-------- .../createPermissionIntegrationRouter.ts | 9 ++++++- 4 files changed, 33 insertions(+), 15 deletions(-) diff --git a/plugins/permission-node/src/integration/createConditionTransformer.test.ts b/plugins/permission-node/src/integration/createConditionTransformer.test.ts index 421bbcb2f4..e7e1e89d06 100644 --- a/plugins/permission-node/src/integration/createConditionTransformer.test.ts +++ b/plugins/permission-node/src/integration/createConditionTransformer.test.ts @@ -27,7 +27,7 @@ const transformConditions = createConditionTransformer([ name: 'test-rule-1', description: 'Test rule 1', resourceType: 'test-resource', - schema: z.tuple([]), + schema: z.tuple([z.string(), z.number()]), apply: jest.fn(), toQuery: jest.fn( (firstParam: string, secondParam: number) => @@ -38,7 +38,7 @@ const transformConditions = createConditionTransformer([ name: 'test-rule-2', description: 'Test rule 2', resourceType: 'test-resource', - schema: z.tuple([]), + schema: z.tuple([z.object({})]), apply: jest.fn(), toQuery: jest.fn( (firstParam: object) => `test-rule-2:${JSON.stringify(firstParam)}`, diff --git a/plugins/permission-node/src/integration/createConditionTransformer.ts b/plugins/permission-node/src/integration/createConditionTransformer.ts index 112bb30d01..b40063ec13 100644 --- a/plugins/permission-node/src/integration/createConditionTransformer.ts +++ b/plugins/permission-node/src/integration/createConditionTransformer.ts @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { InputError } from '@backstage/errors'; import { AllOfCriteria, AnyOfCriteria, @@ -45,7 +46,14 @@ const mapConditions = ( }; } - return getRule(criteria.rule).toQuery(...criteria.params); + const rule = getRule(criteria.rule); + const result = rule.schema.safeParse(criteria.params); + + if (rule.schema && !result.success) { + throw new InputError(`Parameters to rule are invalid`, result.error); + } + + return rule.toQuery(...criteria.params); }; /** diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts index 829b1b3614..5649480a9c 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts @@ -40,7 +40,10 @@ const testRule1 = createPermissionRule({ name: 'test-rule-1', description: 'Test rule 1', resourceType: 'test-resource', - schema: z.tuple([z.string(), z.number()]), + schema: z.tuple([ + z.string().describe('firstParam'), + z.number().describe('secondParam'), + ]), apply: (_resource: any, _firstParam: string, _secondParam: number) => true, toQuery: (_firstParam: string, _secondParam: number) => ({}), }); @@ -49,7 +52,7 @@ const testRule2 = createPermissionRule({ name: 'test-rule-2', description: 'Test rule 2', resourceType: 'test-resource', - schema: z.tuple([z.object({})]), + schema: z.tuple([z.object({}).describe('firstParam')]), apply: (_resource: any, _firstParam: object) => false, toQuery: (_firstParam: object) => ({}), }); @@ -250,7 +253,7 @@ describe('createPermissionIntegrationRouter', () => { conditions: { rule: 'test-rule-1', resourceType: 'test-resource', - params: [], + params: ['a', 1], }, }, { @@ -260,7 +263,7 @@ describe('createPermissionIntegrationRouter', () => { conditions: { rule: 'test-rule-2', resourceType: 'test-resource', - params: [], + params: [{}], }, }, { @@ -271,7 +274,7 @@ describe('createPermissionIntegrationRouter', () => { not: { rule: 'test-rule-1', resourceType: 'test-resource', - params: [], + params: ['a', 1], }, }, }, @@ -283,7 +286,7 @@ describe('createPermissionIntegrationRouter', () => { not: { rule: 'test-rule-2', resourceType: 'test-resource', - params: [], + params: [{}], }, }, }, @@ -296,12 +299,12 @@ describe('createPermissionIntegrationRouter', () => { { rule: 'test-rule-1', resourceType: 'test-resource', - params: [], + params: ['a', 1], }, { rule: 'test-rule-2', resourceType: 'test-resource', - params: [], + params: [{}], }, ], }, @@ -430,7 +433,7 @@ describe('createPermissionIntegrationRouter', () => { conditions: { rule: 'test-rule-1', resourceType: 'test-resource', - params: [], + params: ['a', 1], }, }, { @@ -440,7 +443,7 @@ describe('createPermissionIntegrationRouter', () => { conditions: { rule: 'test-rule-1', resourceType: 'test-resource', - params: [], + params: ['a', 1], }, }, { @@ -450,7 +453,7 @@ describe('createPermissionIntegrationRouter', () => { conditions: { rule: 'test-rule-1', resourceType: 'test-resource', - params: [], + params: ['a', 1], }, }, ], diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts index 28abc2f48d..6c4df1763f 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts @@ -124,7 +124,14 @@ const applyConditions = ( return !applyConditions(criteria.not, resource, getRule); } - return getRule(criteria.rule).apply(resource, ...criteria.params); + const rule = getRule(criteria.rule); + const result = rule.schema.safeParse(criteria.params); + + if (rule.schema && !result.success) { + throw new InputError(`Parameters to rule are invalid`, result.error); + } + + return rule.apply(resource, ...criteria.params); }; /** From eec3f766f220f9935bb1a182b10b886987d36769 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Thu, 29 Sep 2022 09:27:53 +0100 Subject: [PATCH 063/278] Output a JSON schema from the .well-known metadata endpoint Signed-off-by: Harry Hogg --- plugins/permission-node/package.json | 3 +- .../createPermissionIntegrationRouter.test.ts | 30 +++++++++++++++++++ .../createPermissionIntegrationRouter.ts | 2 ++ yarn.lock | 10 +++++++ 4 files changed, 44 insertions(+), 1 deletion(-) diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json index 5461c2132e..3d6ef790f9 100644 --- a/plugins/permission-node/package.json +++ b/plugins/permission-node/package.json @@ -41,7 +41,8 @@ "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", - "zod": "^3.11.6" + "zod": "^3.11.6", + "zod-to-json-schema": "^3.18.1" }, "devDependencies": { "@backstage/backend-test-utils": "workspace:^", diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts index 5649480a9c..7d80459ba3 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts @@ -530,12 +530,42 @@ describe('createPermissionIntegrationRouter', () => { name: testRule1.name, description: testRule1.description, resourceType: testRule1.resourceType, + schema: { + $schema: 'http://json-schema.org/draft-07/schema#', + items: [ + { + description: 'firstParam', + type: 'string', + }, + { + description: 'secondParam', + type: 'number', + }, + ], + maxItems: 2, + minItems: 2, + type: 'array', + }, parameters: { count: 2 }, }, { name: testRule2.name, description: testRule2.description, resourceType: testRule2.resourceType, + schema: { + $schema: 'http://json-schema.org/draft-07/schema#', + items: [ + { + additionalProperties: false, + description: 'firstParam', + properties: {}, + type: 'object', + }, + ], + maxItems: 1, + minItems: 1, + type: 'array', + }, parameters: { count: 1 }, }, ], diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts index 6c4df1763f..28268b7f98 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts @@ -17,6 +17,7 @@ import express, { Response } from 'express'; import Router from 'express-promise-router'; import { z } from 'zod'; +import zodToJsonSchema from 'zod-to-json-schema'; import { InputError } from '@backstage/errors'; import { errorHandler } from '@backstage/backend-common'; import { @@ -201,6 +202,7 @@ export const createPermissionIntegrationRouter = < name: rule.name, description: rule.description, resourceType: rule.resourceType, + schema: zodToJsonSchema(rule.schema), parameters: { count: rule.toQuery.length, }, diff --git a/yarn.lock b/yarn.lock index a6bb179e7c..bef0e188c6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6359,6 +6359,7 @@ __metadata: msw: ^0.47.0 supertest: ^6.1.3 zod: ^3.11.6 + zod-to-json-schema: ^3.18.1 languageName: unknown linkType: soft @@ -40077,6 +40078,15 @@ __metadata: languageName: node linkType: hard +"zod-to-json-schema@npm:^3.18.1": + version: 3.18.1 + resolution: "zod-to-json-schema@npm:3.18.1" + peerDependencies: + zod: ^3.18.0 + checksum: e55d0de83b50fbd1caa7541d037858815964477b52a9e6495496e447107386cf16e2c08b007fcfbffd7fbe069ca2c19018425a53eaee36aff5dda942d3db71f4 + languageName: node + linkType: hard + "zod@npm:^3.11.6, zod@npm:^3.9.5": version: 3.18.0 resolution: "zod@npm:3.18.0" From 46b4a72ceea915006f20f0eca38a030d4845bfe6 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Thu, 29 Sep 2022 11:08:16 +0100 Subject: [PATCH 064/278] Added changeset Signed-off-by: Harry Hogg --- .changeset/kind-bees-suffer.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .changeset/kind-bees-suffer.md diff --git a/.changeset/kind-bees-suffer.md b/.changeset/kind-bees-suffer.md new file mode 100644 index 0000000000..95899bf064 --- /dev/null +++ b/.changeset/kind-bees-suffer.md @@ -0,0 +1,8 @@ +--- +'@backstage/plugin-catalog-backend': minor +'@backstage/plugin-permission-backend': minor +'@backstage/plugin-permission-node': minor +'@backstage/plugin-playlist-backend': minor +--- + +Permission rules now require a schema (ZodSchema) that details the parameters a rule expects. This is to validate the parameters given to a rule and to provide more details of a rule via the metadata endpoint From 1893c3d4da5c0e3681719f0761696dd5d5371d75 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Thu, 29 Sep 2022 11:28:18 +0100 Subject: [PATCH 065/278] Updated API reports Signed-off-by: Harry Hogg --- plugins/permission-node/api-report.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/permission-node/api-report.md b/plugins/permission-node/api-report.md index 702d363137..055325f5a7 100644 --- a/plugins/permission-node/api-report.md +++ b/plugins/permission-node/api-report.md @@ -24,6 +24,7 @@ import { PolicyDecision } from '@backstage/plugin-permission-common'; import { QueryPermissionRequest } from '@backstage/plugin-permission-common'; import { ResourcePermission } from '@backstage/plugin-permission-common'; import { TokenManager } from '@backstage/backend-common'; +import { z } from 'zod'; // @public export type ApplyConditionsRequest = { @@ -170,6 +171,7 @@ export type PermissionRule< name: string; description: string; resourceType: TResourceType; + schema: z.ZodSchema; apply(resource: TResource, ...params: TParams): boolean; toQuery(...params: TParams): PermissionCriteria; }; From 6d447843fa4657918f4b450ed34a129c8f479e4d Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Mon, 3 Oct 2022 10:19:47 +0100 Subject: [PATCH 066/278] Changing over permission rules params API to accept a single object Signed-off-by: Harry Hogg --- .../rules/createPropertyRule.test.ts | 52 +++-- .../permissions/rules/createPropertyRule.ts | 16 +- .../permissions/rules/hasAnnotation.test.ts | 41 ++-- .../src/permissions/rules/hasAnnotation.ts | 16 +- .../src/permissions/rules/hasLabel.test.ts | 16 +- .../src/permissions/rules/hasLabel.ts | 9 +- .../permissions/rules/isEntityKind.test.ts | 18 +- .../src/permissions/rules/isEntityKind.ts | 9 +- .../permissions/rules/isEntityOwner.test.ts | 30 ++- .../src/permissions/rules/isEntityOwner.ts | 10 +- .../src/permissions/rules/util.ts | 5 +- .../service/AuthorizedEntitiesCatalog.test.ts | 8 +- .../src/service/createRouter.test.ts | 8 +- .../PermissionIntegrationClient.test.ts | 41 ++-- .../src/PermissionClient.test.ts | 4 +- .../permission-common/src/PermissionClient.ts | 2 +- plugins/permission-common/src/types/api.ts | 2 +- .../createConditionExports.test.ts | 55 ++++-- .../src/integration/createConditionExports.ts | 2 +- .../createConditionFactory.test.ts | 18 +- .../src/integration/createConditionFactory.ts | 4 +- .../createConditionTransformer.test.ts | 99 +++++++--- .../integration/createConditionTransformer.ts | 2 +- .../createPermissionIntegrationRouter.test.ts | 180 ++++++++++++------ .../createPermissionIntegrationRouter.ts | 4 +- .../src/integration/createPermissionRule.ts | 4 +- .../src/integration/util.test.ts | 4 +- plugins/permission-node/src/types.ts | 12 +- .../DefaultPlaylistPermissionPolicy.test.ts | 32 ++-- .../DefaultPlaylistPermissionPolicy.ts | 10 +- .../playlist-backend/src/permissions/rules.ts | 17 +- 31 files changed, 495 insertions(+), 235 deletions(-) diff --git a/plugins/catalog-backend/src/permissions/rules/createPropertyRule.test.ts b/plugins/catalog-backend/src/permissions/rules/createPropertyRule.test.ts index cb11add9ed..5b34c98ca6 100644 --- a/plugins/catalog-backend/src/permissions/rules/createPropertyRule.test.ts +++ b/plugins/catalog-backend/src/permissions/rules/createPropertyRule.test.ts @@ -41,7 +41,9 @@ describe('createPropertyRule', () => { name: 'test-component', }, }, - 'org.name', + { + key: 'org.name', + }, ), ).toBe(false); }); @@ -57,7 +59,9 @@ describe('createPropertyRule', () => { tags: [], }, }, - 'tags', + { + key: 'tags', + }, ), ).toBe(false); }); @@ -75,7 +79,9 @@ describe('createPropertyRule', () => { }, }, }, - 'org.name', + { + key: 'org.name', + }, ), ).toBe(true); }); @@ -91,7 +97,9 @@ describe('createPropertyRule', () => { tags: ['java'], }, }, - 'tags', + { + key: 'tags', + }, ), ).toBe(true); }); @@ -108,8 +116,10 @@ describe('createPropertyRule', () => { name: 'test-component', }, }, - 'org.name', - 'test-org', + { + key: 'org.name', + value: 'test-org', + }, ), ).toBe(false); }); @@ -127,8 +137,10 @@ describe('createPropertyRule', () => { }, }, }, - 'org.name', - 'test-org', + { + key: 'org.name', + value: 'test-org', + }, ), ).toBe(false); }); @@ -144,8 +156,10 @@ describe('createPropertyRule', () => { tags: ['java'], }, }, - 'tags', - 'python', + { + key: 'tags', + value: 'python', + }, ), ).toBe(false); }); @@ -163,8 +177,10 @@ describe('createPropertyRule', () => { }, }, }, - 'org.name', - 'test-org', + { + key: 'org.name', + value: 'test-org', + }, ), ).toBe(true); }); @@ -180,8 +196,10 @@ describe('createPropertyRule', () => { tags: ['java', 'java11'], }, }, - 'tags', - 'java', + { + key: 'tags', + value: 'java', + }, ), ).toBe(true); }); @@ -190,7 +208,11 @@ describe('createPropertyRule', () => { describe('toQuery', () => { it('returns an appropriate catalog-backend filter', () => { - expect(toQuery('backstage.io/test-component')).toEqual({ + expect( + toQuery({ + key: 'backstage.io/test-component', + }), + ).toEqual({ key: 'metadata.backstage.io/test-component', }); }); diff --git a/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts b/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts index 12725c1fcd..da487c112c 100644 --- a/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts +++ b/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts @@ -15,7 +15,6 @@ */ import { get } from 'lodash'; -import { Entity } from '@backstage/catalog-model'; import { RESOURCE_TYPE_CATALOG_ENTITY } from '@backstage/plugin-catalog-common'; import { createCatalogPermissionRule } from './util'; import { z } from 'zod'; @@ -25,11 +24,14 @@ export const createPropertyRule = (propertyType: 'metadata' | 'spec') => name: `HAS_${propertyType.toUpperCase()}`, description: `Allow entities which have the specified ${propertyType} subfield.`, resourceType: RESOURCE_TYPE_CATALOG_ENTITY, - schema: z.tuple([ - z.string().describe('Property name'), - z.string().optional().describe('Property value'), - ]), - apply: (resource: Entity, key: string, value?: string) => { + schema: z.object({ + key: z.string().describe(`The key of the ${propertyType} to match on`), + value: z + .string() + .optional() + .describe(`Optional value of the ${propertyType} to match on`), + }), + apply: (resource, { key, value }) => { const foundValue = get(resource[propertyType], key); if (Array.isArray(foundValue)) { @@ -43,7 +45,7 @@ export const createPropertyRule = (propertyType: 'metadata' | 'spec') => } return !!foundValue; }, - toQuery: (key: string, value?: string) => ({ + toQuery: ({ key, value }) => ({ key: `${propertyType}.${key}`, ...(value !== undefined && { values: [value] }), }), diff --git a/plugins/catalog-backend/src/permissions/rules/hasAnnotation.test.ts b/plugins/catalog-backend/src/permissions/rules/hasAnnotation.test.ts index 609114be3d..73fce20a71 100644 --- a/plugins/catalog-backend/src/permissions/rules/hasAnnotation.test.ts +++ b/plugins/catalog-backend/src/permissions/rules/hasAnnotation.test.ts @@ -31,7 +31,9 @@ describe('hasAnnotation permission rule', () => { }, }, }, - 'backstage.io/test-annotation', + { + annotation: 'backstage.io/test-annotation', + }, ), ).toEqual(false); }); @@ -46,7 +48,9 @@ describe('hasAnnotation permission rule', () => { name: 'test-component', }, }, - 'backstage.io/test-annotation', + { + annotation: 'backstage.io/test-annotation', + }, ), ).toEqual(false); expect( @@ -58,8 +62,10 @@ describe('hasAnnotation permission rule', () => { name: 'test-component', }, }, - 'backstage.io/test-annotation', - 'some value', + { + annotation: 'backstage.io/test-annotation', + value: 'some value', + }, ), ).toEqual(false); }); @@ -78,7 +84,9 @@ describe('hasAnnotation permission rule', () => { }, }, }, - 'backstage.io/test-annotation', + { + annotation: 'backstage.io/test-annotation', + }, ), ).toEqual(true); }); @@ -97,8 +105,10 @@ describe('hasAnnotation permission rule', () => { }, }, }, - 'backstage.io/test-annotation', - 'baz', + { + annotation: 'backstage.io/test-annotation', + value: 'baz', + }, ), ).toEqual(false); }); @@ -117,8 +127,10 @@ describe('hasAnnotation permission rule', () => { }, }, }, - 'backstage.io/test-annotation', - 'bar', + { + annotation: 'backstage.io/test-annotation', + value: 'bar', + }, ), ).toEqual(true); }); @@ -126,7 +138,11 @@ describe('hasAnnotation permission rule', () => { describe('toQuery', () => { it('returns an appropriate catalog-backend filter', () => { - expect(hasAnnotation.toQuery('backstage.io/test-annotation')).toEqual({ + expect( + hasAnnotation.toQuery({ + annotation: 'backstage.io/test-annotation', + }), + ).toEqual({ key: 'metadata.annotations.backstage.io/test-annotation', }); }); @@ -134,7 +150,10 @@ describe('hasAnnotation permission rule', () => { it('returns an appropriate catalog-backend filter with values', () => { expect( - hasAnnotation.toQuery('backstage.io/test-annotation', 'foo'), + hasAnnotation.toQuery({ + annotation: 'backstage.io/test-annotation', + value: 'foo', + }), ).toEqual({ key: 'metadata.annotations.backstage.io/test-annotation', values: ['foo'], diff --git a/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts b/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts index 4042c34636..9651e9d925 100644 --- a/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts +++ b/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { Entity } from '@backstage/catalog-model'; import { RESOURCE_TYPE_CATALOG_ENTITY } from '@backstage/plugin-catalog-common'; import { z } from 'zod'; import { createCatalogPermissionRule } from './util'; @@ -32,16 +31,19 @@ export const hasAnnotation = createCatalogPermissionRule({ description: 'Allow entities which are annotated with the specified annotation', resourceType: RESOURCE_TYPE_CATALOG_ENTITY, - schema: z.tuple([ - z.string().describe('Annotation name'), - z.string().optional().describe('Annotation value'), - ]), - apply: (resource: Entity, annotation: string, value?: string) => + schema: z.object({ + annotation: z.string().describe('The name of the annotation to match on'), + value: z + .string() + .optional() + .describe('Optional value of the annotation to match on'), + }), + apply: (resource, { annotation, value }) => !!resource.metadata.annotations?.hasOwnProperty(annotation) && (value === undefined ? true : resource.metadata.annotations?.[annotation] === value), - toQuery: (annotation: string, value?: string) => + toQuery: ({ annotation, value }) => value === undefined ? { key: `metadata.annotations.${annotation}`, diff --git a/plugins/catalog-backend/src/permissions/rules/hasLabel.test.ts b/plugins/catalog-backend/src/permissions/rules/hasLabel.test.ts index a1b9cb5ad0..8aa43402c5 100644 --- a/plugins/catalog-backend/src/permissions/rules/hasLabel.test.ts +++ b/plugins/catalog-backend/src/permissions/rules/hasLabel.test.ts @@ -31,7 +31,9 @@ describe('hasLabel permission rule', () => { }, }, }, - 'backstage.io/testlabel', + { + label: 'backstage.io/testlabel', + }, ), ).toEqual(false); }); @@ -46,7 +48,9 @@ describe('hasLabel permission rule', () => { name: 'test-component', }, }, - 'backstage.io/testlabel', + { + label: 'backstage.io/testlabel', + }, ), ).toEqual(false); }); @@ -65,7 +69,7 @@ describe('hasLabel permission rule', () => { }, }, }, - 'backstage.io/testlabel', + { label: 'backstage.io/testlabel' }, ), ).toEqual(true); }); @@ -73,7 +77,11 @@ describe('hasLabel permission rule', () => { describe('toQuery', () => { it('returns an appropriate catalog-backend filter', () => { - expect(hasLabel.toQuery('backstage.io/testlabel')).toEqual({ + expect( + hasLabel.toQuery({ + label: 'backstage.io/testlabel', + }), + ).toEqual({ key: 'metadata.labels.backstage.io/testlabel', }); }); diff --git a/plugins/catalog-backend/src/permissions/rules/hasLabel.ts b/plugins/catalog-backend/src/permissions/rules/hasLabel.ts index 3d1a18f8b3..fbad7e42d0 100644 --- a/plugins/catalog-backend/src/permissions/rules/hasLabel.ts +++ b/plugins/catalog-backend/src/permissions/rules/hasLabel.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { Entity } from '@backstage/catalog-model'; import { RESOURCE_TYPE_CATALOG_ENTITY } from '@backstage/plugin-catalog-common'; import { z } from 'zod'; import { createCatalogPermissionRule } from './util'; @@ -28,10 +27,12 @@ export const hasLabel = createCatalogPermissionRule({ name: 'HAS_LABEL', description: 'Allow entities which have the specified label metadata.', resourceType: RESOURCE_TYPE_CATALOG_ENTITY, - schema: z.tuple([z.string().describe('Label name')]), - apply: (resource: Entity, label: string) => + schema: z.object({ + label: z.string().describe('Name of the label'), + }), + apply: (resource, { label }) => !!resource.metadata.labels?.hasOwnProperty(label), - toQuery: (label: string) => ({ + toQuery: ({ label }) => ({ key: `metadata.labels.${label}`, }), }); diff --git a/plugins/catalog-backend/src/permissions/rules/isEntityKind.test.ts b/plugins/catalog-backend/src/permissions/rules/isEntityKind.test.ts index e11e102728..28983f6bec 100644 --- a/plugins/catalog-backend/src/permissions/rules/isEntityKind.test.ts +++ b/plugins/catalog-backend/src/permissions/rules/isEntityKind.test.ts @@ -27,7 +27,11 @@ describe('isEntityKind', () => { name: 'some-component', }, }; - expect(isEntityKind.apply(component, ['b'])).toBe(true); + expect( + isEntityKind.apply(component, { + kinds: ['b'], + }), + ).toBe(true); }); it('returns false when entity is not the correct kind', () => { @@ -38,13 +42,21 @@ describe('isEntityKind', () => { name: 'some-component', }, }; - expect(isEntityKind.apply(component, ['c'])).toBe(false); + expect( + isEntityKind.apply(component, { + kinds: ['c'], + }), + ).toBe(false); }); }); describe('toQuery', () => { it('returns an appropriate catalog-backend filter', () => { - expect(isEntityKind.toQuery(['b'])).toEqual({ + expect( + isEntityKind.toQuery({ + kinds: ['b'], + }), + ).toEqual({ key: 'kind', values: ['b'], }); diff --git a/plugins/catalog-backend/src/permissions/rules/isEntityKind.ts b/plugins/catalog-backend/src/permissions/rules/isEntityKind.ts index 70467558dd..8c16f4c5a1 100644 --- a/plugins/catalog-backend/src/permissions/rules/isEntityKind.ts +++ b/plugins/catalog-backend/src/permissions/rules/isEntityKind.ts @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { Entity } from '@backstage/catalog-model'; import { RESOURCE_TYPE_CATALOG_ENTITY } from '@backstage/plugin-catalog-common'; import { z } from 'zod'; import { EntitiesSearchFilter } from '../../catalog/types'; @@ -28,12 +27,14 @@ export const isEntityKind = createCatalogPermissionRule({ name: 'IS_ENTITY_KIND', description: 'Allow entities with the specified kind', resourceType: RESOURCE_TYPE_CATALOG_ENTITY, - schema: z.tuple([z.array(z.string().describe('List of entity kinds'))]), - apply(resource: Entity, kinds: string[]) { + schema: z.object({ + kinds: z.array(z.string()), + }), + apply(resource, { kinds }) { const resourceKind = resource.kind.toLocaleLowerCase('en-US'); return kinds.some(kind => kind.toLocaleLowerCase('en-US') === resourceKind); }, - toQuery(kinds: string[]): EntitiesSearchFilter { + toQuery({ kinds }): EntitiesSearchFilter { return { key: 'kind', values: kinds.map(kind => kind.toLocaleLowerCase('en-US')), diff --git a/plugins/catalog-backend/src/permissions/rules/isEntityOwner.test.ts b/plugins/catalog-backend/src/permissions/rules/isEntityOwner.test.ts index 11304c768c..f09e484c32 100644 --- a/plugins/catalog-backend/src/permissions/rules/isEntityOwner.test.ts +++ b/plugins/catalog-backend/src/permissions/rules/isEntityOwner.test.ts @@ -33,9 +33,11 @@ describe('isEntityOwner', () => { }, ], }; - expect(isEntityOwner.apply(component, ['user:default/spiderman'])).toBe( - true, - ); + expect( + isEntityOwner.apply(component, { + claims: ['user:default/spiderman'], + }), + ).toBe(true); }); it('returns false when entity is not owned by the given user', () => { @@ -52,9 +54,11 @@ describe('isEntityOwner', () => { }, ], }; - expect(isEntityOwner.apply(component, ['user:default/spiderman'])).toBe( - false, - ); + expect( + isEntityOwner.apply(component, { + claims: ['user:default/spiderman'], + }), + ).toBe(false); }); it('returns false when entity does not have an owner', () => { @@ -65,15 +69,21 @@ describe('isEntityOwner', () => { name: 'some-component', }, }; - expect(isEntityOwner.apply(component, ['user:default/spiderman'])).toBe( - false, - ); + expect( + isEntityOwner.apply(component, { + claims: ['user:default/spiderman'], + }), + ).toBe(false); }); }); describe('toQuery', () => { it('returns an appropriate catalog-backend filter', () => { - expect(isEntityOwner.toQuery(['user:default/spiderman'])).toEqual({ + expect( + isEntityOwner.toQuery({ + claims: ['user:default/spiderman'], + }), + ).toEqual({ key: 'relations.ownedBy', values: ['user:default/spiderman'], }); diff --git a/plugins/catalog-backend/src/permissions/rules/isEntityOwner.ts b/plugins/catalog-backend/src/permissions/rules/isEntityOwner.ts index c0cc7c9911..27431f09a7 100644 --- a/plugins/catalog-backend/src/permissions/rules/isEntityOwner.ts +++ b/plugins/catalog-backend/src/permissions/rules/isEntityOwner.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { Entity, RELATION_OWNED_BY } from '@backstage/catalog-model'; +import { RELATION_OWNED_BY } from '@backstage/catalog-model'; import { RESOURCE_TYPE_CATALOG_ENTITY } from '@backstage/plugin-catalog-common'; import { z } from 'zod'; import { createCatalogPermissionRule } from './util'; @@ -29,8 +29,10 @@ export const isEntityOwner = createCatalogPermissionRule({ name: 'IS_ENTITY_OWNER', description: 'Allow entities owned by the current user', resourceType: RESOURCE_TYPE_CATALOG_ENTITY, - schema: z.tuple([z.array(z.string().describe('List of owners'))]), - apply: (resource: Entity, claims: string[]) => { + schema: z.object({ + claims: z.array(z.string()), + }), + apply: (resource, { claims }) => { if (!resource.relations) { return false; } @@ -39,7 +41,7 @@ export const isEntityOwner = createCatalogPermissionRule({ .filter(relation => relation.type === RELATION_OWNED_BY) .some(relation => claims.includes(relation.targetRef)); }, - toQuery: (claims: string[]) => ({ + toQuery: ({ claims }) => ({ key: 'relations.ownedBy', values: claims, }), diff --git a/plugins/catalog-backend/src/permissions/rules/util.ts b/plugins/catalog-backend/src/permissions/rules/util.ts index 36b351595d..37544a14f8 100644 --- a/plugins/catalog-backend/src/permissions/rules/util.ts +++ b/plugins/catalog-backend/src/permissions/rules/util.ts @@ -29,8 +29,9 @@ import { EntitiesSearchFilter } from '../../catalog/types'; * * @alpha */ -export type CatalogPermissionRule = - PermissionRule; +export type CatalogPermissionRule< + TParams extends Record = Record, +> = PermissionRule; /** * Helper function for creating correctly-typed diff --git a/plugins/catalog-backend/src/service/AuthorizedEntitiesCatalog.test.ts b/plugins/catalog-backend/src/service/AuthorizedEntitiesCatalog.test.ts index b15d1df4bb..66764dc89f 100644 --- a/plugins/catalog-backend/src/service/AuthorizedEntitiesCatalog.test.ts +++ b/plugins/catalog-backend/src/service/AuthorizedEntitiesCatalog.test.ts @@ -65,7 +65,7 @@ describe('AuthorizedEntitiesCatalog', () => { fakePermissionApi.authorizeConditional.mockResolvedValue([ { result: AuthorizeResult.CONDITIONAL, - conditions: { rule: 'IS_ENTITY_KIND', params: [['b']] }, + conditions: { rule: 'IS_ENTITY_KIND', params: { kinds: ['b'] } }, }, ]); const catalog = createCatalog(isEntityKind); @@ -117,7 +117,7 @@ describe('AuthorizedEntitiesCatalog', () => { fakePermissionApi.authorizeConditional.mockResolvedValue([ { result: AuthorizeResult.CONDITIONAL, - conditions: { rule: 'IS_ENTITY_KIND', params: [['b']] }, + conditions: { rule: 'IS_ENTITY_KIND', params: { kinds: ['b'] } }, }, ]); fakeCatalog.entities.mockResolvedValue({ entities: [] }); @@ -136,7 +136,7 @@ describe('AuthorizedEntitiesCatalog', () => { fakePermissionApi.authorizeConditional.mockResolvedValue([ { result: AuthorizeResult.CONDITIONAL, - conditions: { rule: 'IS_ENTITY_KIND', params: [['b']] }, + conditions: { rule: 'IS_ENTITY_KIND', params: { kinds: ['b'] } }, }, ]); fakeCatalog.entities.mockResolvedValue({ @@ -272,7 +272,7 @@ describe('AuthorizedEntitiesCatalog', () => { fakePermissionApi.authorizeConditional.mockResolvedValue([ { result: AuthorizeResult.CONDITIONAL, - conditions: { rule: 'IS_ENTITY_KIND', params: [['b']] }, + conditions: { rule: 'IS_ENTITY_KIND', params: { kinds: ['b'] } }, }, ]); const catalog = createCatalog(isEntityKind); diff --git a/plugins/catalog-backend/src/service/createRouter.test.ts b/plugins/catalog-backend/src/service/createRouter.test.ts index 163e5e0747..088e6c71e2 100644 --- a/plugins/catalog-backend/src/service/createRouter.test.ts +++ b/plugins/catalog-backend/src/service/createRouter.test.ts @@ -696,7 +696,9 @@ describe('NextRouter permissioning', () => { name: 'FAKE_RULE', description: 'fake rule', resourceType: RESOURCE_TYPE_CATALOG_ENTITY, - schema: z.tuple([]), + schema: z.object({ + foo: z.string(), + }), apply: () => true, toQuery: () => ({ key: '', values: [] }), }); @@ -760,7 +762,9 @@ describe('NextRouter permissioning', () => { conditions: { rule: 'FAKE_RULE', resourceType: 'catalog-entity', - params: ['user:default/spiderman'], + params: { + foo: 'user:default/spiderman', + }, }, }, ], diff --git a/plugins/permission-backend/src/service/PermissionIntegrationClient.test.ts b/plugins/permission-backend/src/service/PermissionIntegrationClient.test.ts index 6c05a825ab..8cbeeaebd9 100644 --- a/plugins/permission-backend/src/service/PermissionIntegrationClient.test.ts +++ b/plugins/permission-backend/src/service/PermissionIntegrationClient.test.ts @@ -39,8 +39,12 @@ describe('PermissionIntegrationClient', () => { const mockConditions: PermissionCriteria = { not: { allOf: [ - { rule: 'RULE_1', resourceType: 'test-resource', params: [] }, - { rule: 'RULE_2', resourceType: 'test-resource', params: ['abc'] }, + { rule: 'RULE_1', resourceType: 'test-resource', params: {} }, + { + rule: 'RULE_2', + resourceType: 'test-resource', + params: { foo: 'abc' }, + }, ], }, }; @@ -280,8 +284,10 @@ describe('PermissionIntegrationClient', () => { name: 'RULE_1', description: 'Test rule 1', resourceType: 'test-resource', - schema: z.tuple([z.enum(['yes', 'no'])]), - apply: (_resource: any, input: 'yes' | 'no') => input === 'yes', + schema: z.object({ + input: z.enum(['yes', 'no']), + }), + apply: (_resource, { input }) => input === 'yes', toQuery: () => { throw new Error('Not implemented'); }, @@ -290,8 +296,11 @@ describe('PermissionIntegrationClient', () => { name: 'RULE_2', description: 'Test rule 2', resourceType: 'test-resource', - schema: z.tuple([z.enum(['yes', 'no'])]), - apply: (_resource: any, input: 'yes' | 'no') => input === 'yes', + + schema: z.object({ + input: z.enum(['yes', 'no']), + }), + apply: (_resource, { input }) => input === 'yes', toQuery: () => { throw new Error('Not implemented'); }, @@ -347,7 +356,9 @@ describe('PermissionIntegrationClient', () => { conditions: { rule: 'RULE_1', resourceType: 'test-resource', - params: ['no'], + params: { + input: 'no', + }, }, }, ]), @@ -368,13 +379,17 @@ describe('PermissionIntegrationClient', () => { { rule: 'RULE_1', resourceType: 'test-resource', - params: ['yes'], + params: { + input: 'yes', + }, }, { not: { rule: 'RULE_2', resourceType: 'test-resource', - params: ['no'], + params: { + input: 'no', + }, }, }, ], @@ -385,12 +400,16 @@ describe('PermissionIntegrationClient', () => { { rule: 'RULE_1', resourceType: 'test-resource', - params: ['no'], + params: { + input: 'no', + }, }, { rule: 'RULE_2', resourceType: 'test-resource', - params: ['yes'], + params: { + input: 'yes', + }, }, ], }, diff --git a/plugins/permission-common/src/PermissionClient.test.ts b/plugins/permission-common/src/PermissionClient.test.ts index 9b2bdcb9ff..bcc6ddd6f6 100644 --- a/plugins/permission-common/src/PermissionClient.test.ts +++ b/plugins/permission-common/src/PermissionClient.test.ts @@ -227,7 +227,7 @@ describe('PermissionClient', () => { conditions: { resourceType: 'test-resource', rule: 'FOO', - params: ['bar'], + params: { foo: 'bar' }, }, }), ); @@ -275,7 +275,7 @@ describe('PermissionClient', () => { conditions: { rule: 'FOO', resourceType: 'test-resource', - params: ['bar'], + params: { foo: 'bar' }, }, }), ); diff --git a/plugins/permission-common/src/PermissionClient.ts b/plugins/permission-common/src/PermissionClient.ts index 9a7bb0bba4..7b429dc46f 100644 --- a/plugins/permission-common/src/PermissionClient.ts +++ b/plugins/permission-common/src/PermissionClient.ts @@ -41,7 +41,7 @@ const permissionCriteriaSchema: z.ZodSchema< .object({ rule: z.string(), resourceType: z.string(), - params: z.array(z.unknown()), + params: z.record(z.unknown()), }) .or(z.object({ anyOf: z.array(permissionCriteriaSchema).nonempty() })) .or(z.object({ allOf: z.array(permissionCriteriaSchema).nonempty() })) diff --git a/plugins/permission-common/src/types/api.ts b/plugins/permission-common/src/types/api.ts index f29a639d18..70b9e902b8 100644 --- a/plugins/permission-common/src/types/api.ts +++ b/plugins/permission-common/src/types/api.ts @@ -101,7 +101,7 @@ export type PolicyDecision = */ export type PermissionCondition< TResourceType extends string = string, - TParams extends unknown[] = unknown[], + TParams extends Record = Record, > = { resourceType: TResourceType; rule: string; diff --git a/plugins/permission-node/src/integration/createConditionExports.test.ts b/plugins/permission-node/src/integration/createConditionExports.test.ts index ed0ab49b5c..a989206fdd 100644 --- a/plugins/permission-node/src/integration/createConditionExports.test.ts +++ b/plugins/permission-node/src/integration/createConditionExports.test.ts @@ -31,25 +31,28 @@ const testIntegration = () => name: 'testRule1', description: 'Test rule 1', resourceType: 'test-resource', - schema: z.tuple([z.string(), z.number()]), - apply: jest.fn( - (_resource: any, _firstParam: string, _secondParam: number) => true, - ), - toQuery: jest.fn((firstParam: string, secondParam: number) => ({ + schema: z.object({ + foo: z.string(), + bar: z.number(), + }), + apply: (_resource: any, _params) => true, + toQuery: params => ({ query: 'testRule1', - params: [firstParam, secondParam], - })), + params, + }), }), testRule2: createPermissionRule({ name: 'testRule2', description: 'Test rule 2', resourceType: 'test-resource', - schema: z.tuple([z.object({})]), - apply: jest.fn((_resource: any, _firstParam: object) => false), - toQuery: jest.fn((firstParam: object) => ({ + schema: z.object({ + foo: z.object({}), + }), + apply: (_resource: any) => false, + toQuery: params => ({ query: 'testRule2', - params: [firstParam], - })), + params, + }), }), }, }); @@ -59,16 +62,26 @@ describe('createConditionExports', () => { it('creates condition factories for the supplied rules', () => { const { conditions } = testIntegration(); - expect(conditions.testRule1('a', 1)).toEqual({ + expect( + conditions.testRule1({ + foo: 'a', + bar: 1, + }), + ).toEqual({ rule: 'testRule1', resourceType: 'test-resource', - params: ['a', 1], + params: { + foo: 'a', + bar: 1, + }, }); - expect(conditions.testRule2({ baz: 'quux' })).toEqual({ + expect(conditions.testRule2({ foo: { baz: 'quux' } })).toEqual({ rule: 'testRule2', resourceType: 'test-resource', - params: [{ baz: 'quux' }], + params: { + foo: { baz: 'quux' }, + }, }); }); }); @@ -88,7 +101,10 @@ describe('createConditionExports', () => { { rule: 'testRule1', resourceType: 'test-resource', - params: ['a', 1], + params: { + foo: 'a', + bar: 1, + }, }, ], }), @@ -101,7 +117,10 @@ describe('createConditionExports', () => { { rule: 'testRule1', resourceType: 'test-resource', - params: ['a', 1], + params: { + foo: 'a', + bar: 1, + }, }, ], }, diff --git a/plugins/permission-node/src/integration/createConditionExports.ts b/plugins/permission-node/src/integration/createConditionExports.ts index ba34c07fed..3921c2dfe3 100644 --- a/plugins/permission-node/src/integration/createConditionExports.ts +++ b/plugins/permission-node/src/integration/createConditionExports.ts @@ -36,7 +36,7 @@ export type Condition = TRule extends PermissionRule< infer TResourceType, infer TParams > - ? (...params: TParams) => PermissionCondition + ? (params: TParams) => PermissionCondition : never; /** diff --git a/plugins/permission-node/src/integration/createConditionFactory.test.ts b/plugins/permission-node/src/integration/createConditionFactory.test.ts index 433d37b3f6..191688f0dd 100644 --- a/plugins/permission-node/src/integration/createConditionFactory.test.ts +++ b/plugins/permission-node/src/integration/createConditionFactory.test.ts @@ -23,9 +23,11 @@ describe('createConditionFactory', () => { name: 'test-rule', description: 'test-description', resourceType: 'test-resource', - schema: z.tuple([]), - apply: jest.fn(), - toQuery: jest.fn(), + schema: z.object({ + foo: z.string(), + }), + apply: (_resource, _params) => true, + toQuery: _params => ({}), }); it('returns a function', () => { @@ -35,10 +37,16 @@ describe('createConditionFactory', () => { describe('return value', () => { it('constructs a condition with the rule name and supplied params', () => { const conditionFactory = createConditionFactory(testRule); - expect(conditionFactory('a', 'b', 1, 2)).toEqual({ + expect( + conditionFactory({ + foo: 'bar', + }), + ).toEqual({ rule: 'test-rule', resourceType: 'test-resource', - params: ['a', 'b', 1, 2], + params: { + foo: 'bar', + }, }); }); }); diff --git a/plugins/permission-node/src/integration/createConditionFactory.ts b/plugins/permission-node/src/integration/createConditionFactory.ts index 15a5b4fd08..5b499ab512 100644 --- a/plugins/permission-node/src/integration/createConditionFactory.ts +++ b/plugins/permission-node/src/integration/createConditionFactory.ts @@ -34,10 +34,10 @@ import { PermissionRule } from '../types'; * @public */ export const createConditionFactory = - ( + >( rule: PermissionRule, ) => - (...params: TParams): PermissionCondition => ({ + (params: TParams): PermissionCondition => ({ rule: rule.name, resourceType: rule.resourceType, params, diff --git a/plugins/permission-node/src/integration/createConditionTransformer.test.ts b/plugins/permission-node/src/integration/createConditionTransformer.test.ts index e7e1e89d06..5021b7766d 100644 --- a/plugins/permission-node/src/integration/createConditionTransformer.test.ts +++ b/plugins/permission-node/src/integration/createConditionTransformer.test.ts @@ -27,22 +27,22 @@ const transformConditions = createConditionTransformer([ name: 'test-rule-1', description: 'Test rule 1', resourceType: 'test-resource', - schema: z.tuple([z.string(), z.number()]), + schema: z.object({ + foo: z.string(), + bar: z.number(), + }), apply: jest.fn(), - toQuery: jest.fn( - (firstParam: string, secondParam: number) => - `test-rule-1:${firstParam}/${secondParam}`, - ), + toQuery: jest.fn(({ foo, bar }) => `test-rule-1:${foo}/${bar}`), }), createPermissionRule({ name: 'test-rule-2', description: 'Test rule 2', resourceType: 'test-resource', - schema: z.tuple([z.object({})]), + schema: z.object({ + foo: z.object({}), + }), apply: jest.fn(), - toQuery: jest.fn( - (firstParam: object) => `test-rule-2:${JSON.stringify(firstParam)}`, - ), + toQuery: jest.fn(({ foo }) => `test-rule-2:${JSON.stringify(foo)}`), }), ]); @@ -55,7 +55,10 @@ describe('createConditionTransformer', () => { conditions: { rule: 'test-rule-1', resourceType: 'test-resource', - params: ['abc', 123], + params: { + foo: 'abc', + bar: 123, + }, }, expectedResult: 'test-rule-1:abc/123', }, @@ -63,7 +66,9 @@ describe('createConditionTransformer', () => { conditions: { rule: 'test-rule-2', resourceType: 'test-resource', - params: [{ foo: 0 }], + params: { + foo: { foo: 0 }, + }, }, expectedResult: 'test-rule-2:{"foo":0}', }, @@ -73,9 +78,18 @@ describe('createConditionTransformer', () => { { rule: 'test-rule-1', resourceType: 'test-resource', - params: ['a', 1], + params: { + foo: 'a', + bar: 1, + }, + }, + { + rule: 'test-rule-2', + resourceType: 'test-resource', + params: { + foo: {}, + }, }, - { rule: 'test-rule-2', resourceType: 'test-resource', params: [{}] }, ], }, expectedResult: { @@ -88,9 +102,18 @@ describe('createConditionTransformer', () => { { rule: 'test-rule-1', resourceType: 'test-resource', - params: ['a', 1], + params: { + foo: 'a', + bar: 1, + }, + }, + { + rule: 'test-rule-2', + resourceType: 'test-resource', + params: { + foo: {}, + }, }, - { rule: 'test-rule-2', resourceType: 'test-resource', params: [{}] }, ], }, expectedResult: { @@ -102,7 +125,9 @@ describe('createConditionTransformer', () => { not: { rule: 'test-rule-2', resourceType: 'test-resource', - params: [{}], + params: { + foo: {}, + }, }, }, expectedResult: { @@ -117,12 +142,17 @@ describe('createConditionTransformer', () => { { rule: 'test-rule-1', resourceType: 'test-resource', - params: ['a', 1], + params: { + foo: 'a', + bar: 1, + }, }, { rule: 'test-rule-2', resourceType: 'test-resource', - params: [{}], + params: { + foo: {}, + }, }, ], }, @@ -132,12 +162,19 @@ describe('createConditionTransformer', () => { { rule: 'test-rule-1', resourceType: 'test-resource', - params: ['b', 2], + params: { + foo: 'b', + bar: 2, + }, }, { rule: 'test-rule-2', resourceType: 'test-resource', - params: [{ c: 3 }], + params: { + foo: { + c: 3, + }, + }, }, ], }, @@ -165,12 +202,19 @@ describe('createConditionTransformer', () => { { rule: 'test-rule-1', resourceType: 'test-resource', - params: ['a', 1], + params: { + foo: 'a', + bar: 1, + }, }, { rule: 'test-rule-2', resourceType: 'test-resource', - params: [{ b: 2 }], + params: { + foo: { + b: 2, + }, + }, }, ], }, @@ -180,13 +224,20 @@ describe('createConditionTransformer', () => { { rule: 'test-rule-1', resourceType: 'test-resource', - params: ['c', 3], + params: { + foo: 'c', + bar: 3, + }, }, { not: { rule: 'test-rule-2', resourceType: 'test-resource', - params: [{ d: 4 }], + params: { + foo: { + d: 4, + }, + }, }, }, ], diff --git a/plugins/permission-node/src/integration/createConditionTransformer.ts b/plugins/permission-node/src/integration/createConditionTransformer.ts index b40063ec13..afbd4a9316 100644 --- a/plugins/permission-node/src/integration/createConditionTransformer.ts +++ b/plugins/permission-node/src/integration/createConditionTransformer.ts @@ -53,7 +53,7 @@ const mapConditions = ( throw new InputError(`Parameters to rule are invalid`, result.error); } - return rule.toQuery(...criteria.params); + return rule.toQuery(criteria.params); }; /** diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts index 7d80459ba3..9c6b345faf 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts @@ -40,21 +40,23 @@ const testRule1 = createPermissionRule({ name: 'test-rule-1', description: 'Test rule 1', resourceType: 'test-resource', - schema: z.tuple([ - z.string().describe('firstParam'), - z.number().describe('secondParam'), - ]), - apply: (_resource: any, _firstParam: string, _secondParam: number) => true, - toQuery: (_firstParam: string, _secondParam: number) => ({}), + schema: z.object({ + foo: z.string(), + bar: z.number().describe('bar'), + }), + apply: (_resource: any, _params) => true, + toQuery: _params => ({}), }); const testRule2 = createPermissionRule({ name: 'test-rule-2', description: 'Test rule 2', resourceType: 'test-resource', - schema: z.tuple([z.object({}).describe('firstParam')]), - apply: (_resource: any, _firstParam: object) => false, - toQuery: (_firstParam: object) => ({}), + schema: z.object({ + foo: z.object({}).describe('foo'), + }), + apply: (_resource: any, _foo) => false, + toQuery: _foo => ({}), }); describe('createPermissionIntegrationRouter', () => { @@ -85,23 +87,35 @@ describe('createPermissionIntegrationRouter', () => { { rule: 'test-rule-1', resourceType: 'test-resource', - params: ['abc', 123], + params: { + foo: 'abc', + bar: 123, + }, }, { anyOf: [ { rule: 'test-rule-1', resourceType: 'test-resource', - params: ['a', 1], + params: { + foo: 'a', + bar: 1, + }, + }, + { + rule: 'test-rule-2', + resourceType: 'test-resource', + params: { foo: {} }, }, - { rule: 'test-rule-2', resourceType: 'test-resource', params: [{}] }, ], }, { not: { rule: 'test-rule-2', resourceType: 'test-resource', - params: [{}], + params: { + foo: {}, + }, }, }, { @@ -111,12 +125,17 @@ describe('createPermissionIntegrationRouter', () => { { rule: 'test-rule-1', resourceType: 'test-resource', - params: ['a', 1], + params: { + foo: 'a', + bar: 1, + }, }, { rule: 'test-rule-2', resourceType: 'test-resource', - params: [{}], + params: { + foo: {}, + }, }, ], }, @@ -126,12 +145,17 @@ describe('createPermissionIntegrationRouter', () => { { rule: 'test-rule-1', resourceType: 'test-resource', - params: ['b', 2], + params: { + foo: 'b', + bar: 2, + }, }, { rule: 'test-rule-2', resourceType: 'test-resource', - params: [{ c: 3 }], + params: { + foo: { c: 3 }, + }, }, ], }, @@ -167,16 +191,25 @@ describe('createPermissionIntegrationRouter', () => { { rule: 'test-rule-2', resourceType: 'test-resource', - params: [{ foo: 0 }], + params: { + foo: { foo: 0 }, + }, }, { allOf: [ { rule: 'test-rule-1', resourceType: 'test-resource', - params: ['a', 1], + params: { + foo: 'a', + bar: 1, + }, + }, + { + rule: 'test-rule-2', + resourceType: 'test-resource', + params: { foo: {} }, }, - { rule: 'test-rule-2', resourceType: 'test-resource', params: [{}] }, ], }, { @@ -186,12 +219,17 @@ describe('createPermissionIntegrationRouter', () => { { rule: 'test-rule-1', resourceType: 'test-resource', - params: ['a', 1], + params: { + foo: 'a', + bar: 1, + }, }, { rule: 'test-rule-2', resourceType: 'test-resource', - params: [{ b: 2 }], + params: { + foo: { b: 2 }, + }, }, ], }, @@ -201,13 +239,18 @@ describe('createPermissionIntegrationRouter', () => { { rule: 'test-rule-1', resourceType: 'test-resource', - params: ['c', 3], + params: { + foo: 'c', + bar: 3, + }, }, { not: { rule: 'test-rule-2', resourceType: 'test-resource', - params: [{ d: 4 }], + params: { + foo: { d: 4 }, + }, }, }, ], @@ -253,7 +296,10 @@ describe('createPermissionIntegrationRouter', () => { conditions: { rule: 'test-rule-1', resourceType: 'test-resource', - params: ['a', 1], + params: { + foo: 'a', + bar: 1, + }, }, }, { @@ -263,7 +309,9 @@ describe('createPermissionIntegrationRouter', () => { conditions: { rule: 'test-rule-2', resourceType: 'test-resource', - params: [{}], + params: { + foo: {}, + }, }, }, { @@ -274,7 +322,10 @@ describe('createPermissionIntegrationRouter', () => { not: { rule: 'test-rule-1', resourceType: 'test-resource', - params: ['a', 1], + params: { + foo: 'a', + bar: 1, + }, }, }, }, @@ -286,7 +337,9 @@ describe('createPermissionIntegrationRouter', () => { not: { rule: 'test-rule-2', resourceType: 'test-resource', - params: [{}], + params: { + foo: {}, + }, }, }, }, @@ -299,12 +352,17 @@ describe('createPermissionIntegrationRouter', () => { { rule: 'test-rule-1', resourceType: 'test-resource', - params: ['a', 1], + params: { + foo: 'a', + bar: 1, + }, }, { rule: 'test-rule-2', resourceType: 'test-resource', - params: [{}], + params: { + foo: {}, + }, }, ], }, @@ -348,7 +406,9 @@ describe('createPermissionIntegrationRouter', () => { conditions: { rule: 'test-rule-1', resourceType: 'test-incorrect-resource-1', - params: [{}], + params: { + foo: {}, + }, }, }, { @@ -358,7 +418,9 @@ describe('createPermissionIntegrationRouter', () => { conditions: { rule: 'test-rule-1', resourceType: 'test-resource', - params: [{}], + params: { + foo: {}, + }, }, }, { @@ -368,7 +430,9 @@ describe('createPermissionIntegrationRouter', () => { conditions: { rule: 'test-rule-1', resourceType: 'test-incorrect-resource-2', - params: [{}], + params: { + foo: {}, + }, }, }, ], @@ -396,7 +460,7 @@ describe('createPermissionIntegrationRouter', () => { conditions: { rule: 'test-rule-1', resourceType: 'test-resource', - params: [], + params: {}, }, }, ], @@ -433,7 +497,10 @@ describe('createPermissionIntegrationRouter', () => { conditions: { rule: 'test-rule-1', resourceType: 'test-resource', - params: ['a', 1], + params: { + foo: 'a', + bar: 1, + }, }, }, { @@ -443,7 +510,10 @@ describe('createPermissionIntegrationRouter', () => { conditions: { rule: 'test-rule-1', resourceType: 'test-resource', - params: ['a', 1], + params: { + foo: 'a', + bar: 1, + }, }, }, { @@ -453,7 +523,10 @@ describe('createPermissionIntegrationRouter', () => { conditions: { rule: 'test-rule-1', resourceType: 'test-resource', - params: ['a', 1], + params: { + foo: 'a', + bar: 1, + }, }, }, ], @@ -532,21 +605,20 @@ describe('createPermissionIntegrationRouter', () => { resourceType: testRule1.resourceType, schema: { $schema: 'http://json-schema.org/draft-07/schema#', - items: [ - { - description: 'firstParam', + additionalProperties: false, + properties: { + foo: { type: 'string', }, - { - description: 'secondParam', + bar: { + description: 'bar', type: 'number', }, - ], - maxItems: 2, - minItems: 2, - type: 'array', + }, + required: ['foo', 'bar'], + type: 'object', }, - parameters: { count: 2 }, + parameters: { count: 1 }, }, { name: testRule2.name, @@ -554,17 +626,17 @@ describe('createPermissionIntegrationRouter', () => { resourceType: testRule2.resourceType, schema: { $schema: 'http://json-schema.org/draft-07/schema#', - items: [ - { + additionalProperties: false, + properties: { + foo: { additionalProperties: false, - description: 'firstParam', + description: 'foo', properties: {}, type: 'object', }, - ], - maxItems: 1, - minItems: 1, - type: 'array', + }, + required: ['foo'], + type: 'object', }, parameters: { count: 1 }, }, diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts index 28268b7f98..c5843f6a84 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts @@ -46,7 +46,7 @@ const permissionCriteriaSchema: z.ZodSchema< z.object({ rule: z.string(), resourceType: z.string(), - params: z.array(z.unknown()), + params: z.record(z.unknown()), }), ]), ); @@ -132,7 +132,7 @@ const applyConditions = ( throw new InputError(`Parameters to rule are invalid`, result.error); } - return rule.apply(resource, ...criteria.params); + return rule.apply(resource, criteria.params); }; /** diff --git a/plugins/permission-node/src/integration/createPermissionRule.ts b/plugins/permission-node/src/integration/createPermissionRule.ts index 6673fe76de..ef84a5a26f 100644 --- a/plugins/permission-node/src/integration/createPermissionRule.ts +++ b/plugins/permission-node/src/integration/createPermissionRule.ts @@ -25,7 +25,7 @@ export const createPermissionRule = < TResource, TQuery, TResourceType extends string, - TParams extends unknown[], + TParams extends Record, >( rule: PermissionRule, ) => rule; @@ -40,7 +40,7 @@ export const createPermissionRule = < */ export const makeCreatePermissionRule = () => - ( + >( rule: PermissionRule, ) => createPermissionRule(rule); diff --git a/plugins/permission-node/src/integration/util.test.ts b/plugins/permission-node/src/integration/util.test.ts index 1572964a7d..924ab30757 100644 --- a/plugins/permission-node/src/integration/util.test.ts +++ b/plugins/permission-node/src/integration/util.test.ts @@ -31,7 +31,7 @@ describe('permission integration utils', () => { name: 'test-rule-1', description: 'Test rule 1', resourceType: 'test-resource', - schema: z.tuple([]), + schema: z.object({}), apply: jest.fn(), toQuery: jest.fn(), }); @@ -40,7 +40,7 @@ describe('permission integration utils', () => { name: 'test-rule-2', description: 'Test rule 2', resourceType: 'test-resource', - schema: z.tuple([]), + schema: z.object({}), apply: jest.fn(), toQuery: jest.fn(), }); diff --git a/plugins/permission-node/src/types.ts b/plugins/permission-node/src/types.ts index 7beb5bb92d..02ebe07ac4 100644 --- a/plugins/permission-node/src/types.ts +++ b/plugins/permission-node/src/types.ts @@ -37,7 +37,7 @@ export type PermissionRule< TResource, TQuery, TResourceType extends string, - TParams extends unknown[] = unknown[], + TParams extends Record = Record, > = { name: string; description: string; @@ -46,19 +46,23 @@ export type PermissionRule< /** * A ZodSchema that documents the parameters that this rule accepts. */ - schema: z.ZodSchema; + schema: z.ZodObject<{ + [P in keyof TParams]-?: TParams[P] extends undefined + ? z.ZodOptionalType> + : z.ZodType; + }>; /** * Apply this rule to a resource already loaded from a backing data source. The params are * arguments supplied for the rule; for example, a rule could be `isOwner` with entityRefs as the * params. */ - apply(resource: TResource, ...params: TParams): boolean; + apply(resource: TResource, params: TParams): boolean; /** * Translate this rule to criteria suitable for use in querying a backing data store. The criteria * can be used for loading a collection of resources efficiently with conditional criteria already * applied. */ - toQuery(...params: TParams): PermissionCriteria; + toQuery(params: TParams): PermissionCriteria; }; diff --git a/plugins/playlist-backend/src/permissions/DefaultPlaylistPermissionPolicy.test.ts b/plugins/playlist-backend/src/permissions/DefaultPlaylistPermissionPolicy.test.ts index 179b0d7f9b..3d761bfd35 100644 --- a/plugins/playlist-backend/src/permissions/DefaultPlaylistPermissionPolicy.test.ts +++ b/plugins/playlist-backend/src/permissions/DefaultPlaylistPermissionPolicy.test.ts @@ -67,11 +67,10 @@ describe('DefaultPlaylistPermissionPolicy', () => { resourceType: PLAYLIST_LIST_RESOURCE_TYPE, conditions: { anyOf: [ - playlistConditions.isOwner([ - 'user:default/me', - 'group:default/owner', - ]), - playlistConditions.isPublic(), + playlistConditions.isOwner({ + owners: ['user:default/me', 'group:default/owner'], + }), + playlistConditions.isPublic({}), ], }, }); @@ -89,11 +88,10 @@ describe('DefaultPlaylistPermissionPolicy', () => { resourceType: PLAYLIST_LIST_RESOURCE_TYPE, conditions: { anyOf: [ - playlistConditions.isOwner([ - 'user:default/me', - 'group:default/owner', - ]), - playlistConditions.isPublic(), + playlistConditions.isOwner({ + owners: ['user:default/me', 'group:default/owner'], + }), + playlistConditions.isPublic({}), ], }, }); @@ -109,10 +107,9 @@ describe('DefaultPlaylistPermissionPolicy', () => { result: AuthorizeResult.CONDITIONAL, pluginId: 'playlist', resourceType: PLAYLIST_LIST_RESOURCE_TYPE, - conditions: playlistConditions.isOwner([ - 'user:default/me', - 'group:default/owner', - ]), + conditions: playlistConditions.isOwner({ + owners: ['user:default/me', 'group:default/owner'], + }), }); }); @@ -126,10 +123,9 @@ describe('DefaultPlaylistPermissionPolicy', () => { result: AuthorizeResult.CONDITIONAL, pluginId: 'playlist', resourceType: PLAYLIST_LIST_RESOURCE_TYPE, - conditions: playlistConditions.isOwner([ - 'user:default/me', - 'group:default/owner', - ]), + conditions: playlistConditions.isOwner({ + owners: ['user:default/me', 'group:default/owner'], + }), }); }); }); diff --git a/plugins/playlist-backend/src/permissions/DefaultPlaylistPermissionPolicy.ts b/plugins/playlist-backend/src/permissions/DefaultPlaylistPermissionPolicy.ts index 86d103e789..317f5da9c8 100644 --- a/plugins/playlist-backend/src/permissions/DefaultPlaylistPermissionPolicy.ts +++ b/plugins/playlist-backend/src/permissions/DefaultPlaylistPermissionPolicy.ts @@ -68,8 +68,10 @@ export class DefaultPlaylistPermissionPolicy implements PermissionPolicy { ) { return createPlaylistConditionalDecision(request.permission, { anyOf: [ - playlistConditions.isOwner(user?.identity.ownershipEntityRefs ?? []), - playlistConditions.isPublic(), + playlistConditions.isOwner({ + owners: user?.identity.ownershipEntityRefs ?? [], + }), + playlistConditions.isPublic({}), ], }); } @@ -81,7 +83,9 @@ export class DefaultPlaylistPermissionPolicy implements PermissionPolicy { ) { return createPlaylistConditionalDecision( request.permission, - playlistConditions.isOwner(user?.identity.ownershipEntityRefs ?? []), + playlistConditions.isOwner({ + owners: user?.identity.ownershipEntityRefs ?? [], + }), ); } diff --git a/plugins/playlist-backend/src/permissions/rules.ts b/plugins/playlist-backend/src/permissions/rules.ts index de2d3df5e4..897d2e19eb 100644 --- a/plugins/playlist-backend/src/permissions/rules.ts +++ b/plugins/playlist-backend/src/permissions/rules.ts @@ -29,16 +29,19 @@ const createPlaylistPermissionRule = makeCreatePermissionRule< typeof PLAYLIST_LIST_RESOURCE_TYPE >(); -const isOwner = createPlaylistPermissionRule({ +const isOwner = createPlaylistPermissionRule<{ + owners: string[]; +}>({ name: 'IS_OWNER', description: 'Should allow only if the playlist belongs to the user', resourceType: PLAYLIST_LIST_RESOURCE_TYPE, - schema: z.tuple([z.array(z.string().describe('List of owners'))]), - apply: (list: PlaylistMetadata, userOwnershipRefs: string[]) => - userOwnershipRefs.includes(list.owner), - toQuery: (userOwnershipRefs: string[]) => ({ + schema: z.object({ + owners: z.array(z.string().describe('List of owner entity refs')), + }), + apply: (list: PlaylistMetadata, { owners }) => owners.includes(list.owner), + toQuery: ({ owners }) => ({ key: 'owner', - values: userOwnershipRefs, + values: owners, }), }); @@ -46,7 +49,7 @@ const isPublic = createPlaylistPermissionRule({ name: 'IS_PUBLIC', description: 'Should allow only if the playlist is public', resourceType: PLAYLIST_LIST_RESOURCE_TYPE, - schema: z.tuple([]), + schema: z.object({}), apply: (list: PlaylistMetadata) => list.public, toQuery: () => ({ key: 'public', values: [true] }), }); From 1e621ba7c859ccd730802216a7f36b535c1fe204 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Mon, 3 Oct 2022 12:45:48 +0100 Subject: [PATCH 067/278] Updated changeset Signed-off-by: Harry Hogg --- .changeset/kind-bees-suffer.md | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/.changeset/kind-bees-suffer.md b/.changeset/kind-bees-suffer.md index 95899bf064..44bfdb6297 100644 --- a/.changeset/kind-bees-suffer.md +++ b/.changeset/kind-bees-suffer.md @@ -1,8 +1,31 @@ --- '@backstage/plugin-catalog-backend': minor '@backstage/plugin-permission-backend': minor +'@backstage/plugin-permission-common': minor '@backstage/plugin-permission-node': minor '@backstage/plugin-playlist-backend': minor --- -Permission rules now require a schema (ZodSchema) that details the parameters a rule expects. This is to validate the parameters given to a rule and to provide more details of a rule via the metadata endpoint +**BREAKING**: When defining permission rules, they must now also include a ZodSchema that details the parameters the rule expects. This has been added to help better describe the parameters in the response of the metadata endpoint and to validate the parameters before a rule is executed. + +To help with this, we have also made a change to the API of permission rules. Before, the permission rules `toQuery` and `apply` signature expected parameters to be seprate arguments, like so... + +```ts +createPermissionRule({ + apply: (resource, foo, bar) => true, + toQuery: (foo, bar) => {}, +}); +``` + +The API has now changed to expect the parameters as a single object + +```ts +createPermissionRule({ + schema: z.object({ + foo: z.string().describe('Foo value to match'), + bar: z.string().describe('Bar value to match'), + }), + apply: (resource, { foo, bar }) => true, + toQuery: ({ foo, bar }) => {}, +}); +``` From 708ff4761a26d76466f5ce6a91f7d163f6c571a9 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Mon, 3 Oct 2022 13:05:16 +0100 Subject: [PATCH 068/278] Explicitly type optional parameters so the definitions are accurate Signed-off-by: Harry Hogg --- .../src/permissions/rules/createPropertyRule.ts | 5 ++++- .../catalog-backend/src/permissions/rules/hasAnnotation.ts | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts b/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts index da487c112c..9ea67ec0b2 100644 --- a/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts +++ b/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts @@ -20,7 +20,10 @@ import { createCatalogPermissionRule } from './util'; import { z } from 'zod'; export const createPropertyRule = (propertyType: 'metadata' | 'spec') => - createCatalogPermissionRule({ + createCatalogPermissionRule<{ + key: string; + value?: string; + }>({ name: `HAS_${propertyType.toUpperCase()}`, description: `Allow entities which have the specified ${propertyType} subfield.`, resourceType: RESOURCE_TYPE_CATALOG_ENTITY, diff --git a/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts b/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts index 9651e9d925..28c99e39a1 100644 --- a/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts +++ b/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts @@ -26,7 +26,10 @@ import { createCatalogPermissionRule } from './util'; * * @alpha */ -export const hasAnnotation = createCatalogPermissionRule({ +export const hasAnnotation = createCatalogPermissionRule<{ + annotation: string; + value?: string; +}>({ name: 'HAS_ANNOTATION', description: 'Allow entities which are annotated with the specified annotation', From 2c37e5efe849ab9cd01e573978b97844c77010a3 Mon Sep 17 00:00:00 2001 From: Harrison Hogg <7130591+HHogg@users.noreply.github.com> Date: Mon, 3 Oct 2022 13:34:29 +0100 Subject: [PATCH 069/278] Update .changeset/kind-bees-suffer.md Co-authored-by: MT Lewis Signed-off-by: Harrison Hogg <7130591+HHogg@users.noreply.github.com> Signed-off-by: Harry Hogg --- .changeset/kind-bees-suffer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/kind-bees-suffer.md b/.changeset/kind-bees-suffer.md index 44bfdb6297..8e6e03d1bd 100644 --- a/.changeset/kind-bees-suffer.md +++ b/.changeset/kind-bees-suffer.md @@ -6,7 +6,7 @@ '@backstage/plugin-playlist-backend': minor --- -**BREAKING**: When defining permission rules, they must now also include a ZodSchema that details the parameters the rule expects. This has been added to help better describe the parameters in the response of the metadata endpoint and to validate the parameters before a rule is executed. +**BREAKING**: When defining permission rules, it's now necessary to provide a ZodSchema that specifies the parameters the rule expects. This has been added to help better describe the parameters in the response of the metadata endpoint and to validate the parameters before a rule is executed. To help with this, we have also made a change to the API of permission rules. Before, the permission rules `toQuery` and `apply` signature expected parameters to be seprate arguments, like so... From 7a3a0e3422760d53d49c88e0e7fa3c59bb5dcfdc Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Tue, 4 Oct 2022 08:59:05 +0100 Subject: [PATCH 070/278] Fixed typo in changeset Signed-off-by: Harry Hogg --- .changeset/kind-bees-suffer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/kind-bees-suffer.md b/.changeset/kind-bees-suffer.md index 8e6e03d1bd..372d7c1d86 100644 --- a/.changeset/kind-bees-suffer.md +++ b/.changeset/kind-bees-suffer.md @@ -8,7 +8,7 @@ **BREAKING**: When defining permission rules, it's now necessary to provide a ZodSchema that specifies the parameters the rule expects. This has been added to help better describe the parameters in the response of the metadata endpoint and to validate the parameters before a rule is executed. -To help with this, we have also made a change to the API of permission rules. Before, the permission rules `toQuery` and `apply` signature expected parameters to be seprate arguments, like so... +To help with this, we have also made a change to the API of permission rules. Before, the permission rules `toQuery` and `apply` signature expected parameters to be separate arguments, like so... ```ts createPermissionRule({ From 1d4b847c98ddecf4421c8a2f3827db45dcc8463a Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Tue, 4 Oct 2022 09:11:10 +0100 Subject: [PATCH 071/278] Explicitly use the schema to infer the types for the permission rule Signed-off-by: Harry Hogg --- .../integration/createPermissionIntegrationRouter.ts | 10 +--------- plugins/permission-node/src/types.ts | 12 ++++++++++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts index c5843f6a84..9bcc6c57eb 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts @@ -28,7 +28,7 @@ import { PermissionCondition, PermissionCriteria, } from '@backstage/plugin-permission-common'; -import { PermissionRule } from '../types'; +import { NoInfer, PermissionRule } from '../types'; import { createGetRule, isAndCriteria, @@ -135,14 +135,6 @@ const applyConditions = ( return rule.apply(resource, criteria.params); }; -/** - * Prevent use of type parameter from contributing to type inference. - * - * https://github.com/Microsoft/TypeScript/issues/14829#issuecomment-980401795 - * @ignore - */ -type NoInfer = T extends infer S ? S : never; - /** * Create an express Router which provides an authorization route to allow * integration between the permission backend and other Backstage backend diff --git a/plugins/permission-node/src/types.ts b/plugins/permission-node/src/types.ts index 02ebe07ac4..8725316de0 100644 --- a/plugins/permission-node/src/types.ts +++ b/plugins/permission-node/src/types.ts @@ -17,6 +17,14 @@ import type { PermissionCriteria } from '@backstage/plugin-permission-common'; import { z } from 'zod'; +/** + * Prevent use of type parameter from contributing to type inference. + * + * https://github.com/Microsoft/TypeScript/issues/14829#issuecomment-980401795 + * @ignore + */ +export type NoInfer = T extends infer S ? S : never; + /** * A conditional rule that can be provided in an * {@link @backstage/permission-common#AuthorizeDecision} response to an authorization request. @@ -57,12 +65,12 @@ export type PermissionRule< * arguments supplied for the rule; for example, a rule could be `isOwner` with entityRefs as the * params. */ - apply(resource: TResource, params: TParams): boolean; + apply(resource: TResource, params: NoInfer): boolean; /** * Translate this rule to criteria suitable for use in querying a backing data store. The criteria * can be used for loading a collection of resources efficiently with conditional criteria already * applied. */ - toQuery(params: TParams): PermissionCriteria; + toQuery(params: NoInfer): PermissionCriteria; }; From 755361681cea12a511843c2c6e1c3a00234c1e65 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Tue, 4 Oct 2022 09:12:05 +0100 Subject: [PATCH 072/278] Add explanation comment around the schema type and whay we need to remove the optional def for the schema Signed-off-by: Harry Hogg --- plugins/permission-node/src/types.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/permission-node/src/types.ts b/plugins/permission-node/src/types.ts index 8725316de0..521c8ac3ad 100644 --- a/plugins/permission-node/src/types.ts +++ b/plugins/permission-node/src/types.ts @@ -55,6 +55,10 @@ export type PermissionRule< * A ZodSchema that documents the parameters that this rule accepts. */ schema: z.ZodObject<{ + // Parameters can be optional, however we we want to make sure that the + // parameters are always present in the schema, even if they are undefined. + // We remove the optional flag from the schema, and then add it back in + // with an optional zod type. [P in keyof TParams]-?: TParams[P] extends undefined ? z.ZodOptionalType> : z.ZodType; From 42fa9cdcdbd2d5569de517fb0fb5b00a4045e6d8 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Tue, 4 Oct 2022 09:15:33 +0100 Subject: [PATCH 073/278] Removed the parameters count from the permissions metadata endpoint Signed-off-by: Harry Hogg --- .../src/integration/createPermissionIntegrationRouter.test.ts | 2 -- .../src/integration/createPermissionIntegrationRouter.ts | 3 --- 2 files changed, 5 deletions(-) diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts index 9c6b345faf..99e0da8287 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts @@ -618,7 +618,6 @@ describe('createPermissionIntegrationRouter', () => { required: ['foo', 'bar'], type: 'object', }, - parameters: { count: 1 }, }, { name: testRule2.name, @@ -638,7 +637,6 @@ describe('createPermissionIntegrationRouter', () => { required: ['foo'], type: 'object', }, - parameters: { count: 1 }, }, ], }); diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts index 9bcc6c57eb..7f355467c3 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts @@ -195,9 +195,6 @@ export const createPermissionIntegrationRouter = < description: rule.description, resourceType: rule.resourceType, schema: zodToJsonSchema(rule.schema), - parameters: { - count: rule.toQuery.length, - }, })); return res.json({ permissions, rules: serializableRules }); From 445c5f41a5464f8a7a6ab8c90c6ed1e34131b539 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Tue, 4 Oct 2022 09:34:16 +0100 Subject: [PATCH 074/278] Reworded and added missing parameter descriptions Signed-off-by: Harry Hogg --- .../src/permissions/rules/createPropertyRule.ts | 6 ++++-- .../catalog-backend/src/permissions/rules/hasAnnotation.ts | 4 ++-- plugins/catalog-backend/src/permissions/rules/hasLabel.ts | 2 +- .../catalog-backend/src/permissions/rules/isEntityKind.ts | 4 +++- .../catalog-backend/src/permissions/rules/isEntityOwner.ts | 6 +++++- plugins/permission-node/src/types.ts | 2 +- plugins/playlist-backend/src/permissions/rules.ts | 2 +- 7 files changed, 17 insertions(+), 9 deletions(-) diff --git a/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts b/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts index 9ea67ec0b2..5662b27d48 100644 --- a/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts +++ b/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts @@ -28,11 +28,13 @@ export const createPropertyRule = (propertyType: 'metadata' | 'spec') => description: `Allow entities which have the specified ${propertyType} subfield.`, resourceType: RESOURCE_TYPE_CATALOG_ENTITY, schema: z.object({ - key: z.string().describe(`The key of the ${propertyType} to match on`), + key: z + .string() + .describe(`Property within the entities ${propertyType} to match on`), value: z .string() .optional() - .describe(`Optional value of the ${propertyType} to match on`), + .describe(`Value of the given property to match on`), }), apply: (resource, { key, value }) => { const foundValue = get(resource[propertyType], key); diff --git a/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts b/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts index 28c99e39a1..0d80977c09 100644 --- a/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts +++ b/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts @@ -35,11 +35,11 @@ export const hasAnnotation = createCatalogPermissionRule<{ 'Allow entities which are annotated with the specified annotation', resourceType: RESOURCE_TYPE_CATALOG_ENTITY, schema: z.object({ - annotation: z.string().describe('The name of the annotation to match on'), + annotation: z.string().describe('Name of the annotation to match on'), value: z .string() .optional() - .describe('Optional value of the annotation to match on'), + .describe('Value of the annotation to match on'), }), apply: (resource, { annotation, value }) => !!resource.metadata.annotations?.hasOwnProperty(annotation) && diff --git a/plugins/catalog-backend/src/permissions/rules/hasLabel.ts b/plugins/catalog-backend/src/permissions/rules/hasLabel.ts index fbad7e42d0..6b7b9d9da0 100644 --- a/plugins/catalog-backend/src/permissions/rules/hasLabel.ts +++ b/plugins/catalog-backend/src/permissions/rules/hasLabel.ts @@ -28,7 +28,7 @@ export const hasLabel = createCatalogPermissionRule({ description: 'Allow entities which have the specified label metadata.', resourceType: RESOURCE_TYPE_CATALOG_ENTITY, schema: z.object({ - label: z.string().describe('Name of the label'), + label: z.string().describe('Name of the label to match one'), }), apply: (resource, { label }) => !!resource.metadata.labels?.hasOwnProperty(label), diff --git a/plugins/catalog-backend/src/permissions/rules/isEntityKind.ts b/plugins/catalog-backend/src/permissions/rules/isEntityKind.ts index 8c16f4c5a1..d64b357d9f 100644 --- a/plugins/catalog-backend/src/permissions/rules/isEntityKind.ts +++ b/plugins/catalog-backend/src/permissions/rules/isEntityKind.ts @@ -28,7 +28,9 @@ export const isEntityKind = createCatalogPermissionRule({ description: 'Allow entities with the specified kind', resourceType: RESOURCE_TYPE_CATALOG_ENTITY, schema: z.object({ - kinds: z.array(z.string()), + kinds: z + .array(z.string()) + .describe('List of kinds to match at least one of'), }), apply(resource, { kinds }) { const resourceKind = resource.kind.toLocaleLowerCase('en-US'); diff --git a/plugins/catalog-backend/src/permissions/rules/isEntityOwner.ts b/plugins/catalog-backend/src/permissions/rules/isEntityOwner.ts index 27431f09a7..824e5e9ca6 100644 --- a/plugins/catalog-backend/src/permissions/rules/isEntityOwner.ts +++ b/plugins/catalog-backend/src/permissions/rules/isEntityOwner.ts @@ -30,7 +30,11 @@ export const isEntityOwner = createCatalogPermissionRule({ description: 'Allow entities owned by the current user', resourceType: RESOURCE_TYPE_CATALOG_ENTITY, schema: z.object({ - claims: z.array(z.string()), + claims: z + .array(z.string()) + .describe( + `List of claims to match at least one on within ${RELATION_OWNED_BY}`, + ), }), apply: (resource, { claims }) => { if (!resource.relations) { diff --git a/plugins/permission-node/src/types.ts b/plugins/permission-node/src/types.ts index 521c8ac3ad..e69c1f3d78 100644 --- a/plugins/permission-node/src/types.ts +++ b/plugins/permission-node/src/types.ts @@ -61,7 +61,7 @@ export type PermissionRule< // with an optional zod type. [P in keyof TParams]-?: TParams[P] extends undefined ? z.ZodOptionalType> - : z.ZodType; + : z.ZodType; }>; /** diff --git a/plugins/playlist-backend/src/permissions/rules.ts b/plugins/playlist-backend/src/permissions/rules.ts index 897d2e19eb..79214b050d 100644 --- a/plugins/playlist-backend/src/permissions/rules.ts +++ b/plugins/playlist-backend/src/permissions/rules.ts @@ -36,7 +36,7 @@ const isOwner = createPlaylistPermissionRule<{ description: 'Should allow only if the playlist belongs to the user', resourceType: PLAYLIST_LIST_RESOURCE_TYPE, schema: z.object({ - owners: z.array(z.string().describe('List of owner entity refs')), + owners: z.array(z.string()).describe('List of owner entity refs'), }), apply: (list: PlaylistMetadata, { owners }) => owners.includes(list.owner), toQuery: ({ owners }) => ({ From fbc636c4a505ed96b2c8da41aed43eb561f4479b Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Tue, 4 Oct 2022 10:57:52 +0100 Subject: [PATCH 075/278] Use `z.input` to corrently type the input to correctly reflect optional fields Signed-off-by: Harry Hogg --- .../permissions/rules/createPropertyRule.ts | 5 +--- .../src/permissions/rules/hasAnnotation.ts | 5 +--- plugins/permission-node/src/types.ts | 23 ++++++++++--------- .../playlist-backend/src/permissions/rules.ts | 4 +--- 4 files changed, 15 insertions(+), 22 deletions(-) diff --git a/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts b/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts index 5662b27d48..29ce67ad53 100644 --- a/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts +++ b/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts @@ -20,10 +20,7 @@ import { createCatalogPermissionRule } from './util'; import { z } from 'zod'; export const createPropertyRule = (propertyType: 'metadata' | 'spec') => - createCatalogPermissionRule<{ - key: string; - value?: string; - }>({ + createCatalogPermissionRule({ name: `HAS_${propertyType.toUpperCase()}`, description: `Allow entities which have the specified ${propertyType} subfield.`, resourceType: RESOURCE_TYPE_CATALOG_ENTITY, diff --git a/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts b/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts index 0d80977c09..c8450f3d08 100644 --- a/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts +++ b/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts @@ -26,10 +26,7 @@ import { createCatalogPermissionRule } from './util'; * * @alpha */ -export const hasAnnotation = createCatalogPermissionRule<{ - annotation: string; - value?: string; -}>({ +export const hasAnnotation = createCatalogPermissionRule({ name: 'HAS_ANNOTATION', description: 'Allow entities which are annotated with the specified annotation', diff --git a/plugins/permission-node/src/types.ts b/plugins/permission-node/src/types.ts index e69c1f3d78..6d39d7f922 100644 --- a/plugins/permission-node/src/types.ts +++ b/plugins/permission-node/src/types.ts @@ -46,6 +46,15 @@ export type PermissionRule< TQuery, TResourceType extends string, TParams extends Record = Record, + TSchema extends z.ZodType = z.ZodObject<{ + // Parameters can be optional, however we we want to make sure that the + // parameters are always present in the schema, even if they are undefined. + // We remove the optional flag from the schema, and then add it back in + // with an optional zod type. + [P in keyof TParams]-?: TParams[P] extends undefined + ? z.ZodOptionalType> + : z.ZodType; + }>, > = { name: string; description: string; @@ -54,27 +63,19 @@ export type PermissionRule< /** * A ZodSchema that documents the parameters that this rule accepts. */ - schema: z.ZodObject<{ - // Parameters can be optional, however we we want to make sure that the - // parameters are always present in the schema, even if they are undefined. - // We remove the optional flag from the schema, and then add it back in - // with an optional zod type. - [P in keyof TParams]-?: TParams[P] extends undefined - ? z.ZodOptionalType> - : z.ZodType; - }>; + schema: TSchema; /** * Apply this rule to a resource already loaded from a backing data source. The params are * arguments supplied for the rule; for example, a rule could be `isOwner` with entityRefs as the * params. */ - apply(resource: TResource, params: NoInfer): boolean; + apply(resource: TResource, params: NoInfer>): boolean; /** * Translate this rule to criteria suitable for use in querying a backing data store. The criteria * can be used for loading a collection of resources efficiently with conditional criteria already * applied. */ - toQuery(params: NoInfer): PermissionCriteria; + toQuery(params: NoInfer>): PermissionCriteria; }; diff --git a/plugins/playlist-backend/src/permissions/rules.ts b/plugins/playlist-backend/src/permissions/rules.ts index 79214b050d..bebb7905b4 100644 --- a/plugins/playlist-backend/src/permissions/rules.ts +++ b/plugins/playlist-backend/src/permissions/rules.ts @@ -29,9 +29,7 @@ const createPlaylistPermissionRule = makeCreatePermissionRule< typeof PLAYLIST_LIST_RESOURCE_TYPE >(); -const isOwner = createPlaylistPermissionRule<{ - owners: string[]; -}>({ +const isOwner = createPlaylistPermissionRule({ name: 'IS_OWNER', description: 'Should allow only if the playlist belongs to the user', resourceType: PLAYLIST_LIST_RESOURCE_TYPE, From 4eb0f6d23dd02fe7a8f62e547f1997a22c761c3a Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Tue, 4 Oct 2022 11:39:46 +0100 Subject: [PATCH 076/278] Limited the permission rule parameters to JsonPrimatives and array of Signed-off-by: Harry Hogg --- .../src/permissions/rules/util.ts | 3 +- plugins/permission-common/package.json | 1 + .../permission-common/src/PermissionClient.ts | 2 +- plugins/permission-common/src/types/api.ts | 13 +++++- plugins/permission-common/src/types/index.ts | 2 + .../createConditionExports.test.ts | 6 +-- .../src/integration/createConditionFactory.ts | 10 ++++- .../createConditionTransformer.test.ts | 42 ++++++++----------- .../createPermissionIntegrationRouter.test.ts | 28 ++++++------- .../createPermissionIntegrationRouter.ts | 2 +- .../src/integration/createPermissionRule.ts | 5 ++- plugins/permission-node/src/types.ts | 7 +++- yarn.lock | 1 + 13 files changed, 70 insertions(+), 52 deletions(-) diff --git a/plugins/catalog-backend/src/permissions/rules/util.ts b/plugins/catalog-backend/src/permissions/rules/util.ts index 37544a14f8..ea25e115d2 100644 --- a/plugins/catalog-backend/src/permissions/rules/util.ts +++ b/plugins/catalog-backend/src/permissions/rules/util.ts @@ -16,6 +16,7 @@ import { Entity } from '@backstage/catalog-model'; import { RESOURCE_TYPE_CATALOG_ENTITY } from '@backstage/plugin-catalog-common'; +import { PermissionRuleParams } from '@backstage/plugin-permission-common'; import { makeCreatePermissionRule, PermissionRule, @@ -30,7 +31,7 @@ import { EntitiesSearchFilter } from '../../catalog/types'; * @alpha */ export type CatalogPermissionRule< - TParams extends Record = Record, + TParams extends PermissionRuleParams = PermissionRuleParams, > = PermissionRule; /** diff --git a/plugins/permission-common/package.json b/plugins/permission-common/package.json index fcf1c47ea6..4c31ecc673 100644 --- a/plugins/permission-common/package.json +++ b/plugins/permission-common/package.json @@ -43,6 +43,7 @@ "dependencies": { "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", + "@backstage/types": "workspace:^", "cross-fetch": "^3.1.5", "uuid": "^8.0.0", "zod": "^3.11.6" diff --git a/plugins/permission-common/src/PermissionClient.ts b/plugins/permission-common/src/PermissionClient.ts index 7b429dc46f..c5f56be159 100644 --- a/plugins/permission-common/src/PermissionClient.ts +++ b/plugins/permission-common/src/PermissionClient.ts @@ -41,7 +41,7 @@ const permissionCriteriaSchema: z.ZodSchema< .object({ rule: z.string(), resourceType: z.string(), - params: z.record(z.unknown()), + params: z.record(z.any()), }) .or(z.object({ anyOf: z.array(permissionCriteriaSchema).nonempty() })) .or(z.object({ allOf: z.array(permissionCriteriaSchema).nonempty() })) diff --git a/plugins/permission-common/src/types/api.ts b/plugins/permission-common/src/types/api.ts index 70b9e902b8..ca915a65da 100644 --- a/plugins/permission-common/src/types/api.ts +++ b/plugins/permission-common/src/types/api.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import { JsonPrimitive } from '@backstage/types'; import { ResourcePermission } from '.'; import { Permission } from './permission'; @@ -101,7 +102,7 @@ export type PolicyDecision = */ export type PermissionCondition< TResourceType extends string = string, - TParams extends Record = Record, + TParams extends PermissionRuleParams = PermissionRuleParams, > = { resourceType: TResourceType; rule: string; @@ -148,6 +149,16 @@ export type PermissionCriteria = | NotCriteria | TQuery; +/** + * A parameter to a permission rule. + */ +export type PermissionRuleParam = undefined | JsonPrimitive | JsonPrimitive[]; + +/** + * Types that can be used as parameters to permission rules. + */ +export type PermissionRuleParams = Record; + /** * An individual request sent to the permission backend. * @public diff --git a/plugins/permission-common/src/types/index.ts b/plugins/permission-common/src/types/index.ts index f244a70b1a..5702f47c1c 100644 --- a/plugins/permission-common/src/types/index.ts +++ b/plugins/permission-common/src/types/index.ts @@ -33,6 +33,8 @@ export type { PolicyDecision, PermissionCondition, PermissionCriteria, + PermissionRuleParam, + PermissionRuleParams, AllOfCriteria, AnyOfCriteria, NotCriteria, diff --git a/plugins/permission-node/src/integration/createConditionExports.test.ts b/plugins/permission-node/src/integration/createConditionExports.test.ts index a989206fdd..59639f5119 100644 --- a/plugins/permission-node/src/integration/createConditionExports.test.ts +++ b/plugins/permission-node/src/integration/createConditionExports.test.ts @@ -46,7 +46,7 @@ const testIntegration = () => description: 'Test rule 2', resourceType: 'test-resource', schema: z.object({ - foo: z.object({}), + foo: z.string(), }), apply: (_resource: any) => false, toQuery: params => ({ @@ -76,11 +76,11 @@ describe('createConditionExports', () => { }, }); - expect(conditions.testRule2({ foo: { baz: 'quux' } })).toEqual({ + expect(conditions.testRule2({ foo: 'baz' })).toEqual({ rule: 'testRule2', resourceType: 'test-resource', params: { - foo: { baz: 'quux' }, + foo: 'baz', }, }); }); diff --git a/plugins/permission-node/src/integration/createConditionFactory.ts b/plugins/permission-node/src/integration/createConditionFactory.ts index 5b499ab512..8edeb6230f 100644 --- a/plugins/permission-node/src/integration/createConditionFactory.ts +++ b/plugins/permission-node/src/integration/createConditionFactory.ts @@ -14,7 +14,10 @@ * limitations under the License. */ -import { PermissionCondition } from '@backstage/plugin-permission-common'; +import { + PermissionCondition, + PermissionRuleParams, +} from '@backstage/plugin-permission-common'; import { PermissionRule } from '../types'; /** @@ -34,7 +37,10 @@ import { PermissionRule } from '../types'; * @public */ export const createConditionFactory = - >( + < + TResourceType extends string, + TParams extends PermissionRuleParams = PermissionRuleParams, + >( rule: PermissionRule, ) => (params: TParams): PermissionCondition => ({ diff --git a/plugins/permission-node/src/integration/createConditionTransformer.test.ts b/plugins/permission-node/src/integration/createConditionTransformer.test.ts index 5021b7766d..0544ff3ef8 100644 --- a/plugins/permission-node/src/integration/createConditionTransformer.test.ts +++ b/plugins/permission-node/src/integration/createConditionTransformer.test.ts @@ -39,10 +39,10 @@ const transformConditions = createConditionTransformer([ description: 'Test rule 2', resourceType: 'test-resource', schema: z.object({ - foo: z.object({}), + foo: z.string(), }), apply: jest.fn(), - toQuery: jest.fn(({ foo }) => `test-rule-2:${JSON.stringify(foo)}`), + toQuery: jest.fn(({ foo }) => `test-rule-2:${foo}`), }), ]); @@ -67,10 +67,10 @@ describe('createConditionTransformer', () => { rule: 'test-rule-2', resourceType: 'test-resource', params: { - foo: { foo: 0 }, + foo: '0', }, }, - expectedResult: 'test-rule-2:{"foo":0}', + expectedResult: 'test-rule-2:0', }, { conditions: { @@ -87,13 +87,13 @@ describe('createConditionTransformer', () => { rule: 'test-rule-2', resourceType: 'test-resource', params: { - foo: {}, + foo: 'b', }, }, ], }, expectedResult: { - anyOf: ['test-rule-1:a/1', 'test-rule-2:{}'], + anyOf: ['test-rule-1:a/1', 'test-rule-2:b'], }, }, { @@ -111,13 +111,13 @@ describe('createConditionTransformer', () => { rule: 'test-rule-2', resourceType: 'test-resource', params: { - foo: {}, + foo: 'b', }, }, ], }, expectedResult: { - allOf: ['test-rule-1:a/1', 'test-rule-2:{}'], + allOf: ['test-rule-1:a/1', 'test-rule-2:b'], }, }, { @@ -126,12 +126,12 @@ describe('createConditionTransformer', () => { rule: 'test-rule-2', resourceType: 'test-resource', params: { - foo: {}, + foo: 'a', }, }, }, expectedResult: { - not: 'test-rule-2:{}', + not: 'test-rule-2:a', }, }, { @@ -151,7 +151,7 @@ describe('createConditionTransformer', () => { rule: 'test-rule-2', resourceType: 'test-resource', params: { - foo: {}, + foo: 'b', }, }, ], @@ -171,9 +171,7 @@ describe('createConditionTransformer', () => { rule: 'test-rule-2', resourceType: 'test-resource', params: { - foo: { - c: 3, - }, + foo: 'c', }, }, ], @@ -184,11 +182,11 @@ describe('createConditionTransformer', () => { expectedResult: { allOf: [ { - anyOf: ['test-rule-1:a/1', 'test-rule-2:{}'], + anyOf: ['test-rule-1:a/1', 'test-rule-2:b'], }, { not: { - allOf: ['test-rule-1:b/2', 'test-rule-2:{"c":3}'], + allOf: ['test-rule-1:b/2', 'test-rule-2:c'], }, }, ], @@ -211,9 +209,7 @@ describe('createConditionTransformer', () => { rule: 'test-rule-2', resourceType: 'test-resource', params: { - foo: { - b: 2, - }, + foo: 'b', }, }, ], @@ -234,9 +230,7 @@ describe('createConditionTransformer', () => { rule: 'test-rule-2', resourceType: 'test-resource', params: { - foo: { - d: 4, - }, + foo: 'd', }, }, }, @@ -248,11 +242,11 @@ describe('createConditionTransformer', () => { expectedResult: { allOf: [ { - anyOf: ['test-rule-1:a/1', 'test-rule-2:{"b":2}'], + anyOf: ['test-rule-1:a/1', 'test-rule-2:b'], }, { not: { - allOf: ['test-rule-1:c/3', { not: 'test-rule-2:{"d":4}' }], + allOf: ['test-rule-1:c/3', { not: 'test-rule-2:d' }], }, }, ], diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts index 99e0da8287..adfa57b863 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts @@ -53,7 +53,7 @@ const testRule2 = createPermissionRule({ description: 'Test rule 2', resourceType: 'test-resource', schema: z.object({ - foo: z.object({}).describe('foo'), + foo: z.string().describe('foo'), }), apply: (_resource: any, _foo) => false, toQuery: _foo => ({}), @@ -105,7 +105,7 @@ describe('createPermissionIntegrationRouter', () => { { rule: 'test-rule-2', resourceType: 'test-resource', - params: { foo: {} }, + params: { foo: 'b' }, }, ], }, @@ -114,7 +114,7 @@ describe('createPermissionIntegrationRouter', () => { rule: 'test-rule-2', resourceType: 'test-resource', params: { - foo: {}, + foo: 'c', }, }, }, @@ -134,7 +134,7 @@ describe('createPermissionIntegrationRouter', () => { rule: 'test-rule-2', resourceType: 'test-resource', params: { - foo: {}, + foo: 'b', }, }, ], @@ -154,7 +154,7 @@ describe('createPermissionIntegrationRouter', () => { rule: 'test-rule-2', resourceType: 'test-resource', params: { - foo: { c: 3 }, + foo: 'c', }, }, ], @@ -192,7 +192,7 @@ describe('createPermissionIntegrationRouter', () => { rule: 'test-rule-2', resourceType: 'test-resource', params: { - foo: { foo: 0 }, + foo: 'a', }, }, { @@ -208,7 +208,7 @@ describe('createPermissionIntegrationRouter', () => { { rule: 'test-rule-2', resourceType: 'test-resource', - params: { foo: {} }, + params: { foo: 'b' }, }, ], }, @@ -228,7 +228,7 @@ describe('createPermissionIntegrationRouter', () => { rule: 'test-rule-2', resourceType: 'test-resource', params: { - foo: { b: 2 }, + foo: 'b', }, }, ], @@ -249,7 +249,7 @@ describe('createPermissionIntegrationRouter', () => { rule: 'test-rule-2', resourceType: 'test-resource', params: { - foo: { d: 4 }, + foo: 'd', }, }, }, @@ -310,7 +310,7 @@ describe('createPermissionIntegrationRouter', () => { rule: 'test-rule-2', resourceType: 'test-resource', params: { - foo: {}, + foo: 'b', }, }, }, @@ -338,7 +338,7 @@ describe('createPermissionIntegrationRouter', () => { rule: 'test-rule-2', resourceType: 'test-resource', params: { - foo: {}, + foo: 'c', }, }, }, @@ -361,7 +361,7 @@ describe('createPermissionIntegrationRouter', () => { rule: 'test-rule-2', resourceType: 'test-resource', params: { - foo: {}, + foo: 'd', }, }, ], @@ -628,10 +628,8 @@ describe('createPermissionIntegrationRouter', () => { additionalProperties: false, properties: { foo: { - additionalProperties: false, description: 'foo', - properties: {}, - type: 'object', + type: 'string', }, }, required: ['foo'], diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts index 7f355467c3..a01006c194 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts @@ -46,7 +46,7 @@ const permissionCriteriaSchema: z.ZodSchema< z.object({ rule: z.string(), resourceType: z.string(), - params: z.record(z.unknown()), + params: z.record(z.any()), }), ]), ); diff --git a/plugins/permission-node/src/integration/createPermissionRule.ts b/plugins/permission-node/src/integration/createPermissionRule.ts index ef84a5a26f..ea2e37a671 100644 --- a/plugins/permission-node/src/integration/createPermissionRule.ts +++ b/plugins/permission-node/src/integration/createPermissionRule.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import { PermissionRuleParams } from '@backstage/plugin-permission-common'; import { PermissionRule } from '../types'; /** @@ -25,7 +26,7 @@ export const createPermissionRule = < TResource, TQuery, TResourceType extends string, - TParams extends Record, + TParams extends PermissionRuleParams = PermissionRuleParams, >( rule: PermissionRule, ) => rule; @@ -40,7 +41,7 @@ export const createPermissionRule = < */ export const makeCreatePermissionRule = () => - >( + ( rule: PermissionRule, ) => createPermissionRule(rule); diff --git a/plugins/permission-node/src/types.ts b/plugins/permission-node/src/types.ts index 6d39d7f922..34ff52391a 100644 --- a/plugins/permission-node/src/types.ts +++ b/plugins/permission-node/src/types.ts @@ -14,7 +14,10 @@ * limitations under the License. */ -import type { PermissionCriteria } from '@backstage/plugin-permission-common'; +import type { + PermissionCriteria, + PermissionRuleParams, +} from '@backstage/plugin-permission-common'; import { z } from 'zod'; /** @@ -45,7 +48,7 @@ export type PermissionRule< TResource, TQuery, TResourceType extends string, - TParams extends Record = Record, + TParams extends PermissionRuleParams = PermissionRuleParams, TSchema extends z.ZodType = z.ZodObject<{ // Parameters can be optional, however we we want to make sure that the // parameters are always present in the schema, even if they are undefined. diff --git a/yarn.lock b/yarn.lock index bef0e188c6..168ca96586 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6334,6 +6334,7 @@ __metadata: "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" + "@backstage/types": "workspace:^" cross-fetch: ^3.1.5 msw: ^0.47.0 uuid: ^8.0.0 From 1ad9969a0f61eb8b973fe7e13a3871a61be87263 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Tue, 4 Oct 2022 11:44:06 +0100 Subject: [PATCH 077/278] Updated changeset to include the new limitation of permission params types Signed-off-by: Harry Hogg --- .changeset/kind-bees-suffer.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.changeset/kind-bees-suffer.md b/.changeset/kind-bees-suffer.md index 372d7c1d86..528d06394e 100644 --- a/.changeset/kind-bees-suffer.md +++ b/.changeset/kind-bees-suffer.md @@ -29,3 +29,5 @@ createPermissionRule({ toQuery: ({ foo, bar }) => {}, }); ``` + +One final change made is to limit the possible values for a parameter to primitives and arrays of primitives. From 5a8a8010eed7ca81fdd31c2bba5ae998ac2980d9 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Tue, 4 Oct 2022 12:08:38 +0100 Subject: [PATCH 078/278] Removed plugin-permission-backend from changeset Signed-off-by: Harry Hogg --- .changeset/kind-bees-suffer.md | 1 - 1 file changed, 1 deletion(-) diff --git a/.changeset/kind-bees-suffer.md b/.changeset/kind-bees-suffer.md index 528d06394e..41c9874590 100644 --- a/.changeset/kind-bees-suffer.md +++ b/.changeset/kind-bees-suffer.md @@ -1,6 +1,5 @@ --- '@backstage/plugin-catalog-backend': minor -'@backstage/plugin-permission-backend': minor '@backstage/plugin-permission-common': minor '@backstage/plugin-permission-node': minor '@backstage/plugin-playlist-backend': minor From 26e5513c32ecf334364beb7d369a570cb756158c Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Tue, 4 Oct 2022 12:50:08 +0100 Subject: [PATCH 079/278] Update API reports Signed-off-by: Harry Hogg --- plugins/catalog-backend/api-report.md | 66 ++++++++++++++----- plugins/permission-common/api-report.md | 9 ++- plugins/permission-common/src/types/api.ts | 4 ++ plugins/permission-node/api-report.md | 44 +++++++++---- .../createPermissionIntegrationRouter.ts | 3 +- .../permission-node/src/integration/util.ts | 8 +++ plugins/permission-node/src/types.ts | 37 ++++++----- plugins/playlist-backend/api-report.md | 9 ++- 8 files changed, 130 insertions(+), 50 deletions(-) diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index f18d396114..ea9b0b2277 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -40,6 +40,7 @@ import { PermissionCondition } from '@backstage/plugin-permission-common'; import { PermissionCriteria } from '@backstage/plugin-permission-common'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; import { PermissionRule } from '@backstage/plugin-permission-node'; +import { PermissionRuleParams } from '@backstage/plugin-permission-common'; import { PluginDatabaseManager } from '@backstage/backend-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { processingResult } from '@backstage/plugin-catalog-node'; @@ -177,37 +178,52 @@ export const catalogConditions: Conditions<{ Entity, EntitiesSearchFilter, 'catalog-entity', - [annotation: string, value?: string | undefined] + { + annotation: string; + value: string | undefined; + } >; hasLabel: PermissionRule< Entity, EntitiesSearchFilter, 'catalog-entity', - [label: string] + { + label: string; + } >; hasMetadata: PermissionRule< Entity, EntitiesSearchFilter, 'catalog-entity', - [key: string, value?: string | undefined] + { + key: string; + value: string | undefined; + } >; hasSpec: PermissionRule< Entity, EntitiesSearchFilter, 'catalog-entity', - [key: string, value?: string | undefined] + { + key: string; + value: string | undefined; + } >; isEntityKind: PermissionRule< Entity, EntitiesSearchFilter, 'catalog-entity', - [kinds: string[]] + { + kinds: string[]; + } >; isEntityOwner: PermissionRule< Entity, EntitiesSearchFilter, 'catalog-entity', - [claims: string[]] + { + claims: string[]; + } >; }>; @@ -221,8 +237,9 @@ export type CatalogEnvironment = { }; // @alpha -export type CatalogPermissionRule = - PermissionRule; +export type CatalogPermissionRule< + TParams extends PermissionRuleParams = PermissionRuleParams, +> = PermissionRule; // @alpha export const catalogPlugin: (options?: undefined) => BackendFeature; @@ -280,12 +297,14 @@ export class CodeOwnersProcessor implements CatalogProcessor { export const createCatalogConditionalDecision: ( permission: ResourcePermission<'catalog-entity'>, conditions: PermissionCriteria< - PermissionCondition<'catalog-entity', unknown[]> + PermissionCondition<'catalog-entity', PermissionRuleParams> >, ) => ConditionalPolicyDecision; // @alpha -export const createCatalogPermissionRule: ( +export const createCatalogPermissionRule: < + TParams extends PermissionRuleParams = PermissionRuleParams, +>( rule: PermissionRule, ) => PermissionRule; @@ -448,37 +467,52 @@ export const permissionRules: { Entity, EntitiesSearchFilter, 'catalog-entity', - [annotation: string, value?: string | undefined] + { + annotation: string; + value: string | undefined; + } >; hasLabel: PermissionRule< Entity, EntitiesSearchFilter, 'catalog-entity', - [label: string] + { + label: string; + } >; hasMetadata: PermissionRule< Entity, EntitiesSearchFilter, 'catalog-entity', - [key: string, value?: string | undefined] + { + key: string; + value: string | undefined; + } >; hasSpec: PermissionRule< Entity, EntitiesSearchFilter, 'catalog-entity', - [key: string, value?: string | undefined] + { + key: string; + value: string | undefined; + } >; isEntityKind: PermissionRule< Entity, EntitiesSearchFilter, 'catalog-entity', - [kinds: string[]] + { + kinds: string[]; + } >; isEntityOwner: PermissionRule< Entity, EntitiesSearchFilter, 'catalog-entity', - [claims: string[]] + { + claims: string[]; + } >; }; diff --git a/plugins/permission-common/api-report.md b/plugins/permission-common/api-report.md index c0c351d6cd..b51b82c907 100644 --- a/plugins/permission-common/api-report.md +++ b/plugins/permission-common/api-report.md @@ -4,6 +4,7 @@ ```ts import { Config } from '@backstage/config'; +import { JsonPrimitive } from '@backstage/types'; // @public export type AllOfCriteria = { @@ -172,7 +173,7 @@ export class PermissionClient implements PermissionEvaluator { // @public export type PermissionCondition< TResourceType extends string = string, - TParams extends unknown[] = unknown[], + TParams extends PermissionRuleParams = PermissionRuleParams, > = { resourceType: TResourceType; rule: string; @@ -203,6 +204,12 @@ export type PermissionMessageBatch = { items: IdentifiedPermissionMessage[]; }; +// @public +export type PermissionRuleParam = undefined | JsonPrimitive | JsonPrimitive[]; + +// @public +export type PermissionRuleParams = Record; + // @public export type PolicyDecision = | DefinitivePolicyDecision diff --git a/plugins/permission-common/src/types/api.ts b/plugins/permission-common/src/types/api.ts index ca915a65da..77d6206c07 100644 --- a/plugins/permission-common/src/types/api.ts +++ b/plugins/permission-common/src/types/api.ts @@ -151,11 +151,15 @@ export type PermissionCriteria = /** * A parameter to a permission rule. + * + * @public */ export type PermissionRuleParam = undefined | JsonPrimitive | JsonPrimitive[]; /** * Types that can be used as parameters to permission rules. + * + * @public */ export type PermissionRuleParams = Record; diff --git a/plugins/permission-node/api-report.md b/plugins/permission-node/api-report.md index 055325f5a7..5168eefebc 100644 --- a/plugins/permission-node/api-report.md +++ b/plugins/permission-node/api-report.md @@ -19,6 +19,7 @@ import { Permission } from '@backstage/plugin-permission-common'; import { PermissionCondition } from '@backstage/plugin-permission-common'; import { PermissionCriteria } from '@backstage/plugin-permission-common'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; +import { PermissionRuleParams } from '@backstage/plugin-permission-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { PolicyDecision } from '@backstage/plugin-permission-common'; import { QueryPermissionRequest } from '@backstage/plugin-permission-common'; @@ -54,7 +55,7 @@ export type Condition = TRule extends PermissionRule< infer TResourceType, infer TParams > - ? (...params: TParams) => PermissionCondition + ? (params: TParams) => PermissionCondition : never; // @public @@ -75,7 +76,7 @@ export const createConditionExports: < TResource, TRules extends Record< string, - PermissionRule + PermissionRule >, >(options: { pluginId: string; @@ -86,7 +87,7 @@ export const createConditionExports: < createConditionalDecision: ( permission: ResourcePermission, conditions: PermissionCriteria< - PermissionCondition + PermissionCondition >, ) => ConditionalPolicyDecision; }; @@ -94,15 +95,15 @@ export const createConditionExports: < // @public export const createConditionFactory: < TResourceType extends string, - TParams extends any[], + TParams extends PermissionRuleParams = PermissionRuleParams, >( rule: PermissionRule, -) => (...params: TParams) => PermissionCondition; +) => (params: TParams) => PermissionCondition; // @public export const createConditionTransformer: < TQuery, - TRules extends PermissionRule[], + TRules extends PermissionRule[], >( permissionRules: [...TRules], ) => ConditionTransformer; @@ -114,7 +115,12 @@ export const createPermissionIntegrationRouter: < >(options: { resourceType: TResourceType; permissions?: Permission[] | undefined; - rules: PermissionRule, unknown[]>[]; + rules: PermissionRule< + TResource, + any, + NoInfer, + PermissionRuleParams + >[]; getResources: (resourceRefs: string[]) => Promise<(TResource | undefined)[]>; }) => express.Router; @@ -123,7 +129,7 @@ export const createPermissionRule: < TResource, TQuery, TResourceType extends string, - TParams extends unknown[], + TParams extends PermissionRuleParams = PermissionRuleParams, >( rule: PermissionRule, ) => PermissionRule; @@ -148,7 +154,7 @@ export const makeCreatePermissionRule: < TResource, TQuery, TResourceType extends string, ->() => ( +>() => ( rule: PermissionRule, ) => PermissionRule; @@ -166,16 +172,28 @@ export type PermissionRule< TResource, TQuery, TResourceType extends string, - TParams extends unknown[] = unknown[], + TParams extends PermissionRuleParams = PermissionRuleParams, > = { name: string; description: string; resourceType: TResourceType; - schema: z.ZodSchema; - apply(resource: TResource, ...params: TParams): boolean; - toQuery(...params: TParams): PermissionCriteria; + schema: PermissionRuleSchema; + apply( + resource: TResource, + params: NoInfer>>, + ): boolean; + toQuery( + params: NoInfer>>, + ): PermissionCriteria; }; +// @public +export type PermissionRuleSchema = z.ZodObject<{ + [P in keyof TParams]-?: TParams[P] extends undefined + ? z.ZodOptionalType> + : z.ZodType; +}>; + // @public export type PolicyQuery = { permission: Permission; diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts index a01006c194..4f98597e6c 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts @@ -28,8 +28,9 @@ import { PermissionCondition, PermissionCriteria, } from '@backstage/plugin-permission-common'; -import { NoInfer, PermissionRule } from '../types'; +import { PermissionRule } from '../types'; import { + NoInfer, createGetRule, isAndCriteria, isNotCriteria, diff --git a/plugins/permission-node/src/integration/util.ts b/plugins/permission-node/src/integration/util.ts index 68b7fff2b8..e448068e17 100644 --- a/plugins/permission-node/src/integration/util.ts +++ b/plugins/permission-node/src/integration/util.ts @@ -22,6 +22,14 @@ import { } from '@backstage/plugin-permission-common'; import { PermissionRule } from '../types'; +/** + * Prevent use of type parameter from contributing to type inference. + * + * https://github.com/Microsoft/TypeScript/issues/14829#issuecomment-980401795 + * @ignore + */ +export type NoInfer = T extends infer S ? S : never; + /** * Utility function used to parse a PermissionCriteria * @param criteria - a PermissionCriteria diff --git a/plugins/permission-node/src/types.ts b/plugins/permission-node/src/types.ts index 34ff52391a..b16c0cac32 100644 --- a/plugins/permission-node/src/types.ts +++ b/plugins/permission-node/src/types.ts @@ -19,14 +19,23 @@ import type { PermissionRuleParams, } from '@backstage/plugin-permission-common'; import { z } from 'zod'; +import { NoInfer } from './integration/util'; /** - * Prevent use of type parameter from contributing to type inference. + * A ZodSchema that reflects the structure of the parameters that are passed to + * into a {@link PermissionRule}. * - * https://github.com/Microsoft/TypeScript/issues/14829#issuecomment-980401795 - * @ignore + * @public */ -export type NoInfer = T extends infer S ? S : never; +export type PermissionRuleSchema = z.ZodObject<{ + // Parameters can be optional, however we we want to make sure that the + // parameters are always present in the schema, even if they are undefined. + // We remove the optional flag from the schema, and then add it back in + // with an optional zod type. + [P in keyof TParams]-?: TParams[P] extends undefined + ? z.ZodOptionalType> + : z.ZodType; +}>; /** * A conditional rule that can be provided in an @@ -49,15 +58,6 @@ export type PermissionRule< TQuery, TResourceType extends string, TParams extends PermissionRuleParams = PermissionRuleParams, - TSchema extends z.ZodType = z.ZodObject<{ - // Parameters can be optional, however we we want to make sure that the - // parameters are always present in the schema, even if they are undefined. - // We remove the optional flag from the schema, and then add it back in - // with an optional zod type. - [P in keyof TParams]-?: TParams[P] extends undefined - ? z.ZodOptionalType> - : z.ZodType; - }>, > = { name: string; description: string; @@ -66,19 +66,24 @@ export type PermissionRule< /** * A ZodSchema that documents the parameters that this rule accepts. */ - schema: TSchema; + schema: PermissionRuleSchema; /** * Apply this rule to a resource already loaded from a backing data source. The params are * arguments supplied for the rule; for example, a rule could be `isOwner` with entityRefs as the * params. */ - apply(resource: TResource, params: NoInfer>): boolean; + apply( + resource: TResource, + params: NoInfer>>, + ): boolean; /** * Translate this rule to criteria suitable for use in querying a backing data store. The criteria * can be used for loading a collection of resources efficiently with conditional criteria already * applied. */ - toQuery(params: NoInfer>): PermissionCriteria; + toQuery( + params: NoInfer>>, + ): PermissionCriteria; }; diff --git a/plugins/playlist-backend/api-report.md b/plugins/playlist-backend/api-report.md index c7109efbfb..faae97a734 100644 --- a/plugins/playlist-backend/api-report.md +++ b/plugins/playlist-backend/api-report.md @@ -15,6 +15,7 @@ import { PermissionCriteria } from '@backstage/plugin-permission-common'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; import { PermissionPolicy } from '@backstage/plugin-permission-node'; import { PermissionRule } from '@backstage/plugin-permission-node'; +import { PermissionRuleParams } from '@backstage/plugin-permission-common'; import { PlaylistMetadata } from '@backstage/plugin-playlist-common'; import { PluginDatabaseManager } from '@backstage/backend-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; @@ -26,7 +27,7 @@ import { ResourcePermission } from '@backstage/plugin-permission-common'; export const createPlaylistConditionalDecision: ( permission: ResourcePermission<'playlist-list'>, conditions: PermissionCriteria< - PermissionCondition<'playlist-list', unknown[]> + PermissionCondition<'playlist-list', PermissionRuleParams> >, ) => ConditionalPolicyDecision; @@ -70,13 +71,15 @@ export const playlistConditions: Conditions<{ PlaylistMetadata, ListPlaylistsFilter, 'playlist-list', - [userOwnershipRefs: string[]] + { + owners: string[]; + } >; isPublic: PermissionRule< PlaylistMetadata, ListPlaylistsFilter, 'playlist-list', - [] + PermissionRuleParams >; }>; From 5e8c2682fe307e2f8eb197c026d00f065376a841 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Wed, 5 Oct 2022 13:39:19 +0200 Subject: [PATCH 080/278] move types to catalog-common Signed-off-by: Kiss Miklos --- .../src/ingestion/LocationAnalyzer.ts | 5 +- .../catalog-backend/src/ingestion/index.ts | 5 -- .../catalog-backend/src/ingestion/types.ts | 78 ++-------------- plugins/catalog-common/package.json | 2 + plugins/catalog-common/src/index.ts | 1 + .../src/ingestion/LocationAnalyzer.ts | 88 +++++++++++++++++++ .../src/ingestion/RecursivePartial.test.ts | 31 +++++++ .../src/ingestion/RecursivePartial.ts | 27 ++++++ plugins/catalog-common/src/ingestion/index.ts | 21 +++++ plugins/catalog-import/package.json | 2 +- .../src/api/CatalogImportClient.ts | 2 +- yarn.lock | 4 +- 12 files changed, 182 insertions(+), 84 deletions(-) create mode 100644 plugins/catalog-common/src/ingestion/LocationAnalyzer.ts create mode 100644 plugins/catalog-common/src/ingestion/RecursivePartial.test.ts create mode 100644 plugins/catalog-common/src/ingestion/RecursivePartial.ts create mode 100644 plugins/catalog-common/src/ingestion/index.ts diff --git a/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts b/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts index 3dc08a81c3..761a0f8c0a 100644 --- a/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts +++ b/plugins/catalog-backend/src/ingestion/LocationAnalyzer.ts @@ -18,12 +18,11 @@ import { Logger } from 'winston'; import parseGitUrl from 'git-url-parse'; import { Entity } from '@backstage/catalog-model'; import { ScmIntegrationRegistry } from '@backstage/integration'; +import { LocationAnalyzer, ScmLocationAnalyzer } from './types'; import { AnalyzeLocationRequest, AnalyzeLocationResponse, - LocationAnalyzer, - ScmLocationAnalyzer, -} from './types'; +} from '@backstage/plugin-catalog-common'; export class RepoLocationAnalyzer implements LocationAnalyzer { private readonly logger: Logger; diff --git a/plugins/catalog-backend/src/ingestion/index.ts b/plugins/catalog-backend/src/ingestion/index.ts index 0b00809043..0fc71f6785 100644 --- a/plugins/catalog-backend/src/ingestion/index.ts +++ b/plugins/catalog-backend/src/ingestion/index.ts @@ -15,11 +15,6 @@ */ export type { - AnalyzeLocationEntityField, - AnalyzeLocationExistingEntity, - AnalyzeLocationGenerateEntity, - AnalyzeLocationRequest, - AnalyzeLocationResponse, LocationAnalyzer, ScmLocationAnalyzer, AnalyzeOptions, diff --git a/plugins/catalog-backend/src/ingestion/types.ts b/plugins/catalog-backend/src/ingestion/types.ts index c5237af6d3..c6a480a7f5 100644 --- a/plugins/catalog-backend/src/ingestion/types.ts +++ b/plugins/catalog-backend/src/ingestion/types.ts @@ -13,10 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -import { Entity } from '@backstage/catalog-model'; -import { RecursivePartial } from '../util/RecursivePartial'; -import { LocationSpec } from '@backstage/plugin-catalog-node'; +import { + AnalyzeLocationResponse, + AnalyzeLocationRequest, + AnalyzeLocationExistingEntity, +} from '@backstage/plugin-catalog-common'; /** @public */ export type LocationAnalyzer = { @@ -31,75 +32,6 @@ export type LocationAnalyzer = { ): Promise; }; -/** @public */ -export type AnalyzeLocationRequest = { - location: LocationSpec; - catalogFilename?: string; -}; - -/** @public */ -export type AnalyzeLocationResponse = { - existingEntityFiles: AnalyzeLocationExistingEntity[]; - generateEntities: AnalyzeLocationGenerateEntity[]; -}; - -/** - * If the folder pointed to already contained catalog info yaml files, they are - * read and emitted like this so that the frontend can inform the user that it - * located them and can make sure to register them as well if they weren't - * already - * @public - */ -export type AnalyzeLocationExistingEntity = { - location: LocationSpec; - isRegistered: boolean; - entity: Entity; -}; - -/** - * This is some form of representation of what the analyzer could deduce. - * We should probably have a chat about how this can best be conveyed to - * the frontend. It'll probably contain a (possibly incomplete) entity, plus - * enough info for the frontend to know what form data to show to the user - * for overriding/completing the info. - * @public - */ -export type AnalyzeLocationGenerateEntity = { - // Some form of partial representation of the entity - entity: RecursivePartial; - // Lists the suggestions that the user may want to override - fields: AnalyzeLocationEntityField[]; -}; - -// This is where I get really vague. Something like this perhaps? Or it could be -// something like a json-schema that contains enough info for the frontend to -// be able to present a form and explanations -/** @public */ -export type AnalyzeLocationEntityField = { - /** - * e.g. "spec.owner"? The frontend needs to know how to "inject" the field into the - * entity again if the user wants to change it - */ - field: string; - - /** The outcome of the analysis for this particular field */ - state: - | 'analysisSuggestedValue' - | 'analysisSuggestedNoValue' - | 'needsUserInput'; - - // If the analysis did suggest a value, this is where it would be. Not sure if we want - // to limit this to strings or if we want it to be any JsonValue - value: string | null; - /** - * A text to show to the user to inform about the choices made. Like, it could say - * "Found a CODEOWNERS file that covers this target, so we suggest leaving this - * field empty; which would currently make it owned by X" where X is taken from the - * codeowners file. - */ - description: string; -}; - /** @public */ export type AnalyzeOptions = { url: string; diff --git a/plugins/catalog-common/package.json b/plugins/catalog-common/package.json index ecb53d35de..96e9f31b43 100644 --- a/plugins/catalog-common/package.json +++ b/plugins/catalog-common/package.json @@ -33,6 +33,8 @@ "clean": "backstage-cli package clean" }, "dependencies": { + "@backstage/catalog-model": "workspace:^", + "@backstage/plugin-catalog-node": "workspace:^", "@backstage/plugin-permission-common": "workspace:^", "@backstage/plugin-search-common": "workspace:^" }, diff --git a/plugins/catalog-common/src/index.ts b/plugins/catalog-common/src/index.ts index 614948e56c..a37fd122f9 100644 --- a/plugins/catalog-common/src/index.ts +++ b/plugins/catalog-common/src/index.ts @@ -35,3 +35,4 @@ export { export type { CatalogEntityPermission } from './permissions'; export * from './search'; +export * from './ingestion'; diff --git a/plugins/catalog-common/src/ingestion/LocationAnalyzer.ts b/plugins/catalog-common/src/ingestion/LocationAnalyzer.ts new file mode 100644 index 0000000000..8d570894cf --- /dev/null +++ b/plugins/catalog-common/src/ingestion/LocationAnalyzer.ts @@ -0,0 +1,88 @@ +/* + * 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 { LocationSpec } from '@backstage/plugin-catalog-node'; +import { Entity } from '@backstage/catalog-model'; +import { RecursivePartial } from './RecursivePartial'; + +/** @public */ +export type AnalyzeLocationRequest = { + location: LocationSpec; + catalogFilename?: string; +}; + +/** @public */ +export type AnalyzeLocationResponse = { + existingEntityFiles: AnalyzeLocationExistingEntity[]; + generateEntities: AnalyzeLocationGenerateEntity[]; +}; + +/** + * If the folder pointed to already contained catalog info yaml files, they are + * read and emitted like this so that the frontend can inform the user that it + * located them and can make sure to register them as well if they weren't + * already + * @public + */ +export type AnalyzeLocationExistingEntity = { + location: LocationSpec; + isRegistered: boolean; + entity: Entity; +}; + +/** + * This is some form of representation of what the analyzer could deduce. + * We should probably have a chat about how this can best be conveyed to + * the frontend. It'll probably contain a (possibly incomplete) entity, plus + * enough info for the frontend to know what form data to show to the user + * for overriding/completing the info. + * @public + */ +export type AnalyzeLocationGenerateEntity = { + // Some form of partial representation of the entity + entity: RecursivePartial; + // Lists the suggestions that the user may want to override + fields: AnalyzeLocationEntityField[]; +}; + +// This is where I get really vague. Something like this perhaps? Or it could be +// something like a json-schema that contains enough info for the frontend to +// be able to present a form and explanations +/** @public */ +export type AnalyzeLocationEntityField = { + /** + * e.g. "spec.owner"? The frontend needs to know how to "inject" the field into the + * entity again if the user wants to change it + */ + field: string; + + /** The outcome of the analysis for this particular field */ + state: + | 'analysisSuggestedValue' + | 'analysisSuggestedNoValue' + | 'needsUserInput'; + + // If the analysis did suggest a value, this is where it would be. Not sure if we want + // to limit this to strings or if we want it to be any JsonValue + value: string | null; + /** + * A text to show to the user to inform about the choices made. Like, it could say + * "Found a CODEOWNERS file that covers this target, so we suggest leaving this + * field empty; which would currently make it owned by X" where X is taken from the + * codeowners file. + */ + description: string; +}; diff --git a/plugins/catalog-common/src/ingestion/RecursivePartial.test.ts b/plugins/catalog-common/src/ingestion/RecursivePartial.test.ts new file mode 100644 index 0000000000..ab8d50534e --- /dev/null +++ b/plugins/catalog-common/src/ingestion/RecursivePartial.test.ts @@ -0,0 +1,31 @@ +/* + * 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 { RecursivePartial } from './RecursivePartial'; + +describe('RecursivePartial', () => { + it('is recursive', () => { + type X = { + required: { + required: string; + }; + }; + const x: RecursivePartial = { + required: {}, + }; + expect(x).toEqual({ required: {} }); + }); +}); diff --git a/plugins/catalog-common/src/ingestion/RecursivePartial.ts b/plugins/catalog-common/src/ingestion/RecursivePartial.ts new file mode 100644 index 0000000000..c452836f34 --- /dev/null +++ b/plugins/catalog-common/src/ingestion/RecursivePartial.ts @@ -0,0 +1,27 @@ +/* + * 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. + */ + +/** + * Makes all keys of an entire hierarchy optional. + * @ignore + */ +export type RecursivePartial = { + [P in keyof T]?: T[P] extends (infer U)[] + ? RecursivePartial[] + : T[P] extends object + ? RecursivePartial + : T[P]; +}; diff --git a/plugins/catalog-common/src/ingestion/index.ts b/plugins/catalog-common/src/ingestion/index.ts new file mode 100644 index 0000000000..ceb2ff1dfc --- /dev/null +++ b/plugins/catalog-common/src/ingestion/index.ts @@ -0,0 +1,21 @@ +/* + * 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 type { + AnalyzeLocationResponse, + AnalyzeLocationRequest, + AnalyzeLocationExistingEntity, +} from './LocationAnalyzer'; diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index 055955c9c7..224a30bdb2 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -40,7 +40,7 @@ "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", "@backstage/integration-react": "workspace:^", - "@backstage/plugin-catalog-backend": "workspace:^", + "@backstage/plugin-catalog-common": "workspace:^", "@backstage/plugin-catalog-react": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", diff --git a/plugins/catalog-import/src/api/CatalogImportClient.ts b/plugins/catalog-import/src/api/CatalogImportClient.ts index d019b40045..0663122253 100644 --- a/plugins/catalog-import/src/api/CatalogImportClient.ts +++ b/plugins/catalog-import/src/api/CatalogImportClient.ts @@ -30,7 +30,7 @@ import { Base64 } from 'js-base64'; import { AnalyzeResult, CatalogImportApi } from './CatalogImportApi'; import { getGithubIntegrationConfig } from './GitHub'; import { getBranchName, getCatalogFilename } from '../components/helpers'; -import { AnalyzeLocationResponse } from '@backstage/plugin-catalog-backend'; +import { AnalyzeLocationResponse } from '@backstage/plugin-catalog-common'; import { CompoundEntityRef } from '@backstage/catalog-model'; /** diff --git a/yarn.lock b/yarn.lock index 5563c9ffbe..71d139f97d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4718,7 +4718,9 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-common@workspace:plugins/catalog-common" dependencies: + "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" + "@backstage/plugin-catalog-node": "workspace:^" "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-search-common": "workspace:^" languageName: unknown @@ -4799,7 +4801,7 @@ __metadata: "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" "@backstage/integration-react": "workspace:^" - "@backstage/plugin-catalog-backend": "workspace:^" + "@backstage/plugin-catalog-common": "workspace:^" "@backstage/plugin-catalog-react": "workspace:^" "@backstage/test-utils": "workspace:^" "@material-ui/core": ^4.12.2 From 148d33fa855df14ddac45a10a5c99693e6833c00 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Wed, 5 Oct 2022 14:09:22 +0200 Subject: [PATCH 081/278] add api-reports Signed-off-by: Kiss Miklos --- plugins/catalog-backend/api-report.md | 39 ++----------------- plugins/catalog-common/api-report.md | 38 ++++++++++++++++++ plugins/catalog-common/src/ingestion/index.ts | 2 + 3 files changed, 43 insertions(+), 36 deletions(-) diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index ede024e296..f5922d51ab 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -5,6 +5,9 @@ ```ts /// +import { AnalyzeLocationExistingEntity } from '@backstage/plugin-catalog-common'; +import { AnalyzeLocationRequest } from '@backstage/plugin-catalog-common'; +import { AnalyzeLocationResponse } from '@backstage/plugin-catalog-common'; import { BackendFeature } from '@backstage/backend-plugin-api'; import { CatalogApi } from '@backstage/catalog-client'; import { CatalogEntityDocument } from '@backstage/plugin-catalog-common'; @@ -51,42 +54,6 @@ import { TokenManager } from '@backstage/backend-common'; import { UrlReader } from '@backstage/backend-common'; import { Validators } from '@backstage/catalog-model'; -// @public (undocumented) -export type AnalyzeLocationEntityField = { - field: string; - state: - | 'analysisSuggestedValue' - | 'analysisSuggestedNoValue' - | 'needsUserInput'; - value: string | null; - description: string; -}; - -// @public -export type AnalyzeLocationExistingEntity = { - location: LocationSpec; - isRegistered: boolean; - entity: Entity; -}; - -// @public -export type AnalyzeLocationGenerateEntity = { - entity: RecursivePartial; - fields: AnalyzeLocationEntityField[]; -}; - -// @public (undocumented) -export type AnalyzeLocationRequest = { - location: LocationSpec; - catalogFilename?: string; -}; - -// @public (undocumented) -export type AnalyzeLocationResponse = { - existingEntityFiles: AnalyzeLocationExistingEntity[]; - generateEntities: AnalyzeLocationGenerateEntity[]; -}; - // @public (undocumented) export type AnalyzeOptions = { url: string; diff --git a/plugins/catalog-common/api-report.md b/plugins/catalog-common/api-report.md index b7eaf99d8b..867454f9bd 100644 --- a/plugins/catalog-common/api-report.md +++ b/plugins/catalog-common/api-report.md @@ -4,9 +4,47 @@ ```ts import { BasicPermission } from '@backstage/plugin-permission-common'; +import { Entity } from '@backstage/catalog-model'; import { IndexableDocument } from '@backstage/plugin-search-common'; +import { LocationSpec } from '@backstage/plugin-catalog-node'; import { ResourcePermission } from '@backstage/plugin-permission-common'; +// @public (undocumented) +export type AnalyzeLocationEntityField = { + field: string; + state: + | 'analysisSuggestedValue' + | 'analysisSuggestedNoValue' + | 'needsUserInput'; + value: string | null; + description: string; +}; + +// @public +export type AnalyzeLocationExistingEntity = { + location: LocationSpec; + isRegistered: boolean; + entity: Entity; +}; + +// @public +export type AnalyzeLocationGenerateEntity = { + entity: RecursivePartial; + fields: AnalyzeLocationEntityField[]; +}; + +// @public (undocumented) +export type AnalyzeLocationRequest = { + location: LocationSpec; + catalogFilename?: string; +}; + +// @public (undocumented) +export type AnalyzeLocationResponse = { + existingEntityFiles: AnalyzeLocationExistingEntity[]; + generateEntities: AnalyzeLocationGenerateEntity[]; +}; + // @alpha export const catalogEntityCreatePermission: BasicPermission; diff --git a/plugins/catalog-common/src/ingestion/index.ts b/plugins/catalog-common/src/ingestion/index.ts index ceb2ff1dfc..aced124bb4 100644 --- a/plugins/catalog-common/src/ingestion/index.ts +++ b/plugins/catalog-common/src/ingestion/index.ts @@ -18,4 +18,6 @@ export type { AnalyzeLocationResponse, AnalyzeLocationRequest, AnalyzeLocationExistingEntity, + AnalyzeLocationGenerateEntity, + AnalyzeLocationEntityField, } from './LocationAnalyzer'; From 182000c663e28d45c4671ec679e4f6dbed8b1b9d Mon Sep 17 00:00:00 2001 From: irma12 Date: Wed, 5 Oct 2022 15:23:18 +0200 Subject: [PATCH 082/278] Added emptyContent to properties of Catalog Table Signed-off-by: irma12 --- .changeset/many-kangaroos-raise.md | 5 +++++ .../CatalogPage/DefaultCatalogPage.tsx | 5 ++++- .../components/CatalogTable/CatalogTable.tsx | 19 ++++++++++++++++--- 3 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 .changeset/many-kangaroos-raise.md diff --git a/.changeset/many-kangaroos-raise.md b/.changeset/many-kangaroos-raise.md new file mode 100644 index 0000000000..11c0e82668 --- /dev/null +++ b/.changeset/many-kangaroos-raise.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog': patch +--- + +Added emptyContent property to CatalogTable and DefaultCatalogPage to support customization for emptyContent of the Catalog Table. diff --git a/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.tsx b/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.tsx index 2bae104d90..c5208c94f5 100644 --- a/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.tsx +++ b/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.tsx @@ -36,7 +36,7 @@ import { UserListPicker, EntityKindPicker, } from '@backstage/plugin-catalog-react'; -import React from 'react'; +import React, { ReactNode } from 'react'; import { createComponentRouteRef } from '../../routes'; import { CatalogTable, CatalogTableRow } from '../CatalogTable'; import { CatalogKindHeader } from '../CatalogKindHeader'; @@ -53,6 +53,7 @@ export interface DefaultCatalogPageProps { actions?: TableProps['actions']; initialKind?: string; tableOptions?: TableProps['options']; + emptyContent?: ReactNode; } export function DefaultCatalogPage(props: DefaultCatalogPageProps) { @@ -62,6 +63,7 @@ export function DefaultCatalogPage(props: DefaultCatalogPageProps) { initiallySelectedFilter = 'owned', initialKind = 'component', tableOptions = {}, + emptyContent, } = props; const orgName = useApi(configApiRef).getOptionalString('organization.name') ?? 'Backstage'; @@ -97,6 +99,7 @@ export function DefaultCatalogPage(props: DefaultCatalogPageProps) { columns={columns} actions={actions} tableOptions={tableOptions} + emptyContent={emptyContent} /> diff --git a/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx b/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx index 6bc18d7a90..ed782c4e9a 100644 --- a/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx +++ b/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx @@ -32,14 +32,14 @@ import { useEntityList, useStarredEntities, } from '@backstage/plugin-catalog-react'; -import { Typography } from '@material-ui/core'; +import { makeStyles, Typography } from '@material-ui/core'; import { withStyles } from '@material-ui/core/styles'; import Edit from '@material-ui/icons/Edit'; import OpenInNew from '@material-ui/icons/OpenInNew'; import Star from '@material-ui/icons/Star'; import StarBorder from '@material-ui/icons/StarBorder'; import { capitalize } from 'lodash'; -import React, { useMemo } from 'react'; +import React, { ReactNode, useMemo } from 'react'; import { columnFactories } from './columns'; import { CatalogTableRow } from './types'; @@ -52,9 +52,18 @@ export interface CatalogTableProps { columns?: TableColumn[]; actions?: TableProps['actions']; tableOptions?: TableProps['options']; + emptyContent?: ReactNode; subtitle?: string; } +const useStyles = makeStyles(theme => ({ + empty: { + padding: theme.spacing(2), + display: 'flex', + justifyContent: 'center', + }, +})); + const YellowStar = withStyles({ root: { color: '#f3ba37', @@ -63,9 +72,10 @@ const YellowStar = withStyles({ /** @public */ export const CatalogTable = (props: CatalogTableProps) => { - const { columns, actions, tableOptions, subtitle } = props; + const { columns, actions, tableOptions, subtitle, emptyContent } = props; const { isStarredEntity, toggleStarredEntity } = useStarredEntities(); const { loading, error, entities, filters } = useEntityList(); + const classes = useStyles(); const defaultColumns: TableColumn[] = useMemo(() => { return [ @@ -228,6 +238,9 @@ export const CatalogTable = (props: CatalogTableProps) => { data={rows} actions={actions || defaultActions} subtitle={subtitle} + emptyContent={ + emptyContent &&
{emptyContent}
+ } /> ); }; From 823acaa88bd450a25a290f017b9e98a5965f1b69 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Wed, 5 Oct 2022 17:25:40 +0200 Subject: [PATCH 083/278] add changeset Signed-off-by: Kiss Miklos --- .changeset/five-tables-grow.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 .changeset/five-tables-grow.md diff --git a/.changeset/five-tables-grow.md b/.changeset/five-tables-grow.md new file mode 100644 index 0000000000..982b17b97b --- /dev/null +++ b/.changeset/five-tables-grow.md @@ -0,0 +1,11 @@ +--- +'@backstage/plugin-catalog-common': patch +--- + +Moved the following types from `@backstage/plugin-catalog-backend` to this package. + +- AnalyzeLocationResponse +- AnalyzeLocationRequest +- AnalyzeLocationExistingEntity +- AnalyzeLocationGenerateEntity +- AnalyzeLocationEntityField From bde1e8c8e2dd3de13aa48f36f7dc7f57cd13e43c Mon Sep 17 00:00:00 2001 From: andrmaz <60042277+andrmaz@users.noreply.github.com> Date: Thu, 6 Oct 2022 00:00:46 +0200 Subject: [PATCH 084/278] feat(curve): add curve filter to graph page Signed-off-by: andrmaz <60042277+andrmaz@users.noreply.github.com> --- .changeset/clever-clocks-drive.md | 6 +++ .../DependencyGraph/DependencyGraph.tsx | 11 +++++ .../src/components/DependencyGraph/Edge.tsx | 19 ++++--- .../src/components/DependencyGraph/types.ts | 6 +++ .../CatalogGraphPage/CatalogGraphPage.tsx | 7 +++ .../CatalogGraphPage/CurveFilter.test.tsx | 47 ++++++++++++++++++ .../CatalogGraphPage/CurveFilter.tsx | 49 +++++++++++++++++++ .../CatalogGraphPage/useCatalogGraphPage.ts | 13 ++++- .../EntityRelationsGraph.tsx | 5 +- .../components/EntityRelationsGraph/index.ts | 1 + .../components/EntityRelationsGraph/types.ts | 6 +++ 11 files changed, 162 insertions(+), 8 deletions(-) create mode 100644 .changeset/clever-clocks-drive.md create mode 100644 plugins/catalog-graph/src/components/CatalogGraphPage/CurveFilter.test.tsx create mode 100644 plugins/catalog-graph/src/components/CatalogGraphPage/CurveFilter.tsx diff --git a/.changeset/clever-clocks-drive.md b/.changeset/clever-clocks-drive.md new file mode 100644 index 0000000000..d91a8ee53f --- /dev/null +++ b/.changeset/clever-clocks-drive.md @@ -0,0 +1,6 @@ +--- +'@backstage/core-components': patch +'@backstage/plugin-catalog-graph': patch +--- + +Added select to toggle the curve factory of the dependency graph diff --git a/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx b/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx index 9f447f80cc..3457a83d7d 100644 --- a/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx +++ b/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx @@ -30,6 +30,7 @@ import { RenderNodeFunction, RenderLabelFunction, LabelPosition, + Curve, } from './types'; import { Node } from './Node'; import { Edge, GraphEdge } from './Edge'; @@ -162,6 +163,14 @@ export interface DependencyGraphProps * Default: `enabled` */ zoom?: 'enabled' | 'disabled' | 'enable-on-click'; + /** + * A factory for curve generators addressing both lines and areas. + * + * @remarks + * + * Default: 'curveMonotoneX' + */ + curve?: Curve; } const WORKSPACE_ID = 'workspace'; @@ -194,6 +203,7 @@ export function DependencyGraph( renderLabel, defs, zoom = 'enabled', + curve = 'curveMonotoneX', ...svgProps } = props; const theme: BackstageTheme = useTheme(); @@ -424,6 +434,7 @@ export function DependencyGraph( setEdge={setEdge} render={renderLabel} edge={edge} + curve={curve} /> ); })} diff --git a/packages/core-components/src/components/DependencyGraph/Edge.tsx b/packages/core-components/src/components/DependencyGraph/Edge.tsx index 72a7547cda..ea526827bf 100644 --- a/packages/core-components/src/components/DependencyGraph/Edge.tsx +++ b/packages/core-components/src/components/DependencyGraph/Edge.tsx @@ -24,6 +24,7 @@ import { RenderLabelFunction, DependencyEdge, LabelPosition, + Curve, } from './types'; import { EDGE_TEST_ID, LABEL_TEST_ID } from './constants'; import { DefaultLabel } from './DefaultLabel'; @@ -70,23 +71,19 @@ export type EdgeComponentProps = { id: dagre.Edge, edge: DependencyEdge, ) => dagre.graphlib.Graph<{}>; + curve: Curve; }; const renderDefault = (props: RenderLabelProps) => ( ); -const createPath = d3Shape - .line() - .x(d => d.x) - .y(d => d.y) - .curve(d3Shape.curveStepBefore); - export function Edge({ render = renderDefault, setEdge, id, edge, + curve, }: EdgeComponentProps) { const { x = 0, y = 0, width, height, points } = edge; const labelProps: DependencyEdge = edge; @@ -114,6 +111,16 @@ export function Edge({ let path: string = ''; + const createPath = React.useMemo( + () => + d3Shape + .line() + .x(d => d.x) + .y(d => d.y) + .curve(d3Shape[curve]), + [curve], + ); + if (points) { const finitePoints = points.filter( (point: EdgePoint) => isFinite(point.x) && isFinite(point.y), diff --git a/packages/core-components/src/components/DependencyGraph/types.ts b/packages/core-components/src/components/DependencyGraph/types.ts index 4ae6057bd7..f74374957b 100644 --- a/packages/core-components/src/components/DependencyGraph/types.ts +++ b/packages/core-components/src/components/DependencyGraph/types.ts @@ -75,6 +75,12 @@ export type RenderNodeFunction = ( props: RenderNodeProps, ) => React.ReactNode; +/** + * @see {@link @types/d3-shape/index.d.ts#curveMonotoneX} + * @see {@link @types/d3-shape/index.d.ts#curveStepBefore} + */ +export type Curve = 'curveStepBefore' | 'curveMonotoneX'; + /** * Graph direction * diff --git a/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.tsx b/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.tsx index 8e59c127d9..38fcdad918 100644 --- a/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.tsx +++ b/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.tsx @@ -35,11 +35,13 @@ import React, { MouseEvent, useCallback } from 'react'; import { useNavigate } from 'react-router'; import { ALL_RELATION_PAIRS, + Curve, Direction, EntityNode, EntityRelationsGraph, RelationPairs, } from '../EntityRelationsGraph'; +import { CurveFilter } from './CurveFilter'; import { DirectionFilter } from './DirectionFilter'; import { MaxDepthFilter } from './MaxDepthFilter'; import { SelectedKindsFilter } from './SelectedKindsFilter'; @@ -110,6 +112,7 @@ export const CatalogGraphPage = (props: { mergeRelations?: boolean; direction?: Direction; showFilters?: boolean; + curve?: Curve; }; }) => { const { relationPairs = ALL_RELATION_PAIRS, initialState } = props; @@ -130,6 +133,8 @@ export const CatalogGraphPage = (props: { setMergeRelations, direction, setDirection, + curve, + setCurve, rootEntityNames, setRootEntityNames, showFilters, @@ -201,6 +206,7 @@ export const CatalogGraphPage = (props: { relationPairs={relationPairs} /> + diff --git a/plugins/catalog-graph/src/components/CatalogGraphPage/CurveFilter.test.tsx b/plugins/catalog-graph/src/components/CatalogGraphPage/CurveFilter.test.tsx new file mode 100644 index 0000000000..0d1ed6e9a7 --- /dev/null +++ b/plugins/catalog-graph/src/components/CatalogGraphPage/CurveFilter.test.tsx @@ -0,0 +1,47 @@ +/* + * Copyright 2021 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 { render, waitFor } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import React from 'react'; +import { CurveFilter } from './CurveFilter'; + +describe('', () => { + test('should display current curve label', () => { + const onChange = jest.fn(); + const { getByText } = render( + , + ); + + expect(getByText('Monotone X')).toBeInTheDocument(); + }); + + test('should select an alternative curve factory', async () => { + const onChange = jest.fn(); + const { getByText, getByTestId } = render( + , + ); + + expect(getByText('Step Before')).toBeInTheDocument(); + + await userEvent.click(getByTestId('select')); + await userEvent.click(getByText('Monotone X')); + + await waitFor(() => { + expect(getByText('Monotone X')).toBeInTheDocument(); + expect(onChange).toBeCalledWith('curveMonotoneX'); + }); + }); +}); diff --git a/plugins/catalog-graph/src/components/CatalogGraphPage/CurveFilter.tsx b/plugins/catalog-graph/src/components/CatalogGraphPage/CurveFilter.tsx new file mode 100644 index 0000000000..b508d48172 --- /dev/null +++ b/plugins/catalog-graph/src/components/CatalogGraphPage/CurveFilter.tsx @@ -0,0 +1,49 @@ +/* + * Copyright 2021 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 { Select } from '@backstage/core-components'; +import { Box } from '@material-ui/core'; +import React, { useCallback } from 'react'; +import { Curve } from '../EntityRelationsGraph'; + +const CURVE_DISPLAY_NAMES: Record = { + curveMonotoneX: 'Monotone X', + curveStepBefore: 'Step Before', +}; + +export type Props = { + value: Curve; + onChange: (value: Curve) => void; +}; + +const curves: Curve[] = ['curveMonotoneX', 'curveStepBefore']; + +export const CurveFilter = ({ value, onChange }: Props) => { + const handleChange = useCallback(v => onChange(v as Curve), [onChange]); + + return ( + + } + value={value} + onChange={handleChange} + > + {[...new Set([DEFAULT_PAGE_LIMIT, ...options])] + .sort((a, b) => a - b) + .map(option => ( + + {option} + + ))} + + + ); +}; + +/** + * Props for {@link SearchResultLimiter}. + * @public + */ +export type SearchResultLimiterProps = Omit< + SearchResultLimiterBaseProps, + 'value' | 'onChange' +>; + +/** + * A component for setting the search context page limit. + * @param props - See {@link SearchResultLimiterProps}. + * @public + */ +export const SearchResultLimiter = (props: SearchResultLimiterProps) => { + const { pageLimit, setPageLimit } = useSearch(); + + const handleChange = useCallback( + (newPageLimit: number) => { + setPageLimit(newPageLimit); + }, + [setPageLimit], + ); + + return ( + + ); +}; diff --git a/plugins/search-react/src/components/SearchResultLimiter/index.ts b/plugins/search-react/src/components/SearchResultLimiter/index.ts new file mode 100644 index 0000000000..411e48b5f5 --- /dev/null +++ b/plugins/search-react/src/components/SearchResultLimiter/index.ts @@ -0,0 +1,17 @@ +/* + * 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 './SearchResultLimiter'; diff --git a/plugins/search-react/src/components/index.ts b/plugins/search-react/src/components/index.ts index 62d8b611a4..524b0f9194 100644 --- a/plugins/search-react/src/components/index.ts +++ b/plugins/search-react/src/components/index.ts @@ -20,6 +20,7 @@ export * from './SearchAutocomplete'; export * from './SearchFilter'; export * from './SearchResult'; export * from './SearchResultPager'; +export * from './SearchResultLimiter'; export * from './SearchResultList'; export * from './SearchResultGroup'; export * from './DefaultResultListItem'; From db63ce8b07cc52083ba8da6708a4e0b41b6eadda Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Thu, 6 Oct 2022 09:36:54 +0100 Subject: [PATCH 088/278] Rename schema to paramsSchema Signed-off-by: Harry Hogg --- .changeset/kind-bees-suffer.md | 2 +- .../src/permissions/rules/createPropertyRule.ts | 2 +- .../src/permissions/rules/hasAnnotation.ts | 2 +- plugins/catalog-backend/src/permissions/rules/hasLabel.ts | 2 +- .../catalog-backend/src/permissions/rules/isEntityKind.ts | 2 +- .../src/permissions/rules/isEntityOwner.ts | 2 +- plugins/catalog-backend/src/service/createRouter.test.ts | 2 +- .../src/service/PermissionIntegrationClient.test.ts | 4 ++-- .../src/integration/createConditionExports.test.ts | 4 ++-- .../src/integration/createConditionFactory.test.ts | 2 +- .../src/integration/createConditionTransformer.test.ts | 4 ++-- .../src/integration/createConditionTransformer.ts | 4 ++-- .../integration/createPermissionIntegrationRouter.test.ts | 8 ++++---- .../src/integration/createPermissionIntegrationRouter.ts | 6 +++--- plugins/permission-node/src/integration/util.test.ts | 4 ++-- plugins/permission-node/src/types.ts | 2 +- plugins/playlist-backend/src/permissions/rules.ts | 4 ++-- 17 files changed, 28 insertions(+), 28 deletions(-) diff --git a/.changeset/kind-bees-suffer.md b/.changeset/kind-bees-suffer.md index 41c9874590..18e8afa947 100644 --- a/.changeset/kind-bees-suffer.md +++ b/.changeset/kind-bees-suffer.md @@ -20,7 +20,7 @@ The API has now changed to expect the parameters as a single object ```ts createPermissionRule({ - schema: z.object({ + paramSchema: z.object({ foo: z.string().describe('Foo value to match'), bar: z.string().describe('Bar value to match'), }), diff --git a/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts b/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts index 29ce67ad53..19a4423846 100644 --- a/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts +++ b/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts @@ -24,7 +24,7 @@ export const createPropertyRule = (propertyType: 'metadata' | 'spec') => name: `HAS_${propertyType.toUpperCase()}`, description: `Allow entities which have the specified ${propertyType} subfield.`, resourceType: RESOURCE_TYPE_CATALOG_ENTITY, - schema: z.object({ + paramsSchema: z.object({ key: z .string() .describe(`Property within the entities ${propertyType} to match on`), diff --git a/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts b/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts index c8450f3d08..c24620f41c 100644 --- a/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts +++ b/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts @@ -31,7 +31,7 @@ export const hasAnnotation = createCatalogPermissionRule({ description: 'Allow entities which are annotated with the specified annotation', resourceType: RESOURCE_TYPE_CATALOG_ENTITY, - schema: z.object({ + paramsSchema: z.object({ annotation: z.string().describe('Name of the annotation to match on'), value: z .string() diff --git a/plugins/catalog-backend/src/permissions/rules/hasLabel.ts b/plugins/catalog-backend/src/permissions/rules/hasLabel.ts index 6b7b9d9da0..376534ca6f 100644 --- a/plugins/catalog-backend/src/permissions/rules/hasLabel.ts +++ b/plugins/catalog-backend/src/permissions/rules/hasLabel.ts @@ -27,7 +27,7 @@ export const hasLabel = createCatalogPermissionRule({ name: 'HAS_LABEL', description: 'Allow entities which have the specified label metadata.', resourceType: RESOURCE_TYPE_CATALOG_ENTITY, - schema: z.object({ + paramsSchema: z.object({ label: z.string().describe('Name of the label to match one'), }), apply: (resource, { label }) => diff --git a/plugins/catalog-backend/src/permissions/rules/isEntityKind.ts b/plugins/catalog-backend/src/permissions/rules/isEntityKind.ts index d64b357d9f..eee7a790b2 100644 --- a/plugins/catalog-backend/src/permissions/rules/isEntityKind.ts +++ b/plugins/catalog-backend/src/permissions/rules/isEntityKind.ts @@ -27,7 +27,7 @@ export const isEntityKind = createCatalogPermissionRule({ name: 'IS_ENTITY_KIND', description: 'Allow entities with the specified kind', resourceType: RESOURCE_TYPE_CATALOG_ENTITY, - schema: z.object({ + paramsSchema: z.object({ kinds: z .array(z.string()) .describe('List of kinds to match at least one of'), diff --git a/plugins/catalog-backend/src/permissions/rules/isEntityOwner.ts b/plugins/catalog-backend/src/permissions/rules/isEntityOwner.ts index 824e5e9ca6..c3bfff5c2e 100644 --- a/plugins/catalog-backend/src/permissions/rules/isEntityOwner.ts +++ b/plugins/catalog-backend/src/permissions/rules/isEntityOwner.ts @@ -29,7 +29,7 @@ export const isEntityOwner = createCatalogPermissionRule({ name: 'IS_ENTITY_OWNER', description: 'Allow entities owned by the current user', resourceType: RESOURCE_TYPE_CATALOG_ENTITY, - schema: z.object({ + paramsSchema: z.object({ claims: z .array(z.string()) .describe( diff --git a/plugins/catalog-backend/src/service/createRouter.test.ts b/plugins/catalog-backend/src/service/createRouter.test.ts index 088e6c71e2..f383df7364 100644 --- a/plugins/catalog-backend/src/service/createRouter.test.ts +++ b/plugins/catalog-backend/src/service/createRouter.test.ts @@ -696,7 +696,7 @@ describe('NextRouter permissioning', () => { name: 'FAKE_RULE', description: 'fake rule', resourceType: RESOURCE_TYPE_CATALOG_ENTITY, - schema: z.object({ + paramsSchema: z.object({ foo: z.string(), }), apply: () => true, diff --git a/plugins/permission-backend/src/service/PermissionIntegrationClient.test.ts b/plugins/permission-backend/src/service/PermissionIntegrationClient.test.ts index 8cbeeaebd9..80782848e7 100644 --- a/plugins/permission-backend/src/service/PermissionIntegrationClient.test.ts +++ b/plugins/permission-backend/src/service/PermissionIntegrationClient.test.ts @@ -284,7 +284,7 @@ describe('PermissionIntegrationClient', () => { name: 'RULE_1', description: 'Test rule 1', resourceType: 'test-resource', - schema: z.object({ + paramsSchema: z.object({ input: z.enum(['yes', 'no']), }), apply: (_resource, { input }) => input === 'yes', @@ -297,7 +297,7 @@ describe('PermissionIntegrationClient', () => { description: 'Test rule 2', resourceType: 'test-resource', - schema: z.object({ + paramsSchema: z.object({ input: z.enum(['yes', 'no']), }), apply: (_resource, { input }) => input === 'yes', diff --git a/plugins/permission-node/src/integration/createConditionExports.test.ts b/plugins/permission-node/src/integration/createConditionExports.test.ts index 59639f5119..424b3c3c24 100644 --- a/plugins/permission-node/src/integration/createConditionExports.test.ts +++ b/plugins/permission-node/src/integration/createConditionExports.test.ts @@ -31,7 +31,7 @@ const testIntegration = () => name: 'testRule1', description: 'Test rule 1', resourceType: 'test-resource', - schema: z.object({ + paramsSchema: z.object({ foo: z.string(), bar: z.number(), }), @@ -45,7 +45,7 @@ const testIntegration = () => name: 'testRule2', description: 'Test rule 2', resourceType: 'test-resource', - schema: z.object({ + paramsSchema: z.object({ foo: z.string(), }), apply: (_resource: any) => false, diff --git a/plugins/permission-node/src/integration/createConditionFactory.test.ts b/plugins/permission-node/src/integration/createConditionFactory.test.ts index 191688f0dd..2b3acff342 100644 --- a/plugins/permission-node/src/integration/createConditionFactory.test.ts +++ b/plugins/permission-node/src/integration/createConditionFactory.test.ts @@ -23,7 +23,7 @@ describe('createConditionFactory', () => { name: 'test-rule', description: 'test-description', resourceType: 'test-resource', - schema: z.object({ + paramsSchema: z.object({ foo: z.string(), }), apply: (_resource, _params) => true, diff --git a/plugins/permission-node/src/integration/createConditionTransformer.test.ts b/plugins/permission-node/src/integration/createConditionTransformer.test.ts index 0544ff3ef8..a5507f0b44 100644 --- a/plugins/permission-node/src/integration/createConditionTransformer.test.ts +++ b/plugins/permission-node/src/integration/createConditionTransformer.test.ts @@ -27,7 +27,7 @@ const transformConditions = createConditionTransformer([ name: 'test-rule-1', description: 'Test rule 1', resourceType: 'test-resource', - schema: z.object({ + paramsSchema: z.object({ foo: z.string(), bar: z.number(), }), @@ -38,7 +38,7 @@ const transformConditions = createConditionTransformer([ name: 'test-rule-2', description: 'Test rule 2', resourceType: 'test-resource', - schema: z.object({ + paramsSchema: z.object({ foo: z.string(), }), apply: jest.fn(), diff --git a/plugins/permission-node/src/integration/createConditionTransformer.ts b/plugins/permission-node/src/integration/createConditionTransformer.ts index afbd4a9316..dc0b11e90e 100644 --- a/plugins/permission-node/src/integration/createConditionTransformer.ts +++ b/plugins/permission-node/src/integration/createConditionTransformer.ts @@ -47,9 +47,9 @@ const mapConditions = ( } const rule = getRule(criteria.rule); - const result = rule.schema.safeParse(criteria.params); + const result = rule.paramsSchema.safeParse(criteria.params); - if (rule.schema && !result.success) { + if (rule.paramsSchema && !result.success) { throw new InputError(`Parameters to rule are invalid`, result.error); } diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts index adfa57b863..55d4d5f4cf 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts @@ -40,7 +40,7 @@ const testRule1 = createPermissionRule({ name: 'test-rule-1', description: 'Test rule 1', resourceType: 'test-resource', - schema: z.object({ + paramsSchema: z.object({ foo: z.string(), bar: z.number().describe('bar'), }), @@ -52,7 +52,7 @@ const testRule2 = createPermissionRule({ name: 'test-rule-2', description: 'Test rule 2', resourceType: 'test-resource', - schema: z.object({ + paramsSchema: z.object({ foo: z.string().describe('foo'), }), apply: (_resource: any, _foo) => false, @@ -603,7 +603,7 @@ describe('createPermissionIntegrationRouter', () => { name: testRule1.name, description: testRule1.description, resourceType: testRule1.resourceType, - schema: { + paramsSchema: { $schema: 'http://json-schema.org/draft-07/schema#', additionalProperties: false, properties: { @@ -623,7 +623,7 @@ describe('createPermissionIntegrationRouter', () => { name: testRule2.name, description: testRule2.description, resourceType: testRule2.resourceType, - schema: { + paramsSchema: { $schema: 'http://json-schema.org/draft-07/schema#', additionalProperties: false, properties: { diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts index 4f98597e6c..c2d99ac4a4 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts @@ -127,9 +127,9 @@ const applyConditions = ( } const rule = getRule(criteria.rule); - const result = rule.schema.safeParse(criteria.params); + const result = rule.paramsSchema.safeParse(criteria.params); - if (rule.schema && !result.success) { + if (rule.paramsSchema && !result.success) { throw new InputError(`Parameters to rule are invalid`, result.error); } @@ -195,7 +195,7 @@ export const createPermissionIntegrationRouter = < name: rule.name, description: rule.description, resourceType: rule.resourceType, - schema: zodToJsonSchema(rule.schema), + paramsSchema: zodToJsonSchema(rule.paramsSchema), })); return res.json({ permissions, rules: serializableRules }); diff --git a/plugins/permission-node/src/integration/util.test.ts b/plugins/permission-node/src/integration/util.test.ts index 924ab30757..b1961ae532 100644 --- a/plugins/permission-node/src/integration/util.test.ts +++ b/plugins/permission-node/src/integration/util.test.ts @@ -31,7 +31,7 @@ describe('permission integration utils', () => { name: 'test-rule-1', description: 'Test rule 1', resourceType: 'test-resource', - schema: z.object({}), + paramsSchema: z.object({}), apply: jest.fn(), toQuery: jest.fn(), }); @@ -40,7 +40,7 @@ describe('permission integration utils', () => { name: 'test-rule-2', description: 'Test rule 2', resourceType: 'test-resource', - schema: z.object({}), + paramsSchema: z.object({}), apply: jest.fn(), toQuery: jest.fn(), }); diff --git a/plugins/permission-node/src/types.ts b/plugins/permission-node/src/types.ts index b16c0cac32..df21889fb9 100644 --- a/plugins/permission-node/src/types.ts +++ b/plugins/permission-node/src/types.ts @@ -66,7 +66,7 @@ export type PermissionRule< /** * A ZodSchema that documents the parameters that this rule accepts. */ - schema: PermissionRuleSchema; + paramsSchema: PermissionRuleSchema; /** * Apply this rule to a resource already loaded from a backing data source. The params are diff --git a/plugins/playlist-backend/src/permissions/rules.ts b/plugins/playlist-backend/src/permissions/rules.ts index bebb7905b4..cd6711befb 100644 --- a/plugins/playlist-backend/src/permissions/rules.ts +++ b/plugins/playlist-backend/src/permissions/rules.ts @@ -33,7 +33,7 @@ const isOwner = createPlaylistPermissionRule({ name: 'IS_OWNER', description: 'Should allow only if the playlist belongs to the user', resourceType: PLAYLIST_LIST_RESOURCE_TYPE, - schema: z.object({ + paramsSchema: z.object({ owners: z.array(z.string()).describe('List of owner entity refs'), }), apply: (list: PlaylistMetadata, { owners }) => owners.includes(list.owner), @@ -47,7 +47,7 @@ const isPublic = createPlaylistPermissionRule({ name: 'IS_PUBLIC', description: 'Should allow only if the playlist is public', resourceType: PLAYLIST_LIST_RESOURCE_TYPE, - schema: z.object({}), + paramsSchema: z.object({}), apply: (list: PlaylistMetadata) => list.public, toQuery: () => ({ key: 'public', values: [true] }), }); From a3fef466ef733370e55fbb7fc1bc1e36c3fbb0bf Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Thu, 6 Oct 2022 10:06:42 +0100 Subject: [PATCH 089/278] Updated API reports Signed-off-by: Harry Hogg --- plugins/permission-node/api-report.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/permission-node/api-report.md b/plugins/permission-node/api-report.md index 5168eefebc..b272aa9b1c 100644 --- a/plugins/permission-node/api-report.md +++ b/plugins/permission-node/api-report.md @@ -177,7 +177,7 @@ export type PermissionRule< name: string; description: string; resourceType: TResourceType; - schema: PermissionRuleSchema; + paramsSchema: PermissionRuleSchema; apply( resource: TResource, params: NoInfer>>, From fa40df2bc7f0f42173fbcdfc2b1f6cc22afd444e Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Thu, 6 Oct 2022 12:04:31 +0100 Subject: [PATCH 090/278] Made changs to allow params and schemas to be defaulted and required only when there is params defined. Co-authored-by: Vincenzo Scamporlino Co-authored-by: Mike Lewis Signed-off-by: Harry Hogg --- plugins/catalog-backend/api-report.md | 2 +- plugins/permission-common/api-report.md | 6 ++- plugins/permission-common/src/types/api.ts | 6 ++- plugins/permission-node/api-report.md | 12 ++--- .../src/integration/createConditionExports.ts | 4 +- .../createConditionFactory.test.ts | 1 + .../src/integration/createConditionFactory.ts | 26 ++++++----- .../integration/createConditionTransformer.ts | 6 +-- .../createPermissionIntegrationRouter.test.ts | 44 ++----------------- .../createPermissionIntegrationRouter.ts | 10 ++--- .../src/integration/createPermissionRule.ts | 4 +- .../src/integration/util.test.ts | 3 -- plugins/permission-node/src/types.ts | 4 +- plugins/playlist-backend/api-report.md | 2 +- .../DefaultPlaylistPermissionPolicy.test.ts | 4 +- .../DefaultPlaylistPermissionPolicy.ts | 2 +- .../playlist-backend/src/permissions/rules.ts | 1 - 17 files changed, 53 insertions(+), 84 deletions(-) diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index ea9b0b2277..6935243cf5 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -303,7 +303,7 @@ export const createCatalogConditionalDecision: ( // @alpha export const createCatalogPermissionRule: < - TParams extends PermissionRuleParams = PermissionRuleParams, + TParams extends PermissionRuleParams = undefined, >( rule: PermissionRule, ) => PermissionRule; diff --git a/plugins/permission-common/api-report.md b/plugins/permission-common/api-report.md index b51b82c907..1c2476d20d 100644 --- a/plugins/permission-common/api-report.md +++ b/plugins/permission-common/api-report.md @@ -177,7 +177,7 @@ export type PermissionCondition< > = { resourceType: TResourceType; rule: string; - params: TParams; + params?: TParams; }; // @public @@ -208,7 +208,9 @@ export type PermissionMessageBatch = { export type PermissionRuleParam = undefined | JsonPrimitive | JsonPrimitive[]; // @public -export type PermissionRuleParams = Record; +export type PermissionRuleParams = + | undefined + | Record; // @public export type PolicyDecision = diff --git a/plugins/permission-common/src/types/api.ts b/plugins/permission-common/src/types/api.ts index 77d6206c07..5e7a2bb349 100644 --- a/plugins/permission-common/src/types/api.ts +++ b/plugins/permission-common/src/types/api.ts @@ -106,7 +106,7 @@ export type PermissionCondition< > = { resourceType: TResourceType; rule: string; - params: TParams; + params?: TParams; }; /** @@ -161,7 +161,9 @@ export type PermissionRuleParam = undefined | JsonPrimitive | JsonPrimitive[]; * * @public */ -export type PermissionRuleParams = Record; +export type PermissionRuleParams = + | undefined + | Record; /** * An individual request sent to the permission backend. diff --git a/plugins/permission-node/api-report.md b/plugins/permission-node/api-report.md index b272aa9b1c..4bc654cd73 100644 --- a/plugins/permission-node/api-report.md +++ b/plugins/permission-node/api-report.md @@ -55,7 +55,9 @@ export type Condition = TRule extends PermissionRule< infer TResourceType, infer TParams > - ? (params: TParams) => PermissionCondition + ? undefined extends TParams + ? () => PermissionCondition + : (params: TParams) => PermissionCondition : never; // @public @@ -98,7 +100,7 @@ export const createConditionFactory: < TParams extends PermissionRuleParams = PermissionRuleParams, >( rule: PermissionRule, -) => (params: TParams) => PermissionCondition; +) => (args_0: TParams) => PermissionCondition; // @public export const createConditionTransformer: < @@ -129,7 +131,7 @@ export const createPermissionRule: < TResource, TQuery, TResourceType extends string, - TParams extends PermissionRuleParams = PermissionRuleParams, + TParams extends PermissionRuleParams = undefined, >( rule: PermissionRule, ) => PermissionRule; @@ -154,7 +156,7 @@ export const makeCreatePermissionRule: < TResource, TQuery, TResourceType extends string, ->() => ( +>() => ( rule: PermissionRule, ) => PermissionRule; @@ -177,7 +179,7 @@ export type PermissionRule< name: string; description: string; resourceType: TResourceType; - paramsSchema: PermissionRuleSchema; + paramsSchema?: PermissionRuleSchema; apply( resource: TResource, params: NoInfer>>, diff --git a/plugins/permission-node/src/integration/createConditionExports.ts b/plugins/permission-node/src/integration/createConditionExports.ts index 3921c2dfe3..1c82434add 100644 --- a/plugins/permission-node/src/integration/createConditionExports.ts +++ b/plugins/permission-node/src/integration/createConditionExports.ts @@ -36,7 +36,9 @@ export type Condition = TRule extends PermissionRule< infer TResourceType, infer TParams > - ? (params: TParams) => PermissionCondition + ? undefined extends TParams + ? () => PermissionCondition + : (params: TParams) => PermissionCondition : never; /** diff --git a/plugins/permission-node/src/integration/createConditionFactory.test.ts b/plugins/permission-node/src/integration/createConditionFactory.test.ts index 2b3acff342..520fcc01f9 100644 --- a/plugins/permission-node/src/integration/createConditionFactory.test.ts +++ b/plugins/permission-node/src/integration/createConditionFactory.test.ts @@ -37,6 +37,7 @@ describe('createConditionFactory', () => { describe('return value', () => { it('constructs a condition with the rule name and supplied params', () => { const conditionFactory = createConditionFactory(testRule); + expect( conditionFactory({ foo: 'bar', diff --git a/plugins/permission-node/src/integration/createConditionFactory.ts b/plugins/permission-node/src/integration/createConditionFactory.ts index 8edeb6230f..3a31e07dac 100644 --- a/plugins/permission-node/src/integration/createConditionFactory.ts +++ b/plugins/permission-node/src/integration/createConditionFactory.ts @@ -36,15 +36,17 @@ import { PermissionRule } from '../types'; * * @public */ -export const createConditionFactory = - < - TResourceType extends string, - TParams extends PermissionRuleParams = PermissionRuleParams, - >( - rule: PermissionRule, - ) => - (params: TParams): PermissionCondition => ({ - rule: rule.name, - resourceType: rule.resourceType, - params, - }); +export const createConditionFactory = < + TResourceType extends string, + TParams extends PermissionRuleParams = PermissionRuleParams, +>( + rule: PermissionRule, +) => { + return (...args: [TParams]): PermissionCondition => { + return { + rule: rule.name, + resourceType: rule.resourceType, + params: args[0], + }; + }; +}; diff --git a/plugins/permission-node/src/integration/createConditionTransformer.ts b/plugins/permission-node/src/integration/createConditionTransformer.ts index dc0b11e90e..4b6f933f79 100644 --- a/plugins/permission-node/src/integration/createConditionTransformer.ts +++ b/plugins/permission-node/src/integration/createConditionTransformer.ts @@ -47,13 +47,13 @@ const mapConditions = ( } const rule = getRule(criteria.rule); - const result = rule.paramsSchema.safeParse(criteria.params); + const result = rule.paramsSchema?.safeParse(criteria.params); - if (rule.paramsSchema && !result.success) { + if (result && !result.success) { throw new InputError(`Parameters to rule are invalid`, result.error); } - return rule.toQuery(criteria.params); + return rule.toQuery(criteria.params ?? {}); }; /** diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts index 55d4d5f4cf..32d814465f 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts @@ -52,11 +52,8 @@ const testRule2 = createPermissionRule({ name: 'test-rule-2', description: 'Test rule 2', resourceType: 'test-resource', - paramsSchema: z.object({ - foo: z.string().describe('foo'), - }), - apply: (_resource: any, _foo) => false, - toQuery: _foo => ({}), + apply: (_resource: any) => false, + toQuery: () => ({}), }); describe('createPermissionIntegrationRouter', () => { @@ -105,7 +102,6 @@ describe('createPermissionIntegrationRouter', () => { { rule: 'test-rule-2', resourceType: 'test-resource', - params: { foo: 'b' }, }, ], }, @@ -113,9 +109,6 @@ describe('createPermissionIntegrationRouter', () => { not: { rule: 'test-rule-2', resourceType: 'test-resource', - params: { - foo: 'c', - }, }, }, { @@ -133,9 +126,6 @@ describe('createPermissionIntegrationRouter', () => { { rule: 'test-rule-2', resourceType: 'test-resource', - params: { - foo: 'b', - }, }, ], }, @@ -153,9 +143,6 @@ describe('createPermissionIntegrationRouter', () => { { rule: 'test-rule-2', resourceType: 'test-resource', - params: { - foo: 'c', - }, }, ], }, @@ -191,9 +178,6 @@ describe('createPermissionIntegrationRouter', () => { { rule: 'test-rule-2', resourceType: 'test-resource', - params: { - foo: 'a', - }, }, { allOf: [ @@ -208,7 +192,6 @@ describe('createPermissionIntegrationRouter', () => { { rule: 'test-rule-2', resourceType: 'test-resource', - params: { foo: 'b' }, }, ], }, @@ -227,9 +210,6 @@ describe('createPermissionIntegrationRouter', () => { { rule: 'test-rule-2', resourceType: 'test-resource', - params: { - foo: 'b', - }, }, ], }, @@ -248,9 +228,6 @@ describe('createPermissionIntegrationRouter', () => { not: { rule: 'test-rule-2', resourceType: 'test-resource', - params: { - foo: 'd', - }, }, }, ], @@ -309,9 +286,6 @@ describe('createPermissionIntegrationRouter', () => { conditions: { rule: 'test-rule-2', resourceType: 'test-resource', - params: { - foo: 'b', - }, }, }, { @@ -337,9 +311,6 @@ describe('createPermissionIntegrationRouter', () => { not: { rule: 'test-rule-2', resourceType: 'test-resource', - params: { - foo: 'c', - }, }, }, }, @@ -360,9 +331,6 @@ describe('createPermissionIntegrationRouter', () => { { rule: 'test-rule-2', resourceType: 'test-resource', - params: { - foo: 'd', - }, }, ], }, @@ -626,13 +594,7 @@ describe('createPermissionIntegrationRouter', () => { paramsSchema: { $schema: 'http://json-schema.org/draft-07/schema#', additionalProperties: false, - properties: { - foo: { - description: 'foo', - type: 'string', - }, - }, - required: ['foo'], + properties: {}, type: 'object', }, }, diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts index c2d99ac4a4..52f34d7e6a 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts @@ -47,7 +47,7 @@ const permissionCriteriaSchema: z.ZodSchema< z.object({ rule: z.string(), resourceType: z.string(), - params: z.record(z.any()), + params: z.record(z.any()).optional(), }), ]), ); @@ -127,13 +127,13 @@ const applyConditions = ( } const rule = getRule(criteria.rule); - const result = rule.paramsSchema.safeParse(criteria.params); + const result = rule.paramsSchema?.safeParse(criteria.params); - if (rule.paramsSchema && !result.success) { + if (result && !result.success) { throw new InputError(`Parameters to rule are invalid`, result.error); } - return rule.apply(resource, criteria.params); + return rule.apply(resource, criteria.params ?? {}); }; /** @@ -195,7 +195,7 @@ export const createPermissionIntegrationRouter = < name: rule.name, description: rule.description, resourceType: rule.resourceType, - paramsSchema: zodToJsonSchema(rule.paramsSchema), + paramsSchema: zodToJsonSchema(rule.paramsSchema ?? z.object({})), })); return res.json({ permissions, rules: serializableRules }); diff --git a/plugins/permission-node/src/integration/createPermissionRule.ts b/plugins/permission-node/src/integration/createPermissionRule.ts index ea2e37a671..44187e58a6 100644 --- a/plugins/permission-node/src/integration/createPermissionRule.ts +++ b/plugins/permission-node/src/integration/createPermissionRule.ts @@ -26,7 +26,7 @@ export const createPermissionRule = < TResource, TQuery, TResourceType extends string, - TParams extends PermissionRuleParams = PermissionRuleParams, + TParams extends PermissionRuleParams = undefined, >( rule: PermissionRule, ) => rule; @@ -41,7 +41,7 @@ export const createPermissionRule = < */ export const makeCreatePermissionRule = () => - ( + ( rule: PermissionRule, ) => createPermissionRule(rule); diff --git a/plugins/permission-node/src/integration/util.test.ts b/plugins/permission-node/src/integration/util.test.ts index b1961ae532..6c1c270953 100644 --- a/plugins/permission-node/src/integration/util.test.ts +++ b/plugins/permission-node/src/integration/util.test.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { z } from 'zod'; import { createPermissionRule } from './createPermissionRule'; import { createGetRule, @@ -31,7 +30,6 @@ describe('permission integration utils', () => { name: 'test-rule-1', description: 'Test rule 1', resourceType: 'test-resource', - paramsSchema: z.object({}), apply: jest.fn(), toQuery: jest.fn(), }); @@ -40,7 +38,6 @@ describe('permission integration utils', () => { name: 'test-rule-2', description: 'Test rule 2', resourceType: 'test-resource', - paramsSchema: z.object({}), apply: jest.fn(), toQuery: jest.fn(), }); diff --git a/plugins/permission-node/src/types.ts b/plugins/permission-node/src/types.ts index df21889fb9..6b15df407e 100644 --- a/plugins/permission-node/src/types.ts +++ b/plugins/permission-node/src/types.ts @@ -64,9 +64,9 @@ export type PermissionRule< resourceType: TResourceType; /** - * A ZodSchema that documents the parameters that this rule accepts. + * A ZodSchema that reflects the structure of the parameters that are passed to */ - paramsSchema: PermissionRuleSchema; + paramsSchema?: PermissionRuleSchema; /** * Apply this rule to a resource already loaded from a backing data source. The params are diff --git a/plugins/playlist-backend/api-report.md b/plugins/playlist-backend/api-report.md index faae97a734..6b51f316c4 100644 --- a/plugins/playlist-backend/api-report.md +++ b/plugins/playlist-backend/api-report.md @@ -79,7 +79,7 @@ export const playlistConditions: Conditions<{ PlaylistMetadata, ListPlaylistsFilter, 'playlist-list', - PermissionRuleParams + undefined >; }>; diff --git a/plugins/playlist-backend/src/permissions/DefaultPlaylistPermissionPolicy.test.ts b/plugins/playlist-backend/src/permissions/DefaultPlaylistPermissionPolicy.test.ts index 3d761bfd35..17ee4a840a 100644 --- a/plugins/playlist-backend/src/permissions/DefaultPlaylistPermissionPolicy.test.ts +++ b/plugins/playlist-backend/src/permissions/DefaultPlaylistPermissionPolicy.test.ts @@ -70,7 +70,7 @@ describe('DefaultPlaylistPermissionPolicy', () => { playlistConditions.isOwner({ owners: ['user:default/me', 'group:default/owner'], }), - playlistConditions.isPublic({}), + playlistConditions.isPublic(), ], }, }); @@ -91,7 +91,7 @@ describe('DefaultPlaylistPermissionPolicy', () => { playlistConditions.isOwner({ owners: ['user:default/me', 'group:default/owner'], }), - playlistConditions.isPublic({}), + playlistConditions.isPublic(), ], }, }); diff --git a/plugins/playlist-backend/src/permissions/DefaultPlaylistPermissionPolicy.ts b/plugins/playlist-backend/src/permissions/DefaultPlaylistPermissionPolicy.ts index 317f5da9c8..b4556fbb4f 100644 --- a/plugins/playlist-backend/src/permissions/DefaultPlaylistPermissionPolicy.ts +++ b/plugins/playlist-backend/src/permissions/DefaultPlaylistPermissionPolicy.ts @@ -71,7 +71,7 @@ export class DefaultPlaylistPermissionPolicy implements PermissionPolicy { playlistConditions.isOwner({ owners: user?.identity.ownershipEntityRefs ?? [], }), - playlistConditions.isPublic({}), + playlistConditions.isPublic(), ], }); } diff --git a/plugins/playlist-backend/src/permissions/rules.ts b/plugins/playlist-backend/src/permissions/rules.ts index cd6711befb..99f4725972 100644 --- a/plugins/playlist-backend/src/permissions/rules.ts +++ b/plugins/playlist-backend/src/permissions/rules.ts @@ -47,7 +47,6 @@ const isPublic = createPlaylistPermissionRule({ name: 'IS_PUBLIC', description: 'Should allow only if the playlist is public', resourceType: PLAYLIST_LIST_RESOURCE_TYPE, - paramsSchema: z.object({}), apply: (list: PlaylistMetadata) => list.public, toQuery: () => ({ key: 'public', values: [true] }), }); From 4cc3dccc26cdae0dc7f4d40b1b286459df236286 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Thu, 6 Oct 2022 18:14:52 +0200 Subject: [PATCH 091/278] deprecate ingestions types after moving to common Signed-off-by: Kiss Miklos --- .changeset/curvy-pets-wash.md | 8 +++ plugins/catalog-backend/api-report.md | 23 ++++++-- .../catalog-backend/src/ingestion/index.ts | 5 ++ .../catalog-backend/src/ingestion/types.ts | 53 +++++++++++++++++-- 4 files changed, 82 insertions(+), 7 deletions(-) diff --git a/.changeset/curvy-pets-wash.md b/.changeset/curvy-pets-wash.md index a0e9571b18..4c824f9ef4 100644 --- a/.changeset/curvy-pets-wash.md +++ b/.changeset/curvy-pets-wash.md @@ -3,3 +3,11 @@ --- Added a new method `addLocationAnalyzers` to the `CatalogBuilder`. With this you can add location analyzers to your catalog. These analyzers will be used by the /analyze-location endpoint to decide if the provided URL contains any catalog-info.yaml files already or not. + +Moved the following types from this package to `@backstage/plugin-catalog-backend`. + +- AnalyzeLocationResponse +- AnalyzeLocationRequest +- AnalyzeLocationExistingEntity +- AnalyzeLocationGenerateEntity +- AnalyzeLocationEntityField diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index f5922d51ab..d23c6f7519 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -5,9 +5,11 @@ ```ts /// -import { AnalyzeLocationExistingEntity } from '@backstage/plugin-catalog-common'; -import { AnalyzeLocationRequest } from '@backstage/plugin-catalog-common'; -import { AnalyzeLocationResponse } from '@backstage/plugin-catalog-common'; +import { AnalyzeLocationEntityField as AnalyzeLocationEntityField_2 } from '@backstage/plugin-catalog-common'; +import { AnalyzeLocationExistingEntity as AnalyzeLocationExistingEntity_2 } from '@backstage/plugin-catalog-common'; +import { AnalyzeLocationGenerateEntity as AnalyzeLocationGenerateEntity_2 } from '@backstage/plugin-catalog-common'; +import { AnalyzeLocationRequest as AnalyzeLocationRequest_2 } from '@backstage/plugin-catalog-common'; +import { AnalyzeLocationResponse as AnalyzeLocationResponse_2 } from '@backstage/plugin-catalog-common'; import { BackendFeature } from '@backstage/backend-plugin-api'; import { CatalogApi } from '@backstage/catalog-client'; import { CatalogEntityDocument } from '@backstage/plugin-catalog-common'; @@ -54,6 +56,21 @@ import { TokenManager } from '@backstage/backend-common'; import { UrlReader } from '@backstage/backend-common'; import { Validators } from '@backstage/catalog-model'; +// @public @deprecated +export type AnalyzeLocationEntityField = AnalyzeLocationEntityField_2; + +// @public @deprecated +export type AnalyzeLocationExistingEntity = AnalyzeLocationExistingEntity_2; + +// @public @deprecated +export type AnalyzeLocationGenerateEntity = AnalyzeLocationGenerateEntity_2; + +// @public @deprecated (undocumented) +export type AnalyzeLocationRequest = AnalyzeLocationRequest_2; + +// @public @deprecated (undocumented) +export type AnalyzeLocationResponse = AnalyzeLocationResponse_2; + // @public (undocumented) export type AnalyzeOptions = { url: string; diff --git a/plugins/catalog-backend/src/ingestion/index.ts b/plugins/catalog-backend/src/ingestion/index.ts index 0fc71f6785..0b00809043 100644 --- a/plugins/catalog-backend/src/ingestion/index.ts +++ b/plugins/catalog-backend/src/ingestion/index.ts @@ -15,6 +15,11 @@ */ export type { + AnalyzeLocationEntityField, + AnalyzeLocationExistingEntity, + AnalyzeLocationGenerateEntity, + AnalyzeLocationRequest, + AnalyzeLocationResponse, LocationAnalyzer, ScmLocationAnalyzer, AnalyzeOptions, diff --git a/plugins/catalog-backend/src/ingestion/types.ts b/plugins/catalog-backend/src/ingestion/types.ts index c6a480a7f5..467fe498b2 100644 --- a/plugins/catalog-backend/src/ingestion/types.ts +++ b/plugins/catalog-backend/src/ingestion/types.ts @@ -13,12 +13,58 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { - AnalyzeLocationResponse, - AnalyzeLocationRequest, - AnalyzeLocationExistingEntity, + AnalyzeLocationRequest as ExaltedAnalyzeLocationRequest, + AnalyzeLocationResponse as ExaltedAnalyzeLocationResponse, + AnalyzeLocationExistingEntity as ExaltedAnalyzeLocationExistingEntity, + AnalyzeLocationGenerateEntity as ExaltedAnalyzeLocationGenerateEntity, + AnalyzeLocationEntityField as ExaltedAnalyzeLocationEntityField, } from '@backstage/plugin-catalog-common'; +/** + * @public + * @deprecated use the same type from `@backstage/plugin-catalog-common` instead + */ +export type AnalyzeLocationRequest = ExaltedAnalyzeLocationRequest; +/** + * @public + * @deprecated use the same type from `@backstage/plugin-catalog-common` instead + */ +export type AnalyzeLocationResponse = ExaltedAnalyzeLocationResponse; + +/** + * If the folder pointed to already contained catalog info yaml files, they are + * read and emitted like this so that the frontend can inform the user that it + * located them and can make sure to register them as well if they weren't + * already + * @public + * @deprecated use the same type from `@backstage/plugin-catalog-common` instead + */ +export type AnalyzeLocationExistingEntity = + ExaltedAnalyzeLocationExistingEntity; +/** + * This is some form of representation of what the analyzer could deduce. + * We should probably have a chat about how this can best be conveyed to + * the frontend. It'll probably contain a (possibly incomplete) entity, plus + * enough info for the frontend to know what form data to show to the user + * for overriding/completing the info. + * @public + * @deprecated use the same type from `@backstage/plugin-catalog-common` instead + */ +export type AnalyzeLocationGenerateEntity = + ExaltedAnalyzeLocationGenerateEntity; + +/** + * + * This is where I get really vague. Something like this perhaps? Or it could be + * something like a json-schema that contains enough info for the frontend to + * be able to present a form and explanations + * @public + * @deprecated use the same type from `@backstage/plugin-catalog-common` instead + */ +export type AnalyzeLocationEntityField = ExaltedAnalyzeLocationEntityField; + /** @public */ export type LocationAnalyzer = { /** @@ -31,7 +77,6 @@ export type LocationAnalyzer = { location: AnalyzeLocationRequest, ): Promise; }; - /** @public */ export type AnalyzeOptions = { url: string; From 7218a2b0ab0d863051309cfc3397433b9ac8e512 Mon Sep 17 00:00:00 2001 From: Jamie Klassen Date: Thu, 6 Oct 2022 15:03:01 -0400 Subject: [PATCH 092/278] fix localKubectlProxy link the anchors for subheadings generated from this markdown are always lowercase, so this link wasn't working before Signed-off-by: Jamie Klassen --- docs/features/kubernetes/configuration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/features/kubernetes/configuration.md b/docs/features/kubernetes/configuration.md index 1dd684db5f..7dc0e326fa 100644 --- a/docs/features/kubernetes/configuration.md +++ b/docs/features/kubernetes/configuration.md @@ -62,7 +62,7 @@ This is an array used to determine where to retrieve cluster configuration from. Valid cluster locator methods are: - [`catalog`](#catalog) -- [`localKubectlProxy`](#localKubectlProxy) +- [`localKubectlProxy`](#localkubectlproxy) - [`config`](#config) - [`gke`](#gke) - [custom `KubernetesClustersSupplier`](#custom-kubernetesclusterssupplier) From 2b9b25b944e0365cca144a06e13b7b99ac9bf0e4 Mon Sep 17 00:00:00 2001 From: Jason Nguyen Date: Thu, 6 Oct 2022 15:01:00 -0600 Subject: [PATCH 093/278] docker.md: document need for BuildKit to be enabled Signed-off-by: Jason Nguyen --- docs/deployment/docker.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/docs/deployment/docker.md b/docs/deployment/docker.md index d35e7dd593..af8dbe08e8 100644 --- a/docs/deployment/docker.md +++ b/docs/deployment/docker.md @@ -68,6 +68,10 @@ RUN apt-get update && \ # From here on we use the least-privileged `node` user to run the backend. USER node + +# This should create the app dir as `node`. +# If it is instead created as `root` then the `tar` command below will fail: `can't create directory 'packages/': Permission denied`. +# If this occurs, then ensure BuildKit is enabled (`DOCKER_BUILDKIT=1`) so the app dir is correctly created as `node`. WORKDIR /app # This switches many Node.js dependencies to production mode. @@ -192,6 +196,10 @@ RUN apt-get update && \ # From here on we use the least-privileged `node` user to run the backend. USER node + +# This should create the app dir as `node`. +# If it is instead created as `root` then the `tar` command below will fail: `can't create directory 'packages/': Permission denied`. +# If this occurs, then ensure BuildKit is enabled (`DOCKER_BUILDKIT=1`) so the app dir is correctly created as `node`. WORKDIR /app # This switches many Node.js dependencies to production mode. From 053f1e8ea63fa548134983a3202b5f396168beb0 Mon Sep 17 00:00:00 2001 From: Jason Nguyen Date: Thu, 6 Oct 2022 15:02:09 -0600 Subject: [PATCH 094/278] create-app: update Dockerfile to indicate need for BuildKit to be enabled Signed-off-by: Jason Nguyen --- .../templates/default-app/packages/backend/Dockerfile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/create-app/templates/default-app/packages/backend/Dockerfile b/packages/create-app/templates/default-app/packages/backend/Dockerfile index 682798b826..9a9f54e610 100644 --- a/packages/create-app/templates/default-app/packages/backend/Dockerfile +++ b/packages/create-app/templates/default-app/packages/backend/Dockerfile @@ -20,6 +20,10 @@ RUN apt-get update && \ # From here on we use the least-privileged `node` user to run the backend. USER node + +# This should create the app dir as `node`. +# If it is instead created as `root` then the `tar` command below will fail: `can't create directory 'packages/': Permission denied`. +# If this occurs, then ensure BuildKit is enabled (`DOCKER_BUILDKIT=1`) so the app dir is correctly created as `node`. WORKDIR /app # This switches many Node.js dependencies to production mode. From 0ba0883570682596a78187291f9031d611c6f5ba Mon Sep 17 00:00:00 2001 From: irma12 Date: Fri, 7 Oct 2022 09:44:16 +0200 Subject: [PATCH 095/278] Fixed changelog spelling Signed-off-by: irma12 --- .changeset/many-kangaroos-raise.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/many-kangaroos-raise.md b/.changeset/many-kangaroos-raise.md index 11c0e82668..3d1a25d47e 100644 --- a/.changeset/many-kangaroos-raise.md +++ b/.changeset/many-kangaroos-raise.md @@ -2,4 +2,4 @@ '@backstage/plugin-catalog': patch --- -Added emptyContent property to CatalogTable and DefaultCatalogPage to support customization for emptyContent of the Catalog Table. +Added `emptyContent` property to CatalogTable and DefaultCatalogPage to support customization of the Catalog Table. From bae3617be5a84aaca38bf84c06dd4338946237f3 Mon Sep 17 00:00:00 2001 From: Patrick Jungermann Date: Thu, 6 Oct 2022 23:51:18 +0200 Subject: [PATCH 096/278] feat(catalog/awsS3): Add option to configure schedule via `app-config.yaml` Relates-to: PR #13859 Signed-off-by: Patrick Jungermann --- .changeset/gorgeous-onions-thank.md | 8 ++ docs/integrations/aws-s3/discovery.md | 13 +++ .../catalog-backend-module-aws/api-report.md | 4 +- .../catalog-backend-module-aws/config.d.ts | 19 ++-- .../catalog-backend-module-aws/package.json | 1 + .../src/providers/AwsS3EntityProvider.test.ts | 96 ++++++++++++++++++- .../src/providers/AwsS3EntityProvider.ts | 44 ++++++--- .../src/providers/config.test.ts | 22 ++++- .../src/providers/config.ts | 6 ++ .../src/providers/types.ts | 3 + yarn.lock | 1 + 11 files changed, 188 insertions(+), 29 deletions(-) create mode 100644 .changeset/gorgeous-onions-thank.md diff --git a/.changeset/gorgeous-onions-thank.md b/.changeset/gorgeous-onions-thank.md new file mode 100644 index 0000000000..8b41bfa5a0 --- /dev/null +++ b/.changeset/gorgeous-onions-thank.md @@ -0,0 +1,8 @@ +--- +'@backstage/plugin-catalog-backend-module-aws': patch +--- + +`AwsS3EntityProvider`: Add option to configure schedule via `app-config.yaml` instead of in code. + +Please find how to configure the schedule at the config at +https://backstage.io/docs/integrations/aws-s3/discovery diff --git a/docs/integrations/aws-s3/discovery.md b/docs/integrations/aws-s3/discovery.md index 9e9e6ebede..748aeb2392 100644 --- a/docs/integrations/aws-s3/discovery.md +++ b/docs/integrations/aws-s3/discovery.md @@ -32,6 +32,11 @@ catalog: bucketName: sample-bucket prefix: prefix/ # optional region: us-east-2 # optional, uses the default region otherwise + schedule: # optional; same options as in TaskScheduleDefinition + # supports cron, ISO duration, "human duration" as used in code + frequency: { minutes: 30 } + # supports ISO duration, "human duration" as used in code + timeout: { minutes: 3 } ``` For simple setups, you can omit the provider ID at the config @@ -47,6 +52,11 @@ catalog: bucketName: sample-bucket prefix: prefix/ # optional region: us-east-2 # optional, uses the default region otherwise + schedule: # optional; same options as in TaskScheduleDefinition + # supports cron, ISO duration, "human duration" as used in code + frequency: { minutes: 30 } + # supports ISO duration, "human duration" as used in code + timeout: { minutes: 3 } ``` As this provider is not one of the default providers, you will first need to install @@ -69,10 +79,13 @@ const builder = await CatalogBuilder.create(env); builder.addEntityProvider( AwsS3EntityProvider.fromConfig(env.config, { logger: env.logger, + // optional: alternatively, use scheduler with schedule defined in app-config.yaml schedule: env.scheduler.createScheduledTaskRunner({ frequency: { minutes: 30 }, timeout: { minutes: 3 }, }), + // optional: alternatively, use schedule + scheduler: env.scheduler, }), ); ``` diff --git a/plugins/catalog-backend-module-aws/api-report.md b/plugins/catalog-backend-module-aws/api-report.md index b1f6358979..c5e56818c2 100644 --- a/plugins/catalog-backend-module-aws/api-report.md +++ b/plugins/catalog-backend-module-aws/api-report.md @@ -12,6 +12,7 @@ import { EntityProvider } from '@backstage/plugin-catalog-backend'; import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; import { LocationSpec } from '@backstage/plugin-catalog-backend'; import { Logger } from 'winston'; +import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { TaskRunner } from '@backstage/backend-tasks'; import { UrlReader } from '@backstage/backend-common'; @@ -77,7 +78,8 @@ export class AwsS3EntityProvider implements EntityProvider { configRoot: Config, options: { logger: Logger; - schedule: TaskRunner; + schedule?: TaskRunner; + scheduler?: PluginTaskScheduler; }, ): AwsS3EntityProvider[]; // (undocumented) diff --git a/plugins/catalog-backend-module-aws/config.d.ts b/plugins/catalog-backend-module-aws/config.d.ts index 6f84ca6daf..d6efe10c90 100644 --- a/plugins/catalog-backend-module-aws/config.d.ts +++ b/plugins/catalog-backend-module-aws/config.d.ts @@ -14,11 +14,10 @@ * limitations under the License. */ +import { TaskScheduleDefinitionConfig } from '@backstage/backend-tasks'; + export interface Config { catalog?: { - /** - * List of processor-specific options and attributes - */ processors?: { /** * AwsOrganizationCloudAccountProcessor configuration @@ -32,9 +31,6 @@ export interface Config { }; }; }; - /** - * List of provider-specific options and attributes - */ providers?: { /** * AwsS3EntityProvider configuration @@ -45,22 +41,23 @@ export interface Config { | { /** * (Required) AWS S3 Bucket Name - * @visibility backend */ bucketName: string; /** * (Optional) AWS S3 Object key prefix * If not set, all keys will be accepted, no filtering will be applied. - * @visibility backend */ prefix?: string; /** * (Optional) AWS Region. * If not set, AWS_REGION environment variable or aws config file will be used. * @see https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/setting-region.html - * @visibility backend */ region?: string; + /** + * (Optional) TaskScheduleDefinition for the refresh. + */ + schedule?: TaskScheduleDefinitionConfig; } | Record< string, @@ -83,6 +80,10 @@ export interface Config { * @visibility backend */ region?: string; + /** + * (Optional) TaskScheduleDefinition for the refresh. + */ + schedule?: TaskScheduleDefinitionConfig; } >; }; diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json index 8be3ca3031..e348d76c93 100644 --- a/plugins/catalog-backend-module-aws/package.json +++ b/plugins/catalog-backend-module-aws/package.json @@ -50,6 +50,7 @@ "@backstage/cli": "workspace:^", "@types/lodash": "^4.14.151", "aws-sdk-mock": "^5.2.1", + "luxon": "^3.0.0", "yaml": "^2.0.0" }, "files": [ diff --git a/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.test.ts b/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.test.ts index 3d59d738cf..134a3c6338 100644 --- a/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.test.ts +++ b/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.test.ts @@ -15,7 +15,11 @@ */ import { getVoidLogger } from '@backstage/backend-common'; -import { TaskInvocationDefinition, TaskRunner } from '@backstage/backend-tasks'; +import { + PluginTaskScheduler, + TaskInvocationDefinition, + TaskRunner, +} from '@backstage/backend-tasks'; import { ConfigReader } from '@backstage/config'; import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; import { AwsS3EntityProvider } from './AwsS3EntityProvider'; @@ -83,6 +87,7 @@ describe('AwsS3EntityProvider', () => { expectedBaseUrl: string, names: Record, integrationConfig?: object, + scheduleInConfig?: boolean, ) => { const config = new ConfigReader({ integrations: { @@ -97,15 +102,25 @@ describe('AwsS3EntityProvider', () => { }, }); + const schedulingConfig: Record = {}; + const schedule = new PersistingTaskRunner(); const entityProviderConnection: EntityProviderConnection = { applyMutation: jest.fn(), refresh: jest.fn(), }; + if (scheduleInConfig) { + schedulingConfig.scheduler = { + createScheduledTaskRunner: (_: any) => schedule, + } as unknown as PluginTaskScheduler; + } else { + schedulingConfig.schedule = schedule; + } + const provider = AwsS3EntityProvider.fromConfig(config, { + ...schedulingConfig, logger, - schedule, })[0]; expect(provider.getProviderName()).toEqual(`awsS3-provider:${providerId}`); @@ -224,4 +239,81 @@ describe('AwsS3EntityProvider', () => { }, ); }); + + it('fail without schedule and scheduler', () => { + const config = new ConfigReader({ + catalog: { + providers: { + awsS3: { + test: { + bucketName: 'bucket-1', + prefix: 'sub/dir/', + region: 'eu-west-1', + }, + }, + }, + }, + }); + + expect(() => + AwsS3EntityProvider.fromConfig(config, { + logger, + }), + ).toThrow('Either schedule or scheduler must be provided'); + }); + + it('fail with scheduler but no schedule config', () => { + const scheduler = { + createScheduledTaskRunner: (_: any) => jest.fn(), + } as unknown as PluginTaskScheduler; + const config = new ConfigReader({ + catalog: { + providers: { + awsS3: { + test: { + bucketName: 'bucket-1', + prefix: 'sub/dir/', + region: 'eu-west-1', + }, + }, + }, + }, + }); + + expect(() => + AwsS3EntityProvider.fromConfig(config, { + logger, + scheduler, + }), + ).toThrow( + 'No schedule provided neither via code nor config for awsS3-provider:test', + ); + }); + + // eslint-disable-next-line jest/expect-expect + it('single simple provider config with schedule in config', async () => { + return expectMutation( + 'regionalStatic', + { + bucketName: 'bucket-1', + prefix: 'sub/dir/', + region: 'eu-west-1', + schedule: { + frequency: 'PT30M', + timeout: { + minutes: 3, + }, + }, + }, + 'https://s3.eu-west-1.amazonaws.com/bucket-1/sub/dir/', + { + 'key1.yaml': 'generated-7f6d5861b0b3401a38b5fe62e6c7ca11da5fd6d8', + 'key2.yaml': 'generated-a290be145586042af7d80715626399c9d661718d', + 'key3.yaml': 'generated-8d75f78ed9fa618ce433b226dc24eeab441f3a2d', + 'key 4.yaml': 'generated-1e0249dcb5805fc2ce6ac2d3c4d2a3ef4f1270c0', + }, + undefined, + true, + ); + }); }); diff --git a/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.ts b/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.ts index cee5eea1a4..80bc4d459b 100644 --- a/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.ts +++ b/plugins/catalog-backend-module-aws/src/providers/AwsS3EntityProvider.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { TaskRunner } from '@backstage/backend-tasks'; +import { PluginTaskScheduler, TaskRunner } from '@backstage/backend-tasks'; import { Config } from '@backstage/config'; import { AwsS3Integration, ScmIntegrations } from '@backstage/integration'; import { @@ -49,7 +49,8 @@ export class AwsS3EntityProvider implements EntityProvider { configRoot: Config, options: { logger: Logger; - schedule: TaskRunner; + schedule?: TaskRunner; + scheduler?: PluginTaskScheduler; }, ): AwsS3EntityProvider[] { const providerConfigs = readAwsS3Configs(configRoot); @@ -67,22 +68,35 @@ export class AwsS3EntityProvider implements EntityProvider { throw new Error('No integration found for awsS3'); } - return providerConfigs.map( - providerConfig => - new AwsS3EntityProvider( - providerConfig, - integration, - options.logger, - options.schedule, - ), - ); + if (!options.schedule && !options.scheduler) { + throw new Error('Either schedule or scheduler must be provided.'); + } + + return providerConfigs.map(providerConfig => { + if (!options.schedule && !providerConfig.schedule) { + throw new Error( + `No schedule provided neither via code nor config for awsS3-provider:${providerConfig.id}.`, + ); + } + + const taskRunner = + options.schedule ?? + options.scheduler!.createScheduledTaskRunner(providerConfig.schedule!); + + return new AwsS3EntityProvider( + providerConfig, + integration, + options.logger, + taskRunner, + ); + }); } private constructor( private readonly config: AwsS3Config, integration: AwsS3Integration, logger: Logger, - schedule: TaskRunner, + taskRunner: TaskRunner, ) { this.logger = logger.child({ target: this.getProviderName(), @@ -99,13 +113,13 @@ export class AwsS3EntityProvider implements EntityProvider { s3ForcePathStyle: integration.config.s3ForcePathStyle, }); - this.scheduleFn = this.createScheduleFn(schedule); + this.scheduleFn = this.createScheduleFn(taskRunner); } - private createScheduleFn(schedule: TaskRunner): () => Promise { + private createScheduleFn(taskRunner: TaskRunner): () => Promise { return async () => { const taskId = `${this.getProviderName()}:refresh`; - return schedule.run({ + return taskRunner.run({ id: taskId, fn: async () => { const logger = this.logger.child({ diff --git a/plugins/catalog-backend-module-aws/src/providers/config.test.ts b/plugins/catalog-backend-module-aws/src/providers/config.test.ts index 534d4da35e..fb2f3c0790 100644 --- a/plugins/catalog-backend-module-aws/src/providers/config.test.ts +++ b/plugins/catalog-backend-module-aws/src/providers/config.test.ts @@ -15,6 +15,7 @@ */ import { ConfigReader } from '@backstage/config'; +import { Duration } from 'luxon'; import { readAwsS3Configs } from './config'; describe('readAwsS3Configs', () => { @@ -54,17 +55,26 @@ describe('readAwsS3Configs', () => { const provider3 = { bucketName: 'bucket-3', }; + const provider4 = { + bucketName: 'bucket-4', + schedule: { + frequency: 'PT30M', + timeout: { + minutes: 3, + }, + }, + }; const config = { catalog: { providers: { - awsS3: { provider1, provider2, provider3 }, + awsS3: { provider1, provider2, provider3, provider4 }, }, }, }; const actual = readAwsS3Configs(new ConfigReader(config)); - expect(actual).toHaveLength(3); + expect(actual).toHaveLength(4); expect(actual[0]).toEqual({ ...provider1, id: 'provider1', @@ -77,6 +87,14 @@ describe('readAwsS3Configs', () => { ...provider3, id: 'provider3', }); + expect(actual[3]).toEqual({ + ...provider4, + id: 'provider4', + schedule: { + ...provider4.schedule, + frequency: Duration.fromISO(provider4.schedule.frequency), + }, + }); }); it('fails if bucketName is missing', () => { diff --git a/plugins/catalog-backend-module-aws/src/providers/config.ts b/plugins/catalog-backend-module-aws/src/providers/config.ts index 5fdf2351c3..5ef2729bf0 100644 --- a/plugins/catalog-backend-module-aws/src/providers/config.ts +++ b/plugins/catalog-backend-module-aws/src/providers/config.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import { readTaskScheduleDefinitionFromConfig } from '@backstage/backend-tasks'; import { Config } from '@backstage/config'; import { AwsS3Config } from './types'; @@ -46,10 +47,15 @@ function readAwsS3Config(id: string, config: Config): AwsS3Config { const region = config.getOptionalString('region'); const prefix = config.getOptionalString('prefix'); + const schedule = config.has('schedule') + ? readTaskScheduleDefinitionFromConfig(config.getConfig('schedule')) + : undefined; + return { id, bucketName, region, prefix, + schedule, }; } diff --git a/plugins/catalog-backend-module-aws/src/providers/types.ts b/plugins/catalog-backend-module-aws/src/providers/types.ts index 3508bf919c..204fa154c6 100644 --- a/plugins/catalog-backend-module-aws/src/providers/types.ts +++ b/plugins/catalog-backend-module-aws/src/providers/types.ts @@ -14,9 +14,12 @@ * limitations under the License. */ +import { TaskScheduleDefinition } from '@backstage/backend-tasks'; + export type AwsS3Config = { id: string; bucketName: string; prefix?: string; region?: string; + schedule?: TaskScheduleDefinition; }; diff --git a/yarn.lock b/yarn.lock index ac27eb8215..58cf42441d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4450,6 +4450,7 @@ __metadata: aws-sdk: ^2.840.0 aws-sdk-mock: ^5.2.1 lodash: ^4.17.21 + luxon: ^3.0.0 p-limit: ^3.0.2 uuid: ^8.0.0 winston: ^3.2.1 From defb389ecdc98d6c37725feb5d56bdfbcb3e1391 Mon Sep 17 00:00:00 2001 From: Patrick Jungermann Date: Fri, 7 Oct 2022 00:06:53 +0200 Subject: [PATCH 097/278] feat(catalog/awsS3): Add backend plugin Add `awsS3EntityProviderCatalogModule` (new backend-plugin-api, alpha). Relates-to: PR #13859 Signed-off-by: Patrick Jungermann --- .changeset/kind-emus-juggle.md | 5 ++ .../catalog-backend-module-aws/api-report.md | 6 ++ .../catalog-backend-module-aws/package.json | 15 ++-- .../catalog-backend-module-aws/src/index.ts | 1 + .../AwsS3EntityProviderCatalogModule.test.ts | 84 +++++++++++++++++++ .../AwsS3EntityProviderCatalogModule.ts | 53 ++++++++++++ yarn.lock | 3 + 7 files changed, 162 insertions(+), 5 deletions(-) create mode 100644 .changeset/kind-emus-juggle.md create mode 100644 plugins/catalog-backend-module-aws/src/service/AwsS3EntityProviderCatalogModule.test.ts create mode 100644 plugins/catalog-backend-module-aws/src/service/AwsS3EntityProviderCatalogModule.ts diff --git a/.changeset/kind-emus-juggle.md b/.changeset/kind-emus-juggle.md new file mode 100644 index 0000000000..2a99deef81 --- /dev/null +++ b/.changeset/kind-emus-juggle.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-aws': patch +--- + +Add `awsS3EntityProviderCatalogModule` (new backend-plugin-api, alpha). diff --git a/plugins/catalog-backend-module-aws/api-report.md b/plugins/catalog-backend-module-aws/api-report.md index c5e56818c2..a911fb5ebb 100644 --- a/plugins/catalog-backend-module-aws/api-report.md +++ b/plugins/catalog-backend-module-aws/api-report.md @@ -3,6 +3,7 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { BackendFeature } from '@backstage/backend-plugin-api'; import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; import { CatalogProcessorEmit } from '@backstage/plugin-catalog-backend'; import { CatalogProcessorParser } from '@backstage/plugin-catalog-backend'; @@ -87,4 +88,9 @@ export class AwsS3EntityProvider implements EntityProvider { // (undocumented) refresh(logger: Logger): Promise; } + +// @alpha +export const awsS3EntityProviderCatalogModule: ( + options?: undefined, +) => BackendFeature; ``` diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json index e348d76c93..56fdf96f14 100644 --- a/plugins/catalog-backend-module-aws/package.json +++ b/plugins/catalog-backend-module-aws/package.json @@ -7,6 +7,7 @@ "license": "Apache-2.0", "publishConfig": { "access": "public", + "alphaTypes": "dist/index.alpha.d.ts", "main": "dist/index.cjs.js", "types": "dist/index.d.ts" }, @@ -23,22 +24,24 @@ "backstage" ], "scripts": { - "build": "backstage-cli package build", + "start": "backstage-cli package start", + "build": "backstage-cli package build --experimental-type-build", "lint": "backstage-cli package lint", "test": "backstage-cli package test", "prepack": "backstage-cli package prepack", "postpack": "backstage-cli package postpack", - "clean": "backstage-cli package clean", - "start": "backstage-cli package start" + "clean": "backstage-cli package clean" }, "dependencies": { "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", "@backstage/backend-tasks": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", "@backstage/plugin-catalog-backend": "workspace:^", + "@backstage/plugin-catalog-node": "workspace:^", "@backstage/types": "workspace:^", "aws-sdk": "^2.840.0", "lodash": "^4.17.21", @@ -47,6 +50,7 @@ "winston": "^3.2.1" }, "devDependencies": { + "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", "@types/lodash": "^4.14.151", "aws-sdk-mock": "^5.2.1", @@ -54,8 +58,9 @@ "yaml": "^2.0.0" }, "files": [ - "dist", - "config.d.ts" + "alpha", + "config.d.ts", + "dist" ], "configSchema": "config.d.ts" } diff --git a/plugins/catalog-backend-module-aws/src/index.ts b/plugins/catalog-backend-module-aws/src/index.ts index 212308edaa..804fd97e91 100644 --- a/plugins/catalog-backend-module-aws/src/index.ts +++ b/plugins/catalog-backend-module-aws/src/index.ts @@ -22,4 +22,5 @@ export * from './processors'; export * from './providers'; +export { awsS3EntityProviderCatalogModule } from './service/AwsS3EntityProviderCatalogModule'; export * from './types'; diff --git a/plugins/catalog-backend-module-aws/src/service/AwsS3EntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-aws/src/service/AwsS3EntityProviderCatalogModule.test.ts new file mode 100644 index 0000000000..3167291bca --- /dev/null +++ b/plugins/catalog-backend-module-aws/src/service/AwsS3EntityProviderCatalogModule.test.ts @@ -0,0 +1,84 @@ +/* + * 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 { getVoidLogger } from '@backstage/backend-common'; +import { + configServiceRef, + loggerServiceRef, + schedulerServiceRef, +} from '@backstage/backend-plugin-api'; +import { + PluginTaskScheduler, + TaskScheduleDefinition, +} from '@backstage/backend-tasks'; +import { startTestBackend } from '@backstage/backend-test-utils'; +import { ConfigReader } from '@backstage/config'; +import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node'; +import { Duration } from 'luxon'; +import { awsS3EntityProviderCatalogModule } from './AwsS3EntityProviderCatalogModule'; +import { AwsS3EntityProvider } from '../providers'; + +describe('awsS3EntityProviderCatalogModule', () => { + it('should register provider at the catalog extension point', async () => { + let addedProviders: Array | undefined; + let usedSchedule: TaskScheduleDefinition | undefined; + + const extensionPoint = { + addEntityProvider: (providers: any) => { + addedProviders = providers; + }, + }; + const runner = jest.fn(); + const scheduler = { + createScheduledTaskRunner: (schedule: TaskScheduleDefinition) => { + usedSchedule = schedule; + return runner; + }, + } as unknown as PluginTaskScheduler; + + const config = new ConfigReader({ + catalog: { + providers: { + awsS3: { + bucketName: 'module-test', + schedule: { + frequency: 'P1M', + timeout: 'PT3M', + }, + }, + }, + }, + }); + + await startTestBackend({ + extensionPoints: [[catalogProcessingExtensionPoint, extensionPoint]], + services: [ + [configServiceRef, config], + [loggerServiceRef, getVoidLogger()], + [schedulerServiceRef, scheduler], + ], + features: [awsS3EntityProviderCatalogModule()], + }); + + expect(usedSchedule?.frequency).toEqual(Duration.fromISO('P1M')); + expect(usedSchedule?.timeout).toEqual(Duration.fromISO('PT3M')); + expect(addedProviders?.length).toEqual(1); + expect(addedProviders?.pop()?.getProviderName()).toEqual( + 'awsS3-provider:default', + ); + expect(runner).not.toHaveBeenCalled(); + }); +}); diff --git a/plugins/catalog-backend-module-aws/src/service/AwsS3EntityProviderCatalogModule.ts b/plugins/catalog-backend-module-aws/src/service/AwsS3EntityProviderCatalogModule.ts new file mode 100644 index 0000000000..79269ad53a --- /dev/null +++ b/plugins/catalog-backend-module-aws/src/service/AwsS3EntityProviderCatalogModule.ts @@ -0,0 +1,53 @@ +/* + * 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 { + createBackendModule, + loggerToWinstonLogger, + configServiceRef, + loggerServiceRef, + schedulerServiceRef, +} from '@backstage/backend-plugin-api'; +import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node'; +import { AwsS3EntityProvider } from '../providers'; + +/** + * Registers the AwsS3EntityProvider with the catalog processing extension point. + * + * @alpha + */ +export const awsS3EntityProviderCatalogModule = createBackendModule({ + pluginId: 'catalog', + moduleId: 'awsS3EntityProvider', + register(env) { + env.registerInit({ + deps: { + config: configServiceRef, + catalog: catalogProcessingExtensionPoint, + logger: loggerServiceRef, + scheduler: schedulerServiceRef, + }, + async init({ config, catalog, logger, scheduler }) { + catalog.addEntityProvider( + AwsS3EntityProvider.fromConfig(config, { + logger: loggerToWinstonLogger(logger), + scheduler, + }), + ); + }, + }); + }, +}); diff --git a/yarn.lock b/yarn.lock index 58cf42441d..2bd6f7bfdd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4438,13 +4438,16 @@ __metadata: resolution: "@backstage/plugin-catalog-backend-module-aws@workspace:plugins/catalog-backend-module-aws" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-tasks": "workspace:^" + "@backstage/backend-test-utils": "workspace:^" "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" "@backstage/plugin-catalog-backend": "workspace:^" + "@backstage/plugin-catalog-node": "workspace:^" "@backstage/types": "workspace:^" "@types/lodash": ^4.14.151 aws-sdk: ^2.840.0 From 87ff05892d3fe235dedb6ea15b26e66bcd0110f5 Mon Sep 17 00:00:00 2001 From: Patrick Jungermann Date: Fri, 7 Oct 2022 00:33:18 +0200 Subject: [PATCH 098/278] feat(catalog/azure): Add option to configure schedule via `app-config.yaml` Relates-to: PR #13859 Signed-off-by: Patrick Jungermann --- .changeset/clean-planets-rhyme.md | 8 ++ docs/integrations/azure/discovery.md | 33 ++++-- .../api-report.md | 4 +- .../catalog-backend-module-azure/config.d.ts | 11 +- .../catalog-backend-module-azure/package.json | 3 +- .../AzureDevOpsEntityProvider.test.ts | 106 +++++++++++++++++- .../providers/AzureDevOpsEntityProvider.ts | 29 +++-- .../src/providers/config.test.ts | 26 ++++- .../src/providers/config.ts | 6 + .../src/providers/types.ts | 3 + yarn.lock | 1 + 11 files changed, 204 insertions(+), 26 deletions(-) create mode 100644 .changeset/clean-planets-rhyme.md diff --git a/.changeset/clean-planets-rhyme.md b/.changeset/clean-planets-rhyme.md new file mode 100644 index 0000000000..a6878b491b --- /dev/null +++ b/.changeset/clean-planets-rhyme.md @@ -0,0 +1,8 @@ +--- +'@backstage/plugin-catalog-backend-module-azure': patch +--- + +`AzureDevOpsEntityProvider`: Add option to configure schedule via `app-config.yaml` instead of in code. + +Please find how to configure the schedule at the config at +https://backstage.io/docs/integrations/azure/discovery diff --git a/docs/integrations/azure/discovery.md b/docs/integrations/azure/discovery.md index 6a420462c0..2156f60814 100644 --- a/docs/integrations/azure/discovery.md +++ b/docs/integrations/azure/discovery.md @@ -42,12 +42,17 @@ catalog: project: myproject repository: service-* # this will match all repos starting with service-* path: /catalog-info.yaml + schedule: # optional; same options as in TaskScheduleDefinition + # supports cron, ISO duration, "human duration" as used in code + frequency: { minutes: 30 } + # supports ISO duration, "human duration" as used in code + timeout: { minutes: 3 } anotherProviderId: # another identifier organization: myorg project: myproject repository: '*' # this will match all repos path: /src/*/catalog-info.yaml # this will search for files deep inside the /src folder - yetAotherProviderId: # guess, what? Another one :) + yetAnotherProviderId: # guess, what? Another one :) host: selfhostedazure.yourcompany.com organization: myorg project: myproject @@ -55,11 +60,20 @@ catalog: The parameters available are: -- `host:` Leave empty for Cloud hosted, otherwise set to your self-hosted instance host. -- `organization:` Your Organization slug (or Collection for on-premise users). Required. -- `project:` Your project slug. Required. -- `repository:` The repository name. Wildcards are supported as show on the examples above. If not set, all repositories will be searched. -- `path:` Where to find catalog-info.yaml files. Defaults to /catalog-info.yaml. +- **`host:`** _(optional)_ Leave empty for Cloud hosted, otherwise set to your self-hosted instance host. +- **`organization:`** Your Organization slug (or Collection for on-premise users). Required. +- **`project:`** Your project slug. Required. +- **`repository:`** _(optional)_ The repository name. Wildcards are supported as show on the examples above. If not set, all repositories will be searched. +- **`path:`** _(optional)_ Where to find catalog-info.yaml files. Defaults to /catalog-info.yaml. +- **`schedule`** _(optional)_: + - **`frequency`**: + How often you want the task to run. The system does its best to avoid overlapping invocations. + - **`timeout`**: + The maximum amount of time that a single task invocation can take. + - **`initialDelay`** _(optional)_: + The amount of time that should pass before the first invocation happens. + - **`scope`** _(optional)_: + `'global'` or `'local'`. Sets the scope of concurrency control. _Note:_ the path parameter follows the same rules as the search on Azure DevOps web interface. For more details visit the @@ -84,10 +98,13 @@ const builder = await CatalogBuilder.create(env); +builder.addEntityProvider( + AzureDevOpsEntityProvider.fromConfig(env.config, { + logger: env.logger, ++ // optional: alternatively, use scheduler with schedule defined in app-config.yaml + schedule: env.scheduler.createScheduledTaskRunner({ -+ frequency: Duration.fromObject({ minutes: 30 }), -+ timeout: Duration.fromObject({ minutes: 3 }), ++ frequency: { minutes: 30 }, ++ timeout: { minutes: 3 }, + }), ++ // optional: alternatively, use schedule ++ scheduler: env.scheduler, + }), +); ``` diff --git a/plugins/catalog-backend-module-azure/api-report.md b/plugins/catalog-backend-module-azure/api-report.md index 22f5015c9b..8fb7edeb53 100644 --- a/plugins/catalog-backend-module-azure/api-report.md +++ b/plugins/catalog-backend-module-azure/api-report.md @@ -10,6 +10,7 @@ import { EntityProvider } from '@backstage/plugin-catalog-backend'; import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; import { LocationSpec } from '@backstage/plugin-catalog-backend'; import { Logger } from 'winston'; +import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { ScmIntegrationRegistry } from '@backstage/integration'; import { TaskRunner } from '@backstage/backend-tasks'; @@ -45,7 +46,8 @@ export class AzureDevOpsEntityProvider implements EntityProvider { configRoot: Config, options: { logger: Logger; - schedule: TaskRunner; + schedule?: TaskRunner; + scheduler?: PluginTaskScheduler; }, ): AzureDevOpsEntityProvider[]; // (undocumented) diff --git a/plugins/catalog-backend-module-azure/config.d.ts b/plugins/catalog-backend-module-azure/config.d.ts index 6e423c9415..940695c8ea 100644 --- a/plugins/catalog-backend-module-azure/config.d.ts +++ b/plugins/catalog-backend-module-azure/config.d.ts @@ -14,34 +14,35 @@ * limitations under the License. */ +import { TaskScheduleDefinitionConfig } from '@backstage/backend-tasks'; + interface AzureDevOpsConfig { /** * (Optional) The DevOps host; leave empty for `dev.azure.com`, otherwise set to your self-hosted instance host. - * @visibility backend */ host: string; /** * (Required) Your organization slug. - * @visibility backend */ organization: string; /** * (Required) Your project slug. - * @visibility backend */ project: string; /** * (Optional) The repository name. Wildcards are supported as show on the examples above. * If not set, all repositories will be searched. - * @visibility backend */ repository?: string; /** * (Optional) Where to find catalog-info.yaml files. Wildcards are supported. * If not set, defaults to /catalog-info.yaml. - * @visibility backend */ path?: string; + /** + * (Optional) TaskScheduleDefinition for the refresh. + */ + schedule?: TaskScheduleDefinitionConfig; } export interface Config { diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index 0385655259..00dbc0d744 100644 --- a/plugins/catalog-backend-module-azure/package.json +++ b/plugins/catalog-backend-module-azure/package.json @@ -49,7 +49,8 @@ "devDependencies": { "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", - "@types/lodash": "^4.14.151" + "@types/lodash": "^4.14.151", + "luxon": "^3.0.0" }, "files": [ "dist", diff --git a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts index c57455d8d6..f7a63f259e 100644 --- a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts +++ b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.test.ts @@ -15,7 +15,11 @@ */ import { getVoidLogger } from '@backstage/backend-common'; -import { TaskInvocationDefinition, TaskRunner } from '@backstage/backend-tasks'; +import { + PluginTaskScheduler, + TaskInvocationDefinition, + TaskRunner, +} from '@backstage/backend-tasks'; import { ConfigReader } from '@backstage/config'; import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; import { CodeSearchResultItem } from '../lib'; @@ -52,6 +56,7 @@ describe('AzureDevOpsEntityProvider', () => { expectedBaseUrl: string, names: Record, integrationConfig?: object, + scheduleInConfig?: boolean, ) => { const config = new ConfigReader({ integrations: { @@ -74,9 +79,18 @@ describe('AzureDevOpsEntityProvider', () => { refresh: jest.fn(), }; + const schedulingConfig: Record = {}; + if (scheduleInConfig) { + schedulingConfig.scheduler = { + createScheduledTaskRunner: (_: any) => schedule, + } as unknown as PluginTaskScheduler; + } else { + schedulingConfig.schedule = schedule; + } + const provider = AzureDevOpsEntityProvider.fromConfig(config, { + ...schedulingConfig, logger, - schedule, })[0]; expect(provider.getProviderName()).toEqual( `AzureDevOpsEntityProvider:${providerId}`, @@ -193,4 +207,92 @@ describe('AzureDevOpsEntityProvider', () => { }, ); }); + + it('fail without schedule and scheduler', () => { + const config = new ConfigReader({ + catalog: { + providers: { + azureDevOps: { + test: { + organization: 'myorganization', + project: 'myproject', + }, + }, + }, + }, + }); + + expect(() => + AzureDevOpsEntityProvider.fromConfig(config, { + logger, + }), + ).toThrow('Either schedule or scheduler must be provided'); + }); + + it('fail with scheduler but no schedule config', () => { + const scheduler = { + createScheduledTaskRunner: (_: any) => jest.fn(), + } as unknown as PluginTaskScheduler; + const config = new ConfigReader({ + catalog: { + providers: { + azureDevOps: { + test: { + organization: 'myorganization', + project: 'myproject', + }, + }, + }, + }, + }); + + expect(() => + AzureDevOpsEntityProvider.fromConfig(config, { + logger, + scheduler, + }), + ).toThrow( + 'No schedule provided neither via code nor config for AzureDevOpsEntityProvider:test', + ); + }); + + // eslint-disable-next-line jest/expect-expect + it('single simple provider config with schedule in config', async () => { + return expectMutation( + 'allReposMultipleFiles', + { + organization: 'myorganization', + project: 'myproject', + schedule: { + frequency: 'PT30M', + timeout: { + minutes: 3, + }, + }, + }, + [ + { + fileName: 'catalog-info.yaml', + path: '/catalog-info.yaml', + repository: { + name: 'myrepo', + }, + }, + { + fileName: 'catalog-info.yaml', + path: '/catalog-info.yaml', + repository: { + name: 'myotherrepo', + }, + }, + ], + 'https://dev.azure.com/myorganization/myproject', + { + 'myrepo?path=/catalog-info.yaml': + 'generated-87865246726bb12a8c4fb4f914443f1fbb91648c', + 'myotherrepo?path=/catalog-info.yaml': + 'generated-2deccac384c34d0dca37be0ebb4b1c8cf6913fe1', + }, + ); + }); }); diff --git a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts index aca30f367a..b824d176ee 100644 --- a/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts +++ b/plugins/catalog-backend-module-azure/src/providers/AzureDevOpsEntityProvider.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { TaskRunner } from '@backstage/backend-tasks'; +import { PluginTaskScheduler, TaskRunner } from '@backstage/backend-tasks'; import { Config } from '@backstage/config'; import { AzureIntegration, ScmIntegrations } from '@backstage/integration'; import { @@ -45,11 +45,16 @@ export class AzureDevOpsEntityProvider implements EntityProvider { configRoot: Config, options: { logger: Logger; - schedule: TaskRunner; + schedule?: TaskRunner; + scheduler?: PluginTaskScheduler; }, ): AzureDevOpsEntityProvider[] { const providerConfigs = readAzureDevOpsConfigs(configRoot); + if (!options.schedule && !options.scheduler) { + throw new Error('Either schedule or scheduler must be provided.'); + } + return providerConfigs.map(providerConfig => { const integration = ScmIntegrations.fromConfig(configRoot).azure.byHost( providerConfig.host, @@ -61,11 +66,21 @@ export class AzureDevOpsEntityProvider implements EntityProvider { ); } + if (!options.schedule && !providerConfig.schedule) { + throw new Error( + `No schedule provided neither via code nor config for AzureDevOpsEntityProvider:${providerConfig.id}.`, + ); + } + + const taskRunner = + options.schedule ?? + options.scheduler!.createScheduledTaskRunner(providerConfig.schedule!); + return new AzureDevOpsEntityProvider( providerConfig, integration, options.logger, - options.schedule, + taskRunner, ); }); } @@ -74,19 +89,19 @@ export class AzureDevOpsEntityProvider implements EntityProvider { private readonly config: AzureDevOpsConfig, private readonly integration: AzureIntegration, logger: Logger, - schedule: TaskRunner, + taskRunner: TaskRunner, ) { this.logger = logger.child({ target: this.getProviderName(), }); - this.scheduleFn = this.createScheduleFn(schedule); + this.scheduleFn = this.createScheduleFn(taskRunner); } - private createScheduleFn(schedule: TaskRunner): () => Promise { + private createScheduleFn(taskRunner: TaskRunner): () => Promise { return async () => { const taskId = `${this.getProviderName()}:refresh`; - return schedule.run({ + return taskRunner.run({ id: taskId, fn: async () => { const logger = this.logger.child({ diff --git a/plugins/catalog-backend-module-azure/src/providers/config.test.ts b/plugins/catalog-backend-module-azure/src/providers/config.test.ts index 236c9a48d4..a09079f1c3 100644 --- a/plugins/catalog-backend-module-azure/src/providers/config.test.ts +++ b/plugins/catalog-backend-module-azure/src/providers/config.test.ts @@ -15,6 +15,7 @@ */ import { ConfigReader } from '@backstage/config'; +import { Duration } from 'luxon'; import { readAzureDevOpsConfigs } from './config'; describe('readAzureDevOpsConfigs', () => { @@ -33,17 +34,27 @@ describe('readAzureDevOpsConfigs', () => { project: 'myproject', repository: 'service-*', }; + const provider4 = { + organization: 'mycompany', + project: 'myproject', + schedule: { + frequency: 'PT30M', + timeout: { + minutes: 3, + }, + }, + }; const config = { catalog: { providers: { - azureDevOps: { provider1, provider2, provider3 }, + azureDevOps: { provider1, provider2, provider3, provider4 }, }, }, }; const actual = readAzureDevOpsConfigs(new ConfigReader(config)); - expect(actual).toHaveLength(3); + expect(actual).toHaveLength(4); expect(actual[0]).toEqual({ ...provider1, path: '/catalog-info.yaml', @@ -63,5 +74,16 @@ describe('readAzureDevOpsConfigs', () => { path: '/catalog-info.yaml', id: 'provider3', }); + expect(actual[3]).toEqual({ + ...provider4, + host: 'dev.azure.com', + path: '/catalog-info.yaml', + repository: '*', + id: 'provider4', + schedule: { + ...provider4.schedule, + frequency: Duration.fromISO(provider4.schedule.frequency), + }, + }); }); }); diff --git a/plugins/catalog-backend-module-azure/src/providers/config.ts b/plugins/catalog-backend-module-azure/src/providers/config.ts index 1d143fc882..c84c242488 100644 --- a/plugins/catalog-backend-module-azure/src/providers/config.ts +++ b/plugins/catalog-backend-module-azure/src/providers/config.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import { readTaskScheduleDefinitionFromConfig } from '@backstage/backend-tasks'; import { Config } from '@backstage/config'; import { AzureDevOpsConfig } from './types'; @@ -42,6 +43,10 @@ function readAzureDevOpsConfig(id: string, config: Config): AzureDevOpsConfig { const repository = config.getOptionalString('repository') || '*'; const path = config.getOptionalString('path') || '/catalog-info.yaml'; + const schedule = config.has('schedule') + ? readTaskScheduleDefinitionFromConfig(config.getConfig('schedule')) + : undefined; + return { id, host, @@ -49,5 +54,6 @@ function readAzureDevOpsConfig(id: string, config: Config): AzureDevOpsConfig { project, repository, path, + schedule, }; } diff --git a/plugins/catalog-backend-module-azure/src/providers/types.ts b/plugins/catalog-backend-module-azure/src/providers/types.ts index 15ea00ff13..b22a8551a5 100644 --- a/plugins/catalog-backend-module-azure/src/providers/types.ts +++ b/plugins/catalog-backend-module-azure/src/providers/types.ts @@ -14,6 +14,8 @@ * limitations under the License. */ +import { TaskScheduleDefinition } from '@backstage/backend-tasks'; + export type AzureDevOpsConfig = { id: string; host: string; @@ -21,4 +23,5 @@ export type AzureDevOpsConfig = { project: string; repository: string; path: string; + schedule?: TaskScheduleDefinition; }; diff --git a/yarn.lock b/yarn.lock index 2bd6f7bfdd..23830a549a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4477,6 +4477,7 @@ __metadata: "@backstage/types": "workspace:^" "@types/lodash": ^4.14.151 lodash: ^4.17.21 + luxon: ^3.0.0 msw: ^0.47.0 node-fetch: ^2.6.7 uuid: ^8.0.0 From 0ca399b31bac18bde801ab58c2b904afb59e74bd Mon Sep 17 00:00:00 2001 From: Patrick Jungermann Date: Fri, 7 Oct 2022 00:46:21 +0200 Subject: [PATCH 099/278] feat(catalog/azure): Add backend plugin Add `azureDevOpsEntityProviderCatalogModule` (new backend-plugin-api, alpha). Relates-to: PR #13859 Signed-off-by: Patrick Jungermann --- .changeset/itchy-paws-protect.md | 5 ++ .../api-report.md | 6 ++ .../catalog-backend-module-azure/package.json | 14 +-- .../catalog-backend-module-azure/src/index.ts | 1 + ...eDevOpsEntityProviderCatalogModule.test.ts | 87 +++++++++++++++++++ .../AzureDevOpsEntityProviderCatalogModule.ts | 53 +++++++++++ yarn.lock | 2 + 7 files changed, 163 insertions(+), 5 deletions(-) create mode 100644 .changeset/itchy-paws-protect.md create mode 100644 plugins/catalog-backend-module-azure/src/service/AzureDevOpsEntityProviderCatalogModule.test.ts create mode 100644 plugins/catalog-backend-module-azure/src/service/AzureDevOpsEntityProviderCatalogModule.ts diff --git a/.changeset/itchy-paws-protect.md b/.changeset/itchy-paws-protect.md new file mode 100644 index 0000000000..a0c272e5e4 --- /dev/null +++ b/.changeset/itchy-paws-protect.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-azure': patch +--- + +Add `azureDevOpsEntityProviderCatalogModule` (new backend-plugin-api, alpha). diff --git a/plugins/catalog-backend-module-azure/api-report.md b/plugins/catalog-backend-module-azure/api-report.md index 8fb7edeb53..84ffaf39e9 100644 --- a/plugins/catalog-backend-module-azure/api-report.md +++ b/plugins/catalog-backend-module-azure/api-report.md @@ -3,6 +3,7 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { BackendFeature } from '@backstage/backend-plugin-api'; import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; import { CatalogProcessorEmit } from '@backstage/plugin-catalog-backend'; import { Config } from '@backstage/config'; @@ -55,4 +56,9 @@ export class AzureDevOpsEntityProvider implements EntityProvider { // (undocumented) refresh(logger: Logger): Promise; } + +// @alpha +export const azureDevOpsEntityProviderCatalogModule: ( + options?: undefined, +) => BackendFeature; ``` diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index 00dbc0d744..c8c768b1db 100644 --- a/plugins/catalog-backend-module-azure/package.json +++ b/plugins/catalog-backend-module-azure/package.json @@ -7,6 +7,7 @@ "license": "Apache-2.0", "publishConfig": { "access": "public", + "alphaTypes": "dist/index.alpha.d.ts", "main": "dist/index.cjs.js", "types": "dist/index.d.ts" }, @@ -23,22 +24,24 @@ "backstage" ], "scripts": { - "build": "backstage-cli package build", + "start": "backstage-cli package start", + "build": "backstage-cli package build --experimental-type-build", "lint": "backstage-cli package lint", "test": "backstage-cli package test", "prepack": "backstage-cli package prepack", "postpack": "backstage-cli package postpack", - "clean": "backstage-cli package clean", - "start": "backstage-cli package start" + "clean": "backstage-cli package clean" }, "dependencies": { "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", "@backstage/backend-tasks": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", "@backstage/plugin-catalog-backend": "workspace:^", + "@backstage/plugin-catalog-node": "workspace:^", "@backstage/types": "workspace:^", "lodash": "^4.17.21", "msw": "^0.47.0", @@ -53,8 +56,9 @@ "luxon": "^3.0.0" }, "files": [ - "dist", - "config.d.ts" + "alpha", + "config.d.ts", + "dist" ], "configSchema": "config.d.ts" } diff --git a/plugins/catalog-backend-module-azure/src/index.ts b/plugins/catalog-backend-module-azure/src/index.ts index a71c40ee6c..aa3a94fda2 100644 --- a/plugins/catalog-backend-module-azure/src/index.ts +++ b/plugins/catalog-backend-module-azure/src/index.ts @@ -22,3 +22,4 @@ export { AzureDevOpsDiscoveryProcessor } from './processors'; export { AzureDevOpsEntityProvider } from './providers'; +export { azureDevOpsEntityProviderCatalogModule } from './service/AzureDevOpsEntityProviderCatalogModule'; diff --git a/plugins/catalog-backend-module-azure/src/service/AzureDevOpsEntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-azure/src/service/AzureDevOpsEntityProviderCatalogModule.test.ts new file mode 100644 index 0000000000..e3a0449a8e --- /dev/null +++ b/plugins/catalog-backend-module-azure/src/service/AzureDevOpsEntityProviderCatalogModule.test.ts @@ -0,0 +1,87 @@ +/* + * 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 { getVoidLogger } from '@backstage/backend-common'; +import { + configServiceRef, + loggerServiceRef, + schedulerServiceRef, +} from '@backstage/backend-plugin-api'; +import { + PluginTaskScheduler, + TaskScheduleDefinition, +} from '@backstage/backend-tasks'; +import { startTestBackend } from '@backstage/backend-test-utils'; +import { ConfigReader } from '@backstage/config'; +import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node'; +import { Duration } from 'luxon'; +import { azureDevOpsEntityProviderCatalogModule } from './AzureDevOpsEntityProviderCatalogModule'; +import { AzureDevOpsEntityProvider } from '../providers'; + +describe('azureDevOpsEntityProviderCatalogModule', () => { + it('should register provider at the catalog extension point', async () => { + let addedProviders: Array | undefined; + let usedSchedule: TaskScheduleDefinition | undefined; + + const extensionPoint = { + addEntityProvider: (providers: any) => { + addedProviders = providers; + }, + }; + const runner = jest.fn(); + const scheduler = { + createScheduledTaskRunner: (schedule: TaskScheduleDefinition) => { + usedSchedule = schedule; + return runner; + }, + } as unknown as PluginTaskScheduler; + + const config = new ConfigReader({ + catalog: { + providers: { + azureDevOps: { + test: { + organization: 'myorganization', + project: 'myproject', + schedule: { + frequency: 'P1M', + timeout: 'PT3M', + }, + }, + }, + }, + }, + }); + + await startTestBackend({ + extensionPoints: [[catalogProcessingExtensionPoint, extensionPoint]], + services: [ + [configServiceRef, config], + [loggerServiceRef, getVoidLogger()], + [schedulerServiceRef, scheduler], + ], + features: [azureDevOpsEntityProviderCatalogModule()], + }); + + expect(usedSchedule?.frequency).toEqual(Duration.fromISO('P1M')); + expect(usedSchedule?.timeout).toEqual(Duration.fromISO('PT3M')); + expect(addedProviders?.length).toEqual(1); + expect(addedProviders?.pop()?.getProviderName()).toEqual( + 'AzureDevOpsEntityProvider:test', + ); + expect(runner).not.toHaveBeenCalled(); + }); +}); diff --git a/plugins/catalog-backend-module-azure/src/service/AzureDevOpsEntityProviderCatalogModule.ts b/plugins/catalog-backend-module-azure/src/service/AzureDevOpsEntityProviderCatalogModule.ts new file mode 100644 index 0000000000..f3621bee23 --- /dev/null +++ b/plugins/catalog-backend-module-azure/src/service/AzureDevOpsEntityProviderCatalogModule.ts @@ -0,0 +1,53 @@ +/* + * 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 { + createBackendModule, + loggerToWinstonLogger, + configServiceRef, + loggerServiceRef, + schedulerServiceRef, +} from '@backstage/backend-plugin-api'; +import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node'; +import { AzureDevOpsEntityProvider } from '../providers'; + +/** + * Registers the AzureDevOpsEntityProvider with the catalog processing extension point. + * + * @alpha + */ +export const azureDevOpsEntityProviderCatalogModule = createBackendModule({ + pluginId: 'catalog', + moduleId: 'azureDevOpsEntityProvider', + register(env) { + env.registerInit({ + deps: { + config: configServiceRef, + catalog: catalogProcessingExtensionPoint, + logger: loggerServiceRef, + scheduler: schedulerServiceRef, + }, + async init({ config, catalog, logger, scheduler }) { + catalog.addEntityProvider( + AzureDevOpsEntityProvider.fromConfig(config, { + logger: loggerToWinstonLogger(logger), + scheduler, + }), + ); + }, + }); + }, +}); diff --git a/yarn.lock b/yarn.lock index 23830a549a..074a6fc323 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4466,6 +4466,7 @@ __metadata: resolution: "@backstage/plugin-catalog-backend-module-azure@workspace:plugins/catalog-backend-module-azure" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-tasks": "workspace:^" "@backstage/backend-test-utils": "workspace:^" "@backstage/catalog-model": "workspace:^" @@ -4474,6 +4475,7 @@ __metadata: "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" "@backstage/plugin-catalog-backend": "workspace:^" + "@backstage/plugin-catalog-node": "workspace:^" "@backstage/types": "workspace:^" "@types/lodash": ^4.14.151 lodash: ^4.17.21 From 68f7f5a857f1b47edad74dba5ccf231447e65b1b Mon Sep 17 00:00:00 2001 From: Patrick Jungermann Date: Fri, 7 Oct 2022 10:11:29 +0200 Subject: [PATCH 100/278] feat(catalog/bitbucketServer): Add option to configure schedule via `app-config.yaml` Relates-to: PR #13859 Signed-off-by: Patrick Jungermann --- .changeset/tasty-scissors-tickle.md | 8 + .../integrations/bitbucketServer/discovery.md | 36 ++-- .../api-report.md | 4 +- .../config.d.ts | 13 +- .../package.json | 1 + .../BitbucketServerEntityProvider.test.ts | 171 +++++++++++++++++- .../BitbucketServerEntityProvider.ts | 52 ++++-- ...itbucketServerEntityProviderConfig.test.ts | 27 ++- .../BitbucketServerEntityProviderConfig.ts | 10 + yarn.lock | 1 + 10 files changed, 285 insertions(+), 38 deletions(-) create mode 100644 .changeset/tasty-scissors-tickle.md diff --git a/.changeset/tasty-scissors-tickle.md b/.changeset/tasty-scissors-tickle.md new file mode 100644 index 0000000000..745172df36 --- /dev/null +++ b/.changeset/tasty-scissors-tickle.md @@ -0,0 +1,8 @@ +--- +'@backstage/plugin-catalog-backend-module-bitbucket-server': patch +--- + +`BitbucketServerEntityProvider`: Add option to configure schedule via `app-config.yaml` instead of in code. + +Please find how to configure the schedule at the config at +https://backstage.io/docs/integrations/bitbucketServer/discovery diff --git a/docs/integrations/bitbucketServer/discovery.md b/docs/integrations/bitbucketServer/discovery.md index 57e52d1dae..c4288b33ec 100644 --- a/docs/integrations/bitbucketServer/discovery.md +++ b/docs/integrations/bitbucketServer/discovery.md @@ -37,10 +37,13 @@ And then add the entity provider to your catalog builder: + builder.addEntityProvider( + BitbucketServerEntityProvider.fromConfig(env.config, { + logger: env.logger, ++ // optional: alternatively, use scheduler with schedule defined in app-config.yaml + schedule: env.scheduler.createScheduledTaskRunner({ + frequency: { minutes: 30 }, + timeout: { minutes: 3 }, + }), ++ // optional: alternatively, use schedule ++ scheduler: env.scheduler, + }), + ); @@ -66,19 +69,33 @@ catalog: filters: # optional projectKey: '^apis-.*$' # optional; RegExp repoSlug: '^service-.*$' # optional; RegExp + schedule: # optional; same options as in TaskScheduleDefinition + # supports cron, ISO duration, "human duration" as used in code + frequency: { minutes: 30 } + # supports ISO duration, "human duration" as used in code + timeout: { minutes: 3 } ``` -- **host**: +- **`host`**: The host of the Bitbucket Server instance, **note**: the host needs to registered as an integration as well, see [location](locations.md). - **`catalogPath`** _(optional)_: Default: `/catalog-info.yaml`. Path where to look for `catalog-info.yaml` files. When started with `/`, it is an absolute path from the repo root. -- **filters** _(optional)_: +- **`filters`** _(optional)_: - **`projectKey`** _(optional)_: Regular expression used to filter results based on the project key. - - **repoSlug** _(optional)_: + - **`repoSlug`** _(optional)_: Regular expression used to filter results based on the repo slug. +- **`schedule`** _(optional)_: + - **`frequency`**: + How often you want the task to run. The system does its best to avoid overlapping invocations. + - **`timeout`**: + The maximum amount of time that a single task invocation can take. + - **`initialDelay`** _(optional)_: + The amount of time that should pass before the first invocation happens. + - **`scope`** _(optional)_: + `'global'` or `'local'`. Sets the scope of concurrency control. ## Custom location processing @@ -93,18 +110,15 @@ repository. ```typescript const provider = BitbucketServerEntityProvider.fromConfig(env.config, { logger: env.logger, - schedule: env.scheduler.createScheduledTaskRunner({ - frequency: { minutes: 30 }, - timeout: { minutes: 3 }, - }), + schedule: env.scheduler, parser: async function* customLocationParser(options: { - location: LocationSpec, - client: BitbucketServerClient, + location: LocationSpec; + client: BitbucketServerClient; }) { // Custom logic for interpreting the matching repository // See defaultBitbucketServerLocationParser for an example - } -); + }, +}); ``` ## Alternative diff --git a/plugins/catalog-backend-module-bitbucket-server/api-report.md b/plugins/catalog-backend-module-bitbucket-server/api-report.md index 7d95e148a3..6c840883af 100644 --- a/plugins/catalog-backend-module-bitbucket-server/api-report.md +++ b/plugins/catalog-backend-module-bitbucket-server/api-report.md @@ -10,6 +10,7 @@ import { EntityProvider } from '@backstage/plugin-catalog-backend'; import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; import { LocationSpec } from '@backstage/plugin-catalog-backend'; import { Logger } from 'winston'; +import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { Response as Response_2 } from 'node-fetch'; import { TaskRunner } from '@backstage/backend-tasks'; @@ -55,8 +56,9 @@ export class BitbucketServerEntityProvider implements EntityProvider { config: Config, options: { logger: Logger; - schedule: TaskRunner; parser?: BitbucketServerLocationParser; + schedule?: TaskRunner; + scheduler?: PluginTaskScheduler; }, ): BitbucketServerEntityProvider[]; // (undocumented) diff --git a/plugins/catalog-backend-module-bitbucket-server/config.d.ts b/plugins/catalog-backend-module-bitbucket-server/config.d.ts index d8a09c92a4..67f694d419 100644 --- a/plugins/catalog-backend-module-bitbucket-server/config.d.ts +++ b/plugins/catalog-backend-module-bitbucket-server/config.d.ts @@ -14,11 +14,10 @@ * limitations under the License. */ +import { TaskScheduleDefinitionConfig } from '@backstage/backend-tasks'; + export interface Config { catalog?: { - /** - * List of provider-specific options and attributes - */ providers?: { /** * BitbucketServerEntityProvider configuration @@ -48,6 +47,10 @@ export interface Config { */ projectKey?: RegExp; }; + /** + * (Optional) TaskScheduleDefinition for the refresh. + */ + schedule?: TaskScheduleDefinitionConfig; } | Record< string, @@ -73,6 +76,10 @@ export interface Config { */ projectKey?: RegExp; }; + /** + * (Optional) TaskScheduleDefinition for the refresh. + */ + schedule?: TaskScheduleDefinitionConfig; } >; }; diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json index 2490b79ffa..021b531cea 100644 --- a/plugins/catalog-backend-module-bitbucket-server/package.json +++ b/plugins/catalog-backend-module-bitbucket-server/package.json @@ -46,6 +46,7 @@ "devDependencies": { "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", + "luxon": "^3.0.0", "msw": "^0.47.0" }, "files": [ diff --git a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.test.ts b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.test.ts index 39689b6c1d..20299e3452 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.test.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.test.ts @@ -15,14 +15,18 @@ */ import { getVoidLogger } from '@backstage/backend-common'; -import { TaskInvocationDefinition, TaskRunner } from '@backstage/backend-tasks'; +import { + PluginTaskScheduler, + TaskInvocationDefinition, + TaskRunner, +} from '@backstage/backend-tasks'; +import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; -import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; -import { BitbucketServerEntityProvider } from './BitbucketServerEntityProvider'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; -import { BitbucketServerPagedResponse } from '../lib/BitbucketServerClient'; +import { BitbucketServerEntityProvider } from './BitbucketServerEntityProvider'; +import { BitbucketServerPagedResponse } from '../lib'; class PersistingTaskRunner implements TaskRunner { private tasks: TaskInvocationDefinition[] = []; @@ -367,4 +371,163 @@ describe('BitbucketServerEntityProvider', () => { entities: expectedEntities, }); }); + + it('fail without schedule and scheduler', () => { + const config = new ConfigReader({ + catalog: { + providers: { + bitbucketServer: { + host: 'bitbucket.mycompany.com', + }, + }, + }, + integrations: { + bitbucketServer: [ + { + host: 'bitbucket.mycompany.com', + }, + ], + }, + }); + + expect(() => + BitbucketServerEntityProvider.fromConfig(config, { + logger, + }), + ).toThrow('Either schedule or scheduler must be provided'); + }); + + it('fail with scheduler but no schedule config', () => { + const scheduler = { + createScheduledTaskRunner: (_: any) => jest.fn(), + } as unknown as PluginTaskScheduler; + const config = new ConfigReader({ + catalog: { + providers: { + bitbucketServer: { + host: 'bitbucket.mycompany.com', + }, + }, + }, + integrations: { + bitbucketServer: [ + { + host: 'bitbucket.mycompany.com', + }, + ], + }, + }); + + expect(() => + BitbucketServerEntityProvider.fromConfig(config, { + logger, + scheduler, + }), + ).toThrow( + 'No schedule provided neither via code nor config for bitbucketServer-provider:default', + ); + }); + + it('apply full update with schedule in config', async () => { + const host = 'bitbucket.mycompany.com'; + const config = new ConfigReader({ + integrations: { + bitbucketServer: [ + { + host: host, + }, + ], + }, + catalog: { + providers: { + bitbucketServer: { + mainProvider: { + host: host, + schedule: { + frequency: 'PT30M', + timeout: { + minutes: 3, + }, + }, + }, + }, + }, + }, + }); + const schedule = new PersistingTaskRunner(); + const scheduler = { + createScheduledTaskRunner: (_: any) => schedule, + } as unknown as PluginTaskScheduler; + const entityProviderConnection: EntityProviderConnection = { + applyMutation: jest.fn(), + refresh: jest.fn(), + }; + const provider = BitbucketServerEntityProvider.fromConfig(config, { + logger, + scheduler, + })[0]; + expect(provider.getProviderName()).toEqual( + 'bitbucketServer-provider:mainProvider', + ); + + setupStubs( + [ + { key: 'project-test', repos: ['repo-test'] }, + { key: 'other-project', repos: ['other-repo'] }, + ], + `https://${host}`, + ); + await provider.connect(entityProviderConnection); + + const taskDef = schedule.getTasks()[0]; + expect(taskDef.id).toEqual('bitbucketServer-provider:mainProvider:refresh'); + await (taskDef.fn as () => Promise)(); + + const expectedEntities = [ + { + entity: { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Location', + metadata: { + annotations: { + 'backstage.io/managed-by-location': `url:https://${host}/projects/project-test/repos/repo-test/browse/catalog-info.yaml`, + 'backstage.io/managed-by-origin-location': `url:https://${host}/projects/project-test/repos/repo-test/browse/catalog-info.yaml`, + }, + name: 'generated-77f4323822420990f8c3e3c981d38c2dec4ae3a6', + }, + spec: { + presence: 'optional', + target: `https://${host}/projects/project-test/repos/repo-test/browse/catalog-info.yaml`, + type: 'url', + }, + }, + locationKey: 'bitbucketServer-provider:mainProvider', + }, + { + entity: { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Location', + metadata: { + annotations: { + 'backstage.io/managed-by-location': `url:https://${host}/projects/other-project/repos/other-repo/browse/catalog-info.yaml`, + 'backstage.io/managed-by-origin-location': `url:https://${host}/projects/other-project/repos/other-repo/browse/catalog-info.yaml`, + }, + name: 'generated-d8d4944c30c2906dfee172ddda9537f9893b2c0f', + }, + spec: { + presence: 'optional', + target: `https://${host}/projects/other-project/repos/other-repo/browse/catalog-info.yaml`, + type: 'url', + }, + }, + locationKey: 'bitbucketServer-provider:mainProvider', + }, + ]; + + expect(entityProviderConnection.applyMutation).toHaveBeenCalledTimes(1); + expect(entityProviderConnection.applyMutation).toHaveBeenCalledWith({ + type: 'full', + entities: expectedEntities, + }); + }); }); diff --git a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.ts b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.ts index 92cecf642a..447b71ee58 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProvider.ts @@ -14,29 +14,29 @@ * limitations under the License. */ +import { PluginTaskScheduler, TaskRunner } from '@backstage/backend-tasks'; +import { Entity } from '@backstage/catalog-model'; +import { Config } from '@backstage/config'; +import { InputError } from '@backstage/errors'; +import { + BitbucketServerIntegration, + ScmIntegrations, +} from '@backstage/integration'; import { EntityProvider, EntityProviderConnection, } from '@backstage/plugin-catalog-backend'; import { Logger } from 'winston'; -import { Config } from '@backstage/config'; -import { TaskRunner } from '@backstage/backend-tasks'; import * as uuid from 'uuid'; -import { - BitbucketServerLocationParser, - defaultBitbucketServerLocationParser, -} from './BitbucketServerLocationParser'; -import { - BitbucketServerIntegration, - ScmIntegrations, -} from '@backstage/integration'; import { BitbucketServerClient, paginated } from '../lib'; -import { InputError } from '@backstage/errors'; import { BitbucketServerEntityProviderConfig, readProviderConfigs, } from './BitbucketServerEntityProviderConfig'; -import { Entity } from '@backstage/catalog-model'; +import { + BitbucketServerLocationParser, + defaultBitbucketServerLocationParser, +} from './BitbucketServerLocationParser'; /** * Discovers catalog files located in Bitbucket Server. @@ -58,12 +58,17 @@ export class BitbucketServerEntityProvider implements EntityProvider { config: Config, options: { logger: Logger; - schedule: TaskRunner; parser?: BitbucketServerLocationParser; + schedule?: TaskRunner; + scheduler?: PluginTaskScheduler; }, ): BitbucketServerEntityProvider[] { const integrations = ScmIntegrations.fromConfig(config); + if (!options.schedule && !options.scheduler) { + throw new Error('Either schedule or scheduler must be provided.'); + } + return readProviderConfigs(config).map(providerConfig => { const integration = integrations.bitbucketServer.byHost( providerConfig.host, @@ -73,11 +78,22 @@ export class BitbucketServerEntityProvider implements EntityProvider { `No BitbucketServer integration found that matches host ${providerConfig.host}`, ); } + + if (!options.schedule && !providerConfig.schedule) { + throw new Error( + `No schedule provided neither via code nor config for bitbucketServer-provider:${providerConfig.id}.`, + ); + } + + const taskRunner = + options.schedule ?? + options.scheduler!.createScheduledTaskRunner(providerConfig.schedule!); + return new BitbucketServerEntityProvider( providerConfig, integration, options.logger, - options.schedule, + taskRunner, options.parser, ); }); @@ -87,7 +103,7 @@ export class BitbucketServerEntityProvider implements EntityProvider { config: BitbucketServerEntityProviderConfig, integration: BitbucketServerIntegration, logger: Logger, - schedule: TaskRunner, + taskRunner: TaskRunner, parser?: BitbucketServerLocationParser, ) { this.integration = integration; @@ -96,13 +112,13 @@ export class BitbucketServerEntityProvider implements EntityProvider { this.logger = logger.child({ target: this.getProviderName(), }); - this.scheduleFn = this.createScheduleFn(schedule); + this.scheduleFn = this.createScheduleFn(taskRunner); } - private createScheduleFn(schedule: TaskRunner): () => Promise { + private createScheduleFn(taskRunner: TaskRunner): () => Promise { return async () => { const taskId = `${this.getProviderName()}:refresh`; - return schedule.run({ + return taskRunner.run({ id: taskId, fn: async () => { const logger = this.logger.child({ diff --git a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProviderConfig.test.ts b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProviderConfig.test.ts index 712b26cbb0..af8639566f 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProviderConfig.test.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProviderConfig.test.ts @@ -15,6 +15,7 @@ */ import { ConfigReader } from '@backstage/config'; +import { Duration } from 'luxon'; import { readProviderConfigs } from './BitbucketServerEntityProviderConfig'; describe('readProviderConfigs', () => { @@ -63,13 +64,22 @@ describe('readProviderConfigs', () => { host: 'bitbucket2.mycompany.com', catalogPath: 'custom/path/catalog-info.yaml', }, + thirdProvider: { + host: 'bitbucket3.mycompany.com', + schedule: { + frequency: 'PT30M', + timeout: { + minutes: 3, + }, + }, + }, }, }, }, }); const providerConfigs = readProviderConfigs(config); - expect(providerConfigs).toHaveLength(2); + expect(providerConfigs).toHaveLength(3); expect(providerConfigs[0]).toEqual({ id: 'mainProvider', catalogPath: '/catalog-info.yaml', @@ -88,6 +98,21 @@ describe('readProviderConfigs', () => { repoSlug: undefined, }, }); + expect(providerConfigs[2]).toEqual({ + id: 'thirdProvider', + catalogPath: '/catalog-info.yaml', + host: 'bitbucket3.mycompany.com', + filters: { + projectKey: undefined, + repoSlug: undefined, + }, + schedule: { + frequency: Duration.fromISO('PT30M'), + timeout: { + minutes: 3, + }, + }, + }); }); it('single provider config with filters', () => { diff --git a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProviderConfig.ts b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProviderConfig.ts index 8a3decab43..b2ed7a8556 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProviderConfig.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/providers/BitbucketServerEntityProviderConfig.ts @@ -14,6 +14,10 @@ * limitations under the License. */ +import { + readTaskScheduleDefinitionFromConfig, + TaskScheduleDefinition, +} from '@backstage/backend-tasks'; import { Config } from '@backstage/config'; const DEFAULT_CATALOG_PATH = '/catalog-info.yaml'; @@ -27,6 +31,7 @@ export type BitbucketServerEntityProviderConfig = { projectKey?: RegExp; repoSlug?: RegExp; }; + schedule?: TaskScheduleDefinition; }; export function readProviderConfigs( @@ -60,6 +65,10 @@ function readProviderConfig( const projectKeyPattern = config.getOptionalString('filters.projectKey'); const repoSlugPattern = config.getOptionalString('filters.repoSlug'); + const schedule = config.has('schedule') + ? readTaskScheduleDefinitionFromConfig(config.getConfig('schedule')) + : undefined; + return { id, host, @@ -68,5 +77,6 @@ function readProviderConfig( projectKey: projectKeyPattern ? new RegExp(projectKeyPattern) : undefined, repoSlug: repoSlugPattern ? new RegExp(repoSlugPattern) : undefined, }, + schedule, }; } diff --git a/yarn.lock b/yarn.lock index 074a6fc323..b90c1a515d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4522,6 +4522,7 @@ __metadata: "@backstage/integration": "workspace:^" "@backstage/plugin-catalog-backend": "workspace:^" "@types/node-fetch": ^2.5.12 + luxon: ^3.0.0 msw: ^0.47.0 node-fetch: ^2.6.7 uuid: ^8.0.0 From cd48ed8370c3b46e7769780db032b97987633125 Mon Sep 17 00:00:00 2001 From: Patrick Jungermann Date: Fri, 7 Oct 2022 10:28:48 +0200 Subject: [PATCH 101/278] feat(catalog/bitbucketServer): Add backend plugin Add `bitbucketServerEntityProviderCatalogModule` (new backend-plugin-api, alpha). Relates-to: PR #13859 Signed-off-by: Patrick Jungermann --- .changeset/two-oranges-joke.md | 5 + .../api-report.md | 6 ++ .../package.json | 14 ++- .../src/index.ts | 1 + ...tServerEntityProviderCatalogModule.test.ts | 91 +++++++++++++++++++ ...bucketServerEntityProviderCatalogModule.ts | 52 +++++++++++ yarn.lock | 2 + 7 files changed, 166 insertions(+), 5 deletions(-) create mode 100644 .changeset/two-oranges-joke.md create mode 100644 plugins/catalog-backend-module-bitbucket-server/src/service/BitbucketServerEntityProviderCatalogModule.test.ts create mode 100644 plugins/catalog-backend-module-bitbucket-server/src/service/BitbucketServerEntityProviderCatalogModule.ts diff --git a/.changeset/two-oranges-joke.md b/.changeset/two-oranges-joke.md new file mode 100644 index 0000000000..7f116e8ab0 --- /dev/null +++ b/.changeset/two-oranges-joke.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-bitbucket-server': patch +--- + +Add `bitbucketServerEntityProviderCatalogModule` (new backend-plugin-api, alpha). diff --git a/plugins/catalog-backend-module-bitbucket-server/api-report.md b/plugins/catalog-backend-module-bitbucket-server/api-report.md index 6c840883af..a38a4d8c35 100644 --- a/plugins/catalog-backend-module-bitbucket-server/api-report.md +++ b/plugins/catalog-backend-module-bitbucket-server/api-report.md @@ -3,6 +3,7 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { BackendFeature } from '@backstage/backend-plugin-api'; import { BitbucketServerIntegrationConfig } from '@backstage/integration'; import { Config } from '@backstage/config'; import { Entity } from '@backstage/catalog-model'; @@ -67,6 +68,11 @@ export class BitbucketServerEntityProvider implements EntityProvider { refresh(logger: Logger): Promise; } +// @alpha (undocumented) +export const bitbucketServerEntityProviderCatalogModule: ( + options?: undefined, +) => BackendFeature; + // @public (undocumented) export type BitbucketServerListOptions = { [key: string]: number | undefined; diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json index 021b531cea..9d2621ea40 100644 --- a/plugins/catalog-backend-module-bitbucket-server/package.json +++ b/plugins/catalog-backend-module-bitbucket-server/package.json @@ -6,6 +6,7 @@ "license": "Apache-2.0", "publishConfig": { "access": "public", + "alphaTypes": "dist/index.alpha.d.ts", "main": "dist/index.cjs.js", "types": "dist/index.d.ts" }, @@ -23,21 +24,23 @@ ], "scripts": { "start": "backstage-cli package start", - "build": "backstage-cli package build", + "build": "backstage-cli package build --experimental-type-build", "lint": "backstage-cli package lint", "test": "backstage-cli package test", - "clean": "backstage-cli package clean", "prepack": "backstage-cli package prepack", - "postpack": "backstage-cli package postpack" + "postpack": "backstage-cli package postpack", + "clean": "backstage-cli package clean" }, "dependencies": { "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", "@backstage/backend-tasks": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", "@backstage/plugin-catalog-backend": "workspace:^", + "@backstage/plugin-catalog-node": "workspace:^", "@types/node-fetch": "^2.5.12", "node-fetch": "^2.6.7", "uuid": "^8.0.0", @@ -50,8 +53,9 @@ "msw": "^0.47.0" }, "files": [ - "dist", - "config.d.ts" + "alpha", + "config.d.ts", + "dist" ], "configSchema": "config.d.ts" } diff --git a/plugins/catalog-backend-module-bitbucket-server/src/index.ts b/plugins/catalog-backend-module-bitbucket-server/src/index.ts index 34ac3a9966..f139078cfb 100644 --- a/plugins/catalog-backend-module-bitbucket-server/src/index.ts +++ b/plugins/catalog-backend-module-bitbucket-server/src/index.ts @@ -29,3 +29,4 @@ export type { } from './lib'; export { BitbucketServerEntityProvider } from './providers'; export type { BitbucketServerLocationParser } from './providers'; +export { bitbucketServerEntityProviderCatalogModule } from './service/BitbucketServerEntityProviderCatalogModule'; diff --git a/plugins/catalog-backend-module-bitbucket-server/src/service/BitbucketServerEntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-bitbucket-server/src/service/BitbucketServerEntityProviderCatalogModule.test.ts new file mode 100644 index 0000000000..d2ce4dbd3d --- /dev/null +++ b/plugins/catalog-backend-module-bitbucket-server/src/service/BitbucketServerEntityProviderCatalogModule.test.ts @@ -0,0 +1,91 @@ +/* + * 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 { getVoidLogger } from '@backstage/backend-common'; +import { + configServiceRef, + loggerServiceRef, + schedulerServiceRef, +} from '@backstage/backend-plugin-api'; +import { + PluginTaskScheduler, + TaskScheduleDefinition, +} from '@backstage/backend-tasks'; +import { startTestBackend } from '@backstage/backend-test-utils'; +import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node'; +import { bitbucketServerEntityProviderCatalogModule } from './BitbucketServerEntityProviderCatalogModule'; +import { Duration } from 'luxon'; +import { BitbucketServerEntityProvider } from '../providers'; + +describe('bitbucketServerEntityProviderCatalogModule', () => { + it('should register provider at the catalog extension point', async () => { + let addedProviders: Array | undefined; + let usedSchedule: TaskScheduleDefinition | undefined; + + const extensionPoint = { + addEntityProvider: (providers: any) => { + addedProviders = providers; + }, + }; + const runner = jest.fn(); + const scheduler = { + createScheduledTaskRunner: (schedule: TaskScheduleDefinition) => { + usedSchedule = schedule; + return runner; + }, + } as unknown as PluginTaskScheduler; + + const config = new ConfigReader({ + catalog: { + providers: { + bitbucketServer: { + host: 'bitbucket.mycompany.com', + schedule: { + frequency: 'P1M', + timeout: 'PT3M', + }, + }, + }, + }, + integrations: { + bitbucketServer: [ + { + host: 'bitbucket.mycompany.com', + }, + ], + }, + }); + + await startTestBackend({ + extensionPoints: [[catalogProcessingExtensionPoint, extensionPoint]], + services: [ + [configServiceRef, config], + [loggerServiceRef, getVoidLogger()], + [schedulerServiceRef, scheduler], + ], + features: [bitbucketServerEntityProviderCatalogModule()], + }); + + expect(usedSchedule?.frequency).toEqual(Duration.fromISO('P1M')); + expect(usedSchedule?.timeout).toEqual(Duration.fromISO('PT3M')); + expect(addedProviders?.length).toEqual(1); + expect(addedProviders?.pop()?.getProviderName()).toEqual( + 'bitbucketServer-provider:default', + ); + expect(runner).not.toHaveBeenCalled(); + }); +}); diff --git a/plugins/catalog-backend-module-bitbucket-server/src/service/BitbucketServerEntityProviderCatalogModule.ts b/plugins/catalog-backend-module-bitbucket-server/src/service/BitbucketServerEntityProviderCatalogModule.ts new file mode 100644 index 0000000000..e89eee7b45 --- /dev/null +++ b/plugins/catalog-backend-module-bitbucket-server/src/service/BitbucketServerEntityProviderCatalogModule.ts @@ -0,0 +1,52 @@ +/* + * 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 { + configServiceRef, + createBackendModule, + loggerServiceRef, + loggerToWinstonLogger, + schedulerServiceRef, +} from '@backstage/backend-plugin-api'; +import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node'; +import { BitbucketServerEntityProvider } from '../providers'; + +/** + * @alpha + */ +export const bitbucketServerEntityProviderCatalogModule = createBackendModule({ + pluginId: 'catalog', + moduleId: 'bitbucketServerEntityProvider', + register(env) { + env.registerInit({ + deps: { + catalog: catalogProcessingExtensionPoint, + config: configServiceRef, + logger: loggerServiceRef, + scheduler: schedulerServiceRef, + }, + async init({ catalog, config, logger, scheduler }) { + const winstonLogger = loggerToWinstonLogger(logger); + const providers = BitbucketServerEntityProvider.fromConfig(config, { + logger: winstonLogger, + scheduler, + }); + + catalog.addEntityProvider(providers); + }, + }); + }, +}); diff --git a/yarn.lock b/yarn.lock index b90c1a515d..1551240610 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4513,6 +4513,7 @@ __metadata: resolution: "@backstage/plugin-catalog-backend-module-bitbucket-server@workspace:plugins/catalog-backend-module-bitbucket-server" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-tasks": "workspace:^" "@backstage/backend-test-utils": "workspace:^" "@backstage/catalog-model": "workspace:^" @@ -4521,6 +4522,7 @@ __metadata: "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" "@backstage/plugin-catalog-backend": "workspace:^" + "@backstage/plugin-catalog-node": "workspace:^" "@types/node-fetch": ^2.5.12 luxon: ^3.0.0 msw: ^0.47.0 From 134b69f478118657ff07ae8b5c80576566ee8f02 Mon Sep 17 00:00:00 2001 From: Patrick Jungermann Date: Fri, 7 Oct 2022 11:11:07 +0200 Subject: [PATCH 102/278] feat(catalog/gerrit): Add option to configure schedule via `app-config.yaml` Relates-to: PR #13859 Signed-off-by: Patrick Jungermann --- .changeset/ten-pens-draw.md | 8 ++ docs/integrations/gerrit/discovery.md | 16 ++- .../api-report.md | 4 +- .../package.json | 3 +- .../providers/GerritEntityProvider.test.ts | 101 +++++++++++++++++- .../src/providers/GerritEntityProvider.ts | 30 ++++-- .../src/providers/config.test.ts | 24 ++++- .../src/providers/config.ts | 6 ++ .../src/providers/types.ts | 3 + yarn.lock | 1 + 10 files changed, 178 insertions(+), 18 deletions(-) create mode 100644 .changeset/ten-pens-draw.md diff --git a/.changeset/ten-pens-draw.md b/.changeset/ten-pens-draw.md new file mode 100644 index 0000000000..be35a6f3b0 --- /dev/null +++ b/.changeset/ten-pens-draw.md @@ -0,0 +1,8 @@ +--- +'@backstage/plugin-catalog-backend-module-gerrit': patch +--- + +`GerritEntityProvider`: Add option to configure schedule via `app-config.yaml` instead of in code. + +Please find how to configure the schedule at the config at +https://backstage.io/docs/integrations/gerrit/discovery diff --git a/docs/integrations/gerrit/discovery.md b/docs/integrations/gerrit/discovery.md index 04fa3dac2a..7ed05d2b3b 100644 --- a/docs/integrations/gerrit/discovery.md +++ b/docs/integrations/gerrit/discovery.md @@ -32,10 +32,13 @@ const builder = await CatalogBuilder.create(env); builder.addEntityProvider( GerritEntityProvider.fromConfig(env.config, { logger: env.logger, + // optional: alternatively, use scheduler with schedule defined in app-config.yaml schedule: env.scheduler.createScheduledTaskRunner({ frequency: { minutes: 30 }, timeout: { minutes: 3 }, }), + // optional: alternatively, use schedule + scheduler: env.scheduler, }), ); ``` @@ -54,6 +57,11 @@ catalog: host: gerrit-your-company.com branch: master # Optional query: 'state=ACTIVE&prefix=webapps' + schedule: # optional; same options as in TaskScheduleDefinition + # supports cron, ISO duration, "human duration" as used in code + frequency: { minutes: 30 } + # supports ISO duration, "human duration" as used in code + timeout: { minutes: 3 } backend: host: gerrit-your-company.com branch: master # Optional @@ -62,8 +70,8 @@ catalog: The provider configuration is composed of three parts: -- host, the host of the Gerrit integration to use. -- branch, the branch where we will look for catalog entities (defaults to "master"). -- query, this string is directly used as the argument to the "List Project" API. - Typically you will want to have some filter here to exclude projects that will +- **`host`**: the host of the Gerrit integration to use. +- **`branch`** _(optional)_: the branch where we will look for catalog entities (defaults to "master"). +- **`query`**: this string is directly used as the argument to the "List Project" API. + Typically, you will want to have some filter here to exclude projects that will never contain any catalog files. diff --git a/plugins/catalog-backend-module-gerrit/api-report.md b/plugins/catalog-backend-module-gerrit/api-report.md index 7eae94c2a8..1dee786da1 100644 --- a/plugins/catalog-backend-module-gerrit/api-report.md +++ b/plugins/catalog-backend-module-gerrit/api-report.md @@ -7,6 +7,7 @@ import { Config } from '@backstage/config'; import { EntityProvider } from '@backstage/plugin-catalog-backend'; import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; import { Logger } from 'winston'; +import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { TaskRunner } from '@backstage/backend-tasks'; // @public (undocumented) @@ -18,7 +19,8 @@ export class GerritEntityProvider implements EntityProvider { configRoot: Config, options: { logger: Logger; - schedule: TaskRunner; + schedule?: TaskRunner; + scheduler?: PluginTaskScheduler; }, ): GerritEntityProvider[]; // (undocumented) diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json index e3665a96ae..1cebc25bc8 100644 --- a/plugins/catalog-backend-module-gerrit/package.json +++ b/plugins/catalog-backend-module-gerrit/package.json @@ -44,7 +44,8 @@ "devDependencies": { "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", - "@types/fs-extra": "^9.0.1" + "@types/fs-extra": "^9.0.1", + "luxon": "^3.0.0" }, "files": [ "dist", diff --git a/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.test.ts b/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.test.ts index d6ad0ff668..5d258ee94f 100644 --- a/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.test.ts +++ b/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.test.ts @@ -15,14 +15,18 @@ */ import { getVoidLogger } from '@backstage/backend-common'; -import { ConfigReader } from '@backstage/config'; -import { TaskInvocationDefinition, TaskRunner } from '@backstage/backend-tasks'; +import { + PluginTaskScheduler, + TaskInvocationDefinition, + TaskRunner, +} from '@backstage/backend-tasks'; import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; +import { ConfigReader } from '@backstage/config'; import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; -import { rest } from 'msw'; import fs from 'fs-extra'; -import path from 'path'; +import { rest } from 'msw'; import { setupServer } from 'msw/node'; +import path from 'path'; import { GerritEntityProvider } from './GerritEntityProvider'; const server = setupServer(); @@ -207,4 +211,93 @@ describe('GerritEntityProvider', () => { }), ).toThrow(/No gerrit integration/); }); + + it('fail without schedule and scheduler', () => { + expect(() => + GerritEntityProvider.fromConfig(config, { + logger, + }), + ).toThrow('Either schedule or scheduler must be provided'); + }); + + it('fail with scheduler but no schedule config', () => { + const scheduler = { + createScheduledTaskRunner: (_: any) => jest.fn(), + } as unknown as PluginTaskScheduler; + expect(() => + GerritEntityProvider.fromConfig(config, { + logger, + scheduler, + }), + ).toThrow( + 'No schedule provided neither via code nor config for gerrit-provider:active-training', + ); + }); + + it('discovers projects from the api with schedule in config', async () => { + const configWithSchedule = new ConfigReader({ + catalog: { + providers: { + gerrit: { + 'active-training': { + host: 'g.com', + query: 'state=ACTIVE&prefix=training', + branch: 'main', + schedule: { + frequency: 'PT30M', + timeout: { + minutes: 3, + }, + }, + }, + }, + }, + }, + integrations: { + gerrit: [ + { + host: 'g.com', + baseUrl: 'https://g.com/gerrit', + gitilesBaseUrl: 'https:/g.com/gitiles', + }, + ], + }, + }); + const scheduler = { + createScheduledTaskRunner: (_: any) => schedule, + } as unknown as PluginTaskScheduler; + + const repoBuffer = fs.readFileSync( + path.resolve(__dirname, '__fixtures__/listProjectsBody.txt'), + ); + const expected = getJsonFixture('expectedProviderEntities.json'); + + server.use( + rest.get('https://g.com/gerrit/projects/', (_, res, ctx) => + res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.body(repoBuffer), + ), + ), + ); + + const provider = GerritEntityProvider.fromConfig(configWithSchedule, { + logger, + scheduler, + })[0]; + expect(provider.getProviderName()).toEqual( + 'gerrit-provider:active-training', + ); + + await provider.connect(entityProviderConnection); + + const taskDef = schedule.getTasks()[0]; + expect(taskDef.id).toEqual('gerrit-provider:active-training:refresh'); + await (taskDef.fn as () => Promise)(); + + expect(entityProviderConnection.applyMutation).toHaveBeenCalledWith( + expected, + ); + }); }); diff --git a/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.ts b/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.ts index beb4052073..ec08dbe4be 100644 --- a/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.ts +++ b/plugins/catalog-backend-module-gerrit/src/providers/GerritEntityProvider.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { TaskRunner } from '@backstage/backend-tasks'; +import { PluginTaskScheduler, TaskRunner } from '@backstage/backend-tasks'; import { Config } from '@backstage/config'; import { InputError } from '@backstage/errors'; import { @@ -49,9 +49,14 @@ export class GerritEntityProvider implements EntityProvider { configRoot: Config, options: { logger: Logger; - schedule: TaskRunner; + schedule?: TaskRunner; + scheduler?: PluginTaskScheduler; }, ): GerritEntityProvider[] { + if (!options.schedule && !options.scheduler) { + throw new Error('Either schedule or scheduler must be provided.'); + } + const providerConfigs = readGerritConfigs(configRoot); const integrations = ScmIntegrations.fromConfig(configRoot).gerrit; const providers: GerritEntityProvider[] = []; @@ -63,12 +68,23 @@ export class GerritEntityProvider implements EntityProvider { `No gerrit integration found that matches host ${providerConfig.host}`, ); } + + if (!options.schedule && !providerConfig.schedule) { + throw new Error( + `No schedule provided neither via code nor config for gerrit-provider:${providerConfig.id}.`, + ); + } + + const taskRunner = + options.schedule ?? + options.scheduler!.createScheduledTaskRunner(providerConfig.schedule!); + providers.push( new GerritEntityProvider( providerConfig, integration, options.logger, - options.schedule, + taskRunner, ), ); }); @@ -79,14 +95,14 @@ export class GerritEntityProvider implements EntityProvider { config: GerritProviderConfig, integration: GerritIntegration, logger: Logger, - schedule: TaskRunner, + taskRunner: TaskRunner, ) { this.config = config; this.integration = integration; this.logger = logger.child({ target: this.getProviderName(), }); - this.scheduleFn = this.createScheduleFn(schedule); + this.scheduleFn = this.createScheduleFn(taskRunner); } getProviderName(): string { @@ -98,10 +114,10 @@ export class GerritEntityProvider implements EntityProvider { await this.scheduleFn(); } - private createScheduleFn(schedule: TaskRunner): () => Promise { + private createScheduleFn(taskRunner: TaskRunner): () => Promise { return async () => { const taskId = `${this.getProviderName()}:refresh`; - return schedule.run({ + return taskRunner.run({ id: taskId, fn: async () => { const logger = this.logger.child({ diff --git a/plugins/catalog-backend-module-gerrit/src/providers/config.test.ts b/plugins/catalog-backend-module-gerrit/src/providers/config.test.ts index 0422b4e4ea..ecf68d9f3c 100644 --- a/plugins/catalog-backend-module-gerrit/src/providers/config.test.ts +++ b/plugins/catalog-backend-module-gerrit/src/providers/config.test.ts @@ -15,6 +15,7 @@ */ import { ConfigReader } from '@backstage/config'; +import { Duration } from 'luxon'; import { readGerritConfigs } from './config'; describe('readGerritConfigs', () => { @@ -29,12 +30,24 @@ describe('readGerritConfigs', () => { query: 'state=ACTIVE', branch: 'main', }; + const provider3 = { + host: 'gerrit1.com', + query: 'state=ACTIVE', + branch: 'main', + schedule: { + frequency: 'PT30M', + timeout: { + minutes: 3, + }, + }, + }; const config = { catalog: { providers: { gerrit: { 'active-g1': provider1, 'active-g2': provider2, + 'active-g3': provider3, }, }, }, @@ -42,10 +55,19 @@ describe('readGerritConfigs', () => { const actual = readGerritConfigs(new ConfigReader(config)); - expect(actual).toHaveLength(2); + expect(actual).toHaveLength(3); expect(actual[0]).toEqual({ ...provider1, id: 'active-g1' }); expect(actual[1]).toEqual({ ...provider2, id: 'active-g2' }); + expect(actual[2]).toEqual({ + ...provider3, + id: 'active-g3', + schedule: { + ...provider3.schedule, + frequency: Duration.fromISO(provider3.schedule.frequency), + }, + }); }); + it('provides default values', () => { const provider = { host: 'gerrit1.com', diff --git a/plugins/catalog-backend-module-gerrit/src/providers/config.ts b/plugins/catalog-backend-module-gerrit/src/providers/config.ts index 7a28ddd8ea..dd7ee9ec43 100644 --- a/plugins/catalog-backend-module-gerrit/src/providers/config.ts +++ b/plugins/catalog-backend-module-gerrit/src/providers/config.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import { readTaskScheduleDefinitionFromConfig } from '@backstage/backend-tasks'; import { Config } from '@backstage/config'; import { GerritProviderConfig } from './types'; @@ -22,11 +23,16 @@ function readGerritConfig(id: string, config: Config): GerritProviderConfig { const host = config.getString('host'); const query = config.getString('query'); + const schedule = config.has('schedule') + ? readTaskScheduleDefinitionFromConfig(config.getConfig('schedule')) + : undefined; + return { branch, host, id, query, + schedule, }; } diff --git a/plugins/catalog-backend-module-gerrit/src/providers/types.ts b/plugins/catalog-backend-module-gerrit/src/providers/types.ts index 1e96bd1ee4..4a8329df86 100644 --- a/plugins/catalog-backend-module-gerrit/src/providers/types.ts +++ b/plugins/catalog-backend-module-gerrit/src/providers/types.ts @@ -14,6 +14,8 @@ * limitations under the License. */ +import { TaskScheduleDefinition } from '@backstage/backend-tasks'; + export type GerritProjectInfo = { id: string; name: string; @@ -28,4 +30,5 @@ export type GerritProviderConfig = { query: string; id: string; branch?: string; + schedule?: TaskScheduleDefinition; }; diff --git a/yarn.lock b/yarn.lock index 1551240610..bfb1485395 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4569,6 +4569,7 @@ __metadata: "@backstage/plugin-catalog-backend": "workspace:^" "@types/fs-extra": ^9.0.1 fs-extra: 10.1.0 + luxon: ^3.0.0 msw: ^0.47.0 node-fetch: ^2.6.7 uuid: ^8.0.0 From 4fba50f5d431d045188419ebadd6ea02fb32ca87 Mon Sep 17 00:00:00 2001 From: Patrick Jungermann Date: Fri, 7 Oct 2022 11:29:54 +0200 Subject: [PATCH 103/278] feat(catalog/gerrit): Add backend plugin Add `gerritEntityProviderCatalogModule` (new backend-plugin-api, alpha). Relates-to: PR #13859 Signed-off-by: Patrick Jungermann --- .changeset/metal-dogs-swim.md | 5 + .../api-report.md | 6 ++ .../package.json | 9 +- .../src/index.ts | 1 + .../GerritEntityProviderCatalogModule.test.ts | 97 +++++++++++++++++++ .../GerritEntityProviderCatalogModule.ts | 52 ++++++++++ yarn.lock | 2 + 7 files changed, 169 insertions(+), 3 deletions(-) create mode 100644 .changeset/metal-dogs-swim.md create mode 100644 plugins/catalog-backend-module-gerrit/src/service/GerritEntityProviderCatalogModule.test.ts create mode 100644 plugins/catalog-backend-module-gerrit/src/service/GerritEntityProviderCatalogModule.ts diff --git a/.changeset/metal-dogs-swim.md b/.changeset/metal-dogs-swim.md new file mode 100644 index 0000000000..d97c7077f2 --- /dev/null +++ b/.changeset/metal-dogs-swim.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-gerrit': patch +--- + +Add `gerritEntityProviderCatalogModule` (new backend-plugin-api, alpha). diff --git a/plugins/catalog-backend-module-gerrit/api-report.md b/plugins/catalog-backend-module-gerrit/api-report.md index 1dee786da1..45847ea93d 100644 --- a/plugins/catalog-backend-module-gerrit/api-report.md +++ b/plugins/catalog-backend-module-gerrit/api-report.md @@ -3,6 +3,7 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { BackendFeature } from '@backstage/backend-plugin-api'; import { Config } from '@backstage/config'; import { EntityProvider } from '@backstage/plugin-catalog-backend'; import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; @@ -29,5 +30,10 @@ export class GerritEntityProvider implements EntityProvider { refresh(logger: Logger): Promise; } +// @alpha (undocumented) +export const gerritEntityProviderCatalogModule: ( + options?: undefined, +) => BackendFeature; + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json index 1cebc25bc8..43be593478 100644 --- a/plugins/catalog-backend-module-gerrit/package.json +++ b/plugins/catalog-backend-module-gerrit/package.json @@ -6,6 +6,7 @@ "license": "Apache-2.0", "publishConfig": { "access": "public", + "alphaTypes": "dist/index.alpha.d.ts", "main": "dist/index.cjs.js", "types": "dist/index.d.ts" }, @@ -20,21 +21,23 @@ }, "scripts": { "start": "backstage-cli package start", - "build": "backstage-cli package build", + "build": "backstage-cli package build --experimental-type-build", "lint": "backstage-cli package lint", "test": "backstage-cli package test", - "clean": "backstage-cli package clean", "prepack": "backstage-cli package prepack", - "postpack": "backstage-cli package postpack" + "postpack": "backstage-cli package postpack", + "clean": "backstage-cli package clean" }, "dependencies": { "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", "@backstage/backend-tasks": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", "@backstage/plugin-catalog-backend": "workspace:^", + "@backstage/plugin-catalog-node": "workspace:^", "fs-extra": "10.1.0", "msw": "^0.47.0", "node-fetch": "^2.6.7", diff --git a/plugins/catalog-backend-module-gerrit/src/index.ts b/plugins/catalog-backend-module-gerrit/src/index.ts index 133772d4b1..38ede69926 100644 --- a/plugins/catalog-backend-module-gerrit/src/index.ts +++ b/plugins/catalog-backend-module-gerrit/src/index.ts @@ -15,3 +15,4 @@ */ export { GerritEntityProvider } from './providers/GerritEntityProvider'; +export { gerritEntityProviderCatalogModule } from './service/GerritEntityProviderCatalogModule'; diff --git a/plugins/catalog-backend-module-gerrit/src/service/GerritEntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-gerrit/src/service/GerritEntityProviderCatalogModule.test.ts new file mode 100644 index 0000000000..53e012209b --- /dev/null +++ b/plugins/catalog-backend-module-gerrit/src/service/GerritEntityProviderCatalogModule.test.ts @@ -0,0 +1,97 @@ +/* + * 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 { getVoidLogger } from '@backstage/backend-common'; +import { + configServiceRef, + loggerServiceRef, + schedulerServiceRef, +} from '@backstage/backend-plugin-api'; +import { + PluginTaskScheduler, + TaskScheduleDefinition, +} from '@backstage/backend-tasks'; +import { startTestBackend } from '@backstage/backend-test-utils'; +import { ConfigReader } from '@backstage/config'; +import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node'; +import { Duration } from 'luxon'; +import { gerritEntityProviderCatalogModule } from './GerritEntityProviderCatalogModule'; +import { GerritEntityProvider } from '../providers/GerritEntityProvider'; + +describe('gerritEntityProviderCatalogModule', () => { + it('should register provider at the catalog extension point', async () => { + let addedProviders: Array | undefined; + let usedSchedule: TaskScheduleDefinition | undefined; + + const extensionPoint = { + addEntityProvider: (providers: any) => { + addedProviders = providers; + }, + }; + const runner = jest.fn(); + const scheduler = { + createScheduledTaskRunner: (schedule: TaskScheduleDefinition) => { + usedSchedule = schedule; + return runner; + }, + } as unknown as PluginTaskScheduler; + + const config = new ConfigReader({ + catalog: { + providers: { + gerrit: { + test: { + host: 'g.com', + query: 'state=ACTIVE&prefix=training', + branch: 'main', + schedule: { + frequency: 'P1M', + timeout: 'PT3M', + }, + }, + }, + }, + }, + integrations: { + gerrit: [ + { + host: 'g.com', + baseUrl: 'https://g.com/gerrit', + gitilesBaseUrl: 'https:/g.com/gitiles', + }, + ], + }, + }); + + await startTestBackend({ + extensionPoints: [[catalogProcessingExtensionPoint, extensionPoint]], + services: [ + [configServiceRef, config], + [loggerServiceRef, getVoidLogger()], + [schedulerServiceRef, scheduler], + ], + features: [gerritEntityProviderCatalogModule()], + }); + + expect(usedSchedule?.frequency).toEqual(Duration.fromISO('P1M')); + expect(usedSchedule?.timeout).toEqual(Duration.fromISO('PT3M')); + expect(addedProviders?.length).toEqual(1); + expect(addedProviders?.pop()?.getProviderName()).toEqual( + 'gerrit-provider:test', + ); + expect(runner).not.toHaveBeenCalled(); + }); +}); diff --git a/plugins/catalog-backend-module-gerrit/src/service/GerritEntityProviderCatalogModule.ts b/plugins/catalog-backend-module-gerrit/src/service/GerritEntityProviderCatalogModule.ts new file mode 100644 index 0000000000..32d582e397 --- /dev/null +++ b/plugins/catalog-backend-module-gerrit/src/service/GerritEntityProviderCatalogModule.ts @@ -0,0 +1,52 @@ +/* + * 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 { + configServiceRef, + createBackendModule, + loggerServiceRef, + loggerToWinstonLogger, + schedulerServiceRef, +} from '@backstage/backend-plugin-api'; +import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node'; +import { GerritEntityProvider } from '../providers/GerritEntityProvider'; + +/** + * @alpha + */ +export const gerritEntityProviderCatalogModule = createBackendModule({ + pluginId: 'catalog', + moduleId: 'gerritEntityProvider', + register(env) { + env.registerInit({ + deps: { + catalog: catalogProcessingExtensionPoint, + config: configServiceRef, + logger: loggerServiceRef, + scheduler: schedulerServiceRef, + }, + async init({ catalog, config, logger, scheduler }) { + const winstonLogger = loggerToWinstonLogger(logger); + const providers = GerritEntityProvider.fromConfig(config, { + logger: winstonLogger, + scheduler, + }); + + catalog.addEntityProvider(providers); + }, + }); + }, +}); diff --git a/yarn.lock b/yarn.lock index bfb1485395..787cb2a94a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4559,6 +4559,7 @@ __metadata: resolution: "@backstage/plugin-catalog-backend-module-gerrit@workspace:plugins/catalog-backend-module-gerrit" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-tasks": "workspace:^" "@backstage/backend-test-utils": "workspace:^" "@backstage/catalog-model": "workspace:^" @@ -4567,6 +4568,7 @@ __metadata: "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" "@backstage/plugin-catalog-backend": "workspace:^" + "@backstage/plugin-catalog-node": "workspace:^" "@types/fs-extra": ^9.0.1 fs-extra: 10.1.0 luxon: ^3.0.0 From 9b698abfd96851abae646511f1bc08aa1deef969 Mon Sep 17 00:00:00 2001 From: Patrick Jungermann Date: Fri, 7 Oct 2022 12:19:57 +0200 Subject: [PATCH 104/278] fix(catalog/gitlab): add missing configSchema to package.json Signed-off-by: Patrick Jungermann --- plugins/catalog-backend-module-gitlab/package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index 510a4eb3be..90ce82b01e 100644 --- a/plugins/catalog-backend-module-gitlab/package.json +++ b/plugins/catalog-backend-module-gitlab/package.json @@ -53,6 +53,8 @@ "@types/uuid": "^8.0.0" }, "files": [ + "config.d.ts", "dist" - ] + ], + "configSchema": "config.d.ts" } From 81cedb503351d0df1449f7ffd5ee8c41973147ad Mon Sep 17 00:00:00 2001 From: Patrick Jungermann Date: Fri, 7 Oct 2022 12:13:18 +0200 Subject: [PATCH 105/278] feat(catalog/gitlab): Add option to configure schedule via `app-config.yaml` Relates-to: PR #13859 Signed-off-by: Patrick Jungermann --- .changeset/flat-kangaroos-kiss.md | 8 ++ docs/integrations/gitlab/discovery.md | 8 ++ .../api-report.md | 4 +- .../catalog-backend-module-gitlab/config.d.ts | 13 +- .../package.json | 3 +- .../src/lib/types.ts | 3 + .../GitlabDiscoveryEntityProvider.test.ts | 117 +++++++++++++++++- .../GitlabDiscoveryEntityProvider.ts | 38 ++++-- .../src/providers/config.test.ts | 45 +++++++ .../src/providers/config.ts | 6 + yarn.lock | 1 + 11 files changed, 225 insertions(+), 21 deletions(-) create mode 100644 .changeset/flat-kangaroos-kiss.md diff --git a/.changeset/flat-kangaroos-kiss.md b/.changeset/flat-kangaroos-kiss.md new file mode 100644 index 0000000000..a79c8621b1 --- /dev/null +++ b/.changeset/flat-kangaroos-kiss.md @@ -0,0 +1,8 @@ +--- +'@backstage/plugin-catalog-backend-module-gitlab': patch +--- + +`GitlabDiscoveryEntityProvider`: Add option to configure schedule via `app-config.yaml` instead of in code. + +Please find how to configure the schedule at the config at +https://backstage.io/docs/integrations/gitlab/discovery diff --git a/docs/integrations/gitlab/discovery.md b/docs/integrations/gitlab/discovery.md index df5aadcab4..dc0b911b3d 100644 --- a/docs/integrations/gitlab/discovery.md +++ b/docs/integrations/gitlab/discovery.md @@ -25,6 +25,11 @@ catalog: group: example-group # Optional. Group and subgroup (if needed) to look for repositories. If not present the whole project will be scanned entityFilename: catalog-info.yaml # Optional. Defaults to `catalog-info.yaml` projectPattern: /[\s\S]*/ # Optional. Filters found projects based on provided patter. Defaults to `/[\s\S]*/`, what means to not filter anything + schedule: # optional; same options as in TaskScheduleDefinition + # supports cron, ISO duration, "human duration" as used in code + frequency: { minutes: 30 } + # supports ISO duration, "human duration" as used in code + timeout: { minutes: 3 } ``` As this provider is not one of the default providers, you will first need to install @@ -47,10 +52,13 @@ const builder = await CatalogBuilder.create(env); builder.addEntityProvider( ...GitlabDiscoveryEntityProvider.fromConfig(env.config, { logger: env.logger, + // optional: alternatively, use scheduler with schedule defined in app-config.yaml schedule: env.scheduler.createScheduledTaskRunner({ frequency: { minutes: 30 }, timeout: { minutes: 3 }, }), + // optional: alternatively, use schedule + scheduler: env.scheduler, }), ); ``` diff --git a/plugins/catalog-backend-module-gitlab/api-report.md b/plugins/catalog-backend-module-gitlab/api-report.md index 1009da8209..bd7b13efc3 100644 --- a/plugins/catalog-backend-module-gitlab/api-report.md +++ b/plugins/catalog-backend-module-gitlab/api-report.md @@ -10,6 +10,7 @@ import { EntityProvider } from '@backstage/plugin-catalog-backend'; import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; import { LocationSpec } from '@backstage/plugin-catalog-backend'; import { Logger } from 'winston'; +import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { TaskRunner } from '@backstage/backend-tasks'; // @public @@ -21,7 +22,8 @@ export class GitlabDiscoveryEntityProvider implements EntityProvider { config: Config, options: { logger: Logger; - schedule: TaskRunner; + schedule?: TaskRunner; + scheduler?: PluginTaskScheduler; }, ): GitlabDiscoveryEntityProvider[]; // (undocumented) diff --git a/plugins/catalog-backend-module-gitlab/config.d.ts b/plugins/catalog-backend-module-gitlab/config.d.ts index 82f1a5db7c..ac75a04c2a 100644 --- a/plugins/catalog-backend-module-gitlab/config.d.ts +++ b/plugins/catalog-backend-module-gitlab/config.d.ts @@ -14,11 +14,10 @@ * limitations under the License. */ +import { TaskScheduleDefinitionConfig } from '@backstage/backend-tasks'; + export interface Config { catalog?: { - /** - * List of provider-specific options and attributes - */ providers?: { /** * GitlabDiscoveryEntityProvider configuration @@ -28,27 +27,27 @@ export interface Config { { /** * (Required) Gitlab's host name. - * @visibility backend */ host: string; /** * (Optional) Gitlab's group[/subgroup] where the discovery is done. * If not defined the whole project will be scanned. - * @visibility backend */ group?: string; /** * (Optional) Default branch to read the catalog-info.yaml file. * If not set, 'master' will be used. - * @visibility backend */ branch?: string; /** * (Optional) The name used for the catalog file. * If not set, 'catalog-info.yaml' will be used. - * @visibility backend */ entityFilename?: string; + /** + * (Optional) TaskScheduleDefinition for the refresh. + */ + schedule?: TaskScheduleDefinitionConfig; } >; }; diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index 90ce82b01e..e537fa5e04 100644 --- a/plugins/catalog-backend-module-gitlab/package.json +++ b/plugins/catalog-backend-module-gitlab/package.json @@ -50,7 +50,8 @@ "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", "@types/lodash": "^4.14.151", - "@types/uuid": "^8.0.0" + "@types/uuid": "^8.0.0", + "luxon": "^3.0.0" }, "files": [ "config.d.ts", diff --git a/plugins/catalog-backend-module-gitlab/src/lib/types.ts b/plugins/catalog-backend-module-gitlab/src/lib/types.ts index 8a3c33c8f2..86fe1aa385 100644 --- a/plugins/catalog-backend-module-gitlab/src/lib/types.ts +++ b/plugins/catalog-backend-module-gitlab/src/lib/types.ts @@ -14,6 +14,8 @@ * limitations under the License. */ +import { TaskScheduleDefinition } from '@backstage/backend-tasks'; + export type GitlabGroupDescription = { id: number; web_url: string; @@ -36,4 +38,5 @@ export type GitlabProviderConfig = { branch: string; catalogFile: string; projectPattern: RegExp; + schedule?: TaskScheduleDefinition; }; diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.test.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.test.ts index 3f3c4e7f91..ae19edc48c 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.test.ts @@ -15,13 +15,17 @@ */ import { getVoidLogger } from '@backstage/backend-common'; -import { TaskInvocationDefinition, TaskRunner } from '@backstage/backend-tasks'; +import { + PluginTaskScheduler, + TaskInvocationDefinition, + TaskRunner, +} from '@backstage/backend-tasks'; +import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import { ConfigReader } from '@backstage/config'; import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; -import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; -import { GitlabDiscoveryEntityProvider } from './GitlabDiscoveryEntityProvider'; import { rest } from 'msw'; import { setupServer } from 'msw/node'; +import { GitlabDiscoveryEntityProvider } from './GitlabDiscoveryEntityProvider'; class PersistingTaskRunner implements TaskRunner { private tasks: TaskInvocationDefinition[] = []; @@ -338,4 +342,111 @@ describe('GitlabDiscoveryEntityProvider', () => { ], }); }); + + it('fail without schedule and scheduler', () => { + const config = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'test-gitlab', + apiBaseUrl: 'https://api.gitlab.example/api/v4', + token: '1234', + }, + ], + }, + catalog: { + providers: { + gitlab: { + 'test-id': { + host: 'test-gitlab', + group: 'test-group', + }, + }, + }, + }, + }); + + expect(() => + GitlabDiscoveryEntityProvider.fromConfig(config, { + logger, + }), + ).toThrow('Either schedule or scheduler must be provided'); + }); + + it('fail with scheduler but no schedule config', () => { + const scheduler = { + createScheduledTaskRunner: (_: any) => jest.fn(), + } as unknown as PluginTaskScheduler; + const config = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'test-gitlab', + apiBaseUrl: 'https://api.gitlab.example/api/v4', + token: '1234', + }, + ], + }, + catalog: { + providers: { + gitlab: { + 'test-id': { + host: 'test-gitlab', + group: 'test-group', + }, + }, + }, + }, + }); + + expect(() => + GitlabDiscoveryEntityProvider.fromConfig(config, { + logger, + scheduler, + }), + ).toThrow( + 'No schedule provided neither via code nor config for GitlabDiscoveryEntityProvider:test-id', + ); + }); + + it('single simple provider config with schedule in config', async () => { + const schedule = new PersistingTaskRunner(); + const scheduler = { + createScheduledTaskRunner: (_: any) => schedule, + } as unknown as PluginTaskScheduler; + const config = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'test-gitlab', + apiBaseUrl: 'https://api.gitlab.example/api/v4', + token: '1234', + }, + ], + }, + catalog: { + providers: { + gitlab: { + 'test-id': { + host: 'test-gitlab', + group: 'test-group', + schedule: { + frequency: 'PT30M', + timeout: 'PT3M', + }, + }, + }, + }, + }, + }); + const providers = GitlabDiscoveryEntityProvider.fromConfig(config, { + logger, + scheduler, + }); + + expect(providers).toHaveLength(1); + expect(providers[0].getProviderName()).toEqual( + 'GitlabDiscoveryEntityProvider:test-id', + ); + }); }); diff --git a/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.ts b/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.ts index ffb123edf7..cb4629b820 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/GitlabDiscoveryEntityProvider.ts @@ -14,14 +14,16 @@ * limitations under the License. */ -import { TaskRunner } from '@backstage/backend-tasks'; +import { PluginTaskScheduler, TaskRunner } from '@backstage/backend-tasks'; import { Config } from '@backstage/config'; import { GitLabIntegration, ScmIntegrations } from '@backstage/integration'; import { EntityProvider, EntityProviderConnection, + LocationSpec, + locationSpecToLocationEntity, } from '@backstage/plugin-catalog-backend'; -import { LocationSpec } from '@backstage/plugin-catalog-backend'; +import * as uuid from 'uuid'; import { Logger } from 'winston'; import { GitLabClient, @@ -30,8 +32,6 @@ import { paginated, readGitlabConfigs, } from '../lib'; -import * as uuid from 'uuid'; -import { locationSpecToLocationEntity } from '@backstage/plugin-catalog-backend'; type Result = { scanned: number; @@ -51,8 +51,16 @@ export class GitlabDiscoveryEntityProvider implements EntityProvider { static fromConfig( config: Config, - options: { logger: Logger; schedule: TaskRunner }, + options: { + logger: Logger; + schedule?: TaskRunner; + scheduler?: PluginTaskScheduler; + }, ): GitlabDiscoveryEntityProvider[] { + if (!options.schedule && !options.scheduler) { + throw new Error('Either schedule or scheduler must be provided.'); + } + const providerConfigs = readGitlabConfigs(config); const integrations = ScmIntegrations.fromConfig(config).gitlab; const providers: GitlabDiscoveryEntityProvider[] = []; @@ -64,11 +72,23 @@ export class GitlabDiscoveryEntityProvider implements EntityProvider { `No gitlab integration found that matches host ${providerConfig.host}`, ); } + + if (!options.schedule && !providerConfig.schedule) { + throw new Error( + `No schedule provided neither via code nor config for GitlabDiscoveryEntityProvider:${providerConfig.id}.`, + ); + } + + const taskRunner = + options.schedule ?? + options.scheduler!.createScheduledTaskRunner(providerConfig.schedule!); + providers.push( new GitlabDiscoveryEntityProvider({ ...options, config: providerConfig, integration, + taskRunner, }), ); }); @@ -79,14 +99,14 @@ export class GitlabDiscoveryEntityProvider implements EntityProvider { config: GitlabProviderConfig; integration: GitLabIntegration; logger: Logger; - schedule: TaskRunner; + taskRunner: TaskRunner; }) { this.config = options.config; this.integration = options.integration; this.logger = options.logger.child({ target: this.getProviderName(), }); - this.scheduleFn = this.createScheduleFn(options.schedule); + this.scheduleFn = this.createScheduleFn(options.taskRunner); } getProviderName(): string { @@ -98,10 +118,10 @@ export class GitlabDiscoveryEntityProvider implements EntityProvider { await this.scheduleFn(); } - private createScheduleFn(schedule: TaskRunner): () => Promise { + private createScheduleFn(taskRunner: TaskRunner): () => Promise { return async () => { const taskId = `${this.getProviderName()}:refresh`; - return schedule.run({ + return taskRunner.run({ id: taskId, fn: async () => { const logger = this.logger.child({ diff --git a/plugins/catalog-backend-module-gitlab/src/providers/config.test.ts b/plugins/catalog-backend-module-gitlab/src/providers/config.test.ts index cb36e5166c..6b337bf7cd 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/config.test.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/config.test.ts @@ -15,6 +15,7 @@ */ import { ConfigReader } from '@backstage/config'; +import { Duration } from 'luxon'; import { readGitlabConfigs } from './config'; describe('config', () => { @@ -53,6 +54,7 @@ describe('config', () => { host: 'host', catalogFile: 'catalog-info.yaml', projectPattern: /[\s\S]*/, + schedule: undefined, }), ); }); @@ -83,6 +85,49 @@ describe('config', () => { host: 'host', catalogFile: 'custom-file.yaml', projectPattern: /[\s\S]*/, + schedule: undefined, + }), + ); + }); + + it('valid config with schedule', () => { + const config = new ConfigReader({ + catalog: { + providers: { + gitlab: { + test: { + group: 'group', + host: 'host', + schedule: { + frequency: 'PT30M', + timeout: { + minutes: 3, + }, + }, + }, + }, + }, + }, + }); + + const result = readGitlabConfigs(config); + expect(result).toHaveLength(1); + result.forEach(r => + expect(r).toStrictEqual({ + id: 'test', + group: 'group', + branch: 'master', + host: 'host', + catalogFile: 'catalog-info.yaml', + projectPattern: /[\s\S]*/, + schedule: { + frequency: Duration.fromISO('PT30M'), + timeout: { + minutes: 3, + }, + initialDelay: undefined, + scope: undefined, + }, }), ); }); diff --git a/plugins/catalog-backend-module-gitlab/src/providers/config.ts b/plugins/catalog-backend-module-gitlab/src/providers/config.ts index 392922860f..3dfc00745e 100644 --- a/plugins/catalog-backend-module-gitlab/src/providers/config.ts +++ b/plugins/catalog-backend-module-gitlab/src/providers/config.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import { readTaskScheduleDefinitionFromConfig } from '@backstage/backend-tasks'; import { Config } from '@backstage/config'; import { GitlabProviderConfig } from '../lib'; @@ -35,6 +36,10 @@ function readGitlabConfig(id: string, config: Config): GitlabProviderConfig { config.getOptionalString('projectPattern') ?? /[\s\S]*/, ); + const schedule = config.has('schedule') + ? readTaskScheduleDefinitionFromConfig(config.getConfig('schedule')) + : undefined; + return { id, group, @@ -42,6 +47,7 @@ function readGitlabConfig(id: string, config: Config): GitlabProviderConfig { host, catalogFile, projectPattern, + schedule, }; } diff --git a/yarn.lock b/yarn.lock index 787cb2a94a..4c1f1a9bb6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4622,6 +4622,7 @@ __metadata: "@types/lodash": ^4.14.151 "@types/uuid": ^8.0.0 lodash: ^4.17.21 + luxon: ^3.0.0 msw: ^0.47.0 node-fetch: ^2.6.7 uuid: ^8.0.0 From 6bb046bcbed233f5f63c4b82d2364e74b29a9bd1 Mon Sep 17 00:00:00 2001 From: Patrick Jungermann Date: Fri, 7 Oct 2022 12:29:42 +0200 Subject: [PATCH 106/278] feat(catalog/gitlab): Add backend plugin Add `gitlabDiscoveryEntityProviderCatalogModule` (new backend-plugin-api, alpha). Relates-to: PR #13859 Signed-off-by: Patrick Jungermann --- .changeset/chatty-planets-flash.md | 5 + .../api-report.md | 6 ++ .../package.json | 10 +- .../src/index.ts | 1 + ...scoveryEntityProviderCatalogModule.test.ts | 96 +++++++++++++++++++ ...labDiscoveryEntityProviderCatalogModule.ts | 53 ++++++++++ yarn.lock | 2 + 7 files changed, 170 insertions(+), 3 deletions(-) create mode 100644 .changeset/chatty-planets-flash.md create mode 100644 plugins/catalog-backend-module-gitlab/src/service/GitlabDiscoveryEntityProviderCatalogModule.test.ts create mode 100644 plugins/catalog-backend-module-gitlab/src/service/GitlabDiscoveryEntityProviderCatalogModule.ts diff --git a/.changeset/chatty-planets-flash.md b/.changeset/chatty-planets-flash.md new file mode 100644 index 0000000000..d6a5c6ad42 --- /dev/null +++ b/.changeset/chatty-planets-flash.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-gitlab': patch +--- + +Add `gitlabDiscoveryEntityProviderCatalogModule` (new backend-plugin-api, alpha). diff --git a/plugins/catalog-backend-module-gitlab/api-report.md b/plugins/catalog-backend-module-gitlab/api-report.md index bd7b13efc3..9ed90a2c42 100644 --- a/plugins/catalog-backend-module-gitlab/api-report.md +++ b/plugins/catalog-backend-module-gitlab/api-report.md @@ -3,6 +3,7 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { BackendFeature } from '@backstage/backend-plugin-api'; import { CatalogProcessor } from '@backstage/plugin-catalog-backend'; import { CatalogProcessorEmit } from '@backstage/plugin-catalog-backend'; import { Config } from '@backstage/config'; @@ -32,6 +33,11 @@ export class GitlabDiscoveryEntityProvider implements EntityProvider { refresh(logger: Logger): Promise; } +// @alpha +export const gitlabDiscoveryEntityProviderCatalogModule: ( + options?: undefined, +) => BackendFeature; + // @public export class GitLabDiscoveryProcessor implements CatalogProcessor { // (undocumented) diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index e537fa5e04..9946ac0997 100644 --- a/plugins/catalog-backend-module-gitlab/package.json +++ b/plugins/catalog-backend-module-gitlab/package.json @@ -7,6 +7,7 @@ "license": "Apache-2.0", "publishConfig": { "access": "public", + "alphaTypes": "dist/index.alpha.d.ts", "main": "dist/index.cjs.js", "types": "dist/index.d.ts" }, @@ -23,22 +24,24 @@ "backstage" ], "scripts": { - "build": "backstage-cli package build", + "start": "backstage-cli package start", + "build": "backstage-cli package build --experimental-type-build", "lint": "backstage-cli package lint", "test": "backstage-cli package test", "prepack": "backstage-cli package prepack", "postpack": "backstage-cli package postpack", - "clean": "backstage-cli package clean", - "start": "backstage-cli package start" + "clean": "backstage-cli package clean" }, "dependencies": { "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", "@backstage/backend-tasks": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", "@backstage/plugin-catalog-backend": "workspace:^", + "@backstage/plugin-catalog-node": "workspace:^", "@backstage/types": "workspace:^", "lodash": "^4.17.21", "msw": "^0.47.0", @@ -54,6 +57,7 @@ "luxon": "^3.0.0" }, "files": [ + "alpha", "config.d.ts", "dist" ], diff --git a/plugins/catalog-backend-module-gitlab/src/index.ts b/plugins/catalog-backend-module-gitlab/src/index.ts index 3182210c81..27aac9e78f 100644 --- a/plugins/catalog-backend-module-gitlab/src/index.ts +++ b/plugins/catalog-backend-module-gitlab/src/index.ts @@ -22,3 +22,4 @@ export { GitLabDiscoveryProcessor } from './GitLabDiscoveryProcessor'; export { GitlabDiscoveryEntityProvider } from './providers'; +export { gitlabDiscoveryEntityProviderCatalogModule } from './service/GitlabDiscoveryEntityProviderCatalogModule'; diff --git a/plugins/catalog-backend-module-gitlab/src/service/GitlabDiscoveryEntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-gitlab/src/service/GitlabDiscoveryEntityProviderCatalogModule.test.ts new file mode 100644 index 0000000000..0b803734b1 --- /dev/null +++ b/plugins/catalog-backend-module-gitlab/src/service/GitlabDiscoveryEntityProviderCatalogModule.test.ts @@ -0,0 +1,96 @@ +/* + * 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 { getVoidLogger } from '@backstage/backend-common'; +import { + configServiceRef, + loggerServiceRef, + schedulerServiceRef, +} from '@backstage/backend-plugin-api'; +import { + PluginTaskScheduler, + TaskScheduleDefinition, +} from '@backstage/backend-tasks'; +import { startTestBackend } from '@backstage/backend-test-utils'; +import { ConfigReader } from '@backstage/config'; +import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node'; +import { Duration } from 'luxon'; +import { gitlabDiscoveryEntityProviderCatalogModule } from './GitlabDiscoveryEntityProviderCatalogModule'; +import { GitlabDiscoveryEntityProvider } from '../providers'; + +describe('gitlabDiscoveryEntityProviderCatalogModule', () => { + it('should register provider at the catalog extension point', async () => { + let addedProviders: Array | undefined; + let usedSchedule: TaskScheduleDefinition | undefined; + + const extensionPoint = { + addEntityProvider: (providers: any) => { + addedProviders = providers; + }, + }; + const runner = jest.fn(); + const scheduler = { + createScheduledTaskRunner: (schedule: TaskScheduleDefinition) => { + usedSchedule = schedule; + return runner; + }, + } as unknown as PluginTaskScheduler; + + const config = new ConfigReader({ + integrations: { + gitlab: [ + { + host: 'test-gitlab', + apiBaseUrl: 'https://api.gitlab.example/api/v4', + token: '1234', + }, + ], + }, + catalog: { + providers: { + gitlab: { + 'test-id': { + host: 'test-gitlab', + group: 'test-group', + schedule: { + frequency: 'P1M', + timeout: 'PT3M', + }, + }, + }, + }, + }, + }); + + await startTestBackend({ + extensionPoints: [[catalogProcessingExtensionPoint, extensionPoint]], + services: [ + [configServiceRef, config], + [loggerServiceRef, getVoidLogger()], + [schedulerServiceRef, scheduler], + ], + features: [gitlabDiscoveryEntityProviderCatalogModule()], + }); + + expect(usedSchedule?.frequency).toEqual(Duration.fromISO('P1M')); + expect(usedSchedule?.timeout).toEqual(Duration.fromISO('PT3M')); + expect(addedProviders?.length).toEqual(1); + expect(addedProviders?.pop()?.getProviderName()).toEqual( + 'GitlabDiscoveryEntityProvider:test-id', + ); + expect(runner).not.toHaveBeenCalled(); + }); +}); diff --git a/plugins/catalog-backend-module-gitlab/src/service/GitlabDiscoveryEntityProviderCatalogModule.ts b/plugins/catalog-backend-module-gitlab/src/service/GitlabDiscoveryEntityProviderCatalogModule.ts new file mode 100644 index 0000000000..dc11841e20 --- /dev/null +++ b/plugins/catalog-backend-module-gitlab/src/service/GitlabDiscoveryEntityProviderCatalogModule.ts @@ -0,0 +1,53 @@ +/* + * 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 { + createBackendModule, + loggerToWinstonLogger, + configServiceRef, + loggerServiceRef, + schedulerServiceRef, +} from '@backstage/backend-plugin-api'; +import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node'; +import { GitlabDiscoveryEntityProvider } from '../providers'; + +/** + * Registers the GitlabDiscoveryEntityProvider with the catalog processing extension point. + * + * @alpha + */ +export const gitlabDiscoveryEntityProviderCatalogModule = createBackendModule({ + pluginId: 'catalog', + moduleId: 'gitlabDiscoveryEntityProvider', + register(env) { + env.registerInit({ + deps: { + config: configServiceRef, + catalog: catalogProcessingExtensionPoint, + logger: loggerServiceRef, + scheduler: schedulerServiceRef, + }, + async init({ config, catalog, logger, scheduler }) { + catalog.addEntityProvider( + GitlabDiscoveryEntityProvider.fromConfig(config, { + logger: loggerToWinstonLogger(logger), + scheduler, + }), + ); + }, + }); + }, +}); diff --git a/yarn.lock b/yarn.lock index 4c1f1a9bb6..cacca47910 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4610,6 +4610,7 @@ __metadata: resolution: "@backstage/plugin-catalog-backend-module-gitlab@workspace:plugins/catalog-backend-module-gitlab" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-tasks": "workspace:^" "@backstage/backend-test-utils": "workspace:^" "@backstage/catalog-model": "workspace:^" @@ -4618,6 +4619,7 @@ __metadata: "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" "@backstage/plugin-catalog-backend": "workspace:^" + "@backstage/plugin-catalog-node": "workspace:^" "@backstage/types": "workspace:^" "@types/lodash": ^4.14.151 "@types/uuid": ^8.0.0 From 58ecab4409f220c385805c4f2829f286464b7752 Mon Sep 17 00:00:00 2001 From: Patrick Jungermann Date: Fri, 7 Oct 2022 12:45:24 +0200 Subject: [PATCH 107/278] fix(catalog/bitbucketCloud): fix changeset Change included at PR #13859 is rather a patch than a minor change. Signed-off-by: Patrick Jungermann --- .changeset/brown-grapes-battle.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/brown-grapes-battle.md b/.changeset/brown-grapes-battle.md index f94c938b02..21b345fc83 100644 --- a/.changeset/brown-grapes-battle.md +++ b/.changeset/brown-grapes-battle.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-catalog-backend-module-bitbucket-cloud': minor +'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch --- Bitbucket Cloud provider: Add option to configure schedule via `app-config.yaml` instead of in code. From 64dea77ede13f98efb527d7ad8dfd1b6bb958ec7 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Fri, 7 Oct 2022 12:52:33 +0200 Subject: [PATCH 108/278] move type to common package Signed-off-by: Kiss Miklos --- .../catalog-backend/src/ingestion/types.ts | 21 +++++------ plugins/catalog-common/api-report.md | 8 ++++- plugins/catalog-common/src/common.ts | 32 +++++++++++++++++ plugins/catalog-common/src/index.ts | 1 + .../src/ingestion/LocationAnalyzer.ts | 2 +- plugins/catalog-node/api-report.md | 35 +++++++++---------- plugins/catalog-node/package.json | 1 + plugins/catalog-node/src/api/common.ts | 8 ++--- .../catalog-node/src/api/processingResult.ts | 3 +- plugins/catalog-node/src/api/processor.ts | 3 +- yarn.lock | 1 + 11 files changed, 77 insertions(+), 38 deletions(-) create mode 100644 plugins/catalog-common/src/common.ts diff --git a/plugins/catalog-backend/src/ingestion/types.ts b/plugins/catalog-backend/src/ingestion/types.ts index 467fe498b2..416fa968ab 100644 --- a/plugins/catalog-backend/src/ingestion/types.ts +++ b/plugins/catalog-backend/src/ingestion/types.ts @@ -15,23 +15,23 @@ */ import { - AnalyzeLocationRequest as ExaltedAnalyzeLocationRequest, - AnalyzeLocationResponse as ExaltedAnalyzeLocationResponse, - AnalyzeLocationExistingEntity as ExaltedAnalyzeLocationExistingEntity, - AnalyzeLocationGenerateEntity as ExaltedAnalyzeLocationGenerateEntity, - AnalyzeLocationEntityField as ExaltedAnalyzeLocationEntityField, + AnalyzeLocationRequest as NonDeprecatedAnalyzeLocationRequest, + AnalyzeLocationResponse as NonDeprecatedAnalyzeLocationResponse, + AnalyzeLocationExistingEntity as NonDeprecatedAnalyzeLocationExistingEntity, + AnalyzeLocationGenerateEntity as NonDeprecatedAnalyzeLocationGenerateEntity, + AnalyzeLocationEntityField as NonDeprecatedAnalyzeLocationEntityField, } from '@backstage/plugin-catalog-common'; /** * @public * @deprecated use the same type from `@backstage/plugin-catalog-common` instead */ -export type AnalyzeLocationRequest = ExaltedAnalyzeLocationRequest; +export type AnalyzeLocationRequest = NonDeprecatedAnalyzeLocationRequest; /** * @public * @deprecated use the same type from `@backstage/plugin-catalog-common` instead */ -export type AnalyzeLocationResponse = ExaltedAnalyzeLocationResponse; +export type AnalyzeLocationResponse = NonDeprecatedAnalyzeLocationResponse; /** * If the folder pointed to already contained catalog info yaml files, they are @@ -42,7 +42,7 @@ export type AnalyzeLocationResponse = ExaltedAnalyzeLocationResponse; * @deprecated use the same type from `@backstage/plugin-catalog-common` instead */ export type AnalyzeLocationExistingEntity = - ExaltedAnalyzeLocationExistingEntity; + NonDeprecatedAnalyzeLocationExistingEntity; /** * This is some form of representation of what the analyzer could deduce. * We should probably have a chat about how this can best be conveyed to @@ -53,7 +53,7 @@ export type AnalyzeLocationExistingEntity = * @deprecated use the same type from `@backstage/plugin-catalog-common` instead */ export type AnalyzeLocationGenerateEntity = - ExaltedAnalyzeLocationGenerateEntity; + NonDeprecatedAnalyzeLocationGenerateEntity; /** * @@ -63,7 +63,8 @@ export type AnalyzeLocationGenerateEntity = * @public * @deprecated use the same type from `@backstage/plugin-catalog-common` instead */ -export type AnalyzeLocationEntityField = ExaltedAnalyzeLocationEntityField; +export type AnalyzeLocationEntityField = + NonDeprecatedAnalyzeLocationEntityField; /** @public */ export type LocationAnalyzer = { diff --git a/plugins/catalog-common/api-report.md b/plugins/catalog-common/api-report.md index 867454f9bd..1bef626c79 100644 --- a/plugins/catalog-common/api-report.md +++ b/plugins/catalog-common/api-report.md @@ -6,7 +6,6 @@ import { BasicPermission } from '@backstage/plugin-permission-common'; import { Entity } from '@backstage/catalog-model'; import { IndexableDocument } from '@backstage/plugin-search-common'; -import { LocationSpec } from '@backstage/plugin-catalog-node'; import { ResourcePermission } from '@backstage/plugin-permission-common'; // @public (undocumented) @@ -93,6 +92,13 @@ export const catalogPermissions: ( | ResourcePermission<'catalog-entity'> )[]; +// @public +export type LocationSpec = { + type: string; + target: string; + presence?: 'optional' | 'required'; +}; + // @alpha export const RESOURCE_TYPE_CATALOG_ENTITY = 'catalog-entity'; ``` diff --git a/plugins/catalog-common/src/common.ts b/plugins/catalog-common/src/common.ts new file mode 100644 index 0000000000..c926a94b28 --- /dev/null +++ b/plugins/catalog-common/src/common.ts @@ -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. + */ + +/** + * Holds the entity location information. + * + * @remarks + * + * `presence` flag: when using repo importer plugin, location is being created before the component yaml file is merged to the main branch. + * This flag is then set to indicate that the file can be not present. + * default value: 'required'. + * + * @public + */ +export type LocationSpec = { + type: string; + target: string; + presence?: 'optional' | 'required'; +}; diff --git a/plugins/catalog-common/src/index.ts b/plugins/catalog-common/src/index.ts index a37fd122f9..95bd65bc92 100644 --- a/plugins/catalog-common/src/index.ts +++ b/plugins/catalog-common/src/index.ts @@ -36,3 +36,4 @@ export type { CatalogEntityPermission } from './permissions'; export * from './search'; export * from './ingestion'; +export type { LocationSpec } from './common'; diff --git a/plugins/catalog-common/src/ingestion/LocationAnalyzer.ts b/plugins/catalog-common/src/ingestion/LocationAnalyzer.ts index 8d570894cf..08ae5ef0cb 100644 --- a/plugins/catalog-common/src/ingestion/LocationAnalyzer.ts +++ b/plugins/catalog-common/src/ingestion/LocationAnalyzer.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { LocationSpec } from '@backstage/plugin-catalog-node'; +import { LocationSpec } from '../common'; import { Entity } from '@backstage/catalog-model'; import { RecursivePartial } from './RecursivePartial'; diff --git a/plugins/catalog-node/api-report.md b/plugins/catalog-node/api-report.md index 525516be54..09a05ec7d9 100644 --- a/plugins/catalog-node/api-report.md +++ b/plugins/catalog-node/api-report.md @@ -10,6 +10,7 @@ import { CompoundEntityRef } from '@backstage/catalog-model'; import { Entity } from '@backstage/catalog-model'; import { ExtensionPoint } from '@backstage/backend-plugin-api'; import { JsonValue } from '@backstage/types'; +import { LocationSpec as LocationSpec_2 } from '@backstage/plugin-catalog-common'; import { ServiceRef } from '@backstage/backend-plugin-api'; // @alpha (undocumented) @@ -31,7 +32,7 @@ export const catalogProcessingExtensionPoint: ExtensionPoint; preProcessEntity?( entity: Entity, - location: LocationSpec, + location: LocationSpec_2, emit: CatalogProcessorEmit, - originLocation: LocationSpec, + originLocation: LocationSpec_2, cache: CatalogProcessorCache, ): Promise; validateEntityKind?(entity: Entity): Promise; postProcessEntity?( entity: Entity, - location: LocationSpec, + location: LocationSpec_2, emit: CatalogProcessorEmit, cache: CatalogProcessorCache, ): Promise; @@ -66,26 +67,26 @@ export type CatalogProcessorEmit = (generated: CatalogProcessorResult) => void; export type CatalogProcessorEntityResult = { type: 'entity'; entity: Entity; - location: LocationSpec; + location: LocationSpec_2; }; // @public (undocumented) export type CatalogProcessorErrorResult = { type: 'error'; error: Error; - location: LocationSpec; + location: LocationSpec_2; }; // @public (undocumented) export type CatalogProcessorLocationResult = { type: 'location'; - location: LocationSpec; + location: LocationSpec_2; }; // @public export type CatalogProcessorParser = (options: { data: Buffer; - location: LocationSpec; + location: LocationSpec_2; }) => AsyncIterable; // @public (undocumented) @@ -153,30 +154,26 @@ export type EntityRelationSpec = { target: CompoundEntityRef; }; -// @public -export type LocationSpec = { - type: string; - target: string; - presence?: 'optional' | 'required'; -}; +// @public @deprecated +export type LocationSpec = LocationSpec_2; // @public export const processingResult: Readonly<{ readonly notFoundError: ( - atLocation: LocationSpec, + atLocation: LocationSpec_2, message: string, ) => CatalogProcessorResult; readonly inputError: ( - atLocation: LocationSpec, + atLocation: LocationSpec_2, message: string, ) => CatalogProcessorResult; readonly generalError: ( - atLocation: LocationSpec, + atLocation: LocationSpec_2, message: string, ) => CatalogProcessorResult; - readonly location: (newLocation: LocationSpec) => CatalogProcessorResult; + readonly location: (newLocation: LocationSpec_2) => CatalogProcessorResult; readonly entity: ( - atLocation: LocationSpec, + atLocation: LocationSpec_2, newEntity: Entity, ) => CatalogProcessorResult; readonly relation: (spec: EntityRelationSpec) => CatalogProcessorResult; diff --git a/plugins/catalog-node/package.json b/plugins/catalog-node/package.json index 0a7e687bb7..7cbbac1531 100644 --- a/plugins/catalog-node/package.json +++ b/plugins/catalog-node/package.json @@ -28,6 +28,7 @@ "@backstage/catalog-client": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/errors": "workspace:^", + "@backstage/plugin-catalog-common": "workspace:^", "@backstage/types": "workspace:^" }, "devDependencies": { diff --git a/plugins/catalog-node/src/api/common.ts b/plugins/catalog-node/src/api/common.ts index f3b4a387ba..c91aeca2d9 100644 --- a/plugins/catalog-node/src/api/common.ts +++ b/plugins/catalog-node/src/api/common.ts @@ -15,6 +15,7 @@ */ import { CompoundEntityRef } from '@backstage/catalog-model'; +import { LocationSpec as NonDeprecatedLocationSpec } from '@backstage/plugin-catalog-common'; /** * Holds the entity location information. @@ -26,12 +27,9 @@ import { CompoundEntityRef } from '@backstage/catalog-model'; * default value: 'required'. * * @public + * @deprecated use the same type from `@backstage/plugin-catalog-common` instead */ -export type LocationSpec = { - type: string; - target: string; - presence?: 'optional' | 'required'; -}; +export type LocationSpec = NonDeprecatedLocationSpec; /** * Holds the relation data for entities. diff --git a/plugins/catalog-node/src/api/processingResult.ts b/plugins/catalog-node/src/api/processingResult.ts index 84f1f4b70d..d8b6f3ae02 100644 --- a/plugins/catalog-node/src/api/processingResult.ts +++ b/plugins/catalog-node/src/api/processingResult.ts @@ -17,7 +17,8 @@ import { InputError, NotFoundError } from '@backstage/errors'; import { Entity } from '@backstage/catalog-model'; import { CatalogProcessorResult } from './processor'; -import { EntityRelationSpec, LocationSpec } from './common'; +import { EntityRelationSpec } from './common'; +import { LocationSpec } from '@backstage/plugin-catalog-common'; /** * Factory functions for the standard processing result types. diff --git a/plugins/catalog-node/src/api/processor.ts b/plugins/catalog-node/src/api/processor.ts index 44e8b298b0..3ad080f014 100644 --- a/plugins/catalog-node/src/api/processor.ts +++ b/plugins/catalog-node/src/api/processor.ts @@ -16,7 +16,8 @@ import { Entity } from '@backstage/catalog-model'; import { JsonValue } from '@backstage/types'; -import { EntityRelationSpec, LocationSpec } from './common'; +import { EntityRelationSpec } from './common'; +import { LocationSpec } from '@backstage/plugin-catalog-common'; /** * @public diff --git a/yarn.lock b/yarn.lock index 71d139f97d..aca25a583e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4838,6 +4838,7 @@ __metadata: "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/errors": "workspace:^" + "@backstage/plugin-catalog-common": "workspace:^" "@backstage/types": "workspace:^" languageName: unknown linkType: soft From 45ac7769817b40ec5ce7f8827a66057c412def62 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Fri, 7 Oct 2022 12:55:38 +0200 Subject: [PATCH 109/278] add docs string Signed-off-by: Kiss Miklos --- plugins/catalog-backend/src/ingestion/types.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/catalog-backend/src/ingestion/types.ts b/plugins/catalog-backend/src/ingestion/types.ts index 416fa968ab..78339b3b23 100644 --- a/plugins/catalog-backend/src/ingestion/types.ts +++ b/plugins/catalog-backend/src/ingestion/types.ts @@ -90,6 +90,7 @@ export type ScmLocationAnalyzer = { supports(url: string): boolean; /** This function can return an array of already existing entities */ analyze(options: AnalyzeOptions): Promise<{ + /** Existing entities in the analyzed location */ existing: AnalyzeLocationExistingEntity[]; }>; }; From 78e7698e4b70e1f07f031228ec5f754ea5dbdd5d Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Fri, 7 Oct 2022 12:08:00 +0100 Subject: [PATCH 110/278] Removed unnecessary tupling of params Signed-off-by: Harry Hogg --- .../permission-node/src/integration/createConditionFactory.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/permission-node/src/integration/createConditionFactory.ts b/plugins/permission-node/src/integration/createConditionFactory.ts index 3a31e07dac..7f8cb1ced8 100644 --- a/plugins/permission-node/src/integration/createConditionFactory.ts +++ b/plugins/permission-node/src/integration/createConditionFactory.ts @@ -42,11 +42,11 @@ export const createConditionFactory = < >( rule: PermissionRule, ) => { - return (...args: [TParams]): PermissionCondition => { + return (params: TParams): PermissionCondition => { return { rule: rule.name, resourceType: rule.resourceType, - params: args[0], + params, }; }; }; From 404366c8539d97c4b5215eb0b48d1ec0e709b2ea Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Fri, 7 Oct 2022 14:31:55 +0200 Subject: [PATCH 111/278] add changeset Signed-off-by: Kiss Miklos --- .changeset/brave-goats-rush.md | 5 +++++ plugins/catalog-common/package.json | 1 - yarn.lock | 1 - 3 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 .changeset/brave-goats-rush.md diff --git a/.changeset/brave-goats-rush.md b/.changeset/brave-goats-rush.md new file mode 100644 index 0000000000..12dae257af --- /dev/null +++ b/.changeset/brave-goats-rush.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-node': patch +--- + +Deprecated the `LocationSpec` type. It got moved from this package to the `@backstage/plugin-catalog-common` and will be removed from this after some time. diff --git a/plugins/catalog-common/package.json b/plugins/catalog-common/package.json index 96e9f31b43..a847d5766c 100644 --- a/plugins/catalog-common/package.json +++ b/plugins/catalog-common/package.json @@ -34,7 +34,6 @@ }, "dependencies": { "@backstage/catalog-model": "workspace:^", - "@backstage/plugin-catalog-node": "workspace:^", "@backstage/plugin-permission-common": "workspace:^", "@backstage/plugin-search-common": "workspace:^" }, diff --git a/yarn.lock b/yarn.lock index aca25a583e..8afb919f99 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4720,7 +4720,6 @@ __metadata: dependencies: "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" - "@backstage/plugin-catalog-node": "workspace:^" "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-search-common": "workspace:^" languageName: unknown From 9552527c37dfd48b410dc4f6c959a166ce7024ab Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Fri, 7 Oct 2022 16:02:05 +0200 Subject: [PATCH 112/278] fix changeset Signed-off-by: Kiss Miklos --- .changeset/brave-goats-rush.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.changeset/brave-goats-rush.md b/.changeset/brave-goats-rush.md index 12dae257af..8a14f8ea00 100644 --- a/.changeset/brave-goats-rush.md +++ b/.changeset/brave-goats-rush.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-catalog-node': patch +'@backstage/plugin-catalog-node': minor --- -Deprecated the `LocationSpec` type. It got moved from this package to the `@backstage/plugin-catalog-common` and will be removed from this after some time. +Deprecated the `LocationSpec` type. It got moved from this package to the `@backstage/plugin-catalog-common` so make sure imports are updated. From eb25f7e12d99fbe175ac97d3b46e791c3508232a Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Fri, 7 Oct 2022 15:19:09 +0100 Subject: [PATCH 113/278] Broke up changesets to reflect the package changes Signed-off-by: Harry Hogg --- .changeset/kind-bees-suffer.md | 2 -- .changeset/quick-meals-talk.md | 19 ++++++++++++++++++ .changeset/seven-panthers-chew.md | 33 +++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 .changeset/quick-meals-talk.md create mode 100644 .changeset/seven-panthers-chew.md diff --git a/.changeset/kind-bees-suffer.md b/.changeset/kind-bees-suffer.md index 18e8afa947..bdd6d1f594 100644 --- a/.changeset/kind-bees-suffer.md +++ b/.changeset/kind-bees-suffer.md @@ -1,8 +1,6 @@ --- -'@backstage/plugin-catalog-backend': minor '@backstage/plugin-permission-common': minor '@backstage/plugin-permission-node': minor -'@backstage/plugin-playlist-backend': minor --- **BREAKING**: When defining permission rules, it's now necessary to provide a ZodSchema that specifies the parameters the rule expects. This has been added to help better describe the parameters in the response of the metadata endpoint and to validate the parameters before a rule is executed. diff --git a/.changeset/quick-meals-talk.md b/.changeset/quick-meals-talk.md new file mode 100644 index 0000000000..bde70d25fd --- /dev/null +++ b/.changeset/quick-meals-talk.md @@ -0,0 +1,19 @@ +--- +'@backstage/plugin-playlist-backend': minor +--- + +**BREAKING** Due to the changes made in the Permission framework. The playlist backends permission rules have change to reflect this. + +As an example the `playlistConditions.isOwner` API has changed from + +```ts +playlistConditions.isOwner(['user:default/me', 'group:default/owner']); +``` + +to the new API + +```ts +playlistConditions.isOwner({ + owners: ['user:default/me', 'group:default/owner'], +}); +``` diff --git a/.changeset/seven-panthers-chew.md b/.changeset/seven-panthers-chew.md new file mode 100644 index 0000000000..7b44f2f633 --- /dev/null +++ b/.changeset/seven-panthers-chew.md @@ -0,0 +1,33 @@ +--- +'@backstage/plugin-catalog-backend': minor +--- + +**BREAKING** Due to the changes made in the Permission framework. The catalogs permission rules and the API of `createCatalogPermissionRule` have been changed to reflect the change from individual function parameters to a single object parameter and the addition of the `paramsSchema`. + +As an example for the `hasLabel` rule. The API before the change was + +```ts +hasLabel.apply(entity, 'backstage.io/testLabel'); +hasLabel.toQuery('backstage.io/testLabel'); +``` + +and the API after the change now is + +```ts +hasLabel.apply(entity, { + label: 'backstage.io/testLabel', +}); + +hasLabel.toQuery({ + label: 'backstage.io/testLabel', +}); +``` + +This applies to all of the permission rules exported by the catalog backend. + +- `hasAnnotation` +- `hasLabel` +- `hasMetadata` +- `hasSpec` +- `isEntityKind` +- `isEntityOwner` From f6aa16fb7a3788f61919a959086f63853d580a49 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Fri, 7 Oct 2022 16:16:22 +0100 Subject: [PATCH 114/278] Updated API reports Signed-off-by: Harry Hogg --- plugins/permission-node/api-report.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/permission-node/api-report.md b/plugins/permission-node/api-report.md index 4bc654cd73..3895b4b3cb 100644 --- a/plugins/permission-node/api-report.md +++ b/plugins/permission-node/api-report.md @@ -100,7 +100,7 @@ export const createConditionFactory: < TParams extends PermissionRuleParams = PermissionRuleParams, >( rule: PermissionRule, -) => (args_0: TParams) => PermissionCondition; +) => (params: TParams) => PermissionCondition; // @public export const createConditionTransformer: < From 5eb598babb013462a7fc20719d82037574282de2 Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Fri, 7 Oct 2022 17:38:42 +0200 Subject: [PATCH 115/278] refactor(search-react): restrict range of valid options type Signed-off-by: Camila Belo --- plugins/search-react/api-report.md | 10 ++++++++- .../SearchResultLimiter.tsx | 22 +++++++++++-------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/plugins/search-react/api-report.md b/plugins/search-react/api-report.md index 744f45065f..24b70240a0 100644 --- a/plugins/search-react/api-report.md +++ b/plugins/search-react/api-report.md @@ -335,11 +335,19 @@ export type SearchResultLimiterBaseProps = { id?: string; className?: string; label?: ReactNode; - options?: number[]; + options?: SearchResultLimiterOption[]; value?: number; onChange?: (value: number) => void; }; +// @public +export type SearchResultLimiterOption< + Current extends number = 101, + Accumulator extends number[] = [], +> = Accumulator['length'] extends Current + ? Accumulator[number] + : SearchResultLimiterOption; + // @public export type SearchResultLimiterProps = Omit< SearchResultLimiterBaseProps, diff --git a/plugins/search-react/src/components/SearchResultLimiter/SearchResultLimiter.tsx b/plugins/search-react/src/components/SearchResultLimiter/SearchResultLimiter.tsx index 0d4b8381dd..7f2d1ffc58 100644 --- a/plugins/search-react/src/components/SearchResultLimiter/SearchResultLimiter.tsx +++ b/plugins/search-react/src/components/SearchResultLimiter/SearchResultLimiter.tsx @@ -25,6 +25,17 @@ import { } from '@material-ui/core'; import { useSearch } from '../../context'; +/** + * A page limit option, this value must not be greater than 100. + * @public + */ +export type SearchResultLimiterOption< + Current extends number = 101, + Accumulator extends number[] = [], +> = Accumulator['length'] extends Current + ? Accumulator[number] + : SearchResultLimiterOption; + /** * Props for {@link SearchResultLimiterBase}. * @public @@ -39,7 +50,7 @@ export type SearchResultLimiterBaseProps = { /** * The combobox labels, defaults to 10, 25, 50 and 100. */ - options?: number[]; + options?: SearchResultLimiterOption[]; /** * Combobox selected option, defaults to 25; */ @@ -129,18 +140,11 @@ export type SearchResultLimiterProps = Omit< export const SearchResultLimiter = (props: SearchResultLimiterProps) => { const { pageLimit, setPageLimit } = useSearch(); - const handleChange = useCallback( - (newPageLimit: number) => { - setPageLimit(newPageLimit); - }, - [setPageLimit], - ); - return ( ); }; From d3891773a57dc9a5f45d1684f5e24000d3220f67 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 7 Oct 2022 23:25:56 +0000 Subject: [PATCH 116/278] Update dependency @swc/core to v1.3.5 Signed-off-by: Renovate Bot --- storybook/yarn.lock | 110 ++++++++++++++++++++++---------------------- yarn.lock | 110 ++++++++++++++++++++++---------------------- 2 files changed, 110 insertions(+), 110 deletions(-) diff --git a/storybook/yarn.lock b/storybook/yarn.lock index db03614312..1567968127 100644 --- a/storybook/yarn.lock +++ b/storybook/yarn.lock @@ -2977,126 +2977,126 @@ __metadata: languageName: node linkType: hard -"@swc/core-android-arm-eabi@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-android-arm-eabi@npm:1.3.4" +"@swc/core-android-arm-eabi@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-android-arm-eabi@npm:1.3.5" dependencies: "@swc/wasm": 1.2.122 conditions: os=android & cpu=arm languageName: node linkType: hard -"@swc/core-android-arm64@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-android-arm64@npm:1.3.4" +"@swc/core-android-arm64@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-android-arm64@npm:1.3.5" dependencies: "@swc/wasm": 1.2.130 conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-darwin-arm64@npm:1.3.4" +"@swc/core-darwin-arm64@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-darwin-arm64@npm:1.3.5" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-darwin-x64@npm:1.3.4" +"@swc/core-darwin-x64@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-darwin-x64@npm:1.3.5" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-freebsd-x64@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-freebsd-x64@npm:1.3.4" +"@swc/core-freebsd-x64@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-freebsd-x64@npm:1.3.5" dependencies: "@swc/wasm": 1.2.130 conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.4" +"@swc/core-linux-arm-gnueabihf@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.5" dependencies: "@swc/wasm": 1.2.130 conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.4" +"@swc/core-linux-arm64-gnu@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.5" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.4" +"@swc/core-linux-arm64-musl@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.5" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.4" +"@swc/core-linux-x64-gnu@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.5" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-linux-x64-musl@npm:1.3.4" +"@swc/core-linux-x64-musl@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-linux-x64-musl@npm:1.3.5" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.4" +"@swc/core-win32-arm64-msvc@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.5" dependencies: "@swc/wasm": 1.2.130 conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.4" +"@swc/core-win32-ia32-msvc@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.5" dependencies: "@swc/wasm": 1.2.130 conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.4" +"@swc/core-win32-x64-msvc@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.5" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.2.239": - version: 1.3.4 - resolution: "@swc/core@npm:1.3.4" + version: 1.3.5 + resolution: "@swc/core@npm:1.3.5" dependencies: - "@swc/core-android-arm-eabi": 1.3.4 - "@swc/core-android-arm64": 1.3.4 - "@swc/core-darwin-arm64": 1.3.4 - "@swc/core-darwin-x64": 1.3.4 - "@swc/core-freebsd-x64": 1.3.4 - "@swc/core-linux-arm-gnueabihf": 1.3.4 - "@swc/core-linux-arm64-gnu": 1.3.4 - "@swc/core-linux-arm64-musl": 1.3.4 - "@swc/core-linux-x64-gnu": 1.3.4 - "@swc/core-linux-x64-musl": 1.3.4 - "@swc/core-win32-arm64-msvc": 1.3.4 - "@swc/core-win32-ia32-msvc": 1.3.4 - "@swc/core-win32-x64-msvc": 1.3.4 + "@swc/core-android-arm-eabi": 1.3.5 + "@swc/core-android-arm64": 1.3.5 + "@swc/core-darwin-arm64": 1.3.5 + "@swc/core-darwin-x64": 1.3.5 + "@swc/core-freebsd-x64": 1.3.5 + "@swc/core-linux-arm-gnueabihf": 1.3.5 + "@swc/core-linux-arm64-gnu": 1.3.5 + "@swc/core-linux-arm64-musl": 1.3.5 + "@swc/core-linux-x64-gnu": 1.3.5 + "@swc/core-linux-x64-musl": 1.3.5 + "@swc/core-win32-arm64-msvc": 1.3.5 + "@swc/core-win32-ia32-msvc": 1.3.5 + "@swc/core-win32-x64-msvc": 1.3.5 dependenciesMeta: "@swc/core-android-arm-eabi": optional: true @@ -3126,7 +3126,7 @@ __metadata: optional: true bin: swcx: run_swcx.js - checksum: 24b4ca4a096fea53056ed227a8aa09aa38cfe5eef344451397e66a2d183ded119872cf4fc8c671c0a6eb34985537cbf8d8a7e742b9e27dad0735426693d11dc8 + checksum: f0bcd0aa1d1a0b7d48ee5c416f8a384e19e4c0eed1e0be940d8893bf3981d98bf00f27d03bebf9cdedd34bf316d68c2db68e7bb7d1940d7b6062541e6e4cc738 languageName: node linkType: hard diff --git a/yarn.lock b/yarn.lock index f6bfb7f350..9cb701d697 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12515,126 +12515,126 @@ __metadata: languageName: node linkType: hard -"@swc/core-android-arm-eabi@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-android-arm-eabi@npm:1.3.4" +"@swc/core-android-arm-eabi@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-android-arm-eabi@npm:1.3.5" dependencies: "@swc/wasm": 1.2.122 conditions: os=android & cpu=arm languageName: node linkType: hard -"@swc/core-android-arm64@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-android-arm64@npm:1.3.4" +"@swc/core-android-arm64@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-android-arm64@npm:1.3.5" dependencies: "@swc/wasm": 1.2.130 conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-darwin-arm64@npm:1.3.4" +"@swc/core-darwin-arm64@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-darwin-arm64@npm:1.3.5" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-darwin-x64@npm:1.3.4" +"@swc/core-darwin-x64@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-darwin-x64@npm:1.3.5" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-freebsd-x64@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-freebsd-x64@npm:1.3.4" +"@swc/core-freebsd-x64@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-freebsd-x64@npm:1.3.5" dependencies: "@swc/wasm": 1.2.130 conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.4" +"@swc/core-linux-arm-gnueabihf@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.5" dependencies: "@swc/wasm": 1.2.130 conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.4" +"@swc/core-linux-arm64-gnu@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.5" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.4" +"@swc/core-linux-arm64-musl@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.5" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.4" +"@swc/core-linux-x64-gnu@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.5" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-linux-x64-musl@npm:1.3.4" +"@swc/core-linux-x64-musl@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-linux-x64-musl@npm:1.3.5" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.4" +"@swc/core-win32-arm64-msvc@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.5" dependencies: "@swc/wasm": 1.2.130 conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.4" +"@swc/core-win32-ia32-msvc@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.5" dependencies: "@swc/wasm": 1.2.130 conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.4": - version: 1.3.4 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.4" +"@swc/core-win32-x64-msvc@npm:1.3.5": + version: 1.3.5 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.5" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.2.239": - version: 1.3.4 - resolution: "@swc/core@npm:1.3.4" + version: 1.3.5 + resolution: "@swc/core@npm:1.3.5" dependencies: - "@swc/core-android-arm-eabi": 1.3.4 - "@swc/core-android-arm64": 1.3.4 - "@swc/core-darwin-arm64": 1.3.4 - "@swc/core-darwin-x64": 1.3.4 - "@swc/core-freebsd-x64": 1.3.4 - "@swc/core-linux-arm-gnueabihf": 1.3.4 - "@swc/core-linux-arm64-gnu": 1.3.4 - "@swc/core-linux-arm64-musl": 1.3.4 - "@swc/core-linux-x64-gnu": 1.3.4 - "@swc/core-linux-x64-musl": 1.3.4 - "@swc/core-win32-arm64-msvc": 1.3.4 - "@swc/core-win32-ia32-msvc": 1.3.4 - "@swc/core-win32-x64-msvc": 1.3.4 + "@swc/core-android-arm-eabi": 1.3.5 + "@swc/core-android-arm64": 1.3.5 + "@swc/core-darwin-arm64": 1.3.5 + "@swc/core-darwin-x64": 1.3.5 + "@swc/core-freebsd-x64": 1.3.5 + "@swc/core-linux-arm-gnueabihf": 1.3.5 + "@swc/core-linux-arm64-gnu": 1.3.5 + "@swc/core-linux-arm64-musl": 1.3.5 + "@swc/core-linux-x64-gnu": 1.3.5 + "@swc/core-linux-x64-musl": 1.3.5 + "@swc/core-win32-arm64-msvc": 1.3.5 + "@swc/core-win32-ia32-msvc": 1.3.5 + "@swc/core-win32-x64-msvc": 1.3.5 dependenciesMeta: "@swc/core-android-arm-eabi": optional: true @@ -12664,7 +12664,7 @@ __metadata: optional: true bin: swcx: run_swcx.js - checksum: 24b4ca4a096fea53056ed227a8aa09aa38cfe5eef344451397e66a2d183ded119872cf4fc8c671c0a6eb34985537cbf8d8a7e742b9e27dad0735426693d11dc8 + checksum: f0bcd0aa1d1a0b7d48ee5c416f8a384e19e4c0eed1e0be940d8893bf3981d98bf00f27d03bebf9cdedd34bf316d68c2db68e7bb7d1940d7b6062541e6e4cc738 languageName: node linkType: hard From c9198c9fce457788db93a3d809310c84025aea06 Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Sat, 8 Oct 2022 15:03:43 +0200 Subject: [PATCH 117/278] refactor(search-react): use mui table pagination component Signed-off-by: Camila Belo --- .changeset/search-days-pull.md | 19 +- .../app/src/components/search/SearchPage.tsx | 8 +- plugins/search-react/api-report.md | 78 ++++---- .../SearchPagination.stories.tsx} | 20 +- .../SearchPagination.test.tsx} | 110 ++++++++--- .../SearchPagination/SearchPagination.tsx | 178 ++++++++++++++++++ .../index.ts | 2 +- .../SearchResultLimiter.tsx | 150 --------------- plugins/search-react/src/components/index.ts | 2 +- 9 files changed, 331 insertions(+), 236 deletions(-) rename plugins/search-react/src/components/{SearchResultLimiter/SearchResultLimiter.stories.tsx => SearchPagination/SearchPagination.stories.tsx} (72%) rename plugins/search-react/src/components/{SearchResultLimiter/SearchResultLimiter.test.tsx => SearchPagination/SearchPagination.test.tsx} (58%) create mode 100644 plugins/search-react/src/components/SearchPagination/SearchPagination.tsx rename plugins/search-react/src/components/{SearchResultLimiter => SearchPagination}/index.ts (93%) delete mode 100644 plugins/search-react/src/components/SearchResultLimiter/SearchResultLimiter.tsx diff --git a/.changeset/search-days-pull.md b/.changeset/search-days-pull.md index 72fb9974a4..03000e4870 100644 --- a/.changeset/search-days-pull.md +++ b/.changeset/search-days-pull.md @@ -2,9 +2,7 @@ '@backstage/plugin-search-react': minor --- -A `` component was created for limiting the number of results shown per search page. -Use this new component to give users a combination of options to define how many search results they want to display per page. -The default options are 10, 25, 50, 100. +A `` component was created for limiting the number of results shown per search page. Use this new component to give users options to select how many search results they want to display per page. The default options are 10, 25, 50, 100. See examples below: @@ -16,13 +14,14 @@ import { Grid } from '@material-ui/core'; import { Page, Header, Content, Lifecycle } from '@backstage/core-components'; import { SearchBarBase, - SearchResultLimiterBase, + SearchPaginationBase, SearchResultList, } from '@backstage/plugin-search-react'; const SearchPage = () => { const [term, setTerm] = useState(''); const [pageLimit, setPageLimit] = useState(25); + const [pageCursor, setPageCursor] = useState(); return ( @@ -33,9 +32,11 @@ const SearchPage = () => { - @@ -57,7 +58,7 @@ import { Page, Header, Content, Lifecycle } from '@backstage/core-components'; import { SearchBar, SearchResult, - SearchResultLimiter, + SearchPagination, SearchResultListLayout, SearchContextProvider, DefaultResultListItem, @@ -73,7 +74,7 @@ const SearchPage = () => ( - + diff --git a/packages/app/src/components/search/SearchPage.tsx b/packages/app/src/components/search/SearchPage.tsx index b97ac99558..d324b683d8 100644 --- a/packages/app/src/components/search/SearchPage.tsx +++ b/packages/app/src/components/search/SearchPage.tsx @@ -35,7 +35,7 @@ import { SearchBar, SearchFilter, SearchResult, - SearchResultLimiter, + SearchPagination, SearchResultPager, useSearch, } from '@backstage/plugin-search-react'; @@ -56,10 +56,6 @@ const useStyles = makeStyles((theme: Theme) => ({ padding: theme.spacing(2), marginTop: theme.spacing(2), }, - limiter: { - width: '100%', - justifyContent: 'flex-end', - }, })); const SearchPage = () => { @@ -134,7 +130,7 @@ const SearchPage = () => { )} - + {({ results }) => ( diff --git a/plugins/search-react/api-report.md b/plugins/search-react/api-report.md index 24b70240a0..57c1791d9a 100644 --- a/plugins/search-react/api-report.md +++ b/plugins/search-react/api-report.md @@ -211,6 +211,50 @@ export type SearchFilterWrapperProps = SearchFilterComponentProps & { debug?: boolean; }; +// @public +export const SearchPagination: (props: SearchPaginationProps) => JSX.Element; + +// @public +export const SearchPaginationBase: ( + props: SearchPaginationBaseProps, +) => JSX.Element; + +// @public +export type SearchPaginationBaseProps = { + className?: string; + pageCursor?: string; + onPageCursorChange?: (pageCursor: string) => void; + pageLimit?: number; + pageLimitLabel?: ReactNode; + pageLimitText?: SearchPaginationLimitText; + pageLimitOptions?: SearchPaginationLimitOption[]; + onPageLimitChange?: (value: number) => void; +}; + +// @public +export type SearchPaginationLimitOption< + Current extends number = 101, + Accumulator extends number[] = [], +> = Accumulator['length'] extends Current + ? Accumulator[number] + : SearchPaginationLimitOption< + Current, + [...Accumulator, Accumulator['length']] + >; + +// @public +export type SearchPaginationLimitText = (params: { + from: number; + to: number; + page: number; +}) => ReactNode; + +// @public +export type SearchPaginationProps = Omit< + SearchPaginationBaseProps, + 'pageLimit' | 'onPageLimitChange' | 'pageCursor' | 'onPageCursorChange' +>; + // @public export const SearchResult: (props: SearchResultProps) => JSX.Element; @@ -320,40 +364,6 @@ export const SearchResultGroupTextFilterField: ( export type SearchResultGroupTextFilterFieldProps = SearchResultGroupFilterFieldPropsWith<{}>; -// @public -export const SearchResultLimiter: ( - props: SearchResultLimiterProps, -) => JSX.Element; - -// @public -export const SearchResultLimiterBase: ( - props: SearchResultLimiterBaseProps, -) => JSX.Element; - -// @public -export type SearchResultLimiterBaseProps = { - id?: string; - className?: string; - label?: ReactNode; - options?: SearchResultLimiterOption[]; - value?: number; - onChange?: (value: number) => void; -}; - -// @public -export type SearchResultLimiterOption< - Current extends number = 101, - Accumulator extends number[] = [], -> = Accumulator['length'] extends Current - ? Accumulator[number] - : SearchResultLimiterOption; - -// @public -export type SearchResultLimiterProps = Omit< - SearchResultLimiterBaseProps, - 'value' | 'onChange' ->; - // @public export const SearchResultList: (props: SearchResultListProps) => JSX.Element; diff --git a/plugins/search-react/src/components/SearchResultLimiter/SearchResultLimiter.stories.tsx b/plugins/search-react/src/components/SearchPagination/SearchPagination.stories.tsx similarity index 72% rename from plugins/search-react/src/components/SearchResultLimiter/SearchResultLimiter.stories.tsx rename to plugins/search-react/src/components/SearchPagination/SearchPagination.stories.tsx index f098f1ab68..eca668d165 100644 --- a/plugins/search-react/src/components/SearchResultLimiter/SearchResultLimiter.stories.tsx +++ b/plugins/search-react/src/components/SearchPagination/SearchPagination.stories.tsx @@ -22,11 +22,11 @@ import { TestApiProvider } from '@backstage/test-utils'; import { searchApiRef, MockSearchApi } from '../../api'; import { SearchContextProvider } from '../../context'; -import { SearchResultLimiter } from './SearchResultLimiter'; +import { SearchPagination } from './SearchPagination'; export default { - title: 'Plugins/Search/SearchResultLimiter', - component: SearchResultLimiter, + title: 'Plugins/Search/SearchPagination', + component: SearchPagination, decorators: [ (Story: ComponentType<{}>) => ( @@ -43,13 +43,17 @@ export default { }; export const Default = () => { - return ; + return ; }; -export const CustomLabel = () => { - return ; +export const CustomPageLimitLabel = () => { + return ; }; -export const CustomOptions = () => { - return ; +export const CustomPageLimitText = () => { + return `${from}-${to}`} />; +}; + +export const CustomPageLimitOptions = () => { + return ; }; diff --git a/plugins/search-react/src/components/SearchResultLimiter/SearchResultLimiter.test.tsx b/plugins/search-react/src/components/SearchPagination/SearchPagination.test.tsx similarity index 58% rename from plugins/search-react/src/components/SearchResultLimiter/SearchResultLimiter.test.tsx rename to plugins/search-react/src/components/SearchPagination/SearchPagination.test.tsx index a6f9f5b1e9..723a8a0031 100644 --- a/plugins/search-react/src/components/SearchResultLimiter/SearchResultLimiter.test.tsx +++ b/plugins/search-react/src/components/SearchPagination/SearchPagination.test.tsx @@ -23,11 +23,15 @@ import { renderWithEffects, TestApiProvider } from '@backstage/test-utils'; import { searchApiRef } from '../../api'; import { SearchContextProvider } from '../../context'; -import { SearchResultLimiter } from './SearchResultLimiter'; +import { SearchPagination } from './SearchPagination'; -const query = jest.fn().mockResolvedValue({ results: [] }); +const query = jest.fn().mockResolvedValue({ + results: [], + nextPageCursor: 'Mg==', + previousPageCursor: 'MA==', +}); -describe('SearchResultLimiter', () => { +describe('SearchPagination', () => { beforeEach(() => { jest.clearAllMocks(); }); @@ -36,20 +40,23 @@ describe('SearchResultLimiter', () => { await renderWithEffects( - + , ); expect(screen.getByText('Results per page:')).toBeInTheDocument(); expect(screen.getByText('25')).toBeInTheDocument(); + expect(screen.getByText('1-25 of more than 25')).toBeInTheDocument(); + expect(screen.getByLabelText('Next page')).toBeEnabled(); + expect(screen.getByLabelText('Previous page')).toBeDisabled(); }); - it('Define default options', async () => { + it('Define default page limit options', async () => { await renderWithEffects( - + , ); @@ -64,11 +71,55 @@ describe('SearchResultLimiter', () => { expect(options[3]).toHaveTextContent('100'); }); + it('Accept custom page limit label', async () => { + const label = 'Page limit:'; + await renderWithEffects( + + + + + , + ); + + expect(screen.getByText(label)).toBeInTheDocument(); + }); + + it('Accept custom page limit text', async () => { + await renderWithEffects( + + + `${from}-${to}`} /> + + , + ); + + expect(screen.getByText('1-25')).toBeInTheDocument(); + }); + + it('Accept custom page limit options', async () => { + await renderWithEffects( + + + + + , + ); + + await userEvent.click(screen.getByText('25')); + + const options = screen.getAllByRole('option'); + expect(options).toHaveLength(4); + expect(options[0]).toHaveTextContent('5'); + expect(options[1]).toHaveTextContent('10'); + expect(options[2]).toHaveTextContent('20'); + expect(options[3]).toHaveTextContent('25'); + }); + it('Set page limit in the context', async () => { await renderWithEffects( - + , ); @@ -84,35 +135,40 @@ describe('SearchResultLimiter', () => { ); }); - it('Accept custom label', async () => { - const label = 'Custom label'; + it('Set page cursor in the context', async () => { + const initialState = { + term: '', + types: [], + filters: {}, + pageCursor: 'MQ==', // page: 1 + }; + await renderWithEffects( - - + + , ); - expect(screen.getByText(label)).toBeInTheDocument(); - }); + await userEvent.click(screen.getByLabelText('Next page')); - it('Accept custom options', async () => { - await renderWithEffects( - - - - - , + expect(screen.getByText('51-75 of more than 75')).toBeInTheDocument(); + + expect(query).toHaveBeenLastCalledWith( + expect.objectContaining({ + pageCursor: 'Mg==', // page: 2 + }), ); - await userEvent.click(screen.getByText('25')); + await userEvent.click(screen.getByLabelText('Previous page')); - const options = screen.getAllByRole('option'); - expect(options).toHaveLength(4); - expect(options[0]).toHaveTextContent('5'); - expect(options[1]).toHaveTextContent('10'); - expect(options[2]).toHaveTextContent('20'); - expect(options[3]).toHaveTextContent('25'); + expect(screen.getByText('26-50 of more than 50')).toBeInTheDocument(); + + expect(query).toHaveBeenLastCalledWith( + expect.objectContaining({ + pageCursor: 'MQ==', // page: 1 + }), + ); }); }); diff --git a/plugins/search-react/src/components/SearchPagination/SearchPagination.tsx b/plugins/search-react/src/components/SearchPagination/SearchPagination.tsx new file mode 100644 index 0000000000..c0d1c127c8 --- /dev/null +++ b/plugins/search-react/src/components/SearchPagination/SearchPagination.tsx @@ -0,0 +1,178 @@ +/* + * 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 React, { + ReactNode, + ChangeEvent, + MouseEvent, + useCallback, + useMemo, +} from 'react'; +import { TablePagination } from '@material-ui/core'; +import { useSearch } from '../../context'; + +const encodePageCursor = (pageCursor: number): string => { + return Buffer.from(pageCursor.toString(), 'utf-8').toString('base64'); +}; + +const decodePageCursor = (pageCursor?: string): number => { + if (!pageCursor) return 0; + return Number(Buffer.from(pageCursor, 'base64').toString('utf-8')); +}; + +/** + * A page limit option, this value must not be greater than 100. + * @public + */ +export type SearchPaginationLimitOption< + Current extends number = 101, + Accumulator extends number[] = [], +> = Accumulator['length'] extends Current + ? Accumulator[number] + : SearchPaginationLimitOption< + Current, + [...Accumulator, Accumulator['length']] + >; + +/** + * A page limit text, this function is called with a "\{ from, to, page \}" object. + * @public + */ +export type SearchPaginationLimitText = (params: { + from: number; + to: number; + page: number; +}) => ReactNode; + +/** + * Props for {@link SearchPaginationBase}. + * @public + */ +export type SearchPaginationBaseProps = { + /** + * The component class name. + */ + className?: string; + /** + * The cursor for the current page. + */ + pageCursor?: string; + /** + * Callback fired when the current page cursor is changed. + */ + onPageCursorChange?: (pageCursor: string) => void; + /** + * The limit of results per page. + * Set -1 to display all the results. + */ + pageLimit?: number; + /** + * Customize the results per page label. + */ + pageLimitLabel?: ReactNode; + /** + * Customize the results per page text. + */ + pageLimitText?: SearchPaginationLimitText; + /** + * Options for setting how many results show per page. + * If less than two options are available, no select field will be displayed. + * Use -1 for the value with a custom label to show all the results. + */ + pageLimitOptions?: SearchPaginationLimitOption[]; + /** + * Callback fired when the number of results per page is changed. + */ + onPageLimitChange?: (value: number) => void; +}; + +/** + * A component with controls for search results pagination. + * @param props - See {@link SearchPaginationBaseProps}. + * @public + */ +export const SearchPaginationBase = (props: SearchPaginationBaseProps) => { + const { + pageCursor, + onPageCursorChange, + pageLimit: rowsPerPage = 25, + pageLimitLabel: labelRowsPerPage = 'Results per page:', + pageLimitText: labelDisplayedRows, + pageLimitOptions: rowsPerPageOptions, + onPageLimitChange, + ...rest + } = props; + + const page = useMemo(() => decodePageCursor(pageCursor), [pageCursor]); + + const handlePageChange = useCallback( + (_: MouseEvent | null, newValue: number) => { + onPageCursorChange?.(encodePageCursor(newValue)); + }, + [onPageCursorChange], + ); + + const handleRowsPerPageChange = useCallback( + (e: ChangeEvent) => { + const newValue = e.target.value; + onPageLimitChange?.(parseInt(newValue, 10)); + }, + [onPageLimitChange], + ); + + return ( + + ); +}; + +/** + * Props for {@link SearchPagination}. + * @public + */ +export type SearchPaginationProps = Omit< + SearchPaginationBaseProps, + 'pageLimit' | 'onPageLimitChange' | 'pageCursor' | 'onPageCursorChange' +>; + +/** + * A component for setting the search context page limit and cursor. + * @param props - See {@link SearchPaginationProps}. + * @public + */ +export const SearchPagination = (props: SearchPaginationProps) => { + const { pageLimit, setPageLimit, pageCursor, setPageCursor } = useSearch(); + + return ( + + ); +}; diff --git a/plugins/search-react/src/components/SearchResultLimiter/index.ts b/plugins/search-react/src/components/SearchPagination/index.ts similarity index 93% rename from plugins/search-react/src/components/SearchResultLimiter/index.ts rename to plugins/search-react/src/components/SearchPagination/index.ts index 411e48b5f5..74053f0e11 100644 --- a/plugins/search-react/src/components/SearchResultLimiter/index.ts +++ b/plugins/search-react/src/components/SearchPagination/index.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export * from './SearchResultLimiter'; +export * from './SearchPagination'; diff --git a/plugins/search-react/src/components/SearchResultLimiter/SearchResultLimiter.tsx b/plugins/search-react/src/components/SearchResultLimiter/SearchResultLimiter.tsx deleted file mode 100644 index 7f2d1ffc58..0000000000 --- a/plugins/search-react/src/components/SearchResultLimiter/SearchResultLimiter.tsx +++ /dev/null @@ -1,150 +0,0 @@ -/* - * 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 React, { ReactNode, ChangeEvent, useCallback } from 'react'; -import { - Box, - InputBase, - MenuItem, - Select, - Typography, - useTheme, -} from '@material-ui/core'; -import { useSearch } from '../../context'; - -/** - * A page limit option, this value must not be greater than 100. - * @public - */ -export type SearchResultLimiterOption< - Current extends number = 101, - Accumulator extends number[] = [], -> = Accumulator['length'] extends Current - ? Accumulator[number] - : SearchResultLimiterOption; - -/** - * Props for {@link SearchResultLimiterBase}. - * @public - */ -export type SearchResultLimiterBaseProps = { - id?: string; - className?: string; - /** - * A label for the combobox. - */ - label?: ReactNode; - /** - * The combobox labels, defaults to 10, 25, 50 and 100. - */ - options?: SearchResultLimiterOption[]; - /** - * Combobox selected option, defaults to 25; - */ - value?: number; - /** - * The callback handler called when the selected option changed. - */ - onChange?: (value: number) => void; -}; - -const DEFAULT_PAGE_LIMIT = 25; - -/** - * A component for selecting the number of results per page. - * @param props - See {@link SearchResultLimiterBaseProps}. - * @public - */ -export const SearchResultLimiterBase = ( - props: SearchResultLimiterBaseProps, -) => { - const { - id = 'search-result-limiter', - className, - label = 'Results per page:', - options = [10, 50, 100], - value = DEFAULT_PAGE_LIMIT, - onChange = () => {}, - } = props; - - const theme = useTheme(); - - const handleChange = useCallback( - (e: ChangeEvent<{ value: unknown }>) => { - const newValue = e.target.value; - if (typeof newValue === 'number') { - onChange(newValue); - } - }, - [onChange], - ); - - return ( - - - {label} - - - - ); -}; - -/** - * Props for {@link SearchResultLimiter}. - * @public - */ -export type SearchResultLimiterProps = Omit< - SearchResultLimiterBaseProps, - 'value' | 'onChange' ->; - -/** - * A component for setting the search context page limit. - * @param props - See {@link SearchResultLimiterProps}. - * @public - */ -export const SearchResultLimiter = (props: SearchResultLimiterProps) => { - const { pageLimit, setPageLimit } = useSearch(); - - return ( - - ); -}; diff --git a/plugins/search-react/src/components/index.ts b/plugins/search-react/src/components/index.ts index 524b0f9194..5f68905407 100644 --- a/plugins/search-react/src/components/index.ts +++ b/plugins/search-react/src/components/index.ts @@ -20,7 +20,7 @@ export * from './SearchAutocomplete'; export * from './SearchFilter'; export * from './SearchResult'; export * from './SearchResultPager'; -export * from './SearchResultLimiter'; +export * from './SearchPagination'; export * from './SearchResultList'; export * from './SearchResultGroup'; export * from './DefaultResultListItem'; From 90616bcaa6f9a1f5b34ae0e5f1a42dd62f3b32cd Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Sat, 8 Oct 2022 15:04:49 +0200 Subject: [PATCH 118/278] refactor(search-react): add to create-app search page template Signed-off-by: Camila Belo --- .changeset/silent-mice-brake.md | 5 +++++ .../packages/app/src/components/search/SearchPage.tsx | 2 ++ 2 files changed, 7 insertions(+) create mode 100644 .changeset/silent-mice-brake.md diff --git a/.changeset/silent-mice-brake.md b/.changeset/silent-mice-brake.md new file mode 100644 index 0000000000..c8ebb28f40 --- /dev/null +++ b/.changeset/silent-mice-brake.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': minor +--- + +Add the new search pagination component to the search page template. diff --git a/packages/create-app/templates/default-app/packages/app/src/components/search/SearchPage.tsx b/packages/create-app/templates/default-app/packages/app/src/components/search/SearchPage.tsx index 928b8201ea..9f11d0c80c 100644 --- a/packages/create-app/templates/default-app/packages/app/src/components/search/SearchPage.tsx +++ b/packages/create-app/templates/default-app/packages/app/src/components/search/SearchPage.tsx @@ -14,6 +14,7 @@ import { SearchBar, SearchFilter, SearchResult, + SearchPagination, useSearch, } from '@backstage/plugin-search-react'; import { @@ -109,6 +110,7 @@ const SearchPage = () => { + {({ results }) => ( From 46ee5188e91a8fe0bfd393fc493ae4123f34e72c Mon Sep 17 00:00:00 2001 From: andrmaz <60042277+andrmaz@users.noreply.github.com> Date: Sun, 9 Oct 2022 11:13:23 +0200 Subject: [PATCH 119/278] feat(curve): deduplicate curve factory type Signed-off-by: andrmaz <60042277+andrmaz@users.noreply.github.com> --- packages/core-components/api-report.md | 6 +----- .../src/components/DependencyGraph/DependencyGraph.tsx | 3 +-- .../src/components/DependencyGraph/Edge.test.tsx | 4 ++-- .../src/components/DependencyGraph/Edge.tsx | 3 +-- .../src/components/DependencyGraph/types.ts | 10 ---------- 5 files changed, 5 insertions(+), 21 deletions(-) diff --git a/packages/core-components/api-report.md b/packages/core-components/api-report.md index 6d6079bf8e..78574e71a3 100644 --- a/packages/core-components/api-report.md +++ b/packages/core-components/api-report.md @@ -203,9 +203,6 @@ export type CreateButtonProps = { title: string; } & Partial>; -// @public -type Curve = 'curveStepBefore' | 'curveMonotoneX'; - // @public (undocumented) export type CustomProviderClassKey = 'form' | 'button'; @@ -242,7 +239,7 @@ export interface DependencyGraphProps acyclicer?: 'greedy'; // Warning: (ae-unresolved-link) The @link reference could not be resolved: This type of declaration is not supported yet by the resolver align?: Alignment; - curve?: Curve; + curve?: 'curveStepBefore' | 'curveMonotoneX'; defs?: SVGDefsElement | SVGDefsElement[]; // Warning: (ae-unresolved-link) The @link reference could not be resolved: This type of declaration is not supported yet by the resolver direction?: Direction; @@ -273,7 +270,6 @@ declare namespace DependencyGraphTypes { DependencyNode, RenderNodeProps, RenderNodeFunction, - Curve, Direction, Alignment, Ranker, diff --git a/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx b/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx index 3457a83d7d..5159f67d9e 100644 --- a/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx +++ b/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx @@ -30,7 +30,6 @@ import { RenderNodeFunction, RenderLabelFunction, LabelPosition, - Curve, } from './types'; import { Node } from './Node'; import { Edge, GraphEdge } from './Edge'; @@ -170,7 +169,7 @@ export interface DependencyGraphProps * * Default: 'curveMonotoneX' */ - curve?: Curve; + curve?: 'curveStepBefore' | 'curveMonotoneX'; } const WORKSPACE_ID = 'workspace'; diff --git a/packages/core-components/src/components/DependencyGraph/Edge.test.tsx b/packages/core-components/src/components/DependencyGraph/Edge.test.tsx index ccb7bd7a9f..a44f25fbfc 100644 --- a/packages/core-components/src/components/DependencyGraph/Edge.test.tsx +++ b/packages/core-components/src/components/DependencyGraph/Edge.test.tsx @@ -17,11 +17,11 @@ import React from 'react'; import { render } from '@testing-library/react'; import { Edge } from './Edge'; -import { Curve, RenderLabelProps } from './types'; +import { RenderLabelProps } from './types'; const fromNode = 'node'; const toNode = 'other-node'; -const curve: Curve = 'curveMonotoneX'; +const curve: 'curveStepBefore' | 'curveMonotoneX' = 'curveMonotoneX'; const edge = { points: [ diff --git a/packages/core-components/src/components/DependencyGraph/Edge.tsx b/packages/core-components/src/components/DependencyGraph/Edge.tsx index ea526827bf..aae737b9ea 100644 --- a/packages/core-components/src/components/DependencyGraph/Edge.tsx +++ b/packages/core-components/src/components/DependencyGraph/Edge.tsx @@ -24,7 +24,6 @@ import { RenderLabelFunction, DependencyEdge, LabelPosition, - Curve, } from './types'; import { EDGE_TEST_ID, LABEL_TEST_ID } from './constants'; import { DefaultLabel } from './DefaultLabel'; @@ -71,7 +70,7 @@ export type EdgeComponentProps = { id: dagre.Edge, edge: DependencyEdge, ) => dagre.graphlib.Graph<{}>; - curve: Curve; + curve: 'curveStepBefore' | 'curveMonotoneX'; }; const renderDefault = (props: RenderLabelProps) => ( diff --git a/packages/core-components/src/components/DependencyGraph/types.ts b/packages/core-components/src/components/DependencyGraph/types.ts index 55226eb91d..4ae6057bd7 100644 --- a/packages/core-components/src/components/DependencyGraph/types.ts +++ b/packages/core-components/src/components/DependencyGraph/types.ts @@ -75,16 +75,6 @@ export type RenderNodeFunction = ( props: RenderNodeProps, ) => React.ReactNode; -/** - * Graph curve factory - * - * @public - * - * @see {@link @types/d3-shape/index.d.ts#curveMonotoneX} - * @see {@link @types/d3-shape/index.d.ts#curveStepBefore} - */ -export type Curve = 'curveStepBefore' | 'curveMonotoneX'; - /** * Graph direction * From 6a8a639265b4cc06dcce1f344f5eb5e14adcb866 Mon Sep 17 00:00:00 2001 From: Ben Lambert Date: Sun, 9 Oct 2022 15:13:58 +0200 Subject: [PATCH 120/278] chore: remove unneeded changeset Signed-off-by: Ben Lambert --- .changeset/pink-pumas-double.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .changeset/pink-pumas-double.md diff --git a/.changeset/pink-pumas-double.md b/.changeset/pink-pumas-double.md deleted file mode 100644 index ca4d40967f..0000000000 --- a/.changeset/pink-pumas-double.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-components': patch ---- - -Attach groups hierarchy arrows to the right side of their parent boxes From b424a085dd366a6a46ba100410fcee8758e738f4 Mon Sep 17 00:00:00 2001 From: Ben Lambert Date: Sun, 9 Oct 2022 15:14:40 +0200 Subject: [PATCH 121/278] chore: updating changeset text Signed-off-by: Ben Lambert --- .changeset/clever-clocks-drive.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/clever-clocks-drive.md b/.changeset/clever-clocks-drive.md index d91a8ee53f..0834133e36 100644 --- a/.changeset/clever-clocks-drive.md +++ b/.changeset/clever-clocks-drive.md @@ -3,4 +3,4 @@ '@backstage/plugin-catalog-graph': patch --- -Added select to toggle the curve factory of the dependency graph +Added `curve` prop to the `DependencyGraph` component to select the type of layout From cc9749a88e228b44221edca31d198283d3921a54 Mon Sep 17 00:00:00 2001 From: Mengnan Gong Date: Sun, 9 Oct 2022 21:47:13 +0800 Subject: [PATCH 122/278] add unit tests fetching pod metrics and clean up code Signed-off-by: Mengnan Gong --- .changeset/wet-cameras-call.md | 6 +- .../service/KubernetesFanOutHandler.test.ts | 76 ++ .../src/service/KubernetesFanOutHandler.ts | 2 +- .../src/service/KubernetesFetcher.test.ts | 910 ++++++++++-------- .../src/service/KubernetesFetcher.ts | 8 +- plugins/kubernetes-common/api-report.md | 1 + plugins/kubernetes-common/src/types.ts | 1 + 7 files changed, 597 insertions(+), 407 deletions(-) diff --git a/.changeset/wet-cameras-call.md b/.changeset/wet-cameras-call.md index 5524e23d15..3d58719269 100644 --- a/.changeset/wet-cameras-call.md +++ b/.changeset/wet-cameras-call.md @@ -1,8 +1,10 @@ --- '@backstage/plugin-kubernetes-backend': minor -'@backstage/plugin-kubernetes-common': minor +'@backstage/plugin-kubernetes-common': patch --- The Kubernetes errors when fetching pod metrics are now captured and returned to the frontend. -Include the `PodStatusFetchResponse` into the `FetchResponse` union type. Now the method `fetchPodMetricsByNamespaces` accepts a set of namespaces and returns a `FetchResponseWrapper`, just like other public fetch methods in the fetcher. +- **BREAKING** The method `fetchPodMetricsByNamespace` in the interface `KubernetesFetcher` is changed to `fetchPodMetricsByNamespaces`. It now accepts a set of namespace strings and returns `Promise`. +- Add the `PodStatusFetchResponse` to the `FetchResponse` union type. +- Add `NOT_FOUND` to the `KubernetesErrorTypes` union type, the HTTP error with status code 404 will be mapped to this error. diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts index 8627795a7f..1af5371e53 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts @@ -675,6 +675,82 @@ describe('getKubernetesObjectsByEntity', () => { ], }); }); + it('retrieve objects for two clusters, one fails to fetch pod metrics', async () => { + getClustersByEntity.mockImplementation(() => + Promise.resolve({ + clusters: [ + { + name: 'test-cluster', + authProvider: 'serviceAccount', + dashboardUrl: 'https://k8s.foo.coom', + }, + { + name: 'other-cluster', + authProvider: 'google', + }, + ], + }), + ); + + mockFetch(fetchObjectsForService); + + // To simulate the partial failure, return a valid response for the first call, + // and an error for the second call. + fetchPodMetricsByNamespaces + .mockImplementationOnce( + (clusterDetails: ClusterDetails, namespaces: Set) => + Promise.resolve(generatePodStatus(clusterDetails.name, namespaces)), + ) + .mockResolvedValueOnce({ + errors: [ + { + errorType: 'NOT_FOUND', + resourcePath: '/some/path', + statusCode: 404, + }, + ], + responses: [], + }); + + const sut = getKubernetesFanOutHandler([]); + + const result = await sut.getKubernetesObjectsByEntity({ + entity, + auth: { + google: 'google_token_123', + }, + }); + + expect(getClustersByEntity.mock.calls.length).toBe(1); + expect(fetchObjectsForService.mock.calls.length).toBe(2); + expect(result).toStrictEqual({ + items: [ + { + cluster: { + dashboardUrl: 'https://k8s.foo.coom', + name: 'test-cluster', + }, + errors: [], + podMetrics: [POD_METRICS_FIXTURE], + resources: resourcesByCluster('test-cluster'), + }, + { + cluster: { + name: 'other-cluster', + }, + errors: [ + { + errorType: 'NOT_FOUND', + resourcePath: '/some/path', + statusCode: 404, + }, + ], + podMetrics: [], + resources: resourcesByCluster('other-cluster'), + }, + ], + }); + }); }); describe('getCustomResourcesByEntity', () => { diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts index 7de3e70249..330931f580 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts @@ -358,7 +358,7 @@ export class KubernetesFanOutHandler { namespaces, ); - result.errors.concat(podMetrics.errors); + result.errors.push(...podMetrics.errors); return [result, podMetrics.responses as PodStatusFetchResponse[]]; } diff --git a/plugins/kubernetes-backend/src/service/KubernetesFetcher.test.ts b/plugins/kubernetes-backend/src/service/KubernetesFetcher.test.ts index 25a5c9312b..c2560e58b0 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFetcher.test.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFetcher.test.ts @@ -17,6 +17,12 @@ import { getVoidLogger } from '@backstage/backend-common'; import { KubernetesClientBasedFetcher } from './KubernetesFetcher'; import { ObjectToFetch } from '../types/types'; +import { topPods } from '@kubernetes/client-node'; + +jest.mock('@kubernetes/client-node', () => ({ + ...jest.requireActual('@kubernetes/client-node'), + topPods: jest.fn(), +})); const OBJECTS_TO_FETCH = new Set([ { @@ -33,63 +39,52 @@ const OBJECTS_TO_FETCH = new Set([ }, ]); +const POD_METRICS_FIXTURE = { + containers: [], + cpu: { + currentUsage: 100, + limitTotal: 102, + requestTotal: 101, + }, + memory: { + currentUsage: '1000', + limitTotal: '1002', + requestTotal: '1001', + }, + pod: {}, +}; + describe('KubernetesFetcher', () => { - let clientMock: any; - let kubernetesClientProvider: any; - let sut: KubernetesClientBasedFetcher; + describe('fetchObjectsForService', () => { + let clientMock: any; + let kubernetesClientProvider: any; + let sut: KubernetesClientBasedFetcher; - beforeEach(() => { - jest.resetAllMocks(); - clientMock = { - listClusterCustomObject: jest.fn(), - listNamespacedCustomObject: jest.fn(), - addInterceptor: jest.fn(), - }; + beforeEach(() => { + jest.resetAllMocks(); + clientMock = { + listClusterCustomObject: jest.fn(), + listNamespacedCustomObject: jest.fn(), + addInterceptor: jest.fn(), + }; - kubernetesClientProvider = { - getCustomObjectsClient: jest.fn(() => clientMock), - }; + kubernetesClientProvider = { + getCustomObjectsClient: jest.fn(() => clientMock), + }; - sut = new KubernetesClientBasedFetcher({ - kubernetesClientProvider, - logger: getVoidLogger(), - }); - }); - - const testErrorResponse = async (errorResponse: any, expectedResult: any) => { - clientMock.listClusterCustomObject.mockResolvedValueOnce({ - body: { - items: [ - { - metadata: { - name: 'pod-name', - }, - }, - ], - }, + sut = new KubernetesClientBasedFetcher({ + kubernetesClientProvider, + logger: getVoidLogger(), + }); }); - clientMock.listClusterCustomObject.mockRejectedValue(errorResponse); - - const result = await sut.fetchObjectsForService({ - serviceId: 'some-service', - clusterDetails: { - name: 'cluster1', - url: 'http://localhost:9999', - serviceAccountToken: 'token', - authProvider: 'serviceAccount', - }, - objectTypesToFetch: OBJECTS_TO_FETCH, - labelSelector: '', - customResources: [], - }); - - expect(result).toStrictEqual({ - errors: [expectedResult], - responses: [ - { - type: 'pods', - resources: [ + const testErrorResponse = async ( + errorResponse: any, + expectedResult: any, + ) => { + clientMock.listClusterCustomObject.mockResolvedValueOnce({ + body: { + items: [ { metadata: { name: 'pod-name', @@ -97,82 +92,72 @@ describe('KubernetesFetcher', () => { }, ], }, - ], - }); + }); - expect(clientMock.listClusterCustomObject.mock.calls.length).toBe(2); + clientMock.listClusterCustomObject.mockRejectedValue(errorResponse); - expect(clientMock.listClusterCustomObject.mock.calls[0]).toEqual([ - '', - 'v1', - 'pods', - '', - false, - '', - '', - 'backstage.io/kubernetes-id=some-service', - ]); + const result = await sut.fetchObjectsForService({ + serviceId: 'some-service', + clusterDetails: { + name: 'cluster1', + url: 'http://localhost:9999', + serviceAccountToken: 'token', + authProvider: 'serviceAccount', + }, + objectTypesToFetch: OBJECTS_TO_FETCH, + labelSelector: '', + customResources: [], + }); - expect(clientMock.listClusterCustomObject.mock.calls[1]).toEqual([ - '', - 'v1', - 'services', - '', - false, - '', - '', - 'backstage.io/kubernetes-id=some-service', - ]); - - expect( - kubernetesClientProvider.getCustomObjectsClient.mock.calls.length, - ).toBe(2); - }; - - it('should return pods, services', async () => { - clientMock.listClusterCustomObject.mockResolvedValueOnce({ - body: { - items: [ + expect(result).toStrictEqual({ + errors: [expectedResult], + responses: [ { - metadata: { - name: 'pod-name', - }, + type: 'pods', + resources: [ + { + metadata: { + name: 'pod-name', + }, + }, + ], }, ], - }, - }); + }); - clientMock.listClusterCustomObject.mockResolvedValueOnce({ - body: { - items: [ - { - metadata: { - name: 'service-name', - }, - }, - ], - }, - }); + expect(clientMock.listClusterCustomObject.mock.calls.length).toBe(2); - const result = await sut.fetchObjectsForService({ - serviceId: 'some-service', - clusterDetails: { - name: 'cluster1', - url: 'http://localhost:9999', - serviceAccountToken: 'token', - authProvider: 'serviceAccount', - }, - objectTypesToFetch: OBJECTS_TO_FETCH, - labelSelector: '', - customResources: [], - }); + expect(clientMock.listClusterCustomObject.mock.calls[0]).toEqual([ + '', + 'v1', + 'pods', + '', + false, + '', + '', + 'backstage.io/kubernetes-id=some-service', + ]); - expect(result).toStrictEqual({ - errors: [], - responses: [ - { - type: 'pods', - resources: [ + expect(clientMock.listClusterCustomObject.mock.calls[1]).toEqual([ + '', + 'v1', + 'services', + '', + false, + '', + '', + 'backstage.io/kubernetes-id=some-service', + ]); + + expect( + kubernetesClientProvider.getCustomObjectsClient.mock.calls.length, + ).toBe(2); + }; + + it('should return pods, services', async () => { + clientMock.listClusterCustomObject.mockResolvedValueOnce({ + body: { + items: [ { metadata: { name: 'pod-name', @@ -180,9 +165,11 @@ describe('KubernetesFetcher', () => { }, ], }, - { - type: 'services', - resources: [ + }); + + clientMock.listClusterCustomObject.mockResolvedValueOnce({ + body: { + items: [ { metadata: { name: 'service-name', @@ -190,100 +177,79 @@ describe('KubernetesFetcher', () => { }, ], }, - ], - }); + }); - expect(clientMock.listClusterCustomObject.mock.calls.length).toBe(2); - - expect(clientMock.listClusterCustomObject.mock.calls[0]).toEqual([ - '', - 'v1', - 'pods', - '', - false, - '', - '', - 'backstage.io/kubernetes-id=some-service', - ]); - - expect(clientMock.listClusterCustomObject.mock.calls[1]).toEqual([ - '', - 'v1', - 'services', - '', - false, - '', - '', - 'backstage.io/kubernetes-id=some-service', - ]); - - expect( - kubernetesClientProvider.getCustomObjectsClient.mock.calls.length, - ).toBe(2); - }); - it('should return pods, services and customobjects', async () => { - clientMock.listClusterCustomObject.mockResolvedValueOnce({ - body: { - items: [ - { - metadata: { - name: 'pod-name', - }, - }, - ], - }, - }); - - clientMock.listClusterCustomObject.mockResolvedValueOnce({ - body: { - items: [ - { - metadata: { - name: 'service-name', - }, - }, - ], - }, - }); - - clientMock.listClusterCustomObject.mockResolvedValueOnce({ - body: { - items: [ - { - metadata: { - name: 'something-else', - }, - }, - ], - }, - }); - - const result = await sut.fetchObjectsForService({ - serviceId: 'some-service', - clusterDetails: { - name: 'cluster1', - url: 'http://localhost:9999', - serviceAccountToken: 'token', - authProvider: 'serviceAccount', - }, - objectTypesToFetch: OBJECTS_TO_FETCH, - labelSelector: '', - customResources: [ - { - objectType: 'customresources', - group: 'some-group', - apiVersion: 'v2', - plural: 'things', + const result = await sut.fetchObjectsForService({ + serviceId: 'some-service', + clusterDetails: { + name: 'cluster1', + url: 'http://localhost:9999', + serviceAccountToken: 'token', + authProvider: 'serviceAccount', }, - ], - }); + objectTypesToFetch: OBJECTS_TO_FETCH, + labelSelector: '', + customResources: [], + }); - expect(result).toStrictEqual({ - errors: [], - responses: [ - { - type: 'pods', - resources: [ + expect(result).toStrictEqual({ + errors: [], + responses: [ + { + type: 'pods', + resources: [ + { + metadata: { + name: 'pod-name', + }, + }, + ], + }, + { + type: 'services', + resources: [ + { + metadata: { + name: 'service-name', + }, + }, + ], + }, + ], + }); + + expect(clientMock.listClusterCustomObject.mock.calls.length).toBe(2); + + expect(clientMock.listClusterCustomObject.mock.calls[0]).toEqual([ + '', + 'v1', + 'pods', + '', + false, + '', + '', + 'backstage.io/kubernetes-id=some-service', + ]); + + expect(clientMock.listClusterCustomObject.mock.calls[1]).toEqual([ + '', + 'v1', + 'services', + '', + false, + '', + '', + 'backstage.io/kubernetes-id=some-service', + ]); + + expect( + kubernetesClientProvider.getCustomObjectsClient.mock.calls.length, + ).toBe(2); + }); + it('should return pods, services and customobjects', async () => { + clientMock.listClusterCustomObject.mockResolvedValueOnce({ + body: { + items: [ { metadata: { name: 'pod-name', @@ -291,9 +257,11 @@ describe('KubernetesFetcher', () => { }, ], }, - { - type: 'services', - resources: [ + }); + + clientMock.listClusterCustomObject.mockResolvedValueOnce({ + body: { + items: [ { metadata: { name: 'service-name', @@ -301,9 +269,11 @@ describe('KubernetesFetcher', () => { }, ], }, - { - type: 'customresources', - resources: [ + }); + + clientMock.listClusterCustomObject.mockResolvedValueOnce({ + body: { + items: [ { metadata: { name: 'something-else', @@ -311,216 +281,358 @@ describe('KubernetesFetcher', () => { }, ], }, - ], + }); + + const result = await sut.fetchObjectsForService({ + serviceId: 'some-service', + clusterDetails: { + name: 'cluster1', + url: 'http://localhost:9999', + serviceAccountToken: 'token', + authProvider: 'serviceAccount', + }, + objectTypesToFetch: OBJECTS_TO_FETCH, + labelSelector: '', + customResources: [ + { + objectType: 'customresources', + group: 'some-group', + apiVersion: 'v2', + plural: 'things', + }, + ], + }); + + expect(result).toStrictEqual({ + errors: [], + responses: [ + { + type: 'pods', + resources: [ + { + metadata: { + name: 'pod-name', + }, + }, + ], + }, + { + type: 'services', + resources: [ + { + metadata: { + name: 'service-name', + }, + }, + ], + }, + { + type: 'customresources', + resources: [ + { + metadata: { + name: 'something-else', + }, + }, + ], + }, + ], + }); + + expect(clientMock.listClusterCustomObject.mock.calls.length).toBe(3); + + expect(clientMock.listClusterCustomObject.mock.calls[0]).toEqual([ + '', + 'v1', + 'pods', + '', + false, + '', + '', + 'backstage.io/kubernetes-id=some-service', + ]); + + expect(clientMock.listClusterCustomObject.mock.calls[1]).toEqual([ + '', + 'v1', + 'services', + '', + false, + '', + '', + 'backstage.io/kubernetes-id=some-service', + ]); + + expect(clientMock.listClusterCustomObject.mock.calls[2]).toEqual([ + 'some-group', + 'v2', + 'things', + '', + false, + '', + '', + 'backstage.io/kubernetes-id=some-service', + ]); + + expect( + kubernetesClientProvider.getCustomObjectsClient.mock.calls.length, + ).toBe(3); }); - - expect(clientMock.listClusterCustomObject.mock.calls.length).toBe(3); - - expect(clientMock.listClusterCustomObject.mock.calls[0]).toEqual([ - '', - 'v1', - 'pods', - '', - false, - '', - '', - 'backstage.io/kubernetes-id=some-service', - ]); - - expect(clientMock.listClusterCustomObject.mock.calls[1]).toEqual([ - '', - 'v1', - 'services', - '', - false, - '', - '', - 'backstage.io/kubernetes-id=some-service', - ]); - - expect(clientMock.listClusterCustomObject.mock.calls[2]).toEqual([ - 'some-group', - 'v2', - 'things', - '', - false, - '', - '', - 'backstage.io/kubernetes-id=some-service', - ]); - - expect( - kubernetesClientProvider.getCustomObjectsClient.mock.calls.length, - ).toBe(3); - }); - // they're in testErrorResponse - // eslint-disable-next-line jest/expect-expect - it('should return pods, bad request error', async () => { - await testErrorResponse( - { - response: { + // they're in testErrorResponse + // eslint-disable-next-line jest/expect-expect + it('should return pods, bad request error', async () => { + await testErrorResponse( + { + response: { + statusCode: 400, + request: { + uri: { + pathname: '/some/path', + }, + }, + }, + }, + { + errorType: 'BAD_REQUEST', + resourcePath: '/some/path', statusCode: 400, - request: { - uri: { - pathname: '/some/path', + }, + ); + }); + // they're in testErrorResponse + // eslint-disable-next-line jest/expect-expect + it('should return pods, unauthorized error', async () => { + await testErrorResponse( + { + response: { + statusCode: 401, + request: { + uri: { + pathname: '/some/path', + }, }, }, }, - }, - { - errorType: 'BAD_REQUEST', - resourcePath: '/some/path', - statusCode: 400, - }, - ); - }); - // they're in testErrorResponse - // eslint-disable-next-line jest/expect-expect - it('should return pods, unauthorized error', async () => { - await testErrorResponse( - { - response: { + { + errorType: 'UNAUTHORIZED_ERROR', + resourcePath: '/some/path', statusCode: 401, - request: { - uri: { - pathname: '/some/path', + }, + ); + }); + // they're in testErrorResponse + // eslint-disable-next-line jest/expect-expect + it('should return pods, system error', async () => { + await testErrorResponse( + { + response: { + statusCode: 500, + request: { + uri: { + pathname: '/some/path', + }, }, }, }, - }, - { - errorType: 'UNAUTHORIZED_ERROR', - resourcePath: '/some/path', - statusCode: 401, - }, - ); - }); - // they're in testErrorResponse - // eslint-disable-next-line jest/expect-expect - it('should return pods, system error', async () => { - await testErrorResponse( - { - response: { + { + errorType: 'SYSTEM_ERROR', + resourcePath: '/some/path', statusCode: 500, - request: { - uri: { - pathname: '/some/path', + }, + ); + }); + // they're in testErrorResponse + // eslint-disable-next-line jest/expect-expect + it('should return pods, unknown error', async () => { + await testErrorResponse( + { + response: { + statusCode: 900, + request: { + uri: { + pathname: '/some/path', + }, }, }, }, - }, - { - errorType: 'SYSTEM_ERROR', - resourcePath: '/some/path', - statusCode: 500, - }, - ); - }); - // they're in testErrorResponse - // eslint-disable-next-line jest/expect-expect - it('should return pods, unknown error', async () => { - await testErrorResponse( - { - response: { + { + errorType: 'UNKNOWN_ERROR', + resourcePath: '/some/path', statusCode: 900, - request: { - uri: { - pathname: '/some/path', - }, - }, }, - }, - { - errorType: 'UNKNOWN_ERROR', - resourcePath: '/some/path', - statusCode: 900, - }, - ); + ); + }); + it('should always add a labelSelector query', async () => { + clientMock.listClusterCustomObject.mockResolvedValueOnce({ + body: { + items: [ + { + metadata: { + name: 'pod-name', + }, + }, + ], + }, + }); + + clientMock.listClusterCustomObject.mockResolvedValueOnce({ + body: { + items: [ + { + metadata: { + name: 'service-name', + }, + }, + ], + }, + }); + + await sut.fetchObjectsForService({ + serviceId: 'some-service', + clusterDetails: { + name: 'cluster1', + url: 'http://localhost:9999', + serviceAccountToken: 'token', + authProvider: 'serviceAccount', + }, + objectTypesToFetch: OBJECTS_TO_FETCH, + labelSelector: '', + customResources: [], + }); + + const mockCall = clientMock.listClusterCustomObject.mock.calls[0]; + const actualSelector = mockCall[mockCall.length - 1]; + const expectedSelector = 'backstage.io/kubernetes-id=some-service'; + expect(actualSelector).toBe(expectedSelector); + }); + it('should use namespace if provided', async () => { + clientMock.listNamespacedCustomObject.mockResolvedValueOnce({ + body: { + items: [ + { + metadata: { + name: 'pod-name', + }, + }, + ], + }, + }); + + clientMock.listNamespacedCustomObject.mockResolvedValueOnce({ + body: { + items: [ + { + metadata: { + name: 'service-name', + }, + }, + ], + }, + }); + + await sut.fetchObjectsForService({ + serviceId: 'some-service', + clusterDetails: { + name: 'cluster1', + url: 'http://localhost:9999', + serviceAccountToken: 'token', + authProvider: 'serviceAccount', + }, + objectTypesToFetch: OBJECTS_TO_FETCH, + labelSelector: '', + namespace: 'some-namespace', + customResources: [], + }); + + const mockCall = clientMock.listNamespacedCustomObject.mock.calls[0]; + const namespace = mockCall[2]; + expect(namespace).toBe('some-namespace'); + }); }); - it('should always add a labelSelector query', async () => { - clientMock.listClusterCustomObject.mockResolvedValueOnce({ - body: { - items: [ + + describe('fetchPodMetricsByNamespaces', () => { + let kubernetesClientProvider: any; + let sut: KubernetesClientBasedFetcher; + + beforeEach(() => { + jest.resetAllMocks(); + + kubernetesClientProvider = { + getMetricsClient: jest.fn(), + getCoreClientByClusterDetails: jest.fn(), + }; + + sut = new KubernetesClientBasedFetcher({ + kubernetesClientProvider, + logger: getVoidLogger(), + }); + }); + + it('should return pod metrics', async () => { + (topPods as jest.Mock).mockResolvedValue(POD_METRICS_FIXTURE); + + const result = await sut.fetchPodMetricsByNamespaces( + { + name: 'cluster1', + url: 'http://localhost:9999', + serviceAccountToken: 'token', + authProvider: 'serviceAccount', + }, + new Set(['ns-a', 'ns-b']), + ); + expect(result).toStrictEqual({ + errors: [], + responses: [ { - metadata: { - name: 'pod-name', - }, + type: 'podstatus', + resources: POD_METRICS_FIXTURE, + }, + { + type: 'podstatus', + resources: POD_METRICS_FIXTURE, }, ], - }, + }); }); - - clientMock.listClusterCustomObject.mockResolvedValueOnce({ - body: { - items: [ - { - metadata: { - name: 'service-name', + it('should return pod metrics and error', async () => { + const topPodsMock = topPods as jest.Mock; + topPodsMock + .mockResolvedValueOnce(POD_METRICS_FIXTURE) + .mockRejectedValueOnce({ + response: { + statusCode: 404, + request: { + uri: { + pathname: '/some/path', + }, }, }, - ], - }, - }); + }); - await sut.fetchObjectsForService({ - serviceId: 'some-service', - clusterDetails: { - name: 'cluster1', - url: 'http://localhost:9999', - serviceAccountToken: 'token', - authProvider: 'serviceAccount', - }, - objectTypesToFetch: OBJECTS_TO_FETCH, - labelSelector: '', - customResources: [], - }); - - const mockCall = clientMock.listClusterCustomObject.mock.calls[0]; - const actualSelector = mockCall[mockCall.length - 1]; - const expectedSelector = 'backstage.io/kubernetes-id=some-service'; - expect(actualSelector).toBe(expectedSelector); - }); - it('should use namespace if provided', async () => { - clientMock.listNamespacedCustomObject.mockResolvedValueOnce({ - body: { - items: [ + const result = await sut.fetchPodMetricsByNamespaces( + { + name: 'cluster1', + url: 'http://localhost:9999', + serviceAccountToken: 'token', + authProvider: 'serviceAccount', + }, + new Set(['ns-a', 'ns-b']), + ); + expect(result).toStrictEqual({ + errors: [ { - metadata: { - name: 'pod-name', - }, + errorType: 'NOT_FOUND', + resourcePath: '/some/path', + statusCode: 404, }, ], - }, - }); - - clientMock.listNamespacedCustomObject.mockResolvedValueOnce({ - body: { - items: [ + responses: [ { - metadata: { - name: 'service-name', - }, + type: 'podstatus', + resources: POD_METRICS_FIXTURE, }, ], - }, + }); }); - - await sut.fetchObjectsForService({ - serviceId: 'some-service', - clusterDetails: { - name: 'cluster1', - url: 'http://localhost:9999', - serviceAccountToken: 'token', - authProvider: 'serviceAccount', - }, - objectTypesToFetch: OBJECTS_TO_FETCH, - labelSelector: '', - namespace: 'some-namespace', - customResources: [], - }); - - const mockCall = clientMock.listNamespacedCustomObject.mock.calls[0]; - const namespace = mockCall[2]; - expect(namespace).toBe('some-namespace'); }); }); diff --git a/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts b/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts index 6c61f10700..fd6400529b 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { CoreV1Api, topPods } from '@kubernetes/client-node'; +import { topPods } from '@kubernetes/client-node'; import lodash, { Dictionary } from 'lodash'; import { Logger } from 'winston'; import { @@ -33,10 +33,6 @@ import { } from '@backstage/plugin-kubernetes-common'; import { KubernetesClientProvider } from './KubernetesClientProvider'; -export interface Clients { - core: CoreV1Api; -} - export interface KubernetesClientBasedFetcherOptions { kubernetesClientProvider: KubernetesClientProvider; logger: Logger; @@ -66,6 +62,8 @@ const statusCodeToErrorType = (statusCode: number): KubernetesErrorTypes => { return 'BAD_REQUEST'; case 401: return 'UNAUTHORIZED_ERROR'; + case 404: + return 'NOT_FOUND'; case 500: return 'SYSTEM_ERROR'; default: diff --git a/plugins/kubernetes-common/api-report.md b/plugins/kubernetes-common/api-report.md index 3ed89d2a56..8509fa97cc 100644 --- a/plugins/kubernetes-common/api-report.md +++ b/plugins/kubernetes-common/api-report.md @@ -179,6 +179,7 @@ export interface JobsFetchResponse { export type KubernetesErrorTypes = | 'BAD_REQUEST' | 'UNAUTHORIZED_ERROR' + | 'NOT_FOUND' | 'SYSTEM_ERROR' | 'UNKNOWN_ERROR'; diff --git a/plugins/kubernetes-common/src/types.ts b/plugins/kubernetes-common/src/types.ts index 58fc81f3ff..3feddd7f4c 100644 --- a/plugins/kubernetes-common/src/types.ts +++ b/plugins/kubernetes-common/src/types.ts @@ -233,6 +233,7 @@ export interface KubernetesFetchError { export type KubernetesErrorTypes = | 'BAD_REQUEST' | 'UNAUTHORIZED_ERROR' + | 'NOT_FOUND' | 'SYSTEM_ERROR' | 'UNKNOWN_ERROR'; From 86cf4307c8a3d9c10f559e539826e47b20e5e3cc Mon Sep 17 00:00:00 2001 From: Wesley Pattison Date: Sun, 9 Oct 2022 19:08:39 +0200 Subject: [PATCH 123/278] rename azure-functions to azure-sites add drop down for actions show kind on table Signed-off-by: Wesley Pattison --- .changeset/tasty-colts-hug.md | 8 +- ...{azure-functions.yaml => azure-sites.yaml} | 6 +- packages/app/package.json | 2 +- packages/backend/package.json | 2 +- .../AzureSitesOverviewTable.tsx | 125 -------- .../.eslintrc.js | 0 .../README.md | 6 +- .../api-report.md | 11 +- .../package.json | 7 +- .../schema.d.ts | 0 .../src/api/AzureSitesApi.ts | 40 ++- .../src/api/index.ts | 0 .../src/config.ts | 0 .../src/index.ts | 0 .../src/run.ts | 0 .../src/service/router.ts | 28 ++ .../src/service/standaloneServer.ts | 0 .../src/setupTests.ts | 0 .../.eslintrc.js | 0 .../api-report.md | 10 +- .../package.json | 4 +- .../src/index.ts | 0 .../src/types.ts | 8 + .../.eslintrc.js | 0 .../README.md | 4 +- .../api-report.md | 13 +- .../dev/index.tsx | 0 .../docs/functions-table.png | Bin .../package.json | 6 +- .../src/api/AzureSitesApi.ts | 7 +- .../src/api/AzureSitesApiBackendClient.ts | 44 ++- .../src/api/index.ts | 0 .../AzureSitesOverview.tsx | 0 .../AzureSitesOverviewTable.test.tsx | 2 +- .../AzureSitesOverviewTable.tsx | 271 ++++++++++++++++++ .../src/hooks/useServiceEntityAnnotations.ts | 0 .../src/hooks/useSites.ts | 7 +- .../src/index.ts | 0 .../src/mocks/mocks.ts | 3 +- .../src/plugin.test.ts | 0 .../src/plugin.ts | 0 .../src/routes.ts | 2 +- .../src/setupTests.ts | 0 yarn.lock | 82 +++++- 44 files changed, 513 insertions(+), 185 deletions(-) rename microsite/data/plugins/{azure-functions.yaml => azure-sites.yaml} (66%) delete mode 100644 plugins/azure-functions/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.tsx rename plugins/{azure-functions-backend => azure-sites-backend}/.eslintrc.js (100%) rename plugins/{azure-functions-backend => azure-sites-backend}/README.md (92%) rename plugins/{azure-functions-backend => azure-sites-backend}/api-report.md (75%) rename plugins/{azure-functions-backend => azure-sites-backend}/package.json (86%) rename plugins/{azure-functions-backend => azure-sites-backend}/schema.d.ts (100%) rename plugins/{azure-functions-backend => azure-sites-backend}/src/api/AzureSitesApi.ts (68%) rename plugins/{azure-functions-backend => azure-sites-backend}/src/api/index.ts (100%) rename plugins/{azure-functions-backend => azure-sites-backend}/src/config.ts (100%) rename plugins/{azure-functions-backend => azure-sites-backend}/src/index.ts (100%) rename plugins/{azure-functions-backend => azure-sites-backend}/src/run.ts (100%) rename plugins/{azure-functions-backend => azure-sites-backend}/src/service/router.ts (67%) rename plugins/{azure-functions-backend => azure-sites-backend}/src/service/standaloneServer.ts (100%) rename plugins/{azure-functions-backend => azure-sites-backend}/src/setupTests.ts (100%) rename plugins/{azure-functions-common => azure-sites-common}/.eslintrc.js (100%) rename plugins/{azure-functions-common => azure-sites-common}/api-report.md (73%) rename plugins/{azure-functions-common => azure-sites-common}/package.json (89%) rename plugins/{azure-functions-common => azure-sites-common}/src/index.ts (100%) rename plugins/{azure-functions-common => azure-sites-common}/src/types.ts (87%) rename plugins/{azure-functions => azure-sites}/.eslintrc.js (100%) rename plugins/{azure-functions => azure-sites}/README.md (94%) rename plugins/{azure-functions => azure-sites}/api-report.md (72%) rename plugins/{azure-functions => azure-sites}/dev/index.tsx (100%) rename plugins/{azure-functions => azure-sites}/docs/functions-table.png (100%) rename plugins/{azure-functions => azure-sites}/package.json (91%) rename plugins/{azure-functions => azure-sites}/src/api/AzureSitesApi.ts (79%) rename plugins/{azure-functions => azure-sites}/src/api/AzureSitesApiBackendClient.ts (54%) rename plugins/{azure-functions => azure-sites}/src/api/index.ts (100%) rename plugins/{azure-functions => azure-sites}/src/components/AzureSitesOverviewComponent/AzureSitesOverview.tsx (100%) rename plugins/{azure-functions => azure-sites}/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.test.tsx (96%) create mode 100644 plugins/azure-sites/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.tsx rename plugins/{azure-functions => azure-sites}/src/hooks/useServiceEntityAnnotations.ts (100%) rename plugins/{azure-functions => azure-sites}/src/hooks/useSites.ts (89%) rename plugins/{azure-functions => azure-sites}/src/index.ts (100%) rename plugins/{azure-functions => azure-sites}/src/mocks/mocks.ts (93%) rename plugins/{azure-functions => azure-sites}/src/plugin.test.ts (100%) rename plugins/{azure-functions => azure-sites}/src/plugin.ts (100%) rename plugins/{azure-functions => azure-sites}/src/routes.ts (96%) rename plugins/{azure-functions => azure-sites}/src/setupTests.ts (100%) diff --git a/.changeset/tasty-colts-hug.md b/.changeset/tasty-colts-hug.md index d5ee029aaf..e56d48a441 100644 --- a/.changeset/tasty-colts-hug.md +++ b/.changeset/tasty-colts-hug.md @@ -1,7 +1,7 @@ --- -'@backstage/plugin-azure-functions': minor -'@backstage/plugin-azure-functions-backend': minor -'@backstage/plugin-azure-functions-common': minor +'@backstage/plugin-azure-sites': minor +'@backstage/plugin-azure-sites-backend': minor +'@backstage/plugin-azure-sites-common': minor --- -Basic Azure Functions support for a given entity. View the current status of the function app, quickly jump to Function's Overview page, or Log Stream page. +Azure Sites (Apps & Functions) support for a given entity. View the current status of the site, quickly jump to site's Overview page, or Log Stream page. diff --git a/microsite/data/plugins/azure-functions.yaml b/microsite/data/plugins/azure-sites.yaml similarity index 66% rename from microsite/data/plugins/azure-functions.yaml rename to microsite/data/plugins/azure-sites.yaml index bc5b003726..edfba635fc 100644 --- a/microsite/data/plugins/azure-functions.yaml +++ b/microsite/data/plugins/azure-sites.yaml @@ -4,6 +4,6 @@ author: FRISS authorUrl: https://friss.com category: Infrastructure description: View related Azure information for your components in Backstage. -documentation: https://github.com/backstage/backstage/tree/master/plugins/azure-functions -iconUrl: img/azurefunctions-icon.svg -npmPackageName: '@backstage/plugin-azure-functions' +documentation: https://github.com/backstage/backstage/tree/master/plugins/azure-sites +iconUrl: img/azure-icon.svg +npmPackageName: '@backstage/plugin-azure-sites' diff --git a/packages/app/package.json b/packages/app/package.json index d3360518ec..88c6407ba3 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -19,7 +19,7 @@ "@backstage/plugin-apache-airflow": "workspace:^", "@backstage/plugin-api-docs": "workspace:^", "@backstage/plugin-azure-devops": "workspace:^", - "@backstage/plugin-azure-functions": "workspace:^", + "@backstage/plugin-azure-sites": "workspace:^", "@backstage/plugin-badges": "workspace:^", "@backstage/plugin-catalog-common": "workspace:^", "@backstage/plugin-catalog-graph": "workspace:^", diff --git a/packages/backend/package.json b/packages/backend/package.json index 468731be33..3a5dc6fbe7 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -36,7 +36,7 @@ "@backstage/plugin-auth-backend": "workspace:^", "@backstage/plugin-auth-node": "workspace:^", "@backstage/plugin-azure-devops-backend": "workspace:^", - "@backstage/plugin-azure-functions-backend": "workspace:^", + "@backstage/plugin-azure-sites-backend": "workspace:^", "@backstage/plugin-badges-backend": "workspace:^", "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-code-coverage-backend": "workspace:^", diff --git a/plugins/azure-functions/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.tsx b/plugins/azure-functions/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.tsx deleted file mode 100644 index c26fb6bc55..0000000000 --- a/plugins/azure-functions/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.tsx +++ /dev/null @@ -1,125 +0,0 @@ -/* - * 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 React from 'react'; -import { Box, Card, Link, LinearProgress } from '@material-ui/core'; -import { AzureSite } from '@backstage/plugin-azure-functions-common'; -import { Table, TableColumn } from '@backstage/core-components'; -import FlashOnIcon from '@material-ui/icons/FlashOn'; -import { DateTime } from 'luxon'; - -type States = 'Waiting' | 'Running' | 'Paused' | 'Failed'; - -const State = ({ value }: { value: States }) => { - const colorMap = { - Waiting: '#dcbc21', - Running: 'green', - Paused: 'black', - Failed: 'red', - }; - return ( - - - {value} - - ); -}; - -type TableProps = { - data: AzureSite[]; - loading: boolean; -}; - -const DEFAULT_COLUMNS: TableColumn[] = [ - { - title: 'name', - highlight: true, - render: (func: AzureSite) => { - return ( - - {func.name} - - ); - }, - }, - { - title: 'kind', - render: (func: AzureSite) => func.kind ?? 'unknown', - }, - { - title: 'location', - render: (func: AzureSite) => func.location ?? 'unknown', - }, - { - title: 'status', - render: (func: AzureSite) => , - }, - { - title: 'last modified', - render: (func: AzureSite) => - DateTime.fromISO(func.lastModifiedDate).toLocaleString( - DateTime.DATETIME_MED, - ), - }, - { - title: 'logs', - align: 'right', - render: (func: AzureSite) => { - return ( - - View Logs - - ); - }, - }, -]; - -/** @public */ -export const AzureSitesOverviewTable = ({ data, loading }: TableProps) => { - const columns: TableColumn[] = [...DEFAULT_COLUMNS]; - const tableStyle = { - minWidth: '0', - width: '100%', - }; - - return ( - -
- - - Azure Sites - - } - options={{ paging: true, search: false, pageSize: 10 }} - data={data} - emptyContent={} - isLoading={loading} - columns={columns} - /> - - ); -}; diff --git a/plugins/azure-functions-backend/.eslintrc.js b/plugins/azure-sites-backend/.eslintrc.js similarity index 100% rename from plugins/azure-functions-backend/.eslintrc.js rename to plugins/azure-sites-backend/.eslintrc.js diff --git a/plugins/azure-functions-backend/README.md b/plugins/azure-sites-backend/README.md similarity index 92% rename from plugins/azure-functions-backend/README.md rename to plugins/azure-sites-backend/README.md index e220cca00f..b655f1fb64 100644 --- a/plugins/azure-functions-backend/README.md +++ b/plugins/azure-sites-backend/README.md @@ -33,11 +33,11 @@ Configuration Details: Here's how to get the backend plugin up and running: -1. First we need to add the `@backstage/plugin-azure-functions-backend` package to your backend: +1. First we need to add the `@backstage/plugin-azure-sites-backend` package to your backend: ```sh # From the Backstage root directory - yarn add --cwd packages/backend @backstage/plugin-azure-functions-backend + yarn add --cwd packages/backend @backstage/plugin-azure-sites-backend ``` 2. Then we will create a new file named `packages/backend/src/plugins/azure.ts`, and add the following to it: @@ -46,7 +46,7 @@ Here's how to get the backend plugin up and running: import { createRouter, AzureSitesApi, - } from '@backstage/plugin-azure-functions-backend'; + } from '@backstage/plugin-azure-sites-backend'; import { Router } from 'express'; import { PluginEnvironment } from '../types'; diff --git a/plugins/azure-functions-backend/api-report.md b/plugins/azure-sites-backend/api-report.md similarity index 75% rename from plugins/azure-functions-backend/api-report.md rename to plugins/azure-sites-backend/api-report.md index b8d8871595..5c868ad507 100644 --- a/plugins/azure-functions-backend/api-report.md +++ b/plugins/azure-sites-backend/api-report.md @@ -1,10 +1,11 @@ -## API Report File for "@backstage/plugin-azure-functions-backend" +## API Report File for "@backstage/plugin-azure-sites-backend" > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { AzureSiteListRequest } from '@backstage/plugin-azure-functions-common'; -import { AzureSiteListResponse } from '@backstage/plugin-azure-functions-common'; +import { AzureSiteListRequest } from '@backstage/plugin-azure-sites-common'; +import { AzureSiteListResponse } from '@backstage/plugin-azure-sites-common'; +import { AzureSiteStartStopRequest } from '@backstage/plugin-azure-sites-common'; import { Config } from '@backstage/config'; import express from 'express'; import { Logger } from 'winston'; @@ -39,6 +40,10 @@ export class AzureSitesApi { static fromConfig(config: Config): AzureSitesApi; // (undocumented) list(request: AzureSiteListRequest): Promise; + // (undocumented) + start(request: AzureSiteStartStopRequest): Promise; + // (undocumented) + stop(request: AzureSiteStartStopRequest): Promise; } // @public (undocumented) diff --git a/plugins/azure-functions-backend/package.json b/plugins/azure-sites-backend/package.json similarity index 86% rename from plugins/azure-functions-backend/package.json rename to plugins/azure-sites-backend/package.json index 99e134e53e..c1f801bb71 100644 --- a/plugins/azure-functions-backend/package.json +++ b/plugins/azure-sites-backend/package.json @@ -1,5 +1,5 @@ { - "name": "@backstage/plugin-azure-functions-backend", + "name": "@backstage/plugin-azure-sites-backend", "version": "0.0.0", "main": "src/index.ts", "types": "src/index.ts", @@ -17,7 +17,7 @@ "repository": { "type": "git", "url": "https://github.com/backstage/backstage", - "directory": "plugins/azure-functions-backend" + "directory": "plugins/azure-sites-backend" }, "keywords": [ "backstage", @@ -33,11 +33,12 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { + "@azure/arm-appservice": "^13.0.1", "@azure/arm-resourcegraph": "^4.2.1", "@azure/identity": "^2.1.0", "@backstage/backend-common": "workspace:^", "@backstage/config": "workspace:^", - "@backstage/plugin-azure-functions-common": "workspace:^", + "@backstage/plugin-azure-sites-common": "workspace:^", "@types/express": "^4.17.6", "express": "^4.17.1", "express-promise-router": "^4.1.0", diff --git a/plugins/azure-functions-backend/schema.d.ts b/plugins/azure-sites-backend/schema.d.ts similarity index 100% rename from plugins/azure-functions-backend/schema.d.ts rename to plugins/azure-sites-backend/schema.d.ts diff --git a/plugins/azure-functions-backend/src/api/AzureSitesApi.ts b/plugins/azure-sites-backend/src/api/AzureSitesApi.ts similarity index 68% rename from plugins/azure-functions-backend/src/api/AzureSitesApi.ts rename to plugins/azure-sites-backend/src/api/AzureSitesApi.ts index e00c49e4d3..70dc9bba69 100644 --- a/plugins/azure-functions-backend/src/api/AzureSitesApi.ts +++ b/plugins/azure-sites-backend/src/api/AzureSitesApi.ts @@ -20,11 +20,13 @@ import { ClientSecretCredential, } from '@azure/identity'; import { ResourceGraphClient } from '@azure/arm-resourcegraph'; +import { WebSiteManagementClient } from '@azure/arm-appservice'; import { AzureSite, AzureSiteListRequest, AzureSiteListResponse, -} from '@backstage/plugin-azure-functions-common'; + AzureSiteStartStopRequest, +} from '@backstage/plugin-azure-sites-common'; import { AzureFunctionsConfig } from '../config'; /** @public */ @@ -34,22 +36,41 @@ export class AzureSitesApi { private readonly client: ResourceGraphClient; constructor(private readonly config: AzureFunctionsConfig) { - const creds = - config.clientId && config.clientSecret - ? new ClientSecretCredential( - config.tenantId, - config.clientId, - config.clientSecret, - ) - : new DefaultAzureCredential({ tenantId: config.tenantId }); + const creds = this.getCredentials(config); this.client = new ResourceGraphClient(creds); } + private getCredentials(config: AzureFunctionsConfig) { + return config.clientId && config.clientSecret + ? new ClientSecretCredential( + config.tenantId, + config.clientId, + config.clientSecret, + ) + : new DefaultAzureCredential({ tenantId: config.tenantId }); + } + static fromConfig(config: Config): AzureSitesApi { return new AzureSitesApi(AzureFunctionsConfig.fromConfig(config)); } + async start(request: AzureSiteStartStopRequest): Promise { + const client = new WebSiteManagementClient( + this.getCredentials(this.config), + request.subscription, + ); + await client.webApps.start(request.resourceGroup, request.name); + } + + async stop(request: AzureSiteStartStopRequest): Promise { + const client = new WebSiteManagementClient( + this.getCredentials(this.config), + request.subscription, + ); + await client.webApps.stop(request.resourceGroup, request.name); + } + async list(request: AzureSiteListRequest): Promise { const items: AzureSite[] = []; try { @@ -66,6 +87,7 @@ export class AzureSitesApi { name: v.name!, kind: v.kind!, resourceGroup: v.resourceGroup!, + subscription: v.id!.match(/\w{8}\-\w{4}\-\w{4}\-\w{4}\-\w{12}/)[0], location: v.location!, lastModifiedDate: v.properties.lastModifiedTimeUtc!, usageState: v.properties.usageState!, diff --git a/plugins/azure-functions-backend/src/api/index.ts b/plugins/azure-sites-backend/src/api/index.ts similarity index 100% rename from plugins/azure-functions-backend/src/api/index.ts rename to plugins/azure-sites-backend/src/api/index.ts diff --git a/plugins/azure-functions-backend/src/config.ts b/plugins/azure-sites-backend/src/config.ts similarity index 100% rename from plugins/azure-functions-backend/src/config.ts rename to plugins/azure-sites-backend/src/config.ts diff --git a/plugins/azure-functions-backend/src/index.ts b/plugins/azure-sites-backend/src/index.ts similarity index 100% rename from plugins/azure-functions-backend/src/index.ts rename to plugins/azure-sites-backend/src/index.ts diff --git a/plugins/azure-functions-backend/src/run.ts b/plugins/azure-sites-backend/src/run.ts similarity index 100% rename from plugins/azure-functions-backend/src/run.ts rename to plugins/azure-sites-backend/src/run.ts diff --git a/plugins/azure-functions-backend/src/service/router.ts b/plugins/azure-sites-backend/src/service/router.ts similarity index 67% rename from plugins/azure-functions-backend/src/service/router.ts rename to plugins/azure-sites-backend/src/service/router.ts index 4e4cb36630..bea9a15396 100644 --- a/plugins/azure-functions-backend/src/service/router.ts +++ b/plugins/azure-sites-backend/src/service/router.ts @@ -48,6 +48,34 @@ export async function createRouter( }), ); }); + router.post( + '/:subscription/:resourceGroup/:name/start', + async (request, response) => { + const { subscription, resourceGroup, name } = request.params; + console.log('starting...'); + response.json( + await azureSitesApi.start({ + subscription, + resourceGroup, + name, + }), + ); + }, + ); + router.post( + '/:subscription/:resourceGroup/:name/stop', + async (request, response) => { + const { subscription, resourceGroup, name } = request.params; + console.log('stopping...'); + response.json( + await azureSitesApi.stop({ + subscription, + resourceGroup, + name, + }), + ); + }, + ); router.use(errorHandler()); return router; } diff --git a/plugins/azure-functions-backend/src/service/standaloneServer.ts b/plugins/azure-sites-backend/src/service/standaloneServer.ts similarity index 100% rename from plugins/azure-functions-backend/src/service/standaloneServer.ts rename to plugins/azure-sites-backend/src/service/standaloneServer.ts diff --git a/plugins/azure-functions-backend/src/setupTests.ts b/plugins/azure-sites-backend/src/setupTests.ts similarity index 100% rename from plugins/azure-functions-backend/src/setupTests.ts rename to plugins/azure-sites-backend/src/setupTests.ts diff --git a/plugins/azure-functions-common/.eslintrc.js b/plugins/azure-sites-common/.eslintrc.js similarity index 100% rename from plugins/azure-functions-common/.eslintrc.js rename to plugins/azure-sites-common/.eslintrc.js diff --git a/plugins/azure-functions-common/api-report.md b/plugins/azure-sites-common/api-report.md similarity index 73% rename from plugins/azure-functions-common/api-report.md rename to plugins/azure-sites-common/api-report.md index 12fed0f08c..64b4275085 100644 --- a/plugins/azure-functions-common/api-report.md +++ b/plugins/azure-sites-common/api-report.md @@ -1,4 +1,4 @@ -## API Report File for "@backstage/plugin-azure-functions-common" +## API Report File for "@backstage/plugin-azure-sites-common" > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). @@ -11,6 +11,7 @@ export type AzureSite = { kind: string; location: string; resourceGroup: string; + subscription: string; state: string; usageState: string; containerSize: number; @@ -28,5 +29,12 @@ export type AzureSiteListResponse = { items: AzureSite[]; }; +// @public (undocumented) +export type AzureSiteStartStopRequest = { + subscription: string; + resourceGroup: string; + name: string; +}; + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/azure-functions-common/package.json b/plugins/azure-sites-common/package.json similarity index 89% rename from plugins/azure-functions-common/package.json rename to plugins/azure-sites-common/package.json index 3faa3260ae..eb0093bf65 100644 --- a/plugins/azure-functions-common/package.json +++ b/plugins/azure-sites-common/package.json @@ -1,5 +1,5 @@ { - "name": "@backstage/plugin-azure-functions-common", + "name": "@backstage/plugin-azure-sites-common", "description": "Common functionalities for the azure plugin", "version": "0.0.0", "main": "src/index.ts", @@ -18,7 +18,7 @@ "repository": { "type": "git", "url": "https://github.com/backstage/backstage", - "directory": "plugins/azure-functions-common" + "directory": "plugins/azure-sites-common" }, "keywords": [ "backstage" diff --git a/plugins/azure-functions-common/src/index.ts b/plugins/azure-sites-common/src/index.ts similarity index 100% rename from plugins/azure-functions-common/src/index.ts rename to plugins/azure-sites-common/src/index.ts diff --git a/plugins/azure-functions-common/src/types.ts b/plugins/azure-sites-common/src/types.ts similarity index 87% rename from plugins/azure-functions-common/src/types.ts rename to plugins/azure-sites-common/src/types.ts index 5364b43421..7c8be7ce24 100644 --- a/plugins/azure-functions-common/src/types.ts +++ b/plugins/azure-sites-common/src/types.ts @@ -22,6 +22,7 @@ export type AzureSite = { kind: string; location: string; resourceGroup: string; + subscription: string; state: string; usageState: string; containerSize: number; @@ -38,3 +39,10 @@ export type AzureSiteListRequest = { export type AzureSiteListResponse = { items: AzureSite[]; }; + +/** @public */ +export type AzureSiteStartStopRequest = { + subscription: string; + resourceGroup: string; + name: string; +}; diff --git a/plugins/azure-functions/.eslintrc.js b/plugins/azure-sites/.eslintrc.js similarity index 100% rename from plugins/azure-functions/.eslintrc.js rename to plugins/azure-sites/.eslintrc.js diff --git a/plugins/azure-functions/README.md b/plugins/azure-sites/README.md similarity index 94% rename from plugins/azure-functions/README.md rename to plugins/azure-sites/README.md index ed7e18c3f0..2f69518078 100644 --- a/plugins/azure-functions/README.md +++ b/plugins/azure-sites/README.md @@ -47,14 +47,14 @@ azure.com/microsoft-web-sites: func-testapp 1. Install the plugin in the `packages/app` directory ```sh -yarn add @backstage/plugin-azure-functions +yarn add @backstage/plugin-azure-sites ``` 2. Add widget component to your Backstage instance: ```ts // In packages/app/src/components/catalog/EntityPage.tsx -import { EntityAzureSitesOverviewWidget, isAzureWebSiteNameAvailable } from '@backstage/plugin-azure-functions'; +import { EntityAzureSitesOverviewWidget, isAzureWebSiteNameAvailable } from '@backstage/plugin-azure-sites'; ... diff --git a/plugins/azure-functions/api-report.md b/plugins/azure-sites/api-report.md similarity index 72% rename from plugins/azure-functions/api-report.md rename to plugins/azure-sites/api-report.md index bed1c36c4d..2e9b81376a 100644 --- a/plugins/azure-functions/api-report.md +++ b/plugins/azure-sites/api-report.md @@ -1,4 +1,4 @@ -## API Report File for "@backstage/plugin-azure-functions" +## API Report File for "@backstage/plugin-azure-sites" > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). @@ -6,8 +6,9 @@ /// import { ApiRef } from '@backstage/core-plugin-api'; -import { AzureSiteListRequest } from '@backstage/plugin-azure-functions-common'; -import { AzureSiteListResponse } from '@backstage/plugin-azure-functions-common'; +import { AzureSiteListRequest } from '@backstage/plugin-azure-sites-common'; +import { AzureSiteListResponse } from '@backstage/plugin-azure-sites-common'; +import { AzureSiteStartStopRequest } from '@backstage/plugin-azure-sites-common'; import { BackstagePlugin } from '@backstage/core-plugin-api'; import { DiscoveryApi } from '@backstage/core-plugin-api'; import { Entity } from '@backstage/catalog-model'; @@ -20,6 +21,8 @@ export const azureSiteApiRef: ApiRef; // @public (undocumented) export type AzureSitesApi = { list: (request: AzureSiteListRequest) => Promise; + start: (request: AzureSiteStartStopRequest) => Promise; + stop: (request: AzureSiteStartStopRequest) => Promise; }; // @public (undocumented) @@ -30,6 +33,10 @@ export class AzureSitesApiBackendClient implements AzureSitesApi { }); // (undocumented) list(request: AzureSiteListRequest): Promise; + // (undocumented) + start(request: AzureSiteStartStopRequest): Promise; + // (undocumented) + stop(request: AzureSiteStartStopRequest): Promise; } // @public (undocumented) diff --git a/plugins/azure-functions/dev/index.tsx b/plugins/azure-sites/dev/index.tsx similarity index 100% rename from plugins/azure-functions/dev/index.tsx rename to plugins/azure-sites/dev/index.tsx diff --git a/plugins/azure-functions/docs/functions-table.png b/plugins/azure-sites/docs/functions-table.png similarity index 100% rename from plugins/azure-functions/docs/functions-table.png rename to plugins/azure-sites/docs/functions-table.png diff --git a/plugins/azure-functions/package.json b/plugins/azure-sites/package.json similarity index 91% rename from plugins/azure-functions/package.json rename to plugins/azure-sites/package.json index 84999a1665..8b9ee9f25d 100644 --- a/plugins/azure-functions/package.json +++ b/plugins/azure-sites/package.json @@ -1,5 +1,5 @@ { - "name": "@backstage/plugin-azure-functions", + "name": "@backstage/plugin-azure-sites", "version": "0.0.0", "main": "src/index.ts", "types": "src/index.ts", @@ -17,7 +17,7 @@ "repository": { "type": "git", "url": "https://github.com/backstage/backstage", - "directory": "plugins/azure-functions" + "directory": "plugins/azure-sites" }, "keywords": [ "backstage", @@ -36,7 +36,7 @@ "@backstage/catalog-model": "workspace:^", "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", - "@backstage/plugin-azure-functions-common": "workspace:^", + "@backstage/plugin-azure-sites-common": "workspace:^", "@backstage/plugin-catalog-react": "workspace:^", "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", diff --git a/plugins/azure-functions/src/api/AzureSitesApi.ts b/plugins/azure-sites/src/api/AzureSitesApi.ts similarity index 79% rename from plugins/azure-functions/src/api/AzureSitesApi.ts rename to plugins/azure-sites/src/api/AzureSitesApi.ts index 5ff921a419..87a3b46a8d 100644 --- a/plugins/azure-functions/src/api/AzureSitesApi.ts +++ b/plugins/azure-sites/src/api/AzureSitesApi.ts @@ -18,14 +18,17 @@ import { createApiRef } from '@backstage/core-plugin-api'; import { AzureSiteListRequest, AzureSiteListResponse, -} from '@backstage/plugin-azure-functions-common'; + AzureSiteStartStopRequest, +} from '@backstage/plugin-azure-sites-common'; /** @public */ export const azureSiteApiRef = createApiRef({ - id: 'plugin.azure-functions.service', + id: 'plugin.azure-sites.service', }); /** @public */ export type AzureSitesApi = { list: (request: AzureSiteListRequest) => Promise; + start: (request: AzureSiteStartStopRequest) => Promise; + stop: (request: AzureSiteStartStopRequest) => Promise; }; diff --git a/plugins/azure-functions/src/api/AzureSitesApiBackendClient.ts b/plugins/azure-sites/src/api/AzureSitesApiBackendClient.ts similarity index 54% rename from plugins/azure-functions/src/api/AzureSitesApiBackendClient.ts rename to plugins/azure-sites/src/api/AzureSitesApiBackendClient.ts index a19cf270e5..5b1da009b5 100644 --- a/plugins/azure-functions/src/api/AzureSitesApiBackendClient.ts +++ b/plugins/azure-sites/src/api/AzureSitesApiBackendClient.ts @@ -18,7 +18,8 @@ import { AzureSitesApi } from './AzureSitesApi'; import { AzureSiteListRequest, AzureSiteListResponse, -} from '@backstage/plugin-azure-functions-common'; + AzureSiteStartStopRequest, +} from '@backstage/plugin-azure-sites-common'; import { DiscoveryApi, IdentityApi } from '@backstage/core-plugin-api'; /** @public */ @@ -33,11 +34,46 @@ export class AzureSitesApiBackendClient implements AzureSitesApi { this.identityApi = options.identityApi; } + async stop(request: AzureSiteStartStopRequest): Promise { + try { + const url = `${await this.discoveryApi.getBaseUrl('azure-functions')}/${ + request.subscription + }/${request.resourceGroup}/${request.name}/stop`; + const { token: accessToken } = await this.identityApi.getCredentials(); + await fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + ...(accessToken && { Authorization: `Bearer ${accessToken}` }), + }, + }); + } catch (e: any) { + throw new Error(e); + } + } + async start(request: AzureSiteStartStopRequest): Promise { + try { + const url = `${await this.discoveryApi.getBaseUrl('azure-functions')}/${ + request.subscription + }/${request.resourceGroup}/${request.name}/start`; + const { token: accessToken } = await this.identityApi.getCredentials(); + await fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + ...(accessToken && { Authorization: `Bearer ${accessToken}` }), + }, + }); + } catch (e: any) { + throw new Error(e); + } + } + async list(request: AzureSiteListRequest): Promise { try { - const url = `${await this.discoveryApi.getBaseUrl( - 'azure-functions', - )}/list/${request.name}`; + const url = `${await this.discoveryApi.getBaseUrl('azure-sites')}/list/${ + request.name + }`; const { token: accessToken } = await this.identityApi.getCredentials(); const response = await fetch(url, { method: 'GET', diff --git a/plugins/azure-functions/src/api/index.ts b/plugins/azure-sites/src/api/index.ts similarity index 100% rename from plugins/azure-functions/src/api/index.ts rename to plugins/azure-sites/src/api/index.ts diff --git a/plugins/azure-functions/src/components/AzureSitesOverviewComponent/AzureSitesOverview.tsx b/plugins/azure-sites/src/components/AzureSitesOverviewComponent/AzureSitesOverview.tsx similarity index 100% rename from plugins/azure-functions/src/components/AzureSitesOverviewComponent/AzureSitesOverview.tsx rename to plugins/azure-sites/src/components/AzureSitesOverviewComponent/AzureSitesOverview.tsx diff --git a/plugins/azure-functions/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.test.tsx b/plugins/azure-sites/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.test.tsx similarity index 96% rename from plugins/azure-functions/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.test.tsx rename to plugins/azure-sites/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.test.tsx index 936a697dcf..23476b5c3e 100644 --- a/plugins/azure-functions/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.test.tsx +++ b/plugins/azure-sites/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.test.tsx @@ -73,7 +73,7 @@ describe('AzureSitesOverviewWidget', () => { ); expect(await rendered.findByText(siteMock.name)).toBeInTheDocument(); - expect(await rendered.findByText(siteMock.kind)).toBeInTheDocument(); + expect(await rendered.findByText(siteMock.location)).toBeInTheDocument(); expect(await rendered.findByText(siteMock.state)).toBeInTheDocument(); expect( await rendered.findByText( diff --git a/plugins/azure-sites/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.tsx b/plugins/azure-sites/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.tsx new file mode 100644 index 0000000000..3f9895a226 --- /dev/null +++ b/plugins/azure-sites/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.tsx @@ -0,0 +1,271 @@ +/* + * 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 React, { Dispatch, useEffect, useState } from 'react'; +import { + Box, + Card, + IconButton, + LinearProgress, + Link, + Menu, + MenuItem, + Snackbar, + Tooltip, +} from '@material-ui/core'; +import { default as MuiAlert } from '@material-ui/lab/Alert'; +import { AzureSite } from '@backstage/plugin-azure-sites-common'; +import { Table, TableColumn } from '@backstage/core-components'; +import FlashOnIcon from '@material-ui/icons/FlashOn'; +import PublicIcon from '@material-ui/icons/Public'; +import MoreVertIcon from '@material-ui/icons/MoreVert'; +import StartIcon from '@material-ui/icons/PlayArrow'; +import StopIcon from '@material-ui/icons/Stop'; +import OpenInNewIcon from '@material-ui/icons/OpenInNew'; +import { DateTime } from 'luxon'; +import { useApi } from '@backstage/core-plugin-api'; +import { azureSiteApiRef } from '../../api'; + +type States = 'Waiting' | 'Running' | 'Paused' | 'Failed' | 'Stopped'; +type Kinds = 'app' | 'functionapp'; + +const State = ({ value }: { value: States }) => { + const colorMap = { + Waiting: '#dcbc21', + Running: 'green', + Paused: 'black', + Failed: 'red', + Stopped: 'black', + }; + return ( + + + {value} + + ); +}; + +const Kind = ({ value }: { value: Kinds }) => { + const iconMap = { + app: , + functionapp: , + }; + return ( + + {iconMap[value]} + + ); +}; + +type TableProps = { + data: AzureSite[]; + loading: boolean; +}; + +const ActionButtons = ({ + value, + onMenuItemClick, +}: { + value: AzureSite; + onMenuItemClick: Dispatch>; +}) => { + const azureApi = useApi(azureSiteApiRef); + + const [anchorEl, setAnchorEl] = useState(null); + const open = Boolean(anchorEl); + + const handleOpen = (event: React.MouseEvent) => { + setAnchorEl(event.currentTarget); + }; + const handleClose = () => { + setAnchorEl(null); + }; + const start = () => { + azureApi.start({ + name: value.name, + resourceGroup: value.resourceGroup, + subscription: value.subscription, + }); + onMenuItemClick('Starting, this may take some time...'); + handleClose(); + }; + const stop = () => { + azureApi.stop({ + name: value.name, + resourceGroup: value.resourceGroup, + subscription: value.subscription, + }); + onMenuItemClick('Stopping, this may take some time...'); + handleClose(); + }; + + return ( +
+ + + + + {value.state !== 'Running' && ( + + +  Start + + )} + {value.state !== 'Stopped' && ( + + +  Stop + + )} + + +  Log Stream + + +
+ ); +}; + +/** @public */ +export const AzureSitesOverviewTable = ({ data, loading }: TableProps) => { + const [snackbarMessage, setSnackbarMessage] = useState(null); + const [isSnackbarOpen, setSnackbarOpen] = useState(false); + + const onSnackbarClose = () => { + setSnackbarMessage(null); + }; + + useEffect(() => { + setSnackbarOpen(!!snackbarMessage); + }, [snackbarMessage]); + + const columns: TableColumn[] = [ + { + width: '25px', + field: 'kind', + render: (func: AzureSite) => , + }, + { + title: 'name', + field: 'name', + highlight: true, + render: (func: AzureSite) => { + return ( + + {func.name} + + ); + }, + }, + { + title: 'location', + field: 'location', + render: (func: AzureSite) => func.location ?? 'unknown', + }, + { + title: 'status', + field: 'status', + render: (func: AzureSite) => , + }, + { + title: 'last modified', + field: 'lastModifiedDate', + render: (func: AzureSite) => + DateTime.fromISO(func.lastModifiedDate).toLocaleString( + DateTime.DATETIME_MED, + ), + }, + { + title: 'actions', + align: 'right', + sorting: false, + field: 'actions', + render: (func: AzureSite) => ( + + ), + }, + ]; + + const tableStyle = { + minWidth: '0', + width: '100%', + }; + + return ( + +
+ + + Azure Sites + + } + options={{ paging: true, search: false, pageSize: 10 }} + data={data} + emptyContent={} + isLoading={loading} + columns={columns} + /> + + + {snackbarMessage} + + + + ); +}; diff --git a/plugins/azure-functions/src/hooks/useServiceEntityAnnotations.ts b/plugins/azure-sites/src/hooks/useServiceEntityAnnotations.ts similarity index 100% rename from plugins/azure-functions/src/hooks/useServiceEntityAnnotations.ts rename to plugins/azure-sites/src/hooks/useServiceEntityAnnotations.ts diff --git a/plugins/azure-functions/src/hooks/useSites.ts b/plugins/azure-sites/src/hooks/useSites.ts similarity index 89% rename from plugins/azure-functions/src/hooks/useSites.ts rename to plugins/azure-sites/src/hooks/useSites.ts index f321fca3e1..fb3215c008 100644 --- a/plugins/azure-functions/src/hooks/useSites.ts +++ b/plugins/azure-sites/src/hooks/useSites.ts @@ -14,12 +14,15 @@ * limitations under the License. */ +import useInterval from 'react-use/lib/useInterval'; import useAsyncRetry from 'react-use/lib/useAsyncRetry'; import { useApi, errorApiRef } from '@backstage/core-plugin-api'; -import { AzureSiteListResponse } from '@backstage/plugin-azure-functions-common'; +import { AzureSiteListResponse } from '@backstage/plugin-azure-sites-common'; import { azureSiteApiRef } from '../api'; import { useCallback } from 'react'; +const POLLING_INTERVAL = 15000; + export function useSites({ name }: { name: string }) { const azureApi = useApi(azureSiteApiRef); const errorApi = useApi(errorApiRef); @@ -56,6 +59,8 @@ export function useSites({ name }: { name: string }) { } }, []); + useInterval(() => retry(), POLLING_INTERVAL); + return [ { loading, diff --git a/plugins/azure-functions/src/index.ts b/plugins/azure-sites/src/index.ts similarity index 100% rename from plugins/azure-functions/src/index.ts rename to plugins/azure-sites/src/index.ts diff --git a/plugins/azure-functions/src/mocks/mocks.ts b/plugins/azure-sites/src/mocks/mocks.ts similarity index 93% rename from plugins/azure-functions/src/mocks/mocks.ts rename to plugins/azure-sites/src/mocks/mocks.ts index 134bd32c5d..2bc3b8b9fe 100644 --- a/plugins/azure-functions/src/mocks/mocks.ts +++ b/plugins/azure-sites/src/mocks/mocks.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { AzureSite } from '@backstage/plugin-azure-functions-common'; +import { AzureSite } from '@backstage/plugin-azure-sites-common'; export const entityMock = { metadata: { @@ -40,6 +40,7 @@ export const siteMock: AzureSite = { name: 'func-mock', kind: 'functionapp', resourceGroup: 'mock-resourcegroup', + subscription: '00000000-0000-0000-0000-000000000000', tags: { isMock: true, }, diff --git a/plugins/azure-functions/src/plugin.test.ts b/plugins/azure-sites/src/plugin.test.ts similarity index 100% rename from plugins/azure-functions/src/plugin.test.ts rename to plugins/azure-sites/src/plugin.test.ts diff --git a/plugins/azure-functions/src/plugin.ts b/plugins/azure-sites/src/plugin.ts similarity index 100% rename from plugins/azure-functions/src/plugin.ts rename to plugins/azure-sites/src/plugin.ts diff --git a/plugins/azure-functions/src/routes.ts b/plugins/azure-sites/src/routes.ts similarity index 96% rename from plugins/azure-functions/src/routes.ts rename to plugins/azure-sites/src/routes.ts index 61234c4da5..1b10ad8dde 100644 --- a/plugins/azure-functions/src/routes.ts +++ b/plugins/azure-sites/src/routes.ts @@ -17,5 +17,5 @@ import { createRouteRef } from '@backstage/core-plugin-api'; export const rootRouteRef = createRouteRef({ - id: 'azure-functions', + id: 'azure-sites', }); diff --git a/plugins/azure-functions/src/setupTests.ts b/plugins/azure-sites/src/setupTests.ts similarity index 100% rename from plugins/azure-functions/src/setupTests.ts rename to plugins/azure-sites/src/setupTests.ts diff --git a/yarn.lock b/yarn.lock index 456fd8d8ec..15a08e5092 100644 --- a/yarn.lock +++ b/yarn.lock @@ -339,6 +339,21 @@ __metadata: languageName: node linkType: hard +"@azure/arm-appservice@npm:^13.0.1": + version: 13.0.2 + resolution: "@azure/arm-appservice@npm:13.0.2" + dependencies: + "@azure/abort-controller": ^1.0.0 + "@azure/core-auth": ^1.3.0 + "@azure/core-client": ^1.5.0 + "@azure/core-lro": ^2.2.0 + "@azure/core-paging": ^1.2.0 + "@azure/core-rest-pipeline": ^1.8.0 + tslib: ^2.2.0 + checksum: 6d604c492a70a6cdd4d3ad3f634a74228dc081ed4f49128873e76bfa5e65ec8cce18b7b19319fd2b1b4edbd390dbd66c9ac48646f0ed80cae09cd2f1d05fb279 + languageName: node + linkType: hard + "@azure/arm-resourcegraph@npm:^4.2.1": version: 4.2.1 resolution: "@azure/arm-resourcegraph@npm:4.2.1" @@ -358,7 +373,7 @@ __metadata: languageName: node linkType: hard -"@azure/core-auth@npm:^1.1.4": +"@azure/core-auth@npm:^1.1.4, @azure/core-auth@npm:^1.4.0": version: 1.4.0 resolution: "@azure/core-auth@npm:1.4.0" dependencies: @@ -393,6 +408,21 @@ __metadata: languageName: node linkType: hard +"@azure/core-client@npm:^1.5.0": + version: 1.6.1 + resolution: "@azure/core-client@npm:1.6.1" + dependencies: + "@azure/abort-controller": ^1.0.0 + "@azure/core-auth": ^1.4.0 + "@azure/core-rest-pipeline": ^1.9.1 + "@azure/core-tracing": ^1.0.0 + "@azure/core-util": ^1.0.0 + "@azure/logger": ^1.0.0 + tslib: ^2.2.0 + checksum: 400890a9b5f0c8801ff92005c3cba7bb5124634e321735406731bef33688a79f23d28b49fccdfab90814dade41a13f3d3cb99f80151a2bff17628416e811afb6 + languageName: node + linkType: hard + "@azure/core-http@npm:^2.0.0": version: 2.2.4 resolution: "@azure/core-http@npm:2.2.4" @@ -437,6 +467,15 @@ __metadata: languageName: node linkType: hard +"@azure/core-paging@npm:^1.2.0": + version: 1.3.0 + resolution: "@azure/core-paging@npm:1.3.0" + dependencies: + tslib: ^2.2.0 + checksum: 3fbf3d6474e2346f7c3ea8344a41bf41e053789efbbd29df78365e9c9ca66e143da3e5407d8c9dd5ddc82a65680185cd6f0ec851c48635776d18a6a605a98e78 + languageName: node + linkType: hard + "@azure/core-rest-pipeline@npm:^1.1.0, @azure/core-rest-pipeline@npm:^1.5.0": version: 1.5.0 resolution: "@azure/core-rest-pipeline@npm:1.5.0" @@ -454,6 +493,24 @@ __metadata: languageName: node linkType: hard +"@azure/core-rest-pipeline@npm:^1.8.0, @azure/core-rest-pipeline@npm:^1.9.1": + version: 1.9.2 + resolution: "@azure/core-rest-pipeline@npm:1.9.2" + dependencies: + "@azure/abort-controller": ^1.0.0 + "@azure/core-auth": ^1.4.0 + "@azure/core-tracing": ^1.0.1 + "@azure/core-util": ^1.0.0 + "@azure/logger": ^1.0.0 + form-data: ^4.0.0 + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.0 + tslib: ^2.2.0 + uuid: ^8.3.0 + checksum: cdfdaf8bdb0778f40ecfeb8b5da0b4f8643d641b75bb5869485afd38f7c3127ab088ac2fe2980df03d28fb6715928e04560343ee6416246aebe75443c4dd2906 + languageName: node + linkType: hard + "@azure/core-tracing@npm:1.0.0-preview.13": version: 1.0.0-preview.13 resolution: "@azure/core-tracing@npm:1.0.0-preview.13" @@ -464,7 +521,7 @@ __metadata: languageName: node linkType: hard -"@azure/core-tracing@npm:^1.0.0": +"@azure/core-tracing@npm:^1.0.0, @azure/core-tracing@npm:^1.0.1": version: 1.0.1 resolution: "@azure/core-tracing@npm:1.0.1" dependencies: @@ -4339,16 +4396,17 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-azure-functions-backend@workspace:^, @backstage/plugin-azure-functions-backend@workspace:plugins/azure-functions-backend": +"@backstage/plugin-azure-sites-backend@workspace:^, @backstage/plugin-azure-sites-backend@workspace:plugins/azure-sites-backend": version: 0.0.0-use.local - resolution: "@backstage/plugin-azure-functions-backend@workspace:plugins/azure-functions-backend" + resolution: "@backstage/plugin-azure-sites-backend@workspace:plugins/azure-sites-backend" dependencies: + "@azure/arm-appservice": ^13.0.1 "@azure/arm-resourcegraph": ^4.2.1 "@azure/identity": ^2.1.0 "@backstage/backend-common": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" - "@backstage/plugin-azure-functions-common": "workspace:^" + "@backstage/plugin-azure-sites-common": "workspace:^" "@types/express": ^4.17.6 "@types/supertest": ^2.0.8 express: ^4.17.1 @@ -4360,17 +4418,17 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-azure-functions-common@workspace:^, @backstage/plugin-azure-functions-common@workspace:plugins/azure-functions-common": +"@backstage/plugin-azure-sites-common@workspace:^, @backstage/plugin-azure-sites-common@workspace:plugins/azure-sites-common": version: 0.0.0-use.local - resolution: "@backstage/plugin-azure-functions-common@workspace:plugins/azure-functions-common" + resolution: "@backstage/plugin-azure-sites-common@workspace:plugins/azure-sites-common" dependencies: "@backstage/cli": "workspace:^" languageName: unknown linkType: soft -"@backstage/plugin-azure-functions@workspace:^, @backstage/plugin-azure-functions@workspace:plugins/azure-functions": +"@backstage/plugin-azure-sites@workspace:^, @backstage/plugin-azure-sites@workspace:plugins/azure-sites": version: 0.0.0-use.local - resolution: "@backstage/plugin-azure-functions@workspace:plugins/azure-functions" + resolution: "@backstage/plugin-azure-sites@workspace:plugins/azure-sites" dependencies: "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" @@ -4378,7 +4436,7 @@ __metadata: "@backstage/core-components": "workspace:^" "@backstage/core-plugin-api": "workspace:^" "@backstage/dev-utils": "workspace:^" - "@backstage/plugin-azure-functions-common": "workspace:^" + "@backstage/plugin-azure-sites-common": "workspace:^" "@backstage/plugin-catalog-react": "workspace:^" "@backstage/test-utils": "workspace:^" "@backstage/theme": "workspace:^" @@ -22099,7 +22157,7 @@ __metadata: "@backstage/plugin-apache-airflow": "workspace:^" "@backstage/plugin-api-docs": "workspace:^" "@backstage/plugin-azure-devops": "workspace:^" - "@backstage/plugin-azure-functions": "workspace:^" + "@backstage/plugin-azure-sites": "workspace:^" "@backstage/plugin-badges": "workspace:^" "@backstage/plugin-catalog-common": "workspace:^" "@backstage/plugin-catalog-graph": "workspace:^" @@ -22205,7 +22263,7 @@ __metadata: "@backstage/plugin-auth-backend": "workspace:^" "@backstage/plugin-auth-node": "workspace:^" "@backstage/plugin-azure-devops-backend": "workspace:^" - "@backstage/plugin-azure-functions-backend": "workspace:^" + "@backstage/plugin-azure-sites-backend": "workspace:^" "@backstage/plugin-badges-backend": "workspace:^" "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-code-coverage-backend": "workspace:^" From 5b9b2e0e411961de83d5a6c989fb1e688780a781 Mon Sep 17 00:00:00 2001 From: andrmaz <60042277+andrmaz@users.noreply.github.com> Date: Sun, 9 Oct 2022 23:56:17 +0200 Subject: [PATCH 124/278] feat(curve): remove curve factory type Signed-off-by: andrmaz <60042277+andrmaz@users.noreply.github.com> --- plugins/catalog-graph/api-report.md | 7 ++----- .../CatalogGraphPage/CatalogGraphPage.tsx | 3 +-- .../components/CatalogGraphPage/CurveFilter.tsx | 6 +++--- .../CatalogGraphPage/useCatalogGraphPage.ts | 14 ++++++++------ .../EntityRelationsGraph/EntityRelationsGraph.tsx | 4 ++-- .../src/components/EntityRelationsGraph/index.ts | 1 - .../src/components/EntityRelationsGraph/types.ts | 10 ---------- 7 files changed, 16 insertions(+), 29 deletions(-) diff --git a/plugins/catalog-graph/api-report.md b/plugins/catalog-graph/api-report.md index eac7351c33..e477fb13d9 100644 --- a/plugins/catalog-graph/api-report.md +++ b/plugins/catalog-graph/api-report.md @@ -30,7 +30,7 @@ export const CatalogGraphPage: (props: { mergeRelations?: boolean | undefined; direction?: Direction | undefined; showFilters?: boolean | undefined; - curve?: Curve | undefined; + curve?: 'curveStepBefore' | 'curveMonotoneX' | undefined; } | undefined; }) => JSX.Element; @@ -55,9 +55,6 @@ export const catalogGraphPlugin: BackstagePlugin< // @public export const catalogGraphRouteRef: RouteRef; -// @public -export type Curve = 'curveStepBefore' | 'curveMonotoneX'; - // @public export enum Direction { BOTTOM_TOP = 'BT', @@ -123,7 +120,7 @@ export const EntityRelationsGraph: (props: { renderLabel?: | DependencyGraphTypes.RenderLabelFunction | undefined; - curve?: Curve | undefined; + curve?: 'curveStepBefore' | 'curveMonotoneX' | undefined; }) => JSX.Element; // @public diff --git a/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.tsx b/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.tsx index 38fcdad918..a6a6c2a711 100644 --- a/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.tsx +++ b/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.tsx @@ -35,7 +35,6 @@ import React, { MouseEvent, useCallback } from 'react'; import { useNavigate } from 'react-router'; import { ALL_RELATION_PAIRS, - Curve, Direction, EntityNode, EntityRelationsGraph, @@ -112,7 +111,7 @@ export const CatalogGraphPage = (props: { mergeRelations?: boolean; direction?: Direction; showFilters?: boolean; - curve?: Curve; + curve?: 'curveStepBefore' | 'curveMonotoneX'; }; }) => { const { relationPairs = ALL_RELATION_PAIRS, initialState } = props; diff --git a/plugins/catalog-graph/src/components/CatalogGraphPage/CurveFilter.tsx b/plugins/catalog-graph/src/components/CatalogGraphPage/CurveFilter.tsx index b508d48172..6cda334cf1 100644 --- a/plugins/catalog-graph/src/components/CatalogGraphPage/CurveFilter.tsx +++ b/plugins/catalog-graph/src/components/CatalogGraphPage/CurveFilter.tsx @@ -16,8 +16,8 @@ import { Select } from '@backstage/core-components'; import { Box } from '@material-ui/core'; import React, { useCallback } from 'react'; -import { Curve } from '../EntityRelationsGraph'; +type Curve = 'curveStepBefore' | 'curveMonotoneX'; const CURVE_DISPLAY_NAMES: Record = { curveMonotoneX: 'Monotone X', curveStepBefore: 'Step Before', @@ -25,10 +25,10 @@ const CURVE_DISPLAY_NAMES: Record = { export type Props = { value: Curve; - onChange: (value: Curve) => void; + onChange: (value: 'curveStepBefore' | 'curveMonotoneX') => void; }; -const curves: Curve[] = ['curveMonotoneX', 'curveStepBefore']; +const curves: Array = ['curveMonotoneX', 'curveStepBefore']; export const CurveFilter = ({ value, onChange }: Props) => { const handleChange = useCallback(v => onChange(v as Curve), [onChange]); diff --git a/plugins/catalog-graph/src/components/CatalogGraphPage/useCatalogGraphPage.ts b/plugins/catalog-graph/src/components/CatalogGraphPage/useCatalogGraphPage.ts index 9126f5aef5..43da53c44a 100644 --- a/plugins/catalog-graph/src/components/CatalogGraphPage/useCatalogGraphPage.ts +++ b/plugins/catalog-graph/src/components/CatalogGraphPage/useCatalogGraphPage.ts @@ -29,7 +29,7 @@ import { } from 'react'; import { useLocation } from 'react-router'; import usePrevious from 'react-use/lib/usePrevious'; -import { Direction, Curve } from '../EntityRelationsGraph'; +import { Direction } from '../EntityRelationsGraph'; export type CatalogGraphPageValue = { rootEntityNames: CompoundEntityRef[]; @@ -46,8 +46,10 @@ export type CatalogGraphPageValue = { setMergeRelations: Dispatch>; direction: Direction; setDirection: Dispatch>; - curve: Curve; - setCurve: Dispatch>; + curve: 'curveStepBefore' | 'curveMonotoneX'; + setCurve: Dispatch< + React.SetStateAction<'curveStepBefore' | 'curveMonotoneX'> + >; showFilters: boolean; toggleShowFilters: DispatchWithoutAction; }; @@ -64,7 +66,7 @@ export function useCatalogGraphPage({ mergeRelations?: boolean; direction?: Direction; showFilters?: boolean; - curve?: Curve; + curve?: 'curveStepBefore' | 'curveMonotoneX'; }; }): CatalogGraphPageValue { const location = useLocation(); @@ -80,7 +82,7 @@ export function useCatalogGraphPage({ mergeRelations?: string[] | string; direction?: string[] | Direction; showFilters?: string[] | string; - curve?: string[] | Curve; + curve?: string[] | 'curveStepBefore' | 'curveMonotoneX'; }, [location.search], ); @@ -126,7 +128,7 @@ export function useCatalogGraphPage({ ? query.direction : initialState?.direction ?? Direction.LEFT_RIGHT, ); - const [curve, setCurve] = useState(() => + const [curve, setCurve] = useState<'curveStepBefore' | 'curveMonotoneX'>(() => typeof query.curve === 'string' ? query.curve : initialState?.curve ?? 'curveMonotoneX', diff --git a/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.tsx b/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.tsx index c6027e3e12..c0e2f610c1 100644 --- a/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.tsx +++ b/plugins/catalog-graph/src/components/EntityRelationsGraph/EntityRelationsGraph.tsx @@ -29,7 +29,7 @@ import React, { MouseEvent, useEffect, useMemo } from 'react'; import { CustomLabel } from './CustomLabel'; import { CustomNode } from './CustomNode'; import { ALL_RELATION_PAIRS, RelationPairs } from './relations'; -import { Curve, Direction, EntityEdge, EntityNode } from './types'; +import { Direction, EntityEdge, EntityNode } from './types'; import { useEntityRelationNodesAndEdges } from './useEntityRelationNodesAndEdges'; const useStyles = makeStyles(theme => ({ @@ -82,7 +82,7 @@ export const EntityRelationsGraph = (props: { zoom?: 'enabled' | 'disabled' | 'enable-on-click'; renderNode?: DependencyGraphTypes.RenderNodeFunction; renderLabel?: DependencyGraphTypes.RenderLabelFunction; - curve?: Curve; + curve?: 'curveStepBefore' | 'curveMonotoneX'; }) => { const { rootEntityNames, diff --git a/plugins/catalog-graph/src/components/EntityRelationsGraph/index.ts b/plugins/catalog-graph/src/components/EntityRelationsGraph/index.ts index 72125cb595..b86c8f05ae 100644 --- a/plugins/catalog-graph/src/components/EntityRelationsGraph/index.ts +++ b/plugins/catalog-graph/src/components/EntityRelationsGraph/index.ts @@ -22,5 +22,4 @@ export type { EntityEdge, EntityNodeData, EntityNode, - Curve, } from './types'; diff --git a/plugins/catalog-graph/src/components/EntityRelationsGraph/types.ts b/plugins/catalog-graph/src/components/EntityRelationsGraph/types.ts index 68f81e5577..caf6c8c501 100644 --- a/plugins/catalog-graph/src/components/EntityRelationsGraph/types.ts +++ b/plugins/catalog-graph/src/components/EntityRelationsGraph/types.ts @@ -108,13 +108,3 @@ export enum Direction { */ RIGHT_LEFT = 'RL', } - -/** - * Graph curve factory - * - * @public - * - * @see {@link @types/d3-shape/index.d.ts#curveMonotoneX} - * @see {@link @types/d3-shape/index.d.ts#curveStepBefore} - */ -export type Curve = 'curveStepBefore' | 'curveMonotoneX'; From f7c2855d7661197965fa3cb10a1d1ed6f7696d24 Mon Sep 17 00:00:00 2001 From: Frida Jacobsson Date: Fri, 23 Sep 2022 09:22:18 +0200 Subject: [PATCH 125/278] Create "BazaarOverviewCard" that can be added to Backstage homepage. Change-Id: I6e2565360cb3f7af27f60a0336cd87a75b3018c3 Signed-off-by: Frida Jacobsson Signed-off-by: Frida Jacobsson --- .changeset/early-rocks-smell.md | 5 + .changeset/rude-tomatoes-behave.md | 5 + package.json | 1 + plugins/bazaar-backend/package.json | 1 + .../src/service/DatabaseHandler.ts | 18 ++- plugins/bazaar-backend/src/service/router.ts | 10 +- plugins/bazaar/README.md | 28 ++++ plugins/bazaar/api-report.md | 11 ++ plugins/bazaar/media/overviewCard.png | Bin 0 -> 91688 bytes plugins/bazaar/package.json | 1 + plugins/bazaar/src/api.ts | 19 ++- .../BazaarOverviewCard/BazaarOverviewCard.tsx | 141 ++++++++++++++++++ .../components/BazaarOverviewCard/index.ts | 18 +++ .../components/ProjectCard/ProjectCard.tsx | 21 ++- .../ProjectPreview/ProjectPreview.tsx | 42 ++++-- plugins/bazaar/src/index.ts | 2 + yarn.lock | 3 + 17 files changed, 292 insertions(+), 34 deletions(-) create mode 100644 .changeset/early-rocks-smell.md create mode 100644 .changeset/rude-tomatoes-behave.md create mode 100644 plugins/bazaar/media/overviewCard.png create mode 100644 plugins/bazaar/src/components/BazaarOverviewCard/BazaarOverviewCard.tsx create mode 100644 plugins/bazaar/src/components/BazaarOverviewCard/index.ts diff --git a/.changeset/early-rocks-smell.md b/.changeset/early-rocks-smell.md new file mode 100644 index 0000000000..e35554f03a --- /dev/null +++ b/.changeset/early-rocks-smell.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-bazaar': patch +--- + +Added a `Overview Card` for either latest or random projects. Changed `ProjectPreview.tsx` so it take `gridSize` and `useTablePagination` as props. diff --git a/.changeset/rude-tomatoes-behave.md b/.changeset/rude-tomatoes-behave.md new file mode 100644 index 0000000000..880b4dffd5 --- /dev/null +++ b/.changeset/rude-tomatoes-behave.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-bazaar-backend': patch +--- + +Router now also has endpoint `getLatestProjects` that takes a limit of projects as prop. diff --git a/package.json b/package.json index 40e2056e8c..1013b2a049 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ }, "version": "1.7.0-next.1", "dependencies": { + "@backstage/errors": "workspace:^", "@manypkg/get-packages": "^1.1.3", "@microsoft/api-documenter": "^7.17.11", "@microsoft/api-extractor": "^7.23.0", diff --git a/plugins/bazaar-backend/package.json b/plugins/bazaar-backend/package.json index 131959cbd6..31ae4c6cb5 100644 --- a/plugins/bazaar-backend/package.json +++ b/plugins/bazaar-backend/package.json @@ -25,6 +25,7 @@ "@backstage/backend-common": "workspace:^", "@backstage/backend-test-utils": "workspace:^", "@backstage/config": "workspace:^", + "@backstage/errors": "workspace:^", "@backstage/plugin-auth-node": "workspace:^", "@types/express": "^4.17.6", "express": "^4.17.1", diff --git a/plugins/bazaar-backend/src/service/DatabaseHandler.ts b/plugins/bazaar-backend/src/service/DatabaseHandler.ts index 352866b4b5..8fbe985a10 100644 --- a/plugins/bazaar-backend/src/service/DatabaseHandler.ts +++ b/plugins/bazaar-backend/src/service/DatabaseHandler.ts @@ -175,14 +175,22 @@ export class DatabaseHandler { return await this.client('metadata').where({ id: id }).del(); } - async getProjects() { + async getProjects(limit?: number, order?: string) { const coalesce = this.client.raw( 'coalesce(count(members.item_id), 0) as members_count', ); - - return await this.client('metadata') + let get = this.client('metadata') .select([...this.columns, coalesce]) - .groupBy(this.columns) - .leftJoin('members', 'metadata.id', '=', 'members.item_id'); + .groupBy(this.columns); + if (limit) { + get = get.limit(limit); + } + if (order === 'latest') { + get = get.orderByRaw('id desc'); + } + if (order === 'random') { + get = get.orderByRaw('RANDOM()'); + } + return await get.leftJoin('members', 'metadata.id', '=', 'members.item_id'); } } diff --git a/plugins/bazaar-backend/src/service/router.ts b/plugins/bazaar-backend/src/service/router.ts index 359945f298..f902d0e8cc 100644 --- a/plugins/bazaar-backend/src/service/router.ts +++ b/plugins/bazaar-backend/src/service/router.ts @@ -92,8 +92,14 @@ export async function createRouter( response.json({ status: 'ok', data: data }); }); - router.get('/projects', async (_, response) => { - const data = await dbHandler.getProjects(); + router.get('/projects', async (request, response) => { + const limit = request.query.limit?.toString(); + const order = request.query.order?.toString(); + + const data = await dbHandler.getProjects( + limit ? parseInt(limit, 10) : undefined, + order, + ); response.json({ status: 'ok', data: data }); }); diff --git a/plugins/bazaar/README.md b/plugins/bazaar/README.md index eeebf6eb19..6168b0c4ba 100644 --- a/plugins/bazaar/README.md +++ b/plugins/bazaar/README.md @@ -64,6 +64,30 @@ const overviewContent = ( {/* ...other entity-cards */} ``` +Add a **Bazaar overview card** to the homepage that displays either the latest projects or random projects. In `packages/app/src/components/home/HomePage.tsx` add: + +```diff ++ import { BazaarOverviewCard } from '@backstage/plugin-bazaar'; + +export const homePage = ( + + + + + ++ ++ ++ + ++ ++ ++ + + {/* ...other homepage items */} +``` + +Specify how many projects you want through the "limit" props. In the example above 4 cards is specified. + ## How does the Bazaar work? ### Layout @@ -72,6 +96,10 @@ The latest modified Bazaar projects are displayed in the Bazaar landing page, lo ![home](media/layout.png) +The "BazaarOverviewCard" can be displayed in Backstage homepage. + +![home](media/overviewCard.png) + ### Workflow To add a project to the bazaar, simply click on the `add-project` button and fill in the form. diff --git a/plugins/bazaar/api-report.md b/plugins/bazaar/api-report.md index c6afde73f2..2e6ebe6746 100644 --- a/plugins/bazaar/api-report.md +++ b/plugins/bazaar/api-report.md @@ -8,6 +8,17 @@ import { BackstagePlugin } from '@backstage/core-plugin-api'; import { RouteRef } from '@backstage/core-plugin-api'; +// @public (undocumented) +export const BazaarOverviewCard: ( + props: BazaarOverviewCardProps, +) => JSX.Element; + +// @public (undocumented) +export type BazaarOverviewCardProps = { + order: 'latest' | 'random'; + limit: number; +}; + // @public (undocumented) export const BazaarPage: () => JSX.Element; diff --git a/plugins/bazaar/media/overviewCard.png b/plugins/bazaar/media/overviewCard.png new file mode 100644 index 0000000000000000000000000000000000000000..676764f6e4a40990930796f49f94f848afb4d1b6 GIT binary patch literal 91688 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

R0rRcj1p8Jo9bK}5gJ5IPq$+Pu{`?J{ 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 id: 'bazaar', @@ -40,7 +41,7 @@ export interface BazaarApi { addMember(id: number, userId: string): Promise; - getProjects(): Promise; + getProjects(limit?: number, order?: string): Promise; deleteProject(id: number): Promise; } @@ -148,12 +149,20 @@ export class BazaarClient implements BazaarApi { ); } - async getProjects(): Promise { + async getProjects(limit?: number, order?: string): Promise { const baseUrl = await this.discoveryApi.getBaseUrl('bazaar'); + const params = { + ...(limit ? { limit: limit.toString() } : {}), + ...(order ? { order } : {}), + }; + const query = new URLSearchParams(params); + const url = `projects?${query.toString()}`; - return await this.fetchApi - .fetch(`${baseUrl}/projects`) - .then(resp => resp.json()); + const data = await this.fetchApi.fetch(`${baseUrl}/${url}`); + if (!data.ok) { + throw await ResponseError.fromResponse(data); + } + return data.json(); } async deleteProject(id: number): Promise { diff --git a/plugins/bazaar/src/components/BazaarOverviewCard/BazaarOverviewCard.tsx b/plugins/bazaar/src/components/BazaarOverviewCard/BazaarOverviewCard.tsx new file mode 100644 index 0000000000..83358c0a05 --- /dev/null +++ b/plugins/bazaar/src/components/BazaarOverviewCard/BazaarOverviewCard.tsx @@ -0,0 +1,141 @@ +/* + * 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 React, { useEffect, useState } from 'react'; +import { ProjectPreview } from '../ProjectPreview/ProjectPreview'; +import useAsyncFn from 'react-use/lib/useAsyncFn'; +import { Entity, stringifyEntityRef } from '@backstage/catalog-model'; +import { useApi, useRouteRef } from '@backstage/core-plugin-api'; +import { catalogApiRef } from '@backstage/plugin-catalog-react'; +import type { BazaarProject } from '../../types'; +import { bazaarApiRef } from '../../api'; +import { fetchCatalogItems } from '../../util/fetchMethods'; +import { parseBazaarProject } from '../../util/parseMethods'; +import { ErrorPanel, InfoCard } from '@backstage/core-components'; +import { bazaarPlugin } from '../../plugin'; + +/** @public */ +export type BazaarOverviewCardProps = { + order: 'latest' | 'random'; + limit: number; +}; + +const getUnlinkedCatalogEntities = ( + bazaarProjects: BazaarProject[], + catalogEntities: Entity[], +) => { + const bazaarProjectRefs = bazaarProjects.map( + (project: BazaarProject) => project.entityRef, + ); + + return catalogEntities.filter((entity: Entity) => { + return !bazaarProjectRefs?.includes(stringifyEntityRef(entity)); + }); +}; + +/** @public */ +export const BazaarOverviewCard = (props: BazaarOverviewCardProps) => { + const { order, limit } = props; + const bazaarApi = useApi(bazaarApiRef); + const catalogApi = useApi(catalogApiRef); + const root = useRouteRef(bazaarPlugin.routes.root); + + const bazaarLink = { + title: 'Go to Bazaar', + link: root.toString(), + }; + + const [unlinkedCatalogEntities, setUnlinkedCatalogEntities] = + useState(); + + const [catalogEntities, fetchCatalogEntities] = useAsyncFn(async () => { + return await fetchCatalogItems(catalogApi); + }); + + const [bazaarProjects, fetchBazaarProjects] = useAsyncFn(async () => { + const response = await bazaarApi.getProjects(limit, order); + return response.data.map(parseBazaarProject) as BazaarProject[]; + }); + + const catalogEntityRefs = catalogEntities.value?.map((project: Entity) => + stringifyEntityRef(project), + ); + + useEffect(() => { + const filterBrokenLinks = () => { + if (catalogEntityRefs) { + bazaarProjects.value?.forEach(async (project: BazaarProject) => { + if (project.entityRef) { + if (!catalogEntityRefs?.includes(project.entityRef)) { + await bazaarApi.updateProject({ + ...project, + entityRef: null, + }); + } + } + }); + } + }; + filterBrokenLinks(); + }, [ + bazaarApi, + bazaarProjects.value, + catalogEntityRefs, + catalogEntities.value, + ]); + + useEffect(() => { + fetchCatalogEntities(); + fetchBazaarProjects(); + }, [fetchBazaarProjects, fetchCatalogEntities]); + + useEffect(() => { + const unlinkedCEntities = getUnlinkedCatalogEntities( + bazaarProjects.value || [], + catalogEntities.value || [], + ); + + if (unlinkedCEntities) { + setUnlinkedCatalogEntities(unlinkedCEntities); + } + }, [bazaarProjects, catalogEntities]); + + if (catalogEntities.error) { + return ; + } + + if (bazaarProjects.error) { + return ; + } + + return ( + + + + ); +}; diff --git a/plugins/bazaar/src/components/BazaarOverviewCard/index.ts b/plugins/bazaar/src/components/BazaarOverviewCard/index.ts new file mode 100644 index 0000000000..06ea623e1b --- /dev/null +++ b/plugins/bazaar/src/components/BazaarOverviewCard/index.ts @@ -0,0 +1,18 @@ +/* + * 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 { BazaarOverviewCard } from './BazaarOverviewCard'; +export type { BazaarOverviewCardProps } from './BazaarOverviewCard'; diff --git a/plugins/bazaar/src/components/ProjectCard/ProjectCard.tsx b/plugins/bazaar/src/components/ProjectCard/ProjectCard.tsx index 3aeba305a9..dace9b8185 100644 --- a/plugins/bazaar/src/components/ProjectCard/ProjectCard.tsx +++ b/plugins/bazaar/src/components/ProjectCard/ProjectCard.tsx @@ -30,6 +30,13 @@ import { DateTime } from 'luxon'; import { HomePageBazaarInfoCard } from '../HomePageBazaarInfoCard'; import { Entity } from '@backstage/catalog-model'; +type Props = { + project: BazaarProject; + fetchBazaarProjects: () => Promise; + catalogEntities: Entity[]; + fullHeight?: boolean; +}; + const useStyles = makeStyles({ statusTag: { display: 'inline-block', @@ -47,7 +54,7 @@ const useStyles = makeStyles({ float: 'right', }, content: { - height: '13rem', + overflow: 'scroll', }, header: { whiteSpace: 'nowrap', @@ -56,16 +63,11 @@ const useStyles = makeStyles({ }, }); -type Props = { - project: BazaarProject; - fetchBazaarProjects: () => Promise; - catalogEntities: Entity[]; -}; - export const ProjectCard = ({ project, fetchBazaarProjects, catalogEntities, + fullHeight, }: Props) => { const classes = useStyles(); const [openCard, setOpenCard] = useState(false); @@ -101,7 +103,10 @@ export const ProjectCard = ({ base: DateTime.now(), })}`} /> - + {Number(membersCount) === Number(1) diff --git a/plugins/bazaar/src/components/ProjectPreview/ProjectPreview.tsx b/plugins/bazaar/src/components/ProjectPreview/ProjectPreview.tsx index 435d80408d..77c16ef306 100644 --- a/plugins/bazaar/src/components/ProjectPreview/ProjectPreview.tsx +++ b/plugins/bazaar/src/components/ProjectPreview/ProjectPreview.tsx @@ -25,6 +25,9 @@ type Props = { bazaarProjects: BazaarProject[]; fetchBazaarProjects: () => Promise; catalogEntities: Entity[]; + useTablePagination?: boolean; + fullHeight?: boolean; + fixedWidth?: boolean; }; const useStyles = makeStyles({ @@ -51,6 +54,9 @@ export const ProjectPreview = ({ bazaarProjects, fetchBazaarProjects, catalogEntities, + useTablePagination = true, + fullHeight = true, + fixedWidth = false, }: Props) => { const classes = useStyles(); const [page, setPage] = useState(1); @@ -80,31 +86,39 @@ export const ProjectPreview = ({ .slice((page - 1) * rows, rows * page) .map((bazaarProject: BazaarProject, i: number) => { return ( - + ); })} - = bazaarProjects.length, - }} - /> + {useTablePagination && ( + = bazaarProjects.length, + }} + /> + )} ); }; diff --git a/plugins/bazaar/src/index.ts b/plugins/bazaar/src/index.ts index 895469c031..0014c66b6d 100644 --- a/plugins/bazaar/src/index.ts +++ b/plugins/bazaar/src/index.ts @@ -15,5 +15,7 @@ */ export { bazaarPlugin, BazaarPage } from './plugin'; +export { BazaarOverviewCard } from './components/BazaarOverviewCard'; +export type { BazaarOverviewCardProps } from './components/BazaarOverviewCard'; export { EntityBazaarInfoCard } from './components/EntityBazaarInfoCard'; export { SortView } from './components/SortView'; diff --git a/yarn.lock b/yarn.lock index ac27eb8215..c710e002d9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4349,6 +4349,7 @@ __metadata: "@backstage/backend-test-utils": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" + "@backstage/errors": "workspace:^" "@backstage/plugin-auth-node": "workspace:^" "@types/express": ^4.17.6 express: ^4.17.1 @@ -4369,6 +4370,7 @@ __metadata: "@backstage/core-components": "workspace:^" "@backstage/core-plugin-api": "workspace:^" "@backstage/dev-utils": "workspace:^" + "@backstage/errors": "workspace:^" "@backstage/plugin-catalog": "workspace:^" "@backstage/plugin-catalog-react": "workspace:^" "@date-io/luxon": 1.x @@ -35073,6 +35075,7 @@ __metadata: "@backstage/cli": "workspace:*" "@backstage/codemods": "workspace:*" "@backstage/create-app": "workspace:*" + "@backstage/errors": "workspace:^" "@changesets/cli": ^2.14.0 "@manypkg/get-packages": ^1.1.3 "@microsoft/api-documenter": ^7.17.11 From 9bf19466683b5c0498570476339523a38ceba853 Mon Sep 17 00:00:00 2001 From: bnechyporenko Date: Mon, 10 Oct 2022 09:11:15 +0200 Subject: [PATCH 126/278] Updated the documentation Signed-off-by: bnechyporenko --- .changeset/sixty-llamas-itch.md | 14 ----------- plugins/scaffolder/README.md | 42 ++++++++++++++++++++++++++++++++ plugins/scaffolder/src/plugin.ts | 15 ++---------- 3 files changed, 44 insertions(+), 27 deletions(-) delete mode 100644 .changeset/sixty-llamas-itch.md diff --git a/.changeset/sixty-llamas-itch.md b/.changeset/sixty-llamas-itch.md deleted file mode 100644 index 49e0bb3752..0000000000 --- a/.changeset/sixty-llamas-itch.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -'@backstage/plugin-scaffolder': patch ---- - -Make it possible to enable useLongPollingLogs in scaffolder plugin. - -For that you have to add to your app-config.yaml file this snippet: - -```yaml -scaffolder: - useLongPollingLogs: true -``` - -By default, the value is `false`. diff --git a/plugins/scaffolder/README.md b/plugins/scaffolder/README.md index b74c03ec34..8194976445 100644 --- a/plugins/scaffolder/README.md +++ b/plugins/scaffolder/README.md @@ -79,6 +79,48 @@ export const Root = ({ children }: PropsWithChildren<{}>) => ( ``` +### Troubleshooting + +In case if you encountered with the [issue of closing EventStream](https://github.com/backstage/backstage/issues/5535) +which auto-updates logs during the task execution, you can enable long polling. In order to you it, you have to create +in your codebase file in this location `packages/app/src/apis.ts` where you register `ScaffolderClient` with an extra +parameter `useLongPollingLogs: true`. By default, it is `false`. + +```typescript +import { + createApiFactory, + discoveryApiRef, + fetchApiRef, + identityApiRef, +} from '@backstage/core-plugin-api'; + +import { + scaffolderApiRef, + ScaffolderClient, +} from '@backstage/plugin-scaffolder'; + +createApiFactory({ + api: scaffolderApiRef, + deps: { + discoveryApi: discoveryApiRef, + identityApi: identityApiRef, + scmIntegrationsApi: scmIntegrationsApiRef, + fetchApi: fetchApiRef, + }, + factory: ({ scmIntegrationsApi, discoveryApi, identityApi, fetchApi }) => + new ScaffolderClient({ + discoveryApi, + identityApi, + scmIntegrationsApi, + fetchApi, + useLongPollingLogs: true, + }), +}); +``` + +Api factory creates the API and adds it to a registry. Because this file is processed before the default scaffolder +api registry, it is added to the registry prior and overrides the default behavior. + ## Links - [scaffolder-backend](https://github.com/backstage/backstage/tree/master/plugins/scaffolder-backend) diff --git a/plugins/scaffolder/src/plugin.ts b/plugins/scaffolder/src/plugin.ts index f64525ac8e..f9b359d93a 100644 --- a/plugins/scaffolder/src/plugin.ts +++ b/plugins/scaffolder/src/plugin.ts @@ -20,7 +20,7 @@ import { EntityPicker } from './components/fields/EntityPicker/EntityPicker'; import { entityNamePickerValidation } from './components/fields/EntityNamePicker'; import { EntityNamePicker } from './components/fields/EntityNamePicker/EntityNamePicker'; import { OwnerPicker } from './components/fields/OwnerPicker/OwnerPicker'; -import { repoPickerValidation } from './components'; +import { repoPickerValidation } from './components/fields/RepoUrlPicker'; import { RepoUrlPicker } from './components/fields/RepoUrlPicker/RepoUrlPicker'; import { createScaffolderFieldExtension } from './extensions'; import { @@ -30,7 +30,6 @@ import { viewTechDocRouteRef, } from './routes'; import { - configApiRef, createApiFactory, createPlugin, createRoutableExtension, @@ -51,27 +50,17 @@ export const scaffolderPlugin = createPlugin({ createApiFactory({ api: scaffolderApiRef, deps: { - configApi: configApiRef, discoveryApi: discoveryApiRef, scmIntegrationsApi: scmIntegrationsApiRef, fetchApi: fetchApiRef, identityApi: identityApiRef, }, - factory: ({ - configApi, - discoveryApi, - scmIntegrationsApi, - fetchApi, - identityApi, - }) => + factory: ({ discoveryApi, scmIntegrationsApi, fetchApi, identityApi }) => new ScaffolderClient({ discoveryApi, scmIntegrationsApi, fetchApi, identityApi, - useLongPollingLogs: - configApi.getOptionalBoolean('scaffolder.useLongPollingLogs') ?? - false, }), }), ], From 270ee83613e4a31599b6da14713a1d2ff60aee50 Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Mon, 10 Oct 2022 12:08:16 +0200 Subject: [PATCH 127/278] refactor: change default page limit text Signed-off-by: Camila Belo --- .../SearchPagination/SearchPagination.stories.tsx | 8 ++++++-- .../SearchPagination/SearchPagination.test.tsx | 12 +++++++----- .../components/SearchPagination/SearchPagination.tsx | 2 +- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/plugins/search-react/src/components/SearchPagination/SearchPagination.stories.tsx b/plugins/search-react/src/components/SearchPagination/SearchPagination.stories.tsx index eca668d165..c23fb1e863 100644 --- a/plugins/search-react/src/components/SearchPagination/SearchPagination.stories.tsx +++ b/plugins/search-react/src/components/SearchPagination/SearchPagination.stories.tsx @@ -47,11 +47,15 @@ export const Default = () => { }; export const CustomPageLimitLabel = () => { - return ; + return ; }; export const CustomPageLimitText = () => { - return `${from}-${to}`} />; + return ( + `${from}-${to} of more than ${to}`} + /> + ); }; export const CustomPageLimitOptions = () => { diff --git a/plugins/search-react/src/components/SearchPagination/SearchPagination.test.tsx b/plugins/search-react/src/components/SearchPagination/SearchPagination.test.tsx index 723a8a0031..6e4abcdbda 100644 --- a/plugins/search-react/src/components/SearchPagination/SearchPagination.test.tsx +++ b/plugins/search-react/src/components/SearchPagination/SearchPagination.test.tsx @@ -47,7 +47,7 @@ describe('SearchPagination', () => { expect(screen.getByText('Results per page:')).toBeInTheDocument(); expect(screen.getByText('25')).toBeInTheDocument(); - expect(screen.getByText('1-25 of more than 25')).toBeInTheDocument(); + expect(screen.getByText('1-25')).toBeInTheDocument(); expect(screen.getByLabelText('Next page')).toBeEnabled(); expect(screen.getByLabelText('Previous page')).toBeDisabled(); }); @@ -88,12 +88,14 @@ describe('SearchPagination', () => { await renderWithEffects( - `${from}-${to}`} /> + `${from}-${to} of more than ${to}`} + /> , ); - expect(screen.getByText('1-25')).toBeInTheDocument(); + expect(screen.getByText('1-25 of more than 25')).toBeInTheDocument(); }); it('Accept custom page limit options', async () => { @@ -153,7 +155,7 @@ describe('SearchPagination', () => { await userEvent.click(screen.getByLabelText('Next page')); - expect(screen.getByText('51-75 of more than 75')).toBeInTheDocument(); + expect(screen.getByText('51-75')).toBeInTheDocument(); expect(query).toHaveBeenLastCalledWith( expect.objectContaining({ @@ -163,7 +165,7 @@ describe('SearchPagination', () => { await userEvent.click(screen.getByLabelText('Previous page')); - expect(screen.getByText('26-50 of more than 50')).toBeInTheDocument(); + expect(screen.getByText('26-50')).toBeInTheDocument(); expect(query).toHaveBeenLastCalledWith( expect.objectContaining({ diff --git a/plugins/search-react/src/components/SearchPagination/SearchPagination.tsx b/plugins/search-react/src/components/SearchPagination/SearchPagination.tsx index c0d1c127c8..e5807832e9 100644 --- a/plugins/search-react/src/components/SearchPagination/SearchPagination.tsx +++ b/plugins/search-react/src/components/SearchPagination/SearchPagination.tsx @@ -110,7 +110,7 @@ export const SearchPaginationBase = (props: SearchPaginationBaseProps) => { onPageCursorChange, pageLimit: rowsPerPage = 25, pageLimitLabel: labelRowsPerPage = 'Results per page:', - pageLimitText: labelDisplayedRows, + pageLimitText: labelDisplayedRows = ({ from, to }) => `${from}-${to}`, pageLimitOptions: rowsPerPageOptions, onPageLimitChange, ...rest From 77b9448291265464da86fc0802eceb71abbdbcf4 Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Mon, 10 Oct 2022 12:12:26 +0200 Subject: [PATCH 128/278] chore: change create app changeset to patch Signed-off-by: Camila Belo --- .changeset/silent-mice-brake.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/silent-mice-brake.md b/.changeset/silent-mice-brake.md index c8ebb28f40..fde02146c9 100644 --- a/.changeset/silent-mice-brake.md +++ b/.changeset/silent-mice-brake.md @@ -1,5 +1,5 @@ --- -'@backstage/create-app': minor +'@backstage/create-app': patch --- Add the new search pagination component to the search page template. From 0e14a26749e52d7122fa3bbf28969198182f312f Mon Sep 17 00:00:00 2001 From: Alex Crome Date: Mon, 10 Oct 2022 12:31:23 +0100 Subject: [PATCH 129/278] Updated Configuration definition docs Added sample for what `package.json` should look like when defining a `configSchema` Signed-off-by: Alex Crome --- docs/conf/defining.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/conf/defining.md b/docs/conf/defining.md index 6462f4f60a..29964dbcbc 100644 --- a/docs/conf/defining.md +++ b/docs/conf/defining.md @@ -23,6 +23,17 @@ Each package is searched for a schema at a single point of entry, a top-level inlined JSON schema, or a relative path to a schema file. Supported schema file formats are `.json` or `.d.ts`. +```jsonc title="package.json" +{ + // ... + "files": [ + // ... + "config.d.ts" + ], + "configSchema": "config.d.ts" +} +``` + > When defining a schema file, be sure to include the file in your > `package.json` > `"files"` field as well! From a64064f0d3e5e9ec19884d02a45c10bd5a0c0735 Mon Sep 17 00:00:00 2001 From: Morgan Date: Mon, 10 Oct 2022 15:31:43 +0200 Subject: [PATCH 130/278] add optional argument to createRouter to allow injection of CatalogClient to techdocs backend Signed-off-by: Morgan --- plugins/techdocs-backend/src/service/router.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/techdocs-backend/src/service/router.ts b/plugins/techdocs-backend/src/service/router.ts index ca887efce2..d02d787282 100644 --- a/plugins/techdocs-backend/src/service/router.ts +++ b/plugins/techdocs-backend/src/service/router.ts @@ -58,6 +58,7 @@ export type OutOfTheBoxDeploymentOptions = { cache: PluginCacheManager; docsBuildStrategy?: DocsBuildStrategy; buildLogTransport?: winston.transport; + catalogClient?: CatalogClient; }; /** @@ -74,6 +75,7 @@ export type RecommendedDeploymentOptions = { cache: PluginCacheManager; docsBuildStrategy?: DocsBuildStrategy; buildLogTransport?: winston.transport; + catalogClient?: CatalogClient; }; /** @@ -107,7 +109,7 @@ export async function createRouter( ): Promise { const router = Router(); const { publisher, config, logger, discovery } = options; - const catalogClient = new CatalogClient({ discoveryApi: discovery }); + const catalogClient = options.catalogClient ?? new CatalogClient({ discoveryApi: discovery }); const docsBuildStrategy = options.docsBuildStrategy ?? DefaultDocsBuildStrategy.fromConfig(config); const buildLogTransport = From 7ced1b4076bb06247030a162122c389d4558331f Mon Sep 17 00:00:00 2001 From: Morgan Date: Mon, 10 Oct 2022 15:39:43 +0200 Subject: [PATCH 131/278] add changeset and api-report Signed-off-by: Morgan --- .changeset/techdocs-olive-worms-yell.md | 5 +++++ plugins/techdocs-backend/api-report.md | 3 +++ 2 files changed, 8 insertions(+) create mode 100644 .changeset/techdocs-olive-worms-yell.md diff --git a/.changeset/techdocs-olive-worms-yell.md b/.changeset/techdocs-olive-worms-yell.md new file mode 100644 index 0000000000..cc72b9883b --- /dev/null +++ b/.changeset/techdocs-olive-worms-yell.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-techdocs-backend': minor +--- + +Add optional catalogClient argument to createRouter parameters diff --git a/plugins/techdocs-backend/api-report.md b/plugins/techdocs-backend/api-report.md index 57e5e5170f..1f6aa1d66a 100644 --- a/plugins/techdocs-backend/api-report.md +++ b/plugins/techdocs-backend/api-report.md @@ -6,6 +6,7 @@ /// import { CatalogApi } from '@backstage/catalog-client'; +import { CatalogClient } from '@backstage/catalog-client'; import { Config } from '@backstage/config'; import { DocumentCollatorFactory } from '@backstage/plugin-search-common'; import { Entity } from '@backstage/catalog-model'; @@ -79,6 +80,7 @@ export type OutOfTheBoxDeploymentOptions = { cache: PluginCacheManager; docsBuildStrategy?: DocsBuildStrategy; buildLogTransport?: winston.transport; + catalogClient?: CatalogClient; }; // @public @@ -90,6 +92,7 @@ export type RecommendedDeploymentOptions = { cache: PluginCacheManager; docsBuildStrategy?: DocsBuildStrategy; buildLogTransport?: winston.transport; + catalogClient?: CatalogClient; }; // @public From e17332b2911880555b635981e7e59daf667a8ec0 Mon Sep 17 00:00:00 2001 From: MT Lewis Date: Mon, 10 Oct 2022 15:35:16 +0100 Subject: [PATCH 132/278] docs: fix toQuery method in custom rules permissions docs Signed-off-by: MT Lewis --- docs/permissions/custom-rules.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/permissions/custom-rules.md b/docs/permissions/custom-rules.md index 1408d732d3..bef1c0941f 100644 --- a/docs/permissions/custom-rules.md +++ b/docs/permissions/custom-rules.md @@ -30,7 +30,7 @@ export const isInSystemRule = createCatalogPermissionRule({ }, toQuery: (systemRef: string) => ({ key: 'relations.partOf', - value: systemRef, + values: [systemRef], }), }); From 8006f8a602bb862c818715b8596d627fec7f296f Mon Sep 17 00:00:00 2001 From: Eric Peterson Date: Mon, 10 Oct 2022 18:02:33 +0200 Subject: [PATCH 133/278] Tag indexing logs with document type Signed-off-by: Eric Peterson --- .changeset/search-konstiga-fika-reglar.md | 9 +++++++++ .github/vale/Vocab/Backstage/accept.txt | 1 + .../adr-backend/src/search/DefaultAdrCollatorFactory.ts | 2 +- .../src/engines/ElasticSearchSearchEngineIndexer.ts | 2 +- plugins/search-backend-node/src/IndexBuilder.ts | 9 +++++---- .../src/collators/NewlineDelimitedJsonCollatorFactory.ts | 2 +- .../src/search/StackOverflowQuestionsCollatorFactory.ts | 2 +- .../src/search/DefaultTechDocsCollatorFactory.ts | 2 +- 8 files changed, 20 insertions(+), 9 deletions(-) create mode 100644 .changeset/search-konstiga-fika-reglar.md diff --git a/.changeset/search-konstiga-fika-reglar.md b/.changeset/search-konstiga-fika-reglar.md new file mode 100644 index 0000000000..fb79a8ad6f --- /dev/null +++ b/.changeset/search-konstiga-fika-reglar.md @@ -0,0 +1,9 @@ +--- +'@backstage/plugin-adr-backend': patch +'@backstage/plugin-search-backend-module-elasticsearch': patch +'@backstage/plugin-search-backend-node': patch +'@backstage/plugin-stack-overflow-backend': patch +'@backstage/plugin-techdocs-backend': patch +--- + +In order to improve the debuggability of the search indexing process, messages logged during indexing are now tagged with a `documentType` whose value corresponds to the `type` being indexed. diff --git a/.github/vale/Vocab/Backstage/accept.txt b/.github/vale/Vocab/Backstage/accept.txt index ae94912f38..6175eb96b5 100644 --- a/.github/vale/Vocab/Backstage/accept.txt +++ b/.github/vale/Vocab/Backstage/accept.txt @@ -68,6 +68,7 @@ dataflow dayjs debounce Debounce +debuggability declaratively deduplicated deps diff --git a/plugins/adr-backend/src/search/DefaultAdrCollatorFactory.ts b/plugins/adr-backend/src/search/DefaultAdrCollatorFactory.ts index 21f0f1945f..78f6e0226e 100644 --- a/plugins/adr-backend/src/search/DefaultAdrCollatorFactory.ts +++ b/plugins/adr-backend/src/search/DefaultAdrCollatorFactory.ts @@ -113,7 +113,7 @@ export class DefaultAdrCollatorFactory implements DocumentCollatorFactory { this.catalogClient = options.catalogClient ?? new CatalogClient({ discoveryApi: options.discovery }); - this.logger = options.logger; + this.logger = options.logger.child({ documentType: this.type }); this.parser = options.parser ?? createMadrParser(); this.reader = options.reader; this.scmIntegrations = ScmIntegrations.fromConfig(options.config); diff --git a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts index c81950ea41..e32c49559d 100644 --- a/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts +++ b/plugins/search-backend-module-elasticsearch/src/engines/ElasticSearchSearchEngineIndexer.ts @@ -63,7 +63,7 @@ export class ElasticSearchSearchEngineIndexer extends BatchSearchEngineIndexer { constructor(options: ElasticSearchSearchEngineIndexerOptions) { super({ batchSize: options.batchSize }); - this.logger = options.logger; + this.logger = options.logger.child({ documentType: options.type }); this.startTimestamp = process.hrtime(); this.type = options.type; this.indexPrefix = options.indexPrefix; diff --git a/plugins/search-backend-node/src/IndexBuilder.ts b/plugins/search-backend-node/src/IndexBuilder.ts index 0ba9ba0059..907519f289 100644 --- a/plugins/search-backend-node/src/IndexBuilder.ts +++ b/plugins/search-backend-node/src/IndexBuilder.ts @@ -112,13 +112,14 @@ export class IndexBuilder { }); Object.keys(this.collators).forEach(type => { + const taskLogger = this.logger.child({ documentType: type }); scheduler.addToSchedule({ id: `search_index_${type.replace('-', '_').toLocaleLowerCase('en-US')}`, scheduledRunner: this.collators[type].schedule, task: async () => { // Instantiate the collator. const collator = await this.collators[type].factory.getCollator(); - this.logger.info( + taskLogger.info( `Collating documents for ${type} via ${this.collators[type].factory.constructor.name}`, ); @@ -128,7 +129,7 @@ export class IndexBuilder { .concat(this.decorators[type] || []) .map(async factory => { const decorator = await factory.getDecorator(); - this.logger.info( + taskLogger.info( `Attached decorator via ${factory.constructor.name} to ${type} index pipeline.`, ); return decorator; @@ -144,13 +145,13 @@ export class IndexBuilder { [collator, ...decorators, indexer], (error: NodeJS.ErrnoException | null) => { if (error) { - this.logger.error( + taskLogger.error( `Collating documents for ${type} failed: ${error}`, ); reject(error); } else { // Signal index pipeline completion! - this.logger.info(`Collating documents for ${type} succeeded`); + taskLogger.info(`Collating documents for ${type} succeeded`); resolve(); } }, diff --git a/plugins/search-backend-node/src/collators/NewlineDelimitedJsonCollatorFactory.ts b/plugins/search-backend-node/src/collators/NewlineDelimitedJsonCollatorFactory.ts index fde6b9412a..9d922aace6 100644 --- a/plugins/search-backend-node/src/collators/NewlineDelimitedJsonCollatorFactory.ts +++ b/plugins/search-backend-node/src/collators/NewlineDelimitedJsonCollatorFactory.ts @@ -93,7 +93,7 @@ export class NewlineDelimitedJsonCollatorFactory options.type, options.searchPattern, options.reader, - options.logger, + options.logger.child({ documentType: options.type }), options.visibilityPermission, ); } diff --git a/plugins/stack-overflow-backend/src/search/StackOverflowQuestionsCollatorFactory.ts b/plugins/stack-overflow-backend/src/search/StackOverflowQuestionsCollatorFactory.ts index 688f54f005..1aa0e5d300 100644 --- a/plugins/stack-overflow-backend/src/search/StackOverflowQuestionsCollatorFactory.ts +++ b/plugins/stack-overflow-backend/src/search/StackOverflowQuestionsCollatorFactory.ts @@ -76,7 +76,7 @@ export class StackOverflowQuestionsCollatorFactory this.apiKey = options.apiKey; this.maxPage = options.maxPage; this.requestParams = options.requestParams; - this.logger = options.logger; + this.logger = options.logger.child({ documentType: this.type }); } static fromConfig( diff --git a/plugins/techdocs-backend/src/search/DefaultTechDocsCollatorFactory.ts b/plugins/techdocs-backend/src/search/DefaultTechDocsCollatorFactory.ts index d458eeaba0..aaddb4fa51 100644 --- a/plugins/techdocs-backend/src/search/DefaultTechDocsCollatorFactory.ts +++ b/plugins/techdocs-backend/src/search/DefaultTechDocsCollatorFactory.ts @@ -90,7 +90,7 @@ export class DefaultTechDocsCollatorFactory implements DocumentCollatorFactory { this.discovery = options.discovery; this.locationTemplate = options.locationTemplate || '/docs/:namespace/:kind/:name/:path'; - this.logger = options.logger; + this.logger = options.logger.child({ documentType: this.type }); this.catalogClient = options.catalogClient || new CatalogClient({ discoveryApi: options.discovery }); From ea7150ed4cea7be0354894a912b4b2cbde3f6ae2 Mon Sep 17 00:00:00 2001 From: marcofaggian Date: Tue, 11 Oct 2022 00:34:29 +0200 Subject: [PATCH 134/278] feat(microsite): added "new" ribbon to plugins Signed-off-by: marcofaggian --- microsite/pages/en/plugins.js | 22 +++++++++++++++++++++- microsite/static/css/plugins.css | 29 +++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/microsite/pages/en/plugins.js b/microsite/pages/en/plugins.js index de336444ab..3e7868cd30 100644 --- a/microsite/pages/en/plugins.js +++ b/microsite/pages/en/plugins.js @@ -16,11 +16,24 @@ const { const pluginsDirectory = require('path').join(process.cwd(), 'data/plugins'); const pluginMetadata = fs .readdirSync(pluginsDirectory) - .map(file => yaml.load(fs.readFileSync(`./data/plugins/${file}`, 'utf8'))) + .map(file => { + const fileContent = fs.readFileSync(`./data/plugins/${file}`, 'utf8'); + let metadata = yaml.load(fileContent); + + const gitIsoDate = require('child_process') + .execSync( + `git log -1 --format="%ai" --reverse ./data/plugins/${file} | cat -`, + ) + .toString(); + + return { ...metadata, date: new Date(gitIsoDate) }; + }) .sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase())); const truncate = text => text.length > 170 ? text.substr(0, 170) + '...' : text; +const newForDays = 100; + const addPluginDocsLink = '/docs/plugins/add-to-marketplace'; const defaultIconUrl = 'img/logo-gradient-on-dark.svg'; @@ -100,8 +113,15 @@ const Plugins = () => ( authorUrl, documentation, category, + date, }) => (

+ {Math.trunc((Date.now() - date) / (1000 * 60 * 60 * 24)) < + newForDays && ( +
+ NEW +
+ )}
{title} diff --git a/microsite/static/css/plugins.css b/microsite/static/css/plugins.css index b9aebfa84c..55a0c6df40 100644 --- a/microsite/static/css/plugins.css +++ b/microsite/static/css/plugins.css @@ -4,6 +4,7 @@ padding: 16px; display: flex; flex-direction: column; + position: relative; } .PluginGrid { @@ -141,3 +142,31 @@ #add-plugin-card { border: 1px solid #69ddc7; } + +/* RIBBON */ + +.ribbon { + width: 80px; + height: 80px; + overflow: hidden; + position: absolute; +} +.ribbon span { + position: absolute; + display: block; + width: 140px; + padding: 4px 0; + background-color: rgb(54, 186, 162, 0.85); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.1); + color: #fff; + text-align: center; +} +.ribbon-top-right { + top: 0; + right: 0; +} +.ribbon-top-right span { + left: -17px; + top: 11px; + transform: rotate(45deg); +} From 23f9199a0f30ad13340699fedd9875b38c0883bb Mon Sep 17 00:00:00 2001 From: Patrick Jungermann Date: Tue, 11 Oct 2022 01:48:29 +0200 Subject: [PATCH 135/278] chore(catalog/bitbucket): Deprecate catalog-backend-module-bitbucket Deprecate `@backstage/plugin-catalog-backend-module-bitbucket`. Please migrate to `@backstage/plugin-catalog-backend-module-bitbucket-cloud` or `@backstage/plugin-catalog-backend-module-bitbucket-server` instead. Signed-off-by: Patrick Jungermann --- .changeset/fresh-donuts-arrive.md | 8 ++++++++ plugins/catalog-backend-module-bitbucket/api-report.md | 4 ++-- plugins/catalog-backend-module-bitbucket/package.json | 1 + .../src/BitbucketDiscoveryProcessor.ts | 8 +++++++- .../src/lib/BitbucketRepositoryParser.ts | 1 + 5 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 .changeset/fresh-donuts-arrive.md diff --git a/.changeset/fresh-donuts-arrive.md b/.changeset/fresh-donuts-arrive.md new file mode 100644 index 0000000000..55a85533b8 --- /dev/null +++ b/.changeset/fresh-donuts-arrive.md @@ -0,0 +1,8 @@ +--- +'@backstage/plugin-catalog-backend-module-bitbucket': patch +--- + +Deprecate `@backstage/plugin-catalog-backend-module-bitbucket`. + +Please migrate to `@backstage/plugin-catalog-backend-module-bitbucket-cloud` +or `@backstage/plugin-catalog-backend-module-bitbucket-server` instead. diff --git a/plugins/catalog-backend-module-bitbucket/api-report.md b/plugins/catalog-backend-module-bitbucket/api-report.md index 34acd6e76d..053c6040a4 100644 --- a/plugins/catalog-backend-module-bitbucket/api-report.md +++ b/plugins/catalog-backend-module-bitbucket/api-report.md @@ -12,7 +12,7 @@ import { LocationSpec } from '@backstage/plugin-catalog-backend'; import { Logger } from 'winston'; import { ScmIntegrationRegistry } from '@backstage/integration'; -// @public (undocumented) +// @public @deprecated (undocumented) export class BitbucketDiscoveryProcessor implements CatalogProcessor { constructor(options: { integrations: ScmIntegrationRegistry; @@ -37,7 +37,7 @@ export class BitbucketDiscoveryProcessor implements CatalogProcessor { ): Promise; } -// @public +// @public @deprecated export type BitbucketRepositoryParser = (options: { integration: BitbucketIntegration; target: string; diff --git a/plugins/catalog-backend-module-bitbucket/package.json b/plugins/catalog-backend-module-bitbucket/package.json index ff0594154d..61657cfafd 100644 --- a/plugins/catalog-backend-module-bitbucket/package.json +++ b/plugins/catalog-backend-module-bitbucket/package.json @@ -2,6 +2,7 @@ "name": "@backstage/plugin-catalog-backend-module-bitbucket", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket", "version": "0.2.4-next.1", + "deprecated": true, "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket/src/BitbucketDiscoveryProcessor.ts b/plugins/catalog-backend-module-bitbucket/src/BitbucketDiscoveryProcessor.ts index 14bf90ee62..6924765483 100644 --- a/plugins/catalog-backend-module-bitbucket/src/BitbucketDiscoveryProcessor.ts +++ b/plugins/catalog-backend-module-bitbucket/src/BitbucketDiscoveryProcessor.ts @@ -41,7 +41,10 @@ import { const DEFAULT_BRANCH = 'master'; const DEFAULT_CATALOG_LOCATION = '/catalog-info.yaml'; -/** @public */ +/** + * @public + * @deprecated Please migrate to `@backstage/plugin-catalog-backend-module-bitbucket-cloud` or `@backstage/plugin-catalog-backend-module-bitbucket-server` instead. + */ export class BitbucketDiscoveryProcessor implements CatalogProcessor { private readonly integrations: ScmIntegrationRegistry; private readonly parser: BitbucketRepositoryParser; @@ -70,6 +73,9 @@ export class BitbucketDiscoveryProcessor implements CatalogProcessor { this.integrations = options.integrations; this.parser = options.parser || defaultRepositoryParser; this.logger = options.logger; + this.logger.warn( + 'Please migrate to `@backstage/plugin-catalog-backend-module-bitbucket-cloud` or `@backstage/plugin-catalog-backend-module-bitbucket-server` instead.', + ); } getProcessorName(): string { diff --git a/plugins/catalog-backend-module-bitbucket/src/lib/BitbucketRepositoryParser.ts b/plugins/catalog-backend-module-bitbucket/src/lib/BitbucketRepositoryParser.ts index 57a162e1e4..97225e2579 100644 --- a/plugins/catalog-backend-module-bitbucket/src/lib/BitbucketRepositoryParser.ts +++ b/plugins/catalog-backend-module-bitbucket/src/lib/BitbucketRepositoryParser.ts @@ -26,6 +26,7 @@ import { Logger } from 'winston'; * results. * * @public + * @deprecated Please migrate to `@backstage/plugin-catalog-backend-module-bitbucket-cloud` or `@backstage/plugin-catalog-backend-module-bitbucket-server` instead. */ export type BitbucketRepositoryParser = (options: { integration: BitbucketIntegration; From 098f487e59d5d000e4a8752a7bcc1b0fa071d448 Mon Sep 17 00:00:00 2001 From: Camila Belo Date: Tue, 11 Oct 2022 09:15:14 +0200 Subject: [PATCH 136/278] refactor: add results total prop Signed-off-by: Camila Belo --- .changeset/search-days-pull.md | 8 +-- plugins/search-react/api-report.md | 16 +++--- .../SearchPagination.stories.tsx | 6 +-- .../SearchPagination.test.tsx | 18 +++++-- .../SearchPagination/SearchPagination.tsx | 52 ++++++++++++------- 5 files changed, 63 insertions(+), 37 deletions(-) diff --git a/.changeset/search-days-pull.md b/.changeset/search-days-pull.md index 03000e4870..45d59be514 100644 --- a/.changeset/search-days-pull.md +++ b/.changeset/search-days-pull.md @@ -33,10 +33,10 @@ const SearchPage = () => { diff --git a/plugins/search-react/api-report.md b/plugins/search-react/api-report.md index 57c1791d9a..ef3e8b19bd 100644 --- a/plugins/search-react/api-report.md +++ b/plugins/search-react/api-report.md @@ -222,13 +222,14 @@ export const SearchPaginationBase: ( // @public export type SearchPaginationBaseProps = { className?: string; - pageCursor?: string; - onPageCursorChange?: (pageCursor: string) => void; - pageLimit?: number; - pageLimitLabel?: ReactNode; - pageLimitText?: SearchPaginationLimitText; - pageLimitOptions?: SearchPaginationLimitOption[]; - onPageLimitChange?: (value: number) => void; + total?: number; + cursor?: string; + onCursorChange?: (pageCursor: string) => void; + limit?: number; + limitLabel?: ReactNode; + limitText?: SearchPaginationLimitText; + limitOptions?: SearchPaginationLimitOption[]; + onLimitChange?: (value: number) => void; }; // @public @@ -247,6 +248,7 @@ export type SearchPaginationLimitText = (params: { from: number; to: number; page: number; + count: number; }) => ReactNode; // @public diff --git a/plugins/search-react/src/components/SearchPagination/SearchPagination.stories.tsx b/plugins/search-react/src/components/SearchPagination/SearchPagination.stories.tsx index c23fb1e863..4e72c0fa25 100644 --- a/plugins/search-react/src/components/SearchPagination/SearchPagination.stories.tsx +++ b/plugins/search-react/src/components/SearchPagination/SearchPagination.stories.tsx @@ -47,17 +47,17 @@ export const Default = () => { }; export const CustomPageLimitLabel = () => { - return ; + return ; }; export const CustomPageLimitText = () => { return ( `${from}-${to} of more than ${to}`} + limitText={({ from, to }) => `${from}-${to} of more than ${to}`} /> ); }; export const CustomPageLimitOptions = () => { - return ; + return ; }; diff --git a/plugins/search-react/src/components/SearchPagination/SearchPagination.test.tsx b/plugins/search-react/src/components/SearchPagination/SearchPagination.test.tsx index 6e4abcdbda..d2ecc55d31 100644 --- a/plugins/search-react/src/components/SearchPagination/SearchPagination.test.tsx +++ b/plugins/search-react/src/components/SearchPagination/SearchPagination.test.tsx @@ -76,7 +76,7 @@ describe('SearchPagination', () => { await renderWithEffects( - + , ); @@ -84,12 +84,24 @@ describe('SearchPagination', () => { expect(screen.getByText(label)).toBeInTheDocument(); }); + it('Show the total in text', async () => { + await renderWithEffects( + + + + + , + ); + + expect(screen.getByText('of 100')).toBeInTheDocument(); + }); + it('Accept custom page limit text', async () => { await renderWithEffects( `${from}-${to} of more than ${to}`} + limitText={({ from, to }) => `${from}-${to} of more than ${to}`} /> , @@ -102,7 +114,7 @@ describe('SearchPagination', () => { await renderWithEffects( - + , ); diff --git a/plugins/search-react/src/components/SearchPagination/SearchPagination.tsx b/plugins/search-react/src/components/SearchPagination/SearchPagination.tsx index e5807832e9..34b6deaff5 100644 --- a/plugins/search-react/src/components/SearchPagination/SearchPagination.tsx +++ b/plugins/search-react/src/components/SearchPagination/SearchPagination.tsx @@ -48,13 +48,14 @@ export type SearchPaginationLimitOption< >; /** - * A page limit text, this function is called with a "\{ from, to, page \}" object. + * A page limit text, this function is called with a "\{ from, to, page, count \}" object. * @public */ export type SearchPaginationLimitText = (params: { from: number; to: number; page: number; + count: number; }) => ReactNode; /** @@ -66,37 +67,46 @@ export type SearchPaginationBaseProps = { * The component class name. */ className?: string; + /** + * The total number of results. + * For an unknown number of items, provide -1. + * Defaults to -1. + */ + total?: number; /** * The cursor for the current page. */ - pageCursor?: string; + cursor?: string; /** * Callback fired when the current page cursor is changed. */ - onPageCursorChange?: (pageCursor: string) => void; + onCursorChange?: (pageCursor: string) => void; /** * The limit of results per page. * Set -1 to display all the results. */ - pageLimit?: number; + limit?: number; /** * Customize the results per page label. + * Defaults to "Results per page:". */ - pageLimitLabel?: ReactNode; + limitLabel?: ReactNode; /** * Customize the results per page text. + * Defaults to "(\{ from, to, count \}) =\> count \> 0 ? `of $\{count\}` : `$\{from\}-$\{to\}`". */ - pageLimitText?: SearchPaginationLimitText; + limitText?: SearchPaginationLimitText; /** * Options for setting how many results show per page. * If less than two options are available, no select field will be displayed. * Use -1 for the value with a custom label to show all the results. + * Defaults to [10, 25, 50, 100]. */ - pageLimitOptions?: SearchPaginationLimitOption[]; + limitOptions?: SearchPaginationLimitOption[]; /** * Callback fired when the number of results per page is changed. */ - onPageLimitChange?: (value: number) => void; + onLimitChange?: (value: number) => void; }; /** @@ -106,13 +116,15 @@ export type SearchPaginationBaseProps = { */ export const SearchPaginationBase = (props: SearchPaginationBaseProps) => { const { - pageCursor, - onPageCursorChange, - pageLimit: rowsPerPage = 25, - pageLimitLabel: labelRowsPerPage = 'Results per page:', - pageLimitText: labelDisplayedRows = ({ from, to }) => `${from}-${to}`, - pageLimitOptions: rowsPerPageOptions, - onPageLimitChange, + total: count = -1, + cursor: pageCursor, + onCursorChange: onPageCursorChange, + limit: rowsPerPage = 25, + limitLabel: labelRowsPerPage = 'Results per page:', + limitText: labelDisplayedRows = ({ from, to }) => + count > 0 ? `of ${count}` : `${from}-${to}`, + limitOptions: rowsPerPageOptions, + onLimitChange: onPageLimitChange, ...rest } = props; @@ -137,7 +149,7 @@ export const SearchPaginationBase = (props: SearchPaginationBaseProps) => { { return ( ); }; From 847eb6fdcee58624b6e6ddee0348d2d5bbed3de2 Mon Sep 17 00:00:00 2001 From: Morgan Date: Tue, 11 Oct 2022 09:45:50 +0200 Subject: [PATCH 137/278] format and add backticks to changeset file Signed-off-by: Morgan --- .changeset/techdocs-olive-worms-yell.md | 2 +- plugins/techdocs-backend/src/service/router.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.changeset/techdocs-olive-worms-yell.md b/.changeset/techdocs-olive-worms-yell.md index cc72b9883b..66b205fc19 100644 --- a/.changeset/techdocs-olive-worms-yell.md +++ b/.changeset/techdocs-olive-worms-yell.md @@ -2,4 +2,4 @@ '@backstage/plugin-techdocs-backend': minor --- -Add optional catalogClient argument to createRouter parameters +Add optional `catalogClient` argument to `createRoute` parameters diff --git a/plugins/techdocs-backend/src/service/router.ts b/plugins/techdocs-backend/src/service/router.ts index d02d787282..855d8b02f4 100644 --- a/plugins/techdocs-backend/src/service/router.ts +++ b/plugins/techdocs-backend/src/service/router.ts @@ -109,7 +109,8 @@ export async function createRouter( ): Promise { const router = Router(); const { publisher, config, logger, discovery } = options; - const catalogClient = options.catalogClient ?? new CatalogClient({ discoveryApi: discovery }); + const catalogClient = + options.catalogClient ?? new CatalogClient({ discoveryApi: discovery }); const docsBuildStrategy = options.docsBuildStrategy ?? DefaultDocsBuildStrategy.fromConfig(config); const buildLogTransport = From dff3ce6908e2d95a8c51c80a100ef255231fe8fa Mon Sep 17 00:00:00 2001 From: Axel Hecht Date: Tue, 11 Oct 2022 10:30:44 +0200 Subject: [PATCH 138/278] Add Feature Flags to Plugins navigation on microsite. Signed-off-by: Axel Hecht --- microsite/sidebars.json | 1 + 1 file changed, 1 insertion(+) diff --git a/microsite/sidebars.json b/microsite/sidebars.json index a93e148317..bf6b036daf 100644 --- a/microsite/sidebars.json +++ b/microsite/sidebars.json @@ -226,6 +226,7 @@ "plugins/composability", "plugins/customization", "plugins/analytics", + "plugins/feature-flags", { "type": "subcategory", "label": "Backends and APIs", From 8749df3d028ceebb22cfec5cf31606ca970c7284 Mon Sep 17 00:00:00 2001 From: Patrick Jungermann Date: Fri, 7 Oct 2022 13:56:34 +0200 Subject: [PATCH 139/278] feat(catalog/github): Add option to configure schedule via `app-config.yaml` Relates-to: PR #13859 Signed-off-by: Patrick Jungermann --- .changeset/famous-ligers-repair.md | 8 + docs/integrations/github/discovery.md | 35 +- .../api-report.md | 4 +- .../catalog-backend-module-github/config.d.ts | 10 + .../package.json | 3 +- .../providers/GitHubEntityProvider.test.ts | 305 +++++++++++------- .../src/providers/GitHubEntityProvider.ts | 29 +- .../GitHubEntityProviderConfig.test.ts | 38 ++- .../providers/GitHubEntityProviderConfig.ts | 11 + yarn.lock | 1 + 10 files changed, 309 insertions(+), 135 deletions(-) create mode 100644 .changeset/famous-ligers-repair.md diff --git a/.changeset/famous-ligers-repair.md b/.changeset/famous-ligers-repair.md new file mode 100644 index 0000000000..bc3780cba7 --- /dev/null +++ b/.changeset/famous-ligers-repair.md @@ -0,0 +1,8 @@ +--- +'@backstage/plugin-catalog-backend-module-github': patch +--- + +`GitHubEntityProvider`: Add option to configure schedule via `app-config.yaml` instead of in code. + +Please find how to configure the schedule at the config at +https://backstage.io/docs/integrations/github/discovery diff --git a/docs/integrations/github/discovery.md b/docs/integrations/github/discovery.md index 9b60b41682..26cd660cde 100644 --- a/docs/integrations/github/discovery.md +++ b/docs/integrations/github/discovery.md @@ -39,10 +39,13 @@ And then add the entity provider to your catalog builder: + builder.addEntityProvider( + GitHubEntityProvider.fromConfig(env.config, { + logger: env.logger, ++ // optional: alternatively, use scheduler with schedule defined in app-config.yaml + schedule: env.scheduler.createScheduledTaskRunner({ + frequency: { minutes: 30 }, + timeout: { minutes: 3 }, + }), ++ // optional: alternatively, use schedule ++ scheduler: env.scheduler, + }), + ); @@ -68,6 +71,11 @@ catalog: filters: branch: 'main' # string repository: '.*' # Regex + schedule: # optional; same options as in TaskScheduleDefinition + # supports cron, ISO duration, "human duration" as used in code + frequency: { minutes: 30 } + # supports ISO duration, "human duration" as used in code + timeout: { minutes: 3 } customProviderId: organization: 'new-org' # string catalogPath: '/custom/path/catalog-info.yaml' # string @@ -111,26 +119,35 @@ This provider supports multiple organizations via unique provider IDs. Default: `/catalog-info.yaml`. Path where to look for `catalog-info.yaml` files. You can use wildcards - `*` or `**` - to search the path and/or the filename -- **filters** _(optional)_: - - **branch** _(optional)_: +- **`filters`** _(optional)_: + - **`branch`** _(optional)_: String used to filter results based on the branch name. - - **repository** _(optional)_: + - **`repository`** _(optional)_: Regular expression used to filter results based on the repository name. - - **topic** _(optional)_: + - **`topic`** _(optional)_: Both of the filters below may be used at the same time but the exclusion filter has the highest priority. In the example above, a repository with the `backstage-include` topic would still be excluded if it were also carrying the `experiments` topic. - - **include** _(optional)_: + - **`include`** _(optional)_: An array of strings used to filter in results based on their associated GitHub topics. If configured, only repositories with one (or more) topic(s) present in the inclusion filter will be ingested - - **exclude** _(optional)_: + - **`exclude`** _(optional)_: An array of strings used to filter out results based on their associated GitHub topics. If configured, all repositories _except_ those with one (or more) topics(s) present in the exclusion filter will be ingested. -- **organization**: +- **`host`** _(optional)_: + The hostname of your GitHub Enterprise instance. It must match a host defined in [integrations.github](locations.md). +- **`organization`**: Name of your organization account/workspace. If you want to add multiple organizations, you need to add one provider config each. -- **host** _(optional)_: - The hostname of your GitHub Enterprise instance. It must match a host defined in [integrations.github](locations.md). +- **`schedule`** _(optional)_: + - **`frequency`**: + How often you want the task to run. The system does its best to avoid overlapping invocations. + - **`timeout`**: + The maximum amount of time that a single task invocation can take. + - **`initialDelay`** _(optional)_: + The amount of time that should pass before the first invocation happens. + - **`scope`** _(optional)_: + `'global'` or `'local'`. Sets the scope of concurrency control. ## GitHub API Rate Limits diff --git a/plugins/catalog-backend-module-github/api-report.md b/plugins/catalog-backend-module-github/api-report.md index c89a34c259..86fc94a532 100644 --- a/plugins/catalog-backend-module-github/api-report.md +++ b/plugins/catalog-backend-module-github/api-report.md @@ -16,6 +16,7 @@ import { GitHubIntegrationConfig } from '@backstage/integration'; import { LocationSpec } from '@backstage/plugin-catalog-backend'; import { Logger } from 'winston'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; +import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { ScmIntegrationRegistry } from '@backstage/integration'; import { ScmLocationAnalyzer } from '@backstage/plugin-catalog-backend'; import { TaskRunner } from '@backstage/backend-tasks'; @@ -55,7 +56,8 @@ export class GitHubEntityProvider implements EntityProvider { config: Config, options: { logger: Logger; - schedule: TaskRunner; + schedule?: TaskRunner; + scheduler?: PluginTaskScheduler; }, ): GitHubEntityProvider[]; // (undocumented) diff --git a/plugins/catalog-backend-module-github/config.d.ts b/plugins/catalog-backend-module-github/config.d.ts index 1dcd49ea4e..8648490001 100644 --- a/plugins/catalog-backend-module-github/config.d.ts +++ b/plugins/catalog-backend-module-github/config.d.ts @@ -14,6 +14,8 @@ * limitations under the License. */ +import { TaskScheduleDefinitionConfig } from '@backstage/backend-tasks'; + export interface Config { catalog?: { processors?: { @@ -103,6 +105,10 @@ export interface Config { exclude?: string[]; }; }; + /** + * (Optional) TaskScheduleDefinition for the refresh. + */ + schedule?: TaskScheduleDefinitionConfig; } | Record< string, @@ -156,6 +162,10 @@ export interface Config { exclude?: string[]; }; }; + /** + * (Optional) TaskScheduleDefinition for the refresh. + */ + schedule?: TaskScheduleDefinitionConfig; } >; }; diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json index 1fb82a648a..86433d5c73 100644 --- a/plugins/catalog-backend-module-github/package.json +++ b/plugins/catalog-backend-module-github/package.json @@ -56,7 +56,8 @@ "devDependencies": { "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", - "@types/lodash": "^4.14.151" + "@types/lodash": "^4.14.151", + "luxon": "^3.0.0" }, "files": [ "dist", diff --git a/plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.test.ts b/plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.test.ts index 63fb77288b..b2078172e9 100644 --- a/plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.test.ts +++ b/plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.test.ts @@ -15,7 +15,11 @@ */ import { getVoidLogger } from '@backstage/backend-common'; -import { TaskInvocationDefinition, TaskRunner } from '@backstage/backend-tasks'; +import { + PluginTaskScheduler, + TaskInvocationDefinition, + TaskRunner, +} from '@backstage/backend-tasks'; import { ConfigReader } from '@backstage/config'; import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; import { GitHubEntityProvider } from './GitHubEntityProvider'; @@ -381,132 +385,201 @@ describe('GitHubEntityProvider', () => { entities: expectedEntities, }); }); -}); -it('apply full update on scheduled execution with topic exclusion taking priority over topic inclusion', async () => { - const config = new ConfigReader({ - catalog: { - providers: { - github: { - myProvider: { - organization: 'test-org', - catalogPath: 'custom/path/catalog-custom.yaml', - filters: { - branch: 'main', - repository: 'test-.*', - topic: { - exclude: ['backstage-exclude'], - include: ['backstage-include'], + it('apply full update on scheduled execution with topic exclusion taking priority over topic inclusion', async () => { + const config = new ConfigReader({ + catalog: { + providers: { + github: { + myProvider: { + organization: 'test-org', + catalogPath: 'custom/path/catalog-custom.yaml', + filters: { + branch: 'main', + repository: 'test-.*', + topic: { + exclude: ['backstage-exclude'], + include: ['backstage-include'], + }, }, }, }, }, }, - }, + }); + const schedule = new PersistingTaskRunner(); + const entityProviderConnection: EntityProviderConnection = { + applyMutation: jest.fn(), + refresh: jest.fn(), + }; + + const provider = GitHubEntityProvider.fromConfig(config, { + logger, + schedule, + })[0]; + + const mockGetOrganizationRepositories = jest.spyOn( + helpers, + 'getOrganizationRepositories', + ); + + mockGetOrganizationRepositories.mockReturnValue( + Promise.resolve({ + repositories: [ + { + name: 'test-repo', + url: 'https://github.com/test-org/test-repo', + repositoryTopics: { + nodes: [ + { + topic: { name: 'backstage-include' }, + }, + ], + }, + isArchived: false, + defaultBranchRef: { + name: 'main', + }, + }, + { + name: 'test-repo-2', + url: 'https://github.com/test-org/test-repo-2', + repositoryTopics: { + nodes: [ + { + topic: { name: 'backstage-include' }, + }, + { + topic: { name: 'backstage-exclude' }, + }, + ], + }, + isArchived: false, + defaultBranchRef: { + name: 'main', + }, + }, + { + name: 'test-repo-3', + url: 'https://github.com/test-org/test-repo-3', + repositoryTopics: { + nodes: [ + { + topic: { name: 'backstage-exclude' }, + }, + ], + }, + isArchived: false, + defaultBranchRef: { + name: 'main', + }, + }, + ], + }), + ); + + await provider.connect(entityProviderConnection); + + const taskDef = schedule.getTasks()[0]; + expect(taskDef.id).toEqual('github-provider:myProvider:refresh'); + await (taskDef.fn as () => Promise)(); + + const url = `https://github.com/test-org/test-repo/blob/main/custom/path/catalog-custom.yaml`; + const expectedEntities = [ + { + entity: { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Location', + metadata: { + annotations: { + 'backstage.io/managed-by-location': `url:${url}`, + 'backstage.io/managed-by-origin-location': `url:${url}`, + }, + name: 'generated-5e4b9498097f15434e88c477cfba6c079aa8ca7f', + }, + spec: { + presence: 'optional', + target: `${url}`, + type: 'url', + }, + }, + locationKey: 'github-provider:myProvider', + }, + ]; + + expect(entityProviderConnection.applyMutation).toHaveBeenCalledTimes(1); + expect(entityProviderConnection.applyMutation).toHaveBeenCalledWith({ + type: 'full', + entities: expectedEntities, + }); }); - const schedule = new PersistingTaskRunner(); - const entityProviderConnection: EntityProviderConnection = { - applyMutation: jest.fn(), - refresh: jest.fn(), - }; - const provider = GitHubEntityProvider.fromConfig(config, { - logger, - schedule, - })[0]; - - const mockGetOrganizationRepositories = jest.spyOn( - helpers, - 'getOrganizationRepositories', - ); - - mockGetOrganizationRepositories.mockReturnValue( - Promise.resolve({ - repositories: [ - { - name: 'test-repo', - url: 'https://github.com/test-org/test-repo', - repositoryTopics: { - nodes: [ - { - topic: { name: 'backstage-include' }, - }, - ], + it('fail without schedule and scheduler', () => { + const config = new ConfigReader({ + catalog: { + providers: { + github: { + organization: 'test-org', }, - isArchived: false, - defaultBranchRef: { - name: 'main', - }, - }, - { - name: 'test-repo-2', - url: 'https://github.com/test-org/test-repo-2', - repositoryTopics: { - nodes: [ - { - topic: { name: 'backstage-include' }, - }, - { - topic: { name: 'backstage-exclude' }, - }, - ], - }, - isArchived: false, - defaultBranchRef: { - name: 'main', - }, - }, - { - name: 'test-repo-3', - url: 'https://github.com/test-org/test-repo-3', - repositoryTopics: { - nodes: [ - { - topic: { name: 'backstage-exclude' }, - }, - ], - }, - isArchived: false, - defaultBranchRef: { - name: 'main', - }, - }, - ], - }), - ); - - await provider.connect(entityProviderConnection); - - const taskDef = schedule.getTasks()[0]; - expect(taskDef.id).toEqual('github-provider:myProvider:refresh'); - await (taskDef.fn as () => Promise)(); - - const url = `https://github.com/test-org/test-repo/blob/main/custom/path/catalog-custom.yaml`; - const expectedEntities = [ - { - entity: { - apiVersion: 'backstage.io/v1alpha1', - kind: 'Location', - metadata: { - annotations: { - 'backstage.io/managed-by-location': `url:${url}`, - 'backstage.io/managed-by-origin-location': `url:${url}`, - }, - name: 'generated-5e4b9498097f15434e88c477cfba6c079aa8ca7f', - }, - spec: { - presence: 'optional', - target: `${url}`, - type: 'url', }, }, - locationKey: 'github-provider:myProvider', - }, - ]; + }); - expect(entityProviderConnection.applyMutation).toHaveBeenCalledTimes(1); - expect(entityProviderConnection.applyMutation).toHaveBeenCalledWith({ - type: 'full', - entities: expectedEntities, + expect(() => + GitHubEntityProvider.fromConfig(config, { + logger, + }), + ).toThrow('Either schedule or scheduler must be provided'); + }); + + it('fail with scheduler but no schedule config', () => { + const scheduler = { + createScheduledTaskRunner: (_: any) => jest.fn(), + } as unknown as PluginTaskScheduler; + const config = new ConfigReader({ + catalog: { + providers: { + github: { + organization: 'test-org', + }, + }, + }, + }); + + expect(() => + GitHubEntityProvider.fromConfig(config, { + logger, + scheduler, + }), + ).toThrow( + 'No schedule provided neither via code nor config for github-provider:default', + ); + }); + + it('single simple provider config with schedule in config', async () => { + const schedule = new PersistingTaskRunner(); + const scheduler = { + createScheduledTaskRunner: (_: any) => schedule, + } as unknown as PluginTaskScheduler; + const config = new ConfigReader({ + catalog: { + providers: { + github: { + organization: 'test-org', + schedule: { + frequency: 'P1M', + timeout: 'PT3M', + }, + }, + }, + }, + }); + const providers = GitHubEntityProvider.fromConfig(config, { + logger, + scheduler, + }); + + expect(providers).toHaveLength(1); + expect(providers[0].getProviderName()).toEqual('github-provider:default'); }); }); diff --git a/plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.ts b/plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.ts index 3909b5a3c2..7d04b749dd 100644 --- a/plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.ts +++ b/plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { TaskRunner } from '@backstage/backend-tasks'; +import { PluginTaskScheduler, TaskRunner } from '@backstage/backend-tasks'; import { Config } from '@backstage/config'; import { GithubCredentialsProvider, @@ -60,9 +60,14 @@ export class GitHubEntityProvider implements EntityProvider { config: Config, options: { logger: Logger; - schedule: TaskRunner; + schedule?: TaskRunner; + scheduler?: PluginTaskScheduler; }, ): GitHubEntityProvider[] { + if (!options.schedule && !options.scheduler) { + throw new Error('Either schedule or scheduler must be provided.'); + } + const integrations = ScmIntegrations.fromConfig(config); return readProviderConfigs(config).map(providerConfig => { @@ -75,11 +80,21 @@ export class GitHubEntityProvider implements EntityProvider { ); } + if (!options.schedule && !providerConfig.schedule) { + throw new Error( + `No schedule provided neither via code nor config for github-provider:${providerConfig.id}.`, + ); + } + + const taskRunner = + options.schedule ?? + options.scheduler!.createScheduledTaskRunner(providerConfig.schedule!); + return new GitHubEntityProvider( providerConfig, integration, options.logger, - options.schedule, + taskRunner, ); }); } @@ -88,14 +103,14 @@ export class GitHubEntityProvider implements EntityProvider { config: GitHubEntityProviderConfig, integration: GitHubIntegration, logger: Logger, - schedule: TaskRunner, + taskRunner: TaskRunner, ) { this.config = config; this.integration = integration.config; this.logger = logger.child({ target: this.getProviderName(), }); - this.scheduleFn = this.createScheduleFn(schedule); + this.scheduleFn = this.createScheduleFn(taskRunner); this.githubCredentialsProvider = SingleInstanceGithubCredentialsProvider.create(integration.config); } @@ -111,10 +126,10 @@ export class GitHubEntityProvider implements EntityProvider { return await this.scheduleFn(); } - private createScheduleFn(schedule: TaskRunner): () => Promise { + private createScheduleFn(taskRunner: TaskRunner): () => Promise { return async () => { const taskId = `${this.getProviderName()}:refresh`; - return schedule.run({ + return taskRunner.run({ id: taskId, fn: async () => { const logger = this.logger.child({ diff --git a/plugins/catalog-backend-module-github/src/providers/GitHubEntityProviderConfig.test.ts b/plugins/catalog-backend-module-github/src/providers/GitHubEntityProviderConfig.test.ts index 66a5463bf5..e1b3a6cfbf 100644 --- a/plugins/catalog-backend-module-github/src/providers/GitHubEntityProviderConfig.test.ts +++ b/plugins/catalog-backend-module-github/src/providers/GitHubEntityProviderConfig.test.ts @@ -15,6 +15,7 @@ */ import { ConfigReader } from '@backstage/config'; +import { Duration } from 'luxon'; import { readProviderConfigs } from './GitHubEntityProviderConfig'; describe('readProviderConfigs', () => { @@ -81,13 +82,22 @@ describe('readProviderConfigs', () => { organization: 'test-org1', host: 'ghe.internal.com', }, + providerWithSchedule: { + organization: 'test-org1', + schedule: { + frequency: 'PT30M', + timeout: { + minutes: 3, + }, + }, + }, }, }, }, }); const providerConfigs = readProviderConfigs(config); - expect(providerConfigs).toHaveLength(6); + expect(providerConfigs).toHaveLength(7); expect(providerConfigs[0]).toEqual({ id: 'providerOrganizationOnly', organization: 'test-org1', @@ -101,6 +111,7 @@ describe('readProviderConfigs', () => { exclude: undefined, }, }, + schedule: undefined, }); expect(providerConfigs[1]).toEqual({ id: 'providerCustomCatalogPath', @@ -115,6 +126,7 @@ describe('readProviderConfigs', () => { exclude: undefined, }, }, + schedule: undefined, }); expect(providerConfigs[2]).toEqual({ id: 'providerWithRepositoryFilter', @@ -129,6 +141,7 @@ describe('readProviderConfigs', () => { exclude: undefined, }, }, + schedule: undefined, }); expect(providerConfigs[3]).toEqual({ id: 'providerWithBranchFilter', @@ -143,6 +156,7 @@ describe('readProviderConfigs', () => { exclude: undefined, }, }, + schedule: undefined, }); expect(providerConfigs[4]).toEqual({ id: 'providerWithTopicFilter', @@ -157,6 +171,7 @@ describe('readProviderConfigs', () => { exclude: ['backstage-exclude'], }, }, + schedule: undefined, }); expect(providerConfigs[5]).toEqual({ id: 'providerWithHost', @@ -171,6 +186,27 @@ describe('readProviderConfigs', () => { exclude: undefined, }, }, + schedule: undefined, + }); + expect(providerConfigs[6]).toEqual({ + id: 'providerWithSchedule', + organization: 'test-org1', + catalogPath: '/catalog-info.yaml', + host: 'github.com', + filters: { + repository: undefined, + branch: undefined, + topic: { + include: undefined, + exclude: undefined, + }, + }, + schedule: { + frequency: Duration.fromISO('PT30M'), + timeout: { + minutes: 3, + }, + }, }); }); }); diff --git a/plugins/catalog-backend-module-github/src/providers/GitHubEntityProviderConfig.ts b/plugins/catalog-backend-module-github/src/providers/GitHubEntityProviderConfig.ts index d40b206751..6785d18984 100644 --- a/plugins/catalog-backend-module-github/src/providers/GitHubEntityProviderConfig.ts +++ b/plugins/catalog-backend-module-github/src/providers/GitHubEntityProviderConfig.ts @@ -14,6 +14,10 @@ * limitations under the License. */ +import { + readTaskScheduleDefinitionFromConfig, + TaskScheduleDefinition, +} from '@backstage/backend-tasks'; import { Config } from '@backstage/config'; const DEFAULT_CATALOG_PATH = '/catalog-info.yaml'; @@ -29,6 +33,7 @@ export type GitHubEntityProviderConfig = { branch?: string; topic?: GithubTopicFilters; }; + schedule?: TaskScheduleDefinition; }; export type GithubTopicFilters = { @@ -73,6 +78,10 @@ function readProviderConfig( 'filters.topic.exclude', ); + const schedule = config.has('schedule') + ? readTaskScheduleDefinitionFromConfig(config.getConfig('schedule')) + : undefined; + return { id, catalogPath, @@ -88,8 +97,10 @@ function readProviderConfig( exclude: topicFilterExclude, }, }, + schedule, }; } + /** * Compiles a RegExp while enforcing the pattern to contain * the start-of-line and end-of-line anchors. diff --git a/yarn.lock b/yarn.lock index 8be2e5c8a6..06bac843bf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4590,6 +4590,7 @@ __metadata: "@types/lodash": ^4.14.151 git-url-parse: ^13.0.0 lodash: ^4.17.21 + luxon: ^3.0.0 msw: ^0.47.0 node-fetch: ^2.6.7 uuid: ^8.0.0 From a72ae031901ee2a49a1c40ec01ffb9108498b2f1 Mon Sep 17 00:00:00 2001 From: Harrison Hogg <7130591+HHogg@users.noreply.github.com> Date: Tue, 11 Oct 2022 10:18:49 +0100 Subject: [PATCH 140/278] Update .changeset/quick-meals-talk.md Co-authored-by: MT Lewis Signed-off-by: Harrison Hogg <7130591+HHogg@users.noreply.github.com> --- .changeset/quick-meals-talk.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/quick-meals-talk.md b/.changeset/quick-meals-talk.md index bde70d25fd..b9ce0189f0 100644 --- a/.changeset/quick-meals-talk.md +++ b/.changeset/quick-meals-talk.md @@ -2,7 +2,7 @@ '@backstage/plugin-playlist-backend': minor --- -**BREAKING** Due to the changes made in the Permission framework. The playlist backends permission rules have change to reflect this. +**BREAKING** The exported permission rules have changed to reflect the breaking changes made to the PermissionRule type. As an example the `playlistConditions.isOwner` API has changed from From 9db6099633e1fe73770079789f90b2ca240fb928 Mon Sep 17 00:00:00 2001 From: Harrison Hogg <7130591+HHogg@users.noreply.github.com> Date: Tue, 11 Oct 2022 10:19:01 +0100 Subject: [PATCH 141/278] Update .changeset/quick-meals-talk.md Co-authored-by: MT Lewis Signed-off-by: Harrison Hogg <7130591+HHogg@users.noreply.github.com> --- .changeset/quick-meals-talk.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/quick-meals-talk.md b/.changeset/quick-meals-talk.md index b9ce0189f0..b27034d684 100644 --- a/.changeset/quick-meals-talk.md +++ b/.changeset/quick-meals-talk.md @@ -4,7 +4,7 @@ **BREAKING** The exported permission rules have changed to reflect the breaking changes made to the PermissionRule type. -As an example the `playlistConditions.isOwner` API has changed from +For example, the `playlistConditions.isOwner` API has changed from: ```ts playlistConditions.isOwner(['user:default/me', 'group:default/owner']); From ddf3986add991869fb67cba9ec2f903f0558665f Mon Sep 17 00:00:00 2001 From: Harrison Hogg <7130591+HHogg@users.noreply.github.com> Date: Tue, 11 Oct 2022 10:19:11 +0100 Subject: [PATCH 142/278] Update .changeset/quick-meals-talk.md Co-authored-by: MT Lewis Signed-off-by: Harrison Hogg <7130591+HHogg@users.noreply.github.com> --- .changeset/quick-meals-talk.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/quick-meals-talk.md b/.changeset/quick-meals-talk.md index b27034d684..5834928e77 100644 --- a/.changeset/quick-meals-talk.md +++ b/.changeset/quick-meals-talk.md @@ -10,7 +10,7 @@ For example, the `playlistConditions.isOwner` API has changed from: playlistConditions.isOwner(['user:default/me', 'group:default/owner']); ``` -to the new API +to: ```ts playlistConditions.isOwner({ From a9771a69f6447e00aaa223241b839cdb52c7732b Mon Sep 17 00:00:00 2001 From: Mengnan Gong Date: Tue, 11 Oct 2022 17:30:22 +0800 Subject: [PATCH 143/278] Fix the example in the switching to postgres tutorial The `ssl` config is part of the `connection` config. It's misplaced under the `knexConfig.pool`, which might lead to confusion. This PR fixes it. Signed-off-by: Mengnan Gong --- docs/tutorials/switching-sqlite-postgres.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/tutorials/switching-sqlite-postgres.md b/docs/tutorials/switching-sqlite-postgres.md index c0c35999c6..bd067ee388 100644 --- a/docs/tutorials/switching-sqlite-postgres.md +++ b/docs/tutorials/switching-sqlite-postgres.md @@ -72,6 +72,12 @@ backend: + port: ${POSTGRES_PORT} + user: ${POSTGRES_USER} + password: ${POSTGRES_PASSWORD} ++ # https://node-postgres.com/features/ssl ++ # you can set the sslmode configuration option via the `PGSSLMODE` environment variable ++ # see https://www.postgresql.org/docs/current/libpq-ssl.html Table 33.1. SSL Mode Descriptions (e.g. require) ++ # ssl: ++ # ca: # if you have a CA file and want to verify it you can uncomment this section ++ # $file: /ca/server.crt + # Refer to Tarn docs for default values on PostgreSQL pool configuration - https://github.com/Vincit/tarn.js + knexConfig: + pool: @@ -79,12 +85,6 @@ backend: + max: 12 + acquireTimeoutMillis: 60000 + idleTimeoutMillis: 60000 -+ # https://node-postgres.com/features/ssl -+ # you can set the sslmode configuration option via the `PGSSLMODE` environment variable -+ # see https://www.postgresql.org/docs/current/libpq-ssl.html Table 33.1. SSL Mode Descriptions (e.g. require) -+ # ssl: -+ # ca: # if you have a CA file and want to verify it you can uncomment this section -+ # $file: /ca/server.crt ``` ### Using a single database From e10411cebc3ed25c788415c5441d8399918081c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 11 Oct 2022 10:15:11 +0100 Subject: [PATCH 144/278] tweak wording MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- plugins/scaffolder/README.md | 48 ++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/plugins/scaffolder/README.md b/plugins/scaffolder/README.md index 8194976445..83fa01e6e5 100644 --- a/plugins/scaffolder/README.md +++ b/plugins/scaffolder/README.md @@ -81,10 +81,10 @@ export const Root = ({ children }: PropsWithChildren<{}>) => ( ### Troubleshooting -In case if you encountered with the [issue of closing EventStream](https://github.com/backstage/backstage/issues/5535) -which auto-updates logs during the task execution, you can enable long polling. In order to you it, you have to create -in your codebase file in this location `packages/app/src/apis.ts` where you register `ScaffolderClient` with an extra -parameter `useLongPollingLogs: true`. By default, it is `false`. +If you encounter the [issue of closing EventStream](https://github.com/backstage/backstage/issues/5535) +which auto-updates logs during task execution, you can enable long polling. To do so, +update your `packages/app/src/apis.ts` file to register a `ScaffolderClient` with the +`useLongPollingLogs` set to `true`. By default, it is `false`. ```typescript import { @@ -93,33 +93,33 @@ import { fetchApiRef, identityApiRef, } from '@backstage/core-plugin-api'; - import { scaffolderApiRef, ScaffolderClient, } from '@backstage/plugin-scaffolder'; -createApiFactory({ - api: scaffolderApiRef, - deps: { - discoveryApi: discoveryApiRef, - identityApi: identityApiRef, - scmIntegrationsApi: scmIntegrationsApiRef, - fetchApi: fetchApiRef, - }, - factory: ({ scmIntegrationsApi, discoveryApi, identityApi, fetchApi }) => - new ScaffolderClient({ - discoveryApi, - identityApi, - scmIntegrationsApi, - fetchApi, - useLongPollingLogs: true, - }), -}); +export const apis: AnyApiFactory[] = [ + createApiFactory({ + api: scaffolderApiRef, + deps: { + discoveryApi: discoveryApiRef, + identityApi: identityApiRef, + scmIntegrationsApi: scmIntegrationsApiRef, + fetchApi: fetchApiRef, + }, + factory: ({ scmIntegrationsApi, discoveryApi, identityApi, fetchApi }) => + new ScaffolderClient({ + discoveryApi, + identityApi, + scmIntegrationsApi, + fetchApi, + useLongPollingLogs: true, + }), + }), + // ... other factories ``` -Api factory creates the API and adds it to a registry. Because this file is processed before the default scaffolder -api registry, it is added to the registry prior and overrides the default behavior. +This replaces the default implementation of the `scaffolderApiRef`. ## Links From 6acaedb962fce171e2528b61df18acb18cd4778d Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 18 Aug 2022 14:51:15 +0200 Subject: [PATCH 145/278] chore: things are working pretty nicely now with the later version and the next version of scaffolder Signed-off-by: blam --- package.json | 3 ++- plugins/scaffolder/package.json | 6 ++++-- .../src/components/MultistepJsonForm/MultistepJsonForm.tsx | 6 ++++-- .../src/next/TemplateWizardPage/Stepper/Stepper.tsx | 2 ++ 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 1013b2a049..267fccc029 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,8 @@ "workspaces": { "packages": [ "packages/*", - "plugins/*" + "plugins/*", + "../react-jsonschema-form/packages/*" ] }, "resolutions": { diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 9b81d6593a..1d9c6013b7 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -54,8 +54,10 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", "@react-hookz/web": "^15.0.0", - "@rjsf/core": "^3.2.1", - "@rjsf/material-ui": "^3.2.1", + "@rjsf/core": "file:../../../react-jsonschema-form/packages/core", + "@rjsf/material-ui": "file:../../../react-jsonschema-form/packages/material-ui", + "@rjsf/utils": "file:../../../react-jsonschema-form/packages/utils", + "@rjsf/validator-ajv6": "file:../../../react-jsonschema-form/packages/validator-ajv6", "@types/json-schema": "^7.0.9", "@uiw/react-codemirror": "^4.9.3", "classnames": "^2.2.6", diff --git a/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx b/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx index 8c71df67b6..60d242e0a1 100644 --- a/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx +++ b/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx @@ -30,7 +30,8 @@ import { featureFlagsApiRef, } from '@backstage/core-plugin-api'; import { FormProps, IChangeEvent, UiSchema, withTheme } from '@rjsf/core'; -import { Theme as MuiTheme } from '@rjsf/material-ui'; +import { Theme } from '@rjsf/material-ui'; +import validator from '@rjsf/validator-ajv6'; import React, { useState } from 'react'; import { transformSchemaToProps } from './schema'; import { Content, StructuredMetadataTable } from '@backstage/core-components'; @@ -38,7 +39,6 @@ import cloneDeep from 'lodash/cloneDeep'; import * as fieldOverrides from './FieldOverrides'; import { LayoutOptions } from '../../layouts'; -const Form = withTheme(MuiTheme); type Step = { schema: JsonObject; title: string; @@ -123,6 +123,7 @@ export const MultistepJsonForm = (props: Props) => { finishButtonLabel, layouts, } = props; + const Form = withTheme(Theme); const [activeStep, setActiveStep] = useState(0); const [disableButtons, setDisableButtons] = useState(false); const errorApi = useApi(errorApiRef); @@ -206,6 +207,7 @@ export const MultistepJsonForm = (props: Props) => {
({ backButton: { @@ -124,6 +125,7 @@ export const Stepper = (props: StepperProps) => {
{activeStep < steps.length ? ( Date: Tue, 30 Aug 2022 13:43:40 +0200 Subject: [PATCH 146/278] chore: fixing dependencies for the form Signed-off-by: blam --- plugins/scaffolder/package.json | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 1d9c6013b7..b778f9d31f 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -54,10 +54,9 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", "@react-hookz/web": "^15.0.0", - "@rjsf/core": "file:../../../react-jsonschema-form/packages/core", - "@rjsf/material-ui": "file:../../../react-jsonschema-form/packages/material-ui", - "@rjsf/utils": "file:../../../react-jsonschema-form/packages/utils", - "@rjsf/validator-ajv6": "file:../../../react-jsonschema-form/packages/validator-ajv6", + "@rjsf/core": "^5.0.0-beta.2", + "@rjsf/material-ui": "^5.0.0-beta.2", + "@rjsf/validator-ajv6": "^5.0.0-beta.2", "@types/json-schema": "^7.0.9", "@uiw/react-codemirror": "^4.9.3", "classnames": "^2.2.6", From 618312500827c52eda17fc6b96a6e9f000b204a7 Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 30 Aug 2022 14:05:36 +0200 Subject: [PATCH 147/278] chore: fixing up typescript Signed-off-by: blam --- package.json | 3 +-- packages/app/package.json | 1 - .../src/components/scaffolder/customScaffolderExtensions.tsx | 2 +- plugins/scaffolder/package.json | 1 + .../MultistepJsonForm/FieldOverrides/DescriptionField.tsx | 2 +- .../src/components/MultistepJsonForm/MultistepJsonForm.tsx | 5 +++-- .../src/components/TemplatePage/createValidator.test.ts | 2 +- .../src/components/TemplatePage/createValidator.ts | 2 +- .../components/fields/EntityNamePicker/validation.test.ts | 2 +- .../src/components/fields/EntityNamePicker/validation.ts | 2 +- .../src/components/fields/EntityPicker/EntityPicker.test.tsx | 2 +- .../src/components/fields/OwnerPicker/OwnerPicker.test.tsx | 2 +- .../components/fields/RepoUrlPicker/RepoUrlPicker.test.tsx | 5 ++++- .../src/components/fields/RepoUrlPicker/validation.test.ts | 2 +- .../src/components/fields/RepoUrlPicker/validation.ts | 2 +- plugins/scaffolder/src/extensions/types.ts | 2 +- .../src/next/TemplateWizardPage/Stepper/Stepper.tsx | 3 ++- .../next/TemplateWizardPage/Stepper/createAsyncValidators.ts | 2 +- .../scaffolder/src/next/TemplateWizardPage/Stepper/schema.ts | 2 +- .../src/next/TemplateWizardPage/Stepper/useTemplateSchema.ts | 2 +- 20 files changed, 25 insertions(+), 21 deletions(-) diff --git a/package.json b/package.json index 267fccc029..1013b2a049 100644 --- a/package.json +++ b/package.json @@ -37,8 +37,7 @@ "workspaces": { "packages": [ "packages/*", - "plugins/*", - "../react-jsonschema-form/packages/*" + "plugins/*" ] }, "resolutions": { diff --git a/packages/app/package.json b/packages/app/package.json index 76e099bace..fa8bb5c5ee 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -83,7 +83,6 @@ }, "devDependencies": { "@backstage/test-utils": "workspace:^", - "@rjsf/core": "^3.2.1", "@testing-library/cypress": "^8.0.2", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx b/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx index 2a4dedf080..3f6bd33d89 100644 --- a/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx +++ b/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ import React from 'react'; -import type { FieldValidation } from '@rjsf/core'; +import type { FieldValidation } from '@rjsf/utils'; import { createScaffolderFieldExtension, FieldExtensionComponentProps, diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index b778f9d31f..cf28227e8e 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -56,6 +56,7 @@ "@react-hookz/web": "^15.0.0", "@rjsf/core": "^5.0.0-beta.2", "@rjsf/material-ui": "^5.0.0-beta.2", + "@rjsf/utils": "^5.0.0-beta.2", "@rjsf/validator-ajv6": "^5.0.0-beta.2", "@types/json-schema": "^7.0.9", "@uiw/react-codemirror": "^4.9.3", diff --git a/plugins/scaffolder/src/components/MultistepJsonForm/FieldOverrides/DescriptionField.tsx b/plugins/scaffolder/src/components/MultistepJsonForm/FieldOverrides/DescriptionField.tsx index 3c592860ef..eded38beee 100644 --- a/plugins/scaffolder/src/components/MultistepJsonForm/FieldOverrides/DescriptionField.tsx +++ b/plugins/scaffolder/src/components/MultistepJsonForm/FieldOverrides/DescriptionField.tsx @@ -16,7 +16,7 @@ import React from 'react'; import { MarkdownContent } from '@backstage/core-components'; -import { FieldProps } from '@rjsf/core'; +import { FieldProps } from '@rjsf/utils'; export const DescriptionField = ({ description }: FieldProps) => description && ; diff --git a/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx b/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx index 60d242e0a1..064299f667 100644 --- a/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx +++ b/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx @@ -29,7 +29,8 @@ import { useApi, featureFlagsApiRef, } from '@backstage/core-plugin-api'; -import { FormProps, IChangeEvent, UiSchema, withTheme } from '@rjsf/core'; +import { UiSchema } from '@rjsf/utils'; +import { FormProps, IChangeEvent, withTheme } from '@rjsf/core'; import { Theme } from '@rjsf/material-ui'; import validator from '@rjsf/validator-ajv6'; import React, { useState } from 'react'; @@ -215,7 +216,7 @@ export const MultistepJsonForm = (props: Props) => { formData={formData} formContext={{ formData }} onChange={onChange} - onSubmit={e => { + onSubmit={(e: any) => { if (e.errors.length === 0) handleNext(); }} {...formProps} diff --git a/plugins/scaffolder/src/components/TemplatePage/createValidator.test.ts b/plugins/scaffolder/src/components/TemplatePage/createValidator.test.ts index f549c9e7f2..c17b72148e 100644 --- a/plugins/scaffolder/src/components/TemplatePage/createValidator.test.ts +++ b/plugins/scaffolder/src/components/TemplatePage/createValidator.test.ts @@ -17,7 +17,7 @@ import { createValidator } from './createValidator'; import { CustomFieldValidator } from '../../extensions'; import { ApiHolder } from '@backstage/core-plugin-api'; -import { FormValidation } from '@rjsf/core'; +import { FormValidation } from '@rjsf/utils'; describe('createValidator', () => { const validators: Record> = diff --git a/plugins/scaffolder/src/components/TemplatePage/createValidator.ts b/plugins/scaffolder/src/components/TemplatePage/createValidator.ts index 9cd1489a02..2769b899df 100644 --- a/plugins/scaffolder/src/components/TemplatePage/createValidator.ts +++ b/plugins/scaffolder/src/components/TemplatePage/createValidator.ts @@ -15,7 +15,7 @@ */ import { CustomFieldValidator } from '../../extensions'; -import { FormValidation } from '@rjsf/core'; +import { FormValidation } from '@rjsf/utils'; import { JsonObject, JsonValue } from '@backstage/types'; import { ApiHolder } from '@backstage/core-plugin-api'; diff --git a/plugins/scaffolder/src/components/fields/EntityNamePicker/validation.test.ts b/plugins/scaffolder/src/components/fields/EntityNamePicker/validation.test.ts index 290650387e..7201c9c4b3 100644 --- a/plugins/scaffolder/src/components/fields/EntityNamePicker/validation.test.ts +++ b/plugins/scaffolder/src/components/fields/EntityNamePicker/validation.test.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { FieldValidation } from '@rjsf/core'; +import { FieldValidation } from '@rjsf/utils'; import { KubernetesValidatorFunctions } from '@backstage/catalog-model'; import { entityNamePickerValidation } from './validation'; diff --git a/plugins/scaffolder/src/components/fields/EntityNamePicker/validation.ts b/plugins/scaffolder/src/components/fields/EntityNamePicker/validation.ts index 7a40a460ba..1533b0cdc3 100644 --- a/plugins/scaffolder/src/components/fields/EntityNamePicker/validation.ts +++ b/plugins/scaffolder/src/components/fields/EntityNamePicker/validation.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { FieldValidation } from '@rjsf/core'; +import { FieldValidation } from '@rjsf/utils'; import { KubernetesValidatorFunctions } from '@backstage/catalog-model'; export const entityNamePickerValidation = ( diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx index 942eef9d82..f4eefb26d5 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx +++ b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx @@ -17,7 +17,7 @@ import { Entity } from '@backstage/catalog-model'; import { CatalogApi, catalogApiRef } from '@backstage/plugin-catalog-react'; import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; -import { FieldProps } from '@rjsf/core'; +import { FieldProps } from '@rjsf/utils'; import { fireEvent } from '@testing-library/react'; import React from 'react'; import { EntityPicker } from './EntityPicker'; diff --git a/plugins/scaffolder/src/components/fields/OwnerPicker/OwnerPicker.test.tsx b/plugins/scaffolder/src/components/fields/OwnerPicker/OwnerPicker.test.tsx index b78d3add9e..68c9723974 100644 --- a/plugins/scaffolder/src/components/fields/OwnerPicker/OwnerPicker.test.tsx +++ b/plugins/scaffolder/src/components/fields/OwnerPicker/OwnerPicker.test.tsx @@ -17,7 +17,7 @@ import { Entity } from '@backstage/catalog-model'; import { CatalogApi, catalogApiRef } from '@backstage/plugin-catalog-react'; import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; -import { FieldProps } from '@rjsf/core'; +import { FieldProps } from '@rjsf/utils'; import React from 'react'; import { OwnerPicker } from './OwnerPicker'; diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.test.tsx b/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.test.tsx index 7fac9f7840..be7c05155c 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.test.tsx +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.test.tsx @@ -15,7 +15,8 @@ */ import React, { useContext } from 'react'; import { RepoUrlPicker } from './RepoUrlPicker'; -import Form from '@rjsf/core'; +import { withTheme } from '@rjsf/core'; +import { Theme } from '@rjsf/material-ui'; import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; import { scmIntegrationsApiRef, @@ -50,6 +51,8 @@ describe('RepoUrlPicker', () => { getCredentials: jest.fn().mockResolvedValue({ token: 'abc123' }), }; + const Form = withTheme(Theme); + describe('happy path rendering', () => { it('should render the repo url picker with minimal props', async () => { const onSubmit = jest.fn(); diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/validation.test.ts b/plugins/scaffolder/src/components/fields/RepoUrlPicker/validation.test.ts index 45e44b4072..b9c481957c 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/validation.test.ts +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/validation.test.ts @@ -15,7 +15,7 @@ */ import { repoPickerValidation } from './validation'; -import { FieldValidation } from '@rjsf/core'; +import { FieldValidation } from '@rjsf/utils'; import { ScmIntegrations } from '@backstage/integration'; import { ConfigReader } from '@backstage/core-app-api'; import { ApiHolder } from '@backstage/core-plugin-api'; diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/validation.ts b/plugins/scaffolder/src/components/fields/RepoUrlPicker/validation.ts index 99847f9e3b..55ba92abdc 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/validation.ts +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/validation.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { FieldValidation } from '@rjsf/core'; +import { FieldValidation } from '@rjsf/utils'; import { ApiHolder } from '@backstage/core-plugin-api'; import { scmIntegrationsApiRef } from '@backstage/integration-react'; diff --git a/plugins/scaffolder/src/extensions/types.ts b/plugins/scaffolder/src/extensions/types.ts index 9b42ba478b..c3d99a6b37 100644 --- a/plugins/scaffolder/src/extensions/types.ts +++ b/plugins/scaffolder/src/extensions/types.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { ApiHolder } from '@backstage/core-plugin-api'; -import { FieldValidation, FieldProps } from '@rjsf/core'; +import { FieldValidation, FieldProps } from '@rjsf/utils'; /** * Field validation type for Custom Field Extensions. diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx index 8ae26ebf4a..ccdf32542a 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx +++ b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx @@ -22,7 +22,8 @@ import { Button, makeStyles, } from '@material-ui/core'; -import { FieldValidation, withTheme } from '@rjsf/core'; +import { withTheme } from '@rjsf/core'; +import { FieldValidation } from '@rjsf/utils'; import { Theme as MuiTheme } from '@rjsf/material-ui'; import React, { useMemo, useState } from 'react'; import { FieldExtensionOptions } from '../../../extensions'; diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/createAsyncValidators.ts b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/createAsyncValidators.ts index d89f0d4e5f..60eed0f364 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/createAsyncValidators.ts +++ b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/createAsyncValidators.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { FieldValidation } from '@rjsf/core'; +import { FieldValidation } from '@rjsf/utils'; import { JsonObject } from '@backstage/types'; import { ApiHolder } from '@backstage/core-plugin-api'; import { CustomFieldValidator } from '../../../extensions'; diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/schema.ts b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/schema.ts index e2d5e89932..355bfde45d 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/schema.ts +++ b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/schema.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { JsonObject } from '@backstage/types'; -import { FieldValidation, UiSchema } from '@rjsf/core'; +import { FieldValidation, UiSchema } from '@rjsf/utils'; function isObject(value: unknown): value is JsonObject { return typeof value === 'object' && value !== null && !Array.isArray(value); diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/useTemplateSchema.ts b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/useTemplateSchema.ts index d0d8590a7b..6aad6baa96 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/useTemplateSchema.ts +++ b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/useTemplateSchema.ts @@ -15,7 +15,7 @@ */ import { featureFlagsApiRef, useApi } from '@backstage/core-plugin-api'; import { JsonObject } from '@backstage/types'; -import { UiSchema } from '@rjsf/core'; +import { UiSchema } from '@rjsf/utils'; import { TemplateParameterSchema } from '../../../types'; import { extractSchemaFromStep } from './schema'; From b9f71b15af19c8ae634d81edffb237a40ebae6fc Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 12 Sep 2022 11:09:45 +0200 Subject: [PATCH 148/278] chore: just the error validation left I think for the `next` scaffolder Signed-off-by: blam --- .../scaffolder/customScaffolderExtensions.tsx | 2 +- .../TemplatePage/createValidator.test.ts | 2 +- .../TemplatePage/createValidator.ts | 2 +- .../EntityNamePicker/EntityNamePicker.tsx | 2 +- .../fields/EntityPicker/EntityPicker.test.tsx | 6 +- .../fields/EntityPicker/EntityPicker.tsx | 13 +- .../EntityTagsPicker/EntityTagsPicker.tsx | 6 +- .../OwnedEntityPicker/OwnedEntityPicker.tsx | 8 +- .../fields/OwnerPicker/OwnerPicker.test.tsx | 2 +- .../fields/OwnerPicker/OwnerPicker.tsx | 8 +- .../RepoUrlPicker/RepoUrlPicker.test.tsx | 7 +- .../fields/RepoUrlPicker/RepoUrlPicker.tsx | 5 +- .../fields/RepoUrlPicker/validation.ts | 2 +- plugins/scaffolder/src/extensions/index.tsx | 3 +- plugins/scaffolder/src/extensions/types.ts | 18 ++- yarn.lock | 115 ++++++++++-------- 16 files changed, 114 insertions(+), 87 deletions(-) diff --git a/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx b/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx index 3f6bd33d89..3aadd69c05 100644 --- a/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx +++ b/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx @@ -30,7 +30,7 @@ const TextValuePicker = (props: FieldExtensionComponentProps) => { schema: { title, description }, rawErrors, formData, - uiSchema: { 'ui:autofocus': autoFocus }, + uiSchema: { 'ui:autofocus': autoFocus } = {}, idSchema, placeholder, } = props; diff --git a/plugins/scaffolder/src/components/TemplatePage/createValidator.test.ts b/plugins/scaffolder/src/components/TemplatePage/createValidator.test.ts index c17b72148e..eea5efc296 100644 --- a/plugins/scaffolder/src/components/TemplatePage/createValidator.test.ts +++ b/plugins/scaffolder/src/components/TemplatePage/createValidator.test.ts @@ -68,6 +68,6 @@ describe('createValidator', () => { /* THEN */ expect(result).not.toBeNull(); - expect(result.p1.addError).toHaveBeenCalledTimes(1); + expect(result.p1?.addError).toHaveBeenCalledTimes(1); }); }); diff --git a/plugins/scaffolder/src/components/TemplatePage/createValidator.ts b/plugins/scaffolder/src/components/TemplatePage/createValidator.ts index 2769b899df..d1c55009a9 100644 --- a/plugins/scaffolder/src/components/TemplatePage/createValidator.ts +++ b/plugins/scaffolder/src/components/TemplatePage/createValidator.ts @@ -62,7 +62,7 @@ export const createValidator = ( if (fieldName && typeof validators[fieldName] === 'function') { validators[fieldName]!( propData as JsonValue, - propValidation, + propValidation as FormValidation, context, ); } diff --git a/plugins/scaffolder/src/components/fields/EntityNamePicker/EntityNamePicker.tsx b/plugins/scaffolder/src/components/fields/EntityNamePicker/EntityNamePicker.tsx index 802135a863..2b21141edb 100644 --- a/plugins/scaffolder/src/components/fields/EntityNamePicker/EntityNamePicker.tsx +++ b/plugins/scaffolder/src/components/fields/EntityNamePicker/EntityNamePicker.tsx @@ -29,7 +29,7 @@ export const EntityNamePicker = ( schema: { title = 'Name', description = 'Unique name of the component' }, rawErrors, formData, - uiSchema: { 'ui:autofocus': autoFocus }, + uiSchema: { 'ui:autofocus': autoFocus } = {}, idSchema, placeholder, } = props; diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx index f4eefb26d5..ffc447577a 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx +++ b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx @@ -39,7 +39,7 @@ describe('', () => { const rawErrors: string[] = []; const formData = undefined; - let props: FieldProps; + let props: FieldProps; const catalogApi: jest.Mocked = { getLocationById: jest.fn(), @@ -76,7 +76,7 @@ describe('', () => { uiSchema, rawErrors, formData, - } as unknown as FieldProps; + } as any; catalogApi.getEntities.mockResolvedValue({ items: entities }); }); @@ -117,7 +117,7 @@ describe('', () => { uiSchema, rawErrors, formData, - } as unknown as FieldProps; + } as any; catalogApi.getEntities.mockResolvedValue({ items: entities }); }); diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx index e7883a4721..a040320d79 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx +++ b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx @@ -45,7 +45,10 @@ export interface EntityPickerUiOptions { * @public */ export const EntityPicker = ( - props: FieldExtensionComponentProps, + props: FieldExtensionComponentProps< + string | undefined, + EntityPickerUiOptions + >, ) => { const { onChange, @@ -56,9 +59,9 @@ export const EntityPicker = ( formData, idSchema, } = props; - const allowedKinds = uiSchema['ui:options']?.allowedKinds; - const defaultKind = uiSchema['ui:options']?.defaultKind; - const defaultNamespace = uiSchema['ui:options']?.defaultNamespace; + const allowedKinds = uiSchema?.['ui:options']?.allowedKinds; + const defaultKind = uiSchema?.['ui:options']?.defaultKind; + const defaultNamespace = uiSchema?.['ui:options']?.defaultNamespace; const catalogApi = useApi(catalogApiRef); @@ -99,7 +102,7 @@ export const EntityPicker = ( onChange={onSelect} options={entityRefs || []} autoSelect - freeSolo={uiSchema['ui:options']?.allowArbitraryValues ?? true} + freeSolo={uiSchema?.['ui:options']?.allowArbitraryValues ?? true} renderInput={params => ( { const facet = 'metadata.tags'; diff --git a/plugins/scaffolder/src/components/fields/OwnedEntityPicker/OwnedEntityPicker.tsx b/plugins/scaffolder/src/components/fields/OwnedEntityPicker/OwnedEntityPicker.tsx index 2446883a86..d15677cfac 100644 --- a/plugins/scaffolder/src/components/fields/OwnedEntityPicker/OwnedEntityPicker.tsx +++ b/plugins/scaffolder/src/components/fields/OwnedEntityPicker/OwnedEntityPicker.tsx @@ -59,12 +59,12 @@ export const OwnedEntityPicker = ( formData, idSchema, } = props; + const allowedKinds = uiSchema?.['ui:options']?.allowedKinds; + const defaultKind = uiSchema?.['ui:options']?.defaultKind; + const defaultNamespace = uiSchema?.['ui:options']?.defaultNamespace; - const allowedKinds = uiSchema['ui:options']?.allowedKinds; - const defaultKind = uiSchema['ui:options']?.defaultKind; - const defaultNamespace = uiSchema['ui:options']?.defaultNamespace; const allowArbitraryValues = - uiSchema['ui:options']?.allowArbitraryValues ?? true; + uiSchema?.['ui:options']?.allowArbitraryValues ?? true; const { ownedEntities, loading } = useOwnedEntities(allowedKinds); const entityRefs = ownedEntities?.items diff --git a/plugins/scaffolder/src/components/fields/OwnerPicker/OwnerPicker.test.tsx b/plugins/scaffolder/src/components/fields/OwnerPicker/OwnerPicker.test.tsx index 68c9723974..a94bdf74d7 100644 --- a/plugins/scaffolder/src/components/fields/OwnerPicker/OwnerPicker.test.tsx +++ b/plugins/scaffolder/src/components/fields/OwnerPicker/OwnerPicker.test.tsx @@ -36,7 +36,7 @@ describe('', () => { const rawErrors: string[] = []; const formData = undefined; - let props: FieldProps; + let props: FieldProps; const catalogApi: jest.Mocked = { getLocationById: jest.fn(), diff --git a/plugins/scaffolder/src/components/fields/OwnerPicker/OwnerPicker.tsx b/plugins/scaffolder/src/components/fields/OwnerPicker/OwnerPicker.tsx index 3de2b12bd0..8ce01fc3ef 100644 --- a/plugins/scaffolder/src/components/fields/OwnerPicker/OwnerPicker.tsx +++ b/plugins/scaffolder/src/components/fields/OwnerPicker/OwnerPicker.tsx @@ -36,7 +36,7 @@ export interface OwnerPickerUiOptions { * @public */ export const OwnerPicker = ( - props: FieldExtensionComponentProps, + props: FieldExtensionComponentProps, ) => { const { schema: { title = 'Owner', description = 'The owner of the component' }, @@ -44,18 +44,18 @@ export const OwnerPicker = ( ...restProps } = props; - const defaultNamespace = uiSchema['ui:options']?.defaultNamespace; + const defaultNamespace = uiSchema?.['ui:options']?.defaultNamespace; const ownerUiSchema = { ...uiSchema, 'ui:options': { - allowedKinds: (uiSchema['ui:options']?.allowedKinds || [ + allowedKinds: (uiSchema?.['ui:options']?.allowedKinds || [ 'Group', 'User', ]) as string[], defaultKind: 'Group', allowArbitraryValues: - uiSchema['ui:options']?.allowArbitraryValues ?? true, + uiSchema?.['ui:options']?.allowArbitraryValues ?? true, ...(defaultNamespace !== undefined ? { defaultNamespace } : {}), }, }; diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.test.tsx b/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.test.tsx index be7c05155c..0133c4a29c 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.test.tsx +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.test.tsx @@ -32,6 +32,7 @@ import { SecretsContext, } from '../../secrets/SecretsContext'; import { act, fireEvent } from '@testing-library/react'; +import { Field } from '@rjsf/utils'; describe('RepoUrlPicker', () => { const mockScaffolderApi: Partial = { @@ -68,7 +69,7 @@ describe('RepoUrlPicker', () => { }} onSubmit={onSubmit} /> @@ -107,7 +108,7 @@ describe('RepoUrlPicker', () => { 'ui:field': 'RepoUrlPicker', 'ui:options': { allowedHosts: ['dev.azure.com'] }, }} - fields={{ RepoUrlPicker: RepoUrlPicker }} + fields={{ RepoUrlPicker: RepoUrlPicker as Field }} /> , @@ -145,7 +146,7 @@ describe('RepoUrlPicker', () => { }, }, }} - fields={{ RepoUrlPicker: RepoUrlPicker }} + fields={{ RepoUrlPicker: RepoUrlPicker as Field }} /> diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx b/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx index 451df857e5..870ec9dd53 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx @@ -62,7 +62,10 @@ export interface RepoUrlPickerUiOptions { * @public */ export const RepoUrlPicker = ( - props: FieldExtensionComponentProps, + props: FieldExtensionComponentProps< + string | undefined, + RepoUrlPickerUiOptions + >, ) => { const { uiSchema, onChange, rawErrors, formData } = props; const [state, setState] = useState( diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/validation.ts b/plugins/scaffolder/src/components/fields/RepoUrlPicker/validation.ts index 55ba92abdc..ae4f2ec1b9 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/validation.ts +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/validation.ts @@ -26,7 +26,7 @@ import { scmIntegrationsApiRef } from '@backstage/integration-react'; * @public */ export const repoPickerValidation = ( - value: string, + value: string | undefined, validation: FieldValidation, context: { apiHolder: ApiHolder }, ) => { diff --git a/plugins/scaffolder/src/extensions/index.tsx b/plugins/scaffolder/src/extensions/index.tsx index 60b9022053..21a565bf46 100644 --- a/plugins/scaffolder/src/extensions/index.tsx +++ b/plugins/scaffolder/src/extensions/index.tsx @@ -21,6 +21,7 @@ import { FieldExtensionComponentProps, } from './types'; import { Extension, attachComponentData } from '@backstage/core-plugin-api'; +import { UIOptionsType } from '@rjsf/utils'; export const FIELD_EXTENSION_WRAPPER_KEY = 'scaffolder.extensions.wrapper.v1'; export const FIELD_EXTENSION_KEY = 'scaffolder.extensions.field.v1'; @@ -39,7 +40,7 @@ export type FieldExtensionComponent<_TReturnValue, _TInputProps> = () => null; */ export function createScaffolderFieldExtension< TReturnValue = unknown, - TInputProps = unknown, + TInputProps extends UIOptionsType = {}, >( options: FieldExtensionOptions, ): Extension> { diff --git a/plugins/scaffolder/src/extensions/types.ts b/plugins/scaffolder/src/extensions/types.ts index c3d99a6b37..85f8f99fd4 100644 --- a/plugins/scaffolder/src/extensions/types.ts +++ b/plugins/scaffolder/src/extensions/types.ts @@ -14,7 +14,13 @@ * limitations under the License. */ import { ApiHolder } from '@backstage/core-plugin-api'; -import { FieldValidation, FieldProps } from '@rjsf/utils'; +import { + FieldValidation, + FieldProps, + UIOptionsType, + UiSchema, +} from '@rjsf/utils'; +import { PropsWithChildren } from 'react'; /** * Field validation type for Custom Field Extensions. @@ -35,7 +41,7 @@ export type CustomFieldValidator = ( */ export type FieldExtensionOptions< TFieldReturnValue = unknown, - TInputProps = unknown, + TInputProps extends UIOptionsType = {}, > = { name: string; component: ( @@ -52,9 +58,9 @@ export type FieldExtensionOptions< */ export interface FieldExtensionComponentProps< TFieldReturnValue, - TUiOptions extends {} = {}, -> extends FieldProps { - uiSchema: FieldProps['uiSchema'] & { - 'ui:options'?: TUiOptions; + TUiOptions = {}, +> extends PropsWithChildren> { + uiSchema?: UiSchema & { + 'ui:options'?: TUiOptions & UIOptionsType; }; } diff --git a/yarn.lock b/yarn.lock index 8be2e5c8a6..441684ce3d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6742,8 +6742,10 @@ __metadata: "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.57 "@react-hookz/web": ^15.0.0 - "@rjsf/core": ^3.2.1 - "@rjsf/material-ui": ^3.2.1 + "@rjsf/core": ^5.0.0-beta.2 + "@rjsf/material-ui": ^5.0.0-beta.2 + "@rjsf/utils": ^5.0.0-beta.2 + "@rjsf/validator-ajv6": ^5.0.0-beta.2 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -11940,34 +11942,59 @@ __metadata: languageName: node linkType: hard -"@rjsf/core@npm:^3.2.1": - version: 3.2.1 - resolution: "@rjsf/core@npm:3.2.1" +"@rjsf/core@npm:^5.0.0-beta.2": + version: 5.0.0-beta.5 + resolution: "@rjsf/core@npm:5.0.0-beta.5" dependencies: - "@types/json-schema": ^7.0.7 - ajv: ^6.7.0 - core-js-pure: ^3.6.5 - json-schema-merge-allof: ^0.6.0 - jsonpointer: ^5.0.0 lodash: ^4.17.15 - nanoid: ^3.1.23 + lodash-es: ^4.17.15 + nanoid: ^3.3.4 prop-types: ^15.7.2 - react-is: ^16.9.0 peerDependencies: - react: ">=16" - checksum: 2142d4a31229ea242b79aca4ed93e2fe89e75f15ce93111457c3017d3ab295cae8f53e4dd870c619afa571959d00f46b3c19085c6a336f522c891fc07ecc46f1 + "@rjsf/utils": ^5.0.0-beta.1 + react: ^16.14.0 || >=17 + checksum: bf9538f98e6238b427afb5cccdcbb88dc7cf99d3dc9c25c8336c8cac6b82c6383fa29cb48139d312f737d668b4f836bca9fac4debebc8bd9ee46a3f8178ad37b languageName: node linkType: hard -"@rjsf/material-ui@npm:^3.2.1": - version: 3.2.1 - resolution: "@rjsf/material-ui@npm:3.2.1" +"@rjsf/material-ui@npm:^5.0.0-beta.2": + version: 5.0.0-beta.5 + resolution: "@rjsf/material-ui@npm:5.0.0-beta.5" peerDependencies: - "@material-ui/core": ^4.2.0 - "@material-ui/icons": ^4.2.1 - "@rjsf/core": ^3.0.0 - react: ">=16" - checksum: bd25cd9f2e2d568c653755e7268fe3e53279e1ae675e39bccd85f65557623d2052b706763e017a949f897751e25a16d0f2c8b995508bb56907be6786b09e2b1e + "@material-ui/core": ^4.12.3 + "@material-ui/icons": ^4.11.2 + "@rjsf/core": ^5.0.0-beta.1 + "@rjsf/utils": ^5.0.0-beta.1 + react: ^16.14.0 || >=17 + checksum: 2578ff81c9981ecefab6752a6de6f684cdc4ad0d5a3e4090456a42f811c055437b22ecb662610877598a640d624af9381ef3f15b93bb3a8abfae33770c51d194 + languageName: node + linkType: hard + +"@rjsf/utils@npm:^5.0.0-beta.2": + version: 5.0.0-beta.5 + resolution: "@rjsf/utils@npm:5.0.0-beta.5" + dependencies: + json-schema-merge-allof: ^0.8.1 + jsonpointer: ^5.0.1 + lodash: ^4.17.15 + lodash-es: ^4.17.15 + react-is: ^18.2.0 + peerDependencies: + react: ^16.14.0 || >=17 + checksum: 56549a1b86c068631e19f67c157fbe12e2ec99be2fcbe1b6375f7865b178b874ebce03a129064dcf2c2858b5991067dedac1e4490106269cf81dc4377717dcff + languageName: node + linkType: hard + +"@rjsf/validator-ajv6@npm:^5.0.0-beta.2": + version: 5.0.0-beta.5 + resolution: "@rjsf/validator-ajv6@npm:5.0.0-beta.5" + dependencies: + ajv: ^6.7.0 + lodash: ^4.17.15 + lodash-es: ^4.17.15 + peerDependencies: + "@rjsf/utils": ^5.0.0-beta.1 + checksum: 20e4bf431d8c805e180999c300819b049c52c19cff6f4b5e402edc8eb7757697dc1debb191ccf41bac63de88d067513ba33de958250d6e923f1d34fdaea7283c languageName: node linkType: hard @@ -18550,7 +18577,7 @@ __metadata: languageName: node linkType: hard -"compute-lcm@npm:^1.1.0, compute-lcm@npm:^1.1.2": +"compute-lcm@npm:^1.1.2": version: 1.1.2 resolution: "compute-lcm@npm:1.1.2" dependencies: @@ -18786,7 +18813,7 @@ __metadata: languageName: node linkType: hard -"core-js-pure@npm:^3.20.2, core-js-pure@npm:^3.6.5, core-js-pure@npm:^3.8.1": +"core-js-pure@npm:^3.20.2, core-js-pure@npm:^3.8.1": version: 3.21.1 resolution: "core-js-pure@npm:3.21.1" checksum: 00a5dff599b7fb0b30746a638b9d0edbdc0df24ed1580ca56be595fbe3c78c375d37fc4e1bff23627109229702c9ee8ea2587a66b8280eb33b85160aa4e401e9 @@ -22077,7 +22104,6 @@ __metadata: "@material-ui/lab": 4.0.0-alpha.57 "@octokit/rest": ^19.0.3 "@oriflame/backstage-plugin-score-card": ^0.5.1 - "@rjsf/core": ^3.2.1 "@roadiehq/backstage-plugin-buildkite": ^2.0.8 "@roadiehq/backstage-plugin-github-insights": ^2.0.5 "@roadiehq/backstage-plugin-github-pull-requests": ^2.2.7 @@ -27172,17 +27198,6 @@ __metadata: languageName: node linkType: hard -"json-schema-merge-allof@npm:^0.6.0": - version: 0.6.0 - resolution: "json-schema-merge-allof@npm:0.6.0" - dependencies: - compute-lcm: ^1.1.0 - json-schema-compare: ^0.2.2 - lodash: ^4.17.4 - checksum: 2008aede3f5d05d7870e7d5e554e5c6a5b451cfff1357d34d3d8b34e2ba57468a97c76aa5b967bdb411d91b98c734f19f350de578d25b2a0a27cd4e1ca92bd1d - languageName: node - linkType: hard - "json-schema-merge-allof@npm:^0.8.1": version: 0.8.1 resolution: "json-schema-merge-allof@npm:0.8.1" @@ -27359,10 +27374,10 @@ __metadata: languageName: node linkType: hard -"jsonpointer@npm:^5.0.0": - version: 5.0.0 - resolution: "jsonpointer@npm:5.0.0" - checksum: c7ec0b6bb596b81de687bc12945586bbcdc80dfb54919656d2690d76334f796a936270067ee9f1b5bbc2d9ecc551afb366ac35e6685aa61f07b5b68d1e5e857d +"jsonpointer@npm:^5.0.1": + version: 5.0.1 + resolution: "jsonpointer@npm:5.0.1" + checksum: 0b40f712900ad0c846681ea2db23b6684b9d5eedf55807b4708c656f5894b63507d0e28ae10aa1bddbea551241035afe62b6df0800fc94c2e2806a7f3adecd7c languageName: node linkType: hard @@ -28097,7 +28112,7 @@ __metadata: languageName: node linkType: hard -"lodash-es@npm:^4.17.21": +"lodash-es@npm:^4.17.15, lodash-es@npm:^4.17.21": version: 4.17.21 resolution: "lodash-es@npm:4.17.21" checksum: 05cbffad6e2adbb331a4e16fbd826e7faee403a1a04873b82b42c0f22090f280839f85b95393f487c1303c8a3d2a010048bf06151a6cbe03eee4d388fb0a12d2 @@ -30062,15 +30077,6 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.1.23": - version: 3.3.1 - resolution: "nanoid@npm:3.3.1" - bin: - nanoid: bin/nanoid.cjs - checksum: 4ef0969e1bbe866fc223eb32276cbccb0961900bfe79104fa5abe34361979dead8d0e061410a5c03bc3d47455685adf32c09d6f27790f4a6898fb51f7df7ec86 - languageName: node - linkType: hard - "nanoid@npm:^3.3.4": version: 3.3.4 resolution: "nanoid@npm:3.3.4" @@ -33568,7 +33574,7 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.10.2, react-is@npm:^16.12.0, react-is@npm:^16.13.1, react-is@npm:^16.7.0, react-is@npm:^16.8.0, react-is@npm:^16.8.6, react-is@npm:^16.9.0": +"react-is@npm:^16.10.2, react-is@npm:^16.12.0, react-is@npm:^16.13.1, react-is@npm:^16.7.0, react-is@npm:^16.8.0, react-is@npm:^16.8.6": version: 16.13.1 resolution: "react-is@npm:16.13.1" checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f @@ -33589,6 +33595,13 @@ __metadata: languageName: node linkType: hard +"react-is@npm:^18.2.0": + version: 18.2.0 + resolution: "react-is@npm:18.2.0" + checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e + languageName: node + linkType: hard + "react-lifecycles-compat@npm:^3.0.4": version: 3.0.4 resolution: "react-lifecycles-compat@npm:3.0.4" From adfb075796e5022a16cfaa6311c7fd6cedcbf0e2 Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 8 Sep 2022 14:25:09 +0200 Subject: [PATCH 149/278] chore: one last error Signed-off-by: blam --- .../src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx | 5 +---- .../src/next/TemplateWizardPage/Stepper/Stepper.tsx | 6 +++--- .../src/next/TemplateWizardPage/Stepper/schema.ts | 2 +- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx b/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx index 870ec9dd53..451df857e5 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx @@ -62,10 +62,7 @@ export interface RepoUrlPickerUiOptions { * @public */ export const RepoUrlPicker = ( - props: FieldExtensionComponentProps< - string | undefined, - RepoUrlPickerUiOptions - >, + props: FieldExtensionComponentProps, ) => { const { uiSchema, onChange, rawErrors, formData } = props; const [state, setState] = useState( diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx index ccdf32542a..ade7c982ff 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx +++ b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx @@ -23,7 +23,7 @@ import { makeStyles, } from '@material-ui/core'; import { withTheme } from '@rjsf/core'; -import { FieldValidation } from '@rjsf/utils'; +import { ErrorSchema, FieldValidation } from '@rjsf/utils'; import { Theme as MuiTheme } from '@rjsf/material-ui'; import React, { useMemo, useState } from 'react'; import { FieldExtensionOptions } from '../../../extensions'; @@ -95,7 +95,7 @@ export const Stepper = (props: StepperProps) => { const returnedValidation = await validation(formData); const hasErrors = Object.values(returnedValidation).some(i => { - return i.__errors.length > 0; + return i.__errors?.length! > 0 ?? false; }); if (hasErrors) { @@ -127,7 +127,7 @@ export const Stepper = (props: StepperProps) => { {activeStep < steps.length ? ( { const fieldValidation: FieldValidation = { __errors: [] as string[], addError: (message: string) => { - fieldValidation.__errors.push(message); + fieldValidation.__errors?.push(message); }, }; From 7443c37ffc2a07fffe3a9aa2fdde8e682db9b596 Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 12 Sep 2022 10:49:14 +0200 Subject: [PATCH 150/278] chore: fixing some typescripty things Signed-off-by: blam --- .../components/fields/RepoUrlPicker/RepoUrlPicker.test.tsx | 5 ++++- .../src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.test.tsx b/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.test.tsx index 0133c4a29c..9f126f52a0 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.test.tsx +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.test.tsx @@ -26,7 +26,7 @@ import { } from '@backstage/integration-react'; import { scaffolderApiRef } from '../../../api'; import { ScaffolderApi } from '../../../types'; - +import validator from '@rjsf/validator-ajv6'; import { SecretsContextProvider, SecretsContext, @@ -67,6 +67,7 @@ describe('RepoUrlPicker', () => { > }} @@ -103,6 +104,7 @@ describe('RepoUrlPicker', () => { > { > , + props: FieldExtensionComponentProps< + string | undefined, + RepoUrlPickerUiOptions + >, ) => { const { uiSchema, onChange, rawErrors, formData } = props; const [state, setState] = useState( From ffe1357499af9b5fb22a8121e877b0c58c4e6360 Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 27 Sep 2022 10:40:13 +0200 Subject: [PATCH 151/278] chore: fix Signed-off-by: blam --- plugins/scaffolder/package.json | 10 +- .../MultistepJsonForm/MultistepJsonForm.tsx | 2 - .../RepoUrlPicker/RepoUrlPicker.test.tsx | 2 - plugins/scaffolder/src/extensions/types.ts | 13 +-- yarn.lock | 104 +++++++++++++----- 5 files changed, 88 insertions(+), 43 deletions(-) diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index cf28227e8e..6508ae77e7 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -54,10 +54,12 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", "@react-hookz/web": "^15.0.0", - "@rjsf/core": "^5.0.0-beta.2", - "@rjsf/material-ui": "^5.0.0-beta.2", - "@rjsf/utils": "^5.0.0-beta.2", - "@rjsf/validator-ajv6": "^5.0.0-beta.2", + "@rjsf/core": "^3.2.1", + "@rjsf/core-v5": "npm:@rjsf/core@^5.0.0-beta.9", + "@rjsf/material-ui": "^3.2.1", + "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@^5.0.0-beta.9", + "@rjsf/utils": "^5.0.0-beta.9", + "@rjsf/validator-ajv8": "^5.0.0-beta.9", "@types/json-schema": "^7.0.9", "@uiw/react-codemirror": "^4.9.3", "classnames": "^2.2.6", diff --git a/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx b/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx index 064299f667..7ab3007e99 100644 --- a/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx +++ b/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx @@ -32,7 +32,6 @@ import { import { UiSchema } from '@rjsf/utils'; import { FormProps, IChangeEvent, withTheme } from '@rjsf/core'; import { Theme } from '@rjsf/material-ui'; -import validator from '@rjsf/validator-ajv6'; import React, { useState } from 'react'; import { transformSchemaToProps } from './schema'; import { Content, StructuredMetadataTable } from '@backstage/core-components'; @@ -208,7 +207,6 @@ export const MultistepJsonForm = (props: Props) => { { > }} diff --git a/plugins/scaffolder/src/extensions/types.ts b/plugins/scaffolder/src/extensions/types.ts index 85f8f99fd4..4758d96f66 100644 --- a/plugins/scaffolder/src/extensions/types.ts +++ b/plugins/scaffolder/src/extensions/types.ts @@ -14,12 +14,7 @@ * limitations under the License. */ import { ApiHolder } from '@backstage/core-plugin-api'; -import { - FieldValidation, - FieldProps, - UIOptionsType, - UiSchema, -} from '@rjsf/utils'; +import { FieldValidation, FieldProps, UiSchema } from '@rjsf/core'; import { PropsWithChildren } from 'react'; /** @@ -41,7 +36,7 @@ export type CustomFieldValidator = ( */ export type FieldExtensionOptions< TFieldReturnValue = unknown, - TInputProps extends UIOptionsType = {}, + TInputProps extends {} = {}, > = { name: string; component: ( @@ -60,7 +55,7 @@ export interface FieldExtensionComponentProps< TFieldReturnValue, TUiOptions = {}, > extends PropsWithChildren> { - uiSchema?: UiSchema & { - 'ui:options'?: TUiOptions & UIOptionsType; + uiSchema: UiSchema & { + 'ui:options': TUiOptions; }; } diff --git a/yarn.lock b/yarn.lock index 441684ce3d..dcecfe2b9f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6742,10 +6742,12 @@ __metadata: "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.57 "@react-hookz/web": ^15.0.0 - "@rjsf/core": ^5.0.0-beta.2 - "@rjsf/material-ui": ^5.0.0-beta.2 - "@rjsf/utils": ^5.0.0-beta.2 - "@rjsf/validator-ajv6": ^5.0.0-beta.2 + "@rjsf/core": ^3.2.1 + "@rjsf/core-v5": "npm:@rjsf/core@^5.0.0-beta.9" + "@rjsf/material-ui": ^3.2.1 + "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@^5.0.0-beta.9" + "@rjsf/utils": ^5.0.0-beta.9 + "@rjsf/validator-ajv8": ^5.0.0-beta.9 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -11942,9 +11944,9 @@ __metadata: languageName: node linkType: hard -"@rjsf/core@npm:^5.0.0-beta.2": - version: 5.0.0-beta.5 - resolution: "@rjsf/core@npm:5.0.0-beta.5" +"@rjsf/core-v5@npm:@rjsf/core@^5.0.0-beta.9": + version: 5.0.0-beta.9 + resolution: "@rjsf/core@npm:5.0.0-beta.9" dependencies: lodash: ^4.17.15 lodash-es: ^4.17.15 @@ -11953,26 +11955,57 @@ __metadata: peerDependencies: "@rjsf/utils": ^5.0.0-beta.1 react: ^16.14.0 || >=17 - checksum: bf9538f98e6238b427afb5cccdcbb88dc7cf99d3dc9c25c8336c8cac6b82c6383fa29cb48139d312f737d668b4f836bca9fac4debebc8bd9ee46a3f8178ad37b + checksum: b55e1a4b3f9f638afdeda1da0abeb145040081201b2f9ed680c93d3dea2ee20e1066da5d2c32c69916d9f2fce422ecb8058f303b9f4df1b20dacf35564f5c7ec languageName: node linkType: hard -"@rjsf/material-ui@npm:^5.0.0-beta.2": - version: 5.0.0-beta.5 - resolution: "@rjsf/material-ui@npm:5.0.0-beta.5" +"@rjsf/core@npm:^3.2.1": + version: 3.2.1 + resolution: "@rjsf/core@npm:3.2.1" + dependencies: + "@types/json-schema": ^7.0.7 + ajv: ^6.7.0 + core-js-pure: ^3.6.5 + json-schema-merge-allof: ^0.6.0 + jsonpointer: ^5.0.0 + lodash: ^4.17.15 + nanoid: ^3.1.23 + prop-types: ^15.7.2 + react-is: ^16.9.0 + peerDependencies: + react: ">=16" + checksum: 2142d4a31229ea242b79aca4ed93e2fe89e75f15ce93111457c3017d3ab295cae8f53e4dd870c619afa571959d00f46b3c19085c6a336f522c891fc07ecc46f1 + languageName: node + linkType: hard + +"@rjsf/material-ui-v5@npm:@rjsf/material-ui@^5.0.0-beta.9": + version: 5.0.0-beta.9 + resolution: "@rjsf/material-ui@npm:5.0.0-beta.9" peerDependencies: "@material-ui/core": ^4.12.3 "@material-ui/icons": ^4.11.2 "@rjsf/core": ^5.0.0-beta.1 "@rjsf/utils": ^5.0.0-beta.1 react: ^16.14.0 || >=17 - checksum: 2578ff81c9981ecefab6752a6de6f684cdc4ad0d5a3e4090456a42f811c055437b22ecb662610877598a640d624af9381ef3f15b93bb3a8abfae33770c51d194 + checksum: 44624d1aff0f30963d7ae2ab529713d9fcf6e6df809264d6bdee7ef5e71934ab031dbba9dcc9c10be05cb7b0fd679f6fbb1eb27ce7081940b56034a5f2564093 languageName: node linkType: hard -"@rjsf/utils@npm:^5.0.0-beta.2": - version: 5.0.0-beta.5 - resolution: "@rjsf/utils@npm:5.0.0-beta.5" +"@rjsf/material-ui@npm:^3.2.1": + version: 3.2.1 + resolution: "@rjsf/material-ui@npm:3.2.1" + peerDependencies: + "@material-ui/core": ^4.2.0 + "@material-ui/icons": ^4.2.1 + "@rjsf/core": ^3.0.0 + react: ">=16" + checksum: bd25cd9f2e2d568c653755e7268fe3e53279e1ae675e39bccd85f65557623d2052b706763e017a949f897751e25a16d0f2c8b995508bb56907be6786b09e2b1e + languageName: node + linkType: hard + +"@rjsf/utils@npm:^5.0.0-beta.9": + version: 5.0.0-beta.9 + resolution: "@rjsf/utils@npm:5.0.0-beta.9" dependencies: json-schema-merge-allof: ^0.8.1 jsonpointer: ^5.0.1 @@ -11981,20 +12014,21 @@ __metadata: react-is: ^18.2.0 peerDependencies: react: ^16.14.0 || >=17 - checksum: 56549a1b86c068631e19f67c157fbe12e2ec99be2fcbe1b6375f7865b178b874ebce03a129064dcf2c2858b5991067dedac1e4490106269cf81dc4377717dcff + checksum: ac5b99cf7860c838e5b509a523b19824f4966ec8d44284a026bf81de7c7733bac40432af4c67ab538bd400f529dc55d9001e07618a514cac365cd604ff786b11 languageName: node linkType: hard -"@rjsf/validator-ajv6@npm:^5.0.0-beta.2": - version: 5.0.0-beta.5 - resolution: "@rjsf/validator-ajv6@npm:5.0.0-beta.5" +"@rjsf/validator-ajv8@npm:^5.0.0-beta.9": + version: 5.0.0-beta.9 + resolution: "@rjsf/validator-ajv8@npm:5.0.0-beta.9" dependencies: - ajv: ^6.7.0 + ajv: ^8.11.0 + ajv-formats: ^2.1.1 lodash: ^4.17.15 lodash-es: ^4.17.15 peerDependencies: "@rjsf/utils": ^5.0.0-beta.1 - checksum: 20e4bf431d8c805e180999c300819b049c52c19cff6f4b5e402edc8eb7757697dc1debb191ccf41bac63de88d067513ba33de958250d6e923f1d34fdaea7283c + checksum: 64ca81f1f440b08f959d61e1f97b25d890cd8f03582287004961d0ba0ec7d6719748b00d821ef009d330816ca2e4e030d46fa695a3c12c338518e469242694cd languageName: node linkType: hard @@ -15653,7 +15687,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^8.0.0, ajv@npm:^8.10.0, ajv@npm:^8.6.3, ajv@npm:^8.8.0": +"ajv@npm:^8.0.0, ajv@npm:^8.10.0, ajv@npm:^8.11.0, ajv@npm:^8.6.3, ajv@npm:^8.8.0": version: 8.11.0 resolution: "ajv@npm:8.11.0" dependencies: @@ -18577,7 +18611,7 @@ __metadata: languageName: node linkType: hard -"compute-lcm@npm:^1.1.2": +"compute-lcm@npm:^1.1.0, compute-lcm@npm:^1.1.2": version: 1.1.2 resolution: "compute-lcm@npm:1.1.2" dependencies: @@ -18820,6 +18854,13 @@ __metadata: languageName: node linkType: hard +"core-js-pure@npm:^3.6.5": + version: 3.25.3 + resolution: "core-js-pure@npm:3.25.3" + checksum: be3097b8e2b541977a08004e433b68adb4951cc7694229e695ae407f296d370c1f360e5fd70fc6910c4427e46e48e087ac455d68cebdf4314370907d2e03eef1 + languageName: node + linkType: hard + "core-js@npm:^2.4.0, core-js@npm:^2.5.0, core-js@npm:^2.6.10": version: 2.6.12 resolution: "core-js@npm:2.6.12" @@ -27198,6 +27239,17 @@ __metadata: languageName: node linkType: hard +"json-schema-merge-allof@npm:^0.6.0": + version: 0.6.0 + resolution: "json-schema-merge-allof@npm:0.6.0" + dependencies: + compute-lcm: ^1.1.0 + json-schema-compare: ^0.2.2 + lodash: ^4.17.4 + checksum: 2008aede3f5d05d7870e7d5e554e5c6a5b451cfff1357d34d3d8b34e2ba57468a97c76aa5b967bdb411d91b98c734f19f350de578d25b2a0a27cd4e1ca92bd1d + languageName: node + linkType: hard + "json-schema-merge-allof@npm:^0.8.1": version: 0.8.1 resolution: "json-schema-merge-allof@npm:0.8.1" @@ -27374,7 +27426,7 @@ __metadata: languageName: node linkType: hard -"jsonpointer@npm:^5.0.1": +"jsonpointer@npm:^5.0.0, jsonpointer@npm:^5.0.1": version: 5.0.1 resolution: "jsonpointer@npm:5.0.1" checksum: 0b40f712900ad0c846681ea2db23b6684b9d5eedf55807b4708c656f5894b63507d0e28ae10aa1bddbea551241035afe62b6df0800fc94c2e2806a7f3adecd7c @@ -30077,7 +30129,7 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.3.4": +"nanoid@npm:^3.1.23, nanoid@npm:^3.3.4": version: 3.3.4 resolution: "nanoid@npm:3.3.4" bin: @@ -33574,7 +33626,7 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.10.2, react-is@npm:^16.12.0, react-is@npm:^16.13.1, react-is@npm:^16.7.0, react-is@npm:^16.8.0, react-is@npm:^16.8.6": +"react-is@npm:^16.10.2, react-is@npm:^16.12.0, react-is@npm:^16.13.1, react-is@npm:^16.7.0, react-is@npm:^16.8.0, react-is@npm:^16.8.6, react-is@npm:^16.9.0": version: 16.13.1 resolution: "react-is@npm:16.13.1" checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f From d362737143a2a9be3c17a2b79d67a9b29a408b7a Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 27 Sep 2022 14:24:52 +0200 Subject: [PATCH 152/278] chore: reset some things so we can run it in paralell Signed-off-by: blam --- .../FieldOverrides/DescriptionField.tsx | 2 +- .../MultistepJsonForm/MultistepJsonForm.tsx | 9 ++- .../TemplatePage/createValidator.test.ts | 4 +- .../TemplatePage/createValidator.ts | 4 +- .../fields/EntityPicker/EntityPicker.test.tsx | 8 +-- .../fields/EntityPicker/EntityPicker.tsx | 13 ++-- .../fields/OwnerPicker/OwnerPicker.test.tsx | 4 +- .../fields/OwnerPicker/OwnerPicker.tsx | 8 +-- .../RepoUrlPicker/RepoUrlPicker.test.tsx | 15 ++--- .../fields/RepoUrlPicker/RepoUrlPicker.tsx | 5 +- .../fields/RepoUrlPicker/validation.test.ts | 2 +- .../fields/RepoUrlPicker/validation.ts | 4 +- plugins/scaffolder/src/extensions/index.tsx | 34 ++++++++++- plugins/scaffolder/src/extensions/types.ts | 61 +++++++++++++++++-- .../TemplateWizardPage/Stepper/Stepper.tsx | 6 +- .../Stepper/createAsyncValidators.test.ts | 13 ++-- .../Stepper/createAsyncValidators.ts | 4 +- 17 files changed, 134 insertions(+), 62 deletions(-) diff --git a/plugins/scaffolder/src/components/MultistepJsonForm/FieldOverrides/DescriptionField.tsx b/plugins/scaffolder/src/components/MultistepJsonForm/FieldOverrides/DescriptionField.tsx index eded38beee..3c592860ef 100644 --- a/plugins/scaffolder/src/components/MultistepJsonForm/FieldOverrides/DescriptionField.tsx +++ b/plugins/scaffolder/src/components/MultistepJsonForm/FieldOverrides/DescriptionField.tsx @@ -16,7 +16,7 @@ import React from 'react'; import { MarkdownContent } from '@backstage/core-components'; -import { FieldProps } from '@rjsf/utils'; +import { FieldProps } from '@rjsf/core'; export const DescriptionField = ({ description }: FieldProps) => description && ; diff --git a/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx b/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx index 7ab3007e99..8c71df67b6 100644 --- a/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx +++ b/plugins/scaffolder/src/components/MultistepJsonForm/MultistepJsonForm.tsx @@ -29,9 +29,8 @@ import { useApi, featureFlagsApiRef, } from '@backstage/core-plugin-api'; -import { UiSchema } from '@rjsf/utils'; -import { FormProps, IChangeEvent, withTheme } from '@rjsf/core'; -import { Theme } from '@rjsf/material-ui'; +import { FormProps, IChangeEvent, UiSchema, withTheme } from '@rjsf/core'; +import { Theme as MuiTheme } from '@rjsf/material-ui'; import React, { useState } from 'react'; import { transformSchemaToProps } from './schema'; import { Content, StructuredMetadataTable } from '@backstage/core-components'; @@ -39,6 +38,7 @@ import cloneDeep from 'lodash/cloneDeep'; import * as fieldOverrides from './FieldOverrides'; import { LayoutOptions } from '../../layouts'; +const Form = withTheme(MuiTheme); type Step = { schema: JsonObject; title: string; @@ -123,7 +123,6 @@ export const MultistepJsonForm = (props: Props) => { finishButtonLabel, layouts, } = props; - const Form = withTheme(Theme); const [activeStep, setActiveStep] = useState(0); const [disableButtons, setDisableButtons] = useState(false); const errorApi = useApi(errorApiRef); @@ -214,7 +213,7 @@ export const MultistepJsonForm = (props: Props) => { formData={formData} formContext={{ formData }} onChange={onChange} - onSubmit={(e: any) => { + onSubmit={e => { if (e.errors.length === 0) handleNext(); }} {...formProps} diff --git a/plugins/scaffolder/src/components/TemplatePage/createValidator.test.ts b/plugins/scaffolder/src/components/TemplatePage/createValidator.test.ts index eea5efc296..f549c9e7f2 100644 --- a/plugins/scaffolder/src/components/TemplatePage/createValidator.test.ts +++ b/plugins/scaffolder/src/components/TemplatePage/createValidator.test.ts @@ -17,7 +17,7 @@ import { createValidator } from './createValidator'; import { CustomFieldValidator } from '../../extensions'; import { ApiHolder } from '@backstage/core-plugin-api'; -import { FormValidation } from '@rjsf/utils'; +import { FormValidation } from '@rjsf/core'; describe('createValidator', () => { const validators: Record> = @@ -68,6 +68,6 @@ describe('createValidator', () => { /* THEN */ expect(result).not.toBeNull(); - expect(result.p1?.addError).toHaveBeenCalledTimes(1); + expect(result.p1.addError).toHaveBeenCalledTimes(1); }); }); diff --git a/plugins/scaffolder/src/components/TemplatePage/createValidator.ts b/plugins/scaffolder/src/components/TemplatePage/createValidator.ts index d1c55009a9..9cd1489a02 100644 --- a/plugins/scaffolder/src/components/TemplatePage/createValidator.ts +++ b/plugins/scaffolder/src/components/TemplatePage/createValidator.ts @@ -15,7 +15,7 @@ */ import { CustomFieldValidator } from '../../extensions'; -import { FormValidation } from '@rjsf/utils'; +import { FormValidation } from '@rjsf/core'; import { JsonObject, JsonValue } from '@backstage/types'; import { ApiHolder } from '@backstage/core-plugin-api'; @@ -62,7 +62,7 @@ export const createValidator = ( if (fieldName && typeof validators[fieldName] === 'function') { validators[fieldName]!( propData as JsonValue, - propValidation as FormValidation, + propValidation, context, ); } diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx index ffc447577a..942eef9d82 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx +++ b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.test.tsx @@ -17,7 +17,7 @@ import { Entity } from '@backstage/catalog-model'; import { CatalogApi, catalogApiRef } from '@backstage/plugin-catalog-react'; import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; -import { FieldProps } from '@rjsf/utils'; +import { FieldProps } from '@rjsf/core'; import { fireEvent } from '@testing-library/react'; import React from 'react'; import { EntityPicker } from './EntityPicker'; @@ -39,7 +39,7 @@ describe('', () => { const rawErrors: string[] = []; const formData = undefined; - let props: FieldProps; + let props: FieldProps; const catalogApi: jest.Mocked = { getLocationById: jest.fn(), @@ -76,7 +76,7 @@ describe('', () => { uiSchema, rawErrors, formData, - } as any; + } as unknown as FieldProps; catalogApi.getEntities.mockResolvedValue({ items: entities }); }); @@ -117,7 +117,7 @@ describe('', () => { uiSchema, rawErrors, formData, - } as any; + } as unknown as FieldProps; catalogApi.getEntities.mockResolvedValue({ items: entities }); }); diff --git a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx index a040320d79..e7883a4721 100644 --- a/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx +++ b/plugins/scaffolder/src/components/fields/EntityPicker/EntityPicker.tsx @@ -45,10 +45,7 @@ export interface EntityPickerUiOptions { * @public */ export const EntityPicker = ( - props: FieldExtensionComponentProps< - string | undefined, - EntityPickerUiOptions - >, + props: FieldExtensionComponentProps, ) => { const { onChange, @@ -59,9 +56,9 @@ export const EntityPicker = ( formData, idSchema, } = props; - const allowedKinds = uiSchema?.['ui:options']?.allowedKinds; - const defaultKind = uiSchema?.['ui:options']?.defaultKind; - const defaultNamespace = uiSchema?.['ui:options']?.defaultNamespace; + const allowedKinds = uiSchema['ui:options']?.allowedKinds; + const defaultKind = uiSchema['ui:options']?.defaultKind; + const defaultNamespace = uiSchema['ui:options']?.defaultNamespace; const catalogApi = useApi(catalogApiRef); @@ -102,7 +99,7 @@ export const EntityPicker = ( onChange={onSelect} options={entityRefs || []} autoSelect - freeSolo={uiSchema?.['ui:options']?.allowArbitraryValues ?? true} + freeSolo={uiSchema['ui:options']?.allowArbitraryValues ?? true} renderInput={params => ( ', () => { const rawErrors: string[] = []; const formData = undefined; - let props: FieldProps; + let props: FieldProps; const catalogApi: jest.Mocked = { getLocationById: jest.fn(), diff --git a/plugins/scaffolder/src/components/fields/OwnerPicker/OwnerPicker.tsx b/plugins/scaffolder/src/components/fields/OwnerPicker/OwnerPicker.tsx index 8ce01fc3ef..3de2b12bd0 100644 --- a/plugins/scaffolder/src/components/fields/OwnerPicker/OwnerPicker.tsx +++ b/plugins/scaffolder/src/components/fields/OwnerPicker/OwnerPicker.tsx @@ -36,7 +36,7 @@ export interface OwnerPickerUiOptions { * @public */ export const OwnerPicker = ( - props: FieldExtensionComponentProps, + props: FieldExtensionComponentProps, ) => { const { schema: { title = 'Owner', description = 'The owner of the component' }, @@ -44,18 +44,18 @@ export const OwnerPicker = ( ...restProps } = props; - const defaultNamespace = uiSchema?.['ui:options']?.defaultNamespace; + const defaultNamespace = uiSchema['ui:options']?.defaultNamespace; const ownerUiSchema = { ...uiSchema, 'ui:options': { - allowedKinds: (uiSchema?.['ui:options']?.allowedKinds || [ + allowedKinds: (uiSchema['ui:options']?.allowedKinds || [ 'Group', 'User', ]) as string[], defaultKind: 'Group', allowArbitraryValues: - uiSchema?.['ui:options']?.allowArbitraryValues ?? true, + uiSchema['ui:options']?.allowArbitraryValues ?? true, ...(defaultNamespace !== undefined ? { defaultNamespace } : {}), }, }; diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.test.tsx b/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.test.tsx index f28b4bc816..7fac9f7840 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.test.tsx +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.test.tsx @@ -15,8 +15,7 @@ */ import React, { useContext } from 'react'; import { RepoUrlPicker } from './RepoUrlPicker'; -import { withTheme } from '@rjsf/core'; -import { Theme } from '@rjsf/material-ui'; +import Form from '@rjsf/core'; import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; import { scmIntegrationsApiRef, @@ -26,12 +25,12 @@ import { } from '@backstage/integration-react'; import { scaffolderApiRef } from '../../../api'; import { ScaffolderApi } from '../../../types'; + import { SecretsContextProvider, SecretsContext, } from '../../secrets/SecretsContext'; import { act, fireEvent } from '@testing-library/react'; -import { Field } from '@rjsf/utils'; describe('RepoUrlPicker', () => { const mockScaffolderApi: Partial = { @@ -51,8 +50,6 @@ describe('RepoUrlPicker', () => { getCredentials: jest.fn().mockResolvedValue({ token: 'abc123' }), }; - const Form = withTheme(Theme); - describe('happy path rendering', () => { it('should render the repo url picker with minimal props', async () => { const onSubmit = jest.fn(); @@ -68,7 +65,7 @@ describe('RepoUrlPicker', () => { }} + fields={{ RepoUrlPicker: RepoUrlPicker }} onSubmit={onSubmit} /> @@ -102,13 +99,12 @@ describe('RepoUrlPicker', () => { > }} + fields={{ RepoUrlPicker: RepoUrlPicker }} /> , @@ -136,7 +132,6 @@ describe('RepoUrlPicker', () => { > { }, }, }} - fields={{ RepoUrlPicker: RepoUrlPicker as Field }} + fields={{ RepoUrlPicker: RepoUrlPicker }} /> diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx b/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx index 870ec9dd53..451df857e5 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/RepoUrlPicker.tsx @@ -62,10 +62,7 @@ export interface RepoUrlPickerUiOptions { * @public */ export const RepoUrlPicker = ( - props: FieldExtensionComponentProps< - string | undefined, - RepoUrlPickerUiOptions - >, + props: FieldExtensionComponentProps, ) => { const { uiSchema, onChange, rawErrors, formData } = props; const [state, setState] = useState( diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/validation.test.ts b/plugins/scaffolder/src/components/fields/RepoUrlPicker/validation.test.ts index b9c481957c..45e44b4072 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/validation.test.ts +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/validation.test.ts @@ -15,7 +15,7 @@ */ import { repoPickerValidation } from './validation'; -import { FieldValidation } from '@rjsf/utils'; +import { FieldValidation } from '@rjsf/core'; import { ScmIntegrations } from '@backstage/integration'; import { ConfigReader } from '@backstage/core-app-api'; import { ApiHolder } from '@backstage/core-plugin-api'; diff --git a/plugins/scaffolder/src/components/fields/RepoUrlPicker/validation.ts b/plugins/scaffolder/src/components/fields/RepoUrlPicker/validation.ts index ae4f2ec1b9..99847f9e3b 100644 --- a/plugins/scaffolder/src/components/fields/RepoUrlPicker/validation.ts +++ b/plugins/scaffolder/src/components/fields/RepoUrlPicker/validation.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { FieldValidation } from '@rjsf/utils'; +import { FieldValidation } from '@rjsf/core'; import { ApiHolder } from '@backstage/core-plugin-api'; import { scmIntegrationsApiRef } from '@backstage/integration-react'; @@ -26,7 +26,7 @@ import { scmIntegrationsApiRef } from '@backstage/integration-react'; * @public */ export const repoPickerValidation = ( - value: string | undefined, + value: string, validation: FieldValidation, context: { apiHolder: ApiHolder }, ) => { diff --git a/plugins/scaffolder/src/extensions/index.tsx b/plugins/scaffolder/src/extensions/index.tsx index 21a565bf46..38cabd5511 100644 --- a/plugins/scaffolder/src/extensions/index.tsx +++ b/plugins/scaffolder/src/extensions/index.tsx @@ -19,6 +19,9 @@ import { CustomFieldValidator, FieldExtensionOptions, FieldExtensionComponentProps, + NextCustomFieldValidator, + NextFieldExtensionOptions, + NextFieldExtensionComponentProps, } from './types'; import { Extension, attachComponentData } from '@backstage/core-plugin-api'; import { UIOptionsType } from '@rjsf/utils'; @@ -40,7 +43,7 @@ export type FieldExtensionComponent<_TReturnValue, _TInputProps> = () => null; */ export function createScaffolderFieldExtension< TReturnValue = unknown, - TInputProps extends UIOptionsType = {}, + TInputProps = unknown, >( options: FieldExtensionOptions, ): Extension> { @@ -59,6 +62,32 @@ export function createScaffolderFieldExtension< }; } +/** + * Method for creating field extensions that can be used in the scaffolder + * frontend form. + * @alpha + */ +export function createNextScaffolderFieldExtension< + TReturnValue = unknown, + TInputProps extends UIOptionsType = {}, +>( + options: FieldExtensionOptions, +): Extension> { + return { + expose() { + const FieldExtensionDataHolder: any = () => null; + + attachComponentData( + FieldExtensionDataHolder, + FIELD_EXTENSION_KEY, + options, + ); + + return FieldExtensionDataHolder; + }, + }; +} + /** * The Wrapping component for defining fields extensions inside * @@ -77,6 +106,9 @@ export type { CustomFieldValidator, FieldExtensionOptions, FieldExtensionComponentProps, + NextCustomFieldValidator, + NextFieldExtensionOptions, + NextFieldExtensionComponentProps, }; export { DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS } from './default'; diff --git a/plugins/scaffolder/src/extensions/types.ts b/plugins/scaffolder/src/extensions/types.ts index 4758d96f66..627587bba6 100644 --- a/plugins/scaffolder/src/extensions/types.ts +++ b/plugins/scaffolder/src/extensions/types.ts @@ -14,9 +14,16 @@ * limitations under the License. */ import { ApiHolder } from '@backstage/core-plugin-api'; -import { FieldValidation, FieldProps, UiSchema } from '@rjsf/core'; +import { FieldValidation, FieldProps } from '@rjsf/core'; import { PropsWithChildren } from 'react'; +import { + UIOptionsType, + FieldProps as FieldPropsV5, + UiSchema as UiSchemaV5, + FieldValidation as FieldValidationV5, +} from '@rjsf/utils'; + /** * Field validation type for Custom Field Extensions. * @@ -36,7 +43,7 @@ export type CustomFieldValidator = ( */ export type FieldExtensionOptions< TFieldReturnValue = unknown, - TInputProps extends {} = {}, + TInputProps = unknown, > = { name: string; component: ( @@ -53,9 +60,51 @@ export type FieldExtensionOptions< */ export interface FieldExtensionComponentProps< TFieldReturnValue, - TUiOptions = {}, -> extends PropsWithChildren> { - uiSchema: UiSchema & { - 'ui:options': TUiOptions; + TUiOptions extends {} = {}, +> extends FieldProps { + uiSchema: FieldProps['uiSchema'] & { + 'ui:options'?: TUiOptions; }; } + +/** + * Type for Field Extension Props for RJSF v5 + * + * @alpha + */ +export interface NextFieldExtensionComponentProps< + TFieldReturnValue, + TUiOptions = {}, +> extends PropsWithChildren> { + uiSchema?: UiSchemaV5 & { + 'ui:options'?: TUiOptions & UIOptionsType; + }; +} + +/** + * Field validation type for Custom Field Extensions. + * + * @alpha + */ +export type NextCustomFieldValidator = ( + data: TFieldReturnValue, + field: FieldValidationV5, + context: { apiHolder: ApiHolder }, +) => void | Promise; + +/** + * Type for the Custom Field Extension with the + * name and components and validation function. + * + * @alpha + */ +export type NextFieldExtensionOptions< + TFieldReturnValue = unknown, + TInputProps = unknown, +> = { + name: string; + component: ( + props: FieldExtensionComponentProps, + ) => JSX.Element | null; + validation?: NextCustomFieldValidator; +}; diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx index ade7c982ff..aa3a384738 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx +++ b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx @@ -26,12 +26,12 @@ import { withTheme } from '@rjsf/core'; import { ErrorSchema, FieldValidation } from '@rjsf/utils'; import { Theme as MuiTheme } from '@rjsf/material-ui'; import React, { useMemo, useState } from 'react'; -import { FieldExtensionOptions } from '../../../extensions'; +import { NextFieldExtensionOptions } from '../../../extensions'; import { TemplateParameterSchema } from '../../../types'; import { createAsyncValidators } from './createAsyncValidators'; import { useTemplateSchema } from './useTemplateSchema'; import { ReviewState } from './ReviewState'; -import validator from '@rjsf/validator-ajv6'; +import validator from '@rjsf/validator-ajv8'; const useStyles = makeStyles(theme => ({ backButton: { @@ -50,7 +50,7 @@ const useStyles = makeStyles(theme => ({ export interface StepperProps { manifest: TemplateParameterSchema; - extensions: FieldExtensionOptions[]; + extensions: NextFieldExtensionOptions[]; } const Form = withTheme(MuiTheme); diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/createAsyncValidators.test.ts b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/createAsyncValidators.test.ts index ed887fb56d..a4a937e6fe 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/createAsyncValidators.test.ts +++ b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/createAsyncValidators.test.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { JsonObject } from '@backstage/types'; -import { CustomFieldValidator } from '../../../extensions'; +import { NextCustomFieldValidator } from '../../../extensions'; import { createAsyncValidators } from './createAsyncValidators'; describe('createAsyncValidators', () => { @@ -79,13 +79,16 @@ describe('createAsyncValidators', () => { }, }; - const NameField: CustomFieldValidator = (value, { addError }) => { + const NameField: NextCustomFieldValidator = ( + value, + { addError }, + ) => { if (!value) { addError('something is broken here!'); } }; - const AddressField: CustomFieldValidator<{ + const AddressField: NextCustomFieldValidator<{ street?: string; postcode?: string; }> = (value, { addError }) => { @@ -101,8 +104,8 @@ describe('createAsyncValidators', () => { const validate = createAsyncValidators( schema, { - NameField: NameField as CustomFieldValidator, - AddressField: AddressField as CustomFieldValidator, + NameField: NameField as NextCustomFieldValidator, + AddressField: AddressField as NextCustomFieldValidator, }, { apiHolder: { get: jest.fn() }, diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/createAsyncValidators.ts b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/createAsyncValidators.ts index 60eed0f364..1355387eda 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/createAsyncValidators.ts +++ b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/createAsyncValidators.ts @@ -17,13 +17,13 @@ import { FieldValidation } from '@rjsf/utils'; import { JsonObject } from '@backstage/types'; import { ApiHolder } from '@backstage/core-plugin-api'; -import { CustomFieldValidator } from '../../../extensions'; +import { NextCustomFieldValidator } from '../../../extensions'; import { Draft07 as JSONSchema } from 'json-schema-library'; import { createFieldValidation } from './schema'; export const createAsyncValidators = ( rootSchema: JsonObject, - validators: Record>, + validators: Record>, context: { apiHolder: ApiHolder; }, From 2548b5a5909ecf95e97eb0138806fcb9000a1e77 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 28 Sep 2022 18:57:46 +0200 Subject: [PATCH 153/278] chore: typescript is happy. ring the police. Signed-off-by: blam Signed-off-by: blam --- plugins/scaffolder/src/extensions/types.ts | 2 +- plugins/scaffolder/src/next/Router/Router.tsx | 6 +++--- .../src/next/TemplateWizardPage/Stepper/Stepper.tsx | 7 ++++--- .../src/next/TemplateWizardPage/TemplateWizardPage.tsx | 4 ++-- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/plugins/scaffolder/src/extensions/types.ts b/plugins/scaffolder/src/extensions/types.ts index 627587bba6..62f17dff15 100644 --- a/plugins/scaffolder/src/extensions/types.ts +++ b/plugins/scaffolder/src/extensions/types.ts @@ -104,7 +104,7 @@ export type NextFieldExtensionOptions< > = { name: string; component: ( - props: FieldExtensionComponentProps, + props: NextFieldExtensionComponentProps, ) => JSX.Element | null; validation?: NextCustomFieldValidator; }; diff --git a/plugins/scaffolder/src/next/Router/Router.tsx b/plugins/scaffolder/src/next/Router/Router.tsx index 758e268cb3..f0e5823f84 100644 --- a/plugins/scaffolder/src/next/Router/Router.tsx +++ b/plugins/scaffolder/src/next/Router/Router.tsx @@ -18,10 +18,10 @@ import { Routes, Route, useOutlet } from 'react-router'; import { TemplateListPage } from '../TemplateListPage'; import { TemplateWizardPage } from '../TemplateWizardPage'; import { - FieldExtensionOptions, FIELD_EXTENSION_WRAPPER_KEY, FIELD_EXTENSION_KEY, DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS, + NextFieldExtensionOptions, } from '../../extensions'; import { useElementFilter } from '@backstage/core-plugin-api'; @@ -60,7 +60,7 @@ export const Router = (props: PropsWithChildren) => { .selectByComponentData({ key: FIELD_EXTENSION_WRAPPER_KEY, }) - .findComponentData({ + .findComponentData({ key: FIELD_EXTENSION_KEY, }), ); @@ -73,7 +73,7 @@ export const Router = (props: PropsWithChildren) => { customFieldExtension => customFieldExtension.name === name, ), ), - ]; + ] as NextFieldExtensionOptions[]; // here just to coerce the default extensions to the correct type return ( diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx index aa3a384738..2735ea7e61 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx +++ b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx @@ -22,9 +22,9 @@ import { Button, makeStyles, } from '@material-ui/core'; -import { withTheme } from '@rjsf/core'; +import { withTheme } from '@rjsf/core-v5'; import { ErrorSchema, FieldValidation } from '@rjsf/utils'; -import { Theme as MuiTheme } from '@rjsf/material-ui'; +import { Theme as MuiTheme } from '@rjsf/material-ui-v5'; import React, { useMemo, useState } from 'react'; import { NextFieldExtensionOptions } from '../../../extensions'; import { TemplateParameterSchema } from '../../../types'; @@ -53,7 +53,8 @@ export interface StepperProps { extensions: NextFieldExtensionOptions[]; } -const Form = withTheme(MuiTheme); +// This needs an any for some reason, think it coul +const Form = withTheme(MuiTheme as any); export const Stepper = (props: StepperProps) => { const { steps } = useTemplateSchema(props.manifest); diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx b/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx index 468db438d5..f6739e6389 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx +++ b/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx @@ -22,7 +22,7 @@ import { InfoCard, MarkdownContent, } from '@backstage/core-components'; -import { FieldExtensionOptions } from '../../extensions'; +import { NextFieldExtensionOptions } from '../../extensions'; import { Navigate } from 'react-router'; import { stringifyEntityRef } from '@backstage/catalog-model'; import { @@ -39,7 +39,7 @@ import { BackstageTheme } from '@backstage/theme'; import { nextRouteRef, selectedTemplateRouteRef } from '../../routes'; export interface TemplateWizardPageProps { - customFieldExtensions: FieldExtensionOptions[]; + customFieldExtensions: NextFieldExtensionOptions[]; } const useStyles = makeStyles(() => ({ From 2d58be910dc63b5fba08bc2f58bea2782b1b4a2c Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 29 Sep 2022 10:15:48 +0200 Subject: [PATCH 154/278] chore: resetting the fields Signed-off-by: blam --- .../components/scaffolder/customScaffolderExtensions.tsx | 4 ++-- .../fields/EntityNamePicker/EntityNamePicker.tsx | 2 +- .../components/fields/EntityNamePicker/validation.test.ts | 2 +- .../src/components/fields/EntityNamePicker/validation.ts | 2 +- .../fields/EntityTagsPicker/EntityTagsPicker.tsx | 6 +++--- .../fields/OwnedEntityPicker/OwnedEntityPicker.tsx | 8 ++++---- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx b/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx index 3aadd69c05..2a4dedf080 100644 --- a/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx +++ b/packages/app/src/components/scaffolder/customScaffolderExtensions.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ import React from 'react'; -import type { FieldValidation } from '@rjsf/utils'; +import type { FieldValidation } from '@rjsf/core'; import { createScaffolderFieldExtension, FieldExtensionComponentProps, @@ -30,7 +30,7 @@ const TextValuePicker = (props: FieldExtensionComponentProps) => { schema: { title, description }, rawErrors, formData, - uiSchema: { 'ui:autofocus': autoFocus } = {}, + uiSchema: { 'ui:autofocus': autoFocus }, idSchema, placeholder, } = props; diff --git a/plugins/scaffolder/src/components/fields/EntityNamePicker/EntityNamePicker.tsx b/plugins/scaffolder/src/components/fields/EntityNamePicker/EntityNamePicker.tsx index 2b21141edb..802135a863 100644 --- a/plugins/scaffolder/src/components/fields/EntityNamePicker/EntityNamePicker.tsx +++ b/plugins/scaffolder/src/components/fields/EntityNamePicker/EntityNamePicker.tsx @@ -29,7 +29,7 @@ export const EntityNamePicker = ( schema: { title = 'Name', description = 'Unique name of the component' }, rawErrors, formData, - uiSchema: { 'ui:autofocus': autoFocus } = {}, + uiSchema: { 'ui:autofocus': autoFocus }, idSchema, placeholder, } = props; diff --git a/plugins/scaffolder/src/components/fields/EntityNamePicker/validation.test.ts b/plugins/scaffolder/src/components/fields/EntityNamePicker/validation.test.ts index 7201c9c4b3..290650387e 100644 --- a/plugins/scaffolder/src/components/fields/EntityNamePicker/validation.test.ts +++ b/plugins/scaffolder/src/components/fields/EntityNamePicker/validation.test.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { FieldValidation } from '@rjsf/utils'; +import { FieldValidation } from '@rjsf/core'; import { KubernetesValidatorFunctions } from '@backstage/catalog-model'; import { entityNamePickerValidation } from './validation'; diff --git a/plugins/scaffolder/src/components/fields/EntityNamePicker/validation.ts b/plugins/scaffolder/src/components/fields/EntityNamePicker/validation.ts index 1533b0cdc3..7a40a460ba 100644 --- a/plugins/scaffolder/src/components/fields/EntityNamePicker/validation.ts +++ b/plugins/scaffolder/src/components/fields/EntityNamePicker/validation.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { FieldValidation } from '@rjsf/utils'; +import { FieldValidation } from '@rjsf/core'; import { KubernetesValidatorFunctions } from '@backstage/catalog-model'; export const entityNamePickerValidation = ( diff --git a/plugins/scaffolder/src/components/fields/EntityTagsPicker/EntityTagsPicker.tsx b/plugins/scaffolder/src/components/fields/EntityTagsPicker/EntityTagsPicker.tsx index fcbf7a7c80..c0e3aab436 100644 --- a/plugins/scaffolder/src/components/fields/EntityTagsPicker/EntityTagsPicker.tsx +++ b/plugins/scaffolder/src/components/fields/EntityTagsPicker/EntityTagsPicker.tsx @@ -51,9 +51,9 @@ export const EntityTagsPicker = ( const [inputValue, setInputValue] = useState(''); const [inputError, setInputError] = useState(false); const tagValidator = makeValidator().isValidTag; - const kinds = uiSchema?.['ui:options']?.kinds; - const showCounts = uiSchema?.['ui:options']?.showCounts; - const helperText = uiSchema?.['ui:options']?.helperText; + const kinds = uiSchema['ui:options']?.kinds; + const showCounts = uiSchema['ui:options']?.showCounts; + const helperText = uiSchema['ui:options']?.helperText; const { loading, value: existingTags } = useAsync(async () => { const facet = 'metadata.tags'; diff --git a/plugins/scaffolder/src/components/fields/OwnedEntityPicker/OwnedEntityPicker.tsx b/plugins/scaffolder/src/components/fields/OwnedEntityPicker/OwnedEntityPicker.tsx index d15677cfac..2446883a86 100644 --- a/plugins/scaffolder/src/components/fields/OwnedEntityPicker/OwnedEntityPicker.tsx +++ b/plugins/scaffolder/src/components/fields/OwnedEntityPicker/OwnedEntityPicker.tsx @@ -59,12 +59,12 @@ export const OwnedEntityPicker = ( formData, idSchema, } = props; - const allowedKinds = uiSchema?.['ui:options']?.allowedKinds; - const defaultKind = uiSchema?.['ui:options']?.defaultKind; - const defaultNamespace = uiSchema?.['ui:options']?.defaultNamespace; + const allowedKinds = uiSchema['ui:options']?.allowedKinds; + const defaultKind = uiSchema['ui:options']?.defaultKind; + const defaultNamespace = uiSchema['ui:options']?.defaultNamespace; const allowArbitraryValues = - uiSchema?.['ui:options']?.allowArbitraryValues ?? true; + uiSchema['ui:options']?.allowArbitraryValues ?? true; const { ownedEntities, loading } = useOwnedEntities(allowedKinds); const entityRefs = ownedEntities?.items From bc6b470825915a73f6dc155ede802afb9ee29082 Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 29 Sep 2022 23:32:18 +0200 Subject: [PATCH 155/278] chore: finally make typescript full happy too Signed-off-by: blam --- .../src/next/TemplateWizardPage/Stepper/Stepper.tsx | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx index 2735ea7e61..f668205573 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx +++ b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx @@ -24,7 +24,6 @@ import { } from '@material-ui/core'; import { withTheme } from '@rjsf/core-v5'; import { ErrorSchema, FieldValidation } from '@rjsf/utils'; -import { Theme as MuiTheme } from '@rjsf/material-ui-v5'; import React, { useMemo, useState } from 'react'; import { NextFieldExtensionOptions } from '../../../extensions'; import { TemplateParameterSchema } from '../../../types'; @@ -53,8 +52,10 @@ export interface StepperProps { extensions: NextFieldExtensionOptions[]; } -// This needs an any for some reason, think it coul -const Form = withTheme(MuiTheme as any); +// TODO(blam): We require here, as the types in this package depend on @rjsf/core explicitly +// which is what we're using here as the default types, it needs to depend on @rjsf/core-v5 because +// of the re-writing we're doing. Once we've migrated, we can import this the exact same as before. +const Form = withTheme(require('@rjsf/material-ui-v5').Theme); export const Stepper = (props: StepperProps) => { const { steps } = useTemplateSchema(props.manifest); From 2b825ff357077f5210523ec4505c94d0b381c004 Mon Sep 17 00:00:00 2001 From: blam Date: Thu, 29 Sep 2022 23:34:29 +0200 Subject: [PATCH 156/278] chore: bump to latest beta Signed-off-by: blam --- plugins/scaffolder/package.json | 8 +++---- yarn.lock | 40 ++++++++++++++++----------------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 6508ae77e7..4508a4b49d 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -55,11 +55,11 @@ "@material-ui/lab": "4.0.0-alpha.57", "@react-hookz/web": "^15.0.0", "@rjsf/core": "^3.2.1", - "@rjsf/core-v5": "npm:@rjsf/core@^5.0.0-beta.9", + "@rjsf/core-v5": "npm:@rjsf/core@^5.0.0-beta.10", "@rjsf/material-ui": "^3.2.1", - "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@^5.0.0-beta.9", - "@rjsf/utils": "^5.0.0-beta.9", - "@rjsf/validator-ajv8": "^5.0.0-beta.9", + "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@^5.0.0-beta.10", + "@rjsf/utils": "^5.0.0-beta.10", + "@rjsf/validator-ajv8": "^5.0.0-beta.10", "@types/json-schema": "^7.0.9", "@uiw/react-codemirror": "^4.9.3", "classnames": "^2.2.6", diff --git a/yarn.lock b/yarn.lock index dcecfe2b9f..9af65cfa61 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6743,11 +6743,11 @@ __metadata: "@material-ui/lab": 4.0.0-alpha.57 "@react-hookz/web": ^15.0.0 "@rjsf/core": ^3.2.1 - "@rjsf/core-v5": "npm:@rjsf/core@^5.0.0-beta.9" + "@rjsf/core-v5": "npm:@rjsf/core@^5.0.0-beta.10" "@rjsf/material-ui": ^3.2.1 - "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@^5.0.0-beta.9" - "@rjsf/utils": ^5.0.0-beta.9 - "@rjsf/validator-ajv8": ^5.0.0-beta.9 + "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@^5.0.0-beta.10" + "@rjsf/utils": ^5.0.0-beta.10 + "@rjsf/validator-ajv8": ^5.0.0-beta.10 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 "@testing-library/react-hooks": ^8.0.0 @@ -11944,9 +11944,9 @@ __metadata: languageName: node linkType: hard -"@rjsf/core-v5@npm:@rjsf/core@^5.0.0-beta.9": - version: 5.0.0-beta.9 - resolution: "@rjsf/core@npm:5.0.0-beta.9" +"@rjsf/core-v5@npm:@rjsf/core@^5.0.0-beta.10": + version: 5.0.0-beta.10 + resolution: "@rjsf/core@npm:5.0.0-beta.10" dependencies: lodash: ^4.17.15 lodash-es: ^4.17.15 @@ -11955,7 +11955,7 @@ __metadata: peerDependencies: "@rjsf/utils": ^5.0.0-beta.1 react: ^16.14.0 || >=17 - checksum: b55e1a4b3f9f638afdeda1da0abeb145040081201b2f9ed680c93d3dea2ee20e1066da5d2c32c69916d9f2fce422ecb8058f303b9f4df1b20dacf35564f5c7ec + checksum: c3e8852c8fedc6ae23da610033e0bded1bd198cebf7f54a5cdcf3b42d22a3b3864da9c735300cadc7d756f26055a7e62408d51a5ebdb906be9b1bf85bf3712ed languageName: node linkType: hard @@ -11978,16 +11978,16 @@ __metadata: languageName: node linkType: hard -"@rjsf/material-ui-v5@npm:@rjsf/material-ui@^5.0.0-beta.9": - version: 5.0.0-beta.9 - resolution: "@rjsf/material-ui@npm:5.0.0-beta.9" +"@rjsf/material-ui-v5@npm:@rjsf/material-ui@^5.0.0-beta.10": + version: 5.0.0-beta.10 + resolution: "@rjsf/material-ui@npm:5.0.0-beta.10" peerDependencies: "@material-ui/core": ^4.12.3 "@material-ui/icons": ^4.11.2 "@rjsf/core": ^5.0.0-beta.1 "@rjsf/utils": ^5.0.0-beta.1 react: ^16.14.0 || >=17 - checksum: 44624d1aff0f30963d7ae2ab529713d9fcf6e6df809264d6bdee7ef5e71934ab031dbba9dcc9c10be05cb7b0fd679f6fbb1eb27ce7081940b56034a5f2564093 + checksum: c6e602fc331ec37524837123f42e605389c8ea1a9207ed3e9052de380b91fb90365aa962b0020197f0fb2bcbd87baac34bef7dbbb31ea4b57b6587d0fcd81a09 languageName: node linkType: hard @@ -12003,9 +12003,9 @@ __metadata: languageName: node linkType: hard -"@rjsf/utils@npm:^5.0.0-beta.9": - version: 5.0.0-beta.9 - resolution: "@rjsf/utils@npm:5.0.0-beta.9" +"@rjsf/utils@npm:^5.0.0-beta.10": + version: 5.0.0-beta.10 + resolution: "@rjsf/utils@npm:5.0.0-beta.10" dependencies: json-schema-merge-allof: ^0.8.1 jsonpointer: ^5.0.1 @@ -12014,13 +12014,13 @@ __metadata: react-is: ^18.2.0 peerDependencies: react: ^16.14.0 || >=17 - checksum: ac5b99cf7860c838e5b509a523b19824f4966ec8d44284a026bf81de7c7733bac40432af4c67ab538bd400f529dc55d9001e07618a514cac365cd604ff786b11 + checksum: df5dda5a17ce11df2342ceff8d6ad2b3dad3a1f98d44aa7da378e6cd48387e4af023964b6143836e1ad16ff68f6592c0dcf24ff9f3fc859480b42b2c879406bc languageName: node linkType: hard -"@rjsf/validator-ajv8@npm:^5.0.0-beta.9": - version: 5.0.0-beta.9 - resolution: "@rjsf/validator-ajv8@npm:5.0.0-beta.9" +"@rjsf/validator-ajv8@npm:^5.0.0-beta.10": + version: 5.0.0-beta.10 + resolution: "@rjsf/validator-ajv8@npm:5.0.0-beta.10" dependencies: ajv: ^8.11.0 ajv-formats: ^2.1.1 @@ -12028,7 +12028,7 @@ __metadata: lodash-es: ^4.17.15 peerDependencies: "@rjsf/utils": ^5.0.0-beta.1 - checksum: 64ca81f1f440b08f959d61e1f97b25d890cd8f03582287004961d0ba0ec7d6719748b00d821ef009d330816ca2e4e030d46fa695a3c12c338518e469242694cd + checksum: faa359c9ec58cf0fff35932d4e08a5c42f8449120cae606ebff108814f974e8db8a62df85e90e1fec7b0345388df09b83359ae1cc09103d41e73f298472b846a languageName: node linkType: hard From 1047baa92657a2d29c763924355bbfa522df8f1b Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 5 Oct 2022 15:01:20 +0200 Subject: [PATCH 157/278] chore: added changeset for the scaffolder package Signed-off-by: blam --- .changeset/lucky-beans-bathe.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/lucky-beans-bathe.md diff --git a/.changeset/lucky-beans-bathe.md b/.changeset/lucky-beans-bathe.md new file mode 100644 index 0000000000..b425a29599 --- /dev/null +++ b/.changeset/lucky-beans-bathe.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Bump to `react-jsonschema-form@v5-beta` for the `NextRouter` under `@alpha` exports From 8020d8e8e938873c9cb22aad0139a800e92d6109 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 5 Oct 2022 15:07:10 +0200 Subject: [PATCH 158/278] chore: export some more things out of the alpha exports Signed-off-by: blam --- plugins/scaffolder/api-report.md | 44 ++++++++++++++++++++++++++++++++ plugins/scaffolder/src/index.ts | 8 +++++- 2 files changed, 51 insertions(+), 1 deletion(-) diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md index 23b374541b..824b56daf0 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.md @@ -15,7 +15,9 @@ import { Extension } from '@backstage/core-plugin-api'; import { ExternalRouteRef } from '@backstage/core-plugin-api'; import { FetchApi } from '@backstage/core-plugin-api'; import { FieldProps } from '@rjsf/core'; +import { FieldProps as FieldProps_2 } from '@rjsf/utils'; import { FieldValidation } from '@rjsf/core'; +import { FieldValidation as FieldValidation_2 } from '@rjsf/utils'; import type { FormProps } from '@rjsf/core'; import { IdentityApi } from '@backstage/core-plugin-api'; import { JsonObject } from '@backstage/types'; @@ -29,6 +31,16 @@ import { ScmIntegrationRegistry } from '@backstage/integration'; import { TaskSpec } from '@backstage/plugin-scaffolder-common'; import { TaskStep } from '@backstage/plugin-scaffolder-common'; import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common'; +import { UIOptionsType } from '@rjsf/utils'; +import { UiSchema } from '@rjsf/utils'; + +// @alpha +export function createNextScaffolderFieldExtension< + TReturnValue = unknown, + TInputProps extends UIOptionsType = {}, +>( + options: FieldExtensionOptions, +): Extension>; // @public export function createScaffolderFieldExtension< @@ -155,6 +167,38 @@ export type LogEvent = { taskId: string; }; +// @alpha +export type NextCustomFieldValidator = ( + data: TFieldReturnValue, + field: FieldValidation_2, + context: { + apiHolder: ApiHolder; + }, +) => void | Promise; + +// @alpha +export interface NextFieldExtensionComponentProps< + TFieldReturnValue, + TUiOptions = {}, +> extends PropsWithChildren> { + // (undocumented) + uiSchema?: UiSchema & { + 'ui:options'?: TUiOptions & UIOptionsType; + }; +} + +// @alpha +export type NextFieldExtensionOptions< + TFieldReturnValue = unknown, + TInputProps = unknown, +> = { + name: string; + component: ( + props: NextFieldExtensionComponentProps, + ) => JSX.Element | null; + validation?: NextCustomFieldValidator; +}; + // @alpha export type NextRouterProps = { components?: { diff --git a/plugins/scaffolder/src/index.ts b/plugins/scaffolder/src/index.ts index c16e12beb5..e68eece8e5 100644 --- a/plugins/scaffolder/src/index.ts +++ b/plugins/scaffolder/src/index.ts @@ -59,11 +59,17 @@ export { RepoUrlPickerFieldExtension, ScaffolderPage, scaffolderPlugin, - NextScaffolderPage, } from './plugin'; export * from './components'; export type { TaskPageProps } from './components/TaskPage'; /** next exports */ +export { NextScaffolderPage } from './plugin'; export type { NextRouterProps } from './next'; export type { TemplateGroupFilter } from './next'; +export { + createNextScaffolderFieldExtension, + type NextCustomFieldValidator, + type NextFieldExtensionOptions, + type NextFieldExtensionComponentProps, +} from './extensions'; From 42a8b0c3f3648d3e75e7fe81558bf2f021124e70 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 5 Oct 2022 15:12:31 +0200 Subject: [PATCH 159/278] chore: fix the typings Signed-off-by: blam Signed-off-by: blam --- plugins/scaffolder/src/extensions/index.tsx | 2 +- plugins/scaffolder/src/next/Router/Router.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/scaffolder/src/extensions/index.tsx b/plugins/scaffolder/src/extensions/index.tsx index 38cabd5511..08075b5b9d 100644 --- a/plugins/scaffolder/src/extensions/index.tsx +++ b/plugins/scaffolder/src/extensions/index.tsx @@ -71,7 +71,7 @@ export function createNextScaffolderFieldExtension< TReturnValue = unknown, TInputProps extends UIOptionsType = {}, >( - options: FieldExtensionOptions, + options: NextFieldExtensionOptions, ): Extension> { return { expose() { diff --git a/plugins/scaffolder/src/next/Router/Router.tsx b/plugins/scaffolder/src/next/Router/Router.tsx index f0e5823f84..608709b05c 100644 --- a/plugins/scaffolder/src/next/Router/Router.tsx +++ b/plugins/scaffolder/src/next/Router/Router.tsx @@ -73,7 +73,7 @@ export const Router = (props: PropsWithChildren) => { customFieldExtension => customFieldExtension.name === name, ), ), - ] as NextFieldExtensionOptions[]; // here just to coerce the default extensions to the correct type + ] as NextFieldExtensionOptions[]; return ( From 2d76e6f6c473721ad00c0dfb29aa479d7c0fce0f Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 5 Oct 2022 17:36:41 +0200 Subject: [PATCH 160/278] chore: fixing api-reports Signed-off-by: blam --- plugins/scaffolder/api-report.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md index 824b56daf0..cf69736bd4 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.md @@ -39,7 +39,7 @@ export function createNextScaffolderFieldExtension< TReturnValue = unknown, TInputProps extends UIOptionsType = {}, >( - options: FieldExtensionOptions, + options: NextFieldExtensionOptions, ): Extension>; // @public From 6edbf33499bfef87b0bfcd7c410bb1a0c85148f2 Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 11 Oct 2022 11:26:35 +0100 Subject: [PATCH 161/278] chore: code reviews Signed-off-by: blam --- plugins/scaffolder/src/next/Router/Router.tsx | 3 ++- .../src/next/TemplateWizardPage/Stepper/Stepper.tsx | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/plugins/scaffolder/src/next/Router/Router.tsx b/plugins/scaffolder/src/next/Router/Router.tsx index 608709b05c..125a0bbbf6 100644 --- a/plugins/scaffolder/src/next/Router/Router.tsx +++ b/plugins/scaffolder/src/next/Router/Router.tsx @@ -22,6 +22,7 @@ import { FIELD_EXTENSION_KEY, DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS, NextFieldExtensionOptions, + FieldExtensionOptions, } from '../../extensions'; import { useElementFilter } from '@backstage/core-plugin-api'; @@ -60,7 +61,7 @@ export const Router = (props: PropsWithChildren) => { .selectByComponentData({ key: FIELD_EXTENSION_WRAPPER_KEY, }) - .findComponentData({ + .findComponentData({ key: FIELD_EXTENSION_KEY, }), ); diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx index f668205573..97f21111d3 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx +++ b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx @@ -96,9 +96,9 @@ export const Stepper = (props: StepperProps) => { const returnedValidation = await validation(formData); - const hasErrors = Object.values(returnedValidation).some(i => { - return i.__errors?.length! > 0 ?? false; - }); + const hasErrors = Object.values(returnedValidation).some( + i => i.__errors?.length, + ); if (hasErrors) { setErrors(returnedValidation); From 4497bd4e4859ce39195f27e46cc8b4253ce878c4 Mon Sep 17 00:00:00 2001 From: blam Date: Wed, 5 Oct 2022 21:55:11 +0200 Subject: [PATCH 162/278] chore: starting to wire together a TaskPage for the router Signed-off-by: blam --- plugins/scaffolder/src/next/Router/Router.tsx | 13 +++++- .../scaffolder/src/next/TaskPage/TaskPage.tsx | 33 +++++++++++++++ plugins/scaffolder/src/next/TaskPage/index.ts | 16 ++++++++ .../Stepper/Stepper.test.tsx | 7 ++-- .../TemplateWizardPage/Stepper/Stepper.tsx | 15 +++---- .../TemplateWizardPage/TemplateWizardPage.tsx | 41 ++++++++++++++----- plugins/scaffolder/src/routes.ts | 6 +++ 7 files changed, 109 insertions(+), 22 deletions(-) create mode 100644 plugins/scaffolder/src/next/TaskPage/TaskPage.tsx create mode 100644 plugins/scaffolder/src/next/TaskPage/index.ts diff --git a/plugins/scaffolder/src/next/Router/Router.tsx b/plugins/scaffolder/src/next/Router/Router.tsx index 125a0bbbf6..c83e1a046a 100644 --- a/plugins/scaffolder/src/next/Router/Router.tsx +++ b/plugins/scaffolder/src/next/Router/Router.tsx @@ -28,8 +28,13 @@ import { import { useElementFilter } from '@backstage/core-plugin-api'; import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common'; import { TemplateGroupFilter } from '../TemplateListPage/TemplateGroups'; -import { nextSelectedTemplateRouteRef } from '../../routes'; +import { + nextScaffolderTaskRouteRef, + nextSelectedTemplateRouteRef, +} from '../../routes'; import { SecretsContextProvider } from '../../components/secrets/SecretsContext'; +import { TaskPage } from '../TaskPage'; +import { ErrorPage } from '@backstage/core-components'; /** * The Props for the Scaffolder Router @@ -87,7 +92,6 @@ export const Router = (props: PropsWithChildren) => { /> } /> - ) => { } /> + } /> + } + /> ); }; diff --git a/plugins/scaffolder/src/next/TaskPage/TaskPage.tsx b/plugins/scaffolder/src/next/TaskPage/TaskPage.tsx new file mode 100644 index 0000000000..ff0f4cd820 --- /dev/null +++ b/plugins/scaffolder/src/next/TaskPage/TaskPage.tsx @@ -0,0 +1,33 @@ +/* + * 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 React from 'react'; +import { Page, Header, Content } from '@backstage/core-components'; + +export const TaskPage = () => { + return ( + +
+ +

Hey

+
+ + ); +}; diff --git a/plugins/scaffolder/src/next/TaskPage/index.ts b/plugins/scaffolder/src/next/TaskPage/index.ts new file mode 100644 index 0000000000..b129601766 --- /dev/null +++ b/plugins/scaffolder/src/next/TaskPage/index.ts @@ -0,0 +1,16 @@ +/* + * 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 { TaskPage } from './TaskPage'; diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.test.tsx b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.test.tsx index f605e9c114..12ad05ab75 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.test.tsx +++ b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.test.tsx @@ -30,7 +30,7 @@ describe('Stepper', () => { }; const { getByText } = await renderInTestApp( - , + , ); for (const step of manifest.steps) { @@ -48,7 +48,7 @@ describe('Stepper', () => { }; const { getByRole } = await renderInTestApp( - , + , ); expect(getByRole('button', { name: 'Next' })).toBeInTheDocument(); @@ -88,7 +88,7 @@ describe('Stepper', () => { }; const { getByRole } = await renderInTestApp( - , + , ); await fireEvent.change(getByRole('textbox', { name: 'name' }), { @@ -134,6 +134,7 @@ describe('Stepper', () => { , ); diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx index 97f21111d3..fe055433b4 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx +++ b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { useApiHolder } from '@backstage/core-plugin-api'; -import { JsonObject } from '@backstage/types'; +import { useApi, useApiHolder } from '@backstage/core-plugin-api'; +import { JsonObject, JsonValue } from '@backstage/types'; import { Stepper as MuiStepper, Step as MuiStep, @@ -31,6 +31,7 @@ import { createAsyncValidators } from './createAsyncValidators'; import { useTemplateSchema } from './useTemplateSchema'; import { ReviewState } from './ReviewState'; import validator from '@rjsf/validator-ajv8'; +import { scaffolderApiRef } from '../../../api'; const useStyles = makeStyles(theme => ({ backButton: { @@ -50,6 +51,7 @@ const useStyles = makeStyles(theme => ({ export interface StepperProps { manifest: TemplateParameterSchema; extensions: NextFieldExtensionOptions[]; + onComplete: (values: Record) => Promise; } // TODO(blam): We require here, as the types in this package depend on @rjsf/core explicitly @@ -109,10 +111,6 @@ export const Stepper = (props: StepperProps) => { setFormState(current => ({ ...current, ...formData })); }; - const handleCreate = () => { - // TODO(blam): Create the template in a modal with the ability to view the logs etc. - }; - return ( <> @@ -161,7 +159,10 @@ export const Stepper = (props: StepperProps) => { > Back -
diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx b/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx index f6739e6389..f9dc97f32b 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx +++ b/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import React, { useEffect } from 'react'; +import React, { useContext, useEffect } from 'react'; import { Page, Header, @@ -23,7 +23,7 @@ import { MarkdownContent, } from '@backstage/core-components'; import { NextFieldExtensionOptions } from '../../extensions'; -import { Navigate } from 'react-router'; +import { Navigate, useNavigate } from 'react-router'; import { stringifyEntityRef } from '@backstage/catalog-model'; import { errorApiRef, @@ -36,7 +36,13 @@ import useAsync from 'react-use/lib/useAsync'; import { makeStyles } from '@material-ui/core'; import { Stepper } from './Stepper'; import { BackstageTheme } from '@backstage/theme'; -import { nextRouteRef, selectedTemplateRouteRef } from '../../routes'; +import { + nextRouteRef, + nextScaffolderTaskRouteRef, + selectedTemplateRouteRef, +} from '../../routes'; +import { SecretsContext } from '../../components/secrets/SecretsContext'; +import { JsonValue } from '@backstage/types'; export interface TemplateWizardPageProps { customFieldExtensions: NextFieldExtensionOptions[]; @@ -67,17 +73,31 @@ const useTemplateParameterSchema = (templateRef: string) => { export const TemplateWizardPage = (props: TemplateWizardPageProps) => { const styles = useStyles(); const rootRef = useRouteRef(nextRouteRef); + const nextTemplateRef = useRouteRef(nextScaffolderTaskRouteRef); + const { secrets } = useContext(SecretsContext) ?? {}; + const scaffolderApi = useApi(scaffolderApiRef); + const navigate = useNavigate(); const { templateName, namespace } = useRouteRefParams( selectedTemplateRouteRef, ); + const templateRef = stringifyEntityRef({ + kind: 'Template', + namespace, + name: templateName, + }); + const errorApi = useApi(errorApiRef); - const { loading, manifest, error } = useTemplateParameterSchema( - stringifyEntityRef({ - kind: 'Template', - namespace, - name: templateName, - }), - ); + const { loading, manifest, error } = useTemplateParameterSchema(templateRef); + + const onComplete = async (values: Record) => { + const { taskId } = await scaffolderApi.scaffold({ + templateRef, + values, + secrets, + }); + + navigate(nextTemplateRef({ taskId })); + }; useEffect(() => { if (error) { @@ -113,6 +133,7 @@ export const TemplateWizardPage = (props: TemplateWizardPageProps) => { )} diff --git a/plugins/scaffolder/src/routes.ts b/plugins/scaffolder/src/routes.ts index 2ef6583b08..5e2d191443 100644 --- a/plugins/scaffolder/src/routes.ts +++ b/plugins/scaffolder/src/routes.ts @@ -65,6 +65,12 @@ export const scaffolderTaskRouteRef = createSubRouteRef({ path: '/tasks/:taskId', }); +export const nextScaffolderTaskRouteRef = createSubRouteRef({ + id: 'scaffolder/next/task', + parent: nextRouteRef, + path: '/tasks/:taskId', +}); + export const scaffolderListTaskRouteRef = createSubRouteRef({ id: 'scaffolder/list-tasks', parent: rootRouteRef, From bd42442fa50d26aa1b0fa47fef42463ac2045407 Mon Sep 17 00:00:00 2001 From: blam Date: Sun, 9 Oct 2022 15:20:43 +0200 Subject: [PATCH 163/278] chore: re-use the old task page for now as we want to ship something early Signed-off-by: blam --- .../src/next/TemplateWizardPage/TemplateWizardPage.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx b/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx index f9dc97f32b..f545bc71b4 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx +++ b/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx @@ -39,6 +39,7 @@ import { BackstageTheme } from '@backstage/theme'; import { nextRouteRef, nextScaffolderTaskRouteRef, + scaffolderTaskRouteRef, selectedTemplateRouteRef, } from '../../routes'; import { SecretsContext } from '../../components/secrets/SecretsContext'; @@ -73,13 +74,14 @@ const useTemplateParameterSchema = (templateRef: string) => { export const TemplateWizardPage = (props: TemplateWizardPageProps) => { const styles = useStyles(); const rootRef = useRouteRef(nextRouteRef); - const nextTemplateRef = useRouteRef(nextScaffolderTaskRouteRef); + const taskRoute = useRouteRef(scaffolderTaskRouteRef); const { secrets } = useContext(SecretsContext) ?? {}; const scaffolderApi = useApi(scaffolderApiRef); const navigate = useNavigate(); const { templateName, namespace } = useRouteRefParams( selectedTemplateRouteRef, ); + const templateRef = stringifyEntityRef({ kind: 'Template', namespace, @@ -96,7 +98,7 @@ export const TemplateWizardPage = (props: TemplateWizardPageProps) => { secrets, }); - navigate(nextTemplateRef({ taskId })); + navigate(taskRoute({ taskId })); }; useEffect(() => { From 92e490d6b4165e7b5a3c5dbd608be2f74e0af5f0 Mon Sep 17 00:00:00 2001 From: blam Date: Sun, 9 Oct 2022 15:24:37 +0200 Subject: [PATCH 164/278] chore: added changeset Signed-off-by: blam --- .changeset/cuddly-ways-fail.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/cuddly-ways-fail.md diff --git a/.changeset/cuddly-ways-fail.md b/.changeset/cuddly-ways-fail.md new file mode 100644 index 0000000000..bb1b356036 --- /dev/null +++ b/.changeset/cuddly-ways-fail.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Make the `/next` scaffolder work end to end with the old `TaskPage` view From 698e213f8ca5d1d215909339b030f82c87e306e8 Mon Sep 17 00:00:00 2001 From: blam Date: Mon, 10 Oct 2022 14:45:00 +0200 Subject: [PATCH 165/278] chore: fixing typescript issues and getting this PR ready to ship! Signed-off-by: blam --- .../scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx | 3 +-- .../src/next/TemplateWizardPage/TemplateWizardPage.tsx | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx index fe055433b4..511b020c3c 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx +++ b/plugins/scaffolder/src/next/TemplateWizardPage/Stepper/Stepper.tsx @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { useApi, useApiHolder } from '@backstage/core-plugin-api'; +import { useApiHolder } from '@backstage/core-plugin-api'; import { JsonObject, JsonValue } from '@backstage/types'; import { Stepper as MuiStepper, @@ -31,7 +31,6 @@ import { createAsyncValidators } from './createAsyncValidators'; import { useTemplateSchema } from './useTemplateSchema'; import { ReviewState } from './ReviewState'; import validator from '@rjsf/validator-ajv8'; -import { scaffolderApiRef } from '../../../api'; const useStyles = makeStyles(theme => ({ backButton: { diff --git a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx b/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx index f545bc71b4..b650e4a676 100644 --- a/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx +++ b/plugins/scaffolder/src/next/TemplateWizardPage/TemplateWizardPage.tsx @@ -38,7 +38,6 @@ import { Stepper } from './Stepper'; import { BackstageTheme } from '@backstage/theme'; import { nextRouteRef, - nextScaffolderTaskRouteRef, scaffolderTaskRouteRef, selectedTemplateRouteRef, } from '../../routes'; From deb5da85d5647b272b797c416aa608c6174c2720 Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 11 Oct 2022 11:30:09 +0100 Subject: [PATCH 166/278] chore: fixing code review comments Signed-off-by: blam --- plugins/scaffolder/src/next/Router/Router.tsx | 12 +------ .../scaffolder/src/next/TaskPage/TaskPage.tsx | 33 ------------------- plugins/scaffolder/src/next/TaskPage/index.ts | 16 --------- 3 files changed, 1 insertion(+), 60 deletions(-) delete mode 100644 plugins/scaffolder/src/next/TaskPage/TaskPage.tsx delete mode 100644 plugins/scaffolder/src/next/TaskPage/index.ts diff --git a/plugins/scaffolder/src/next/Router/Router.tsx b/plugins/scaffolder/src/next/Router/Router.tsx index c83e1a046a..ebe00fdfb8 100644 --- a/plugins/scaffolder/src/next/Router/Router.tsx +++ b/plugins/scaffolder/src/next/Router/Router.tsx @@ -28,13 +28,8 @@ import { import { useElementFilter } from '@backstage/core-plugin-api'; import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common'; import { TemplateGroupFilter } from '../TemplateListPage/TemplateGroups'; -import { - nextScaffolderTaskRouteRef, - nextSelectedTemplateRouteRef, -} from '../../routes'; +import { nextSelectedTemplateRouteRef } from '../../routes'; import { SecretsContextProvider } from '../../components/secrets/SecretsContext'; -import { TaskPage } from '../TaskPage'; -import { ErrorPage } from '@backstage/core-components'; /** * The Props for the Scaffolder Router @@ -100,11 +95,6 @@ export const Router = (props: PropsWithChildren) => { } /> - } /> - } - /> ); }; diff --git a/plugins/scaffolder/src/next/TaskPage/TaskPage.tsx b/plugins/scaffolder/src/next/TaskPage/TaskPage.tsx deleted file mode 100644 index ff0f4cd820..0000000000 --- a/plugins/scaffolder/src/next/TaskPage/TaskPage.tsx +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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 React from 'react'; -import { Page, Header, Content } from '@backstage/core-components'; - -export const TaskPage = () => { - return ( - -
- -

Hey

-
- - ); -}; diff --git a/plugins/scaffolder/src/next/TaskPage/index.ts b/plugins/scaffolder/src/next/TaskPage/index.ts deleted file mode 100644 index b129601766..0000000000 --- a/plugins/scaffolder/src/next/TaskPage/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -/* - * 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 { TaskPage } from './TaskPage'; From bbbe968e10c6f08beef90a84102f13e218e706f1 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Tue, 11 Oct 2022 11:46:28 +0100 Subject: [PATCH 167/278] Fixed allowing optional params outside of the toQuery and apply Signed-off-by: Harry Hogg Co-authored-by: Mike Lewis --- .../createConditionExports.test.ts | 8 +++--- plugins/permission-node/src/types.ts | 27 +++---------------- 2 files changed, 6 insertions(+), 29 deletions(-) diff --git a/plugins/permission-node/src/integration/createConditionExports.test.ts b/plugins/permission-node/src/integration/createConditionExports.test.ts index 424b3c3c24..dad57e2b8b 100644 --- a/plugins/permission-node/src/integration/createConditionExports.test.ts +++ b/plugins/permission-node/src/integration/createConditionExports.test.ts @@ -46,7 +46,7 @@ const testIntegration = () => description: 'Test rule 2', resourceType: 'test-resource', paramsSchema: z.object({ - foo: z.string(), + foo: z.string().optional(), }), apply: (_resource: any) => false, toQuery: params => ({ @@ -76,12 +76,10 @@ describe('createConditionExports', () => { }, }); - expect(conditions.testRule2({ foo: 'baz' })).toEqual({ + expect(conditions.testRule2({})).toEqual({ rule: 'testRule2', resourceType: 'test-resource', - params: { - foo: 'baz', - }, + params: {}, }); }); }); diff --git a/plugins/permission-node/src/types.ts b/plugins/permission-node/src/types.ts index 6b15df407e..36e30714f6 100644 --- a/plugins/permission-node/src/types.ts +++ b/plugins/permission-node/src/types.ts @@ -21,22 +21,6 @@ import type { import { z } from 'zod'; import { NoInfer } from './integration/util'; -/** - * A ZodSchema that reflects the structure of the parameters that are passed to - * into a {@link PermissionRule}. - * - * @public - */ -export type PermissionRuleSchema = z.ZodObject<{ - // Parameters can be optional, however we we want to make sure that the - // parameters are always present in the schema, even if they are undefined. - // We remove the optional flag from the schema, and then add it back in - // with an optional zod type. - [P in keyof TParams]-?: TParams[P] extends undefined - ? z.ZodOptionalType> - : z.ZodType; -}>; - /** * A conditional rule that can be provided in an * {@link @backstage/permission-common#AuthorizeDecision} response to an authorization request. @@ -66,24 +50,19 @@ export type PermissionRule< /** * A ZodSchema that reflects the structure of the parameters that are passed to */ - paramsSchema?: PermissionRuleSchema; + paramsSchema?: z.ZodSchema; /** * Apply this rule to a resource already loaded from a backing data source. The params are * arguments supplied for the rule; for example, a rule could be `isOwner` with entityRefs as the * params. */ - apply( - resource: TResource, - params: NoInfer>>, - ): boolean; + apply(resource: TResource, params: NoInfer): boolean; /** * Translate this rule to criteria suitable for use in querying a backing data store. The criteria * can be used for loading a collection of resources efficiently with conditional criteria already * applied. */ - toQuery( - params: NoInfer>>, - ): PermissionCriteria; + toQuery(params: NoInfer): PermissionCriteria; }; From 30592654f9148eae63978cf39938bd7128369d8f Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Tue, 11 Oct 2022 11:51:43 +0100 Subject: [PATCH 168/278] Added link to Zod in changelog Signed-off-by: Harry Hogg --- .changeset/kind-bees-suffer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/kind-bees-suffer.md b/.changeset/kind-bees-suffer.md index bdd6d1f594..79e9c0a027 100644 --- a/.changeset/kind-bees-suffer.md +++ b/.changeset/kind-bees-suffer.md @@ -3,7 +3,7 @@ '@backstage/plugin-permission-node': minor --- -**BREAKING**: When defining permission rules, it's now necessary to provide a ZodSchema that specifies the parameters the rule expects. This has been added to help better describe the parameters in the response of the metadata endpoint and to validate the parameters before a rule is executed. +**BREAKING**: When defining permission rules, it's now necessary to provide a [ZodSchema](https://github.com/colinhacks/zod) that specifies the parameters the rule expects. This has been added to help better describe the parameters in the response of the metadata endpoint and to validate the parameters before a rule is executed. To help with this, we have also made a change to the API of permission rules. Before, the permission rules `toQuery` and `apply` signature expected parameters to be separate arguments, like so... From 3f25d863b0adb9b2036339cdfe031559cc1a6235 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Tue, 11 Oct 2022 11:55:40 +0100 Subject: [PATCH 169/278] Updated changelog for plugin-catalog-backend to be more focused on createCatalogConditionalDecision Signed-off-by: Harry Hogg --- .changeset/seven-panthers-chew.md | 30 +----------------------------- 1 file changed, 1 insertion(+), 29 deletions(-) diff --git a/.changeset/seven-panthers-chew.md b/.changeset/seven-panthers-chew.md index 7b44f2f633..33c9166d41 100644 --- a/.changeset/seven-panthers-chew.md +++ b/.changeset/seven-panthers-chew.md @@ -2,32 +2,4 @@ '@backstage/plugin-catalog-backend': minor --- -**BREAKING** Due to the changes made in the Permission framework. The catalogs permission rules and the API of `createCatalogPermissionRule` have been changed to reflect the change from individual function parameters to a single object parameter and the addition of the `paramsSchema`. - -As an example for the `hasLabel` rule. The API before the change was - -```ts -hasLabel.apply(entity, 'backstage.io/testLabel'); -hasLabel.toQuery('backstage.io/testLabel'); -``` - -and the API after the change now is - -```ts -hasLabel.apply(entity, { - label: 'backstage.io/testLabel', -}); - -hasLabel.toQuery({ - label: 'backstage.io/testLabel', -}); -``` - -This applies to all of the permission rules exported by the catalog backend. - -- `hasAnnotation` -- `hasLabel` -- `hasMetadata` -- `hasSpec` -- `isEntityKind` -- `isEntityOwner` +**BREAKING** The exported permission rules and the API of `createCatalogConditionalDecision` have changed to reflect the breaking changes made to the PermissionRule type. From 04db0e8afbfd84157fc7a4ffc848d431e7d75679 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Tue, 11 Oct 2022 12:32:26 +0100 Subject: [PATCH 170/278] Updated API Reports Signed-off-by: Harry Hogg --- plugins/catalog-backend/api-report.md | 12 ++++++------ plugins/permission-node/api-report.md | 18 +++--------------- 2 files changed, 9 insertions(+), 21 deletions(-) diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index 6935243cf5..c9402945c1 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -179,8 +179,8 @@ export const catalogConditions: Conditions<{ EntitiesSearchFilter, 'catalog-entity', { + value?: string | undefined; annotation: string; - value: string | undefined; } >; hasLabel: PermissionRule< @@ -196,8 +196,8 @@ export const catalogConditions: Conditions<{ EntitiesSearchFilter, 'catalog-entity', { + value?: string | undefined; key: string; - value: string | undefined; } >; hasSpec: PermissionRule< @@ -205,8 +205,8 @@ export const catalogConditions: Conditions<{ EntitiesSearchFilter, 'catalog-entity', { + value?: string | undefined; key: string; - value: string | undefined; } >; isEntityKind: PermissionRule< @@ -468,8 +468,8 @@ export const permissionRules: { EntitiesSearchFilter, 'catalog-entity', { + value?: string | undefined; annotation: string; - value: string | undefined; } >; hasLabel: PermissionRule< @@ -485,8 +485,8 @@ export const permissionRules: { EntitiesSearchFilter, 'catalog-entity', { + value?: string | undefined; key: string; - value: string | undefined; } >; hasSpec: PermissionRule< @@ -494,8 +494,8 @@ export const permissionRules: { EntitiesSearchFilter, 'catalog-entity', { + value?: string | undefined; key: string; - value: string | undefined; } >; isEntityKind: PermissionRule< diff --git a/plugins/permission-node/api-report.md b/plugins/permission-node/api-report.md index 3895b4b3cb..7feb20d7aa 100644 --- a/plugins/permission-node/api-report.md +++ b/plugins/permission-node/api-report.md @@ -179,23 +179,11 @@ export type PermissionRule< name: string; description: string; resourceType: TResourceType; - paramsSchema?: PermissionRuleSchema; - apply( - resource: TResource, - params: NoInfer>>, - ): boolean; - toQuery( - params: NoInfer>>, - ): PermissionCriteria; + paramsSchema?: z.ZodSchema; + apply(resource: TResource, params: NoInfer): boolean; + toQuery(params: NoInfer): PermissionCriteria; }; -// @public -export type PermissionRuleSchema = z.ZodObject<{ - [P in keyof TParams]-?: TParams[P] extends undefined - ? z.ZodOptionalType> - : z.ZodType; -}>; - // @public export type PolicyQuery = { permission: Permission; From 632420a0a5921800fb158fe6e9b002b2526bbf70 Mon Sep 17 00:00:00 2001 From: Boris Bera Date: Fri, 7 Oct 2022 12:19:55 -0400 Subject: [PATCH 171/278] Use RUN --mount=type=cache,... in example backend dockerfile Signed-off-by: Boris Bera --- packages/backend/Dockerfile | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/backend/Dockerfile b/packages/backend/Dockerfile index 21ff07deb4..8e0d711cd3 100644 --- a/packages/backend/Dockerfile +++ b/packages/backend/Dockerfile @@ -13,9 +13,10 @@ FROM node:16-bullseye-slim # Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image, # in which case you should also move better-sqlite3 to "devDependencies" in package.json. -RUN apt-get update && \ +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt,sharing=locked \ + apt-get update && \ apt-get install -y --no-install-recommends libsqlite3-dev python3 build-essential && \ - rm -rf /var/lib/apt/lists/* && \ yarn config set python /usr/bin/python3 # From here on we use the least-privileged `node` user to run the backend. @@ -38,7 +39,8 @@ COPY --chown=node:node yarn.lock package.json packages/backend/dist/skeleton.tar RUN tar xzf skeleton.tar.gz && rm skeleton.tar.gz # Note that this install is not immutable, which is one of the reasons we don't recommend Yarn 3 yet -RUN yarn workspaces focus --all --production && rm -rf "$(yarn cache clean)" +RUN --mount=type=cache,uid=1000,gid=1000,target=/home/node/.yarn/berry/cache,sharing=locked \ + yarn workspaces focus --all --production # Then copy the rest of the backend bundle, along with any other files we might want. COPY --chown=node:node packages/backend/dist/bundle.tar.gz app-config*.yaml ./ From 74801d277cafbeffb121211c2ff14d185465d424 Mon Sep 17 00:00:00 2001 From: Boris Bera Date: Tue, 11 Oct 2022 05:47:12 -0400 Subject: [PATCH 172/278] Use RUN --mount in Host build dockerfile Signed-off-by: Boris Bera --- docs/deployment/docker.md | 8 +++++--- .../templates/default-app/packages/backend/Dockerfile | 8 +++++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/docs/deployment/docker.md b/docs/deployment/docker.md index d35e7dd593..f809b3794b 100644 --- a/docs/deployment/docker.md +++ b/docs/deployment/docker.md @@ -61,9 +61,10 @@ FROM node:16-bullseye-slim # Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image, # in which case you should also move better-sqlite3 to "devDependencies" in package.json. -RUN apt-get update && \ +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt,sharing=locked \ + apt-get update && \ apt-get install -y --no-install-recommends libsqlite3-dev python3 build-essential && \ - rm -rf /var/lib/apt/lists/* && \ yarn config set python /usr/bin/python3 # From here on we use the least-privileged `node` user to run the backend. @@ -79,7 +80,8 @@ ENV NODE_ENV production COPY --chown=node:node yarn.lock package.json packages/backend/dist/skeleton.tar.gz ./ RUN tar xzf skeleton.tar.gz && rm skeleton.tar.gz -RUN yarn install --frozen-lockfile --production --network-timeout 300000 && rm -rf "$(yarn cache dir)" +RUN --mount=type=cache,target=/home/node/.cache/yarn,sharing=locked,uid=1000,gid=1000 \ + yarn install --frozen-lockfile --production --network-timeout 300000 # Then copy the rest of the backend bundle, along with any other files we might want. COPY --chown=node:node packages/backend/dist/bundle.tar.gz app-config*.yaml ./ diff --git a/packages/create-app/templates/default-app/packages/backend/Dockerfile b/packages/create-app/templates/default-app/packages/backend/Dockerfile index 682798b826..3e9ca5ba48 100644 --- a/packages/create-app/templates/default-app/packages/backend/Dockerfile +++ b/packages/create-app/templates/default-app/packages/backend/Dockerfile @@ -13,9 +13,10 @@ FROM node:16-bullseye-slim # Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image, # in which case you should also move better-sqlite3 to "devDependencies" in package.json. -RUN apt-get update && \ +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt,sharing=locked \ + apt-get update && \ apt-get install -y --no-install-recommends libsqlite3-dev python3 build-essential && \ - rm -rf /var/lib/apt/lists/* && \ yarn config set python /usr/bin/python3 # From here on we use the least-privileged `node` user to run the backend. @@ -31,7 +32,8 @@ ENV NODE_ENV production COPY --chown=node:node yarn.lock package.json packages/backend/dist/skeleton.tar.gz ./ RUN tar xzf skeleton.tar.gz && rm skeleton.tar.gz -RUN yarn install --frozen-lockfile --production --network-timeout 300000 && rm -rf "$(yarn cache dir)" +RUN --mount=type=cache,target=/home/node/.cache/yarn,sharing=locked,uid=1000,gid=1000 \ + yarn install --frozen-lockfile --production --network-timeout 300000 # Then copy the rest of the backend bundle, along with any other files we might want. COPY --chown=node:node packages/backend/dist/bundle.tar.gz app-config*.yaml ./ From 463aa5422b7808ff21403b4b2a0012d597e378f8 Mon Sep 17 00:00:00 2001 From: Boris Bera Date: Tue, 11 Oct 2022 06:50:16 -0400 Subject: [PATCH 173/278] Optimize the multi-stage build docker image Signed-off-by: Boris Bera --- docs/deployment/docker.md | 44 +++++++++++++++++++++++++-------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/docs/deployment/docker.md b/docs/deployment/docker.md index f809b3794b..1cd351c2bc 100644 --- a/docs/deployment/docker.md +++ b/docs/deployment/docker.md @@ -165,53 +165,64 @@ RUN find packages \! -name "package.json" -mindepth 2 -maxdepth 2 -exec rm -rf { # Stage 2 - Install dependencies and build packages FROM node:16-bullseye-slim AS build -WORKDIR /app -COPY --from=packages /app . - # install sqlite3 dependencies -RUN apt-get update && \ +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt,sharing=locked \ + apt-get update && \ apt-get install -y --no-install-recommends libsqlite3-dev python3 build-essential && \ yarn config set python /usr/bin/python3 -RUN yarn install --frozen-lockfile --network-timeout 600000 && rm -rf "$(yarn cache dir)" +USER node +WORKDIR /app -COPY . . +COPY --from=packages --chown=node:node /app . + +# Stop cypress from downloading it's massive binary. +ENV CYPRESS_INSTALL_BINARY=0 +RUN --mount=type=cache,target=/home/node/.cache/yarn,sharing=locked,uid=1000,gid=1000 \ + yarn install --frozen-lockfile --network-timeout 600000 + +COPY --chown=node:node . . RUN yarn tsc RUN yarn --cwd packages/backend build # If you have not yet migrated to package roles, use the following command instead: # RUN yarn --cwd packages/backend backstage-cli backend:bundle --build-dependencies +RUN mkdir packages/backend/dist/skeleton packages/backend/dist/bundle \ + && tar xzf packages/backend/dist/skeleton.tar.gz -C packages/backend/dist/skeleton \ + && tar xzf packages/backend/dist/bundle.tar.gz -C packages/backend/dist/bundle + # Stage 3 - Build the actual backend image and install production dependencies FROM node:16-bullseye-slim # Install sqlite3 dependencies. You can skip this if you don't use sqlite3 in the image, # in which case you should also move better-sqlite3 to "devDependencies" in package.json. -RUN apt-get update && \ +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt,sharing=locked \ + apt-get update && \ apt-get install -y --no-install-recommends libsqlite3-dev python3 build-essential && \ - rm -rf /var/lib/apt/lists/* && \ yarn config set python /usr/bin/python3 # From here on we use the least-privileged `node` user to run the backend. USER node WORKDIR /app -# This switches many Node.js dependencies to production mode. -ENV NODE_ENV production - # Copy the install dependencies from the build stage and context -COPY --from=build --chown=node:node /app/yarn.lock /app/package.json /app/packages/backend/dist/skeleton.tar.gz ./ -RUN tar xzf skeleton.tar.gz && rm skeleton.tar.gz +COPY --from=build --chown=node:node /app/yarn.lock /app/package.json /app/packages/backend/dist/skeleton/ ./ -RUN yarn install --frozen-lockfile --production --network-timeout 600000 && rm -rf "$(yarn cache dir)" +RUN --mount=type=cache,target=/home/node/.cache/yarn,sharing=locked,uid=1000,gid=1000 \ + yarn install --frozen-lockfile --production --network-timeout 600000 # Copy the built packages from the build stage -COPY --from=build --chown=node:node /app/packages/backend/dist/bundle.tar.gz . -RUN tar xzf bundle.tar.gz && rm bundle.tar.gz +COPY --from=build --chown=node:node /app/packages/backend/dist/bundle/ ./ # Copy any other files that we need at runtime COPY --chown=node:node app-config.yaml ./ +# This switches many Node.js dependencies to production mode. +ENV NODE_ENV production + CMD ["node", "packages/backend", "--config", "app-config.yaml"] ``` @@ -227,6 +238,7 @@ however ignore any existing build output or dependencies on the host. For our new `.dockerignore`, replace the contents of your existing one with this: ```text +dist-types node_modules packages/*/dist packages/*/node_modules From f87680543e592e50bb60cd5bba20b623270a7567 Mon Sep 17 00:00:00 2001 From: Boris Bera Date: Tue, 11 Oct 2022 06:51:43 -0400 Subject: [PATCH 174/278] Set uid= & gid= at the end of RUN --mount This is strictly to match up with the rest of those statements in the codebase Signed-off-by: Boris Bera --- packages/backend/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend/Dockerfile b/packages/backend/Dockerfile index 8e0d711cd3..60c6ffd27f 100644 --- a/packages/backend/Dockerfile +++ b/packages/backend/Dockerfile @@ -39,7 +39,7 @@ COPY --chown=node:node yarn.lock package.json packages/backend/dist/skeleton.tar RUN tar xzf skeleton.tar.gz && rm skeleton.tar.gz # Note that this install is not immutable, which is one of the reasons we don't recommend Yarn 3 yet -RUN --mount=type=cache,uid=1000,gid=1000,target=/home/node/.yarn/berry/cache,sharing=locked \ +RUN --mount=type=cache,target=/home/node/.yarn/berry/cache,sharing=locked,uid=1000,gid=1000 \ yarn workspaces focus --all --production # Then copy the rest of the backend bundle, along with any other files we might want. From 01dff06be456c0b01d22f98befa0725826875936 Mon Sep 17 00:00:00 2001 From: Boris Bera Date: Tue, 11 Oct 2022 07:47:48 -0400 Subject: [PATCH 175/278] Add changeset for cache mounts in dockerfile Signed-off-by: Boris Bera --- .changeset/short-plants-return.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/short-plants-return.md diff --git a/.changeset/short-plants-return.md b/.changeset/short-plants-return.md new file mode 100644 index 0000000000..3afdc81ceb --- /dev/null +++ b/.changeset/short-plants-return.md @@ -0,0 +1,6 @@ +--- +'example-backend': patch +'@backstage/create-app': patch +--- + +Leverage cache mounts in Dockerfile during `yarn install ...` and `apt-get ...` commands to speed up repeated builds. From 2a6d7625398854fefec1222e0b038a086e5d7f86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 11 Oct 2022 13:10:48 +0100 Subject: [PATCH 176/278] just some vale fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .github/vale/Vocab/Backstage/accept.txt | 9 +++++++ .../src/routing/SubRouteRef.ts | 2 +- .../src/example-docs/docs/index.md | 24 +++++++++---------- .../documented-component/docs/extensions.md | 24 +++++++++---------- 4 files changed, 34 insertions(+), 25 deletions(-) diff --git a/.github/vale/Vocab/Backstage/accept.txt b/.github/vale/Vocab/Backstage/accept.txt index ae94912f38..e40dfffda1 100644 --- a/.github/vale/Vocab/Backstage/accept.txt +++ b/.github/vale/Vocab/Backstage/accept.txt @@ -2,6 +2,7 @@ abc accessors addon addons +ADRs Airbrake Airbrakes airbrake @@ -28,6 +29,7 @@ bool boolean builtins callout +CDNs Chai changeset changesets @@ -129,6 +131,7 @@ hotspots http https Iain +iLert img incentivised Indal @@ -139,6 +142,7 @@ JaCoCo JavaScript jenkins Jira +JWTs jq js json @@ -147,6 +151,7 @@ jsx Kaewkasi Keyv Knex +KPIs kubectl kubernetes kubernetes @@ -308,6 +313,7 @@ Superfences superset supertype storable +SVGs talkdesk Talkdesk tasklist @@ -352,12 +358,15 @@ utils validator validators varchar +VPCs +VSCode Wayfair Weaveworks Webpack winston www WWW +XCMetrics XML xyz yaml diff --git a/packages/core-plugin-api/src/routing/SubRouteRef.ts b/packages/core-plugin-api/src/routing/SubRouteRef.ts index 61d89fcbdb..14a614c2ba 100644 --- a/packages/core-plugin-api/src/routing/SubRouteRef.ts +++ b/packages/core-plugin-api/src/routing/SubRouteRef.ts @@ -72,7 +72,7 @@ export type ParamNames = export type PathParams = { [name in ParamNames]: string }; /** - * Merges a param object type with with an optional params type into a params object. + * Merges a param object type with an optional params type into a params object. * @public */ export type MergeParams< diff --git a/packages/techdocs-cli/src/example-docs/docs/index.md b/packages/techdocs-cli/src/example-docs/docs/index.md index 074d3ccb3e..66e4c96b2f 100644 --- a/packages/techdocs-cli/src/example-docs/docs/index.md +++ b/packages/techdocs-cli/src/example-docs/docs/index.md @@ -73,20 +73,20 @@ const addThingToThing = (a, b) a + b; # MDX truly sane lists -- attributes +- `attributes` -- customer - - first_name - - test - - family_name - - email -- person - - first_name - - family_name - - birth_date -- subscription_id +- `customer` + - `first_name` + - `test` + - `family_name` + - `email` +- `person` + - `first_name` + - `family_name` + - `birth_date` +- `subscription_id` -- request +- `request` *[MOCDOC]: Mock Documentation diff --git a/plugins/techdocs-backend/examples/documented-component/docs/extensions.md b/plugins/techdocs-backend/examples/documented-component/docs/extensions.md index 0fda26302d..eb9abca74a 100644 --- a/plugins/techdocs-backend/examples/documented-component/docs/extensions.md +++ b/plugins/techdocs-backend/examples/documented-component/docs/extensions.md @@ -96,17 +96,17 @@ Animals: :tiger: :horse: :turtle: :wolf: :frog: ### MDX truly sane lists -- attributes +- `attributes` -- customer - - first_name - - test - - family_name - - email -- person - - first_name - - family_name - - birth_date -- subscription_id +- `customer` + - `first_name` + - `test` + - `family_name` + - `email` +- `person` + - `first_name` + - `family_name` + - `birth_date` +- `subscription_id` -- request +- `request` From cd6c66ef9c37933d32d6aa49e0e3f90e9172f0c8 Mon Sep 17 00:00:00 2001 From: Harrison Hogg <7130591+HHogg@users.noreply.github.com> Date: Tue, 11 Oct 2022 14:11:12 +0100 Subject: [PATCH 177/278] Update .changeset/seven-panthers-chew.md Co-authored-by: Patrik Oldsberg Signed-off-by: Harrison Hogg <7130591+HHogg@users.noreply.github.com> --- .changeset/seven-panthers-chew.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/seven-panthers-chew.md b/.changeset/seven-panthers-chew.md index 33c9166d41..110df1d389 100644 --- a/.changeset/seven-panthers-chew.md +++ b/.changeset/seven-panthers-chew.md @@ -2,4 +2,4 @@ '@backstage/plugin-catalog-backend': minor --- -**BREAKING** The exported permission rules and the API of `createCatalogConditionalDecision` have changed to reflect the breaking changes made to the PermissionRule type. +The exported permission rules and the API of `createCatalogConditionalDecision` have changed to reflect the breaking changes made to the `PermissionRule` type. Note that all involved types are exported from `@backstage/plugin-catalog-backend/alpha` From 44c52b298ceff115fb0321193ac02260058f986a Mon Sep 17 00:00:00 2001 From: Boris Bera Date: Tue, 11 Oct 2022 09:47:45 -0400 Subject: [PATCH 178/278] Remove un-neccessary changeset for example-backend Signed-off-by: Boris Bera --- .changeset/short-plants-return.md | 1 - 1 file changed, 1 deletion(-) diff --git a/.changeset/short-plants-return.md b/.changeset/short-plants-return.md index 3afdc81ceb..0a4974c38a 100644 --- a/.changeset/short-plants-return.md +++ b/.changeset/short-plants-return.md @@ -1,5 +1,4 @@ --- -'example-backend': patch '@backstage/create-app': patch --- From 9282c018c7c6c071e31e5124c40ebe140dc1152e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 11 Oct 2022 14:30:05 +0000 Subject: [PATCH 179/278] Version Packages (next) --- .changeset/pre.json | 31 +- docs/releases/v1.7.0-next.2-changelog.md | 2127 +++++++++++++++++ package.json | 2 +- packages/app-defaults/CHANGELOG.md | 11 + packages/app-defaults/package.json | 2 +- packages/app/CHANGELOG.md | 62 + packages/app/package.json | 2 +- packages/backend-app-api/CHANGELOG.md | 11 + packages/backend-app-api/package.json | 2 +- packages/backend-common/CHANGELOG.md | 14 + packages/backend-common/package.json | 2 +- packages/backend-defaults/CHANGELOG.md | 8 + packages/backend-defaults/package.json | 2 +- packages/backend-next/CHANGELOG.md | 10 + packages/backend-next/package.json | 2 +- packages/backend-plugin-api/CHANGELOG.md | 10 + packages/backend-plugin-api/package.json | 2 +- packages/backend-tasks/CHANGELOG.md | 11 + packages/backend-tasks/package.json | 2 +- packages/backend-test-utils/CHANGELOG.md | 11 + packages/backend-test-utils/package.json | 2 +- packages/backend/CHANGELOG.md | 42 + packages/backend/package.json | 2 +- packages/catalog-client/CHANGELOG.md | 8 + packages/catalog-client/package.json | 2 +- packages/catalog-model/CHANGELOG.md | 9 + packages/catalog-model/package.json | 2 +- packages/cli/CHANGELOG.md | 13 + packages/cli/package.json | 2 +- packages/codemods/CHANGELOG.md | 7 + packages/codemods/package.json | 2 +- packages/config-loader/CHANGELOG.md | 10 + packages/config-loader/package.json | 2 +- packages/config/CHANGELOG.md | 7 + packages/config/package.json | 2 +- packages/core-app-api/CHANGELOG.md | 10 + packages/core-app-api/package.json | 2 +- packages/core-components/CHANGELOG.md | 11 + packages/core-components/package.json | 2 +- packages/core-plugin-api/CHANGELOG.md | 9 + packages/core-plugin-api/package.json | 2 +- packages/create-app/CHANGELOG.md | 8 + packages/create-app/package.json | 2 +- packages/dev-utils/CHANGELOG.md | 15 + packages/dev-utils/package.json | 2 +- packages/errors/CHANGELOG.md | 7 + packages/errors/package.json | 2 +- packages/integration-react/CHANGELOG.md | 11 + packages/integration-react/package.json | 2 +- packages/integration/CHANGELOG.md | 8 + packages/integration/package.json | 2 +- .../techdocs-cli-embedded-app/CHANGELOG.md | 19 + .../techdocs-cli-embedded-app/package.json | 2 +- packages/techdocs-cli/CHANGELOG.md | 11 + packages/techdocs-cli/package.json | 2 +- packages/test-utils/CHANGELOG.md | 13 + packages/test-utils/package.json | 2 +- plugins/adr-backend/CHANGELOG.md | 14 + plugins/adr-backend/package.json | 2 +- plugins/adr-common/CHANGELOG.md | 9 + plugins/adr-common/package.json | 2 +- plugins/adr/CHANGELOG.md | 15 + plugins/adr/package.json | 2 +- plugins/airbrake-backend/CHANGELOG.md | 9 + plugins/airbrake-backend/package.json | 2 +- plugins/airbrake/CHANGELOG.md | 13 + plugins/airbrake/package.json | 2 +- plugins/allure/CHANGELOG.md | 11 + plugins/allure/package.json | 2 +- plugins/analytics-module-ga/CHANGELOG.md | 10 + plugins/analytics-module-ga/package.json | 2 +- plugins/apache-airflow/CHANGELOG.md | 8 + plugins/apache-airflow/package.json | 2 +- plugins/api-docs/CHANGELOG.md | 12 + plugins/api-docs/package.json | 2 +- plugins/apollo-explorer/CHANGELOG.md | 9 + plugins/apollo-explorer/package.json | 2 +- plugins/app-backend/CHANGELOG.md | 11 + plugins/app-backend/package.json | 2 +- plugins/auth-backend/CHANGELOG.md | 13 + plugins/auth-backend/package.json | 2 +- plugins/auth-node/CHANGELOG.md | 9 + plugins/auth-node/package.json | 2 +- plugins/azure-devops-backend/CHANGELOG.md | 9 + plugins/azure-devops-backend/package.json | 2 +- plugins/azure-devops/CHANGELOG.md | 13 + plugins/azure-devops/package.json | 2 +- plugins/badges-backend/CHANGELOG.md | 12 + plugins/badges-backend/package.json | 2 +- plugins/badges/CHANGELOG.md | 12 + plugins/badges/package.json | 2 +- plugins/bazaar-backend/CHANGELOG.md | 37 + plugins/bazaar-backend/package.json | 2 +- plugins/bazaar/CHANGELOG.md | 16 + plugins/bazaar/package.json | 2 +- plugins/bitbucket-cloud-common/CHANGELOG.md | 7 + plugins/bitbucket-cloud-common/package.json | 2 +- plugins/bitrise/CHANGELOG.md | 11 + plugins/bitrise/package.json | 2 +- .../catalog-backend-module-aws/CHANGELOG.md | 14 + .../catalog-backend-module-aws/package.json | 2 +- .../catalog-backend-module-azure/CHANGELOG.md | 14 + .../catalog-backend-module-azure/package.json | 2 +- .../CHANGELOG.md | 19 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- .../CHANGELOG.md | 19 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- .../CHANGELOG.md | 19 + .../package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../catalog-backend-module-ldap/CHANGELOG.md | 12 + .../catalog-backend-module-ldap/package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- plugins/catalog-backend/CHANGELOG.md | 35 + plugins/catalog-backend/package.json | 2 +- plugins/catalog-common/CHANGELOG.md | 17 + plugins/catalog-common/package.json | 2 +- plugins/catalog-customized/CHANGELOG.md | 8 + plugins/catalog-customized/package.json | 2 +- plugins/catalog-graph/CHANGELOG.md | 12 + plugins/catalog-graph/package.json | 2 +- plugins/catalog-graphql/CHANGELOG.md | 9 + plugins/catalog-graphql/package.json | 2 +- plugins/catalog-import/CHANGELOG.md | 36 + plugins/catalog-import/package.json | 2 +- plugins/catalog-node/CHANGELOG.md | 16 + plugins/catalog-node/package.json | 2 +- plugins/catalog-react/CHANGELOG.md | 18 + plugins/catalog-react/package.json | 2 +- plugins/catalog/CHANGELOG.md | 18 + plugins/catalog/package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- plugins/cicd-statistics/CHANGELOG.md | 9 + plugins/cicd-statistics/package.json | 2 +- plugins/circleci/CHANGELOG.md | 11 + plugins/circleci/package.json | 2 +- plugins/cloudbuild/CHANGELOG.md | 11 + plugins/cloudbuild/package.json | 2 +- plugins/code-climate/CHANGELOG.md | 11 + plugins/code-climate/package.json | 2 +- plugins/code-coverage-backend/CHANGELOG.md | 12 + plugins/code-coverage-backend/package.json | 2 +- plugins/code-coverage/CHANGELOG.md | 13 + plugins/code-coverage/package.json | 2 +- plugins/codescene/CHANGELOG.md | 11 + plugins/codescene/package.json | 2 +- plugins/config-schema/CHANGELOG.md | 12 + plugins/config-schema/package.json | 2 +- plugins/cost-insights/CHANGELOG.md | 12 + plugins/cost-insights/package.json | 2 +- plugins/dynatrace/CHANGELOG.md | 11 + plugins/dynatrace/package.json | 2 +- .../example-todo-list-backend/CHANGELOG.md | 10 + .../example-todo-list-backend/package.json | 2 +- plugins/example-todo-list-common/CHANGELOG.md | 7 + plugins/example-todo-list-common/package.json | 2 +- plugins/example-todo-list/CHANGELOG.md | 9 + plugins/example-todo-list/package.json | 2 +- plugins/explore-react/CHANGELOG.md | 7 + plugins/explore-react/package.json | 2 +- plugins/explore/CHANGELOG.md | 12 + plugins/explore/package.json | 2 +- plugins/firehydrant/CHANGELOG.md | 10 + plugins/firehydrant/package.json | 2 +- plugins/fossa/CHANGELOG.md | 12 + plugins/fossa/package.json | 2 +- plugins/gcalendar/CHANGELOG.md | 10 + plugins/gcalendar/package.json | 2 +- plugins/gcp-projects/CHANGELOG.md | 9 + plugins/gcp-projects/package.json | 2 +- plugins/git-release-manager/CHANGELOG.md | 10 + plugins/git-release-manager/package.json | 2 +- plugins/github-actions/CHANGELOG.md | 12 + plugins/github-actions/package.json | 2 +- plugins/github-deployments/CHANGELOG.md | 14 + plugins/github-deployments/package.json | 2 +- plugins/github-issues/CHANGELOG.md | 14 + plugins/github-issues/package.json | 2 +- .../github-pull-requests-board/CHANGELOG.md | 12 + .../github-pull-requests-board/package.json | 2 +- plugins/gitops-profiles/CHANGELOG.md | 9 + plugins/gitops-profiles/package.json | 2 +- plugins/gocd/CHANGELOG.md | 12 + plugins/gocd/package.json | 2 +- plugins/graphiql/CHANGELOG.md | 9 + plugins/graphiql/package.json | 2 +- plugins/graphql-backend/CHANGELOG.md | 10 + plugins/graphql-backend/package.json | 2 +- plugins/home/CHANGELOG.md | 13 + plugins/home/package.json | 2 +- plugins/ilert/CHANGELOG.md | 12 + plugins/ilert/package.json | 2 +- plugins/jenkins-backend/CHANGELOG.md | 14 + plugins/jenkins-backend/package.json | 2 +- plugins/jenkins-common/CHANGELOG.md | 8 + plugins/jenkins-common/package.json | 2 +- plugins/jenkins/CHANGELOG.md | 13 + plugins/jenkins/package.json | 2 +- plugins/kafka-backend/CHANGELOG.md | 10 + plugins/kafka-backend/package.json | 2 +- plugins/kafka/CHANGELOG.md | 12 + plugins/kafka/package.json | 2 +- plugins/kubernetes-backend/CHANGELOG.md | 13 + plugins/kubernetes-backend/package.json | 2 +- plugins/kubernetes-common/CHANGELOG.md | 7 + plugins/kubernetes-common/package.json | 2 +- plugins/kubernetes/CHANGELOG.md | 13 + plugins/kubernetes/package.json | 2 +- plugins/lighthouse/CHANGELOG.md | 12 + plugins/lighthouse/package.json | 2 +- plugins/newrelic-dashboard/CHANGELOG.md | 11 + plugins/newrelic-dashboard/package.json | 2 +- plugins/newrelic/CHANGELOG.md | 9 + plugins/newrelic/package.json | 2 +- plugins/org/CHANGELOG.md | 11 + plugins/org/package.json | 2 +- plugins/pagerduty/CHANGELOG.md | 12 + plugins/pagerduty/package.json | 2 +- plugins/periskop-backend/CHANGELOG.md | 9 + plugins/periskop-backend/package.json | 2 +- plugins/periskop/CHANGELOG.md | 12 + plugins/periskop/package.json | 2 +- plugins/permission-backend/CHANGELOG.md | 13 + plugins/permission-backend/package.json | 2 +- plugins/permission-common/CHANGELOG.md | 37 + plugins/permission-common/package.json | 2 +- plugins/permission-node/CHANGELOG.md | 39 + plugins/permission-node/package.json | 2 +- plugins/permission-react/CHANGELOG.md | 9 + plugins/permission-react/package.json | 2 +- plugins/playlist-backend/CHANGELOG.md | 34 + plugins/playlist-backend/package.json | 2 +- plugins/playlist-common/CHANGELOG.md | 7 + plugins/playlist-common/package.json | 2 +- plugins/playlist/CHANGELOG.md | 17 + plugins/playlist/package.json | 2 +- plugins/proxy-backend/CHANGELOG.md | 8 + plugins/proxy-backend/package.json | 2 +- plugins/rollbar-backend/CHANGELOG.md | 9 + plugins/rollbar-backend/package.json | 2 +- plugins/rollbar/CHANGELOG.md | 11 + plugins/rollbar/package.json | 2 +- .../CHANGELOG.md | 12 + .../package.json | 2 +- .../CHANGELOG.md | 12 + .../package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- plugins/scaffolder-backend/CHANGELOG.md | 26 + plugins/scaffolder-backend/package.json | 2 +- plugins/scaffolder-common/CHANGELOG.md | 8 + plugins/scaffolder-common/package.json | 2 +- plugins/scaffolder/CHANGELOG.md | 23 + plugins/scaffolder/package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- plugins/search-backend-module-pg/CHANGELOG.md | 10 + plugins/search-backend-module-pg/package.json | 2 +- plugins/search-backend-node/CHANGELOG.md | 12 + plugins/search-backend-node/package.json | 2 +- plugins/search-backend/CHANGELOG.md | 16 + plugins/search-backend/package.json | 2 +- plugins/search-common/CHANGELOG.md | 8 + plugins/search-common/package.json | 2 +- plugins/search-react/CHANGELOG.md | 12 + plugins/search-react/package.json | 2 +- plugins/search/CHANGELOG.md | 17 + plugins/search/package.json | 2 +- plugins/sentry/CHANGELOG.md | 11 + plugins/sentry/package.json | 2 +- plugins/shortcuts/CHANGELOG.md | 10 + plugins/shortcuts/package.json | 2 +- plugins/sonarqube-backend/CHANGELOG.md | 9 + plugins/sonarqube-backend/package.json | 2 +- plugins/sonarqube/CHANGELOG.md | 11 + plugins/sonarqube/package.json | 2 +- plugins/splunk-on-call/CHANGELOG.md | 11 + plugins/splunk-on-call/package.json | 2 +- plugins/stack-overflow-backend/CHANGELOG.md | 9 + plugins/stack-overflow-backend/package.json | 2 +- plugins/stack-overflow/CHANGELOG.md | 12 + plugins/stack-overflow/package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- plugins/tech-insights-backend/CHANGELOG.md | 15 + plugins/tech-insights-backend/package.json | 2 +- plugins/tech-insights-common/CHANGELOG.md | 7 + plugins/tech-insights-common/package.json | 2 +- plugins/tech-insights-node/CHANGELOG.md | 11 + plugins/tech-insights-node/package.json | 2 +- plugins/tech-insights/CHANGELOG.md | 14 + plugins/tech-insights/package.json | 2 +- plugins/tech-radar/CHANGELOG.md | 9 + plugins/tech-radar/package.json | 2 +- .../techdocs-addons-test-utils/CHANGELOG.md | 16 + .../techdocs-addons-test-utils/package.json | 2 +- plugins/techdocs-backend/CHANGELOG.md | 20 + plugins/techdocs-backend/package.json | 2 +- .../CHANGELOG.md | 12 + .../package.json | 2 +- plugins/techdocs-node/CHANGELOG.md | 12 + plugins/techdocs-node/package.json | 2 +- plugins/techdocs-react/CHANGELOG.md | 11 + plugins/techdocs-react/package.json | 2 +- plugins/techdocs/CHANGELOG.md | 18 + plugins/techdocs/package.json | 2 +- plugins/todo-backend/CHANGELOG.md | 12 + plugins/todo-backend/package.json | 2 +- plugins/todo/CHANGELOG.md | 12 + plugins/todo/package.json | 2 +- plugins/user-settings-backend/CHANGELOG.md | 13 + plugins/user-settings-backend/package.json | 2 +- plugins/user-settings/CHANGELOG.md | 12 + plugins/user-settings/package.json | 2 +- plugins/vault-backend/CHANGELOG.md | 11 + plugins/vault-backend/package.json | 2 +- plugins/vault/CHANGELOG.md | 12 + plugins/vault/package.json | 2 +- plugins/xcmetrics/CHANGELOG.md | 10 + plugins/xcmetrics/package.json | 2 +- 329 files changed, 4446 insertions(+), 165 deletions(-) create mode 100644 docs/releases/v1.7.0-next.2-changelog.md diff --git a/.changeset/pre.json b/.changeset/pre.json index c5f8b30596..33b9221a6a 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -177,47 +177,68 @@ }, "changesets": [ "blue-lions-greet", + "brave-goats-rush", "brave-peaches-brush", "breezy-pots-worry", "bright-rules-shout", + "brown-grapes-battle", "calm-moose-fetch", "calm-pianos-burn", "clean-camels-sneeze", "clever-ties-burn", "cuddly-bikes-tease", + "cuddly-ways-fail", "curly-rats-itch", "curvy-kiwis-fold", "curvy-lemons-change", + "curvy-pets-wash", "dry-shirts-attack", "dull-rocks-warn", + "early-rocks-smell", "eleven-apples-accept", "fair-tools-melt", "fifty-berries-learn", + "five-tables-grow", + "fresh-donuts-arrive", + "fuzzy-dolls-give", + "fuzzy-dolls-shake", + "giant-pianos-repeat", + "great-numbers-reply", "grumpy-pans-knock", "hot-geese-vanish", "itchy-schools-run", + "kind-bees-suffer", "kind-penguins-report", "large-dingos-juggle", + "large-jars-fry", "lazy-beds-pull", + "lazy-eyes-switch", "lazy-fireants-check", + "little-hats-yell", "little-roses-rule", "loud-dots-sit", "lovely-peaches-fold", + "lucky-beans-bathe", "lucky-cows-boil", "mean-spiders-design", "mighty-lions-march", + "moody-carrots-shout", "odd-pandas-suffer", "odd-singers-taste", "old-cobras-suffer", + "old-melons-bathe", "old-needles-brake", "perfect-moose-drum", "plenty-kids-fetch", "plenty-laws-end", "poor-clouds-ring", "pretty-buttons-develop", + "purple-masks-travel", + "quick-meals-talk", "quiet-dancers-jog", "quiet-hats-kick", "quiet-ligers-draw", + "rare-cougars-cross", "rare-hotels-cough", "red-dots-sleep", "red-pants-rush", @@ -225,6 +246,7 @@ "renovate-a02d90b", "rich-carrots-reflect", "rude-bulldogs-sleep", + "rude-tomatoes-behave", "search-bobcats-love", "search-cars-hide", "search-clouds-begin", @@ -232,10 +254,13 @@ "search-dull-planes-prove", "search-rats-grin", "selfish-turkeys-exist", + "seven-panthers-chew", "shaggy-books-smell", + "short-plants-return", "silent-bees-repeat", "silly-rules-join", "sixty-items-nail", + "slimy-suns-learn", "slow-mirrors-eat", "smooth-tables-pull", "soft-falcons-love", @@ -243,16 +268,20 @@ "sweet-insects-camp", "swift-phones-cheat", "tall-baboons-deliver", + "techdocs-olive-worms-yell", "tender-drinks-drive", "tender-parrots-peel", "thick-kings-destroy", "tiny-mails-bathe", "tough-hairs-sparkle", + "tough-seahorses-learn", "twelve-melons-notice", + "unlucky-seas-sip", "warm-days-watch", "wild-weeks-live", "wise-ligers-scream", "yellow-lemons-march", - "young-bugs-remember" + "young-bugs-remember", + "young-olives-cheer" ] } diff --git a/docs/releases/v1.7.0-next.2-changelog.md b/docs/releases/v1.7.0-next.2-changelog.md new file mode 100644 index 0000000000..d5a9b0ddad --- /dev/null +++ b/docs/releases/v1.7.0-next.2-changelog.md @@ -0,0 +1,2127 @@ +# Release v1.7.0-next.2 + +## @backstage/plugin-bazaar-backend@0.2.0-next.2 + +### Minor Changes + +- 8554533546: **BREAKING** The bazaar-backend `createRouter` now requires that the `identityApi` is passed to the router. + + These changes are **required** to `packages/backend/src/plugins/bazaar.ts` + + The user entity ref is now added to the members table and is taken from the requesting user using the `identityApi`. + + ```diff + import { PluginEnvironment } from '../types'; + import { createRouter } from '@backstage/plugin-bazaar-backend'; + import { Router } from 'express'; + + export default async function createPlugin( + env: PluginEnvironment, + ): Promise { + return await createRouter({ + logger: env.logger, + config: env.config, + database: env.database, + + identity: env.identity, + }); + } + ``` + +### Patch Changes + +- f7c2855d76: Router now also has endpoint `getLatestProjects` that takes a limit of projects as prop. +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/backend-test-utils@0.1.29-next.2 + - @backstage/plugin-auth-node@0.2.6-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + +## @backstage/plugin-catalog-backend@1.5.0-next.2 + +### Minor Changes + +- b2e6cb6acf: Added a new method `addLocationAnalyzers` to the `CatalogBuilder`. With this you can add location analyzers to your catalog. These analyzers will be used by the /analyze-location endpoint to decide if the provided URL contains any catalog-info.yaml files already or not. + + Moved the following types from this package to `@backstage/plugin-catalog-backend`. + + - AnalyzeLocationResponse + - AnalyzeLocationRequest + - AnalyzeLocationExistingEntity + - AnalyzeLocationGenerateEntity + - AnalyzeLocationEntityField + +- eb25f7e12d: The exported permission rules and the API of `createCatalogConditionalDecision` have changed to reflect the breaking changes made to the `PermissionRule` type. Note that all involved types are exported from `@backstage/plugin-catalog-backend/alpha` + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/plugin-catalog-node@1.2.0-next.2 + - @backstage/plugin-catalog-common@1.0.7-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-permission-node@0.7.0-next.2 + - @backstage/backend-plugin-api@0.1.3-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/types@1.0.0 + - @backstage/plugin-scaffolder-common@1.2.1-next.2 + +## @backstage/plugin-catalog-import@0.9.0-next.2 + +### Minor Changes + +- b2e6cb6acf: **Breaking** + Moved the code search for the existing catalog-info.yaml files to the backend from the frontend. It means it will use the configured GitHub integration's credentials. + + Add the following to your `CatalogBuilder` to have the repo URL ingestion working again. + + ```ts + // catalog.ts + import { GitHubLocationAnalyzer } from '@backstage/plugin-catalog-backend-module-github'; + ... + builder.addLocationAnalyzers( + new GitHubLocationAnalyzer({ + discovery: env.discovery, + config: env.config, + }), + ); + ... + ``` + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.7-next.2 + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/integration-react@1.1.5-next.2 + +## @backstage/plugin-catalog-node@1.2.0-next.2 + +### Minor Changes + +- 404366c853: Deprecated the `LocationSpec` type. It got moved from this package to the `@backstage/plugin-catalog-common` so make sure imports are updated. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.7-next.2 + - @backstage/backend-plugin-api@0.1.3-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-permission-common@0.7.0-next.2 + +### Minor Changes + +- 46b4a72cee: **BREAKING**: When defining permission rules, it's now necessary to provide a [ZodSchema](https://github.com/colinhacks/zod) that specifies the parameters the rule expects. This has been added to help better describe the parameters in the response of the metadata endpoint and to validate the parameters before a rule is executed. + + To help with this, we have also made a change to the API of permission rules. Before, the permission rules `toQuery` and `apply` signature expected parameters to be separate arguments, like so... + + ```ts + createPermissionRule({ + apply: (resource, foo, bar) => true, + toQuery: (foo, bar) => {}, + }); + ``` + + The API has now changed to expect the parameters as a single object + + ```ts + createPermissionRule({ + paramSchema: z.object({ + foo: z.string().describe('Foo value to match'), + bar: z.string().describe('Bar value to match'), + }), + apply: (resource, { foo, bar }) => true, + toQuery: ({ foo, bar }) => {}, + }); + ``` + + One final change made is to limit the possible values for a parameter to primitives and arrays of primitives. + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-permission-node@0.7.0-next.2 + +### Minor Changes + +- 46b4a72cee: **BREAKING**: When defining permission rules, it's now necessary to provide a [ZodSchema](https://github.com/colinhacks/zod) that specifies the parameters the rule expects. This has been added to help better describe the parameters in the response of the metadata endpoint and to validate the parameters before a rule is executed. + + To help with this, we have also made a change to the API of permission rules. Before, the permission rules `toQuery` and `apply` signature expected parameters to be separate arguments, like so... + + ```ts + createPermissionRule({ + apply: (resource, foo, bar) => true, + toQuery: (foo, bar) => {}, + }); + ``` + + The API has now changed to expect the parameters as a single object + + ```ts + createPermissionRule({ + paramSchema: z.object({ + foo: z.string().describe('Foo value to match'), + bar: z.string().describe('Bar value to match'), + }), + apply: (resource, { foo, bar }) => true, + toQuery: ({ foo, bar }) => {}, + }); + ``` + + One final change made is to limit the possible values for a parameter to primitives and arrays of primitives. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-auth-node@0.2.6-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + +## @backstage/plugin-playlist-backend@0.2.0-next.2 + +### Minor Changes + +- eb25f7e12d: **BREAKING** The exported permission rules have changed to reflect the breaking changes made to the PermissionRule type. + + For example, the `playlistConditions.isOwner` API has changed from: + + ```ts + playlistConditions.isOwner(['user:default/me', 'group:default/owner']); + ``` + + to: + + ```ts + playlistConditions.isOwner({ + owners: ['user:default/me', 'group:default/owner'], + }); + ``` + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-permission-node@0.7.0-next.2 + - @backstage/backend-test-utils@0.1.29-next.2 + - @backstage/plugin-auth-node@0.2.6-next.2 + - @backstage/plugin-playlist-common@0.1.1-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + +## @backstage/plugin-scaffolder-backend@1.7.0-next.2 + +### Minor Changes + +- 17ff77154c: Update the `github:publish` action to allow passing whether pull + requests must be up to date with the default branch before merging. +- a8e9848479: Added optional `sourcePath` parameter to `publish:gitlab:merge-request` action, `targetPath` is now optional and falls back to current workspace path. + +### Patch Changes + +- 4880d43e25: Fixed setting default branch for Bitbucket Server +- Updated dependencies + - @backstage/plugin-catalog-node@1.2.0-next.2 + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/backend-plugin-api@0.1.3-next.2 + - @backstage/plugin-auth-node@0.2.6-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/types@1.0.0 + - @backstage/plugin-scaffolder-common@1.2.1-next.2 + +## @backstage/plugin-techdocs-backend@1.4.0-next.2 + +### Minor Changes + +- 7ced1b4076: Add optional `catalogClient` argument to `createRoute` parameters + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.7-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-techdocs-node@1.4.1-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + +## @backstage/app-defaults@1.0.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-react@0.4.6-next.2 + - @backstage/core-app-api@1.1.1-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/backend-app-api@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-permission-node@0.7.0-next.2 + - @backstage/backend-plugin-api@0.1.3-next.2 + - @backstage/errors@1.1.2-next.2 + +## @backstage/backend-common@0.15.2-next.2 + +### Patch Changes + +- c44cf412de: Fix BitBucket server integration +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/cli-common@0.1.10 + - @backstage/config@1.0.3-next.2 + - @backstage/config-loader@1.1.5-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/types@1.0.0 + +## @backstage/backend-defaults@0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-app-api@0.2.2-next.2 + - @backstage/backend-plugin-api@0.1.3-next.2 + +## @backstage/backend-plugin-api@0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/config@1.0.3-next.2 + +## @backstage/backend-tasks@0.3.6-next.2 + +### Patch Changes + +- d4fea86ea3: Added new function `readTaskScheduleDefinitionFromConfig` to read `TaskScheduleDefinition` (aka. schedule) from the `Config`. +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/types@1.0.0 + +## @backstage/backend-test-utils@0.1.29-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/cli@0.20.0-next.2 + - @backstage/backend-app-api@0.2.2-next.2 + - @backstage/backend-plugin-api@0.1.3-next.2 + - @backstage/config@1.0.3-next.2 + +## @backstage/catalog-client@1.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/errors@1.1.2-next.2 + +## @backstage/catalog-model@1.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/types@1.0.0 + +## @backstage/cli@0.20.0-next.2 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/cli-common@0.1.10 + - @backstage/config@1.0.3-next.2 + - @backstage/config-loader@1.1.5-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/release-manifests@0.0.6 + - @backstage/types@1.0.0 + +## @backstage/codemods@0.1.40-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.10 + +## @backstage/config@1.0.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.0.0 + +## @backstage/config-loader@1.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.10 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/types@1.0.0 + +## @backstage/core-app-api@1.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/types@1.0.0 + - @backstage/version-bridge@1.0.1 + +## @backstage/core-components@0.11.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + - @backstage/version-bridge@1.0.1 + +## @backstage/core-plugin-api@1.0.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3-next.2 + - @backstage/types@1.0.0 + - @backstage/version-bridge@1.0.1 + +## @backstage/create-app@0.4.32-next.2 + +### Patch Changes + +- 01dff06be4: Leverage cache mounts in Dockerfile during `yarn install ...` and `apt-get ...` commands to speed up repeated builds. +- Updated dependencies + - @backstage/cli-common@0.1.10 + +## @backstage/dev-utils@1.0.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/test-utils@1.2.1-next.2 + - @backstage/app-defaults@1.0.7-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-app-api@1.1.1-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/integration-react@1.1.5-next.2 + - @backstage/theme@0.2.16 + +## @backstage/errors@1.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.0.0 + +## @backstage/integration@1.3.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + +## @backstage/integration-react@1.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/theme@0.2.16 + +## @techdocs/cli@1.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-techdocs-node@1.4.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/cli-common@0.1.10 + - @backstage/config@1.0.3-next.2 + +## @backstage/test-utils@1.2.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-permission-react@0.4.6-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-app-api@1.1.1-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + +## @backstage/plugin-adr@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/integration-react@1.1.5-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-adr-common@0.2.2-next.2 + - @backstage/plugin-search-react@1.2.0-next.2 + +## @backstage/plugin-adr-backend@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/plugin-adr-common@0.2.2-next.2 + +## @backstage/plugin-adr-common@0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + +## @backstage/plugin-airbrake@0.3.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/test-utils@1.2.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/dev-utils@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-airbrake-backend@0.2.10-next.2 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/config@1.0.3-next.2 + +## @backstage/plugin-allure@0.1.26-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-analytics-module-ga@0.1.21-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-apache-airflow@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + +## @backstage/plugin-api-docs@0.8.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.6.0-next.2 + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-apollo-explorer@0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-app-backend@0.3.37-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/backend-plugin-api@0.1.3-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/config-loader@1.1.5-next.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-auth-backend@0.17.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-auth-node@0.2.6-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-auth-node@0.2.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + +## @backstage/plugin-azure-devops@0.2.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-azure-devops-common@0.3.0 + +## @backstage/plugin-azure-devops-backend@0.3.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/plugin-azure-devops-common@0.3.0 + +## @backstage/plugin-badges@0.2.34-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-badges-backend@0.1.31-next.2 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + +## @backstage/plugin-bazaar@0.1.25-next.2 + +### Patch Changes + +- f7c2855d76: Added a `Overview Card` for either latest or random projects. Changed `ProjectPreview.tsx` so it take `gridSize` and `useTablePagination` as props. +- c0352bbc69: Link to the user catalog entity of a member +- Updated dependencies + - @backstage/cli@0.20.0-next.2 + - @backstage/plugin-catalog@1.6.0-next.2 + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + +## @backstage/plugin-bitbucket-cloud-common@0.2.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.3.2-next.2 + +## @backstage/plugin-bitrise@0.1.37-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-catalog@1.6.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.7-next.2 + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration-react@1.1.5-next.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + - @backstage/plugin-search-react@1.2.0-next.2 + +## @backstage/plugin-catalog-backend-module-aws@0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-catalog-backend-module-azure@0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-catalog-backend-module-bitbucket@0.2.4-next.2 + +### Patch Changes + +- 23f9199a0f: Deprecate `@backstage/plugin-catalog-backend-module-bitbucket`. + + Please migrate to `@backstage/plugin-catalog-backend-module-bitbucket-cloud` + or `@backstage/plugin-catalog-backend-module-bitbucket-server` instead. + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/types@1.0.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.0-next.2 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.1.4-next.2 + +### Patch Changes + +- f66e696e7b: Bitbucket Cloud provider: Add option to configure schedule via `app-config.yaml` instead of in code. + + Please find how to configure the schedule at the config at + + +- a9b91d39bb: Add `bitbucketCloudCatalogModule` (new backend-plugin-api, alpha). + +- Updated dependencies + - @backstage/plugin-catalog-node@1.2.0-next.2 + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-plugin-api@0.1.3-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/plugin-bitbucket-cloud-common@0.2.0-next.2 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + +## @backstage/plugin-catalog-backend-module-gerrit@0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + +## @backstage/plugin-catalog-backend-module-github@0.1.8-next.2 + +### Patch Changes + +- 7022aebf35: Added `GitHubLocationAnalyzer`. This can be used to add to the `CatalogBuilder`. When added this will be used by `RepoLocationAnalyzer` to figure out if the given URL that you are trying to import from the /catalog-import page already contains catalog-info.yaml files. +- 7edb5909e8: Add missing config schema for the `GitHubEntityProvider`. +- Updated dependencies + - @backstage/plugin-catalog-node@1.2.0-next.2 + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/backend-plugin-api@0.1.3-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-catalog-backend-module-gitlab@0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-catalog-backend-module-ldap@0.5.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-catalog-backend-module-msgraph@0.4.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + +## @backstage/plugin-catalog-backend-module-openapi@0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.2.0-next.2 + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-catalog-common@1.0.7-next.2 + +### Patch Changes + +- 823acaa88b: Moved the following types from `@backstage/plugin-catalog-backend` to this package. + + - AnalyzeLocationResponse + - AnalyzeLocationRequest + - AnalyzeLocationExistingEntity + - AnalyzeLocationGenerateEntity + - AnalyzeLocationEntityField + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + +## @backstage/plugin-catalog-graph@0.2.22-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-catalog-graphql@0.3.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-catalog-react@1.2.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.7-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-permission-react@0.4.6-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + - @backstage/version-bridge@1.0.1 + +## @backstage/plugin-cicd-statistics@0.1.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + +## @backstage/plugin-cicd-statistics-module-gitlab@0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/plugin-cicd-statistics@0.1.12-next.2 + +## @backstage/plugin-circleci@0.3.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-cloudbuild@0.3.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-code-climate@0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-code-coverage@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-code-coverage-backend@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + +## @backstage/plugin-codescene@0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-config-schema@0.1.33-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + +## @backstage/plugin-cost-insights@0.11.32-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-cost-insights-common@0.1.1 + +## @backstage/plugin-dynatrace@1.0.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-explore@0.3.41-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-explore-react@0.0.22-next.2 + +## @backstage/plugin-explore-react@0.0.22-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.0.7-next.2 + +## @backstage/plugin-firehydrant@0.1.27-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-fossa@0.2.42-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-gcalendar@0.3.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-gcp-projects@0.3.29-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-git-release-manager@0.3.23-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-github-actions@0.5.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-github-deployments@0.1.41-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/integration-react@1.1.5-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-github-issues@0.1.2-next.2 + +### Patch Changes + +- df226e124c: Add filtering and ordering to the graphql query +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-github-pull-requests-board@0.1.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-gitops-profiles@0.3.28-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-gocd@0.1.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-graphiql@0.2.42-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-graphql-backend@0.1.27-next.2 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/plugin-catalog-graphql@0.3.14-next.2 + +## @backstage/plugin-home@0.4.26-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-stack-overflow@0.1.6-next.2 + +## @backstage/plugin-ilert@0.1.36-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-jenkins@0.7.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/plugin-jenkins-common@0.1.9-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-jenkins-backend@0.1.27-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-jenkins-common@0.1.9-next.2 + - @backstage/plugin-auth-node@0.2.6-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + +## @backstage/plugin-jenkins-common@0.1.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.7-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + +## @backstage/plugin-kafka@0.3.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-kafka-backend@0.2.30-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + +## @backstage/plugin-kubernetes@0.7.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-kubernetes-common@0.4.3-next.2 + +## @backstage/plugin-kubernetes-backend@0.7.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-auth-node@0.2.6-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/plugin-kubernetes-common@0.4.3-next.2 + +## @backstage/plugin-kubernetes-common@0.4.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2-next.2 + +## @backstage/plugin-lighthouse@0.3.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-newrelic@0.3.28-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-newrelic-dashboard@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + +## @backstage/plugin-org@0.5.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-pagerduty@0.5.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-periskop@0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-periskop-backend@0.1.8-next.2 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/config@1.0.3-next.2 + +## @backstage/plugin-permission-backend@0.5.12-next.2 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-permission-node@0.7.0-next.2 + - @backstage/plugin-auth-node@0.2.6-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + +## @backstage/plugin-permission-react@0.4.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + +## @backstage/plugin-playlist@0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.7-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/plugin-permission-react@0.4.6-next.2 + - @backstage/plugin-playlist-common@0.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-search-react@1.2.0-next.2 + +## @backstage/plugin-playlist-common@0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.0-next.2 + +## @backstage/plugin-proxy-backend@0.2.31-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/config@1.0.3-next.2 + +## @backstage/plugin-rollbar@0.4.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-rollbar-backend@0.1.34-next.2 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/config@1.0.3-next.2 + +## @backstage/plugin-scaffolder@1.7.0-next.2 + +### Patch Changes + +- 92e490d6b4: Make the `/next` scaffolder work end to end with the old `TaskPage` view +- 1047baa926: Bump to `react-jsonschema-form@v5-beta` for the `NextRouter` under `@alpha` exports +- 98ae18b68f: Fixed a bug where the `allowed*` values for the `RepoUrlPicker` would be reset on render. +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.7-next.2 + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/plugin-permission-react@0.4.6-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/integration-react@1.1.5-next.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + - @backstage/plugin-scaffolder-common@1.2.1-next.2 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-scaffolder-backend@1.7.0-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-scaffolder-backend-module-rails@0.4.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-scaffolder-backend@1.7.0-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.2.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.7.0-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-scaffolder-common@1.2.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-search@1.0.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + - @backstage/version-bridge@1.0.1 + - @backstage/plugin-search-react@1.2.0-next.2 + +## @backstage/plugin-search-backend@1.1.0-next.2 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-permission-node@0.7.0-next.2 + - @backstage/plugin-search-backend-node@1.0.3-next.2 + - @backstage/plugin-auth-node@0.2.6-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-search-backend-module-elasticsearch@1.0.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-node@1.0.3-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/config@1.0.3-next.2 + +## @backstage/plugin-search-backend-module-pg@0.4.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-search-backend-node@1.0.3-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/config@1.0.3-next.2 + +## @backstage/plugin-search-backend-node@1.0.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + +## @backstage/plugin-search-common@1.1.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-search-react@1.2.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + - @backstage/version-bridge@1.0.1 + +## @backstage/plugin-sentry@0.4.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-shortcuts@0.3.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + +## @backstage/plugin-sonarqube@0.4.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-sonarqube-backend@0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + +## @backstage/plugin-splunk-on-call@0.3.34-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-stack-overflow@0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-home@0.4.26-next.2 + +## @backstage/plugin-stack-overflow-backend@0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.20.0-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/config@1.0.3-next.2 + +## @backstage/plugin-tech-insights@0.3.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + - @backstage/plugin-tech-insights-common@0.2.7-next.2 + +## @backstage/plugin-tech-insights-backend@0.5.3-next.2 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-tech-insights-node@0.3.5-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/plugin-tech-insights-common@0.2.7-next.2 + +## @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.21-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-tech-insights-node@0.3.5-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/plugin-tech-insights-common@0.2.7-next.2 + +## @backstage/plugin-tech-insights-common@0.2.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.0.0 + +## @backstage/plugin-tech-insights-node@0.3.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/types@1.0.0 + - @backstage/plugin-tech-insights-common@0.2.7-next.2 + +## @backstage/plugin-tech-radar@0.5.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-techdocs@1.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/integration-react@1.1.5-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-search-react@1.2.0-next.2 + - @backstage/plugin-techdocs-react@1.0.5-next.2 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.6.0-next.2 + - @backstage/test-utils@1.2.1-next.2 + - @backstage/core-app-api@1.1.1-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/integration-react@1.1.5-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-search-react@1.2.0-next.2 + - @backstage/plugin-techdocs@1.3.3-next.2 + - @backstage/plugin-techdocs-react@1.0.5-next.2 + +## @backstage/plugin-techdocs-module-addons-contrib@1.0.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/integration-react@1.1.5-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-techdocs-react@1.0.5-next.2 + +## @backstage/plugin-techdocs-node@1.4.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + +## @backstage/plugin-techdocs-react@1.0.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/version-bridge@1.0.1 + +## @backstage/plugin-todo@0.2.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-todo-backend@0.1.34-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + +## @backstage/plugin-user-settings@0.5.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.1.1-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + +## @backstage/plugin-user-settings-backend@0.1.1-next.2 + +### Patch Changes + +- f3463b176b: Use `Response.status` instead of `.send(number)` +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-auth-node@0.2.6-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-vault@0.1.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-vault-backend@0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/backend-test-utils@0.1.29-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + +## @backstage/plugin-xcmetrics@0.2.30-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + +## example-app@0.2.76-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder@1.7.0-next.2 + - @backstage/plugin-catalog-common@1.0.7-next.2 + - @backstage/plugin-catalog-import@0.9.0-next.2 + - @backstage/cli@0.20.0-next.2 + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/plugin-playlist@0.1.1-next.2 + - @backstage/plugin-permission-react@0.4.6-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/app-defaults@1.0.7-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-app-api@1.1.1-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/integration-react@1.1.5-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-airbrake@0.3.10-next.2 + - @backstage/plugin-apache-airflow@0.2.3-next.2 + - @backstage/plugin-api-docs@0.8.10-next.2 + - @backstage/plugin-azure-devops@0.2.1-next.2 + - @backstage/plugin-badges@0.2.34-next.2 + - @backstage/plugin-catalog-graph@0.2.22-next.2 + - @backstage/plugin-circleci@0.3.10-next.2 + - @backstage/plugin-cloudbuild@0.3.10-next.2 + - @backstage/plugin-code-coverage@0.2.3-next.2 + - @backstage/plugin-cost-insights@0.11.32-next.2 + - @backstage/plugin-dynatrace@1.0.0-next.2 + - @backstage/plugin-explore@0.3.41-next.2 + - @backstage/plugin-gcalendar@0.3.6-next.2 + - @backstage/plugin-gcp-projects@0.3.29-next.2 + - @backstage/plugin-github-actions@0.5.10-next.2 + - @backstage/plugin-gocd@0.1.16-next.2 + - @backstage/plugin-graphiql@0.2.42-next.2 + - @backstage/plugin-home@0.4.26-next.2 + - @backstage/plugin-jenkins@0.7.9-next.2 + - @backstage/plugin-kafka@0.3.10-next.2 + - @backstage/plugin-kubernetes@0.7.3-next.2 + - @backstage/plugin-lighthouse@0.3.10-next.2 + - @backstage/plugin-newrelic@0.3.28-next.2 + - @backstage/plugin-newrelic-dashboard@0.2.3-next.2 + - @backstage/plugin-org@0.5.10-next.2 + - @backstage/plugin-pagerduty@0.5.3-next.2 + - @backstage/plugin-rollbar@0.4.10-next.2 + - @backstage/plugin-search@1.0.3-next.2 + - @backstage/plugin-search-react@1.2.0-next.2 + - @backstage/plugin-sentry@0.4.3-next.2 + - @backstage/plugin-shortcuts@0.3.2-next.2 + - @backstage/plugin-stack-overflow@0.1.6-next.2 + - @backstage/plugin-tech-insights@0.3.1-next.2 + - @backstage/plugin-tech-radar@0.5.17-next.2 + - @backstage/plugin-techdocs@1.3.3-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.5-next.2 + - @backstage/plugin-techdocs-react@1.0.5-next.2 + - @backstage/plugin-todo@0.2.12-next.2 + - @backstage/plugin-user-settings@0.5.0-next.2 + - @internal/plugin-catalog-customized@0.0.3-next.2 + +## example-backend@0.2.76-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-permission-node@0.7.0-next.2 + - @backstage/plugin-scaffolder-backend@1.7.0-next.2 + - @backstage/plugin-playlist-backend@0.2.0-next.2 + - @backstage/plugin-badges-backend@0.1.31-next.2 + - @backstage/plugin-graphql-backend@0.1.27-next.2 + - @backstage/plugin-permission-backend@0.5.12-next.2 + - @backstage/plugin-rollbar-backend@0.1.34-next.2 + - @backstage/plugin-search-backend@1.1.0-next.2 + - @backstage/plugin-tech-insights-backend@0.5.3-next.2 + - @backstage/plugin-techdocs-backend@1.4.0-next.2 + - example-app@0.2.76-next.2 + - @backstage/plugin-search-backend-node@1.0.3-next.2 + - @backstage/plugin-tech-insights-node@0.3.5-next.2 + - @backstage/plugin-app-backend@0.3.37-next.2 + - @backstage/plugin-auth-backend@0.17.0-next.2 + - @backstage/plugin-auth-node@0.2.6-next.2 + - @backstage/plugin-azure-devops-backend@0.3.16-next.2 + - @backstage/plugin-code-coverage-backend@0.2.3-next.2 + - @backstage/plugin-jenkins-backend@0.1.27-next.2 + - @backstage/plugin-kafka-backend@0.2.30-next.2 + - @backstage/plugin-kubernetes-backend@0.7.3-next.2 + - @backstage/plugin-proxy-backend@0.2.31-next.2 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.5-next.2 + - @backstage/plugin-search-backend-module-elasticsearch@1.0.3-next.2 + - @backstage/plugin-search-backend-module-pg@0.4.1-next.2 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.21-next.2 + - @backstage/plugin-todo-backend@0.1.34-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/integration@1.3.2-next.2 + +## example-backend-next@0.0.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/plugin-scaffolder-backend@1.7.0-next.2 + - @backstage/plugin-app-backend@0.3.37-next.2 + - @backstage/backend-defaults@0.1.2-next.2 + +## techdocs-cli-embedded-app@0.2.75-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.20.0-next.2 + - @backstage/plugin-catalog@1.6.0-next.2 + - @backstage/test-utils@1.2.1-next.2 + - @backstage/app-defaults@1.0.7-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-app-api@1.1.1-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/integration-react@1.1.5-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-techdocs@1.3.3-next.2 + - @backstage/plugin-techdocs-react@1.0.5-next.2 + +## @internal/plugin-catalog-customized@0.0.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.6.0-next.2 + - @backstage/plugin-catalog-react@1.2.0-next.2 + +## @internal/plugin-todo-list@1.0.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + +## @internal/plugin-todo-list-backend@1.0.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-auth-node@0.2.6-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + +## @internal/plugin-todo-list-common@1.0.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.0-next.2 diff --git a/package.json b/package.json index 1013b2a049..4270ef9824 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "@types/react": "^17", "@types/react-dom": "^17" }, - "version": "1.7.0-next.1", + "version": "1.7.0-next.2", "dependencies": { "@backstage/errors": "workspace:^", "@manypkg/get-packages": "^1.1.3", diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md index c4082ad530..1b07baeade 100644 --- a/packages/app-defaults/CHANGELOG.md +++ b/packages/app-defaults/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/app-defaults +## 1.0.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-react@0.4.6-next.2 + - @backstage/core-app-api@1.1.1-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 1.0.7-next.1 ### Patch Changes diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json index 476509730a..eb62cab691 100644 --- a/packages/app-defaults/package.json +++ b/packages/app-defaults/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/app-defaults", "description": "Provides the default wiring of a Backstage App", - "version": "1.0.7-next.1", + "version": "1.0.7-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index d492b19a1a..e10bfddff8 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,67 @@ # example-app +## 0.2.76-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder@1.7.0-next.2 + - @backstage/plugin-catalog-common@1.0.7-next.2 + - @backstage/plugin-catalog-import@0.9.0-next.2 + - @backstage/cli@0.20.0-next.2 + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/plugin-playlist@0.1.1-next.2 + - @backstage/plugin-permission-react@0.4.6-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/app-defaults@1.0.7-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-app-api@1.1.1-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/integration-react@1.1.5-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-airbrake@0.3.10-next.2 + - @backstage/plugin-apache-airflow@0.2.3-next.2 + - @backstage/plugin-api-docs@0.8.10-next.2 + - @backstage/plugin-azure-devops@0.2.1-next.2 + - @backstage/plugin-badges@0.2.34-next.2 + - @backstage/plugin-catalog-graph@0.2.22-next.2 + - @backstage/plugin-circleci@0.3.10-next.2 + - @backstage/plugin-cloudbuild@0.3.10-next.2 + - @backstage/plugin-code-coverage@0.2.3-next.2 + - @backstage/plugin-cost-insights@0.11.32-next.2 + - @backstage/plugin-dynatrace@1.0.0-next.2 + - @backstage/plugin-explore@0.3.41-next.2 + - @backstage/plugin-gcalendar@0.3.6-next.2 + - @backstage/plugin-gcp-projects@0.3.29-next.2 + - @backstage/plugin-github-actions@0.5.10-next.2 + - @backstage/plugin-gocd@0.1.16-next.2 + - @backstage/plugin-graphiql@0.2.42-next.2 + - @backstage/plugin-home@0.4.26-next.2 + - @backstage/plugin-jenkins@0.7.9-next.2 + - @backstage/plugin-kafka@0.3.10-next.2 + - @backstage/plugin-kubernetes@0.7.3-next.2 + - @backstage/plugin-lighthouse@0.3.10-next.2 + - @backstage/plugin-newrelic@0.3.28-next.2 + - @backstage/plugin-newrelic-dashboard@0.2.3-next.2 + - @backstage/plugin-org@0.5.10-next.2 + - @backstage/plugin-pagerduty@0.5.3-next.2 + - @backstage/plugin-rollbar@0.4.10-next.2 + - @backstage/plugin-search@1.0.3-next.2 + - @backstage/plugin-search-react@1.2.0-next.2 + - @backstage/plugin-sentry@0.4.3-next.2 + - @backstage/plugin-shortcuts@0.3.2-next.2 + - @backstage/plugin-stack-overflow@0.1.6-next.2 + - @backstage/plugin-tech-insights@0.3.1-next.2 + - @backstage/plugin-tech-radar@0.5.17-next.2 + - @backstage/plugin-techdocs@1.3.3-next.2 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.5-next.2 + - @backstage/plugin-techdocs-react@1.0.5-next.2 + - @backstage/plugin-todo@0.2.12-next.2 + - @backstage/plugin-user-settings@0.5.0-next.2 + - @internal/plugin-catalog-customized@0.0.3-next.2 + ## 0.2.76-next.1 ### Patch Changes diff --git a/packages/app/package.json b/packages/app/package.json index fa8bb5c5ee..561b8eae30 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "example-app", - "version": "0.2.76-next.1", + "version": "0.2.76-next.2", "private": true, "backstage": { "role": "frontend" diff --git a/packages/backend-app-api/CHANGELOG.md b/packages/backend-app-api/CHANGELOG.md index 3823d025ac..2b179d7d7a 100644 --- a/packages/backend-app-api/CHANGELOG.md +++ b/packages/backend-app-api/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/backend-app-api +## 0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-permission-node@0.7.0-next.2 + - @backstage/backend-plugin-api@0.1.3-next.2 + - @backstage/errors@1.1.2-next.2 + ## 0.2.2-next.1 ### Patch Changes diff --git a/packages/backend-app-api/package.json b/packages/backend-app-api/package.json index c454785aa2..fd27521572 100644 --- a/packages/backend-app-api/package.json +++ b/packages/backend-app-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-app-api", "description": "Core API used by Backstage backend apps", - "version": "0.2.2-next.1", + "version": "0.2.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-common/CHANGELOG.md b/packages/backend-common/CHANGELOG.md index 143b6d28c9..3029c424fc 100644 --- a/packages/backend-common/CHANGELOG.md +++ b/packages/backend-common/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/backend-common +## 0.15.2-next.2 + +### Patch Changes + +- c44cf412de: Fix BitBucket server integration +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/cli-common@0.1.10 + - @backstage/config@1.0.3-next.2 + - @backstage/config-loader@1.1.5-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/types@1.0.0 + ## 0.15.2-next.1 ### Patch Changes diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json index b6b0c5e35a..133c8590fc 100644 --- a/packages/backend-common/package.json +++ b/packages/backend-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-common", "description": "Common functionality library for Backstage backends", - "version": "0.15.2-next.1", + "version": "0.15.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-defaults/CHANGELOG.md b/packages/backend-defaults/CHANGELOG.md index 8d980fe1bc..986a4a39f2 100644 --- a/packages/backend-defaults/CHANGELOG.md +++ b/packages/backend-defaults/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/backend-defaults +## 0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-app-api@0.2.2-next.2 + - @backstage/backend-plugin-api@0.1.3-next.2 + ## 0.1.2-next.1 ### Patch Changes diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index 1d0a3f09f6..c0344572fa 100644 --- a/packages/backend-defaults/package.json +++ b/packages/backend-defaults/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-defaults", "description": "Backend defaults used by Backstage backend apps", - "version": "0.1.2-next.1", + "version": "0.1.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-next/CHANGELOG.md b/packages/backend-next/CHANGELOG.md index e8d6cefa1b..5849d5b088 100644 --- a/packages/backend-next/CHANGELOG.md +++ b/packages/backend-next/CHANGELOG.md @@ -1,5 +1,15 @@ # example-backend-next +## 0.0.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/plugin-scaffolder-backend@1.7.0-next.2 + - @backstage/plugin-app-backend@0.3.37-next.2 + - @backstage/backend-defaults@0.1.2-next.2 + ## 0.0.4-next.1 ### Patch Changes diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json index 7db8ef9775..8965c8b1c8 100644 --- a/packages/backend-next/package.json +++ b/packages/backend-next/package.json @@ -1,6 +1,6 @@ { "name": "example-backend-next", - "version": "0.0.4-next.1", + "version": "0.0.4-next.2", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/backend-plugin-api/CHANGELOG.md b/packages/backend-plugin-api/CHANGELOG.md index 21897d0a97..230092c0ba 100644 --- a/packages/backend-plugin-api/CHANGELOG.md +++ b/packages/backend-plugin-api/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/backend-plugin-api +## 0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/config@1.0.3-next.2 + ## 0.1.3-next.1 ### Patch Changes diff --git a/packages/backend-plugin-api/package.json b/packages/backend-plugin-api/package.json index 80e3a8adfa..389e36aa93 100644 --- a/packages/backend-plugin-api/package.json +++ b/packages/backend-plugin-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-plugin-api", "description": "Core API used by Backstage backend plugins", - "version": "0.1.3-next.1", + "version": "0.1.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-tasks/CHANGELOG.md b/packages/backend-tasks/CHANGELOG.md index 97468f3856..bff6fa4e7d 100644 --- a/packages/backend-tasks/CHANGELOG.md +++ b/packages/backend-tasks/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/backend-tasks +## 0.3.6-next.2 + +### Patch Changes + +- d4fea86ea3: Added new function `readTaskScheduleDefinitionFromConfig` to read `TaskScheduleDefinition` (aka. schedule) from the `Config`. +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/types@1.0.0 + ## 0.3.6-next.1 ### Patch Changes diff --git a/packages/backend-tasks/package.json b/packages/backend-tasks/package.json index 9fc7d6cbae..06cbe14bf7 100644 --- a/packages/backend-tasks/package.json +++ b/packages/backend-tasks/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-tasks", "description": "Common distributed task management library for Backstage backends", - "version": "0.3.6-next.1", + "version": "0.3.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-test-utils/CHANGELOG.md b/packages/backend-test-utils/CHANGELOG.md index 753ad24289..ab7f6ef60a 100644 --- a/packages/backend-test-utils/CHANGELOG.md +++ b/packages/backend-test-utils/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/backend-test-utils +## 0.1.29-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/cli@0.20.0-next.2 + - @backstage/backend-app-api@0.2.2-next.2 + - @backstage/backend-plugin-api@0.1.3-next.2 + - @backstage/config@1.0.3-next.2 + ## 0.1.29-next.1 ### Patch Changes diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json index 5249196860..d9ab0e195d 100644 --- a/packages/backend-test-utils/package.json +++ b/packages/backend-test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-test-utils", "description": "Test helpers library for Backstage backends", - "version": "0.1.29-next.1", + "version": "0.1.29-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index c5dc2f71bd..c4df56a55f 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,47 @@ # example-backend +## 0.2.76-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-permission-node@0.7.0-next.2 + - @backstage/plugin-scaffolder-backend@1.7.0-next.2 + - @backstage/plugin-playlist-backend@0.2.0-next.2 + - @backstage/plugin-badges-backend@0.1.31-next.2 + - @backstage/plugin-graphql-backend@0.1.27-next.2 + - @backstage/plugin-permission-backend@0.5.12-next.2 + - @backstage/plugin-rollbar-backend@0.1.34-next.2 + - @backstage/plugin-search-backend@1.1.0-next.2 + - @backstage/plugin-tech-insights-backend@0.5.3-next.2 + - @backstage/plugin-techdocs-backend@1.4.0-next.2 + - example-app@0.2.76-next.2 + - @backstage/plugin-search-backend-node@1.0.3-next.2 + - @backstage/plugin-tech-insights-node@0.3.5-next.2 + - @backstage/plugin-app-backend@0.3.37-next.2 + - @backstage/plugin-auth-backend@0.17.0-next.2 + - @backstage/plugin-auth-node@0.2.6-next.2 + - @backstage/plugin-azure-devops-backend@0.3.16-next.2 + - @backstage/plugin-code-coverage-backend@0.2.3-next.2 + - @backstage/plugin-jenkins-backend@0.1.27-next.2 + - @backstage/plugin-kafka-backend@0.2.30-next.2 + - @backstage/plugin-kubernetes-backend@0.7.3-next.2 + - @backstage/plugin-proxy-backend@0.2.31-next.2 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.5-next.2 + - @backstage/plugin-search-backend-module-elasticsearch@1.0.3-next.2 + - @backstage/plugin-search-backend-module-pg@0.4.1-next.2 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.21-next.2 + - @backstage/plugin-todo-backend@0.1.34-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/integration@1.3.2-next.2 + ## 0.2.76-next.1 ### Patch Changes diff --git a/packages/backend/package.json b/packages/backend/package.json index 75a116ee2a..eb13572859 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "example-backend", - "version": "0.2.76-next.1", + "version": "0.2.76-next.2", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/catalog-client/CHANGELOG.md b/packages/catalog-client/CHANGELOG.md index 0e5a847703..27c2f9d1bf 100644 --- a/packages/catalog-client/CHANGELOG.md +++ b/packages/catalog-client/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/catalog-client +## 1.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/errors@1.1.2-next.2 + ## 1.1.1-next.1 ### Patch Changes diff --git a/packages/catalog-client/package.json b/packages/catalog-client/package.json index 31b8654556..d27efc6257 100644 --- a/packages/catalog-client/package.json +++ b/packages/catalog-client/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/catalog-client", "description": "An isomorphic client for the catalog backend", - "version": "1.1.1-next.1", + "version": "1.1.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/catalog-model/CHANGELOG.md b/packages/catalog-model/CHANGELOG.md index 6352f13760..ac53d99efc 100644 --- a/packages/catalog-model/CHANGELOG.md +++ b/packages/catalog-model/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/catalog-model +## 1.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/types@1.0.0 + ## 1.1.2-next.1 ### Patch Changes diff --git a/packages/catalog-model/package.json b/packages/catalog-model/package.json index b1a83fbeb0..0cfebe36d6 100644 --- a/packages/catalog-model/package.json +++ b/packages/catalog-model/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/catalog-model", "description": "Types and validators that help describe the model of a Backstage Catalog", - "version": "1.1.2-next.1", + "version": "1.1.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 90caca8f18..9263da9053 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/cli +## 0.20.0-next.2 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/cli-common@0.1.10 + - @backstage/config@1.0.3-next.2 + - @backstage/config-loader@1.1.5-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/release-manifests@0.0.6 + - @backstage/types@1.0.0 + ## 0.20.0-next.1 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 66f69772d5..213c6dad00 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/cli", "description": "CLI for developing Backstage plugins and apps", - "version": "0.20.0-next.1", + "version": "0.20.0-next.2", "publishConfig": { "access": "public" }, diff --git a/packages/codemods/CHANGELOG.md b/packages/codemods/CHANGELOG.md index 673054c186..e95f39dcfe 100644 --- a/packages/codemods/CHANGELOG.md +++ b/packages/codemods/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/codemods +## 0.1.40-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.10 + ## 0.1.40-next.1 ### Patch Changes diff --git a/packages/codemods/package.json b/packages/codemods/package.json index 4996887eed..37342231a8 100644 --- a/packages/codemods/package.json +++ b/packages/codemods/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/codemods", "description": "A collection of codemods for Backstage projects", - "version": "0.1.40-next.1", + "version": "0.1.40-next.2", "publishConfig": { "access": "public", "main": "dist/index.cjs.js" diff --git a/packages/config-loader/CHANGELOG.md b/packages/config-loader/CHANGELOG.md index 0c1afa75c1..42eaa97e53 100644 --- a/packages/config-loader/CHANGELOG.md +++ b/packages/config-loader/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/config-loader +## 1.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.10 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/types@1.0.0 + ## 1.1.5-next.1 ### Patch Changes diff --git a/packages/config-loader/package.json b/packages/config-loader/package.json index 3fb1da9e1f..7bd0ffb1bf 100644 --- a/packages/config-loader/package.json +++ b/packages/config-loader/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/config-loader", "description": "Config loading functionality used by Backstage backend, and CLI", - "version": "1.1.5-next.1", + "version": "1.1.5-next.2", "publishConfig": { "access": "public", "main": "dist/index.cjs.js", diff --git a/packages/config/CHANGELOG.md b/packages/config/CHANGELOG.md index 151201bfa7..a08d4341e4 100644 --- a/packages/config/CHANGELOG.md +++ b/packages/config/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/config +## 1.0.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.0.0 + ## 1.0.3-next.1 ### Patch Changes diff --git a/packages/config/package.json b/packages/config/package.json index 2305784051..55891f8c63 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/config", "description": "Config API used by Backstage core, backend, and CLI", - "version": "1.0.3-next.1", + "version": "1.0.3-next.2", "publishConfig": { "access": "public", "main": "dist/index.cjs.js", diff --git a/packages/core-app-api/CHANGELOG.md b/packages/core-app-api/CHANGELOG.md index 8914390d89..0c197cfb1e 100644 --- a/packages/core-app-api/CHANGELOG.md +++ b/packages/core-app-api/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/core-app-api +## 1.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/types@1.0.0 + - @backstage/version-bridge@1.0.1 + ## 1.1.1-next.1 ### Patch Changes diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json index 219244eacc..c1beb853cb 100644 --- a/packages/core-app-api/package.json +++ b/packages/core-app-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-app-api", "description": "Core app API used by Backstage apps", - "version": "1.1.1-next.1", + "version": "1.1.1-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md index a27be20b9f..cb75cb5fb8 100644 --- a/packages/core-components/CHANGELOG.md +++ b/packages/core-components/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/core-components +## 0.11.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + - @backstage/version-bridge@1.0.1 + ## 0.11.2-next.1 ### Patch Changes diff --git a/packages/core-components/package.json b/packages/core-components/package.json index a32d8c9af8..3a58be3529 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-components", "description": "Core components used by Backstage plugins and apps", - "version": "0.11.2-next.1", + "version": "0.11.2-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/core-plugin-api/CHANGELOG.md b/packages/core-plugin-api/CHANGELOG.md index 26e18ea244..f0ac2c4dfb 100644 --- a/packages/core-plugin-api/CHANGELOG.md +++ b/packages/core-plugin-api/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/core-plugin-api +## 1.0.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3-next.2 + - @backstage/types@1.0.0 + - @backstage/version-bridge@1.0.1 + ## 1.0.7-next.1 ### Patch Changes diff --git a/packages/core-plugin-api/package.json b/packages/core-plugin-api/package.json index 48b78a1daf..c1097bdf9e 100644 --- a/packages/core-plugin-api/package.json +++ b/packages/core-plugin-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-plugin-api", "description": "Core API used by Backstage plugins", - "version": "1.0.7-next.1", + "version": "1.0.7-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md index 0e1d1a98af..2640775b77 100644 --- a/packages/create-app/CHANGELOG.md +++ b/packages/create-app/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/create-app +## 0.4.32-next.2 + +### Patch Changes + +- 01dff06be4: Leverage cache mounts in Dockerfile during `yarn install ...` and `apt-get ...` commands to speed up repeated builds. +- Updated dependencies + - @backstage/cli-common@0.1.10 + ## 0.4.32-next.1 ### Patch Changes diff --git a/packages/create-app/package.json b/packages/create-app/package.json index 9633c890fa..a42c7830df 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/create-app", "description": "A CLI that helps you create your own Backstage app", - "version": "0.4.32-next.1", + "version": "0.4.32-next.2", "publishConfig": { "access": "public" }, diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index 01c97a4c74..31ca46b945 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/dev-utils +## 1.0.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/test-utils@1.2.1-next.2 + - @backstage/app-defaults@1.0.7-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-app-api@1.1.1-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/integration-react@1.1.5-next.2 + - @backstage/theme@0.2.16 + ## 1.0.7-next.1 ### Patch Changes diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index 60c877f736..990b45d692 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/dev-utils", "description": "Utilities for developing Backstage plugins.", - "version": "1.0.7-next.1", + "version": "1.0.7-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/errors/CHANGELOG.md b/packages/errors/CHANGELOG.md index 26f45611fc..fe478f0bd7 100644 --- a/packages/errors/CHANGELOG.md +++ b/packages/errors/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/errors +## 1.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.0.0 + ## 1.1.2-next.1 ### Patch Changes diff --git a/packages/errors/package.json b/packages/errors/package.json index ad10bb7ed5..e78ecb45d2 100644 --- a/packages/errors/package.json +++ b/packages/errors/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/errors", "description": "Common utilities for error handling within Backstage", - "version": "1.1.2-next.1", + "version": "1.1.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/integration-react/CHANGELOG.md b/packages/integration-react/CHANGELOG.md index 00439a9771..a547cf131a 100644 --- a/packages/integration-react/CHANGELOG.md +++ b/packages/integration-react/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/integration-react +## 1.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/theme@0.2.16 + ## 1.1.5-next.1 ### Patch Changes diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json index cab328f88d..f097a116b4 100644 --- a/packages/integration-react/package.json +++ b/packages/integration-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration-react", "description": "Frontend package for managing integrations towards external systems", - "version": "1.1.5-next.1", + "version": "1.1.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/integration/CHANGELOG.md b/packages/integration/CHANGELOG.md index 134dc34c11..e3433efaf8 100644 --- a/packages/integration/CHANGELOG.md +++ b/packages/integration/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/integration +## 1.3.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + ## 1.3.2-next.1 ### Patch Changes diff --git a/packages/integration/package.json b/packages/integration/package.json index 169bf56353..cf2c7af7fe 100644 --- a/packages/integration/package.json +++ b/packages/integration/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration", "description": "Helpers for managing integrations towards external systems", - "version": "1.3.2-next.1", + "version": "1.3.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/techdocs-cli-embedded-app/CHANGELOG.md b/packages/techdocs-cli-embedded-app/CHANGELOG.md index 49b59771c3..cc2fdb84a3 100644 --- a/packages/techdocs-cli-embedded-app/CHANGELOG.md +++ b/packages/techdocs-cli-embedded-app/CHANGELOG.md @@ -1,5 +1,24 @@ # techdocs-cli-embedded-app +## 0.2.75-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.20.0-next.2 + - @backstage/plugin-catalog@1.6.0-next.2 + - @backstage/test-utils@1.2.1-next.2 + - @backstage/app-defaults@1.0.7-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-app-api@1.1.1-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/integration-react@1.1.5-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-techdocs@1.3.3-next.2 + - @backstage/plugin-techdocs-react@1.0.5-next.2 + ## 0.2.75-next.1 ### Patch Changes diff --git a/packages/techdocs-cli-embedded-app/package.json b/packages/techdocs-cli-embedded-app/package.json index 25eb9f2b27..b6b2a40832 100644 --- a/packages/techdocs-cli-embedded-app/package.json +++ b/packages/techdocs-cli-embedded-app/package.json @@ -1,6 +1,6 @@ { "name": "techdocs-cli-embedded-app", - "version": "0.2.75-next.1", + "version": "0.2.75-next.2", "private": true, "backstage": { "role": "frontend" diff --git a/packages/techdocs-cli/CHANGELOG.md b/packages/techdocs-cli/CHANGELOG.md index c04b3b8681..3fee2b5e70 100644 --- a/packages/techdocs-cli/CHANGELOG.md +++ b/packages/techdocs-cli/CHANGELOG.md @@ -1,5 +1,16 @@ # @techdocs/cli +## 1.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-techdocs-node@1.4.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/cli-common@0.1.10 + - @backstage/config@1.0.3-next.2 + ## 1.2.2-next.1 ### Patch Changes diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json index 3f00391865..63dbe14e03 100644 --- a/packages/techdocs-cli/package.json +++ b/packages/techdocs-cli/package.json @@ -1,7 +1,7 @@ { "name": "@techdocs/cli", "description": "Utility CLI for managing TechDocs sites in Backstage.", - "version": "1.2.2-next.1", + "version": "1.2.2-next.2", "publishConfig": { "access": "public" }, diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md index 28a4a92294..4495c72de1 100644 --- a/packages/test-utils/CHANGELOG.md +++ b/packages/test-utils/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/test-utils +## 1.2.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-permission-react@0.4.6-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-app-api@1.1.1-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + ## 1.2.1-next.1 ### Patch Changes diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index a7bcbab826..f950c42dde 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/test-utils", "description": "Utilities to test Backstage plugins and apps.", - "version": "1.2.1-next.1", + "version": "1.2.1-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/adr-backend/CHANGELOG.md b/plugins/adr-backend/CHANGELOG.md index a13f16e340..3349492a65 100644 --- a/plugins/adr-backend/CHANGELOG.md +++ b/plugins/adr-backend/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-adr-backend +## 0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/plugin-adr-common@0.2.2-next.2 + ## 0.2.2-next.1 ### Patch Changes diff --git a/plugins/adr-backend/package.json b/plugins/adr-backend/package.json index ff232e6b69..903e462bc9 100644 --- a/plugins/adr-backend/package.json +++ b/plugins/adr-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr-backend", - "version": "0.2.2-next.1", + "version": "0.2.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/adr-common/CHANGELOG.md b/plugins/adr-common/CHANGELOG.md index d1738d9920..3472fc1e18 100644 --- a/plugins/adr-common/CHANGELOG.md +++ b/plugins/adr-common/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-adr-common +## 0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + ## 0.2.2-next.1 ### Patch Changes diff --git a/plugins/adr-common/package.json b/plugins/adr-common/package.json index 8358349631..7bfd4d4aa2 100644 --- a/plugins/adr-common/package.json +++ b/plugins/adr-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-adr-common", "description": "Common functionalities for the adr plugin", - "version": "0.2.2-next.1", + "version": "0.2.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/adr/CHANGELOG.md b/plugins/adr/CHANGELOG.md index 7ac3655e03..544b13ef77 100644 --- a/plugins/adr/CHANGELOG.md +++ b/plugins/adr/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-adr +## 0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/integration-react@1.1.5-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-adr-common@0.2.2-next.2 + - @backstage/plugin-search-react@1.2.0-next.2 + ## 0.2.2-next.1 ### Patch Changes diff --git a/plugins/adr/package.json b/plugins/adr/package.json index 4eb9cf7b03..dc324e05f2 100644 --- a/plugins/adr/package.json +++ b/plugins/adr/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr", - "version": "0.2.2-next.1", + "version": "0.2.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/airbrake-backend/CHANGELOG.md b/plugins/airbrake-backend/CHANGELOG.md index b61f76db54..45a049c672 100644 --- a/plugins/airbrake-backend/CHANGELOG.md +++ b/plugins/airbrake-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-airbrake-backend +## 0.2.10-next.2 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/config@1.0.3-next.2 + ## 0.2.10-next.1 ### Patch Changes diff --git a/plugins/airbrake-backend/package.json b/plugins/airbrake-backend/package.json index 2817861740..a96a05e753 100644 --- a/plugins/airbrake-backend/package.json +++ b/plugins/airbrake-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake-backend", - "version": "0.2.10-next.1", + "version": "0.2.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/airbrake/CHANGELOG.md b/plugins/airbrake/CHANGELOG.md index c466c6cb3a..cf7f67e46b 100644 --- a/plugins/airbrake/CHANGELOG.md +++ b/plugins/airbrake/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-airbrake +## 0.3.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/test-utils@1.2.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/dev-utils@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 0.3.10-next.1 ### Patch Changes diff --git a/plugins/airbrake/package.json b/plugins/airbrake/package.json index 28677b7948..d81ddf3cdf 100644 --- a/plugins/airbrake/package.json +++ b/plugins/airbrake/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake", - "version": "0.3.10-next.1", + "version": "0.3.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/allure/CHANGELOG.md b/plugins/allure/CHANGELOG.md index ae170e29c7..c9f80be792 100644 --- a/plugins/allure/CHANGELOG.md +++ b/plugins/allure/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-allure +## 0.1.26-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 0.1.26-next.1 ### Patch Changes diff --git a/plugins/allure/package.json b/plugins/allure/package.json index 1691a77ecf..395295512a 100644 --- a/plugins/allure/package.json +++ b/plugins/allure/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-allure", "description": "A Backstage plugin that integrates with Allure", - "version": "0.1.26-next.1", + "version": "0.1.26-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/analytics-module-ga/CHANGELOG.md b/plugins/analytics-module-ga/CHANGELOG.md index 13c445f246..8e7cbbed8d 100644 --- a/plugins/analytics-module-ga/CHANGELOG.md +++ b/plugins/analytics-module-ga/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-analytics-module-ga +## 0.1.21-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 0.1.21-next.1 ### Patch Changes diff --git a/plugins/analytics-module-ga/package.json b/plugins/analytics-module-ga/package.json index 87d6d4f0fc..56489d3753 100644 --- a/plugins/analytics-module-ga/package.json +++ b/plugins/analytics-module-ga/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-analytics-module-ga", - "version": "0.1.21-next.1", + "version": "0.1.21-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/apache-airflow/CHANGELOG.md b/plugins/apache-airflow/CHANGELOG.md index 5cd28f0827..37504b440d 100644 --- a/plugins/apache-airflow/CHANGELOG.md +++ b/plugins/apache-airflow/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-apache-airflow +## 0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + ## 0.2.3-next.1 ### Patch Changes diff --git a/plugins/apache-airflow/package.json b/plugins/apache-airflow/package.json index 5f9c1b4f9d..f3baa62412 100644 --- a/plugins/apache-airflow/package.json +++ b/plugins/apache-airflow/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-apache-airflow", - "version": "0.2.3-next.1", + "version": "0.2.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md index 432ff12f76..75b2e41b0b 100644 --- a/plugins/api-docs/CHANGELOG.md +++ b/plugins/api-docs/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-api-docs +## 0.8.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.6.0-next.2 + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 0.8.10-next.1 ### Patch Changes diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index bd38fa9c65..695cbbc1ef 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-api-docs", "description": "A Backstage plugin that helps represent API entities in the frontend", - "version": "0.8.10-next.1", + "version": "0.8.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/apollo-explorer/CHANGELOG.md b/plugins/apollo-explorer/CHANGELOG.md index a1c6c6c8df..405f7558ad 100644 --- a/plugins/apollo-explorer/CHANGELOG.md +++ b/plugins/apollo-explorer/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-apollo-explorer +## 0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 0.1.3-next.1 ### Patch Changes diff --git a/plugins/apollo-explorer/package.json b/plugins/apollo-explorer/package.json index a5e598ede1..ddf5996037 100644 --- a/plugins/apollo-explorer/package.json +++ b/plugins/apollo-explorer/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-apollo-explorer", - "version": "0.1.3-next.1", + "version": "0.1.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/app-backend/CHANGELOG.md b/plugins/app-backend/CHANGELOG.md index b1b112a030..8e9ad5420b 100644 --- a/plugins/app-backend/CHANGELOG.md +++ b/plugins/app-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-app-backend +## 0.3.37-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/backend-plugin-api@0.1.3-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/config-loader@1.1.5-next.2 + - @backstage/types@1.0.0 + ## 0.3.37-next.1 ### Patch Changes diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json index db100ea12b..64378b4adf 100644 --- a/plugins/app-backend/package.json +++ b/plugins/app-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-app-backend", "description": "A Backstage backend plugin that serves the Backstage frontend app", - "version": "0.3.37-next.1", + "version": "0.3.37-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md index afa2d700fd..54cce8a7b0 100644 --- a/plugins/auth-backend/CHANGELOG.md +++ b/plugins/auth-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-auth-backend +## 0.17.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-auth-node@0.2.6-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/types@1.0.0 + ## 0.17.0-next.1 ### Minor Changes diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index be02a90a71..0a199443b1 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-auth-backend", "description": "A Backstage backend plugin that handles authentication", - "version": "0.17.0-next.1", + "version": "0.17.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-node/CHANGELOG.md b/plugins/auth-node/CHANGELOG.md index 147861383f..b84e726467 100644 --- a/plugins/auth-node/CHANGELOG.md +++ b/plugins/auth-node/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-auth-node +## 0.2.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + ## 0.2.6-next.1 ### Patch Changes diff --git a/plugins/auth-node/package.json b/plugins/auth-node/package.json index 7c0c3b51e2..7649826982 100644 --- a/plugins/auth-node/package.json +++ b/plugins/auth-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-node", - "version": "0.2.6-next.1", + "version": "0.2.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-devops-backend/CHANGELOG.md b/plugins/azure-devops-backend/CHANGELOG.md index 00cc426c0e..3516169016 100644 --- a/plugins/azure-devops-backend/CHANGELOG.md +++ b/plugins/azure-devops-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-azure-devops-backend +## 0.3.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/plugin-azure-devops-common@0.3.0 + ## 0.3.16-next.1 ### Patch Changes diff --git a/plugins/azure-devops-backend/package.json b/plugins/azure-devops-backend/package.json index 27be6291ed..062fa44c0b 100644 --- a/plugins/azure-devops-backend/package.json +++ b/plugins/azure-devops-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops-backend", - "version": "0.3.16-next.1", + "version": "0.3.16-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-devops/CHANGELOG.md b/plugins/azure-devops/CHANGELOG.md index 4919b1226d..f3538acd45 100644 --- a/plugins/azure-devops/CHANGELOG.md +++ b/plugins/azure-devops/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-azure-devops +## 0.2.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-azure-devops-common@0.3.0 + ## 0.2.1-next.1 ### Patch Changes diff --git a/plugins/azure-devops/package.json b/plugins/azure-devops/package.json index 14f2c29310..dca00111f6 100644 --- a/plugins/azure-devops/package.json +++ b/plugins/azure-devops/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops", - "version": "0.2.1-next.1", + "version": "0.2.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/badges-backend/CHANGELOG.md b/plugins/badges-backend/CHANGELOG.md index 770491ec15..0b980d94c4 100644 --- a/plugins/badges-backend/CHANGELOG.md +++ b/plugins/badges-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-badges-backend +## 0.1.31-next.2 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + ## 0.1.31-next.1 ### Patch Changes diff --git a/plugins/badges-backend/package.json b/plugins/badges-backend/package.json index 678dc8d56e..ea3524ce8a 100644 --- a/plugins/badges-backend/package.json +++ b/plugins/badges-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges-backend", "description": "A Backstage backend plugin that generates README badges for your entities", - "version": "0.1.31-next.1", + "version": "0.1.31-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/badges/CHANGELOG.md b/plugins/badges/CHANGELOG.md index 5adc7d112b..3692f7280a 100644 --- a/plugins/badges/CHANGELOG.md +++ b/plugins/badges/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-badges +## 0.2.34-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + ## 0.2.34-next.1 ### Patch Changes diff --git a/plugins/badges/package.json b/plugins/badges/package.json index 0f05f6fa25..18d9f76ce6 100644 --- a/plugins/badges/package.json +++ b/plugins/badges/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges", "description": "A Backstage plugin that generates README badges for your entities", - "version": "0.2.34-next.1", + "version": "0.2.34-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bazaar-backend/CHANGELOG.md b/plugins/bazaar-backend/CHANGELOG.md index bb39eff121..53d888b247 100644 --- a/plugins/bazaar-backend/CHANGELOG.md +++ b/plugins/bazaar-backend/CHANGELOG.md @@ -1,5 +1,42 @@ # @backstage/plugin-bazaar-backend +## 0.2.0-next.2 + +### Minor Changes + +- 8554533546: **BREAKING** The bazaar-backend `createRouter` now requires that the `identityApi` is passed to the router. + + These changes are **required** to `packages/backend/src/plugins/bazaar.ts` + + The user entity ref is now added to the members table and is taken from the requesting user using the `identityApi`. + + ```diff + import { PluginEnvironment } from '../types'; + import { createRouter } from '@backstage/plugin-bazaar-backend'; + import { Router } from 'express'; + + export default async function createPlugin( + env: PluginEnvironment, + ): Promise { + return await createRouter({ + logger: env.logger, + config: env.config, + database: env.database, + + identity: env.identity, + }); + } + ``` + +### Patch Changes + +- f7c2855d76: Router now also has endpoint `getLatestProjects` that takes a limit of projects as prop. +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/backend-test-utils@0.1.29-next.2 + - @backstage/plugin-auth-node@0.2.6-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + ## 0.1.21-next.1 ### Patch Changes diff --git a/plugins/bazaar-backend/package.json b/plugins/bazaar-backend/package.json index 31ae4c6cb5..9a203ed0f2 100644 --- a/plugins/bazaar-backend/package.json +++ b/plugins/bazaar-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar-backend", - "version": "0.1.21-next.1", + "version": "0.2.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bazaar/CHANGELOG.md b/plugins/bazaar/CHANGELOG.md index b2d0e8a8d4..c5042a6585 100644 --- a/plugins/bazaar/CHANGELOG.md +++ b/plugins/bazaar/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-bazaar +## 0.1.25-next.2 + +### Patch Changes + +- f7c2855d76: Added a `Overview Card` for either latest or random projects. Changed `ProjectPreview.tsx` so it take `gridSize` and `useTablePagination` as props. +- c0352bbc69: Link to the user catalog entity of a member +- Updated dependencies + - @backstage/cli@0.20.0-next.2 + - @backstage/plugin-catalog@1.6.0-next.2 + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + ## 0.1.25-next.1 ### Patch Changes diff --git a/plugins/bazaar/package.json b/plugins/bazaar/package.json index e019784cc5..94905d0387 100644 --- a/plugins/bazaar/package.json +++ b/plugins/bazaar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar", - "version": "0.1.25-next.1", + "version": "0.1.25-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bitbucket-cloud-common/CHANGELOG.md b/plugins/bitbucket-cloud-common/CHANGELOG.md index 2dc4bd1ae3..0fb56e97ae 100644 --- a/plugins/bitbucket-cloud-common/CHANGELOG.md +++ b/plugins/bitbucket-cloud-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-bitbucket-cloud-common +## 0.2.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.3.2-next.2 + ## 0.2.0-next.1 ### Patch Changes diff --git a/plugins/bitbucket-cloud-common/package.json b/plugins/bitbucket-cloud-common/package.json index 10d443e2a5..50b2706494 100644 --- a/plugins/bitbucket-cloud-common/package.json +++ b/plugins/bitbucket-cloud-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-bitbucket-cloud-common", "description": "Common functionalities for bitbucket-cloud plugins", - "version": "0.2.0-next.1", + "version": "0.2.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bitrise/CHANGELOG.md b/plugins/bitrise/CHANGELOG.md index d8781740ec..987576897a 100644 --- a/plugins/bitrise/CHANGELOG.md +++ b/plugins/bitrise/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-bitrise +## 0.1.37-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 0.1.37-next.1 ### Patch Changes diff --git a/plugins/bitrise/package.json b/plugins/bitrise/package.json index 0645020104..29c6be025c 100644 --- a/plugins/bitrise/package.json +++ b/plugins/bitrise/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-bitrise", "description": "A Backstage plugin that integrates towards Bitrise", - "version": "0.1.37-next.1", + "version": "0.1.37-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-aws/CHANGELOG.md b/plugins/catalog-backend-module-aws/CHANGELOG.md index 54717bb37d..e1b79a9bee 100644 --- a/plugins/catalog-backend-module-aws/CHANGELOG.md +++ b/plugins/catalog-backend-module-aws/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-aws +## 0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/types@1.0.0 + ## 0.1.10-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json index 8be3ca3031..8a511b0019 100644 --- a/plugins/catalog-backend-module-aws/package.json +++ b/plugins/catalog-backend-module-aws/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-aws", "description": "A Backstage catalog backend module that helps integrate towards AWS", - "version": "0.1.10-next.1", + "version": "0.1.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-azure/CHANGELOG.md b/plugins/catalog-backend-module-azure/CHANGELOG.md index 4342307cf5..bdd495a472 100644 --- a/plugins/catalog-backend-module-azure/CHANGELOG.md +++ b/plugins/catalog-backend-module-azure/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-azure +## 0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/types@1.0.0 + ## 0.1.8-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index 0385655259..5ccc68a70e 100644 --- a/plugins/catalog-backend-module-azure/package.json +++ b/plugins/catalog-backend-module-azure/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-azure", "description": "A Backstage catalog backend module that helps integrate towards Azure", - "version": "0.1.8-next.1", + "version": "0.1.8-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md index bbc999591c..4df7a0fd82 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-catalog-backend-module-bitbucket-cloud +## 0.1.4-next.2 + +### Patch Changes + +- f66e696e7b: Bitbucket Cloud provider: Add option to configure schedule via `app-config.yaml` instead of in code. + + Please find how to configure the schedule at the config at + https://backstage.io/docs/integrations/bitbucketCloud/discovery + +- a9b91d39bb: Add `bitbucketCloudCatalogModule` (new backend-plugin-api, alpha). +- Updated dependencies + - @backstage/plugin-catalog-node@1.2.0-next.2 + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-plugin-api@0.1.3-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/plugin-bitbucket-cloud-common@0.2.0-next.2 + ## 0.1.4-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json index 54603b128f..df8fd11e8c 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/package.json +++ b/plugins/catalog-backend-module-bitbucket-cloud/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-cloud", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket Cloud", - "version": "0.1.4-next.1", + "version": "0.1.4-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md index ca248ce215..7ba7e97d21 100644 --- a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-bitbucket-server +## 0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json index 2490b79ffa..94b9cdd780 100644 --- a/plugins/catalog-backend-module-bitbucket-server/package.json +++ b/plugins/catalog-backend-module-bitbucket-server/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-server", - "version": "0.1.2-next.1", + "version": "0.1.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md index eb9eb97acc..448b4b6eee 100644 --- a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-catalog-backend-module-bitbucket +## 0.2.4-next.2 + +### Patch Changes + +- 23f9199a0f: Deprecate `@backstage/plugin-catalog-backend-module-bitbucket`. + + Please migrate to `@backstage/plugin-catalog-backend-module-bitbucket-cloud` + or `@backstage/plugin-catalog-backend-module-bitbucket-server` instead. + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/types@1.0.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.0-next.2 + ## 0.2.4-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket/package.json b/plugins/catalog-backend-module-bitbucket/package.json index 61657cfafd..dd6ebbf75c 100644 --- a/plugins/catalog-backend-module-bitbucket/package.json +++ b/plugins/catalog-backend-module-bitbucket/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket", - "version": "0.2.4-next.1", + "version": "0.2.4-next.2", "deprecated": true, "main": "src/index.ts", "types": "src/index.ts", diff --git a/plugins/catalog-backend-module-gerrit/CHANGELOG.md b/plugins/catalog-backend-module-gerrit/CHANGELOG.md index 8e1b11c1f7..bba01147a2 100644 --- a/plugins/catalog-backend-module-gerrit/CHANGELOG.md +++ b/plugins/catalog-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-gerrit +## 0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + ## 0.1.5-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json index e3665a96ae..23ae165a01 100644 --- a/plugins/catalog-backend-module-gerrit/package.json +++ b/plugins/catalog-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-gerrit", - "version": "0.1.5-next.1", + "version": "0.1.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-github/CHANGELOG.md b/plugins/catalog-backend-module-github/CHANGELOG.md index 1a7a4a512c..e52ec4390b 100644 --- a/plugins/catalog-backend-module-github/CHANGELOG.md +++ b/plugins/catalog-backend-module-github/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-catalog-backend-module-github +## 0.1.8-next.2 + +### Patch Changes + +- 7022aebf35: Added `GitHubLocationAnalyzer`. This can be used to add to the `CatalogBuilder`. When added this will be used by `RepoLocationAnalyzer` to figure out if the given URL that you are trying to import from the /catalog-import page already contains catalog-info.yaml files. +- 7edb5909e8: Add missing config schema for the `GitHubEntityProvider`. +- Updated dependencies + - @backstage/plugin-catalog-node@1.2.0-next.2 + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/backend-plugin-api@0.1.3-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/types@1.0.0 + ## 0.1.8-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json index 1fb82a648a..f6b040c177 100644 --- a/plugins/catalog-backend-module-github/package.json +++ b/plugins/catalog-backend-module-github/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-github", "description": "A Backstage catalog backend module that helps integrate towards GitHub", - "version": "0.1.8-next.1", + "version": "0.1.8-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-gitlab/CHANGELOG.md b/plugins/catalog-backend-module-gitlab/CHANGELOG.md index add7b604d3..aa3d389714 100644 --- a/plugins/catalog-backend-module-gitlab/CHANGELOG.md +++ b/plugins/catalog-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-gitlab +## 0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/types@1.0.0 + ## 0.1.8-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index 510a4eb3be..60c16737c7 100644 --- a/plugins/catalog-backend-module-gitlab/package.json +++ b/plugins/catalog-backend-module-gitlab/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-gitlab", "description": "A Backstage catalog backend module that helps integrate towards GitLab", - "version": "0.1.8-next.1", + "version": "0.1.8-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-ldap/CHANGELOG.md b/plugins/catalog-backend-module-ldap/CHANGELOG.md index 305eed8686..b1a789fb17 100644 --- a/plugins/catalog-backend-module-ldap/CHANGELOG.md +++ b/plugins/catalog-backend-module-ldap/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-backend-module-ldap +## 0.5.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/types@1.0.0 + ## 0.5.4-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-ldap/package.json b/plugins/catalog-backend-module-ldap/package.json index eaa3929ade..b0587a0d7d 100644 --- a/plugins/catalog-backend-module-ldap/package.json +++ b/plugins/catalog-backend-module-ldap/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-ldap", "description": "A Backstage catalog backend module that helps integrate towards LDAP", - "version": "0.5.4-next.1", + "version": "0.5.4-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-msgraph/CHANGELOG.md b/plugins/catalog-backend-module-msgraph/CHANGELOG.md index 2da4607869..c90df48b93 100644 --- a/plugins/catalog-backend-module-msgraph/CHANGELOG.md +++ b/plugins/catalog-backend-module-msgraph/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-catalog-backend-module-msgraph +## 0.4.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + ## 0.4.3-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json index d3ac35f743..9532cbff7a 100644 --- a/plugins/catalog-backend-module-msgraph/package.json +++ b/plugins/catalog-backend-module-msgraph/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-msgraph", "description": "A Backstage catalog backend module that helps integrate towards Microsoft Graph", - "version": "0.4.3-next.1", + "version": "0.4.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-openapi/CHANGELOG.md b/plugins/catalog-backend-module-openapi/CHANGELOG.md index d098727b3e..981f652bd0 100644 --- a/plugins/catalog-backend-module-openapi/CHANGELOG.md +++ b/plugins/catalog-backend-module-openapi/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-openapi +## 0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.2.0-next.2 + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/types@1.0.0 + ## 0.1.3-next.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-openapi/package.json b/plugins/catalog-backend-module-openapi/package.json index dded553b09..8465e232d0 100644 --- a/plugins/catalog-backend-module-openapi/package.json +++ b/plugins/catalog-backend-module-openapi/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-openapi", "description": "A Backstage catalog backend module that helps with OpenAPI specifications", - "version": "0.1.3-next.1", + "version": "0.1.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md index d3b24efb6f..4182d0acb3 100644 --- a/plugins/catalog-backend/CHANGELOG.md +++ b/plugins/catalog-backend/CHANGELOG.md @@ -1,5 +1,40 @@ # @backstage/plugin-catalog-backend +## 1.5.0-next.2 + +### Minor Changes + +- b2e6cb6acf: Added a new method `addLocationAnalyzers` to the `CatalogBuilder`. With this you can add location analyzers to your catalog. These analyzers will be used by the /analyze-location endpoint to decide if the provided URL contains any catalog-info.yaml files already or not. + + Moved the following types from this package to `@backstage/plugin-catalog-backend`. + + - AnalyzeLocationResponse + - AnalyzeLocationRequest + - AnalyzeLocationExistingEntity + - AnalyzeLocationGenerateEntity + - AnalyzeLocationEntityField + +- eb25f7e12d: The exported permission rules and the API of `createCatalogConditionalDecision` have changed to reflect the breaking changes made to the `PermissionRule` type. Note that all involved types are exported from `@backstage/plugin-catalog-backend/alpha` + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/plugin-catalog-node@1.2.0-next.2 + - @backstage/plugin-catalog-common@1.0.7-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-permission-node@0.7.0-next.2 + - @backstage/backend-plugin-api@0.1.3-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/types@1.0.0 + - @backstage/plugin-scaffolder-common@1.2.1-next.2 + ## 1.4.1-next.1 ### Patch Changes diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index 4d127a4d43..8ace08abcf 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend", "description": "The Backstage backend plugin that provides the Backstage catalog", - "version": "1.4.1-next.1", + "version": "1.5.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-common/CHANGELOG.md b/plugins/catalog-common/CHANGELOG.md index 04fb82c760..f1a54baa1f 100644 --- a/plugins/catalog-common/CHANGELOG.md +++ b/plugins/catalog-common/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-catalog-common +## 1.0.7-next.2 + +### Patch Changes + +- 823acaa88b: Moved the following types from `@backstage/plugin-catalog-backend` to this package. + + - AnalyzeLocationResponse + - AnalyzeLocationRequest + - AnalyzeLocationExistingEntity + - AnalyzeLocationGenerateEntity + - AnalyzeLocationEntityField + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + ## 1.0.7-next.1 ### Patch Changes diff --git a/plugins/catalog-common/package.json b/plugins/catalog-common/package.json index 12dcbc4ccf..981adff43a 100644 --- a/plugins/catalog-common/package.json +++ b/plugins/catalog-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-common", "description": "Common functionalities for the catalog plugin", - "version": "1.0.7-next.1", + "version": "1.0.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-customized/CHANGELOG.md b/plugins/catalog-customized/CHANGELOG.md index 8ba2f88dce..b7542abb38 100644 --- a/plugins/catalog-customized/CHANGELOG.md +++ b/plugins/catalog-customized/CHANGELOG.md @@ -1,5 +1,13 @@ # @internal/plugin-catalog-customized +## 0.0.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.6.0-next.2 + - @backstage/plugin-catalog-react@1.2.0-next.2 + ## 0.0.3-next.1 ### Patch Changes diff --git a/plugins/catalog-customized/package.json b/plugins/catalog-customized/package.json index ddd80bee43..82452a97fc 100644 --- a/plugins/catalog-customized/package.json +++ b/plugins/catalog-customized/package.json @@ -1,7 +1,7 @@ { "name": "@internal/plugin-catalog-customized", "description": "The internal Backstage Customizable plugin for browsing the Backstage catalog", - "version": "0.0.3-next.1", + "version": "0.0.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-graph/CHANGELOG.md b/plugins/catalog-graph/CHANGELOG.md index 724a4bf1a2..6eb03b86b8 100644 --- a/plugins/catalog-graph/CHANGELOG.md +++ b/plugins/catalog-graph/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-graph +## 0.2.22-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 0.2.22-next.1 ### Patch Changes diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json index 8fd71845c2..cc4a598380 100644 --- a/plugins/catalog-graph/package.json +++ b/plugins/catalog-graph/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-graph", - "version": "0.2.22-next.1", + "version": "0.2.22-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-graphql/CHANGELOG.md b/plugins/catalog-graphql/CHANGELOG.md index f185f18bc6..66cf817d89 100644 --- a/plugins/catalog-graphql/CHANGELOG.md +++ b/plugins/catalog-graphql/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-catalog-graphql +## 0.3.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/types@1.0.0 + ## 0.3.14-next.1 ### Patch Changes diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index 96ec786f27..e404f62ea5 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-graphql", "description": "An experimental Backstage catalog GraphQL module", - "version": "0.3.14-next.1", + "version": "0.3.14-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md index 5a24cbabcc..6f22929828 100644 --- a/plugins/catalog-import/CHANGELOG.md +++ b/plugins/catalog-import/CHANGELOG.md @@ -1,5 +1,41 @@ # @backstage/plugin-catalog-import +## 0.9.0-next.2 + +### Minor Changes + +- b2e6cb6acf: **Breaking** + Moved the code search for the existing catalog-info.yaml files to the backend from the frontend. It means it will use the configured GitHub integration's credentials. + + Add the following to your `CatalogBuilder` to have the repo URL ingestion working again. + + ```ts + // catalog.ts + import { GitHubLocationAnalyzer } from '@backstage/plugin-catalog-backend-module-github'; + ... + builder.addLocationAnalyzers( + new GitHubLocationAnalyzer({ + discovery: env.discovery, + config: env.config, + }), + ); + ... + ``` + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.7-next.2 + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/integration-react@1.1.5-next.2 + ## 0.8.13-next.1 ### Patch Changes diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index abb114ad2f..be642db914 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-import", "description": "A Backstage plugin the helps you import entities into your catalog", - "version": "0.8.13-next.1", + "version": "0.9.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-node/CHANGELOG.md b/plugins/catalog-node/CHANGELOG.md index 59a28582b6..48f627a9d7 100644 --- a/plugins/catalog-node/CHANGELOG.md +++ b/plugins/catalog-node/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-catalog-node +## 1.2.0-next.2 + +### Minor Changes + +- 404366c853: Deprecated the `LocationSpec` type. It got moved from this package to the `@backstage/plugin-catalog-common` so make sure imports are updated. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.7-next.2 + - @backstage/backend-plugin-api@0.1.3-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/types@1.0.0 + ## 1.1.1-next.1 ### Patch Changes diff --git a/plugins/catalog-node/package.json b/plugins/catalog-node/package.json index f008e38e6b..f249b10588 100644 --- a/plugins/catalog-node/package.json +++ b/plugins/catalog-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-node", "description": "The plugin-catalog-node module for @backstage/plugin-catalog-backend", - "version": "1.1.1-next.1", + "version": "1.2.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-react/CHANGELOG.md b/plugins/catalog-react/CHANGELOG.md index bfac97c526..1f98467925 100644 --- a/plugins/catalog-react/CHANGELOG.md +++ b/plugins/catalog-react/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-catalog-react +## 1.2.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.7-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-permission-react@0.4.6-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + - @backstage/version-bridge@1.0.1 + ## 1.2.0-next.1 ### Minor Changes diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index c9695b71bb..4d64ae3953 100644 --- a/plugins/catalog-react/package.json +++ b/plugins/catalog-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-react", "description": "A frontend library that helps other Backstage plugins interact with the catalog", - "version": "1.2.0-next.1", + "version": "1.2.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md index 53ab64b093..6974afe720 100644 --- a/plugins/catalog/CHANGELOG.md +++ b/plugins/catalog/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-catalog +## 1.6.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.7-next.2 + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration-react@1.1.5-next.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + - @backstage/plugin-search-react@1.2.0-next.2 + ## 1.6.0-next.1 ### Minor Changes diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index 5f2b659e13..ffa6b92d86 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog", "description": "The Backstage plugin for browsing the Backstage catalog", - "version": "1.6.0-next.1", + "version": "1.6.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md index 63da967bb5..5e1a1139fe 100644 --- a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md +++ b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-cicd-statistics-module-gitlab +## 0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/plugin-cicd-statistics@0.1.12-next.2 + ## 0.1.6-next.1 ### Patch Changes diff --git a/plugins/cicd-statistics-module-gitlab/package.json b/plugins/cicd-statistics-module-gitlab/package.json index 9cf5054269..efbc8a6f3b 100644 --- a/plugins/cicd-statistics-module-gitlab/package.json +++ b/plugins/cicd-statistics-module-gitlab/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cicd-statistics-module-gitlab", "description": "CI/CD Statistics plugin module; Gitlab CICD", - "version": "0.1.6-next.1", + "version": "0.1.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cicd-statistics/CHANGELOG.md b/plugins/cicd-statistics/CHANGELOG.md index 7031927d9e..d12c15c85b 100644 --- a/plugins/cicd-statistics/CHANGELOG.md +++ b/plugins/cicd-statistics/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-cicd-statistics +## 0.1.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + ## 0.1.12-next.1 ### Patch Changes diff --git a/plugins/cicd-statistics/package.json b/plugins/cicd-statistics/package.json index 8ca3be9ecf..faf51957db 100644 --- a/plugins/cicd-statistics/package.json +++ b/plugins/cicd-statistics/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cicd-statistics", "description": "A frontend plugin visualizing CI/CD pipeline statistics (build time)", - "version": "0.1.12-next.1", + "version": "0.1.12-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/circleci/CHANGELOG.md b/plugins/circleci/CHANGELOG.md index d8ca85d777..79e553dd86 100644 --- a/plugins/circleci/CHANGELOG.md +++ b/plugins/circleci/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-circleci +## 0.3.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 0.3.10-next.1 ### Patch Changes diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index 8b0e80fd6b..39759afb0a 100644 --- a/plugins/circleci/package.json +++ b/plugins/circleci/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-circleci", "description": "A Backstage plugin that integrates towards Circle CI", - "version": "0.3.10-next.1", + "version": "0.3.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cloudbuild/CHANGELOG.md b/plugins/cloudbuild/CHANGELOG.md index 74abd2ca13..53f602fc70 100644 --- a/plugins/cloudbuild/CHANGELOG.md +++ b/plugins/cloudbuild/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-cloudbuild +## 0.3.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 0.3.10-next.1 ### Patch Changes diff --git a/plugins/cloudbuild/package.json b/plugins/cloudbuild/package.json index c044ec187b..5e7f671787 100644 --- a/plugins/cloudbuild/package.json +++ b/plugins/cloudbuild/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cloudbuild", "description": "A Backstage plugin that integrates towards Google Cloud Build", - "version": "0.3.10-next.1", + "version": "0.3.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-climate/CHANGELOG.md b/plugins/code-climate/CHANGELOG.md index 04aa2d0ffd..5f66a7e668 100644 --- a/plugins/code-climate/CHANGELOG.md +++ b/plugins/code-climate/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-code-climate +## 0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 0.1.10-next.1 ### Patch Changes diff --git a/plugins/code-climate/package.json b/plugins/code-climate/package.json index 2896b96a32..c26aa027c6 100644 --- a/plugins/code-climate/package.json +++ b/plugins/code-climate/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-code-climate", - "version": "0.1.10-next.1", + "version": "0.1.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-coverage-backend/CHANGELOG.md b/plugins/code-coverage-backend/CHANGELOG.md index f4f08bdc1a..ab69e4015c 100644 --- a/plugins/code-coverage-backend/CHANGELOG.md +++ b/plugins/code-coverage-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-code-coverage-backend +## 0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + ## 0.2.3-next.1 ### Patch Changes diff --git a/plugins/code-coverage-backend/package.json b/plugins/code-coverage-backend/package.json index 3f3eaec53b..5593dc3b35 100644 --- a/plugins/code-coverage-backend/package.json +++ b/plugins/code-coverage-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-code-coverage-backend", "description": "A Backstage backend plugin that helps you keep track of your code coverage", - "version": "0.2.3-next.1", + "version": "0.2.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-coverage/CHANGELOG.md b/plugins/code-coverage/CHANGELOG.md index dda04bbd71..3b01d0c39d 100644 --- a/plugins/code-coverage/CHANGELOG.md +++ b/plugins/code-coverage/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-code-coverage +## 0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + ## 0.2.3-next.1 ### Patch Changes diff --git a/plugins/code-coverage/package.json b/plugins/code-coverage/package.json index ed09b9fd6a..1bfd9ca444 100644 --- a/plugins/code-coverage/package.json +++ b/plugins/code-coverage/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-code-coverage", "description": "A Backstage plugin that helps you keep track of your code coverage", - "version": "0.2.3-next.1", + "version": "0.2.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/codescene/CHANGELOG.md b/plugins/codescene/CHANGELOG.md index c8d90ebb04..fd2d97ac41 100644 --- a/plugins/codescene/CHANGELOG.md +++ b/plugins/codescene/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-codescene +## 0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + ## 0.1.5-next.1 ### Patch Changes diff --git a/plugins/codescene/package.json b/plugins/codescene/package.json index 115b342d19..544d865aa8 100644 --- a/plugins/codescene/package.json +++ b/plugins/codescene/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-codescene", - "version": "0.1.5-next.1", + "version": "0.1.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/config-schema/CHANGELOG.md b/plugins/config-schema/CHANGELOG.md index 1a54cae914..c2d00a5c6b 100644 --- a/plugins/config-schema/CHANGELOG.md +++ b/plugins/config-schema/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-config-schema +## 0.1.33-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + ## 0.1.33-next.1 ### Patch Changes diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json index 790905019e..2bb0233302 100644 --- a/plugins/config-schema/package.json +++ b/plugins/config-schema/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-config-schema", "description": "A Backstage plugin that lets you browse the configuration schema of your app", - "version": "0.1.33-next.1", + "version": "0.1.33-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cost-insights/CHANGELOG.md b/plugins/cost-insights/CHANGELOG.md index 8f672c101d..4fe1096859 100644 --- a/plugins/cost-insights/CHANGELOG.md +++ b/plugins/cost-insights/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-cost-insights +## 0.11.32-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-cost-insights-common@0.1.1 + ## 0.11.32-next.1 ### Patch Changes diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json index 13fb2c2982..f891016c10 100644 --- a/plugins/cost-insights/package.json +++ b/plugins/cost-insights/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cost-insights", "description": "A Backstage plugin that helps you keep track of your cloud spend", - "version": "0.11.32-next.1", + "version": "0.11.32-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/dynatrace/CHANGELOG.md b/plugins/dynatrace/CHANGELOG.md index b6844a870d..6f6e756b95 100644 --- a/plugins/dynatrace/CHANGELOG.md +++ b/plugins/dynatrace/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-dynatrace +## 1.0.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 1.0.0-next.1 ### Patch Changes diff --git a/plugins/dynatrace/package.json b/plugins/dynatrace/package.json index d18264a235..6eb57391bc 100644 --- a/plugins/dynatrace/package.json +++ b/plugins/dynatrace/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-dynatrace", - "version": "1.0.0-next.1", + "version": "1.0.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/example-todo-list-backend/CHANGELOG.md b/plugins/example-todo-list-backend/CHANGELOG.md index 6a3e043504..4e4fc61b26 100644 --- a/plugins/example-todo-list-backend/CHANGELOG.md +++ b/plugins/example-todo-list-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @internal/plugin-todo-list-backend +## 1.0.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-auth-node@0.2.6-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + ## 1.0.6-next.1 ### Patch Changes diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json index 839eb98581..67b029819e 100644 --- a/plugins/example-todo-list-backend/package.json +++ b/plugins/example-todo-list-backend/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list-backend", - "version": "1.0.6-next.1", + "version": "1.0.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/example-todo-list-common/CHANGELOG.md b/plugins/example-todo-list-common/CHANGELOG.md index 9ea7667216..aacd75d4d8 100644 --- a/plugins/example-todo-list-common/CHANGELOG.md +++ b/plugins/example-todo-list-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @internal/plugin-todo-list-common +## 1.0.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.0-next.2 + ## 1.0.5-next.1 ### Patch Changes diff --git a/plugins/example-todo-list-common/package.json b/plugins/example-todo-list-common/package.json index 522b80a7a1..fac4edf22d 100644 --- a/plugins/example-todo-list-common/package.json +++ b/plugins/example-todo-list-common/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list-common", - "version": "1.0.5-next.1", + "version": "1.0.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/example-todo-list/CHANGELOG.md b/plugins/example-todo-list/CHANGELOG.md index 63f03a4ea2..7bd1f2f3f2 100644 --- a/plugins/example-todo-list/CHANGELOG.md +++ b/plugins/example-todo-list/CHANGELOG.md @@ -1,5 +1,14 @@ # @internal/plugin-todo-list +## 1.0.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 1.0.6-next.1 ### Patch Changes diff --git a/plugins/example-todo-list/package.json b/plugins/example-todo-list/package.json index ac96785998..4dfe9ee2a7 100644 --- a/plugins/example-todo-list/package.json +++ b/plugins/example-todo-list/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list", - "version": "1.0.6-next.1", + "version": "1.0.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore-react/CHANGELOG.md b/plugins/explore-react/CHANGELOG.md index ed20a86e6f..b3657b2ab6 100644 --- a/plugins/explore-react/CHANGELOG.md +++ b/plugins/explore-react/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-explore-react +## 0.0.22-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.0.7-next.2 + ## 0.0.22-next.1 ### Patch Changes diff --git a/plugins/explore-react/package.json b/plugins/explore-react/package.json index 309766b66b..16533b3108 100644 --- a/plugins/explore-react/package.json +++ b/plugins/explore-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-explore-react", "description": "A frontend library for Backstage plugins that want to interact with the explore plugin", - "version": "0.0.22-next.1", + "version": "0.0.22-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore/CHANGELOG.md b/plugins/explore/CHANGELOG.md index e91e1b52e5..87b43cb012 100644 --- a/plugins/explore/CHANGELOG.md +++ b/plugins/explore/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-explore +## 0.3.41-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-explore-react@0.0.22-next.2 + ## 0.3.41-next.1 ### Patch Changes diff --git a/plugins/explore/package.json b/plugins/explore/package.json index 1d84bb65c8..c03993ee24 100644 --- a/plugins/explore/package.json +++ b/plugins/explore/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-explore", "description": "A Backstage plugin for building an exploration page of your software ecosystem", - "version": "0.3.41-next.1", + "version": "0.3.41-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/firehydrant/CHANGELOG.md b/plugins/firehydrant/CHANGELOG.md index 21bd34e61f..3c9630f544 100644 --- a/plugins/firehydrant/CHANGELOG.md +++ b/plugins/firehydrant/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-firehydrant +## 0.1.27-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 0.1.27-next.1 ### Patch Changes diff --git a/plugins/firehydrant/package.json b/plugins/firehydrant/package.json index e1e1498823..e556e7b29c 100644 --- a/plugins/firehydrant/package.json +++ b/plugins/firehydrant/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-firehydrant", "description": "A Backstage plugin that integrates towards FireHydrant", - "version": "0.1.27-next.1", + "version": "0.1.27-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/fossa/CHANGELOG.md b/plugins/fossa/CHANGELOG.md index a70ff88ab1..876a62aa4a 100644 --- a/plugins/fossa/CHANGELOG.md +++ b/plugins/fossa/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-fossa +## 0.2.42-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + ## 0.2.42-next.1 ### Patch Changes diff --git a/plugins/fossa/package.json b/plugins/fossa/package.json index 943557e461..249a0c4f0e 100644 --- a/plugins/fossa/package.json +++ b/plugins/fossa/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-fossa", "description": "A Backstage plugin that integrates towards FOSSA", - "version": "0.2.42-next.1", + "version": "0.2.42-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gcalendar/CHANGELOG.md b/plugins/gcalendar/CHANGELOG.md index 4237afcf25..a1fefa672d 100644 --- a/plugins/gcalendar/CHANGELOG.md +++ b/plugins/gcalendar/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-gcalendar +## 0.3.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + ## 0.3.6-next.1 ### Patch Changes diff --git a/plugins/gcalendar/package.json b/plugins/gcalendar/package.json index 6aa76071c2..96c1afb493 100644 --- a/plugins/gcalendar/package.json +++ b/plugins/gcalendar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-gcalendar", - "version": "0.3.6-next.1", + "version": "0.3.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gcp-projects/CHANGELOG.md b/plugins/gcp-projects/CHANGELOG.md index 30ded2e01f..242bc197bd 100644 --- a/plugins/gcp-projects/CHANGELOG.md +++ b/plugins/gcp-projects/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-gcp-projects +## 0.3.29-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 0.3.29-next.1 ### Patch Changes diff --git a/plugins/gcp-projects/package.json b/plugins/gcp-projects/package.json index e8c5d19b77..def4421995 100644 --- a/plugins/gcp-projects/package.json +++ b/plugins/gcp-projects/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gcp-projects", "description": "A Backstage plugin that helps you manage projects in GCP", - "version": "0.3.29-next.1", + "version": "0.3.29-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/git-release-manager/CHANGELOG.md b/plugins/git-release-manager/CHANGELOG.md index cc7ee19c95..b49e46bf18 100644 --- a/plugins/git-release-manager/CHANGELOG.md +++ b/plugins/git-release-manager/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-git-release-manager +## 0.3.23-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/theme@0.2.16 + ## 0.3.23-next.1 ### Patch Changes diff --git a/plugins/git-release-manager/package.json b/plugins/git-release-manager/package.json index 09533a3788..924a0e1939 100644 --- a/plugins/git-release-manager/package.json +++ b/plugins/git-release-manager/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-git-release-manager", "description": "A Backstage plugin that helps you manage releases in git", - "version": "0.3.23-next.1", + "version": "0.3.23-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-actions/CHANGELOG.md b/plugins/github-actions/CHANGELOG.md index d9023a2d12..ff9a3e8f23 100644 --- a/plugins/github-actions/CHANGELOG.md +++ b/plugins/github-actions/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-github-actions +## 0.5.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/theme@0.2.16 + ## 0.5.10-next.1 ### Patch Changes diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json index bc14ca6192..5a6b0ffdb3 100644 --- a/plugins/github-actions/package.json +++ b/plugins/github-actions/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-actions", "description": "A Backstage plugin that integrates towards GitHub Actions", - "version": "0.5.10-next.1", + "version": "0.5.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-deployments/CHANGELOG.md b/plugins/github-deployments/CHANGELOG.md index 721a9d3602..2459be1a5f 100644 --- a/plugins/github-deployments/CHANGELOG.md +++ b/plugins/github-deployments/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-github-deployments +## 0.1.41-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/integration-react@1.1.5-next.2 + - @backstage/theme@0.2.16 + ## 0.1.41-next.1 ### Patch Changes diff --git a/plugins/github-deployments/package.json b/plugins/github-deployments/package.json index 705b76454c..85d8747034 100644 --- a/plugins/github-deployments/package.json +++ b/plugins/github-deployments/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-deployments", "description": "A Backstage plugin that integrates towards GitHub Deployments", - "version": "0.1.41-next.1", + "version": "0.1.41-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-issues/CHANGELOG.md b/plugins/github-issues/CHANGELOG.md index 4fc787427c..5f32e404c1 100644 --- a/plugins/github-issues/CHANGELOG.md +++ b/plugins/github-issues/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-github-issues +## 0.1.2-next.2 + +### Patch Changes + +- df226e124c: Add filtering and ordering to the graphql query +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/theme@0.2.16 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/github-issues/package.json b/plugins/github-issues/package.json index 5df0e2bb55..bcc06311a6 100644 --- a/plugins/github-issues/package.json +++ b/plugins/github-issues/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-github-issues", - "version": "0.1.2-next.1", + "version": "0.1.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-pull-requests-board/CHANGELOG.md b/plugins/github-pull-requests-board/CHANGELOG.md index b128055cef..c112cba1c4 100644 --- a/plugins/github-pull-requests-board/CHANGELOG.md +++ b/plugins/github-pull-requests-board/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-github-pull-requests-board +## 0.1.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/theme@0.2.16 + ## 0.1.4-next.1 ### Patch Changes diff --git a/plugins/github-pull-requests-board/package.json b/plugins/github-pull-requests-board/package.json index a9b17ded8a..cc15d368ee 100644 --- a/plugins/github-pull-requests-board/package.json +++ b/plugins/github-pull-requests-board/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-pull-requests-board", "description": "A Backstage plugin that allows you to see all open Pull Requests for all the repositories owned by your team", - "version": "0.1.4-next.1", + "version": "0.1.4-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gitops-profiles/CHANGELOG.md b/plugins/gitops-profiles/CHANGELOG.md index 8a0c667f62..38d9ba91ec 100644 --- a/plugins/gitops-profiles/CHANGELOG.md +++ b/plugins/gitops-profiles/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-gitops-profiles +## 0.3.28-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 0.3.28-next.1 ### Patch Changes diff --git a/plugins/gitops-profiles/package.json b/plugins/gitops-profiles/package.json index 738ac33754..399f8151fd 100644 --- a/plugins/gitops-profiles/package.json +++ b/plugins/gitops-profiles/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gitops-profiles", "description": "A Backstage plugin that helps you manage GitOps profiles", - "version": "0.3.28-next.1", + "version": "0.3.28-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gocd/CHANGELOG.md b/plugins/gocd/CHANGELOG.md index 5e78aa4af5..491d9f6fd7 100644 --- a/plugins/gocd/CHANGELOG.md +++ b/plugins/gocd/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-gocd +## 0.1.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + ## 0.1.16-next.1 ### Patch Changes diff --git a/plugins/gocd/package.json b/plugins/gocd/package.json index 59d60d39ef..5fda8c6b63 100644 --- a/plugins/gocd/package.json +++ b/plugins/gocd/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gocd", "description": "A Backstage plugin that integrates towards GoCD", - "version": "0.1.16-next.1", + "version": "0.1.16-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/graphiql/CHANGELOG.md b/plugins/graphiql/CHANGELOG.md index 0b3b43c598..0466df3ac0 100644 --- a/plugins/graphiql/CHANGELOG.md +++ b/plugins/graphiql/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-graphiql +## 0.2.42-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 0.2.42-next.1 ### Patch Changes diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json index 5b90ad15cf..69eb82105d 100644 --- a/plugins/graphiql/package.json +++ b/plugins/graphiql/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphiql", "description": "Backstage plugin for browsing GraphQL APIs", - "version": "0.2.42-next.1", + "version": "0.2.42-next.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/graphql-backend/CHANGELOG.md b/plugins/graphql-backend/CHANGELOG.md index cbe3284702..88e1a911d7 100644 --- a/plugins/graphql-backend/CHANGELOG.md +++ b/plugins/graphql-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-graphql-backend +## 0.1.27-next.2 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/plugin-catalog-graphql@0.3.14-next.2 + ## 0.1.27-next.1 ### Patch Changes diff --git a/plugins/graphql-backend/package.json b/plugins/graphql-backend/package.json index b8bb08cecb..b71b083348 100644 --- a/plugins/graphql-backend/package.json +++ b/plugins/graphql-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphql-backend", "description": "An experimental Backstage backend plugin for GraphQL", - "version": "0.1.27-next.1", + "version": "0.1.27-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/home/CHANGELOG.md b/plugins/home/CHANGELOG.md index 6996036d16..d1b67ec974 100644 --- a/plugins/home/CHANGELOG.md +++ b/plugins/home/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-home +## 0.4.26-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-stack-overflow@0.1.6-next.2 + ## 0.4.26-next.1 ### Patch Changes diff --git a/plugins/home/package.json b/plugins/home/package.json index eac72f48d2..e8538efddf 100644 --- a/plugins/home/package.json +++ b/plugins/home/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-home", "description": "A Backstage plugin that helps you build a home page", - "version": "0.4.26-next.1", + "version": "0.4.26-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/ilert/CHANGELOG.md b/plugins/ilert/CHANGELOG.md index 96bf455e49..81ad9057b5 100644 --- a/plugins/ilert/CHANGELOG.md +++ b/plugins/ilert/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-ilert +## 0.1.36-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + ## 0.1.36-next.1 ### Patch Changes diff --git a/plugins/ilert/package.json b/plugins/ilert/package.json index 11bba41fcd..78391b2d1e 100644 --- a/plugins/ilert/package.json +++ b/plugins/ilert/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-ilert", "description": "A Backstage plugin that integrates towards iLert", - "version": "0.1.36-next.1", + "version": "0.1.36-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/jenkins-backend/CHANGELOG.md b/plugins/jenkins-backend/CHANGELOG.md index c4b15f8cdf..aad6ab6887 100644 --- a/plugins/jenkins-backend/CHANGELOG.md +++ b/plugins/jenkins-backend/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-jenkins-backend +## 0.1.27-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-jenkins-common@0.1.9-next.2 + - @backstage/plugin-auth-node@0.2.6-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + ## 0.1.27-next.1 ### Patch Changes diff --git a/plugins/jenkins-backend/package.json b/plugins/jenkins-backend/package.json index bc9bfd49c2..4d2118c270 100644 --- a/plugins/jenkins-backend/package.json +++ b/plugins/jenkins-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-jenkins-backend", "description": "A Backstage backend plugin that integrates towards Jenkins", - "version": "0.1.27-next.1", + "version": "0.1.27-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/jenkins-common/CHANGELOG.md b/plugins/jenkins-common/CHANGELOG.md index 7329ecd7e4..01a30d35e0 100644 --- a/plugins/jenkins-common/CHANGELOG.md +++ b/plugins/jenkins-common/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-jenkins-common +## 0.1.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.7-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + ## 0.1.9-next.1 ### Patch Changes diff --git a/plugins/jenkins-common/package.json b/plugins/jenkins-common/package.json index 9696000d03..2bdb7cfb7a 100644 --- a/plugins/jenkins-common/package.json +++ b/plugins/jenkins-common/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-jenkins-common", - "version": "0.1.9-next.1", + "version": "0.1.9-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/jenkins/CHANGELOG.md b/plugins/jenkins/CHANGELOG.md index d113d79897..8809f31022 100644 --- a/plugins/jenkins/CHANGELOG.md +++ b/plugins/jenkins/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-jenkins +## 0.7.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/plugin-jenkins-common@0.1.9-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + ## 0.7.9-next.1 ### Patch Changes diff --git a/plugins/jenkins/package.json b/plugins/jenkins/package.json index cf6ad8c2d0..37ee196701 100644 --- a/plugins/jenkins/package.json +++ b/plugins/jenkins/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-jenkins", "description": "A Backstage plugin that integrates towards Jenkins", - "version": "0.7.9-next.1", + "version": "0.7.9-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kafka-backend/CHANGELOG.md b/plugins/kafka-backend/CHANGELOG.md index 1f88887c18..06cfade726 100644 --- a/plugins/kafka-backend/CHANGELOG.md +++ b/plugins/kafka-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-kafka-backend +## 0.2.30-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + ## 0.2.30-next.1 ### Patch Changes diff --git a/plugins/kafka-backend/package.json b/plugins/kafka-backend/package.json index d9ed476b9a..aea9fb5e30 100644 --- a/plugins/kafka-backend/package.json +++ b/plugins/kafka-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka-backend", "description": "A Backstage backend plugin that integrates towards Kafka", - "version": "0.2.30-next.1", + "version": "0.2.30-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kafka/CHANGELOG.md b/plugins/kafka/CHANGELOG.md index 1be95d1619..b1aa676dc2 100644 --- a/plugins/kafka/CHANGELOG.md +++ b/plugins/kafka/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-kafka +## 0.3.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 0.3.10-next.1 ### Patch Changes diff --git a/plugins/kafka/package.json b/plugins/kafka/package.json index bc142ced57..c617fad4e1 100644 --- a/plugins/kafka/package.json +++ b/plugins/kafka/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka", "description": "A Backstage plugin that integrates towards Kafka", - "version": "0.3.10-next.1", + "version": "0.3.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes-backend/CHANGELOG.md b/plugins/kubernetes-backend/CHANGELOG.md index 08008f5fe1..6c70dfc7cc 100644 --- a/plugins/kubernetes-backend/CHANGELOG.md +++ b/plugins/kubernetes-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-kubernetes-backend +## 0.7.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-auth-node@0.2.6-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/plugin-kubernetes-common@0.4.3-next.2 + ## 0.7.3-next.1 ### Patch Changes diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index e9a790b2ac..25c112e9b6 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-backend", "description": "A Backstage backend plugin that integrates towards Kubernetes", - "version": "0.7.3-next.1", + "version": "0.7.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes-common/CHANGELOG.md b/plugins/kubernetes-common/CHANGELOG.md index 7071045b04..bb5947e966 100644 --- a/plugins/kubernetes-common/CHANGELOG.md +++ b/plugins/kubernetes-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-kubernetes-common +## 0.4.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2-next.2 + ## 0.4.3-next.1 ### Patch Changes diff --git a/plugins/kubernetes-common/package.json b/plugins/kubernetes-common/package.json index 97c42e823d..a79b396256 100644 --- a/plugins/kubernetes-common/package.json +++ b/plugins/kubernetes-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-common", "description": "Common functionalities for kubernetes, to be shared between kubernetes and kubernetes-backend plugin", - "version": "0.4.3-next.1", + "version": "0.4.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes/CHANGELOG.md b/plugins/kubernetes/CHANGELOG.md index 75d2c3dc46..b1c97431f9 100644 --- a/plugins/kubernetes/CHANGELOG.md +++ b/plugins/kubernetes/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-kubernetes +## 0.7.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-kubernetes-common@0.4.3-next.2 + ## 0.7.3-next.1 ### Patch Changes diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index 09b177eea2..ef8cfd1300 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes", "description": "A Backstage plugin that integrates towards Kubernetes", - "version": "0.7.3-next.1", + "version": "0.7.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/lighthouse/CHANGELOG.md b/plugins/lighthouse/CHANGELOG.md index 3ca5529726..2fd7b2391c 100644 --- a/plugins/lighthouse/CHANGELOG.md +++ b/plugins/lighthouse/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-lighthouse +## 0.3.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 0.3.10-next.1 ### Patch Changes diff --git a/plugins/lighthouse/package.json b/plugins/lighthouse/package.json index f05e4f9732..aef3967bff 100644 --- a/plugins/lighthouse/package.json +++ b/plugins/lighthouse/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-lighthouse", "description": "A Backstage plugin that integrates towards Lighthouse", - "version": "0.3.10-next.1", + "version": "0.3.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/newrelic-dashboard/CHANGELOG.md b/plugins/newrelic-dashboard/CHANGELOG.md index 82dd592c92..5de697c86b 100644 --- a/plugins/newrelic-dashboard/CHANGELOG.md +++ b/plugins/newrelic-dashboard/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-newrelic-dashboard +## 0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + ## 0.2.3-next.1 ### Patch Changes diff --git a/plugins/newrelic-dashboard/package.json b/plugins/newrelic-dashboard/package.json index a7a791db57..0408a79611 100644 --- a/plugins/newrelic-dashboard/package.json +++ b/plugins/newrelic-dashboard/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-newrelic-dashboard", - "version": "0.2.3-next.1", + "version": "0.2.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/newrelic/CHANGELOG.md b/plugins/newrelic/CHANGELOG.md index 0f2c3808b1..41b7327cef 100644 --- a/plugins/newrelic/CHANGELOG.md +++ b/plugins/newrelic/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-newrelic +## 0.3.28-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 0.3.28-next.1 ### Patch Changes diff --git a/plugins/newrelic/package.json b/plugins/newrelic/package.json index 270a8a3961..81161bf2aa 100644 --- a/plugins/newrelic/package.json +++ b/plugins/newrelic/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-newrelic", "description": "A Backstage plugin that integrates towards New Relic", - "version": "0.3.28-next.1", + "version": "0.3.28-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/org/CHANGELOG.md b/plugins/org/CHANGELOG.md index c66dbe7484..195cf5c171 100644 --- a/plugins/org/CHANGELOG.md +++ b/plugins/org/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-org +## 0.5.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 0.5.10-next.1 ### Patch Changes diff --git a/plugins/org/package.json b/plugins/org/package.json index c9e72c9584..d83ecf73d6 100644 --- a/plugins/org/package.json +++ b/plugins/org/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-org", "description": "A Backstage plugin that helps you create entity pages for your organization", - "version": "0.5.10-next.1", + "version": "0.5.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/pagerduty/CHANGELOG.md b/plugins/pagerduty/CHANGELOG.md index 0638130d2e..f2f4291d7f 100644 --- a/plugins/pagerduty/CHANGELOG.md +++ b/plugins/pagerduty/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-pagerduty +## 0.5.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + ## 0.5.3-next.1 ### Patch Changes diff --git a/plugins/pagerduty/package.json b/plugins/pagerduty/package.json index 3edffd0a52..ffef2d1479 100644 --- a/plugins/pagerduty/package.json +++ b/plugins/pagerduty/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-pagerduty", "description": "A Backstage plugin that integrates towards PagerDuty", - "version": "0.5.3-next.1", + "version": "0.5.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/periskop-backend/CHANGELOG.md b/plugins/periskop-backend/CHANGELOG.md index 403f762c4e..a226725ba8 100644 --- a/plugins/periskop-backend/CHANGELOG.md +++ b/plugins/periskop-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-periskop-backend +## 0.1.8-next.2 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/config@1.0.3-next.2 + ## 0.1.8-next.1 ### Patch Changes diff --git a/plugins/periskop-backend/package.json b/plugins/periskop-backend/package.json index 12c4f62ca6..87b95068ff 100644 --- a/plugins/periskop-backend/package.json +++ b/plugins/periskop-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop-backend", - "version": "0.1.8-next.1", + "version": "0.1.8-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/periskop/CHANGELOG.md b/plugins/periskop/CHANGELOG.md index a263bd1ff4..e36887842a 100644 --- a/plugins/periskop/CHANGELOG.md +++ b/plugins/periskop/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-periskop +## 0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + ## 0.1.8-next.1 ### Patch Changes diff --git a/plugins/periskop/package.json b/plugins/periskop/package.json index 944f614b17..b21bb2e4b7 100644 --- a/plugins/periskop/package.json +++ b/plugins/periskop/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop", - "version": "0.1.8-next.1", + "version": "0.1.8-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-backend/CHANGELOG.md b/plugins/permission-backend/CHANGELOG.md index 7e2f0dff31..1d6aaedf20 100644 --- a/plugins/permission-backend/CHANGELOG.md +++ b/plugins/permission-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-permission-backend +## 0.5.12-next.2 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-permission-node@0.7.0-next.2 + - @backstage/plugin-auth-node@0.2.6-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + ## 0.5.12-next.1 ### Patch Changes diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index aabcbafde2..0706673183 100644 --- a/plugins/permission-backend/package.json +++ b/plugins/permission-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-backend", - "version": "0.5.12-next.1", + "version": "0.5.12-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-common/CHANGELOG.md b/plugins/permission-common/CHANGELOG.md index b013d4bd09..b0b2901f69 100644 --- a/plugins/permission-common/CHANGELOG.md +++ b/plugins/permission-common/CHANGELOG.md @@ -1,5 +1,42 @@ # @backstage/plugin-permission-common +## 0.7.0-next.2 + +### Minor Changes + +- 46b4a72cee: **BREAKING**: When defining permission rules, it's now necessary to provide a [ZodSchema](https://github.com/colinhacks/zod) that specifies the parameters the rule expects. This has been added to help better describe the parameters in the response of the metadata endpoint and to validate the parameters before a rule is executed. + + To help with this, we have also made a change to the API of permission rules. Before, the permission rules `toQuery` and `apply` signature expected parameters to be separate arguments, like so... + + ```ts + createPermissionRule({ + apply: (resource, foo, bar) => true, + toQuery: (foo, bar) => {}, + }); + ``` + + The API has now changed to expect the parameters as a single object + + ```ts + createPermissionRule({ + paramSchema: z.object({ + foo: z.string().describe('Foo value to match'), + bar: z.string().describe('Bar value to match'), + }), + apply: (resource, { foo, bar }) => true, + toQuery: ({ foo, bar }) => {}, + }); + ``` + + One final change made is to limit the possible values for a parameter to primitives and arrays of primitives. + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/types@1.0.0 + ## 0.6.5-next.1 ### Patch Changes diff --git a/plugins/permission-common/package.json b/plugins/permission-common/package.json index f9f9ce6f94..3b56c927fe 100644 --- a/plugins/permission-common/package.json +++ b/plugins/permission-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-permission-common", "description": "Isomorphic types and client for Backstage permissions and authorization", - "version": "0.6.5-next.1", + "version": "0.7.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/plugins/permission-node/CHANGELOG.md b/plugins/permission-node/CHANGELOG.md index 9ca95faa76..851a706df4 100644 --- a/plugins/permission-node/CHANGELOG.md +++ b/plugins/permission-node/CHANGELOG.md @@ -1,5 +1,44 @@ # @backstage/plugin-permission-node +## 0.7.0-next.2 + +### Minor Changes + +- 46b4a72cee: **BREAKING**: When defining permission rules, it's now necessary to provide a [ZodSchema](https://github.com/colinhacks/zod) that specifies the parameters the rule expects. This has been added to help better describe the parameters in the response of the metadata endpoint and to validate the parameters before a rule is executed. + + To help with this, we have also made a change to the API of permission rules. Before, the permission rules `toQuery` and `apply` signature expected parameters to be separate arguments, like so... + + ```ts + createPermissionRule({ + apply: (resource, foo, bar) => true, + toQuery: (foo, bar) => {}, + }); + ``` + + The API has now changed to expect the parameters as a single object + + ```ts + createPermissionRule({ + paramSchema: z.object({ + foo: z.string().describe('Foo value to match'), + bar: z.string().describe('Bar value to match'), + }), + apply: (resource, { foo, bar }) => true, + toQuery: ({ foo, bar }) => {}, + }); + ``` + + One final change made is to limit the possible values for a parameter to primitives and arrays of primitives. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-auth-node@0.2.6-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + ## 0.6.6-next.1 ### Patch Changes diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json index 588c0aafe4..d7c05004d7 100644 --- a/plugins/permission-node/package.json +++ b/plugins/permission-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-permission-node", "description": "Common permission and authorization utilities for backend plugins", - "version": "0.6.6-next.1", + "version": "0.7.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-react/CHANGELOG.md b/plugins/permission-react/CHANGELOG.md index 6e4996b989..537513b221 100644 --- a/plugins/permission-react/CHANGELOG.md +++ b/plugins/permission-react/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-permission-react +## 0.4.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + ## 0.4.6-next.1 ### Patch Changes diff --git a/plugins/permission-react/package.json b/plugins/permission-react/package.json index 27660b6a7a..7fad53b870 100644 --- a/plugins/permission-react/package.json +++ b/plugins/permission-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-react", - "version": "0.4.6-next.1", + "version": "0.4.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist-backend/CHANGELOG.md b/plugins/playlist-backend/CHANGELOG.md index 1799243663..8997cd6cb8 100644 --- a/plugins/playlist-backend/CHANGELOG.md +++ b/plugins/playlist-backend/CHANGELOG.md @@ -1,5 +1,39 @@ # @backstage/plugin-playlist-backend +## 0.2.0-next.2 + +### Minor Changes + +- eb25f7e12d: **BREAKING** The exported permission rules have changed to reflect the breaking changes made to the PermissionRule type. + + For example, the `playlistConditions.isOwner` API has changed from: + + ```ts + playlistConditions.isOwner(['user:default/me', 'group:default/owner']); + ``` + + to: + + ```ts + playlistConditions.isOwner({ + owners: ['user:default/me', 'group:default/owner'], + }); + ``` + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-permission-node@0.7.0-next.2 + - @backstage/backend-test-utils@0.1.29-next.2 + - @backstage/plugin-auth-node@0.2.6-next.2 + - @backstage/plugin-playlist-common@0.1.1-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/playlist-backend/package.json b/plugins/playlist-backend/package.json index 136d2a2108..3d817ad9ec 100644 --- a/plugins/playlist-backend/package.json +++ b/plugins/playlist-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-playlist-backend", - "version": "0.1.1-next.1", + "version": "0.2.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist-common/CHANGELOG.md b/plugins/playlist-common/CHANGELOG.md index aeba2f2cb1..9867acbc4e 100644 --- a/plugins/playlist-common/CHANGELOG.md +++ b/plugins/playlist-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-playlist-common +## 0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.0-next.2 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/playlist-common/package.json b/plugins/playlist-common/package.json index ddb822c47a..9a4cfd7cd7 100644 --- a/plugins/playlist-common/package.json +++ b/plugins/playlist-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-playlist-common", "description": "Common functionalities for the playlist plugin", - "version": "0.1.1-next.1", + "version": "0.1.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist/CHANGELOG.md b/plugins/playlist/CHANGELOG.md index 705a8b24e1..24c69e69a1 100644 --- a/plugins/playlist/CHANGELOG.md +++ b/plugins/playlist/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-playlist +## 0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.7-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/plugin-permission-react@0.4.6-next.2 + - @backstage/plugin-playlist-common@0.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-search-react@1.2.0-next.2 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/playlist/package.json b/plugins/playlist/package.json index 883c83962b..442efe5a94 100644 --- a/plugins/playlist/package.json +++ b/plugins/playlist/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-playlist", - "version": "0.1.1-next.1", + "version": "0.1.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/proxy-backend/CHANGELOG.md b/plugins/proxy-backend/CHANGELOG.md index fb4ab82cf4..adff4261cd 100644 --- a/plugins/proxy-backend/CHANGELOG.md +++ b/plugins/proxy-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-proxy-backend +## 0.2.31-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/config@1.0.3-next.2 + ## 0.2.31-next.1 ### Patch Changes diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json index 2ce2a23420..2faa206e16 100644 --- a/plugins/proxy-backend/package.json +++ b/plugins/proxy-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-proxy-backend", "description": "A Backstage backend plugin that helps you set up proxy endpoints in the backend", - "version": "0.2.31-next.1", + "version": "0.2.31-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/rollbar-backend/CHANGELOG.md b/plugins/rollbar-backend/CHANGELOG.md index b412e2e913..103e2ea54f 100644 --- a/plugins/rollbar-backend/CHANGELOG.md +++ b/plugins/rollbar-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-rollbar-backend +## 0.1.34-next.2 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/config@1.0.3-next.2 + ## 0.1.34-next.1 ### Patch Changes diff --git a/plugins/rollbar-backend/package.json b/plugins/rollbar-backend/package.json index e4b9a7011c..b6d12a39bb 100644 --- a/plugins/rollbar-backend/package.json +++ b/plugins/rollbar-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-rollbar-backend", "description": "A Backstage backend plugin that integrates towards Rollbar", - "version": "0.1.34-next.1", + "version": "0.1.34-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/rollbar/CHANGELOG.md b/plugins/rollbar/CHANGELOG.md index 615a8d13a3..3c07a80e52 100644 --- a/plugins/rollbar/CHANGELOG.md +++ b/plugins/rollbar/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-rollbar +## 0.4.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 0.4.10-next.1 ### Patch Changes diff --git a/plugins/rollbar/package.json b/plugins/rollbar/package.json index 3c5fd7295a..fd0fec5842 100644 --- a/plugins/rollbar/package.json +++ b/plugins/rollbar/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-rollbar", "description": "A Backstage plugin that integrates towards Rollbar", - "version": "0.4.10-next.1", + "version": "0.4.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md index ce3ab79f21..68ba110e32 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-scaffolder-backend-module-cookiecutter +## 0.2.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-scaffolder-backend@1.7.0-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/types@1.0.0 + ## 0.2.12-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json index 5f4227b603..ffa77405b7 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/package.json +++ b/plugins/scaffolder-backend-module-cookiecutter/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-cookiecutter", "description": "A module for the scaffolder backend that lets you template projects using cookiecutter", - "version": "0.2.12-next.1", + "version": "0.2.12-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-rails/CHANGELOG.md b/plugins/scaffolder-backend-module-rails/CHANGELOG.md index bdc0a6c933..c5d75bbd27 100644 --- a/plugins/scaffolder-backend-module-rails/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-rails/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-scaffolder-backend-module-rails +## 0.4.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-scaffolder-backend@1.7.0-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/types@1.0.0 + ## 0.4.5-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json index c0f0c5e318..d80f36ed5b 100644 --- a/plugins/scaffolder-backend-module-rails/package.json +++ b/plugins/scaffolder-backend-module-rails/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-rails", "description": "A module for the scaffolder backend that lets you template projects using Rails", - "version": "0.4.5-next.1", + "version": "0.4.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md index 02a136e6c5..8acc5e0933 100644 --- a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-scaffolder-backend-module-yeoman +## 0.2.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.7.0-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/types@1.0.0 + ## 0.2.10-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-yeoman/package.json b/plugins/scaffolder-backend-module-yeoman/package.json index 79ff057a2a..07cfedbdc8 100644 --- a/plugins/scaffolder-backend-module-yeoman/package.json +++ b/plugins/scaffolder-backend-module-yeoman/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-yeoman", - "version": "0.2.10-next.1", + "version": "0.2.10-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md index 1e6cb05ec6..993dd1c577 100644 --- a/plugins/scaffolder-backend/CHANGELOG.md +++ b/plugins/scaffolder-backend/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-scaffolder-backend +## 1.7.0-next.2 + +### Minor Changes + +- 17ff77154c: Update the `github:publish` action to allow passing whether pull + requests must be up to date with the default branch before merging. +- a8e9848479: Added optional `sourcePath` parameter to `publish:gitlab:merge-request` action, `targetPath` is now optional and falls back to current workspace path. + +### Patch Changes + +- 4880d43e25: Fixed setting default branch for Bitbucket Server +- Updated dependencies + - @backstage/plugin-catalog-node@1.2.0-next.2 + - @backstage/plugin-catalog-backend@1.5.0-next.2 + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/backend-plugin-api@0.1.3-next.2 + - @backstage/plugin-auth-node@0.2.6-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/types@1.0.0 + - @backstage/plugin-scaffolder-common@1.2.1-next.2 + ## 1.7.0-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index 2be7b62f75..63a47cbb7b 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend", "description": "The Backstage backend plugin that helps you create new things", - "version": "1.7.0-next.1", + "version": "1.7.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-common/CHANGELOG.md b/plugins/scaffolder-common/CHANGELOG.md index aba3278a54..4b0beb5c37 100644 --- a/plugins/scaffolder-common/CHANGELOG.md +++ b/plugins/scaffolder-common/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-scaffolder-common +## 1.2.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/types@1.0.0 + ## 1.2.1-next.1 ### Patch Changes diff --git a/plugins/scaffolder-common/package.json b/plugins/scaffolder-common/package.json index ff3c9a9275..400be3dd00 100644 --- a/plugins/scaffolder-common/package.json +++ b/plugins/scaffolder-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-common", "description": "Common functionalities for the scaffolder, to be shared between scaffolder and scaffolder-backend plugin", - "version": "1.2.1-next.1", + "version": "1.2.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md index 25b7d73e60..24057cec32 100644 --- a/plugins/scaffolder/CHANGELOG.md +++ b/plugins/scaffolder/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-scaffolder +## 1.7.0-next.2 + +### Patch Changes + +- 92e490d6b4: Make the `/next` scaffolder work end to end with the old `TaskPage` view +- 1047baa926: Bump to `react-jsonschema-form@v5-beta` for the `NextRouter` under `@alpha` exports +- 98ae18b68f: Fixed a bug where the `allowed*` values for the `RepoUrlPicker` would be reset on render. +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.7-next.2 + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/plugin-permission-react@0.4.6-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/integration-react@1.1.5-next.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + - @backstage/plugin-scaffolder-common@1.2.1-next.2 + ## 1.7.0-next.1 ### Patch Changes diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 4508a4b49d..4d9e2caa53 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder", "description": "The Backstage plugin that helps you create new things", - "version": "1.7.0-next.1", + "version": "1.7.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-elasticsearch/CHANGELOG.md b/plugins/search-backend-module-elasticsearch/CHANGELOG.md index 08deccee3d..4a80290cbc 100644 --- a/plugins/search-backend-module-elasticsearch/CHANGELOG.md +++ b/plugins/search-backend-module-elasticsearch/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-search-backend-module-elasticsearch +## 1.0.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-node@1.0.3-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/config@1.0.3-next.2 + ## 1.0.3-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json index 49411fafeb..da200b6cb1 100644 --- a/plugins/search-backend-module-elasticsearch/package.json +++ b/plugins/search-backend-module-elasticsearch/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-elasticsearch", "description": "A module for the search backend that implements search using ElasticSearch", - "version": "1.0.3-next.1", + "version": "1.0.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-pg/CHANGELOG.md b/plugins/search-backend-module-pg/CHANGELOG.md index 32111a501d..08f5f971cb 100644 --- a/plugins/search-backend-module-pg/CHANGELOG.md +++ b/plugins/search-backend-module-pg/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-search-backend-module-pg +## 0.4.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-search-backend-node@1.0.3-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/config@1.0.3-next.2 + ## 0.4.1-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json index 29f80a9218..7e051bb30b 100644 --- a/plugins/search-backend-module-pg/package.json +++ b/plugins/search-backend-module-pg/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-pg", "description": "A module for the search backend that implements search using PostgreSQL", - "version": "0.4.1-next.1", + "version": "0.4.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-node/CHANGELOG.md b/plugins/search-backend-node/CHANGELOG.md index 41b0066847..214e4898b3 100644 --- a/plugins/search-backend-node/CHANGELOG.md +++ b/plugins/search-backend-node/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-search-backend-node +## 1.0.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + ## 1.0.3-next.1 ### Patch Changes diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json index ffbd089813..5847ca4315 100644 --- a/plugins/search-backend-node/package.json +++ b/plugins/search-backend-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-node", "description": "A library for Backstage backend plugins that want to interact with the search backend plugin", - "version": "1.0.3-next.1", + "version": "1.0.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend/CHANGELOG.md b/plugins/search-backend/CHANGELOG.md index fcbfc1d8d5..97126502ef 100644 --- a/plugins/search-backend/CHANGELOG.md +++ b/plugins/search-backend/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-search-backend +## 1.1.0-next.2 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-permission-node@0.7.0-next.2 + - @backstage/plugin-search-backend-node@1.0.3-next.2 + - @backstage/plugin-auth-node@0.2.6-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/types@1.0.0 + ## 1.1.0-next.1 ### Minor Changes diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json index 5e678e5380..199510b8dc 100644 --- a/plugins/search-backend/package.json +++ b/plugins/search-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend", "description": "The Backstage backend plugin that provides your backstage app with search", - "version": "1.1.0-next.1", + "version": "1.1.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-common/CHANGELOG.md b/plugins/search-common/CHANGELOG.md index 344f82a757..7e5a5ff38e 100644 --- a/plugins/search-common/CHANGELOG.md +++ b/plugins/search-common/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-search-common +## 1.1.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/types@1.0.0 + ## 1.1.0-next.1 ### Minor Changes diff --git a/plugins/search-common/package.json b/plugins/search-common/package.json index 99842fba59..e1260a0d1e 100644 --- a/plugins/search-common/package.json +++ b/plugins/search-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-common", "description": "Common functionalities for Search, to be shared between various search-enabled plugins", - "version": "1.1.0-next.1", + "version": "1.1.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/plugins/search-react/CHANGELOG.md b/plugins/search-react/CHANGELOG.md index ade862c218..89fbb389f2 100644 --- a/plugins/search-react/CHANGELOG.md +++ b/plugins/search-react/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-search-react +## 1.2.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + - @backstage/version-bridge@1.0.1 + ## 1.2.0-next.1 ### Minor Changes diff --git a/plugins/search-react/package.json b/plugins/search-react/package.json index bf7d87ca7a..62e9ecd6de 100644 --- a/plugins/search-react/package.json +++ b/plugins/search-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-react", - "version": "1.2.0-next.1", + "version": "1.2.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search/CHANGELOG.md b/plugins/search/CHANGELOG.md index 9f647525de..c7494af180 100644 --- a/plugins/search/CHANGELOG.md +++ b/plugins/search/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-search +## 1.0.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + - @backstage/version-bridge@1.0.1 + - @backstage/plugin-search-react@1.2.0-next.2 + ## 1.0.3-next.1 ### Patch Changes diff --git a/plugins/search/package.json b/plugins/search/package.json index 7777eb6565..7a9a16eedc 100644 --- a/plugins/search/package.json +++ b/plugins/search/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search", "description": "The Backstage plugin that provides your backstage app with search", - "version": "1.0.3-next.1", + "version": "1.0.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sentry/CHANGELOG.md b/plugins/sentry/CHANGELOG.md index bbb7556046..d5163685ad 100644 --- a/plugins/sentry/CHANGELOG.md +++ b/plugins/sentry/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-sentry +## 0.4.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 0.4.3-next.1 ### Patch Changes diff --git a/plugins/sentry/package.json b/plugins/sentry/package.json index 3f35506c06..8d0b049059 100644 --- a/plugins/sentry/package.json +++ b/plugins/sentry/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sentry", "description": "A Backstage plugin that integrates towards Sentry", - "version": "0.4.3-next.1", + "version": "0.4.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/shortcuts/CHANGELOG.md b/plugins/shortcuts/CHANGELOG.md index 65f2c7fbbc..c35c28a29c 100644 --- a/plugins/shortcuts/CHANGELOG.md +++ b/plugins/shortcuts/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-shortcuts +## 0.3.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + ## 0.3.2-next.1 ### Patch Changes diff --git a/plugins/shortcuts/package.json b/plugins/shortcuts/package.json index 7300018e80..caf1c1d127 100644 --- a/plugins/shortcuts/package.json +++ b/plugins/shortcuts/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-shortcuts", "description": "A Backstage plugin that provides a shortcuts feature to the sidebar", - "version": "0.3.2-next.1", + "version": "0.3.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube-backend/CHANGELOG.md b/plugins/sonarqube-backend/CHANGELOG.md index ad209e3a25..6747ae9862 100644 --- a/plugins/sonarqube-backend/CHANGELOG.md +++ b/plugins/sonarqube-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-sonarqube-backend +## 0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/sonarqube-backend/package.json b/plugins/sonarqube-backend/package.json index e1f5168ef6..72488804a9 100644 --- a/plugins/sonarqube-backend/package.json +++ b/plugins/sonarqube-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-sonarqube-backend", - "version": "0.1.2-next.1", + "version": "0.1.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube/CHANGELOG.md b/plugins/sonarqube/CHANGELOG.md index c6a06294e5..15f5e27677 100644 --- a/plugins/sonarqube/CHANGELOG.md +++ b/plugins/sonarqube/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-sonarqube +## 0.4.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 0.4.2-next.1 ### Patch Changes diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json index 02f29fd308..7d7191d17e 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sonarqube", "description": "", - "version": "0.4.2-next.1", + "version": "0.4.2-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/splunk-on-call/CHANGELOG.md b/plugins/splunk-on-call/CHANGELOG.md index f71d3557f9..1c8a06ba27 100644 --- a/plugins/splunk-on-call/CHANGELOG.md +++ b/plugins/splunk-on-call/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-splunk-on-call +## 0.3.34-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 0.3.34-next.1 ### Patch Changes diff --git a/plugins/splunk-on-call/package.json b/plugins/splunk-on-call/package.json index c633319121..e082f45af3 100644 --- a/plugins/splunk-on-call/package.json +++ b/plugins/splunk-on-call/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-splunk-on-call", "description": "A Backstage plugin that integrates towards Splunk On-Call", - "version": "0.3.34-next.1", + "version": "0.3.34-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stack-overflow-backend/CHANGELOG.md b/plugins/stack-overflow-backend/CHANGELOG.md index 71a6531527..807b7ff4f4 100644 --- a/plugins/stack-overflow-backend/CHANGELOG.md +++ b/plugins/stack-overflow-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-stack-overflow-backend +## 0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.20.0-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/config@1.0.3-next.2 + ## 0.1.6-next.1 ### Patch Changes diff --git a/plugins/stack-overflow-backend/package.json b/plugins/stack-overflow-backend/package.json index 551f1694e1..03e45ffa20 100644 --- a/plugins/stack-overflow-backend/package.json +++ b/plugins/stack-overflow-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-stack-overflow-backend", - "version": "0.1.6-next.1", + "version": "0.1.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stack-overflow/CHANGELOG.md b/plugins/stack-overflow/CHANGELOG.md index d12473302e..52e0025211 100644 --- a/plugins/stack-overflow/CHANGELOG.md +++ b/plugins/stack-overflow/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-stack-overflow +## 0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-home@0.4.26-next.2 + ## 0.1.6-next.1 ### Patch Changes diff --git a/plugins/stack-overflow/package.json b/plugins/stack-overflow/package.json index ff748f4384..d423b847da 100644 --- a/plugins/stack-overflow/package.json +++ b/plugins/stack-overflow/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-stack-overflow", - "version": "0.1.6-next.1", + "version": "0.1.6-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md index 31039fbee6..bde496d73f 100644 --- a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md +++ b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-tech-insights-backend-module-jsonfc +## 0.1.21-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-tech-insights-node@0.3.5-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/plugin-tech-insights-common@0.2.7-next.2 + ## 0.1.21-next.1 ### Patch Changes diff --git a/plugins/tech-insights-backend-module-jsonfc/package.json b/plugins/tech-insights-backend-module-jsonfc/package.json index 5e4761bc11..cd64ea0742 100644 --- a/plugins/tech-insights-backend-module-jsonfc/package.json +++ b/plugins/tech-insights-backend-module-jsonfc/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-backend-module-jsonfc", - "version": "0.1.21-next.1", + "version": "0.1.21-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-backend/CHANGELOG.md b/plugins/tech-insights-backend/CHANGELOG.md index 2940da433a..785f53e06f 100644 --- a/plugins/tech-insights-backend/CHANGELOG.md +++ b/plugins/tech-insights-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-tech-insights-backend +## 0.5.3-next.2 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-tech-insights-node@0.3.5-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/plugin-tech-insights-common@0.2.7-next.2 + ## 0.5.3-next.1 ### Patch Changes diff --git a/plugins/tech-insights-backend/package.json b/plugins/tech-insights-backend/package.json index f28dbf4329..16567f4c35 100644 --- a/plugins/tech-insights-backend/package.json +++ b/plugins/tech-insights-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-backend", - "version": "0.5.3-next.1", + "version": "0.5.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-common/CHANGELOG.md b/plugins/tech-insights-common/CHANGELOG.md index 790b4a12ef..490f5cb941 100644 --- a/plugins/tech-insights-common/CHANGELOG.md +++ b/plugins/tech-insights-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-tech-insights-common +## 0.2.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.0.0 + ## 0.2.7-next.1 ### Patch Changes diff --git a/plugins/tech-insights-common/package.json b/plugins/tech-insights-common/package.json index a47a5d1c8d..848454a823 100644 --- a/plugins/tech-insights-common/package.json +++ b/plugins/tech-insights-common/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-common", - "version": "0.2.7-next.1", + "version": "0.2.7-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-node/CHANGELOG.md b/plugins/tech-insights-node/CHANGELOG.md index e8419a8d3f..62916ad560 100644 --- a/plugins/tech-insights-node/CHANGELOG.md +++ b/plugins/tech-insights-node/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-tech-insights-node +## 0.3.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/types@1.0.0 + - @backstage/plugin-tech-insights-common@0.2.7-next.2 + ## 0.3.5-next.1 ### Patch Changes diff --git a/plugins/tech-insights-node/package.json b/plugins/tech-insights-node/package.json index 22802bccc9..45ca5f2739 100644 --- a/plugins/tech-insights-node/package.json +++ b/plugins/tech-insights-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-node", - "version": "0.3.5-next.1", + "version": "0.3.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights/CHANGELOG.md b/plugins/tech-insights/CHANGELOG.md index f605295d31..99f7551e53 100644 --- a/plugins/tech-insights/CHANGELOG.md +++ b/plugins/tech-insights/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-tech-insights +## 0.3.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + - @backstage/plugin-tech-insights-common@0.2.7-next.2 + ## 0.3.1-next.1 ### Patch Changes diff --git a/plugins/tech-insights/package.json b/plugins/tech-insights/package.json index 8d9b225b29..f4ccbc41e0 100644 --- a/plugins/tech-insights/package.json +++ b/plugins/tech-insights/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights", - "version": "0.3.1-next.1", + "version": "0.3.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-radar/CHANGELOG.md b/plugins/tech-radar/CHANGELOG.md index 24ff4c2f4f..53b30f3a9e 100644 --- a/plugins/tech-radar/CHANGELOG.md +++ b/plugins/tech-radar/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-tech-radar +## 0.5.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/theme@0.2.16 + ## 0.5.17-next.1 ### Patch Changes diff --git a/plugins/tech-radar/package.json b/plugins/tech-radar/package.json index 5dafe2de9b..43c02f838b 100644 --- a/plugins/tech-radar/package.json +++ b/plugins/tech-radar/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-tech-radar", "description": "A Backstage plugin that lets you display a Tech Radar for your organization", - "version": "0.5.17-next.1", + "version": "0.5.17-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-addons-test-utils/CHANGELOG.md b/plugins/techdocs-addons-test-utils/CHANGELOG.md index 5f9f033435..406f837998 100644 --- a/plugins/techdocs-addons-test-utils/CHANGELOG.md +++ b/plugins/techdocs-addons-test-utils/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-techdocs-addons-test-utils +## 1.0.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.6.0-next.2 + - @backstage/test-utils@1.2.1-next.2 + - @backstage/core-app-api@1.1.1-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/integration-react@1.1.5-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-search-react@1.2.0-next.2 + - @backstage/plugin-techdocs@1.3.3-next.2 + - @backstage/plugin-techdocs-react@1.0.5-next.2 + ## 1.0.5-next.1 ### Patch Changes diff --git a/plugins/techdocs-addons-test-utils/package.json b/plugins/techdocs-addons-test-utils/package.json index bdd971912f..3e976d1e06 100644 --- a/plugins/techdocs-addons-test-utils/package.json +++ b/plugins/techdocs-addons-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-addons-test-utils", - "version": "1.0.5-next.1", + "version": "1.0.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-backend/CHANGELOG.md b/plugins/techdocs-backend/CHANGELOG.md index d2000fba1d..ccd4c4b67f 100644 --- a/plugins/techdocs-backend/CHANGELOG.md +++ b/plugins/techdocs-backend/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-techdocs-backend +## 1.4.0-next.2 + +### Minor Changes + +- 7ced1b4076: Add optional `catalogClient` argument to `createRoute` parameters + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.7-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-permission-common@0.7.0-next.2 + - @backstage/plugin-techdocs-node@1.4.1-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + ## 1.3.1-next.1 ### Patch Changes diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index 2b85508c30..ca1c5b7578 100644 --- a/plugins/techdocs-backend/package.json +++ b/plugins/techdocs-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-backend", "description": "The Backstage backend plugin that renders technical documentation for your components", - "version": "1.3.1-next.1", + "version": "1.4.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-module-addons-contrib/CHANGELOG.md b/plugins/techdocs-module-addons-contrib/CHANGELOG.md index d220bc3815..548f30d6f1 100644 --- a/plugins/techdocs-module-addons-contrib/CHANGELOG.md +++ b/plugins/techdocs-module-addons-contrib/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-techdocs-module-addons-contrib +## 1.0.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/integration-react@1.1.5-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-techdocs-react@1.0.5-next.2 + ## 1.0.5-next.1 ### Patch Changes diff --git a/plugins/techdocs-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json index 1e1fd0eede..5fde16fa33 100644 --- a/plugins/techdocs-module-addons-contrib/package.json +++ b/plugins/techdocs-module-addons-contrib/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-module-addons-contrib", "description": "Plugin module for contributed TechDocs Addons", - "version": "1.0.5-next.1", + "version": "1.0.5-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-node/CHANGELOG.md b/plugins/techdocs-node/CHANGELOG.md index 1503a665d6..d1f1ea55ce 100644 --- a/plugins/techdocs-node/CHANGELOG.md +++ b/plugins/techdocs-node/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-techdocs-node +## 1.4.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + ## 1.4.1-next.1 ### Patch Changes diff --git a/plugins/techdocs-node/package.json b/plugins/techdocs-node/package.json index ab7267e10b..6b4e822f2f 100644 --- a/plugins/techdocs-node/package.json +++ b/plugins/techdocs-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-node", "description": "Common node.js functionalities for TechDocs, to be shared between techdocs-backend plugin and techdocs-cli", - "version": "1.4.1-next.1", + "version": "1.4.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/plugins/techdocs-react/CHANGELOG.md b/plugins/techdocs-react/CHANGELOG.md index 869edb0a48..fa791fb4ca 100644 --- a/plugins/techdocs-react/CHANGELOG.md +++ b/plugins/techdocs-react/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-techdocs-react +## 1.0.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/version-bridge@1.0.1 + ## 1.0.5-next.1 ### Patch Changes diff --git a/plugins/techdocs-react/package.json b/plugins/techdocs-react/package.json index 38a2489782..d9d8b76382 100644 --- a/plugins/techdocs-react/package.json +++ b/plugins/techdocs-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-react", "description": "Shared frontend utilities for TechDocs and Addons", - "version": "1.0.5-next.1", + "version": "1.0.5-next.2", "publishConfig": { "access": "public", "alphaTypes": "dist/index.alpha.d.ts", diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md index 0d8fdd369d..1c331fd7ea 100644 --- a/plugins/techdocs/CHANGELOG.md +++ b/plugins/techdocs/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-techdocs +## 1.3.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/plugin-search-common@1.1.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + - @backstage/integration-react@1.1.5-next.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-search-react@1.2.0-next.2 + - @backstage/plugin-techdocs-react@1.0.5-next.2 + ## 1.3.3-next.1 ### Patch Changes diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index c915ac515f..f7dbbc06ff 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs", "description": "The Backstage plugin that renders technical documentation for your components", - "version": "1.3.3-next.1", + "version": "1.3.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/todo-backend/CHANGELOG.md b/plugins/todo-backend/CHANGELOG.md index 753ab2da44..3ce6301333 100644 --- a/plugins/todo-backend/CHANGELOG.md +++ b/plugins/todo-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-todo-backend +## 0.1.34-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/catalog-client@1.1.1-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/integration@1.3.2-next.2 + ## 0.1.34-next.1 ### Patch Changes diff --git a/plugins/todo-backend/package.json b/plugins/todo-backend/package.json index 94f9628c5b..3bdebf6052 100644 --- a/plugins/todo-backend/package.json +++ b/plugins/todo-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-todo-backend", "description": "A Backstage backend plugin that lets you browse TODO comments in your source code", - "version": "0.1.34-next.1", + "version": "0.1.34-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/todo/CHANGELOG.md b/plugins/todo/CHANGELOG.md index 26080264ec..b8ede33b81 100644 --- a/plugins/todo/CHANGELOG.md +++ b/plugins/todo/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-todo +## 0.2.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + ## 0.2.12-next.1 ### Patch Changes diff --git a/plugins/todo/package.json b/plugins/todo/package.json index d360992e04..7b4fbe7fc6 100644 --- a/plugins/todo/package.json +++ b/plugins/todo/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-todo", "description": "A Backstage plugin that lets you browse TODO comments in your source code", - "version": "0.2.12-next.1", + "version": "0.2.12-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/user-settings-backend/CHANGELOG.md b/plugins/user-settings-backend/CHANGELOG.md index 09c44c7878..24c8d7592c 100644 --- a/plugins/user-settings-backend/CHANGELOG.md +++ b/plugins/user-settings-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-user-settings-backend +## 0.1.1-next.2 + +### Patch Changes + +- f3463b176b: Use `Response.status` instead of `.send(number)` +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2-next.2 + - @backstage/plugin-auth-node@0.2.6-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/types@1.0.0 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/user-settings-backend/package.json b/plugins/user-settings-backend/package.json index 377b8bfe4f..8d8c5cf36f 100644 --- a/plugins/user-settings-backend/package.json +++ b/plugins/user-settings-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-user-settings-backend", "description": "The Backstage backend plugin to manage user settings", - "version": "0.1.1-next.1", + "version": "0.1.1-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/user-settings/CHANGELOG.md b/plugins/user-settings/CHANGELOG.md index 357f865b9d..f34a5ddc72 100644 --- a/plugins/user-settings/CHANGELOG.md +++ b/plugins/user-settings/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-user-settings +## 0.5.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.1.1-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + ## 0.5.0-next.1 ### Patch Changes diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index 439c05cd6f..4ef48fad79 100644 --- a/plugins/user-settings/package.json +++ b/plugins/user-settings/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-user-settings", "description": "A Backstage plugin that provides a settings page", - "version": "0.5.0-next.1", + "version": "0.5.0-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/vault-backend/CHANGELOG.md b/plugins/vault-backend/CHANGELOG.md index ef09111b07..925c755725 100644 --- a/plugins/vault-backend/CHANGELOG.md +++ b/plugins/vault-backend/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-vault-backend +## 0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.3.6-next.2 + - @backstage/backend-common@0.15.2-next.2 + - @backstage/backend-test-utils@0.1.29-next.2 + - @backstage/config@1.0.3-next.2 + - @backstage/errors@1.1.2-next.2 + ## 0.2.3-next.1 ### Patch Changes diff --git a/plugins/vault-backend/package.json b/plugins/vault-backend/package.json index ff4d173cef..2e12305863 100644 --- a/plugins/vault-backend/package.json +++ b/plugins/vault-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault-backend", "description": "A Backstage backend plugin that integrates towards Vault", - "version": "0.2.3-next.1", + "version": "0.2.3-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/vault/CHANGELOG.md b/plugins/vault/CHANGELOG.md index 2bdb197722..5897543d2d 100644 --- a/plugins/vault/CHANGELOG.md +++ b/plugins/vault/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-vault +## 0.1.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0-next.2 + - @backstage/catalog-model@1.1.2-next.2 + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + ## 0.1.4-next.1 ### Patch Changes diff --git a/plugins/vault/package.json b/plugins/vault/package.json index 17ee68761d..c9c46b52f4 100644 --- a/plugins/vault/package.json +++ b/plugins/vault/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault", "description": "A Backstage plugin that integrates towards Vault", - "version": "0.1.4-next.1", + "version": "0.1.4-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/xcmetrics/CHANGELOG.md b/plugins/xcmetrics/CHANGELOG.md index f231d3d77e..c10818bf77 100644 --- a/plugins/xcmetrics/CHANGELOG.md +++ b/plugins/xcmetrics/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-xcmetrics +## 0.2.30-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2-next.2 + - @backstage/core-plugin-api@1.0.7-next.2 + - @backstage/errors@1.1.2-next.2 + - @backstage/theme@0.2.16 + ## 0.2.30-next.1 ### Patch Changes diff --git a/plugins/xcmetrics/package.json b/plugins/xcmetrics/package.json index b1e2fe1475..cc88021ccb 100644 --- a/plugins/xcmetrics/package.json +++ b/plugins/xcmetrics/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-xcmetrics", "description": "A Backstage plugin that shows XCode build metrics for your components", - "version": "0.2.30-next.1", + "version": "0.2.30-next.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", From 818bcdee97653868933725aa1e265499f74a92a1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 11 Oct 2022 16:40:46 +0000 Subject: [PATCH 180/278] Update dependency @pmmmwh/react-refresh-webpack-plugin to v0.5.8 Signed-off-by: Renovate Bot --- yarn.lock | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7c369f3d91..ce6f91df32 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11813,12 +11813,12 @@ __metadata: linkType: hard "@pmmmwh/react-refresh-webpack-plugin@npm:^0.5.7": - version: 0.5.7 - resolution: "@pmmmwh/react-refresh-webpack-plugin@npm:0.5.7" + version: 0.5.8 + resolution: "@pmmmwh/react-refresh-webpack-plugin@npm:0.5.8" dependencies: ansi-html-community: ^0.0.8 common-path-prefix: ^3.0.0 - core-js-pure: ^3.8.1 + core-js-pure: ^3.23.3 error-stack-parser: ^2.0.6 find-up: ^5.0.0 html-entities: ^2.1.0 @@ -11829,7 +11829,7 @@ __metadata: "@types/webpack": 4.x || 5.x react-refresh: ">=0.10.0 <1.0.0" sockjs-client: ^1.4.0 - type-fest: ">=0.17.0 <3.0.0" + type-fest: ">=0.17.0 <4.0.0" webpack: ">=4.43.0 <6.0.0" webpack-dev-server: 3.x || 4.x webpack-hot-middleware: 2.x @@ -11847,7 +11847,7 @@ __metadata: optional: true webpack-plugin-serve: optional: true - checksum: 3490649181878cc8808fb91f3870ef095e5a1fb9647b3ac83740df07379c9d1cf540f24bf2b09d5f26a3a8c805b2c6b9c5be7192bdb9317d0ffffa67426e9f66 + checksum: 48d8b2813dfba7d482e58a2b0161b79e3a5d608603f1a3c34d709ecc2e6e08f8b14f79934c57849d06f153eb327f18e3d8e1539f978e40ca91539c342f27b8ae languageName: node linkType: hard @@ -18850,13 +18850,20 @@ __metadata: languageName: node linkType: hard -"core-js-pure@npm:^3.20.2, core-js-pure@npm:^3.8.1": +"core-js-pure@npm:^3.20.2": version: 3.21.1 resolution: "core-js-pure@npm:3.21.1" checksum: 00a5dff599b7fb0b30746a638b9d0edbdc0df24ed1580ca56be595fbe3c78c375d37fc4e1bff23627109229702c9ee8ea2587a66b8280eb33b85160aa4e401e9 languageName: node linkType: hard +"core-js-pure@npm:^3.23.3": + version: 3.25.5 + resolution: "core-js-pure@npm:3.25.5" + checksum: e48799a8ab28f00ef3db18377142ff2c578574ab2b18ebddde6cbf12823e0181a57c80e3caa6046ce2a2e439d603a252be767583ddc54248e3d1060bc5012127 + languageName: node + linkType: hard + "core-js-pure@npm:^3.6.5": version: 3.25.3 resolution: "core-js-pure@npm:3.25.3" From 6e36dacfada6af00c9c30e3a53a0f6bfe8b706d7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 11 Oct 2022 18:52:21 +0000 Subject: [PATCH 181/278] Update dependency @rjsf/utils to v5.0.0-beta.11 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7c369f3d91..3955966e55 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12007,8 +12007,8 @@ __metadata: linkType: hard "@rjsf/utils@npm:^5.0.0-beta.10": - version: 5.0.0-beta.10 - resolution: "@rjsf/utils@npm:5.0.0-beta.10" + version: 5.0.0-beta.11 + resolution: "@rjsf/utils@npm:5.0.0-beta.11" dependencies: json-schema-merge-allof: ^0.8.1 jsonpointer: ^5.0.1 @@ -12017,7 +12017,7 @@ __metadata: react-is: ^18.2.0 peerDependencies: react: ^16.14.0 || >=17 - checksum: df5dda5a17ce11df2342ceff8d6ad2b3dad3a1f98d44aa7da378e6cd48387e4af023964b6143836e1ad16ff68f6592c0dcf24ff9f3fc859480b42b2c879406bc + checksum: 4e77616023b5cf193e1631a4d5fb8d54122d9f48e30ce2fcb1b22f057e2dcf37aae174f25f1afddb664b0114e461f9d738fa282995b07e9e3eb30f7469d77145 languageName: node linkType: hard From 51046b58b039720168eaa153784ac3d36ff978cf Mon Sep 17 00:00:00 2001 From: Patrick Jungermann Date: Fri, 7 Oct 2022 14:22:02 +0200 Subject: [PATCH 182/278] feat(catalog/github): use schedule from config at backend module Also, it removed `GithubEntityProviderCatalogModuleOptions` in favor of config-only for the backend module setup like at other similar modules. Signed-off-by: Patrick Jungermann --- .changeset/old-frogs-invent.md | 9 ++ .../api-report.md | 8 +- .../src/index.ts | 9 +- .../GithubEntityProviderCatalogModule.test.ts | 84 +++++++++++++++++++ .../GithubEntityProviderCatalogModule.ts} | 26 ++---- 5 files changed, 103 insertions(+), 33 deletions(-) create mode 100644 .changeset/old-frogs-invent.md create mode 100644 plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.test.ts rename plugins/catalog-backend-module-github/src/{module.ts => service/GithubEntityProviderCatalogModule.ts} (67%) diff --git a/.changeset/old-frogs-invent.md b/.changeset/old-frogs-invent.md new file mode 100644 index 0000000000..b1e77fa369 --- /dev/null +++ b/.changeset/old-frogs-invent.md @@ -0,0 +1,9 @@ +--- +'@backstage/plugin-catalog-backend-module-github': patch +--- + +Use schedule from config at backend module. + +Also, it removes `GithubEntityProviderCatalogModuleOptions` +in favor of config-only for the backend module setup +like at other similar modules. diff --git a/plugins/catalog-backend-module-github/api-report.md b/plugins/catalog-backend-module-github/api-report.md index 86fc94a532..4ab534e6d3 100644 --- a/plugins/catalog-backend-module-github/api-report.md +++ b/plugins/catalog-backend-module-github/api-report.md @@ -20,7 +20,6 @@ import { PluginTaskScheduler } from '@backstage/backend-tasks'; import { ScmIntegrationRegistry } from '@backstage/integration'; import { ScmLocationAnalyzer } from '@backstage/plugin-catalog-backend'; import { TaskRunner } from '@backstage/backend-tasks'; -import { TaskScheduleDefinition } from '@backstage/backend-tasks'; // @public export class GithubDiscoveryProcessor implements CatalogProcessor { @@ -68,14 +67,9 @@ export class GitHubEntityProvider implements EntityProvider { // @alpha export const githubEntityProviderCatalogModule: ( - options?: GithubEntityProviderCatalogModuleOptions | undefined, + options?: undefined, ) => BackendFeature; -// @alpha -export type GithubEntityProviderCatalogModuleOptions = { - schedule?: TaskScheduleDefinition; -}; - // @public (undocumented) export class GitHubLocationAnalyzer implements ScmLocationAnalyzer { constructor(options: GitHubLocationAnalyzerOptions); diff --git a/plugins/catalog-backend-module-github/src/index.ts b/plugins/catalog-backend-module-github/src/index.ts index ca7c72f11b..3d7a7a2b4e 100644 --- a/plugins/catalog-backend-module-github/src/index.ts +++ b/plugins/catalog-backend-module-github/src/index.ts @@ -20,14 +20,13 @@ * @packageDocumentation */ +export { GitHubLocationAnalyzer } from './analyzers/GitHubLocationAnalyzer'; +export type { GitHubLocationAnalyzerOptions } from './analyzers/GitHubLocationAnalyzer'; +export type { GithubMultiOrgConfig } from './lib'; export { GithubDiscoveryProcessor } from './processors/GithubDiscoveryProcessor'; export { GithubMultiOrgReaderProcessor } from './processors/GithubMultiOrgReaderProcessor'; export { GithubOrgReaderProcessor } from './processors/GithubOrgReaderProcessor'; export { GitHubEntityProvider } from './providers/GitHubEntityProvider'; export { GitHubOrgEntityProvider } from './providers/GitHubOrgEntityProvider'; export type { GitHubOrgEntityProviderOptions } from './providers/GitHubOrgEntityProvider'; -export type { GithubMultiOrgConfig } from './lib'; -export { githubEntityProviderCatalogModule } from './module'; -export type { GithubEntityProviderCatalogModuleOptions } from './module'; -export { GitHubLocationAnalyzer } from './analyzers/GitHubLocationAnalyzer'; -export type { GitHubLocationAnalyzerOptions } from './analyzers/GitHubLocationAnalyzer'; +export { githubEntityProviderCatalogModule } from './service/GithubEntityProviderCatalogModule'; diff --git a/plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.test.ts new file mode 100644 index 0000000000..d65eb98661 --- /dev/null +++ b/plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.test.ts @@ -0,0 +1,84 @@ +/* + * 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 { getVoidLogger } from '@backstage/backend-common'; +import { + configServiceRef, + loggerServiceRef, + schedulerServiceRef, +} from '@backstage/backend-plugin-api'; +import { + PluginTaskScheduler, + TaskScheduleDefinition, +} from '@backstage/backend-tasks'; +import { startTestBackend } from '@backstage/backend-test-utils'; +import { ConfigReader } from '@backstage/config'; +import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node'; +import { Duration } from 'luxon'; +import { githubEntityProviderCatalogModule } from './GithubEntityProviderCatalogModule'; +import { GitHubEntityProvider } from '../providers/GitHubEntityProvider'; + +describe('githubEntityProviderCatalogModule', () => { + it('should register provider at the catalog extension point', async () => { + let addedProviders: Array | undefined; + let usedSchedule: TaskScheduleDefinition | undefined; + + const extensionPoint = { + addEntityProvider: (providers: any) => { + addedProviders = providers; + }, + }; + const runner = jest.fn(); + const scheduler = { + createScheduledTaskRunner: (schedule: TaskScheduleDefinition) => { + usedSchedule = schedule; + return runner; + }, + } as unknown as PluginTaskScheduler; + + const config = new ConfigReader({ + catalog: { + providers: { + github: { + organization: 'module-test', + schedule: { + frequency: 'P1M', + timeout: 'PT3M', + }, + }, + }, + }, + }); + + await startTestBackend({ + extensionPoints: [[catalogProcessingExtensionPoint, extensionPoint]], + services: [ + [configServiceRef, config], + [loggerServiceRef, getVoidLogger()], + [schedulerServiceRef, scheduler], + ], + features: [githubEntityProviderCatalogModule()], + }); + + expect(usedSchedule?.frequency).toEqual(Duration.fromISO('P1M')); + expect(usedSchedule?.timeout).toEqual(Duration.fromISO('PT3M')); + expect(addedProviders?.length).toEqual(1); + expect(addedProviders?.pop()?.getProviderName()).toEqual( + 'github-provider:default', + ); + expect(runner).not.toHaveBeenCalled(); + }); +}); diff --git a/plugins/catalog-backend-module-github/src/module.ts b/plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.ts similarity index 67% rename from plugins/catalog-backend-module-github/src/module.ts rename to plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.ts index 0391855618..c63e8ba7da 100644 --- a/plugins/catalog-backend-module-github/src/module.ts +++ b/plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.ts @@ -21,18 +21,8 @@ import { loggerServiceRef, schedulerServiceRef, } from '@backstage/backend-plugin-api'; -import { TaskScheduleDefinition } from '@backstage/backend-tasks'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node'; -import { GitHubEntityProvider } from './providers/GitHubEntityProvider'; - -/** - * Options for {@link githubEntityProviderCatalogModule}. - * - * @alpha - */ -export type GithubEntityProviderCatalogModuleOptions = { - schedule?: TaskScheduleDefinition; -}; +import { GitHubEntityProvider } from '../providers/GitHubEntityProvider'; /** * Registers the GitHubEntityProvider with the catalog processing extension point. @@ -42,25 +32,19 @@ export type GithubEntityProviderCatalogModuleOptions = { export const githubEntityProviderCatalogModule = createBackendModule({ pluginId: 'catalog', moduleId: 'githubEntityProvider', - register(env, options?: GithubEntityProviderCatalogModuleOptions) { + register(env) { env.registerInit({ deps: { - config: configServiceRef, catalog: catalogProcessingExtensionPoint, + config: configServiceRef, logger: loggerServiceRef, scheduler: schedulerServiceRef, }, - async init({ config, catalog, logger, scheduler }) { - const scheduleDef = options?.schedule ?? { - frequency: { seconds: 600 }, - timeout: { seconds: 900 }, - initialDelay: { seconds: 3 }, - }; - + async init({ catalog, config, logger, scheduler }) { catalog.addEntityProvider( GitHubEntityProvider.fromConfig(config, { logger: loggerToWinstonLogger(logger), - schedule: scheduler.createScheduledTaskRunner(scheduleDef), + scheduler, }), ); }, From 891a7be763033f4abb5eac8927e2bc6e49f8d180 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 11 Oct 2022 21:56:18 +0000 Subject: [PATCH 183/278] Update dependency @rjsf/validator-ajv8 to v5.0.0-beta.11 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7c369f3d91..ee24f2759a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12022,8 +12022,8 @@ __metadata: linkType: hard "@rjsf/validator-ajv8@npm:^5.0.0-beta.10": - version: 5.0.0-beta.10 - resolution: "@rjsf/validator-ajv8@npm:5.0.0-beta.10" + version: 5.0.0-beta.11 + resolution: "@rjsf/validator-ajv8@npm:5.0.0-beta.11" dependencies: ajv: ^8.11.0 ajv-formats: ^2.1.1 @@ -12031,7 +12031,7 @@ __metadata: lodash-es: ^4.17.15 peerDependencies: "@rjsf/utils": ^5.0.0-beta.1 - checksum: faa359c9ec58cf0fff35932d4e08a5c42f8449120cae606ebff108814f974e8db8a62df85e90e1fec7b0345388df09b83359ae1cc09103d41e73f298472b846a + checksum: e9aec2e77c69ee55fd35cc82b2c3fe0c78cf021145500bc86f7e0a5bae794163dfae198df0543ce635e22cd4235880dcbb7c73487ae0baae6b03e1bdea2955c4 languageName: node linkType: hard From 1df4478922e0b6824ee949f11bcec3283ae15aa0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 11 Oct 2022 22:06:00 +0000 Subject: [PATCH 184/278] Update dependency @swc/helpers to v0.4.12 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7c369f3d91..b611afd4be 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12741,11 +12741,11 @@ __metadata: linkType: hard "@swc/helpers@npm:^0.4.7": - version: 0.4.11 - resolution: "@swc/helpers@npm:0.4.11" + version: 0.4.12 + resolution: "@swc/helpers@npm:0.4.12" dependencies: tslib: ^2.4.0 - checksum: 736857d524b41a8a4db81094e9b027f554004e0fa3e86325d85bdb38f7e6459ce022db079edb6c61ba0f46fe8583b3e663e95f7acbd13e51b8da6c34e45bba2e + checksum: 3f9112f37d87815b6d4270137fc78d22bb98c75138e9b0eac7cac203ec2cf2bffbf13b20a713067c292affd5e9e70a724eb245b8daf0963e7fe528b901771c28 languageName: node linkType: hard From 068ba1a086af2d8e8d8750718adaecdc1865df8c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Oct 2022 01:18:45 +0000 Subject: [PATCH 185/278] Update dependency @uiw/react-codemirror to v4.12.4 Signed-off-by: Renovate Bot --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index 508ab48082..443464a659 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15172,9 +15172,9 @@ __metadata: languageName: node linkType: hard -"@uiw/codemirror-extensions-basic-setup@npm:4.12.3": - version: 4.12.3 - resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.12.3" +"@uiw/codemirror-extensions-basic-setup@npm:4.12.4": + version: 4.12.4 + resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.12.4" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/commands": ^6.0.0 @@ -15191,19 +15191,19 @@ __metadata: "@codemirror/search": ">=6.0.0" "@codemirror/state": ">=6.0.0" "@codemirror/view": ">=6.0.0" - checksum: 14c5c6694b2f5ce34bba2ed3fa7017a268c36f3ba234711580d31243603a14adc2b31ebec7d665cd6687917a8ac617d6ac453861d32bf277f43b65946ac1c656 + checksum: 27c65e051383cedf0ea63b3c923caf10aa45dba7cec01b3a767d81d1d0114ba221665bf0d8166f8de67946806fde7348768cf4a7683a70907e9f2eef9c99dbea languageName: node linkType: hard "@uiw/react-codemirror@npm:^4.9.3": - version: 4.12.3 - resolution: "@uiw/react-codemirror@npm:4.12.3" + version: 4.12.4 + resolution: "@uiw/react-codemirror@npm:4.12.4" dependencies: "@babel/runtime": ^7.18.6 "@codemirror/commands": ^6.1.0 "@codemirror/state": ^6.1.1 "@codemirror/theme-one-dark": ^6.0.0 - "@uiw/codemirror-extensions-basic-setup": 4.12.3 + "@uiw/codemirror-extensions-basic-setup": 4.12.4 codemirror: ^6.0.0 peerDependencies: "@babel/runtime": ">=7.11.0" @@ -15213,7 +15213,7 @@ __metadata: codemirror: ">=6.0.0" react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 504003e6162dbe672072ace980117d1eeb9264282d6ad314de0398e0d29925133bc8d8c484c3aadb91b6ebedb8ebb259307b838cc31d39ab4792af5ab061949c + checksum: e7228beb95e918929e99e819c4f3b3920a16c5aca2477775c41bd16166af5bb7b5cefe240bd75b80fd9f61cde82086f93f8cd2dc1e2a4ecf02ff6d756cfd6f42 languageName: node linkType: hard From 21ac161d3b5030657c4fbcfd489d96d8dc107c9d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Oct 2022 03:01:25 +0000 Subject: [PATCH 186/278] Update dependency commander to v9.4.1 Signed-off-by: Renovate Bot --- yarn.lock | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index ff6a24d46f..2594dc68fb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18438,7 +18438,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:*, commander@npm:^9.1.0, commander@npm:^9.3.0": +"commander@npm:*, commander@npm:^9.3.0": version: 9.4.0 resolution: "commander@npm:9.4.0" checksum: a322de584a6ccd1ea83c24f6a660e52d16ffbe2613fcfbb8d2cc68bc9dec637492456d754fe8bb5b039ad843ed8e04fb0b107e581a75f62cde9e1a0ab1546e09 @@ -18494,6 +18494,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^9.1.0": + version: 9.4.1 + resolution: "commander@npm:9.4.1" + checksum: bfb18e325a5bdf772763c2213d5c7d9e77144d944124e988bcd8e5e65fb6d45d5d4e86b09155d0f2556c9a59c31e428720e57968bcd050b2306e910a0bf3cf13 + languageName: node + linkType: hard + "common-ancestor-path@npm:^1.0.1": version: 1.0.1 resolution: "common-ancestor-path@npm:1.0.1" From f3a3fefb962824fee31f8b810594265adb78ebf4 Mon Sep 17 00:00:00 2001 From: "huansong.tang" Date: Fri, 7 Oct 2022 15:52:24 +0800 Subject: [PATCH 187/278] Fix permissions API to return 401 instead of 500 when IdentityApi.getIdentity throws an error Signed-off-by: huansong.tang --- .changeset/early-hornets-pay.md | 5 +++++ plugins/auth-node/src/DefaultIdentityClient.ts | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) create mode 100644 .changeset/early-hornets-pay.md diff --git a/.changeset/early-hornets-pay.md b/.changeset/early-hornets-pay.md new file mode 100644 index 0000000000..25946a4361 --- /dev/null +++ b/.changeset/early-hornets-pay.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-node': minor +--- + +Ensure `getIdentity` throws an `AuthenticationError` instead of a `NotAllowed` error when authentication fails diff --git a/plugins/auth-node/src/DefaultIdentityClient.ts b/plugins/auth-node/src/DefaultIdentityClient.ts index a7946c77ff..499fc62929 100644 --- a/plugins/auth-node/src/DefaultIdentityClient.ts +++ b/plugins/auth-node/src/DefaultIdentityClient.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { PluginEndpointDiscovery } from '@backstage/backend-common'; -import { AuthenticationError, NotAllowedError } from '@backstage/errors'; +import { AuthenticationError } from '@backstage/errors'; import { createRemoteJWKSet, decodeJwt, @@ -86,7 +86,7 @@ export class DefaultIdentityClient implements IdentityApi { getBearerTokenFromAuthorizationHeader(request.headers.authorization), ); } catch (e) { - throw new NotAllowedError(e.message); + throw new AuthenticationError(e.message); } } From 9335ad115e8633061dd1aa01240b58b4dbc55c79 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Wed, 12 Oct 2022 08:15:43 +0100 Subject: [PATCH 188/278] Exported types for the permission router metadata endpoint Signed-off-by: Harry Hogg --- .changeset/hot-bugs-roll.md | 5 +++ plugins/permission-node/api-report.md | 15 +++++++ .../createPermissionIntegrationRouter.ts | 45 ++++++++++++++++--- 3 files changed, 58 insertions(+), 7 deletions(-) create mode 100644 .changeset/hot-bugs-roll.md diff --git a/.changeset/hot-bugs-roll.md b/.changeset/hot-bugs-roll.md new file mode 100644 index 0000000000..babc909f45 --- /dev/null +++ b/.changeset/hot-bugs-roll.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-permission-node': patch +--- + +Exported types for the .metadata endpoint of the permission router diff --git a/plugins/permission-node/api-report.md b/plugins/permission-node/api-report.md index 7feb20d7aa..59c85818ba 100644 --- a/plugins/permission-node/api-report.md +++ b/plugins/permission-node/api-report.md @@ -14,6 +14,7 @@ import { DefinitivePolicyDecision } from '@backstage/plugin-permission-common'; import { EvaluatorRequestOptions } from '@backstage/plugin-permission-common'; import express from 'express'; import { IdentifiedPermissionMessage } from '@backstage/plugin-permission-common'; +import { JsonSchema7Type } from 'zod-to-json-schema/src/parseDef'; import { NotCriteria } from '@backstage/plugin-permission-common'; import { Permission } from '@backstage/plugin-permission-common'; import { PermissionCondition } from '@backstage/plugin-permission-common'; @@ -160,6 +161,20 @@ export const makeCreatePermissionRule: < rule: PermissionRule, ) => PermissionRule; +// @public +export type MetaDataResponse = { + permissions?: Permission[]; + rules: MetaDataResponseSerializedRule[]; +}; + +// @public +export type MetaDataResponseSerializedRule = { + name: string; + description: string; + resourceType: string; + paramsSchema?: JsonSchema7Type; +}; + // @public export interface PermissionPolicy { // (undocumented) diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts index 52f34d7e6a..f912a2c4e0 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts @@ -36,6 +36,7 @@ import { isNotCriteria, isOrCriteria, } from './util'; +import { JsonSchema7Type } from 'zod-to-json-schema/src/parseDef'; const permissionCriteriaSchema: z.ZodSchema< PermissionCriteria @@ -102,6 +103,29 @@ export type ApplyConditionsResponse = { items: ApplyConditionsResponseEntry[]; }; +/** + * Serialized permission rules, with the paramsSchema + * converted from a ZodSchema to a JsonSchema. + * + * @public + */ +export type MetaDataResponseSerializedRule = { + name: string; + description: string; + resourceType: string; + paramsSchema?: JsonSchema7Type; +}; + +/** + * Response type for the .metadata endpoint. + * + * @public + */ +export type MetaDataResponse = { + permissions?: Permission[]; + rules: MetaDataResponseSerializedRule[]; +}; + const applyConditions = ( criteria: PermissionCriteria>, resource: TResource | undefined, @@ -191,14 +215,21 @@ export const createPermissionIntegrationRouter = < router.use(express.json()); router.get('/.well-known/backstage/permissions/metadata', (_, res) => { - const serializableRules = rules.map(rule => ({ - name: rule.name, - description: rule.description, - resourceType: rule.resourceType, - paramsSchema: zodToJsonSchema(rule.paramsSchema ?? z.object({})), - })); + const serializedRules: MetaDataResponseSerializedRule[] = rules.map( + rule => ({ + name: rule.name, + description: rule.description, + resourceType: rule.resourceType, + paramsSchema: zodToJsonSchema(rule.paramsSchema ?? z.object({})), + }), + ); - return res.json({ permissions, rules: serializableRules }); + const responseJson: MetaDataResponse = { + permissions, + rules: serializedRules, + }; + + return res.json(responseJson); }); const getRule = createGetRule(rules); From 48d8b3dcd44b0b18ec030188ebaeb9a4e397abb8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Oct 2022 09:05:46 +0000 Subject: [PATCH 189/278] Update dependency eslint-plugin-react to v7.31.10 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index a56fc102ec..c77c9b8500 100644 --- a/yarn.lock +++ b/yarn.lock @@ -21766,8 +21766,8 @@ __metadata: linkType: hard "eslint-plugin-react@npm:^7.28.0": - version: 7.31.8 - resolution: "eslint-plugin-react@npm:7.31.8" + version: 7.31.10 + resolution: "eslint-plugin-react@npm:7.31.10" dependencies: array-includes: ^3.1.5 array.prototype.flatmap: ^1.3.0 @@ -21785,7 +21785,7 @@ __metadata: string.prototype.matchall: ^4.0.7 peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 0683e2a624a4df6f08264a3f6bc614a81e8f961c83173bdf2d8d3523f84ed5d234cddc976dbc6815913e007c5984df742ba61be0c0592b27c3daabe0f68165a3 + checksum: f013669c296483559a760648fa06425f161b1aff93c668f14c4561c933d22a7836b745b88a795c53cab929c71513d5fd1f2ffdddff915709f01b77ac25f5b71b languageName: node linkType: hard From f80444ace591bc4ba249a1c7d8a085a080a6a8d5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Oct 2022 09:29:15 +0000 Subject: [PATCH 190/278] Update dependency core-js to v3.25.5 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7e959f5067..dba7aee112 100644 --- a/yarn.lock +++ b/yarn.lock @@ -18887,9 +18887,9 @@ __metadata: linkType: hard "core-js@npm:^3.6.5": - version: 3.25.3 - resolution: "core-js@npm:3.25.3" - checksum: 26ca0a5e575e6da03dc30099f48bc00db50a1c0a3f81299165f111cb163869ae453de5e345f2cb7bc8be85a9adcee11fca94f0fbdbdf6d483c68e1c55a9efc5a + version: 3.25.5 + resolution: "core-js@npm:3.25.5" + checksum: 208b308c49bc022f90d4349d4c99802a73c9d55053976b3c529f10014c1e37845926defad8c519f2c7f71ea0acf18d2b323ab6aaee34dc85b4c4b3ced0623f3f languageName: node linkType: hard From fb149c087f3e53ed703f55a67312c76d388c3c54 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 12 Oct 2022 10:40:35 +0100 Subject: [PATCH 191/278] changesets: exit prerelease Signed-off-by: Patrik Oldsberg --- .changeset/pre.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/pre.json b/.changeset/pre.json index 33b9221a6a..dafb8797e2 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -1,5 +1,5 @@ { - "mode": "pre", + "mode": "exit", "tag": "next", "initialVersions": { "example-app": "0.2.75", From e71398d6bf3663314bef9130a6bff229540f348d Mon Sep 17 00:00:00 2001 From: marcofaggian Date: Wed, 12 Oct 2022 11:51:03 +0200 Subject: [PATCH 192/278] fix(microsite): moved back to object mutation Signed-off-by: marcofaggian --- microsite/pages/en/plugins.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/microsite/pages/en/plugins.js b/microsite/pages/en/plugins.js index 3e7868cd30..ab83438ee8 100644 --- a/microsite/pages/en/plugins.js +++ b/microsite/pages/en/plugins.js @@ -26,7 +26,9 @@ const pluginMetadata = fs ) .toString(); - return { ...metadata, date: new Date(gitIsoDate) }; + metadata.date = new Date(gitIsoDate) + + return metadata; }) .sort((a, b) => a.title.toLowerCase().localeCompare(b.title.toLowerCase())); const truncate = text => From 13bb508c24b4897ead54e00355503c80ec6ad4e9 Mon Sep 17 00:00:00 2001 From: marcofaggian Date: Wed, 12 Oct 2022 11:59:26 +0200 Subject: [PATCH 193/278] fix(microsite): CWE-78, className Signed-off-by: marcofaggian --- microsite/pages/en/plugins.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/microsite/pages/en/plugins.js b/microsite/pages/en/plugins.js index ab83438ee8..91f4138174 100644 --- a/microsite/pages/en/plugins.js +++ b/microsite/pages/en/plugins.js @@ -21,12 +21,16 @@ const pluginMetadata = fs let metadata = yaml.load(fileContent); const gitIsoDate = require('child_process') - .execSync( - `git log -1 --format="%ai" --reverse ./data/plugins/${file} | cat -`, - ) + .execFileSync('git', [ + 'log', + '-1', + '--format="%ai"', + '--reverse', + `./data/plugins/${file}`, + ]) .toString(); - metadata.date = new Date(gitIsoDate) + metadata.date = new Date(gitIsoDate); return metadata; }) @@ -120,7 +124,7 @@ const Plugins = () => (
{Math.trunc((Date.now() - date) / (1000 * 60 * 60 * 24)) < newForDays && ( -
+
NEW
)} From 5c895c7c0c156c4bd43aa5f5a158aba5c990742d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Oct 2022 10:11:48 +0000 Subject: [PATCH 194/278] Update dependency marked to v4.1.1 Signed-off-by: Renovate Bot --- yarn.lock | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index 9be7d5718e..ff45cdd46d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -28795,7 +28795,7 @@ __metadata: languageName: node linkType: hard -"marked@npm:^4.0.10, marked@npm:^4.0.14": +"marked@npm:^4.0.10": version: 4.1.0 resolution: "marked@npm:4.1.0" bin: @@ -28804,6 +28804,15 @@ __metadata: languageName: node linkType: hard +"marked@npm:^4.0.14": + version: 4.1.1 + resolution: "marked@npm:4.1.1" + bin: + marked: bin/marked.js + checksum: 717e3357952ee53de831bf0eb110ed075bebca2376c58bcdf7ee523ef540d45308ad6d51b2c933da0968832ea4386f31c142ca65443e77c098e84f6cce73e418 + languageName: node + linkType: hard + "matcher@npm:^3.0.0": version: 3.0.0 resolution: "matcher@npm:3.0.0" From 5da539a0ee823dd20362babd301986e2f3c043d1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Oct 2022 10:12:46 +0000 Subject: [PATCH 195/278] Update dependency minimist to v1.2.7 Signed-off-by: Renovate Bot --- yarn.lock | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index 9be7d5718e..42f2b540ae 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29713,13 +29713,20 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5, minimist@npm:^1.2.6": +"minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.6": version: 1.2.6 resolution: "minimist@npm:1.2.6" checksum: d15428cd1e11eb14e1233bcfb88ae07ed7a147de251441d61158619dfb32c4d7e9061d09cab4825fdee18ecd6fce323228c8c47b5ba7cd20af378ca4048fb3fb languageName: node linkType: hard +"minimist@npm:^1.2.5": + version: 1.2.7 + resolution: "minimist@npm:1.2.7" + checksum: 7346574a1038ca23c32e02252f603801f09384dd1d78b69a943a4e8c2c28730b80e96193882d3d3b22a063445f460e48316b29b8a25addca2d7e5e8f75478bec + languageName: node + linkType: hard + "minimisted@npm:^2.0.0": version: 2.0.1 resolution: "minimisted@npm:2.0.1" From 2142f91b359048fd9319ebf72e918b72a6ecb7c6 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 12 Oct 2022 11:48:45 +0100 Subject: [PATCH 196/278] techdocs-node: tweak mock-fs setup Signed-off-by: Patrik Oldsberg --- .../techdocs-node/src/stages/publish/googleStorage.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/techdocs-node/src/stages/publish/googleStorage.test.ts b/plugins/techdocs-node/src/stages/publish/googleStorage.test.ts index 896e528644..4418e00c81 100644 --- a/plugins/techdocs-node/src/stages/publish/googleStorage.test.ts +++ b/plugins/techdocs-node/src/stages/publish/googleStorage.test.ts @@ -219,13 +219,13 @@ describe('GoogleGCSPublish', () => { }, }; - beforeAll(() => { + beforeEach(() => { mockFs({ [directory]: files, }); }); - afterAll(() => { + afterEach(() => { mockFs.restore(); }); From ec9ee4741958ee1959980afd93679b5d71d4e8c1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Oct 2022 11:11:56 +0000 Subject: [PATCH 197/278] Update dependency msw to v0.47.4 Signed-off-by: Renovate Bot --- yarn.lock | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index e5c64e6afd..d1ce206caa 100644 --- a/yarn.lock +++ b/yarn.lock @@ -30017,8 +30017,8 @@ __metadata: linkType: hard "msw@npm:^0.47.0": - version: 0.47.3 - resolution: "msw@npm:0.47.3" + version: 0.47.4 + resolution: "msw@npm:0.47.4" dependencies: "@mswjs/cookies": ^0.2.2 "@mswjs/interceptors": ^0.17.5 @@ -30037,7 +30037,7 @@ __metadata: outvariant: ^1.3.0 path-to-regexp: ^6.2.0 statuses: ^2.0.0 - strict-event-emitter: ^0.2.0 + strict-event-emitter: ^0.2.6 type-fest: ^2.19.0 yargs: ^17.3.1 peerDependencies: @@ -30047,7 +30047,7 @@ __metadata: optional: true bin: msw: cli/index.js - checksum: 1be018c7b2eff982409967cccb5c604e45f65710ee9698bab57fbe794f8426d1a4d33e52b75ef395c6d226948c799241c7c2c7748ec4f5b741e7f25bcbafbd1e + checksum: 10ff632641d40384d6622abf4df6399e4ae649db0f676b5d1ee2d0a515ec96f33abe9d4fecba08cdba4b2e43255af419da9eefc020d40a7e10669d0906457197 languageName: node linkType: hard @@ -36635,6 +36635,15 @@ __metadata: languageName: node linkType: hard +"strict-event-emitter@npm:^0.2.6": + version: 0.2.7 + resolution: "strict-event-emitter@npm:0.2.7" + dependencies: + events: ^3.3.0 + checksum: 111691e7d3fce0810586ccd8e8234af883ad3b121ef69091c7e260c32299d1ba085a95238ad09b43478bc5e9e80370f2fcb8114716e343be6f44bfc08fab4142 + languageName: node + linkType: hard + "strict-uri-encode@npm:^2.0.0": version: 2.0.0 resolution: "strict-uri-encode@npm:2.0.0" From b842b55f4f2b628d75b57d3ae5a20fa618ddda35 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Oct 2022 11:12:45 +0000 Subject: [PATCH 198/278] Update dependency passport-saml to v3.2.2 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index e5c64e6afd..fe95d1ad18 100644 --- a/yarn.lock +++ b/yarn.lock @@ -31645,8 +31645,8 @@ __metadata: linkType: hard "passport-saml@npm:^3.1.2": - version: 3.2.1 - resolution: "passport-saml@npm:3.2.1" + version: 3.2.2 + resolution: "passport-saml@npm:3.2.2" dependencies: "@xmldom/xmldom": ^0.7.5 debug: ^4.3.2 @@ -31655,7 +31655,7 @@ __metadata: xml-encryption: ^2.0.0 xml2js: ^0.4.23 xmlbuilder: ^15.1.1 - checksum: 7236c82f2b16240acc6e026cbe171e130e703d0e85c7f83733be0137218a62f61dee72d34cea00ea02a0db4b823497e574ef4b6585a316097b926eb760f90bb8 + checksum: 1ae16bb5df60f70ba822896a1d3b360466f87ef6b45e941d28a91c1f9a681752a040da9e8b02e06c665e9b7277dd862abb384eb5e8b10d3b9e5fdabaa68b1691 languageName: node linkType: hard From e65095abdcd2f05cf7eb852a1b907728347d846f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Oct 2022 12:04:55 +0000 Subject: [PATCH 199/278] Update dependency postcss to v8.4.17 Signed-off-by: Renovate Bot --- yarn.lock | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index 0f345a2ec2..5112a9569e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -32624,7 +32624,18 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.1.0, postcss@npm:^8.4.7": +"postcss@npm:^8.1.0": + version: 8.4.17 + resolution: "postcss@npm:8.4.17" + dependencies: + nanoid: ^3.3.4 + picocolors: ^1.0.0 + source-map-js: ^1.0.2 + checksum: a6d9096dd711e17f7b1d18ff5dcb4fdedf3941d5a3dc8b0e4ea873b8f31972d57f73d6da9a8aed7ff389eb52190ed34f6a94f299a7f5ddc68b08a24a48f77eb9 + languageName: node + linkType: hard + +"postcss@npm:^8.4.7": version: 8.4.16 resolution: "postcss@npm:8.4.16" dependencies: From 56ae211235b28607f8742e960cfbc5d5f59c5078 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Oct 2022 12:05:48 +0000 Subject: [PATCH 200/278] Update dependency rollup-plugin-dts to v4.2.3 Signed-off-by: Renovate Bot --- yarn.lock | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0f345a2ec2..38f14e2f97 100644 --- a/yarn.lock +++ b/yarn.lock @@ -28617,12 +28617,12 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:^0.26.1": - version: 0.26.1 - resolution: "magic-string@npm:0.26.1" +"magic-string@npm:^0.26.6": + version: 0.26.7 + resolution: "magic-string@npm:0.26.7" dependencies: sourcemap-codec: ^1.4.8 - checksum: 23f21f5734346ddfbabd7b9834e3ecda3521e3e1db81166c1513b45b729489bbed1eafa8cd052c7db7fdc7c68ebc5c03bc00dd5a23697edda15dbecaf8c98397 + checksum: 89b0d60cbb32bbf3d1e23c46ea93db082d18a8230b972027aecb10a40bba51be519ecce0674f995571e3affe917b76b09f59d8dbc9a1b2c9c4102a2b6e8a2b01 languageName: node linkType: hard @@ -35058,18 +35058,18 @@ __metadata: linkType: hard "rollup-plugin-dts@npm:^4.0.1": - version: 4.2.2 - resolution: "rollup-plugin-dts@npm:4.2.2" + version: 4.2.3 + resolution: "rollup-plugin-dts@npm:4.2.3" dependencies: - "@babel/code-frame": ^7.16.7 - magic-string: ^0.26.1 + "@babel/code-frame": ^7.18.6 + magic-string: ^0.26.6 peerDependencies: rollup: ^2.55 typescript: ^4.1 dependenciesMeta: "@babel/code-frame": optional: true - checksum: cf4b45f6cca442a5f44af0f0fb567c8fc540ecb792c763571d1bcda9bf495803bcc8d4eaef451a2dd32f7f391eb822e2b96cc6b86b096db54a4d3935236fd8da + checksum: b1de94202d0574e7c12105bf0d013e7142c1b9b74d6b83d194d870dcdc281e90cff45ed47a0ab1c62280cc25e75f522e1278ec0ba89c8f75b8bcb56dc98c2c63 languageName: node linkType: hard From 296aea34da1a1b7dfe336b22dac9698f99e843b3 Mon Sep 17 00:00:00 2001 From: Mengnan Gong Date: Wed, 12 Oct 2022 20:22:08 +0800 Subject: [PATCH 201/278] Update the README doc for tech-insights-backend The Tech Insights plugin supports running fact retrievers across multiple instances. Update the README to remove the stale instructions. Signed-off-by: Mengnan Gong --- .changeset/loud-wombats-taste.md | 5 +++++ plugins/tech-insights-backend/README.md | 17 +---------------- 2 files changed, 6 insertions(+), 16 deletions(-) create mode 100644 .changeset/loud-wombats-taste.md diff --git a/.changeset/loud-wombats-taste.md b/.changeset/loud-wombats-taste.md new file mode 100644 index 0000000000..a1558aa517 --- /dev/null +++ b/.changeset/loud-wombats-taste.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-tech-insights-backend': patch +--- + +The Tech Insights plugin supports running fact retrievers across multiple instances. Update the README to remove the stale instructions. diff --git a/plugins/tech-insights-backend/README.md b/plugins/tech-insights-backend/README.md index c5c6e66270..26dac78db5 100644 --- a/plugins/tech-insights-backend/README.md +++ b/plugins/tech-insights-backend/README.md @@ -114,22 +114,7 @@ const builder = buildTechInsightsContext({ #### Running fact retrievers in a multi-instance installation -Current logic on running scheduled fact retrievers is intended to be executed in a single instance. Running on multi-instane environment there might be some additional data accumulation when multiple fact retrievers would retrieve and persist their facts. To mitigate this it is recommended to mark a single instance to be a specific fact retriever instance. One way to do this is by using environment variables to indicate if the retrievers should be registered. This can be done for example like the code snippet below - -```diff -const builder = buildTechInsightsContext({ - logger: env.logger, - config: env.config, - database: env.database, - discovery: env.discovery, - tokenManager: env.tokenManager, - scheduler: env.scheduler, -- factRetrievers: [], -+ factRetrievers: process.env.MAIN_FACT_RETRIEVER_INSTANCE ? [myFactRetrieverRegistration] : [], -}); -``` - -Where the instance dedicated to handling retrieval of facts would have environment variable `MAIN_FACT_RETRIEVER_INSTANCE` set to true. +The Tech Insights plugin utilizes the `PluginTaskScheduler` for scheduling tasks and coordinating the task invocation across instances. See [the PluginTaskScheduler documentation](https://backstage.io/docs/reference/backend-tasks.plugintaskscheduler) for more information. ### Creating Fact Retrievers From 418a752f8c4bb54c266cdf73232a6ca16ae35dcd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 12 Oct 2022 17:27:45 +0000 Subject: [PATCH 202/278] Update dependency swagger-ui-react to v4.14.3 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0f345a2ec2..8dbb611045 100644 --- a/yarn.lock +++ b/yarn.lock @@ -37136,8 +37136,8 @@ __metadata: linkType: hard "swagger-ui-react@npm:^4.11.1": - version: 4.14.2 - resolution: "swagger-ui-react@npm:4.14.2" + version: 4.14.3 + resolution: "swagger-ui-react@npm:4.14.3" dependencies: "@babel/runtime-corejs3": ^7.18.9 "@braintree/sanitize-url": =6.0.0 @@ -37175,7 +37175,7 @@ __metadata: peerDependencies: react: ">=17.0.0" react-dom: ">=17.0.0" - checksum: ee8d19bdfd32032926d86a1c547b5fd423f658e0e4c29bd2b96808143f7ef5c1e094fb6c2a0a6e3f20b8a5d7e0a7732f81a31fc10f8e6e6702b8b1333a40164c + checksum: ae8e932ff7eb0b4be71fd1ad7f00ef3eb461636a83985bd36ea28647f60769e6234a9921ff2f84aa33c370f30b8fa1c30a6ca7cf3c4a6ded963aaf9a337aa197 languageName: node linkType: hard From e8d797641389536a56edbdac4949caa48ce7d5cf Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Wed, 12 Oct 2022 14:51:50 -0500 Subject: [PATCH 203/278] Added back support for when no branch is provided for the Bitbucket Server UrlReader Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- .changeset/chilled-apes-change.md | 5 ++++ .../reading/BitbucketServerUrlReader.test.ts | 27 +++++++++++++++++++ .../src/reading/BitbucketServerUrlReader.ts | 21 ++++++++++----- 3 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 .changeset/chilled-apes-change.md diff --git a/.changeset/chilled-apes-change.md b/.changeset/chilled-apes-change.md new file mode 100644 index 0000000000..f9d44a75ee --- /dev/null +++ b/.changeset/chilled-apes-change.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +Added back support for when no branch is provided for the Bitbucket Server `UrlReader` diff --git a/packages/backend-common/src/reading/BitbucketServerUrlReader.test.ts b/packages/backend-common/src/reading/BitbucketServerUrlReader.test.ts index 15f1c0d4be..9f231e2ba7 100644 --- a/packages/backend-common/src/reading/BitbucketServerUrlReader.test.ts +++ b/packages/backend-common/src/reading/BitbucketServerUrlReader.test.ts @@ -102,6 +102,25 @@ describe('BitbucketServerUrlReader', () => { }), ), ), + rest.get( + 'https://api.bitbucket.mycompany.net/rest/api/1.0/projects/backstage/repos/mock/branches/default', + (_, res, ctx) => + res( + ctx.status(200), + ctx.json({ + id: 'refs/heads/master', + displayId: 'master', + type: 'BRANCH', + latestCommit: '3bdd5457286abdf920db4b77bf2fef79a06190c2', + latestChangeset: '3bdd5457286abdf920db4b77bf2fef79a06190c2', + isDefault: true, + }), + ), + ), + rest.get( + 'https://api.bitbucket.mycompany.net/rest/api/1.0/projects/backstage/repos/mock/default-branch', + (_, res, ctx) => res(ctx.status(404)), + ), ); }); @@ -119,6 +138,14 @@ describe('BitbucketServerUrlReader', () => { expect(indexMarkdownFile.toString()).toBe('# Test\n'); }); + + it('uses default branch when no branch is provided', async () => { + const response = await reader.readTree( + 'https://bitbucket.mycompany.net/projects/backstage/repos/mock/browse/src', + ); + + expect(response.etag).toBe('3bdd5457286a'); + }); }); describe('readTree without branch', () => { diff --git a/packages/backend-common/src/reading/BitbucketServerUrlReader.ts b/packages/backend-common/src/reading/BitbucketServerUrlReader.ts index 98f95b88cb..bcab226b0f 100644 --- a/packages/backend-common/src/reading/BitbucketServerUrlReader.ts +++ b/packages/backend-common/src/reading/BitbucketServerUrlReader.ts @@ -188,11 +188,13 @@ export class BitbucketServerUrlReader implements UrlReader { private async getLastCommitShortHash(url: string): Promise { const { name: repoName, owner: project, ref: branch } = parseGitUrl(url); - const branchListUrl = `${ - this.integration.config.apiBaseUrl - }/projects/${project}/repos/${repoName}/branches?filterText=${encodeURIComponent( - branch, - )}`; + // If a branch is provided use that otherwise fall back to the default branch + const branchParameter = branch + ? `?filterText=${encodeURIComponent(branch)}` + : '/default'; + + // https://docs.atlassian.com/bitbucket-server/rest/7.9.0/bitbucket-rest.html#idp211 (branches docs) + const branchListUrl = `${this.integration.config.apiBaseUrl}/projects/${project}/repos/${repoName}/branches${branchParameter}`; const branchListResponse = await fetch( branchListUrl, @@ -216,8 +218,15 @@ export class BitbucketServerUrlReader implements UrlReader { return exactBranchMatch.latestCommit.substring(0, 12); } + // Handle when no branch is provided using the default as the fallback + if (!branch && branchMatches) { + return branchMatches.latestCommit.substring(0, 12); + } + throw new Error( - `Failed to find branch "${branch}" in property "displayId" of response to ${branchListUrl}`, + `Failed to find Last Commit using ${ + branch ? `branch "${branch}"` : 'default branch' + } in response from ${branchListUrl}`, ); } } From e65f18e0a246d9f9980e342e5c6f9e860a2bba72 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Wed, 12 Oct 2022 15:35:03 -0500 Subject: [PATCH 204/278] Removed database step from docs Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- docs/assets/getting-started/portal.png | Bin 134243 -> 135544 bytes docs/assets/getting-started/wizard.png | Bin 20559 -> 40529 bytes docs/getting-started/index.md | 8 ++------ 3 files changed, 2 insertions(+), 6 deletions(-) diff --git a/docs/assets/getting-started/portal.png b/docs/assets/getting-started/portal.png index f16ad447578e8dea7fa38153f0dabeb6b405e452..b3133f22789133a7dc89cf6206e781cf6982e41c 100644 GIT binary patch literal 135544 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 z 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:pxEFv-Wp_v5k|#UdkOUfcFb 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

gE^A=*+uQT{Atq82 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ℑ+j8SaEY2kXTA>Oa_e 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 B-(jaB!iTr zuOTx^SS^|vP&0xalYZd?7{qiDWkHJLn=>J|iDvkD(J7W&$<1q9-xk8w1$pUtwlGT@ zNt=_y^vd3>10h66;N?iK#hVCG0@i3Q9kycGT3UZ7q1ED}_jF0Clhvhb^BVRid}3w< z_z`Sol4LcV`6bJoTOV174YWf2+wU`2Axf_%aO@Y zZn}$5HgJ~BJ%?4ZCNu4oJyG1XKQ#TAoz#l`2uQ{BwV7x%wUV~x5M!3`2cbissw`C< zZ%{B!-I5!=%k~g`#%8NC5--=*097wmi3PG0NBWj()DAhIC!Jo$qFXpS)4#mo?wUlj zXMYeLd|Q-TUs9Bym81Tp!F$D_rAA168sDq(sNB>`t~)RW6EStS2gK-wE}$Q}luc9e z)UWkvo&2UJ&6Vqlq)I||S+Aknzs*>>xA4B%YvfLWUYXk6uw>h6zY|JR%0-;|OQ6EK zchX=>7rC{y`?n_Z@zcY+cFe(hh~kR=C+{B?|dn$&M03 zGvj=0{BeCi( zdzg6eN;&l13?8>=8C<_1Kv&~TLabT!GPZ2eKy{~1 zJFA)1fQ{;?&Az@0X`@_^HzvKQ#Rf+ji=vD<8k+ZONt4L_mK9Xw7In@7RO#W6~>Ku z+nJ!h=02+i-o&DI`Agr7B-UIN;N(_@6Ab}pB1z^B@_hGrMWiVa!lRR!4%ieDYV~ZE z#m&lzMS8PMb1>tQSdZ&_WT0VyxA`@o1gb7wN2nzVl1v_N6+`bPGw}<0OS@|j!)7p7 zi!|f}$L;3kdIL`GgxYX^m*E&=f+F|$eS>)_pEg6hkMHNNm+i87*f9Gc_H!_8cz@<3 z{%R6~tq=?4N^&n2on^%Swi_ba;%1n5)RXZa`zPJmOnNQN=J=@VE8tt_r%cb{fmnla zR1&i3c**XV!9t?(wL!ehvCrW9%KDkKYBu;-*AmG%x3&bY4L&()X9swd==EJf+wTFM z-v_Nj3m@w6yf!S74vV>d?*F)^6;R`~%0pgT4qK^N{zW?IlZz%(OWyQxo3wUAW+7uDlrP@Ou2i;W* zKFTe~`@+ix9V&z>K5S%Gdfl5{tbB{R8#L0hEbnHV@sy$^Wv*ULN${zW{mGHX&tNV@ zAFTmeS0Zs;D1$NMrd5&)8$^t+7<@=oe6o%LH?UIO-<7xc>4rIn_3RM}3>6uA!VyI8 zNDo@gW7m7@ryq9pbC}vHjq~+fWzUsU8SKiAp_3f?7bHtOJMv(w1FAs*qw`s2;+X1_-q`i|Zs6>2%}AH_gUfCD8U<=!j}=LH zLOYs!`#|r=lY}kD&fP2K4^*{ZS8+NbkojH=wEZBQxSKPr$h^7Nv2Xo4K%Ijq*=eHu zZQYuHoPEVB6Q`V1Hec+=r<4iXRPx@#61BI=F1h#0&1YRuYED1*dG4&|C)*k!a=HDk z%H?f1GC$p3KDsZ^eLoi%WL?$Fm7y}#U&9iv{~qEUKS3GOxJqf3jNNNq8K~tl6Bux3 z_VJP?dihLL+sn-+?6i%Hhc&AI(c>?wpNCF<4Vbsk^jx=?QwX#t66-m)QIsM+N+1l= z+owG%%E3cQA?mcahqDWrUKPHsLG>2`2H7+fv=pBu`kSeG2fHVJ8=skO?sVj2NXlkoW8+Rc&BKJ_msV7)1x}(KnoWAE-tfaGf@V$xUCf7a=aJhNgae)PeLzU_ z>A%=*e;FFscq1~wr`B3m3~bL?jr3a2ST;fYHK!Z8Y5JHDrYO3^Adw~TVhBqI_cq}H zR6;BMlqXfbchHsia`(>ozJR{1>~ShiKZVfpyn*PY|2RZSvKot_Jl(GD^1vKYEK_0r zb>P@Gn!8%`Yu2&G_^?CH|-T?kYWIp2#2_2ih)@ zkNuhP;RqC!XqKsxmXgxLyc*~9&!AvjVGa?F+Ag8T^g@pz0kZu6WkHPf420L-WksGfRWgi#ITiGCx*e7KB1T=ss9|W|F1wj{rg`8~z5lWZEGb4j%n>0a zLEyxBdX`E`N`B?Ur7Jp>78E>*BPg#aSQ_QR+2Rt2I+>uEb`bT#@o*emkixoD%`|L)Ts@QK`vX{5oukg3K5$0qxL6 z8i*ImqHizn=h{e`uyeC+N&E1kh^#7hC!P;CT4Jb@9*|1fjF_bwX9;llO z!7`0t2Yf{lSiQRlyTRyMLND7}Env1el*@aZdPezS<9if-*Ys zyLpp$Zb!@a0n%#-W-^BF=Etpnn^I67;G`}3{6EyeA6GP>U1K2v@7q2^zZZ|#&5-0d zeDJsJWAFRKg$QBrR}B+z|LzTf&<5y~|Lx9y(mHW-Lk};8^!*<=V33R|z{!K-6+x!- z#OXqrdyv(g|FV2U0~=s*c{|G|{IujSOlrXcc3#6O}3o7WaP_nvnuH z{%?2wgVu@oQ+i^&is6Lj5LABAlC9!}S8#4Th95}b|HUrVq7lWrC0E~Fy*PAbwoJ1V zxT7%)Dja*>d(A7BBi{`T}G5|2J}t2=CyM zeCIC%)~8$~7t{dUe_=n}`E~bnq4mF)5Qd^W)A}Me^hd+sjIG1F=^8Mdp0psSG^NPPM-xK>oRrRa7)$H%*4ySwl=9UiY_aojuAt zzqFC@SV~be{yZaRiH;VmlhMrhE?1$Mu>Y2ksG6F19>$H&k-_p80=AeaSv|6bgAs=d@V0ZFEr>(D1sllyxSybNT36)Q_tF zUL?vK2yHs?C{6eqR2gfbM^8~q$9wp%4M!P^l62UpaRggENtbtjm;TXz1dNF`KUH~s z)m>>Jw9TL;(= Ti11GA06$}Wb3HQhbmad4>|=xw diff --git a/docs/assets/getting-started/wizard.png b/docs/assets/getting-started/wizard.png index 679878e252d7f2c8c47eedcf1d610c0a297d8cbb..8b6dce61310f0dfece37e617bc36d4c76914ad65 100644 GIT binary patch literal 40529 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 literal 20559 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 diff --git a/docs/getting-started/index.md b/docs/getting-started/index.md index ade73d3f68..477467bb88 100644 --- a/docs/getting-started/index.md +++ b/docs/getting-started/index.md @@ -51,14 +51,10 @@ create a subdirectory inside your current working directory. npx @backstage/create-app ``` -The wizard will ask you - -- The name of the app, which will also be the name of the directory -- The database type to use for the backend. For this guide, you'll be using the - SQLite option. +The wizard will ask you for the name of the app, which will also be the name of the directory

- Screenshot of the wizard asking for a name for the app, and a selection menu for the database. + Screenshot of the wizard asking for a name for the app.

### Run the Backstage app From feb4602e52f2375aefb3e1532fcca11f608b8539 Mon Sep 17 00:00:00 2001 From: Andrew Thauer Date: Thu, 13 Oct 2022 09:04:02 -0400 Subject: [PATCH 205/278] chore: add @andrewthauer to codeowners This is a very late response to issue #8294 which requested reviewers on certain plugins. Also added an entry for `cost-insights-*` since there is now a `cost-insights-common` package. Signed-off-by: Andrew Thauer --- .github/CODEOWNERS | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index cb1dd5d322..2dd8f4b55b 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -35,6 +35,7 @@ yarn.lock @backstage/reviewers @backst /plugins/code-coverage @backstage/reviewers @alde @nissayeva /plugins/code-coverage-backend @backstage/reviewers @alde @nissayeva /plugins/cost-insights @backstage/reviewers @backstage/silver-lining +/plugins/cost-insights-* @backstage/reviewers @backstage/silver-lining /plugins/explore @backstage/reviewers @backstage/sda-se-reviewers /plugins/explore-react @backstage/reviewers @backstage/sda-se-reviewers /plugins/fossa @backstage/reviewers @backstage/sda-se-reviewers @@ -44,13 +45,15 @@ yarn.lock @backstage/reviewers @backst /plugins/ilert @backstage/reviewers @yacut /plugins/jenkins @backstage/reviewers @timja /plugins/jenkins-backend @backstage/reviewers @timja -/plugins/kafka @backstage/reviewers @nirga -/plugins/kafka-backend @backstage/reviewers @nirga +/plugins/kafka @backstage/reviewers @nirga @andrewthauer +/plugins/kafka-backend @backstage/reviewers @nirga @andrewthauer /plugins/kubernetes @backstage/reviewers @backstage/warpspeed /plugins/kubernetes-* @backstage/reviewers @backstage/warpspeed /plugins/newrelic-dashboard @backstage/reviewers @mufaddal7 /plugins/playlist @backstage/reviewers @kuangp /plugins/playlist-* @backstage/reviewers @kuangp +/plugins/rollbar @backstage/reviewers @andrewthauer +/plugins/rollbar-backend @backstage/reviewers @andrewthauer /plugins/scaffolder-backend-module-rails @backstage/reviewers @angeliski /plugins/scaffolder-backend-module-yeoman @backstage/reviewers @pawelmitka /plugins/search @backstage/reviewers @backstage/techdocs-core From 3331ac9a94af6d8447bebdd20b2f174ea5a46039 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 13 Oct 2022 14:02:08 +0000 Subject: [PATCH 206/278] Update JamesIves/github-pages-deploy-action action to v4.4.1 Signed-off-by: Renovate Bot --- .github/workflows/deploy_microsite.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy_microsite.yml b/.github/workflows/deploy_microsite.yml index fb99f41c55..af6f222377 100644 --- a/.github/workflows/deploy_microsite.yml +++ b/.github/workflows/deploy_microsite.yml @@ -55,7 +55,7 @@ jobs: run: ls microsite/build/backstage && ls microsite/build/backstage/storybook - name: Deploy both microsite and storybook to gh-pages - uses: JamesIves/github-pages-deploy-action@v4.4.0 + uses: JamesIves/github-pages-deploy-action@v4.4.1 with: branch: gh-pages folder: microsite/build/backstage From 8f4f780c4908547a7b31b1e0b64994e83d99df7a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 13 Oct 2022 14:19:24 +0000 Subject: [PATCH 207/278] Update dependency @octokit/auth-app to v4.0.7 Signed-off-by: Renovate Bot --- yarn.lock | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3373e994b2..b078398626 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11178,20 +11178,20 @@ __metadata: linkType: hard "@octokit/auth-app@npm:^4.0.0": - version: 4.0.6 - resolution: "@octokit/auth-app@npm:4.0.6" + version: 4.0.7 + resolution: "@octokit/auth-app@npm:4.0.7" dependencies: "@octokit/auth-oauth-app": ^5.0.0 "@octokit/auth-oauth-user": ^2.0.0 "@octokit/request": ^6.0.0 "@octokit/request-error": ^3.0.0 - "@octokit/types": ^7.0.0 + "@octokit/types": ^8.0.0 "@types/lru-cache": ^5.1.0 deprecation: ^2.3.1 lru-cache: ^6.0.0 universal-github-app-jwt: ^1.0.1 universal-user-agent: ^6.0.0 - checksum: 342fece6db4470ee489e710af8aa14ffd3a89e666815a15fadbabe3a382932a714d5bece24375f0ca39f3310f9d10bd28bc348210282cbc6701d27dd9b2ff7ed + checksum: 880de7341f47c5a48822612f50ae453fb0990a188b29afdb2f80a1f7e703c88e068d05a4edc1aa9a8204c730b6f70cf2772fbd5da032fee4986a5266ebdda4c7 languageName: node linkType: hard @@ -11446,6 +11446,13 @@ __metadata: languageName: node linkType: hard +"@octokit/openapi-types@npm:^14.0.0": + version: 14.0.0 + resolution: "@octokit/openapi-types@npm:14.0.0" + checksum: 0a1f8f3be998cd82c5a640e9166d43fd183b33d5d36f5e1a9b81608e94d0da87c01ec46c9988f69cd26585d4e2ffc4d3ec99ee4f75e5fe997fc86dad0aa8293c + languageName: node + linkType: hard + "@octokit/openapi-types@npm:^7.3.2": version: 7.4.0 resolution: "@octokit/openapi-types@npm:7.4.0" @@ -11669,6 +11676,15 @@ __metadata: languageName: node linkType: hard +"@octokit/types@npm:^8.0.0": + version: 8.0.0 + resolution: "@octokit/types@npm:8.0.0" + dependencies: + "@octokit/openapi-types": ^14.0.0 + checksum: 1a0197b2c4c522ac90f145e02b3f8cb048a47f71c2c6bdbf021a03db7dd30ca92a899c0186acb401337f218efe44e60d33cc1cc68715b622bb75bc1a4e79515d + languageName: node + linkType: hard + "@octokit/webhooks-methods@npm:^3.0.0": version: 3.0.0 resolution: "@octokit/webhooks-methods@npm:3.0.0" From 3a1a999b7beb446b152062d721c87ebb469523ed Mon Sep 17 00:00:00 2001 From: Phil Kuang Date: Thu, 13 Oct 2022 11:33:17 -0400 Subject: [PATCH 208/278] fix(techdocsReader): include search params when navigating urls Signed-off-by: Phil Kuang --- .changeset/spicy-parents-lick.md | 5 +++++ .../reader/components/TechDocsReaderPageContent/dom.tsx | 9 +++++---- 2 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 .changeset/spicy-parents-lick.md diff --git a/.changeset/spicy-parents-lick.md b/.changeset/spicy-parents-lick.md new file mode 100644 index 0000000000..692745ed12 --- /dev/null +++ b/.changeset/spicy-parents-lick.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-techdocs': patch +--- + +Include query parameters when navigating to relative links in documents diff --git a/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/dom.tsx b/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/dom.tsx index 0e811af6e0..e886454594 100644 --- a/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/dom.tsx +++ b/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/dom.tsx @@ -175,13 +175,14 @@ export const useTechDocsReaderDom = ( // detect if CTRL or META keys are pressed so that links can be opened in a new tab with `window.open` const modifierActive = event.ctrlKey || event.metaKey; const parsedUrl = new URL(url); + const fullPath = `${parsedUrl.pathname}${parsedUrl.search}${parsedUrl.hash}`; // hash exists when anchor is clicked on secondary sidebar if (parsedUrl.hash) { if (modifierActive) { - window.open(`${parsedUrl.pathname}${parsedUrl.hash}`, '_blank'); + window.open(fullPath, '_blank'); } else { - navigate(`${parsedUrl.pathname}${parsedUrl.hash}`); + navigate(fullPath); // Scroll to hash if it's on the current page transformedElement ?.querySelector(`[id="${parsedUrl.hash.slice(1)}"]`) @@ -189,9 +190,9 @@ export const useTechDocsReaderDom = ( } } else { if (modifierActive) { - window.open(parsedUrl.pathname, '_blank'); + window.open(fullPath, '_blank'); } else { - navigate(parsedUrl.pathname); + navigate(fullPath); } } }, From 3a630161c4cb67cabae5181f817b856829217c85 Mon Sep 17 00:00:00 2001 From: marcofaggian Date: Fri, 14 Oct 2022 00:57:08 +0200 Subject: [PATCH 209/278] fix(api-docs): LANG=en_EN, to match "options" Signed-off-by: marcofaggian --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4270ef9824..c586b3a580 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "build": "backstage-cli repo build --all", "build:api-reports": "yarn build:api-reports:only --tsc", "build:api-reports:only": "ts-node -T -P scripts/tsconfig.json scripts/api-extractor.ts", - "build:api-docs": "yarn build:api-reports --docs", + "build:api-docs": "LANG=en_EN yarn build:api-reports --docs", "tsc": "tsc", "tsc:full": "backstage-cli repo clean && tsc --skipLibCheck false --incremental false", "clean": "backstage-cli repo clean", From 475108f49f871a9b227b3bf29ebbfcdcc628a7d3 Mon Sep 17 00:00:00 2001 From: Tang Huan Song Date: Fri, 14 Oct 2022 09:57:52 +0800 Subject: [PATCH 210/278] Update .changeset/early-hornets-pay.md Co-authored-by: Johan Haals Signed-off-by: Tang Huan Song --- .changeset/early-hornets-pay.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/early-hornets-pay.md b/.changeset/early-hornets-pay.md index 25946a4361..c50f8fe821 100644 --- a/.changeset/early-hornets-pay.md +++ b/.changeset/early-hornets-pay.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-auth-node': minor +'@backstage/plugin-auth-node': patch --- Ensure `getIdentity` throws an `AuthenticationError` instead of a `NotAllowed` error when authentication fails From 7095e8bc03ccbc05551d1f38563ce2e0b9fd9aea Mon Sep 17 00:00:00 2001 From: Alisson Fabiano Date: Fri, 14 Oct 2022 11:47:16 +0100 Subject: [PATCH 211/278] Fixed bug that when sending data by Post Signed-off-by: Alisson Fabiano --- .changeset/brown-days-pretend.md | 5 +++++ plugins/tech-insights/src/api/TechInsightsClient.ts | 6 ++++++ 2 files changed, 11 insertions(+) create mode 100644 .changeset/brown-days-pretend.md diff --git a/.changeset/brown-days-pretend.md b/.changeset/brown-days-pretend.md new file mode 100644 index 0000000000..5f45349a55 --- /dev/null +++ b/.changeset/brown-days-pretend.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-tech-insights': minor +--- + +Fixed bug that when sending data by Post, the default context type used was `plain/text` diff --git a/plugins/tech-insights/src/api/TechInsightsClient.ts b/plugins/tech-insights/src/api/TechInsightsClient.ts index 9bdeb119f9..afd214d581 100644 --- a/plugins/tech-insights/src/api/TechInsightsClient.ts +++ b/plugins/tech-insights/src/api/TechInsightsClient.ts @@ -82,6 +82,9 @@ export class TechInsightsClient implements TechInsightsApi { { method: 'POST', body: JSON.stringify(requestBody), + headers: { + 'Content-Type': 'application/json', + }, }, ); } @@ -98,6 +101,9 @@ export class TechInsightsClient implements TechInsightsApi { return this.api('/checks/run', { method: 'POST', body: JSON.stringify(requestBody), + headers: { + 'Content-Type': 'application/json', + }, }); } From d7f7f6faac34ccc7749ee1c76cc2cc63ffc3e9fb Mon Sep 17 00:00:00 2001 From: Alisson Fabiano Date: Fri, 14 Oct 2022 11:51:42 +0100 Subject: [PATCH 212/278] Adjust description changeset Signed-off-by: Alisson Fabiano --- .changeset/brown-days-pretend.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/brown-days-pretend.md b/.changeset/brown-days-pretend.md index 5f45349a55..de4363e5aa 100644 --- a/.changeset/brown-days-pretend.md +++ b/.changeset/brown-days-pretend.md @@ -2,4 +2,4 @@ '@backstage/plugin-tech-insights': minor --- -Fixed bug that when sending data by Post, the default context type used was `plain/text` +Fixed bug when sending data by Post in `runChecks` and `runBulkChecks` functions of the `TechInsightsClient` class, the default `Content-Type` used was `plain/text` From 77503b8f3641a1dfa1591e35ef397f61601702e1 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Fri, 14 Oct 2022 16:49:03 +0100 Subject: [PATCH 213/278] Increase memory for synk action for the snyk github issue sync workflow Signed-off-by: Harry Hogg --- .github/workflows/sync_snyk-github-issues.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/sync_snyk-github-issues.yml b/.github/workflows/sync_snyk-github-issues.yml index 46a6227f2c..089474e5b8 100644 --- a/.github/workflows/sync_snyk-github-issues.yml +++ b/.github/workflows/sync_snyk-github-issues.yml @@ -13,6 +13,9 @@ jobs: matrix: node-version: [14.x] + env: + NODE_OPTIONS: --max-old-space-size=4096 + steps: - uses: actions/checkout@v3 From 746398082d6c5e3427cfa206013f78dc7031f440 Mon Sep 17 00:00:00 2001 From: Guillermo Manzo Date: Fri, 14 Oct 2022 09:36:33 -0700 Subject: [PATCH 214/278] Update ADOPTERS.md Signed-off-by: Guillermo Manzo --- ADOPTERS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ADOPTERS.md b/ADOPTERS.md index ca56a00890..574623cd14 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -22,7 +22,7 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/ | [Fiverr](https://www.fiverr.com) | [@nirga](https://github.com/nirga) | Unifying separate tools that developers are using today (i.e. monitoring, dead letter queues management, etc.) into a single platform. | | [Zalando SE](https://www.zalando.de) | [@leviferreira](https://github.com/leviferreira) | Building V2 of the Internal Development Portal. | | [LegalZoom](https://legalzoom.com) | [@backjo](https://github.com/backjo) | Developer portal - hub for all engineering projects and metadata. | -| [Expedia Group](https://www.expediagroup.com) | [@guillermomanzo](https://github.com/guillermomanzo), [Sheena Sharma](mailto:shesharma@expediagroup.com), [@ajbw](https://github.com/ajbw) | EG Common Developer Toolkit | +| [Expedia Group](https://www.expediagroup.com) | [@gman0922](https://github.com/gman0922), [Sheena Sharma](mailto:shesharma@expediagroup.com), [Alekhya Karuturi](mailto:akaruturi@expediagroup.com) | EG Developer Front Door | | [Paddle.com](https://paddle.com) | [Ioannis Georgoulas](https://github.com/geototti21) | Developer portal (Tech Docs, Service Catalog, Internal Tooling), we use vanilla Backstage FE and custom BE implementation in Go | | [Acast.com](https://acast.com) | [Olle Lundberg](https://github.com/lndbrg) | Developer portal with tech docs, service catalog and a bunch of other internal tooling | | [Lunar](https://lunar.app) | [Jacob Valdemar](https://github.com/JacobValdemar) | Internal developer portal for service overview and insights, API documentation, technical guides, onboarding guides and RFC's. | From c669eb897bb1f4d2067635bb573466638734dc5f Mon Sep 17 00:00:00 2001 From: elton welsch <54375756+eltonwelsch@users.noreply.github.com> Date: Fri, 14 Oct 2022 16:18:33 -0300 Subject: [PATCH 215/278] Update ADOPTERS.md Signed-off-by: elton welsch <54375756+eltonwelsch@users.noreply.github.com> --- ADOPTERS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ADOPTERS.md b/ADOPTERS.md index ca56a00890..c66dac6c9b 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -71,7 +71,7 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/ | [Signal Iduna Group](https://www.signal-iduna.de/) | [Jonas Thomsen](https://github.com/JoThomsen) | Developer Portal, documentation, monitoring, service catalog for our insurance ecosystem | | [Tradeshift](https://www.tradeshift.com/) | [Soren Mathiasen](https://github.com/sorenmat) | Developer Portal: documentation, monitoring, service templates, service catalog for our micro services | | [Unity](https://unity.com) | [Ted Cordery](https://github.com/TeddyBallGame) | A centralized service catalog with documentation for our service engineers. | -| [PicPay](https://www.picpay.com) | [Luis Baroni](https://github.com/lcsbaroni), [Renata Poluceno](https://github.com/renatapoluceno), [PicPay](https://github.com/picpay) | Developer portal for building services through templates, service catalog with ownership of services, documentation and metrics providing autonomy and visibility for all. | +| [PicPay](https://www.picpay.com) | [Elton Welsch](https://github.com/eltonwelsch), [Emanuella Okada](https://github.com/ManuOkadaPicPay), [PicPay](https://github.com/picpay) | Developer portal for building services through templates, service catalog with ownership of services, documentation and metrics providing autonomy and visibility for all. | | [Epic Games](https://www.epicgames.com) | [Brian Jung](https://github.com/brian-at-epic), [Jeff Goldian](https://github.com/jeffgoldian-Epic) | Developer Portal: Service Catalog, Documentation, Software Templates and more making our internal teams' lives easier! | | [Globo](https://globo.com) | [Carlos Gusmão](https://github.com/caeugusmao), [Guilherme Vierno](https://github.com/vierno), [Denis Aoki](https://github.com/dnsaoki2), [Maycon Dionisio](https://github.com/MayconDionisio), | Reduce the friction of accessing the information engineers need about Globo's digital services through a coherent and centralized experience. | | [QBE](https://www.qbe.com/) | [Daniel Steel](https://github.com/danielsteelqbe), [Pete Jespers](https://github.com/petejespersqbe) | Developer portal allowing our global teams to explore and create applications, documentation and cloud infrastructure easily and quickly 🚀 | From 98932961eaae429172e40f7dac731aaf0c04e8db Mon Sep 17 00:00:00 2001 From: Viachaslau Auchynnikau Date: Sat, 15 Oct 2022 16:40:56 +0300 Subject: [PATCH 216/278] fix(microsite): core-components docs layout fixed Signed-off-by: Viachaslau Auchynnikau --- .../src/components/LogViewer/LogViewer.tsx | 1 + .../src/components/MarkdownContent/MarkdownContent.tsx | 8 ++++---- .../components/ResponseErrorPanel/ResponseErrorPanel.tsx | 1 + .../src/components/TabbedLayout/TabbedLayout.tsx | 1 + .../src/components/WarningPanel/WarningPanel.tsx | 2 +- packages/core-components/src/layout/ItemCard/ItemCard.tsx | 1 + .../core-components/src/layout/ItemCard/ItemCardGrid.tsx | 1 + .../src/layout/ItemCard/ItemCardHeader.tsx | 1 + packages/core-components/src/layout/Sidebar/Items.tsx | 3 +++ .../core-components/src/layout/Sidebar/MobileSidebar.tsx | 1 + .../core-components/src/layout/Sidebar/SidebarGroup.tsx | 1 + .../src/layout/Sidebar/SidebarSubmenuItem.tsx | 1 + packages/core-components/src/layout/Sidebar/config.ts | 4 ++-- packages/core-components/src/layout/SignInPage/types.ts | 2 +- 14 files changed, 20 insertions(+), 8 deletions(-) diff --git a/packages/core-components/src/components/LogViewer/LogViewer.tsx b/packages/core-components/src/components/LogViewer/LogViewer.tsx index bdb3973015..20530cffaf 100644 --- a/packages/core-components/src/components/LogViewer/LogViewer.tsx +++ b/packages/core-components/src/components/LogViewer/LogViewer.tsx @@ -44,6 +44,7 @@ export interface LogViewerProps { /** * A component that displays logs in a scrollable text area. * + * @remarks * The LogViewer has support for search and filtering, as well as displaying * text content with ANSI color escape codes. * diff --git a/packages/core-components/src/components/MarkdownContent/MarkdownContent.tsx b/packages/core-components/src/components/MarkdownContent/MarkdownContent.tsx index d97172bf75..425e723052 100644 --- a/packages/core-components/src/components/MarkdownContent/MarkdownContent.tsx +++ b/packages/core-components/src/components/MarkdownContent/MarkdownContent.tsx @@ -110,10 +110,10 @@ const components: Options['components'] = { }; /** - * MarkdownContent - * -- - * Renders markdown with the default dialect [gfm - GitHub flavored Markdown](https://github.github.com/gfm/) to backstage theme styled HTML. - * If you just want to render to plain [CommonMark](https://commonmark.org/), set the dialect to `'common-mark'` + * Renders markdown with the default dialect {@link https://github.github.com/gfm/ | gfm - GitHub flavored Markdown} to backstage theme styled HTML. + * + * @remarks + * If you just want to render to plain {@link https://commonmark.org/ | CommonMark}, set the dialect to `'common-mark'` */ export function MarkdownContent(props: Props) { const { diff --git a/packages/core-components/src/components/ResponseErrorPanel/ResponseErrorPanel.tsx b/packages/core-components/src/components/ResponseErrorPanel/ResponseErrorPanel.tsx index 9600a3f179..f51c73195c 100644 --- a/packages/core-components/src/components/ResponseErrorPanel/ResponseErrorPanel.tsx +++ b/packages/core-components/src/components/ResponseErrorPanel/ResponseErrorPanel.tsx @@ -44,6 +44,7 @@ const useStyles = makeStyles( /** * Renders a warning panel as the effect of a failed server request. * + * @remarks * Has special treatment for ResponseError errors, to display rich * server-provided information about what happened. */ diff --git a/packages/core-components/src/components/TabbedLayout/TabbedLayout.tsx b/packages/core-components/src/components/TabbedLayout/TabbedLayout.tsx index 26e70e33b5..66a9b498cc 100644 --- a/packages/core-components/src/components/TabbedLayout/TabbedLayout.tsx +++ b/packages/core-components/src/components/TabbedLayout/TabbedLayout.tsx @@ -71,6 +71,7 @@ export function createSubRoutesFromChildren( * TabbedLayout is a compound component, which allows you to define a layout for * pages using a sub-navigation mechanism. * + * @remarks * Consists of two parts: TabbedLayout and TabbedLayout.Route * * @example diff --git a/packages/core-components/src/components/WarningPanel/WarningPanel.tsx b/packages/core-components/src/components/WarningPanel/WarningPanel.tsx index 661bb1da22..2ddcef52ca 100644 --- a/packages/core-components/src/components/WarningPanel/WarningPanel.tsx +++ b/packages/core-components/src/components/WarningPanel/WarningPanel.tsx @@ -134,7 +134,7 @@ const capitalize = (s: string) => { }; /** - * WarningPanel. Show a user friendly error message to a user similar to + * Show a user friendly error message to a user similar to * ErrorPanel except that the warning panel only shows the warning message to * the user. * diff --git a/packages/core-components/src/layout/ItemCard/ItemCard.tsx b/packages/core-components/src/layout/ItemCard/ItemCard.tsx index e2efd0c136..fedcf7de8f 100644 --- a/packages/core-components/src/layout/ItemCard/ItemCard.tsx +++ b/packages/core-components/src/layout/ItemCard/ItemCard.tsx @@ -40,6 +40,7 @@ type ItemCardProps = { * This card type has been deprecated. Instead use plain MUI Card and helpers * where appropriate. * + * @example * ``` * * diff --git a/packages/core-components/src/layout/ItemCard/ItemCardGrid.tsx b/packages/core-components/src/layout/ItemCard/ItemCardGrid.tsx index b27d224418..885b43ca34 100644 --- a/packages/core-components/src/layout/ItemCard/ItemCardGrid.tsx +++ b/packages/core-components/src/layout/ItemCard/ItemCardGrid.tsx @@ -49,6 +49,7 @@ export type ItemCardGridProps = Partial> & { * A default grid to use when arranging "item cards" - cards that let users * select among several options. * + * @remarks * The immediate children are expected to be MUI Card components. * * Styles for the grid can be overridden using the `classes` prop, e.g.: diff --git a/packages/core-components/src/layout/ItemCard/ItemCardHeader.tsx b/packages/core-components/src/layout/ItemCard/ItemCardHeader.tsx index d9443ffc9a..76cf668079 100644 --- a/packages/core-components/src/layout/ItemCard/ItemCardHeader.tsx +++ b/packages/core-components/src/layout/ItemCard/ItemCardHeader.tsx @@ -64,6 +64,7 @@ export type ItemCardHeaderProps = Partial> & { * A simple card header, rendering a default look for "item cards" - cards that * are arranged in a grid for users to select among several options. * + * @remarks * This component expects to be placed within a MUI ``. * * Styles for the header can be overridden using the `classes` prop, e.g.: diff --git a/packages/core-components/src/layout/Sidebar/Items.tsx b/packages/core-components/src/layout/Sidebar/Items.tsx index 5a0b92f558..4bc972e272 100644 --- a/packages/core-components/src/layout/Sidebar/Items.tsx +++ b/packages/core-components/src/layout/Sidebar/Items.tsx @@ -510,6 +510,7 @@ const SidebarItemWithSubmenu = ({ /** * Creates a `SidebarItem` * + * @remarks * If children contain a `SidebarSubmenu` component the `SidebarItem` will have a expandable submenu */ export const SidebarItem = forwardRef((props, ref) => { @@ -663,6 +664,8 @@ export const SidebarScrollWrapper = styled('div')(({ theme }) => { /** * A button which allows you to expand the sidebar when clicked. + * + * @remarks * Use optionally to replace sidebar's expand-on-hover feature with expand-on-click. * * If you are using this you might want to set the `disableExpandOnHover` of the `Sidebar` to `true`. diff --git a/packages/core-components/src/layout/Sidebar/MobileSidebar.tsx b/packages/core-components/src/layout/Sidebar/MobileSidebar.tsx index c85e6d11f2..bfa841690d 100644 --- a/packages/core-components/src/layout/Sidebar/MobileSidebar.tsx +++ b/packages/core-components/src/layout/Sidebar/MobileSidebar.tsx @@ -159,6 +159,7 @@ export const MobileSidebarContext = createContext({ /** * A navigation component for mobile screens, which sticks to the bottom. * + * @remarks * It alternates the normal sidebar by grouping the `SidebarItems` based on provided `SidebarGroup`s * either rendering them as a link or an overlay menu. * If no `SidebarGroup`s are provided the sidebar content is wrapped in an default overlay menu. diff --git a/packages/core-components/src/layout/Sidebar/SidebarGroup.tsx b/packages/core-components/src/layout/Sidebar/SidebarGroup.tsx index 1158cc14df..cb9c786ea9 100644 --- a/packages/core-components/src/layout/Sidebar/SidebarGroup.tsx +++ b/packages/core-components/src/layout/Sidebar/SidebarGroup.tsx @@ -115,6 +115,7 @@ const MobileSidebarGroup = (props: SidebarGroupProps) => { /** * Groups items of the `Sidebar` together. * + * @remarks * On bigger screens, this won't have any effect at the moment. * On small screens, it will add an action to the bottom navigation - either triggering an overlay menu or acting as a link * diff --git a/packages/core-components/src/layout/Sidebar/SidebarSubmenuItem.tsx b/packages/core-components/src/layout/Sidebar/SidebarSubmenuItem.tsx index a1565a348f..51092d7e81 100644 --- a/packages/core-components/src/layout/Sidebar/SidebarSubmenuItem.tsx +++ b/packages/core-components/src/layout/Sidebar/SidebarSubmenuItem.tsx @@ -111,6 +111,7 @@ export type SidebarSubmenuItemDropdownItem = { /** * Holds submenu item content. * + * @remarks * title: Text content of submenu item * subtitle: A subtitle displayed under the main title * to: Path to navigate to when item is clicked diff --git a/packages/core-components/src/layout/Sidebar/config.ts b/packages/core-components/src/layout/Sidebar/config.ts index bb0ff207fb..dacf4bd0a5 100644 --- a/packages/core-components/src/layout/Sidebar/config.ts +++ b/packages/core-components/src/layout/Sidebar/config.ts @@ -20,13 +20,13 @@ const drawerWidthClosed = 72; const iconPadding = 24; const userBadgePadding = 18; -/** @public **/ +/** @public */ export type SidebarOptions = { drawerWidthClosed?: number; drawerWidthOpen?: number; }; -/** @public **/ +/** @public */ export type SubmenuOptions = { drawerWidthClosed?: number; drawerWidthOpen?: number; diff --git a/packages/core-components/src/layout/SignInPage/types.ts b/packages/core-components/src/layout/SignInPage/types.ts index 0909e7242d..8a0430a27d 100644 --- a/packages/core-components/src/layout/SignInPage/types.ts +++ b/packages/core-components/src/layout/SignInPage/types.ts @@ -32,7 +32,7 @@ export type SignInProviderConfig = { apiRef: ApiRef; }; -/** @public **/ +/** @public */ export type IdentityProviders = ('guest' | 'custom' | SignInProviderConfig)[]; export type ProviderComponent = ComponentType< From 5f3f8b06c37676114a01fc40ee925cbf8bf8c0cd Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Sat, 15 Oct 2022 14:59:44 +0200 Subject: [PATCH 217/278] Use urlreaders for http refs Signed-off-by: Kiss Miklos --- .../src/lib/bundle.test.ts | 27 +++++++++++++++++++ .../src/lib/bundle.ts | 12 ++++++++- 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/plugins/catalog-backend-module-openapi/src/lib/bundle.test.ts b/plugins/catalog-backend-module-openapi/src/lib/bundle.test.ts index 0ecd9f7fd1..57ecd54f26 100644 --- a/plugins/catalog-backend-module-openapi/src/lib/bundle.test.ts +++ b/plugins/catalog-backend-module-openapi/src/lib/bundle.test.ts @@ -88,6 +88,33 @@ describe('bundleOpenApiSpecification', () => { resolveUrl, ); + expect(result).toEqual(expectedResult.trimStart()); + }); + it('should use the urlreaders to fetch $refs', async () => { + const spec = ` + openapi: "3.0.0" + info: + version: 1.0.0 + title: Swagger Petstore + license: + name: MIT + servers: + - url: http://petstore.swagger.io/v1 + paths: + /pets: + get: + $ref: "https://foo.com/paths/pets/list.yaml" + `; + + read.mockResolvedValue(list); + + const result = await bundleOpenApiSpecification( + spec, + 'https://github.com/owner/repo/blob/main/catalog-info.yaml', + read, + resolveUrl, + ); + expect(result).toEqual(expectedResult.trimStart()); }); }); diff --git a/plugins/catalog-backend-module-openapi/src/lib/bundle.ts b/plugins/catalog-backend-module-openapi/src/lib/bundle.ts index 6ac8d211e2..8dd880c234 100644 --- a/plugins/catalog-backend-module-openapi/src/lib/bundle.ts +++ b/plugins/catalog-backend-module-openapi/src/lib/bundle.ts @@ -47,11 +47,21 @@ export async function bundleOpenApiSpecification( return await read(url); }, }; + const httpUrlReaderResolver: SwaggerParser.ResolverOptions = { + canRead: ref => { + const protocol = getProtocol(ref.url); + return protocol === 'http' || protocol === 'https'; + }, + read: async ref => { + const url = resolveUrl(ref.url, baseUrl); + return await read(url); + }, + }; const options: SwaggerParser.Options = { resolve: { file: fileUrlReaderResolver, - http: true, + http: httpUrlReaderResolver, }, }; const specObject = parse(specification); From 4ce887400d94a365dc2141cd4ef59b91d0fb6476 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Sat, 15 Oct 2022 16:13:48 +0200 Subject: [PATCH 218/278] add changeset Signed-off-by: Kiss Miklos --- .changeset/forty-jokes-lie.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/forty-jokes-lie.md diff --git a/.changeset/forty-jokes-lie.md b/.changeset/forty-jokes-lie.md new file mode 100644 index 0000000000..bd44898004 --- /dev/null +++ b/.changeset/forty-jokes-lie.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-openapi': patch +--- + +Added support to use the `UrlReaders` when `$ref` pointing to a URL. From 0d0f30d87e4a2fcb230becde1f11a35742edcf52 Mon Sep 17 00:00:00 2001 From: Viachaslau Auchynnikau Date: Sat, 15 Oct 2022 17:18:31 +0300 Subject: [PATCH 219/278] fix(microsite): added changeset for core-components Signed-off-by: Viachaslau Auchynnikau --- .changeset/pretty-flies-agree.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/pretty-flies-agree.md diff --git a/.changeset/pretty-flies-agree.md b/.changeset/pretty-flies-agree.md new file mode 100644 index 0000000000..da7ac4f6f5 --- /dev/null +++ b/.changeset/pretty-flies-agree.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Fixed layout for core-components docs where table was broken by splitting with code sample From a0da6c275d3b906a3c073460901f1fe81cdabba9 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Sun, 16 Oct 2022 13:15:54 +0200 Subject: [PATCH 220/278] port orphan cleanup script to bash Signed-off-by: Kiss Miklos --- contrib/scripts/orphan-clean-up/README.md | 35 ++++++++++++++++--- .../scripts/orphan-clean-up/orphan_cleanup.sh | 20 +++++++++++ 2 files changed, 51 insertions(+), 4 deletions(-) create mode 100755 contrib/scripts/orphan-clean-up/orphan_cleanup.sh diff --git a/contrib/scripts/orphan-clean-up/README.md b/contrib/scripts/orphan-clean-up/README.md index a6a25a4e7d..9f5b2d4e48 100644 --- a/contrib/scripts/orphan-clean-up/README.md +++ b/contrib/scripts/orphan-clean-up/README.md @@ -2,20 +2,47 @@ ## Overview -The Orphan Clean Up script is a basic PowerShell script to delete orphaned entities in the catalog. This script also assumes that you do not have authentication setup for your Backstage API endpoints. +The Orphan Clean Up scripts are a basic scripts to delete orphaned entities in the catalog. + +This script also assumes that you do not have authentication setup for your Backstage API endpoints. _Warning:_ There is a risk of entities being orphaned (and being deleted by this script) in case of the location having problems and returning a 404 status code. This might lead to accidental deletion of entities until the processing loop has recreated the entity. -## Requirements +## PowerShell + +A PowerShell implementation of a the orphan cleanup script. + +### Requirements This script is PowerShell based so therefore needs to be ran in a PowerShell session. If you are not able to use PowerShell the script should give you a clear idea as to how to create it with another scripting language like Bash. -## Usage +### Usage Here's how to use the script: -1. Download the script +1. Download the `OrphanCleanUp.ps1` script 2. Now start a PowerShell session 3. Next navigate to the location you downloaded the script 4. Then run this command replacing `https:\\backstage.my-company.com` with the URL of your Backstage instance: `.\OrphanCleanUp.ps1 https:\\backstage.my-company.com` 5. The script will output the number of orphaned entities it finds and then the name for each one it deletes + +## Bash + +A bash implementation implementation of a the orphan cleanup script. + +### Requirements + +This script is shell based and requires the following programs to be installed on your system: + +- curl +- jq + +### Usage + +Here's how to use the script: + +1. Download the `orphan_cleanup.sh` script +2. Now start a bash session +3. Next navigate to the location you downloaded the script +4. Then run this command replacing `https://backstage.my-company.com` with the URL of your Backstage instance: `./orphan_cleanup.sh https://backstage.my-company.com` +5. The script will output the number of orphaned entities it finds and then the name for each one it deletes diff --git a/contrib/scripts/orphan-clean-up/orphan_cleanup.sh b/contrib/scripts/orphan-clean-up/orphan_cleanup.sh new file mode 100755 index 0000000000..a5938fd445 --- /dev/null +++ b/contrib/scripts/orphan-clean-up/orphan_cleanup.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# Cleanes up orphaned entities for the provided Backstage URL, defaults to the local backend +BACKSTAGE_URL=${1:-'http://localhost:7007'} +echo $BACKSTAGE_URL + +ORPHAN_API_URL="$BACKSTAGE_URL/api/catalog/entities?filter=metadata.annotations.backstage.io/orphan=true" +ORPHAN_DELETE_API_URL="$BACKSTAGE_URL/api/catalog/entities/by-uid" + +ORPHANS=$(curl -s $ORPHAN_API_URL) + +echo "" +echo "Found $(echo $ORPHANS | jq length ) orphaned entities" +echo "" + +jq -c '.[]' <<< $ORPHANS | while read ORPHAN; do + echo $ORPHAN | jq "." + echo "Deleting orphan entity: $(echo $ORPHAN | jq -r .metadata.name) of kind: $(echo $ORPHAN | jq -r .kind)" + curl -X DELETE "$ORPHAN_DELETE_API_URL/$(echo $ORPHAN | jq -r .metadata.uid)" +done From ffedbef726b0c1dff3019c8cf6001d0ec5e71b27 Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Sun, 16 Oct 2022 13:20:14 +0200 Subject: [PATCH 221/278] fix spelling Signed-off-by: Kiss Miklos --- contrib/scripts/orphan-clean-up/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/scripts/orphan-clean-up/README.md b/contrib/scripts/orphan-clean-up/README.md index 9f5b2d4e48..6fdf51bbbf 100644 --- a/contrib/scripts/orphan-clean-up/README.md +++ b/contrib/scripts/orphan-clean-up/README.md @@ -10,7 +10,7 @@ _Warning:_ There is a risk of entities being orphaned (and being deleted by this ## PowerShell -A PowerShell implementation of a the orphan cleanup script. +A PowerShell implementation of the orphan cleanup script. ### Requirements @@ -28,7 +28,7 @@ Here's how to use the script: ## Bash -A bash implementation implementation of a the orphan cleanup script. +A bash implementation of the orphan cleanup script. ### Requirements From 392c96baec43626d2d1ab84e148fa16c7aac912a Mon Sep 17 00:00:00 2001 From: Kiss Miklos Date: Sun, 16 Oct 2022 23:08:08 +0200 Subject: [PATCH 222/278] set pipefail Signed-off-by: Kiss Miklos --- contrib/scripts/orphan-clean-up/orphan_cleanup.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/contrib/scripts/orphan-clean-up/orphan_cleanup.sh b/contrib/scripts/orphan-clean-up/orphan_cleanup.sh index a5938fd445..6ffe4737fb 100755 --- a/contrib/scripts/orphan-clean-up/orphan_cleanup.sh +++ b/contrib/scripts/orphan-clean-up/orphan_cleanup.sh @@ -1,5 +1,7 @@ #!/bin/bash +set -euo pipefail + # Cleanes up orphaned entities for the provided Backstage URL, defaults to the local backend BACKSTAGE_URL=${1:-'http://localhost:7007'} echo $BACKSTAGE_URL From c8893837e33a331e9659f9133091c9848ebffb2b Mon Sep 17 00:00:00 2001 From: David Jetelina <6594163+djetelina@users.noreply.github.com> Date: Mon, 17 Oct 2022 06:05:58 +0200 Subject: [PATCH 223/278] Delete gke-usage.yaml The plugin is unmaintained, its repository is archived https://github.com/BESTSELLER/backstage-plugin-gkeusage/issues/255#issuecomment-1240335020 Signed-off-by: David Jetelina <6594163+djetelina@users.noreply.github.com> --- microsite/data/plugins/gke-usage.yaml | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 microsite/data/plugins/gke-usage.yaml diff --git a/microsite/data/plugins/gke-usage.yaml b/microsite/data/plugins/gke-usage.yaml deleted file mode 100644 index 9668b18fdf..0000000000 --- a/microsite/data/plugins/gke-usage.yaml +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: GKE Usage -author: BESTSELLER -authorUrl: https://bestsellerit.com -category: Discovery -description: This plugin will show you the cost and resource usage of your application within Google Kubernetes Engine (GKE). -documentation: https://github.com/BESTSELLER/backstage-plugin-gkeusage/blob/master/README.md -iconUrl: img/gke-logo.png -npmPackageName: '@bestsellerit/backstage-plugin-gkeusage' -tags: - - gke - - cost - - google - - usage - - metering From de676888bc96e6a45e4b2b36fa6bff479da9c076 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Mon, 17 Oct 2022 09:42:47 +0200 Subject: [PATCH 224/278] add accidentally missing cluster locator config MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/rude-tables-shout.md | 5 +++ .../{schema.d.ts => config.d.ts} | 32 ++++++++++++------- plugins/kubernetes-backend/package.json | 4 +-- 3 files changed, 27 insertions(+), 14 deletions(-) create mode 100644 .changeset/rude-tables-shout.md rename plugins/kubernetes-backend/{schema.d.ts => config.d.ts} (94%) diff --git a/.changeset/rude-tables-shout.md b/.changeset/rude-tables-shout.md new file mode 100644 index 0000000000..e27af45719 --- /dev/null +++ b/.changeset/rude-tables-shout.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kubernetes-backend': patch +--- + +Added missing cluster locator configuration schema entries, for the catalog and local proxy types diff --git a/plugins/kubernetes-backend/schema.d.ts b/plugins/kubernetes-backend/config.d.ts similarity index 94% rename from plugins/kubernetes-backend/schema.d.ts rename to plugins/kubernetes-backend/config.d.ts index 59fa7a5d97..2a514394d8 100644 --- a/plugins/kubernetes-backend/schema.d.ts +++ b/plugins/kubernetes-backend/config.d.ts @@ -31,18 +31,6 @@ export interface Config { type: 'multiTenant'; }; clusterLocatorMethods: Array< - | { - /** @visibility frontend */ - type: 'gke'; - /** @visibility frontend */ - projectId: string; - /** @visibility frontend */ - region?: string; - /** @visibility frontend */ - skipTLSVerify?: boolean; - /** @visibility frontend */ - skipMetricsLookup?: boolean; - } | { /** @visibility frontend */ type: 'config'; @@ -68,6 +56,26 @@ export interface Config { skipMetricsLookup?: boolean; }>; } + | { + /** @visibility frontend */ + type: 'catalog'; + } + | { + /** @visibility frontend */ + type: 'localKubectlProxy'; + } + | { + /** @visibility frontend */ + type: 'gke'; + /** @visibility frontend */ + projectId: string; + /** @visibility frontend */ + region?: string; + /** @visibility frontend */ + skipTLSVerify?: boolean; + /** @visibility frontend */ + skipMetricsLookup?: boolean; + } >; customResources?: Array<{ group: string; diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index 25c112e9b6..7bb9576cb8 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -23,7 +23,7 @@ "backstage", "kubernetes" ], - "configSchema": "schema.d.ts", + "configSchema": "config.d.ts", "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", @@ -69,6 +69,6 @@ }, "files": [ "dist", - "schema.d.ts" + "config.d.ts" ] } From 50f3734db50a9b0d3ae137b8b6b80692e94a7312 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Oct 2022 08:20:56 +0000 Subject: [PATCH 225/278] Update dependency @octokit/request to v6.2.2 Signed-off-by: Renovate Bot --- yarn.lock | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index 8c8486ea69..f61a18438a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11594,16 +11594,16 @@ __metadata: linkType: hard "@octokit/request@npm:^6.0.0": - version: 6.2.1 - resolution: "@octokit/request@npm:6.2.1" + version: 6.2.2 + resolution: "@octokit/request@npm:6.2.2" dependencies: "@octokit/endpoint": ^7.0.0 "@octokit/request-error": ^3.0.0 - "@octokit/types": ^7.0.0 + "@octokit/types": ^8.0.0 is-plain-object: ^5.0.0 node-fetch: ^2.6.7 universal-user-agent: ^6.0.0 - checksum: f0a3e878de8c2e6930da5af835d9a3750800eff9ba66af02400dc75238475a9b9c2c5473047792c0f37c2c371095a36485c0729c419873bdccb6058bb8637685 + checksum: adbeb38807c60b53d32d9b69be0c1f861c26698bc6f5f3f7e05d26972290dc4867827dd333bdd801818c347e5723efd049a2b9848c6c8bf74a2032968dede0ff languageName: node linkType: hard From 24b40140c49d820e12b73457a22ce1c33314d262 Mon Sep 17 00:00:00 2001 From: MT Lewis Date: Mon, 10 Oct 2022 16:08:41 +0100 Subject: [PATCH 226/278] build: add __tests__ and __mocks__ dirs to relevant parts of eslint-factory Signed-off-by: MT Lewis --- .changeset/great-crews-own.md | 14 ++++++++++++++ packages/cli/config/eslint-factory.js | 15 ++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 .changeset/great-crews-own.md diff --git a/.changeset/great-crews-own.md b/.changeset/great-crews-own.md new file mode 100644 index 0000000000..96633bc857 --- /dev/null +++ b/.changeset/great-crews-own.md @@ -0,0 +1,14 @@ +--- +'@backstage/cli': minor +--- + +Treat files in `__tests__` and `__mocks__` directories as test files for linting +purposes. + +Updates the parts of the eslint configuration generator that specify which files +should be treated as test code to include any files under directories named +`__tests__` or `__mocks__`, to match the default file locations used in Jest. + +cf. +https://jestjs.io/docs/configuration/#testmatch-arraystring +https://jestjs.io/docs/manual-mocks#mocking-user-modules diff --git a/packages/cli/config/eslint-factory.js b/packages/cli/config/eslint-factory.js index 6e2a510c4a..d764edb2b5 100644 --- a/packages/cli/config/eslint-factory.js +++ b/packages/cli/config/eslint-factory.js @@ -96,12 +96,16 @@ function createConfig(dir, extraConfig = {}) { `!${joinPath(dir, 'src/**')}`, joinPath(dir, 'src/**/*.test.*'), joinPath(dir, 'src/**/*.stories.*'), + joinPath(dir, 'src/**/__tests__/**'), + joinPath(dir, 'src/**/__mocks__/**'), joinPath(dir, 'src/setupTests.*'), ] : [ // Legacy config for packages that don't provide a dir '**/*.test.*', '**/*.stories.*', + '**/__tests__/**', + '**/__mocks__/**', '**/src/setupTests.*', '**/dev/**', ], @@ -137,6 +141,8 @@ function createConfig(dir, extraConfig = {}) { // Prevent imports of stories or tests '*.stories*', '*.test*', + '**/__tests__/**', + '**/__mocks__/**', ], }, ], @@ -159,7 +165,14 @@ function createConfig(dir, extraConfig = {}) { }, }, { - files: ['**/*.test.*', '**/*.stories.*', 'src/setupTests.*', '!src/**'], + files: [ + '**/*.test.*', + '**/*.stories.*', + '**/__tests__/**', + '**/__mocks__/**', + 'src/setupTests.*', + '!src/**', + ], rules: { ...testRules, 'no-restricted-syntax': [ From 18469522768181119ca91293ba09a2c4da046151 Mon Sep 17 00:00:00 2001 From: MT Lewis Date: Mon, 17 Oct 2022 09:37:51 +0100 Subject: [PATCH 227/278] build: switch eslint-factory to use __testUtils__ instead of __tests__ Signed-off-by: MT Lewis --- .changeset/great-crews-own.md | 14 ++++++++------ packages/cli/config/eslint-factory.js | 8 ++++---- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/.changeset/great-crews-own.md b/.changeset/great-crews-own.md index 96633bc857..676eb7cf3d 100644 --- a/.changeset/great-crews-own.md +++ b/.changeset/great-crews-own.md @@ -2,13 +2,15 @@ '@backstage/cli': minor --- -Treat files in `__tests__` and `__mocks__` directories as test files for linting +Treat files in `__testUtils__` and `__mocks__` directories as test files for linting purposes. Updates the parts of the eslint configuration generator that specify which files -should be treated as test code to include any files under directories named -`__tests__` or `__mocks__`, to match the default file locations used in Jest. +should be treated as test code to include any files under two additional +directories: -cf. -https://jestjs.io/docs/configuration/#testmatch-arraystring -https://jestjs.io/docs/manual-mocks#mocking-user-modules +- `__mocks__`: this is the directory used by Jest[0] for mock code. +- `__testUtils__`: a suggested location for utility code executed only when + running tests. + +[0]: https://jestjs.io/docs/manual-mocks#mocking-user-modules diff --git a/packages/cli/config/eslint-factory.js b/packages/cli/config/eslint-factory.js index d764edb2b5..e213f58e4e 100644 --- a/packages/cli/config/eslint-factory.js +++ b/packages/cli/config/eslint-factory.js @@ -96,7 +96,7 @@ function createConfig(dir, extraConfig = {}) { `!${joinPath(dir, 'src/**')}`, joinPath(dir, 'src/**/*.test.*'), joinPath(dir, 'src/**/*.stories.*'), - joinPath(dir, 'src/**/__tests__/**'), + joinPath(dir, 'src/**/__testUtils__/**'), joinPath(dir, 'src/**/__mocks__/**'), joinPath(dir, 'src/setupTests.*'), ] @@ -104,7 +104,7 @@ function createConfig(dir, extraConfig = {}) { // Legacy config for packages that don't provide a dir '**/*.test.*', '**/*.stories.*', - '**/__tests__/**', + '**/__testUtils__/**', '**/__mocks__/**', '**/src/setupTests.*', '**/dev/**', @@ -141,7 +141,7 @@ function createConfig(dir, extraConfig = {}) { // Prevent imports of stories or tests '*.stories*', '*.test*', - '**/__tests__/**', + '**/__testUtils__/**', '**/__mocks__/**', ], }, @@ -168,7 +168,7 @@ function createConfig(dir, extraConfig = {}) { files: [ '**/*.test.*', '**/*.stories.*', - '**/__tests__/**', + '**/__testUtils__/**', '**/__mocks__/**', 'src/setupTests.*', '!src/**', From 0dd31e8cf2784867f708b059d7da93e1bdd119e8 Mon Sep 17 00:00:00 2001 From: MT Lewis Date: Mon, 17 Oct 2022 09:38:31 +0100 Subject: [PATCH 228/278] chore: switch eslint-factory changeset to 'patch' Signed-off-by: MT Lewis --- .changeset/great-crews-own.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/great-crews-own.md b/.changeset/great-crews-own.md index 676eb7cf3d..dfe4d62da9 100644 --- a/.changeset/great-crews-own.md +++ b/.changeset/great-crews-own.md @@ -1,5 +1,5 @@ --- -'@backstage/cli': minor +'@backstage/cli': patch --- Treat files in `__testUtils__` and `__mocks__` directories as test files for linting From 1b009ea9bca5f11ef3b3fd21245ae70752ce0d73 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Oct 2022 09:06:47 +0000 Subject: [PATCH 229/278] Update dependency @types/puppeteer to v5.4.7 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index f61a18438a..3ac51d35b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14327,11 +14327,11 @@ __metadata: linkType: hard "@types/puppeteer@npm:^5.4.4": - version: 5.4.6 - resolution: "@types/puppeteer@npm:5.4.6" + version: 5.4.7 + resolution: "@types/puppeteer@npm:5.4.7" dependencies: "@types/node": "*" - checksum: b969230812e95fcc5eee83151731e51b287cc934169f552034d8eea58ce9b5beb4ba09b9ce05b75d9510241a85d244f28e8b0a0a4b9f7dffcad8c37a39288260 + checksum: 491c0ca2d879b72e869f5152a9ea7de1356a66f44ef6210fdd5c5036d893b4ee2956212e2f3353c7045b9e56d1a4cea408f41a26d7cf3708774c4d6c19a7c654 languageName: node linkType: hard From 75b544424566c1e6c7ef6d64372a829ed0d9f9a3 Mon Sep 17 00:00:00 2001 From: Philipp Hugenroth Date: Mon, 17 Oct 2022 11:49:52 +0200 Subject: [PATCH 230/278] Replace outdated url of Cookiecuter.dockerfile - Clicked the URL & it was outdated due to this change: https://github.com/backstage/backstage/commit/ad9d74ff240c934ce46a474ae3f440d5f5fa493b - No update or verification of the actual documenation content Signed-off-by: Philipp Hugenroth --- contrib/docker/cookiecutter-with-jinja2-extensions/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contrib/docker/cookiecutter-with-jinja2-extensions/README.md b/contrib/docker/cookiecutter-with-jinja2-extensions/README.md index 0b754fa4ce..d51b46cb96 100644 --- a/contrib/docker/cookiecutter-with-jinja2-extensions/README.md +++ b/contrib/docker/cookiecutter-with-jinja2-extensions/README.md @@ -12,7 +12,7 @@ Using Cookiecutter extensions is a two-step process: This step depends on how the scaffolder is setup to use Cookiecutter: - Using a local Cookiecutter, or -- Using a Cookiecutter Docker image, e.g. [spotify/backstage-cookiecutter](https://github.com/backstage/backstage/blob/37e35b91/plugins/scaffolder-backend/scripts/Cookiecutter.dockerfile). +- Using a Cookiecutter Docker image, e.g. [spotify/backstage-cookiecutter](https://github.com/backstage/backstage/blob/master/plugins/scaffolder-backend/scripts/Cookiecutter.dockerfile). Say we want to install [`jinja2_custom_filters_extension`](https://pypi.org/project/jinja2-custom-filters-extension/) to use the `upper_case_first_letter` filter in a Cookiecutter template. From f3d272cf579db99586e79bca9d698686079d05db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Mon, 17 Oct 2022 12:08:05 +0200 Subject: [PATCH 231/278] Make sure to reload score card contents when props change MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/itchy-rockets-hide.md | 5 +++++ .../src/components/ScorecardsCard/ScorecardsCard.tsx | 10 +++++----- 2 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 .changeset/itchy-rockets-hide.md diff --git a/.changeset/itchy-rockets-hide.md b/.changeset/itchy-rockets-hide.md new file mode 100644 index 0000000000..ec6df7fa6d --- /dev/null +++ b/.changeset/itchy-rockets-hide.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-tech-insights': patch +--- + +Make sure to reload score card contents when props change diff --git a/plugins/tech-insights/src/components/ScorecardsCard/ScorecardsCard.tsx b/plugins/tech-insights/src/components/ScorecardsCard/ScorecardsCard.tsx index 52909acad9..4bbc283829 100644 --- a/plugins/tech-insights/src/components/ScorecardsCard/ScorecardsCard.tsx +++ b/plugins/tech-insights/src/components/ScorecardsCard/ScorecardsCard.tsx @@ -16,10 +16,9 @@ import React from 'react'; import useAsync from 'react-use/lib/useAsync'; -import { Progress } from '@backstage/core-components'; +import { ErrorPanel, Progress } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; import { ScorecardInfo } from '../ScorecardsInfo'; -import Alert from '@material-ui/lab/Alert'; import { techInsightsApiRef } from '../../api/TechInsightsApi'; import { useEntity } from '@backstage/plugin-catalog-react'; import { getCompoundEntityRef } from '@backstage/catalog-model'; @@ -31,15 +30,16 @@ export const ScorecardsCard = (props: { }) => { const { title, description, checksId } = props; const api = useApi(techInsightsApiRef); - const { namespace, kind, name } = getCompoundEntityRef(useEntity().entity); + const { entity } = useEntity(); const { value, loading, error } = useAsync( - async () => await api.runChecks({ namespace, kind, name }, checksId), + async () => await api.runChecks(getCompoundEntityRef(entity), checksId), + [api, entity, JSON.stringify(checksId)], ); if (loading) { return ; } else if (error) { - return {error.message}; + return ; } return ( From 9c595302cb7c0912d06d78bcd933dacbb376b5c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Mon, 17 Oct 2022 13:19:53 +0200 Subject: [PATCH 232/278] Normalize on winston version \^3.2.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .changeset/good-plants-bathe.md | 7 +++++++ .../cli/templates/default-backend-plugin/package.json.hbs | 2 +- plugins/sonarqube-backend/package.json | 2 +- plugins/vault-backend/package.json | 2 +- yarn.lock | 6 +++--- 5 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 .changeset/good-plants-bathe.md diff --git a/.changeset/good-plants-bathe.md b/.changeset/good-plants-bathe.md new file mode 100644 index 0000000000..371251ac13 --- /dev/null +++ b/.changeset/good-plants-bathe.md @@ -0,0 +1,7 @@ +--- +'@backstage/cli': patch +'@backstage/plugin-sonarqube-backend': patch +'@backstage/plugin-vault-backend': patch +--- + +Normalize on winston version ^3.2.1 diff --git a/packages/cli/templates/default-backend-plugin/package.json.hbs b/packages/cli/templates/default-backend-plugin/package.json.hbs index 0a72a5d415..df381159f0 100644 --- a/packages/cli/templates/default-backend-plugin/package.json.hbs +++ b/packages/cli/templates/default-backend-plugin/package.json.hbs @@ -33,7 +33,7 @@ "@types/express": "{{versionQuery '@types/express' '4.17.13'}}", "express": "{{versionQuery 'express' '4.18.1'}}", "express-promise-router": "{{versionQuery 'express-promise-router' '4.1.0'}}", - "winston": "{{versionQuery 'winston' '3.8.1'}}", + "winston": "{{versionQuery 'winston' '3.2.1'}}", "node-fetch": "{{versionQuery 'node-fetch' '2.6.7'}}", "yn": "{{versionQuery 'yn' '4.0.0'}}" }, diff --git a/plugins/sonarqube-backend/package.json b/plugins/sonarqube-backend/package.json index 72488804a9..09eba7ec75 100644 --- a/plugins/sonarqube-backend/package.json +++ b/plugins/sonarqube-backend/package.json @@ -29,7 +29,7 @@ "express": "^4.18.1", "express-promise-router": "^4.1.0", "node-fetch": "^2.6.7", - "winston": "^3.8.1", + "winston": "^3.2.1", "yn": "^5.0.0" }, "devDependencies": { diff --git a/plugins/vault-backend/package.json b/plugins/vault-backend/package.json index 2e12305863..d0a7854e87 100644 --- a/plugins/vault-backend/package.json +++ b/plugins/vault-backend/package.json @@ -46,7 +46,7 @@ "helmet": "^6.0.0", "node-fetch": "^2.6.7", "p-limit": "^3.1.0", - "winston": "^3.7.2", + "winston": "^3.2.1", "yn": "^5.0.0" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index f61a18438a..9d8a6ff504 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7043,7 +7043,7 @@ __metadata: msw: ^0.47.0 node-fetch: ^2.6.7 supertest: ^6.2.4 - winston: ^3.8.1 + winston: ^3.2.1 yn: ^5.0.0 languageName: unknown linkType: soft @@ -7666,7 +7666,7 @@ __metadata: node-fetch: ^2.6.7 p-limit: ^3.1.0 supertest: ^6.1.6 - winston: ^3.7.2 + winston: ^3.2.1 yn: ^5.0.0 languageName: unknown linkType: soft @@ -39565,7 +39565,7 @@ __metadata: languageName: node linkType: hard -"winston@npm:^3.2.1, winston@npm:^3.7.2, winston@npm:^3.8.1": +"winston@npm:^3.2.1": version: 3.8.2 resolution: "winston@npm:3.8.2" dependencies: From 089fffc3e1d94e75bf95bb180cc49f3ce16d8c85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Mon, 17 Oct 2022 14:23:27 +0200 Subject: [PATCH 233/278] adjust the github slug wording MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- docs/features/software-catalog/well-known-annotations.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/features/software-catalog/well-known-annotations.md b/docs/features/software-catalog/well-known-annotations.md index 46f28dcb01..0a4f5ee400 100644 --- a/docs/features/software-catalog/well-known-annotations.md +++ b/docs/features/software-catalog/well-known-annotations.md @@ -110,7 +110,7 @@ metadata: backstage.io/edit-url: https://github.com/my-org/catalog/edit/master/my-service.jsonnet ``` -These annotations allow customising links from the catalog pages. The view URL +These annotations allow customizing links from the catalog pages. The view URL should point to the canonical metadata YAML that governs this entity. The edit URL should point to the source file for the metadata. In the example above, `my-org` generates its catalog data from Jsonnet files in a monorepo, so the @@ -159,11 +159,11 @@ metadata: github.com/project-slug: backstage/backstage ``` -The value of this annotation is the so-called slug that identifies a project on +The value of this annotation is the so-called slug that identifies a repository on [GitHub](https://github.com) (either the public one, or a private GitHub Enterprise installation) that is related to this entity. It is on the format -`/`, and is the same as can be seen in the URL location -bar of the browser when viewing that project. +`/`, and is the same as can be seen in the URL location +bar of the browser when viewing that repository. Specifying this annotation will enable GitHub related features in Backstage for that entity. From fe0a65e7a7c591611d146bea8d8f5f93b7396123 Mon Sep 17 00:00:00 2001 From: irma12 Date: Mon, 17 Oct 2022 14:48:43 +0200 Subject: [PATCH 234/278] Add api report Signed-off-by: irma12 --- plugins/catalog/api-report.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/plugins/catalog/api-report.md b/plugins/catalog/api-report.md index 71006b53b5..3f72df00e2 100644 --- a/plugins/catalog/api-report.md +++ b/plugins/catalog/api-report.md @@ -167,6 +167,8 @@ export interface CatalogTableProps { // (undocumented) columns?: TableColumn[]; // (undocumented) + emptyContent?: ReactNode; + // (undocumented) subtitle?: string; // (undocumented) tableOptions?: TableProps['options']; @@ -196,6 +198,8 @@ export interface DefaultCatalogPageProps { // (undocumented) columns?: TableColumn[]; // (undocumented) + emptyContent?: ReactNode; + // (undocumented) initialKind?: string; // (undocumented) initiallySelectedFilter?: UserListFilterKind; From da8f9249493376a88d73064cb880721ccb111e5c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Oct 2022 13:58:15 +0000 Subject: [PATCH 235/278] Update dependency passport-saml to v3.2.3 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index f61a18438a..16e491994f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -31670,8 +31670,8 @@ __metadata: linkType: hard "passport-saml@npm:^3.1.2": - version: 3.2.2 - resolution: "passport-saml@npm:3.2.2" + version: 3.2.3 + resolution: "passport-saml@npm:3.2.3" dependencies: "@xmldom/xmldom": ^0.7.5 debug: ^4.3.2 @@ -31680,7 +31680,7 @@ __metadata: xml-encryption: ^2.0.0 xml2js: ^0.4.23 xmlbuilder: ^15.1.1 - checksum: 1ae16bb5df60f70ba822896a1d3b360466f87ef6b45e941d28a91c1f9a681752a040da9e8b02e06c665e9b7277dd862abb384eb5e8b10d3b9e5fdabaa68b1691 + checksum: ccddfa37557ef39219b447285d9b87ad08309b3cd2537aab5df344fd3910d9b506eb36e4f24f2eec35047465f00fbea53b320674de9ae68ea18cbbce17de79f4 languageName: node linkType: hard From b45518929a1a6ebe66556092a8d244c18921bedd Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Mon, 17 Oct 2022 16:25:07 +0200 Subject: [PATCH 236/278] scaffolder-backend: fix subscription leakage in task broker tests Signed-off-by: Patrik Oldsberg --- .../tasks/StorageTaskBroker.test.ts | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.test.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.test.ts index 4fc142a991..421afb2329 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/StorageTaskBroker.test.ts @@ -126,12 +126,15 @@ describe('StorageTaskBroker', () => { const logPromise = new Promise(resolve => { const observedEvents = new Array(); - broker2.event$({ taskId, after: undefined }).subscribe(({ events }) => { - observedEvents.push(...events); - if (events.some(e => e.type === 'completion')) { - resolve(observedEvents); - } - }); + const subscription = broker2 + .event$({ taskId, after: undefined }) + .subscribe(({ events }) => { + observedEvents.push(...events); + if (events.some(e => e.type === 'completion')) { + resolve(observedEvents); + subscription.unsubscribe(); + } + }); }); const task = await broker1.claim(); await task.emitLog('log 1'); @@ -148,11 +151,12 @@ describe('StorageTaskBroker', () => { ]); const afterLogs = await new Promise(resolve => { - broker2 + const subscription = broker2 .event$({ taskId, after: logs[1].id }) - .subscribe(({ events }) => - resolve(events.map(e => e.body.message as string)), - ); + .subscribe(({ events }) => { + resolve(events.map(e => e.body.message as string)); + subscription.unsubscribe(); + }); }); expect(afterLogs).toEqual([ 'log 3', From 9dd79e1c3310e8c37d7ab099a85469b33f8eda81 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 17 Oct 2022 14:55:38 +0000 Subject: [PATCH 237/278] Update dependency @types/luxon to v3.0.2 Signed-off-by: Renovate Bot --- yarn.lock | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/yarn.lock b/yarn.lock index 7d0eabd26e..05d79d90b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13975,13 +13975,20 @@ __metadata: languageName: node linkType: hard -"@types/luxon@npm:*, @types/luxon@npm:^3.0.0": +"@types/luxon@npm:*": version: 3.0.1 resolution: "@types/luxon@npm:3.0.1" checksum: a81444f9b474ea9b3063ab4cc68b917a2634e38b4e229f86c78c35023a32bf5e8d1044d7c229c011291662c976cb6c4cf109dc3d2077c571790a31779a554178 languageName: node linkType: hard +"@types/luxon@npm:^3.0.0": + version: 3.0.2 + resolution: "@types/luxon@npm:3.0.2" + checksum: e47e199c5d70ce16e4eff54b21fdf385065f1134774109b40c36dba8b5fd29a732b763125e93863d6070dd22ba6a3f18dbdd368cf3748aae9f24bb335c5c210d + languageName: node + linkType: hard + "@types/markdown-it@npm:^12.2.3": version: 12.2.3 resolution: "@types/markdown-it@npm:12.2.3" From a7e4adf169a130cd6106eab2385ace88bd842f1f Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Mon, 17 Oct 2022 17:00:10 +0100 Subject: [PATCH 238/278] Updated import location Signed-off-by: Harry Hogg --- plugins/permission-node/api-report.md | 4 ++-- .../src/integration/createPermissionIntegrationRouter.ts | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/plugins/permission-node/api-report.md b/plugins/permission-node/api-report.md index 59c85818ba..02696acc80 100644 --- a/plugins/permission-node/api-report.md +++ b/plugins/permission-node/api-report.md @@ -14,7 +14,6 @@ import { DefinitivePolicyDecision } from '@backstage/plugin-permission-common'; import { EvaluatorRequestOptions } from '@backstage/plugin-permission-common'; import express from 'express'; import { IdentifiedPermissionMessage } from '@backstage/plugin-permission-common'; -import { JsonSchema7Type } from 'zod-to-json-schema/src/parseDef'; import { NotCriteria } from '@backstage/plugin-permission-common'; import { Permission } from '@backstage/plugin-permission-common'; import { PermissionCondition } from '@backstage/plugin-permission-common'; @@ -27,6 +26,7 @@ import { QueryPermissionRequest } from '@backstage/plugin-permission-common'; import { ResourcePermission } from '@backstage/plugin-permission-common'; import { TokenManager } from '@backstage/backend-common'; import { z } from 'zod'; +import zodToJsonSchema from 'zod-to-json-schema'; // @public export type ApplyConditionsRequest = { @@ -172,7 +172,7 @@ export type MetaDataResponseSerializedRule = { name: string; description: string; resourceType: string; - paramsSchema?: JsonSchema7Type; + paramsSchema?: ReturnType; }; // @public diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts index f912a2c4e0..ffdd1153e2 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts @@ -36,7 +36,6 @@ import { isNotCriteria, isOrCriteria, } from './util'; -import { JsonSchema7Type } from 'zod-to-json-schema/src/parseDef'; const permissionCriteriaSchema: z.ZodSchema< PermissionCriteria @@ -113,7 +112,7 @@ export type MetaDataResponseSerializedRule = { name: string; description: string; resourceType: string; - paramsSchema?: JsonSchema7Type; + paramsSchema?: ReturnType; }; /** From fd7fc3902ec1483cd53b63f371e1e8cfa9f726c1 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Mon, 17 Oct 2022 17:45:16 +0100 Subject: [PATCH 239/278] Updated MetaData wording to Metadata Signed-off-by: Harry Hogg --- plugins/permission-node/api-report.md | 6 +++--- .../integration/createPermissionIntegrationRouter.ts | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/plugins/permission-node/api-report.md b/plugins/permission-node/api-report.md index 02696acc80..3f712fe362 100644 --- a/plugins/permission-node/api-report.md +++ b/plugins/permission-node/api-report.md @@ -162,13 +162,13 @@ export const makeCreatePermissionRule: < ) => PermissionRule; // @public -export type MetaDataResponse = { +export type MetadataResponse = { permissions?: Permission[]; - rules: MetaDataResponseSerializedRule[]; + rules: MetadataResponseSerializedRule[]; }; // @public -export type MetaDataResponseSerializedRule = { +export type MetadataResponseSerializedRule = { name: string; description: string; resourceType: string; diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts index ffdd1153e2..23b59c9c43 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts @@ -108,7 +108,7 @@ export type ApplyConditionsResponse = { * * @public */ -export type MetaDataResponseSerializedRule = { +export type MetadataResponseSerializedRule = { name: string; description: string; resourceType: string; @@ -120,9 +120,9 @@ export type MetaDataResponseSerializedRule = { * * @public */ -export type MetaDataResponse = { +export type MetadataResponse = { permissions?: Permission[]; - rules: MetaDataResponseSerializedRule[]; + rules: MetadataResponseSerializedRule[]; }; const applyConditions = ( @@ -214,7 +214,7 @@ export const createPermissionIntegrationRouter = < router.use(express.json()); router.get('/.well-known/backstage/permissions/metadata', (_, res) => { - const serializedRules: MetaDataResponseSerializedRule[] = rules.map( + const serializedRules: MetadataResponseSerializedRule[] = rules.map( rule => ({ name: rule.name, description: rule.description, @@ -223,7 +223,7 @@ export const createPermissionIntegrationRouter = < }), ); - const responseJson: MetaDataResponse = { + const responseJson: MetadataResponse = { permissions, rules: serializedRules, }; From e8cb790b1f5a4f9ecde132d6ec0d60811a8a0886 Mon Sep 17 00:00:00 2001 From: alissonfabiano <56898864+alissonfabiano@users.noreply.github.com> Date: Mon, 17 Oct 2022 18:45:43 +0100 Subject: [PATCH 240/278] Update .changeset/brown-days-pretend.md Co-authored-by: Johan Haals Signed-off-by: alissonfabiano <56898864+alissonfabiano@users.noreply.github.com> --- .changeset/brown-days-pretend.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/brown-days-pretend.md b/.changeset/brown-days-pretend.md index de4363e5aa..4b6a328724 100644 --- a/.changeset/brown-days-pretend.md +++ b/.changeset/brown-days-pretend.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-tech-insights': minor +'@backstage/plugin-tech-insights': patch --- Fixed bug when sending data by Post in `runChecks` and `runBulkChecks` functions of the `TechInsightsClient` class, the default `Content-Type` used was `plain/text` From 6dd7d7f018ee4cdd6611b3d88cf6e2edd60e7d20 Mon Sep 17 00:00:00 2001 From: irma12 Date: Mon, 17 Oct 2022 20:19:55 +0200 Subject: [PATCH 241/278] Remove styling Signed-off-by: irma12 --- .../src/components/CatalogTable/CatalogTable.tsx | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx b/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx index ed782c4e9a..482352c2f8 100644 --- a/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx +++ b/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx @@ -56,14 +56,6 @@ export interface CatalogTableProps { subtitle?: string; } -const useStyles = makeStyles(theme => ({ - empty: { - padding: theme.spacing(2), - display: 'flex', - justifyContent: 'center', - }, -})); - const YellowStar = withStyles({ root: { color: '#f3ba37', @@ -75,7 +67,6 @@ export const CatalogTable = (props: CatalogTableProps) => { const { columns, actions, tableOptions, subtitle, emptyContent } = props; const { isStarredEntity, toggleStarredEntity } = useStarredEntities(); const { loading, error, entities, filters } = useEntityList(); - const classes = useStyles(); const defaultColumns: TableColumn[] = useMemo(() => { return [ @@ -238,9 +229,7 @@ export const CatalogTable = (props: CatalogTableProps) => { data={rows} actions={actions || defaultActions} subtitle={subtitle} - emptyContent={ - emptyContent &&
{emptyContent}
- } + emptyContent={emptyContent} /> ); }; From 42c22f2695ed05572e8f87383548d8bb783923c5 Mon Sep 17 00:00:00 2001 From: irma12 Date: Mon, 17 Oct 2022 20:20:43 +0200 Subject: [PATCH 242/278] Remove unused components Signed-off-by: irma12 --- plugins/catalog/src/components/CatalogTable/CatalogTable.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx b/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx index 482352c2f8..935e002375 100644 --- a/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx +++ b/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx @@ -32,7 +32,7 @@ import { useEntityList, useStarredEntities, } from '@backstage/plugin-catalog-react'; -import { makeStyles, Typography } from '@material-ui/core'; +import { Typography } from '@material-ui/core'; import { withStyles } from '@material-ui/core/styles'; import Edit from '@material-ui/icons/Edit'; import OpenInNew from '@material-ui/icons/OpenInNew'; From be9474b1034b3c9d84c1c551539c5166f90ed142 Mon Sep 17 00:00:00 2001 From: Patrick Jungermann Date: Mon, 17 Oct 2022 19:37:48 +0200 Subject: [PATCH 243/278] chore(catalog/github): use consistent naming of `[gG]ithub` in code Relates to the discussion at PR #14039. Relates-to: PR #14039 Signed-off-by: Patrick Jungermann --- .changeset/fuzzy-dolls-shake.md | 4 +- .changeset/moody-carrots-shout.md | 2 +- .changeset/tame-ads-complain.md | 18 ++++ docs/integrations/github/discovery.md | 4 +- .../api-report.md | 47 ++++++++-- .../catalog-backend-module-github/config.d.ts | 2 +- ...test.ts => GithubLocationAnalyzer.test.ts} | 8 +- ...nAnalyzer.ts => GithubLocationAnalyzer.ts} | 9 +- .../src/deprecated.ts | 86 +++++++++++++++++++ .../src/index.ts | 12 +-- .../src/lib/index.ts | 2 +- .../src/lib/util.test.ts | 14 +-- .../src/lib/util.ts | 4 +- .../processors/GithubOrgReaderProcessor.ts | 6 +- ...r.test.ts => GithubEntityProvider.test.ts} | 26 +++--- ...ityProvider.ts => GithubEntityProvider.ts} | 18 ++-- ....ts => GithubEntityProviderConfig.test.ts} | 2 +- ...onfig.ts => GithubEntityProviderConfig.ts} | 6 +- ...est.ts => GithubOrgEntityProvider.test.ts} | 8 +- ...Provider.ts => GithubOrgEntityProvider.ts} | 20 ++--- .../GithubEntityProviderCatalogModule.test.ts | 4 +- .../GithubEntityProviderCatalogModule.ts | 6 +- 22 files changed, 224 insertions(+), 84 deletions(-) create mode 100644 .changeset/tame-ads-complain.md rename plugins/catalog-backend-module-github/src/analyzers/{GitHubLocationAnalyzer.test.ts => GithubLocationAnalyzer.test.ts} (95%) rename plugins/catalog-backend-module-github/src/analyzers/{GitHubLocationAnalyzer.ts => GithubLocationAnalyzer.ts} (95%) create mode 100644 plugins/catalog-backend-module-github/src/deprecated.ts rename plugins/catalog-backend-module-github/src/providers/{GitHubEntityProvider.test.ts => GithubEntityProvider.test.ts} (95%) rename plugins/catalog-backend-module-github/src/providers/{GitHubEntityProvider.ts => GithubEntityProvider.ts} (95%) rename plugins/catalog-backend-module-github/src/providers/{GitHubEntityProviderConfig.test.ts => GithubEntityProviderConfig.test.ts} (98%) rename plugins/catalog-backend-module-github/src/providers/{GitHubEntityProviderConfig.ts => GithubEntityProviderConfig.ts} (96%) rename plugins/catalog-backend-module-github/src/providers/{GitHubOrgEntityProvider.test.ts => GithubOrgEntityProvider.test.ts} (97%) rename plugins/catalog-backend-module-github/src/providers/{GitHubOrgEntityProvider.ts => GithubOrgEntityProvider.ts} (92%) diff --git a/.changeset/fuzzy-dolls-shake.md b/.changeset/fuzzy-dolls-shake.md index 35ebcf6103..2d290a3bf3 100644 --- a/.changeset/fuzzy-dolls-shake.md +++ b/.changeset/fuzzy-dolls-shake.md @@ -9,10 +9,10 @@ Add the following to your `CatalogBuilder` to have the repo URL ingestion workin ```ts // catalog.ts -import { GitHubLocationAnalyzer } from '@backstage/plugin-catalog-backend-module-github'; +import { GithubLocationAnalyzer } from '@backstage/plugin-catalog-backend-module-github'; ... builder.addLocationAnalyzers( - new GitHubLocationAnalyzer({ + new GithubLocationAnalyzer({ discovery: env.discovery, config: env.config, }), diff --git a/.changeset/moody-carrots-shout.md b/.changeset/moody-carrots-shout.md index 486590e0ba..6e15fe3ff5 100644 --- a/.changeset/moody-carrots-shout.md +++ b/.changeset/moody-carrots-shout.md @@ -2,4 +2,4 @@ '@backstage/plugin-catalog-backend-module-github': patch --- -Added `GitHubLocationAnalyzer`. This can be used to add to the `CatalogBuilder`. When added this will be used by `RepoLocationAnalyzer` to figure out if the given URL that you are trying to import from the /catalog-import page already contains catalog-info.yaml files. +Added `GithubLocationAnalyzer`. This can be used to add to the `CatalogBuilder`. When added this will be used by `RepoLocationAnalyzer` to figure out if the given URL that you are trying to import from the /catalog-import page already contains catalog-info.yaml files. diff --git a/.changeset/tame-ads-complain.md b/.changeset/tame-ads-complain.md new file mode 100644 index 0000000000..d6b3c47b69 --- /dev/null +++ b/.changeset/tame-ads-complain.md @@ -0,0 +1,18 @@ +--- +'@backstage/plugin-catalog-backend-module-github': patch +--- + +Replaces in-code uses of `GitHub` by `Github` and deprecates old versions. + +Deprecates + +- `GitHubEntityProvider` replaced by `GithubEntityProvider` +- `GitHubLocationAnalyzer` replaced by `GithubLocationAnalyzer` +- `GitHubLocationAnalyzerOptions` replaced by `GithubLocationAnalyzerOptions` +- `GitHubOrgEntityProvider` replaced by `GithubOrgEntityProvider` +- `GitHubOrgEntityProviderOptions` replaced by `GithubOrgEntityProviderOptions` + +Renames + +- `GitHubLocationAnalyzer` to `GithubLocationAnalyzer` +- `GitHubLocationAnalyzerOptions` to `GithubLocationAnalyzerOptions` diff --git a/docs/integrations/github/discovery.md b/docs/integrations/github/discovery.md index 26cd660cde..092a171223 100644 --- a/docs/integrations/github/discovery.md +++ b/docs/integrations/github/discovery.md @@ -30,14 +30,14 @@ And then add the entity provider to your catalog builder: ```diff // In packages/backend/src/plugins/catalog.ts -+ import { GitHubEntityProvider } from '@backstage/plugin-catalog-backend-module-github'; ++ import { GithubEntityProvider } from '@backstage/plugin-catalog-backend-module-github'; export default async function createPlugin( env: PluginEnvironment, ): Promise { const builder = await CatalogBuilder.create(env); + builder.addEntityProvider( -+ GitHubEntityProvider.fromConfig(env.config, { ++ GithubEntityProvider.fromConfig(env.config, { + logger: env.logger, + // optional: alternatively, use scheduler with schedule defined in app-config.yaml + schedule: env.scheduler.createScheduledTaskRunner({ diff --git a/plugins/catalog-backend-module-github/api-report.md b/plugins/catalog-backend-module-github/api-report.md index 4ab534e6d3..5b94f7169e 100644 --- a/plugins/catalog-backend-module-github/api-report.md +++ b/plugins/catalog-backend-module-github/api-report.md @@ -46,7 +46,7 @@ export class GithubDiscoveryProcessor implements CatalogProcessor { ): Promise; } -// @public +// @public @deprecated (undocumented) export class GitHubEntityProvider implements EntityProvider { // (undocumented) connect(connection: EntityProviderConnection): Promise; @@ -65,14 +65,33 @@ export class GitHubEntityProvider implements EntityProvider { refresh(logger: Logger): Promise; } +// @public +export class GithubEntityProvider implements EntityProvider { + // (undocumented) + connect(connection: EntityProviderConnection): Promise; + // (undocumented) + static fromConfig( + config: Config, + options: { + logger: Logger; + schedule?: TaskRunner; + scheduler?: PluginTaskScheduler; + }, + ): GithubEntityProvider[]; + // (undocumented) + getProviderName(): string; + // (undocumented) + refresh(logger: Logger): Promise; +} + // @alpha export const githubEntityProviderCatalogModule: ( options?: undefined, ) => BackendFeature; // @public (undocumented) -export class GitHubLocationAnalyzer implements ScmLocationAnalyzer { - constructor(options: GitHubLocationAnalyzerOptions); +export class GithubLocationAnalyzer implements ScmLocationAnalyzer { + constructor(options: GithubLocationAnalyzerOptions); // (undocumented) analyze({ url, catalogFilename }: AnalyzeOptions): Promise<{ existing: { @@ -89,7 +108,7 @@ export class GitHubLocationAnalyzer implements ScmLocationAnalyzer { } // @public (undocumented) -export type GitHubLocationAnalyzerOptions = { +export type GithubLocationAnalyzerOptions = { config: Config; discovery: PluginEndpointDiscovery; }; @@ -127,8 +146,17 @@ export class GithubMultiOrgReaderProcessor implements CatalogProcessor { ): Promise; } +// @public @deprecated (undocumented) +export class GitHubOrgEntityProvider extends GithubOrgEntityProvider { + // (undocumented) + static fromConfig( + config: Config, + options: GitHubOrgEntityProviderOptions, + ): GitHubOrgEntityProvider; +} + // @public -export class GitHubOrgEntityProvider implements EntityProvider { +export class GithubOrgEntityProvider implements EntityProvider { constructor(options: { id: string; orgUrl: string; @@ -141,15 +169,18 @@ export class GitHubOrgEntityProvider implements EntityProvider { // (undocumented) static fromConfig( config: Config, - options: GitHubOrgEntityProviderOptions, - ): GitHubOrgEntityProvider; + options: GithubOrgEntityProviderOptions, + ): GithubOrgEntityProvider; // (undocumented) getProviderName(): string; read(options?: { logger?: Logger }): Promise; } +// @public @deprecated (undocumented) +export type GitHubOrgEntityProviderOptions = GithubOrgEntityProviderOptions; + // @public -export interface GitHubOrgEntityProviderOptions { +export interface GithubOrgEntityProviderOptions { githubCredentialsProvider?: GithubCredentialsProvider; id: string; logger: Logger; diff --git a/plugins/catalog-backend-module-github/config.d.ts b/plugins/catalog-backend-module-github/config.d.ts index 8648490001..691caedc46 100644 --- a/plugins/catalog-backend-module-github/config.d.ts +++ b/plugins/catalog-backend-module-github/config.d.ts @@ -50,7 +50,7 @@ export interface Config { providers?: { /** - * GitHubEntityProvider configuration + * GithubEntityProvider configuration * * Uses "default" as default id for the single config variant. */ diff --git a/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.test.ts b/plugins/catalog-backend-module-github/src/analyzers/GithubLocationAnalyzer.test.ts similarity index 95% rename from plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.test.ts rename to plugins/catalog-backend-module-github/src/analyzers/GithubLocationAnalyzer.test.ts index 0dcc131502..936f8a3576 100644 --- a/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.test.ts +++ b/plugins/catalog-backend-module-github/src/analyzers/GithubLocationAnalyzer.test.ts @@ -33,7 +33,7 @@ jest.mock('@octokit/rest', () => { }); import { PluginEndpointDiscovery } from '@backstage/backend-common'; -import { GitHubLocationAnalyzer } from './GitHubLocationAnalyzer'; +import { GithubLocationAnalyzer } from './GithubLocationAnalyzer'; import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; import { setupServer } from 'msw/node'; import { rest } from 'msw'; @@ -41,7 +41,7 @@ import { ConfigReader } from '@backstage/config'; const server = setupServer(); -describe('GitHubLocationAnalyzer', () => { +describe('GithubLocationAnalyzer', () => { const mockDiscoveryApi: jest.Mocked = { getBaseUrl: jest.fn().mockResolvedValue('http://localhost:7007'), getExternalBaseUrl: jest.fn(), @@ -114,7 +114,7 @@ describe('GitHubLocationAnalyzer', () => { return Promise.reject(); }); - const analyzer = new GitHubLocationAnalyzer({ + const analyzer = new GithubLocationAnalyzer({ discovery: mockDiscoveryApi, config, }); @@ -139,7 +139,7 @@ describe('GitHubLocationAnalyzer', () => { return Promise.reject(); }); - const analyzer = new GitHubLocationAnalyzer({ + const analyzer = new GithubLocationAnalyzer({ discovery: mockDiscoveryApi, config, }); diff --git a/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.ts b/plugins/catalog-backend-module-github/src/analyzers/GithubLocationAnalyzer.ts similarity index 95% rename from plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.ts rename to plugins/catalog-backend-module-github/src/analyzers/GithubLocationAnalyzer.ts index d1112d2cc0..32ef8bf946 100644 --- a/plugins/catalog-backend-module-github/src/analyzers/GitHubLocationAnalyzer.ts +++ b/plugins/catalog-backend-module-github/src/analyzers/GithubLocationAnalyzer.ts @@ -27,24 +27,27 @@ import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { Config } from '@backstage/config'; /** @public */ -export type GitHubLocationAnalyzerOptions = { +export type GithubLocationAnalyzerOptions = { config: Config; discovery: PluginEndpointDiscovery; }; + /** @public */ -export class GitHubLocationAnalyzer implements ScmLocationAnalyzer { +export class GithubLocationAnalyzer implements ScmLocationAnalyzer { private readonly catalogClient: CatalogApi; private readonly config: Config; - constructor(options: GitHubLocationAnalyzerOptions) { + constructor(options: GithubLocationAnalyzerOptions) { this.config = options.config; this.catalogClient = new CatalogClient({ discoveryApi: options.discovery }); } + supports(url: string) { const integrations = ScmIntegrations.fromConfig(this.config); const integration = integrations.byUrl(url); return integration?.type === 'github'; } + async analyze({ url, catalogFilename }: AnalyzeOptions) { const { owner, name: repo } = parseGitUrl(url); diff --git a/plugins/catalog-backend-module-github/src/deprecated.ts b/plugins/catalog-backend-module-github/src/deprecated.ts new file mode 100644 index 0000000000..d094bb4031 --- /dev/null +++ b/plugins/catalog-backend-module-github/src/deprecated.ts @@ -0,0 +1,86 @@ +/* + * 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 { PluginTaskScheduler, TaskRunner } from '@backstage/backend-tasks'; +import { Config } from '@backstage/config'; +import { + EntityProvider, + EntityProviderConnection, +} from '@backstage/plugin-catalog-backend'; +import { Logger } from 'winston'; +import { GithubEntityProvider } from './providers/GithubEntityProvider'; +import { + GithubOrgEntityProvider, + GithubOrgEntityProviderOptions, +} from './providers/GithubOrgEntityProvider'; + +/** + * @public + * @deprecated Use {@link GithubOrgEntityProvider} instead. + */ +export class GitHubOrgEntityProvider extends GithubOrgEntityProvider { + static fromConfig(config: Config, options: GitHubOrgEntityProviderOptions) { + options.logger.warn( + '[Deprecated] Use GithubOrgEntityProvider instead of GitHubOrgEntityProvider.', + ); + return GithubOrgEntityProvider.fromConfig( + config, + options as GithubOrgEntityProviderOptions, + ) as GitHubOrgEntityProvider; + } +} + +/** + * @public + * @deprecated Use {@link GithubOrgEntityProviderOptions} instead. + */ +export type GitHubOrgEntityProviderOptions = GithubOrgEntityProviderOptions; + +/** + * @public + * @deprecated Use {@link GithubEntityProvider} instead. + */ +export class GitHubEntityProvider implements EntityProvider { + static fromConfig( + config: Config, + options: { + logger: Logger; + schedule?: TaskRunner; + scheduler?: PluginTaskScheduler; + }, + ): GitHubEntityProvider[] { + options.logger.warn( + '[Deprecated] Please use GithubEntityProvider instead of GitHubEntityProvider.', + ); + return GithubEntityProvider.fromConfig(config, options).map( + delegate => new GitHubEntityProvider(delegate), + ); + } + + private constructor(private readonly delegate: GithubEntityProvider) {} + + connect(connection: EntityProviderConnection): Promise { + return this.delegate.connect(connection); + } + + getProviderName(): string { + return this.delegate.getProviderName(); + } + + refresh(logger: Logger): Promise { + return this.delegate.refresh(logger); + } +} diff --git a/plugins/catalog-backend-module-github/src/index.ts b/plugins/catalog-backend-module-github/src/index.ts index 3d7a7a2b4e..f38035db15 100644 --- a/plugins/catalog-backend-module-github/src/index.ts +++ b/plugins/catalog-backend-module-github/src/index.ts @@ -20,13 +20,15 @@ * @packageDocumentation */ -export { GitHubLocationAnalyzer } from './analyzers/GitHubLocationAnalyzer'; -export type { GitHubLocationAnalyzerOptions } from './analyzers/GitHubLocationAnalyzer'; +export { GithubLocationAnalyzer } from './analyzers/GithubLocationAnalyzer'; +export type { GithubLocationAnalyzerOptions } from './analyzers/GithubLocationAnalyzer'; export type { GithubMultiOrgConfig } from './lib'; export { GithubDiscoveryProcessor } from './processors/GithubDiscoveryProcessor'; export { GithubMultiOrgReaderProcessor } from './processors/GithubMultiOrgReaderProcessor'; export { GithubOrgReaderProcessor } from './processors/GithubOrgReaderProcessor'; -export { GitHubEntityProvider } from './providers/GitHubEntityProvider'; -export { GitHubOrgEntityProvider } from './providers/GitHubOrgEntityProvider'; -export type { GitHubOrgEntityProviderOptions } from './providers/GitHubOrgEntityProvider'; +export { GithubEntityProvider } from './providers/GithubEntityProvider'; +export { GithubOrgEntityProvider } from './providers/GithubOrgEntityProvider'; +export type { GithubOrgEntityProviderOptions } from './providers/GithubOrgEntityProvider'; export { githubEntityProviderCatalogModule } from './service/GithubEntityProviderCatalogModule'; + +export * from './deprecated'; diff --git a/plugins/catalog-backend-module-github/src/lib/index.ts b/plugins/catalog-backend-module-github/src/lib/index.ts index 26ec3e8516..6402b69121 100644 --- a/plugins/catalog-backend-module-github/src/lib/index.ts +++ b/plugins/catalog-backend-module-github/src/lib/index.ts @@ -22,4 +22,4 @@ export { getOrganizationUsers, } from './github'; export { assignGroupsToUsers, buildOrgHierarchy } from './org'; -export { parseGitHubOrgUrl } from './util'; +export { parseGithubOrgUrl } from './util'; diff --git a/plugins/catalog-backend-module-github/src/lib/util.test.ts b/plugins/catalog-backend-module-github/src/lib/util.test.ts index c530d2bcc9..7aca6839ea 100644 --- a/plugins/catalog-backend-module-github/src/lib/util.test.ts +++ b/plugins/catalog-backend-module-github/src/lib/util.test.ts @@ -14,17 +14,17 @@ * limitations under the License. */ -import { GithubTopicFilters } from '../providers/GitHubEntityProviderConfig'; -import { parseGitHubOrgUrl, satisfiesTopicFilter } from './util'; +import { GithubTopicFilters } from '../providers/GithubEntityProviderConfig'; +import { parseGithubOrgUrl, satisfiesTopicFilter } from './util'; -describe('parseGitHubOrgUrl', () => { +describe('parseGithubOrgUrl', () => { it('only supports clean org urls, and decodes them', () => { - expect(() => parseGitHubOrgUrl('https://github.com')).toThrow(); - expect(() => parseGitHubOrgUrl('https://github.com/org/foo')).toThrow(); + expect(() => parseGithubOrgUrl('https://github.com')).toThrow(); + expect(() => parseGithubOrgUrl('https://github.com/org/foo')).toThrow(); expect(() => - parseGitHubOrgUrl('https://github.com/org/foo/teams'), + parseGithubOrgUrl('https://github.com/org/foo/teams'), ).toThrow(); - expect(parseGitHubOrgUrl('https://github.com/foo%32')).toEqual({ + expect(parseGithubOrgUrl('https://github.com/foo%32')).toEqual({ org: 'foo2', }); }); diff --git a/plugins/catalog-backend-module-github/src/lib/util.ts b/plugins/catalog-backend-module-github/src/lib/util.ts index 238ed9868a..ece463bb40 100644 --- a/plugins/catalog-backend-module-github/src/lib/util.ts +++ b/plugins/catalog-backend-module-github/src/lib/util.ts @@ -14,9 +14,9 @@ * limitations under the License. */ -import { GithubTopicFilters } from '../providers/GitHubEntityProviderConfig'; +import { GithubTopicFilters } from '../providers/GithubEntityProviderConfig'; -export function parseGitHubOrgUrl(urlString: string): { org: string } { +export function parseGithubOrgUrl(urlString: string): { org: string } { const path = new URL(urlString).pathname.substr(1).split('/'); // /backstage diff --git a/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.ts b/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.ts index c6f2f5d0e2..0ef81ac907 100644 --- a/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.ts +++ b/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.ts @@ -35,7 +35,7 @@ import { buildOrgHierarchy, getOrganizationTeams, getOrganizationUsers, - parseGitHubOrgUrl, + parseGithubOrgUrl, } from '../lib'; type GraphQL = typeof graphql; @@ -45,7 +45,7 @@ type GraphQL = typeof graphql; * * @remarks * - * Consider using {@link GitHubOrgEntityProvider} instead. + * Consider using {@link GithubOrgEntityProvider} instead. * * @public */ @@ -94,7 +94,7 @@ export class GithubOrgReaderProcessor implements CatalogProcessor { } const { client, tokenType } = await this.createClient(location.target); - const { org } = parseGitHubOrgUrl(location.target); + const { org } = parseGithubOrgUrl(location.target); // Read out all of the raw data const startTimestamp = Date.now(); diff --git a/plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.test.ts b/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.test.ts similarity index 95% rename from plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.test.ts rename to plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.test.ts index b2078172e9..a63069d552 100644 --- a/plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.test.ts +++ b/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.test.ts @@ -22,7 +22,7 @@ import { } from '@backstage/backend-tasks'; import { ConfigReader } from '@backstage/config'; import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; -import { GitHubEntityProvider } from './GitHubEntityProvider'; +import { GithubEntityProvider } from './GithubEntityProvider'; import * as helpers from '../lib/github'; jest.mock('../lib/github', () => { @@ -45,13 +45,13 @@ class PersistingTaskRunner implements TaskRunner { const logger = getVoidLogger(); -describe('GitHubEntityProvider', () => { +describe('GithubEntityProvider', () => { afterEach(() => jest.resetAllMocks()); it('no provider config', () => { const schedule = new PersistingTaskRunner(); const config = new ConfigReader({}); - const providers = GitHubEntityProvider.fromConfig(config, { + const providers = GithubEntityProvider.fromConfig(config, { logger, schedule, }); @@ -70,7 +70,7 @@ describe('GitHubEntityProvider', () => { }, }, }); - const providers = GitHubEntityProvider.fromConfig(config, { + const providers = GithubEntityProvider.fromConfig(config, { logger, schedule, }); @@ -93,7 +93,7 @@ describe('GitHubEntityProvider', () => { }); expect(() => - GitHubEntityProvider.fromConfig(config, { + GithubEntityProvider.fromConfig(config, { logger, schedule, }), @@ -116,7 +116,7 @@ describe('GitHubEntityProvider', () => { }, }, }); - const providers = GitHubEntityProvider.fromConfig(config, { + const providers = GithubEntityProvider.fromConfig(config, { logger, schedule, }); @@ -153,7 +153,7 @@ describe('GitHubEntityProvider', () => { refresh: jest.fn(), }; - const provider = GitHubEntityProvider.fromConfig(config, { + const provider = GithubEntityProvider.fromConfig(config, { logger, schedule, })[0]; @@ -241,7 +241,7 @@ describe('GitHubEntityProvider', () => { refresh: jest.fn(), }; - const provider = GitHubEntityProvider.fromConfig(config, { + const provider = GithubEntityProvider.fromConfig(config, { logger, schedule, })[0]; @@ -315,7 +315,7 @@ describe('GitHubEntityProvider', () => { refresh: jest.fn(), }; - const provider = GitHubEntityProvider.fromConfig(config, { + const provider = GithubEntityProvider.fromConfig(config, { logger, schedule, })[0]; @@ -413,7 +413,7 @@ describe('GitHubEntityProvider', () => { refresh: jest.fn(), }; - const provider = GitHubEntityProvider.fromConfig(config, { + const provider = GithubEntityProvider.fromConfig(config, { logger, schedule, })[0]; @@ -526,7 +526,7 @@ describe('GitHubEntityProvider', () => { }); expect(() => - GitHubEntityProvider.fromConfig(config, { + GithubEntityProvider.fromConfig(config, { logger, }), ).toThrow('Either schedule or scheduler must be provided'); @@ -547,7 +547,7 @@ describe('GitHubEntityProvider', () => { }); expect(() => - GitHubEntityProvider.fromConfig(config, { + GithubEntityProvider.fromConfig(config, { logger, scheduler, }), @@ -574,7 +574,7 @@ describe('GitHubEntityProvider', () => { }, }, }); - const providers = GitHubEntityProvider.fromConfig(config, { + const providers = GithubEntityProvider.fromConfig(config, { logger, scheduler, }); diff --git a/plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.ts b/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.ts similarity index 95% rename from plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.ts rename to plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.ts index 7d04b749dd..2004cb7469 100644 --- a/plugins/catalog-backend-module-github/src/providers/GitHubEntityProvider.ts +++ b/plugins/catalog-backend-module-github/src/providers/GithubEntityProvider.ts @@ -35,8 +35,8 @@ import * as uuid from 'uuid'; import { Logger } from 'winston'; import { readProviderConfigs, - GitHubEntityProviderConfig, -} from './GitHubEntityProviderConfig'; + GithubEntityProviderConfig, +} from './GithubEntityProviderConfig'; import { getOrganizationRepositories, Repository } from '../lib/github'; import { satisfiesTopicFilter } from '../lib/util'; @@ -48,8 +48,8 @@ import { satisfiesTopicFilter } from '../lib/util'; * * @public */ -export class GitHubEntityProvider implements EntityProvider { - private readonly config: GitHubEntityProviderConfig; +export class GithubEntityProvider implements EntityProvider { + private readonly config: GithubEntityProviderConfig; private readonly logger: Logger; private readonly integration: GitHubIntegrationConfig; private readonly scheduleFn: () => Promise; @@ -63,7 +63,7 @@ export class GitHubEntityProvider implements EntityProvider { schedule?: TaskRunner; scheduler?: PluginTaskScheduler; }, - ): GitHubEntityProvider[] { + ): GithubEntityProvider[] { if (!options.schedule && !options.scheduler) { throw new Error('Either schedule or scheduler must be provided.'); } @@ -90,7 +90,7 @@ export class GitHubEntityProvider implements EntityProvider { options.schedule ?? options.scheduler!.createScheduledTaskRunner(providerConfig.schedule!); - return new GitHubEntityProvider( + return new GithubEntityProvider( providerConfig, integration, options.logger, @@ -100,7 +100,7 @@ export class GitHubEntityProvider implements EntityProvider { } private constructor( - config: GitHubEntityProviderConfig, + config: GithubEntityProviderConfig, integration: GitHubIntegration, logger: Logger, taskRunner: TaskRunner, @@ -133,7 +133,7 @@ export class GitHubEntityProvider implements EntityProvider { id: taskId, fn: async () => { const logger = this.logger.child({ - class: GitHubEntityProvider.prototype.constructor.name, + class: GithubEntityProvider.prototype.constructor.name, taskId, taskInstanceId: uuid.v4(), }); @@ -156,7 +156,7 @@ export class GitHubEntityProvider implements EntityProvider { const matchingTargets = this.matchesFilters(targets); const entities = matchingTargets .map(repository => this.createLocationUrl(repository)) - .map(GitHubEntityProvider.toLocationSpec) + .map(GithubEntityProvider.toLocationSpec) .map(location => { return { locationKey: this.getProviderName(), diff --git a/plugins/catalog-backend-module-github/src/providers/GitHubEntityProviderConfig.test.ts b/plugins/catalog-backend-module-github/src/providers/GithubEntityProviderConfig.test.ts similarity index 98% rename from plugins/catalog-backend-module-github/src/providers/GitHubEntityProviderConfig.test.ts rename to plugins/catalog-backend-module-github/src/providers/GithubEntityProviderConfig.test.ts index e1b3a6cfbf..c80546bdff 100644 --- a/plugins/catalog-backend-module-github/src/providers/GitHubEntityProviderConfig.test.ts +++ b/plugins/catalog-backend-module-github/src/providers/GithubEntityProviderConfig.test.ts @@ -16,7 +16,7 @@ import { ConfigReader } from '@backstage/config'; import { Duration } from 'luxon'; -import { readProviderConfigs } from './GitHubEntityProviderConfig'; +import { readProviderConfigs } from './GithubEntityProviderConfig'; describe('readProviderConfigs', () => { afterEach(() => jest.resetAllMocks()); diff --git a/plugins/catalog-backend-module-github/src/providers/GitHubEntityProviderConfig.ts b/plugins/catalog-backend-module-github/src/providers/GithubEntityProviderConfig.ts similarity index 96% rename from plugins/catalog-backend-module-github/src/providers/GitHubEntityProviderConfig.ts rename to plugins/catalog-backend-module-github/src/providers/GithubEntityProviderConfig.ts index 6785d18984..18c0a3915d 100644 --- a/plugins/catalog-backend-module-github/src/providers/GitHubEntityProviderConfig.ts +++ b/plugins/catalog-backend-module-github/src/providers/GithubEntityProviderConfig.ts @@ -23,7 +23,7 @@ import { Config } from '@backstage/config'; const DEFAULT_CATALOG_PATH = '/catalog-info.yaml'; const DEFAULT_PROVIDER_ID = 'default'; -export type GitHubEntityProviderConfig = { +export type GithubEntityProviderConfig = { id: string; catalogPath: string; organization: string; @@ -43,7 +43,7 @@ export type GithubTopicFilters = { export function readProviderConfigs( config: Config, -): GitHubEntityProviderConfig[] { +): GithubEntityProviderConfig[] { const providersConfig = config.getOptionalConfig('catalog.providers.github'); if (!providersConfig) { return []; @@ -64,7 +64,7 @@ export function readProviderConfigs( function readProviderConfig( id: string, config: Config, -): GitHubEntityProviderConfig { +): GithubEntityProviderConfig { const organization = config.getString('organization'); const catalogPath = config.getOptionalString('catalogPath') ?? DEFAULT_CATALOG_PATH; diff --git a/plugins/catalog-backend-module-github/src/providers/GitHubOrgEntityProvider.test.ts b/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.test.ts similarity index 97% rename from plugins/catalog-backend-module-github/src/providers/GitHubOrgEntityProvider.test.ts rename to plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.test.ts index 2d05346f01..1d8d125d91 100644 --- a/plugins/catalog-backend-module-github/src/providers/GitHubOrgEntityProvider.test.ts +++ b/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.test.ts @@ -23,13 +23,13 @@ import { import { EntityProviderConnection } from '@backstage/plugin-catalog-backend'; import { graphql } from '@octokit/graphql'; import { - GitHubOrgEntityProvider, + GithubOrgEntityProvider, withLocations, -} from './GitHubOrgEntityProvider'; +} from './GithubOrgEntityProvider'; jest.mock('@octokit/graphql'); -describe('GitHubOrgEntityProvider', () => { +describe('GithubOrgEntityProvider', () => { describe('read', () => { afterEach(() => jest.resetAllMocks()); @@ -100,7 +100,7 @@ describe('GitHubOrgEntityProvider', () => { getCredentials: mockGetCredentials, }; - const entityProvider = new GitHubOrgEntityProvider({ + const entityProvider = new GithubOrgEntityProvider({ id: 'my-id', githubCredentialsProvider, orgUrl: 'https://github.com/backstage', diff --git a/plugins/catalog-backend-module-github/src/providers/GitHubOrgEntityProvider.ts b/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.ts similarity index 92% rename from plugins/catalog-backend-module-github/src/providers/GitHubOrgEntityProvider.ts rename to plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.ts index bb994c193c..f8fafbe53c 100644 --- a/plugins/catalog-backend-module-github/src/providers/GitHubOrgEntityProvider.ts +++ b/plugins/catalog-backend-module-github/src/providers/GithubOrgEntityProvider.ts @@ -41,15 +41,15 @@ import { buildOrgHierarchy, getOrganizationTeams, getOrganizationUsers, - parseGitHubOrgUrl, + parseGithubOrgUrl, } from '../lib'; /** - * Options for {@link GitHubOrgEntityProvider}. + * Options for {@link GithubOrgEntityProvider}. * * @public */ -export interface GitHubOrgEntityProviderOptions { +export interface GithubOrgEntityProviderOptions { /** * A unique, stable identifier for this provider. * @@ -96,12 +96,12 @@ export interface GitHubOrgEntityProviderOptions { * * @public */ -export class GitHubOrgEntityProvider implements EntityProvider { +export class GithubOrgEntityProvider implements EntityProvider { private readonly credentialsProvider: GithubCredentialsProvider; private connection?: EntityProviderConnection; private scheduleFn?: () => Promise; - static fromConfig(config: Config, options: GitHubOrgEntityProviderOptions) { + static fromConfig(config: Config, options: GithubOrgEntityProviderOptions) { const integrations = ScmIntegrations.fromConfig(config); const gitHubConfig = integrations.github.byUrl(options.orgUrl)?.config; @@ -115,7 +115,7 @@ export class GitHubOrgEntityProvider implements EntityProvider { target: options.orgUrl, }); - const provider = new GitHubOrgEntityProvider({ + const provider = new GithubOrgEntityProvider({ id: options.id, orgUrl: options.orgUrl, logger, @@ -146,7 +146,7 @@ export class GitHubOrgEntityProvider implements EntityProvider { /** {@inheritdoc @backstage/plugin-catalog-backend#EntityProvider.getProviderName} */ getProviderName() { - return `GitHubOrgEntityProvider:${this.options.id}`; + return `GithubOrgEntityProvider:${this.options.id}`; } /** {@inheritdoc @backstage/plugin-catalog-backend#EntityProvider.connect} */ @@ -176,7 +176,7 @@ export class GitHubOrgEntityProvider implements EntityProvider { headers, }); - const { org } = parseGitHubOrgUrl(this.options.orgUrl); + const { org } = parseGithubOrgUrl(this.options.orgUrl); const { users } = await getOrganizationUsers(client, org, tokenType); const { groups, groupMemberUsers } = await getOrganizationTeams( client, @@ -202,7 +202,7 @@ export class GitHubOrgEntityProvider implements EntityProvider { markCommitComplete(); } - private schedule(schedule: GitHubOrgEntityProviderOptions['schedule']) { + private schedule(schedule: GithubOrgEntityProviderOptions['schedule']) { if (!schedule || schedule === 'manual') { return; } @@ -213,7 +213,7 @@ export class GitHubOrgEntityProvider implements EntityProvider { id, fn: async () => { const logger = this.options.logger.child({ - class: GitHubOrgEntityProvider.prototype.constructor.name, + class: GithubOrgEntityProvider.prototype.constructor.name, taskId: id, taskInstanceId: uuid.v4(), }); diff --git a/plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.test.ts b/plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.test.ts index d65eb98661..b555927d2c 100644 --- a/plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.test.ts +++ b/plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.test.ts @@ -29,11 +29,11 @@ import { ConfigReader } from '@backstage/config'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node'; import { Duration } from 'luxon'; import { githubEntityProviderCatalogModule } from './GithubEntityProviderCatalogModule'; -import { GitHubEntityProvider } from '../providers/GitHubEntityProvider'; +import { GithubEntityProvider } from '../providers/GithubEntityProvider'; describe('githubEntityProviderCatalogModule', () => { it('should register provider at the catalog extension point', async () => { - let addedProviders: Array | undefined; + let addedProviders: Array | undefined; let usedSchedule: TaskScheduleDefinition | undefined; const extensionPoint = { diff --git a/plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.ts b/plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.ts index c63e8ba7da..8fdee886a3 100644 --- a/plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.ts +++ b/plugins/catalog-backend-module-github/src/service/GithubEntityProviderCatalogModule.ts @@ -22,10 +22,10 @@ import { schedulerServiceRef, } from '@backstage/backend-plugin-api'; import { catalogProcessingExtensionPoint } from '@backstage/plugin-catalog-node'; -import { GitHubEntityProvider } from '../providers/GitHubEntityProvider'; +import { GithubEntityProvider } from '../providers/GithubEntityProvider'; /** - * Registers the GitHubEntityProvider with the catalog processing extension point. + * Registers the {@link GithubEntityProvider} with the catalog processing extension point. * * @alpha */ @@ -42,7 +42,7 @@ export const githubEntityProviderCatalogModule = createBackendModule({ }, async init({ catalog, config, logger, scheduler }) { catalog.addEntityProvider( - GitHubEntityProvider.fromConfig(config, { + GithubEntityProvider.fromConfig(config, { logger: loggerToWinstonLogger(logger), scheduler, }), From e9e532ebd800c85228971dca3e8c491c6b2b415b Mon Sep 17 00:00:00 2001 From: Gustaf Lundh Date: Tue, 18 Oct 2022 00:33:06 +0200 Subject: [PATCH 244/278] Catalog: Fixes issue where the query kind parameter is not accepted Signed-off-by: Gustaf Lundh --- .changeset/nice-monkeys-punch.md | 5 +++++ .../src/components/EntityKindPicker/EntityKindPicker.tsx | 5 +---- 2 files changed, 6 insertions(+), 4 deletions(-) create mode 100644 .changeset/nice-monkeys-punch.md diff --git a/.changeset/nice-monkeys-punch.md b/.changeset/nice-monkeys-punch.md new file mode 100644 index 0000000000..676d085218 --- /dev/null +++ b/.changeset/nice-monkeys-punch.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-react': patch +--- + +Fixed issue where the query kind parameter is not honored diff --git a/plugins/catalog-react/src/components/EntityKindPicker/EntityKindPicker.tsx b/plugins/catalog-react/src/components/EntityKindPicker/EntityKindPicker.tsx index 36ac93101a..c626a68d10 100644 --- a/plugins/catalog-react/src/components/EntityKindPicker/EntityKindPicker.tsx +++ b/plugins/catalog-react/src/components/EntityKindPicker/EntityKindPicker.tsx @@ -154,10 +154,7 @@ export const EntityKindPicker = (props: EntityKindPickerProps) => { severity: 'error', }); } - if (initialFilter) { - setSelectedKind(initialFilter); - } - }, [error, alertApi, initialFilter, setSelectedKind]); + }, [error, alertApi]); if (availableKinds?.length === 0 || error) return null; From 3387732b99ddfdb9957805424cf3c82a343566a0 Mon Sep 17 00:00:00 2001 From: Kailash Choudhary Date: Tue, 18 Oct 2022 09:33:40 +0530 Subject: [PATCH 245/278] Convert Headline Image To a Link Signed-off-by: Kailash Choudhary --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5dba1fdf52..53f8275b88 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![headline](docs/assets/headline.png) +[![headline](docs/assets/headline.png)](https://backstage.io/) # [Backstage](https://backstage.io) From 80d75adf3a772c41434df809e03d01a6efc244ae Mon Sep 17 00:00:00 2001 From: Mengnan Gong Date: Tue, 18 Oct 2022 16:05:43 +0800 Subject: [PATCH 246/278] Cleanup the momentjs dependency in @backstage/plugin-github-pull-requests-board As per [ADR010: Use the Luxon Date Library](https://github.com/backstage/backstage/blob/master/docs/architecture-decisions/adr010-luxon-date-library.md), we should replace momentjs with luxon. Signed-off-by: Mengnan Gong --- .changeset/curvy-islands-marry.md | 5 +++++ plugins/github-pull-requests-board/package.json | 2 +- plugins/github-pull-requests-board/src/utils/functions.ts | 4 ++-- yarn.lock | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 .changeset/curvy-islands-marry.md diff --git a/.changeset/curvy-islands-marry.md b/.changeset/curvy-islands-marry.md new file mode 100644 index 0000000000..2d3bad31ac --- /dev/null +++ b/.changeset/curvy-islands-marry.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-github-pull-requests-board': patch +--- + +Replace the momentjs dependency with luxon. diff --git a/plugins/github-pull-requests-board/package.json b/plugins/github-pull-requests-board/package.json index cc15d368ee..e2956099ac 100644 --- a/plugins/github-pull-requests-board/package.json +++ b/plugins/github-pull-requests-board/package.json @@ -44,7 +44,7 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.57", "@octokit/rest": "^19.0.3", - "moment": "^2.29.1", + "luxon": "^3.0.0", "react-use": "^17.2.4" }, "devDependencies": { diff --git a/plugins/github-pull-requests-board/src/utils/functions.ts b/plugins/github-pull-requests-board/src/utils/functions.ts index 69b3ecf794..5644530689 100644 --- a/plugins/github-pull-requests-board/src/utils/functions.ts +++ b/plugins/github-pull-requests-board/src/utils/functions.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { Entity } from '@backstage/catalog-model'; -import moment from 'moment'; +import { DateTime } from 'luxon'; import { Reviews, PullRequests, @@ -58,7 +58,7 @@ export const filterSameUser = (users: Author[]): Author[] => { }; export const getElapsedTime = (start: string): string => { - return moment(start).fromNow(); + return DateTime.fromISO(start).toRelative() ?? start; }; export const formatPRsByReviewDecision = ( diff --git a/yarn.lock b/yarn.lock index 05d79d90b3..83ca72c771 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5674,7 +5674,7 @@ __metadata: "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 cross-fetch: ^3.1.5 - moment: ^2.29.1 + luxon: ^3.0.0 msw: ^0.47.0 react-use: ^17.2.4 peerDependencies: From 31f64105b27c1e1ff9433ae3116cf0f578b3a3a7 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 18 Oct 2022 10:27:42 +0200 Subject: [PATCH 247/278] create-app: fix index route redirect Signed-off-by: Patrik Oldsberg --- docs/tutorials/react-router-stable-migration.md | 2 +- packages/app/src/App.tsx | 2 +- .../create-app/templates/default-app/packages/app/src/App.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/tutorials/react-router-stable-migration.md b/docs/tutorials/react-router-stable-migration.md index 9636345116..bb01157bdb 100644 --- a/docs/tutorials/react-router-stable-migration.md +++ b/docs/tutorials/react-router-stable-migration.md @@ -178,7 +178,7 @@ When migrating over to React Router v6 stable, you might also see browser consol ```diff - -+ } /> ++ } /> ``` ### `NavLink` diff --git a/packages/app/src/App.tsx b/packages/app/src/App.tsx index d6b66d57a7..2526f6740f 100644 --- a/packages/app/src/App.tsx +++ b/packages/app/src/App.tsx @@ -150,7 +150,7 @@ const AppRouter = app.getRouter(); const routes = ( - } /> + } /> {/* TODO(rubenl): Move this to / once its more mature and components exist */} }> {homePage} diff --git a/packages/create-app/templates/default-app/packages/app/src/App.tsx b/packages/create-app/templates/default-app/packages/app/src/App.tsx index 4d5ace5aa4..46cb786399 100644 --- a/packages/create-app/templates/default-app/packages/app/src/App.tsx +++ b/packages/create-app/templates/default-app/packages/app/src/App.tsx @@ -58,7 +58,7 @@ const AppRouter = app.getRouter(); const routes = ( - } /> + } /> } /> Date: Tue, 18 Oct 2022 09:34:09 +0000 Subject: [PATCH 248/278] Update graphqlcodegenerator monorepo Signed-off-by: Renovate Bot --- yarn.lock | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/yarn.lock b/yarn.lock index 05d79d90b3..49f0d18897 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8555,8 +8555,8 @@ __metadata: linkType: hard "@graphql-codegen/cli@npm:^2.3.1": - version: 2.13.5 - resolution: "@graphql-codegen/cli@npm:2.13.5" + version: 2.13.7 + resolution: "@graphql-codegen/cli@npm:2.13.7" dependencies: "@babel/generator": ^7.18.13 "@babel/template": ^7.18.10 @@ -8588,6 +8588,7 @@ __metadata: listr2: ^4.0.5 log-symbols: ^4.0.0 mkdirp: ^1.0.4 + shell-quote: ^1.7.3 string-env-interpolation: ^1.0.1 ts-log: ^2.2.3 tslib: ^2.4.0 @@ -8600,7 +8601,7 @@ __metadata: graphql-code-generator: cjs/bin.js graphql-codegen: cjs/bin.js graphql-codegen-esm: esm/bin.js - checksum: aa80a4440657bad9ebc3dce6c7b22f843bff97b78c4b37808b6605bf7e2f3d7a227afa66d641284ffb914554147d07aab61ca27eec4551308a3909360191500b + checksum: c025e311c072c1d992451f27625c863eef1236e5f01e2aeb6f00e67a60e99c7812a13481481a8fc6ea2967fffd77433d582f10365244d677608fdc7aa13bbe29 languageName: node linkType: hard @@ -8619,18 +8620,18 @@ __metadata: linkType: hard "@graphql-codegen/graphql-modules-preset@npm:^2.3.2": - version: 2.5.1 - resolution: "@graphql-codegen/graphql-modules-preset@npm:2.5.1" + version: 2.5.3 + resolution: "@graphql-codegen/graphql-modules-preset@npm:2.5.3" dependencies: "@graphql-codegen/plugin-helpers": ^2.6.2 - "@graphql-codegen/visitor-plugin-common": 2.12.1 + "@graphql-codegen/visitor-plugin-common": 2.12.2 "@graphql-tools/utils": ^8.8.0 change-case-all: 1.0.14 parse-filepath: ^1.0.2 tslib: ~2.4.0 peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 185bd63081cdeba9ee332cd22fb1f640853f0f7bf60a70d4af864047465641b7ed79287413840202e317726ffad5bdd61382a4578ba88efd0b46a2d9b3acd32d + checksum: 3808a92ccb27e42f667f21929adfb7d13cdfaea20d716c63b699016fbf1b7c1b704a9fd7f1d670bf36e64588403a843d6cbba7190cd0464e03da3f485a5486fe languageName: node linkType: hard @@ -8664,39 +8665,39 @@ __metadata: linkType: hard "@graphql-codegen/typescript-resolvers@npm:^2.4.3": - version: 2.7.3 - resolution: "@graphql-codegen/typescript-resolvers@npm:2.7.3" + version: 2.7.4 + resolution: "@graphql-codegen/typescript-resolvers@npm:2.7.4" dependencies: "@graphql-codegen/plugin-helpers": ^2.6.2 - "@graphql-codegen/typescript": ^2.7.3 - "@graphql-codegen/visitor-plugin-common": 2.12.1 + "@graphql-codegen/typescript": ^2.7.4 + "@graphql-codegen/visitor-plugin-common": 2.12.2 "@graphql-tools/utils": ^8.8.0 auto-bind: ~4.0.0 tslib: ~2.4.0 peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 28672b86e62ad7d0bcf244eebce7a4ee3b4dcd0055570d872a135167880030f27434c512e6bcd9d9144e5a6e4cd757268677dd61c7fb43aea2981290a5de9b2e + checksum: e54e96cbcc78ae8c8311b781cd33f4bacec15b34fff831870bae1f482d59fd55790f2c1f92c7b7f251c2b13aaad25e21fa7e7904fc67f0ed5c13abaa47b20c27 languageName: node linkType: hard -"@graphql-codegen/typescript@npm:^2.4.2, @graphql-codegen/typescript@npm:^2.7.3": - version: 2.7.3 - resolution: "@graphql-codegen/typescript@npm:2.7.3" +"@graphql-codegen/typescript@npm:^2.4.2, @graphql-codegen/typescript@npm:^2.7.4": + version: 2.7.4 + resolution: "@graphql-codegen/typescript@npm:2.7.4" dependencies: "@graphql-codegen/plugin-helpers": ^2.6.2 "@graphql-codegen/schema-ast": ^2.5.1 - "@graphql-codegen/visitor-plugin-common": 2.12.1 + "@graphql-codegen/visitor-plugin-common": 2.12.2 auto-bind: ~4.0.0 tslib: ~2.4.0 peerDependencies: graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: fa08ad7a379cfc05cf80d71509d1f8154919b8a0e89e8bf2c95a41856e0b42e3788b9225faf084a94cf900dab8893e42aa296bdb4725d5d20ce00c9e2e0bd707 + checksum: 91ce69d19eead417d4ba07a59f4be19fd50a28c4bd3800f8cd69efa7e2afb05cea6e15b8d58086b67c366970a6c58f0c5179a46a9f07c7f135f642a9d6af3583 languageName: node linkType: hard -"@graphql-codegen/visitor-plugin-common@npm:2.12.1": - version: 2.12.1 - resolution: "@graphql-codegen/visitor-plugin-common@npm:2.12.1" +"@graphql-codegen/visitor-plugin-common@npm:2.12.2": + version: 2.12.2 + resolution: "@graphql-codegen/visitor-plugin-common@npm:2.12.2" dependencies: "@graphql-codegen/plugin-helpers": ^2.6.2 "@graphql-tools/optimize": ^1.3.0 @@ -8710,7 +8711,7 @@ __metadata: tslib: ~2.4.0 peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 846d1c698b12863a25d36da761ff7c1904405e6a8ead450f95658db407bc007582eb9328f4ba57fe33129ff3e6ebce2b55347125c0bf980370480ffd47299d2e + checksum: 325b6a2bbd297c7beff00963f4f375d2990956287d4e4976864875340728abf1bdaa9891bbd9fc2625d783689f2655befd212a03c521d3661e16dcea0e0a6de4 languageName: node linkType: hard From 403cc11b3df5bbc6f3e7cb638330e59d90bc4721 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 18 Oct 2022 11:47:29 +0200 Subject: [PATCH 249/278] workflows: only run the most recent version packages sync Signed-off-by: Patrik Oldsberg --- .github/workflows/sync_version-packages.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/sync_version-packages.yml b/.github/workflows/sync_version-packages.yml index 5aa12fe6b5..22421925c7 100644 --- a/.github/workflows/sync_version-packages.yml +++ b/.github/workflows/sync_version-packages.yml @@ -4,6 +4,10 @@ on: branches: - master +concurrency: + group: sync-version-packages + cancel-in-progress: true + jobs: create-release-pr: name: Create Changeset PR From f0196a2f049330f981c33bd5b7c1ebb18d91aa98 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 18 Oct 2022 09:55:10 +0000 Subject: [PATCH 250/278] Version Packages --- .changeset/blue-lions-greet.md | 5 - .changeset/brave-goats-rush.md | 5 - .changeset/brave-peaches-brush.md | 5 - .changeset/breezy-pots-worry.md | 5 - .changeset/bright-rules-shout.md | 5 - .changeset/brown-grapes-battle.md | 8 - .changeset/calm-moose-fetch.md | 6 - .changeset/calm-pianos-burn.md | 5 - .changeset/chilled-apes-change.md | 5 - .changeset/clean-camels-sneeze.md | 12 - .changeset/clever-clocks-drive.md | 6 - .changeset/clever-ties-burn.md | 5 - .changeset/cuddly-bikes-tease.md | 5 - .changeset/cuddly-ways-fail.md | 5 - .changeset/curly-rats-itch.md | 5 - .changeset/curvy-kiwis-fold.md | 5 - .changeset/curvy-lemons-change.md | 5 - .changeset/curvy-pets-wash.md | 13 - .changeset/dry-shirts-attack.md | 5 - .changeset/dull-rocks-warn.md | 5 - .changeset/early-hornets-pay.md | 5 - .changeset/early-rocks-smell.md | 5 - .changeset/eleven-apples-accept.md | 5 - .changeset/fair-tools-melt.md | 5 - .changeset/famous-ligers-repair.md | 8 - .changeset/fifty-berries-learn.md | 37 - .changeset/five-tables-grow.md | 11 - .changeset/fresh-donuts-arrive.md | 8 - .changeset/fuzzy-dolls-give.md | 5 - .changeset/fuzzy-dolls-shake.md | 21 - .changeset/giant-pianos-repeat.md | 5 - .changeset/good-plants-bathe.md | 7 - .changeset/great-crews-own.md | 16 - .changeset/great-numbers-reply.md | 5 - .changeset/grumpy-pans-knock.md | 14 - .changeset/hot-bugs-roll.md | 5 - .changeset/hot-geese-vanish.md | 5 - .changeset/itchy-rockets-hide.md | 5 - .changeset/itchy-schools-run.md | 5 - .changeset/kind-bees-suffer.md | 30 - .changeset/kind-penguins-report.md | 10 - .changeset/large-dingos-juggle.md | 5 - .changeset/large-jars-fry.md | 5 - .changeset/lazy-beds-pull.md | 5 - .changeset/lazy-eyes-switch.md | 5 - .changeset/lazy-fireants-check.md | 5 - .changeset/little-hats-yell.md | 6 - .changeset/little-roses-rule.md | 5 - .changeset/loud-dots-sit.md | 5 - .changeset/loud-wombats-taste.md | 5 - .changeset/lovely-peaches-fold.md | 5 - .changeset/lucky-beans-bathe.md | 5 - .changeset/lucky-cows-boil.md | 11 - .changeset/many-kangaroos-raise.md | 5 - .changeset/mean-spiders-design.md | 5 - .changeset/mighty-lions-march.md | 5 - .changeset/moody-carrots-shout.md | 5 - .changeset/nice-monkeys-punch.md | 5 - .changeset/odd-pandas-suffer.md | 5 - .changeset/odd-singers-taste.md | 5 - .changeset/old-cobras-suffer.md | 6 - .changeset/old-frogs-invent.md | 9 - .changeset/old-melons-bathe.md | 5 - .changeset/old-needles-brake.md | 6 - .changeset/perfect-moose-drum.md | 5 - .changeset/plenty-kids-fetch.md | 5 - .changeset/plenty-laws-end.md | 5 - .changeset/poor-clouds-ring.md | 5 - .changeset/pre.json | 287 -- .changeset/pretty-buttons-develop.md | 5 - .changeset/pretty-flies-agree.md | 5 - .changeset/purple-masks-travel.md | 5 - .changeset/quick-meals-talk.md | 19 - .changeset/quiet-dancers-jog.md | 5 - .changeset/quiet-hats-kick.md | 5 - .changeset/quiet-ligers-draw.md | 5 - .changeset/rare-cougars-cross.md | 16 - .changeset/rare-hotels-cough.md | 5 - .changeset/red-dots-sleep.md | 5 - .changeset/red-pants-rush.md | 5 - .changeset/renovate-5da63a4.md | 5 - .changeset/renovate-a02d90b.md | 5 - .changeset/rich-carrots-reflect.md | 5 - .changeset/rude-bulldogs-sleep.md | 5 - .changeset/rude-tables-shout.md | 5 - .changeset/rude-tomatoes-behave.md | 5 - .changeset/search-bobcats-love.md | 28 - .changeset/search-cars-hide.md | 5 - .changeset/search-clouds-begin.md | 23 - .changeset/search-cycles-sniff.md | 7 - .changeset/search-days-pull.md | 99 - .changeset/search-dull-planes-prove.md | 30 - .changeset/search-konstiga-fika-reglar.md | 9 - .changeset/search-rats-grin.md | 14 - .changeset/selfish-turkeys-exist.md | 6 - .changeset/seven-panthers-chew.md | 5 - .changeset/shaggy-books-smell.md | 5 - .changeset/short-plants-return.md | 5 - .changeset/silent-bees-repeat.md | 5 - .changeset/silent-mice-brake.md | 5 - .changeset/silly-rules-join.md | 5 - .changeset/sixty-items-nail.md | 5 - .changeset/slimy-suns-learn.md | 5 - .changeset/slow-mirrors-eat.md | 5 - .changeset/smooth-tables-pull.md | 5 - .changeset/soft-falcons-love.md | 11 - .changeset/stupid-dragons-complain.md | 5 - .changeset/sweet-insects-camp.md | 11 - .changeset/swift-phones-cheat.md | 12 - .changeset/tall-baboons-deliver.md | 5 - .changeset/tame-ads-complain.md | 18 - .changeset/techdocs-olive-worms-yell.md | 5 - .changeset/tender-drinks-drive.md | 5 - .changeset/tender-parrots-peel.md | 5 - .changeset/thick-kings-destroy.md | 5 - .changeset/tiny-mails-bathe.md | 14 - .changeset/tough-hairs-sparkle.md | 5 - .changeset/tough-seahorses-learn.md | 26 - .changeset/twelve-melons-notice.md | 5 - .changeset/unlucky-seas-sip.md | 5 - .changeset/warm-days-watch.md | 5 - .changeset/wild-weeks-live.md | 6 - .changeset/wise-ligers-scream.md | 5 - .changeset/yellow-lemons-march.md | 5 - .changeset/young-bugs-remember.md | 6 - .changeset/young-olives-cheer.md | 5 - docs/releases/v1.7.0-changelog.md | 2589 +++++++++++++++++ package.json | 2 +- packages/app-defaults/CHANGELOG.md | 11 + packages/app-defaults/package.json | 2 +- packages/app/CHANGELOG.md | 62 + packages/app/package.json | 2 +- packages/backend-app-api/CHANGELOG.md | 13 + packages/backend-app-api/package.json | 2 +- packages/backend-common/CHANGELOG.md | 16 + packages/backend-common/package.json | 2 +- packages/backend-defaults/CHANGELOG.md | 9 + packages/backend-defaults/package.json | 2 +- packages/backend-next/CHANGELOG.md | 10 + packages/backend-next/package.json | 2 +- packages/backend-plugin-api/CHANGELOG.md | 12 + packages/backend-plugin-api/package.json | 2 +- packages/backend-tasks/CHANGELOG.md | 11 + packages/backend-tasks/package.json | 2 +- packages/backend-test-utils/CHANGELOG.md | 13 + packages/backend-test-utils/package.json | 2 +- packages/backend/CHANGELOG.md | 42 + packages/backend/package.json | 2 +- packages/catalog-client/CHANGELOG.md | 9 + packages/catalog-client/package.json | 2 +- packages/catalog-model/CHANGELOG.md | 10 + packages/catalog-model/package.json | 2 +- packages/cli/CHANGELOG.md | 52 + packages/cli/package.json | 2 +- packages/codemods/CHANGELOG.md | 7 + packages/codemods/package.json | 2 +- packages/config-loader/CHANGELOG.md | 10 + packages/config-loader/package.json | 2 +- packages/config/CHANGELOG.md | 7 + packages/config/package.json | 2 +- packages/core-app-api/CHANGELOG.md | 11 + packages/core-app-api/package.json | 2 +- packages/core-components/CHANGELOG.md | 14 + packages/core-components/package.json | 2 +- packages/core-plugin-api/CHANGELOG.md | 9 + packages/core-plugin-api/package.json | 2 +- packages/create-app/CHANGELOG.md | 32 + packages/create-app/package.json | 2 +- packages/dev-utils/CHANGELOG.md | 15 + packages/dev-utils/package.json | 2 +- packages/errors/CHANGELOG.md | 7 + packages/errors/package.json | 2 +- packages/integration-react/CHANGELOG.md | 11 + packages/integration-react/package.json | 2 +- packages/integration/CHANGELOG.md | 8 + packages/integration/package.json | 2 +- .../techdocs-cli-embedded-app/CHANGELOG.md | 19 + .../techdocs-cli-embedded-app/package.json | 2 +- packages/techdocs-cli/CHANGELOG.md | 21 + packages/techdocs-cli/package.json | 2 +- packages/test-utils/CHANGELOG.md | 14 + packages/test-utils/package.json | 2 +- plugins/adr-backend/CHANGELOG.md | 15 + plugins/adr-backend/package.json | 2 +- plugins/adr-common/CHANGELOG.md | 9 + plugins/adr-common/package.json | 2 +- plugins/adr/CHANGELOG.md | 15 + plugins/adr/package.json | 2 +- plugins/airbrake-backend/CHANGELOG.md | 9 + plugins/airbrake-backend/package.json | 2 +- plugins/airbrake/CHANGELOG.md | 13 + plugins/airbrake/package.json | 2 +- plugins/allure/CHANGELOG.md | 11 + plugins/allure/package.json | 2 +- plugins/analytics-module-ga/CHANGELOG.md | 10 + plugins/analytics-module-ga/package.json | 2 +- plugins/apache-airflow/CHANGELOG.md | 8 + plugins/apache-airflow/package.json | 2 +- plugins/api-docs/CHANGELOG.md | 14 + plugins/api-docs/package.json | 2 +- plugins/apollo-explorer/CHANGELOG.md | 9 + plugins/apollo-explorer/package.json | 2 +- plugins/app-backend/CHANGELOG.md | 12 + plugins/app-backend/package.json | 2 +- plugins/auth-backend/CHANGELOG.md | 25 + plugins/auth-backend/package.json | 2 +- plugins/auth-node/CHANGELOG.md | 10 + plugins/auth-node/package.json | 2 +- plugins/azure-devops-backend/CHANGELOG.md | 9 + plugins/azure-devops-backend/package.json | 2 +- plugins/azure-devops/CHANGELOG.md | 13 + plugins/azure-devops/package.json | 2 +- plugins/badges-backend/CHANGELOG.md | 12 + plugins/badges-backend/package.json | 2 +- plugins/badges/CHANGELOG.md | 12 + plugins/badges/package.json | 2 +- plugins/bazaar-backend/CHANGELOG.md | 37 + plugins/bazaar-backend/package.json | 2 +- plugins/bazaar/CHANGELOG.md | 16 + plugins/bazaar/package.json | 2 +- plugins/bitbucket-cloud-common/CHANGELOG.md | 17 + plugins/bitbucket-cloud-common/package.json | 2 +- plugins/bitrise/CHANGELOG.md | 11 + plugins/bitrise/package.json | 2 +- .../catalog-backend-module-aws/CHANGELOG.md | 14 + .../catalog-backend-module-aws/package.json | 2 +- .../catalog-backend-module-azure/CHANGELOG.md | 14 + .../catalog-backend-module-azure/package.json | 2 +- .../CHANGELOG.md | 19 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- .../CHANGELOG.md | 19 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- .../CHANGELOG.md | 46 + .../package.json | 2 +- .../CHANGELOG.md | 14 + .../package.json | 2 +- .../catalog-backend-module-ldap/CHANGELOG.md | 12 + .../catalog-backend-module-ldap/package.json | 2 +- .../CHANGELOG.md | 10 + .../package.json | 2 +- .../CHANGELOG.md | 13 + .../package.json | 2 +- plugins/catalog-backend/CHANGELOG.md | 38 + plugins/catalog-backend/package.json | 2 +- plugins/catalog-common/CHANGELOG.md | 17 + plugins/catalog-common/package.json | 2 +- plugins/catalog-customized/CHANGELOG.md | 8 + plugins/catalog-customized/package.json | 2 +- plugins/catalog-graph/CHANGELOG.md | 13 + plugins/catalog-graph/package.json | 2 +- plugins/catalog-graphql/CHANGELOG.md | 9 + plugins/catalog-graphql/package.json | 2 +- plugins/catalog-import/CHANGELOG.md | 36 + plugins/catalog-import/package.json | 2 +- plugins/catalog-node/CHANGELOG.md | 16 + plugins/catalog-node/package.json | 2 +- plugins/catalog-react/CHANGELOG.md | 24 + plugins/catalog-react/package.json | 2 +- plugins/catalog/CHANGELOG.md | 57 + plugins/catalog/package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- plugins/cicd-statistics/CHANGELOG.md | 10 + plugins/cicd-statistics/package.json | 2 +- plugins/circleci/CHANGELOG.md | 11 + plugins/circleci/package.json | 2 +- plugins/cloudbuild/CHANGELOG.md | 11 + plugins/cloudbuild/package.json | 2 +- plugins/code-climate/CHANGELOG.md | 11 + plugins/code-climate/package.json | 2 +- plugins/code-coverage-backend/CHANGELOG.md | 12 + plugins/code-coverage-backend/package.json | 2 +- plugins/code-coverage/CHANGELOG.md | 13 + plugins/code-coverage/package.json | 2 +- plugins/codescene/CHANGELOG.md | 11 + plugins/codescene/package.json | 2 +- plugins/config-schema/CHANGELOG.md | 12 + plugins/config-schema/package.json | 2 +- plugins/cost-insights/CHANGELOG.md | 13 + plugins/cost-insights/package.json | 2 +- plugins/dynatrace/CHANGELOG.md | 11 + plugins/dynatrace/package.json | 2 +- .../example-todo-list-backend/CHANGELOG.md | 10 + .../example-todo-list-backend/package.json | 2 +- plugins/example-todo-list-common/CHANGELOG.md | 7 + plugins/example-todo-list-common/package.json | 2 +- plugins/example-todo-list/CHANGELOG.md | 9 + plugins/example-todo-list/package.json | 2 +- plugins/explore-react/CHANGELOG.md | 7 + plugins/explore-react/package.json | 2 +- plugins/explore/CHANGELOG.md | 12 + plugins/explore/package.json | 2 +- plugins/firehydrant/CHANGELOG.md | 10 + plugins/firehydrant/package.json | 2 +- plugins/fossa/CHANGELOG.md | 12 + plugins/fossa/package.json | 2 +- plugins/gcalendar/CHANGELOG.md | 11 + plugins/gcalendar/package.json | 2 +- plugins/gcp-projects/CHANGELOG.md | 9 + plugins/gcp-projects/package.json | 2 +- plugins/git-release-manager/CHANGELOG.md | 10 + plugins/git-release-manager/package.json | 2 +- plugins/github-actions/CHANGELOG.md | 12 + plugins/github-actions/package.json | 2 +- plugins/github-deployments/CHANGELOG.md | 14 + plugins/github-deployments/package.json | 2 +- plugins/github-issues/CHANGELOG.md | 16 + plugins/github-issues/package.json | 2 +- .../github-pull-requests-board/CHANGELOG.md | 13 + .../github-pull-requests-board/package.json | 2 +- plugins/gitops-profiles/CHANGELOG.md | 9 + plugins/gitops-profiles/package.json | 2 +- plugins/gocd/CHANGELOG.md | 12 + plugins/gocd/package.json | 2 +- plugins/graphiql/CHANGELOG.md | 9 + plugins/graphiql/package.json | 2 +- plugins/graphql-backend/CHANGELOG.md | 10 + plugins/graphql-backend/package.json | 2 +- plugins/home/CHANGELOG.md | 13 + plugins/home/package.json | 2 +- plugins/ilert/CHANGELOG.md | 12 + plugins/ilert/package.json | 2 +- plugins/jenkins-backend/CHANGELOG.md | 15 + plugins/jenkins-backend/package.json | 2 +- plugins/jenkins-common/CHANGELOG.md | 8 + plugins/jenkins-common/package.json | 2 +- plugins/jenkins/CHANGELOG.md | 13 + plugins/jenkins/package.json | 2 +- plugins/kafka-backend/CHANGELOG.md | 10 + plugins/kafka-backend/package.json | 2 +- plugins/kafka/CHANGELOG.md | 12 + plugins/kafka/package.json | 2 +- plugins/kubernetes-backend/CHANGELOG.md | 15 + plugins/kubernetes-backend/package.json | 2 +- plugins/kubernetes-common/CHANGELOG.md | 7 + plugins/kubernetes-common/package.json | 2 +- plugins/kubernetes/CHANGELOG.md | 15 + plugins/kubernetes/package.json | 2 +- plugins/lighthouse/CHANGELOG.md | 12 + plugins/lighthouse/package.json | 2 +- plugins/newrelic-dashboard/CHANGELOG.md | 11 + plugins/newrelic-dashboard/package.json | 2 +- plugins/newrelic/CHANGELOG.md | 9 + plugins/newrelic/package.json | 2 +- plugins/org/CHANGELOG.md | 12 + plugins/org/package.json | 2 +- plugins/pagerduty/CHANGELOG.md | 12 + plugins/pagerduty/package.json | 2 +- plugins/periskop-backend/CHANGELOG.md | 9 + plugins/periskop-backend/package.json | 2 +- plugins/periskop/CHANGELOG.md | 12 + plugins/periskop/package.json | 2 +- plugins/permission-backend/CHANGELOG.md | 13 + plugins/permission-backend/package.json | 2 +- plugins/permission-common/CHANGELOG.md | 37 + plugins/permission-common/package.json | 2 +- plugins/permission-node/CHANGELOG.md | 40 + plugins/permission-node/package.json | 2 +- plugins/permission-react/CHANGELOG.md | 9 + plugins/permission-react/package.json | 2 +- plugins/playlist-backend/CHANGELOG.md | 34 + plugins/playlist-backend/package.json | 2 +- plugins/playlist-common/CHANGELOG.md | 7 + plugins/playlist-common/package.json | 2 +- plugins/playlist/CHANGELOG.md | 17 + plugins/playlist/package.json | 2 +- plugins/proxy-backend/CHANGELOG.md | 8 + plugins/proxy-backend/package.json | 2 +- plugins/rollbar-backend/CHANGELOG.md | 9 + plugins/rollbar-backend/package.json | 2 +- plugins/rollbar/CHANGELOG.md | 11 + plugins/rollbar/package.json | 2 +- .../CHANGELOG.md | 12 + .../package.json | 2 +- .../CHANGELOG.md | 12 + .../package.json | 2 +- .../CHANGELOG.md | 9 + .../package.json | 2 +- plugins/scaffolder-backend/CHANGELOG.md | 32 + plugins/scaffolder-backend/package.json | 2 +- plugins/scaffolder-common/CHANGELOG.md | 8 + plugins/scaffolder-common/package.json | 2 +- plugins/scaffolder/CHANGELOG.md | 33 + plugins/scaffolder/package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- plugins/search-backend-module-pg/CHANGELOG.md | 11 + plugins/search-backend-module-pg/package.json | 2 +- plugins/search-backend-node/CHANGELOG.md | 14 + plugins/search-backend-node/package.json | 2 +- plugins/search-backend/CHANGELOG.md | 30 + plugins/search-backend/package.json | 2 +- plugins/search-common/CHANGELOG.md | 12 + plugins/search-common/package.json | 2 +- plugins/search-react/CHANGELOG.md | 182 ++ plugins/search-react/package.json | 2 +- plugins/search/CHANGELOG.md | 17 + plugins/search/package.json | 2 +- plugins/sentry/CHANGELOG.md | 11 + plugins/sentry/package.json | 2 +- plugins/shortcuts/CHANGELOG.md | 10 + plugins/shortcuts/package.json | 2 +- plugins/sonarqube-backend/CHANGELOG.md | 10 + plugins/sonarqube-backend/package.json | 2 +- plugins/sonarqube/CHANGELOG.md | 11 + plugins/sonarqube/package.json | 2 +- plugins/splunk-on-call/CHANGELOG.md | 11 + plugins/splunk-on-call/package.json | 2 +- plugins/stack-overflow-backend/CHANGELOG.md | 10 + plugins/stack-overflow-backend/package.json | 2 +- plugins/stack-overflow/CHANGELOG.md | 12 + plugins/stack-overflow/package.json | 2 +- .../CHANGELOG.md | 11 + .../package.json | 2 +- plugins/tech-insights-backend/CHANGELOG.md | 17 + plugins/tech-insights-backend/package.json | 2 +- plugins/tech-insights-common/CHANGELOG.md | 7 + plugins/tech-insights-common/package.json | 2 +- plugins/tech-insights-node/CHANGELOG.md | 12 + plugins/tech-insights-node/package.json | 2 +- plugins/tech-insights/CHANGELOG.md | 16 + plugins/tech-insights/package.json | 2 +- plugins/tech-radar/CHANGELOG.md | 9 + plugins/tech-radar/package.json | 2 +- .../techdocs-addons-test-utils/CHANGELOG.md | 16 + .../techdocs-addons-test-utils/package.json | 2 +- plugins/techdocs-backend/CHANGELOG.md | 21 + plugins/techdocs-backend/package.json | 2 +- .../CHANGELOG.md | 12 + .../package.json | 2 +- plugins/techdocs-node/CHANGELOG.md | 22 + plugins/techdocs-node/package.json | 2 +- plugins/techdocs-react/CHANGELOG.md | 11 + plugins/techdocs-react/package.json | 2 +- plugins/techdocs/CHANGELOG.md | 18 + plugins/techdocs/package.json | 2 +- plugins/todo-backend/CHANGELOG.md | 12 + plugins/todo-backend/package.json | 2 +- plugins/todo/CHANGELOG.md | 12 + plugins/todo/package.json | 2 +- plugins/user-settings-backend/CHANGELOG.md | 14 + plugins/user-settings-backend/package.json | 2 +- plugins/user-settings/CHANGELOG.md | 25 + plugins/user-settings/package.json | 2 +- plugins/vault-backend/CHANGELOG.md | 13 + plugins/vault-backend/package.json | 2 +- plugins/vault/CHANGELOG.md | 12 + plugins/vault/package.json | 2 +- plugins/xcmetrics/CHANGELOG.md | 10 + plugins/xcmetrics/package.json | 2 +- yarn.lock | 300 +- 455 files changed, 5334 insertions(+), 1778 deletions(-) delete mode 100644 .changeset/blue-lions-greet.md delete mode 100644 .changeset/brave-goats-rush.md delete mode 100644 .changeset/brave-peaches-brush.md delete mode 100644 .changeset/breezy-pots-worry.md delete mode 100644 .changeset/bright-rules-shout.md delete mode 100644 .changeset/brown-grapes-battle.md delete mode 100644 .changeset/calm-moose-fetch.md delete mode 100644 .changeset/calm-pianos-burn.md delete mode 100644 .changeset/chilled-apes-change.md delete mode 100644 .changeset/clean-camels-sneeze.md delete mode 100644 .changeset/clever-clocks-drive.md delete mode 100644 .changeset/clever-ties-burn.md delete mode 100644 .changeset/cuddly-bikes-tease.md delete mode 100644 .changeset/cuddly-ways-fail.md delete mode 100644 .changeset/curly-rats-itch.md delete mode 100644 .changeset/curvy-kiwis-fold.md delete mode 100644 .changeset/curvy-lemons-change.md delete mode 100644 .changeset/curvy-pets-wash.md delete mode 100644 .changeset/dry-shirts-attack.md delete mode 100644 .changeset/dull-rocks-warn.md delete mode 100644 .changeset/early-hornets-pay.md delete mode 100644 .changeset/early-rocks-smell.md delete mode 100644 .changeset/eleven-apples-accept.md delete mode 100644 .changeset/fair-tools-melt.md delete mode 100644 .changeset/famous-ligers-repair.md delete mode 100644 .changeset/fifty-berries-learn.md delete mode 100644 .changeset/five-tables-grow.md delete mode 100644 .changeset/fresh-donuts-arrive.md delete mode 100644 .changeset/fuzzy-dolls-give.md delete mode 100644 .changeset/fuzzy-dolls-shake.md delete mode 100644 .changeset/giant-pianos-repeat.md delete mode 100644 .changeset/good-plants-bathe.md delete mode 100644 .changeset/great-crews-own.md delete mode 100644 .changeset/great-numbers-reply.md delete mode 100644 .changeset/grumpy-pans-knock.md delete mode 100644 .changeset/hot-bugs-roll.md delete mode 100644 .changeset/hot-geese-vanish.md delete mode 100644 .changeset/itchy-rockets-hide.md delete mode 100644 .changeset/itchy-schools-run.md delete mode 100644 .changeset/kind-bees-suffer.md delete mode 100644 .changeset/kind-penguins-report.md delete mode 100644 .changeset/large-dingos-juggle.md delete mode 100644 .changeset/large-jars-fry.md delete mode 100644 .changeset/lazy-beds-pull.md delete mode 100644 .changeset/lazy-eyes-switch.md delete mode 100644 .changeset/lazy-fireants-check.md delete mode 100644 .changeset/little-hats-yell.md delete mode 100644 .changeset/little-roses-rule.md delete mode 100644 .changeset/loud-dots-sit.md delete mode 100644 .changeset/loud-wombats-taste.md delete mode 100644 .changeset/lovely-peaches-fold.md delete mode 100644 .changeset/lucky-beans-bathe.md delete mode 100644 .changeset/lucky-cows-boil.md delete mode 100644 .changeset/many-kangaroos-raise.md delete mode 100644 .changeset/mean-spiders-design.md delete mode 100644 .changeset/mighty-lions-march.md delete mode 100644 .changeset/moody-carrots-shout.md delete mode 100644 .changeset/nice-monkeys-punch.md delete mode 100644 .changeset/odd-pandas-suffer.md delete mode 100644 .changeset/odd-singers-taste.md delete mode 100644 .changeset/old-cobras-suffer.md delete mode 100644 .changeset/old-frogs-invent.md delete mode 100644 .changeset/old-melons-bathe.md delete mode 100644 .changeset/old-needles-brake.md delete mode 100644 .changeset/perfect-moose-drum.md delete mode 100644 .changeset/plenty-kids-fetch.md delete mode 100644 .changeset/plenty-laws-end.md delete mode 100644 .changeset/poor-clouds-ring.md delete mode 100644 .changeset/pre.json delete mode 100644 .changeset/pretty-buttons-develop.md delete mode 100644 .changeset/pretty-flies-agree.md delete mode 100644 .changeset/purple-masks-travel.md delete mode 100644 .changeset/quick-meals-talk.md delete mode 100644 .changeset/quiet-dancers-jog.md delete mode 100644 .changeset/quiet-hats-kick.md delete mode 100644 .changeset/quiet-ligers-draw.md delete mode 100644 .changeset/rare-cougars-cross.md delete mode 100644 .changeset/rare-hotels-cough.md delete mode 100644 .changeset/red-dots-sleep.md delete mode 100644 .changeset/red-pants-rush.md delete mode 100644 .changeset/renovate-5da63a4.md delete mode 100644 .changeset/renovate-a02d90b.md delete mode 100644 .changeset/rich-carrots-reflect.md delete mode 100644 .changeset/rude-bulldogs-sleep.md delete mode 100644 .changeset/rude-tables-shout.md delete mode 100644 .changeset/rude-tomatoes-behave.md delete mode 100644 .changeset/search-bobcats-love.md delete mode 100644 .changeset/search-cars-hide.md delete mode 100644 .changeset/search-clouds-begin.md delete mode 100644 .changeset/search-cycles-sniff.md delete mode 100644 .changeset/search-days-pull.md delete mode 100644 .changeset/search-dull-planes-prove.md delete mode 100644 .changeset/search-konstiga-fika-reglar.md delete mode 100644 .changeset/search-rats-grin.md delete mode 100644 .changeset/selfish-turkeys-exist.md delete mode 100644 .changeset/seven-panthers-chew.md delete mode 100644 .changeset/shaggy-books-smell.md delete mode 100644 .changeset/short-plants-return.md delete mode 100644 .changeset/silent-bees-repeat.md delete mode 100644 .changeset/silent-mice-brake.md delete mode 100644 .changeset/silly-rules-join.md delete mode 100644 .changeset/sixty-items-nail.md delete mode 100644 .changeset/slimy-suns-learn.md delete mode 100644 .changeset/slow-mirrors-eat.md delete mode 100644 .changeset/smooth-tables-pull.md delete mode 100644 .changeset/soft-falcons-love.md delete mode 100644 .changeset/stupid-dragons-complain.md delete mode 100644 .changeset/sweet-insects-camp.md delete mode 100644 .changeset/swift-phones-cheat.md delete mode 100644 .changeset/tall-baboons-deliver.md delete mode 100644 .changeset/tame-ads-complain.md delete mode 100644 .changeset/techdocs-olive-worms-yell.md delete mode 100644 .changeset/tender-drinks-drive.md delete mode 100644 .changeset/tender-parrots-peel.md delete mode 100644 .changeset/thick-kings-destroy.md delete mode 100644 .changeset/tiny-mails-bathe.md delete mode 100644 .changeset/tough-hairs-sparkle.md delete mode 100644 .changeset/tough-seahorses-learn.md delete mode 100644 .changeset/twelve-melons-notice.md delete mode 100644 .changeset/unlucky-seas-sip.md delete mode 100644 .changeset/warm-days-watch.md delete mode 100644 .changeset/wild-weeks-live.md delete mode 100644 .changeset/wise-ligers-scream.md delete mode 100644 .changeset/yellow-lemons-march.md delete mode 100644 .changeset/young-bugs-remember.md delete mode 100644 .changeset/young-olives-cheer.md create mode 100644 docs/releases/v1.7.0-changelog.md diff --git a/.changeset/blue-lions-greet.md b/.changeset/blue-lions-greet.md deleted file mode 100644 index c4f4d2a337..0000000000 --- a/.changeset/blue-lions-greet.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-user-settings': patch ---- - -Handle errors that may occur when the user logs out diff --git a/.changeset/brave-goats-rush.md b/.changeset/brave-goats-rush.md deleted file mode 100644 index 8a14f8ea00..0000000000 --- a/.changeset/brave-goats-rush.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-node': minor ---- - -Deprecated the `LocationSpec` type. It got moved from this package to the `@backstage/plugin-catalog-common` so make sure imports are updated. diff --git a/.changeset/brave-peaches-brush.md b/.changeset/brave-peaches-brush.md deleted file mode 100644 index f0661ba818..0000000000 --- a/.changeset/brave-peaches-brush.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder': patch ---- - -Making the description of the GitLab repoUrl owner field more clearer by focusing it refers to the GitLab namespace. diff --git a/.changeset/breezy-pots-worry.md b/.changeset/breezy-pots-worry.md deleted file mode 100644 index 48d5ae6c80..0000000000 --- a/.changeset/breezy-pots-worry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-org': patch ---- - -consistently show parent and child relations in group profile card diff --git a/.changeset/bright-rules-shout.md b/.changeset/bright-rules-shout.md deleted file mode 100644 index f7cdae3b4f..0000000000 --- a/.changeset/bright-rules-shout.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/catalog-model': patch ---- - -Defer `ajv` compilation of schema validators to improve module-import performance diff --git a/.changeset/brown-grapes-battle.md b/.changeset/brown-grapes-battle.md deleted file mode 100644 index 21b345fc83..0000000000 --- a/.changeset/brown-grapes-battle.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch ---- - -Bitbucket Cloud provider: Add option to configure schedule via `app-config.yaml` instead of in code. - -Please find how to configure the schedule at the config at -https://backstage.io/docs/integrations/bitbucketCloud/discovery diff --git a/.changeset/calm-moose-fetch.md b/.changeset/calm-moose-fetch.md deleted file mode 100644 index 96a364c801..0000000000 --- a/.changeset/calm-moose-fetch.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-catalog-react': minor -'@backstage/plugin-catalog': patch ---- - -Implemented the visual parts of `EntityKindPicker` so that it can be shown alongside the other filters on the left side of your catalog pages. diff --git a/.changeset/calm-pianos-burn.md b/.changeset/calm-pianos-burn.md deleted file mode 100644 index 6a44d42cfe..0000000000 --- a/.changeset/calm-pianos-burn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-react': patch ---- - -Added two new `EntityRefLinks` props, the first being `getTitle` that allows for customization of the title used for each link. The second one is `fetchEntities`, which triggers a fetching of all entities so that the full entity definition is available in the `getTitle` callback. diff --git a/.changeset/chilled-apes-change.md b/.changeset/chilled-apes-change.md deleted file mode 100644 index f9d44a75ee..0000000000 --- a/.changeset/chilled-apes-change.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-common': patch ---- - -Added back support for when no branch is provided for the Bitbucket Server `UrlReader` diff --git a/.changeset/clean-camels-sneeze.md b/.changeset/clean-camels-sneeze.md deleted file mode 100644 index 0fccb52e0b..0000000000 --- a/.changeset/clean-camels-sneeze.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Newly created Backstage repositories now use the stable version 6 of -`react-router`, just like the main repo does. Please let us know if you find any -issues with this. - -Migrating to the stable version of `react-router` is optional for the time -being. But if you want to do the same for your existing repository, please -follow [this -guide](https://backstage.io/docs/tutorials/react-router-stable-migration). diff --git a/.changeset/clever-clocks-drive.md b/.changeset/clever-clocks-drive.md deleted file mode 100644 index 0834133e36..0000000000 --- a/.changeset/clever-clocks-drive.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/core-components': patch -'@backstage/plugin-catalog-graph': patch ---- - -Added `curve` prop to the `DependencyGraph` component to select the type of layout diff --git a/.changeset/clever-ties-burn.md b/.changeset/clever-ties-burn.md deleted file mode 100644 index cdd861e069..0000000000 --- a/.changeset/clever-ties-burn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-user-settings': patch ---- - -Prevent `.set()` to execute a request to the StorageClient if the user is `guest` diff --git a/.changeset/cuddly-bikes-tease.md b/.changeset/cuddly-bikes-tease.md deleted file mode 100644 index d3fc8bd1bb..0000000000 --- a/.changeset/cuddly-bikes-tease.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-app-api': patch ---- - -Fixed a bug where gathered index routes would fail to bind routable extensions. This would typically show up when placing a routable extension in the entity page overview tab. diff --git a/.changeset/cuddly-ways-fail.md b/.changeset/cuddly-ways-fail.md deleted file mode 100644 index bb1b356036..0000000000 --- a/.changeset/cuddly-ways-fail.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder': patch ---- - -Make the `/next` scaffolder work end to end with the old `TaskPage` view diff --git a/.changeset/curly-rats-itch.md b/.changeset/curly-rats-itch.md deleted file mode 100644 index b6fba9dc1e..0000000000 --- a/.changeset/curly-rats-itch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Tweak the Jest Caching loader to only operate when in `watch` mode diff --git a/.changeset/curvy-kiwis-fold.md b/.changeset/curvy-kiwis-fold.md deleted file mode 100644 index 8d94f38343..0000000000 --- a/.changeset/curvy-kiwis-fold.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Update versions of packages used in the create-app template, to match those in the main repo diff --git a/.changeset/curvy-lemons-change.md b/.changeset/curvy-lemons-change.md deleted file mode 100644 index 29e31a7b60..0000000000 --- a/.changeset/curvy-lemons-change.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-test-utils': patch ---- - -Fixed handling of root scoped services in `startTestBackend`. diff --git a/.changeset/curvy-pets-wash.md b/.changeset/curvy-pets-wash.md deleted file mode 100644 index 4c824f9ef4..0000000000 --- a/.changeset/curvy-pets-wash.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': minor ---- - -Added a new method `addLocationAnalyzers` to the `CatalogBuilder`. With this you can add location analyzers to your catalog. These analyzers will be used by the /analyze-location endpoint to decide if the provided URL contains any catalog-info.yaml files already or not. - -Moved the following types from this package to `@backstage/plugin-catalog-backend`. - -- AnalyzeLocationResponse -- AnalyzeLocationRequest -- AnalyzeLocationExistingEntity -- AnalyzeLocationGenerateEntity -- AnalyzeLocationEntityField diff --git a/.changeset/dry-shirts-attack.md b/.changeset/dry-shirts-attack.md deleted file mode 100644 index ba6c7379f5..0000000000 --- a/.changeset/dry-shirts-attack.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder': patch ---- - -Support custom layouts in dry run editor diff --git a/.changeset/dull-rocks-warn.md b/.changeset/dull-rocks-warn.md deleted file mode 100644 index 0ccf4f20cb..0000000000 --- a/.changeset/dull-rocks-warn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': minor ---- - -Added a new property called `additionalTemplateGlobals` which allows you to add global functions to the scaffolder nunjucks templates. diff --git a/.changeset/early-hornets-pay.md b/.changeset/early-hornets-pay.md deleted file mode 100644 index c50f8fe821..0000000000 --- a/.changeset/early-hornets-pay.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-auth-node': patch ---- - -Ensure `getIdentity` throws an `AuthenticationError` instead of a `NotAllowed` error when authentication fails diff --git a/.changeset/early-rocks-smell.md b/.changeset/early-rocks-smell.md deleted file mode 100644 index e35554f03a..0000000000 --- a/.changeset/early-rocks-smell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-bazaar': patch ---- - -Added a `Overview Card` for either latest or random projects. Changed `ProjectPreview.tsx` so it take `gridSize` and `useTablePagination` as props. diff --git a/.changeset/eleven-apples-accept.md b/.changeset/eleven-apples-accept.md deleted file mode 100644 index f46bf4fe0c..0000000000 --- a/.changeset/eleven-apples-accept.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-components': patch ---- - -Deep-import LightAsync component to improve module-import speed diff --git a/.changeset/fair-tools-melt.md b/.changeset/fair-tools-melt.md deleted file mode 100644 index e63e4d5181..0000000000 --- a/.changeset/fair-tools-melt.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-app-api': patch ---- - -Added possibility to configure index plugin of the HTTP router service. diff --git a/.changeset/famous-ligers-repair.md b/.changeset/famous-ligers-repair.md deleted file mode 100644 index bc3780cba7..0000000000 --- a/.changeset/famous-ligers-repair.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-github': patch ---- - -`GitHubEntityProvider`: Add option to configure schedule via `app-config.yaml` instead of in code. - -Please find how to configure the schedule at the config at -https://backstage.io/docs/integrations/github/discovery diff --git a/.changeset/fifty-berries-learn.md b/.changeset/fifty-berries-learn.md deleted file mode 100644 index 647246a482..0000000000 --- a/.changeset/fifty-berries-learn.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -'@backstage/plugin-catalog': minor ---- - -Added new column `Label` to `CatalogTable.columns`, this new column allows you make use of labels from metadata. -For example: category and visibility are type of labels associated with API entity illustrated below. - -YAML code snippet for API entity - -```yaml -apiVersion: backstage.io/v1alpha1 -kind: API -metadata: - name: sample-api - description: API for sample - links: - - url: http://localhost:8080/swagger-ui.html - title: Swagger UI - tags: - - http - labels: - category: legacy - visibility: protected -``` - -Consumers can customise columns to include label column and show in api-docs list - -```typescript -const columns = [ - CatalogTable.columns.createNameColumn({ defaultKind: 'API' }), - CatalogTable.columns.createLabelColumn('category', { title: 'Category' }), - CatalogTable.columns.createLabelColumn('visibility', { - title: 'Visibility', - defaultValue: 'public', - }), -]; -``` diff --git a/.changeset/five-tables-grow.md b/.changeset/five-tables-grow.md deleted file mode 100644 index 982b17b97b..0000000000 --- a/.changeset/five-tables-grow.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@backstage/plugin-catalog-common': patch ---- - -Moved the following types from `@backstage/plugin-catalog-backend` to this package. - -- AnalyzeLocationResponse -- AnalyzeLocationRequest -- AnalyzeLocationExistingEntity -- AnalyzeLocationGenerateEntity -- AnalyzeLocationEntityField diff --git a/.changeset/fresh-donuts-arrive.md b/.changeset/fresh-donuts-arrive.md deleted file mode 100644 index 55a85533b8..0000000000 --- a/.changeset/fresh-donuts-arrive.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-bitbucket': patch ---- - -Deprecate `@backstage/plugin-catalog-backend-module-bitbucket`. - -Please migrate to `@backstage/plugin-catalog-backend-module-bitbucket-cloud` -or `@backstage/plugin-catalog-backend-module-bitbucket-server` instead. diff --git a/.changeset/fuzzy-dolls-give.md b/.changeset/fuzzy-dolls-give.md deleted file mode 100644 index 4de4d2e128..0000000000 --- a/.changeset/fuzzy-dolls-give.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-tasks': patch ---- - -Added new function `readTaskScheduleDefinitionFromConfig` to read `TaskScheduleDefinition` (aka. schedule) from the `Config`. diff --git a/.changeset/fuzzy-dolls-shake.md b/.changeset/fuzzy-dolls-shake.md deleted file mode 100644 index 2d290a3bf3..0000000000 --- a/.changeset/fuzzy-dolls-shake.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -'@backstage/plugin-catalog-import': minor ---- - -**Breaking** -Moved the code search for the existing catalog-info.yaml files to the backend from the frontend. It means it will use the configured GitHub integration's credentials. - -Add the following to your `CatalogBuilder` to have the repo URL ingestion working again. - -```ts -// catalog.ts -import { GithubLocationAnalyzer } from '@backstage/plugin-catalog-backend-module-github'; -... - builder.addLocationAnalyzers( - new GithubLocationAnalyzer({ - discovery: env.discovery, - config: env.config, - }), - ); -... -``` diff --git a/.changeset/giant-pianos-repeat.md b/.changeset/giant-pianos-repeat.md deleted file mode 100644 index d83ce285e3..0000000000 --- a/.changeset/giant-pianos-repeat.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch ---- - -Add `bitbucketCloudCatalogModule` (new backend-plugin-api, alpha). diff --git a/.changeset/good-plants-bathe.md b/.changeset/good-plants-bathe.md deleted file mode 100644 index 371251ac13..0000000000 --- a/.changeset/good-plants-bathe.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/cli': patch -'@backstage/plugin-sonarqube-backend': patch -'@backstage/plugin-vault-backend': patch ---- - -Normalize on winston version ^3.2.1 diff --git a/.changeset/great-crews-own.md b/.changeset/great-crews-own.md deleted file mode 100644 index dfe4d62da9..0000000000 --- a/.changeset/great-crews-own.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Treat files in `__testUtils__` and `__mocks__` directories as test files for linting -purposes. - -Updates the parts of the eslint configuration generator that specify which files -should be treated as test code to include any files under two additional -directories: - -- `__mocks__`: this is the directory used by Jest[0] for mock code. -- `__testUtils__`: a suggested location for utility code executed only when - running tests. - -[0]: https://jestjs.io/docs/manual-mocks#mocking-user-modules diff --git a/.changeset/great-numbers-reply.md b/.changeset/great-numbers-reply.md deleted file mode 100644 index b72b05debf..0000000000 --- a/.changeset/great-numbers-reply.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-common': patch ---- - -Fix BitBucket server integration diff --git a/.changeset/grumpy-pans-knock.md b/.changeset/grumpy-pans-knock.md deleted file mode 100644 index 74e81e7bec..0000000000 --- a/.changeset/grumpy-pans-knock.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -'@techdocs/cli': patch -'@backstage/plugin-techdocs-node': patch ---- - -fixing techdocs-cli Docker client creation - -Docker client does not need to be created when --no-docker -option is provided. - -If you had DOCKER_CERT_PATH environment variable defined -the Docker client was looking for certificates -and breaking techdocs-cli generate command even with --no-docker -option. diff --git a/.changeset/hot-bugs-roll.md b/.changeset/hot-bugs-roll.md deleted file mode 100644 index babc909f45..0000000000 --- a/.changeset/hot-bugs-roll.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-permission-node': patch ---- - -Exported types for the .metadata endpoint of the permission router diff --git a/.changeset/hot-geese-vanish.md b/.changeset/hot-geese-vanish.md deleted file mode 100644 index b392c875c7..0000000000 --- a/.changeset/hot-geese-vanish.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-auth-backend': minor ---- - -Google OAuth refresh tokens will now be revoked on logout by calling Google's API diff --git a/.changeset/itchy-rockets-hide.md b/.changeset/itchy-rockets-hide.md deleted file mode 100644 index ec6df7fa6d..0000000000 --- a/.changeset/itchy-rockets-hide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-tech-insights': patch ---- - -Make sure to reload score card contents when props change diff --git a/.changeset/itchy-schools-run.md b/.changeset/itchy-schools-run.md deleted file mode 100644 index 6e46cabb15..0000000000 --- a/.changeset/itchy-schools-run.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-plugin-api': patch ---- - -Allow interfaces to be used for inferred option types. diff --git a/.changeset/kind-bees-suffer.md b/.changeset/kind-bees-suffer.md deleted file mode 100644 index 79e9c0a027..0000000000 --- a/.changeset/kind-bees-suffer.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -'@backstage/plugin-permission-common': minor -'@backstage/plugin-permission-node': minor ---- - -**BREAKING**: When defining permission rules, it's now necessary to provide a [ZodSchema](https://github.com/colinhacks/zod) that specifies the parameters the rule expects. This has been added to help better describe the parameters in the response of the metadata endpoint and to validate the parameters before a rule is executed. - -To help with this, we have also made a change to the API of permission rules. Before, the permission rules `toQuery` and `apply` signature expected parameters to be separate arguments, like so... - -```ts -createPermissionRule({ - apply: (resource, foo, bar) => true, - toQuery: (foo, bar) => {}, -}); -``` - -The API has now changed to expect the parameters as a single object - -```ts -createPermissionRule({ - paramSchema: z.object({ - foo: z.string().describe('Foo value to match'), - bar: z.string().describe('Bar value to match'), - }), - apply: (resource, { foo, bar }) => true, - toQuery: ({ foo, bar }) => {}, -}); -``` - -One final change made is to limit the possible values for a parameter to primitives and arrays of primitives. diff --git a/.changeset/kind-penguins-report.md b/.changeset/kind-penguins-report.md deleted file mode 100644 index 4023ea5976..0000000000 --- a/.changeset/kind-penguins-report.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@backstage/plugin-auth-backend': minor ---- - -CookieConfigurer can optionally return the `SameSite` cookie attribute. -CookieConfigurer now requires an additional argument `appOrigin` - the origin URL of the app - which is used to calculate the `SameSite` attribute. -defaultCookieConfigurer returns the `SameSite` attribute which defaults to `Lax`. In cases where an auth-backend is running on a different domain than the App, `SameSite=None` is used - but only for secure contexts. This is so that cookies can be included in third-party requests. - -OAuthAdapterOptions has been modified to require additional arguments, `baseUrl`, and `cookieConfigurer`. -OAuthAdapter now resolves cookie configuration using its supplied CookieConfigurer for each request to make sure that the proper attributes always are set. diff --git a/.changeset/large-dingos-juggle.md b/.changeset/large-dingos-juggle.md deleted file mode 100644 index 8566a0f305..0000000000 --- a/.changeset/large-dingos-juggle.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-defaults': patch ---- - -Added root logger service to the set of default services. diff --git a/.changeset/large-jars-fry.md b/.changeset/large-jars-fry.md deleted file mode 100644 index 0da3f4302b..0000000000 --- a/.changeset/large-jars-fry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-bazaar': patch ---- - -Link to the user catalog entity of a member diff --git a/.changeset/lazy-beds-pull.md b/.changeset/lazy-beds-pull.md deleted file mode 100644 index 0d8be46576..0000000000 --- a/.changeset/lazy-beds-pull.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Updated fallback versions of dependencies in all templates. diff --git a/.changeset/lazy-eyes-switch.md b/.changeset/lazy-eyes-switch.md deleted file mode 100644 index f712f852ae..0000000000 --- a/.changeset/lazy-eyes-switch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-user-settings-backend': patch ---- - -Use `Response.status` instead of `.send(number)` diff --git a/.changeset/lazy-fireants-check.md b/.changeset/lazy-fireants-check.md deleted file mode 100644 index 234501b07a..0000000000 --- a/.changeset/lazy-fireants-check.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-kubernetes': patch ---- - -Add useCustomResources react hook for fetching Kubernetes Custom Resources diff --git a/.changeset/little-hats-yell.md b/.changeset/little-hats-yell.md deleted file mode 100644 index 6063459d8d..0000000000 --- a/.changeset/little-hats-yell.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': minor ---- - -Update the `github:publish` action to allow passing whether pull -requests must be up to date with the default branch before merging. diff --git a/.changeset/little-roses-rule.md b/.changeset/little-roses-rule.md deleted file mode 100644 index 4acec131e6..0000000000 --- a/.changeset/little-roses-rule.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Added a new `repo test` command. diff --git a/.changeset/loud-dots-sit.md b/.changeset/loud-dots-sit.md deleted file mode 100644 index fa6175358e..0000000000 --- a/.changeset/loud-dots-sit.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-user-settings': patch ---- - -Update installation instructions diff --git a/.changeset/loud-wombats-taste.md b/.changeset/loud-wombats-taste.md deleted file mode 100644 index a1558aa517..0000000000 --- a/.changeset/loud-wombats-taste.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-tech-insights-backend': patch ---- - -The Tech Insights plugin supports running fact retrievers across multiple instances. Update the README to remove the stale instructions. diff --git a/.changeset/lovely-peaches-fold.md b/.changeset/lovely-peaches-fold.md deleted file mode 100644 index dcff35f4d7..0000000000 --- a/.changeset/lovely-peaches-fold.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-tech-insights': patch ---- - -making available the search for the last FACTS executed diff --git a/.changeset/lucky-beans-bathe.md b/.changeset/lucky-beans-bathe.md deleted file mode 100644 index b425a29599..0000000000 --- a/.changeset/lucky-beans-bathe.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder': patch ---- - -Bump to `react-jsonschema-form@v5-beta` for the `NextRouter` under `@alpha` exports diff --git a/.changeset/lucky-cows-boil.md b/.changeset/lucky-cows-boil.md deleted file mode 100644 index a598b3da95..0000000000 --- a/.changeset/lucky-cows-boil.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@backstage/plugin-bitbucket-cloud-common': minor ---- - -Update Bitbucket Cloud models to latest OAS version. - -The latest specification contained some BREAKING CHANGES -due to removed fields. - -All of these fields are not used at other plugins, though. -Therefore, this change has no impact on other modules here. diff --git a/.changeset/many-kangaroos-raise.md b/.changeset/many-kangaroos-raise.md deleted file mode 100644 index 3d1a25d47e..0000000000 --- a/.changeset/many-kangaroos-raise.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog': patch ---- - -Added `emptyContent` property to CatalogTable and DefaultCatalogPage to support customization of the Catalog Table. diff --git a/.changeset/mean-spiders-design.md b/.changeset/mean-spiders-design.md deleted file mode 100644 index 3704c9fca9..0000000000 --- a/.changeset/mean-spiders-design.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-backend': minor ---- - -Be less restrictive with unknown keys on query endpoint diff --git a/.changeset/mighty-lions-march.md b/.changeset/mighty-lions-march.md deleted file mode 100644 index 2f0b63d238..0000000000 --- a/.changeset/mighty-lions-march.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-vault-backend': patch ---- - -VaultBuilder.tsx renamed to VaultBuilder in order for module to be correctly loaded. diff --git a/.changeset/moody-carrots-shout.md b/.changeset/moody-carrots-shout.md deleted file mode 100644 index 6e15fe3ff5..0000000000 --- a/.changeset/moody-carrots-shout.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-github': patch ---- - -Added `GithubLocationAnalyzer`. This can be used to add to the `CatalogBuilder`. When added this will be used by `RepoLocationAnalyzer` to figure out if the given URL that you are trying to import from the /catalog-import page already contains catalog-info.yaml files. diff --git a/.changeset/nice-monkeys-punch.md b/.changeset/nice-monkeys-punch.md deleted file mode 100644 index 676d085218..0000000000 --- a/.changeset/nice-monkeys-punch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-react': patch ---- - -Fixed issue where the query kind parameter is not honored diff --git a/.changeset/odd-pandas-suffer.md b/.changeset/odd-pandas-suffer.md deleted file mode 100644 index ce562a9a89..0000000000 --- a/.changeset/odd-pandas-suffer.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-github-issues': patch ---- - -Updated the `luxon` dependency to 3.x diff --git a/.changeset/odd-singers-taste.md b/.changeset/odd-singers-taste.md deleted file mode 100644 index 524de42255..0000000000 --- a/.changeset/odd-singers-taste.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder': minor ---- - -Add support for link to TechDocs and other links defined in template entity specification metadata on TemplateCard diff --git a/.changeset/old-cobras-suffer.md b/.changeset/old-cobras-suffer.md deleted file mode 100644 index 2891c29133..0000000000 --- a/.changeset/old-cobras-suffer.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/test-utils': patch -'@backstage/plugin-cicd-statistics': patch ---- - -Align on the version of `@material-ui/icons` used, to `^4.9.1` like other packages in the main repo diff --git a/.changeset/old-frogs-invent.md b/.changeset/old-frogs-invent.md deleted file mode 100644 index b1e77fa369..0000000000 --- a/.changeset/old-frogs-invent.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-github': patch ---- - -Use schedule from config at backend module. - -Also, it removes `GithubEntityProviderCatalogModuleOptions` -in favor of config-only for the backend module setup -like at other similar modules. diff --git a/.changeset/old-melons-bathe.md b/.changeset/old-melons-bathe.md deleted file mode 100644 index ac21377171..0000000000 --- a/.changeset/old-melons-bathe.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder': patch ---- - -Fixed a bug where the `allowed*` values for the `RepoUrlPicker` would be reset on render. diff --git a/.changeset/old-needles-brake.md b/.changeset/old-needles-brake.md deleted file mode 100644 index eea2bf6539..0000000000 --- a/.changeset/old-needles-brake.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-github-issues': patch -'@backstage/plugin-github-pull-requests-board': patch ---- - -Properly filter on relations instead of the spec, when finding by owner diff --git a/.changeset/perfect-moose-drum.md b/.changeset/perfect-moose-drum.md deleted file mode 100644 index 833e5eeb35..0000000000 --- a/.changeset/perfect-moose-drum.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Updated lockfile parsing to have better support for Yarn 3. diff --git a/.changeset/plenty-kids-fetch.md b/.changeset/plenty-kids-fetch.md deleted file mode 100644 index 6a31b4db20..0000000000 --- a/.changeset/plenty-kids-fetch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/catalog-client': patch ---- - -Renamed argument in `validateEntity` from `location` to `locationRef` diff --git a/.changeset/plenty-laws-end.md b/.changeset/plenty-laws-end.md deleted file mode 100644 index e026ca3fca..0000000000 --- a/.changeset/plenty-laws-end.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-common': patch ---- - -Fixed an issue where `getClient()` for a `pluginId` would return different clients and not share them diff --git a/.changeset/poor-clouds-ring.md b/.changeset/poor-clouds-ring.md deleted file mode 100644 index 62ba3928a7..0000000000 --- a/.changeset/poor-clouds-ring.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Fixed a bug where entities provided without a location key would always replace existing entities, rather than updating them. diff --git a/.changeset/pre.json b/.changeset/pre.json deleted file mode 100644 index dafb8797e2..0000000000 --- a/.changeset/pre.json +++ /dev/null @@ -1,287 +0,0 @@ -{ - "mode": "exit", - "tag": "next", - "initialVersions": { - "example-app": "0.2.75", - "@backstage/app-defaults": "1.0.6", - "example-backend": "0.2.75", - "@backstage/backend-app-api": "0.2.1", - "@backstage/backend-common": "0.15.1", - "@backstage/backend-defaults": "0.1.1", - "example-backend-next": "0.0.3", - "@backstage/backend-plugin-api": "0.1.2", - "@backstage/backend-tasks": "0.3.5", - "@backstage/backend-test-utils": "0.1.28", - "@backstage/catalog-client": "1.1.0", - "@backstage/catalog-model": "1.1.1", - "@backstage/cli": "0.19.0", - "@backstage/cli-common": "0.1.10", - "@backstage/codemods": "0.1.39", - "@backstage/config": "1.0.2", - "@backstage/config-loader": "1.1.4", - "@backstage/core-app-api": "1.1.0", - "@backstage/core-components": "0.11.1", - "@backstage/core-plugin-api": "1.0.6", - "@backstage/create-app": "0.4.31", - "@backstage/dev-utils": "1.0.6", - "e2e-test": "0.2.0", - "@backstage/errors": "1.1.1", - "@backstage/integration": "1.3.1", - "@backstage/integration-react": "1.1.4", - "@backstage/release-manifests": "0.0.6", - "@techdocs/cli": "1.2.1", - "techdocs-cli-embedded-app": "0.2.74", - "@backstage/test-utils": "1.2.0", - "@backstage/theme": "0.2.16", - "@backstage/types": "1.0.0", - "@backstage/version-bridge": "1.0.1", - "@backstage/plugin-adr": "0.2.1", - "@backstage/plugin-adr-backend": "0.2.1", - "@backstage/plugin-adr-common": "0.2.1", - "@backstage/plugin-airbrake": "0.3.9", - "@backstage/plugin-airbrake-backend": "0.2.9", - "@backstage/plugin-allure": "0.1.25", - "@backstage/plugin-analytics-module-ga": "0.1.20", - "@backstage/plugin-apache-airflow": "0.2.2", - "@backstage/plugin-api-docs": "0.8.9", - "@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.0", - "@backstage/plugin-apollo-explorer": "0.1.2", - "@backstage/plugin-app-backend": "0.3.36", - "@backstage/plugin-auth-backend": "0.16.0", - "@backstage/plugin-auth-node": "0.2.5", - "@backstage/plugin-azure-devops": "0.2.0", - "@backstage/plugin-azure-devops-backend": "0.3.15", - "@backstage/plugin-azure-devops-common": "0.3.0", - "@backstage/plugin-badges": "0.2.33", - "@backstage/plugin-badges-backend": "0.1.30", - "@backstage/plugin-bazaar": "0.1.24", - "@backstage/plugin-bazaar-backend": "0.1.20", - "@backstage/plugin-bitbucket-cloud-common": "0.1.3", - "@backstage/plugin-bitrise": "0.1.36", - "@backstage/plugin-catalog": "1.5.1", - "@backstage/plugin-catalog-backend": "1.4.0", - "@backstage/plugin-catalog-backend-module-aws": "0.1.9", - "@backstage/plugin-catalog-backend-module-azure": "0.1.7", - "@backstage/plugin-catalog-backend-module-bitbucket": "0.2.3", - "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.1.3", - "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.1.1", - "@backstage/plugin-catalog-backend-module-gerrit": "0.1.4", - "@backstage/plugin-catalog-backend-module-github": "0.1.7", - "@backstage/plugin-catalog-backend-module-gitlab": "0.1.7", - "@backstage/plugin-catalog-backend-module-ldap": "0.5.3", - "@backstage/plugin-catalog-backend-module-msgraph": "0.4.2", - "@backstage/plugin-catalog-backend-module-openapi": "0.1.2", - "@backstage/plugin-catalog-common": "1.0.6", - "@internal/plugin-catalog-customized": "0.0.2", - "@backstage/plugin-catalog-graph": "0.2.21", - "@backstage/plugin-catalog-graphql": "0.3.13", - "@backstage/plugin-catalog-import": "0.8.12", - "@backstage/plugin-catalog-node": "1.1.0", - "@backstage/plugin-catalog-react": "1.1.4", - "@backstage/plugin-cicd-statistics": "0.1.11", - "@backstage/plugin-cicd-statistics-module-gitlab": "0.1.5", - "@backstage/plugin-circleci": "0.3.9", - "@backstage/plugin-cloudbuild": "0.3.9", - "@backstage/plugin-code-climate": "0.1.9", - "@backstage/plugin-code-coverage": "0.2.2", - "@backstage/plugin-code-coverage-backend": "0.2.2", - "@backstage/plugin-codescene": "0.1.4", - "@backstage/plugin-config-schema": "0.1.32", - "@backstage/plugin-cost-insights": "0.11.31", - "@backstage/plugin-cost-insights-common": "0.1.1", - "@backstage/plugin-dynatrace": "0.2.0", - "@internal/plugin-todo-list": "1.0.5", - "@internal/plugin-todo-list-backend": "1.0.5", - "@internal/plugin-todo-list-common": "1.0.4", - "@backstage/plugin-explore": "0.3.40", - "@backstage/plugin-explore-react": "0.0.21", - "@backstage/plugin-firehydrant": "0.1.26", - "@backstage/plugin-fossa": "0.2.41", - "@backstage/plugin-gcalendar": "0.3.5", - "@backstage/plugin-gcp-projects": "0.3.28", - "@backstage/plugin-git-release-manager": "0.3.22", - "@backstage/plugin-github-actions": "0.5.9", - "@backstage/plugin-github-deployments": "0.1.40", - "@backstage/plugin-github-issues": "0.1.1", - "@backstage/plugin-github-pull-requests-board": "0.1.3", - "@backstage/plugin-gitops-profiles": "0.3.27", - "@backstage/plugin-gocd": "0.1.15", - "@backstage/plugin-graphiql": "0.2.41", - "@backstage/plugin-graphql-backend": "0.1.26", - "@backstage/plugin-home": "0.4.25", - "@backstage/plugin-ilert": "0.1.35", - "@backstage/plugin-jenkins": "0.7.8", - "@backstage/plugin-jenkins-backend": "0.1.26", - "@backstage/plugin-jenkins-common": "0.1.8", - "@backstage/plugin-kafka": "0.3.9", - "@backstage/plugin-kafka-backend": "0.2.29", - "@backstage/plugin-kubernetes": "0.7.2", - "@backstage/plugin-kubernetes-backend": "0.7.2", - "@backstage/plugin-kubernetes-common": "0.4.2", - "@backstage/plugin-lighthouse": "0.3.9", - "@backstage/plugin-newrelic": "0.3.27", - "@backstage/plugin-newrelic-dashboard": "0.2.2", - "@backstage/plugin-org": "0.5.9", - "@backstage/plugin-pagerduty": "0.5.2", - "@backstage/plugin-periskop": "0.1.7", - "@backstage/plugin-periskop-backend": "0.1.7", - "@backstage/plugin-permission-backend": "0.5.11", - "@backstage/plugin-permission-common": "0.6.4", - "@backstage/plugin-permission-node": "0.6.5", - "@backstage/plugin-permission-react": "0.4.5", - "@backstage/plugin-playlist": "0.1.0", - "@backstage/plugin-playlist-backend": "0.1.0", - "@backstage/plugin-playlist-common": "0.1.0", - "@backstage/plugin-proxy-backend": "0.2.30", - "@backstage/plugin-rollbar": "0.4.9", - "@backstage/plugin-rollbar-backend": "0.1.33", - "@backstage/plugin-scaffolder": "1.6.0", - "@backstage/plugin-scaffolder-backend": "1.6.0", - "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.2.11", - "@backstage/plugin-scaffolder-backend-module-rails": "0.4.4", - "@backstage/plugin-scaffolder-backend-module-yeoman": "0.2.9", - "@backstage/plugin-scaffolder-common": "1.2.0", - "@backstage/plugin-search": "1.0.2", - "@backstage/plugin-search-backend": "1.0.2", - "@backstage/plugin-search-backend-module-elasticsearch": "1.0.2", - "@backstage/plugin-search-backend-module-pg": "0.4.0", - "@backstage/plugin-search-backend-node": "1.0.2", - "@backstage/plugin-search-common": "1.0.1", - "@backstage/plugin-search-react": "1.1.0", - "@backstage/plugin-sentry": "0.4.2", - "@backstage/plugin-shortcuts": "0.3.1", - "@backstage/plugin-sonarqube": "0.4.1", - "@backstage/plugin-sonarqube-backend": "0.1.1", - "@backstage/plugin-splunk-on-call": "0.3.33", - "@backstage/plugin-stack-overflow": "0.1.5", - "@backstage/plugin-stack-overflow-backend": "0.1.5", - "@backstage/plugin-tech-insights": "0.3.0", - "@backstage/plugin-tech-insights-backend": "0.5.2", - "@backstage/plugin-tech-insights-backend-module-jsonfc": "0.1.20", - "@backstage/plugin-tech-insights-common": "0.2.6", - "@backstage/plugin-tech-insights-node": "0.3.4", - "@backstage/plugin-tech-radar": "0.5.16", - "@backstage/plugin-techdocs": "1.3.2", - "@backstage/plugin-techdocs-addons-test-utils": "1.0.4", - "@backstage/plugin-techdocs-backend": "1.3.0", - "@backstage/plugin-techdocs-module-addons-contrib": "1.0.4", - "@backstage/plugin-techdocs-node": "1.4.0", - "@backstage/plugin-techdocs-react": "1.0.4", - "@backstage/plugin-todo": "0.2.11", - "@backstage/plugin-todo-backend": "0.1.33", - "@backstage/plugin-user-settings": "0.4.8", - "@backstage/plugin-user-settings-backend": "0.1.0", - "@backstage/plugin-vault": "0.1.3", - "@backstage/plugin-vault-backend": "0.2.2", - "@backstage/plugin-xcmetrics": "0.2.29" - }, - "changesets": [ - "blue-lions-greet", - "brave-goats-rush", - "brave-peaches-brush", - "breezy-pots-worry", - "bright-rules-shout", - "brown-grapes-battle", - "calm-moose-fetch", - "calm-pianos-burn", - "clean-camels-sneeze", - "clever-ties-burn", - "cuddly-bikes-tease", - "cuddly-ways-fail", - "curly-rats-itch", - "curvy-kiwis-fold", - "curvy-lemons-change", - "curvy-pets-wash", - "dry-shirts-attack", - "dull-rocks-warn", - "early-rocks-smell", - "eleven-apples-accept", - "fair-tools-melt", - "fifty-berries-learn", - "five-tables-grow", - "fresh-donuts-arrive", - "fuzzy-dolls-give", - "fuzzy-dolls-shake", - "giant-pianos-repeat", - "great-numbers-reply", - "grumpy-pans-knock", - "hot-geese-vanish", - "itchy-schools-run", - "kind-bees-suffer", - "kind-penguins-report", - "large-dingos-juggle", - "large-jars-fry", - "lazy-beds-pull", - "lazy-eyes-switch", - "lazy-fireants-check", - "little-hats-yell", - "little-roses-rule", - "loud-dots-sit", - "lovely-peaches-fold", - "lucky-beans-bathe", - "lucky-cows-boil", - "mean-spiders-design", - "mighty-lions-march", - "moody-carrots-shout", - "odd-pandas-suffer", - "odd-singers-taste", - "old-cobras-suffer", - "old-melons-bathe", - "old-needles-brake", - "perfect-moose-drum", - "plenty-kids-fetch", - "plenty-laws-end", - "poor-clouds-ring", - "pretty-buttons-develop", - "purple-masks-travel", - "quick-meals-talk", - "quiet-dancers-jog", - "quiet-hats-kick", - "quiet-ligers-draw", - "rare-cougars-cross", - "rare-hotels-cough", - "red-dots-sleep", - "red-pants-rush", - "renovate-5da63a4", - "renovate-a02d90b", - "rich-carrots-reflect", - "rude-bulldogs-sleep", - "rude-tomatoes-behave", - "search-bobcats-love", - "search-cars-hide", - "search-clouds-begin", - "search-cycles-sniff", - "search-dull-planes-prove", - "search-rats-grin", - "selfish-turkeys-exist", - "seven-panthers-chew", - "shaggy-books-smell", - "short-plants-return", - "silent-bees-repeat", - "silly-rules-join", - "sixty-items-nail", - "slimy-suns-learn", - "slow-mirrors-eat", - "smooth-tables-pull", - "soft-falcons-love", - "stupid-dragons-complain", - "sweet-insects-camp", - "swift-phones-cheat", - "tall-baboons-deliver", - "techdocs-olive-worms-yell", - "tender-drinks-drive", - "tender-parrots-peel", - "thick-kings-destroy", - "tiny-mails-bathe", - "tough-hairs-sparkle", - "tough-seahorses-learn", - "twelve-melons-notice", - "unlucky-seas-sip", - "warm-days-watch", - "wild-weeks-live", - "wise-ligers-scream", - "yellow-lemons-march", - "young-bugs-remember", - "young-olives-cheer" - ] -} diff --git a/.changeset/pretty-buttons-develop.md b/.changeset/pretty-buttons-develop.md deleted file mode 100644 index 7c686df250..0000000000 --- a/.changeset/pretty-buttons-develop.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-auth-backend': patch ---- - -Auth0 provider now supports optional `connection` and `connectionScope` parameters to configure social identity providers. diff --git a/.changeset/pretty-flies-agree.md b/.changeset/pretty-flies-agree.md deleted file mode 100644 index da7ac4f6f5..0000000000 --- a/.changeset/pretty-flies-agree.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-components': patch ---- - -Fixed layout for core-components docs where table was broken by splitting with code sample diff --git a/.changeset/purple-masks-travel.md b/.changeset/purple-masks-travel.md deleted file mode 100644 index 65d0a5fe9b..0000000000 --- a/.changeset/purple-masks-travel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-github': patch ---- - -Add missing config schema for the `GitHubEntityProvider`. diff --git a/.changeset/quick-meals-talk.md b/.changeset/quick-meals-talk.md deleted file mode 100644 index 5834928e77..0000000000 --- a/.changeset/quick-meals-talk.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -'@backstage/plugin-playlist-backend': minor ---- - -**BREAKING** The exported permission rules have changed to reflect the breaking changes made to the PermissionRule type. - -For example, the `playlistConditions.isOwner` API has changed from: - -```ts -playlistConditions.isOwner(['user:default/me', 'group:default/owner']); -``` - -to: - -```ts -playlistConditions.isOwner({ - owners: ['user:default/me', 'group:default/owner'], -}); -``` diff --git a/.changeset/quiet-dancers-jog.md b/.changeset/quiet-dancers-jog.md deleted file mode 100644 index 2cca69103a..0000000000 --- a/.changeset/quiet-dancers-jog.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-gcalendar': patch ---- - -Fixed loader showing when user not signed in diff --git a/.changeset/quiet-hats-kick.md b/.changeset/quiet-hats-kick.md deleted file mode 100644 index a0bbab4cb1..0000000000 --- a/.changeset/quiet-hats-kick.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-jenkins-backend': patch ---- - -Fixed a bug where `extraRequestHeaders` configuration was ignored. diff --git a/.changeset/quiet-ligers-draw.md b/.changeset/quiet-ligers-draw.md deleted file mode 100644 index 30f5845a54..0000000000 --- a/.changeset/quiet-ligers-draw.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-app-backend': patch ---- - -Added alpha plugin implementation for the new backend system. Available at `@backstage/plugin-app-backend/alpha`. diff --git a/.changeset/rare-cougars-cross.md b/.changeset/rare-cougars-cross.md deleted file mode 100644 index 3bfb31ae3d..0000000000 --- a/.changeset/rare-cougars-cross.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -'@backstage/backend-common': patch -'@backstage/cli': patch -'@backstage/plugin-airbrake-backend': patch -'@backstage/plugin-badges-backend': patch -'@backstage/plugin-catalog-backend': patch -'@backstage/plugin-graphql-backend': patch -'@backstage/plugin-periskop-backend': patch -'@backstage/plugin-permission-backend': patch -'@backstage/plugin-rollbar-backend': patch -'@backstage/plugin-search-backend': patch -'@backstage/plugin-tech-insights-backend': patch -'@backstage/plugin-user-settings-backend': patch ---- - -Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` diff --git a/.changeset/rare-hotels-cough.md b/.changeset/rare-hotels-cough.md deleted file mode 100644 index 1a2395cf56..0000000000 --- a/.changeset/rare-hotels-cough.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-plugin-api': patch ---- - -Added documentation for `createBackendModule`, with guidelines for choosing a module ID. diff --git a/.changeset/red-dots-sleep.md b/.changeset/red-dots-sleep.md deleted file mode 100644 index 0accac9734..0000000000 --- a/.changeset/red-dots-sleep.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -Switching off duplicated timestamp in case of logging via task logger in a custom action diff --git a/.changeset/red-pants-rush.md b/.changeset/red-pants-rush.md deleted file mode 100644 index d2d7a52237..0000000000 --- a/.changeset/red-pants-rush.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': minor ---- - -Add `allowAutoMerge` option for `publish:github` action diff --git a/.changeset/renovate-5da63a4.md b/.changeset/renovate-5da63a4.md deleted file mode 100644 index 6d27c9e99f..0000000000 --- a/.changeset/renovate-5da63a4.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-api-docs': patch ---- - -Updated dependency `@asyncapi/react-component` to `1.0.0-next.43`. diff --git a/.changeset/renovate-a02d90b.md b/.changeset/renovate-a02d90b.md deleted file mode 100644 index 7bb69d9988..0000000000 --- a/.changeset/renovate-a02d90b.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-api-docs': patch ---- - -Updated dependency `@asyncapi/react-component` to `1.0.0-next.42`. diff --git a/.changeset/rich-carrots-reflect.md b/.changeset/rich-carrots-reflect.md deleted file mode 100644 index 13a67bcd56..0000000000 --- a/.changeset/rich-carrots-reflect.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Switched the Jest transform for YAML files to use a custom one available at `@backstage/cli/config/jestYamlTransform.js`. diff --git a/.changeset/rude-bulldogs-sleep.md b/.changeset/rude-bulldogs-sleep.md deleted file mode 100644 index 8a2a0590b3..0000000000 --- a/.changeset/rude-bulldogs-sleep.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Allow Placeholder value to be any value, not only string. diff --git a/.changeset/rude-tables-shout.md b/.changeset/rude-tables-shout.md deleted file mode 100644 index e27af45719..0000000000 --- a/.changeset/rude-tables-shout.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-kubernetes-backend': patch ---- - -Added missing cluster locator configuration schema entries, for the catalog and local proxy types diff --git a/.changeset/rude-tomatoes-behave.md b/.changeset/rude-tomatoes-behave.md deleted file mode 100644 index 880b4dffd5..0000000000 --- a/.changeset/rude-tomatoes-behave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-bazaar-backend': patch ---- - -Router now also has endpoint `getLatestProjects` that takes a limit of projects as prop. diff --git a/.changeset/search-bobcats-love.md b/.changeset/search-bobcats-love.md deleted file mode 100644 index f562961c1b..0000000000 --- a/.changeset/search-bobcats-love.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -'@backstage/plugin-search-react': minor ---- - -The search query state now has an optional `pageLimit` property that determines how many results will be requested per page, it defaults to 25. - -Examples: -_Basic_ - -```jsx - - {results => { - // Item rendering logic is omitted - }} - -``` - -_With context_ - -```jsx - - - {results => { - // Item rendering logic is omitted - }} - - -``` diff --git a/.changeset/search-cars-hide.md b/.changeset/search-cars-hide.md deleted file mode 100644 index b89662e90a..0000000000 --- a/.changeset/search-cars-hide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-common': minor ---- - -There is a new property called `pageLimit` on the `SearchQuery` interface that specifies how many results should be returned per page. diff --git a/.changeset/search-clouds-begin.md b/.changeset/search-clouds-begin.md deleted file mode 100644 index b3c6fa4b69..0000000000 --- a/.changeset/search-clouds-begin.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -'@backstage/plugin-search-react': minor ---- - -The `` component now accepts an optional property `disableRenderingWithNoResults` to disable rendering when no results are returned. -Possibility to provide a custom no results component if needed through the `noResultsComponent` property. - -Examples: - -_Rendering a custom no results component_ - -```jsx -} -/> -``` - -_Disable rendering when there are no results_ - -```jsx - -``` diff --git a/.changeset/search-cycles-sniff.md b/.changeset/search-cycles-sniff.md deleted file mode 100644 index 350e499a18..0000000000 --- a/.changeset/search-cycles-sniff.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-search-backend-node': patch -'@backstage/plugin-search-backend-module-pg': patch -'@backstage/plugin-search-backend-module-elasticsearch': patch ---- - -The search engine has been updated to take advantage of the `pageLimit` property on search queries. If none is provided, the search engine will continue to use its default value of 25 results per page. diff --git a/.changeset/search-days-pull.md b/.changeset/search-days-pull.md deleted file mode 100644 index 45d59be514..0000000000 --- a/.changeset/search-days-pull.md +++ /dev/null @@ -1,99 +0,0 @@ ---- -'@backstage/plugin-search-react': minor ---- - -A `` component was created for limiting the number of results shown per search page. Use this new component to give users options to select how many search results they want to display per page. The default options are 10, 25, 50, 100. - -See examples below: - -_Basic_ - -```jsx -import React, { useState } from 'react'; -import { Grid } from '@material-ui/core'; -import { Page, Header, Content, Lifecycle } from '@backstage/core-components'; -import { - SearchBarBase, - SearchPaginationBase, - SearchResultList, -} from '@backstage/plugin-search-react'; - -const SearchPage = () => { - const [term, setTerm] = useState(''); - const [pageLimit, setPageLimit] = useState(25); - const [pageCursor, setPageCursor] = useState(); - - return ( - -
} /> - - - - - - - - - - - - - - - ); -}; -``` - -_With context_ - -```jsx -import React from 'react'; -import { Grid } from '@material-ui/core'; -import { Page, Header, Content, Lifecycle } from '@backstage/core-components'; -import { - SearchBar, - SearchResult, - SearchPagination, - SearchResultListLayout, - SearchContextProvider, - DefaultResultListItem, -} from '@backstage/plugin-search-react'; - -const SearchPage = () => ( - - -
} /> - - - - - - - - - - - {({ results }) => ( - ( - - )} - /> - )} - - - - - - -); -``` diff --git a/.changeset/search-dull-planes-prove.md b/.changeset/search-dull-planes-prove.md deleted file mode 100644 index f185207ede..0000000000 --- a/.changeset/search-dull-planes-prove.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -'@backstage/plugin-search-react': minor ---- - -The `` component now accepts an optional property `disableRenderingWithNoResults` to disable rendering when no results are returned. -Possibility to provide a custom no results component if needed through the `noResultsComponent` property. - -Examples: - -_Rendering a custom no results component_ - -```jsx -} - title="Documentation" - noResultsComponent={} -/> -``` - -_Disable rendering when there are no results_ - -```jsx -} - title="Documentation" - disableRenderingWithNoResults -/> -``` diff --git a/.changeset/search-konstiga-fika-reglar.md b/.changeset/search-konstiga-fika-reglar.md deleted file mode 100644 index fb79a8ad6f..0000000000 --- a/.changeset/search-konstiga-fika-reglar.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@backstage/plugin-adr-backend': patch -'@backstage/plugin-search-backend-module-elasticsearch': patch -'@backstage/plugin-search-backend-node': patch -'@backstage/plugin-stack-overflow-backend': patch -'@backstage/plugin-techdocs-backend': patch ---- - -In order to improve the debuggability of the search indexing process, messages logged during indexing are now tagged with a `documentType` whose value corresponds to the `type` being indexed. diff --git a/.changeset/search-rats-grin.md b/.changeset/search-rats-grin.md deleted file mode 100644 index 7b561d9c19..0000000000 --- a/.changeset/search-rats-grin.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -'@backstage/plugin-search-backend': minor ---- - -The query received by search engines now contains a property called `pageLimit`, it specifies how many results to return per page when sending a query request to the search backend. - -Example: -_Returns up to 30 results per page_ - -``` -GET /query?pageLimit=30 -``` - -The search backend validates the page limit and this value must not exceed 100, but it doesn't set a default value for the page limit parameter, it leaves it up to each search engine to set this, so Lunr, Postgres and Elastic Search set 25 results per page as a default value. diff --git a/.changeset/selfish-turkeys-exist.md b/.changeset/selfish-turkeys-exist.md deleted file mode 100644 index 3530b3a864..0000000000 --- a/.changeset/selfish-turkeys-exist.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-scaffolder': minor ---- - -EntityPickers now support flags to control when to include default namespace -in result diff --git a/.changeset/seven-panthers-chew.md b/.changeset/seven-panthers-chew.md deleted file mode 100644 index 110df1d389..0000000000 --- a/.changeset/seven-panthers-chew.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': minor ---- - -The exported permission rules and the API of `createCatalogConditionalDecision` have changed to reflect the breaking changes made to the `PermissionRule` type. Note that all involved types are exported from `@backstage/plugin-catalog-backend/alpha` diff --git a/.changeset/shaggy-books-smell.md b/.changeset/shaggy-books-smell.md deleted file mode 100644 index 3f8aaa389c..0000000000 --- a/.changeset/shaggy-books-smell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-tech-insights-node': patch ---- - -Updated package role to be `node-library`. diff --git a/.changeset/short-plants-return.md b/.changeset/short-plants-return.md deleted file mode 100644 index 0a4974c38a..0000000000 --- a/.changeset/short-plants-return.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Leverage cache mounts in Dockerfile during `yarn install ...` and `apt-get ...` commands to speed up repeated builds. diff --git a/.changeset/silent-bees-repeat.md b/.changeset/silent-bees-repeat.md deleted file mode 100644 index 4592d9a703..0000000000 --- a/.changeset/silent-bees-repeat.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-kubernetes-backend': patch ---- - -kubernetes service locator now take request context parameters diff --git a/.changeset/silent-mice-brake.md b/.changeset/silent-mice-brake.md deleted file mode 100644 index fde02146c9..0000000000 --- a/.changeset/silent-mice-brake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Add the new search pagination component to the search page template. diff --git a/.changeset/silly-rules-join.md b/.changeset/silly-rules-join.md deleted file mode 100644 index 88d3898317..0000000000 --- a/.changeset/silly-rules-join.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Initializes a git repository when creating an app using @packages/create-app diff --git a/.changeset/sixty-items-nail.md b/.changeset/sixty-items-nail.md deleted file mode 100644 index bf8f9b8161..0000000000 --- a/.changeset/sixty-items-nail.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-kubernetes': patch ---- - -Fix infinite call bug in `useCustomResources` hook diff --git a/.changeset/slimy-suns-learn.md b/.changeset/slimy-suns-learn.md deleted file mode 100644 index 4a924a7a18..0000000000 --- a/.changeset/slimy-suns-learn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -Fixed setting default branch for Bitbucket Server diff --git a/.changeset/slow-mirrors-eat.md b/.changeset/slow-mirrors-eat.md deleted file mode 100644 index 6996a977d0..0000000000 --- a/.changeset/slow-mirrors-eat.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-auth-backend': patch ---- - -Fix GitLab provider setup so that it supports GitLab installations with a path in the URL. diff --git a/.changeset/smooth-tables-pull.md b/.changeset/smooth-tables-pull.md deleted file mode 100644 index 2833ff5da7..0000000000 --- a/.changeset/smooth-tables-pull.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Switch to upfront resolution of `swc-loader` in Webpack config. diff --git a/.changeset/soft-falcons-love.md b/.changeset/soft-falcons-love.md deleted file mode 100644 index 56ed193501..0000000000 --- a/.changeset/soft-falcons-love.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@backstage/plugin-user-settings': minor ---- - -**BREAKING**: The `apiRef` passed to `ProviderSettingsItem` now needs to -implement `ProfileInfoApi & SessionApi`, rather than just the latter. This is -unlikely to have an effect on most users though, since the builtin auth -providers generally implement both. - -Fixed settings page showing providers as logged out when the user is using more -than one provider, and displayed some additional login information. diff --git a/.changeset/stupid-dragons-complain.md b/.changeset/stupid-dragons-complain.md deleted file mode 100644 index 44be8342bf..0000000000 --- a/.changeset/stupid-dragons-complain.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-test-utils': patch ---- - -Increased test database max connection pool size to reduce the risk of resource exhaustion. diff --git a/.changeset/sweet-insects-camp.md b/.changeset/sweet-insects-camp.md deleted file mode 100644 index 4f91a196e8..0000000000 --- a/.changeset/sweet-insects-camp.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@backstage/cli': minor ---- - -**BREAKING**: Bumped `jest`, `jest-runtime`, and `jest-environment-jsdom` to v29. This is up from v27, so check out both the [v28](https://jestjs.io/docs/28.x/upgrading-to-jest28) and [v29](https://jestjs.io/docs/upgrading-to-jest29) (later [here](https://jestjs.io/docs/29.x/upgrading-to-jest29)) migration guides. - -Particular changes that where encountered in the main Backstage repo are: - -- The updated snapshot format. -- `jest.useFakeTimers('legacy')` is now `jest.useFakeTimers({ legacyFakeTimers: true })`. -- Error objects collected by `withLogCollector` from `@backstage/test-utils` are now objects with a `detail` property rather than a string. diff --git a/.changeset/swift-phones-cheat.md b/.changeset/swift-phones-cheat.md deleted file mode 100644 index 6d1653caa3..0000000000 --- a/.changeset/swift-phones-cheat.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Removed `tsx` and `jsx` as supported extensions in backend packages. For most -repos, this will not have any effect. But if you inadvertently had added some -`tsx`/`jsx` files to your backend package, you may now start to see `code: 'MODULE_NOT_FOUND'` errors when launching the backend locally. The reason for -this is that the offending files get ignored during transpilation. Hence, the -importing file can no longer find anything to import. - -The fix is to rename any `.tsx` files in your backend packages to `.ts` instead, -or `.jsx` to `.js`. diff --git a/.changeset/tall-baboons-deliver.md b/.changeset/tall-baboons-deliver.md deleted file mode 100644 index a69e52e31a..0000000000 --- a/.changeset/tall-baboons-deliver.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-user-settings-backend': patch ---- - -Fix wrong import statement in `README.md`. diff --git a/.changeset/tame-ads-complain.md b/.changeset/tame-ads-complain.md deleted file mode 100644 index d6b3c47b69..0000000000 --- a/.changeset/tame-ads-complain.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-github': patch ---- - -Replaces in-code uses of `GitHub` by `Github` and deprecates old versions. - -Deprecates - -- `GitHubEntityProvider` replaced by `GithubEntityProvider` -- `GitHubLocationAnalyzer` replaced by `GithubLocationAnalyzer` -- `GitHubLocationAnalyzerOptions` replaced by `GithubLocationAnalyzerOptions` -- `GitHubOrgEntityProvider` replaced by `GithubOrgEntityProvider` -- `GitHubOrgEntityProviderOptions` replaced by `GithubOrgEntityProviderOptions` - -Renames - -- `GitHubLocationAnalyzer` to `GithubLocationAnalyzer` -- `GitHubLocationAnalyzerOptions` to `GithubLocationAnalyzerOptions` diff --git a/.changeset/techdocs-olive-worms-yell.md b/.changeset/techdocs-olive-worms-yell.md deleted file mode 100644 index 66b205fc19..0000000000 --- a/.changeset/techdocs-olive-worms-yell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs-backend': minor ---- - -Add optional `catalogClient` argument to `createRoute` parameters diff --git a/.changeset/tender-drinks-drive.md b/.changeset/tender-drinks-drive.md deleted file mode 100644 index 0ea69832af..0000000000 --- a/.changeset/tender-drinks-drive.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': minor ---- - -Add functionality to shutdown scaffolder tasks if they are stale diff --git a/.changeset/tender-parrots-peel.md b/.changeset/tender-parrots-peel.md deleted file mode 100644 index 566467e143..0000000000 --- a/.changeset/tender-parrots-peel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Added `*.session.sql` Visual Studio Code database functionality files to `.gitignore` in the default template. This is optional but potentially helpful if your developers use Visual Studio Code; you can add a line with that exact value to your own root `.gitignore` if you want the same. diff --git a/.changeset/thick-kings-destroy.md b/.changeset/thick-kings-destroy.md deleted file mode 100644 index 77c6be0d3c..0000000000 --- a/.changeset/thick-kings-destroy.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Make sure to stitch entities correctly after deletion, to ensure that their relations are updated. diff --git a/.changeset/tiny-mails-bathe.md b/.changeset/tiny-mails-bathe.md deleted file mode 100644 index 868c2a8d36..0000000000 --- a/.changeset/tiny-mails-bathe.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Updated the root `test` scripts to use `backstage-cli repo test`. - -To apply this change to an existing app, make the following change to the root `package.json`: - -```diff -- "test": "backstage-cli test", -- "test:all": "lerna run test -- --coverage", -+ "test": "backstage-cli repo test", -+ "test:all": "backstage-cli repo test --coverage", -``` diff --git a/.changeset/tough-hairs-sparkle.md b/.changeset/tough-hairs-sparkle.md deleted file mode 100644 index 404657227b..0000000000 --- a/.changeset/tough-hairs-sparkle.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder': patch ---- - -Add support for `allowedOrganizations` and `allowedOwners` to the `AzureRepoPicker`. diff --git a/.changeset/tough-seahorses-learn.md b/.changeset/tough-seahorses-learn.md deleted file mode 100644 index 518b6b6967..0000000000 --- a/.changeset/tough-seahorses-learn.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -'@backstage/plugin-bazaar-backend': minor ---- - -**BREAKING** The bazaar-backend `createRouter` now requires that the `identityApi` is passed to the router. - -These changes are **required** to `packages/backend/src/plugins/bazaar.ts` - -The user entity ref is now added to the members table and is taken from the requesting user using the `identityApi`. - -```diff -import { PluginEnvironment } from '../types'; -import { createRouter } from '@backstage/plugin-bazaar-backend'; -import { Router } from 'express'; - -export default async function createPlugin( - env: PluginEnvironment, -): Promise { - return await createRouter({ - logger: env.logger, - config: env.config, - database: env.database, -+ identity: env.identity, - }); -} -``` diff --git a/.changeset/twelve-melons-notice.md b/.changeset/twelve-melons-notice.md deleted file mode 100644 index 4a91642426..0000000000 --- a/.changeset/twelve-melons-notice.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-tech-insights-backend': patch ---- - -Modify router endpoint to handle singular and collections of request parameters similarly. diff --git a/.changeset/unlucky-seas-sip.md b/.changeset/unlucky-seas-sip.md deleted file mode 100644 index 947e248244..0000000000 --- a/.changeset/unlucky-seas-sip.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': minor ---- - -Added optional `sourcePath` parameter to `publish:gitlab:merge-request` action, `targetPath` is now optional and falls back to current workspace path. diff --git a/.changeset/warm-days-watch.md b/.changeset/warm-days-watch.md deleted file mode 100644 index b0a211c7a8..0000000000 --- a/.changeset/warm-days-watch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog': patch ---- - -Added support for copy entity URL in entity page context menu diff --git a/.changeset/wild-weeks-live.md b/.changeset/wild-weeks-live.md deleted file mode 100644 index e66b3193d0..0000000000 --- a/.changeset/wild-weeks-live.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-scaffolder': patch -'@backstage/plugin-scaffolder-backend': patch ---- - -Ignore .git directories in Template Editor, increase upload limit for dry-runs to 10MB. diff --git a/.changeset/wise-ligers-scream.md b/.changeset/wise-ligers-scream.md deleted file mode 100644 index d71c69fd42..0000000000 --- a/.changeset/wise-ligers-scream.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-cost-insights': patch ---- - -Fixed bug in `CostOverviewBreakdownChart` component where some datasets caused the cost overview breakdown chart to tear. diff --git a/.changeset/yellow-lemons-march.md b/.changeset/yellow-lemons-march.md deleted file mode 100644 index 24d9e760ad..0000000000 --- a/.changeset/yellow-lemons-march.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-app-api': patch ---- - -Properly export `rootLoggerFactory`. diff --git a/.changeset/young-bugs-remember.md b/.changeset/young-bugs-remember.md deleted file mode 100644 index 8f78495ed7..0000000000 --- a/.changeset/young-bugs-remember.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-github': patch -'@backstage/plugin-scaffolder-backend': patch ---- - -Updated the `moduleId` of the experimental module export. diff --git a/.changeset/young-olives-cheer.md b/.changeset/young-olives-cheer.md deleted file mode 100644 index 536a8d6370..0000000000 --- a/.changeset/young-olives-cheer.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-github-issues': patch ---- - -Add filtering and ordering to the graphql query diff --git a/docs/releases/v1.7.0-changelog.md b/docs/releases/v1.7.0-changelog.md new file mode 100644 index 0000000000..3653484952 --- /dev/null +++ b/docs/releases/v1.7.0-changelog.md @@ -0,0 +1,2589 @@ +# Release v1.7.0 + +## @backstage/cli@0.20.0 + +### Minor Changes + +- f368ad7279: **BREAKING**: Bumped `jest`, `jest-runtime`, and `jest-environment-jsdom` to v29. This is up from v27, so check out both the [v28](https://jestjs.io/docs/28.x/upgrading-to-jest28) and [v29](https://jestjs.io/docs/upgrading-to-jest29) (later [here](https://jestjs.io/docs/29.x/upgrading-to-jest29)) migration guides. + + Particular changes that where encountered in the main Backstage repo are: + + - The updated snapshot format. + - `jest.useFakeTimers('legacy')` is now `jest.useFakeTimers({ legacyFakeTimers: true })`. + - Error objects collected by `withLogCollector` from `@backstage/test-utils` are now objects with a `detail` property rather than a string. + +### Patch Changes + +- 78d5eb299e: Tweak the Jest Caching loader to only operate when in `watch` mode + +- 9c595302cb: Normalize on winston version ^3.2.1 + +- 24b40140c4: Treat files in `__testUtils__` and `__mocks__` directories as test files for linting + purposes. + + Updates the parts of the eslint configuration generator that specify which files + should be treated as test code to include any files under two additional + directories: + + - `__mocks__`: this is the directory used by Jest[0] for mock code. + - `__testUtils__`: a suggested location for utility code executed only when + running tests. + + [0]: https://jestjs.io/docs/manual-mocks#mocking-user-modules + +- 3e309107ca: Updated fallback versions of dependencies in all templates. + +- 292a088807: Added a new `repo test` command. + +- ba63cae41c: Updated lockfile parsing to have better support for Yarn 3. + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` + +- 2dddb32fea: Switched the Jest transform for YAML files to use a custom one available at `@backstage/cli/config/jestYamlTransform.js`. + +- a541a3a78a: Switch to upfront resolution of `swc-loader` in Webpack config. + +- cfb3598410: Removed `tsx` and `jsx` as supported extensions in backend packages. For most + repos, this will not have any effect. But if you inadvertently had added some + `tsx`/`jsx` files to your backend package, you may now start to see `code: 'MODULE_NOT_FOUND'` errors when launching the backend locally. The reason for + this is that the offending files get ignored during transpilation. Hence, the + importing file can no longer find anything to import. + + The fix is to rename any `.tsx` files in your backend packages to `.ts` instead, + or `.jsx` to `.js`. + +- Updated dependencies + - @backstage/cli-common@0.1.10 + - @backstage/config@1.0.3 + - @backstage/config-loader@1.1.5 + - @backstage/errors@1.1.2 + - @backstage/release-manifests@0.0.6 + - @backstage/types@1.0.0 + +## @backstage/plugin-auth-backend@0.17.0 + +### Minor Changes + +- e2dc42e9f0: Google OAuth refresh tokens will now be revoked on logout by calling Google's API +- 5fa831ce55: CookieConfigurer can optionally return the `SameSite` cookie attribute. + CookieConfigurer now requires an additional argument `appOrigin` - the origin URL of the app - which is used to calculate the `SameSite` attribute. + defaultCookieConfigurer returns the `SameSite` attribute which defaults to `Lax`. In cases where an auth-backend is running on a different domain than the App, `SameSite=None` is used - but only for secure contexts. This is so that cookies can be included in third-party requests. + + OAuthAdapterOptions has been modified to require additional arguments, `baseUrl`, and `cookieConfigurer`. + OAuthAdapter now resolves cookie configuration using its supplied CookieConfigurer for each request to make sure that the proper attributes always are set. + +### Patch Changes + +- b5c126010c: Auth0 provider now supports optional `connection` and `connectionScope` parameters to configure social identity providers. +- 8c6ec175bf: Fix GitLab provider setup so that it supports GitLab installations with a path in the URL. +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-auth-node@0.2.6 + - @backstage/catalog-client@1.1.1 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-bazaar-backend@0.2.0 + +### Minor Changes + +- 8554533546: **BREAKING** The bazaar-backend `createRouter` now requires that the `identityApi` is passed to the router. + + These changes are **required** to `packages/backend/src/plugins/bazaar.ts` + + The user entity ref is now added to the members table and is taken from the requesting user using the `identityApi`. + + ```diff + import { PluginEnvironment } from '../types'; + import { createRouter } from '@backstage/plugin-bazaar-backend'; + import { Router } from 'express'; + + export default async function createPlugin( + env: PluginEnvironment, + ): Promise { + return await createRouter({ + logger: env.logger, + config: env.config, + database: env.database, + + identity: env.identity, + }); + } + ``` + +### Patch Changes + +- f7c2855d76: Router now also has endpoint `getLatestProjects` that takes a limit of projects as prop. +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/backend-test-utils@0.1.29 + - @backstage/plugin-auth-node@0.2.6 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + +## @backstage/plugin-bitbucket-cloud-common@0.2.0 + +### Minor Changes + +- ad74723fbf: Update Bitbucket Cloud models to latest OAS version. + + The latest specification contained some BREAKING CHANGES + due to removed fields. + + All of these fields are not used at other plugins, though. + Therefore, this change has no impact on other modules here. + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.3.2 + +## @backstage/plugin-catalog@1.6.0 + +### Minor Changes + +- d558f41d3a: Added new column `Label` to `CatalogTable.columns`, this new column allows you make use of labels from metadata. + For example: category and visibility are type of labels associated with API entity illustrated below. + + YAML code snippet for API entity + + ```yaml + apiVersion: backstage.io/v1alpha1 + kind: API + metadata: + name: sample-api + description: API for sample + links: + - url: http://localhost:8080/swagger-ui.html + title: Swagger UI + tags: + - http + labels: + category: legacy + visibility: protected + ``` + + Consumers can customise columns to include label column and show in api-docs list + + ```typescript + const columns = [ + CatalogTable.columns.createNameColumn({ defaultKind: 'API' }), + CatalogTable.columns.createLabelColumn('category', { title: 'Category' }), + CatalogTable.columns.createLabelColumn('visibility', { + title: 'Visibility', + defaultValue: 'public', + }), + ]; + ``` + +### Patch Changes + +- 4efadb6968: Implemented the visual parts of `EntityKindPicker` so that it can be shown alongside the other filters on the left side of your catalog pages. +- 182000c663: Added `emptyContent` property to CatalogTable and DefaultCatalogPage to support customization of the Catalog Table. +- e89e1f614d: Added support for copy entity URL in entity page context menu +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/plugin-catalog-common@1.0.7 + - @backstage/catalog-client@1.1.1 + - @backstage/plugin-search-react@1.2.0 + - @backstage/plugin-search-common@1.1.0 + - @backstage/integration-react@1.1.5 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + +## @backstage/plugin-catalog-backend@1.5.0 + +### Minor Changes + +- b2e6cb6acf: Added a new method `addLocationAnalyzers` to the `CatalogBuilder`. With this you can add location analyzers to your catalog. These analyzers will be used by the /analyze-location endpoint to decide if the provided URL contains any catalog-info.yaml files already or not. + + Moved the following types from this package to `@backstage/plugin-catalog-backend`. + + - AnalyzeLocationResponse + - AnalyzeLocationRequest + - AnalyzeLocationExistingEntity + - AnalyzeLocationGenerateEntity + - AnalyzeLocationEntityField + +- eb25f7e12d: The exported permission rules and the API of `createCatalogConditionalDecision` have changed to reflect the breaking changes made to the `PermissionRule` type. Note that all involved types are exported from `@backstage/plugin-catalog-backend/alpha` + +### Patch Changes + +- 8cb6e10105: Fixed a bug where entities provided without a location key would always replace existing entities, rather than updating them. +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- 63296ebcd4: Allow Placeholder value to be any value, not only string. +- 74022e0163: Make sure to stitch entities correctly after deletion, to ensure that their relations are updated. +- Updated dependencies + - @backstage/plugin-catalog-node@1.2.0 + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-common@1.0.7 + - @backstage/plugin-permission-node@0.7.0 + - @backstage/backend-plugin-api@0.1.3 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/catalog-client@1.1.1 + - @backstage/plugin-search-common@1.1.0 + - @backstage/plugin-scaffolder-common@1.2.1 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-catalog-import@0.9.0 + +### Minor Changes + +- b2e6cb6acf: **Breaking** + Moved the code search for the existing catalog-info.yaml files to the backend from the frontend. It means it will use the configured GitHub integration's credentials. + + Add the following to your `CatalogBuilder` to have the repo URL ingestion working again. + + ```ts + // catalog.ts + import { GithubLocationAnalyzer } from '@backstage/plugin-catalog-backend-module-github'; + ... + builder.addLocationAnalyzers( + new GithubLocationAnalyzer({ + discovery: env.discovery, + config: env.config, + }), + ); + ... + ``` + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/plugin-catalog-common@1.0.7 + - @backstage/catalog-client@1.1.1 + - @backstage/integration-react@1.1.5 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + +## @backstage/plugin-catalog-node@1.2.0 + +### Minor Changes + +- 404366c853: Deprecated the `LocationSpec` type. It got moved from this package to the `@backstage/plugin-catalog-common` so make sure imports are updated. + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-common@1.0.7 + - @backstage/backend-plugin-api@0.1.3 + - @backstage/catalog-client@1.1.1 + - @backstage/errors@1.1.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-catalog-react@1.2.0 + +### Minor Changes + +- 4efadb6968: Implemented the visual parts of `EntityKindPicker` so that it can be shown alongside the other filters on the left side of your catalog pages. + +### Patch Changes + +- 7939e743f5: Added two new `EntityRefLinks` props, the first being `getTitle` that allows for customization of the title used for each link. The second one is `fetchEntities`, which triggers a fetching of all entities so that the full entity definition is available in the `getTitle` callback. +- e9e532ebd8: Fixed issue where the query kind parameter is not honored +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/core-components@0.11.2 + - @backstage/plugin-catalog-common@1.0.7 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/catalog-client@1.1.1 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + - @backstage/version-bridge@1.0.1 + - @backstage/plugin-permission-react@0.4.6 + +## @backstage/plugin-permission-common@0.7.0 + +### Minor Changes + +- 46b4a72cee: **BREAKING**: When defining permission rules, it's now necessary to provide a [ZodSchema](https://github.com/colinhacks/zod) that specifies the parameters the rule expects. This has been added to help better describe the parameters in the response of the metadata endpoint and to validate the parameters before a rule is executed. + + To help with this, we have also made a change to the API of permission rules. Before, the permission rules `toQuery` and `apply` signature expected parameters to be separate arguments, like so... + + ```ts + createPermissionRule({ + apply: (resource, foo, bar) => true, + toQuery: (foo, bar) => {}, + }); + ``` + + The API has now changed to expect the parameters as a single object + + ```ts + createPermissionRule({ + paramSchema: z.object({ + foo: z.string().describe('Foo value to match'), + bar: z.string().describe('Bar value to match'), + }), + apply: (resource, { foo, bar }) => true, + toQuery: ({ foo, bar }) => {}, + }); + ``` + + One final change made is to limit the possible values for a parameter to primitives and arrays of primitives. + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-permission-node@0.7.0 + +### Minor Changes + +- 46b4a72cee: **BREAKING**: When defining permission rules, it's now necessary to provide a [ZodSchema](https://github.com/colinhacks/zod) that specifies the parameters the rule expects. This has been added to help better describe the parameters in the response of the metadata endpoint and to validate the parameters before a rule is executed. + + To help with this, we have also made a change to the API of permission rules. Before, the permission rules `toQuery` and `apply` signature expected parameters to be separate arguments, like so... + + ```ts + createPermissionRule({ + apply: (resource, foo, bar) => true, + toQuery: (foo, bar) => {}, + }); + ``` + + The API has now changed to expect the parameters as a single object + + ```ts + createPermissionRule({ + paramSchema: z.object({ + foo: z.string().describe('Foo value to match'), + bar: z.string().describe('Bar value to match'), + }), + apply: (resource, { foo, bar }) => true, + toQuery: ({ foo, bar }) => {}, + }); + ``` + + One final change made is to limit the possible values for a parameter to primitives and arrays of primitives. + +### Patch Changes + +- 9335ad115e: Exported types for the .metadata endpoint of the permission router +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/plugin-auth-node@0.2.6 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + +## @backstage/plugin-playlist-backend@0.2.0 + +### Minor Changes + +- eb25f7e12d: **BREAKING** The exported permission rules have changed to reflect the breaking changes made to the PermissionRule type. + + For example, the `playlistConditions.isOwner` API has changed from: + + ```ts + playlistConditions.isOwner(['user:default/me', 'group:default/owner']); + ``` + + to: + + ```ts + playlistConditions.isOwner({ + owners: ['user:default/me', 'group:default/owner'], + }); + ``` + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/backend-test-utils@0.1.29 + - @backstage/plugin-auth-node@0.2.6 + - @backstage/plugin-permission-node@0.7.0 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/catalog-client@1.1.1 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/plugin-playlist-common@0.1.1 + +## @backstage/plugin-scaffolder@1.7.0 + +### Minor Changes + +- f13d5f3f06: Add support for link to TechDocs and other links defined in template entity specification metadata on TemplateCard +- 05f22193c5: EntityPickers now support flags to control when to include default namespace + in result + +### Patch Changes + +- e4f0a96424: Making the description of the GitLab repoUrl owner field more clearer by focusing it refers to the GitLab namespace. +- 92e490d6b4: Make the `/next` scaffolder work end to end with the old `TaskPage` view +- 8220f2fd83: Support custom layouts in dry run editor +- 1047baa926: Bump to `react-jsonschema-form@v5-beta` for the `NextRouter` under `@alpha` exports +- 98ae18b68f: Fixed a bug where the `allowed*` values for the `RepoUrlPicker` would be reset on render. +- 8960d83013: Add support for `allowedOrganizations` and `allowedOwners` to the `AzureRepoPicker`. +- b681275e69: Ignore .git directories in Template Editor, increase upload limit for dry-runs to 10MB. +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/plugin-catalog-common@1.0.7 + - @backstage/catalog-client@1.1.1 + - @backstage/plugin-scaffolder-common@1.2.1 + - @backstage/integration-react@1.1.5 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + - @backstage/plugin-permission-react@0.4.6 + +## @backstage/plugin-scaffolder-backend@1.7.0 + +### Minor Changes + +- 253453fa14: Added a new property called `additionalTemplateGlobals` which allows you to add global functions to the scaffolder nunjucks templates. +- 17ff77154c: Update the `github:publish` action to allow passing whether pull + requests must be up to date with the default branch before merging. +- 304305dd20: Add `allowAutoMerge` option for `publish:github` action +- 694bfe2d61: Add functionality to shutdown scaffolder tasks if they are stale +- a8e9848479: Added optional `sourcePath` parameter to `publish:gitlab:merge-request` action, `targetPath` is now optional and falls back to current workspace path. + +### Patch Changes + +- 489621f613: Switching off duplicated timestamp in case of logging via task logger in a custom action +- 4880d43e25: Fixed setting default branch for Bitbucket Server +- b681275e69: Ignore .git directories in Template Editor, increase upload limit for dry-runs to 10MB. +- a35a27df70: Updated the `moduleId` of the experimental module export. +- Updated dependencies + - @backstage/plugin-catalog-node@1.2.0 + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/plugin-auth-node@0.2.6 + - @backstage/backend-tasks@0.3.6 + - @backstage/backend-plugin-api@0.1.3 + - @backstage/catalog-client@1.1.1 + - @backstage/plugin-scaffolder-common@1.2.1 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-search-backend@1.1.0 + +### Minor Changes + +- 16c853a6ed: Be less restrictive with unknown keys on query endpoint +- a799972bb1: The query received by search engines now contains a property called `pageLimit`, it specifies how many results to return per page when sending a query request to the search backend. + + Example: + _Returns up to 30 results per page_ + + GET /query?pageLimit=30 + + The search backend validates the page limit and this value must not exceed 100, but it doesn't set a default value for the page limit parameter, it leaves it up to each search engine to set this, so Lunr, Postgres and Elastic Search set 25 results per page as a default value. + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/plugin-auth-node@0.2.6 + - @backstage/plugin-permission-node@0.7.0 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/plugin-search-common@1.1.0 + - @backstage/plugin-search-backend-node@1.0.3 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-search-common@1.1.0 + +### Minor Changes + +- a799972bb1: There is a new property called `pageLimit` on the `SearchQuery` interface that specifies how many results should be returned per page. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.0 + - @backstage/types@1.0.0 + +## @backstage/plugin-search-react@1.2.0 + +### Minor Changes + +- 4ed1fa2480: The search query state now has an optional `pageLimit` property that determines how many results will be requested per page, it defaults to 25. + + Examples: + _Basic_ + + ```jsx + + {results => { + // Item rendering logic is omitted + }} + + ``` + + _With context_ + + ```jsx + + + {results => { + // Item rendering logic is omitted + }} + + + ``` + +- bed5a1dc6e: The `` component now accepts an optional property `disableRenderingWithNoResults` to disable rendering when no results are returned. + Possibility to provide a custom no results component if needed through the `noResultsComponent` property. + + Examples: + + _Rendering a custom no results component_ + + ```jsx + } + /> + ``` + + _Disable rendering when there are no results_ + + ```jsx + + ``` + +- 3de4bd4f19: A `` component was created for limiting the number of results shown per search page. Use this new component to give users options to select how many search results they want to display per page. The default options are 10, 25, 50, 100. + + See examples below: + + _Basic_ + + ```jsx + import React, { useState } from 'react'; + import { Grid } from '@material-ui/core'; + import { Page, Header, Content, Lifecycle } from '@backstage/core-components'; + import { + SearchBarBase, + SearchPaginationBase, + SearchResultList, + } from '@backstage/plugin-search-react'; + + const SearchPage = () => { + const [term, setTerm] = useState(''); + const [pageLimit, setPageLimit] = useState(25); + const [pageCursor, setPageCursor] = useState(); + + return ( + +
} /> + + + + + + + + + + + + + + + ); + }; + ``` + + _With context_ + + ```jsx + import React from 'react'; + import { Grid } from '@material-ui/core'; + import { Page, Header, Content, Lifecycle } from '@backstage/core-components'; + import { + SearchBar, + SearchResult, + SearchPagination, + SearchResultListLayout, + SearchContextProvider, + DefaultResultListItem, + } from '@backstage/plugin-search-react'; + + const SearchPage = () => ( + + +
} /> + + + + + + + + + + + {({ results }) => ( + ( + + )} + /> + )} + + + + + + + ); + ``` + +- 6faaa05626: The `` component now accepts an optional property `disableRenderingWithNoResults` to disable rendering when no results are returned. + Possibility to provide a custom no results component if needed through the `noResultsComponent` property. + + Examples: + + _Rendering a custom no results component_ + + ```jsx + } + title="Documentation" + noResultsComponent={} + /> + ``` + + _Disable rendering when there are no results_ + + ```jsx + } + title="Documentation" + disableRenderingWithNoResults + /> + ``` + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/plugin-search-common@1.1.0 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + - @backstage/version-bridge@1.0.1 + +## @backstage/plugin-techdocs-backend@1.4.0 + +### Minor Changes + +- 7ced1b4076: Add optional `catalogClient` argument to `createRoute` parameters + +### Patch Changes + +- 8006f8a602: In order to improve the debuggability of the search indexing process, messages logged during indexing are now tagged with a `documentType` whose value corresponds to the `type` being indexed. +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-common@1.0.7 + - @backstage/plugin-techdocs-node@1.4.1 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/catalog-client@1.1.1 + - @backstage/plugin-search-common@1.1.0 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + +## @backstage/plugin-user-settings@0.5.0 + +### Minor Changes + +- 5543e86660: **BREAKING**: The `apiRef` passed to `ProviderSettingsItem` now needs to + implement `ProfileInfoApi & SessionApi`, rather than just the latter. This is + unlikely to have an effect on most users though, since the builtin auth + providers generally implement both. + + Fixed settings page showing providers as logged out when the user is using more + than one provider, and displayed some additional login information. + +### Patch Changes + +- 06d61d1266: Handle errors that may occur when the user logs out +- 44c9a95dcf: Prevent `.set()` to execute a request to the StorageClient if the user is `guest` +- 174f02a00a: Update installation instructions +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-app-api@1.1.1 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + +## @backstage/app-defaults@1.0.7 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-app-api@1.1.1 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + - @backstage/plugin-permission-react@0.4.6 + +## @backstage/backend-app-api@0.2.2 + +### Patch Changes + +- 0027a749cd: Added possibility to configure index plugin of the HTTP router service. +- 45857bffae: Properly export `rootLoggerFactory`. +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/backend-tasks@0.3.6 + - @backstage/plugin-permission-node@0.7.0 + - @backstage/backend-plugin-api@0.1.3 + - @backstage/errors@1.1.2 + +## @backstage/backend-common@0.15.2 + +### Patch Changes + +- e8d7976413: Added back support for when no branch is provided for the Bitbucket Server `UrlReader` +- c44cf412de: Fix BitBucket server integration +- c31f7cdfbc: Fixed an issue where `getClient()` for a `pluginId` would return different clients and not share them +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/cli-common@0.1.10 + - @backstage/config@1.0.3 + - @backstage/config-loader@1.1.5 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/types@1.0.0 + +## @backstage/backend-defaults@0.1.2 + +### Patch Changes + +- 96d288a02d: Added root logger service to the set of default services. +- Updated dependencies + - @backstage/backend-app-api@0.2.2 + - @backstage/backend-plugin-api@0.1.3 + +## @backstage/backend-plugin-api@0.1.3 + +### Patch Changes + +- 28377dc89f: Allow interfaces to be used for inferred option types. +- a35a27df70: Added documentation for `createBackendModule`, with guidelines for choosing a module ID. +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/backend-tasks@0.3.6 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/config@1.0.3 + +## @backstage/backend-tasks@0.3.6 + +### Patch Changes + +- d4fea86ea3: Added new function `readTaskScheduleDefinitionFromConfig` to read `TaskScheduleDefinition` (aka. schedule) from the `Config`. +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/types@1.0.0 + +## @backstage/backend-test-utils@0.1.29 + +### Patch Changes + +- 72549952d1: Fixed handling of root scoped services in `startTestBackend`. +- e91e8e9c55: Increased test database max connection pool size to reduce the risk of resource exhaustion. +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/cli@0.20.0 + - @backstage/backend-app-api@0.2.2 + - @backstage/backend-plugin-api@0.1.3 + - @backstage/config@1.0.3 + +## @backstage/catalog-client@1.1.1 + +### Patch Changes + +- 4f2ac624b4: Renamed argument in `validateEntity` from `location` to `locationRef` +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/errors@1.1.2 + +## @backstage/catalog-model@1.1.2 + +### Patch Changes + +- 6f3b8d0962: Defer `ajv` compilation of schema validators to improve module-import performance +- Updated dependencies + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/types@1.0.0 + +## @backstage/codemods@0.1.40 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.10 + +## @backstage/config@1.0.3 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.0.0 + +## @backstage/config-loader@1.1.5 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.10 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/types@1.0.0 + +## @backstage/core-app-api@1.1.1 + +### Patch Changes + +- 27e6404aba: Fixed a bug where gathered index routes would fail to bind routable extensions. This would typically show up when placing a routable extension in the entity page overview tab. +- Updated dependencies + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/types@1.0.0 + - @backstage/version-bridge@1.0.1 + +## @backstage/core-components@0.11.2 + +### Patch Changes + +- bde1e8c8e2: Added `curve` prop to the `DependencyGraph` component to select the type of layout +- 882101cd9b: Deep-import LightAsync component to improve module-import speed +- 0d0f30d87e: Fixed layout for core-components docs where table was broken by splitting with code sample +- Updated dependencies + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + - @backstage/version-bridge@1.0.1 + +## @backstage/core-plugin-api@1.0.7 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3 + - @backstage/types@1.0.0 + - @backstage/version-bridge@1.0.1 + +## @backstage/create-app@0.4.32 + +### Patch Changes + +- 58c2264325: Newly created Backstage repositories now use the stable version 6 of + `react-router`, just like the main repo does. Please let us know if you find any + issues with this. + + Migrating to the stable version of `react-router` is optional for the time + being. But if you want to do the same for your existing repository, please + follow [this + guide](https://backstage.io/docs/tutorials/react-router-stable-migration). + +- e05e0f021b: Update versions of packages used in the create-app template, to match those in the main repo + +- 01dff06be4: Leverage cache mounts in Dockerfile during `yarn install ...` and `apt-get ...` commands to speed up repeated builds. + +- 90616bcaa6: Add the new search pagination component to the search page template. + +- 7c6306fc8a: Initializes a git repository when creating an app using @packages/create-app + +- 52f25858a8: Added `*.session.sql` Visual Studio Code database functionality files to `.gitignore` in the default template. This is optional but potentially helpful if your developers use Visual Studio Code; you can add a line with that exact value to your own root `.gitignore` if you want the same. + +- 6d00e80146: Updated the root `test` scripts to use `backstage-cli repo test`. + + To apply this change to an existing app, make the following change to the root `package.json`: + + ```diff + - "test": "backstage-cli test", + - "test:all": "lerna run test -- --coverage", + + "test": "backstage-cli repo test", + + "test:all": "backstage-cli repo test --coverage", + ``` + +- Updated dependencies + - @backstage/cli-common@0.1.10 + +## @backstage/dev-utils@1.0.7 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-app-api@1.1.1 + - @backstage/test-utils@1.2.1 + - @backstage/app-defaults@1.0.7 + - @backstage/integration-react@1.1.5 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @backstage/errors@1.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.0.0 + +## @backstage/integration@1.3.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + +## @backstage/integration-react@1.1.5 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/integration@1.3.2 + - @backstage/theme@0.2.16 + +## @techdocs/cli@1.2.2 + +### Patch Changes + +- 0b2a30dead: fixing techdocs-cli Docker client creation + + Docker client does not need to be created when --no-docker + option is provided. + + If you had DOCKER_CERT_PATH environment variable defined + the Docker client was looking for certificates + and breaking techdocs-cli generate command even with --no-docker + option. + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-techdocs-node@1.4.1 + - @backstage/cli-common@0.1.10 + - @backstage/config@1.0.3 + +## @backstage/test-utils@1.2.1 + +### Patch Changes + +- e05e0f021b: Align on the version of `@material-ui/icons` used, to `^4.9.1` like other packages in the main repo +- Updated dependencies + - @backstage/core-app-api@1.1.1 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + - @backstage/plugin-permission-react@0.4.6 + +## @backstage/plugin-adr@0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/plugin-search-react@1.2.0 + - @backstage/plugin-search-common@1.1.0 + - @backstage/plugin-adr-common@0.2.2 + - @backstage/integration-react@1.1.5 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @backstage/plugin-adr-backend@0.2.2 + +### Patch Changes + +- 8006f8a602: In order to improve the debuggability of the search indexing process, messages logged during indexing are now tagged with a `documentType` whose value corresponds to the `type` being indexed. +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/catalog-client@1.1.1 + - @backstage/plugin-search-common@1.1.0 + - @backstage/plugin-adr-common@0.2.2 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + +## @backstage/plugin-adr-common@0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-search-common@1.1.0 + - @backstage/integration@1.3.2 + +## @backstage/plugin-airbrake@0.3.10 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/test-utils@1.2.1 + - @backstage/dev-utils@1.0.7 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @backstage/plugin-airbrake-backend@0.2.10 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/config@1.0.3 + +## @backstage/plugin-allure@0.1.26 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @backstage/plugin-analytics-module-ga@0.1.21 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/theme@0.2.16 + +## @backstage/plugin-apache-airflow@0.2.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + +## @backstage/plugin-api-docs@0.8.10 + +### Patch Changes + +- 50c6e14aee: Updated dependency `@asyncapi/react-component` to `1.0.0-next.43`. +- 3d5bb521ee: Updated dependency `@asyncapi/react-component` to `1.0.0-next.42`. +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/plugin-catalog@1.6.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @backstage/plugin-apollo-explorer@0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @backstage/plugin-app-backend@0.3.37 + +### Patch Changes + +- 11c9e0ad33: Added alpha plugin implementation for the new backend system. Available at `@backstage/plugin-app-backend/alpha`. +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/backend-plugin-api@0.1.3 + - @backstage/config@1.0.3 + - @backstage/config-loader@1.1.5 + - @backstage/types@1.0.0 + +## @backstage/plugin-auth-node@0.2.6 + +### Patch Changes + +- f3a3fefb96: Ensure `getIdentity` throws an `AuthenticationError` instead of a `NotAllowed` error when authentication fails +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + +## @backstage/plugin-azure-devops@0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-azure-devops-common@0.3.0 + +## @backstage/plugin-azure-devops-backend@0.3.16 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/config@1.0.3 + - @backstage/plugin-azure-devops-common@0.3.0 + +## @backstage/plugin-badges@0.2.34 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-badges-backend@0.1.31 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/catalog-client@1.1.1 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + +## @backstage/plugin-bazaar@0.1.25 + +### Patch Changes + +- f7c2855d76: Added a `Overview Card` for either latest or random projects. Changed `ProjectPreview.tsx` so it take `gridSize` and `useTablePagination` as props. +- c0352bbc69: Link to the user catalog entity of a member +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/plugin-catalog@1.6.0 + - @backstage/core-components@0.11.2 + - @backstage/cli@0.20.0 + - @backstage/catalog-client@1.1.1 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + +## @backstage/plugin-bitrise@0.1.37 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @backstage/plugin-catalog-backend-module-aws@0.1.10 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/backend-tasks@0.3.6 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-catalog-backend-module-azure@0.1.8 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/backend-tasks@0.3.6 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-catalog-backend-module-bitbucket@0.2.4 + +### Patch Changes + +- 23f9199a0f: Deprecate `@backstage/plugin-catalog-backend-module-bitbucket`. + + Please migrate to `@backstage/plugin-catalog-backend-module-bitbucket-cloud` + or `@backstage/plugin-catalog-backend-module-bitbucket-server` instead. + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.0 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.1.4 + +### Patch Changes + +- f66e696e7b: Bitbucket Cloud provider: Add option to configure schedule via `app-config.yaml` instead of in code. + + Please find how to configure the schedule at the config at + + +- a9b91d39bb: Add `bitbucketCloudCatalogModule` (new backend-plugin-api, alpha). + +- Updated dependencies + - @backstage/plugin-catalog-node@1.2.0 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/backend-tasks@0.3.6 + - @backstage/backend-plugin-api@0.1.3 + - @backstage/plugin-bitbucket-cloud-common@0.2.0 + - @backstage/config@1.0.3 + - @backstage/integration@1.3.2 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/backend-tasks@0.3.6 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + +## @backstage/plugin-catalog-backend-module-gerrit@0.1.5 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/backend-tasks@0.3.6 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + +## @backstage/plugin-catalog-backend-module-github@0.1.8 + +### Patch Changes + +- 8749df3d02: `GitHubEntityProvider`: Add option to configure schedule via `app-config.yaml` instead of in code. + + Please find how to configure the schedule at the config at + + +- 7022aebf35: Added `GithubLocationAnalyzer`. This can be used to add to the `CatalogBuilder`. When added this will be used by `RepoLocationAnalyzer` to figure out if the given URL that you are trying to import from the /catalog-import page already contains catalog-info.yaml files. + +- 51046b58b0: Use schedule from config at backend module. + + Also, it removes `GithubEntityProviderCatalogModuleOptions` + in favor of config-only for the backend module setup + like at other similar modules. + +- 7edb5909e8: Add missing config schema for the `GitHubEntityProvider`. + +- be9474b103: Replaces in-code uses of `GitHub` by `Github` and deprecates old versions. + + Deprecates + + - `GitHubEntityProvider` replaced by `GithubEntityProvider` + - `GitHubLocationAnalyzer` replaced by `GithubLocationAnalyzer` + - `GitHubLocationAnalyzerOptions` replaced by `GithubLocationAnalyzerOptions` + - `GitHubOrgEntityProvider` replaced by `GithubOrgEntityProvider` + - `GitHubOrgEntityProviderOptions` replaced by `GithubOrgEntityProviderOptions` + + Renames + + - `GitHubLocationAnalyzer` to `GithubLocationAnalyzer` + - `GitHubLocationAnalyzerOptions` to `GithubLocationAnalyzerOptions` + +- a35a27df70: Updated the `moduleId` of the experimental module export. + +- Updated dependencies + - @backstage/plugin-catalog-node@1.2.0 + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/backend-tasks@0.3.6 + - @backstage/backend-plugin-api@0.1.3 + - @backstage/catalog-client@1.1.1 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-catalog-backend-module-gitlab@0.1.8 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/backend-tasks@0.3.6 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-catalog-backend-module-ldap@0.5.4 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/backend-tasks@0.3.6 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-catalog-backend-module-msgraph@0.4.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/backend-tasks@0.3.6 + - @backstage/config@1.0.3 + +## @backstage/plugin-catalog-backend-module-openapi@0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.2.0 + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/config@1.0.3 + - @backstage/integration@1.3.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-catalog-common@1.0.7 + +### Patch Changes + +- 823acaa88b: Moved the following types from `@backstage/plugin-catalog-backend` to this package. + + - AnalyzeLocationResponse + - AnalyzeLocationRequest + - AnalyzeLocationExistingEntity + - AnalyzeLocationGenerateEntity + - AnalyzeLocationEntityField + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/plugin-search-common@1.1.0 + +## @backstage/plugin-catalog-graph@0.2.22 + +### Patch Changes + +- bde1e8c8e2: Added `curve` prop to the `DependencyGraph` component to select the type of layout +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/catalog-client@1.1.1 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @backstage/plugin-catalog-graphql@0.3.14 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/config@1.0.3 + - @backstage/types@1.0.0 + +## @backstage/plugin-cicd-statistics@0.1.12 + +### Patch Changes + +- e05e0f021b: Align on the version of `@material-ui/icons` used, to `^4.9.1` like other packages in the main repo +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-plugin-api@1.0.7 + +## @backstage/plugin-cicd-statistics-module-gitlab@0.1.6 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-cicd-statistics@0.1.12 + - @backstage/core-plugin-api@1.0.7 + +## @backstage/plugin-circleci@0.3.10 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @backstage/plugin-cloudbuild@0.3.10 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @backstage/plugin-code-climate@0.1.10 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @backstage/plugin-code-coverage@0.2.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-code-coverage-backend@0.2.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/catalog-client@1.1.1 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + +## @backstage/plugin-codescene@0.1.5 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-config-schema@0.1.33 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + +## @backstage/plugin-cost-insights@0.11.32 + +### Patch Changes + +- a94c2ed1b7: Fixed bug in `CostOverviewBreakdownChart` component where some datasets caused the cost overview breakdown chart to tear. +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/theme@0.2.16 + - @backstage/plugin-cost-insights-common@0.1.1 + +## @backstage/plugin-dynatrace@1.0.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @backstage/plugin-explore@0.3.41 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + - @backstage/plugin-explore-react@0.0.22 + +## @backstage/plugin-explore-react@0.0.22 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.0.7 + +## @backstage/plugin-firehydrant@0.1.27 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @backstage/plugin-fossa@0.2.42 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-gcalendar@0.3.6 + +### Patch Changes + +- 4c2ed7ecf1: Fixed loader showing when user not signed in +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-gcp-projects@0.3.29 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @backstage/plugin-git-release-manager@0.3.23 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/integration@1.3.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-github-actions@0.5.10 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/integration@1.3.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-github-deployments@0.1.41 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/integration-react@1.1.5 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-github-issues@0.1.2 + +### Patch Changes + +- 8c7bff2bb4: Updated the `luxon` dependency to 3.x +- 719ccbb963: Properly filter on relations instead of the spec, when finding by owner +- df226e124c: Add filtering and ordering to the graphql query +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-github-pull-requests-board@0.1.4 + +### Patch Changes + +- 719ccbb963: Properly filter on relations instead of the spec, when finding by owner +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/integration@1.3.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-gitops-profiles@0.3.28 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @backstage/plugin-gocd@0.1.16 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-graphiql@0.2.42 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @backstage/plugin-graphql-backend@0.1.27 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-graphql@0.3.14 + - @backstage/config@1.0.3 + +## @backstage/plugin-home@0.4.26 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/plugin-stack-overflow@0.1.6 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/theme@0.2.16 + +## @backstage/plugin-ilert@0.1.36 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-jenkins@0.7.9 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-jenkins-common@0.1.9 + +## @backstage/plugin-jenkins-backend@0.1.27 + +### Patch Changes + +- b19ea927af: Fixed a bug where `extraRequestHeaders` configuration was ignored. +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-auth-node@0.2.6 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/catalog-client@1.1.1 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/plugin-jenkins-common@0.1.9 + +## @backstage/plugin-jenkins-common@0.1.9 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.7 + - @backstage/plugin-permission-common@0.7.0 + +## @backstage/plugin-kafka@0.3.10 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/theme@0.2.16 + +## @backstage/plugin-kafka-backend@0.2.30 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + +## @backstage/plugin-kubernetes@0.7.3 + +### Patch Changes + +- 51af8361de: Add useCustomResources react hook for fetching Kubernetes Custom Resources +- 35a6cfe257: Fix infinite call bug in `useCustomResources` hook +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/plugin-kubernetes-common@0.4.3 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/theme@0.2.16 + +## @backstage/plugin-kubernetes-backend@0.7.3 + +### Patch Changes + +- de676888bc: Added missing cluster locator configuration schema entries, for the catalog and local proxy types +- d4a8c683be: kubernetes service locator now take request context parameters +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-auth-node@0.2.6 + - @backstage/catalog-client@1.1.1 + - @backstage/plugin-kubernetes-common@0.4.3 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + +## @backstage/plugin-kubernetes-common@0.4.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + +## @backstage/plugin-lighthouse@0.3.10 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/theme@0.2.16 + +## @backstage/plugin-newrelic@0.3.28 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @backstage/plugin-newrelic-dashboard@0.2.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + +## @backstage/plugin-org@0.5.10 + +### Patch Changes + +- f2b4b55636: consistently show parent and child relations in group profile card +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @backstage/plugin-pagerduty@0.5.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-periskop@0.1.8 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-periskop-backend@0.1.8 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/config@1.0.3 + +## @backstage/plugin-permission-backend@0.5.12 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/plugin-auth-node@0.2.6 + - @backstage/plugin-permission-node@0.7.0 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + +## @backstage/plugin-permission-react@0.4.6 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.0 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + +## @backstage/plugin-playlist@0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/plugin-catalog-common@1.0.7 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/plugin-search-react@1.2.0 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-permission-react@0.4.6 + - @backstage/plugin-playlist-common@0.1.1 + +## @backstage/plugin-playlist-common@0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.0 + +## @backstage/plugin-proxy-backend@0.2.31 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/config@1.0.3 + +## @backstage/plugin-rollbar@0.4.10 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @backstage/plugin-rollbar-backend@0.1.34 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/config@1.0.3 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.12 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/plugin-scaffolder-backend@1.7.0 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-scaffolder-backend-module-rails@0.4.5 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/plugin-scaffolder-backend@1.7.0 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.2.10 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.7.0 + - @backstage/config@1.0.3 + - @backstage/types@1.0.0 + +## @backstage/plugin-scaffolder-common@1.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-search@1.0.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/plugin-search-react@1.2.0 + - @backstage/plugin-search-common@1.1.0 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + - @backstage/version-bridge@1.0.1 + +## @backstage/plugin-search-backend-module-elasticsearch@1.0.3 + +### Patch Changes + +- a799972bb1: The search engine has been updated to take advantage of the `pageLimit` property on search queries. If none is provided, the search engine will continue to use its default value of 25 results per page. +- 8006f8a602: In order to improve the debuggability of the search indexing process, messages logged during indexing are now tagged with a `documentType` whose value corresponds to the `type` being indexed. +- Updated dependencies + - @backstage/plugin-search-common@1.1.0 + - @backstage/plugin-search-backend-node@1.0.3 + - @backstage/config@1.0.3 + +## @backstage/plugin-search-backend-module-pg@0.4.1 + +### Patch Changes + +- a799972bb1: The search engine has been updated to take advantage of the `pageLimit` property on search queries. If none is provided, the search engine will continue to use its default value of 25 results per page. +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/plugin-search-common@1.1.0 + - @backstage/plugin-search-backend-node@1.0.3 + - @backstage/config@1.0.3 + +## @backstage/plugin-search-backend-node@1.0.3 + +### Patch Changes + +- a799972bb1: The search engine has been updated to take advantage of the `pageLimit` property on search queries. If none is provided, the search engine will continue to use its default value of 25 results per page. +- 8006f8a602: In order to improve the debuggability of the search indexing process, messages logged during indexing are now tagged with a `documentType` whose value corresponds to the `type` being indexed. +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/backend-tasks@0.3.6 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/plugin-search-common@1.1.0 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + +## @backstage/plugin-sentry@0.4.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @backstage/plugin-shortcuts@0.3.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + +## @backstage/plugin-sonarqube@0.4.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @backstage/plugin-sonarqube-backend@0.1.2 + +### Patch Changes + +- 9c595302cb: Normalize on winston version ^3.2.1 +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + +## @backstage/plugin-splunk-on-call@0.3.34 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @backstage/plugin-stack-overflow@0.1.6 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/plugin-search-common@1.1.0 + - @backstage/plugin-home@0.4.26 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/theme@0.2.16 + +## @backstage/plugin-stack-overflow-backend@0.1.6 + +### Patch Changes + +- 8006f8a602: In order to improve the debuggability of the search indexing process, messages logged during indexing are now tagged with a `documentType` whose value corresponds to the `type` being indexed. +- Updated dependencies + - @backstage/cli@0.20.0 + - @backstage/plugin-search-common@1.1.0 + - @backstage/config@1.0.3 + +## @backstage/plugin-tech-insights@0.3.1 + +### Patch Changes + +- f3d272cf57: Make sure to reload score card contents when props change +- a60a6807bd: making available the search for the last FACTS executed +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + - @backstage/plugin-tech-insights-common@0.2.7 + +## @backstage/plugin-tech-insights-backend@0.5.3 + +### Patch Changes + +- 296aea34da: The Tech Insights plugin supports running fact retrievers across multiple instances. Update the README to remove the stale instructions. +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- f7cbfb97ed: Modify router endpoint to handle singular and collections of request parameters similarly. +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/backend-tasks@0.3.6 + - @backstage/catalog-client@1.1.1 + - @backstage/plugin-tech-insights-node@0.3.5 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/plugin-tech-insights-common@0.2.7 + +## @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.21 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/plugin-tech-insights-node@0.3.5 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/plugin-tech-insights-common@0.2.7 + +## @backstage/plugin-tech-insights-common@0.2.7 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.0.0 + +## @backstage/plugin-tech-insights-node@0.3.5 + +### Patch Changes + +- 0963b4d5fb: Updated package role to be `node-library`. +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/backend-tasks@0.3.6 + - @backstage/config@1.0.3 + - @backstage/types@1.0.0 + - @backstage/plugin-tech-insights-common@0.2.7 + +## @backstage/plugin-tech-radar@0.5.17 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @backstage/plugin-techdocs@1.3.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/plugin-search-react@1.2.0 + - @backstage/plugin-search-common@1.1.0 + - @backstage/plugin-techdocs-react@1.0.5 + - @backstage/integration-react@1.1.5 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.5 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.6.0 + - @backstage/core-components@0.11.2 + - @backstage/core-app-api@1.1.1 + - @backstage/test-utils@1.2.1 + - @backstage/plugin-search-react@1.2.0 + - @backstage/plugin-techdocs@1.3.3 + - @backstage/plugin-techdocs-react@1.0.5 + - @backstage/integration-react@1.1.5 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @backstage/plugin-techdocs-module-addons-contrib@1.0.5 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/plugin-techdocs-react@1.0.5 + - @backstage/integration-react@1.1.5 + - @backstage/core-plugin-api@1.0.7 + - @backstage/integration@1.3.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-techdocs-node@1.4.1 + +### Patch Changes + +- 0b2a30dead: fixing techdocs-cli Docker client creation + + Docker client does not need to be created when --no-docker + option is provided. + + If you had DOCKER_CERT_PATH environment variable defined + the Docker client was looking for certificates + and breaking techdocs-cli generate command even with --no-docker + option. + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-search-common@1.1.0 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + +## @backstage/plugin-techdocs-react@1.0.5 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/version-bridge@1.0.1 + +## @backstage/plugin-todo@0.2.12 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-todo-backend@0.1.34 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/catalog-client@1.1.1 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + +## @backstage/plugin-user-settings-backend@0.1.1 + +### Patch Changes + +- f3463b176b: Use `Response.status` instead of `.send(number)` +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- 82ac9bcfe5: Fix wrong import statement in `README.md`. +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-auth-node@0.2.6 + - @backstage/errors@1.1.2 + - @backstage/types@1.0.0 + +## @backstage/plugin-vault@0.1.4 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + +## @backstage/plugin-vault-backend@0.2.3 + +### Patch Changes + +- 9c595302cb: Normalize on winston version ^3.2.1 +- dae0bbe522: VaultBuilder.tsx renamed to VaultBuilder in order for module to be correctly loaded. +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/backend-test-utils@0.1.29 + - @backstage/backend-tasks@0.3.6 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + +## @backstage/plugin-xcmetrics@0.2.30 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + +## example-app@0.2.76 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-user-settings@0.5.0 + - @backstage/plugin-scaffolder@1.7.0 + - @backstage/plugin-org@0.5.10 + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/plugin-catalog-graph@0.2.22 + - @backstage/core-app-api@1.1.1 + - @backstage/cli@0.20.0 + - @backstage/plugin-catalog-common@1.0.7 + - @backstage/plugin-catalog-import@0.9.0 + - @backstage/plugin-tech-insights@0.3.1 + - @backstage/plugin-kubernetes@0.7.3 + - @backstage/plugin-gcalendar@0.3.6 + - @backstage/plugin-api-docs@0.8.10 + - @backstage/plugin-search-react@1.2.0 + - @backstage/plugin-search-common@1.1.0 + - @backstage/plugin-cost-insights@0.11.32 + - @backstage/plugin-airbrake@0.3.10 + - @backstage/plugin-azure-devops@0.2.1 + - @backstage/plugin-badges@0.2.34 + - @backstage/plugin-circleci@0.3.10 + - @backstage/plugin-cloudbuild@0.3.10 + - @backstage/plugin-code-coverage@0.2.3 + - @backstage/plugin-dynatrace@1.0.0 + - @backstage/plugin-explore@0.3.41 + - @backstage/plugin-github-actions@0.5.10 + - @backstage/plugin-gocd@0.1.16 + - @backstage/plugin-home@0.4.26 + - @backstage/plugin-jenkins@0.7.9 + - @backstage/plugin-kafka@0.3.10 + - @backstage/plugin-lighthouse@0.3.10 + - @backstage/plugin-newrelic-dashboard@0.2.3 + - @backstage/plugin-pagerduty@0.5.3 + - @backstage/plugin-playlist@0.1.1 + - @backstage/plugin-rollbar@0.4.10 + - @backstage/plugin-search@1.0.3 + - @backstage/plugin-sentry@0.4.3 + - @backstage/plugin-techdocs@1.3.3 + - @backstage/plugin-techdocs-react@1.0.5 + - @backstage/plugin-todo@0.2.12 + - @internal/plugin-catalog-customized@0.0.3 + - @backstage/app-defaults@1.0.7 + - @backstage/integration-react@1.1.5 + - @backstage/plugin-apache-airflow@0.2.3 + - @backstage/plugin-gcp-projects@0.3.29 + - @backstage/plugin-graphiql@0.2.42 + - @backstage/plugin-newrelic@0.3.28 + - @backstage/plugin-shortcuts@0.3.2 + - @backstage/plugin-stack-overflow@0.1.6 + - @backstage/plugin-tech-radar@0.5.17 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.5 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/theme@0.2.16 + - @backstage/plugin-permission-react@0.4.6 + +## example-backend@0.2.76 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/plugin-scaffolder-backend@1.7.0 + - @backstage/plugin-auth-node@0.2.6 + - @backstage/backend-tasks@0.3.6 + - @backstage/plugin-permission-node@0.7.0 + - @backstage/plugin-auth-backend@0.17.0 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/plugin-tech-insights-backend@0.5.3 + - @backstage/plugin-search-backend@1.1.0 + - @backstage/catalog-client@1.1.1 + - @backstage/plugin-playlist-backend@0.2.0 + - @backstage/plugin-jenkins-backend@0.1.27 + - @backstage/plugin-app-backend@0.3.37 + - @backstage/plugin-badges-backend@0.1.31 + - @backstage/plugin-graphql-backend@0.1.27 + - @backstage/plugin-permission-backend@0.5.12 + - @backstage/plugin-rollbar-backend@0.1.34 + - @backstage/plugin-kubernetes-backend@0.7.3 + - @backstage/plugin-search-common@1.1.0 + - @backstage/plugin-search-backend-node@1.0.3 + - @backstage/plugin-search-backend-module-pg@0.4.1 + - @backstage/plugin-search-backend-module-elasticsearch@1.0.3 + - @backstage/plugin-techdocs-backend@1.4.0 + - @backstage/plugin-tech-insights-node@0.3.5 + - example-app@0.2.76 + - @backstage/plugin-code-coverage-backend@0.2.3 + - @backstage/plugin-kafka-backend@0.2.30 + - @backstage/plugin-todo-backend@0.1.34 + - @backstage/plugin-azure-devops-backend@0.3.16 + - @backstage/plugin-proxy-backend@0.2.31 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.5 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.21 + - @backstage/config@1.0.3 + - @backstage/integration@1.3.2 + +## example-backend-next@0.0.4 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/plugin-scaffolder-backend@1.7.0 + - @backstage/backend-defaults@0.1.2 + - @backstage/plugin-app-backend@0.3.37 + +## techdocs-cli-embedded-app@0.2.75 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog@1.6.0 + - @backstage/core-components@0.11.2 + - @backstage/core-app-api@1.1.1 + - @backstage/cli@0.20.0 + - @backstage/test-utils@1.2.1 + - @backstage/plugin-techdocs@1.3.3 + - @backstage/plugin-techdocs-react@1.0.5 + - @backstage/app-defaults@1.0.7 + - @backstage/integration-react@1.1.5 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/theme@0.2.16 + +## @internal/plugin-catalog-customized@0.0.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/plugin-catalog@1.6.0 + +## @internal/plugin-todo-list@1.0.6 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + +## @internal/plugin-todo-list-backend@1.0.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/plugin-auth-node@0.2.6 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + +## @internal/plugin-todo-list-common@1.0.5 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.0 diff --git a/package.json b/package.json index c586b3a580..85c4fa6e23 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "@types/react": "^17", "@types/react-dom": "^17" }, - "version": "1.7.0-next.2", + "version": "1.7.0", "dependencies": { "@backstage/errors": "workspace:^", "@manypkg/get-packages": "^1.1.3", diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md index 1b07baeade..2dcaaa362a 100644 --- a/packages/app-defaults/CHANGELOG.md +++ b/packages/app-defaults/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/app-defaults +## 1.0.7 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-app-api@1.1.1 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + - @backstage/plugin-permission-react@0.4.6 + ## 1.0.7-next.2 ### Patch Changes diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json index eb62cab691..de27f276a6 100644 --- a/packages/app-defaults/package.json +++ b/packages/app-defaults/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/app-defaults", "description": "Provides the default wiring of a Backstage App", - "version": "1.0.7-next.2", + "version": "1.0.7", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index e10bfddff8..d0c822dd1e 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,67 @@ # example-app +## 0.2.76 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-user-settings@0.5.0 + - @backstage/plugin-scaffolder@1.7.0 + - @backstage/plugin-org@0.5.10 + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/plugin-catalog-graph@0.2.22 + - @backstage/core-app-api@1.1.1 + - @backstage/cli@0.20.0 + - @backstage/plugin-catalog-common@1.0.7 + - @backstage/plugin-catalog-import@0.9.0 + - @backstage/plugin-tech-insights@0.3.1 + - @backstage/plugin-kubernetes@0.7.3 + - @backstage/plugin-gcalendar@0.3.6 + - @backstage/plugin-api-docs@0.8.10 + - @backstage/plugin-search-react@1.2.0 + - @backstage/plugin-search-common@1.1.0 + - @backstage/plugin-cost-insights@0.11.32 + - @backstage/plugin-airbrake@0.3.10 + - @backstage/plugin-azure-devops@0.2.1 + - @backstage/plugin-badges@0.2.34 + - @backstage/plugin-circleci@0.3.10 + - @backstage/plugin-cloudbuild@0.3.10 + - @backstage/plugin-code-coverage@0.2.3 + - @backstage/plugin-dynatrace@1.0.0 + - @backstage/plugin-explore@0.3.41 + - @backstage/plugin-github-actions@0.5.10 + - @backstage/plugin-gocd@0.1.16 + - @backstage/plugin-home@0.4.26 + - @backstage/plugin-jenkins@0.7.9 + - @backstage/plugin-kafka@0.3.10 + - @backstage/plugin-lighthouse@0.3.10 + - @backstage/plugin-newrelic-dashboard@0.2.3 + - @backstage/plugin-pagerduty@0.5.3 + - @backstage/plugin-playlist@0.1.1 + - @backstage/plugin-rollbar@0.4.10 + - @backstage/plugin-search@1.0.3 + - @backstage/plugin-sentry@0.4.3 + - @backstage/plugin-techdocs@1.3.3 + - @backstage/plugin-techdocs-react@1.0.5 + - @backstage/plugin-todo@0.2.12 + - @internal/plugin-catalog-customized@0.0.3 + - @backstage/app-defaults@1.0.7 + - @backstage/integration-react@1.1.5 + - @backstage/plugin-apache-airflow@0.2.3 + - @backstage/plugin-gcp-projects@0.3.29 + - @backstage/plugin-graphiql@0.2.42 + - @backstage/plugin-newrelic@0.3.28 + - @backstage/plugin-shortcuts@0.3.2 + - @backstage/plugin-stack-overflow@0.1.6 + - @backstage/plugin-tech-radar@0.5.17 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.5 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/theme@0.2.16 + - @backstage/plugin-permission-react@0.4.6 + ## 0.2.76-next.2 ### Patch Changes diff --git a/packages/app/package.json b/packages/app/package.json index 561b8eae30..626848a60e 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "example-app", - "version": "0.2.76-next.2", + "version": "0.2.76", "private": true, "backstage": { "role": "frontend" diff --git a/packages/backend-app-api/CHANGELOG.md b/packages/backend-app-api/CHANGELOG.md index 2b179d7d7a..9db48afd49 100644 --- a/packages/backend-app-api/CHANGELOG.md +++ b/packages/backend-app-api/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/backend-app-api +## 0.2.2 + +### Patch Changes + +- 0027a749cd: Added possibility to configure index plugin of the HTTP router service. +- 45857bffae: Properly export `rootLoggerFactory`. +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/backend-tasks@0.3.6 + - @backstage/plugin-permission-node@0.7.0 + - @backstage/backend-plugin-api@0.1.3 + - @backstage/errors@1.1.2 + ## 0.2.2-next.2 ### Patch Changes diff --git a/packages/backend-app-api/package.json b/packages/backend-app-api/package.json index fd27521572..04a03677c0 100644 --- a/packages/backend-app-api/package.json +++ b/packages/backend-app-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-app-api", "description": "Core API used by Backstage backend apps", - "version": "0.2.2-next.2", + "version": "0.2.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-common/CHANGELOG.md b/packages/backend-common/CHANGELOG.md index 3029c424fc..c6211b05b4 100644 --- a/packages/backend-common/CHANGELOG.md +++ b/packages/backend-common/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/backend-common +## 0.15.2 + +### Patch Changes + +- e8d7976413: Added back support for when no branch is provided for the Bitbucket Server `UrlReader` +- c44cf412de: Fix BitBucket server integration +- c31f7cdfbc: Fixed an issue where `getClient()` for a `pluginId` would return different clients and not share them +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/cli-common@0.1.10 + - @backstage/config@1.0.3 + - @backstage/config-loader@1.1.5 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/types@1.0.0 + ## 0.15.2-next.2 ### Patch Changes diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json index 133c8590fc..2a7e307774 100644 --- a/packages/backend-common/package.json +++ b/packages/backend-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-common", "description": "Common functionality library for Backstage backends", - "version": "0.15.2-next.2", + "version": "0.15.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-defaults/CHANGELOG.md b/packages/backend-defaults/CHANGELOG.md index 986a4a39f2..a569ff349c 100644 --- a/packages/backend-defaults/CHANGELOG.md +++ b/packages/backend-defaults/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/backend-defaults +## 0.1.2 + +### Patch Changes + +- 96d288a02d: Added root logger service to the set of default services. +- Updated dependencies + - @backstage/backend-app-api@0.2.2 + - @backstage/backend-plugin-api@0.1.3 + ## 0.1.2-next.2 ### Patch Changes diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index c0344572fa..4de7123983 100644 --- a/packages/backend-defaults/package.json +++ b/packages/backend-defaults/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-defaults", "description": "Backend defaults used by Backstage backend apps", - "version": "0.1.2-next.2", + "version": "0.1.2", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-next/CHANGELOG.md b/packages/backend-next/CHANGELOG.md index 5849d5b088..3315f4a27f 100644 --- a/packages/backend-next/CHANGELOG.md +++ b/packages/backend-next/CHANGELOG.md @@ -1,5 +1,15 @@ # example-backend-next +## 0.0.4 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/plugin-scaffolder-backend@1.7.0 + - @backstage/backend-defaults@0.1.2 + - @backstage/plugin-app-backend@0.3.37 + ## 0.0.4-next.2 ### Patch Changes diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json index 8965c8b1c8..f82f2fc4fc 100644 --- a/packages/backend-next/package.json +++ b/packages/backend-next/package.json @@ -1,6 +1,6 @@ { "name": "example-backend-next", - "version": "0.0.4-next.2", + "version": "0.0.4", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/backend-plugin-api/CHANGELOG.md b/packages/backend-plugin-api/CHANGELOG.md index 230092c0ba..c45f0a968e 100644 --- a/packages/backend-plugin-api/CHANGELOG.md +++ b/packages/backend-plugin-api/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/backend-plugin-api +## 0.1.3 + +### Patch Changes + +- 28377dc89f: Allow interfaces to be used for inferred option types. +- a35a27df70: Added documentation for `createBackendModule`, with guidelines for choosing a module ID. +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/backend-tasks@0.3.6 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/config@1.0.3 + ## 0.1.3-next.2 ### Patch Changes diff --git a/packages/backend-plugin-api/package.json b/packages/backend-plugin-api/package.json index 389e36aa93..59e1de9529 100644 --- a/packages/backend-plugin-api/package.json +++ b/packages/backend-plugin-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-plugin-api", "description": "Core API used by Backstage backend plugins", - "version": "0.1.3-next.2", + "version": "0.1.3", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-tasks/CHANGELOG.md b/packages/backend-tasks/CHANGELOG.md index bff6fa4e7d..87d3acf503 100644 --- a/packages/backend-tasks/CHANGELOG.md +++ b/packages/backend-tasks/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/backend-tasks +## 0.3.6 + +### Patch Changes + +- d4fea86ea3: Added new function `readTaskScheduleDefinitionFromConfig` to read `TaskScheduleDefinition` (aka. schedule) from the `Config`. +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/types@1.0.0 + ## 0.3.6-next.2 ### Patch Changes diff --git a/packages/backend-tasks/package.json b/packages/backend-tasks/package.json index 06cbe14bf7..6c10478e6c 100644 --- a/packages/backend-tasks/package.json +++ b/packages/backend-tasks/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-tasks", "description": "Common distributed task management library for Backstage backends", - "version": "0.3.6-next.2", + "version": "0.3.6", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-test-utils/CHANGELOG.md b/packages/backend-test-utils/CHANGELOG.md index ab7f6ef60a..e32a82bab8 100644 --- a/packages/backend-test-utils/CHANGELOG.md +++ b/packages/backend-test-utils/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/backend-test-utils +## 0.1.29 + +### Patch Changes + +- 72549952d1: Fixed handling of root scoped services in `startTestBackend`. +- e91e8e9c55: Increased test database max connection pool size to reduce the risk of resource exhaustion. +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/cli@0.20.0 + - @backstage/backend-app-api@0.2.2 + - @backstage/backend-plugin-api@0.1.3 + - @backstage/config@1.0.3 + ## 0.1.29-next.2 ### Patch Changes diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json index d9ab0e195d..aeedaec8e3 100644 --- a/packages/backend-test-utils/package.json +++ b/packages/backend-test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-test-utils", "description": "Test helpers library for Backstage backends", - "version": "0.1.29-next.2", + "version": "0.1.29", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index c4df56a55f..e519556f7f 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,47 @@ # example-backend +## 0.2.76 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/plugin-scaffolder-backend@1.7.0 + - @backstage/plugin-auth-node@0.2.6 + - @backstage/backend-tasks@0.3.6 + - @backstage/plugin-permission-node@0.7.0 + - @backstage/plugin-auth-backend@0.17.0 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/plugin-tech-insights-backend@0.5.3 + - @backstage/plugin-search-backend@1.1.0 + - @backstage/catalog-client@1.1.1 + - @backstage/plugin-playlist-backend@0.2.0 + - @backstage/plugin-jenkins-backend@0.1.27 + - @backstage/plugin-app-backend@0.3.37 + - @backstage/plugin-badges-backend@0.1.31 + - @backstage/plugin-graphql-backend@0.1.27 + - @backstage/plugin-permission-backend@0.5.12 + - @backstage/plugin-rollbar-backend@0.1.34 + - @backstage/plugin-kubernetes-backend@0.7.3 + - @backstage/plugin-search-common@1.1.0 + - @backstage/plugin-search-backend-node@1.0.3 + - @backstage/plugin-search-backend-module-pg@0.4.1 + - @backstage/plugin-search-backend-module-elasticsearch@1.0.3 + - @backstage/plugin-techdocs-backend@1.4.0 + - @backstage/plugin-tech-insights-node@0.3.5 + - example-app@0.2.76 + - @backstage/plugin-code-coverage-backend@0.2.3 + - @backstage/plugin-kafka-backend@0.2.30 + - @backstage/plugin-todo-backend@0.1.34 + - @backstage/plugin-azure-devops-backend@0.3.16 + - @backstage/plugin-proxy-backend@0.2.31 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.5 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.21 + - @backstage/config@1.0.3 + - @backstage/integration@1.3.2 + ## 0.2.76-next.2 ### Patch Changes diff --git a/packages/backend/package.json b/packages/backend/package.json index eb13572859..5cd4c1318e 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "example-backend", - "version": "0.2.76-next.2", + "version": "0.2.76", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/catalog-client/CHANGELOG.md b/packages/catalog-client/CHANGELOG.md index 27c2f9d1bf..fbd49ff49e 100644 --- a/packages/catalog-client/CHANGELOG.md +++ b/packages/catalog-client/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/catalog-client +## 1.1.1 + +### Patch Changes + +- 4f2ac624b4: Renamed argument in `validateEntity` from `location` to `locationRef` +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/errors@1.1.2 + ## 1.1.1-next.2 ### Patch Changes diff --git a/packages/catalog-client/package.json b/packages/catalog-client/package.json index d27efc6257..9c4e79b079 100644 --- a/packages/catalog-client/package.json +++ b/packages/catalog-client/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/catalog-client", "description": "An isomorphic client for the catalog backend", - "version": "1.1.1-next.2", + "version": "1.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/catalog-model/CHANGELOG.md b/packages/catalog-model/CHANGELOG.md index ac53d99efc..2ac459101c 100644 --- a/packages/catalog-model/CHANGELOG.md +++ b/packages/catalog-model/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/catalog-model +## 1.1.2 + +### Patch Changes + +- 6f3b8d0962: Defer `ajv` compilation of schema validators to improve module-import performance +- Updated dependencies + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/types@1.0.0 + ## 1.1.2-next.2 ### Patch Changes diff --git a/packages/catalog-model/package.json b/packages/catalog-model/package.json index 0cfebe36d6..91016d6a33 100644 --- a/packages/catalog-model/package.json +++ b/packages/catalog-model/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/catalog-model", "description": "Types and validators that help describe the model of a Backstage Catalog", - "version": "1.1.2-next.2", + "version": "1.1.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 9263da9053..ad63532139 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,57 @@ # @backstage/cli +## 0.20.0 + +### Minor Changes + +- f368ad7279: **BREAKING**: Bumped `jest`, `jest-runtime`, and `jest-environment-jsdom` to v29. This is up from v27, so check out both the [v28](https://jestjs.io/docs/28.x/upgrading-to-jest28) and [v29](https://jestjs.io/docs/upgrading-to-jest29) (later [here](https://jestjs.io/docs/29.x/upgrading-to-jest29)) migration guides. + + Particular changes that where encountered in the main Backstage repo are: + + - The updated snapshot format. + - `jest.useFakeTimers('legacy')` is now `jest.useFakeTimers({ legacyFakeTimers: true })`. + - Error objects collected by `withLogCollector` from `@backstage/test-utils` are now objects with a `detail` property rather than a string. + +### Patch Changes + +- 78d5eb299e: Tweak the Jest Caching loader to only operate when in `watch` mode +- 9c595302cb: Normalize on winston version ^3.2.1 +- 24b40140c4: Treat files in `__testUtils__` and `__mocks__` directories as test files for linting + purposes. + + Updates the parts of the eslint configuration generator that specify which files + should be treated as test code to include any files under two additional + directories: + + - `__mocks__`: this is the directory used by Jest[0] for mock code. + - `__testUtils__`: a suggested location for utility code executed only when + running tests. + + [0]: https://jestjs.io/docs/manual-mocks#mocking-user-modules + +- 3e309107ca: Updated fallback versions of dependencies in all templates. +- 292a088807: Added a new `repo test` command. +- ba63cae41c: Updated lockfile parsing to have better support for Yarn 3. +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- 2dddb32fea: Switched the Jest transform for YAML files to use a custom one available at `@backstage/cli/config/jestYamlTransform.js`. +- a541a3a78a: Switch to upfront resolution of `swc-loader` in Webpack config. +- cfb3598410: Removed `tsx` and `jsx` as supported extensions in backend packages. For most + repos, this will not have any effect. But if you inadvertently had added some + `tsx`/`jsx` files to your backend package, you may now start to see `code: 'MODULE_NOT_FOUND'` errors when launching the backend locally. The reason for + this is that the offending files get ignored during transpilation. Hence, the + importing file can no longer find anything to import. + + The fix is to rename any `.tsx` files in your backend packages to `.ts` instead, + or `.jsx` to `.js`. + +- Updated dependencies + - @backstage/cli-common@0.1.10 + - @backstage/config@1.0.3 + - @backstage/config-loader@1.1.5 + - @backstage/errors@1.1.2 + - @backstage/release-manifests@0.0.6 + - @backstage/types@1.0.0 + ## 0.20.0-next.2 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 213c6dad00..f460bfa4e0 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/cli", "description": "CLI for developing Backstage plugins and apps", - "version": "0.20.0-next.2", + "version": "0.20.0", "publishConfig": { "access": "public" }, diff --git a/packages/codemods/CHANGELOG.md b/packages/codemods/CHANGELOG.md index e95f39dcfe..161a8dbdf9 100644 --- a/packages/codemods/CHANGELOG.md +++ b/packages/codemods/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/codemods +## 0.1.40 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.10 + ## 0.1.40-next.2 ### Patch Changes diff --git a/packages/codemods/package.json b/packages/codemods/package.json index 37342231a8..cc3ad6e468 100644 --- a/packages/codemods/package.json +++ b/packages/codemods/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/codemods", "description": "A collection of codemods for Backstage projects", - "version": "0.1.40-next.2", + "version": "0.1.40", "publishConfig": { "access": "public", "main": "dist/index.cjs.js" diff --git a/packages/config-loader/CHANGELOG.md b/packages/config-loader/CHANGELOG.md index 42eaa97e53..b5b243d788 100644 --- a/packages/config-loader/CHANGELOG.md +++ b/packages/config-loader/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/config-loader +## 1.1.5 + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.10 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/types@1.0.0 + ## 1.1.5-next.2 ### Patch Changes diff --git a/packages/config-loader/package.json b/packages/config-loader/package.json index 7bd0ffb1bf..6a96e7841b 100644 --- a/packages/config-loader/package.json +++ b/packages/config-loader/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/config-loader", "description": "Config loading functionality used by Backstage backend, and CLI", - "version": "1.1.5-next.2", + "version": "1.1.5", "publishConfig": { "access": "public", "main": "dist/index.cjs.js", diff --git a/packages/config/CHANGELOG.md b/packages/config/CHANGELOG.md index a08d4341e4..a03770f991 100644 --- a/packages/config/CHANGELOG.md +++ b/packages/config/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/config +## 1.0.3 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.0.0 + ## 1.0.3-next.2 ### Patch Changes diff --git a/packages/config/package.json b/packages/config/package.json index 55891f8c63..018aeb47cf 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/config", "description": "Config API used by Backstage core, backend, and CLI", - "version": "1.0.3-next.2", + "version": "1.0.3", "publishConfig": { "access": "public", "main": "dist/index.cjs.js", diff --git a/packages/core-app-api/CHANGELOG.md b/packages/core-app-api/CHANGELOG.md index 0c197cfb1e..147a3737cc 100644 --- a/packages/core-app-api/CHANGELOG.md +++ b/packages/core-app-api/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/core-app-api +## 1.1.1 + +### Patch Changes + +- 27e6404aba: Fixed a bug where gathered index routes would fail to bind routable extensions. This would typically show up when placing a routable extension in the entity page overview tab. +- Updated dependencies + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/types@1.0.0 + - @backstage/version-bridge@1.0.1 + ## 1.1.1-next.2 ### Patch Changes diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json index c1beb853cb..7d4b6eba30 100644 --- a/packages/core-app-api/package.json +++ b/packages/core-app-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-app-api", "description": "Core app API used by Backstage apps", - "version": "1.1.1-next.2", + "version": "1.1.1", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md index cb75cb5fb8..0d58a7032a 100644 --- a/packages/core-components/CHANGELOG.md +++ b/packages/core-components/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/core-components +## 0.11.2 + +### Patch Changes + +- bde1e8c8e2: Added `curve` prop to the `DependencyGraph` component to select the type of layout +- 882101cd9b: Deep-import LightAsync component to improve module-import speed +- 0d0f30d87e: Fixed layout for core-components docs where table was broken by splitting with code sample +- Updated dependencies + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + - @backstage/version-bridge@1.0.1 + ## 0.11.2-next.2 ### Patch Changes diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 3a58be3529..4c7e9fb4db 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-components", "description": "Core components used by Backstage plugins and apps", - "version": "0.11.2-next.2", + "version": "0.11.2", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/core-plugin-api/CHANGELOG.md b/packages/core-plugin-api/CHANGELOG.md index f0ac2c4dfb..8b167be430 100644 --- a/packages/core-plugin-api/CHANGELOG.md +++ b/packages/core-plugin-api/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/core-plugin-api +## 1.0.7 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3 + - @backstage/types@1.0.0 + - @backstage/version-bridge@1.0.1 + ## 1.0.7-next.2 ### Patch Changes diff --git a/packages/core-plugin-api/package.json b/packages/core-plugin-api/package.json index c1097bdf9e..1d8e21344c 100644 --- a/packages/core-plugin-api/package.json +++ b/packages/core-plugin-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-plugin-api", "description": "Core API used by Backstage plugins", - "version": "1.0.7-next.2", + "version": "1.0.7", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md index 2640775b77..52ed5caee8 100644 --- a/packages/create-app/CHANGELOG.md +++ b/packages/create-app/CHANGELOG.md @@ -1,5 +1,37 @@ # @backstage/create-app +## 0.4.32 + +### Patch Changes + +- 58c2264325: Newly created Backstage repositories now use the stable version 6 of + `react-router`, just like the main repo does. Please let us know if you find any + issues with this. + + Migrating to the stable version of `react-router` is optional for the time + being. But if you want to do the same for your existing repository, please + follow [this + guide](https://backstage.io/docs/tutorials/react-router-stable-migration). + +- e05e0f021b: Update versions of packages used in the create-app template, to match those in the main repo +- 01dff06be4: Leverage cache mounts in Dockerfile during `yarn install ...` and `apt-get ...` commands to speed up repeated builds. +- 90616bcaa6: Add the new search pagination component to the search page template. +- 7c6306fc8a: Initializes a git repository when creating an app using @packages/create-app +- 52f25858a8: Added `*.session.sql` Visual Studio Code database functionality files to `.gitignore` in the default template. This is optional but potentially helpful if your developers use Visual Studio Code; you can add a line with that exact value to your own root `.gitignore` if you want the same. +- 6d00e80146: Updated the root `test` scripts to use `backstage-cli repo test`. + + To apply this change to an existing app, make the following change to the root `package.json`: + + ```diff + - "test": "backstage-cli test", + - "test:all": "lerna run test -- --coverage", + + "test": "backstage-cli repo test", + + "test:all": "backstage-cli repo test --coverage", + ``` + +- Updated dependencies + - @backstage/cli-common@0.1.10 + ## 0.4.32-next.2 ### Patch Changes diff --git a/packages/create-app/package.json b/packages/create-app/package.json index a42c7830df..a6a62fbbf0 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/create-app", "description": "A CLI that helps you create your own Backstage app", - "version": "0.4.32-next.2", + "version": "0.4.32", "publishConfig": { "access": "public" }, diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index 31ca46b945..9513c71468 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/dev-utils +## 1.0.7 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-app-api@1.1.1 + - @backstage/test-utils@1.2.1 + - @backstage/app-defaults@1.0.7 + - @backstage/integration-react@1.1.5 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 1.0.7-next.2 ### Patch Changes diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index 990b45d692..225f4e9a78 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/dev-utils", "description": "Utilities for developing Backstage plugins.", - "version": "1.0.7-next.2", + "version": "1.0.7", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/errors/CHANGELOG.md b/packages/errors/CHANGELOG.md index fe478f0bd7..23978aeab8 100644 --- a/packages/errors/CHANGELOG.md +++ b/packages/errors/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/errors +## 1.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.0.0 + ## 1.1.2-next.2 ### Patch Changes diff --git a/packages/errors/package.json b/packages/errors/package.json index e78ecb45d2..9abfeaaaaa 100644 --- a/packages/errors/package.json +++ b/packages/errors/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/errors", "description": "Common utilities for error handling within Backstage", - "version": "1.1.2-next.2", + "version": "1.1.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/integration-react/CHANGELOG.md b/packages/integration-react/CHANGELOG.md index a547cf131a..07d8fa516f 100644 --- a/packages/integration-react/CHANGELOG.md +++ b/packages/integration-react/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/integration-react +## 1.1.5 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/integration@1.3.2 + - @backstage/theme@0.2.16 + ## 1.1.5-next.2 ### Patch Changes diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json index f097a116b4..398ca58f36 100644 --- a/packages/integration-react/package.json +++ b/packages/integration-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration-react", "description": "Frontend package for managing integrations towards external systems", - "version": "1.1.5-next.2", + "version": "1.1.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/integration/CHANGELOG.md b/packages/integration/CHANGELOG.md index e3433efaf8..244516e70e 100644 --- a/packages/integration/CHANGELOG.md +++ b/packages/integration/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/integration +## 1.3.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + ## 1.3.2-next.2 ### Patch Changes diff --git a/packages/integration/package.json b/packages/integration/package.json index cf2c7af7fe..add2b07a93 100644 --- a/packages/integration/package.json +++ b/packages/integration/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration", "description": "Helpers for managing integrations towards external systems", - "version": "1.3.2-next.2", + "version": "1.3.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/techdocs-cli-embedded-app/CHANGELOG.md b/packages/techdocs-cli-embedded-app/CHANGELOG.md index cc2fdb84a3..ffabaf3ffb 100644 --- a/packages/techdocs-cli-embedded-app/CHANGELOG.md +++ b/packages/techdocs-cli-embedded-app/CHANGELOG.md @@ -1,5 +1,24 @@ # techdocs-cli-embedded-app +## 0.2.75 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog@1.6.0 + - @backstage/core-components@0.11.2 + - @backstage/core-app-api@1.1.1 + - @backstage/cli@0.20.0 + - @backstage/test-utils@1.2.1 + - @backstage/plugin-techdocs@1.3.3 + - @backstage/plugin-techdocs-react@1.0.5 + - @backstage/app-defaults@1.0.7 + - @backstage/integration-react@1.1.5 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/theme@0.2.16 + ## 0.2.75-next.2 ### Patch Changes diff --git a/packages/techdocs-cli-embedded-app/package.json b/packages/techdocs-cli-embedded-app/package.json index b6b2a40832..2bcf099d80 100644 --- a/packages/techdocs-cli-embedded-app/package.json +++ b/packages/techdocs-cli-embedded-app/package.json @@ -1,6 +1,6 @@ { "name": "techdocs-cli-embedded-app", - "version": "0.2.75-next.2", + "version": "0.2.75", "private": true, "backstage": { "role": "frontend" diff --git a/packages/techdocs-cli/CHANGELOG.md b/packages/techdocs-cli/CHANGELOG.md index 3fee2b5e70..c5f85ab548 100644 --- a/packages/techdocs-cli/CHANGELOG.md +++ b/packages/techdocs-cli/CHANGELOG.md @@ -1,5 +1,26 @@ # @techdocs/cli +## 1.2.2 + +### Patch Changes + +- 0b2a30dead: fixing techdocs-cli Docker client creation + + Docker client does not need to be created when --no-docker + option is provided. + + If you had DOCKER_CERT_PATH environment variable defined + the Docker client was looking for certificates + and breaking techdocs-cli generate command even with --no-docker + option. + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-techdocs-node@1.4.1 + - @backstage/cli-common@0.1.10 + - @backstage/config@1.0.3 + ## 1.2.2-next.2 ### Patch Changes diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json index 63dbe14e03..1d721109bf 100644 --- a/packages/techdocs-cli/package.json +++ b/packages/techdocs-cli/package.json @@ -1,7 +1,7 @@ { "name": "@techdocs/cli", "description": "Utility CLI for managing TechDocs sites in Backstage.", - "version": "1.2.2-next.2", + "version": "1.2.2", "publishConfig": { "access": "public" }, diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md index 4495c72de1..c891069ab5 100644 --- a/packages/test-utils/CHANGELOG.md +++ b/packages/test-utils/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/test-utils +## 1.2.1 + +### Patch Changes + +- e05e0f021b: Align on the version of `@material-ui/icons` used, to `^4.9.1` like other packages in the main repo +- Updated dependencies + - @backstage/core-app-api@1.1.1 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + - @backstage/plugin-permission-react@0.4.6 + ## 1.2.1-next.2 ### Patch Changes diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index f950c42dde..cf0bf2b225 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/test-utils", "description": "Utilities to test Backstage plugins and apps.", - "version": "1.2.1-next.2", + "version": "1.2.1", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/adr-backend/CHANGELOG.md b/plugins/adr-backend/CHANGELOG.md index 3349492a65..586caf36a1 100644 --- a/plugins/adr-backend/CHANGELOG.md +++ b/plugins/adr-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-adr-backend +## 0.2.2 + +### Patch Changes + +- 8006f8a602: In order to improve the debuggability of the search indexing process, messages logged during indexing are now tagged with a `documentType` whose value corresponds to the `type` being indexed. +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/catalog-client@1.1.1 + - @backstage/plugin-search-common@1.1.0 + - @backstage/plugin-adr-common@0.2.2 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + ## 0.2.2-next.2 ### Patch Changes diff --git a/plugins/adr-backend/package.json b/plugins/adr-backend/package.json index 903e462bc9..30b623ace0 100644 --- a/plugins/adr-backend/package.json +++ b/plugins/adr-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr-backend", - "version": "0.2.2-next.2", + "version": "0.2.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/adr-common/CHANGELOG.md b/plugins/adr-common/CHANGELOG.md index 3472fc1e18..be906e2ddc 100644 --- a/plugins/adr-common/CHANGELOG.md +++ b/plugins/adr-common/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-adr-common +## 0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-search-common@1.1.0 + - @backstage/integration@1.3.2 + ## 0.2.2-next.2 ### Patch Changes diff --git a/plugins/adr-common/package.json b/plugins/adr-common/package.json index 7bfd4d4aa2..e62be75b1c 100644 --- a/plugins/adr-common/package.json +++ b/plugins/adr-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-adr-common", "description": "Common functionalities for the adr plugin", - "version": "0.2.2-next.2", + "version": "0.2.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/adr/CHANGELOG.md b/plugins/adr/CHANGELOG.md index 544b13ef77..40a627a340 100644 --- a/plugins/adr/CHANGELOG.md +++ b/plugins/adr/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-adr +## 0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/plugin-search-react@1.2.0 + - @backstage/plugin-search-common@1.1.0 + - @backstage/plugin-adr-common@0.2.2 + - @backstage/integration-react@1.1.5 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 0.2.2-next.2 ### Patch Changes diff --git a/plugins/adr/package.json b/plugins/adr/package.json index dc324e05f2..8e4835eb31 100644 --- a/plugins/adr/package.json +++ b/plugins/adr/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr", - "version": "0.2.2-next.2", + "version": "0.2.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/airbrake-backend/CHANGELOG.md b/plugins/airbrake-backend/CHANGELOG.md index 45a049c672..0df7e1669c 100644 --- a/plugins/airbrake-backend/CHANGELOG.md +++ b/plugins/airbrake-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-airbrake-backend +## 0.2.10 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/config@1.0.3 + ## 0.2.10-next.2 ### Patch Changes diff --git a/plugins/airbrake-backend/package.json b/plugins/airbrake-backend/package.json index a96a05e753..d35d005137 100644 --- a/plugins/airbrake-backend/package.json +++ b/plugins/airbrake-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake-backend", - "version": "0.2.10-next.2", + "version": "0.2.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/airbrake/CHANGELOG.md b/plugins/airbrake/CHANGELOG.md index cf7f67e46b..68bc61ff92 100644 --- a/plugins/airbrake/CHANGELOG.md +++ b/plugins/airbrake/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-airbrake +## 0.3.10 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/test-utils@1.2.1 + - @backstage/dev-utils@1.0.7 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 0.3.10-next.2 ### Patch Changes diff --git a/plugins/airbrake/package.json b/plugins/airbrake/package.json index d81ddf3cdf..dd65baa46d 100644 --- a/plugins/airbrake/package.json +++ b/plugins/airbrake/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake", - "version": "0.3.10-next.2", + "version": "0.3.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/allure/CHANGELOG.md b/plugins/allure/CHANGELOG.md index c9f80be792..5b6330f11e 100644 --- a/plugins/allure/CHANGELOG.md +++ b/plugins/allure/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-allure +## 0.1.26 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 0.1.26-next.2 ### Patch Changes diff --git a/plugins/allure/package.json b/plugins/allure/package.json index 395295512a..ae0f87fb1e 100644 --- a/plugins/allure/package.json +++ b/plugins/allure/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-allure", "description": "A Backstage plugin that integrates with Allure", - "version": "0.1.26-next.2", + "version": "0.1.26", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/analytics-module-ga/CHANGELOG.md b/plugins/analytics-module-ga/CHANGELOG.md index 8e7cbbed8d..1d16fce74d 100644 --- a/plugins/analytics-module-ga/CHANGELOG.md +++ b/plugins/analytics-module-ga/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-analytics-module-ga +## 0.1.21 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/theme@0.2.16 + ## 0.1.21-next.2 ### Patch Changes diff --git a/plugins/analytics-module-ga/package.json b/plugins/analytics-module-ga/package.json index 56489d3753..dc3dd253f4 100644 --- a/plugins/analytics-module-ga/package.json +++ b/plugins/analytics-module-ga/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-analytics-module-ga", - "version": "0.1.21-next.2", + "version": "0.1.21", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/apache-airflow/CHANGELOG.md b/plugins/apache-airflow/CHANGELOG.md index 37504b440d..aa40bfc9b2 100644 --- a/plugins/apache-airflow/CHANGELOG.md +++ b/plugins/apache-airflow/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-apache-airflow +## 0.2.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + ## 0.2.3-next.2 ### Patch Changes diff --git a/plugins/apache-airflow/package.json b/plugins/apache-airflow/package.json index f3baa62412..b66067cb6e 100644 --- a/plugins/apache-airflow/package.json +++ b/plugins/apache-airflow/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-apache-airflow", - "version": "0.2.3-next.2", + "version": "0.2.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md index 75b2e41b0b..630587a60e 100644 --- a/plugins/api-docs/CHANGELOG.md +++ b/plugins/api-docs/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-api-docs +## 0.8.10 + +### Patch Changes + +- 50c6e14aee: Updated dependency `@asyncapi/react-component` to `1.0.0-next.43`. +- 3d5bb521ee: Updated dependency `@asyncapi/react-component` to `1.0.0-next.42`. +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/plugin-catalog@1.6.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 0.8.10-next.2 ### Patch Changes diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index 695cbbc1ef..1a5c8ae07c 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-api-docs", "description": "A Backstage plugin that helps represent API entities in the frontend", - "version": "0.8.10-next.2", + "version": "0.8.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/apollo-explorer/CHANGELOG.md b/plugins/apollo-explorer/CHANGELOG.md index 405f7558ad..3a56b728fe 100644 --- a/plugins/apollo-explorer/CHANGELOG.md +++ b/plugins/apollo-explorer/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-apollo-explorer +## 0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 0.1.3-next.2 ### Patch Changes diff --git a/plugins/apollo-explorer/package.json b/plugins/apollo-explorer/package.json index ddf5996037..3e2f958fe7 100644 --- a/plugins/apollo-explorer/package.json +++ b/plugins/apollo-explorer/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-apollo-explorer", - "version": "0.1.3-next.2", + "version": "0.1.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/app-backend/CHANGELOG.md b/plugins/app-backend/CHANGELOG.md index 8e9ad5420b..ba4a4b9ea4 100644 --- a/plugins/app-backend/CHANGELOG.md +++ b/plugins/app-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-app-backend +## 0.3.37 + +### Patch Changes + +- 11c9e0ad33: Added alpha plugin implementation for the new backend system. Available at `@backstage/plugin-app-backend/alpha`. +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/backend-plugin-api@0.1.3 + - @backstage/config@1.0.3 + - @backstage/config-loader@1.1.5 + - @backstage/types@1.0.0 + ## 0.3.37-next.2 ### Patch Changes diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json index 64378b4adf..d3b14e6afd 100644 --- a/plugins/app-backend/package.json +++ b/plugins/app-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-app-backend", "description": "A Backstage backend plugin that serves the Backstage frontend app", - "version": "0.3.37-next.2", + "version": "0.3.37", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md index 54cce8a7b0..11c6cedb8e 100644 --- a/plugins/auth-backend/CHANGELOG.md +++ b/plugins/auth-backend/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-auth-backend +## 0.17.0 + +### Minor Changes + +- e2dc42e9f0: Google OAuth refresh tokens will now be revoked on logout by calling Google's API +- 5fa831ce55: CookieConfigurer can optionally return the `SameSite` cookie attribute. + CookieConfigurer now requires an additional argument `appOrigin` - the origin URL of the app - which is used to calculate the `SameSite` attribute. + defaultCookieConfigurer returns the `SameSite` attribute which defaults to `Lax`. In cases where an auth-backend is running on a different domain than the App, `SameSite=None` is used - but only for secure contexts. This is so that cookies can be included in third-party requests. + + OAuthAdapterOptions has been modified to require additional arguments, `baseUrl`, and `cookieConfigurer`. + OAuthAdapter now resolves cookie configuration using its supplied CookieConfigurer for each request to make sure that the proper attributes always are set. + +### Patch Changes + +- b5c126010c: Auth0 provider now supports optional `connection` and `connectionScope` parameters to configure social identity providers. +- 8c6ec175bf: Fix GitLab provider setup so that it supports GitLab installations with a path in the URL. +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-auth-node@0.2.6 + - @backstage/catalog-client@1.1.1 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/types@1.0.0 + ## 0.17.0-next.2 ### Patch Changes diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index 0a199443b1..23482f8eb7 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-auth-backend", "description": "A Backstage backend plugin that handles authentication", - "version": "0.17.0-next.2", + "version": "0.17.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-node/CHANGELOG.md b/plugins/auth-node/CHANGELOG.md index b84e726467..ab1229ea69 100644 --- a/plugins/auth-node/CHANGELOG.md +++ b/plugins/auth-node/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-auth-node +## 0.2.6 + +### Patch Changes + +- f3a3fefb96: Ensure `getIdentity` throws an `AuthenticationError` instead of a `NotAllowed` error when authentication fails +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + ## 0.2.6-next.2 ### Patch Changes diff --git a/plugins/auth-node/package.json b/plugins/auth-node/package.json index 7649826982..f657a2df01 100644 --- a/plugins/auth-node/package.json +++ b/plugins/auth-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-node", - "version": "0.2.6-next.2", + "version": "0.2.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-devops-backend/CHANGELOG.md b/plugins/azure-devops-backend/CHANGELOG.md index 3516169016..c7721c604d 100644 --- a/plugins/azure-devops-backend/CHANGELOG.md +++ b/plugins/azure-devops-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-azure-devops-backend +## 0.3.16 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/config@1.0.3 + - @backstage/plugin-azure-devops-common@0.3.0 + ## 0.3.16-next.2 ### Patch Changes diff --git a/plugins/azure-devops-backend/package.json b/plugins/azure-devops-backend/package.json index 062fa44c0b..e429240ab3 100644 --- a/plugins/azure-devops-backend/package.json +++ b/plugins/azure-devops-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops-backend", - "version": "0.3.16-next.2", + "version": "0.3.16", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-devops/CHANGELOG.md b/plugins/azure-devops/CHANGELOG.md index f3538acd45..7c5c8983bf 100644 --- a/plugins/azure-devops/CHANGELOG.md +++ b/plugins/azure-devops/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-azure-devops +## 0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-azure-devops-common@0.3.0 + ## 0.2.1-next.2 ### Patch Changes diff --git a/plugins/azure-devops/package.json b/plugins/azure-devops/package.json index dca00111f6..3e1a69b3dc 100644 --- a/plugins/azure-devops/package.json +++ b/plugins/azure-devops/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops", - "version": "0.2.1-next.2", + "version": "0.2.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/badges-backend/CHANGELOG.md b/plugins/badges-backend/CHANGELOG.md index 0b980d94c4..8e71d4f13f 100644 --- a/plugins/badges-backend/CHANGELOG.md +++ b/plugins/badges-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-badges-backend +## 0.1.31 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/catalog-client@1.1.1 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + ## 0.1.31-next.2 ### Patch Changes diff --git a/plugins/badges-backend/package.json b/plugins/badges-backend/package.json index ea3524ce8a..0ca4eccccf 100644 --- a/plugins/badges-backend/package.json +++ b/plugins/badges-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges-backend", "description": "A Backstage backend plugin that generates README badges for your entities", - "version": "0.1.31-next.2", + "version": "0.1.31", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/badges/CHANGELOG.md b/plugins/badges/CHANGELOG.md index 3692f7280a..d2f5756609 100644 --- a/plugins/badges/CHANGELOG.md +++ b/plugins/badges/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-badges +## 0.2.34 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + ## 0.2.34-next.2 ### Patch Changes diff --git a/plugins/badges/package.json b/plugins/badges/package.json index 18d9f76ce6..0d212b70b5 100644 --- a/plugins/badges/package.json +++ b/plugins/badges/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges", "description": "A Backstage plugin that generates README badges for your entities", - "version": "0.2.34-next.2", + "version": "0.2.34", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bazaar-backend/CHANGELOG.md b/plugins/bazaar-backend/CHANGELOG.md index 53d888b247..ef7e924dcb 100644 --- a/plugins/bazaar-backend/CHANGELOG.md +++ b/plugins/bazaar-backend/CHANGELOG.md @@ -1,5 +1,42 @@ # @backstage/plugin-bazaar-backend +## 0.2.0 + +### Minor Changes + +- 8554533546: **BREAKING** The bazaar-backend `createRouter` now requires that the `identityApi` is passed to the router. + + These changes are **required** to `packages/backend/src/plugins/bazaar.ts` + + The user entity ref is now added to the members table and is taken from the requesting user using the `identityApi`. + + ```diff + import { PluginEnvironment } from '../types'; + import { createRouter } from '@backstage/plugin-bazaar-backend'; + import { Router } from 'express'; + + export default async function createPlugin( + env: PluginEnvironment, + ): Promise { + return await createRouter({ + logger: env.logger, + config: env.config, + database: env.database, + + identity: env.identity, + }); + } + ``` + +### Patch Changes + +- f7c2855d76: Router now also has endpoint `getLatestProjects` that takes a limit of projects as prop. +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/backend-test-utils@0.1.29 + - @backstage/plugin-auth-node@0.2.6 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + ## 0.2.0-next.2 ### Minor Changes diff --git a/plugins/bazaar-backend/package.json b/plugins/bazaar-backend/package.json index 9a203ed0f2..6ac340184e 100644 --- a/plugins/bazaar-backend/package.json +++ b/plugins/bazaar-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar-backend", - "version": "0.2.0-next.2", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bazaar/CHANGELOG.md b/plugins/bazaar/CHANGELOG.md index c5042a6585..82269fc0ba 100644 --- a/plugins/bazaar/CHANGELOG.md +++ b/plugins/bazaar/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-bazaar +## 0.1.25 + +### Patch Changes + +- f7c2855d76: Added a `Overview Card` for either latest or random projects. Changed `ProjectPreview.tsx` so it take `gridSize` and `useTablePagination` as props. +- c0352bbc69: Link to the user catalog entity of a member +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/plugin-catalog@1.6.0 + - @backstage/core-components@0.11.2 + - @backstage/cli@0.20.0 + - @backstage/catalog-client@1.1.1 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + ## 0.1.25-next.2 ### Patch Changes diff --git a/plugins/bazaar/package.json b/plugins/bazaar/package.json index 94905d0387..522d84aeec 100644 --- a/plugins/bazaar/package.json +++ b/plugins/bazaar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar", - "version": "0.1.25-next.2", + "version": "0.1.25", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bitbucket-cloud-common/CHANGELOG.md b/plugins/bitbucket-cloud-common/CHANGELOG.md index 0fb56e97ae..c9befa2959 100644 --- a/plugins/bitbucket-cloud-common/CHANGELOG.md +++ b/plugins/bitbucket-cloud-common/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-bitbucket-cloud-common +## 0.2.0 + +### Minor Changes + +- ad74723fbf: Update Bitbucket Cloud models to latest OAS version. + + The latest specification contained some BREAKING CHANGES + due to removed fields. + + All of these fields are not used at other plugins, though. + Therefore, this change has no impact on other modules here. + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.3.2 + ## 0.2.0-next.2 ### Patch Changes diff --git a/plugins/bitbucket-cloud-common/package.json b/plugins/bitbucket-cloud-common/package.json index 50b2706494..f7f1ffceac 100644 --- a/plugins/bitbucket-cloud-common/package.json +++ b/plugins/bitbucket-cloud-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-bitbucket-cloud-common", "description": "Common functionalities for bitbucket-cloud plugins", - "version": "0.2.0-next.2", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bitrise/CHANGELOG.md b/plugins/bitrise/CHANGELOG.md index 987576897a..9e6d7a9306 100644 --- a/plugins/bitrise/CHANGELOG.md +++ b/plugins/bitrise/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-bitrise +## 0.1.37 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 0.1.37-next.2 ### Patch Changes diff --git a/plugins/bitrise/package.json b/plugins/bitrise/package.json index 29c6be025c..4240262c07 100644 --- a/plugins/bitrise/package.json +++ b/plugins/bitrise/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-bitrise", "description": "A Backstage plugin that integrates towards Bitrise", - "version": "0.1.37-next.2", + "version": "0.1.37", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-aws/CHANGELOG.md b/plugins/catalog-backend-module-aws/CHANGELOG.md index e1b79a9bee..47dbcd7f53 100644 --- a/plugins/catalog-backend-module-aws/CHANGELOG.md +++ b/plugins/catalog-backend-module-aws/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-aws +## 0.1.10 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/backend-tasks@0.3.6 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/types@1.0.0 + ## 0.1.10-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json index 8a511b0019..02bb1782e1 100644 --- a/plugins/catalog-backend-module-aws/package.json +++ b/plugins/catalog-backend-module-aws/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-aws", "description": "A Backstage catalog backend module that helps integrate towards AWS", - "version": "0.1.10-next.2", + "version": "0.1.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-azure/CHANGELOG.md b/plugins/catalog-backend-module-azure/CHANGELOG.md index bdd495a472..7c40b06228 100644 --- a/plugins/catalog-backend-module-azure/CHANGELOG.md +++ b/plugins/catalog-backend-module-azure/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-azure +## 0.1.8 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/backend-tasks@0.3.6 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/types@1.0.0 + ## 0.1.8-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index 5ccc68a70e..d3233be0e5 100644 --- a/plugins/catalog-backend-module-azure/package.json +++ b/plugins/catalog-backend-module-azure/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-azure", "description": "A Backstage catalog backend module that helps integrate towards Azure", - "version": "0.1.8-next.2", + "version": "0.1.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md index 4df7a0fd82..a024b12275 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-catalog-backend-module-bitbucket-cloud +## 0.1.4 + +### Patch Changes + +- f66e696e7b: Bitbucket Cloud provider: Add option to configure schedule via `app-config.yaml` instead of in code. + + Please find how to configure the schedule at the config at + https://backstage.io/docs/integrations/bitbucketCloud/discovery + +- a9b91d39bb: Add `bitbucketCloudCatalogModule` (new backend-plugin-api, alpha). +- Updated dependencies + - @backstage/plugin-catalog-node@1.2.0 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/backend-tasks@0.3.6 + - @backstage/backend-plugin-api@0.1.3 + - @backstage/plugin-bitbucket-cloud-common@0.2.0 + - @backstage/config@1.0.3 + - @backstage/integration@1.3.2 + ## 0.1.4-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json index df8fd11e8c..f3564463cc 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/package.json +++ b/plugins/catalog-backend-module-bitbucket-cloud/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-cloud", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket Cloud", - "version": "0.1.4-next.2", + "version": "0.1.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md index 7ba7e97d21..9c9b61247f 100644 --- a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-bitbucket-server +## 0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/backend-tasks@0.3.6 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + ## 0.1.2-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json index 94b9cdd780..11f8c880dd 100644 --- a/plugins/catalog-backend-module-bitbucket-server/package.json +++ b/plugins/catalog-backend-module-bitbucket-server/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-server", - "version": "0.1.2-next.2", + "version": "0.1.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md index 448b4b6eee..ebc6e7b9df 100644 --- a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-catalog-backend-module-bitbucket +## 0.2.4 + +### Patch Changes + +- 23f9199a0f: Deprecate `@backstage/plugin-catalog-backend-module-bitbucket`. + + Please migrate to `@backstage/plugin-catalog-backend-module-bitbucket-cloud` + or `@backstage/plugin-catalog-backend-module-bitbucket-server` instead. + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.0 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/types@1.0.0 + ## 0.2.4-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket/package.json b/plugins/catalog-backend-module-bitbucket/package.json index dd6ebbf75c..2d4eae3b8f 100644 --- a/plugins/catalog-backend-module-bitbucket/package.json +++ b/plugins/catalog-backend-module-bitbucket/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket", - "version": "0.2.4-next.2", + "version": "0.2.4", "deprecated": true, "main": "src/index.ts", "types": "src/index.ts", diff --git a/plugins/catalog-backend-module-gerrit/CHANGELOG.md b/plugins/catalog-backend-module-gerrit/CHANGELOG.md index bba01147a2..e5ba22ced6 100644 --- a/plugins/catalog-backend-module-gerrit/CHANGELOG.md +++ b/plugins/catalog-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-gerrit +## 0.1.5 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/backend-tasks@0.3.6 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + ## 0.1.5-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json index 23ae165a01..249fb381de 100644 --- a/plugins/catalog-backend-module-gerrit/package.json +++ b/plugins/catalog-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-gerrit", - "version": "0.1.5-next.2", + "version": "0.1.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-github/CHANGELOG.md b/plugins/catalog-backend-module-github/CHANGELOG.md index e52ec4390b..9c89e00de4 100644 --- a/plugins/catalog-backend-module-github/CHANGELOG.md +++ b/plugins/catalog-backend-module-github/CHANGELOG.md @@ -1,5 +1,51 @@ # @backstage/plugin-catalog-backend-module-github +## 0.1.8 + +### Patch Changes + +- 8749df3d02: `GitHubEntityProvider`: Add option to configure schedule via `app-config.yaml` instead of in code. + + Please find how to configure the schedule at the config at + https://backstage.io/docs/integrations/github/discovery + +- 7022aebf35: Added `GithubLocationAnalyzer`. This can be used to add to the `CatalogBuilder`. When added this will be used by `RepoLocationAnalyzer` to figure out if the given URL that you are trying to import from the /catalog-import page already contains catalog-info.yaml files. +- 51046b58b0: Use schedule from config at backend module. + + Also, it removes `GithubEntityProviderCatalogModuleOptions` + in favor of config-only for the backend module setup + like at other similar modules. + +- 7edb5909e8: Add missing config schema for the `GitHubEntityProvider`. +- be9474b103: Replaces in-code uses of `GitHub` by `Github` and deprecates old versions. + + Deprecates + + - `GitHubEntityProvider` replaced by `GithubEntityProvider` + - `GitHubLocationAnalyzer` replaced by `GithubLocationAnalyzer` + - `GitHubLocationAnalyzerOptions` replaced by `GithubLocationAnalyzerOptions` + - `GitHubOrgEntityProvider` replaced by `GithubOrgEntityProvider` + - `GitHubOrgEntityProviderOptions` replaced by `GithubOrgEntityProviderOptions` + + Renames + + - `GitHubLocationAnalyzer` to `GithubLocationAnalyzer` + - `GitHubLocationAnalyzerOptions` to `GithubLocationAnalyzerOptions` + +- a35a27df70: Updated the `moduleId` of the experimental module export. +- Updated dependencies + - @backstage/plugin-catalog-node@1.2.0 + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/backend-tasks@0.3.6 + - @backstage/backend-plugin-api@0.1.3 + - @backstage/catalog-client@1.1.1 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/types@1.0.0 + ## 0.1.8-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json index 0fd75b6a11..e1a3ed39b8 100644 --- a/plugins/catalog-backend-module-github/package.json +++ b/plugins/catalog-backend-module-github/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-github", "description": "A Backstage catalog backend module that helps integrate towards GitHub", - "version": "0.1.8-next.2", + "version": "0.1.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-gitlab/CHANGELOG.md b/plugins/catalog-backend-module-gitlab/CHANGELOG.md index aa3d389714..65979281e7 100644 --- a/plugins/catalog-backend-module-gitlab/CHANGELOG.md +++ b/plugins/catalog-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-catalog-backend-module-gitlab +## 0.1.8 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/backend-tasks@0.3.6 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/types@1.0.0 + ## 0.1.8-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index 60c16737c7..b21733875c 100644 --- a/plugins/catalog-backend-module-gitlab/package.json +++ b/plugins/catalog-backend-module-gitlab/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-gitlab", "description": "A Backstage catalog backend module that helps integrate towards GitLab", - "version": "0.1.8-next.2", + "version": "0.1.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-ldap/CHANGELOG.md b/plugins/catalog-backend-module-ldap/CHANGELOG.md index b1a789fb17..8045a29598 100644 --- a/plugins/catalog-backend-module-ldap/CHANGELOG.md +++ b/plugins/catalog-backend-module-ldap/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-catalog-backend-module-ldap +## 0.5.4 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/backend-tasks@0.3.6 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/types@1.0.0 + ## 0.5.4-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-ldap/package.json b/plugins/catalog-backend-module-ldap/package.json index b0587a0d7d..eb97de27d0 100644 --- a/plugins/catalog-backend-module-ldap/package.json +++ b/plugins/catalog-backend-module-ldap/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-ldap", "description": "A Backstage catalog backend module that helps integrate towards LDAP", - "version": "0.5.4-next.2", + "version": "0.5.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-msgraph/CHANGELOG.md b/plugins/catalog-backend-module-msgraph/CHANGELOG.md index c90df48b93..4112931043 100644 --- a/plugins/catalog-backend-module-msgraph/CHANGELOG.md +++ b/plugins/catalog-backend-module-msgraph/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-catalog-backend-module-msgraph +## 0.4.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/backend-tasks@0.3.6 + - @backstage/config@1.0.3 + ## 0.4.3-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json index 9532cbff7a..df63bc71dd 100644 --- a/plugins/catalog-backend-module-msgraph/package.json +++ b/plugins/catalog-backend-module-msgraph/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-msgraph", "description": "A Backstage catalog backend module that helps integrate towards Microsoft Graph", - "version": "0.4.3-next.2", + "version": "0.4.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-openapi/CHANGELOG.md b/plugins/catalog-backend-module-openapi/CHANGELOG.md index 981f652bd0..a11be4a5f2 100644 --- a/plugins/catalog-backend-module-openapi/CHANGELOG.md +++ b/plugins/catalog-backend-module-openapi/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-backend-module-openapi +## 0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.2.0 + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/config@1.0.3 + - @backstage/integration@1.3.2 + - @backstage/types@1.0.0 + ## 0.1.3-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-openapi/package.json b/plugins/catalog-backend-module-openapi/package.json index 8465e232d0..1f32a1a4f2 100644 --- a/plugins/catalog-backend-module-openapi/package.json +++ b/plugins/catalog-backend-module-openapi/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-openapi", "description": "A Backstage catalog backend module that helps with OpenAPI specifications", - "version": "0.1.3-next.2", + "version": "0.1.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md index 4182d0acb3..60ecdae3b9 100644 --- a/plugins/catalog-backend/CHANGELOG.md +++ b/plugins/catalog-backend/CHANGELOG.md @@ -1,5 +1,43 @@ # @backstage/plugin-catalog-backend +## 1.5.0 + +### Minor Changes + +- b2e6cb6acf: Added a new method `addLocationAnalyzers` to the `CatalogBuilder`. With this you can add location analyzers to your catalog. These analyzers will be used by the /analyze-location endpoint to decide if the provided URL contains any catalog-info.yaml files already or not. + + Moved the following types from this package to `@backstage/plugin-catalog-backend`. + + - AnalyzeLocationResponse + - AnalyzeLocationRequest + - AnalyzeLocationExistingEntity + - AnalyzeLocationGenerateEntity + - AnalyzeLocationEntityField + +- eb25f7e12d: The exported permission rules and the API of `createCatalogConditionalDecision` have changed to reflect the breaking changes made to the `PermissionRule` type. Note that all involved types are exported from `@backstage/plugin-catalog-backend/alpha` + +### Patch Changes + +- 8cb6e10105: Fixed a bug where entities provided without a location key would always replace existing entities, rather than updating them. +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- 63296ebcd4: Allow Placeholder value to be any value, not only string. +- 74022e0163: Make sure to stitch entities correctly after deletion, to ensure that their relations are updated. +- Updated dependencies + - @backstage/plugin-catalog-node@1.2.0 + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-common@1.0.7 + - @backstage/plugin-permission-node@0.7.0 + - @backstage/backend-plugin-api@0.1.3 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/catalog-client@1.1.1 + - @backstage/plugin-search-common@1.1.0 + - @backstage/plugin-scaffolder-common@1.2.1 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/types@1.0.0 + ## 1.5.0-next.2 ### Minor Changes diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index 8ace08abcf..d3e44d47b1 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend", "description": "The Backstage backend plugin that provides the Backstage catalog", - "version": "1.5.0-next.2", + "version": "1.5.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-common/CHANGELOG.md b/plugins/catalog-common/CHANGELOG.md index f1a54baa1f..2ecbca904f 100644 --- a/plugins/catalog-common/CHANGELOG.md +++ b/plugins/catalog-common/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-catalog-common +## 1.0.7 + +### Patch Changes + +- 823acaa88b: Moved the following types from `@backstage/plugin-catalog-backend` to this package. + + - AnalyzeLocationResponse + - AnalyzeLocationRequest + - AnalyzeLocationExistingEntity + - AnalyzeLocationGenerateEntity + - AnalyzeLocationEntityField + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/plugin-search-common@1.1.0 + ## 1.0.7-next.2 ### Patch Changes diff --git a/plugins/catalog-common/package.json b/plugins/catalog-common/package.json index 981adff43a..b700002f9c 100644 --- a/plugins/catalog-common/package.json +++ b/plugins/catalog-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-common", "description": "Common functionalities for the catalog plugin", - "version": "1.0.7-next.2", + "version": "1.0.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-customized/CHANGELOG.md b/plugins/catalog-customized/CHANGELOG.md index b7542abb38..3f659df9b3 100644 --- a/plugins/catalog-customized/CHANGELOG.md +++ b/plugins/catalog-customized/CHANGELOG.md @@ -1,5 +1,13 @@ # @internal/plugin-catalog-customized +## 0.0.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/plugin-catalog@1.6.0 + ## 0.0.3-next.2 ### Patch Changes diff --git a/plugins/catalog-customized/package.json b/plugins/catalog-customized/package.json index 82452a97fc..bb5564c135 100644 --- a/plugins/catalog-customized/package.json +++ b/plugins/catalog-customized/package.json @@ -1,7 +1,7 @@ { "name": "@internal/plugin-catalog-customized", "description": "The internal Backstage Customizable plugin for browsing the Backstage catalog", - "version": "0.0.3-next.2", + "version": "0.0.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-graph/CHANGELOG.md b/plugins/catalog-graph/CHANGELOG.md index 6eb03b86b8..a6a2f5770b 100644 --- a/plugins/catalog-graph/CHANGELOG.md +++ b/plugins/catalog-graph/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-catalog-graph +## 0.2.22 + +### Patch Changes + +- bde1e8c8e2: Added `curve` prop to the `DependencyGraph` component to select the type of layout +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/catalog-client@1.1.1 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 0.2.22-next.2 ### Patch Changes diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json index cc4a598380..ccfbd5160e 100644 --- a/plugins/catalog-graph/package.json +++ b/plugins/catalog-graph/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-graph", - "version": "0.2.22-next.2", + "version": "0.2.22", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-graphql/CHANGELOG.md b/plugins/catalog-graphql/CHANGELOG.md index 66cf817d89..1546bcb395 100644 --- a/plugins/catalog-graphql/CHANGELOG.md +++ b/plugins/catalog-graphql/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-catalog-graphql +## 0.3.14 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/config@1.0.3 + - @backstage/types@1.0.0 + ## 0.3.14-next.2 ### Patch Changes diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json index e404f62ea5..0a48e3d58b 100644 --- a/plugins/catalog-graphql/package.json +++ b/plugins/catalog-graphql/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-graphql", "description": "An experimental Backstage catalog GraphQL module", - "version": "0.3.14-next.2", + "version": "0.3.14", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md index 6f22929828..3bb70d5d17 100644 --- a/plugins/catalog-import/CHANGELOG.md +++ b/plugins/catalog-import/CHANGELOG.md @@ -1,5 +1,41 @@ # @backstage/plugin-catalog-import +## 0.9.0 + +### Minor Changes + +- b2e6cb6acf: **Breaking** + Moved the code search for the existing catalog-info.yaml files to the backend from the frontend. It means it will use the configured GitHub integration's credentials. + + Add the following to your `CatalogBuilder` to have the repo URL ingestion working again. + + ```ts + // catalog.ts + import { GithubLocationAnalyzer } from '@backstage/plugin-catalog-backend-module-github'; + ... + builder.addLocationAnalyzers( + new GithubLocationAnalyzer({ + discovery: env.discovery, + config: env.config, + }), + ); + ... + ``` + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/plugin-catalog-common@1.0.7 + - @backstage/catalog-client@1.1.1 + - @backstage/integration-react@1.1.5 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + ## 0.9.0-next.2 ### Minor Changes diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index be642db914..66b4648c05 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-import", "description": "A Backstage plugin the helps you import entities into your catalog", - "version": "0.9.0-next.2", + "version": "0.9.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-node/CHANGELOG.md b/plugins/catalog-node/CHANGELOG.md index 48f627a9d7..cbce789d3c 100644 --- a/plugins/catalog-node/CHANGELOG.md +++ b/plugins/catalog-node/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-catalog-node +## 1.2.0 + +### Minor Changes + +- 404366c853: Deprecated the `LocationSpec` type. It got moved from this package to the `@backstage/plugin-catalog-common` so make sure imports are updated. + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-common@1.0.7 + - @backstage/backend-plugin-api@0.1.3 + - @backstage/catalog-client@1.1.1 + - @backstage/errors@1.1.2 + - @backstage/types@1.0.0 + ## 1.2.0-next.2 ### Minor Changes diff --git a/plugins/catalog-node/package.json b/plugins/catalog-node/package.json index f249b10588..14e1986745 100644 --- a/plugins/catalog-node/package.json +++ b/plugins/catalog-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-node", "description": "The plugin-catalog-node module for @backstage/plugin-catalog-backend", - "version": "1.2.0-next.2", + "version": "1.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-react/CHANGELOG.md b/plugins/catalog-react/CHANGELOG.md index 1f98467925..a58a75687c 100644 --- a/plugins/catalog-react/CHANGELOG.md +++ b/plugins/catalog-react/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-catalog-react +## 1.2.0 + +### Minor Changes + +- 4efadb6968: Implemented the visual parts of `EntityKindPicker` so that it can be shown alongside the other filters on the left side of your catalog pages. + +### Patch Changes + +- 7939e743f5: Added two new `EntityRefLinks` props, the first being `getTitle` that allows for customization of the title used for each link. The second one is `fetchEntities`, which triggers a fetching of all entities so that the full entity definition is available in the `getTitle` callback. +- e9e532ebd8: Fixed issue where the query kind parameter is not honored +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/core-components@0.11.2 + - @backstage/plugin-catalog-common@1.0.7 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/catalog-client@1.1.1 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + - @backstage/version-bridge@1.0.1 + - @backstage/plugin-permission-react@0.4.6 + ## 1.2.0-next.2 ### Patch Changes diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index 4d64ae3953..6a66a2e21a 100644 --- a/plugins/catalog-react/package.json +++ b/plugins/catalog-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-react", "description": "A frontend library that helps other Backstage plugins interact with the catalog", - "version": "1.2.0-next.2", + "version": "1.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md index 6974afe720..b40f04f501 100644 --- a/plugins/catalog/CHANGELOG.md +++ b/plugins/catalog/CHANGELOG.md @@ -1,5 +1,62 @@ # @backstage/plugin-catalog +## 1.6.0 + +### Minor Changes + +- d558f41d3a: Added new column `Label` to `CatalogTable.columns`, this new column allows you make use of labels from metadata. + For example: category and visibility are type of labels associated with API entity illustrated below. + + YAML code snippet for API entity + + ```yaml + apiVersion: backstage.io/v1alpha1 + kind: API + metadata: + name: sample-api + description: API for sample + links: + - url: http://localhost:8080/swagger-ui.html + title: Swagger UI + tags: + - http + labels: + category: legacy + visibility: protected + ``` + + Consumers can customise columns to include label column and show in api-docs list + + ```typescript + const columns = [ + CatalogTable.columns.createNameColumn({ defaultKind: 'API' }), + CatalogTable.columns.createLabelColumn('category', { title: 'Category' }), + CatalogTable.columns.createLabelColumn('visibility', { + title: 'Visibility', + defaultValue: 'public', + }), + ]; + ``` + +### Patch Changes + +- 4efadb6968: Implemented the visual parts of `EntityKindPicker` so that it can be shown alongside the other filters on the left side of your catalog pages. +- 182000c663: Added `emptyContent` property to CatalogTable and DefaultCatalogPage to support customization of the Catalog Table. +- e89e1f614d: Added support for copy entity URL in entity page context menu +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/plugin-catalog-common@1.0.7 + - @backstage/catalog-client@1.1.1 + - @backstage/plugin-search-react@1.2.0 + - @backstage/plugin-search-common@1.1.0 + - @backstage/integration-react@1.1.5 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + ## 1.6.0-next.2 ### Patch Changes diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index ffa6b92d86..ad7e9a75c2 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog", "description": "The Backstage plugin for browsing the Backstage catalog", - "version": "1.6.0-next.2", + "version": "1.6.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md index 5e1a1139fe..2d3dbc8eed 100644 --- a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md +++ b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-cicd-statistics-module-gitlab +## 0.1.6 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-cicd-statistics@0.1.12 + - @backstage/core-plugin-api@1.0.7 + ## 0.1.6-next.2 ### Patch Changes diff --git a/plugins/cicd-statistics-module-gitlab/package.json b/plugins/cicd-statistics-module-gitlab/package.json index efbc8a6f3b..e0fdf00b7b 100644 --- a/plugins/cicd-statistics-module-gitlab/package.json +++ b/plugins/cicd-statistics-module-gitlab/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cicd-statistics-module-gitlab", "description": "CI/CD Statistics plugin module; Gitlab CICD", - "version": "0.1.6-next.2", + "version": "0.1.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cicd-statistics/CHANGELOG.md b/plugins/cicd-statistics/CHANGELOG.md index d12c15c85b..24e4a2f6e3 100644 --- a/plugins/cicd-statistics/CHANGELOG.md +++ b/plugins/cicd-statistics/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-cicd-statistics +## 0.1.12 + +### Patch Changes + +- e05e0f021b: Align on the version of `@material-ui/icons` used, to `^4.9.1` like other packages in the main repo +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-plugin-api@1.0.7 + ## 0.1.12-next.2 ### Patch Changes diff --git a/plugins/cicd-statistics/package.json b/plugins/cicd-statistics/package.json index faf51957db..d198ff0934 100644 --- a/plugins/cicd-statistics/package.json +++ b/plugins/cicd-statistics/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cicd-statistics", "description": "A frontend plugin visualizing CI/CD pipeline statistics (build time)", - "version": "0.1.12-next.2", + "version": "0.1.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/circleci/CHANGELOG.md b/plugins/circleci/CHANGELOG.md index 79e553dd86..8d5199d550 100644 --- a/plugins/circleci/CHANGELOG.md +++ b/plugins/circleci/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-circleci +## 0.3.10 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 0.3.10-next.2 ### Patch Changes diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index 39759afb0a..98b6334c35 100644 --- a/plugins/circleci/package.json +++ b/plugins/circleci/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-circleci", "description": "A Backstage plugin that integrates towards Circle CI", - "version": "0.3.10-next.2", + "version": "0.3.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cloudbuild/CHANGELOG.md b/plugins/cloudbuild/CHANGELOG.md index 53f602fc70..30a7410a08 100644 --- a/plugins/cloudbuild/CHANGELOG.md +++ b/plugins/cloudbuild/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-cloudbuild +## 0.3.10 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 0.3.10-next.2 ### Patch Changes diff --git a/plugins/cloudbuild/package.json b/plugins/cloudbuild/package.json index 5e7f671787..eb01b8df4a 100644 --- a/plugins/cloudbuild/package.json +++ b/plugins/cloudbuild/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cloudbuild", "description": "A Backstage plugin that integrates towards Google Cloud Build", - "version": "0.3.10-next.2", + "version": "0.3.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-climate/CHANGELOG.md b/plugins/code-climate/CHANGELOG.md index 5f66a7e668..367eb96673 100644 --- a/plugins/code-climate/CHANGELOG.md +++ b/plugins/code-climate/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-code-climate +## 0.1.10 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 0.1.10-next.2 ### Patch Changes diff --git a/plugins/code-climate/package.json b/plugins/code-climate/package.json index c26aa027c6..548f93233c 100644 --- a/plugins/code-climate/package.json +++ b/plugins/code-climate/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-code-climate", - "version": "0.1.10-next.2", + "version": "0.1.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-coverage-backend/CHANGELOG.md b/plugins/code-coverage-backend/CHANGELOG.md index ab69e4015c..891194c7a4 100644 --- a/plugins/code-coverage-backend/CHANGELOG.md +++ b/plugins/code-coverage-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-code-coverage-backend +## 0.2.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/catalog-client@1.1.1 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + ## 0.2.3-next.2 ### Patch Changes diff --git a/plugins/code-coverage-backend/package.json b/plugins/code-coverage-backend/package.json index 5593dc3b35..147a2b92ac 100644 --- a/plugins/code-coverage-backend/package.json +++ b/plugins/code-coverage-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-code-coverage-backend", "description": "A Backstage backend plugin that helps you keep track of your code coverage", - "version": "0.2.3-next.2", + "version": "0.2.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-coverage/CHANGELOG.md b/plugins/code-coverage/CHANGELOG.md index 3b01d0c39d..c724283ddb 100644 --- a/plugins/code-coverage/CHANGELOG.md +++ b/plugins/code-coverage/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-code-coverage +## 0.2.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + ## 0.2.3-next.2 ### Patch Changes diff --git a/plugins/code-coverage/package.json b/plugins/code-coverage/package.json index 1bfd9ca444..f8507e60a4 100644 --- a/plugins/code-coverage/package.json +++ b/plugins/code-coverage/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-code-coverage", "description": "A Backstage plugin that helps you keep track of your code coverage", - "version": "0.2.3-next.2", + "version": "0.2.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/codescene/CHANGELOG.md b/plugins/codescene/CHANGELOG.md index fd2d97ac41..cdfaf94a71 100644 --- a/plugins/codescene/CHANGELOG.md +++ b/plugins/codescene/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-codescene +## 0.1.5 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + ## 0.1.5-next.2 ### Patch Changes diff --git a/plugins/codescene/package.json b/plugins/codescene/package.json index 544d865aa8..4f8f9a365f 100644 --- a/plugins/codescene/package.json +++ b/plugins/codescene/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-codescene", - "version": "0.1.5-next.2", + "version": "0.1.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/config-schema/CHANGELOG.md b/plugins/config-schema/CHANGELOG.md index c2d00a5c6b..af63c96be1 100644 --- a/plugins/config-schema/CHANGELOG.md +++ b/plugins/config-schema/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-config-schema +## 0.1.33 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + ## 0.1.33-next.2 ### Patch Changes diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json index 2bb0233302..b6a23dd2aa 100644 --- a/plugins/config-schema/package.json +++ b/plugins/config-schema/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-config-schema", "description": "A Backstage plugin that lets you browse the configuration schema of your app", - "version": "0.1.33-next.2", + "version": "0.1.33", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cost-insights/CHANGELOG.md b/plugins/cost-insights/CHANGELOG.md index 4fe1096859..02f9902fce 100644 --- a/plugins/cost-insights/CHANGELOG.md +++ b/plugins/cost-insights/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-cost-insights +## 0.11.32 + +### Patch Changes + +- a94c2ed1b7: Fixed bug in `CostOverviewBreakdownChart` component where some datasets caused the cost overview breakdown chart to tear. +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/theme@0.2.16 + - @backstage/plugin-cost-insights-common@0.1.1 + ## 0.11.32-next.2 ### Patch Changes diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json index f891016c10..e325f75e0a 100644 --- a/plugins/cost-insights/package.json +++ b/plugins/cost-insights/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cost-insights", "description": "A Backstage plugin that helps you keep track of your cloud spend", - "version": "0.11.32-next.2", + "version": "0.11.32", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/dynatrace/CHANGELOG.md b/plugins/dynatrace/CHANGELOG.md index 6f6e756b95..125976f131 100644 --- a/plugins/dynatrace/CHANGELOG.md +++ b/plugins/dynatrace/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-dynatrace +## 1.0.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 1.0.0-next.2 ### Patch Changes diff --git a/plugins/dynatrace/package.json b/plugins/dynatrace/package.json index 6eb57391bc..7e024c439b 100644 --- a/plugins/dynatrace/package.json +++ b/plugins/dynatrace/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-dynatrace", - "version": "1.0.0-next.2", + "version": "1.0.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/example-todo-list-backend/CHANGELOG.md b/plugins/example-todo-list-backend/CHANGELOG.md index 4e4fc61b26..08eb87afc6 100644 --- a/plugins/example-todo-list-backend/CHANGELOG.md +++ b/plugins/example-todo-list-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @internal/plugin-todo-list-backend +## 1.0.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/plugin-auth-node@0.2.6 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + ## 1.0.6-next.2 ### Patch Changes diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json index 67b029819e..5bffe602ab 100644 --- a/plugins/example-todo-list-backend/package.json +++ b/plugins/example-todo-list-backend/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list-backend", - "version": "1.0.6-next.2", + "version": "1.0.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/example-todo-list-common/CHANGELOG.md b/plugins/example-todo-list-common/CHANGELOG.md index aacd75d4d8..09b70db880 100644 --- a/plugins/example-todo-list-common/CHANGELOG.md +++ b/plugins/example-todo-list-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @internal/plugin-todo-list-common +## 1.0.5 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.0 + ## 1.0.5-next.2 ### Patch Changes diff --git a/plugins/example-todo-list-common/package.json b/plugins/example-todo-list-common/package.json index fac4edf22d..17d67e99f7 100644 --- a/plugins/example-todo-list-common/package.json +++ b/plugins/example-todo-list-common/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list-common", - "version": "1.0.5-next.2", + "version": "1.0.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/example-todo-list/CHANGELOG.md b/plugins/example-todo-list/CHANGELOG.md index 7bd1f2f3f2..9ce9eaae57 100644 --- a/plugins/example-todo-list/CHANGELOG.md +++ b/plugins/example-todo-list/CHANGELOG.md @@ -1,5 +1,14 @@ # @internal/plugin-todo-list +## 1.0.6 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 1.0.6-next.2 ### Patch Changes diff --git a/plugins/example-todo-list/package.json b/plugins/example-todo-list/package.json index 4dfe9ee2a7..8bbf1f2e20 100644 --- a/plugins/example-todo-list/package.json +++ b/plugins/example-todo-list/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list", - "version": "1.0.6-next.2", + "version": "1.0.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore-react/CHANGELOG.md b/plugins/explore-react/CHANGELOG.md index b3657b2ab6..19e15c302f 100644 --- a/plugins/explore-react/CHANGELOG.md +++ b/plugins/explore-react/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-explore-react +## 0.0.22 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.0.7 + ## 0.0.22-next.2 ### Patch Changes diff --git a/plugins/explore-react/package.json b/plugins/explore-react/package.json index 16533b3108..9b5d3792cc 100644 --- a/plugins/explore-react/package.json +++ b/plugins/explore-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-explore-react", "description": "A frontend library for Backstage plugins that want to interact with the explore plugin", - "version": "0.0.22-next.2", + "version": "0.0.22", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore/CHANGELOG.md b/plugins/explore/CHANGELOG.md index 87b43cb012..09569f7206 100644 --- a/plugins/explore/CHANGELOG.md +++ b/plugins/explore/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-explore +## 0.3.41 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + - @backstage/plugin-explore-react@0.0.22 + ## 0.3.41-next.2 ### Patch Changes diff --git a/plugins/explore/package.json b/plugins/explore/package.json index c03993ee24..a148c3f789 100644 --- a/plugins/explore/package.json +++ b/plugins/explore/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-explore", "description": "A Backstage plugin for building an exploration page of your software ecosystem", - "version": "0.3.41-next.2", + "version": "0.3.41", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/firehydrant/CHANGELOG.md b/plugins/firehydrant/CHANGELOG.md index 3c9630f544..3516fa3d45 100644 --- a/plugins/firehydrant/CHANGELOG.md +++ b/plugins/firehydrant/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-firehydrant +## 0.1.27 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 0.1.27-next.2 ### Patch Changes diff --git a/plugins/firehydrant/package.json b/plugins/firehydrant/package.json index e556e7b29c..97831712ef 100644 --- a/plugins/firehydrant/package.json +++ b/plugins/firehydrant/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-firehydrant", "description": "A Backstage plugin that integrates towards FireHydrant", - "version": "0.1.27-next.2", + "version": "0.1.27", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/fossa/CHANGELOG.md b/plugins/fossa/CHANGELOG.md index 876a62aa4a..231655bedc 100644 --- a/plugins/fossa/CHANGELOG.md +++ b/plugins/fossa/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-fossa +## 0.2.42 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + ## 0.2.42-next.2 ### Patch Changes diff --git a/plugins/fossa/package.json b/plugins/fossa/package.json index 249a0c4f0e..c5be2f84cb 100644 --- a/plugins/fossa/package.json +++ b/plugins/fossa/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-fossa", "description": "A Backstage plugin that integrates towards FOSSA", - "version": "0.2.42-next.2", + "version": "0.2.42", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gcalendar/CHANGELOG.md b/plugins/gcalendar/CHANGELOG.md index a1fefa672d..3dbedd4f66 100644 --- a/plugins/gcalendar/CHANGELOG.md +++ b/plugins/gcalendar/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-gcalendar +## 0.3.6 + +### Patch Changes + +- 4c2ed7ecf1: Fixed loader showing when user not signed in +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + ## 0.3.6-next.2 ### Patch Changes diff --git a/plugins/gcalendar/package.json b/plugins/gcalendar/package.json index 96c1afb493..96b15932e6 100644 --- a/plugins/gcalendar/package.json +++ b/plugins/gcalendar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-gcalendar", - "version": "0.3.6-next.2", + "version": "0.3.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gcp-projects/CHANGELOG.md b/plugins/gcp-projects/CHANGELOG.md index 242bc197bd..82e4638637 100644 --- a/plugins/gcp-projects/CHANGELOG.md +++ b/plugins/gcp-projects/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-gcp-projects +## 0.3.29 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 0.3.29-next.2 ### Patch Changes diff --git a/plugins/gcp-projects/package.json b/plugins/gcp-projects/package.json index def4421995..b180c40f45 100644 --- a/plugins/gcp-projects/package.json +++ b/plugins/gcp-projects/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gcp-projects", "description": "A Backstage plugin that helps you manage projects in GCP", - "version": "0.3.29-next.2", + "version": "0.3.29", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/git-release-manager/CHANGELOG.md b/plugins/git-release-manager/CHANGELOG.md index b49e46bf18..9280dc38c2 100644 --- a/plugins/git-release-manager/CHANGELOG.md +++ b/plugins/git-release-manager/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-git-release-manager +## 0.3.23 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/integration@1.3.2 + - @backstage/theme@0.2.16 + ## 0.3.23-next.2 ### Patch Changes diff --git a/plugins/git-release-manager/package.json b/plugins/git-release-manager/package.json index 924a0e1939..dee542a967 100644 --- a/plugins/git-release-manager/package.json +++ b/plugins/git-release-manager/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-git-release-manager", "description": "A Backstage plugin that helps you manage releases in git", - "version": "0.3.23-next.2", + "version": "0.3.23", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-actions/CHANGELOG.md b/plugins/github-actions/CHANGELOG.md index ff9a3e8f23..a4c0eed8c2 100644 --- a/plugins/github-actions/CHANGELOG.md +++ b/plugins/github-actions/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-github-actions +## 0.5.10 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/integration@1.3.2 + - @backstage/theme@0.2.16 + ## 0.5.10-next.2 ### Patch Changes diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json index 5a6b0ffdb3..3540e00549 100644 --- a/plugins/github-actions/package.json +++ b/plugins/github-actions/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-actions", "description": "A Backstage plugin that integrates towards GitHub Actions", - "version": "0.5.10-next.2", + "version": "0.5.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-deployments/CHANGELOG.md b/plugins/github-deployments/CHANGELOG.md index 2459be1a5f..120740492c 100644 --- a/plugins/github-deployments/CHANGELOG.md +++ b/plugins/github-deployments/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-github-deployments +## 0.1.41 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/integration-react@1.1.5 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/theme@0.2.16 + ## 0.1.41-next.2 ### Patch Changes diff --git a/plugins/github-deployments/package.json b/plugins/github-deployments/package.json index 85d8747034..eaaaac9ae1 100644 --- a/plugins/github-deployments/package.json +++ b/plugins/github-deployments/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-deployments", "description": "A Backstage plugin that integrates towards GitHub Deployments", - "version": "0.1.41-next.2", + "version": "0.1.41", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-issues/CHANGELOG.md b/plugins/github-issues/CHANGELOG.md index 5f32e404c1..8d5aa17129 100644 --- a/plugins/github-issues/CHANGELOG.md +++ b/plugins/github-issues/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-github-issues +## 0.1.2 + +### Patch Changes + +- 8c7bff2bb4: Updated the `luxon` dependency to 3.x +- 719ccbb963: Properly filter on relations instead of the spec, when finding by owner +- df226e124c: Add filtering and ordering to the graphql query +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/theme@0.2.16 + ## 0.1.2-next.2 ### Patch Changes diff --git a/plugins/github-issues/package.json b/plugins/github-issues/package.json index bcc06311a6..0249fe3a94 100644 --- a/plugins/github-issues/package.json +++ b/plugins/github-issues/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-github-issues", - "version": "0.1.2-next.2", + "version": "0.1.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-pull-requests-board/CHANGELOG.md b/plugins/github-pull-requests-board/CHANGELOG.md index c112cba1c4..d5c65069dd 100644 --- a/plugins/github-pull-requests-board/CHANGELOG.md +++ b/plugins/github-pull-requests-board/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-github-pull-requests-board +## 0.1.4 + +### Patch Changes + +- 719ccbb963: Properly filter on relations instead of the spec, when finding by owner +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/integration@1.3.2 + - @backstage/theme@0.2.16 + ## 0.1.4-next.2 ### Patch Changes diff --git a/plugins/github-pull-requests-board/package.json b/plugins/github-pull-requests-board/package.json index cc15d368ee..f595efb456 100644 --- a/plugins/github-pull-requests-board/package.json +++ b/plugins/github-pull-requests-board/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-pull-requests-board", "description": "A Backstage plugin that allows you to see all open Pull Requests for all the repositories owned by your team", - "version": "0.1.4-next.2", + "version": "0.1.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gitops-profiles/CHANGELOG.md b/plugins/gitops-profiles/CHANGELOG.md index 38d9ba91ec..b8512bcd2e 100644 --- a/plugins/gitops-profiles/CHANGELOG.md +++ b/plugins/gitops-profiles/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-gitops-profiles +## 0.3.28 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 0.3.28-next.2 ### Patch Changes diff --git a/plugins/gitops-profiles/package.json b/plugins/gitops-profiles/package.json index 399f8151fd..02e8256eec 100644 --- a/plugins/gitops-profiles/package.json +++ b/plugins/gitops-profiles/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gitops-profiles", "description": "A Backstage plugin that helps you manage GitOps profiles", - "version": "0.3.28-next.2", + "version": "0.3.28", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gocd/CHANGELOG.md b/plugins/gocd/CHANGELOG.md index 491d9f6fd7..3d140260f4 100644 --- a/plugins/gocd/CHANGELOG.md +++ b/plugins/gocd/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-gocd +## 0.1.16 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + ## 0.1.16-next.2 ### Patch Changes diff --git a/plugins/gocd/package.json b/plugins/gocd/package.json index 5fda8c6b63..d455c6bb98 100644 --- a/plugins/gocd/package.json +++ b/plugins/gocd/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gocd", "description": "A Backstage plugin that integrates towards GoCD", - "version": "0.1.16-next.2", + "version": "0.1.16", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/graphiql/CHANGELOG.md b/plugins/graphiql/CHANGELOG.md index 0466df3ac0..c4cbfa1646 100644 --- a/plugins/graphiql/CHANGELOG.md +++ b/plugins/graphiql/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-graphiql +## 0.2.42 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 0.2.42-next.2 ### Patch Changes diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json index 69eb82105d..245155fc13 100644 --- a/plugins/graphiql/package.json +++ b/plugins/graphiql/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphiql", "description": "Backstage plugin for browsing GraphQL APIs", - "version": "0.2.42-next.2", + "version": "0.2.42", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/graphql-backend/CHANGELOG.md b/plugins/graphql-backend/CHANGELOG.md index 88e1a911d7..427ac6206d 100644 --- a/plugins/graphql-backend/CHANGELOG.md +++ b/plugins/graphql-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-graphql-backend +## 0.1.27 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-graphql@0.3.14 + - @backstage/config@1.0.3 + ## 0.1.27-next.2 ### Patch Changes diff --git a/plugins/graphql-backend/package.json b/plugins/graphql-backend/package.json index b71b083348..0f44b3be6b 100644 --- a/plugins/graphql-backend/package.json +++ b/plugins/graphql-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphql-backend", "description": "An experimental Backstage backend plugin for GraphQL", - "version": "0.1.27-next.2", + "version": "0.1.27", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/home/CHANGELOG.md b/plugins/home/CHANGELOG.md index d1b67ec974..e64ac0be7e 100644 --- a/plugins/home/CHANGELOG.md +++ b/plugins/home/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-home +## 0.4.26 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/plugin-stack-overflow@0.1.6 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/theme@0.2.16 + ## 0.4.26-next.2 ### Patch Changes diff --git a/plugins/home/package.json b/plugins/home/package.json index e8538efddf..516a91cd74 100644 --- a/plugins/home/package.json +++ b/plugins/home/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-home", "description": "A Backstage plugin that helps you build a home page", - "version": "0.4.26-next.2", + "version": "0.4.26", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/ilert/CHANGELOG.md b/plugins/ilert/CHANGELOG.md index 81ad9057b5..dc2a3c1959 100644 --- a/plugins/ilert/CHANGELOG.md +++ b/plugins/ilert/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-ilert +## 0.1.36 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + ## 0.1.36-next.2 ### Patch Changes diff --git a/plugins/ilert/package.json b/plugins/ilert/package.json index 78391b2d1e..ffe74c2572 100644 --- a/plugins/ilert/package.json +++ b/plugins/ilert/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-ilert", "description": "A Backstage plugin that integrates towards iLert", - "version": "0.1.36-next.2", + "version": "0.1.36", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/jenkins-backend/CHANGELOG.md b/plugins/jenkins-backend/CHANGELOG.md index aad6ab6887..105a79e2bf 100644 --- a/plugins/jenkins-backend/CHANGELOG.md +++ b/plugins/jenkins-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-jenkins-backend +## 0.1.27 + +### Patch Changes + +- b19ea927af: Fixed a bug where `extraRequestHeaders` configuration was ignored. +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-auth-node@0.2.6 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/catalog-client@1.1.1 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/plugin-jenkins-common@0.1.9 + ## 0.1.27-next.2 ### Patch Changes diff --git a/plugins/jenkins-backend/package.json b/plugins/jenkins-backend/package.json index 4d2118c270..89c3076e7b 100644 --- a/plugins/jenkins-backend/package.json +++ b/plugins/jenkins-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-jenkins-backend", "description": "A Backstage backend plugin that integrates towards Jenkins", - "version": "0.1.27-next.2", + "version": "0.1.27", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/jenkins-common/CHANGELOG.md b/plugins/jenkins-common/CHANGELOG.md index 01a30d35e0..cebfb0b0a5 100644 --- a/plugins/jenkins-common/CHANGELOG.md +++ b/plugins/jenkins-common/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-jenkins-common +## 0.1.9 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-common@1.0.7 + - @backstage/plugin-permission-common@0.7.0 + ## 0.1.9-next.2 ### Patch Changes diff --git a/plugins/jenkins-common/package.json b/plugins/jenkins-common/package.json index 2bdb7cfb7a..01215b674d 100644 --- a/plugins/jenkins-common/package.json +++ b/plugins/jenkins-common/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-jenkins-common", - "version": "0.1.9-next.2", + "version": "0.1.9", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/jenkins/CHANGELOG.md b/plugins/jenkins/CHANGELOG.md index 8809f31022..ff0df1f256 100644 --- a/plugins/jenkins/CHANGELOG.md +++ b/plugins/jenkins/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-jenkins +## 0.7.9 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-jenkins-common@0.1.9 + ## 0.7.9-next.2 ### Patch Changes diff --git a/plugins/jenkins/package.json b/plugins/jenkins/package.json index 37ee196701..9927fb38ae 100644 --- a/plugins/jenkins/package.json +++ b/plugins/jenkins/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-jenkins", "description": "A Backstage plugin that integrates towards Jenkins", - "version": "0.7.9-next.2", + "version": "0.7.9", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kafka-backend/CHANGELOG.md b/plugins/kafka-backend/CHANGELOG.md index 06cfade726..16dbd0612b 100644 --- a/plugins/kafka-backend/CHANGELOG.md +++ b/plugins/kafka-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-kafka-backend +## 0.2.30 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + ## 0.2.30-next.2 ### Patch Changes diff --git a/plugins/kafka-backend/package.json b/plugins/kafka-backend/package.json index aea9fb5e30..677dad0f01 100644 --- a/plugins/kafka-backend/package.json +++ b/plugins/kafka-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka-backend", "description": "A Backstage backend plugin that integrates towards Kafka", - "version": "0.2.30-next.2", + "version": "0.2.30", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kafka/CHANGELOG.md b/plugins/kafka/CHANGELOG.md index b1aa676dc2..5b98e9ffb7 100644 --- a/plugins/kafka/CHANGELOG.md +++ b/plugins/kafka/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-kafka +## 0.3.10 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/theme@0.2.16 + ## 0.3.10-next.2 ### Patch Changes diff --git a/plugins/kafka/package.json b/plugins/kafka/package.json index c617fad4e1..966c3962a6 100644 --- a/plugins/kafka/package.json +++ b/plugins/kafka/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka", "description": "A Backstage plugin that integrates towards Kafka", - "version": "0.3.10-next.2", + "version": "0.3.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes-backend/CHANGELOG.md b/plugins/kubernetes-backend/CHANGELOG.md index 6c70dfc7cc..085617f8af 100644 --- a/plugins/kubernetes-backend/CHANGELOG.md +++ b/plugins/kubernetes-backend/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-kubernetes-backend +## 0.7.3 + +### Patch Changes + +- de676888bc: Added missing cluster locator configuration schema entries, for the catalog and local proxy types +- d4a8c683be: kubernetes service locator now take request context parameters +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-auth-node@0.2.6 + - @backstage/catalog-client@1.1.1 + - @backstage/plugin-kubernetes-common@0.4.3 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + ## 0.7.3-next.2 ### Patch Changes diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index 7bb9576cb8..3e96aeb347 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-backend", "description": "A Backstage backend plugin that integrates towards Kubernetes", - "version": "0.7.3-next.2", + "version": "0.7.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes-common/CHANGELOG.md b/plugins/kubernetes-common/CHANGELOG.md index bb5947e966..5f561ede04 100644 --- a/plugins/kubernetes-common/CHANGELOG.md +++ b/plugins/kubernetes-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-kubernetes-common +## 0.4.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + ## 0.4.3-next.2 ### Patch Changes diff --git a/plugins/kubernetes-common/package.json b/plugins/kubernetes-common/package.json index a79b396256..afc3aefc34 100644 --- a/plugins/kubernetes-common/package.json +++ b/plugins/kubernetes-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-common", "description": "Common functionalities for kubernetes, to be shared between kubernetes and kubernetes-backend plugin", - "version": "0.4.3-next.2", + "version": "0.4.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes/CHANGELOG.md b/plugins/kubernetes/CHANGELOG.md index b1c97431f9..ebc378d85c 100644 --- a/plugins/kubernetes/CHANGELOG.md +++ b/plugins/kubernetes/CHANGELOG.md @@ -1,5 +1,20 @@ # @backstage/plugin-kubernetes +## 0.7.3 + +### Patch Changes + +- 51af8361de: Add useCustomResources react hook for fetching Kubernetes Custom Resources +- 35a6cfe257: Fix infinite call bug in `useCustomResources` hook +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/plugin-kubernetes-common@0.4.3 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/theme@0.2.16 + ## 0.7.3-next.2 ### Patch Changes diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index ef8cfd1300..d56fb01c55 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes", "description": "A Backstage plugin that integrates towards Kubernetes", - "version": "0.7.3-next.2", + "version": "0.7.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/lighthouse/CHANGELOG.md b/plugins/lighthouse/CHANGELOG.md index 2fd7b2391c..2ab7368212 100644 --- a/plugins/lighthouse/CHANGELOG.md +++ b/plugins/lighthouse/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-lighthouse +## 0.3.10 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/theme@0.2.16 + ## 0.3.10-next.2 ### Patch Changes diff --git a/plugins/lighthouse/package.json b/plugins/lighthouse/package.json index aef3967bff..f7243d2ce6 100644 --- a/plugins/lighthouse/package.json +++ b/plugins/lighthouse/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-lighthouse", "description": "A Backstage plugin that integrates towards Lighthouse", - "version": "0.3.10-next.2", + "version": "0.3.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/newrelic-dashboard/CHANGELOG.md b/plugins/newrelic-dashboard/CHANGELOG.md index 5de697c86b..d8bfa338d2 100644 --- a/plugins/newrelic-dashboard/CHANGELOG.md +++ b/plugins/newrelic-dashboard/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-newrelic-dashboard +## 0.2.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + ## 0.2.3-next.2 ### Patch Changes diff --git a/plugins/newrelic-dashboard/package.json b/plugins/newrelic-dashboard/package.json index 0408a79611..803ba77c1f 100644 --- a/plugins/newrelic-dashboard/package.json +++ b/plugins/newrelic-dashboard/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-newrelic-dashboard", - "version": "0.2.3-next.2", + "version": "0.2.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/newrelic/CHANGELOG.md b/plugins/newrelic/CHANGELOG.md index 41b7327cef..8722383768 100644 --- a/plugins/newrelic/CHANGELOG.md +++ b/plugins/newrelic/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-newrelic +## 0.3.28 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 0.3.28-next.2 ### Patch Changes diff --git a/plugins/newrelic/package.json b/plugins/newrelic/package.json index 81161bf2aa..8f8b58835d 100644 --- a/plugins/newrelic/package.json +++ b/plugins/newrelic/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-newrelic", "description": "A Backstage plugin that integrates towards New Relic", - "version": "0.3.28-next.2", + "version": "0.3.28", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/org/CHANGELOG.md b/plugins/org/CHANGELOG.md index 195cf5c171..d5d0425128 100644 --- a/plugins/org/CHANGELOG.md +++ b/plugins/org/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-org +## 0.5.10 + +### Patch Changes + +- f2b4b55636: consistently show parent and child relations in group profile card +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 0.5.10-next.2 ### Patch Changes diff --git a/plugins/org/package.json b/plugins/org/package.json index d83ecf73d6..4fde7c83a6 100644 --- a/plugins/org/package.json +++ b/plugins/org/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-org", "description": "A Backstage plugin that helps you create entity pages for your organization", - "version": "0.5.10-next.2", + "version": "0.5.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/pagerduty/CHANGELOG.md b/plugins/pagerduty/CHANGELOG.md index f2f4291d7f..157b091fc9 100644 --- a/plugins/pagerduty/CHANGELOG.md +++ b/plugins/pagerduty/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-pagerduty +## 0.5.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + ## 0.5.3-next.2 ### Patch Changes diff --git a/plugins/pagerduty/package.json b/plugins/pagerduty/package.json index ffef2d1479..4d22758614 100644 --- a/plugins/pagerduty/package.json +++ b/plugins/pagerduty/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-pagerduty", "description": "A Backstage plugin that integrates towards PagerDuty", - "version": "0.5.3-next.2", + "version": "0.5.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/periskop-backend/CHANGELOG.md b/plugins/periskop-backend/CHANGELOG.md index a226725ba8..2bedbee959 100644 --- a/plugins/periskop-backend/CHANGELOG.md +++ b/plugins/periskop-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-periskop-backend +## 0.1.8 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/config@1.0.3 + ## 0.1.8-next.2 ### Patch Changes diff --git a/plugins/periskop-backend/package.json b/plugins/periskop-backend/package.json index 87b95068ff..3db0d54859 100644 --- a/plugins/periskop-backend/package.json +++ b/plugins/periskop-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop-backend", - "version": "0.1.8-next.2", + "version": "0.1.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/periskop/CHANGELOG.md b/plugins/periskop/CHANGELOG.md index e36887842a..f27132f8f7 100644 --- a/plugins/periskop/CHANGELOG.md +++ b/plugins/periskop/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-periskop +## 0.1.8 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + ## 0.1.8-next.2 ### Patch Changes diff --git a/plugins/periskop/package.json b/plugins/periskop/package.json index b21bb2e4b7..1661731d2f 100644 --- a/plugins/periskop/package.json +++ b/plugins/periskop/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop", - "version": "0.1.8-next.2", + "version": "0.1.8", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-backend/CHANGELOG.md b/plugins/permission-backend/CHANGELOG.md index 1d6aaedf20..a656f43ed4 100644 --- a/plugins/permission-backend/CHANGELOG.md +++ b/plugins/permission-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-permission-backend +## 0.5.12 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/plugin-auth-node@0.2.6 + - @backstage/plugin-permission-node@0.7.0 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + ## 0.5.12-next.2 ### Patch Changes diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index 0706673183..624accca06 100644 --- a/plugins/permission-backend/package.json +++ b/plugins/permission-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-backend", - "version": "0.5.12-next.2", + "version": "0.5.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-common/CHANGELOG.md b/plugins/permission-common/CHANGELOG.md index b0b2901f69..c06b9a2ad1 100644 --- a/plugins/permission-common/CHANGELOG.md +++ b/plugins/permission-common/CHANGELOG.md @@ -1,5 +1,42 @@ # @backstage/plugin-permission-common +## 0.7.0 + +### Minor Changes + +- 46b4a72cee: **BREAKING**: When defining permission rules, it's now necessary to provide a [ZodSchema](https://github.com/colinhacks/zod) that specifies the parameters the rule expects. This has been added to help better describe the parameters in the response of the metadata endpoint and to validate the parameters before a rule is executed. + + To help with this, we have also made a change to the API of permission rules. Before, the permission rules `toQuery` and `apply` signature expected parameters to be separate arguments, like so... + + ```ts + createPermissionRule({ + apply: (resource, foo, bar) => true, + toQuery: (foo, bar) => {}, + }); + ``` + + The API has now changed to expect the parameters as a single object + + ```ts + createPermissionRule({ + paramSchema: z.object({ + foo: z.string().describe('Foo value to match'), + bar: z.string().describe('Bar value to match'), + }), + apply: (resource, { foo, bar }) => true, + toQuery: ({ foo, bar }) => {}, + }); + ``` + + One final change made is to limit the possible values for a parameter to primitives and arrays of primitives. + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/types@1.0.0 + ## 0.7.0-next.2 ### Minor Changes diff --git a/plugins/permission-common/package.json b/plugins/permission-common/package.json index 3b56c927fe..8fb92a0d2b 100644 --- a/plugins/permission-common/package.json +++ b/plugins/permission-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-permission-common", "description": "Isomorphic types and client for Backstage permissions and authorization", - "version": "0.7.0-next.2", + "version": "0.7.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/plugins/permission-node/CHANGELOG.md b/plugins/permission-node/CHANGELOG.md index 851a706df4..9082ab8337 100644 --- a/plugins/permission-node/CHANGELOG.md +++ b/plugins/permission-node/CHANGELOG.md @@ -1,5 +1,45 @@ # @backstage/plugin-permission-node +## 0.7.0 + +### Minor Changes + +- 46b4a72cee: **BREAKING**: When defining permission rules, it's now necessary to provide a [ZodSchema](https://github.com/colinhacks/zod) that specifies the parameters the rule expects. This has been added to help better describe the parameters in the response of the metadata endpoint and to validate the parameters before a rule is executed. + + To help with this, we have also made a change to the API of permission rules. Before, the permission rules `toQuery` and `apply` signature expected parameters to be separate arguments, like so... + + ```ts + createPermissionRule({ + apply: (resource, foo, bar) => true, + toQuery: (foo, bar) => {}, + }); + ``` + + The API has now changed to expect the parameters as a single object + + ```ts + createPermissionRule({ + paramSchema: z.object({ + foo: z.string().describe('Foo value to match'), + bar: z.string().describe('Bar value to match'), + }), + apply: (resource, { foo, bar }) => true, + toQuery: ({ foo, bar }) => {}, + }); + ``` + + One final change made is to limit the possible values for a parameter to primitives and arrays of primitives. + +### Patch Changes + +- 9335ad115e: Exported types for the .metadata endpoint of the permission router +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/plugin-auth-node@0.2.6 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + ## 0.7.0-next.2 ### Minor Changes diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json index d7c05004d7..0111c4505a 100644 --- a/plugins/permission-node/package.json +++ b/plugins/permission-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-permission-node", "description": "Common permission and authorization utilities for backend plugins", - "version": "0.7.0-next.2", + "version": "0.7.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-react/CHANGELOG.md b/plugins/permission-react/CHANGELOG.md index 537513b221..43fce22e80 100644 --- a/plugins/permission-react/CHANGELOG.md +++ b/plugins/permission-react/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-permission-react +## 0.4.6 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.0 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + ## 0.4.6-next.2 ### Patch Changes diff --git a/plugins/permission-react/package.json b/plugins/permission-react/package.json index 7fad53b870..c852ecec3e 100644 --- a/plugins/permission-react/package.json +++ b/plugins/permission-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-react", - "version": "0.4.6-next.2", + "version": "0.4.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist-backend/CHANGELOG.md b/plugins/playlist-backend/CHANGELOG.md index 8997cd6cb8..2a3d2061ce 100644 --- a/plugins/playlist-backend/CHANGELOG.md +++ b/plugins/playlist-backend/CHANGELOG.md @@ -1,5 +1,39 @@ # @backstage/plugin-playlist-backend +## 0.2.0 + +### Minor Changes + +- eb25f7e12d: **BREAKING** The exported permission rules have changed to reflect the breaking changes made to the PermissionRule type. + + For example, the `playlistConditions.isOwner` API has changed from: + + ```ts + playlistConditions.isOwner(['user:default/me', 'group:default/owner']); + ``` + + to: + + ```ts + playlistConditions.isOwner({ + owners: ['user:default/me', 'group:default/owner'], + }); + ``` + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/backend-test-utils@0.1.29 + - @backstage/plugin-auth-node@0.2.6 + - @backstage/plugin-permission-node@0.7.0 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/catalog-client@1.1.1 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/plugin-playlist-common@0.1.1 + ## 0.2.0-next.2 ### Minor Changes diff --git a/plugins/playlist-backend/package.json b/plugins/playlist-backend/package.json index 3d817ad9ec..38e0729844 100644 --- a/plugins/playlist-backend/package.json +++ b/plugins/playlist-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-playlist-backend", - "version": "0.2.0-next.2", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist-common/CHANGELOG.md b/plugins/playlist-common/CHANGELOG.md index 9867acbc4e..2887b11c01 100644 --- a/plugins/playlist-common/CHANGELOG.md +++ b/plugins/playlist-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-playlist-common +## 0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.0 + ## 0.1.1-next.2 ### Patch Changes diff --git a/plugins/playlist-common/package.json b/plugins/playlist-common/package.json index 9a4cfd7cd7..eccb95faf3 100644 --- a/plugins/playlist-common/package.json +++ b/plugins/playlist-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-playlist-common", "description": "Common functionalities for the playlist plugin", - "version": "0.1.1-next.2", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist/CHANGELOG.md b/plugins/playlist/CHANGELOG.md index 24c69e69a1..ce6bac5960 100644 --- a/plugins/playlist/CHANGELOG.md +++ b/plugins/playlist/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-playlist +## 0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/plugin-catalog-common@1.0.7 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/plugin-search-react@1.2.0 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + - @backstage/plugin-permission-react@0.4.6 + - @backstage/plugin-playlist-common@0.1.1 + ## 0.1.1-next.2 ### Patch Changes diff --git a/plugins/playlist/package.json b/plugins/playlist/package.json index 442efe5a94..bbc4f52f32 100644 --- a/plugins/playlist/package.json +++ b/plugins/playlist/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-playlist", - "version": "0.1.1-next.2", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/proxy-backend/CHANGELOG.md b/plugins/proxy-backend/CHANGELOG.md index adff4261cd..948d4cb393 100644 --- a/plugins/proxy-backend/CHANGELOG.md +++ b/plugins/proxy-backend/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-proxy-backend +## 0.2.31 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/config@1.0.3 + ## 0.2.31-next.2 ### Patch Changes diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json index 2faa206e16..eafad6628c 100644 --- a/plugins/proxy-backend/package.json +++ b/plugins/proxy-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-proxy-backend", "description": "A Backstage backend plugin that helps you set up proxy endpoints in the backend", - "version": "0.2.31-next.2", + "version": "0.2.31", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/rollbar-backend/CHANGELOG.md b/plugins/rollbar-backend/CHANGELOG.md index 103e2ea54f..13dca3c262 100644 --- a/plugins/rollbar-backend/CHANGELOG.md +++ b/plugins/rollbar-backend/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-rollbar-backend +## 0.1.34 + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/config@1.0.3 + ## 0.1.34-next.2 ### Patch Changes diff --git a/plugins/rollbar-backend/package.json b/plugins/rollbar-backend/package.json index b6d12a39bb..032ba55b21 100644 --- a/plugins/rollbar-backend/package.json +++ b/plugins/rollbar-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-rollbar-backend", "description": "A Backstage backend plugin that integrates towards Rollbar", - "version": "0.1.34-next.2", + "version": "0.1.34", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/rollbar/CHANGELOG.md b/plugins/rollbar/CHANGELOG.md index 3c07a80e52..fc4d626bed 100644 --- a/plugins/rollbar/CHANGELOG.md +++ b/plugins/rollbar/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-rollbar +## 0.4.10 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 0.4.10-next.2 ### Patch Changes diff --git a/plugins/rollbar/package.json b/plugins/rollbar/package.json index fd0fec5842..84fcdd80a8 100644 --- a/plugins/rollbar/package.json +++ b/plugins/rollbar/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-rollbar", "description": "A Backstage plugin that integrates towards Rollbar", - "version": "0.4.10-next.2", + "version": "0.4.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md index 68ba110e32..cac90c0a56 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-scaffolder-backend-module-cookiecutter +## 0.2.12 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/plugin-scaffolder-backend@1.7.0 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/types@1.0.0 + ## 0.2.12-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json index ffa77405b7..8032ab5e09 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/package.json +++ b/plugins/scaffolder-backend-module-cookiecutter/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-cookiecutter", "description": "A module for the scaffolder backend that lets you template projects using cookiecutter", - "version": "0.2.12-next.2", + "version": "0.2.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-rails/CHANGELOG.md b/plugins/scaffolder-backend-module-rails/CHANGELOG.md index c5d75bbd27..9abf4e928e 100644 --- a/plugins/scaffolder-backend-module-rails/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-rails/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-scaffolder-backend-module-rails +## 0.4.5 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/plugin-scaffolder-backend@1.7.0 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/types@1.0.0 + ## 0.4.5-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json index d80f36ed5b..91da543f0e 100644 --- a/plugins/scaffolder-backend-module-rails/package.json +++ b/plugins/scaffolder-backend-module-rails/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-rails", "description": "A module for the scaffolder backend that lets you template projects using Rails", - "version": "0.4.5-next.2", + "version": "0.4.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md index 8acc5e0933..2f19d95d78 100644 --- a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-scaffolder-backend-module-yeoman +## 0.2.10 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.7.0 + - @backstage/config@1.0.3 + - @backstage/types@1.0.0 + ## 0.2.10-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-yeoman/package.json b/plugins/scaffolder-backend-module-yeoman/package.json index 07cfedbdc8..768ea468ae 100644 --- a/plugins/scaffolder-backend-module-yeoman/package.json +++ b/plugins/scaffolder-backend-module-yeoman/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-yeoman", - "version": "0.2.10-next.2", + "version": "0.2.10", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md index 993dd1c577..3437603d8a 100644 --- a/plugins/scaffolder-backend/CHANGELOG.md +++ b/plugins/scaffolder-backend/CHANGELOG.md @@ -1,5 +1,37 @@ # @backstage/plugin-scaffolder-backend +## 1.7.0 + +### Minor Changes + +- 253453fa14: Added a new property called `additionalTemplateGlobals` which allows you to add global functions to the scaffolder nunjucks templates. +- 17ff77154c: Update the `github:publish` action to allow passing whether pull + requests must be up to date with the default branch before merging. +- 304305dd20: Add `allowAutoMerge` option for `publish:github` action +- 694bfe2d61: Add functionality to shutdown scaffolder tasks if they are stale +- a8e9848479: Added optional `sourcePath` parameter to `publish:gitlab:merge-request` action, `targetPath` is now optional and falls back to current workspace path. + +### Patch Changes + +- 489621f613: Switching off duplicated timestamp in case of logging via task logger in a custom action +- 4880d43e25: Fixed setting default branch for Bitbucket Server +- b681275e69: Ignore .git directories in Template Editor, increase upload limit for dry-runs to 10MB. +- a35a27df70: Updated the `moduleId` of the experimental module export. +- Updated dependencies + - @backstage/plugin-catalog-node@1.2.0 + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-backend@1.5.0 + - @backstage/plugin-auth-node@0.2.6 + - @backstage/backend-tasks@0.3.6 + - @backstage/backend-plugin-api@0.1.3 + - @backstage/catalog-client@1.1.1 + - @backstage/plugin-scaffolder-common@1.2.1 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/types@1.0.0 + ## 1.7.0-next.2 ### Minor Changes diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index 63a47cbb7b..a21423f865 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend", "description": "The Backstage backend plugin that helps you create new things", - "version": "1.7.0-next.2", + "version": "1.7.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-common/CHANGELOG.md b/plugins/scaffolder-common/CHANGELOG.md index 4b0beb5c37..f2db35b47b 100644 --- a/plugins/scaffolder-common/CHANGELOG.md +++ b/plugins/scaffolder-common/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-scaffolder-common +## 1.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/types@1.0.0 + ## 1.2.1-next.2 ### Patch Changes diff --git a/plugins/scaffolder-common/package.json b/plugins/scaffolder-common/package.json index 400be3dd00..2ccb5bdd4f 100644 --- a/plugins/scaffolder-common/package.json +++ b/plugins/scaffolder-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-common", "description": "Common functionalities for the scaffolder, to be shared between scaffolder and scaffolder-backend plugin", - "version": "1.2.1-next.2", + "version": "1.2.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md index 24057cec32..d972491a64 100644 --- a/plugins/scaffolder/CHANGELOG.md +++ b/plugins/scaffolder/CHANGELOG.md @@ -1,5 +1,38 @@ # @backstage/plugin-scaffolder +## 1.7.0 + +### Minor Changes + +- f13d5f3f06: Add support for link to TechDocs and other links defined in template entity specification metadata on TemplateCard +- 05f22193c5: EntityPickers now support flags to control when to include default namespace + in result + +### Patch Changes + +- e4f0a96424: Making the description of the GitLab repoUrl owner field more clearer by focusing it refers to the GitLab namespace. +- 92e490d6b4: Make the `/next` scaffolder work end to end with the old `TaskPage` view +- 8220f2fd83: Support custom layouts in dry run editor +- 1047baa926: Bump to `react-jsonschema-form@v5-beta` for the `NextRouter` under `@alpha` exports +- 98ae18b68f: Fixed a bug where the `allowed*` values for the `RepoUrlPicker` would be reset on render. +- 8960d83013: Add support for `allowedOrganizations` and `allowedOwners` to the `AzureRepoPicker`. +- b681275e69: Ignore .git directories in Template Editor, increase upload limit for dry-runs to 10MB. +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/plugin-catalog-common@1.0.7 + - @backstage/catalog-client@1.1.1 + - @backstage/plugin-scaffolder-common@1.2.1 + - @backstage/integration-react@1.1.5 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + - @backstage/plugin-permission-react@0.4.6 + ## 1.7.0-next.2 ### Patch Changes diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 4d9e2caa53..0825e624d6 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder", "description": "The Backstage plugin that helps you create new things", - "version": "1.7.0-next.2", + "version": "1.7.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-elasticsearch/CHANGELOG.md b/plugins/search-backend-module-elasticsearch/CHANGELOG.md index 4a80290cbc..abccf644e2 100644 --- a/plugins/search-backend-module-elasticsearch/CHANGELOG.md +++ b/plugins/search-backend-module-elasticsearch/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-search-backend-module-elasticsearch +## 1.0.3 + +### Patch Changes + +- a799972bb1: The search engine has been updated to take advantage of the `pageLimit` property on search queries. If none is provided, the search engine will continue to use its default value of 25 results per page. +- 8006f8a602: In order to improve the debuggability of the search indexing process, messages logged during indexing are now tagged with a `documentType` whose value corresponds to the `type` being indexed. +- Updated dependencies + - @backstage/plugin-search-common@1.1.0 + - @backstage/plugin-search-backend-node@1.0.3 + - @backstage/config@1.0.3 + ## 1.0.3-next.2 ### Patch Changes diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json index da200b6cb1..c03084e2ab 100644 --- a/plugins/search-backend-module-elasticsearch/package.json +++ b/plugins/search-backend-module-elasticsearch/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-elasticsearch", "description": "A module for the search backend that implements search using ElasticSearch", - "version": "1.0.3-next.2", + "version": "1.0.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-pg/CHANGELOG.md b/plugins/search-backend-module-pg/CHANGELOG.md index 08f5f971cb..0a50ee4e4a 100644 --- a/plugins/search-backend-module-pg/CHANGELOG.md +++ b/plugins/search-backend-module-pg/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-search-backend-module-pg +## 0.4.1 + +### Patch Changes + +- a799972bb1: The search engine has been updated to take advantage of the `pageLimit` property on search queries. If none is provided, the search engine will continue to use its default value of 25 results per page. +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/plugin-search-common@1.1.0 + - @backstage/plugin-search-backend-node@1.0.3 + - @backstage/config@1.0.3 + ## 0.4.1-next.2 ### Patch Changes diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json index 7e051bb30b..355d118005 100644 --- a/plugins/search-backend-module-pg/package.json +++ b/plugins/search-backend-module-pg/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-pg", "description": "A module for the search backend that implements search using PostgreSQL", - "version": "0.4.1-next.2", + "version": "0.4.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-node/CHANGELOG.md b/plugins/search-backend-node/CHANGELOG.md index 214e4898b3..694e70c1f9 100644 --- a/plugins/search-backend-node/CHANGELOG.md +++ b/plugins/search-backend-node/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-search-backend-node +## 1.0.3 + +### Patch Changes + +- a799972bb1: The search engine has been updated to take advantage of the `pageLimit` property on search queries. If none is provided, the search engine will continue to use its default value of 25 results per page. +- 8006f8a602: In order to improve the debuggability of the search indexing process, messages logged during indexing are now tagged with a `documentType` whose value corresponds to the `type` being indexed. +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/backend-tasks@0.3.6 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/plugin-search-common@1.1.0 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + ## 1.0.3-next.2 ### Patch Changes diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json index 5847ca4315..121cc66423 100644 --- a/plugins/search-backend-node/package.json +++ b/plugins/search-backend-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-node", "description": "A library for Backstage backend plugins that want to interact with the search backend plugin", - "version": "1.0.3-next.2", + "version": "1.0.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend/CHANGELOG.md b/plugins/search-backend/CHANGELOG.md index 97126502ef..70e7e01a54 100644 --- a/plugins/search-backend/CHANGELOG.md +++ b/plugins/search-backend/CHANGELOG.md @@ -1,5 +1,35 @@ # @backstage/plugin-search-backend +## 1.1.0 + +### Minor Changes + +- 16c853a6ed: Be less restrictive with unknown keys on query endpoint +- a799972bb1: The query received by search engines now contains a property called `pageLimit`, it specifies how many results to return per page when sending a query request to the search backend. + + Example: + _Returns up to 30 results per page_ + + ``` + GET /query?pageLimit=30 + ``` + + The search backend validates the page limit and this value must not exceed 100, but it doesn't set a default value for the page limit parameter, it leaves it up to each search engine to set this, so Lunr, Postgres and Elastic Search set 25 results per page as a default value. + +### Patch Changes + +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/plugin-auth-node@0.2.6 + - @backstage/plugin-permission-node@0.7.0 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/plugin-search-common@1.1.0 + - @backstage/plugin-search-backend-node@1.0.3 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/types@1.0.0 + ## 1.1.0-next.2 ### Patch Changes diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json index 199510b8dc..7977346d82 100644 --- a/plugins/search-backend/package.json +++ b/plugins/search-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend", "description": "The Backstage backend plugin that provides your backstage app with search", - "version": "1.1.0-next.2", + "version": "1.1.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-common/CHANGELOG.md b/plugins/search-common/CHANGELOG.md index 7e5a5ff38e..732e1e7aeb 100644 --- a/plugins/search-common/CHANGELOG.md +++ b/plugins/search-common/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-search-common +## 1.1.0 + +### Minor Changes + +- a799972bb1: There is a new property called `pageLimit` on the `SearchQuery` interface that specifies how many results should be returned per page. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.0 + - @backstage/types@1.0.0 + ## 1.1.0-next.2 ### Patch Changes diff --git a/plugins/search-common/package.json b/plugins/search-common/package.json index e1260a0d1e..2c68b023a5 100644 --- a/plugins/search-common/package.json +++ b/plugins/search-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-common", "description": "Common functionalities for Search, to be shared between various search-enabled plugins", - "version": "1.1.0-next.2", + "version": "1.1.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/plugins/search-react/CHANGELOG.md b/plugins/search-react/CHANGELOG.md index 89fbb389f2..8eb6f526f2 100644 --- a/plugins/search-react/CHANGELOG.md +++ b/plugins/search-react/CHANGELOG.md @@ -1,5 +1,187 @@ # @backstage/plugin-search-react +## 1.2.0 + +### Minor Changes + +- 4ed1fa2480: The search query state now has an optional `pageLimit` property that determines how many results will be requested per page, it defaults to 25. + + Examples: + _Basic_ + + ```jsx + + {results => { + // Item rendering logic is omitted + }} + + ``` + + _With context_ + + ```jsx + + + {results => { + // Item rendering logic is omitted + }} + + + ``` + +- bed5a1dc6e: The `` component now accepts an optional property `disableRenderingWithNoResults` to disable rendering when no results are returned. + Possibility to provide a custom no results component if needed through the `noResultsComponent` property. + + Examples: + + _Rendering a custom no results component_ + + ```jsx + } + /> + ``` + + _Disable rendering when there are no results_ + + ```jsx + + ``` + +- 3de4bd4f19: A `` component was created for limiting the number of results shown per search page. Use this new component to give users options to select how many search results they want to display per page. The default options are 10, 25, 50, 100. + + See examples below: + + _Basic_ + + ```jsx + import React, { useState } from 'react'; + import { Grid } from '@material-ui/core'; + import { Page, Header, Content, Lifecycle } from '@backstage/core-components'; + import { + SearchBarBase, + SearchPaginationBase, + SearchResultList, + } from '@backstage/plugin-search-react'; + + const SearchPage = () => { + const [term, setTerm] = useState(''); + const [pageLimit, setPageLimit] = useState(25); + const [pageCursor, setPageCursor] = useState(); + + return ( + +
} /> + + + + + + + + + + + + + + + ); + }; + ``` + + _With context_ + + ```jsx + import React from 'react'; + import { Grid } from '@material-ui/core'; + import { Page, Header, Content, Lifecycle } from '@backstage/core-components'; + import { + SearchBar, + SearchResult, + SearchPagination, + SearchResultListLayout, + SearchContextProvider, + DefaultResultListItem, + } from '@backstage/plugin-search-react'; + + const SearchPage = () => ( + + +
} /> + + + + + + + + + + + {({ results }) => ( + ( + + )} + /> + )} + + + + + + + ); + ``` + +- 6faaa05626: The `` component now accepts an optional property `disableRenderingWithNoResults` to disable rendering when no results are returned. + Possibility to provide a custom no results component if needed through the `noResultsComponent` property. + + Examples: + + _Rendering a custom no results component_ + + ```jsx + } + title="Documentation" + noResultsComponent={} + /> + ``` + + _Disable rendering when there are no results_ + + ```jsx + } + title="Documentation" + disableRenderingWithNoResults + /> + ``` + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/plugin-search-common@1.1.0 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + - @backstage/version-bridge@1.0.1 + ## 1.2.0-next.2 ### Patch Changes diff --git a/plugins/search-react/package.json b/plugins/search-react/package.json index 62e9ecd6de..c4d93341e9 100644 --- a/plugins/search-react/package.json +++ b/plugins/search-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-react", - "version": "1.2.0-next.2", + "version": "1.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search/CHANGELOG.md b/plugins/search/CHANGELOG.md index c7494af180..79fce6a287 100644 --- a/plugins/search/CHANGELOG.md +++ b/plugins/search/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-search +## 1.0.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/plugin-search-react@1.2.0 + - @backstage/plugin-search-common@1.1.0 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + - @backstage/version-bridge@1.0.1 + ## 1.0.3-next.2 ### Patch Changes diff --git a/plugins/search/package.json b/plugins/search/package.json index 7a9a16eedc..ec3a1d754d 100644 --- a/plugins/search/package.json +++ b/plugins/search/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search", "description": "The Backstage plugin that provides your backstage app with search", - "version": "1.0.3-next.2", + "version": "1.0.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sentry/CHANGELOG.md b/plugins/sentry/CHANGELOG.md index d5163685ad..005fa9aaff 100644 --- a/plugins/sentry/CHANGELOG.md +++ b/plugins/sentry/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-sentry +## 0.4.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 0.4.3-next.2 ### Patch Changes diff --git a/plugins/sentry/package.json b/plugins/sentry/package.json index 8d0b049059..9a10fe7214 100644 --- a/plugins/sentry/package.json +++ b/plugins/sentry/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sentry", "description": "A Backstage plugin that integrates towards Sentry", - "version": "0.4.3-next.2", + "version": "0.4.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/shortcuts/CHANGELOG.md b/plugins/shortcuts/CHANGELOG.md index c35c28a29c..842b0d70a8 100644 --- a/plugins/shortcuts/CHANGELOG.md +++ b/plugins/shortcuts/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-shortcuts +## 0.3.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + ## 0.3.2-next.2 ### Patch Changes diff --git a/plugins/shortcuts/package.json b/plugins/shortcuts/package.json index caf1c1d127..b37c5bba1a 100644 --- a/plugins/shortcuts/package.json +++ b/plugins/shortcuts/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-shortcuts", "description": "A Backstage plugin that provides a shortcuts feature to the sidebar", - "version": "0.3.2-next.2", + "version": "0.3.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube-backend/CHANGELOG.md b/plugins/sonarqube-backend/CHANGELOG.md index 6747ae9862..8b34005df1 100644 --- a/plugins/sonarqube-backend/CHANGELOG.md +++ b/plugins/sonarqube-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-sonarqube-backend +## 0.1.2 + +### Patch Changes + +- 9c595302cb: Normalize on winston version ^3.2.1 +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + ## 0.1.2-next.2 ### Patch Changes diff --git a/plugins/sonarqube-backend/package.json b/plugins/sonarqube-backend/package.json index 09eba7ec75..baaa8cd488 100644 --- a/plugins/sonarqube-backend/package.json +++ b/plugins/sonarqube-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-sonarqube-backend", - "version": "0.1.2-next.2", + "version": "0.1.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube/CHANGELOG.md b/plugins/sonarqube/CHANGELOG.md index 15f5e27677..bf72ac2e28 100644 --- a/plugins/sonarqube/CHANGELOG.md +++ b/plugins/sonarqube/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-sonarqube +## 0.4.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 0.4.2-next.2 ### Patch Changes diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json index 7d7191d17e..18c1b316a9 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sonarqube", "description": "", - "version": "0.4.2-next.2", + "version": "0.4.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/splunk-on-call/CHANGELOG.md b/plugins/splunk-on-call/CHANGELOG.md index 1c8a06ba27..fe0a21bea4 100644 --- a/plugins/splunk-on-call/CHANGELOG.md +++ b/plugins/splunk-on-call/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-splunk-on-call +## 0.3.34 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 0.3.34-next.2 ### Patch Changes diff --git a/plugins/splunk-on-call/package.json b/plugins/splunk-on-call/package.json index e082f45af3..5543765716 100644 --- a/plugins/splunk-on-call/package.json +++ b/plugins/splunk-on-call/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-splunk-on-call", "description": "A Backstage plugin that integrates towards Splunk On-Call", - "version": "0.3.34-next.2", + "version": "0.3.34", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stack-overflow-backend/CHANGELOG.md b/plugins/stack-overflow-backend/CHANGELOG.md index 807b7ff4f4..5fc3631f54 100644 --- a/plugins/stack-overflow-backend/CHANGELOG.md +++ b/plugins/stack-overflow-backend/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-stack-overflow-backend +## 0.1.6 + +### Patch Changes + +- 8006f8a602: In order to improve the debuggability of the search indexing process, messages logged during indexing are now tagged with a `documentType` whose value corresponds to the `type` being indexed. +- Updated dependencies + - @backstage/cli@0.20.0 + - @backstage/plugin-search-common@1.1.0 + - @backstage/config@1.0.3 + ## 0.1.6-next.2 ### Patch Changes diff --git a/plugins/stack-overflow-backend/package.json b/plugins/stack-overflow-backend/package.json index 03e45ffa20..2fa1a69470 100644 --- a/plugins/stack-overflow-backend/package.json +++ b/plugins/stack-overflow-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-stack-overflow-backend", - "version": "0.1.6-next.2", + "version": "0.1.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stack-overflow/CHANGELOG.md b/plugins/stack-overflow/CHANGELOG.md index 52e0025211..45d6f8a73f 100644 --- a/plugins/stack-overflow/CHANGELOG.md +++ b/plugins/stack-overflow/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-stack-overflow +## 0.1.6 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/plugin-search-common@1.1.0 + - @backstage/plugin-home@0.4.26 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/theme@0.2.16 + ## 0.1.6-next.2 ### Patch Changes diff --git a/plugins/stack-overflow/package.json b/plugins/stack-overflow/package.json index d423b847da..6d4c2aff09 100644 --- a/plugins/stack-overflow/package.json +++ b/plugins/stack-overflow/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-stack-overflow", - "version": "0.1.6-next.2", + "version": "0.1.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md index bde496d73f..14e195b249 100644 --- a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md +++ b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-tech-insights-backend-module-jsonfc +## 0.1.21 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/plugin-tech-insights-node@0.3.5 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/plugin-tech-insights-common@0.2.7 + ## 0.1.21-next.2 ### Patch Changes diff --git a/plugins/tech-insights-backend-module-jsonfc/package.json b/plugins/tech-insights-backend-module-jsonfc/package.json index cd64ea0742..9e4c5503c1 100644 --- a/plugins/tech-insights-backend-module-jsonfc/package.json +++ b/plugins/tech-insights-backend-module-jsonfc/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-backend-module-jsonfc", - "version": "0.1.21-next.2", + "version": "0.1.21", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-backend/CHANGELOG.md b/plugins/tech-insights-backend/CHANGELOG.md index 785f53e06f..db98317e31 100644 --- a/plugins/tech-insights-backend/CHANGELOG.md +++ b/plugins/tech-insights-backend/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-tech-insights-backend +## 0.5.3 + +### Patch Changes + +- 296aea34da: The Tech Insights plugin supports running fact retrievers across multiple instances. Update the README to remove the stale instructions. +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- f7cbfb97ed: Modify router endpoint to handle singular and collections of request parameters similarly. +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/backend-tasks@0.3.6 + - @backstage/catalog-client@1.1.1 + - @backstage/plugin-tech-insights-node@0.3.5 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/plugin-tech-insights-common@0.2.7 + ## 0.5.3-next.2 ### Patch Changes diff --git a/plugins/tech-insights-backend/package.json b/plugins/tech-insights-backend/package.json index 16567f4c35..402cbc49d5 100644 --- a/plugins/tech-insights-backend/package.json +++ b/plugins/tech-insights-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-backend", - "version": "0.5.3-next.2", + "version": "0.5.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-common/CHANGELOG.md b/plugins/tech-insights-common/CHANGELOG.md index 490f5cb941..13f502287e 100644 --- a/plugins/tech-insights-common/CHANGELOG.md +++ b/plugins/tech-insights-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-tech-insights-common +## 0.2.7 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.0.0 + ## 0.2.7-next.2 ### Patch Changes diff --git a/plugins/tech-insights-common/package.json b/plugins/tech-insights-common/package.json index 848454a823..750a8f9ce7 100644 --- a/plugins/tech-insights-common/package.json +++ b/plugins/tech-insights-common/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-common", - "version": "0.2.7-next.2", + "version": "0.2.7", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-node/CHANGELOG.md b/plugins/tech-insights-node/CHANGELOG.md index 62916ad560..d9605bd033 100644 --- a/plugins/tech-insights-node/CHANGELOG.md +++ b/plugins/tech-insights-node/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-tech-insights-node +## 0.3.5 + +### Patch Changes + +- 0963b4d5fb: Updated package role to be `node-library`. +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/backend-tasks@0.3.6 + - @backstage/config@1.0.3 + - @backstage/types@1.0.0 + - @backstage/plugin-tech-insights-common@0.2.7 + ## 0.3.5-next.2 ### Patch Changes diff --git a/plugins/tech-insights-node/package.json b/plugins/tech-insights-node/package.json index 45ca5f2739..20cb0152cc 100644 --- a/plugins/tech-insights-node/package.json +++ b/plugins/tech-insights-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-node", - "version": "0.3.5-next.2", + "version": "0.3.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights/CHANGELOG.md b/plugins/tech-insights/CHANGELOG.md index 99f7551e53..fa13c9a426 100644 --- a/plugins/tech-insights/CHANGELOG.md +++ b/plugins/tech-insights/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-tech-insights +## 0.3.1 + +### Patch Changes + +- f3d272cf57: Make sure to reload score card contents when props change +- a60a6807bd: making available the search for the last FACTS executed +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + - @backstage/plugin-tech-insights-common@0.2.7 + ## 0.3.1-next.2 ### Patch Changes diff --git a/plugins/tech-insights/package.json b/plugins/tech-insights/package.json index f4ccbc41e0..cd32374fb5 100644 --- a/plugins/tech-insights/package.json +++ b/plugins/tech-insights/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights", - "version": "0.3.1-next.2", + "version": "0.3.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-radar/CHANGELOG.md b/plugins/tech-radar/CHANGELOG.md index 53b30f3a9e..d7ae58f097 100644 --- a/plugins/tech-radar/CHANGELOG.md +++ b/plugins/tech-radar/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-tech-radar +## 0.5.17 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 0.5.17-next.2 ### Patch Changes diff --git a/plugins/tech-radar/package.json b/plugins/tech-radar/package.json index 43c02f838b..bf20c2b4aa 100644 --- a/plugins/tech-radar/package.json +++ b/plugins/tech-radar/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-tech-radar", "description": "A Backstage plugin that lets you display a Tech Radar for your organization", - "version": "0.5.17-next.2", + "version": "0.5.17", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-addons-test-utils/CHANGELOG.md b/plugins/techdocs-addons-test-utils/CHANGELOG.md index 406f837998..04388b9c3d 100644 --- a/plugins/techdocs-addons-test-utils/CHANGELOG.md +++ b/plugins/techdocs-addons-test-utils/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-techdocs-addons-test-utils +## 1.0.5 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.6.0 + - @backstage/core-components@0.11.2 + - @backstage/core-app-api@1.1.1 + - @backstage/test-utils@1.2.1 + - @backstage/plugin-search-react@1.2.0 + - @backstage/plugin-techdocs@1.3.3 + - @backstage/plugin-techdocs-react@1.0.5 + - @backstage/integration-react@1.1.5 + - @backstage/core-plugin-api@1.0.7 + - @backstage/theme@0.2.16 + ## 1.0.5-next.2 ### Patch Changes diff --git a/plugins/techdocs-addons-test-utils/package.json b/plugins/techdocs-addons-test-utils/package.json index 3e976d1e06..e5f52fed60 100644 --- a/plugins/techdocs-addons-test-utils/package.json +++ b/plugins/techdocs-addons-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-addons-test-utils", - "version": "1.0.5-next.2", + "version": "1.0.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-backend/CHANGELOG.md b/plugins/techdocs-backend/CHANGELOG.md index ccd4c4b67f..f05171ce9d 100644 --- a/plugins/techdocs-backend/CHANGELOG.md +++ b/plugins/techdocs-backend/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-techdocs-backend +## 1.4.0 + +### Minor Changes + +- 7ced1b4076: Add optional `catalogClient` argument to `createRoute` parameters + +### Patch Changes + +- 8006f8a602: In order to improve the debuggability of the search indexing process, messages logged during indexing are now tagged with a `documentType` whose value corresponds to the `type` being indexed. +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-catalog-common@1.0.7 + - @backstage/plugin-techdocs-node@1.4.1 + - @backstage/plugin-permission-common@0.7.0 + - @backstage/catalog-client@1.1.1 + - @backstage/plugin-search-common@1.1.0 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + ## 1.4.0-next.2 ### Minor Changes diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index ca1c5b7578..f191f39f67 100644 --- a/plugins/techdocs-backend/package.json +++ b/plugins/techdocs-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-backend", "description": "The Backstage backend plugin that renders technical documentation for your components", - "version": "1.4.0-next.2", + "version": "1.4.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-module-addons-contrib/CHANGELOG.md b/plugins/techdocs-module-addons-contrib/CHANGELOG.md index 548f30d6f1..dd22792833 100644 --- a/plugins/techdocs-module-addons-contrib/CHANGELOG.md +++ b/plugins/techdocs-module-addons-contrib/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-techdocs-module-addons-contrib +## 1.0.5 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/plugin-techdocs-react@1.0.5 + - @backstage/integration-react@1.1.5 + - @backstage/core-plugin-api@1.0.7 + - @backstage/integration@1.3.2 + - @backstage/theme@0.2.16 + ## 1.0.5-next.2 ### Patch Changes diff --git a/plugins/techdocs-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json index 5fde16fa33..786e167a0e 100644 --- a/plugins/techdocs-module-addons-contrib/package.json +++ b/plugins/techdocs-module-addons-contrib/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-module-addons-contrib", "description": "Plugin module for contributed TechDocs Addons", - "version": "1.0.5-next.2", + "version": "1.0.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-node/CHANGELOG.md b/plugins/techdocs-node/CHANGELOG.md index d1f1ea55ce..b1b1d9a4c1 100644 --- a/plugins/techdocs-node/CHANGELOG.md +++ b/plugins/techdocs-node/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-techdocs-node +## 1.4.1 + +### Patch Changes + +- 0b2a30dead: fixing techdocs-cli Docker client creation + + Docker client does not need to be created when --no-docker + option is provided. + + If you had DOCKER_CERT_PATH environment variable defined + the Docker client was looking for certificates + and breaking techdocs-cli generate command even with --no-docker + option. + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-search-common@1.1.0 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + ## 1.4.1-next.2 ### Patch Changes diff --git a/plugins/techdocs-node/package.json b/plugins/techdocs-node/package.json index 6b4e822f2f..692ca58fa9 100644 --- a/plugins/techdocs-node/package.json +++ b/plugins/techdocs-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-node", "description": "Common node.js functionalities for TechDocs, to be shared between techdocs-backend plugin and techdocs-cli", - "version": "1.4.1-next.2", + "version": "1.4.1", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/plugins/techdocs-react/CHANGELOG.md b/plugins/techdocs-react/CHANGELOG.md index fa791fb4ca..fe2801aff2 100644 --- a/plugins/techdocs-react/CHANGELOG.md +++ b/plugins/techdocs-react/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-techdocs-react +## 1.0.5 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/version-bridge@1.0.1 + ## 1.0.5-next.2 ### Patch Changes diff --git a/plugins/techdocs-react/package.json b/plugins/techdocs-react/package.json index d9d8b76382..1e0603799d 100644 --- a/plugins/techdocs-react/package.json +++ b/plugins/techdocs-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-react", "description": "Shared frontend utilities for TechDocs and Addons", - "version": "1.0.5-next.2", + "version": "1.0.5", "publishConfig": { "access": "public", "alphaTypes": "dist/index.alpha.d.ts", diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md index 1c331fd7ea..f266d5d1dd 100644 --- a/plugins/techdocs/CHANGELOG.md +++ b/plugins/techdocs/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-techdocs +## 1.3.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/plugin-search-react@1.2.0 + - @backstage/plugin-search-common@1.1.0 + - @backstage/plugin-techdocs-react@1.0.5 + - @backstage/integration-react@1.1.5 + - @backstage/core-plugin-api@1.0.7 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + - @backstage/theme@0.2.16 + ## 1.3.3-next.2 ### Patch Changes diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index f7dbbc06ff..4e8a9dfc96 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs", "description": "The Backstage plugin that renders technical documentation for your components", - "version": "1.3.3-next.2", + "version": "1.3.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/todo-backend/CHANGELOG.md b/plugins/todo-backend/CHANGELOG.md index 3ce6301333..48fe718759 100644 --- a/plugins/todo-backend/CHANGELOG.md +++ b/plugins/todo-backend/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-todo-backend +## 0.1.34 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/catalog-client@1.1.1 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + - @backstage/integration@1.3.2 + ## 0.1.34-next.2 ### Patch Changes diff --git a/plugins/todo-backend/package.json b/plugins/todo-backend/package.json index 3bdebf6052..3c59254f89 100644 --- a/plugins/todo-backend/package.json +++ b/plugins/todo-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-todo-backend", "description": "A Backstage backend plugin that lets you browse TODO comments in your source code", - "version": "0.1.34-next.2", + "version": "0.1.34", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/todo/CHANGELOG.md b/plugins/todo/CHANGELOG.md index b8ede33b81..d126f9a9ad 100644 --- a/plugins/todo/CHANGELOG.md +++ b/plugins/todo/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-todo +## 0.2.12 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + ## 0.2.12-next.2 ### Patch Changes diff --git a/plugins/todo/package.json b/plugins/todo/package.json index 7b4fbe7fc6..ef061277c4 100644 --- a/plugins/todo/package.json +++ b/plugins/todo/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-todo", "description": "A Backstage plugin that lets you browse TODO comments in your source code", - "version": "0.2.12-next.2", + "version": "0.2.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/user-settings-backend/CHANGELOG.md b/plugins/user-settings-backend/CHANGELOG.md index 24c8d7592c..5cd32e82f5 100644 --- a/plugins/user-settings-backend/CHANGELOG.md +++ b/plugins/user-settings-backend/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-user-settings-backend +## 0.1.1 + +### Patch Changes + +- f3463b176b: Use `Response.status` instead of `.send(number)` +- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` +- 82ac9bcfe5: Fix wrong import statement in `README.md`. +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/backend-common@0.15.2 + - @backstage/plugin-auth-node@0.2.6 + - @backstage/errors@1.1.2 + - @backstage/types@1.0.0 + ## 0.1.1-next.2 ### Patch Changes diff --git a/plugins/user-settings-backend/package.json b/plugins/user-settings-backend/package.json index 8d8c5cf36f..47aa6b5978 100644 --- a/plugins/user-settings-backend/package.json +++ b/plugins/user-settings-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-user-settings-backend", "description": "The Backstage backend plugin to manage user settings", - "version": "0.1.1-next.2", + "version": "0.1.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/user-settings/CHANGELOG.md b/plugins/user-settings/CHANGELOG.md index f34a5ddc72..dfced55e24 100644 --- a/plugins/user-settings/CHANGELOG.md +++ b/plugins/user-settings/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-user-settings +## 0.5.0 + +### Minor Changes + +- 5543e86660: **BREAKING**: The `apiRef` passed to `ProviderSettingsItem` now needs to + implement `ProfileInfoApi & SessionApi`, rather than just the latter. This is + unlikely to have an effect on most users though, since the builtin auth + providers generally implement both. + + Fixed settings page showing providers as logged out when the user is using more + than one provider, and displayed some additional login information. + +### Patch Changes + +- 06d61d1266: Handle errors that may occur when the user logs out +- 44c9a95dcf: Prevent `.set()` to execute a request to the StorageClient if the user is `guest` +- 174f02a00a: Update installation instructions +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-app-api@1.1.1 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + - @backstage/types@1.0.0 + ## 0.5.0-next.2 ### Patch Changes diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index 4ef48fad79..33a57ccc86 100644 --- a/plugins/user-settings/package.json +++ b/plugins/user-settings/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-user-settings", "description": "A Backstage plugin that provides a settings page", - "version": "0.5.0-next.2", + "version": "0.5.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/vault-backend/CHANGELOG.md b/plugins/vault-backend/CHANGELOG.md index 925c755725..dd9f5bb8bf 100644 --- a/plugins/vault-backend/CHANGELOG.md +++ b/plugins/vault-backend/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/plugin-vault-backend +## 0.2.3 + +### Patch Changes + +- 9c595302cb: Normalize on winston version ^3.2.1 +- dae0bbe522: VaultBuilder.tsx renamed to VaultBuilder in order for module to be correctly loaded. +- Updated dependencies + - @backstage/backend-common@0.15.2 + - @backstage/backend-test-utils@0.1.29 + - @backstage/backend-tasks@0.3.6 + - @backstage/config@1.0.3 + - @backstage/errors@1.1.2 + ## 0.2.3-next.2 ### Patch Changes diff --git a/plugins/vault-backend/package.json b/plugins/vault-backend/package.json index d0a7854e87..27a6718c10 100644 --- a/plugins/vault-backend/package.json +++ b/plugins/vault-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault-backend", "description": "A Backstage backend plugin that integrates towards Vault", - "version": "0.2.3-next.2", + "version": "0.2.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/vault/CHANGELOG.md b/plugins/vault/CHANGELOG.md index 5897543d2d..610fe46f12 100644 --- a/plugins/vault/CHANGELOG.md +++ b/plugins/vault/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/plugin-vault +## 0.1.4 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.1.2 + - @backstage/plugin-catalog-react@1.2.0 + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + ## 0.1.4-next.2 ### Patch Changes diff --git a/plugins/vault/package.json b/plugins/vault/package.json index c9c46b52f4..182b091743 100644 --- a/plugins/vault/package.json +++ b/plugins/vault/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault", "description": "A Backstage plugin that integrates towards Vault", - "version": "0.1.4-next.2", + "version": "0.1.4", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/xcmetrics/CHANGELOG.md b/plugins/xcmetrics/CHANGELOG.md index c10818bf77..1461d15b9d 100644 --- a/plugins/xcmetrics/CHANGELOG.md +++ b/plugins/xcmetrics/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-xcmetrics +## 0.2.30 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.11.2 + - @backstage/core-plugin-api@1.0.7 + - @backstage/errors@1.1.2 + - @backstage/theme@0.2.16 + ## 0.2.30-next.2 ### Patch Changes diff --git a/plugins/xcmetrics/package.json b/plugins/xcmetrics/package.json index cc88021ccb..c9082c9802 100644 --- a/plugins/xcmetrics/package.json +++ b/plugins/xcmetrics/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-xcmetrics", "description": "A Backstage plugin that shows XCode build metrics for your components", - "version": "0.2.30-next.2", + "version": "0.2.30", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/yarn.lock b/yarn.lock index 05d79d90b3..4c5a53679f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3182,17 +3182,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/catalog-client@npm:^1.1.0": - version: 1.1.0 - resolution: "@backstage/catalog-client@npm:1.1.0" - dependencies: - "@backstage/catalog-model": ^1.1.1 - "@backstage/errors": ^1.1.1 - cross-fetch: ^3.1.5 - checksum: 54ee5c193bbebd46d71dbfc259e2ba6958d1f492e1b5f31a9ca17add95b7daaaa0a6f51b03a2a1bb7207c9e5f36a16cc40bd2f3cce7381e577f61249625c5b20 - languageName: node - linkType: hard - "@backstage/catalog-client@workspace:^, @backstage/catalog-client@workspace:packages/catalog-client": version: 0.0.0-use.local resolution: "@backstage/catalog-client@workspace:packages/catalog-client" @@ -3205,22 +3194,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/catalog-model@npm:^1.1.0-next.2, @backstage/catalog-model@npm:^1.1.1": - version: 1.1.1 - resolution: "@backstage/catalog-model@npm:1.1.1" - dependencies: - "@backstage/config": ^1.0.2 - "@backstage/errors": ^1.1.1 - "@backstage/types": ^1.0.0 - ajv: ^8.10.0 - json-schema: ^0.4.0 - lodash: ^4.17.21 - uuid: ^8.0.0 - checksum: 32b38c59b40b8ebbabbced27fe996305ba739015eb20fad20c6e106d9058a81f05fee4878fac801e074a8f316702fd2c5c16af35c4b827defe83400320070658 - languageName: node - linkType: hard - -"@backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model": +"@backstage/catalog-model@^1.1.0-next.2, @backstage/catalog-model@^1.1.1, @backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model": version: 0.0.0-use.local resolution: "@backstage/catalog-model@workspace:packages/catalog-model" dependencies: @@ -3434,17 +3408,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/config@npm:^1.0.1, @backstage/config@npm:^1.0.2": - version: 1.0.2 - resolution: "@backstage/config@npm:1.0.2" - dependencies: - "@backstage/types": ^1.0.0 - lodash: ^4.17.21 - checksum: 452c9fd47247974552bb8d53cfebcab120d37f60a209da74ec06b1408b1ae6464c8f61404d0d071eb7b70ece0aaa5462d02e9cc5713a21744795a8b9db3f80ce - languageName: node - linkType: hard - -"@backstage/config@workspace:^, @backstage/config@workspace:packages/config": +"@backstage/config@^1.0.1, @backstage/config@workspace:^, @backstage/config@workspace:packages/config": version: 0.0.0-use.local resolution: "@backstage/config@workspace:packages/config" dependencies: @@ -3490,58 +3454,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-components@npm:^0.11.0, @backstage/core-components@npm:^0.11.1": - version: 0.11.1 - resolution: "@backstage/core-components@npm:0.11.1" - dependencies: - "@backstage/config": ^1.0.2 - "@backstage/core-plugin-api": ^1.0.6 - "@backstage/errors": ^1.1.1 - "@backstage/theme": ^0.2.16 - "@backstage/version-bridge": ^1.0.1 - "@material-table/core": ^3.1.0 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 - "@react-hookz/web": ^15.0.0 - "@types/react-sparklines": ^1.7.0 - "@types/react-text-truncate": ^0.14.0 - ansi-regex: ^6.0.1 - classnames: ^2.2.6 - d3-selection: ^3.0.0 - d3-shape: ^3.0.0 - d3-zoom: ^3.0.0 - dagre: ^0.8.5 - history: ^5.0.0 - immer: ^9.0.1 - lodash: ^4.17.21 - pluralize: ^8.0.0 - prop-types: ^15.7.2 - qs: ^6.9.4 - rc-progress: 3.4.0 - react-helmet: 6.1.0 - react-hook-form: ^7.12.2 - react-markdown: ^8.0.0 - react-sparklines: ^1.7.0 - react-syntax-highlighter: ^15.4.5 - react-text-truncate: ^0.19.0 - react-use: ^17.3.2 - react-virtualized-auto-sizer: ^1.0.6 - react-window: ^1.8.6 - remark-gfm: ^3.0.1 - zen-observable: ^0.8.15 - zod: ^3.11.6 - peerDependencies: - "@types/react": ^16.13.1 || ^17.0.0 - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 - react-router: 6.0.0-beta.0 || ^6.3.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: 91f185253d6fba47d3c7c93f37cc318f2b59f790efc518c1f207c976b0bc3153993d87365802e97ba66fb12f373fd2fa61eb99f2390a133a6e1ae69396cad346 - languageName: node - linkType: hard - -"@backstage/core-components@workspace:^, @backstage/core-components@workspace:packages/core-components": +"@backstage/core-components@^0.11.0, @backstage/core-components@^0.11.1, @backstage/core-components@workspace:^, @backstage/core-components@workspace:packages/core-components": version: 0.0.0-use.local resolution: "@backstage/core-components@workspace:packages/core-components" dependencies: @@ -3613,25 +3526,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-plugin-api@npm:^1.0.3, @backstage/core-plugin-api@npm:^1.0.6": - version: 1.0.6 - resolution: "@backstage/core-plugin-api@npm:1.0.6" - dependencies: - "@backstage/config": ^1.0.2 - "@backstage/types": ^1.0.0 - "@backstage/version-bridge": ^1.0.1 - history: ^5.0.0 - prop-types: ^15.7.2 - zen-observable: ^0.8.15 - peerDependencies: - "@types/react": ^16.13.1 || ^17.0.0 - react: ^16.13.1 || ^17.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: ee44e5b1c6fe59f67ca55f7d0777873937a9c2ec6d33c6bf9c30f7d3063f3366b8680578854f5abdecee4aa1f71d1844c82100c87abd20b637ea385c8dd89618 - languageName: node - linkType: hard - -"@backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api": +"@backstage/core-plugin-api@^1.0.3, @backstage/core-plugin-api@^1.0.6, @backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api": version: 0.0.0-use.local resolution: "@backstage/core-plugin-api@workspace:packages/core-plugin-api" dependencies: @@ -3718,17 +3613,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/errors@npm:^1.1.1": - version: 1.1.1 - resolution: "@backstage/errors@npm:1.1.1" - dependencies: - "@backstage/types": ^1.0.0 - cross-fetch: ^3.1.5 - serialize-error: ^8.0.1 - checksum: 8983eba72212a545bd3543d71f796b9836aacecfd85d6ac67a5a37da4af5566b8267533547ffc9caa01969c6c08a2197569626206aa84cb18fbfe4bf03ca8328 - languageName: node - linkType: hard - "@backstage/errors@workspace:^, @backstage/errors@workspace:packages/errors": version: 0.0.0-use.local resolution: "@backstage/errors@workspace:packages/errors" @@ -3740,26 +3624,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/integration-react@npm:^1.1.4": - version: 1.1.4 - resolution: "@backstage/integration-react@npm:1.1.4" - dependencies: - "@backstage/config": ^1.0.2 - "@backstage/core-components": ^0.11.1 - "@backstage/core-plugin-api": ^1.0.6 - "@backstage/integration": ^1.3.1 - "@backstage/theme": ^0.2.16 - "@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 - peerDependencies: - react: ^16.13.1 || ^17.0.0 - checksum: c17e7e8a545e551fb246a6e879c37975a8dc3bdfe0db04998cbb940bea5ece7df328353f8193764ce68e9f0df14af8cb1a6549bfe8f15a2160312b7339040be6 - languageName: node - linkType: hard - -"@backstage/integration-react@workspace:^, @backstage/integration-react@workspace:packages/integration-react": +"@backstage/integration-react@^1.1.4, @backstage/integration-react@workspace:^, @backstage/integration-react@workspace:packages/integration-react": version: 0.0.0-use.local resolution: "@backstage/integration-react@workspace:packages/integration-react" dependencies: @@ -3786,22 +3651,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/integration@npm:^1.3.1": - version: 1.3.1 - resolution: "@backstage/integration@npm:1.3.1" - dependencies: - "@backstage/config": ^1.0.2 - "@backstage/errors": ^1.1.1 - "@octokit/auth-app": ^4.0.0 - "@octokit/rest": ^19.0.3 - cross-fetch: ^3.1.5 - git-url-parse: ^13.0.0 - lodash: ^4.17.21 - luxon: ^3.0.0 - checksum: e684f6ab52e8ef25db49f8fda38407a6d3153a30d1fbea7615a39af9cdfa8ba064a0b13a09658a28edc3364202bd673d8ceee34f7ec46567a302cfbed3ea945b - languageName: node - linkType: hard - "@backstage/integration@workspace:^, @backstage/integration@workspace:packages/integration": version: 0.0.0-use.local resolution: "@backstage/integration@workspace:packages/integration" @@ -4740,17 +4589,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-common@npm:^1.0.4-next.0, @backstage/plugin-catalog-common@npm:^1.0.6": - version: 1.0.6 - resolution: "@backstage/plugin-catalog-common@npm:1.0.6" - dependencies: - "@backstage/plugin-permission-common": ^0.6.4 - "@backstage/plugin-search-common": ^1.0.1 - checksum: a4f227cc0339ce41a954f024f62752fdda148331ca94dc6d5e90186e67b66e3dd2182467709478309d9eb3031309549afd179742ce182a6dd16f9cbd58550e5c - languageName: node - linkType: hard - -"@backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common": +"@backstage/plugin-catalog-common@^1.0.4-next.0, @backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-common@workspace:plugins/catalog-common" dependencies: @@ -4878,41 +4717,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-react@npm:^1.1.2-next.2, @backstage/plugin-catalog-react@npm:^1.1.4": - version: 1.1.4 - resolution: "@backstage/plugin-catalog-react@npm:1.1.4" - dependencies: - "@backstage/catalog-client": ^1.1.0 - "@backstage/catalog-model": ^1.1.1 - "@backstage/core-components": ^0.11.1 - "@backstage/core-plugin-api": ^1.0.6 - "@backstage/errors": ^1.1.1 - "@backstage/integration": ^1.3.1 - "@backstage/plugin-catalog-common": ^1.0.6 - "@backstage/plugin-permission-common": ^0.6.4 - "@backstage/plugin-permission-react": ^0.4.5 - "@backstage/theme": ^0.2.16 - "@backstage/types": ^1.0.0 - "@backstage/version-bridge": ^1.0.1 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 - classnames: ^2.2.6 - jwt-decode: ^3.1.0 - lodash: ^4.17.21 - qs: ^6.9.4 - react-use: ^17.2.4 - yaml: ^2.0.0 - zen-observable: ^0.8.15 - peerDependencies: - "@types/react": ^16.13.1 || ^17.0.0 - react: ^16.13.1 || ^17.0.0 - react-router: 6.0.0-beta.0 || ^6.3.0 - checksum: 6e0f0405d734a5d8316b490ceee761aadac5cf8e037f4532339b736ddfc61b434ed3b761ed6027c52e492d4592fbbbd0ad0fee260d3e9f6bcd756cedb43cc930 - languageName: node - linkType: hard - -"@backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": +"@backstage/plugin-catalog-react@^1.1.2-next.2, @backstage/plugin-catalog-react@^1.1.4, @backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-react@workspace:plugins/catalog-react" dependencies: @@ -5801,31 +5606,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-home@npm:^0.4.25": - version: 0.4.25 - resolution: "@backstage/plugin-home@npm:0.4.25" - dependencies: - "@backstage/catalog-model": ^1.1.1 - "@backstage/config": ^1.0.2 - "@backstage/core-components": ^0.11.1 - "@backstage/core-plugin-api": ^1.0.6 - "@backstage/plugin-catalog-react": ^1.1.4 - "@backstage/plugin-stack-overflow": ^0.1.5 - "@backstage/theme": ^0.2.16 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 - lodash: ^4.17.21 - react-use: ^17.2.4 - peerDependencies: - "@types/react": ^16.13.1 || ^17.0.0 - react: ^16.13.1 || ^17.0.0 - react-router: 6.0.0-beta.0 || ^6.3.0 - checksum: 76610e6caa8db980c37aa01bb39e6bdb6254a7c765155de2195b377a0d2b45aa3fbaa197c7429405f4fa67c617b3ba10353d0bcd1b820744024462feed206ec4 - languageName: node - linkType: hard - -"@backstage/plugin-home@workspace:^, @backstage/plugin-home@workspace:plugins/home": +"@backstage/plugin-home@^0.4.25, @backstage/plugin-home@workspace:^, @backstage/plugin-home@workspace:plugins/home": version: 0.0.0-use.local resolution: "@backstage/plugin-home@workspace:plugins/home" dependencies: @@ -6327,19 +6108,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-permission-common@npm:^0.6.4": - version: 0.6.4 - resolution: "@backstage/plugin-permission-common@npm:0.6.4" - dependencies: - "@backstage/config": ^1.0.2 - "@backstage/errors": ^1.1.1 - cross-fetch: ^3.1.5 - uuid: ^8.0.0 - zod: ^3.11.6 - checksum: 35e2b43e822a08c5e51cbfef1d797b1e8795bf252e65bab9fb2683d90778edc68586223fc1b714229743943732db4a9abbe9a44d8b3dba383e01ee9075efbc90 - languageName: node - linkType: hard - "@backstage/plugin-permission-common@workspace:^, @backstage/plugin-permission-common@workspace:plugins/permission-common": version: 0.0.0-use.local resolution: "@backstage/plugin-permission-common@workspace:plugins/permission-common" @@ -6377,24 +6145,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-permission-react@npm:^0.4.5": - version: 0.4.5 - resolution: "@backstage/plugin-permission-react@npm:0.4.5" - dependencies: - "@backstage/config": ^1.0.2 - "@backstage/core-plugin-api": ^1.0.6 - "@backstage/plugin-permission-common": ^0.6.4 - cross-fetch: ^3.1.5 - react-use: ^17.2.4 - swr: ^1.1.2 - peerDependencies: - "@types/react": ^16.13.1 || ^17.0.0 - react: ^16.13.1 || ^17.0.0 - react-router: 6.0.0-beta.0 || ^6.3.0 - checksum: bfe7827a7e0a4cc91884ff4943bc0810f9fe3bc992f9cb5784687523df5a0ff68c6e2e68db4b6cc2e3bbbd3bc72db5126688c8b9f63d9a3ae402d7353f363456 - languageName: node - linkType: hard - "@backstage/plugin-permission-react@workspace:^, @backstage/plugin-permission-react@workspace:plugins/permission-react": version: 0.0.0-use.local resolution: "@backstage/plugin-permission-react@workspace:plugins/permission-react" @@ -6872,16 +6622,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-search-common@npm:^1.0.1": - version: 1.0.1 - resolution: "@backstage/plugin-search-common@npm:1.0.1" - dependencies: - "@backstage/plugin-permission-common": ^0.6.4 - "@backstage/types": ^1.0.0 - checksum: 62f9d2d3175f9433f0c4f6cf29a5c3462af91ab95bf01bb6450604993ed2704a6ea1db91e114b601e450f1dddcdd44601cefdd6be1dfdb9d4863a16a23cbba1b - languageName: node - linkType: hard - "@backstage/plugin-search-common@workspace:^, @backstage/plugin-search-common@workspace:plugins/search-common": version: 0.0.0-use.local resolution: "@backstage/plugin-search-common@workspace:plugins/search-common" @@ -7123,30 +6863,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-stack-overflow@npm:^0.1.5": - version: 0.1.5 - resolution: "@backstage/plugin-stack-overflow@npm:0.1.5" - dependencies: - "@backstage/config": ^1.0.2 - "@backstage/core-components": ^0.11.1 - "@backstage/core-plugin-api": ^1.0.6 - "@backstage/plugin-home": ^0.4.25 - "@backstage/plugin-search-common": ^1.0.1 - "@backstage/theme": ^0.2.16 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@testing-library/jest-dom": ^5.10.1 - cross-fetch: ^3.1.5 - lodash: ^4.17.21 - qs: ^6.9.4 - react-use: ^17.2.4 - peerDependencies: - "@types/react": ^16.13.1 || ^17.0.0 - react: ^16.13.1 || ^17.0.0 - checksum: 0f005664f5c7f75a67c6aece733ec47ca8d256859a9502659ae97a4d4cb57b3feeae1d18a4b8ef04340fe49d4915a2b8d84f9119f923cb6d908a1d275a384a89 - languageName: node - linkType: hard - "@backstage/plugin-stack-overflow@workspace:^, @backstage/plugin-stack-overflow@workspace:plugins/stack-overflow": version: 0.0.0-use.local resolution: "@backstage/plugin-stack-overflow@workspace:plugins/stack-overflow" From f5aca2556030015b3011cb44590942bc2e174880 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 18 Oct 2022 12:08:36 +0200 Subject: [PATCH 251/278] Update the explore dev app to work properly MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- plugins/explore/dev/index.tsx | 91 +++++++++++++++++++++++------------ plugins/explore/package.json | 1 + yarn.lock | 1 + 3 files changed, 62 insertions(+), 31 deletions(-) diff --git a/plugins/explore/dev/index.tsx b/plugins/explore/dev/index.tsx index 71795a95b2..19e43d4d0f 100644 --- a/plugins/explore/dev/index.tsx +++ b/plugins/explore/dev/index.tsx @@ -16,12 +16,60 @@ import { Entity } from '@backstage/catalog-model'; import { createDevApp } from '@backstage/dev-utils'; +import { CatalogEntityPage, EntityLayout } from '@backstage/plugin-catalog'; import { CatalogApi, catalogApiRef } from '@backstage/plugin-catalog-react'; import { exploreToolsConfigRef } from '@backstage/plugin-explore-react'; import React from 'react'; import { ExplorePage, explorePlugin } from '../src'; import { exampleTools } from '../src/util/examples'; +const catalogApi: Partial = { + async getEntityByRef(): Promise { + return { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + name: 'example', + annotations: { + 'backstage.io/managed-by-location': 'file:/path/to/catalog-info.yaml', + }, + }, + spec: { + type: 'service', + lifecycle: 'production', + owner: 'guest', + }, + } as Entity; + }, + async getEntities() { + const domainNames = [ + 'playback', + 'artists', + 'payments', + 'analytics', + 'songs', + 'devops', + ]; + return { + items: domainNames.map( + (n, i) => + ({ + apiVersion: 'backstage.io/v1alpha1', + kind: 'Domain', + metadata: { + name: n, + description: `Everything about ${n}`, + tags: i % 2 === 0 ? [n] : undefined, + }, + spec: { + owner: `${n}@example.com`, + }, + } as Entity), + ), + }; + }, +}; + createDevApp() .registerPlugin(explorePlugin) .registerApi({ @@ -36,37 +84,18 @@ createDevApp() .registerApi({ api: catalogApiRef, deps: {}, - factory: () => - ({ - async getEntities() { - const domainNames = [ - 'playback', - 'artists', - 'payments', - 'analytics', - 'songs', - 'devops', - ]; - - return { - items: domainNames.map( - (n, i) => - ({ - apiVersion: 'backstage.io/v1alpha1', - kind: 'Domain', - metadata: { - name: n, - description: `Everything about ${n}`, - tags: i % 2 === 0 ? [n] : undefined, - }, - spec: { - owner: `${n}@example.com`, - }, - } as Entity), - ), - }; - }, - } as CatalogApi), + factory: () => catalogApi as CatalogApi, }) .addPage({ element: , title: 'Explore' }) + .addPage({ + path: '/catalog/:namespace/:kind/:name', + element: , + children: ( + + +

Some Content Here

+
+
+ ), + }) .render(); diff --git a/plugins/explore/package.json b/plugins/explore/package.json index c03993ee24..a0b3ae9926 100644 --- a/plugins/explore/package.json +++ b/plugins/explore/package.json @@ -54,6 +54,7 @@ "@backstage/cli": "workspace:^", "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", + "@backstage/plugin-catalog": "workspace:^", "@backstage/test-utils": "workspace:^", "@testing-library/jest-dom": "^5.10.1", "@testing-library/react": "^12.1.3", diff --git a/yarn.lock b/yarn.lock index 05d79d90b3..d52830d1bf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5371,6 +5371,7 @@ __metadata: "@backstage/core-components": "workspace:^" "@backstage/core-plugin-api": "workspace:^" "@backstage/dev-utils": "workspace:^" + "@backstage/plugin-catalog": "workspace:^" "@backstage/plugin-catalog-react": "workspace:^" "@backstage/plugin-explore-react": "workspace:^" "@backstage/test-utils": "workspace:^" From 3870d6c19fef116dde29297ee950cae7d9e8616b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 18 Oct 2022 11:57:32 +0000 Subject: [PATCH 252/278] Update dependency @azure/storage-blob to v12.12.0 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 47b6d4247a..35e5b898d6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -521,8 +521,8 @@ __metadata: linkType: hard "@azure/storage-blob@npm:^12.5.0": - version: 12.11.0 - resolution: "@azure/storage-blob@npm:12.11.0" + version: 12.12.0 + resolution: "@azure/storage-blob@npm:12.12.0" dependencies: "@azure/abort-controller": ^1.0.0 "@azure/core-http": ^2.0.0 @@ -532,7 +532,7 @@ __metadata: "@azure/logger": ^1.0.0 events: ^3.0.0 tslib: ^2.2.0 - checksum: f43501d66f10fb3f8e63b0e1e6e90827240e0ff41d722181c52b3abb13fa1b1b89dd985d0b6e488f6ffeee030e4afc1b6a9b6e2f18078ff6472dc494c5b199cb + checksum: bb7f6514a251f8ec337718088b8c9ba80e27b34c786b7fb380fdca19eb3735a0da917dcfcdacef27d0eb256d007a37f89f3d6b08c55405cbcc04685f2a51da3b languageName: node linkType: hard From 24fb30fdb398ac599eb77159a295e3d9a6d1cd4b Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Tue, 18 Oct 2022 13:00:27 +0100 Subject: [PATCH 253/278] Updated permissions documentation to match paramsSchema changes Signed-off-by: Harry Hogg --- docs/permissions/custom-rules.md | 22 ++++++++++++------- .../03-adding-a-resource-permission-check.md | 12 +++++++--- ...04-authorizing-access-to-paginated-data.md | 4 +++- docs/permissions/writing-a-policy.md | 12 +++++----- 4 files changed, 32 insertions(+), 18 deletions(-) diff --git a/docs/permissions/custom-rules.md b/docs/permissions/custom-rules.md index bef1c0941f..9407dc407a 100644 --- a/docs/permissions/custom-rules.md +++ b/docs/permissions/custom-rules.md @@ -14,12 +14,18 @@ Plugins should export a rule factory that provides type-safety that ensures comp import type { Entity } from '@backstage/plugin-catalog-model'; import { createCatalogPermissionRule } from '@backstage/plugin-catalog-backend/alpha'; import { createConditionFactory } from '@backstage/plugin-permission-node'; +import { z } from 'zod'; export const isInSystemRule = createCatalogPermissionRule({ name: 'IS_IN_SYSTEM', description: 'Checks if an entity is part of the system provided', resourceType: 'catalog-entity', - apply: (resource: Entity, systemRef: string) => { + paramsSchema: z.object({ + systemRef: z + .string() + .describe('SystemRef to check the resource is part of'), + }), + apply: (resource: Entity, { systemRef }) => { if (!resource.relations) { return false; } @@ -28,7 +34,7 @@ export const isInSystemRule = createCatalogPermissionRule({ .filter(relation => relation.type === 'partOf') .some(relation => relation.targetRef === systemRef); }, - toQuery: (systemRef: string) => ({ + toQuery: ({ systemRef }) => ({ key: 'relations.partOf', values: [systemRef], }), @@ -85,14 +91,14 @@ class TestPermissionPolicy implements PermissionPolicy { if (isResourcePermission(request.permission, 'catalog-entity')) { return createCatalogConditionalDecision( request.permission, -- catalogConditions.isEntityOwner( -- user?.identity.ownershipEntityRefs ?? [], -- ), +- catalogConditions.isEntityOwner({ +- claims: user?.identity.ownershipEntityRefs ?? [], +- }), + { + anyOf: [ -+ catalogConditions.isEntityOwner( -+ user?.identity.ownershipEntityRefs ?? [] -+ ), ++ catalogConditions.isEntityOwner({ ++ claims: user?.identity.ownershipEntityRefs ?? [] ++ }), + isInSystem('interviewing') + ] + } diff --git a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md index 5bace9ad7b..a53f250d45 100644 --- a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md +++ b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md @@ -84,6 +84,7 @@ Create a new `plugins/todo-list-backend/src/service/rules.ts` file and append th ```typescript import { makeCreatePermissionRule } from '@backstage/plugin-permission-node'; import { TODO_LIST_RESOURCE_TYPE } from '@internal/plugin-todo-list-common'; +import { z } from 'zod; import { Todo, TodoFilter } from './todos'; export const createTodoListPermissionRule = makeCreatePermissionRule< @@ -95,10 +96,13 @@ export const isOwner = createTodoListPermissionRule({ name: 'IS_OWNER', description: 'Should allow only if the todo belongs to the user', resourceType: TODO_LIST_RESOURCE_TYPE, - apply: (resource: Todo, userId: string) => { + paramsSchema: z.object({ + userId: z.string().describe('User ID to match on the resource') + }) + apply: (resource: Todo, { userId }) => { return resource.author === userId; }, - toQuery: (userId: string) => { + toQuery: ({ userId }) => { return { property: 'author', values: [userId], @@ -223,7 +227,9 @@ Let's go back to the permission policy's handle function and try to authorize ou + if (isPermission(request.permission, todoListUpdatePermission)) { + return createTodoListConditionalDecision( + request.permission, -+ todoListConditions.isOwner(user?.identity.userEntityRef), ++ todoListConditions.isOwner({ ++ userId: user?.identity.userEntityRef ?? '', ++ }), + ); + } + diff --git a/docs/permissions/plugin-authors/04-authorizing-access-to-paginated-data.md b/docs/permissions/plugin-authors/04-authorizing-access-to-paginated-data.md index c813ba594c..8ddcffdcd9 100644 --- a/docs/permissions/plugin-authors/04-authorizing-access-to-paginated-data.md +++ b/docs/permissions/plugin-authors/04-authorizing-access-to-paginated-data.md @@ -144,7 +144,9 @@ import { + ) { return createTodoListConditionalDecision( request.permission, - todoListConditions.isOwner(user?.identity.userEntityRef), + todoListConditions.isOwner({ + userId: user?.identity.userEntityRef + }), ); } ``` diff --git a/docs/permissions/writing-a-policy.md b/docs/permissions/writing-a-policy.md index c29424241c..7e741ae48f 100644 --- a/docs/permissions/writing-a-policy.md +++ b/docs/permissions/writing-a-policy.md @@ -70,9 +70,9 @@ Let's change the policy to the following: - }; + return createCatalogConditionalDecision( + request.permission, -+ catalogConditions.isEntityOwner( -+ user?.identity.ownershipEntityRefs ?? [], -+ ), ++ catalogConditions.isEntityOwner({ ++ claims: user?.identity.ownershipEntityRefs ?? [], ++ }), + ); } @@ -119,9 +119,9 @@ class TestPermissionPolicy implements PermissionPolicy { + if (isResourcePermission(request.permission, 'catalog-entity')) { return createCatalogConditionalDecision( request.permission, - catalogConditions.isEntityOwner( - user?.identity.ownershipEntityRefs ?? [], - ), + catalogConditions.isEntityOwner({ + claims: user?.identity.ownershipEntityRefs ?? [], + }), ); } From 6666ea13fe7a135956efa33666805ce717a2b460 Mon Sep 17 00:00:00 2001 From: Mehul Gohil Date: Tue, 18 Oct 2022 17:44:49 +0530 Subject: [PATCH 254/278] Update writing-custom-field-extensions.md Updated doc reference for validation import Signed-off-by: Mehul Gohil --- .../software-templates/writing-custom-field-extensions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/features/software-templates/writing-custom-field-extensions.md b/docs/features/software-templates/writing-custom-field-extensions.md index afef2c3372..f089e6afd9 100644 --- a/docs/features/software-templates/writing-custom-field-extensions.md +++ b/docs/features/software-templates/writing-custom-field-extensions.md @@ -82,7 +82,7 @@ import { createScaffolderFieldExtension, } from '@backstage/plugin-scaffolder'; import { MyCustomExtension } from './MyCustomExtension'; -import { myCustomValidation } from './validation'; +import { myCustomValidation } from './MyCustomExtension'; export const MyCustomFieldExtension = scaffolderPlugin.provide( createScaffolderFieldExtension({ From 4520ffa1b4955326e48bed693f0c8b84347e0f69 Mon Sep 17 00:00:00 2001 From: Mehul Gohil Date: Tue, 18 Oct 2022 17:53:54 +0530 Subject: [PATCH 255/278] Update writing-custom-field-extensions.md refactored the import Signed-off-by: Mehul Gohil --- .../software-templates/writing-custom-field-extensions.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/features/software-templates/writing-custom-field-extensions.md b/docs/features/software-templates/writing-custom-field-extensions.md index f089e6afd9..b4c4d2d4ce 100644 --- a/docs/features/software-templates/writing-custom-field-extensions.md +++ b/docs/features/software-templates/writing-custom-field-extensions.md @@ -81,8 +81,7 @@ import { scaffolderPlugin, createScaffolderFieldExtension, } from '@backstage/plugin-scaffolder'; -import { MyCustomExtension } from './MyCustomExtension'; -import { myCustomValidation } from './MyCustomExtension'; +import { MyCustomExtension, myCustomValidation } from './MyCustomExtension'; export const MyCustomFieldExtension = scaffolderPlugin.provide( createScaffolderFieldExtension({ From c3d13d71e9135a351df024c4c0b7bc7bdb657a60 Mon Sep 17 00:00:00 2001 From: blam Date: Tue, 18 Oct 2022 14:32:35 +0200 Subject: [PATCH 256/278] chore: enter pre-release Signed-off-by: blam --- .changeset/pre.json | 179 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 .changeset/pre.json diff --git a/.changeset/pre.json b/.changeset/pre.json new file mode 100644 index 0000000000..0bdcd4a8d9 --- /dev/null +++ b/.changeset/pre.json @@ -0,0 +1,179 @@ +{ + "mode": "pre", + "tag": "next", + "initialVersions": { + "example-app": "0.2.76", + "@backstage/app-defaults": "1.0.7", + "example-backend": "0.2.76", + "@backstage/backend-app-api": "0.2.2", + "@backstage/backend-common": "0.15.2", + "@backstage/backend-defaults": "0.1.2", + "example-backend-next": "0.0.4", + "@backstage/backend-plugin-api": "0.1.3", + "@backstage/backend-tasks": "0.3.6", + "@backstage/backend-test-utils": "0.1.29", + "@backstage/catalog-client": "1.1.1", + "@backstage/catalog-model": "1.1.2", + "@backstage/cli": "0.20.0", + "@backstage/cli-common": "0.1.10", + "@backstage/codemods": "0.1.40", + "@backstage/config": "1.0.3", + "@backstage/config-loader": "1.1.5", + "@backstage/core-app-api": "1.1.1", + "@backstage/core-components": "0.11.2", + "@backstage/core-plugin-api": "1.0.7", + "@backstage/create-app": "0.4.32", + "@backstage/dev-utils": "1.0.7", + "e2e-test": "0.2.0", + "@backstage/errors": "1.1.2", + "@backstage/integration": "1.3.2", + "@backstage/integration-react": "1.1.5", + "@backstage/release-manifests": "0.0.6", + "@techdocs/cli": "1.2.2", + "techdocs-cli-embedded-app": "0.2.75", + "@backstage/test-utils": "1.2.1", + "@backstage/theme": "0.2.16", + "@backstage/types": "1.0.0", + "@backstage/version-bridge": "1.0.1", + "@backstage/plugin-adr": "0.2.2", + "@backstage/plugin-adr-backend": "0.2.2", + "@backstage/plugin-adr-common": "0.2.2", + "@backstage/plugin-airbrake": "0.3.10", + "@backstage/plugin-airbrake-backend": "0.2.10", + "@backstage/plugin-allure": "0.1.26", + "@backstage/plugin-analytics-module-ga": "0.1.21", + "@backstage/plugin-apache-airflow": "0.2.3", + "@backstage/plugin-api-docs": "0.8.10", + "@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.0", + "@backstage/plugin-apollo-explorer": "0.1.3", + "@backstage/plugin-app-backend": "0.3.37", + "@backstage/plugin-auth-backend": "0.17.0", + "@backstage/plugin-auth-node": "0.2.6", + "@backstage/plugin-azure-devops": "0.2.1", + "@backstage/plugin-azure-devops-backend": "0.3.16", + "@backstage/plugin-azure-devops-common": "0.3.0", + "@backstage/plugin-badges": "0.2.34", + "@backstage/plugin-badges-backend": "0.1.31", + "@backstage/plugin-bazaar": "0.1.25", + "@backstage/plugin-bazaar-backend": "0.2.0", + "@backstage/plugin-bitbucket-cloud-common": "0.2.0", + "@backstage/plugin-bitrise": "0.1.37", + "@backstage/plugin-catalog": "1.6.0", + "@backstage/plugin-catalog-backend": "1.5.0", + "@backstage/plugin-catalog-backend-module-aws": "0.1.10", + "@backstage/plugin-catalog-backend-module-azure": "0.1.8", + "@backstage/plugin-catalog-backend-module-bitbucket": "0.2.4", + "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.1.4", + "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.1.2", + "@backstage/plugin-catalog-backend-module-gerrit": "0.1.5", + "@backstage/plugin-catalog-backend-module-github": "0.1.8", + "@backstage/plugin-catalog-backend-module-gitlab": "0.1.8", + "@backstage/plugin-catalog-backend-module-ldap": "0.5.4", + "@backstage/plugin-catalog-backend-module-msgraph": "0.4.3", + "@backstage/plugin-catalog-backend-module-openapi": "0.1.3", + "@backstage/plugin-catalog-common": "1.0.7", + "@internal/plugin-catalog-customized": "0.0.3", + "@backstage/plugin-catalog-graph": "0.2.22", + "@backstage/plugin-catalog-graphql": "0.3.14", + "@backstage/plugin-catalog-import": "0.9.0", + "@backstage/plugin-catalog-node": "1.2.0", + "@backstage/plugin-catalog-react": "1.2.0", + "@backstage/plugin-cicd-statistics": "0.1.12", + "@backstage/plugin-cicd-statistics-module-gitlab": "0.1.6", + "@backstage/plugin-circleci": "0.3.10", + "@backstage/plugin-cloudbuild": "0.3.10", + "@backstage/plugin-code-climate": "0.1.10", + "@backstage/plugin-code-coverage": "0.2.3", + "@backstage/plugin-code-coverage-backend": "0.2.3", + "@backstage/plugin-codescene": "0.1.5", + "@backstage/plugin-config-schema": "0.1.33", + "@backstage/plugin-cost-insights": "0.11.32", + "@backstage/plugin-cost-insights-common": "0.1.1", + "@backstage/plugin-dynatrace": "1.0.0", + "@internal/plugin-todo-list": "1.0.6", + "@internal/plugin-todo-list-backend": "1.0.6", + "@internal/plugin-todo-list-common": "1.0.5", + "@backstage/plugin-explore": "0.3.41", + "@backstage/plugin-explore-react": "0.0.22", + "@backstage/plugin-firehydrant": "0.1.27", + "@backstage/plugin-fossa": "0.2.42", + "@backstage/plugin-gcalendar": "0.3.6", + "@backstage/plugin-gcp-projects": "0.3.29", + "@backstage/plugin-git-release-manager": "0.3.23", + "@backstage/plugin-github-actions": "0.5.10", + "@backstage/plugin-github-deployments": "0.1.41", + "@backstage/plugin-github-issues": "0.1.2", + "@backstage/plugin-github-pull-requests-board": "0.1.4", + "@backstage/plugin-gitops-profiles": "0.3.28", + "@backstage/plugin-gocd": "0.1.16", + "@backstage/plugin-graphiql": "0.2.42", + "@backstage/plugin-graphql-backend": "0.1.27", + "@backstage/plugin-home": "0.4.26", + "@backstage/plugin-ilert": "0.1.36", + "@backstage/plugin-jenkins": "0.7.9", + "@backstage/plugin-jenkins-backend": "0.1.27", + "@backstage/plugin-jenkins-common": "0.1.9", + "@backstage/plugin-kafka": "0.3.10", + "@backstage/plugin-kafka-backend": "0.2.30", + "@backstage/plugin-kubernetes": "0.7.3", + "@backstage/plugin-kubernetes-backend": "0.7.3", + "@backstage/plugin-kubernetes-common": "0.4.3", + "@backstage/plugin-lighthouse": "0.3.10", + "@backstage/plugin-newrelic": "0.3.28", + "@backstage/plugin-newrelic-dashboard": "0.2.3", + "@backstage/plugin-org": "0.5.10", + "@backstage/plugin-pagerduty": "0.5.3", + "@backstage/plugin-periskop": "0.1.8", + "@backstage/plugin-periskop-backend": "0.1.8", + "@backstage/plugin-permission-backend": "0.5.12", + "@backstage/plugin-permission-common": "0.7.0", + "@backstage/plugin-permission-node": "0.7.0", + "@backstage/plugin-permission-react": "0.4.6", + "@backstage/plugin-playlist": "0.1.1", + "@backstage/plugin-playlist-backend": "0.2.0", + "@backstage/plugin-playlist-common": "0.1.1", + "@backstage/plugin-proxy-backend": "0.2.31", + "@backstage/plugin-rollbar": "0.4.10", + "@backstage/plugin-rollbar-backend": "0.1.34", + "@backstage/plugin-scaffolder": "1.7.0", + "@backstage/plugin-scaffolder-backend": "1.7.0", + "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.2.12", + "@backstage/plugin-scaffolder-backend-module-rails": "0.4.5", + "@backstage/plugin-scaffolder-backend-module-yeoman": "0.2.10", + "@backstage/plugin-scaffolder-common": "1.2.1", + "@backstage/plugin-search": "1.0.3", + "@backstage/plugin-search-backend": "1.1.0", + "@backstage/plugin-search-backend-module-elasticsearch": "1.0.3", + "@backstage/plugin-search-backend-module-pg": "0.4.1", + "@backstage/plugin-search-backend-node": "1.0.3", + "@backstage/plugin-search-common": "1.1.0", + "@backstage/plugin-search-react": "1.2.0", + "@backstage/plugin-sentry": "0.4.3", + "@backstage/plugin-shortcuts": "0.3.2", + "@backstage/plugin-sonarqube": "0.4.2", + "@backstage/plugin-sonarqube-backend": "0.1.2", + "@backstage/plugin-splunk-on-call": "0.3.34", + "@backstage/plugin-stack-overflow": "0.1.6", + "@backstage/plugin-stack-overflow-backend": "0.1.6", + "@backstage/plugin-tech-insights": "0.3.1", + "@backstage/plugin-tech-insights-backend": "0.5.3", + "@backstage/plugin-tech-insights-backend-module-jsonfc": "0.1.21", + "@backstage/plugin-tech-insights-common": "0.2.7", + "@backstage/plugin-tech-insights-node": "0.3.5", + "@backstage/plugin-tech-radar": "0.5.17", + "@backstage/plugin-techdocs": "1.3.3", + "@backstage/plugin-techdocs-addons-test-utils": "1.0.5", + "@backstage/plugin-techdocs-backend": "1.4.0", + "@backstage/plugin-techdocs-module-addons-contrib": "1.0.5", + "@backstage/plugin-techdocs-node": "1.4.1", + "@backstage/plugin-techdocs-react": "1.0.5", + "@backstage/plugin-todo": "0.2.12", + "@backstage/plugin-todo-backend": "0.1.34", + "@backstage/plugin-user-settings": "0.5.0", + "@backstage/plugin-user-settings-backend": "0.1.1", + "@backstage/plugin-vault": "0.1.4", + "@backstage/plugin-vault-backend": "0.2.3", + "@backstage/plugin-xcmetrics": "0.2.30" + }, + "changesets": [] +} From b939494552caf54136fd7731d9691877632a7663 Mon Sep 17 00:00:00 2001 From: Harry Hogg Date: Tue, 18 Oct 2022 13:32:48 +0100 Subject: [PATCH 257/278] Fixed import in docs Signed-off-by: Harry Hogg --- .../plugin-authors/03-adding-a-resource-permission-check.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md index a53f250d45..8913b6d438 100644 --- a/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md +++ b/docs/permissions/plugin-authors/03-adding-a-resource-permission-check.md @@ -84,7 +84,7 @@ Create a new `plugins/todo-list-backend/src/service/rules.ts` file and append th ```typescript import { makeCreatePermissionRule } from '@backstage/plugin-permission-node'; import { TODO_LIST_RESOURCE_TYPE } from '@internal/plugin-todo-list-common'; -import { z } from 'zod; +import { z } from 'zod'; import { Todo, TodoFilter } from './todos'; export const createTodoListPermissionRule = makeCreatePermissionRule< From 0229c6b937bebc5dd37496e8a4b78970d4da6765 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 18 Oct 2022 14:25:52 +0000 Subject: [PATCH 258/278] Update dependency @google-cloud/container to v4.3.0 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 47b6d4247a..eec1b734c9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8167,11 +8167,11 @@ __metadata: linkType: hard "@google-cloud/container@npm:^4.0.0": - version: 4.1.3 - resolution: "@google-cloud/container@npm:4.1.3" + version: 4.3.0 + resolution: "@google-cloud/container@npm:4.3.0" dependencies: google-gax: ^3.3.0 - checksum: d9554ed344e065ec16b9d281eeecd2796bf5c90149358e724596c6e2bc97c6b9ea16a9dbcf4805e29003e4bcaf3aaa85c70609b7b9b1db0fbae6c9018e55b6d8 + checksum: cc1dc2ca7f6b47bac0d374013e78b05372f25dce7a3f84d799899af274d26fa22f23d2554a66ca1db528c3bbbec1cfbac86dfa9fc72cc78f175bcb737900b3ed languageName: node linkType: hard From 34db0db49d105799b3a3605925e9160e09e9a3fb Mon Sep 17 00:00:00 2001 From: Wesley Pattison Date: Tue, 18 Oct 2022 18:08:47 +0200 Subject: [PATCH 259/278] PR feedback Signed-off-by: Wesley Pattison --- microsite/data/plugins/azure-sites.yaml | 4 +- microsite/static/img/azurefunctions-icon.svg | 1 - plugins/azure-sites-backend/README.md | 12 +++-- plugins/azure-sites-backend/api-report.md | 30 +++++------ plugins/azure-sites-backend/package.json | 1 - plugins/azure-sites-backend/schema.d.ts | 2 +- .../src/api/AzureSitesApi.ts | 50 ++++++++----------- plugins/azure-sites-backend/src/config.ts | 8 +-- plugins/azure-sites/README.md | 8 +-- plugins/azure-sites/package.json | 1 - 10 files changed, 55 insertions(+), 62 deletions(-) delete mode 100644 microsite/static/img/azurefunctions-icon.svg diff --git a/microsite/data/plugins/azure-sites.yaml b/microsite/data/plugins/azure-sites.yaml index edfba635fc..8331b3eeba 100644 --- a/microsite/data/plugins/azure-sites.yaml +++ b/microsite/data/plugins/azure-sites.yaml @@ -1,9 +1,9 @@ --- -title: Azure +title: Azure Sites author: FRISS authorUrl: https://friss.com category: Infrastructure -description: View related Azure information for your components in Backstage. +description: Azure Sites (Apps & Functions) support for a given entity. View the current status of the site, quickly jump to site's Overview page, or Log Stream page. documentation: https://github.com/backstage/backstage/tree/master/plugins/azure-sites iconUrl: img/azure-icon.svg npmPackageName: '@backstage/plugin-azure-sites' diff --git a/microsite/static/img/azurefunctions-icon.svg b/microsite/static/img/azurefunctions-icon.svg deleted file mode 100644 index 0c2435bf42..0000000000 --- a/microsite/static/img/azurefunctions-icon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/plugins/azure-sites-backend/README.md b/plugins/azure-sites-backend/README.md index b655f1fb64..5f19267499 100644 --- a/plugins/azure-sites-backend/README.md +++ b/plugins/azure-sites-backend/README.md @@ -1,4 +1,4 @@ -# Azure Backend +# Azure Sites Backend Simple plugin that proxies requests to the Azure Portal API through Azure SDK JavaScript libraries. @@ -6,14 +6,14 @@ _Inspired by [roadie.io AWS Lamda plugin](https://roadie.io/backstage/plugins/aw ## Setup -The following sections will help you get the Azure Backend plugin setup and running. +The following sections will help you get the Azure Sites Backend plugin setup and running. ### Configuration The Azure plugin requires the following YAML to be added to your app-config.yaml: ```yaml -azureFunctions: +azureSites: domain: tenantId: clientId: @@ -70,11 +70,13 @@ Here's how to get the backend plugin up and running: async function main() { // ... // Add this line under the other lines that follow the useHotMemoize pattern - const azureEnv = useHotMemoize(module, () => createEnv('azure')); + const azureSitesEnv = useHotMemoize(module, () => + createEnv('azure-sites'), + ); // ... // Insert this line under the other lines that add their routers to apiRouter in the same way - apiRouter.use('/azure', await azure(azureEnv)); + apiRouter.use('/azure-sites', await azure(azureSitesEnv)); } ``` diff --git a/plugins/azure-sites-backend/api-report.md b/plugins/azure-sites-backend/api-report.md index 5c868ad507..751ff3f033 100644 --- a/plugins/azure-sites-backend/api-report.md +++ b/plugins/azure-sites-backend/api-report.md @@ -11,7 +11,20 @@ import express from 'express'; import { Logger } from 'winston'; // @public (undocumented) -export class AzureFunctionsConfig { +export class AzureSitesApi { + constructor(config: AzureSitesConfig); + // (undocumented) + static fromConfig(config: Config): AzureSitesApi; + // (undocumented) + list(request: AzureSiteListRequest): Promise; + // (undocumented) + start(request: AzureSiteStartStopRequest): Promise; + // (undocumented) + stop(request: AzureSiteStartStopRequest): Promise; +} + +// @public (undocumented) +export class AzureSitesConfig { constructor( domain: string, tenantId: string, @@ -26,26 +39,13 @@ export class AzureFunctionsConfig { // (undocumented) readonly domain: string; // (undocumented) - static fromConfig(config: Config): AzureFunctionsConfig; + static fromConfig(config: Config): AzureSitesConfig; // (undocumented) readonly subscriptions?: string[] | undefined; // (undocumented) readonly tenantId: string; } -// @public (undocumented) -export class AzureSitesApi { - constructor(config: AzureFunctionsConfig); - // (undocumented) - static fromConfig(config: Config): AzureSitesApi; - // (undocumented) - list(request: AzureSiteListRequest): Promise; - // (undocumented) - start(request: AzureSiteStartStopRequest): Promise; - // (undocumented) - stop(request: AzureSiteStartStopRequest): Promise; -} - // @public (undocumented) export function createRouter(options: RouterOptions): Promise; diff --git a/plugins/azure-sites-backend/package.json b/plugins/azure-sites-backend/package.json index c1f801bb71..6930f36587 100644 --- a/plugins/azure-sites-backend/package.json +++ b/plugins/azure-sites-backend/package.json @@ -4,7 +4,6 @@ "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", - "private": true, "publishConfig": { "access": "public", "main": "dist/index.cjs.js", diff --git a/plugins/azure-sites-backend/schema.d.ts b/plugins/azure-sites-backend/schema.d.ts index b94590ddb5..19a12d11a1 100644 --- a/plugins/azure-sites-backend/schema.d.ts +++ b/plugins/azure-sites-backend/schema.d.ts @@ -15,7 +15,7 @@ */ export interface Config { - azureFunctions: { + azureSites: { /** @visibility backend */ domain: string; /** @visibility backend */ diff --git a/plugins/azure-sites-backend/src/api/AzureSitesApi.ts b/plugins/azure-sites-backend/src/api/AzureSitesApi.ts index 70dc9bba69..73e92ea6a0 100644 --- a/plugins/azure-sites-backend/src/api/AzureSitesApi.ts +++ b/plugins/azure-sites-backend/src/api/AzureSitesApi.ts @@ -27,7 +27,7 @@ import { AzureSiteListResponse, AzureSiteStartStopRequest, } from '@backstage/plugin-azure-sites-common'; -import { AzureFunctionsConfig } from '../config'; +import { AzureSitesConfig } from '../config'; /** @public */ export class AzureSitesApi { @@ -35,13 +35,13 @@ export class AzureSitesApi { `https://portal.azure.com/#@${domain}/resource`; private readonly client: ResourceGraphClient; - constructor(private readonly config: AzureFunctionsConfig) { + constructor(private readonly config: AzureSitesConfig) { const creds = this.getCredentials(config); this.client = new ResourceGraphClient(creds); } - private getCredentials(config: AzureFunctionsConfig) { + private getCredentials(config: AzureSitesConfig) { return config.clientId && config.clientSecret ? new ClientSecretCredential( config.tenantId, @@ -52,7 +52,7 @@ export class AzureSitesApi { } static fromConfig(config: Config): AzureSitesApi { - return new AzureSitesApi(AzureFunctionsConfig.fromConfig(config)); + return new AzureSitesApi(AzureSitesConfig.fromConfig(config)); } async start(request: AzureSiteStartStopRequest): Promise { @@ -73,31 +73,25 @@ export class AzureSitesApi { async list(request: AzureSiteListRequest): Promise { const items: AzureSite[] = []; - try { - const result = await this.client.resources({ - query: `resources | where type == 'microsoft.web/sites' | where name contains '${request.name}'`, - subscriptions: this.config.subscriptions, + const result = await this.client.resources({ + query: `resources | where type == 'microsoft.web/sites' | where name contains '${request.name}'`, + subscriptions: this.config.subscriptions, + }); + for (const v of result.data) { + items.push({ + href: `${this.baseHref(this.config.domain)}${v.id!}`, + logstreamHref: `${this.baseHref(this.config.domain)}${v.id!}/logStream`, + name: v.name!, + kind: v.kind!, + resourceGroup: v.resourceGroup!, + subscription: v.id!.match(/\w{8}\-\w{4}\-\w{4}\-\w{4}\-\w{12}/)[0], + location: v.location!, + lastModifiedDate: v.properties.lastModifiedTimeUtc!, + usageState: v.properties.usageState!, + state: v.properties.state!, + containerSize: v.properties.containerSize!, + tags: v.properties.tags!, }); - for (const v of result.data) { - items.push({ - href: `${this.baseHref(this.config.domain)}${v.id!}`, - logstreamHref: `${this.baseHref( - this.config.domain, - )}${v.id!}/logStream`, - name: v.name!, - kind: v.kind!, - resourceGroup: v.resourceGroup!, - subscription: v.id!.match(/\w{8}\-\w{4}\-\w{4}\-\w{4}\-\w{12}/)[0], - location: v.location!, - lastModifiedDate: v.properties.lastModifiedTimeUtc!, - usageState: v.properties.usageState!, - state: v.properties.state!, - containerSize: v.properties.containerSize!, - tags: v.properties.tags!, - }); - } - } catch (ex: any) { - throw ex; } return { items: items }; } diff --git a/plugins/azure-sites-backend/src/config.ts b/plugins/azure-sites-backend/src/config.ts index 70301a17fa..3475175cb5 100644 --- a/plugins/azure-sites-backend/src/config.ts +++ b/plugins/azure-sites-backend/src/config.ts @@ -17,7 +17,7 @@ import { Config } from '@backstage/config'; /** @public */ -export class AzureFunctionsConfig { +export class AzureSitesConfig { constructor( public readonly domain: string, public readonly tenantId: string, @@ -26,10 +26,10 @@ export class AzureFunctionsConfig { public readonly clientSecret?: string, ) {} - static fromConfig(config: Config): AzureFunctionsConfig { - const azConfig = config.getConfig('azureFunctions'); + static fromConfig(config: Config): AzureSitesConfig { + const azConfig = config.getConfig('azureSites'); - return new AzureFunctionsConfig( + return new AzureSitesConfig( azConfig.getString('domain'), azConfig.getString('tenantId'), azConfig diff --git a/plugins/azure-sites/README.md b/plugins/azure-sites/README.md index 2f69518078..f240dab140 100644 --- a/plugins/azure-sites/README.md +++ b/plugins/azure-sites/README.md @@ -1,4 +1,4 @@ -# Azure Plugin +# Azure Sites Plugin ![preview of Azure table](docs/functions-table.png) @@ -12,13 +12,13 @@ _Inspired by [roadie.io AWS Lamda plugin](https://roadie.io/backstage/plugins/aw The following sections will help you get the Azure plugin setup and running -### Azure Backend +### Azure Sites Backend -You need to set up the Azure backend plugin before you move forward with any of these steps if you haven't already. +You need to set up the Azure Sites Backend plugin before you move forward with any of these steps if you haven't already. ### Entity Annotation -To be able to use the Azure plugin you need to add the following annotation to any entities you want to use it with: +To be able to use the Azure Sites plugin you need to add the following annotation to any entities you want to use it with: ```yaml azure.com/microsoft-web-sites: diff --git a/plugins/azure-sites/package.json b/plugins/azure-sites/package.json index 8b9ee9f25d..2ffe0225e6 100644 --- a/plugins/azure-sites/package.json +++ b/plugins/azure-sites/package.json @@ -4,7 +4,6 @@ "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", - "private": true, "publishConfig": { "access": "public", "main": "dist/index.esm.js", From 7943f0efc987943fa326b9dcfb5a5128601d8277 Mon Sep 17 00:00:00 2001 From: Wesley Pattison Date: Tue, 18 Oct 2022 18:11:28 +0200 Subject: [PATCH 260/278] remove icon usage Signed-off-by: Wesley Pattison --- microsite/data/plugins/azure-sites.yaml | 1 - microsite/static/img/azure-icon.svg | 23 ----------------------- 2 files changed, 24 deletions(-) delete mode 100644 microsite/static/img/azure-icon.svg diff --git a/microsite/data/plugins/azure-sites.yaml b/microsite/data/plugins/azure-sites.yaml index 8331b3eeba..3ea9d0439b 100644 --- a/microsite/data/plugins/azure-sites.yaml +++ b/microsite/data/plugins/azure-sites.yaml @@ -5,5 +5,4 @@ authorUrl: https://friss.com category: Infrastructure description: Azure Sites (Apps & Functions) support for a given entity. View the current status of the site, quickly jump to site's Overview page, or Log Stream page. documentation: https://github.com/backstage/backstage/tree/master/plugins/azure-sites -iconUrl: img/azure-icon.svg npmPackageName: '@backstage/plugin-azure-sites' diff --git a/microsite/static/img/azure-icon.svg b/microsite/static/img/azure-icon.svg deleted file mode 100644 index 23b8f31af4..0000000000 --- a/microsite/static/img/azure-icon.svg +++ /dev/null @@ -1,23 +0,0 @@ - From 5f695c219a9cfa39f6ddd998798157cc259d3808 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Wed, 12 Oct 2022 16:36:53 -0500 Subject: [PATCH 261/278] Set searchTooltip to Filter Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- .changeset/big-islands-add.md | 5 +++++ packages/core-components/src/components/Table/Table.tsx | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 .changeset/big-islands-add.md diff --git a/.changeset/big-islands-add.md b/.changeset/big-islands-add.md new file mode 100644 index 0000000000..4a6511562b --- /dev/null +++ b/.changeset/big-islands-add.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Set the `searchTooltip` to "Filter" to follow how the `searchPlaceholder` is set making this more consistent diff --git a/packages/core-components/src/components/Table/Table.tsx b/packages/core-components/src/components/Table/Table.tsx index 49538b680a..81471324a0 100644 --- a/packages/core-components/src/components/Table/Table.tsx +++ b/packages/core-components/src/components/Table/Table.tsx @@ -516,7 +516,9 @@ export function Table(props: TableProps) { } data={typeof data === 'function' ? data : tableData} style={{ width: '100%' }} - localization={{ toolbar: { searchPlaceholder: 'Filter' } }} + localization={{ + toolbar: { searchPlaceholder: 'Filter', searchTooltip: 'Filter' }, + }} {...restProps} />
From cea2854570019655b552cba80bf1fd2884adeef7 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Tue, 18 Oct 2022 19:45:39 -0500 Subject: [PATCH 262/278] Fixed failing test Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- .../components/Problems/ProblemsTable/ProblemsTable.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/dynatrace/src/components/Problems/ProblemsTable/ProblemsTable.test.tsx b/plugins/dynatrace/src/components/Problems/ProblemsTable/ProblemsTable.test.tsx index aaa3ea0024..c33d7bf975 100644 --- a/plugins/dynatrace/src/components/Problems/ProblemsTable/ProblemsTable.test.tsx +++ b/plugins/dynatrace/src/components/Problems/ProblemsTable/ProblemsTable.test.tsx @@ -31,6 +31,6 @@ describe('ProblemsTable', () => { , , ); - expect(await rendered.findByTitle('Search')).toBeInTheDocument(); + expect(await rendered.findByTitle('Filter')).toBeInTheDocument(); }); }); From e0f43f9ce13113aaa69ba37d57f368016bc18116 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 19 Oct 2022 00:48:57 +0000 Subject: [PATCH 263/278] Update dependency @google-cloud/storage to v6.5.3 Signed-off-by: Renovate Bot --- yarn.lock | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index 46ee5a92eb..20f76849a4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8212,14 +8212,13 @@ __metadata: linkType: hard "@google-cloud/storage@npm:^6.0.0": - version: 6.5.2 - resolution: "@google-cloud/storage@npm:6.5.2" + version: 6.5.3 + resolution: "@google-cloud/storage@npm:6.5.3" dependencies: "@google-cloud/paginator": ^3.0.7 "@google-cloud/projectify": ^3.0.0 "@google-cloud/promisify": ^3.0.0 abort-controller: ^3.0.0 - arrify: ^2.0.0 async-retry: ^1.3.3 compressible: ^2.0.12 duplexify: ^4.0.0 @@ -8233,7 +8232,7 @@ __metadata: retry-request: ^5.0.0 teeny-request: ^8.0.0 uuid: ^8.0.0 - checksum: 31e8abea01e5160434a23c11c7219c83469c97a0c3bed9dc29d5ff1441ba1f42aa75a99df6e0b95db1501cf4b7f4c896c79b13bb597a35ddd2924408b584f802 + checksum: 9b88a5bff4e8401dbd18223fe570882df632cbb0e515e7f3eca33dbea16568168b2c0397b02ad8030e6d114b6d73109283d17a49762f1833f077424bf90a676d languageName: node linkType: hard From 2f754d588390ee590613ec9afa12652c404190b7 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Tue, 18 Oct 2022 20:00:18 -0500 Subject: [PATCH 264/278] Improved test Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- .../Problems/ProblemsTable/ProblemsTable.test.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/dynatrace/src/components/Problems/ProblemsTable/ProblemsTable.test.tsx b/plugins/dynatrace/src/components/Problems/ProblemsTable/ProblemsTable.test.tsx index c33d7bf975..5b9c0d7b3f 100644 --- a/plugins/dynatrace/src/components/Problems/ProblemsTable/ProblemsTable.test.tsx +++ b/plugins/dynatrace/src/components/Problems/ProblemsTable/ProblemsTable.test.tsx @@ -31,6 +31,10 @@ describe('ProblemsTable', () => { , , ); - expect(await rendered.findByTitle('Filter')).toBeInTheDocument(); + + // Checking for Title from mocked problems + expect( + await rendered.findByText('this IS a big problem'), + ).toBeInTheDocument(); }); }); From fb3733e446df8337680aab4c49a1f0cf9e80efd2 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Wed, 12 Oct 2022 15:16:22 -0500 Subject: [PATCH 265/278] Removed the HomepageTimer Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- .changeset/stupid-pens-occur.md | 7 ++ app-config.yaml | 10 -- packages/core-app-api/config.d.ts | 9 -- packages/core-components/api-report.md | 3 - .../HomepageTimer/HomepageTimer.test.tsx | 56 --------- .../layout/HomepageTimer/HomepageTimer.tsx | 108 ------------------ .../src/layout/HomepageTimer/index.ts | 17 --- packages/core-components/src/layout/index.ts | 1 - plugins/config-schema/dev/example-schema.json | 22 ---- 9 files changed, 7 insertions(+), 226 deletions(-) create mode 100644 .changeset/stupid-pens-occur.md delete mode 100644 packages/core-components/src/layout/HomepageTimer/HomepageTimer.test.tsx delete mode 100644 packages/core-components/src/layout/HomepageTimer/HomepageTimer.tsx delete mode 100644 packages/core-components/src/layout/HomepageTimer/index.ts diff --git a/.changeset/stupid-pens-occur.md b/.changeset/stupid-pens-occur.md new file mode 100644 index 0000000000..5ddac159a1 --- /dev/null +++ b/.changeset/stupid-pens-occur.md @@ -0,0 +1,7 @@ +--- +'@backstage/core-app-api': patch +'@backstage/core-components': patch +'@backstage/plugin-config-schema': patch +--- + +Removed the `HomepageTimer` and its related config as it has been replaced by the `HeaderWorldClock` in the Home plugin and was deprecated over a year ago diff --git a/app-config.yaml b/app-config.yaml index 57349d213a..977b07612f 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -420,16 +420,6 @@ costInsights: kind: 'PINTS_OF_ICE_CREAM' unit: 'ice cream pint' rate: 5.5 -homepage: - clocks: - - label: UTC - timezone: UTC - - label: NYC - timezone: 'America/New_York' - - label: STO - timezone: 'Europe/Stockholm' - - label: TYO - timezone: 'Asia/Tokyo' pagerduty: eventsBaseUrl: 'https://events.pagerduty.com/v2' jenkins: diff --git a/packages/core-app-api/config.d.ts b/packages/core-app-api/config.d.ts index d88c818d11..77778ef4f3 100644 --- a/packages/core-app-api/config.d.ts +++ b/packages/core-app-api/config.d.ts @@ -89,15 +89,6 @@ export interface Config { name?: string; }; - homepage?: { - clocks?: Array<{ - /** @visibility frontend */ - label: string; - /** @visibility frontend */ - timezone: string; - }>; - }; - /** * Configuration that provides information on available configured authentication providers. */ diff --git a/packages/core-components/api-report.md b/packages/core-components/api-report.md index 9587a32ab5..fc3ab4e5fc 100644 --- a/packages/core-components/api-report.md +++ b/packages/core-components/api-report.md @@ -495,9 +495,6 @@ export type HeaderTabsClassKey = // @public (undocumented) export function HelpIcon(props: IconComponentProps): JSX.Element; -// @public @deprecated -export function HomepageTimer(_props: {}): JSX.Element | null; - // Warning: (ae-forgotten-export) The symbol "Props" needs to be exported by the entry point index.d.ts // // @public diff --git a/packages/core-components/src/layout/HomepageTimer/HomepageTimer.test.tsx b/packages/core-components/src/layout/HomepageTimer/HomepageTimer.test.tsx deleted file mode 100644 index 9a7a8ac47d..0000000000 --- a/packages/core-components/src/layout/HomepageTimer/HomepageTimer.test.tsx +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2021 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 { - renderWithEffects, - TestApiProvider, - withLogCollector, -} from '@backstage/test-utils'; -import { HomepageTimer } from './HomepageTimer'; -import React from 'react'; -import { lightTheme } from '@backstage/theme'; -import { ThemeProvider } from '@material-ui/core/styles'; -import { ConfigReader } from '@backstage/core-app-api'; -import { ConfigApi, configApiRef } from '@backstage/core-plugin-api'; - -it('changes default timezone to GMT', async () => { - const configApi: ConfigApi = new ConfigReader({ - homepage: { - clocks: [ - { - label: 'New York', - timezone: 'America/New_Pork', - }, - ], - }, - context: 'test', - }); - - const { warn } = await withLogCollector(async () => { - const rendered = await renderWithEffects( - - - - - , - ); - - expect(rendered.getByText('GMT')).toBeInTheDocument(); - }); - expect(warn).toEqual([ - 'The timezone America/New_Pork is invalid. Defaulting to GMT', - ]); -}); diff --git a/packages/core-components/src/layout/HomepageTimer/HomepageTimer.tsx b/packages/core-components/src/layout/HomepageTimer/HomepageTimer.tsx deleted file mode 100644 index 71e764987b..0000000000 --- a/packages/core-components/src/layout/HomepageTimer/HomepageTimer.tsx +++ /dev/null @@ -1,108 +0,0 @@ -/* - * 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 { HeaderLabel } from '../HeaderLabel'; -import { ConfigApi, useApi, configApiRef } from '@backstage/core-plugin-api'; - -const timeFormat: Intl.DateTimeFormatOptions = { - hour: '2-digit', - minute: '2-digit', -}; - -type TimeObj = { - time: string; - label: string; -}; - -function getTimes(configApi: ConfigApi) { - const d = new Date(); - const lang = window.navigator.language; - - const clocks: TimeObj[] = []; - - if (!configApi.has('homepage.clocks')) { - return clocks; - } - - const clockConfigs = configApi.getConfigArray('homepage.clocks'); - - for (const clock of clockConfigs) { - if (clock.has('label') && clock.has('timezone')) { - let label = clock.getString('label'); - - const options: Intl.DateTimeFormatOptions = { - timeZone: clock.getString('timezone'), - ...timeFormat, - }; - - try { - new Date().toLocaleString(lang, options); - } catch (e) { - // eslint-disable-next-line no-console - console.warn( - `The timezone ${options.timeZone} is invalid. Defaulting to GMT`, - ); - options.timeZone = 'GMT'; - label = 'GMT'; - } - - const time = d.toLocaleTimeString(lang, options); - clocks.push({ time, label }); - } - } - return clocks; -} - -/** - * Please use the HeaderWorldClock in the home plugin - * - * @public - * @deprecated in favor of the HeaderWorldClock which is found in the to home plugin - */ -export function HomepageTimer(_props: {}) { - const configApi = useApi(configApiRef); - - const defaultTimes: TimeObj[] = []; - const [clocks, setTimes] = React.useState(defaultTimes); - - React.useEffect(() => { - setTimes(getTimes(configApi)); - - const intervalId = setInterval(() => { - setTimes(getTimes(configApi)); - }, 1000); - - return () => { - clearInterval(intervalId); - }; - }, [configApi]); - - if (clocks.length !== 0) { - return ( - <> - {clocks.map(clock => ( - - ))} - - ); - } - return null; -} diff --git a/packages/core-components/src/layout/HomepageTimer/index.ts b/packages/core-components/src/layout/HomepageTimer/index.ts deleted file mode 100644 index bc004fc757..0000000000 --- a/packages/core-components/src/layout/HomepageTimer/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * 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. - */ - -export { HomepageTimer } from './HomepageTimer'; diff --git a/packages/core-components/src/layout/index.ts b/packages/core-components/src/layout/index.ts index 4b594f0e94..a024cfbbc4 100644 --- a/packages/core-components/src/layout/index.ts +++ b/packages/core-components/src/layout/index.ts @@ -23,7 +23,6 @@ export * from './Header'; export * from './HeaderActionMenu'; export * from './HeaderLabel'; export * from './HeaderTabs'; -export * from './HomepageTimer'; export * from './InfoCard'; export * from './ItemCard'; export * from './Page'; diff --git a/plugins/config-schema/dev/example-schema.json b/plugins/config-schema/dev/example-schema.json index 86f05d500d..bb90595340 100644 --- a/plugins/config-schema/dev/example-schema.json +++ b/plugins/config-schema/dev/example-schema.json @@ -499,28 +499,6 @@ } } }, - "homepage": { - "type": "object", - "properties": { - "clocks": { - "type": "array", - "items": { - "type": "object", - "required": ["label", "timezone"], - "properties": { - "label": { - "visibility": "frontend", - "type": "string" - }, - "timezone": { - "visibility": "frontend", - "type": "string" - } - } - } - } - } - }, "integrations": { "description": "Configuration for integrations towards various external repository provider systems", "type": "object", From 127fcad26d7a8c1d46a80e98e287277d50c6320d Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Tue, 18 Oct 2022 20:18:43 -0500 Subject: [PATCH 266/278] Cleaned up changeset based on feedback Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- .changeset/heavy-elephants-nail.md | 7 +++++++ .changeset/stupid-pens-occur.md | 6 ++---- app-config.yaml | 10 ++++++++++ packages/core-app-api/config.d.ts | 14 ++++++++++++++ 4 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 .changeset/heavy-elephants-nail.md diff --git a/.changeset/heavy-elephants-nail.md b/.changeset/heavy-elephants-nail.md new file mode 100644 index 0000000000..71e57f1d14 --- /dev/null +++ b/.changeset/heavy-elephants-nail.md @@ -0,0 +1,7 @@ +--- +'@backstage/core-app-api': minor +--- + +# test + +Deprecated the `homepage` config as the component that used it - `HomepageTimer` - has been removed and replaced by the `HeaderWorldClock` in the home plugin diff --git a/.changeset/stupid-pens-occur.md b/.changeset/stupid-pens-occur.md index 5ddac159a1..d8af9a447a 100644 --- a/.changeset/stupid-pens-occur.md +++ b/.changeset/stupid-pens-occur.md @@ -1,7 +1,5 @@ --- -'@backstage/core-app-api': patch -'@backstage/core-components': patch -'@backstage/plugin-config-schema': patch +'@backstage/core-components': minor --- -Removed the `HomepageTimer` and its related config as it has been replaced by the `HeaderWorldClock` in the Home plugin and was deprecated over a year ago +**BREAKING**: Removed the `HomepageTimer` as it has been replaced by the `HeaderWorldClock` in the Home plugin and was deprecated over a year ago. diff --git a/app-config.yaml b/app-config.yaml index 977b07612f..758095c096 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -420,6 +420,16 @@ costInsights: kind: 'PINTS_OF_ICE_CREAM' unit: 'ice cream pint' rate: 5.5 +homepage: + clocks: + - label: UTC + timezone: UTC + - label: NYC + timezone: 'America/New_York' + - label: STO + timezone: 'Europe/Stockholm' + - label: TYO + timezone: 'Asia/Tokyo' pagerduty: eventsBaseUrl: 'https://events.pagerduty.com/v2' jenkins: diff --git a/packages/core-app-api/config.d.ts b/packages/core-app-api/config.d.ts index 77778ef4f3..ae876f7fe0 100644 --- a/packages/core-app-api/config.d.ts +++ b/packages/core-app-api/config.d.ts @@ -89,6 +89,20 @@ export interface Config { name?: string; }; + /** + * This config was used by the HomepageTimer but has been replaced by the HeaderWorldClock in the home plugin + * + * @deprecated in favor of the HeaderWorldClock which is found in the home plugin + */ + homepage?: { + clocks?: Array<{ + /** @visibility frontend */ + label: string; + /** @visibility frontend */ + timezone: string; + }>; + }; + /** * Configuration that provides information on available configured authentication providers. */ From 3c52caad7df9d0bbcd3291b7672b100061e09413 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Tue, 18 Oct 2022 20:22:14 -0500 Subject: [PATCH 267/278] Removed spaces Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- app-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app-config.yaml b/app-config.yaml index 758095c096..57349d213a 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -429,7 +429,7 @@ homepage: - label: STO timezone: 'Europe/Stockholm' - label: TYO - timezone: 'Asia/Tokyo' + timezone: 'Asia/Tokyo' pagerduty: eventsBaseUrl: 'https://events.pagerduty.com/v2' jenkins: From 9bfd656ebb43753c1a02c7174e40780efff69678 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 19 Oct 2022 01:23:00 +0000 Subject: [PATCH 268/278] Update dependency @google-cloud/firestore to v6.4.0 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index df3f0620e4..aab0289d64 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8176,14 +8176,14 @@ __metadata: linkType: hard "@google-cloud/firestore@npm:^6.0.0": - version: 6.3.0 - resolution: "@google-cloud/firestore@npm:6.3.0" + version: 6.4.0 + resolution: "@google-cloud/firestore@npm:6.4.0" dependencies: fast-deep-equal: ^3.1.1 functional-red-black-tree: ^1.0.1 google-gax: ^3.5.1 protobufjs: ^7.0.0 - checksum: 50f52dc06746fe3af1e9abb1063244015f968b71387104f65bd752ce6522406fe987291791c40fd40e84a11033c993e7847e5b8619173b7202c70382e55e853b + checksum: 7503e56f85c20aad4fa01b5de0b97e5108fe44c87db3423cb53bcdb083e053c6458c7a690820dc7db9ead384ce28da66142c1781d8cc406d4e7056374b29d23d languageName: node linkType: hard From f5b98c0ec1c01f19124a6b90a1ce88f8c72b1b73 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 19 Oct 2022 02:16:53 +0000 Subject: [PATCH 269/278] Update dependency @octokit/webhooks to v10.3.0 Signed-off-by: Renovate Bot --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index d6d91ce6df..56c3bc8693 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11407,22 +11407,22 @@ __metadata: languageName: node linkType: hard -"@octokit/webhooks-types@npm:6.3.6": - version: 6.3.6 - resolution: "@octokit/webhooks-types@npm:6.3.6" - checksum: 974db34258cbdb0d02f3bed202595822c1799804cbd46e3375571537e0ba879350f30a3e27b156480a0be4eaa924bbb353a578ae86cb58e495c524478f052f6b +"@octokit/webhooks-types@npm:6.5.0": + version: 6.5.0 + resolution: "@octokit/webhooks-types@npm:6.5.0" + checksum: 747e4d277061ddced1b215d9fb3c3fb279e41069d90e703b4f9df6feb723769ba899c107f62aaa2db4cc7ac988de807e4455ab3b6049d8b853164e64c723a680 languageName: node linkType: hard "@octokit/webhooks@npm:^10.0.0": - version: 10.1.5 - resolution: "@octokit/webhooks@npm:10.1.5" + version: 10.3.0 + resolution: "@octokit/webhooks@npm:10.3.0" dependencies: "@octokit/request-error": ^3.0.0 "@octokit/webhooks-methods": ^3.0.0 - "@octokit/webhooks-types": 6.3.6 + "@octokit/webhooks-types": 6.5.0 aggregate-error: ^3.1.0 - checksum: ea34d0e9431550d94cc2421b7afee56515745d8df3a61592cfeba3087ad7541c5b3bd64dba77fe0da554dc34e4e5438061cc94b80ba7e57ee65b74024929792e + checksum: 23c61cc139f1db145f74deab637efcb47f213b45ce85f107b9b9a80d96c9a566e5f763dfc9f3d75594e31ca3408c1b5ced48e735bb367886948135f3bb490210 languageName: node linkType: hard From fa6c767fff205a4fe7efa4688e7cbd89119bfc38 Mon Sep 17 00:00:00 2001 From: Rigin Oommen Date: Wed, 19 Oct 2022 12:31:03 +0530 Subject: [PATCH 270/278] (docs:auth) - Updated the typo error Signed-off-by: Rigin Oommen --- docs/auth/oidc.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/auth/oidc.md b/docs/auth/oidc.md index f856a2a415..d915262eb7 100644 --- a/docs/auth/oidc.md +++ b/docs/auth/oidc.md @@ -243,8 +243,8 @@ need this as well) to support user sessions. ### The Sign In provider The last step is to add the provider to the `SignInPage` so users can sign in with your -new provider, please follow the [Sing In Configuration][3] docs, here's where you import -and use the API ref we defined earlier. +new provider, please follow the [Sign In Configuration][3] docs, here's where you import +and use the API reference we defined earlier. ## Note From 24e54dda874e42713304246dbf92c9b45ec3e00d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Tue, 18 Oct 2022 14:27:31 +0200 Subject: [PATCH 271/278] add changeset for v1.7.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .github/vale/Vocab/Backstage/accept.txt | 1 + docs/releases/v1.7.0.md | 125 ++++++++++++++++++++++++ microsite/sidebars.json | 1 + 3 files changed, 127 insertions(+) create mode 100644 docs/releases/v1.7.0.md diff --git a/.github/vale/Vocab/Backstage/accept.txt b/.github/vale/Vocab/Backstage/accept.txt index 1e90802d35..bbfa748bb2 100644 --- a/.github/vale/Vocab/Backstage/accept.txt +++ b/.github/vale/Vocab/Backstage/accept.txt @@ -373,6 +373,7 @@ xyz yaml Zalando Zhou +zod zoomable zsh Alef diff --git a/docs/releases/v1.7.0.md b/docs/releases/v1.7.0.md new file mode 100644 index 0000000000..cb87ead4c9 --- /dev/null +++ b/docs/releases/v1.7.0.md @@ -0,0 +1,125 @@ +--- +id: v1.7.0 +title: v1.7.0 +description: Backstage Release v1.7.0 +--- + +These are the release notes for the v1.7.0 release of +[Backstage](https://backstage.io/). + +A huge thanks to the whole team of maintainers and contributors as well as the +amazing Backstage Community for the hard work in getting this release developed +and done. + +## Highlights + +### GitHub Catalog Import now Powered by the Backend + +The analysis performed during catalog imports (i.e. when supplying the URL of a +repository rather than an individual YAML file in the Create flow) is now +powered by the backend rather than frontend code. This means that the catalog +backend needs to be supplied with a location analyzer for this use case to +continue to function. + +If you want to make use of this feature, check out the installation instructions +in [the +changelog](https://github.com/backstage/backstage/blob/master/plugins/catalog-import/CHANGELOG.md#090). + +Contributed by [@kissmikijr](https://github.com/kissmikijr) in +[#13800](https://github.com/backstage/backstage/pull/13800) + +### Permission Rule Changes + +When defining permission rules, it's now necessary to provide a [Zod +Schema](https://github.com/colinhacks/zod) that specifies the parameters the +rule expects. This has been added to help better describe the parameters in the +response of the metadata endpoint and to validate the parameters before a rule +is executed. The signatures of the rule methods (`apply` and `toQuery`) have +changed slightly as well. + +You can read more about this in [the permissions +documentation](https://backstage.io/docs/permissions/overview) and [the +changelog](https://github.com/backstage/backstage/blob/master/plugins/permission-node/CHANGELOG.md#070). + +### Migration: `jest` v29 + +Both `jest`, `jest-runtime`, and `jest-environment-jsdom` as used by the +Backstage CLI were bumped to version 29. This is up from version 27, so check +out both the [v28](https://jestjs.io/docs/28.x/upgrading-to-jest28) and +[v29](https://jestjs.io/docs/upgrading-to-jest29) (later +[here](https://jestjs.io/docs/29.x/upgrading-to-jest29)) migration guides, since +your existing tests may be affected. + +Particular changes that were encountered in the main Backstage repository are: + +- The updated snapshot format. +- `jest.useFakeTimers('legacy')` is now `jest.useFakeTimers({ legacyFakeTimers: true })`. +- Error objects collected by `withLogCollector` from `@backstage/test-utils` are + now objects with a `detail` property rather than a string. + +### Migration: `react-router` v6 + +Newly created Backstage repositories now use the stable version 6 of +`react-router`, just like the main repository does. + +Migrating to the stable version of `react-router` is optional for the time +being; Backstage has support for both versions. But if you want to do the same +for your existing repository, please follow [this +guide](https://backstage.io/docs/tutorials/react-router-stable-migration). +Support for the beta version will be removed in a later release. + +### Support for `__mocks__` and `__testUtils__` directories + +The Backstage CLI now has built-in support for `__mocks__` and `__testUtils__` +directories in your code. These can be used for mocks and shared utilities in +tests. + +### New Arguments for the Router of `@backstage/plugin-bazaar-backend` + +The bazaar-backend `createRouter` function now requires that the `identityApi` +is passed to the router. + +### Deprecated plugin: `@backstage/plugin-catalog-backend-module-bitbucket` + +This has been deprecated and split into +`@backstage/plugin-catalog-backend-module-bitbucket-cloud` and +`@backstage/plugin-catalog-backend-module-bitbucket-server`, for BitBucket Cloud +and BitBucket Server respectively. Please update your dependencies accordingly, +depending on which product you use. + +The original package will be removed in a future release. + +Contributed by [@pjungermann](https://github.com/pjungermann) in +[#14070](https://github.com/backstage/backstage/pull/14070) + +## Security Fixes + +This release does not contain any security fixes. + +## Upgrade path + +We recommend that you keep your Backstage project up to date with this latest +release. For more guidance on how to upgrade, check out the documentation for +[keeping Backstage +updated](https://backstage.io/docs/getting-started/keeping-backstage-updated). + +## Links and References + +Below you can find a list of links and references to help you learn about and +start using this new release. + +- [Backstage official website](https://backstage.io/), + [documentation](https://backstage.io/docs/), and [getting started + guide](https://backstage.io/docs/getting-started/) +- [GitHub repository](https://github.com/backstage/backstage) +- Backstage's [versioning and support + policy](https://backstage.io/docs/overview/versioning-policy) +- [Community Discord](https://discord.gg/bFESRKVt) for discussions and support +- [Changelog](https://github.com/backstage/backstage/tree/master/docs/releases/v1.7.0-changelog.md) +- Backstage [Demos](https://backstage.io/demos), + [Blog](https://backstage.io/blog), + [Roadmap](https://backstage.io/docs/overview/roadmap) and + [Plugins](https://backstage.io/plugins) + +Sign up for our [newsletter](https://mailchi.mp/spotify/backstage-community) if +you want to be informed about what is happening in the world of Backstage. diff --git a/microsite/sidebars.json b/microsite/sidebars.json index bf6b036daf..0826541071 100644 --- a/microsite/sidebars.json +++ b/microsite/sidebars.json @@ -1,6 +1,7 @@ { "releases": { "Release Notes": [ + "releases/v1.7.0", "releases/v1.6.0", "releases/v1.5.0", "releases/v1.4.0", From b8d4ab0e12a810b0f0e330575878421c604ab4be Mon Sep 17 00:00:00 2001 From: Alisson Fabiano Date: Wed, 19 Oct 2022 10:40:28 +0100 Subject: [PATCH 272/278] fixed reading headers Signed-off-by: Alisson Fabiano --- .../src/api/TechInsightsClient.ts | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/plugins/tech-insights/src/api/TechInsightsClient.ts b/plugins/tech-insights/src/api/TechInsightsClient.ts index afd214d581..6e85769b34 100644 --- a/plugins/tech-insights/src/api/TechInsightsClient.ts +++ b/plugins/tech-insights/src/api/TechInsightsClient.ts @@ -82,9 +82,6 @@ export class TechInsightsClient implements TechInsightsApi { { method: 'POST', body: JSON.stringify(requestBody), - headers: { - 'Content-Type': 'application/json', - }, }, ); } @@ -101,9 +98,6 @@ export class TechInsightsClient implements TechInsightsApi { return this.api('/checks/run', { method: 'POST', body: JSON.stringify(requestBody), - headers: { - 'Content-Type': 'application/json', - }, }); } @@ -111,14 +105,18 @@ export class TechInsightsClient implements TechInsightsApi { 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'); - } - if (token && !request.headers.has('authorization')) { - request.headers.set('authorization', `Bearer ${token}`); + const headers: HeadersInit = new Headers(init?.headers); + if (!headers.has('content-type')) + headers.set('content-type', 'application/json'); + if (token && !headers.has('authorization')) { + headers.set('authorization', `Bearer ${token}`); } + const request = new Request(`${url}${path}`, { + ...init, + headers, + }); + return fetch(request).then(async response => { if (!response.ok) { throw await ResponseError.fromResponse(response); From d66efa6aa94b7707d2e7efd9f6d4574e9b2b0951 Mon Sep 17 00:00:00 2001 From: Wesley Pattison Date: Wed, 19 Oct 2022 12:04:01 +0200 Subject: [PATCH 273/278] PR Feedback Signed-off-by: Wesley Pattison --- plugins/azure-sites/api-report.md | 3 - .../src/api/AzureSitesApiBackendClient.ts | 80 ++++++++----------- plugins/azure-sites/src/plugin.ts | 7 +- 3 files changed, 37 insertions(+), 53 deletions(-) diff --git a/plugins/azure-sites/api-report.md b/plugins/azure-sites/api-report.md index 2e9b81376a..38ca6a8fe2 100644 --- a/plugins/azure-sites/api-report.md +++ b/plugins/azure-sites/api-report.md @@ -54,9 +54,6 @@ export const azureSitesPlugin: BackstagePlugin< // @public (undocumented) export const EntityAzureSitesOverviewWidget: () => JSX.Element; -// @public (undocumented) -export const entityContentRouteRef: RouteRef; - // @public (undocumented) export const isAzureWebSiteNameAvailable: ( entity: Entity, diff --git a/plugins/azure-sites/src/api/AzureSitesApiBackendClient.ts b/plugins/azure-sites/src/api/AzureSitesApiBackendClient.ts index 5b1da009b5..fc622e786b 100644 --- a/plugins/azure-sites/src/api/AzureSitesApiBackendClient.ts +++ b/plugins/azure-sites/src/api/AzureSitesApiBackendClient.ts @@ -35,56 +35,44 @@ export class AzureSitesApiBackendClient implements AzureSitesApi { } async stop(request: AzureSiteStartStopRequest): Promise { - try { - const url = `${await this.discoveryApi.getBaseUrl('azure-functions')}/${ - request.subscription - }/${request.resourceGroup}/${request.name}/stop`; - const { token: accessToken } = await this.identityApi.getCredentials(); - await fetch(url, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - ...(accessToken && { Authorization: `Bearer ${accessToken}` }), - }, - }); - } catch (e: any) { - throw new Error(e); - } + const url = `${await this.discoveryApi.getBaseUrl('azure-functions')}/${ + request.subscription + }/${request.resourceGroup}/${request.name}/stop`; + const { token: accessToken } = await this.identityApi.getCredentials(); + await fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + ...(accessToken && { Authorization: `Bearer ${accessToken}` }), + }, + }); } async start(request: AzureSiteStartStopRequest): Promise { - try { - const url = `${await this.discoveryApi.getBaseUrl('azure-functions')}/${ - request.subscription - }/${request.resourceGroup}/${request.name}/start`; - const { token: accessToken } = await this.identityApi.getCredentials(); - await fetch(url, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - ...(accessToken && { Authorization: `Bearer ${accessToken}` }), - }, - }); - } catch (e: any) { - throw new Error(e); - } + const url = `${await this.discoveryApi.getBaseUrl('azure-functions')}/${ + request.subscription + }/${request.resourceGroup}/${request.name}/start`; + const { token: accessToken } = await this.identityApi.getCredentials(); + await fetch(url, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + ...(accessToken && { Authorization: `Bearer ${accessToken}` }), + }, + }); } async list(request: AzureSiteListRequest): Promise { - try { - const url = `${await this.discoveryApi.getBaseUrl('azure-sites')}/list/${ - request.name - }`; - const { token: accessToken } = await this.identityApi.getCredentials(); - const response = await fetch(url, { - method: 'GET', - headers: { - 'Content-Type': 'application/json', - ...(accessToken && { Authorization: `Bearer ${accessToken}` }), - }, - }); - return await response.json(); - } catch (e: any) { - throw new Error(e); - } + const url = `${await this.discoveryApi.getBaseUrl('azure-sites')}/list/${ + request.name + }`; + const { token: accessToken } = await this.identityApi.getCredentials(); + const response = await fetch(url, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + ...(accessToken && { Authorization: `Bearer ${accessToken}` }), + }, + }); + return await response.json(); } } diff --git a/plugins/azure-sites/src/plugin.ts b/plugins/azure-sites/src/plugin.ts index 6a5272e21a..f54f121ea1 100644 --- a/plugins/azure-sites/src/plugin.ts +++ b/plugins/azure-sites/src/plugin.ts @@ -24,14 +24,13 @@ import { } from '@backstage/core-plugin-api'; import { azureSiteApiRef, AzureSitesApiBackendClient } from './api'; -/** @public */ -export const entityContentRouteRef = createRouteRef({ - id: 'Azure Entity Content', +const entityContentRouteRef = createRouteRef({ + id: 'Azure Sites Entity Content', }); /** @public */ export const azureSitesPlugin = createPlugin({ - id: 'azureFunctions', + id: 'azureSites', apis: [ createApiFactory({ api: azureSiteApiRef, From 47ec8b88d5d837079a99a359ec09bc29cf67045c Mon Sep 17 00:00:00 2001 From: Alex Rybchenko Date: Wed, 19 Oct 2022 14:13:56 +0200 Subject: [PATCH 274/278] set application/json header Signed-off-by: Alex Rybchenko --- .changeset/poor-moons-impress.md | 5 +++++ plugins/tech-insights/src/api/TechInsightsClient.ts | 6 ++++++ 2 files changed, 11 insertions(+) create mode 100644 .changeset/poor-moons-impress.md diff --git a/.changeset/poor-moons-impress.md b/.changeset/poor-moons-impress.md new file mode 100644 index 0000000000..f441cba1f2 --- /dev/null +++ b/.changeset/poor-moons-impress.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-tech-insights': patch +--- + +Set content type to 'application/json' in TechInsightsClient diff --git a/plugins/tech-insights/src/api/TechInsightsClient.ts b/plugins/tech-insights/src/api/TechInsightsClient.ts index 6e85769b34..0f55a8f8e1 100644 --- a/plugins/tech-insights/src/api/TechInsightsClient.ts +++ b/plugins/tech-insights/src/api/TechInsightsClient.ts @@ -82,6 +82,9 @@ export class TechInsightsClient implements TechInsightsApi { { method: 'POST', body: JSON.stringify(requestBody), + headers: { + 'content-type': 'application/json', + }, }, ); } @@ -98,6 +101,9 @@ export class TechInsightsClient implements TechInsightsApi { return this.api('/checks/run', { method: 'POST', body: JSON.stringify(requestBody), + headers: { + 'content-type': 'application/json', + }, }); } From b54ac7347bc5eda5b47d353b50801292ab1c7588 Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Wed, 19 Oct 2022 14:37:44 +0200 Subject: [PATCH 275/278] renovate: bump svgr dependencies together Signed-off-by: Johan Haals --- .github/renovate.json5 | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/renovate.json5 b/.github/renovate.json5 index a8bc3448a5..5c4745c70c 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -15,5 +15,10 @@ groupName: 'API Extractor / Rush Stack monorepo packages', rangeStrategy: 'replace', }, + { + matchSourceUrlPrefixes: ['https://github.com/gregberge/svgr'], + groupName: 'SVGR monorepo packages', + rangeStrategy: 'replace', + }, ], } From 88db9699fadf9844eaf5aad6ea67203b76e0bd91 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Wed, 19 Oct 2022 08:56:10 -0500 Subject: [PATCH 276/278] Fixes based on feedback Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- .changeset/heavy-elephants-nail.md | 2 -- app-config.yaml | 10 ---------- 2 files changed, 12 deletions(-) diff --git a/.changeset/heavy-elephants-nail.md b/.changeset/heavy-elephants-nail.md index 71e57f1d14..473e3eda9e 100644 --- a/.changeset/heavy-elephants-nail.md +++ b/.changeset/heavy-elephants-nail.md @@ -2,6 +2,4 @@ '@backstage/core-app-api': minor --- -# test - Deprecated the `homepage` config as the component that used it - `HomepageTimer` - has been removed and replaced by the `HeaderWorldClock` in the home plugin diff --git a/app-config.yaml b/app-config.yaml index 57349d213a..977b07612f 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -420,16 +420,6 @@ costInsights: kind: 'PINTS_OF_ICE_CREAM' unit: 'ice cream pint' rate: 5.5 -homepage: - clocks: - - label: UTC - timezone: UTC - - label: NYC - timezone: 'America/New_York' - - label: STO - timezone: 'Europe/Stockholm' - - label: TYO - timezone: 'Asia/Tokyo' pagerduty: eventsBaseUrl: 'https://events.pagerduty.com/v2' jenkins: From 46030aa6a84cf08a170cabac8527cb90d03e5ce3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 19 Oct 2022 15:02:22 +0000 Subject: [PATCH 277/278] Update dependency @tanstack/react-query to v4.12.0 Signed-off-by: Renovate Bot --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index ef0c3fa984..00cd26f161 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12701,18 +12701,18 @@ __metadata: languageName: node linkType: hard -"@tanstack/query-core@npm:4.7.2": - version: 4.7.2 - resolution: "@tanstack/query-core@npm:4.7.2" - checksum: 5be625bf27505acded2c5add69c54a48be8c6cacdf4ea821ef499ca449a3a5694bda995bdc2439a83039563f91cb3424b765c597fd28861c6a867efda039e6d1 +"@tanstack/query-core@npm:4.12.0": + version: 4.12.0 + resolution: "@tanstack/query-core@npm:4.12.0" + checksum: 535719c2079c18bb83e459b968858c424b3404b34d662e853389067dae3b2dc61b5f92b28a93237830cac3de7d35ef61793d7ddb1df6b45bc7fe31ae7ddba246 languageName: node linkType: hard "@tanstack/react-query@npm:^4.1.3": - version: 4.7.2 - resolution: "@tanstack/react-query@npm:4.7.2" + version: 4.12.0 + resolution: "@tanstack/react-query@npm:4.12.0" dependencies: - "@tanstack/query-core": 4.7.2 + "@tanstack/query-core": 4.12.0 use-sync-external-store: ^1.2.0 peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -12723,7 +12723,7 @@ __metadata: optional: true react-native: optional: true - checksum: 07f6ec6c44c6826986167d772d78051414f15f08c874fe38187e1175a527ec71f77025d1466651802b8cde991618acece668fc17d7dc62af837ad7fb02882fa3 + checksum: 7c3688735bafa58e6993e1161fd53ec9d4f065de8cb04c4ec696e7e53fe86aef333df88553c8cecad278154c66ebe18c2c7072b0a0bbdce03c7112aabca81cda languageName: node linkType: hard From a291847beb6753ea7901f7748871bc39460d4d81 Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Wed, 19 Oct 2022 11:54:36 -0400 Subject: [PATCH 278/278] Fix typo in comments Signed-off-by: Adam Harvey --- packages/app/src/components/catalog/EntityPage.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx index f7592eb0b9..8e72bb03e4 100644 --- a/packages/app/src/components/catalog/EntityPage.tsx +++ b/packages/app/src/components/catalog/EntityPage.tsx @@ -209,7 +209,7 @@ const techdocsContent = ( /** * NOTE: This page is designed to work on small screens such as mobile devices. * This is based on Material UI Grid. If breakpoints are used, each grid item must set the `xs` prop to a column size or to `true`, - * since this does not default. If no breakpoints are used, the items will equitably share the asvailable space. + * since this does not default. If no breakpoints are used, the items will equitably share the available space. * https://material-ui.com/components/grid/#basic-grid. */