diff --git a/.changeset/calm-zebras-remain.md b/.changeset/calm-zebras-remain.md
deleted file mode 100644
index 3b961ab3f2..0000000000
--- a/.changeset/calm-zebras-remain.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-'@backstage/plugin-api-docs': patch
----
-
-Resolve issues with AsyncAPI rendering by updating `@asyncapi/react-component`
-to `0.23.0`. The theming of the component is adjusted to the latest styling
-changes.
diff --git a/.changeset/cost-insights-five-baboons-attack.md b/.changeset/cost-insights-five-baboons-attack.md
new file mode 100644
index 0000000000..f2c070acb4
--- /dev/null
+++ b/.changeset/cost-insights-five-baboons-attack.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-cost-insights': minor
+---
+
+make change ratio optional
diff --git a/.changeset/cost-insights-gorgeous-dancers-hope.md b/.changeset/cost-insights-gorgeous-dancers-hope.md
deleted file mode 100644
index 8e0abce57f..0000000000
--- a/.changeset/cost-insights-gorgeous-dancers-hope.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-cost-insights': patch
----
-
-Support a `name` prop for Projects for display purposes
diff --git a/.changeset/empty-lizards-doubt.md b/.changeset/empty-lizards-doubt.md
deleted file mode 100644
index cfe1e128fc..0000000000
--- a/.changeset/empty-lizards-doubt.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-github-actions': patch
----
-
-Wrap EmptyState in Card
diff --git a/.changeset/five-knives-flash.md b/.changeset/five-knives-flash.md
new file mode 100644
index 0000000000..9076f6f456
--- /dev/null
+++ b/.changeset/five-knives-flash.md
@@ -0,0 +1,10 @@
+---
+'@backstage/backend-common': patch
+'@backstage/create-app': patch
+'@backstage/integration': patch
+'@backstage/plugin-catalog-import': patch
+'@backstage/plugin-github-actions': patch
+'@backstage/plugin-scaffolder-backend': patch
+---
+
+The default `@octokit/rest` dependency was bumped to `"^18.5.3"`.
diff --git a/.changeset/fuzzy-dancers-complain.md b/.changeset/fuzzy-dancers-complain.md
new file mode 100644
index 0000000000..a23e6bc3df
--- /dev/null
+++ b/.changeset/fuzzy-dancers-complain.md
@@ -0,0 +1,6 @@
+---
+'@backstage/core': patch
+'@backstage/plugin-catalog-import': patch
+---
+
+Bump react-hook-form version to be the same for the entire project.
diff --git a/.changeset/gentle-days-return.md b/.changeset/gentle-days-return.md
deleted file mode 100644
index 96552173bd..0000000000
--- a/.changeset/gentle-days-return.md
+++ /dev/null
@@ -1,21 +0,0 @@
----
-'@backstage/plugin-api-docs': patch
-'@backstage/plugin-bitrise': patch
-'@backstage/plugin-catalog-import': patch
-'@backstage/plugin-circleci': patch
-'@backstage/plugin-cost-insights': patch
-'@backstage/plugin-explore': patch
-'@backstage/plugin-fossa': patch
-'@backstage/plugin-github-actions': patch
-'@backstage/plugin-github-deployments': patch
-'@backstage/plugin-graphiql': patch
-'@backstage/plugin-jenkins': patch
-'@backstage/plugin-lighthouse': patch
-'@backstage/plugin-pagerduty': patch
-'@backstage/plugin-register-component': patch
-'@backstage/plugin-rollbar': patch
-'@backstage/plugin-sentry': patch
-'@backstage/plugin-sonarqube': patch
----
-
-Updated README to have up-to-date install instructions.
diff --git a/.changeset/healthy-phones-press.md b/.changeset/healthy-phones-press.md
deleted file mode 100644
index c771caefc5..0000000000
--- a/.changeset/healthy-phones-press.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/core': patch
----
-
-Allow passing NavLinkProps to SidebarItem component to use in NavLink
diff --git a/.changeset/kind-suns-melt.md b/.changeset/kind-suns-melt.md
deleted file mode 100644
index 7cbec28fea..0000000000
--- a/.changeset/kind-suns-melt.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-api-docs': patch
----
-
-Added fields filtering in get API entities to avoid the requesting of unused data
diff --git a/.changeset/little-trees-fold.md b/.changeset/little-trees-fold.md
deleted file mode 100644
index 4963dd5aa1..0000000000
--- a/.changeset/little-trees-fold.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/create-app': patch
----
-
-Updates the end to end test in the app to match the new catalog index page title. To apply this change to an existing app, update `packages/app/cypress/integration/app.js` to search for `"My Company Catalog"` instead of `"My Company Service Catalog"`.
diff --git a/.changeset/long-ladybugs-promise.md b/.changeset/long-ladybugs-promise.md
deleted file mode 100644
index 7d683650c3..0000000000
--- a/.changeset/long-ladybugs-promise.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-scaffolder': patch
----
-
-Enable starred templates on Scaffolder frontend
diff --git a/.changeset/pink-islands-help.md b/.changeset/pink-islands-help.md
deleted file mode 100644
index c7672f484f..0000000000
--- a/.changeset/pink-islands-help.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-code-coverage-backend': patch
----
-
-Include migrations
diff --git a/.changeset/rare-parrots-share.md b/.changeset/rare-parrots-share.md
deleted file mode 100644
index 917ec5a18e..0000000000
--- a/.changeset/rare-parrots-share.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-'@backstage/plugin-catalog': patch
-'@backstage/plugin-scaffolder': patch
----
-
-Removed unused `swr` dependency.
diff --git a/.changeset/search-moar-catalog-yo.md b/.changeset/search-moar-catalog-yo.md
deleted file mode 100644
index 4e665157e1..0000000000
--- a/.changeset/search-moar-catalog-yo.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-catalog-backend': patch
----
-
-Entity lifecycle and owner are now indexed by the `DefaultCatalogCollator`. A `locationTemplate` may now optionally be provided to its constructor to reflect a custom catalog entity path in the Backstage frontend.
diff --git a/.changeset/search-odd-ads-invite.md b/.changeset/search-odd-ads-invite.md
deleted file mode 100644
index 0dde3d0c1f..0000000000
--- a/.changeset/search-odd-ads-invite.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-search-backend-node': patch
----
-
-Introduced Scheduler which is responsible for adding new tasks to a schedule together with it's interval timer as well as starting and stopping the scheduler processes.
diff --git a/.changeset/six-mayflies-peel.md b/.changeset/six-mayflies-peel.md
new file mode 100644
index 0000000000..9d022bca0a
--- /dev/null
+++ b/.changeset/six-mayflies-peel.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-api-docs': patch
+---
+
+Add support for displaying JSON schemas.
diff --git a/.changeset/six-rocks-allow.md b/.changeset/six-rocks-allow.md
deleted file mode 100644
index f207654f45..0000000000
--- a/.changeset/six-rocks-allow.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/techdocs-common': patch
----
-
-Gracefully handle HTTP request failures in download method of AzureBlobStorage publisher.
diff --git a/.changeset/sixty-dragons-retire.md b/.changeset/sixty-dragons-retire.md
deleted file mode 100644
index 62965c6e88..0000000000
--- a/.changeset/sixty-dragons-retire.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-search': patch
----
-
-Use `RouteRef` to generate path to search page.
diff --git a/.changeset/small-snakes-shake.md b/.changeset/small-snakes-shake.md
deleted file mode 100644
index 6db9db3754..0000000000
--- a/.changeset/small-snakes-shake.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-catalog': patch
----
-
-Support `gridItem` variant for `EntityLinksCard`.
diff --git a/.changeset/small-ways-hunt.md b/.changeset/small-ways-hunt.md
deleted file mode 100644
index f0b8dc88cc..0000000000
--- a/.changeset/small-ways-hunt.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-'@backstage/core': patch
-'@backstage/plugin-catalog': patch
----
-
-Add `if` prop to `EntityLayout.Route` to conditionally render tabs
diff --git a/.changeset/spotty-pigs-bathe.md b/.changeset/spotty-pigs-bathe.md
new file mode 100644
index 0000000000..0585f335dc
--- /dev/null
+++ b/.changeset/spotty-pigs-bathe.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-tech-radar': patch
+---
+
+Update README for composability
diff --git a/.changeset/stupid-feet-reply.md b/.changeset/stupid-feet-reply.md
new file mode 100644
index 0000000000..d7213b1bdc
--- /dev/null
+++ b/.changeset/stupid-feet-reply.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-catalog-backend': patch
+---
+
+Add support for non-organization accounts in GitHub Discovery
diff --git a/.changeset/techdocs-lovely-wombats-relate.md b/.changeset/techdocs-lovely-wombats-relate.md
deleted file mode 100644
index 33ed205c89..0000000000
--- a/.changeset/techdocs-lovely-wombats-relate.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-'@backstage/plugin-techdocs': patch
----
-
-Use `EntityRefLink` in header and use relations to reference the owner of the
-document.
diff --git a/.changeset/techdocs-mean-humans-hammer.md b/.changeset/techdocs-mean-humans-hammer.md
deleted file mode 100644
index 7697650250..0000000000
--- a/.changeset/techdocs-mean-humans-hammer.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-techdocs': patch
----
-
-Fix TechDocs landing page table wrong copied link
diff --git a/.changeset/techdocs-quiet-pens-prove.md b/.changeset/techdocs-quiet-pens-prove.md
deleted file mode 100644
index 379c20e72a..0000000000
--- a/.changeset/techdocs-quiet-pens-prove.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-techdocs': patch
----
-
-Add customization and exportable components for TechDocs landing page
diff --git a/.changeset/techdocs-red-donkeys-share.md b/.changeset/techdocs-red-donkeys-share.md
deleted file mode 100644
index 29d932d0b8..0000000000
--- a/.changeset/techdocs-red-donkeys-share.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-techdocs': patch
----
-
-Disable color transitions on links to avoid issues in dark mode.
diff --git a/.changeset/techdocs-swift-waves-sleep.md b/.changeset/techdocs-swift-waves-sleep.md
deleted file mode 100644
index 79d10931cd..0000000000
--- a/.changeset/techdocs-swift-waves-sleep.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-'@backstage/plugin-techdocs': minor
----
-
-Make `techdocsStorageApiRef` and `techdocsApiRef` use interfaces instead of the
-actual implementation classes.
-
-This renames the classes `TechDocsApi` to `TechDocsClient` and `TechDocsStorageApi`
-to `TechDocsStorageClient` and renames the interfaces `TechDocs` to `TechDocsApi`
-and `TechDocsStorage` to `TechDocsStorageApi` to comply the pattern elsewhere in
-the project. This also fixes the types returned by some methods on those
-interfaces.
diff --git a/.changeset/techdocs-young-walls-decide.md b/.changeset/techdocs-young-walls-decide.md
deleted file mode 100644
index 8dc0373234..0000000000
--- a/.changeset/techdocs-young-walls-decide.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-techdocs': patch
----
-
-Rework state management to avoid rendering multiple while navigating between pages.
diff --git a/.changeset/thick-cobras-switch.md b/.changeset/thick-cobras-switch.md
new file mode 100644
index 0000000000..002c724421
--- /dev/null
+++ b/.changeset/thick-cobras-switch.md
@@ -0,0 +1,5 @@
+---
+'@backstage/plugin-proxy-backend': patch
+---
+
+Prefix proxy routes with `/` if not present in configuration
diff --git a/.changeset/thin-coins-compete.md b/.changeset/thin-coins-compete.md
deleted file mode 100644
index 36511ec1cb..0000000000
--- a/.changeset/thin-coins-compete.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-scaffolder-backend': patch
----
-
-Added the `nebula-preview` preview to `Octokit` for repository visibility.
diff --git a/.changeset/thirty-humans-knock.md b/.changeset/thirty-humans-knock.md
deleted file mode 100644
index 47545af282..0000000000
--- a/.changeset/thirty-humans-knock.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/core': patch
----
-
-Improve owner example value in `MissingAnnotationEmptyState`.
diff --git a/.changeset/tough-planes-jump.md b/.changeset/tough-planes-jump.md
deleted file mode 100644
index ebbec65159..0000000000
--- a/.changeset/tough-planes-jump.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-scaffolder': patch
----
-
-Support `anyOf`, `oneOf` and `allOf` schemas in the scaffolder template.
diff --git a/.changeset/tough-walls-wash.md b/.changeset/tough-walls-wash.md
new file mode 100644
index 0000000000..a45adcfbf6
--- /dev/null
+++ b/.changeset/tough-walls-wash.md
@@ -0,0 +1,9 @@
+---
+'@backstage/catalog-model': patch
+'@backstage/cli': patch
+'@backstage/config-loader': patch
+'@backstage/config': patch
+'@backstage/plugin-scaffolder': patch
+---
+
+Bump `json-schema` dependency from `0.2.5` to `0.3.0`.
diff --git a/.changeset/tricky-yaks-melt.md b/.changeset/tricky-yaks-melt.md
new file mode 100644
index 0000000000..3679e6d1da
--- /dev/null
+++ b/.changeset/tricky-yaks-melt.md
@@ -0,0 +1,6 @@
+---
+'@backstage/techdocs-common': patch
+---
+
+Adding optional config to enable S3-like API for tech-docs using s3ForcePathStyle option.
+This allows providers like LocalStack, Minio and Wasabi (+possibly others) to be used to host tech docs.
diff --git a/.changeset/twenty-peas-deny.md b/.changeset/twenty-peas-deny.md
new file mode 100644
index 0000000000..d149a9337c
--- /dev/null
+++ b/.changeset/twenty-peas-deny.md
@@ -0,0 +1,5 @@
+---
+'@backstage/catalog-client': patch
+---
+
+Allow `filter` parameter to be specified multiple times
diff --git a/.changeset/witty-lies-shave.md b/.changeset/witty-lies-shave.md
deleted file mode 100644
index 68fd4b1137..0000000000
--- a/.changeset/witty-lies-shave.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'@backstage/plugin-catalog': patch
----
-
-Switch out the time-based personal greeting for a plain title on the catalog index page, and remove the clocks for different timezones.
diff --git a/.github/styles/vocab.txt b/.github/styles/vocab.txt
index a12f638a74..694226b8cc 100644
--- a/.github/styles/vocab.txt
+++ b/.github/styles/vocab.txt
@@ -41,8 +41,10 @@ Kaewkasi
Knex
Leasot
Lerna
+LocalStack
Luxon
Minikube
+Minio
Mkdocs
Monorepo
Namespaces
diff --git a/contrib/terraform/techdocs-s3-storage/terraform.tf b/contrib/terraform/techdocs-s3-storage/terraform.tf
index ca267f0f12..f256663f43 100644
--- a/contrib/terraform/techdocs-s3-storage/terraform.tf
+++ b/contrib/terraform/techdocs-s3-storage/terraform.tf
@@ -2,15 +2,15 @@
# Variables
#==========================
-variable "backstage-bucket" {
+variable "backstage_bucket" {
default = "backstage_bucket_for_my_corp"
}
-variable "backstage-iam" {
+variable "backstage_iam" {
default = "backstage"
}
-variable "shared-managed-tag-value" {
+variable "shared_managed_tag" {
default = "terraform_for_my_corp"
}
@@ -19,7 +19,7 @@ variable "shared-managed-tag-value" {
#==========================
resource "aws_s3_bucket" "backstage" {
- bucket = var.backstage-bucket
+ bucket = var.backstage_bucket
acl = "private"
provider = aws
@@ -36,8 +36,8 @@ resource "aws_s3_bucket" "backstage" {
}
tags = {
- Name = var.backstage-bucket
- "Managed By Terraform" = var.shared-managed-tag-value
+ Name = var.backstage_bucket
+ "Managed By Terraform" = var.shared_managed_tag
}
}
@@ -56,16 +56,16 @@ resource "aws_s3_bucket_public_access_block" "backstage" {
#==========================
resource "aws_iam_user" "backstage" {
- name = var.backstage-iam
+ name = var.backstage_iam
}
resource "aws_iam_user_policy" "backstage" {
- name = var.backstage-iam
+ name = var.backstage_iam
user = aws_iam_user.backstage.name
- policy = data.aws_iam_policy_document.backstage-policy.json
+ policy = data.aws_iam_policy_document.backstage_policy.json
}
-data "aws_iam_policy_document" "backstage-policy" {
+data "aws_iam_policy_document" "backstage_policy" {
statement {
actions = [
"s3:PutObject",
diff --git a/docs/features/kubernetes/installation.md b/docs/features/kubernetes/installation.md
index 10968b427c..36bb724be6 100644
--- a/docs/features/kubernetes/installation.md
+++ b/docs/features/kubernetes/installation.md
@@ -8,44 +8,36 @@ The Kubernetes feature is a plugin to Backstage, and it is exposed as a tab when
viewing entities in the software catalog.
If you haven't setup Backstage already, read the
-[Getting Started](../../getting-started/index.md).
+[Getting Started](../../getting-started/index.md) guide.
## Adding the Kubernetes frontend plugin
-The first step is to add the frontend Kubernetes plugin to your Backstage
-application. Navigate to your new Backstage application directory. And then to
+The first step is to add the Kubernetes frontend plugin to your Backstage
+application. Navigate to your new Backstage application directory, and then to
your `packages/app` directory, and install the `@backstage/plugin-kubernetes`
package.
```bash
-cd my-backstage-app/
+# From your Backstage root directory
cd packages/app
yarn add @backstage/plugin-kubernetes
```
Once the package has been installed, you need to import the plugin in your app
-by adding the "Kubernetes" tab to the catalog entity page. In
-`packages/app/src/components/catalog/EntityPage.tsx`, you'll add a router to get
-to the tab, and add the tab itself.
-
-`EntityPage.tsx`:
+by adding the "Kubernetes" tab to the respective catalog pages.
```tsx
-import { Router as KubernetesRouter } from '@backstage/plugin-kubernetes';
+// In packages/app/src/components/catalog/EntityPage.tsx
+import { EntityKubernetesContent } from '@backstage/plugin-kubernetes';
-// ...
-
-const ServiceEntityPage = ({ entity }: { entity: Entity }) => (
-
- // ...
- }
- />
- // ...
-
-);
+// You can add the tab to any number of pages, the service page is shown as an
+// example here
+const serviceEntityPage = (
+
+ {/* other tabs... */}
+
+
+
```
That's it! But now, we need the Kubernetes Backend plugin for the frontend to
@@ -57,17 +49,16 @@ Navigate to `packages/backend` of your Backstage app, and install the
`@backstage/plugin-kubernetes-backend` package.
```bash
-cd my-backstage-app/
+# From your Backstage root directory
cd packages/backend
yarn add @backstage/plugin-kubernetes-backend
```
Create a file called `kubernetes.ts` inside `packages/backend/src/plugins/` and
-add the following
-
-`kubernetes.ts`:
+add the following:
```typescript
+// In packages/backend/src/plugins/kubernetes.ts
import { createRouter } from '@backstage/plugin-kubernetes-backend';
import { PluginEnvironment } from '../types';
@@ -83,18 +74,15 @@ And import the plugin to `packages/backend/src/index.ts`. There are three lines
of code you'll need to add, and they should be added near similar code in your
existing Backstage backend.
-`index.ts`:
-
```typescript
+// In packages/backend/src/index.ts
import kubernetes from './plugins/kubernetes';
-
// ...
-
-const kubernetesEnv = useHotMemoize(module, () => createEnv('kubernetes'));
-
-// ...
-
-apiRouter.use('/kubernetes', await kubernetes(kubernetesEnv));
+async function main() {
+ // ...
+ const kubernetesEnv = useHotMemoize(module, () => createEnv('kubernetes'));
+ // ...
+ apiRouter.use('/kubernetes', await kubernetes(kubernetesEnv));
```
That's it! The Kubernetes frontend and backend have now been added to your
diff --git a/docs/features/software-catalog/configuration.md b/docs/features/software-catalog/configuration.md
index 1afdff418a..320b82d0ad 100644
--- a/docs/features/software-catalog/configuration.md
+++ b/docs/features/software-catalog/configuration.md
@@ -37,6 +37,13 @@ The locations added through static configuration cannot be removed through the
catalog locations API. To remove these locations, you must remove them from the
configuration.
+Syntax errors or other types of errors present in `catalog-info.yaml` files will
+be logged for investigation. Errors do not cause processing to abort.
+
+When multiple `catalog-info.yaml` files with the same `metadata.name` property
+are discovered, one will be processed and all others will be skipped. This
+action is logged for further investigation.
+
### Integration Processors
Integrations may simply provide a mechanism to handle `url` location type for an
@@ -111,8 +118,7 @@ catalog:
> deleting entities will not work in this mode.**
A common use case for this configuration is when organizations have a remote
-source that should be mirrored into backstage. If we want backstage to be a
-mirror of this remote source we cannot allow users to also register entities
-with e.g.
+source that should be mirrored into Backstage. To make Backstage a mirror of
+this remote source, users cannot also register new entities with e.g. the
[catalog-import](https://github.com/backstage/backstage/tree/master/plugins/catalog-import)
plugin.
diff --git a/docs/features/software-catalog/installation.md b/docs/features/software-catalog/installation.md
index df473f886f..0b622fb093 100644
--- a/docs/features/software-catalog/installation.md
+++ b/docs/features/software-catalog/installation.md
@@ -18,6 +18,7 @@ The catalog frontend plugin should be installed in your `app` package, which is
created as a part of `@backstage/create-app`. To install the package, run:
```bash
+# From your Backstage root directory
cd packages/app
yarn add @backstage/plugin-catalog
```
@@ -103,6 +104,7 @@ The catalog backend should be installed in your `backend` package, which is
created as a part of `@backstage/create-app`. To install the package, run:
```bash
+# From your Backstage root directory
cd packages/backend
yarn add @backstage/plugin-catalog-backend
```
diff --git a/docs/features/software-templates/installation.md b/docs/features/software-templates/installation.md
index 96eea3c750..5acaf0e499 100644
--- a/docs/features/software-templates/installation.md
+++ b/docs/features/software-templates/installation.md
@@ -20,6 +20,7 @@ The scaffolder frontend plugin should be installed in your `app` package, which
is created as a part of `@backstage/create-app`. To install the package, run:
```bash
+# From your Backstage root directory
cd packages/app
yarn add @backstage/plugin-scaffolder
```
@@ -57,6 +58,7 @@ The scaffolder backend should be installed in your `backend` package, which is
created as a part of `@backstage/create-app`. To install the package, run:
```bash
+# From your Backstage root directory
cd packages/backend
yarn add @backstage/plugin-scaffolder-backend
```
@@ -262,6 +264,6 @@ library. By default it will use the
[spotify/backstage-cookiecutter](https://github.com/backstage/backstage/blob/37e35b910afc7d1270855aed0ec4718aba366c91/plugins/scaffolder-backend/scripts/Cookiecutter.dockerfile)
docker image.
-If you are running backstage from a Docker container and you want to avoid
+If you are running Backstage from a Docker container and you want to avoid
calling a container inside a container, you can set up Cookiecutter in your own
image, this will use the local installation instead.
diff --git a/docs/features/techdocs/configuration.md b/docs/features/techdocs/configuration.md
index c7876f3874..aa38dd42b1 100644
--- a/docs/features/techdocs/configuration.md
+++ b/docs/features/techdocs/configuration.md
@@ -78,6 +78,11 @@ techdocs:
# https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#constructor-property
endpoint: ${AWS_ENDPOINT}
+ # (Optional) Whether to use path style URLs when communicating with S3.
+ # Defaults to false.
+ # This allows providers like LocalStack, Minio and Wasabi (and possibly others) to be used to host tech docs.
+ s3ForcePathStyle: false
+
# Required when techdocs.publisher.type is set to 'azureBlobStorage'. Skip otherwise.
azureBlobStorage:
diff --git a/docs/features/techdocs/getting-started.md b/docs/features/techdocs/getting-started.md
index 223b276d68..520db2245c 100644
--- a/docs/features/techdocs/getting-started.md
+++ b/docs/features/techdocs/getting-started.md
@@ -22,7 +22,7 @@ Navigate to your new Backstage application directory. And then to your
`packages/app` directory, and install the `@backstage/plugin-techdocs` package.
```bash
-cd my-backstage-app/
+# From your Backstage root directory
cd packages/app
yarn add @backstage/plugin-techdocs
```
@@ -54,7 +54,7 @@ Navigate to `packages/backend` of your Backstage app, and install the
`@backstage/plugin-techdocs-backend` package.
```bash
-cd my-backstage-app/
+# From your Backstage root directory
cd packages/backend
yarn add @backstage/plugin-techdocs-backend
```
diff --git a/docs/getting-started/app-custom-theme.md b/docs/getting-started/app-custom-theme.md
index 181f541929..4dbc6bfa48 100644
--- a/docs/getting-started/app-custom-theme.md
+++ b/docs/getting-started/app-custom-theme.md
@@ -135,3 +135,31 @@ const themeOptions = createThemeOptions({
},
});
```
+
+## Custom Logo
+
+In addition to a custom theme, you can also customize the logo displayed at the
+far top left of the site.
+
+In your frontend app, locate `src/components/Root/` folder. You'll find two
+components:
+
+- `LogoFull.tsx` - A larger logo used when the Sidebar navigation is opened.
+- `LogoIcon.tsx` - A smaller logo used when the sidebar navigation is closed.
+
+To replace the images, you can simply replace the relevant code in those
+components with raw SVG definitions.
+
+You can also use another web image format such as PNG by importing it. To do
+this, place your new image into a new subdirectory such as
+`src/components/Root/logo/my-company-logo.png`, and then add this code:
+
+```jsx
+import MyCustomLogoFull from './logo/my-company-logo.png';
+
+//...
+
+const LogoFull = () => {
+ return
;
+};
+```
diff --git a/docs/plugins/integrating-plugin-into-service-catalog.md b/docs/plugins/integrating-plugin-into-service-catalog.md
index 01de779635..047b6f14e6 100644
--- a/docs/plugins/integrating-plugin-into-service-catalog.md
+++ b/docs/plugins/integrating-plugin-into-service-catalog.md
@@ -1,7 +1,7 @@
---
id: integrating-plugin-into-service-catalog
title: Integrate into the Service Catalog
-description: Documentation on How to integrate plugin into service catalog
+description: How to integrate a plugin into service catalog
---
> This is an advanced use case and currently is an experimental feature. Expect
diff --git a/docs/plugins/proxying.md b/docs/plugins/proxying.md
index 50c56af7a6..3e20e37cad 100644
--- a/docs/plugins/proxying.md
+++ b/docs/plugins/proxying.md
@@ -36,7 +36,7 @@ Example:
```yaml
# in app-config.yaml
proxy:
- '/simple-example': http://simple.example.com:8080
+ simple-example: http://simple.example.com:8080
'/larger-example/v1':
target: http://larger.example.com:8080/svc.v1
headers:
@@ -46,10 +46,11 @@ proxy:
```
Each key under the proxy configuration entry is a route to match, below the
-prefix that the proxy plugin is mounted on. It must start with a slash. For
-example, if the backend mounts the proxy plugin as `/proxy`, the above
-configuration will lead to the proxy acting on backend requests to
-`/api/proxy/simple-example/...` and `/api/proxy/larger-example/v1/...`.
+prefix that the proxy plugin is mounted on. If it does not start with a slash,
+one will be prefixed automatically. For example, if the backend mounts the proxy
+plugin as `/proxy`, the above configuration will lead to the proxy acting on
+backend requests to `/api/proxy/simple-example/...` and
+`/api/proxy/larger-example/v1/...`.
The value inside each route is either a simple URL string, or an object on the
format accepted by
diff --git a/docs/tutorials/switching-sqlite-postgres.md b/docs/tutorials/switching-sqlite-postgres.md
index a759b7dc49..fafd2ad586 100644
--- a/docs/tutorials/switching-sqlite-postgres.md
+++ b/docs/tutorials/switching-sqlite-postgres.md
@@ -17,11 +17,11 @@ switch between database backends.
## Install PostgreSQL
-First, swap out SQLite for PostgreSQL in your `backend` package:
+First, add PostgreSQL to your `backend` package:
```shell
+# From your Backstage root directory
cd packages/backend
-yarn remove sqlite3
yarn add pg
```
@@ -46,7 +46,6 @@ backend:
+ #ssl: require # see https://www.postgresql.org/docs/current/libpq-ssl.html Table 33.1. SSL Mode Descriptions (e.g. require)
+ #ca: # if you have a CA file and want to verify it you can uncomment this section
+ #$file: /ca/server.crt
-
```
If you have an `app-config.local.yaml` for local development, a similar update
diff --git a/microsite/README.md b/microsite/README.md
index 9589def3e3..285622f1f8 100644
--- a/microsite/README.md
+++ b/microsite/README.md
@@ -1,3 +1,9 @@
+# Backstage Documentation
+
+This folder holds the service and configuration that runs Backstage's documentation hosted at https://backstage.io.
+
+It pulls content in from the [root `/docs`](../docs/) folder and builds it into the resulting HTML web site.
+
This website was created with [Docusaurus](https://docusaurus.io/).
# What's In This Document
@@ -10,6 +16,8 @@ This website was created with [Docusaurus](https://docusaurus.io/).
# Getting Started
+Testing the web site locally is a great way to see what final website will look like after publishing, and is ideal for testing more complex changes, large updates to navigation, or complex page designs that may include special alignment, which may not otherwise be validated through continuous integration.
+
## Installation
```
@@ -22,7 +30,7 @@ $ yarn install
$ yarn start
```
-This command starts a local development server and open up a browser window. Most changes are reflected live without having to restart the server.
+This command starts a local development server and opens up a browser window. Most content changes made to the `docs/` root folder are reflected live without having to restart the server.
## Build
@@ -57,9 +65,9 @@ my-docusaurus/
siteConfig.js
```
-# Editing Content
+## Editing Content
-## Editing an existing docs page
+### Editing an existing docs page
Edit docs by navigating to `docs/` and editing the corresponding document:
@@ -76,7 +84,7 @@ Edit me...
For more information about docs, click [here](https://docusaurus.io/docs/en/navigation)
-## Editing an existing blog post
+### Editing an existing blog post
Edit blog posts by navigating to `website/blog` and editing the corresponding post:
@@ -93,9 +101,9 @@ Edit me...
For more information about blog posts, click [here](https://docusaurus.io/docs/en/adding-blog)
-# Adding Content
+## Adding Content
-## Adding a new docs page to an existing sidebar
+### Adding a new docs page to an existing sidebar
1. Create the doc as a new markdown file in `/docs`, example `docs/newly-created-doc.md`:
@@ -126,7 +134,7 @@ My new content here..
For more information about adding new docs, click [here](https://docusaurus.io/docs/en/navigation)
-## Adding a new blog post
+### Adding a new blog post
1. Make sure there is a header link to your blog in `website/siteConfig.js`:
@@ -157,7 +165,7 @@ Lorem Ipsum...
For more information about blog posts, click [here](https://docusaurus.io/docs/en/adding-blog)
-## Adding items to your site's top navigation bar
+### Adding items to your site's top navigation bar
1. Add links to docs, custom pages or external links by editing the headerLinks field of `website/siteConfig.js`:
@@ -181,7 +189,7 @@ For more information about blog posts, click [here](https://docusaurus.io/docs/e
For more information about the navigation bar, click [here](https://docusaurus.io/docs/en/navigation)
-## Adding custom pages
+### Adding custom pages
1. Docusaurus uses React components to build pages. The components are saved as .js files in `website/pages/en`:
1. If you want your page to show up in your navigation header, you will need to update `website/siteConfig.js` to add to the `headerLinks` element:
@@ -199,11 +207,11 @@ For more information about the navigation bar, click [here](https://docusaurus.i
}
```
-For more information about custom pages, click [here](https://docusaurus.io/docs/en/custom-pages).
+Learn more about [Docusaurus custom pages](https://docusaurus.io/docs/en/custom-pages).
-# Full Documentation
+## Full Documentation
-Full documentation can be found on the [website](https://docusaurus.io/).
+Full documentation can be found on the [Docusaurus website](https://docusaurus.io/).
## Additional notes
diff --git a/microsite/blog/2020-04-30-how-to-quickly-set-up-backstage.md b/microsite/blog/2020-04-30-how-to-quickly-set-up-backstage.md
index 65102c919f..7289878bc1 100644
--- a/microsite/blog/2020-04-30-how-to-quickly-set-up-backstage.md
+++ b/microsite/blog/2020-04-30-how-to-quickly-set-up-backstage.md
@@ -45,7 +45,7 @@ The only thing you need to do is to start the app:
```bash
cd my-app
-yarn start
+yarn dev
```
And you are good to go! 👍
@@ -101,18 +101,12 @@ We provide a collection of public Backstage plugins (look for packages with the
Install in your app’s package folder (`/packages/app`) with:
```bash
+# From your Backstage root directory
+cd packages/app
yarn add @backstage/plugin-
```
-Then add it to your app's `plugin.ts` file to import and register it:
-
-`/packages/app/src/plugin.ts`:
-
-```js
-export { plugin as PluginName } from '@backstage/plugin-';
-```
-
-A plugin registers its own `route` in the app — read the documentation for the specific plugin you are installing for more information on that.
+After that, you inject the plugin into the application where you want it to be exposed. Please read the documentation for the specific plugin you are installing for more information.
### Creating an internal plugin
diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md
index 7262b2ae29..e9d3e63ad0 100644
--- a/packages/app/CHANGELOG.md
+++ b/packages/app/CHANGELOG.md
@@ -1,5 +1,47 @@
# example-app
+## 0.2.26
+
+### Patch Changes
+
+- Updated dependencies [1ce80ff02]
+- Updated dependencies [b98de52ae]
+- Updated dependencies [4c42ecca2]
+- Updated dependencies [c614ede9a]
+- Updated dependencies [9afcac5af]
+- Updated dependencies [07a7806c3]
+- Updated dependencies [f6efa71ee]
+- Updated dependencies [19a4dd710]
+- Updated dependencies [dcd54c7cd]
+- Updated dependencies [da546ce00]
+- Updated dependencies [e0c9ed759]
+- Updated dependencies [6fbd7beca]
+- Updated dependencies [15cbe6815]
+- Updated dependencies [39bdaa004]
+- Updated dependencies [cb8c848a3]
+- Updated dependencies [21fddf452]
+- Updated dependencies [17915e29b]
+- Updated dependencies [6eaecbd81]
+- Updated dependencies [23769512a]
+- Updated dependencies [1a142ae8a]
+ - @backstage/plugin-api-docs@0.4.12
+ - @backstage/plugin-cost-insights@0.8.5
+ - @backstage/plugin-github-actions@0.4.4
+ - @backstage/plugin-catalog-import@0.5.4
+ - @backstage/plugin-circleci@0.2.13
+ - @backstage/plugin-explore@0.3.4
+ - @backstage/plugin-graphiql@0.2.10
+ - @backstage/plugin-jenkins@0.4.2
+ - @backstage/plugin-lighthouse@0.2.15
+ - @backstage/plugin-pagerduty@0.3.3
+ - @backstage/plugin-rollbar@0.3.4
+ - @backstage/plugin-sentry@0.3.9
+ - @backstage/core@0.7.7
+ - @backstage/plugin-scaffolder@0.9.2
+ - @backstage/plugin-catalog@0.5.6
+ - @backstage/plugin-search@0.3.5
+ - @backstage/plugin-techdocs@0.9.0
+
## 0.2.25
### Patch Changes
diff --git a/packages/app/package.json b/packages/app/package.json
index ba9af03310..fb1ea02699 100644
--- a/packages/app/package.json
+++ b/packages/app/package.json
@@ -1,45 +1,45 @@
{
"name": "example-app",
- "version": "0.2.25",
+ "version": "0.2.26",
"private": true,
"bundled": true,
"dependencies": {
"@backstage/catalog-model": "^0.7.7",
"@backstage/cli": "^0.6.9",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/integration-react": "^0.1.1",
- "@backstage/plugin-api-docs": "^0.4.11",
+ "@backstage/plugin-api-docs": "^0.4.12",
"@backstage/plugin-badges": "^0.2.0",
- "@backstage/plugin-catalog": "^0.5.5",
- "@backstage/plugin-catalog-import": "^0.5.3",
+ "@backstage/plugin-catalog": "^0.5.6",
+ "@backstage/plugin-catalog-import": "^0.5.4",
"@backstage/plugin-catalog-react": "^0.1.3",
- "@backstage/plugin-circleci": "^0.2.12",
+ "@backstage/plugin-circleci": "^0.2.13",
"@backstage/plugin-cloudbuild": "^0.2.13",
"@backstage/plugin-code-coverage": "^0.1.2",
- "@backstage/plugin-cost-insights": "^0.8.4",
- "@backstage/plugin-explore": "^0.3.2",
+ "@backstage/plugin-cost-insights": "^0.8.5",
+ "@backstage/plugin-explore": "^0.3.4",
"@backstage/plugin-gcp-projects": "^0.2.5",
- "@backstage/plugin-github-actions": "^0.4.2",
- "@backstage/plugin-graphiql": "^0.2.9",
- "@backstage/plugin-jenkins": "^0.4.1",
+ "@backstage/plugin-github-actions": "^0.4.4",
+ "@backstage/plugin-graphiql": "^0.2.10",
+ "@backstage/plugin-jenkins": "^0.4.2",
"@backstage/plugin-kafka": "^0.2.6",
"@backstage/plugin-kubernetes": "^0.4.2",
- "@backstage/plugin-lighthouse": "^0.2.14",
+ "@backstage/plugin-lighthouse": "^0.2.15",
"@backstage/plugin-newrelic": "^0.2.6",
"@backstage/plugin-org": "^0.3.12",
- "@backstage/plugin-pagerduty": "0.3.2",
- "@backstage/plugin-rollbar": "^0.3.3",
- "@backstage/plugin-scaffolder": "^0.9.1",
- "@backstage/plugin-search": "^0.3.4",
- "@backstage/plugin-sentry": "^0.3.8",
+ "@backstage/plugin-pagerduty": "0.3.3",
+ "@backstage/plugin-rollbar": "^0.3.4",
+ "@backstage/plugin-scaffolder": "^0.9.2",
+ "@backstage/plugin-search": "^0.3.5",
+ "@backstage/plugin-sentry": "^0.3.9",
"@backstage/plugin-tech-radar": "^0.3.9",
- "@backstage/plugin-techdocs": "^0.8.0",
+ "@backstage/plugin-techdocs": "^0.9.0",
"@backstage/plugin-todo": "^0.1.0",
"@backstage/plugin-user-settings": "^0.2.8",
"@backstage/theme": "^0.2.6",
"@material-ui/core": "^4.11.0",
"@material-ui/icons": "^4.9.1",
- "@octokit/rest": "^18.0.12",
+ "@octokit/rest": "^18.5.3",
"@roadiehq/backstage-plugin-buildkite": "^1.0.0",
"@roadiehq/backstage-plugin-github-insights": "^1.0.0",
"@roadiehq/backstage-plugin-github-pull-requests": "^1.0.0",
diff --git a/packages/backend-common/README.md b/packages/backend-common/README.md
index dc08d89416..dc69790bc3 100644
--- a/packages/backend-common/README.md
+++ b/packages/backend-common/README.md
@@ -8,6 +8,8 @@ error handling and similar.
Add the library to your backend package:
```sh
+# From your Backstage root directory
+cd packages/backend
yarn add @backstage/backend-common
```
diff --git a/packages/backend-common/api-report.md b/packages/backend-common/api-report.md
index 58b9aa36d9..9969d0ea27 100644
--- a/packages/backend-common/api-report.md
+++ b/packages/backend-common/api-report.md
@@ -12,7 +12,6 @@ import cors from 'cors';
import Docker from 'dockerode';
import { ErrorRequestHandler } from 'express';
import express from 'express';
-import { Format } from 'logform';
import { GithubCredentialsProvider } from '@backstage/integration';
import { GitHubIntegration } from '@backstage/integration';
import { GitLabIntegration } from '@backstage/integration';
@@ -64,7 +63,7 @@ export class BitbucketUrlReader implements UrlReader {
}
// @public (undocumented)
-export const coloredFormat: Format;
+export const coloredFormat: winston.Logform.Format;
// @public @deprecated
export const createDatabase: typeof createDatabaseClient;
diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json
index 998ac475d9..64e3137f7c 100644
--- a/packages/backend-common/package.json
+++ b/packages/backend-common/package.json
@@ -35,7 +35,7 @@
"@backstage/errors": "^0.1.1",
"@backstage/integration": "^0.5.1",
"@google-cloud/storage": "^5.8.0",
- "@octokit/rest": "^18.0.12",
+ "@octokit/rest": "^18.5.3",
"@types/cors": "^2.8.6",
"@types/dockerode": "^3.2.1",
"@types/express": "^4.17.6",
diff --git a/packages/backend/package.json b/packages/backend/package.json
index 440ceca8e5..0422088d64 100644
--- a/packages/backend/package.json
+++ b/packages/backend/package.json
@@ -47,7 +47,7 @@
"@backstage/plugin-techdocs-backend": "^0.7.0",
"@backstage/plugin-todo-backend": "^0.1.3",
"@gitbeaker/node": "^28.0.2",
- "@octokit/rest": "^18.0.12",
+ "@octokit/rest": "^18.5.3",
"azure-devops-node-api": "^10.1.1",
"dockerode": "^3.2.1",
"example-app": "^0.2.25",
diff --git a/packages/backend/src/plugins/kubernetes.ts b/packages/backend/src/plugins/kubernetes.ts
index 131c5c8eee..7906765533 100644
--- a/packages/backend/src/plugins/kubernetes.ts
+++ b/packages/backend/src/plugins/kubernetes.ts
@@ -15,12 +15,11 @@
*/
import { createRouter } from '@backstage/plugin-kubernetes-backend';
-import { Router } from 'express';
import { PluginEnvironment } from '../types';
export default async function createPlugin({
logger,
config,
-}: PluginEnvironment): Promise {
+}: PluginEnvironment) {
return await createRouter({ logger, config });
}
diff --git a/packages/catalog-client/api-report.md b/packages/catalog-client/api-report.md
index a17a6cdc10..4b489ff2e4 100644
--- a/packages/catalog-client/api-report.md
+++ b/packages/catalog-client/api-report.md
@@ -67,7 +67,7 @@ export class CatalogClient implements CatalogApi {
// @public (undocumented)
export type CatalogEntitiesRequest = {
- filter?: Record | undefined;
+ filter?: Record[] | Record | undefined;
fields?: string[] | undefined;
};
diff --git a/packages/catalog-client/src/CatalogClient.test.ts b/packages/catalog-client/src/CatalogClient.test.ts
index 19da45e4ec..359e3a2c60 100644
--- a/packages/catalog-client/src/CatalogClient.test.ts
+++ b/packages/catalog-client/src/CatalogClient.test.ts
@@ -76,7 +76,38 @@ describe('CatalogClient', () => {
expect(response).toEqual(defaultResponse);
});
- it('builds entity search filters properly', async () => {
+ it('builds multiple entity search filters properly', async () => {
+ expect.assertions(2);
+
+ server.use(
+ rest.get(`${mockBaseUrl}/entities`, (req, res, ctx) => {
+ expect(req.url.search).toBe(
+ '?filter=a=1,b=2,b=3,%C3%B6=%3D&filter=a=2',
+ );
+ return res(ctx.json([]));
+ }),
+ );
+
+ const response = await client.getEntities(
+ {
+ filter: [
+ {
+ a: '1',
+ b: ['2', '3'],
+ ö: '=',
+ },
+ {
+ a: '2',
+ },
+ ],
+ },
+ { token },
+ );
+
+ expect(response.items).toEqual([]);
+ });
+
+ it('builds single entity search filter properly', async () => {
expect.assertions(2);
server.use(
diff --git a/packages/catalog-client/src/CatalogClient.ts b/packages/catalog-client/src/CatalogClient.ts
index 3de25e9808..a246b3abab 100644
--- a/packages/catalog-client/src/CatalogClient.ts
+++ b/packages/catalog-client/src/CatalogClient.ts
@@ -56,18 +56,27 @@ export class CatalogClient implements CatalogApi {
request?: CatalogEntitiesRequest,
options?: CatalogRequestOptions,
): Promise> {
- const { filter = {}, fields = [] } = request ?? {};
+ const { filter = [], fields = [] } = request ?? {};
+ const filterItems = [filter].flat();
const params: string[] = [];
- const filterParts: string[] = [];
- for (const [key, value] of Object.entries(filter)) {
- for (const v of [value].flat()) {
- filterParts.push(`${encodeURIComponent(key)}=${encodeURIComponent(v)}`);
+ // filter param can occur multiple times, for example
+ // /api/catalog/entities?filter=metadata.name=wayback-search,kind=component&filter=metadata.name=www-artist,kind=component'
+ // the "outer array" defined by `filter` occurrences corresponds to "anyOf" filters
+ // the "inner array" defined within a `filter` param corresponds to "allOf" filters
+ for (const filterItem of filterItems) {
+ const filterParts: string[] = [];
+ for (const [key, value] of Object.entries(filterItem)) {
+ for (const v of [value].flat()) {
+ filterParts.push(
+ `${encodeURIComponent(key)}=${encodeURIComponent(v)}`,
+ );
+ }
}
- }
- if (filterParts.length) {
- params.push(`filter=${filterParts.join(',')}`);
+ if (filterParts.length) {
+ params.push(`filter=${filterParts.join(',')}`);
+ }
}
if (fields.length) {
diff --git a/packages/catalog-client/src/types.ts b/packages/catalog-client/src/types.ts
index 0d25bf7483..ef907eafa9 100644
--- a/packages/catalog-client/src/types.ts
+++ b/packages/catalog-client/src/types.ts
@@ -17,7 +17,10 @@
import { Entity, EntityName, Location } from '@backstage/catalog-model';
export type CatalogEntitiesRequest = {
- filter?: Record | undefined;
+ filter?:
+ | Record[]
+ | Record
+ | undefined;
fields?: string[] | undefined;
};
diff --git a/packages/catalog-model/examples/all-apis.yaml b/packages/catalog-model/examples/all-apis.yaml
index e23f1b3656..8ec9203b28 100644
--- a/packages/catalog-model/examples/all-apis.yaml
+++ b/packages/catalog-model/examples/all-apis.yaml
@@ -5,6 +5,7 @@ metadata:
description: A collection of all Backstage example APIs
spec:
targets:
+ - ./apis/config-schema-api.yaml
- ./apis/hello-world-api.yaml
- ./apis/petstore-api.yaml
- ./apis/spotify-api.yaml
diff --git a/packages/catalog-model/examples/apis/config-schema-api.yaml b/packages/catalog-model/examples/apis/config-schema-api.yaml
new file mode 100644
index 0000000000..4bd8976614
--- /dev/null
+++ b/packages/catalog-model/examples/apis/config-schema-api.yaml
@@ -0,0 +1,11 @@
+apiVersion: backstage.io/v1alpha1
+kind: API
+metadata:
+ name: config-schema
+ description: A Backstage config schemas.
+spec:
+ type: jsonschema
+ lifecycle: production
+ owner: team-a
+ definition:
+ $text: https://github.com/backstage/backstage/blob/master/plugins/config-schema/dev/example-schema.json
diff --git a/packages/catalog-model/package.json b/packages/catalog-model/package.json
index 64550b35d1..941877aec5 100644
--- a/packages/catalog-model/package.json
+++ b/packages/catalog-model/package.json
@@ -33,7 +33,7 @@
"@types/json-schema": "^7.0.5",
"@types/yup": "^0.29.8",
"ajv": "^7.0.3",
- "json-schema": "^0.2.5",
+ "json-schema": "^0.3.0",
"lodash": "^4.17.15",
"uuid": "^8.0.0",
"yup": "^0.29.3"
diff --git a/packages/cli/README.md b/packages/cli/README.md
index cd6ad8094e..eb5e0e461b 100644
--- a/packages/cli/README.md
+++ b/packages/cli/README.md
@@ -7,13 +7,13 @@ This package provides a CLI for developing Backstage plugins and apps.
Install the package via npm or Yarn:
```sh
-$ npm install --save @backstage/cli
+npm install --save @backstage/cli
```
or
```sh
-$ yarn add @backstage/cli
+yarn add @backstage/cli
```
## Development
diff --git a/packages/cli/package.json b/packages/cli/package.json
index cd61193efe..1110efefe6 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -82,7 +82,7 @@
"inquirer": "^7.0.4",
"jest": "^26.0.1",
"jest-css-modules": "^2.1.0",
- "json-schema": "^0.2.5",
+ "json-schema": "^0.3.0",
"lodash": "^4.17.19",
"mini-css-extract-plugin": "^0.9.0",
"ora": "^5.3.0",
diff --git a/packages/config-loader/package.json b/packages/config-loader/package.json
index 0a0a76c2d6..55d86314af 100644
--- a/packages/config-loader/package.json
+++ b/packages/config-loader/package.json
@@ -35,7 +35,7 @@
"@types/json-schema": "^7.0.6",
"ajv": "^7.0.3",
"fs-extra": "^9.0.0",
- "json-schema": "^0.2.5",
+ "json-schema": "^0.3.0",
"json-schema-merge-allof": "^0.7.0",
"typescript-json-schema": "^0.49.0",
"yaml": "^1.9.2",
diff --git a/packages/core-api/README.md b/packages/core-api/README.md
index f7b8b6c337..a4325a9c5d 100644
--- a/packages/core-api/README.md
+++ b/packages/core-api/README.md
@@ -7,13 +7,13 @@ This package provides the core API used by Backstage plugins and apps.
Do not install this package directly, it is reexported by `@backstage/core`. Install that instead:
```sh
-$ npm install --save @backstage/core
+npm install --save @backstage/core
```
or
```sh
-$ yarn add @backstage/core
+yarn add @backstage/core
```
## Documentation
diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md
index 1b556ac1c3..974dcd3b91 100644
--- a/packages/core/CHANGELOG.md
+++ b/packages/core/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/core
+## 0.7.7
+
+### Patch Changes
+
+- 9afcac5af: Allow passing NavLinkProps to SidebarItem component to use in NavLink
+- e0c9ed759: Add `if` prop to `EntityLayout.Route` to conditionally render tabs
+- 6eaecbd81: Improve owner example value in `MissingAnnotationEmptyState`.
+
## 0.7.6
### Patch Changes
diff --git a/packages/core/README.md b/packages/core/README.md
index 6d8519d46f..0f827d6074 100644
--- a/packages/core/README.md
+++ b/packages/core/README.md
@@ -7,13 +7,13 @@ This package provides the core API used by Backstage plugins and apps.
Install the package via npm or Yarn:
```sh
-$ npm install --save @backstage/core
+npm install --save @backstage/core
```
or
```sh
-$ yarn add @backstage/core
+yarn add @backstage/core
```
## Documentation
diff --git a/packages/core/package.json b/packages/core/package.json
index 344ea10398..75f5f67ae1 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/core",
"description": "Core API used by Backstage plugins and apps",
- "version": "0.7.6",
+ "version": "0.7.7",
"private": false,
"publishConfig": {
"access": "public",
@@ -57,7 +57,7 @@
"react": "^16.12.0",
"react-dom": "^16.12.0",
"react-helmet": "6.1.0",
- "react-hook-form": "^6.6.0",
+ "react-hook-form": "^6.15.4",
"react-markdown": "^5.0.2",
"react-router": "6.0.0-beta.0",
"react-router-dom": "6.0.0-beta.0",
diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md
index c821a3ab81..430e7f003a 100644
--- a/packages/create-app/CHANGELOG.md
+++ b/packages/create-app/CHANGELOG.md
@@ -1,5 +1,44 @@
# @backstage/create-app
+## 0.3.20
+
+### Patch Changes
+
+- 73f3f5d78: Updates the end to end test in the app to match the new catalog index page title. To apply this change to an existing app, update `packages/app/cypress/integration/app.js` to search for `"My Company Catalog"` instead of `"My Company Service Catalog"`.
+- Updated dependencies [1ce80ff02]
+- Updated dependencies [4c42ecca2]
+- Updated dependencies [c614ede9a]
+- Updated dependencies [9afcac5af]
+- Updated dependencies [07a7806c3]
+- Updated dependencies [f6efa71ee]
+- Updated dependencies [19a4dd710]
+- Updated dependencies [a99e0bc42]
+- Updated dependencies [dcd54c7cd]
+- Updated dependencies [da546ce00]
+- Updated dependencies [e0c9ed759]
+- Updated dependencies [6fbd7beca]
+- Updated dependencies [15cbe6815]
+- Updated dependencies [39bdaa004]
+- Updated dependencies [cb8c848a3]
+- Updated dependencies [21fddf452]
+- Updated dependencies [17915e29b]
+- Updated dependencies [a1783f306]
+- Updated dependencies [6eaecbd81]
+- Updated dependencies [23769512a]
+- Updated dependencies [1a142ae8a]
+ - @backstage/plugin-api-docs@0.4.12
+ - @backstage/plugin-github-actions@0.4.4
+ - @backstage/plugin-catalog-import@0.5.4
+ - @backstage/plugin-explore@0.3.4
+ - @backstage/plugin-lighthouse@0.2.15
+ - @backstage/core@0.7.7
+ - @backstage/plugin-scaffolder@0.9.2
+ - @backstage/plugin-catalog@0.5.6
+ - @backstage/plugin-catalog-backend@0.8.1
+ - @backstage/plugin-search@0.3.5
+ - @backstage/plugin-techdocs@0.9.0
+ - @backstage/plugin-scaffolder-backend@0.10.1
+
## 0.3.19
### Patch Changes
diff --git a/packages/create-app/package.json b/packages/create-app/package.json
index 5cf6cdd78e..071a0a5ebd 100644
--- a/packages/create-app/package.json
+++ b/packages/create-app/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/create-app",
"description": "Create app package for Backstage",
- "version": "0.3.19",
+ "version": "0.3.20",
"private": false,
"publishConfig": {
"access": "public"
diff --git a/packages/create-app/templates/default-app/packages/backend/package.json.hbs b/packages/create-app/templates/default-app/packages/backend/package.json.hbs
index 138bcaec8d..e2b5b04a60 100644
--- a/packages/create-app/templates/default-app/packages/backend/package.json.hbs
+++ b/packages/create-app/templates/default-app/packages/backend/package.json.hbs
@@ -29,7 +29,7 @@
"@backstage/plugin-scaffolder-backend": "^{{version '@backstage/plugin-scaffolder-backend'}}",
"@backstage/plugin-techdocs-backend": "^{{version '@backstage/plugin-techdocs-backend'}}",
"@gitbeaker/node": "^28.0.2",
- "@octokit/rest": "^18.0.12",
+ "@octokit/rest": "^18.5.3",
"dockerode": "^3.2.1",
"express": "^4.17.1",
"express-promise-router": "^4.1.0",
diff --git a/packages/dev-utils/README.md b/packages/dev-utils/README.md
index 4b08a5ca6d..85d961ad0b 100644
--- a/packages/dev-utils/README.md
+++ b/packages/dev-utils/README.md
@@ -9,13 +9,13 @@ This package provides utilities that help in developing plugins for Backstage, l
Install the package via npm or Yarn:
```sh
-$ npm install --save-dev @backstage/dev-utils
+npm install --save-dev @backstage/dev-utils
```
or
```sh
-$ yarn add -D @backstage/dev-utils
+yarn add -D @backstage/dev-utils
```
## Documentation
diff --git a/packages/integration/package.json b/packages/integration/package.json
index dcfae4ea05..b7c8bee957 100644
--- a/packages/integration/package.json
+++ b/packages/integration/package.json
@@ -32,8 +32,8 @@
"@backstage/config": "^0.1.2",
"cross-fetch": "^3.0.6",
"git-url-parse": "^11.4.4",
- "@octokit/rest": "^18.0.12",
- "@octokit/auth-app": "^2.10.5",
+ "@octokit/rest": "^18.5.3",
+ "@octokit/auth-app": "^3.4.0",
"luxon": "^1.25.0"
},
"devDependencies": {
diff --git a/packages/techdocs-common/CHANGELOG.md b/packages/techdocs-common/CHANGELOG.md
index 9dd6447a14..1788502e45 100644
--- a/packages/techdocs-common/CHANGELOG.md
+++ b/packages/techdocs-common/CHANGELOG.md
@@ -1,5 +1,11 @@
# @backstage/techdocs-common
+## 0.5.1
+
+### Patch Changes
+
+- f4af06ebe: Gracefully handle HTTP request failures in download method of AzureBlobStorage publisher.
+
## 0.5.0
### Minor Changes
diff --git a/packages/techdocs-common/package.json b/packages/techdocs-common/package.json
index c41dce72b1..e749b33919 100644
--- a/packages/techdocs-common/package.json
+++ b/packages/techdocs-common/package.json
@@ -1,7 +1,7 @@
{
"name": "@backstage/techdocs-common",
"description": "Common functionalities for TechDocs, to be shared between techdocs-backend plugin and techdocs-cli",
- "version": "0.5.0",
+ "version": "0.5.1",
"main": "src/index.ts",
"types": "src/index.ts",
"private": false,
diff --git a/packages/techdocs-common/src/stages/publish/awsS3.ts b/packages/techdocs-common/src/stages/publish/awsS3.ts
index 9c6684fdca..d628c860fd 100644
--- a/packages/techdocs-common/src/stages/publish/awsS3.ts
+++ b/packages/techdocs-common/src/stages/publish/awsS3.ts
@@ -80,10 +80,17 @@ export class AwsS3Publish implements PublisherBase {
'techdocs.publisher.awsS3.endpoint',
);
+ // AWS forcePathStyle is an optional config. If missing, it defaults to false. Needs to be enabled for cases
+ // where endpoint url points to locally hosted S3 compatible storage like Localstack
+ const s3ForcePathStyle = config.getOptionalBoolean(
+ 'techdocs.publisher.awsS3.s3ForcePathStyle',
+ );
+
const storageClient = new aws.S3({
credentials,
...(region && { region }),
...(endpoint && { endpoint }),
+ ...(s3ForcePathStyle && { s3ForcePathStyle }),
});
return new AwsS3Publish(storageClient, bucketName, logger);
diff --git a/packages/test-utils/README.md b/packages/test-utils/README.md
index 0f95d4ab26..ace7339733 100644
--- a/packages/test-utils/README.md
+++ b/packages/test-utils/README.md
@@ -7,13 +7,13 @@ This package provides utilities that can be used to test plugins and apps for Ba
Install the package via npm or Yarn:
```sh
-$ npm install --save-dev @backstage/test-utils
+npm install --save-dev @backstage/test-utils
```
or
```sh
-$ yarn add -D @backstage/test-utils
+yarn add -D @backstage/test-utils
```
## Documentation
diff --git a/packages/theme/README.md b/packages/theme/README.md
index 9855d6730d..de94ff1623 100644
--- a/packages/theme/README.md
+++ b/packages/theme/README.md
@@ -7,13 +7,13 @@ This package provides the extended Material UI Theme(s) that power Backstage.
Install the package via npm or Yarn:
```sh
-$ npm install --save @backstage/theme
+npm install --save @backstage/theme
```
or
```sh
-$ yarn add @backstage/theme
+yarn add @backstage/theme
```
## Documentation
diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md
index a2d5a28e41..f268ba1c4d 100644
--- a/plugins/api-docs/CHANGELOG.md
+++ b/plugins/api-docs/CHANGELOG.md
@@ -1,5 +1,19 @@
# @backstage/plugin-api-docs
+## 0.4.12
+
+### Patch Changes
+
+- 1ce80ff02: Resolve issues with AsyncAPI rendering by updating `@asyncapi/react-component`
+ to `0.23.0`. The theming of the component is adjusted to the latest styling
+ changes.
+- c614ede9a: Updated README to have up-to-date install instructions.
+- 07a7806c3: Added fields filtering in get API entities to avoid the requesting of unused data
+- Updated dependencies [9afcac5af]
+- Updated dependencies [e0c9ed759]
+- Updated dependencies [6eaecbd81]
+ - @backstage/core@0.7.7
+
## 0.4.11
### Patch Changes
diff --git a/plugins/api-docs/README.md b/plugins/api-docs/README.md
index dac4b6ff4d..1a05256704 100644
--- a/plugins/api-docs/README.md
+++ b/plugins/api-docs/README.md
@@ -15,6 +15,7 @@ Right now, the following API formats are supported:
- [OpenAPI](https://swagger.io/specification/) 2 & 3
- [AsyncAPI](https://www.asyncapi.com/docs/specifications/latest/)
- [GraphQL](https://graphql.org/learn/schema/)
+- [JSON Schema](https://json-schema.org/)
Other formats are displayed as plain text, but this can easily be extended.
@@ -28,15 +29,15 @@ To link that a component provides or consumes an API, see the [`providesApis`](h
1. Install the API docs plugin
```bash
-# packages/app
-
+# From your Backstage root directory
+cd packages/app
yarn add @backstage/plugin-api-docs
```
2. Add the `ApiExplorerPage` extension to the app:
```tsx
-// packages/app/src/App.tsx
+// In packages/app/src/App.tsx
import { ApiExplorerPage } from '@backstage/plugin-api-docs';
@@ -56,7 +57,7 @@ import {
} from '@backstage/plugin-api-docs';
const apiPage = (
-
+
@@ -80,7 +81,7 @@ const apiPage = (
-
+
);
// ...
diff --git a/plugins/api-docs/dev/index.tsx b/plugins/api-docs/dev/index.tsx
index fbfab37f5b..d51d3a714c 100644
--- a/plugins/api-docs/dev/index.tsx
+++ b/plugins/api-docs/dev/index.tsx
@@ -27,6 +27,7 @@ import {
} from '../src';
import asyncapiApiEntity from './asyncapi-example-api.yaml';
import graphqlApiEntity from './graphql-example-api.yaml';
+import jsonschemaApiEntity from './jsonschema-example-api.yaml';
import openapiApiEntity from './openapi-example-api.yaml';
import otherApiEntity from './other-example-api.yaml';
@@ -41,6 +42,7 @@ createDevApp()
items: [
openapiApiEntity,
asyncapiApiEntity,
+ jsonschemaApiEntity,
graphqlApiEntity,
otherApiEntity,
],
@@ -87,6 +89,19 @@ createDevApp()
),
})
+ .addPage({
+ title: 'JSON Schema',
+ element: (
+
+
+
+
+
+
+
+
+ ),
+ })
.addPage({
title: 'GraphQL',
element: (
diff --git a/plugins/api-docs/dev/jsonschema-example-api.yaml b/plugins/api-docs/dev/jsonschema-example-api.yaml
new file mode 100644
index 0000000000..a34b4f9a49
--- /dev/null
+++ b/plugins/api-docs/dev/jsonschema-example-api.yaml
@@ -0,0 +1,32 @@
+apiVersion: backstage.io/v1alpha1
+kind: API
+metadata:
+ name: persons
+ description: Person dataset
+spec:
+ type: jsonschema
+ lifecycle: experimental
+ owner: team-c
+ # From https://json-schema.org/learn/miscellaneous-examples.html
+ definition: |
+ {
+ "$id": "https://example.com/person.schema.json",
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "title": "Person",
+ "type": "object",
+ "properties": {
+ "firstName": {
+ "type": "string",
+ "description": "The person's first name."
+ },
+ "lastName": {
+ "type": "string",
+ "description": "The person's last name."
+ },
+ "age": {
+ "description": "Age in years which must be equal to or greater than zero.",
+ "type": "integer",
+ "minimum": 0
+ }
+ }
+ }
diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json
index 532dacf684..be5d5186d2 100644
--- a/plugins/api-docs/package.json
+++ b/plugins/api-docs/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-api-docs",
- "version": "0.4.11",
+ "version": "0.4.12",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -31,13 +31,16 @@
"dependencies": {
"@asyncapi/react-component": "^0.23.0",
"@backstage/catalog-model": "^0.7.7",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/plugin-catalog-react": "^0.1.4",
"@backstage/theme": "^0.2.6",
"@material-icons/font": "^1.0.2",
"@material-ui/core": "^4.11.0",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.45",
+ "@stoplight/json-schema-viewer": "^4.0.0-beta.16",
+ "@stoplight/mosaic": "^1.0.0-beta.46",
+ "@stoplight/reporter": "^1.10.0",
"@types/react": "^16.9",
"graphiql": "^1.0.0-alpha.10",
"graphql": "^15.3.0",
diff --git a/plugins/api-docs/src/components/ApiDefinitionCard/ApiDefinitionWidget.tsx b/plugins/api-docs/src/components/ApiDefinitionCard/ApiDefinitionWidget.tsx
index 360404af40..fc23c338ee 100644
--- a/plugins/api-docs/src/components/ApiDefinitionCard/ApiDefinitionWidget.tsx
+++ b/plugins/api-docs/src/components/ApiDefinitionCard/ApiDefinitionWidget.tsx
@@ -16,6 +16,7 @@
import React from 'react';
import { AsyncApiDefinitionWidget } from '../AsyncApiDefinitionWidget';
import { GraphQlDefinitionWidget } from '../GraphQlDefinitionWidget';
+import { JsonSchemaDefinitionWidget } from '../JsonSchemaDefinitionWidget';
import { OpenApiDefinitionWidget } from '../OpenApiDefinitionWidget';
export type ApiDefinitionWidget = {
@@ -51,5 +52,13 @@ export function defaultDefinitionWidgets(): ApiDefinitionWidget[] {
),
},
+ {
+ type: 'jsonschema',
+ title: 'JSON Schema',
+ rawLanguage: 'json',
+ component: definition => (
+
+ ),
+ },
];
}
diff --git a/plugins/api-docs/src/components/JsonSchemaDefinitionWidget/JsonSchemaDefinitionWidget.test.tsx b/plugins/api-docs/src/components/JsonSchemaDefinitionWidget/JsonSchemaDefinitionWidget.test.tsx
new file mode 100644
index 0000000000..b4077e6ea2
--- /dev/null
+++ b/plugins/api-docs/src/components/JsonSchemaDefinitionWidget/JsonSchemaDefinitionWidget.test.tsx
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2020 Spotify AB
+ *
+ * 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 { renderInTestApp } from '@backstage/test-utils';
+import React from 'react';
+import { JsonSchemaDefinitionWidget } from './JsonSchemaDefinitionWidget';
+
+describe('', () => {
+ it('renders json schema', async () => {
+ // From https://json-schema.org/learn/miscellaneous-examples.html
+ const definition = `
+{
+ "$id": "https://example.com/person.schema.json",
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
+ "title": "Person",
+ "type": "object",
+ "properties": {
+ "firstName": {
+ "type": "string",
+ "description": "The person's first name."
+ },
+ "lastName": {
+ "type": "string",
+ "description": "The person's last name."
+ },
+ "age": {
+ "description": "Age in years which must be equal to or greater than zero.",
+ "type": "integer",
+ "minimum": 0
+ }
+ }
+}
+ `;
+ const { getByText } = await renderInTestApp(
+ ,
+ );
+
+ expect(getByText(/lastName/i)).toBeInTheDocument();
+ expect(getByText(/The person's last name./i)).toBeInTheDocument();
+ });
+
+ it('renders error if definition is missing', async () => {
+ const { getByText } = await renderInTestApp(
+ ,
+ );
+ expect(getByText(/No schema defined/i)).toBeInTheDocument();
+ });
+});
diff --git a/plugins/api-docs/src/components/JsonSchemaDefinitionWidget/JsonSchemaDefinitionWidget.tsx b/plugins/api-docs/src/components/JsonSchemaDefinitionWidget/JsonSchemaDefinitionWidget.tsx
new file mode 100644
index 0000000000..ea8ac652c8
--- /dev/null
+++ b/plugins/api-docs/src/components/JsonSchemaDefinitionWidget/JsonSchemaDefinitionWidget.tsx
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2020 Spotify AB
+ *
+ * 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 { useTheme } from '@material-ui/core';
+import { JsonSchemaViewer } from '@stoplight/json-schema-viewer';
+import { injectStyles, useThemeStore } from '@stoplight/mosaic';
+import React, { useMemo } from 'react';
+import { useEffectOnce } from 'react-use';
+
+injectStyles();
+
+type Props = {
+ definition: any;
+};
+
+export const JsonSchemaDefinitionWidget = ({ definition }: Props) => {
+ const schema = useMemo(() => JSON.parse(definition), [definition]);
+ const theme = useTheme();
+ const themeStore = useThemeStore();
+
+ useEffectOnce(() => {
+ themeStore.setColor('background', theme.palette.background.paper);
+ themeStore.setColor('text', theme.palette.text.primary);
+ themeStore.setColor('primary', theme.palette.primary.main);
+ themeStore.setColor('success', theme.palette.success.main);
+ themeStore.setColor('warning', theme.palette.warning.main);
+ themeStore.setColor('danger', theme.palette.error.main);
+ themeStore.setMode(theme.palette.type);
+ });
+ return (
+
+ );
+};
diff --git a/plugins/api-docs/src/components/JsonSchemaDefinitionWidget/index.ts b/plugins/api-docs/src/components/JsonSchemaDefinitionWidget/index.ts
new file mode 100644
index 0000000000..47d2619ec2
--- /dev/null
+++ b/plugins/api-docs/src/components/JsonSchemaDefinitionWidget/index.ts
@@ -0,0 +1,17 @@
+/*
+ * Copyright 2020 Spotify AB
+ *
+ * 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 { JsonSchemaDefinitionWidget } from './JsonSchemaDefinitionWidget';
diff --git a/plugins/api-docs/src/components/index.ts b/plugins/api-docs/src/components/index.ts
index cfd985f47c..afac37dc31 100644
--- a/plugins/api-docs/src/components/index.ts
+++ b/plugins/api-docs/src/components/index.ts
@@ -20,3 +20,4 @@ export * from './AsyncApiDefinitionWidget';
export * from './ComponentsCards';
export * from './OpenApiDefinitionWidget';
export * from './PlainApiDefinitionWidget';
+export * from './JsonSchemaDefinitionWidget';
diff --git a/plugins/app-backend/README.md b/plugins/app-backend/README.md
index 2dc302accb..a35cecfb9c 100644
--- a/plugins/app-backend/README.md
+++ b/plugins/app-backend/README.md
@@ -7,7 +7,9 @@ This backend plugin can be installed to serve static content of a Backstage app.
Add both this package and your local frontend app package as dependencies to your backend, for example
```bash
-yarn add @backstage/plugin-app-backend example-app
+# From your Backstage root directory
+cd packages/backend
+yarn add @backstage/plugin-app-backend app
```
By adding the app package as a dependency we ensure that it is built as part of the backend, and that it can be resolved at runtime.
diff --git a/plugins/badges/package.json b/plugins/badges/package.json
index 9f0c49af7e..8f7b5865a1 100644
--- a/plugins/badges/package.json
+++ b/plugins/badges/package.json
@@ -21,7 +21,7 @@
},
"dependencies": {
"@backstage/catalog-model": "^0.7.6",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/errors": "^0.1.1",
"@backstage/plugin-catalog-react": "^0.1.3",
"@backstage/theme": "^0.2.6",
diff --git a/plugins/bitrise/CHANGELOG.md b/plugins/bitrise/CHANGELOG.md
index 66314933bb..ecb26efd50 100644
--- a/plugins/bitrise/CHANGELOG.md
+++ b/plugins/bitrise/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-bitrise
+## 0.1.2
+
+### Patch Changes
+
+- c614ede9a: Updated README to have up-to-date install instructions.
+- Updated dependencies [9afcac5af]
+- Updated dependencies [e0c9ed759]
+- Updated dependencies [6eaecbd81]
+ - @backstage/core@0.7.7
+
## 0.1.1
### Patch Changes
diff --git a/plugins/bitrise/README.md b/plugins/bitrise/README.md
index 411db3198e..1add03df23 100644
--- a/plugins/bitrise/README.md
+++ b/plugins/bitrise/README.md
@@ -8,9 +8,9 @@ Welcome to the Bitrise plugin!
## Installation
```sh
-# The plugin must be added in the app package
-$ cd packages/app
-$ yarn add @backstage/plugin-bitrise
+# From your Backstage root directory
+cd packages/app
+yarn add @backstage/plugin-bitrise
```
Bitrise Plugin exposes an entity tab component named `EntityBitriseContent`. You can include it in the
@@ -22,7 +22,7 @@ import { EntityBitriseContent } from '@backstage/plugin-bitrise';
// Farther down at the website declaration
const websiteEntityPage = (
-
+
{/* Place the following section where you want the tab to appear */}
diff --git a/plugins/bitrise/package.json b/plugins/bitrise/package.json
index 83911cdfc4..950392f732 100644
--- a/plugins/bitrise/package.json
+++ b/plugins/bitrise/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-bitrise",
- "version": "0.1.1",
+ "version": "0.1.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -21,7 +21,7 @@
},
"dependencies": {
"@backstage/catalog-model": "^0.7.2",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/plugin-catalog-react": "^0.1.2",
"@backstage/theme": "^0.2.6",
"@material-ui/core": "^4.11.0",
diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md
index 28efc1c5d3..ed87e4dbc5 100644
--- a/plugins/catalog-backend/CHANGELOG.md
+++ b/plugins/catalog-backend/CHANGELOG.md
@@ -1,5 +1,13 @@
# @backstage/plugin-catalog-backend
+## 0.8.1
+
+### Patch Changes
+
+- a99e0bc42: Entity lifecycle and owner are now indexed by the `DefaultCatalogCollator`. A `locationTemplate` may now optionally be provided to its constructor to reflect a custom catalog entity path in the Backstage frontend.
+- Updated dependencies [e1e757569]
+ - @backstage/plugin-search-backend-node@0.1.4
+
## 0.8.0
### Minor Changes
diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json
index a5bb9e00af..7649067a44 100644
--- a/plugins/catalog-backend/package.json
+++ b/plugins/catalog-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-backend",
- "version": "0.8.0",
+ "version": "0.8.1",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -35,7 +35,7 @@
"@backstage/config": "^0.1.4",
"@backstage/errors": "^0.1.1",
"@backstage/integration": "^0.5.1",
- "@backstage/plugin-search-backend-node": "^0.1.3",
+ "@backstage/plugin-search-backend-node": "^0.1.4",
"@backstage/search-common": "^0.1.1",
"@octokit/graphql": "^4.5.8",
"@types/express": "^4.17.6",
diff --git a/plugins/catalog-backend/src/ingestion/processors/github/github.test.ts b/plugins/catalog-backend/src/ingestion/processors/github/github.test.ts
index 15280b96b8..88bddc93fb 100644
--- a/plugins/catalog-backend/src/ingestion/processors/github/github.test.ts
+++ b/plugins/catalog-backend/src/ingestion/processors/github/github.test.ts
@@ -156,7 +156,7 @@ describe('github', () => {
describe('getOrganizationRepositories', () => {
it('read repositories', async () => {
const input: QueryResponse = {
- organization: {
+ repositoryOwner: {
repositories: {
nodes: [
{
diff --git a/plugins/catalog-backend/src/ingestion/processors/github/github.ts b/plugins/catalog-backend/src/ingestion/processors/github/github.ts
index e07ea8917b..f6cfcb8901 100644
--- a/plugins/catalog-backend/src/ingestion/processors/github/github.ts
+++ b/plugins/catalog-backend/src/ingestion/processors/github/github.ts
@@ -20,7 +20,8 @@ import { graphql } from '@octokit/graphql';
// Graphql types
export type QueryResponse = {
- organization: Organization;
+ organization?: Organization;
+ repositoryOwner?: Organization | User;
};
export type Organization = {
@@ -41,6 +42,7 @@ export type User = {
avatarUrl?: string;
email?: string;
name?: string;
+ repositories?: Connection;
};
export type Team = {
@@ -228,28 +230,27 @@ export async function getOrganizationRepositories(
org: string,
): Promise<{ repositories: Repository[] }> {
const query = `
- query repositories($org: String!, $cursor: String) {
- organization(login: $org) {
- name
- repositories(first: 100, after: $cursor) {
- nodes {
- name
- url
- isArchived
- }
- pageInfo {
- hasNextPage
- endCursor
+ query repositories($org: String!, $cursor: String) {
+ repositoryOwner(login: $org) {
+ login
+ repositories(first: 100, after: $cursor) {
+ nodes {
+ name
+ url
+ isArchived
+ }
+ pageInfo {
+ hasNextPage
+ endCursor
+ }
}
}
- }
- }
- `;
+ }`;
const repositories = await queryWithPaging(
client,
query,
- r => r.organization?.repositories,
+ r => r.repositoryOwner?.repositories,
x => x,
{ org },
);
diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md
index 8c189a5f9b..4b0d264a52 100644
--- a/plugins/catalog-import/CHANGELOG.md
+++ b/plugins/catalog-import/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-catalog-import
+## 0.5.4
+
+### Patch Changes
+
+- c614ede9a: Updated README to have up-to-date install instructions.
+- Updated dependencies [9afcac5af]
+- Updated dependencies [e0c9ed759]
+- Updated dependencies [6eaecbd81]
+ - @backstage/core@0.7.7
+
## 0.5.3
### Patch Changes
diff --git a/plugins/catalog-import/README.md b/plugins/catalog-import/README.md
index 5e773ad288..bad48a8486 100644
--- a/plugins/catalog-import/README.md
+++ b/plugins/catalog-import/README.md
@@ -18,8 +18,8 @@ Some features are not yet available for all supported Git providers.
1. Install the Catalog Import Plugin:
```bash
-# packages/app
-
+# From your Backstage root directory
+cd packages/app
yarn add @backstage/plugin-catalog-import
```
diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json
index 9ba32d830c..ccc2dd24a7 100644
--- a/plugins/catalog-import/package.json
+++ b/plugins/catalog-import/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog-import",
- "version": "0.5.3",
+ "version": "0.5.4",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -32,7 +32,7 @@
"dependencies": {
"@backstage/catalog-model": "^0.7.6",
"@backstage/catalog-client": "^0.3.9",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/integration": "^0.5.0",
"@backstage/integration-react": "^0.1.1",
"@backstage/plugin-catalog-react": "^0.1.4",
@@ -40,7 +40,7 @@
"@material-ui/core": "^4.11.0",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.45",
- "@octokit/rest": "^18.0.12",
+ "@octokit/rest": "^18.5.3",
"@types/react": "^16.9",
"git-url-parse": "^11.4.4",
"js-base64": "^3.6.0",
diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md
index 35e000f130..d6254a347a 100644
--- a/plugins/catalog/CHANGELOG.md
+++ b/plugins/catalog/CHANGELOG.md
@@ -1,5 +1,18 @@
# @backstage/plugin-catalog
+## 0.5.6
+
+### Patch Changes
+
+- 19a4dd710: Removed unused `swr` dependency.
+- da546ce00: Support `gridItem` variant for `EntityLinksCard`.
+- e0c9ed759: Add `if` prop to `EntityLayout.Route` to conditionally render tabs
+- 1a142ae8a: Switch out the time-based personal greeting for a plain title on the catalog index page, and remove the clocks for different timezones.
+- Updated dependencies [9afcac5af]
+- Updated dependencies [e0c9ed759]
+- Updated dependencies [6eaecbd81]
+ - @backstage/core@0.7.7
+
## 0.5.5
### Patch Changes
diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json
index 965a0b327b..4f54735611 100644
--- a/plugins/catalog/package.json
+++ b/plugins/catalog/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-catalog",
- "version": "0.5.5",
+ "version": "0.5.6",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -32,7 +32,7 @@
"dependencies": {
"@backstage/catalog-client": "^0.3.10",
"@backstage/catalog-model": "^0.7.7",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/errors": "^0.1.1",
"@backstage/integration": "^0.5.1",
"@backstage/integration-react": "^0.1.1",
diff --git a/plugins/circleci/CHANGELOG.md b/plugins/circleci/CHANGELOG.md
index ff01f44258..8c6d6e094d 100644
--- a/plugins/circleci/CHANGELOG.md
+++ b/plugins/circleci/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-circleci
+## 0.2.13
+
+### Patch Changes
+
+- c614ede9a: Updated README to have up-to-date install instructions.
+- Updated dependencies [9afcac5af]
+- Updated dependencies [e0c9ed759]
+- Updated dependencies [6eaecbd81]
+ - @backstage/core@0.7.7
+
## 0.2.12
### Patch Changes
diff --git a/plugins/circleci/README.md b/plugins/circleci/README.md
index 868ae6e26a..c878c66e56 100644
--- a/plugins/circleci/README.md
+++ b/plugins/circleci/README.md
@@ -7,34 +7,35 @@ Website: [https://circleci.com/](https://circleci.com/)
## Setup
-1. If you have standalone app (you didn't clone this repo), then do
+1. If you have a standalone app (you didn't clone this repo), then do
```bash
+# From your Backstage root directory
+cd packages/app
yarn add @backstage/plugin-circleci
```
-2. Add the `EntityCircleCIContent` extension to the entity page in the app:
+2. Add the `EntityCircleCIContent` extension to the entity page in your app:
```tsx
-// packages/app/src/components/catalog/EntityPage.tsx
-import { EntityCircleCIContent } from '@backstage/plugin-circleci';
+// In packages/app/src/components/catalog/EntityPage.tsx
+import {
+ EntityCircleCIContent,
+ isCircleCIAvailable,
+} from '@backstage/plugin-circleci';
-// ...
-const serviceEntityPage = (
-
- ...
-
+// For example in the CI/CD section
+const cicdContent = (
+
+
-
- ...
-
-);
+
```
4. Add proxy config:
```yaml
-// app-config.yaml
+# In app-config.yaml
proxy:
'/circleci/api':
target: https://circleci.com/api/v1.1
@@ -42,10 +43,11 @@ proxy:
Circle-Token: ${CIRCLECI_AUTH_TOKEN}
```
-5. Get and provide `CIRCLECI_AUTH_TOKEN` as env variable (https://circleci.com/docs/api/#add-an-api-token)
-6. Add `circleci.com/project-slug` annotation to your catalog-info.yaml file in format // (https://backstage.io/docs/architecture-decisions/adrs-adr002#format)
+5. Get and provide a `CIRCLECI_AUTH_TOKEN` as an environment variable (see the [CircleCI docs](https://circleci.com/docs/api/#add-an-api-token)).
+6. Add a `circleci.com/project-slug` annotation to your respective `catalog-info.yaml` files, on the format // (https://backstage.io/docs/architecture-decisions/adrs-adr002#format).
```yaml
+# Example catalog-info.yaml entity definition file
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json
index 5c05c0ee6f..20c757eda0 100644
--- a/plugins/circleci/package.json
+++ b/plugins/circleci/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-circleci",
- "version": "0.2.12",
+ "version": "0.2.13",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -32,7 +32,7 @@
},
"dependencies": {
"@backstage/catalog-model": "^0.7.3",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/plugin-catalog-react": "^0.1.2",
"@backstage/theme": "^0.2.6",
"@material-ui/core": "^4.11.0",
diff --git a/plugins/cloudbuild/package.json b/plugins/cloudbuild/package.json
index 6ad0b8bfa9..cb2a08fce1 100644
--- a/plugins/cloudbuild/package.json
+++ b/plugins/cloudbuild/package.json
@@ -32,7 +32,7 @@
"dependencies": {
"@backstage/catalog-model": "^0.7.3",
"@backstage/plugin-catalog-react": "^0.1.2",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/theme": "^0.2.6",
"@material-ui/core": "^4.11.0",
"@material-ui/icons": "^4.9.1",
diff --git a/plugins/code-coverage-backend/CHANGELOG.md b/plugins/code-coverage-backend/CHANGELOG.md
index cfc08db5c4..d7a0f136f5 100644
--- a/plugins/code-coverage-backend/CHANGELOG.md
+++ b/plugins/code-coverage-backend/CHANGELOG.md
@@ -1,5 +1,11 @@
# @backstage/plugin-code-coverage-backend
+## 0.1.3
+
+### Patch Changes
+
+- d47c2628b: Include migrations
+
## 0.1.2
### Patch Changes
diff --git a/plugins/code-coverage-backend/package.json b/plugins/code-coverage-backend/package.json
index 3ae76e3fe0..c2bebbf293 100644
--- a/plugins/code-coverage-backend/package.json
+++ b/plugins/code-coverage-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-code-coverage-backend",
- "version": "0.1.2",
+ "version": "0.1.3",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
diff --git a/plugins/code-coverage/package.json b/plugins/code-coverage/package.json
index 1adc94fff7..f5c36811cc 100644
--- a/plugins/code-coverage/package.json
+++ b/plugins/code-coverage/package.json
@@ -22,7 +22,7 @@
"dependencies": {
"@backstage/catalog-model": "^0.7.7",
"@backstage/config": "^0.1.4",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/errors": "^0.1.1",
"@backstage/plugin-catalog-react": "^0.1.4",
"@backstage/theme": "^0.2.6",
diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json
index 55f785a7a4..a017529400 100644
--- a/plugins/config-schema/package.json
+++ b/plugins/config-schema/package.json
@@ -21,7 +21,7 @@
},
"dependencies": {
"@backstage/config": "^0.1.4",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/errors": "^0.1.1",
"@backstage/theme": "^0.2.6",
"@material-ui/core": "^4.11.0",
diff --git a/plugins/cost-insights/CHANGELOG.md b/plugins/cost-insights/CHANGELOG.md
index 47fa9633bf..c86a71f8c9 100644
--- a/plugins/cost-insights/CHANGELOG.md
+++ b/plugins/cost-insights/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-cost-insights
+## 0.8.5
+
+### Patch Changes
+
+- b98de52ae: Support a `name` prop for Projects for display purposes
+- c614ede9a: Updated README to have up-to-date install instructions.
+- Updated dependencies [9afcac5af]
+- Updated dependencies [e0c9ed759]
+- Updated dependencies [6eaecbd81]
+ - @backstage/core@0.7.7
+
## 0.8.4
### Patch Changes
diff --git a/plugins/cost-insights/README.md b/plugins/cost-insights/README.md
index f737c022f3..3fee89e77a 100644
--- a/plugins/cost-insights/README.md
+++ b/plugins/cost-insights/README.md
@@ -16,6 +16,8 @@ Learn more with the Backstage blog post [New Cost Insights plugin: The engineer'
## Install
```bash
+# From your Backstage root directory
+cd packages/app
yarn add @backstage/plugin-cost-insights
```
diff --git a/plugins/cost-insights/contrib/aws-cost-explorer-api.md b/plugins/cost-insights/contrib/aws-cost-explorer-api.md
index 10622b7917..d6c5250759 100644
--- a/plugins/cost-insights/contrib/aws-cost-explorer-api.md
+++ b/plugins/cost-insights/contrib/aws-cost-explorer-api.md
@@ -33,6 +33,8 @@ Cost Explorer permission policy:
Install the AWS Cost Explorer SDK. The AWS docs recommend using the SDK over making calls to the API directly as it simplifies authentication and provides direct access to commands.
```bash
+# From your Backstage root directory
+cd packages/app
yarn add @aws-sdk/client-cost-explorer
```
diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json
index c68fdde509..39e3fe1791 100644
--- a/plugins/cost-insights/package.json
+++ b/plugins/cost-insights/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-cost-insights",
- "version": "0.8.4",
+ "version": "0.8.5",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -31,7 +31,7 @@
},
"dependencies": {
"@backstage/config": "^0.1.3",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/theme": "^0.2.6",
"@material-ui/core": "^4.11.0",
"@material-ui/icons": "^4.9.1",
diff --git a/plugins/cost-insights/src/components/CostGrowth/CostGrowth.test.tsx b/plugins/cost-insights/src/components/CostGrowth/CostGrowth.test.tsx
index f8c06845c9..7133ae81e3 100644
--- a/plugins/cost-insights/src/components/CostGrowth/CostGrowth.test.tsx
+++ b/plugins/cost-insights/src/components/CostGrowth/CostGrowth.test.tsx
@@ -46,6 +46,7 @@ describe.each`
engineerCost | ratio | amount | expected
${200_000} | ${0} | ${0} | ${'Negligible'}
${200_000} | ${0} | ${8_333} | ${'Negligible'}
+ ${200_000} | ${undefined} | ${10_000} | ${`~1 ${engineers.unit}`}
${200_000} | ${0.000000001} | ${8_334} | ${`0% or ~1 ${engineers.unit}`}
${200_000} | ${-0.000000001} | ${10_000} | ${`0% or ~1 ${engineers.unit}`}
${200_000} | ${-0.8} | ${10_000} | ${`80% or ~1 ${engineers.unit}`}
@@ -65,6 +66,9 @@ describe.each`
engineerCost | ratio | amount | expected
${200_000} | ${0} | ${0} | ${'Negligible'}
${200_000} | ${0} | ${8_333} | ${'Negligible'}
+ ${200_000} | ${undefined} | ${-1_000} | ${'Negligible'}
+ ${200_000} | ${undefined} | ${1_000} | ${'Negligible'}
+ ${200_000} | ${undefined} | ${10_000} | ${'~$10,000'}
${200_000} | ${0.000000001} | ${8_334} | ${'0% or ~$8,334'}
${200_000} | ${-0.000000001} | ${10_000} | ${'0% or ~$10,000'}
${200_000} | ${-0.8} | ${10_000} | ${'80% or ~$10,000'}
@@ -84,6 +88,8 @@ describe.each`
engineerCost | ratio | amount | expected
${200_000} | ${0} | ${0} | ${'Negligible'}
${200_000} | ${0} | ${8_333} | ${'Negligible'}
+ ${200_000} | ${undefined} | ${1_000} | ${'Negligible'}
+ ${200_000} | ${undefined} | ${10_000} | ${`~2,857 ${carbon.unit}s`}
${200_000} | ${0.000000001} | ${8_334} | ${`0% or ~2,381 ${carbon.unit}s`}
${200_000} | ${-0.000000001} | ${10_000} | ${`0% or ~2,857 ${carbon.unit}s`}
${200_000} | ${-0.8} | ${10_000} | ${`80% or ~2,857 ${carbon.unit}s`}
diff --git a/plugins/cost-insights/src/components/CostGrowth/CostGrowth.tsx b/plugins/cost-insights/src/components/CostGrowth/CostGrowth.tsx
index 01a0874636..196f8bec44 100644
--- a/plugins/cost-insights/src/components/CostGrowth/CostGrowth.tsx
+++ b/plugins/cost-insights/src/components/CostGrowth/CostGrowth.tsx
@@ -29,6 +29,7 @@ import { useCostGrowthStyles as useStyles } from '../../utils/styles';
import { formatPercent, formatCurrency } from '../../utils/formatters';
import { indefiniteArticleOf } from '../../utils/grammar';
import { useConfig, useCurrency } from '../../hooks';
+import { notEmpty } from '../../utils/assert';
export type CostGrowthProps = {
change: ChangeStatistic;
@@ -42,31 +43,65 @@ export const CostGrowth = ({ change, duration }: CostGrowthProps) => {
// Only display costs in absolute values
const amount = Math.abs(change.amount);
- const ratio = Math.abs(change.ratio);
+ const ratio = Math.abs(change.ratio ?? NaN);
const rate = rateOf(engineerCost, duration);
const engineers = amount / rate;
const converted = amount / (currency.rate ?? rate);
+ // If a ratio cannot be calculated, don't format.
+ const growth = notEmpty(change.ratio)
+ ? growthOf({ ratio: change.ratio, amount: engineers })
+ : null;
// Determine if growth is significant enough to highlight
- const growth = growthOf(change.ratio, engineers);
const classes = classnames({
[styles.excess]: growth === GrowthType.Excess,
[styles.savings]: growth === GrowthType.Savings,
});
- const percent = formatPercent(ratio);
-
- let cost = `${percent} or ~${formatCurrency(converted, currency.unit)}`;
- // Always display the converted value but use the cost in engineers
- // to determine negligibility, as costs should be time-period aware
if (engineers < EngineerThreshold) {
- cost = 'Negligible';
- } else if (currency.kind === CurrencyType.USD) {
- cost = `${percent} or ~${currency.prefix}${formatCurrency(converted)}`;
- } else if (amount < 1) {
- cost = `less than ${indefiniteArticleOf(['a', 'an'], currency.unit)}`;
+ return Negligible;
}
- return {cost};
+ if (currency.kind === CurrencyType.USD) {
+ // Do not display percentage if ratio cannot be calculated
+ if (isNaN(ratio)) {
+ return (
+
+ ~{currency.prefix}
+ {formatCurrency(converted)}
+
+ );
+ }
+
+ return (
+
+ {formatPercent(ratio)} or ~{currency.prefix}
+ {formatCurrency(converted)}
+
+ );
+ }
+
+ if (amount < 1) {
+ return (
+
+ less than {indefiniteArticleOf(['a', 'an'], currency.unit)}
+
+ );
+ }
+
+ // Do not display percentage if ratio cannot be calculated
+ if (isNaN(ratio)) {
+ return (
+
+ ~{formatCurrency(converted, currency.unit)}
+
+ );
+ }
+
+ return (
+
+ {formatPercent(ratio)} or ~{formatCurrency(converted, currency.unit)}
+
+ );
};
diff --git a/plugins/cost-insights/src/components/CostGrowth/CostGrowthIndicator.test.tsx b/plugins/cost-insights/src/components/CostGrowth/CostGrowthIndicator.test.tsx
index 8be5e238cc..6dc6f2cc93 100644
--- a/plugins/cost-insights/src/components/CostGrowth/CostGrowthIndicator.test.tsx
+++ b/plugins/cost-insights/src/components/CostGrowth/CostGrowthIndicator.test.tsx
@@ -21,8 +21,6 @@ import { ChangeThreshold, EngineerThreshold } from '../../types';
describe.each`
ratio | amount | ariaLabel
- ${-0.1} | ${undefined} | ${'savings'}
- ${0.01} | ${undefined} | ${'excess'}
${ChangeThreshold.lower} | ${EngineerThreshold} | ${'savings'}
${ChangeThreshold.lower - 0.01} | ${EngineerThreshold} | ${'savings'}
${ChangeThreshold.lower - 0.01} | ${EngineerThreshold + 0.1} | ${'savings'}
@@ -32,7 +30,7 @@ describe.each`
`('growthOf', ({ ratio, amount, ariaLabel }) => {
it(`should display the correct indicator for ${ariaLabel}`, async () => {
const { getByLabelText } = await renderInTestApp(
- ,
+ ,
);
expect(getByLabelText(ariaLabel)).toBeInTheDocument();
});
@@ -40,7 +38,8 @@ describe.each`
describe.each`
ratio | amount
- ${0} | ${undefined}
+ ${undefined} | ${0}
+ ${0} | ${0}
${ChangeThreshold.lower} | ${0}
${ChangeThreshold.lower + 0.01} | ${EngineerThreshold}
${ChangeThreshold.lower + 0.01} | ${EngineerThreshold + 0.1}
@@ -49,7 +48,7 @@ describe.each`
`('growthOf', ({ ratio, amount }) => {
it('should display the correct indicator for negligible growth', async () => {
const { queryByLabelText } = await renderInTestApp(
- ,
+ ,
);
expect(queryByLabelText('savings')).not.toBeInTheDocument();
expect(queryByLabelText('excess')).not.toBeInTheDocument();
diff --git a/plugins/cost-insights/src/components/CostGrowth/CostGrowthIndicator.tsx b/plugins/cost-insights/src/components/CostGrowth/CostGrowthIndicator.tsx
index e220fdb8e7..a1c200c6b3 100644
--- a/plugins/cost-insights/src/components/CostGrowth/CostGrowthIndicator.tsx
+++ b/plugins/cost-insights/src/components/CostGrowth/CostGrowthIndicator.tsx
@@ -20,49 +20,33 @@ import { Typography, TypographyProps } from '@material-ui/core';
import { default as ArrowDropUp } from '@material-ui/icons/ArrowDropUp';
import { default as ArrowDropDown } from '@material-ui/icons/ArrowDropDown';
import { growthOf } from '../../utils/change';
-import { GrowthType } from '../../types';
+import { ChangeStatistic, GrowthType, Maybe } from '../../types';
import { useCostGrowthStyles as useStyles } from '../../utils/styles';
export type CostGrowthIndicatorProps = TypographyProps & {
- ratio: number;
- amount?: number;
- formatter?: (amount: number) => string;
+ change: ChangeStatistic;
+ formatter?: (change: ChangeStatistic) => Maybe;
};
export const CostGrowthIndicator = ({
- ratio,
- amount,
+ change,
formatter,
className,
...props
}: CostGrowthIndicatorProps) => {
const classes = useStyles();
- const growth = growthOf(ratio, amount);
+ const growth = growthOf(change);
const classNames = classnames(classes.indicator, className, {
- [classes.savings]: growth === GrowthType.Savings,
[classes.excess]: growth === GrowthType.Excess,
+ [classes.savings]: growth === GrowthType.Savings,
});
- // Display cost as a factor of engineer cost growth and percentage growth
- if (typeof amount === 'number') {
- return (
-
- {formatter ? formatter(amount) : amount}
- {growth === GrowthType.Savings && (
-
- )}
- {growth === GrowthType.Excess && }
-
- );
- }
-
- // Display cost as a factor of percent change
return (
- {formatter ? formatter(ratio) : ratio}
- {ratio < 0 && }
- {ratio > 0 && }
+ {formatter ? formatter(change) : change.ratio}
+ {growth === GrowthType.Excess && }
+ {growth === GrowthType.Savings && }
);
};
diff --git a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewLegend.test.tsx b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewLegend.test.tsx
new file mode 100644
index 0000000000..112081fed4
--- /dev/null
+++ b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewLegend.test.tsx
@@ -0,0 +1,153 @@
+/*
+ * Copyright 2021 Spotify AB
+ *
+ * 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 { wrapInTestApp } from '@backstage/test-utils';
+import { CostOverviewLegend } from './CostOverviewLegend';
+import {
+ MockBillingDateProvider,
+ MockConfigProvider,
+ MockFilterProvider,
+ MockCurrencyProvider,
+} from '../../testUtils';
+
+function renderInTestApp(children: JSX.Element) {
+ return render(
+ wrapInTestApp(
+
+
+
+ {children}
+
+
+ ,
+ ),
+ );
+}
+
+describe('', () => {
+ it('displays the legend without exploding', async () => {
+ const { findByText } = renderInTestApp(
+ ,
+ );
+
+ expect(await findByText('Cost Trend')).toBeInTheDocument();
+ expect(await findByText('MSC Trend')).toBeInTheDocument();
+ });
+
+ it('does not display metric legend if metric data is not provided', async () => {
+ const { findByText, queryByText } = renderInTestApp(
+ ,
+ );
+
+ expect(await findByText('Cost Trend')).toBeInTheDocument();
+ expect(queryByText('MSC Trend')).not.toBeInTheDocument();
+ });
+});
+
+describe.each`
+ ratio | amount | title | expected
+ ${undefined} | ${1_000} | ${'∞'} | ${'Your Excess'}
+ ${undefined} | ${-1_000} | ${'-∞'} | ${'Your Savings'}
+`('', ({ ratio, amount, title, expected }) => {
+ it('displays the correct legend if ratio cannot be calculated and costs are within time period', async () => {
+ const { findByText, findAllByText } = renderInTestApp(
+ ,
+ );
+
+ expect(await findByText('Cost Trend')).toBeInTheDocument();
+ expect(await findByText('MSC Trend')).toBeInTheDocument();
+ expect(await findAllByText(title).then(res => res.length)).toBe(2);
+ expect(await findByText(expected)).toBeInTheDocument();
+ });
+});
diff --git a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewLegend.tsx b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewLegend.tsx
index ebba5173a9..ad8a065a6e 100644
--- a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewLegend.tsx
+++ b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewLegend.tsx
@@ -25,9 +25,9 @@ import {
Metric,
} from '../../types';
import { useLastCompleteBillingDate, useFilters } from '../../hooks';
-import { getComparedChange } from '../../utils/change';
+import { getComparedChange, choose } from '../../utils/change';
import { mapFiltersToProps } from './selector';
-import { formatPercent } from '../../utils/formatters';
+import { formatChange } from '../../utils/formatters';
import { CostGrowth } from '../CostGrowth';
type CostOverviewLegendProps = {
@@ -42,9 +42,8 @@ export const CostOverviewLegend = ({
metricData,
}: PropsWithChildren) => {
const theme = useTheme();
-
- const lastCompleteBillingDate = useLastCompleteBillingDate();
const { duration } = useFilters(mapFiltersToProps);
+ const lastCompleteBillingDate = useLastCompleteBillingDate();
const comparedChange = metricData
? getComparedChange(
@@ -57,23 +56,25 @@ export const CostOverviewLegend = ({
return (
-
-
- {formatPercent(dailyCostData.change!.ratio)}
-
-
- {metric && metricData && comparedChange && (
+ {dailyCostData.change && (
+
+
+ {formatChange(dailyCostData.change)}
+
+
+ )}
+ {metricData && metric && comparedChange && (
<>
- {formatPercent(metricData.change.ratio)}
+ {formatChange(metricData.change)}
diff --git a/plugins/cost-insights/src/components/ProductInsightsCard/ProductEntityTable.tsx b/plugins/cost-insights/src/components/ProductInsightsCard/ProductEntityTable.tsx
index 45576bda65..f9bb44058b 100644
--- a/plugins/cost-insights/src/components/ProductInsightsCard/ProductEntityTable.tsx
+++ b/plugins/cost-insights/src/components/ProductInsightsCard/ProductEntityTable.tsx
@@ -18,10 +18,10 @@ import React from 'react';
import classnames from 'classnames';
import { Table, TableColumn } from '@backstage/core';
import { Typography } from '@material-ui/core';
-import { costFormatter, formatPercent } from '../../utils/formatters';
+import { costFormatter, formatChange } from '../../utils/formatters';
import { useEntityDialogStyles as useStyles } from '../../utils/styles';
import { CostGrowthIndicator } from '../CostGrowth';
-import { BarChartOptions, Entity } from '../../types';
+import { BarChartOptions, ChangeStatistic, Entity } from '../../types';
export type ProductEntityTableOptions = Partial<
Pick
@@ -32,7 +32,7 @@ type RowData = {
label: string;
previous: number;
current: number;
- ratio: number;
+ change: ChangeStatistic;
};
function createRenderer(col: keyof RowData, classes: Record) {
@@ -41,7 +41,7 @@ function createRenderer(col: keyof RowData, classes: Record) {
const rowStyles = classnames(classes.row, {
[classes.rowTotal]: row.id === 'total',
[classes.colFirst]: col === 'label',
- [classes.colLast]: col === 'ratio',
+ [classes.colLast]: col === 'change',
});
switch (col) {
@@ -52,12 +52,12 @@ function createRenderer(col: keyof RowData, classes: Record) {
{costFormatter.format(row[col])}
);
- case 'ratio':
+ case 'change':
return (
formatPercent(Math.abs(amount))}
+ change={row.change}
+ formatter={formatChange}
/>
);
default:
@@ -75,10 +75,15 @@ function createSorter(field?: keyof Omit) {
if (a.id === 'total') return 1;
if (b.id === 'total') return 1;
if (field === 'label') return a.label.localeCompare(b.label);
+ if (field === 'change') {
+ if (formatChange(a[field]) === '∞' || formatChange(b[field]) === '-∞')
+ return 1;
+ if (formatChange(a[field]) === '-∞' || formatChange(b[field]) === '∞')
+ return -1;
+ return a[field].ratio! - b[field].ratio!;
+ }
- return field
- ? a[field] - b[field]
- : b.previous + b.current - (a.previous + a.current);
+ return b.previous + b.current - (a.previous + a.current);
};
}
@@ -134,11 +139,11 @@ export const ProductEntityTable = ({
customSort: createSorter('current'),
},
{
- field: 'ratio',
+ field: 'change',
title: Change,
align: 'right',
- render: createRenderer('ratio', classes),
- customSort: createSorter('ratio'),
+ render: createRenderer('change', classes),
+ customSort: createSorter('change'),
},
];
@@ -148,14 +153,14 @@ export const ProductEntityTable = ({
label: e.id || 'Unknown',
previous: e.aggregation[0],
current: e.aggregation[1],
- ratio: e.change.ratio,
+ change: e.change,
}))
.concat({
id: 'total',
label: 'Total',
previous: entity.aggregation[0],
current: entity.aggregation[1],
- ratio: entity.change.ratio,
+ change: entity.change,
})
.sort(createSorter());
diff --git a/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsChart.tsx b/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsChart.tsx
index ace2766277..07fea77d9d 100644
--- a/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsChart.tsx
+++ b/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsChart.tsx
@@ -40,7 +40,7 @@ import {
findAnyKey,
assertAlways,
} from '../../utils/assert';
-import { formatPeriod, formatPercent } from '../../utils/formatters';
+import { formatPeriod, formatChange } from '../../utils/formatters';
import {
titleOf,
tooltipItemOf,
@@ -54,6 +54,7 @@ import {
useBarChartLayoutStyles as useLayoutStyles,
} from '../../utils/styles';
import { Duration, Entity, Maybe } from '../../types';
+import { choose } from '../../utils/change';
export type ProductInsightsChartProps = {
billingDate: string;
@@ -86,7 +87,6 @@ export const ProductInsightsChart = ({
return breakdowns.length > 0;
}, [entities, activeLabel]);
- const legendTitle = `Cost ${entity.change.ratio <= 0 ? 'Savings' : 'Growth'}`;
const costStart = entity.aggregation[0];
const costEnd = entity.aggregation[1];
const resources = entities.map(resourceOf);
@@ -136,7 +136,6 @@ export const ProductInsightsChart = ({
const items = payload.map(tooltipItemOf).filter(notEmpty);
const activeEntity = findAlways(entities, e => e.id === id);
- const ratio = activeEntity.change.ratio;
const breakdowns = Object.keys(activeEntity.entities);
if (breakdowns.length) {
@@ -148,11 +147,13 @@ export const ProductInsightsChart = ({
title={title}
subtitle={subtitle}
topRight={
-
+ !!activeEntity.change.ratio && (
+
+ )
}
actions={
@@ -173,11 +174,13 @@ export const ProductInsightsChart = ({
+ !!activeEntity.change.ratio && (
+
+ )
}
content={
id
@@ -197,7 +200,9 @@ export const ProductInsightsChart = ({
return (
-
+
diff --git a/plugins/cost-insights/src/testUtils/mockData.ts b/plugins/cost-insights/src/testUtils/mockData.ts
index 5149da278d..27bb07d0e1 100644
--- a/plugins/cost-insights/src/testUtils/mockData.ts
+++ b/plugins/cost-insights/src/testUtils/mockData.ts
@@ -294,7 +294,6 @@ export const MockBigQueryInsights: Entity = {
id: 'dataset-c',
aggregation: [0, 10_000],
change: {
- ratio: 10_000,
amount: 10_000,
},
entities: {},
@@ -415,7 +414,6 @@ export const MockCloudDataflowInsights: Entity = {
id: 'pipeline-c',
aggregation: [0, 10_000],
change: {
- ratio: 10_000,
amount: 10_000,
},
entities: {},
@@ -503,7 +501,6 @@ export const MockCloudStorageInsights: Entity = {
id: 'Mock SKU C',
aggregation: [2_000, 0],
change: {
- ratio: -1,
amount: -2000,
},
entities: {},
@@ -515,7 +512,6 @@ export const MockCloudStorageInsights: Entity = {
id: 'bucket-c',
aggregation: [0, 0],
change: {
- ratio: 0,
amount: 0,
},
entities: {},
@@ -655,7 +651,6 @@ export const MockComputeEngineInsights: Entity = {
id: 'service-c',
aggregation: [0, 10_000],
change: {
- ratio: 10_000,
amount: 10_000,
},
entities: {},
diff --git a/plugins/cost-insights/src/testUtils/testUtils.ts b/plugins/cost-insights/src/testUtils/testUtils.ts
index 37913f635e..5077e05b75 100644
--- a/plugins/cost-insights/src/testUtils/testUtils.ts
+++ b/plugins/cost-insights/src/testUtils/testUtils.ts
@@ -93,10 +93,16 @@ export function changeOf(aggregation: DateAggregation[]): ChangeStatistic {
const lastAmount = aggregation.length
? aggregation[aggregation.length - 1].amount
: 0;
- const ratio =
- firstAmount !== 0 ? (lastAmount - firstAmount) / firstAmount : 0;
+
+ // if either the first or last amounts are zero, the rate of increase/decrease is infinite
+ if (!firstAmount || !lastAmount) {
+ return {
+ amount: lastAmount - firstAmount,
+ };
+ }
+
return {
- ratio: ratio,
+ ratio: (lastAmount - firstAmount) / firstAmount,
amount: lastAmount - firstAmount,
};
}
diff --git a/plugins/cost-insights/src/types/ChangeStatistic.ts b/plugins/cost-insights/src/types/ChangeStatistic.ts
index a47640411a..70cd9fb9a2 100644
--- a/plugins/cost-insights/src/types/ChangeStatistic.ts
+++ b/plugins/cost-insights/src/types/ChangeStatistic.ts
@@ -16,7 +16,9 @@
export interface ChangeStatistic {
// The ratio of change from one duration to another, expressed as: (newSum - oldSum) / oldSum
- ratio: number;
+ // If a ratio cannot be calculated - such as when a new or old sum is zero,
+ // the ratio can be omitted and where applicable, ∞ or -∞ will display based on amount.
+ ratio?: number;
// The actual USD change between time periods (can be negative if costs decreased)
amount: number;
}
diff --git a/plugins/cost-insights/src/utils/assert.ts b/plugins/cost-insights/src/utils/assert.ts
index 05ce65197b..5f9f0d01e1 100644
--- a/plugins/cost-insights/src/utils/assert.ts
+++ b/plugins/cost-insights/src/utils/assert.ts
@@ -20,7 +20,7 @@ export function notEmpty(
return !isNull(value) && !isUndefined(value);
}
-export function isUndefined(value: any): boolean {
+export function isUndefined(value: any): value is undefined {
return value === undefined;
}
diff --git a/plugins/cost-insights/src/utils/change.test.ts b/plugins/cost-insights/src/utils/change.test.ts
index 7208e9bc4f..191ae589d6 100644
--- a/plugins/cost-insights/src/utils/change.test.ts
+++ b/plugins/cost-insights/src/utils/change.test.ts
@@ -32,23 +32,23 @@ const GrowthMap = {
describe.each`
ratio | amount | expected
- ${0.0} | ${undefined} | ${GrowthType.Negligible}
+ ${undefined} | ${0} | ${GrowthType.Negligible}
+ ${0.0} | ${0} | ${GrowthType.Negligible}
${0.0} | ${EngineerThreshold} | ${GrowthType.Negligible}
${ChangeThreshold.lower} | ${0} | ${GrowthType.Negligible}
- ${ChangeThreshold.lower + 0.01} | ${undefined} | ${GrowthType.Negligible}
+ ${ChangeThreshold.lower + 0.01} | ${0} | ${GrowthType.Negligible}
${ChangeThreshold.lower + 0.01} | ${EngineerThreshold} | ${GrowthType.Negligible}
${ChangeThreshold.lower + 0.01} | ${EngineerThreshold + 0.1} | ${GrowthType.Negligible}
${ChangeThreshold.lower - 0.01} | ${EngineerThreshold - 0.1} | ${GrowthType.Negligible}
- ${ChangeThreshold.upper - 0.01} | ${undefined} | ${GrowthType.Negligible}
+ ${ChangeThreshold.lower - 0.01} | ${0} | ${GrowthType.Negligible}
+ ${ChangeThreshold.upper} | ${0} | ${GrowthType.Negligible}
+ ${ChangeThreshold.upper - 0.01} | ${0} | ${GrowthType.Negligible}
${ChangeThreshold.upper + 0.01} | ${EngineerThreshold - 0.1} | ${GrowthType.Negligible}
- ${ChangeThreshold.lower} | ${undefined} | ${GrowthType.Savings}
+ ${ChangeThreshold.upper + 0.01} | ${0} | ${GrowthType.Negligible}
${ChangeThreshold.lower} | ${EngineerThreshold} | ${GrowthType.Savings}
- ${ChangeThreshold.lower - 0.01} | ${undefined} | ${GrowthType.Savings}
${ChangeThreshold.lower - 0.01} | ${EngineerThreshold} | ${GrowthType.Savings}
${ChangeThreshold.lower - 0.01} | ${EngineerThreshold + 0.1} | ${GrowthType.Savings}
- ${ChangeThreshold.upper} | ${undefined} | ${GrowthType.Excess}
${ChangeThreshold.upper} | ${EngineerThreshold} | ${GrowthType.Excess}
- ${ChangeThreshold.upper + 0.01} | ${undefined} | ${GrowthType.Excess}
${ChangeThreshold.upper + 0.01} | ${EngineerThreshold} | ${GrowthType.Excess}
${ChangeThreshold.upper + 0.01} | ${EngineerThreshold + 0.1} | ${GrowthType.Excess}
`(
@@ -63,7 +63,7 @@ describe.each`
expected: GrowthType;
}) => {
it(`should display ${GrowthMap[expected]}`, () => {
- expect(growthOf(ratio, amount)).toBe(expected);
+ expect(growthOf({ ratio, amount })).toBe(expected);
});
},
);
diff --git a/plugins/cost-insights/src/utils/change.ts b/plugins/cost-insights/src/utils/change.ts
index 950fbfeb82..479818bdae 100644
--- a/plugins/cost-insights/src/utils/change.ts
+++ b/plugins/cost-insights/src/utils/change.ts
@@ -27,21 +27,26 @@ import {
import dayjs, { OpUnitType } from 'dayjs';
import durationPlugin from 'dayjs/plugin/duration';
import { inclusiveStartDateOf } from './duration';
+import { notEmpty } from './assert';
dayjs.extend(durationPlugin);
// Used for displaying status colors
-export function growthOf(ratio: number, amount?: number) {
- if (typeof amount === 'number') {
- if (amount >= EngineerThreshold && ratio >= ChangeThreshold.upper) {
+export function growthOf(change: ChangeStatistic): GrowthType {
+ const exceedsEngineerThreshold = Math.abs(change.amount) >= EngineerThreshold;
+
+ if (notEmpty(change.ratio)) {
+ if (exceedsEngineerThreshold && change.ratio >= ChangeThreshold.upper) {
return GrowthType.Excess;
}
- if (amount >= EngineerThreshold && ratio <= ChangeThreshold.lower) {
+
+ if (exceedsEngineerThreshold && change.ratio <= ChangeThreshold.lower) {
return GrowthType.Savings;
}
} else {
- if (ratio >= ChangeThreshold.upper) return GrowthType.Excess;
- if (ratio <= ChangeThreshold.lower) return GrowthType.Savings;
+ if (exceedsEngineerThreshold && change.amount > 0) return GrowthType.Excess;
+ if (exceedsEngineerThreshold && change.amount < 0)
+ return GrowthType.Savings;
}
return GrowthType.Negligible;
@@ -54,15 +59,24 @@ export function getComparedChange(
duration: Duration,
lastCompleteBillingDate: string, // YYYY-MM-DD,
): ChangeStatistic {
- const ratio = dailyCost.change!.ratio - metricData.change.ratio;
+ const dailyCostRatio = dailyCost.change?.ratio;
+ const metricDataRatio = metricData.change?.ratio;
const previousPeriodTotal = getPreviousPeriodTotalCost(
dailyCost.aggregation,
duration,
lastCompleteBillingDate,
);
+
+ // if either ratio cannot be calculated, no compared ratio can be calculated
+ if (!notEmpty(dailyCostRatio) || !notEmpty(metricDataRatio)) {
+ return {
+ amount: previousPeriodTotal,
+ };
+ }
+
return {
- ratio: ratio,
- amount: previousPeriodTotal * ratio,
+ ratio: dailyCostRatio - metricDataRatio,
+ amount: previousPeriodTotal * (dailyCostRatio - metricDataRatio),
};
}
@@ -78,7 +92,6 @@ export function getPreviousPeriodTotalCost(
? [dayjsDuration.days(), 'day']
: [dayjsDuration.months(), 'month'];
const nextPeriodStart = dayjs(startDate).add(amount, type);
-
// Add up costs that incurred before the start of the next period.
return aggregation.reduce((acc, costByDate) => {
return dayjs(costByDate.date).isBefore(nextPeriodStart)
@@ -86,3 +99,11 @@ export function getPreviousPeriodTotalCost(
: acc;
}, 0);
}
+
+export function choose(
+ [savings, excess]: [T, T],
+ change: ChangeStatistic,
+): T {
+ const isSavings = (change.ratio ?? change.amount) <= 0;
+ return isSavings ? savings : excess;
+}
diff --git a/plugins/cost-insights/src/utils/formatters.ts b/plugins/cost-insights/src/utils/formatters.ts
index 8f2b94f997..75306d7392 100644
--- a/plugins/cost-insights/src/utils/formatters.ts
+++ b/plugins/cost-insights/src/utils/formatters.ts
@@ -16,8 +16,9 @@
import moment from 'moment';
import pluralize from 'pluralize';
-import { Duration } from '../types';
+import { ChangeStatistic, Duration } from '../types';
import { inclusiveEndDateOf, inclusiveStartDateOf } from '../utils/duration';
+import { notEmpty } from './assert';
export type Period = {
periodStart: string;
@@ -78,6 +79,13 @@ export function formatCurrency(amount: number, currency?: string): string {
return currency ? `${numString} ${pluralize(currency, n)}` : numString;
}
+export function formatChange(change: ChangeStatistic): string {
+ if (notEmpty(change.ratio)) {
+ return formatPercent(Math.abs(change.ratio));
+ }
+ return change.amount >= 0 ? '∞' : '-∞';
+}
+
export function formatPercent(n: number): string {
// Number.toFixed shows scientific notation for extreme numbers
if (isNaN(n) || Math.abs(n) < 0.01) {
diff --git a/plugins/explore/CHANGELOG.md b/plugins/explore/CHANGELOG.md
index bebf6a8c44..78275577f5 100644
--- a/plugins/explore/CHANGELOG.md
+++ b/plugins/explore/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-explore
+## 0.3.4
+
+### Patch Changes
+
+- c614ede9a: Updated README to have up-to-date install instructions.
+- Updated dependencies [9afcac5af]
+- Updated dependencies [e0c9ed759]
+- Updated dependencies [6eaecbd81]
+ - @backstage/core@0.7.7
+
## 0.3.3
### Patch Changes
diff --git a/plugins/explore/package.json b/plugins/explore/package.json
index 7c2eb5c90d..be61bc1fd9 100644
--- a/plugins/explore/package.json
+++ b/plugins/explore/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-explore",
- "version": "0.3.3",
+ "version": "0.3.4",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -31,7 +31,7 @@
},
"dependencies": {
"@backstage/catalog-model": "^0.7.5",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/plugin-catalog-react": "^0.1.4",
"@backstage/plugin-explore-react": "^0.0.4",
"@backstage/theme": "^0.2.6",
diff --git a/plugins/fossa/CHANGELOG.md b/plugins/fossa/CHANGELOG.md
index fe916804d2..bd7af91dca 100644
--- a/plugins/fossa/CHANGELOG.md
+++ b/plugins/fossa/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-fossa
+## 0.2.6
+
+### Patch Changes
+
+- c614ede9a: Updated README to have up-to-date install instructions.
+- Updated dependencies [9afcac5af]
+- Updated dependencies [e0c9ed759]
+- Updated dependencies [6eaecbd81]
+ - @backstage/core@0.7.7
+
## 0.2.5
### Patch Changes
diff --git a/plugins/fossa/README.md b/plugins/fossa/README.md
index 11f3e90e1c..6ca2e1a96f 100644
--- a/plugins/fossa/README.md
+++ b/plugins/fossa/README.md
@@ -9,8 +9,8 @@ The FOSSA Plugin displays code statistics from [FOSSA](https://fossa.com/).
1. Install the FOSSA Plugin:
```bash
-# packages/app
-
+# From your Backstage root directory
+cd packages/app
yarn add @backstage/plugin-fossa
```
diff --git a/plugins/fossa/package.json b/plugins/fossa/package.json
index 23f9cfde74..ba7e1a381e 100644
--- a/plugins/fossa/package.json
+++ b/plugins/fossa/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-fossa",
- "version": "0.2.5",
+ "version": "0.2.6",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -32,7 +32,7 @@
},
"dependencies": {
"@backstage/catalog-model": "^0.7.3",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/errors": "^0.1.1",
"@backstage/plugin-catalog-react": "^0.1.1",
"@backstage/theme": "^0.2.6",
diff --git a/plugins/gcp-projects/package.json b/plugins/gcp-projects/package.json
index 509576cf2b..0930c791e4 100644
--- a/plugins/gcp-projects/package.json
+++ b/plugins/gcp-projects/package.json
@@ -30,7 +30,7 @@
"clean": "backstage-cli clean"
},
"dependencies": {
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/theme": "^0.2.6",
"@material-ui/core": "^4.11.0",
"@material-ui/icons": "^4.9.1",
diff --git a/plugins/github-actions/CHANGELOG.md b/plugins/github-actions/CHANGELOG.md
index a2c6e6bf1f..6896a7f877 100644
--- a/plugins/github-actions/CHANGELOG.md
+++ b/plugins/github-actions/CHANGELOG.md
@@ -1,5 +1,16 @@
# @backstage/plugin-github-actions
+## 0.4.4
+
+### Patch Changes
+
+- 4c42ecca2: Wrap EmptyState in Card
+- c614ede9a: Updated README to have up-to-date install instructions.
+- Updated dependencies [9afcac5af]
+- Updated dependencies [e0c9ed759]
+- Updated dependencies [6eaecbd81]
+ - @backstage/core@0.7.7
+
## 0.4.3
### Patch Changes
diff --git a/plugins/github-actions/README.md b/plugins/github-actions/README.md
index 87c68839c1..d027368c8b 100644
--- a/plugins/github-actions/README.md
+++ b/plugins/github-actions/README.md
@@ -11,15 +11,15 @@ TBD
### Generic Requirements
1. Provide OAuth credentials:
- 1. [Create an OAuth App](https://developer.github.com/apps/building-oauth-apps/creating-an-oauth-app/) with callback URL set to `http://localhost:7000/api/auth/github`.
- 2. Take Client ID and Client Secret from the newly created app's settings page and put them into `AUTH_GITHUB_CLIENT_ID` and `AUTH_GITHUB_CLIENT_SECRET` env variables.
+ 1. [Create an OAuth App](https://developer.github.com/apps/building-oauth-apps/creating-an-oauth-app/) with the callback URL set to `http://localhost:7000/api/auth/github`.
+ 2. Take the Client ID and Client Secret from the newly created app's settings page and put them into `AUTH_GITHUB_CLIENT_ID` and `AUTH_GITHUB_CLIENT_SECRET` environment variables.
2. Annotate your component with a correct GitHub Actions repository and owner:
The annotation key is `github.com/project-slug`.
Example:
- ```
+ ```yaml
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
@@ -38,6 +38,7 @@ TBD
1. Install the plugin dependency in your Backstage app package:
```bash
+# From your Backstage root directory
cd packages/app
yarn add @backstage/plugin-github-actions
```
@@ -45,22 +46,24 @@ yarn add @backstage/plugin-github-actions
2. Add to the app `EntityPage` component:
```tsx
-// packages/app/src/components/catalog/EntityPage.tsx
-import { EntityGithubActionsContent } from '@backstage/plugin-github-actions';
+// In packages/app/src/components/catalog/EntityPage.tsx
+import {
+ EntityGithubActionsContent,
+ isGithubActionsAvailable,
+} from '@backstage/plugin-github-actions';
-// ...
+// You can add the tab to any number of pages, the service page is shown as an
+// example here
const serviceEntityPage = (
-
- ...
+
+ {/* other tabs... */}
- ...
-
-);
```
-2. Run the app with `yarn start` and the backend with `yarn --cwd packages/backend start`, navigate to `/github-actions/`.
+3. Run the app with `yarn start` and the backend with `yarn start-backend`.
+ Then navigate to `/github-actions/` under any entity.
## Features
diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json
index 6a95803d6f..89b569bd95 100644
--- a/plugins/github-actions/package.json
+++ b/plugins/github-actions/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-github-actions",
- "version": "0.4.3",
+ "version": "0.4.4",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -34,13 +34,13 @@
"dependencies": {
"@backstage/catalog-model": "^0.7.5",
"@backstage/plugin-catalog-react": "^0.1.4",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/integration": "^0.5.1",
"@backstage/theme": "^0.2.6",
"@material-ui/core": "^4.11.0",
"@material-ui/icons": "^4.9.1",
"@material-ui/lab": "4.0.0-alpha.45",
- "@octokit/rest": "^18.0.12",
+ "@octokit/rest": "^18.5.3",
"moment": "^2.27.0",
"react": "^16.13.1",
"react-dom": "^16.13.1",
diff --git a/plugins/github-actions/src/components/WorkflowRunDetails/WorkflowRunDetails.tsx b/plugins/github-actions/src/components/WorkflowRunDetails/WorkflowRunDetails.tsx
index 38d84a4b6d..0624438ffe 100644
--- a/plugins/github-actions/src/components/WorkflowRunDetails/WorkflowRunDetails.tsx
+++ b/plugins/github-actions/src/components/WorkflowRunDetails/WorkflowRunDetails.tsx
@@ -202,13 +202,13 @@ export const WorkflowRunDetails = ({ entity }: { entity: Entity }) => {
Message
- {details.value?.head_commit.message}
+ {details.value?.head_commit?.message}
Commit ID
- {details.value?.head_commit.id}
+ {details.value?.head_commit?.id}
@@ -231,7 +231,7 @@ export const WorkflowRunDetails = ({ entity }: { entity: Entity }) => {
Author
- {`${details.value?.head_commit.author?.name} (${details.value?.head_commit.author?.email})`}
+ {`${details.value?.head_commit?.author?.name} (${details.value?.head_commit?.author?.email})`}
diff --git a/plugins/github-deployments/CHANGELOG.md b/plugins/github-deployments/CHANGELOG.md
index e7f849ef2e..23c8943349 100644
--- a/plugins/github-deployments/CHANGELOG.md
+++ b/plugins/github-deployments/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-github-deployments
+## 0.1.4
+
+### Patch Changes
+
+- c614ede9a: Updated README to have up-to-date install instructions.
+- Updated dependencies [9afcac5af]
+- Updated dependencies [e0c9ed759]
+- Updated dependencies [6eaecbd81]
+ - @backstage/core@0.7.7
+
## 0.1.3
### Patch Changes
diff --git a/plugins/github-deployments/README.md b/plugins/github-deployments/README.md
index 1bb8846105..8284ceba56 100644
--- a/plugins/github-deployments/README.md
+++ b/plugins/github-deployments/README.md
@@ -13,8 +13,8 @@ The GitHub Deployments Plugin displays recent deployments from GitHub.
1. Install the GitHub Deployments Plugin.
```bash
-# packages/app
-
+# From your Backstage root directory
+cd packages/app
yarn add @backstage/plugin-github-deployments
```
diff --git a/plugins/github-deployments/package.json b/plugins/github-deployments/package.json
index 12a36c160e..049e02de4c 100644
--- a/plugins/github-deployments/package.json
+++ b/plugins/github-deployments/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-github-deployments",
- "version": "0.1.3",
+ "version": "0.1.4",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -21,7 +21,7 @@
},
"dependencies": {
"@backstage/catalog-model": "^0.7.6",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/plugin-catalog-react": "^0.1.3",
"@backstage/theme": "^0.2.6",
"@material-ui/core": "^4.11.0",
diff --git a/plugins/gitops-profiles/package.json b/plugins/gitops-profiles/package.json
index ae614fe504..d1897b018c 100644
--- a/plugins/gitops-profiles/package.json
+++ b/plugins/gitops-profiles/package.json
@@ -31,7 +31,7 @@
"clean": "backstage-cli clean"
},
"dependencies": {
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/theme": "^0.2.6",
"@material-ui/core": "^4.11.0",
"@material-ui/icons": "^4.9.1",
diff --git a/plugins/graphiql/CHANGELOG.md b/plugins/graphiql/CHANGELOG.md
index 67e39d6600..681005b13f 100644
--- a/plugins/graphiql/CHANGELOG.md
+++ b/plugins/graphiql/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-graphiql
+## 0.2.10
+
+### Patch Changes
+
+- c614ede9a: Updated README to have up-to-date install instructions.
+- Updated dependencies [9afcac5af]
+- Updated dependencies [e0c9ed759]
+- Updated dependencies [6eaecbd81]
+ - @backstage/core@0.7.7
+
## 0.2.9
### Patch Changes
diff --git a/plugins/graphiql/README.md b/plugins/graphiql/README.md
index 39372890d1..b95f055a56 100644
--- a/plugins/graphiql/README.md
+++ b/plugins/graphiql/README.md
@@ -12,6 +12,7 @@ By exposing GraphiQL as a plugin instead of a standalone app, it's possible to p
Start out by installing the plugin in your Backstage app:
```bash
+# From your Backstage root directory
cd packages/app
yarn add @backstage/plugin-graphiql
```
diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json
index 4aa26587ad..9ce1603b57 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.9",
+ "version": "0.2.10",
"private": false,
"publishConfig": {
"access": "public",
@@ -31,7 +31,7 @@
"clean": "backstage-cli clean"
},
"dependencies": {
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/theme": "^0.2.6",
"@material-ui/core": "^4.11.0",
"@material-ui/icons": "^4.9.1",
diff --git a/plugins/jenkins/CHANGELOG.md b/plugins/jenkins/CHANGELOG.md
index ab57d71f61..ac734e9a95 100644
--- a/plugins/jenkins/CHANGELOG.md
+++ b/plugins/jenkins/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-jenkins
+## 0.4.2
+
+### Patch Changes
+
+- c614ede9a: Updated README to have up-to-date install instructions.
+- Updated dependencies [9afcac5af]
+- Updated dependencies [e0c9ed759]
+- Updated dependencies [6eaecbd81]
+ - @backstage/core@0.7.7
+
## 0.4.1
### Patch Changes
diff --git a/plugins/jenkins/README.md b/plugins/jenkins/README.md
index f406393190..69304cb847 100644
--- a/plugins/jenkins/README.md
+++ b/plugins/jenkins/README.md
@@ -11,25 +11,25 @@ Website: [https://jenkins.io/](https://jenkins.io/)
1. If you have a standalone app (you didn't clone this repo), then do
```bash
+# From your Backstage root directory
+cd packages/app
yarn add @backstage/plugin-jenkins
```
2. Add the `EntityJenkinsContent` extension to the entity page in the app:
```tsx
-// packages/app/src/components/catalog/EntityPage.tsx
-import { EntityJenkinsContent } from '@backstage/plugin-circleci';
+// In packages/app/src/components/catalog/EntityPage.tsx
+import { EntityJenkinsContent } from '@backstage/plugin-jenkins';
-// ...
+// You can add the tab to any number of pages, the service page is shown as an
+// example here
const serviceEntityPage = (
-
- ...
+
+ {/* other tabs... */}
- ...
-
-);
```
3. Add proxy configuration to `app-config.yaml`
@@ -43,14 +43,18 @@ proxy:
Authorization: Basic ${JENKINS_BASIC_AUTH_HEADER}
```
-4. Add an environment variable which contains the Jenkins credentials, (note: use an API token not your password). Here user is the name of the user created in Jenkins.
+4. Add an environment variable which contains the Jenkins credentials (NOTE:
+ use an API token, not your password). Here `user` is the name of the user
+ created in Jenkins.
```shell
export JENKINS_BASIC_AUTH_HEADER=$(echo -n user:api-token | base64)
```
-5. Run app with `yarn start`
-6. Add the Jenkins folder annotation to your `catalog-info.yaml`, (note: currently this plugin only supports folders and Git SCM)
+5. Run the app with `yarn start`
+
+6. Add the Jenkins folder annotation to your `catalog-info.yaml`, (NOTE:
+ currently this plugin only supports folders and Git SCM)
```yaml
apiVersion: backstage.io/v1alpha1
@@ -68,11 +72,11 @@ spec:
7. Register your component
-8. Click the component in the catalog you should now see Jenkins builds, and a last build result for your master build.
+8. Click the component in the catalog. You should now see Jenkins builds, and a
+ last build result for your master build.
-Note:
-
-If you are not using environment variable then you can directly type API token in app-config.yaml
+Note: If you are not using environment variables, you can directly type the API
+token into `app-config.yaml`.
```yaml
proxy:
@@ -83,7 +87,8 @@ proxy:
Authorization: Basic YWRtaW46MTFlYzI1NmU0Mzg1MDFjM2Y1Yzc2Yjc1MWE3ZTQ3YWY4Mw==
```
-YWRtaW46MTFlYzI1NmU0Mzg1MDFjM2Y1Yzc2Yjc1MWE3ZTQ3YWY4Mw== is the base64 of user and it's API token e.g. admin:11ec256e438501c3f5c76b751a7e47af83
+The string starting with `YWR...` is the base64 encoding of the user and their
+API token, e.g. `admin:11ec256e438501c3f5c76b751a7e47af83`.
## Features
@@ -94,4 +99,5 @@ YWRtaW46MTFlYzI1NmU0Mzg1MDFjM2Y1Yzc2Yjc1MWE3ZTQ3YWY4Mw== is the base64 of user a
## Limitations
- Only works with organization folder projects backed by GitHub
-- No pagination support currently, limited to 50 projects - don't run this on a Jenkins with lots of builds
+- No pagination support currently, limited to 50 projects - don't run this on a
+ Jenkins instance with lots of builds
diff --git a/plugins/jenkins/package.json b/plugins/jenkins/package.json
index edee4bc2ee..d1cabd2143 100644
--- a/plugins/jenkins/package.json
+++ b/plugins/jenkins/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-jenkins",
- "version": "0.4.1",
+ "version": "0.4.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -32,7 +32,7 @@
},
"dependencies": {
"@backstage/catalog-model": "^0.7.3",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/plugin-catalog-react": "^0.1.3",
"@backstage/theme": "^0.2.6",
"@material-ui/core": "^4.11.0",
diff --git a/plugins/kafka-backend/README.md b/plugins/kafka-backend/README.md
index 14914e5ba6..d18a232fa4 100644
--- a/plugins/kafka-backend/README.md
+++ b/plugins/kafka-backend/README.md
@@ -1,6 +1,7 @@
# Kafka Backend
-This is the backend part of the Kafka plugin. It responds to Kafka requests from the frontend.
+This is the backend part of the Kafka plugin. It responds to Kafka requests
+from the frontend.
## Configuration
@@ -16,7 +17,9 @@ A list of the brokers' host names and ports to connect to.
### `ssl` (optional)
-Configure TLS connection to the Kafka cluster. The options are passed directly to [tls.connect] and used to create the TLS secure context. Normally these would include `key` and `cert`.
+Configure TLS connection to the Kafka cluster. The options are passed directly
+to [tls.connect] and used to create the TLS secure context. Normally these
+would include `key` and `cert`.
Example:
@@ -39,7 +42,7 @@ kafka:
clusters:
- name: prod
brokers:
- - my-cluser:9092
+ - my-cluster:9092
ssl: true
sasl:
mechanism: plain # or 'scram-sha-256' or 'scram-sha-512'
diff --git a/plugins/kafka/README.md b/plugins/kafka/README.md
index a2ea01cf7d..7da44ae9b6 100644
--- a/plugins/kafka/README.md
+++ b/plugins/kafka/README.md
@@ -7,7 +7,9 @@
1. Run:
```bash
-yarn add @backstage/plugin-kafka @backstage/plugin-kafka-backend
+# From your Backstage root directory
+yarn --cwd packages/app add @backstage/plugin-kafka
+yarn --cwd packages/backend add @backstage/plugin-kafka-backend
```
2. Add the plugin backend:
@@ -29,41 +31,31 @@ export default async function createPlugin({
And then add to `packages/backend/src/index.ts`:
```js
-// ...
+// In packages/backend/src/index.ts
import kafka from './plugins/kafka';
// ...
async function main() {
// ...
const kafkaEnv = useHotMemoize(module, () => createEnv('kafka'));
// ...
-
- const apiRouter = Router();
- // ...
apiRouter.use('/kafka', await kafka(kafkaEnv));
- // ...
```
-3. Add the plugin frontend to `packages/app/src/plugin.ts`:
-
-```js
-export { plugin as Kafka } from '@backstage/plugin-kafka';
-```
-
-4. Register the plugin frontend router in `packages/app/src/components/catalog/EntityPage.tsx`:
+3. Add the plugin as a tab to your service entities:
```jsx
-import { Router as KafkaRouter } from '@backstage/plugin-kafka';
+// In packages/app/src/components/catalog/EntityPage.tsx
+import { EntityKafkaContent } from '@backstage/plugin-kafka';
-// Then, somewhere inside
-
-}
-/>;
+const serviceEntityPage = (
+
+ {/* other tabs... */}
+
+
+
```
-5. Add broker configs for the backend in your `app-config.yaml` (see
+4. Add broker configs for the backend in your `app-config.yaml` (see
[kafka-backend](https://github.com/backstage/backstage/blob/master/plugins/kafka-backend/README.md)
for more options):
@@ -76,7 +68,7 @@ kafka:
- localhost:9092
```
-6. Add `kafka.apache.org/consumer-groups` annotation to your services:
+5. Add the `kafka.apache.org/consumer-groups` annotation to your services:
```yaml
apiVersion: backstage.io/v1alpha1
diff --git a/plugins/kafka/package.json b/plugins/kafka/package.json
index a7295469d6..0963d3178f 100644
--- a/plugins/kafka/package.json
+++ b/plugins/kafka/package.json
@@ -21,7 +21,7 @@
},
"dependencies": {
"@backstage/catalog-model": "^0.7.4",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/plugin-catalog-react": "^0.1.1",
"@backstage/theme": "^0.2.6",
"@material-ui/core": "^4.11.0",
diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json
index d305ea4b4b..331e121d6c 100644
--- a/plugins/kubernetes/package.json
+++ b/plugins/kubernetes/package.json
@@ -32,9 +32,9 @@
"dependencies": {
"@backstage/catalog-model": "^0.7.4",
"@backstage/config": "^0.1.4",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
+ "@backstage/plugin-catalog-react": "^0.1.3",
"@backstage/plugin-kubernetes-common": "^0.1.0",
- "@backstage/plugin-catalog-react": "^0.1.3",
"@backstage/theme": "^0.2.6",
"@kubernetes/client-node": "^0.14.0",
"@material-ui/core": "^4.11.0",
diff --git a/plugins/lighthouse/CHANGELOG.md b/plugins/lighthouse/CHANGELOG.md
index 26eb041442..cb2cb5b9d1 100644
--- a/plugins/lighthouse/CHANGELOG.md
+++ b/plugins/lighthouse/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-lighthouse
+## 0.2.15
+
+### Patch Changes
+
+- c614ede9a: Updated README to have up-to-date install instructions.
+- Updated dependencies [9afcac5af]
+- Updated dependencies [e0c9ed759]
+- Updated dependencies [6eaecbd81]
+ - @backstage/core@0.7.7
+
## 0.2.14
### Patch Changes
diff --git a/plugins/lighthouse/README.md b/plugins/lighthouse/README.md
index 028547ea3e..06c9a1da12 100644
--- a/plugins/lighthouse/README.md
+++ b/plugins/lighthouse/README.md
@@ -28,20 +28,21 @@ _It's likely you will need to [enable CORS](https://developer.mozilla.org/en-US/
When you have an instance running that Backstage can hook into, first install the plugin into your app:
```sh
-$ yarn add @backstage/plugin-lighthouse
+# From your Backstage root directory
+cd packages/app
+yarn add @backstage/plugin-lighthouse
```
Modify your app routes in `App.tsx` to include the `LighthousePage` component exported from the plugin, for example:
```tsx
-// At the top imports
+// In packages/app/src/App.tsx
import { LighthousePage } from '@backstage/plugin-lighthouse';
-
- // ...
- } />
- // ...
-;
+const routes = (
+
+ {/* ...other routes */}
+ } />
```
Then configure the `lighthouse-audit-service` URL in your [`app-config.yaml`](https://github.com/backstage/backstage/blob/master/app-config.yaml).
@@ -63,55 +64,45 @@ kind: Component
metadata:
# ...
annotations:
- # ...
lighthouse.com/website-url: # A single website url e.g. https://backstage.io/
```
> NOTE: The plugin only supports one website URL per component at this time.
-Add a **Lighthouse tab** to the EntityPage:
+Add a Lighthouse tab to the entity page:
```tsx
-// packages/app/src/components/catalog/EntityPage.tsx
-import { EmbeddedRouter as LighthouseRouter } from '@backstage/plugin-lighthouse';
+// In packages/app/src/components/catalog/EntityPage.tsx
+import { EntityLighthouseContent } from '@backstage/plugin-lighthouse';
-// ...
-const WebsiteEntityPage = ({ entity }: { entity: Entity }) => (
-
- // ...
- }
- />
-
-);
+const websiteEntityPage = (
+
+ {/* other tabs... */}
+
+
+
```
-> NOTE: The embedded router renders page content without a header section allowing it to be rendered within a
-> catalog plugin page.
+> NOTE: The embedded router renders page content without a header section
+> allowing it to be rendered within a catalog plugin page.
Add a **Lighthouse card** to the overview tab on the EntityPage:
```tsx
-// packages/app/src/components/catalog/EntityPage.tsx
+// In packages/app/src/components/catalog/EntityPage.tsx
import {
- LastLighthouseAuditCard,
- isPluginApplicableToEntity as isLighthouseAvailable,
+ EntityLastLighthouseAuditCard,
+ isLighthouseAvailable,
} from '@backstage/plugin-lighthouse';
-// ...
-
-const OverviewContent = ({ entity }: { entity: Entity }) => (
-
- // ...
- {isLighthouseAvailable(entity) && (
-
-
-
- )}
-
-);
+const overviewContent = (
+
+ {/* ...other content */}
+
+
+
+
+
+
+
```
-
-Link Lighthouse
diff --git a/plugins/lighthouse/package.json b/plugins/lighthouse/package.json
index 45980df00c..2fce507756 100644
--- a/plugins/lighthouse/package.json
+++ b/plugins/lighthouse/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-lighthouse",
- "version": "0.2.14",
+ "version": "0.2.15",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -33,7 +33,7 @@
"dependencies": {
"@backstage/catalog-model": "^0.7.3",
"@backstage/config": "^0.1.4",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/plugin-catalog-react": "^0.1.2",
"@backstage/theme": "^0.2.6",
"@material-ui/core": "^4.11.0",
diff --git a/plugins/lighthouse/src/components/Intro/index.tsx b/plugins/lighthouse/src/components/Intro/index.tsx
index a89518a5ed..6b0307f9ec 100644
--- a/plugins/lighthouse/src/components/Intro/index.tsx
+++ b/plugins/lighthouse/src/components/Intro/index.tsx
@@ -46,7 +46,8 @@ with the environment variable \`LAS_CORS\` set to \`true\`._
When you have an instance running that Backstage can hook into, first install the plugin into your app:
\`\`\`sh
-$ yarn add @backstage/plugin-lighthouse
+cd packages/app
+yarn add @backstage/plugin-lighthouse
\`\`\`
Modify your app routes in \`App.tsx\` to include the \`LighthousePage\` component exported from the plugin, for example:
diff --git a/plugins/newrelic/package.json b/plugins/newrelic/package.json
index 0951d972c2..2dbb2a7eb8 100644
--- a/plugins/newrelic/package.json
+++ b/plugins/newrelic/package.json
@@ -31,7 +31,7 @@
"clean": "backstage-cli clean"
},
"dependencies": {
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/theme": "^0.2.6",
"@material-ui/core": "^4.11.0",
"@material-ui/icons": "^4.9.1",
diff --git a/plugins/org/package.json b/plugins/org/package.json
index 5bed02e9c8..9ad4704630 100644
--- a/plugins/org/package.json
+++ b/plugins/org/package.json
@@ -21,7 +21,7 @@
},
"dependencies": {
"@backstage/catalog-model": "^0.7.6",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/core-api": "^0.2.16",
"@backstage/plugin-catalog-react": "^0.1.4",
"@backstage/theme": "^0.2.6",
diff --git a/plugins/pagerduty/CHANGELOG.md b/plugins/pagerduty/CHANGELOG.md
index 0cd9d0cfb8..b7fc7fec40 100644
--- a/plugins/pagerduty/CHANGELOG.md
+++ b/plugins/pagerduty/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-pagerduty
+## 0.3.3
+
+### Patch Changes
+
+- c614ede9a: Updated README to have up-to-date install instructions.
+- Updated dependencies [9afcac5af]
+- Updated dependencies [e0c9ed759]
+- Updated dependencies [6eaecbd81]
+ - @backstage/core@0.7.7
+
## 0.3.2
### Patch Changes
diff --git a/plugins/pagerduty/README.md b/plugins/pagerduty/README.md
index 36f380fdd5..e1ec7f89c7 100644
--- a/plugins/pagerduty/README.md
+++ b/plugins/pagerduty/README.md
@@ -19,6 +19,8 @@ This plugin provides:
Install the plugin:
```bash
+# From your Backstage root directory
+cd packages/app
yarn add @backstage/plugin-pagerduty
```
diff --git a/plugins/pagerduty/package.json b/plugins/pagerduty/package.json
index c0e3afec34..821b89a5b1 100644
--- a/plugins/pagerduty/package.json
+++ b/plugins/pagerduty/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-pagerduty",
- "version": "0.3.2",
+ "version": "0.3.3",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -31,7 +31,7 @@
},
"dependencies": {
"@backstage/catalog-model": "^0.7.3",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/plugin-catalog-react": "^0.1.1",
"@backstage/theme": "^0.2.6",
"@material-ui/core": "^4.11.0",
diff --git a/plugins/proxy-backend/src/service/router.test.ts b/plugins/proxy-backend/src/service/router.test.ts
index 6c47043602..571de96ac4 100644
--- a/plugins/proxy-backend/src/service/router.test.ts
+++ b/plugins/proxy-backend/src/service/router.test.ts
@@ -59,8 +59,8 @@ describe('buildMiddleware', () => {
mockCreateProxyMiddleware.mockClear();
});
- it('accepts strings', async () => {
- buildMiddleware('/api/', logger, 'test', 'http://mocked');
+ it('accepts strings prefixed by /', async () => {
+ buildMiddleware('/proxy', logger, '/test', 'http://mocked');
expect(createProxyMiddleware).toHaveBeenCalledTimes(1);
@@ -74,13 +74,53 @@ describe('buildMiddleware', () => {
expect(filter('', { method: 'PATCH', headers: {} })).toBe(true);
expect(filter('', { method: 'DELETE', headers: {} })).toBe(true);
- expect(fullConfig.pathRewrite).toEqual({ '^/api/test/': '/' });
+ expect(fullConfig.pathRewrite).toEqual({ '^/proxy/test/': '/' });
+ expect(fullConfig.changeOrigin).toBe(true);
+ expect(fullConfig.logProvider!(logger)).toBe(logger);
+ });
+
+ it('accepts routes not prefixed with / when path is not suffixed with /', async () => {
+ buildMiddleware('/proxy', logger, 'test', 'http://mocked');
+
+ expect(createProxyMiddleware).toHaveBeenCalledTimes(1);
+
+ const [filter, fullConfig] = mockCreateProxyMiddleware.mock.calls[0] as [
+ (pathname: string, req: Partial) => boolean,
+ ProxyMiddlewareConfig,
+ ];
+ expect(filter('', { method: 'GET', headers: {} })).toBe(true);
+ expect(filter('', { method: 'POST', headers: {} })).toBe(true);
+ expect(filter('', { method: 'PUT', headers: {} })).toBe(true);
+ expect(filter('', { method: 'PATCH', headers: {} })).toBe(true);
+ expect(filter('', { method: 'DELETE', headers: {} })).toBe(true);
+
+ expect(fullConfig.pathRewrite).toEqual({ '^/proxy/test/': '/' });
+ expect(fullConfig.changeOrigin).toBe(true);
+ expect(fullConfig.logProvider!(logger)).toBe(logger);
+ });
+
+ it('accepts routes prefixed with / when path is suffixed with /', async () => {
+ buildMiddleware('/proxy/', logger, '/test', 'http://mocked');
+
+ expect(createProxyMiddleware).toHaveBeenCalledTimes(1);
+
+ const [filter, fullConfig] = mockCreateProxyMiddleware.mock.calls[0] as [
+ (pathname: string, req: Partial) => boolean,
+ ProxyMiddlewareConfig,
+ ];
+ expect(filter('', { method: 'GET', headers: {} })).toBe(true);
+ expect(filter('', { method: 'POST', headers: {} })).toBe(true);
+ expect(filter('', { method: 'PUT', headers: {} })).toBe(true);
+ expect(filter('', { method: 'PATCH', headers: {} })).toBe(true);
+ expect(filter('', { method: 'DELETE', headers: {} })).toBe(true);
+
+ expect(fullConfig.pathRewrite).toEqual({ '^/proxy/test/': '/' });
expect(fullConfig.changeOrigin).toBe(true);
expect(fullConfig.logProvider!(logger)).toBe(logger);
});
it('limits allowedMethods', async () => {
- buildMiddleware('/api/', logger, 'test', {
+ buildMiddleware('/proxy', logger, '/test', {
target: 'http://mocked',
allowedMethods: ['GET', 'DELETE'],
});
@@ -97,13 +137,13 @@ describe('buildMiddleware', () => {
expect(filter('', { method: 'PATCH', headers: {} })).toBe(false);
expect(filter('', { method: 'DELETE', headers: {} })).toBe(true);
- expect(fullConfig.pathRewrite).toEqual({ '^/api/test/': '/' });
+ expect(fullConfig.pathRewrite).toEqual({ '^/proxy/test/': '/' });
expect(fullConfig.changeOrigin).toBe(true);
expect(fullConfig.logProvider!(logger)).toBe(logger);
});
it('permits default headers', async () => {
- buildMiddleware('/api/', logger, 'test', {
+ buildMiddleware('/proxy', logger, '/test', {
target: 'http://mocked',
});
@@ -143,7 +183,7 @@ describe('buildMiddleware', () => {
});
it('permits default and configured headers', async () => {
- buildMiddleware('/api/', logger, 'test', {
+ buildMiddleware('/proxy', logger, '/test', {
target: 'http://mocked',
headers: {
Authorization: 'my-token',
@@ -176,7 +216,7 @@ describe('buildMiddleware', () => {
});
it('permits configured headers', async () => {
- buildMiddleware('/api/', logger, 'test', {
+ buildMiddleware('/proxy', logger, '/test', {
target: 'http://mocked',
allowedHeaders: ['authorization', 'cookie'],
});
@@ -208,7 +248,7 @@ describe('buildMiddleware', () => {
});
it('responds default headers', async () => {
- buildMiddleware('/api/', logger, 'test', {
+ buildMiddleware('/proxy', logger, '/test', {
target: 'http://mocked',
});
@@ -251,7 +291,7 @@ describe('buildMiddleware', () => {
});
it('responds configured headers', async () => {
- buildMiddleware('/api/', logger, 'test', {
+ buildMiddleware('/proxy', logger, '/test', {
target: 'http://mocked',
allowedHeaders: ['set-cookie'],
});
@@ -282,10 +322,10 @@ describe('buildMiddleware', () => {
it('rejects malformed target URLs', async () => {
expect(() =>
- buildMiddleware('/api/', logger, 'test', 'backstage.io'),
+ buildMiddleware('/proxy', logger, '/test', 'backstage.io'),
).toThrowError(/Proxy target is not a valid URL/);
expect(() =>
- buildMiddleware('/api/', logger, 'test', { target: 'backstage.io' }),
+ buildMiddleware('/proxy', logger, '/test', { target: 'backstage.io' }),
).toThrowError(/Proxy target is not a valid URL/);
});
});
diff --git a/plugins/proxy-backend/src/service/router.ts b/plugins/proxy-backend/src/service/router.ts
index 5c306de966..71ed82c23b 100644
--- a/plugins/proxy-backend/src/service/router.ts
+++ b/plugins/proxy-backend/src/service/router.ts
@@ -77,10 +77,24 @@ export function buildMiddleware(
`Proxy target is not a valid URL: ${fullConfig.target ?? ''}`,
);
}
+
// Default is to do a path rewrite that strips out the proxy's path prefix
// and the rest of the route.
if (fullConfig.pathRewrite === undefined) {
- const routeWithSlash = route.endsWith('/') ? route : `${route}/`;
+ let routeWithSlash = route.endsWith('/') ? route : `${route}/`;
+
+ if (!pathPrefix.endsWith('/') && !routeWithSlash.startsWith('/')) {
+ // Need to insert a / between pathPrefix and routeWithSlash
+ routeWithSlash = `/${routeWithSlash}`;
+ } else if (pathPrefix.endsWith('/') && routeWithSlash.startsWith('/')) {
+ // Never expect this to happen at this point in time as
+ // pathPrefix is set using `getExternalBaseUrl` which "Returns the
+ // external HTTP base backend URL for a given plugin,
+ // **without a trailing slash.**". But in case this changes in future, we
+ // need to drop a / on either pathPrefix or routeWithSlash
+ routeWithSlash = routeWithSlash.substring(1);
+ }
+
fullConfig.pathRewrite = {
[`^${pathPrefix}${routeWithSlash}`]: '/',
};
diff --git a/plugins/register-component/CHANGELOG.md b/plugins/register-component/CHANGELOG.md
index 424887263c..3634972e9a 100644
--- a/plugins/register-component/CHANGELOG.md
+++ b/plugins/register-component/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-register-component
+## 0.2.14
+
+### Patch Changes
+
+- c614ede9a: Updated README to have up-to-date install instructions.
+- Updated dependencies [9afcac5af]
+- Updated dependencies [e0c9ed759]
+- Updated dependencies [6eaecbd81]
+ - @backstage/core@0.7.7
+
## 0.2.13
### Patch Changes
diff --git a/plugins/register-component/README.md b/plugins/register-component/README.md
index 9c5304385e..47db1a7a55 100644
--- a/plugins/register-component/README.md
+++ b/plugins/register-component/README.md
@@ -19,6 +19,7 @@ When installed it is accessible on [localhost:3000/register-component](localhost
1. Install plugin and its dependency `plugin-catalog`
```bash
+# From your Backstage root directory
cd packages/app
yarn add @backstage/plugin-register-component
```
diff --git a/plugins/register-component/package.json b/plugins/register-component/package.json
index 2870ef79f1..bd51a7db0b 100644
--- a/plugins/register-component/package.json
+++ b/plugins/register-component/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-register-component",
- "version": "0.2.13",
+ "version": "0.2.14",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -31,7 +31,7 @@
},
"dependencies": {
"@backstage/catalog-model": "^0.7.5",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/plugin-catalog-react": "^0.1.4",
"@backstage/theme": "^0.2.6",
"@material-ui/core": "^4.11.0",
@@ -39,7 +39,7 @@
"@material-ui/lab": "4.0.0-alpha.45",
"react": "^16.13.1",
"react-dom": "^16.13.1",
- "react-hook-form": "^6.6.0",
+ "react-hook-form": "^6.15.4",
"react-router": "6.0.0-beta.0",
"react-router-dom": "6.0.0-beta.0",
"react-use": "^15.3.3"
diff --git a/plugins/rollbar/CHANGELOG.md b/plugins/rollbar/CHANGELOG.md
index 2e9bc946a2..1d8c2c399e 100644
--- a/plugins/rollbar/CHANGELOG.md
+++ b/plugins/rollbar/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-rollbar
+## 0.3.4
+
+### Patch Changes
+
+- c614ede9a: Updated README to have up-to-date install instructions.
+- Updated dependencies [9afcac5af]
+- Updated dependencies [e0c9ed759]
+- Updated dependencies [6eaecbd81]
+ - @backstage/core@0.7.7
+
## 0.3.3
### Patch Changes
diff --git a/plugins/rollbar/README.md b/plugins/rollbar/README.md
index 3a33fe223c..bdf0541fa0 100644
--- a/plugins/rollbar/README.md
+++ b/plugins/rollbar/README.md
@@ -9,25 +9,23 @@ Website: [https://rollbar.com/](https://rollbar.com/)
2. If you have standalone app (you didn't clone this repo), then do
```bash
+# From your Backstage root directory
+cd packages/app
yarn add @backstage/plugin-rollbar
```
3. Add to the app `EntityPage` component:
```tsx
-// packages/app/src/components/catalog/EntityPage.tsx
+// In packages/app/src/components/catalog/EntityPage.tsx
import { EntityRollbarContent } from '@backstage/plugin-rollbar';
-// ...
const serviceEntityPage = (
-
- ...
+
+ {/* other tabs... */}
- ...
-
-);
```
4. Setup the `app-config.yaml` and account token environment variable
diff --git a/plugins/rollbar/package.json b/plugins/rollbar/package.json
index 6d654866af..64ea010b54 100644
--- a/plugins/rollbar/package.json
+++ b/plugins/rollbar/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-rollbar",
- "version": "0.3.3",
+ "version": "0.3.4",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -32,7 +32,7 @@
},
"dependencies": {
"@backstage/catalog-model": "^0.7.3",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/plugin-catalog-react": "^0.1.1",
"@backstage/theme": "^0.2.6",
"@material-ui/core": "^4.11.0",
diff --git a/plugins/scaffolder-backend/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md
index cb1855e041..f591568d44 100644
--- a/plugins/scaffolder-backend/CHANGELOG.md
+++ b/plugins/scaffolder-backend/CHANGELOG.md
@@ -1,5 +1,11 @@
# @backstage/plugin-scaffolder-backend
+## 0.10.1
+
+### Patch Changes
+
+- a1783f306: Added the `nebula-preview` preview to `Octokit` for repository visibility.
+
## 0.10.0
### Minor Changes
diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json
index 729ef58d99..bbeeecceb0 100644
--- a/plugins/scaffolder-backend/package.json
+++ b/plugins/scaffolder-backend/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder-backend",
- "version": "0.10.0",
+ "version": "0.10.1",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -37,7 +37,7 @@
"@backstage/integration": "^0.5.1",
"@gitbeaker/core": "^28.0.2",
"@gitbeaker/node": "^28.0.2",
- "@octokit/rest": "^18.0.12",
+ "@octokit/rest": "^18.5.3",
"@types/dockerode": "^3.2.1",
"@types/express": "^4.17.6",
"@types/git-url-parse": "^9.0.0",
diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md
index fee76f8775..1d0bbcede9 100644
--- a/plugins/scaffolder/CHANGELOG.md
+++ b/plugins/scaffolder/CHANGELOG.md
@@ -1,5 +1,17 @@
# @backstage/plugin-scaffolder
+## 0.9.2
+
+### Patch Changes
+
+- f6efa71ee: Enable starred templates on Scaffolder frontend
+- 19a4dd710: Removed unused `swr` dependency.
+- 23769512a: Support `anyOf`, `oneOf` and `allOf` schemas in the scaffolder template.
+- Updated dependencies [9afcac5af]
+- Updated dependencies [e0c9ed759]
+- Updated dependencies [6eaecbd81]
+ - @backstage/core@0.7.7
+
## 0.9.1
### Patch Changes
diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json
index 2b4feecb7b..32229ccbc6 100644
--- a/plugins/scaffolder/package.json
+++ b/plugins/scaffolder/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-scaffolder",
- "version": "0.9.1",
+ "version": "0.9.2",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -33,7 +33,7 @@
"@backstage/catalog-client": "^0.3.10",
"@backstage/catalog-model": "^0.7.7",
"@backstage/config": "^0.1.4",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/integration": "^0.5.1",
"@backstage/integration-react": "^0.1.1",
"@backstage/plugin-catalog-react": "^0.1.4",
@@ -44,7 +44,7 @@
"@rjsf/core": "^2.4.0",
"@rjsf/material-ui": "^2.4.0",
"classnames": "^2.2.6",
- "json-schema": "^0.2.5",
+ "json-schema": "^0.3.0",
"git-url-parse": "^11.4.4",
"humanize-duration": "^3.25.1",
"immer": "^9.0.1",
diff --git a/plugins/search-backend-node/CHANGELOG.md b/plugins/search-backend-node/CHANGELOG.md
index e7a9d9aa0a..da49bd0726 100644
--- a/plugins/search-backend-node/CHANGELOG.md
+++ b/plugins/search-backend-node/CHANGELOG.md
@@ -1,5 +1,11 @@
# @backstage/plugin-search-backend-node
+## 0.1.4
+
+### Patch Changes
+
+- e1e757569: Introduced Scheduler which is responsible for adding new tasks to a schedule together with it's interval timer as well as starting and stopping the scheduler processes.
+
## 0.1.3
### Patch Changes
diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json
index b5d13af01c..e39fbb5579 100644
--- a/plugins/search-backend-node/package.json
+++ b/plugins/search-backend-node/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-search-backend-node",
- "version": "0.1.3",
+ "version": "0.1.4",
"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 35f3ee97c1..b4bcd1f855 100644
--- a/plugins/search/CHANGELOG.md
+++ b/plugins/search/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-search
+## 0.3.5
+
+### Patch Changes
+
+- dcd54c7cd: Use `RouteRef` to generate path to search page.
+- Updated dependencies [9afcac5af]
+- Updated dependencies [e0c9ed759]
+- Updated dependencies [6eaecbd81]
+ - @backstage/core@0.7.7
+
## 0.3.4
### Patch Changes
diff --git a/plugins/search/package.json b/plugins/search/package.json
index c7ab201efe..2b9db3444e 100644
--- a/plugins/search/package.json
+++ b/plugins/search/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-search",
- "version": "0.3.4",
+ "version": "0.3.5",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -29,7 +29,7 @@
"clean": "backstage-cli clean"
},
"dependencies": {
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/catalog-model": "^0.7.3",
"@backstage/plugin-catalog-react": "^0.1.2",
"@backstage/search-common": "^0.1.1",
diff --git a/plugins/sentry/CHANGELOG.md b/plugins/sentry/CHANGELOG.md
index dc45bcae60..261972384a 100644
--- a/plugins/sentry/CHANGELOG.md
+++ b/plugins/sentry/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-sentry
+## 0.3.9
+
+### Patch Changes
+
+- c614ede9a: Updated README to have up-to-date install instructions.
+- Updated dependencies [9afcac5af]
+- Updated dependencies [e0c9ed759]
+- Updated dependencies [6eaecbd81]
+ - @backstage/core@0.7.7
+
## 0.3.8
### Patch Changes
diff --git a/plugins/sentry/README.md b/plugins/sentry/README.md
index 9bdb2dc16d..e0c56e842c 100644
--- a/plugins/sentry/README.md
+++ b/plugins/sentry/README.md
@@ -9,8 +9,8 @@ The Sentry Plugin displays issues from [Sentry](https://sentry.io).
1. Install the Sentry Plugin:
```bash
-# packages/app
-
+# From your Backstage root directory
+cd packages/app
yarn add @backstage/plugin-sentry
```
diff --git a/plugins/sentry/package.json b/plugins/sentry/package.json
index 9908af2e24..e34d8bcef9 100644
--- a/plugins/sentry/package.json
+++ b/plugins/sentry/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-sentry",
- "version": "0.3.8",
+ "version": "0.3.9",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -32,7 +32,7 @@
},
"dependencies": {
"@backstage/catalog-model": "^0.7.3",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/plugin-catalog-react": "^0.1.1",
"@backstage/theme": "^0.2.6",
"@material-ui/core": "^4.11.0",
diff --git a/plugins/sonarqube/CHANGELOG.md b/plugins/sonarqube/CHANGELOG.md
index 0ed86737dd..48b9292791 100644
--- a/plugins/sonarqube/CHANGELOG.md
+++ b/plugins/sonarqube/CHANGELOG.md
@@ -1,5 +1,15 @@
# @backstage/plugin-sonarqube
+## 0.1.17
+
+### Patch Changes
+
+- c614ede9a: Updated README to have up-to-date install instructions.
+- Updated dependencies [9afcac5af]
+- Updated dependencies [e0c9ed759]
+- Updated dependencies [6eaecbd81]
+ - @backstage/core@0.7.7
+
## 0.1.16
### Patch Changes
diff --git a/plugins/sonarqube/README.md b/plugins/sonarqube/README.md
index 5c12832e57..d0251e91ef 100644
--- a/plugins/sonarqube/README.md
+++ b/plugins/sonarqube/README.md
@@ -9,7 +9,8 @@ The SonarQube Plugin displays code statistics from [SonarCloud](https://sonarclo
1. Install the SonarQube Plugin:
```bash
-# packages/app
+# From your Backstage root directory
+cd packages/app
yarn add @backstage/plugin-sonarqube
```
diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json
index 97243bb930..c31b99bac8 100644
--- a/plugins/sonarqube/package.json
+++ b/plugins/sonarqube/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-sonarqube",
- "version": "0.1.16",
+ "version": "0.1.17",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -34,7 +34,7 @@
"dependencies": {
"@backstage/catalog-model": "^0.7.7",
"@backstage/plugin-catalog-react": "^0.1.3",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/theme": "^0.2.6",
"@material-ui/core": "^4.11.0",
"@material-ui/icons": "^4.9.1",
diff --git a/plugins/splunk-on-call/README.md b/plugins/splunk-on-call/README.md
index 5c1dda33fc..33cfa091ca 100644
--- a/plugins/splunk-on-call/README.md
+++ b/plugins/splunk-on-call/README.md
@@ -20,6 +20,8 @@ This plugin provides:
Install the plugin:
```bash
+# From your Backstage root directory
+cd packages/app
yarn add @backstage/plugin-splunk-on-call
```
diff --git a/plugins/splunk-on-call/package.json b/plugins/splunk-on-call/package.json
index ecaf21f8eb..9e93004bf5 100644
--- a/plugins/splunk-on-call/package.json
+++ b/plugins/splunk-on-call/package.json
@@ -31,7 +31,7 @@
},
"dependencies": {
"@backstage/catalog-model": "^0.7.4",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/plugin-catalog-react": "^0.1.1",
"@backstage/theme": "^0.2.6",
"@material-ui/core": "^4.11.0",
diff --git a/plugins/tech-radar/README.md b/plugins/tech-radar/README.md
index 21f90ec432..814ab6cba5 100644
--- a/plugins/tech-radar/README.md
+++ b/plugins/tech-radar/README.md
@@ -18,7 +18,7 @@ It serves and scales well for teams and companies of all sizes that want to have
The Tech Radar can be used in two ways:
-- **Simple (Recommended)** - This gives you an out-of-the-box Tech Radar experience. It lives on the `/tech-radar` URL of your Backstage installation, and you can set a variety of configuration directly in your `apis.ts`.
+- **Simple (Recommended)** - This gives you an out-of-the-box Tech Radar experience. It lives on the `/tech-radar` URL of your Backstage installation.
- **Advanced** - This gives you the React UI component directly. It enables you to insert the Radar on your own layout or page for a more customized feel.
### Install
@@ -26,6 +26,8 @@ The Tech Radar can be used in two ways:
For either simple or advanced installations, you'll need to add the dependency using Yarn:
```sh
+# From your Backstage root directory
+cd packages/app
yarn add @backstage/plugin-tech-radar
```
@@ -34,17 +36,16 @@ yarn add @backstage/plugin-tech-radar
Modify your app routes to include the Router component exported from the tech radar, for example:
```tsx
-import { Router as TechRadarRouter } from '@backstage/plugin-tech-radar';
+// In packages/app/src/App.tsx
+import { TechRadarPage } from '@backstage/plugin-tech-radar';
-// Inside App component
-
- {/* other routes ... */}
- }
- />
- {/* other routes ... */}
-;
+const routes = (
+
+ {/* ...other routes */}
+ }
+ />
```
If you'd like to configure it more, see the `TechRadarPageProps` and `TechRadarComponentProps` types for options:
diff --git a/plugins/tech-radar/package.json b/plugins/tech-radar/package.json
index 5a1c2e2095..37ad7d8211 100644
--- a/plugins/tech-radar/package.json
+++ b/plugins/tech-radar/package.json
@@ -30,7 +30,7 @@
"start": "backstage-cli plugin:serve"
},
"dependencies": {
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/theme": "^0.2.6",
"@material-ui/core": "^4.11.0",
"@material-ui/icons": "^4.9.1",
diff --git a/plugins/techdocs-backend/config.d.ts b/plugins/techdocs-backend/config.d.ts
index 83b79f2f6c..6a76172638 100644
--- a/plugins/techdocs-backend/config.d.ts
+++ b/plugins/techdocs-backend/config.d.ts
@@ -90,6 +90,13 @@ export interface Config {
* @visibility secret
*/
endpoint?: string;
+ /**
+ * (Optional) Whether to use path style URLs when communicating with S3.
+ * Defaults to false.
+ * This allows providers like LocalStack, Minio and Wasabi (and possibly others) to be used to host tech docs.
+ * @visibility backend
+ */
+ s3ForcePathStyle?: boolean;
};
}
| {
diff --git a/plugins/techdocs-backend/examples/documented-component/docs/code/code-sample.md b/plugins/techdocs-backend/examples/documented-component/docs/code/code-sample.md
index 9f8e1bd739..f41ab1d506 100644
--- a/plugins/techdocs-backend/examples/documented-component/docs/code/code-sample.md
+++ b/plugins/techdocs-backend/examples/documented-component/docs/code/code-sample.md
@@ -5,19 +5,19 @@ This page provides some sample code which may be used in your example component.
This code uses TypeScript, and the Markdown code fence to wrap the code.
```typescript
-const DefaultEntityPage = ({ entity }: { entity: Entity }) => (
-
- }
- />
- }
- />
-
+const serviceEntityPage = (
+
+
+
+
+
+
+
+
+
+
+
+
);
```
diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md
index 4f89cd9844..847121c0cf 100644
--- a/plugins/techdocs/CHANGELOG.md
+++ b/plugins/techdocs/CHANGELOG.md
@@ -1,5 +1,31 @@
# @backstage/plugin-techdocs
+## 0.9.0
+
+### Minor Changes
+
+- 21fddf452: Make `techdocsStorageApiRef` and `techdocsApiRef` use interfaces instead of the
+ actual implementation classes.
+
+ This renames the classes `TechDocsApi` to `TechDocsClient` and `TechDocsStorageApi`
+ to `TechDocsStorageClient` and renames the interfaces `TechDocs` to `TechDocsApi`
+ and `TechDocsStorage` to `TechDocsStorageApi` to comply the pattern elsewhere in
+ the project. This also fixes the types returned by some methods on those
+ interfaces.
+
+### Patch Changes
+
+- 6fbd7beca: Use `EntityRefLink` in header and use relations to reference the owner of the
+ document.
+- 15cbe6815: Fix TechDocs landing page table wrong copied link
+- 39bdaa004: Add customization and exportable components for TechDocs landing page
+- cb8c848a3: Disable color transitions on links to avoid issues in dark mode.
+- 17915e29b: Rework state management to avoid rendering multiple while navigating between pages.
+- Updated dependencies [9afcac5af]
+- Updated dependencies [e0c9ed759]
+- Updated dependencies [6eaecbd81]
+ - @backstage/core@0.7.7
+
## 0.8.0
### Minor Changes
diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json
index 7bde151663..632feac3c1 100644
--- a/plugins/techdocs/package.json
+++ b/plugins/techdocs/package.json
@@ -1,6 +1,6 @@
{
"name": "@backstage/plugin-techdocs",
- "version": "0.8.0",
+ "version": "0.9.0",
"main": "src/index.ts",
"types": "src/index.ts",
"license": "Apache-2.0",
@@ -33,7 +33,7 @@
"dependencies": {
"@backstage/config": "^0.1.4",
"@backstage/catalog-model": "^0.7.7",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/plugin-catalog-react": "^0.1.4",
"@backstage/theme": "^0.2.6",
"@backstage/errors": "^0.1.1",
diff --git a/plugins/todo/package.json b/plugins/todo/package.json
index 7339e568c3..92390857ef 100644
--- a/plugins/todo/package.json
+++ b/plugins/todo/package.json
@@ -27,7 +27,7 @@
},
"dependencies": {
"@backstage/catalog-model": "^0.7.3",
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/errors": "^0.1.1",
"@backstage/plugin-catalog-react": "^0.1.1",
"@backstage/theme": "^0.2.6",
diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json
index d410dc103e..08ae87d3ec 100644
--- a/plugins/user-settings/package.json
+++ b/plugins/user-settings/package.json
@@ -30,7 +30,7 @@
"clean": "backstage-cli clean"
},
"dependencies": {
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/theme": "^0.2.6",
"@material-ui/core": "^4.11.0",
"@material-ui/icons": "^4.9.1",
diff --git a/plugins/welcome/package.json b/plugins/welcome/package.json
index b276b86835..189b6eeb59 100644
--- a/plugins/welcome/package.json
+++ b/plugins/welcome/package.json
@@ -30,7 +30,7 @@
"start": "backstage-cli plugin:serve"
},
"dependencies": {
- "@backstage/core": "^0.7.6",
+ "@backstage/core": "^0.7.7",
"@backstage/theme": "^0.2.6",
"@material-ui/core": "^4.11.0",
"@material-ui/icons": "^4.9.1",
diff --git a/yarn.lock b/yarn.lock
index 5fdd60715c..6a35669813 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2,6 +2,24 @@
# yarn lockfile v1
+"@amplitude/types@^1.5.4":
+ version "1.5.4"
+ resolved "https://registry.npmjs.org/@amplitude/types/-/types-1.5.4.tgz#7fcbcbfb321d794b6367596cd950a92c752431d1"
+ integrity sha512-+e+wqlO5E4lNTM19lATf+lJldV+VD2RGzrDEy45cPEtfpXxHJUHwhfOKZkKg/zlx+YAubcpNhWLm2NSPpHUs9A==
+
+"@amplitude/ua-parser-js@0.7.24":
+ version "0.7.24"
+ resolved "https://registry.npmjs.org/@amplitude/ua-parser-js/-/ua-parser-js-0.7.24.tgz#2ce605af7d2c38d4a01313fb2385df55fbbd69aa"
+ integrity sha512-VbQuJymJ20WEw0HtI2np7EdC3NJGUWi8+Xdbc7uk8WfMIF308T0howpzkQ3JFMN7ejnrcSM/OyNGveeE3TP3TA==
+
+"@amplitude/utils@^1.0.5":
+ version "1.5.4"
+ resolved "https://registry.npmjs.org/@amplitude/utils/-/utils-1.5.4.tgz#457e847d751522ac8dd910037667d780ef501642"
+ integrity sha512-VAd/ibhwBBeL8pKqCz8tjCnSx8epOvUa+Je6sA3AB4R8855xl+bdrDjYwMmOWOILvEH3Pltq2jVJCE2thBoFdQ==
+ dependencies:
+ "@amplitude/types" "^1.5.4"
+ tslib "^1.9.3"
+
"@apidevtools/json-schema-ref-parser@^9.0.6":
version "9.0.6"
resolved "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.6.tgz#5d9000a3ac1fd25404da886da6b266adcd99cf1c"
@@ -1608,10 +1626,10 @@
core-js "^2.6.5"
regenerator-runtime "^0.13.4"
-"@babel/runtime-corejs3@^7.10.2", "@babel/runtime-corejs3@^7.11.2", "@babel/runtime-corejs3@^7.13.10":
- version "7.13.10"
- resolved "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.13.10.tgz#14c3f4c85de22ba88e8e86685d13e8861a82fe86"
- integrity sha512-x/XYVQ1h684pp1mJwOV4CyvqZXqbc8CMsMGUnAbuc82ZCdv1U63w5RSUzgDSXQHG5Rps/kiksH6g2D5BuaKyXg==
+"@babel/runtime-corejs3@^7.10.2", "@babel/runtime-corejs3@^7.11.2", "@babel/runtime-corejs3@^7.13.17":
+ version "7.14.0"
+ resolved "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.14.0.tgz#6bf5fbc0b961f8e3202888cb2cd0fb7a0a9a3f66"
+ integrity sha512-0R0HTZWHLk6G8jIk0FtoX+AatCtKnswS98VhXwGImFc759PJRp4Tru0PQYZofyijTFUr+gT8Mu7sgXVJLQ0ceg==
dependencies:
core-js-pure "^3.0.0"
regenerator-runtime "^0.13.4"
@@ -1623,6 +1641,13 @@
dependencies:
regenerator-runtime "^0.13.4"
+"@babel/runtime@^7.13.17", "@babel/runtime@^7.6.2":
+ version "7.13.17"
+ resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.13.17.tgz#8966d1fc9593bf848602f0662d6b4d0069e3a7ec"
+ integrity sha512-NCdgJEelPTSh+FEFylhnP1ylq848l1z9t9N0j1Lfbcw0+KXGjsTvUmkxy+voLLXB5SOKMbLLx4jxYliGrYQseA==
+ dependencies:
+ regenerator-runtime "^0.13.4"
+
"@babel/template@^7.10.4", "@babel/template@^7.12.13", "@babel/template@^7.3.3":
version "7.12.13"
resolved "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327"
@@ -1925,6 +1950,15 @@
debug "^3.1.0"
lodash.once "^4.1.1"
+"@dabh/diagnostics@^2.0.2":
+ version "2.0.2"
+ resolved "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.2.tgz#290d08f7b381b8f94607dc8f471a12c675f9db31"
+ integrity sha512-+A1YivoVDNNVCdfozHSR8v/jyuuLTMXwjWuxPFlFlUapXoGc+Gj9mDlTDDfrwl7rXCl2tNZ0kE8sIBO6YOn96Q==
+ dependencies:
+ colorspace "1.1.x"
+ enabled "2.0.x"
+ kuler "^2.0.0"
+
"@date-io/core@1.x", "@date-io/core@^1.3.13":
version "1.3.13"
resolved "https://registry.npmjs.org/@date-io/core/-/core-1.3.13.tgz#90c71da493f20204b7a972929cc5c482d078b3fa"
@@ -2077,6 +2111,32 @@
dependencies:
yaml-ast-parser "0.0.43"
+"@fortawesome/fontawesome-common-types@^0.2.35":
+ version "0.2.35"
+ resolved "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.35.tgz#01dd3d054da07a00b764d78748df20daf2b317e9"
+ integrity sha512-IHUfxSEDS9dDGqYwIW7wTN6tn/O8E0n5PcAHz9cAaBoZw6UpG20IG/YM3NNLaGPwPqgjBAFjIURzqoQs3rrtuw==
+
+"@fortawesome/fontawesome-svg-core@^1.2.35":
+ version "1.2.35"
+ resolved "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.35.tgz#85aea8c25645fcec88d35f2eb1045c38d3e65cff"
+ integrity sha512-uLEXifXIL7hnh2sNZQrIJWNol7cTVIzwI+4qcBIq9QWaZqUblm0IDrtSqbNg+3SQf8SMGHkiSigD++rHmCHjBg==
+ dependencies:
+ "@fortawesome/fontawesome-common-types" "^0.2.35"
+
+"@fortawesome/free-solid-svg-icons@^5.15.2", "@fortawesome/free-solid-svg-icons@^5.15.3":
+ version "5.15.3"
+ resolved "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.3.tgz#52eebe354f60dc77e0bde934ffc5c75ffd04f9d8"
+ integrity sha512-XPeeu1IlGYqz4VWGRAT5ukNMd4VHUEEJ7ysZ7pSSgaEtNvSo+FLurybGJVmiqkQdK50OkSja2bfZXOeyMGRD8Q==
+ dependencies:
+ "@fortawesome/fontawesome-common-types" "^0.2.35"
+
+"@fortawesome/react-fontawesome@^0.1.14":
+ version "0.1.14"
+ resolved "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.14.tgz#bf28875c3935b69ce2dc620e1060b217a47f64ca"
+ integrity sha512-4wqNb0gRLVaBm/h+lGe8UfPPivcbuJ6ecI4hIgW0LjI7kzpYB9FkN0L9apbVzg+lsBdcTf0AlBtODjcSX5mmKA==
+ dependencies:
+ prop-types "^15.7.2"
+
"@gitbeaker/core@^28.0.2", "@gitbeaker/core@^28.2.0":
version "28.2.0"
resolved "https://registry.npmjs.org/@gitbeaker/core/-/core-28.2.0.tgz#87e6f789faf55d726f75d05e470020e4bbb8e08c"
@@ -2733,6 +2793,21 @@
resolved "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz#e90c9f71768b3736e76d7dd6783fc6c2afa88bc8"
integrity sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==
+"@internationalized/message@3.0.0-alpha.0":
+ version "3.0.0-alpha.0"
+ resolved "https://registry.npmjs.org/@internationalized/message/-/message-3.0.0-alpha.0.tgz#83015e2057d2b6b5034a3e23983b1e051f9d9e36"
+ integrity sha512-NT2eiVq5f5z7Yi9Hmchb8GAGYjEpYbYcD4u/Oxo5XG9XFbrnz7zNvrJJlzuQ+2jPozabq6pFKurqaFmM49DYUg==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ intl-messageformat "^2.2.0"
+
+"@internationalized/number@3.0.0-alpha.0":
+ version "3.0.0-alpha.0"
+ resolved "https://registry.npmjs.org/@internationalized/number/-/number-3.0.0-alpha.0.tgz#27190fbc1d73a24ac96dfafdfe7aa4e520090eed"
+ integrity sha512-8aOD2I3HmEscIZO/cm1jkcrYMSmRPhoW9G1OsuQb4Ge/Y9HsJVGB9otTylUEXJUmoXi/eD8Mr1gx3+0FLCM4eA==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+
"@istanbuljs/load-nyc-config@^1.0.0":
version "1.0.0"
resolved "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz#10602de5570baea82f8afbfa2630b24e7a8cfe5b"
@@ -3955,11 +4030,13 @@
puka "^1.0.1"
read-package-json-fast "^2.0.1"
-"@octokit/auth-app@^2.10.5":
- version "2.10.5"
- resolved "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-2.10.5.tgz#85d69cb96818f5da34bf0b81bb637d3675ad4e9a"
- integrity sha512-6yXyjtcBWpuPYSdZN8z8IIjGSqkPmiJzdmCdod8at41ANB1FtaKbUIDL5+IkG+svv68NIYs+XORbhBRFXYB3bw==
+"@octokit/auth-app@^3.4.0":
+ version "3.4.0"
+ resolved "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-3.4.0.tgz#af9f68512e7b8dd071b49e1470a1ddf88ff6a3a3"
+ integrity sha512-zBVgTnLJb0uoNMGCpcDkkAbPeavHX7oAjJkaDv2nqMmsXSsCw4AbUhjl99EtJQG/JqFY/kLFHM9330Wn0k70+g==
dependencies:
+ "@octokit/auth-oauth-app" "^4.1.0"
+ "@octokit/auth-oauth-user" "^1.2.3"
"@octokit/request" "^5.4.11"
"@octokit/request-error" "^2.0.0"
"@octokit/types" "^6.0.3"
@@ -3969,6 +4046,41 @@
universal-github-app-jwt "^1.0.1"
universal-user-agent "^6.0.0"
+"@octokit/auth-oauth-app@^4.1.0":
+ version "4.1.2"
+ resolved "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-4.1.2.tgz#bf3ff30c260e6e9f10b950386f279befb8fe907d"
+ integrity sha512-bdNGNRmuDJjKoHla3mUGtkk/xcxKngnQfBEnyk+7VwMqrABKvQB1wQRSrwSWkPPUX7Lcj2ttkPAPG7+iBkMRnw==
+ dependencies:
+ "@octokit/auth-oauth-device" "^3.1.1"
+ "@octokit/auth-oauth-user" "^1.2.1"
+ "@octokit/request" "^5.3.0"
+ "@octokit/types" "^6.0.3"
+ "@types/btoa-lite" "^1.0.0"
+ btoa-lite "^1.0.0"
+ universal-user-agent "^6.0.0"
+
+"@octokit/auth-oauth-device@^3.1.1":
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-3.1.1.tgz#380499f9a850425e2c7bdeb62afc070181c536a9"
+ integrity sha512-ykDZROilszXZJ6pYdl6SZ15UZniCs0zDcKgwOZpMz3U0QDHPUhFGXjHToBCAIHwbncMu+jLt4/Nw4lq3FwAw/w==
+ dependencies:
+ "@octokit/oauth-methods" "^1.1.0"
+ "@octokit/request" "^5.4.14"
+ "@octokit/types" "^6.10.0"
+ universal-user-agent "^6.0.0"
+
+"@octokit/auth-oauth-user@^1.2.1", "@octokit/auth-oauth-user@^1.2.3":
+ version "1.2.4"
+ resolved "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-1.2.4.tgz#3594eb7d40cb462240e7e90849781dfa0045aed5"
+ integrity sha512-efOajupCZBP1veqx5w59Qey0lIud1rDUgxTRjjkQDU3eOBmkAasY1pXemDsQwW0I85jb1P/gn2dMejedVxf9kw==
+ dependencies:
+ "@octokit/auth-oauth-device" "^3.1.1"
+ "@octokit/oauth-methods" "^1.1.0"
+ "@octokit/request" "^5.4.14"
+ "@octokit/types" "^6.12.2"
+ btoa-lite "^1.0.0"
+ universal-user-agent "^6.0.0"
+
"@octokit/auth-token@^2.4.4":
version "2.4.4"
resolved "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.4.tgz#ee31c69b01d0378c12fd3ffe406030f3d94d3b56"
@@ -4006,20 +4118,31 @@
"@octokit/types" "^6.0.3"
universal-user-agent "^6.0.0"
+"@octokit/oauth-authorization-url@^4.3.1":
+ version "4.3.1"
+ resolved "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-4.3.1.tgz#008d09bf427a7f61c70b5283040d60a456011a51"
+ integrity sha512-sI/SOEAvzRhqdzj+kJl+2ifblRve2XU6ZB36Lq25Su8R31zE3GoKToSLh64nWFnKePNi2RrdcMm94UEIQZslOw==
+
+"@octokit/oauth-methods@^1.1.0":
+ version "1.2.2"
+ resolved "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-1.2.2.tgz#3d98c548aa2ace36ad8d0ce6593fd49dcbe103cc"
+ integrity sha512-CFMUMn9DdPLMcpffhKgkwIIClfv0ZToJM4qcg4O0egCoHMYkVlxl22bBoo9qCnuF1U/xn871KEXuozKIX+bA2w==
+ 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"
+
"@octokit/openapi-types@^2.2.0":
version "2.2.0"
resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-2.2.0.tgz#123e0438a0bc718ccdac3b5a2e69b3dd00daa85b"
integrity sha512-274lNUDonw10kT8wHg8fCcUc1ZjZHbWv0/TbAwb0ojhBQqZYc1cQ/4yqTVTtPMDeZ//g7xVEYe/s3vURkRghPg==
-"@octokit/openapi-types@^5.3.2":
- version "5.3.2"
- resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-5.3.2.tgz#b8ac43c5c3d00aef61a34cf744e315110c78deb4"
- integrity sha512-NxF1yfYOUO92rCx3dwvA2onF30Vdlg7YUkMVXkeptqpzA3tRLplThhFleV/UKWFgh7rpKu1yYRbvNDUtzSopKA==
-
-"@octokit/openapi-types@^6.0.0":
- version "6.0.0"
- resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-6.0.0.tgz#7da8d7d5a72d3282c1a3ff9f951c8133a707480d"
- integrity sha512-CnDdK7ivHkBtJYzWzZm7gEkanA7gKH6a09Eguz7flHw//GacPJLmkHA3f3N++MJmlxD1Fl+mB7B32EEpSCwztQ==
+"@octokit/openapi-types@^7.0.0":
+ version "7.0.0"
+ resolved "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-7.0.0.tgz#0f6992db9854af15eca77d71ab0ec7fad2f20411"
+ integrity sha512-gV/8DJhAL/04zjTI95a7FhQwS6jlEE0W/7xeYAzuArD0KVAVWDLP2f3vi98hs3HLTczxXdRK/mF0tRoQPpolEw==
"@octokit/plugin-enterprise-rest@^6.0.1":
version "6.0.1"
@@ -4038,64 +4161,44 @@
resolved "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.2.tgz#394d59ec734cd2f122431fbaf05099861ece3c44"
integrity sha512-oTJSNAmBqyDR41uSMunLQKMX0jmEXbwD1fpz8FG27lScV3RhtGfBa1/BBLym+PxcC16IBlF7KH9vP1BUYxA+Eg==
-"@octokit/plugin-rest-endpoint-methods@4.13.5":
- version "4.13.5"
- resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-4.13.5.tgz#ad76285b82fe05fbb4adf2774a9c887f3534a880"
- integrity sha512-kYKcWkFm4Ldk8bZai2RVEP1z97k1C/Ay2FN9FNTBg7JIyKoiiJjks4OtT6cuKeZX39tqa+C3J9xeYc6G+6g8uQ==
+"@octokit/plugin-rest-endpoint-methods@5.0.1":
+ version "5.0.1"
+ resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.0.1.tgz#631b8d4edc6798b03489911252a25f2a4e58c594"
+ integrity sha512-vvWbPtPqLyIzJ7A4IPdTl+8IeuKAwMJ4LjvmqWOOdfSuqWQYZXq2CEd0hsnkidff2YfKlguzujHs/reBdAx8Sg==
dependencies:
- "@octokit/types" "^6.12.2"
+ "@octokit/types" "^6.13.1"
deprecation "^2.3.1"
-"@octokit/plugin-rest-endpoint-methods@5.0.0":
- version "5.0.0"
- resolved "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.0.0.tgz#cf2cdeb24ea829c31688216a5b165010b61f9a98"
- integrity sha512-Jc7CLNUueIshXT+HWt6T+M0sySPjF32mSFQAK7UfAg8qGeRI6OM1GSBxDLwbXjkqy2NVdnqCedJcP1nC785JYg==
+"@octokit/request-error@^2.0.0", "@octokit/request-error@^2.0.5":
+ version "2.0.5"
+ resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.5.tgz#72cc91edc870281ad583a42619256b380c600143"
+ integrity sha512-T/2wcCFyM7SkXzNoyVNWjyVlUwBvW3igM3Btr/eKYiPmucXTtkxt2RBsf6gn3LTzaLSLTQtNmvg+dGsOxQrjZg==
dependencies:
- "@octokit/types" "^6.13.0"
- deprecation "^2.3.1"
-
-"@octokit/request-error@^2.0.0":
- version "2.0.2"
- resolved "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.2.tgz#0e76b83f5d8fdda1db99027ea5f617c2e6ba9ed0"
- integrity sha512-2BrmnvVSV1MXQvEkrb9zwzP0wXFNbPJij922kYBTLIlIafukrGOb+ABBT2+c6wZiuyWDH1K1zmjGQ0toN/wMWw==
- dependencies:
- "@octokit/types" "^5.0.1"
+ "@octokit/types" "^6.0.3"
deprecation "^2.0.0"
once "^1.4.0"
-"@octokit/request@^5.3.0", "@octokit/request@^5.4.11", "@octokit/request@^5.4.12":
- version "5.4.13"
- resolved "https://registry.npmjs.org/@octokit/request/-/request-5.4.13.tgz#eec5987b3e96f984fc5f41967e001170c6d23a18"
- integrity sha512-WcNRH5XPPtg7i1g9Da5U9dvZ6YbTffw9BN2rVezYiE7couoSyaRsw0e+Tl8uk1fArHE7Dn14U7YqUDy59WaqEw==
+"@octokit/request@^5.3.0", "@octokit/request@^5.4.11", "@octokit/request@^5.4.12", "@octokit/request@^5.4.14":
+ version "5.4.15"
+ resolved "https://registry.npmjs.org/@octokit/request/-/request-5.4.15.tgz#829da413dc7dd3aa5e2cdbb1c7d0ebe1f146a128"
+ integrity sha512-6UnZfZzLwNhdLRreOtTkT9n57ZwulCve8q3IT/Z477vThu6snfdkBuhxnChpOKNGxcQ71ow561Qoa6uqLdPtag==
dependencies:
"@octokit/endpoint" "^6.0.1"
"@octokit/request-error" "^2.0.0"
- "@octokit/types" "^6.0.3"
- deprecation "^2.0.0"
+ "@octokit/types" "^6.7.1"
is-plain-object "^5.0.0"
node-fetch "^2.6.1"
- once "^1.4.0"
universal-user-agent "^6.0.0"
-"@octokit/rest@^18.0.12", "@octokit/rest@^18.1.0":
- version "18.3.5"
- resolved "https://registry.npmjs.org/@octokit/rest/-/rest-18.3.5.tgz#a89903d46e0b4273bd3234674ec2777a651d68ab"
- integrity sha512-ZPeRms3WhWxQBEvoIh0zzf8xdU2FX0Capa7+lTca8YHmRsO3QNJzf1H3PcuKKsfgp91/xVDRtX91sTe1kexlbw==
+"@octokit/rest@^18.1.0", "@octokit/rest@^18.1.1", "@octokit/rest@^18.5.3":
+ version "18.5.3"
+ resolved "https://registry.npmjs.org/@octokit/rest/-/rest-18.5.3.tgz#6a2e6006a87ebbc34079c419258dd29ec9ff659d"
+ integrity sha512-KPAsUCr1DOdLVbZJgGNuE/QVLWEaVBpFQwDAz/2Cnya6uW2wJ/P5RVGk0itx7yyN1aGa8uXm2pri4umEqG1JBA==
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" "4.13.5"
-
-"@octokit/rest@^18.1.1":
- version "18.5.2"
- resolved "https://registry.npmjs.org/@octokit/rest/-/rest-18.5.2.tgz#0369e554b7076e3749005147be94c661c7a5a74b"
- integrity sha512-Kz03XYfKS0yYdi61BkL9/aJ0pP2A/WK5vF/syhu9/kY30J8He3P68hv9GRpn8bULFx2K0A9MEErn4v3QEdbZcw==
- 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.0.0"
+ "@octokit/plugin-rest-endpoint-methods" "5.0.1"
"@octokit/types@^5.0.0", "@octokit/types@^5.0.1":
version "5.5.0"
@@ -4104,19 +4207,12 @@
dependencies:
"@types/node" ">= 8"
-"@octokit/types@^6.0.0", "@octokit/types@^6.0.1", "@octokit/types@^6.0.3", "@octokit/types@^6.12.2":
- version "6.12.2"
- resolved "https://registry.npmjs.org/@octokit/types/-/types-6.12.2.tgz#5b44add079a478b8eb27d78cf384cc47e4411362"
- integrity sha512-kCkiN8scbCmSq+gwdJV0iLgHc0O/GTPY1/cffo9kECu1MvatLPh9E+qFhfRIktKfHEA6ZYvv6S1B4Wnv3bi3pA==
+"@octokit/types@^6.0.0", "@octokit/types@^6.0.1", "@octokit/types@^6.0.3", "@octokit/types@^6.10.0", "@octokit/types@^6.12.2", "@octokit/types@^6.13.0", "@octokit/types@^6.13.1", "@octokit/types@^6.7.1", "@octokit/types@^6.8.2":
+ version "6.14.2"
+ resolved "https://registry.npmjs.org/@octokit/types/-/types-6.14.2.tgz#64c9457f38fb8522bdbba3c8cc814590a2d61bf5"
+ integrity sha512-wiQtW9ZSy4OvgQ09iQOdyXYNN60GqjCL/UdMsepDr1Gr0QzpW6irIKbH3REuAHXAhxkEk9/F2a3Gcs1P6kW5jA==
dependencies:
- "@octokit/openapi-types" "^5.3.2"
-
-"@octokit/types@^6.13.0", "@octokit/types@^6.8.2":
- version "6.13.0"
- resolved "https://registry.npmjs.org/@octokit/types/-/types-6.13.0.tgz#779e5b7566c8dde68f2f6273861dd2f0409480d0"
- integrity sha512-W2J9qlVIU11jMwKHUp5/rbVUeErqelCsO5vW5PKNb7wAXQVUz87Rc+imjlEvpvbH8yUb+KHmv8NEjVZdsdpyxA==
- dependencies:
- "@octokit/openapi-types" "^6.0.0"
+ "@octokit/openapi-types" "^7.0.0"
"@open-draft/until@^1.0.3":
version "1.0.3"
@@ -4233,6 +4329,445 @@
prop-types "^15.6.1"
react-lifecycles-compat "^3.0.4"
+"@react-aria/button@~3.3.1":
+ version "3.3.1"
+ resolved "https://registry.npmjs.org/@react-aria/button/-/button-3.3.1.tgz#f180ffa95e3e822b7da4937421cf8280dd17af17"
+ integrity sha512-LXNuo0L79AhYqnxV+Y3J3xt7hPcmCVCEpZaC/dBzovR1MLunrdpk3QAXsRt3tqza1XvoqdvNhNHQm1Z1kyBTUg==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-aria/focus" "^3.2.2"
+ "@react-aria/i18n" "^3.3.0"
+ "@react-aria/interactions" "^3.3.3"
+ "@react-aria/utils" "^3.6.0"
+ "@react-stately/toggle" "^3.2.1"
+ "@react-types/button" "^3.3.1"
+
+"@react-aria/dialog@~3.1.2":
+ version "3.1.2"
+ resolved "https://registry.npmjs.org/@react-aria/dialog/-/dialog-3.1.2.tgz#868970e7fdaa6ddb91a0d8d5b492778607d417fd"
+ integrity sha512-CUHzLdcKxnQ1IpbJOJ3BIDe762QoTOFXZfDAheNiTi24ym85w7KkW7dnfJDK2+J5RY15c5KWooOZvTaBmIJ7Xw==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-aria/focus" "^3.2.2"
+ "@react-aria/utils" "^3.3.0"
+ "@react-stately/overlays" "^3.1.1"
+ "@react-types/dialog" "^3.3.0"
+
+"@react-aria/focus@^3.2.2", "@react-aria/focus@^3.2.3", "@react-aria/focus@^3.2.4", "@react-aria/focus@~3.2.4":
+ version "3.2.4"
+ resolved "https://registry.npmjs.org/@react-aria/focus/-/focus-3.2.4.tgz#86c4fbde51a7cae414407b2d421fb5b311cd62f5"
+ integrity sha512-qoJoUDSriI7RCRq3L7yDOPtFZfquyjLA9d2pOJzvMx1F6dEqfNCaycyIg9lHykHXXhShgrXwfpyGTXoSUQpmtw==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-aria/interactions" "^3.3.4"
+ "@react-aria/utils" "^3.7.0"
+ "@react-types/shared" "^3.5.0"
+ clsx "^1.1.1"
+
+"@react-aria/i18n@^3.3.0":
+ version "3.3.0"
+ resolved "https://registry.npmjs.org/@react-aria/i18n/-/i18n-3.3.0.tgz#7f92ae81f6536b19b17b89c0991ddb6c10f2512a"
+ integrity sha512-8KYk0tQiEf9Kd9xdF4cKliP1169WSIryKFnZgnm9dvZl96TyfDK1xJpZQy58XjRdbS/H45CKydFmMcZEElu3BQ==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@internationalized/message" "3.0.0-alpha.0"
+ "@internationalized/number" "3.0.0-alpha.0"
+ "@react-aria/ssr" "^3.0.1"
+ "@react-aria/utils" "^3.6.0"
+ "@react-types/shared" "^3.4.0"
+
+"@react-aria/interactions@^3.2.1", "@react-aria/interactions@^3.3.3", "@react-aria/interactions@^3.3.4", "@react-aria/interactions@~3.3.4":
+ version "3.3.4"
+ resolved "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.3.4.tgz#a5b3a87f886cf0f4e28cbd13fbe02c7efb4f1e2e"
+ integrity sha512-WzT9aIRWvLZvZvuwNKKUkZzeomZgIrquAtwgRYGWbjSbrYPOT9B3w/GBEWZDYUG0c1K8NkIEAxTX0e+QI+tqAA==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-aria/utils" "^3.7.0"
+ "@react-types/shared" "^3.5.0"
+
+"@react-aria/label@^3.1.1":
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/@react-aria/label/-/label-3.1.1.tgz#03dc5c4813cd1f51760ba48783c186c2eeda1189"
+ integrity sha512-9kZKJonYSXeY6hZULZrsujAb6uXDGEy8qPq0tjTVoTA3+gx26LOmLCLgvHFtxUK1e4s99rHmaSPdOtq5qu3EVQ==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-aria/utils" "^3.3.0"
+ "@react-types/label" "^3.2.1"
+ "@react-types/shared" "^3.2.1"
+
+"@react-aria/listbox@~3.2.4":
+ version "3.2.4"
+ resolved "https://registry.npmjs.org/@react-aria/listbox/-/listbox-3.2.4.tgz#3162e47d64e1f6cd8fdfe45766cb88c3852a525d"
+ integrity sha512-IYs4oS2wzWVcWEtKG57zZLZI507WlDy24wuzymwgFxxIRXDVaBsSMOs7+uE7N1P4fLOa1yAlv170AvKDDbIJ2g==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-aria/interactions" "^3.3.3"
+ "@react-aria/label" "^3.1.1"
+ "@react-aria/selection" "^3.3.2"
+ "@react-aria/utils" "^3.6.0"
+ "@react-stately/collections" "^3.3.0"
+ "@react-stately/list" "^3.2.2"
+ "@react-types/listbox" "^3.1.1"
+ "@react-types/shared" "^3.4.0"
+
+"@react-aria/menu@^3.2.0":
+ version "3.2.0"
+ resolved "https://registry.npmjs.org/@react-aria/menu/-/menu-3.2.0.tgz#cd9417105b3230f1c34ddddddb31a95f462393e2"
+ integrity sha512-CFgC82ZO/LjJtMhDUJFdE3+PV0jS88LK9CCr6w11ggp+U3Q2fPXPdkAVeEB3cJn4KI0TRCBgE+4EneIzdTEgcw==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-aria/interactions" "^3.3.4"
+ "@react-aria/overlays" "^3.6.2"
+ "@react-aria/selection" "^3.4.0"
+ "@react-aria/utils" "^3.7.0"
+ "@react-stately/collections" "^3.3.1"
+ "@react-stately/menu" "^3.2.1"
+ "@react-stately/tree" "^3.1.3"
+ "@react-types/button" "^3.3.1"
+ "@react-types/menu" "^3.1.1"
+ "@react-types/shared" "^3.5.0"
+
+"@react-aria/overlays@^3.6.1", "@react-aria/overlays@^3.6.2", "@react-aria/overlays@~3.6.2":
+ version "3.6.2"
+ resolved "https://registry.npmjs.org/@react-aria/overlays/-/overlays-3.6.2.tgz#0a9fcb7426d4321dc80ee636282228eb7be83a84"
+ integrity sha512-6f9o1fypGcB/VcprvoDm5280glaiAp/9RZeNPP+HPXE5MxpQIzFDJCzTrSezAUYNkueh/KNMpUxOUUgytloScQ==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-aria/i18n" "^3.3.0"
+ "@react-aria/interactions" "^3.3.4"
+ "@react-aria/utils" "^3.7.0"
+ "@react-aria/visually-hidden" "^3.2.1"
+ "@react-stately/overlays" "^3.1.1"
+ "@react-types/button" "^3.3.1"
+ "@react-types/overlays" "^3.4.0"
+ dom-helpers "^3.3.1"
+
+"@react-aria/select@~3.3.1":
+ version "3.3.1"
+ resolved "https://registry.npmjs.org/@react-aria/select/-/select-3.3.1.tgz#cfa694ff4b2020846e08b58f6f0a489f0d2b24ff"
+ integrity sha512-E/EZ4SKf8P5EMVznCmTjfa9y1cR6L+WIzXHTFAlwrmmIzNirHSipbFp6LpJzoByqd0p9IKxhBdxqFP92url0Qg==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-aria/i18n" "^3.3.0"
+ "@react-aria/interactions" "^3.3.4"
+ "@react-aria/label" "^3.1.1"
+ "@react-aria/menu" "^3.2.0"
+ "@react-aria/selection" "^3.4.0"
+ "@react-aria/utils" "^3.7.0"
+ "@react-aria/visually-hidden" "^3.2.1"
+ "@react-stately/select" "^3.1.1"
+ "@react-types/button" "^3.3.1"
+ "@react-types/select" "^3.2.0"
+ "@react-types/shared" "^3.5.0"
+
+"@react-aria/selection@^3.3.2", "@react-aria/selection@^3.4.0":
+ version "3.4.0"
+ resolved "https://registry.npmjs.org/@react-aria/selection/-/selection-3.4.0.tgz#abd7aa5435f504e314a72122f2bcaef43b06fa78"
+ integrity sha512-ddxiB9zhy8JEkG4+DElSMNrSKxRI3RQKyOwQf4i3omqXj8bMH1XJesFwbdGNmR/zrbzXvr35ln9y3S0WS+4ClA==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-aria/focus" "^3.2.4"
+ "@react-aria/i18n" "^3.3.0"
+ "@react-aria/interactions" "^3.3.4"
+ "@react-aria/utils" "^3.7.0"
+ "@react-stately/collections" "^3.3.1"
+ "@react-stately/selection" "^3.4.0"
+ "@react-types/shared" "^3.5.0"
+
+"@react-aria/separator@~3.1.1":
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/@react-aria/separator/-/separator-3.1.1.tgz#bfcd71bb5ab50dc04a7f307b84bd77955f08002f"
+ integrity sha512-VbiqQsTtKKMjvMcPVWgTbDHzx7qMP3VFC+y9cEVajicMwRoO4bn7kJgcSzainXpWx70bhT5RW1mt84fzxMF+Lg==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-aria/utils" "^3.3.0"
+ "@react-types/shared" "^3.2.1"
+
+"@react-aria/ssr@^3.0.1", "@react-aria/ssr@~3.0.1":
+ version "3.0.1"
+ resolved "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.0.1.tgz#5f7c111f9ecd184b8f6140139703c1ee552dca30"
+ integrity sha512-rweMNcSkUO4YkcmgFIoZFvgPyHN2P9DOjq3VOHnZ8SG3Y4TTvSY6Iv90KgzeEfmWCUqqt65FYH4JgrpGNToEMw==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+
+"@react-aria/tooltip@~3.1.1":
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/@react-aria/tooltip/-/tooltip-3.1.1.tgz#e0dfdd9e51b581563f684927249d70e1bad761e3"
+ integrity sha512-wTszWN6lG3A9Ofdrhv1vG9aOmoqzuUZCbG9ZbXZ9+RtiOMwP/WnuSLWXcMH+KaWYpaImy7h1MDfOgHeaPxCbag==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-aria/focus" "^3.2.3"
+ "@react-aria/interactions" "^3.3.3"
+ "@react-aria/overlays" "^3.6.1"
+ "@react-aria/utils" "^3.6.0"
+ "@react-stately/tooltip" "^3.0.2"
+ "@react-types/shared" "^3.4.0"
+ "@react-types/tooltip" "^3.1.1"
+
+"@react-aria/utils@^3.3.0", "@react-aria/utils@^3.6.0", "@react-aria/utils@^3.7.0", "@react-aria/utils@~3.7.0":
+ version "3.7.0"
+ resolved "https://registry.npmjs.org/@react-aria/utils/-/utils-3.7.0.tgz#0aab1f682e9f1781cfadd2dd1ef9494bfaca0cbf"
+ integrity sha512-sMCdX0eF+4B05I+SX9V/NzI1/fD45vabi0dNyJhbSu2xNI82VIYgPcMBDjGU83NJSnjY969R3/JbbLjBrtKUgA==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-aria/ssr" "^3.0.1"
+ "@react-stately/utils" "^3.2.0"
+ "@react-types/shared" "^3.5.0"
+ clsx "^1.1.1"
+
+"@react-aria/visually-hidden@^3.2.1":
+ version "3.2.1"
+ resolved "https://registry.npmjs.org/@react-aria/visually-hidden/-/visually-hidden-3.2.1.tgz#c022c562346140a473242448045add59269a74fd"
+ integrity sha512-ba7bQD09MuzUghtPyrQoXHgQnRRfOu039roVKPz2em9gHD0Wy4ap2UPwlzx35KzNq6FdCzMDZeSZHSnUWlzKnw==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-aria/interactions" "^3.2.1"
+ "@react-aria/utils" "^3.3.0"
+ clsx "^1.1.1"
+
+"@react-hook/debounce@^3.0.0":
+ version "3.0.0"
+ resolved "https://registry.npmjs.org/@react-hook/debounce/-/debounce-3.0.0.tgz#9eea8b5d81d4cb67cd72dd8657b3ff724afc7cad"
+ integrity sha512-ir/kPrSfAzY12Gre0sOHkZ2rkEmM4fS5M5zFxCi4BnCeXh2nvx9Ujd+U4IGpKCuPA+EQD0pg1eK2NGLvfWejag==
+ dependencies:
+ "@react-hook/latest" "^1.0.2"
+
+"@react-hook/event@^1.2.1":
+ version "1.2.3"
+ resolved "https://registry.npmjs.org/@react-hook/event/-/event-1.2.3.tgz#cfe86d5cf36f53e85b367ff619990d001b5c82ae"
+ integrity sha512-WMBwLnYY2rubLeecsi4skl1imfx0oiXTgazV/1ByPT6WkmLvxUao3hC+mxps5D/+JK4Fq3uG9OWU/dn5jMtXyg==
+ dependencies:
+ "@react-hook/passive-layout-effect" "^1.2.0"
+
+"@react-hook/latest@^1.0.2":
+ version "1.0.3"
+ resolved "https://registry.npmjs.org/@react-hook/latest/-/latest-1.0.3.tgz#c2d1d0b0af8b69ec6e2b3a2412ba0768ac82db80"
+ integrity sha512-dy6duzl+JnAZcDbNTfmaP3xHiKtbXYOaz3G51MGVljh548Y8MWzTr+PHLOfvpypEVW9zwvl+VyKjbWKEVbV1Rg==
+
+"@react-hook/passive-layout-effect@^1.2.0":
+ version "1.2.1"
+ resolved "https://registry.npmjs.org/@react-hook/passive-layout-effect/-/passive-layout-effect-1.2.1.tgz#c06dac2d011f36d61259aa1c6df4f0d5e28bc55e"
+ integrity sha512-IwEphTD75liO8g+6taS+4oqz+nnroocNfWVHWz7j+N+ZO2vYrc6PV1q7GQhuahL0IOR7JccFTsFKQ/mb6iZWAg==
+
+"@react-hook/resize-observer@^1.1.0":
+ version "1.2.0"
+ resolved "https://registry.npmjs.org/@react-hook/resize-observer/-/resize-observer-1.2.0.tgz#a44b385d998f4ab33aa9481a43c4ac33af21f7d7"
+ integrity sha512-7Cpy0aaZ3xXlSabQ43aZcfgzwYSidrshEKGDqpfvdx7pHnGDGskr8m1Ajb6yamJUSdTRgqCemYQcwouCqMmZoQ==
+ dependencies:
+ "@react-hook/latest" "^1.0.2"
+ "@react-hook/passive-layout-effect" "^1.2.0"
+ "@types/raf-schd" "^4.0.0"
+ raf-schd "^4.0.2"
+ resize-observer-polyfill "^1.5.1"
+
+"@react-hook/size@^2.1.1":
+ version "2.1.1"
+ resolved "https://registry.npmjs.org/@react-hook/size/-/size-2.1.1.tgz#10d3fb5bc61e128f0d7924714a925a04c992ed1f"
+ integrity sha512-QtHDsrvz8p4cai2UKxBpzk0r/uM63UyhmozTVChaDHJsVpN5/7A2yu8wuGyNhExdeCYMclLM21QjY1dyqpGbuQ==
+ dependencies:
+ "@react-hook/passive-layout-effect" "^1.2.0"
+ "@react-hook/resize-observer" "^1.1.0"
+
+"@react-hook/throttle@^2.2.0":
+ version "2.2.0"
+ resolved "https://registry.npmjs.org/@react-hook/throttle/-/throttle-2.2.0.tgz#d0402714a06e1ba0bc1da1fdf5c3c5cd0e08d45a"
+ integrity sha512-LJ5eg+yMV8lXtqK3lR+OtOZ2WH/EfWvuiEEu0M3bhR7dZRfTyEJKxH1oK9uyBxiXPtWXiQggWbZirMCXam51tg==
+ dependencies:
+ "@react-hook/latest" "^1.0.2"
+
+"@react-hook/window-size@^3.0.7":
+ version "3.0.7"
+ resolved "https://registry.npmjs.org/@react-hook/window-size/-/window-size-3.0.7.tgz#00d176e7a8eb55814e161eae34aae20afbcbe35d"
+ integrity sha512-bK5ed/jN+cxy0s1jt2CelCnUt7jZRseUvPQ22ZJkUl/QDOsD+7CA/6wcqC3c0QweM/fPBRP6uI56TJ48SnlVww==
+ dependencies:
+ "@react-hook/debounce" "^3.0.0"
+ "@react-hook/event" "^1.2.1"
+ "@react-hook/throttle" "^2.2.0"
+
+"@react-spectrum/utils@~3.5.1":
+ version "3.5.1"
+ resolved "https://registry.npmjs.org/@react-spectrum/utils/-/utils-3.5.1.tgz#dd733913e30e0ed59c6bdae430531283b4cdcc96"
+ integrity sha512-lSdxCtshkj9dsi9sGcem6s9lak2XT55uyZGZr2S3w6iwm3aS7OlJNoT/4xtUFGW3t1bF2oxNngHX6eLl+quFyw==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-aria/i18n" "^3.3.0"
+ "@react-aria/ssr" "^3.0.1"
+ "@react-aria/utils" "^3.6.0"
+ "@react-types/shared" "^3.4.0"
+ clsx "^1.1.1"
+
+"@react-stately/collections@^3.2.1", "@react-stately/collections@^3.3.0", "@react-stately/collections@^3.3.1":
+ version "3.3.1"
+ resolved "https://registry.npmjs.org/@react-stately/collections/-/collections-3.3.1.tgz#683acf6e7a4e9ea174e1cf82a13bb8175ba0a1a0"
+ integrity sha512-bBiOj0hszFpCbk9KhSm04Jo87GAODm8kA52uFiGAO99yb2ypO+UTFYseBExFQ59cV7b++UMCfdJe/+Ymv9RALg==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-types/shared" "^3.5.0"
+
+"@react-stately/list@^3.2.1", "@react-stately/list@^3.2.2":
+ version "3.2.2"
+ resolved "https://registry.npmjs.org/@react-stately/list/-/list-3.2.2.tgz#fb368cc7678503179202d11aef0ef8d48d1cbf12"
+ integrity sha512-8sJvy0cUhllhUMadYjX1qKmTxAWMRGxkvZpU/6reOEChlvibjAwbn2paoR8yZ+ppieeQOBe+AAYTl53gK8fKDA==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-stately/collections" "^3.3.0"
+ "@react-stately/selection" "^3.2.1"
+ "@react-stately/utils" "^3.1.1"
+ "@react-types/shared" "^3.2.1"
+
+"@react-stately/menu@^3.2.1":
+ version "3.2.1"
+ resolved "https://registry.npmjs.org/@react-stately/menu/-/menu-3.2.1.tgz#314646217e5dd49fa1da6886d33f485d44d6f0dd"
+ integrity sha512-8cpCynynjjn3qWNzrZMJEpsdk4tkXK9q3Xaw0ADqVym/NC/wPU3P3cqL4HY+ETar01tS2x8K23qYHbOZz0cQtQ==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-stately/overlays" "^3.1.1"
+ "@react-stately/utils" "^3.1.1"
+ "@react-types/menu" "^3.1.1"
+ "@react-types/shared" "^3.2.1"
+
+"@react-stately/overlays@^3.1.1":
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/@react-stately/overlays/-/overlays-3.1.1.tgz#6c1a393b77148184f7b1df22ece832d694d5a8b4"
+ integrity sha512-79YYXvmWKflezNPhc4fvXA1rDZurZvvEJcmbStNlR5Ryrnk/sQiOQCoVWooi2M4glSMT3UOTvD7YEnXxARcuIQ==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-stately/utils" "^3.1.1"
+ "@react-types/overlays" "^3.2.1"
+
+"@react-stately/select@^3.1.1", "@react-stately/select@~3.1.1":
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/@react-stately/select/-/select-3.1.1.tgz#f49602ee7fc71f14550360bfa7c5becab58ac877"
+ integrity sha512-cl63nW66IJPsn9WQjKvghAIFKdFKuU1txx4zdEGY9tcwB/Yc+bgniLGOOTExJqN/RdPW9uBny5jjWcc4OQXyJA==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-stately/collections" "^3.2.1"
+ "@react-stately/list" "^3.2.1"
+ "@react-stately/menu" "^3.2.1"
+ "@react-stately/selection" "^3.2.1"
+ "@react-stately/utils" "^3.1.1"
+ "@react-types/select" "^3.1.1"
+ "@react-types/shared" "^3.2.1"
+
+"@react-stately/selection@^3.2.1", "@react-stately/selection@^3.4.0":
+ version "3.4.0"
+ resolved "https://registry.npmjs.org/@react-stately/selection/-/selection-3.4.0.tgz#795134e17b59f21cc4979b30179bccdfc2e3b9c1"
+ integrity sha512-5RV9f1Tm4WSTDguL1iizYcgzeWiK6Qe2EZ03zaaE9gm5UyyIrEPQD4WW9Semio2cUF8IFuWLaOvRCk+un7p53Q==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-stately/collections" "^3.3.1"
+ "@react-stately/utils" "^3.1.1"
+ "@react-types/shared" "^3.5.0"
+
+"@react-stately/toggle@^3.2.1":
+ version "3.2.1"
+ resolved "https://registry.npmjs.org/@react-stately/toggle/-/toggle-3.2.1.tgz#8b10b5eb99c3c4df2c36d17a5f23b77773ed7722"
+ integrity sha512-gZVuJ8OYoATUoXzdprsyx6O1w3wCrN+J0KnjhrjjKTrBG68n3pZH0p6dM0XpsaCzlSv0UgNa4fhHS3dYfr/ovw==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-stately/utils" "^3.1.1"
+ "@react-types/checkbox" "^3.2.1"
+ "@react-types/shared" "^3.2.1"
+
+"@react-stately/tooltip@^3.0.2", "@react-stately/tooltip@~3.0.3":
+ version "3.0.3"
+ resolved "https://registry.npmjs.org/@react-stately/tooltip/-/tooltip-3.0.3.tgz#577fbf3cca39db7047ec2d77ddc03a56c454a82a"
+ integrity sha512-N98S8ccHEpgbgM6wIMZwqz37s8IQTa+5nPr8eVnIs5wqwdnAARFjvckr2okOGwaksofp1wtpcYbnNrIBwexJOg==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-stately/overlays" "^3.1.1"
+ "@react-stately/utils" "^3.2.0"
+ "@react-types/tooltip" "^3.1.1"
+
+"@react-stately/tree@^3.1.3":
+ version "3.1.3"
+ resolved "https://registry.npmjs.org/@react-stately/tree/-/tree-3.1.3.tgz#5ceb1aa3793836a503253ddd47fc9227ac59c7b4"
+ integrity sha512-xwM2C3ppd8yJfduwgff7Gl2bNPMVeF4K65InFJZNVx5JLKFF6DJLAPTORAHLpCN+AoB8bY4sRK3V5fNBVpz0oQ==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+ "@react-stately/collections" "^3.3.1"
+ "@react-stately/selection" "^3.4.0"
+ "@react-stately/utils" "^3.1.1"
+ "@react-types/shared" "^3.5.0"
+
+"@react-stately/utils@^3.1.1", "@react-stately/utils@^3.2.0":
+ version "3.2.0"
+ resolved "https://registry.npmjs.org/@react-stately/utils/-/utils-3.2.0.tgz#0b90a70fee3236025ad8bed1f0e3555d5fc10296"
+ integrity sha512-vVBJvHVLnQySgqZ7OfP3ngDdwfGscJDsSD3WcN5ntHiT3JlZ5bksQReDkJEs20SFu2ST4w/0K7O4m97SbuMl2Q==
+ dependencies:
+ "@babel/runtime" "^7.6.2"
+
+"@react-types/button@^3.3.1":
+ version "3.3.1"
+ resolved "https://registry.npmjs.org/@react-types/button/-/button-3.3.1.tgz#4bdd325bc7df19c33911af256f63eae91e2a452e"
+ integrity sha512-xKLGSzGfsDBMe0SM7icOLNmzW38sdNSDSGMdrTLd3ygxb6pXY/LlcTdx7Sq28hdW8XL/ikFAnoQeS1VLXZHj7w==
+ dependencies:
+ "@react-types/shared" "^3.4.0"
+
+"@react-types/checkbox@^3.2.1":
+ version "3.2.2"
+ resolved "https://registry.npmjs.org/@react-types/checkbox/-/checkbox-3.2.2.tgz#7182d44a533e2ffd2c9118372cbc2c33b006eb18"
+ integrity sha512-WAAqLdjf6GUWjsMN5NaFMFumOtGTq+3+48CpM0ah2L+qmhMdj1s4gvHDerhls6u4ovRK/7zhg7XK+qQwcYVqMg==
+ dependencies:
+ "@react-types/shared" "^3.4.0"
+
+"@react-types/dialog@^3.3.0":
+ version "3.3.0"
+ resolved "https://registry.npmjs.org/@react-types/dialog/-/dialog-3.3.0.tgz#60a2b53f250ee082b53aef9340c80f1afe654bc7"
+ integrity sha512-63Vsr/UOZiaajlNDQUgWDi6v3EMenV1f8Cwh+L4lcyIJnbC6WeC2VEV3ld/TYVC0U58SQ0k7u2EIyHkWjc5kdQ==
+ dependencies:
+ "@react-types/overlays" "^3.2.1"
+ "@react-types/shared" "^3.2.1"
+
+"@react-types/label@^3.2.1":
+ version "3.4.0"
+ resolved "https://registry.npmjs.org/@react-types/label/-/label-3.4.0.tgz#6023dc9dd0146324ead52e08540cd60e57a3e27f"
+ integrity sha512-l84ysm1dcjL/5qVk9iN74z+/Ul0999XqnwTu6aTbuwAXqMk2sTU45eK2Yp/FJ7YWeflcF1vsomTkjMkX0BHKMw==
+ dependencies:
+ "@react-types/shared" "^3.4.0"
+
+"@react-types/listbox@^3.1.1":
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/@react-types/listbox/-/listbox-3.1.1.tgz#b896303ccb87123cf59ee2c089953d7928497c9b"
+ integrity sha512-HAljfdpbyLoJL9iwqz7Fw9MOmRwfzODeN+sr5ncE0eXJxnRBFhb5LjbjAN1dUBrKFBkv3etGlYu5HvX+PJjpew==
+ dependencies:
+ "@react-types/shared" "^3.2.1"
+
+"@react-types/menu@^3.1.1":
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/@react-types/menu/-/menu-3.1.1.tgz#e5aa52ac07c083243540dd5da0790a85fd1628c6"
+ integrity sha512-/xZWp4/3P/8dKFAGuzxz8IccSXvJH0TmHIk2/xnj2Eyw9152IfutIpOda3iswhjrx1LEkzUgdJ8bCdiebgg6QQ==
+ dependencies:
+ "@react-types/overlays" "^3.2.1"
+ "@react-types/shared" "^3.2.1"
+
+"@react-types/overlays@^3.2.1", "@react-types/overlays@^3.4.0":
+ version "3.4.0"
+ resolved "https://registry.npmjs.org/@react-types/overlays/-/overlays-3.4.0.tgz#3c4619906bb12e3697e770b59c2090bb18da25bd"
+ integrity sha512-ddiMB6JXR7acQnRFEL2/6SSdBropmNrcAFk3qFCfovuVZh6STYhPmoAgj06mJFDoAD63pxayysfPG2EvLl2yAw==
+ dependencies:
+ "@react-types/shared" "^3.3.0"
+
+"@react-types/select@^3.1.1", "@react-types/select@^3.2.0":
+ version "3.2.0"
+ resolved "https://registry.npmjs.org/@react-types/select/-/select-3.2.0.tgz#31b9e0f94fc24f053f4a1f073e174ffd59bac055"
+ integrity sha512-9vYhQWr1iB+3KWTZ1RxS2xZq0n0CJfsTRbEr0akLrtE/pRLC4O4l8RMFD49HyX0fShvz1FStmxTE2x7k8yVc4w==
+ dependencies:
+ "@react-types/shared" "^3.4.0"
+
+"@react-types/shared@^3.2.1", "@react-types/shared@^3.3.0", "@react-types/shared@^3.4.0", "@react-types/shared@^3.5.0":
+ version "3.5.0"
+ resolved "https://registry.npmjs.org/@react-types/shared/-/shared-3.5.0.tgz#dbc90e8fe711967e66d6f3ce0e17d34b24bd6283"
+ integrity sha512-997Me7AegwJOI10ye/Q5ds6fT+VBc6XcsXYzPqOD+HIbyL1kUQNDF/VoO37ib7KEH8jXH9aceoX9blz3Q1QcpA==
+
+"@react-types/tooltip@^3.1.1":
+ version "3.1.1"
+ resolved "https://registry.npmjs.org/@react-types/tooltip/-/tooltip-3.1.1.tgz#7d45a4dd8c57c422a1a2dcb03b6c043e7481c3ca"
+ integrity sha512-18gM2Co9tzCDfN0tEdfboD18sXDtD6YiKctd8HQ8tBiRO4IF1ce9ubKe6++Lj+38GQPq7GWFFoUiS1WArTWIHA==
+ dependencies:
+ "@react-types/overlays" "^3.4.0"
+ "@react-types/shared" "^3.4.0"
+
"@rjsf/core@^2.4.0":
version "2.5.1"
resolved "https://registry.npmjs.org/@rjsf/core/-/core-2.5.1.tgz#95a842d22bab5f83929662fcd73739108e9f5cbb"
@@ -4440,6 +4975,179 @@
dependencies:
any-observable "^0.3.0"
+"@sentry/apm@5.13.2":
+ version "5.13.2"
+ resolved "https://registry.npmjs.org/@sentry/apm/-/apm-5.13.2.tgz#3a0809912426f52e19b1f4a603e99423a0ac8fb9"
+ integrity sha512-Pv6PRVkcmmYYIT422gXm968F8YQyf5uN1RSHOFBjWsxI3Ke/uRgeEdIVKPDo78GklBfETyRN6GyLEZ555jRe6g==
+ dependencies:
+ "@sentry/browser" "5.13.2"
+ "@sentry/hub" "5.13.2"
+ "@sentry/minimal" "5.13.2"
+ "@sentry/types" "5.13.2"
+ "@sentry/utils" "5.13.2"
+ tslib "^1.9.3"
+
+"@sentry/apm@5.19.2":
+ version "5.19.2"
+ resolved "https://registry.npmjs.org/@sentry/apm/-/apm-5.19.2.tgz#369fdcbc9fa5db992f707b24f3165e106a277cf7"
+ integrity sha512-V7p5niqG/Nn1OSMAyreChiIrQFYzFHKADKNaDEvIXqC4hxFnMG8lPRqEFJH49fNjsFBFfIG9iY1rO1ZFg3S42Q==
+ dependencies:
+ "@sentry/browser" "5.19.2"
+ "@sentry/hub" "5.19.2"
+ "@sentry/minimal" "5.19.2"
+ "@sentry/types" "5.19.2"
+ "@sentry/utils" "5.19.2"
+ tslib "^1.9.3"
+
+"@sentry/browser@5.13.2", "@sentry/browser@~5.13.2":
+ version "5.13.2"
+ resolved "https://registry.npmjs.org/@sentry/browser/-/browser-5.13.2.tgz#fcca630c8c80447ba8392803d4e4450fd2231b92"
+ integrity sha512-4MeauHs8Rf1c2FF6n84wrvA4LexEL1K/Tg3r+1vigItiqyyyYBx1sPjHGZeKeilgBi+6IEV5O8sy30QIrA/NsQ==
+ dependencies:
+ "@sentry/core" "5.13.2"
+ "@sentry/types" "5.13.2"
+ "@sentry/utils" "5.13.2"
+ tslib "^1.9.3"
+
+"@sentry/browser@5.19.2", "@sentry/browser@~5.19.2":
+ version "5.19.2"
+ resolved "https://registry.npmjs.org/@sentry/browser/-/browser-5.19.2.tgz#8bad445b8d1efd50e6510bb43b3018b941f6e5cb"
+ integrity sha512-o6Z532n+0N5ANDzgR9GN+Q6CU7zVlIJvBEW234rBiB+ZZj6XwTLS1dD+JexGr8lCo8PeXI2rypKcj1jUGLVW8w==
+ dependencies:
+ "@sentry/core" "5.19.2"
+ "@sentry/types" "5.19.2"
+ "@sentry/utils" "5.19.2"
+ tslib "^1.9.3"
+
+"@sentry/core@5.13.2", "@sentry/core@~5.13.2":
+ version "5.13.2"
+ resolved "https://registry.npmjs.org/@sentry/core/-/core-5.13.2.tgz#d89e199beef612d0a01e5c4df4e0bb7efcb72c74"
+ integrity sha512-iB7CQSt9e0EJhSmcNOCjzJ/u7E7qYJ3mI3h44GO83n7VOmxBXKSvtUl9FpKFypbWrsdrDz8HihLgAZZoMLWpPA==
+ dependencies:
+ "@sentry/hub" "5.13.2"
+ "@sentry/minimal" "5.13.2"
+ "@sentry/types" "5.13.2"
+ "@sentry/utils" "5.13.2"
+ tslib "^1.9.3"
+
+"@sentry/core@5.19.2":
+ version "5.19.2"
+ resolved "https://registry.npmjs.org/@sentry/core/-/core-5.19.2.tgz#99a64ef0e55230fc02a083c48fa07ada85de4929"
+ integrity sha512-sfbBsVXpA0WYJUichz5IhvqKD8xJUfQvsszrTsUKa7PQAMAboOmuh6bo8KquaVQnAZyZWZU08UduvlSV3tA7tw==
+ dependencies:
+ "@sentry/hub" "5.19.2"
+ "@sentry/minimal" "5.19.2"
+ "@sentry/types" "5.19.2"
+ "@sentry/utils" "5.19.2"
+ tslib "^1.9.3"
+
+"@sentry/electron@~1.3.0":
+ version "1.3.2"
+ resolved "https://registry.npmjs.org/@sentry/electron/-/electron-1.3.2.tgz#83c40943f2fad5e72c77dadf524fd59d1a773e3f"
+ integrity sha512-fhD6cF7Jy0AXAVNHrUnxhzK5d/reXpzRcp5Ggnr+IRoijGe7rsq/AlOX8KhLS6SmQdI/XXb3F7fxHdItBV9+7w==
+ dependencies:
+ "@sentry/browser" "~5.13.2"
+ "@sentry/core" "~5.13.2"
+ "@sentry/minimal" "~5.13.2"
+ "@sentry/node" "~5.13.2"
+ "@sentry/types" "~5.13.2"
+ "@sentry/utils" "~5.13.2"
+ electron-fetch "^1.4.0"
+ form-data "2.5.1"
+ util.promisify "1.0.1"
+
+"@sentry/hub@5.13.2":
+ version "5.13.2"
+ resolved "https://registry.npmjs.org/@sentry/hub/-/hub-5.13.2.tgz#875a5ba983d6ada5caae5b6b4decd0257ef5cdb7"
+ integrity sha512-/U7yq3DTuRz8SRpZVKAaenW9sD2F5wbj12kDVPxPnGspyqhy0wBWKs9j0YJfBiDXMKOwp3HX964O3ygtwjnfAw==
+ dependencies:
+ "@sentry/types" "5.13.2"
+ "@sentry/utils" "5.13.2"
+ tslib "^1.9.3"
+
+"@sentry/hub@5.19.2":
+ version "5.19.2"
+ resolved "https://registry.npmjs.org/@sentry/hub/-/hub-5.19.2.tgz#ab7f3d2d253c3441b2833a530b17c6de2418b2c7"
+ integrity sha512-2KkEYX4q9TDCOiaVEo2kQ1W0IXyZxJxZtIjDdFQyes9T4ubYlKHAbvCjTxHSQv37lDO4t7sOIApWG9rlkHzlEA==
+ dependencies:
+ "@sentry/types" "5.19.2"
+ "@sentry/utils" "5.19.2"
+ tslib "^1.9.3"
+
+"@sentry/minimal@5.13.2", "@sentry/minimal@~5.13.2":
+ version "5.13.2"
+ resolved "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.13.2.tgz#e42e33dc74fc935f8857d1a43a528afd741640fd"
+ integrity sha512-VV0eA3HgrnN3mac1XVPpSCLukYsU+QxegbmpnZ8UL8eIQSZ/ZikYxagDNlZbdnmXHUpOEUeag2gxVntSCo5UcA==
+ dependencies:
+ "@sentry/hub" "5.13.2"
+ "@sentry/types" "5.13.2"
+ tslib "^1.9.3"
+
+"@sentry/minimal@5.19.2", "@sentry/minimal@~5.19.2":
+ version "5.19.2"
+ resolved "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.19.2.tgz#0fc2fdf9911a0cb31b52f7ccad061b74785724a3"
+ integrity sha512-rApEOkjy+ZmkeqEItgFvUFxe5l+dht9AumuUzq74pWp+HJqxxv9IVTusKppBsE1adjtmyhwK4O3Wr8qyc75xlw==
+ dependencies:
+ "@sentry/hub" "5.19.2"
+ "@sentry/types" "5.19.2"
+ tslib "^1.9.3"
+
+"@sentry/node@~5.13.2":
+ version "5.13.2"
+ resolved "https://registry.npmjs.org/@sentry/node/-/node-5.13.2.tgz#3be5608e00fb3fe1b813ad8365073a465d19f5f6"
+ integrity sha512-LwNOUvc0+28jYfI0o4HmkDTEYdY3dWvSCnL5zggO12buon7Wc+jirXZbEQAx84HlXu7sGSjtKCTzUQOphv7sPw==
+ dependencies:
+ "@sentry/apm" "5.13.2"
+ "@sentry/core" "5.13.2"
+ "@sentry/hub" "5.13.2"
+ "@sentry/types" "5.13.2"
+ "@sentry/utils" "5.13.2"
+ cookie "^0.3.1"
+ https-proxy-agent "^4.0.0"
+ lru_map "^0.3.3"
+ tslib "^1.9.3"
+
+"@sentry/node@~5.19.2":
+ version "5.19.2"
+ resolved "https://registry.npmjs.org/@sentry/node/-/node-5.19.2.tgz#8c1c2f6c983c3d8b25143e5b99c4b6cc745125ec"
+ integrity sha512-gbww3iTWkdvYIAhOmULbv8znKwkIpklGJ0SPtAh0orUMuaa0lVht+6HQIhRgeXp50lMzNaYC3fuzkbFfYgpS7A==
+ dependencies:
+ "@sentry/apm" "5.19.2"
+ "@sentry/core" "5.19.2"
+ "@sentry/hub" "5.19.2"
+ "@sentry/types" "5.19.2"
+ "@sentry/utils" "5.19.2"
+ cookie "^0.3.1"
+ https-proxy-agent "^5.0.0"
+ lru_map "^0.3.3"
+ tslib "^1.9.3"
+
+"@sentry/types@5.13.2", "@sentry/types@~5.13.2":
+ version "5.13.2"
+ resolved "https://registry.npmjs.org/@sentry/types/-/types-5.13.2.tgz#8e68c31f8fb99b4074374bff13ed01035b373d8c"
+ integrity sha512-mgAEQyc77PYBnAjnslSXUz6aKgDlunlg2c2qSK/ivKlEkTgTWWW/dE76++qVdrqM8SupnqQoiXyPDL0wUNdB3g==
+
+"@sentry/types@5.19.2", "@sentry/types@~5.19.2":
+ version "5.19.2"
+ resolved "https://registry.npmjs.org/@sentry/types/-/types-5.19.2.tgz#ead586f0b64b91c396d3521b938ca25f7b59d655"
+ integrity sha512-O6zkW8oM1qK5Uma9+B/UMlmlm9/gkw9MooqycWuEhIaKfDBj/yVbwb/UTiJmNkGc5VJQo0v1uXUZZQt6/Xq1GA==
+
+"@sentry/utils@5.13.2", "@sentry/utils@~5.13.2":
+ version "5.13.2"
+ resolved "https://registry.npmjs.org/@sentry/utils/-/utils-5.13.2.tgz#441594f4f9412bfd1690739ce986bf3a49687806"
+ integrity sha512-LwPQl6WRMKEnd16kg35HS3yE+VhBc8vN4+BBIlrgs7X0aoT+AbEd/sQLMisDgxNboCF44Ho3RCKtztiPb9blqg==
+ dependencies:
+ "@sentry/types" "5.13.2"
+ tslib "^1.9.3"
+
+"@sentry/utils@5.19.2":
+ version "5.19.2"
+ resolved "https://registry.npmjs.org/@sentry/utils/-/utils-5.19.2.tgz#f2819d9de5abc33173019e81955904247e4a8246"
+ integrity sha512-gEPkC0CJwvIWqcTcPSdIzqJkJa9N5vZzUZyBvdu1oiyJu7MfazpJEvj3whfJMysSfXJQxoJ+a1IPrA73VY23VA==
+ dependencies:
+ "@sentry/types" "5.19.2"
+ tslib "^1.9.3"
+
"@sideway/address@^4.1.0":
version "4.1.1"
resolved "https://registry.npmjs.org/@sideway/address/-/address-4.1.1.tgz#9e321e74310963fdf8eebfbee09c7bd69972de4d"
@@ -4508,6 +5216,168 @@
resolved "https://registry.npmjs.org/@spotify/prettier-config/-/prettier-config-9.0.0.tgz#7b562d56573c6fc0094446fbc92b22bc318945dc"
integrity sha512-In1q0tIiqTYKAGe3KOHDcFDdZRFISyQeSeipeTHGfki23ebHRZcjxvqj5SSdBkw65D4VpSREMi0s9i5iJiMcTw==
+"@stoplight/beaver-logger@^4.0.12":
+ version "4.0.12"
+ resolved "https://registry.npmjs.org/@stoplight/beaver-logger/-/beaver-logger-4.0.12.tgz#f754d2f20b4728f5e96fdec574729988e4fb0c2d"
+ integrity sha512-VPSqZ706GaAB/7VcXcKvzaxaKwHmr2jUNcn0mTvhR3dwglmDEsqoKRvzTxH+Zu1VUIRjdcy9zmU7mSfjKjPt7Q==
+ dependencies:
+ belter "^1.0.17"
+ zalgo-promise "^1.0.26"
+
+"@stoplight/json-schema-merge-allof@^0.7.5":
+ version "0.7.6"
+ resolved "https://registry.npmjs.org/@stoplight/json-schema-merge-allof/-/json-schema-merge-allof-0.7.6.tgz#39efac12a497ed29a06ae48e0141885634a045a4"
+ integrity sha512-xLbJC2VOd9AxO1VvvgyP/mWOqZbeg6mLpYzlzU4egDTTIrTsSqtv+yFakpPciuuMlOmJU/KzZK9C5AbMgE+VgQ==
+ dependencies:
+ compute-lcm "^1.1.0"
+ json-schema-compare "^0.2.2"
+ lodash "^4.17.4"
+
+"@stoplight/json-schema-tree@^2.0.0":
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/@stoplight/json-schema-tree/-/json-schema-tree-2.0.0.tgz#00d54cb6aa2a791c34be91fc30cc92e6d448258c"
+ integrity sha512-vnzcb0TC07xh89lAVGjBTJ2CWvCqmDJDIs3u+gvgvjDPY86CQ0Wl4D2Cmb0iuqd986aiDPc8vDQf1N0dSq5+9A==
+ dependencies:
+ "@stoplight/json" "^3.12.0"
+ "@stoplight/json-schema-merge-allof" "^0.7.5"
+ "@stoplight/lifecycle" "^2.3.2"
+ "@types/json-schema" "^7.0.7"
+ magic-error "^0.0.0"
+
+"@stoplight/json-schema-viewer@^4.0.0-beta.16":
+ version "4.0.0-beta.16"
+ resolved "https://registry.npmjs.org/@stoplight/json-schema-viewer/-/json-schema-viewer-4.0.0-beta.16.tgz#8f55debcb1e84ddcd6f55012ed52712560beaca5"
+ integrity sha512-f6GijfWi15maRQH4J/ulc8tFpoc+ejGeckiIH+USTLPd7fmGiIU5wINbJSVbLJ5Hccky8wraxlCzfdRuck84Jw==
+ dependencies:
+ "@fortawesome/free-solid-svg-icons" "^5.15.2"
+ "@stoplight/json" "^3.10.0"
+ "@stoplight/json-schema-tree" "^2.0.0"
+ "@stoplight/mosaic" "1.0.0-beta.46"
+ "@stoplight/react-error-boundary" "^1.0.0"
+ "@types/json-schema" "^7.0.7"
+ classnames "^2.2.6"
+ lodash "^4.17.19"
+
+"@stoplight/json@^3.10.0", "@stoplight/json@^3.12.0":
+ version "3.12.0"
+ resolved "https://registry.npmjs.org/@stoplight/json/-/json-3.12.0.tgz#26c8d32da78eac6a760ba2c9cca6ae717dc417b4"
+ integrity sha512-c0bvFOGICk8QWIat72Td2GG6Bdvq/6O2jQcDZ8rEjh56YOdC/YPn1S8ihKu3AntJCtvqC9eTfadWBqkNK9HAjw==
+ dependencies:
+ "@stoplight/ordered-object-literal" "^1.0.1"
+ "@stoplight/types" "^11.9.0"
+ jsonc-parser "~2.2.1"
+ lodash "^4.17.15"
+ safe-stable-stringify "^1.1"
+
+"@stoplight/lifecycle@^2.3.2":
+ version "2.3.2"
+ resolved "https://registry.npmjs.org/@stoplight/lifecycle/-/lifecycle-2.3.2.tgz#d61dff9ba20648241432e2daaef547214dc8976e"
+ integrity sha512-v0u8p27FA/eg04b4z6QXw4s0NeeFcRzyvseBW0+k/q4jtpg7EhVCqy42EbbbU43NTNDpIeQ81OcvkFz+6CYshw==
+ dependencies:
+ wolfy87-eventemitter "~5.2.8"
+
+"@stoplight/mosaic@1.0.0-beta.46":
+ version "1.0.0-beta.46"
+ resolved "https://registry.npmjs.org/@stoplight/mosaic/-/mosaic-1.0.0-beta.46.tgz#35fa3c9aebdb3c3535d1d8dd53cc52f1b2b1f5db"
+ integrity sha512-GlGLb2RzvzS7CQpq006c6eZhe7tIgRvDIt/nYqx+FXJEh0M045I2EObstdbyQt/sL7Zw5lae3uxiQ/1j8FqkRA==
+ dependencies:
+ "@fortawesome/fontawesome-svg-core" "^1.2.35"
+ "@fortawesome/free-solid-svg-icons" "^5.15.3"
+ "@fortawesome/react-fontawesome" "^0.1.14"
+ "@react-aria/button" "~3.3.1"
+ "@react-aria/dialog" "~3.1.2"
+ "@react-aria/focus" "~3.2.4"
+ "@react-aria/interactions" "~3.3.4"
+ "@react-aria/listbox" "~3.2.4"
+ "@react-aria/overlays" "~3.6.2"
+ "@react-aria/select" "~3.3.1"
+ "@react-aria/separator" "~3.1.1"
+ "@react-aria/ssr" "~3.0.1"
+ "@react-aria/tooltip" "~3.1.1"
+ "@react-aria/utils" "~3.7.0"
+ "@react-hook/size" "^2.1.1"
+ "@react-hook/window-size" "^3.0.7"
+ "@react-spectrum/utils" "~3.5.1"
+ "@react-stately/select" "~3.1.1"
+ "@react-stately/tooltip" "~3.0.3"
+ clsx "^1.1.1"
+ copy-to-clipboard "^3.3.1"
+ deepmerge "^4.2.2"
+ lodash.get "^4.4.2"
+ polished "^4.1.1"
+ reakit "npm:@stoplight/reakit@~1.3.5"
+ ts-keycode-enum "^1.0.6"
+ tslib "^2.1.0"
+ zustand "^3.3.3"
+
+"@stoplight/mosaic@^1.0.0-beta.46":
+ version "1.0.0-beta.47"
+ resolved "https://registry.npmjs.org/@stoplight/mosaic/-/mosaic-1.0.0-beta.47.tgz#6b212163af3ab7fb981dee75785f1b967299171e"
+ integrity sha512-Rp6aXslPB0X2hqj8MFmbYSWUvSjo/ResDFNQoMHD1BCBGw0nTmlcPZaQDKQApUFQrDBzih+OGRKTk0mGxrTP3A==
+ dependencies:
+ "@fortawesome/fontawesome-svg-core" "^1.2.35"
+ "@fortawesome/free-solid-svg-icons" "^5.15.3"
+ "@fortawesome/react-fontawesome" "^0.1.14"
+ "@react-aria/button" "~3.3.1"
+ "@react-aria/dialog" "~3.1.2"
+ "@react-aria/focus" "~3.2.4"
+ "@react-aria/interactions" "~3.3.4"
+ "@react-aria/listbox" "~3.2.4"
+ "@react-aria/overlays" "~3.6.2"
+ "@react-aria/select" "~3.3.1"
+ "@react-aria/separator" "~3.1.1"
+ "@react-aria/ssr" "~3.0.1"
+ "@react-aria/tooltip" "~3.1.1"
+ "@react-aria/utils" "~3.7.0"
+ "@react-hook/size" "^2.1.1"
+ "@react-hook/window-size" "^3.0.7"
+ "@react-spectrum/utils" "~3.5.1"
+ "@react-stately/select" "~3.1.1"
+ "@react-stately/tooltip" "~3.0.3"
+ clsx "^1.1.1"
+ copy-to-clipboard "^3.3.1"
+ deepmerge "^4.2.2"
+ lodash.get "^4.4.2"
+ polished "^4.1.1"
+ reakit "npm:@stoplight/reakit@~1.3.5"
+ ts-keycode-enum "^1.0.6"
+ tslib "^2.1.0"
+ zustand "^3.3.3"
+
+"@stoplight/ordered-object-literal@^1.0.1":
+ version "1.0.2"
+ resolved "https://registry.npmjs.org/@stoplight/ordered-object-literal/-/ordered-object-literal-1.0.2.tgz#2a88a5ebc8b68b54837ac9a9ae7b779cdd862062"
+ integrity sha512-0ZMS/9sNU3kVo/6RF3eAv7MK9DY8WLjiVJB/tVyfF2lhr2R4kqh534jZ0PlrFB9CRXrdndzn1DbX6ihKZXft2w==
+
+"@stoplight/react-error-boundary@^1.0.0":
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/@stoplight/react-error-boundary/-/react-error-boundary-1.1.0.tgz#9b0fb5d0538abbf9a416723b90f5b776bf68a75d"
+ integrity sha512-z/1gDVQAafqYuJksL212F1DXHSr604KDqAspZwbC+kWVqCsddQBmXzwI4Lqqem4wHbNGeVZYk3svW+sILX/PUQ==
+ dependencies:
+ "@stoplight/types" "^11.9.0"
+
+"@stoplight/reporter@^1.10.0":
+ version "1.10.0"
+ resolved "https://registry.npmjs.org/@stoplight/reporter/-/reporter-1.10.0.tgz#cbb58a7842422178ff56410e3f009517a474a5ba"
+ integrity sha512-XdHIT+TwS00rEhsEClCddrACZCqxK+sh/R2EBFuXBTbWMIwujoWVTLPxEwhVkfm2JF57pK3jzULOFxEnNRnmpQ==
+ dependencies:
+ "@sentry/browser" "~5.19.2"
+ "@sentry/electron" "~1.3.0"
+ "@sentry/minimal" "~5.19.2"
+ "@sentry/node" "~5.19.2"
+ "@sentry/types" "~5.19.2"
+ "@stoplight/beaver-logger" "^4.0.12"
+ "@types/amplitude-js" "^5.11.0"
+ amplitude-js "^7.1.0"
+
+"@stoplight/types@^11.9.0":
+ version "11.10.0"
+ resolved "https://registry.npmjs.org/@stoplight/types/-/types-11.10.0.tgz#60bbee770526f4de9cd1c613c7ab84c4e4674126"
+ integrity sha512-ffHD9i4UHS8Gsg7Ar8pKjI9B4kq7MRekE7tCROFGcFDzQhfRx9T92AduoLAtP/010XNYq23yDKpLBRPIEk8+xg==
+ dependencies:
+ "@types/json-schema" "^7.0.4"
+ utility-types "^3.10.0"
+
"@storybook/addon-actions@^6.1.11":
version "6.1.17"
resolved "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-6.1.17.tgz#9d32336284738cefa69b99acafa4b132d5533600"
@@ -5631,6 +6501,11 @@
dependencies:
"@types/node" "*"
+"@types/amplitude-js@^5.11.0":
+ version "5.11.1"
+ resolved "https://registry.npmjs.org/@types/amplitude-js/-/amplitude-js-5.11.1.tgz#4883aa6f484530df3557de8683ff4529fcb7ec65"
+ integrity sha512-2BAZ8sMlOq4t0zC5LEBRL551u/kJPr+BTOe9OUtFT7J1U4Kgm+gHYmV4nYwq9sZnNj6MisCllKiiL27WEur7Sw==
+
"@types/anymatch@*":
version "1.3.1"
resolved "https://registry.npmjs.org/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a"
@@ -5711,6 +6586,11 @@
resolved "https://registry.npmjs.org/@types/braces/-/braces-3.0.0.tgz#7da1c0d44ff1c7eb660a36ec078ea61ba7eb42cb"
integrity sha512-TbH79tcyi9FHwbyboOKeRachRq63mSuWYXOflsNO9ZyE5ClQ/JaozNKl+aWUq87qPNsXasXxi2AbgfwIJ+8GQw==
+"@types/btoa-lite@^1.0.0":
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.0.tgz#e190a5a548e0b348adb0df9ac7fa5f1151c7cca4"
+ integrity sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg==
+
"@types/cacheable-request@^6.0.1":
version "6.0.1"
resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz#5d22f3dded1fd3a84c0bbeb5039a7419c2c91976"
@@ -6211,6 +7091,11 @@
resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz#f4c7ec43e81b319a9815115031709f26987891f0"
integrity sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==
+"@types/json-schema@^7.0.7":
+ version "7.0.7"
+ resolved "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz#98a993516c859eb0d5c4c8f098317a9ea68db9ad"
+ integrity sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==
+
"@types/json-stable-stringify@^1.0.32":
version "1.0.32"
resolved "https://registry.npmjs.org/@types/json-stable-stringify/-/json-stable-stringify-1.0.32.tgz#121f6917c4389db3923640b2e68de5fa64dda88e"
@@ -6295,9 +7180,9 @@
integrity sha512-09sXZZVsB3Ib41U0fC+O1O+4UOZT1bl/e+/QubPxpqDWHNEchvx/DEb1KJMOwq6K3MTNzZFoNSzVdR++o1DVnw==
"@types/luxon@^1.25.0":
- version "1.26.0"
- resolved "https://registry.npmjs.org/@types/luxon/-/luxon-1.26.0.tgz#8e783986370ad3bb9f885d93eb1a91caeecaed36"
- integrity sha512-zYmLYGczqBaOFaFjR1giG1QCbGMlXWOJcYgH9Mnk0MGcZHq1aer3ZwGXX8vd9NOfai6mAI/mVU6jD9hK0Wys7Q==
+ version "1.26.5"
+ resolved "https://registry.npmjs.org/@types/luxon/-/luxon-1.26.5.tgz#843fb705e16e4d2a90847a351b799ea9d879859e"
+ integrity sha512-XeQxxRMyJi1znfzHw4CGDLyup/raj84SnjjkI2fDootZPGlB0yqtvlvEIAmzHDa5wiEI5JJevZOWxpcofsaV+A==
"@types/markdown-to-jsx@^6.11.0":
version "6.11.2"
@@ -6453,9 +7338,9 @@
"@types/passport-oauth2" "*"
"@types/passport-google-oauth20@^2.0.3":
- version "2.0.3"
- resolved "https://registry.npmjs.org/@types/passport-google-oauth20/-/passport-google-oauth20-2.0.3.tgz#f554ff6d39f395acff3f1d762e54462194dac8da"
- integrity sha512-6EUEGzEg4acwowvgR/yVZIj8S2Kkwc6JmlY2/wnM1wJHNz20o7s1TIGrxnah8ymLgJasYDpy95P3TMMqlmetPw==
+ version "2.0.7"
+ resolved "https://registry.npmjs.org/@types/passport-google-oauth20/-/passport-google-oauth20-2.0.7.tgz#0d97b7a886a0c0d2158682145cd949b29f8efe86"
+ integrity sha512-0HPVSqDmOWk5fRLb+bqGal+6iWsERiEco/Mli77yy5NEy22IfkoRoqZTSZ8UtXDWY9DCZlpS1Jqq56iWx2torw==
dependencies:
"@types/express" "*"
"@types/passport" "*"
@@ -6532,6 +7417,11 @@
resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.4.tgz#a59e851c1ba16c0513ea123830dd639a0a15cb6a"
integrity sha512-+wYo+L6ZF6BMoEjtf8zB2esQsqdV6WsjRK/GP9WOgLPrq87PbNWgIxS76dS5uvl/QXtHGakZmwTznIfcPXcKlQ==
+"@types/raf-schd@^4.0.0":
+ version "4.0.1"
+ resolved "https://registry.npmjs.org/@types/raf-schd/-/raf-schd-4.0.1.tgz#1f9e03736f277fe9c7b82102bf18570a6ee19f82"
+ integrity sha512-Ha+EnKHFIh9EKW0/XZJPUd3EGDFisEvauaBd4VVCRPKeOqUxNEc9TodiY2Zhk33XCgzJucoFEcaoNcBAPHTQ2A==
+
"@types/raf@^3.4.0":
version "3.4.0"
resolved "https://registry.npmjs.org/@types/raf/-/raf-3.4.0.tgz#2b72cbd55405e071f1c4d29992638e022b20acc2"
@@ -7418,6 +8308,11 @@ address@1.1.2, address@^1.0.1:
resolved "https://registry.npmjs.org/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6"
integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==
+agent-base@5:
+ version "5.1.1"
+ resolved "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz#e8fb3f242959db44d63be665db7a8e739537a32c"
+ integrity sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==
+
agent-base@6:
version "6.0.1"
resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz#808007e4e5867decb0ab6ab2f928fbdb5a596db4"
@@ -7507,6 +8402,16 @@ alphanum-sort@^1.0.0:
resolved "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=
+amplitude-js@^7.1.0:
+ version "7.4.4"
+ resolved "https://registry.npmjs.org/amplitude-js/-/amplitude-js-7.4.4.tgz#1abd76f96a44ebdbf90e7371b37d071010deffe6"
+ integrity sha512-3Ojj1draRcXvfxi5P+Ye/6Y4roxtf1lQEjczcLDnHU9vxbPtT4fDblC9+cdJy7XmlJkGoq+KvnItlWfLuHV9GQ==
+ dependencies:
+ "@amplitude/ua-parser-js" "0.7.24"
+ "@amplitude/utils" "^1.0.5"
+ blueimp-md5 "^2.10.0"
+ query-string "5"
+
anafanafo@^1.0.0:
version "1.0.0"
resolved "https://registry.npmjs.org/anafanafo/-/anafanafo-1.0.0.tgz#2e67190aed5dc67f5f0043b710146e7276c1afb8"
@@ -8133,7 +9038,7 @@ async@^2.0.1, async@^2.6.1, async@^2.6.2:
dependencies:
lodash "^4.17.14"
-async@^3.2.0:
+async@^3.1.0, async@^3.2.0:
version "3.2.0"
resolved "https://registry.npmjs.org/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720"
integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==
@@ -8715,6 +9620,15 @@ before-after-hook@^2.1.0:
resolved "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635"
integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A==
+belter@^1.0.17:
+ version "1.0.165"
+ resolved "https://registry.npmjs.org/belter/-/belter-1.0.165.tgz#8bc32f0f30b94b67b80a63727b1584acd69942f0"
+ integrity sha512-TVOfXtLTTU3yyORjiYD2s9+fnTdxZp69KtR3pSDquLrdtK3OUmypgukVL+pIbcE6VMc85FRoFR48gybNZ2zHZQ==
+ dependencies:
+ cross-domain-safe-weakmap "^1"
+ cross-domain-utils "^2"
+ zalgo-promise "^1"
+
better-opn@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/better-opn/-/better-opn-2.0.0.tgz#c70d198e51164bdc220306a28a885d9ac7a14c44"
@@ -8810,6 +9724,11 @@ bluebird@~3.4.1:
resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz#f72d760be09b7f76d08ed8fae98b289a8d05fab3"
integrity sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM=
+blueimp-md5@^2.10.0:
+ version "2.18.0"
+ resolved "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.18.0.tgz#1152be1335f0c6b3911ed9e36db54f3e6ac52935"
+ integrity sha512-vE52okJvzsVWhcgUHOv+69OG3Mdg151xyn41aVQN/5W5S+S43qZhxECtYLAEHMSFWX6Mv5IZrzj3T5+JqXfj5Q==
+
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.11.9:
version "4.12.0"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
@@ -8831,6 +9750,11 @@ body-parser@1.19.0, body-parser@^1.18.3:
raw-body "2.4.0"
type-is "~1.6.17"
+body-scroll-lock@^3.1.5:
+ version "3.1.5"
+ resolved "https://registry.npmjs.org/body-scroll-lock/-/body-scroll-lock-3.1.5.tgz#c1392d9217ed2c3e237fee1e910f6cdd80b7aaec"
+ integrity sha512-Yi1Xaml0EvNA0OYWxXiYNqY24AfWkbA6w5vxE7GWxtKfzIbZM+Qw+aSmkgsbWzbHiy/RCSkUZBplVxTA+E4jJg==
+
bonjour@^3.5.0:
version "3.5.0"
resolved "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5"
@@ -9032,6 +9956,11 @@ bser@2.1.1:
dependencies:
node-int64 "^0.4.0"
+btoa-lite@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337"
+ integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc=
+
btoa@^1.2.1:
version "1.2.1"
resolved "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73"
@@ -9677,10 +10606,10 @@ class-utils@^0.3.5:
isobject "^3.0.0"
static-extend "^0.1.1"
-classnames@^2.2.5, classnames@^2.2.6:
- version "2.2.6"
- resolved "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
- integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==
+classnames@^2.2.5, classnames@^2.2.6, classnames@^2.3.1:
+ version "2.3.1"
+ resolved "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz#dfcfa3891e306ec1dad105d0e88f4417b8535e8e"
+ integrity sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==
clean-css@^4.2.3:
version "4.2.3"
@@ -9863,7 +10792,7 @@ clone@^1.0.2:
resolved "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4=
-clsx@^1.0.1, clsx@^1.0.2, clsx@^1.0.4, clsx@^1.1.0:
+clsx@^1.0.1, clsx@^1.0.2, clsx@^1.0.4, clsx@^1.1.0, clsx@^1.1.1:
version "1.1.1"
resolved "https://registry.npmjs.org/clsx/-/clsx-1.1.1.tgz#98b3134f9abbdf23b2663491ace13c5c03a73188"
integrity sha512-6/bPho624p3S2pMyvP5kKBPXnI3ufHLObBFCfgx+LkeR5lg2XYy2hqZqUf45ypD8COn2bhgGJSUE+l5dhNBieA==
@@ -9993,11 +10922,6 @@ colorette@1.2.1, colorette@^1.2.1:
resolved "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b"
integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==
-colornames@^1.1.1:
- version "1.1.1"
- resolved "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz#f8889030685c7c4ff9e2a559f5077eb76a816f96"
- integrity sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=
-
colors@^1.1.2, colors@^1.2.1:
version "1.4.0"
resolved "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
@@ -10403,6 +11327,11 @@ cookie@0.4.0:
resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
+cookie@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
+ integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=
+
cookie@^0.4.1, cookie@~0.4.1:
version "0.4.1"
resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1"
@@ -10605,6 +11534,20 @@ create-require@^1.1.0:
resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
+cross-domain-safe-weakmap@^1:
+ version "1.0.28"
+ resolved "https://registry.npmjs.org/cross-domain-safe-weakmap/-/cross-domain-safe-weakmap-1.0.28.tgz#d6c3c5af954340ce5f9d4ee5f3c38dba9513a165"
+ integrity sha512-gfQiQYSdWr9cYFVpmzp+b6MyTnefefDHr+fvm+JVv20hQxetV5J6chZOAusrpM/kFpTTbVDnHCziBFaREvgc0Q==
+ dependencies:
+ cross-domain-utils "^2.0.0"
+
+cross-domain-utils@^2, cross-domain-utils@^2.0.0:
+ version "2.0.34"
+ resolved "https://registry.npmjs.org/cross-domain-utils/-/cross-domain-utils-2.0.34.tgz#3f8dc8d82a5434213787433f17b76f51c316e382"
+ integrity sha512-ke4PirGRXwEElEmE/7k5aCvCW+EqbgseT7AOObzFfaVnOLuEVN9SjVWoOfS/qAT0rDPn3ggmNDW6mguMBy4HgA==
+ dependencies:
+ zalgo-promise "^1.0.11"
+
cross-env@^7.0.0:
version "7.0.3"
resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf"
@@ -11591,15 +12534,6 @@ dezalgo@^1.0.0:
asap "^2.0.0"
wrappy "1"
-diagnostics@^1.1.1:
- version "1.1.1"
- resolved "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz#cab6ac33df70c9d9a727490ae43ac995a769b22a"
- integrity sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==
- dependencies:
- colorspace "1.1.x"
- enabled "1.0.x"
- kuler "1.0.x"
-
dicer@0.3.0:
version "0.3.0"
resolved "https://registry.npmjs.org/dicer/-/dicer-0.3.0.tgz#eacd98b3bfbf92e8ab5c2fdb71aaac44bb06b872"
@@ -11740,7 +12674,7 @@ dom-converter@^0.2:
dependencies:
utila "~0.4"
-dom-helpers@^3.4.0:
+dom-helpers@^3.3.1, dom-helpers@^3.4.0:
version "3.4.0"
resolved "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz#e9b369700f959f62ecde5a6babde4bccd9169af8"
integrity sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==
@@ -11832,10 +12766,10 @@ domhandler@^4.0.0:
dependencies:
domelementtype "^2.1.0"
-dompurify@^2.0.12, dompurify@^2.1.1, dompurify@^2.2.7:
- version "2.2.7"
- resolved "https://registry.npmjs.org/dompurify/-/dompurify-2.2.7.tgz#a5f055a2a471638680e779bd08fc334962d11fd8"
- integrity sha512-jdtDffdGNY+C76jvodNTu9jt5yYj59vuTUyx+wXdzcSwAGTYZDAQkQ7Iwx9zcGrA4ixC1syU4H3RZROqRxokxg==
+dompurify@^2.0.12, dompurify@^2.1.1, dompurify@^2.2.8:
+ version "2.2.8"
+ resolved "https://registry.npmjs.org/dompurify/-/dompurify-2.2.8.tgz#ce88e395f6d00b6dc53f80d6b2a6fdf5446873c6"
+ integrity sha512-9H0UL59EkDLgY3dUFjLV6IEUaHm5qp3mxSqWw7Yyx4Zhk2Jn2cmLe+CNPP3xy13zl8Bqg+0NehQzkdMoVhGRww==
domutils@1.5.1:
version "1.5.1"
@@ -12030,6 +12964,13 @@ ejs@^3.1.2:
dependencies:
jake "^10.6.1"
+electron-fetch@^1.4.0:
+ version "1.7.3"
+ resolved "https://registry.npmjs.org/electron-fetch/-/electron-fetch-1.7.3.tgz#06cf363d7f64073ec00a37e9949ec9d29ce6b08a"
+ integrity sha512-1AVMaxrHXTTMqd7EK0MGWusdqNr07Rpj8Th6bG4at0oNgIi/1LBwa9CjT/0Zy+M0k/tSJPS04nFxHj0SXDVgVw==
+ dependencies:
+ encoding "^0.1.13"
+
electron-to-chromium@^1.3.378:
version "1.3.509"
resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.509.tgz#830fcb89cd66dc2984d18d794973b99e3f00584c"
@@ -12119,19 +13060,17 @@ emotion-theming@^10.0.19:
"@emotion/weak-memoize" "0.2.5"
hoist-non-react-statics "^3.3.0"
-enabled@1.0.x:
- version "1.0.2"
- resolved "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz#965f6513d2c2d1c5f4652b64a2e3396467fc2f93"
- integrity sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=
- dependencies:
- env-variable "0.0.x"
+enabled@2.0.x:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2"
+ integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==
encodeurl@~1.0.2:
version "1.0.2"
resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
-encoding@^0.1.12:
+encoding@^0.1.12, encoding@^0.1.13:
version "0.1.13"
resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9"
integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
@@ -12190,11 +13129,6 @@ env-paths@^2.2.0:
resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43"
integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA==
-env-variable@0.0.x:
- version "0.0.6"
- resolved "https://registry.npmjs.org/env-variable/-/env-variable-0.0.6.tgz#74ab20b3786c545b62b4a4813ab8cf22726c9808"
- integrity sha512-bHz59NlBbtS0NhftmR8+ExBEekE7br0e01jw+kk0NDro7TtZzBYZ5ScGPs3OmwnpyfHTHOtr1Y6uedCdrIldtg==
-
envinfo@^7.7.4:
version "7.7.4"
resolved "https://registry.npmjs.org/envinfo/-/envinfo-7.7.4.tgz#c6311cdd38a0e86808c1c9343f667e4267c4a320"
@@ -13491,6 +14425,11 @@ fn-name@~3.0.0:
resolved "https://registry.npmjs.org/fn-name/-/fn-name-3.0.0.tgz#0596707f635929634d791f452309ab41558e3c5c"
integrity sha512-eNMNr5exLoavuAMhIUVsOKF79SWd/zG104ef6sxBTSw+cZc6BXdQXDvYcGvp0VbxVVSp1XDUNoz7mg1xMtSznA==
+fn.name@1.x.x:
+ version "1.1.0"
+ resolved "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc"
+ integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==
+
follow-redirects@^1.0.0, follow-redirects@^1.10.0:
version "1.13.0"
resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db"
@@ -13550,7 +14489,7 @@ fork-ts-checker-webpack-plugin@4.1.6, fork-ts-checker-webpack-plugin@^4.0.5, for
tapable "^1.0.0"
worker-rpc "^0.1.0"
-form-data@^2.3.1, form-data@^2.3.2, form-data@^2.5.0:
+form-data@2.5.1, form-data@^2.3.1, form-data@^2.3.2, form-data@^2.5.0:
version "2.5.1"
resolved "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4"
integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==
@@ -15095,6 +16034,14 @@ https-proxy-agent@^2.2.1:
agent-base "^4.3.0"
debug "^3.1.0"
+https-proxy-agent@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz#702b71fb5520a132a66de1f67541d9e62154d82b"
+ integrity sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==
+ dependencies:
+ agent-base "5"
+ debug "4"
+
https-proxy-agent@^5.0.0:
version "5.0.0"
resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"
@@ -15487,6 +16434,18 @@ interpret@^2.0.0, interpret@^2.2.0:
resolved "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz#1a78a0b5965c40a5416d007ad6f50ad27c417df9"
integrity sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
+intl-messageformat-parser@1.4.0:
+ version "1.4.0"
+ resolved "https://registry.npmjs.org/intl-messageformat-parser/-/intl-messageformat-parser-1.4.0.tgz#b43d45a97468cadbe44331d74bb1e8dea44fc075"
+ integrity sha1-tD1FqXRoytvkQzHXS7Ho3qRPwHU=
+
+intl-messageformat@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-2.2.0.tgz#345bcd46de630b7683330c2e52177ff5eab484fc"
+ integrity sha1-NFvNRt5jC3aDMwwuUhd/9eq0hPw=
+ dependencies:
+ intl-messageformat-parser "1.4.0"
+
invariant@^2.0.0, invariant@^2.2.2, invariant@^2.2.3, invariant@^2.2.4:
version "2.2.4"
resolved "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
@@ -16965,10 +17924,10 @@ json-schema@0.2.3:
resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
-json-schema@^0.2.5:
- version "0.2.5"
- resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.2.5.tgz#97997f50972dd0500214e208c407efa4b5d7063b"
- integrity sha512-gWJOWYFrhQ8j7pVm0EM8Slr+EPVq1Phf6lvzvD/WCeqkrx/f2xBI0xOsRRS9xCn3I4vKtP519dvs3TP09r24wQ==
+json-schema@^0.3.0:
+ version "0.3.0"
+ resolved "https://registry.npmjs.org/json-schema/-/json-schema-0.3.0.tgz#90a9c5054bd065422c00241851ce8d59475b701b"
+ integrity sha512-TYfxx36xfl52Rf1LU9HyWSLGPdYLL+SQ8/E/0yVyKG8wCCDaSrhPap0vEdlsZWRaS6tnKKLPGiEJGiREVC8kxQ==
json-stable-stringify-without-jsonify@^1.0.1:
version "1.0.1"
@@ -17027,6 +17986,11 @@ json5@^1.0.1:
dependencies:
minimist "^1.2.0"
+jsonc-parser@~2.2.1:
+ version "2.2.1"
+ resolved "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-2.2.1.tgz#db73cd59d78cce28723199466b2a03d1be1df2bc"
+ integrity sha512-o6/yDBYccGvTz1+QFevz6l6OBZ2+fMVu2JZ9CIhzsYRX4mjaK5IyX9eldUdCmga16zlgQxyrj5pt9kzuj2C02w==
+
jsonfile@^2.1.0:
version "2.4.0"
resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
@@ -17341,12 +18305,10 @@ knex@^0.95.1:
tarn "^3.0.1"
tildify "2.0.0"
-kuler@1.0.x:
- version "1.0.1"
- resolved "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz#ef7c784f36c9fb6e16dd3150d152677b2b0228a6"
- integrity sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==
- dependencies:
- colornames "^1.1.1"
+kuler@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3"
+ integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==
language-subtag-registry@~0.3.2:
version "0.3.21"
@@ -17795,7 +18757,7 @@ lodash.flattendeep@^4.0.0:
resolved "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2"
integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=
-lodash.get@^4, lodash.get@^4.0.0:
+lodash.get@^4, lodash.get@^4.0.0, lodash.get@^4.4.2:
version "4.4.2"
resolved "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99"
integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=
@@ -17946,7 +18908,7 @@ log-update@^4.0.0:
slice-ansi "^4.0.0"
wrap-ansi "^6.2.0"
-logform@^2.1.1:
+logform@^2.1.1, logform@^2.2.0:
version "2.2.0"
resolved "https://registry.npmjs.org/logform/-/logform-2.2.0.tgz#40f036d19161fc76b68ab50fdc7fe495544492f2"
integrity sha512-N0qPlqfypFx7UHNn4B3lzS/b0uLqt2hmuoa+PpuXNYgozdJYAyauF5Ky0BWVjrxDlMWiT3qN4zPq3vVAfZy7Yg==
@@ -18060,6 +19022,11 @@ lru-queue@^0.1.0:
dependencies:
es5-ext "~0.10.2"
+lru_map@^0.3.3:
+ version "0.3.3"
+ resolved "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd"
+ integrity sha1-tcg1G5Rky9dQM1p5ZQoOwOVhGN0=
+
lunr@^2.3.9:
version "2.3.9"
resolved "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz#18b123142832337dd6e964df1a5a7707b25d35e1"
@@ -18085,6 +19052,11 @@ macos-release@^2.2.0:
resolved "https://registry.npmjs.org/macos-release/-/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f"
integrity sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA==
+magic-error@^0.0.0:
+ version "0.0.0"
+ resolved "https://registry.npmjs.org/magic-error/-/magic-error-0.0.0.tgz#f8630c98c55764b4851601901fdcb63428758b7d"
+ integrity sha512-ZMU3ylGOb/YQEpJo0XtAXbPGmKJtwzc3cuOHPrKgosV8AAc6db8dlQYLe0cp64P3BxkYZGoUvkvdNR5JM78beA==
+
magic-string@^0.25.7:
version "0.25.7"
resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051"
@@ -19823,10 +20795,12 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0:
dependencies:
wrappy "1"
-one-time@0.0.4:
- version "0.0.4"
- resolved "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz#f8cdf77884826fe4dff93e3a9cc37b1e4480742e"
- integrity sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=
+one-time@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45"
+ integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==
+ dependencies:
+ fn.name "1.x.x"
onetime@^1.0.0:
version "1.1.0"
@@ -20881,6 +21855,13 @@ polished@^3.4.4:
dependencies:
"@babel/runtime" "^7.9.2"
+polished@^4.1.1:
+ version "4.1.2"
+ resolved "https://registry.npmjs.org/polished/-/polished-4.1.2.tgz#c04fcc203e287e2d866e9cfcaf102dae1c01a816"
+ integrity sha512-jq4t3PJUpVRcveC53nnbEX35VyQI05x3tniwp26WFdm1dwaNUBHAi5awa/roBlwQxx1uRhwNSYeAi/aMbfiJCQ==
+ dependencies:
+ "@babel/runtime" "^7.13.17"
+
popper.js@1.16.1-lts:
version "1.16.1-lts"
resolved "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1-lts.tgz#cf6847b807da3799d80ee3d6d2f90df8a3f50b05"
@@ -21731,6 +22712,15 @@ qs@~6.5.2:
resolved "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
+query-string@5:
+ version "5.1.1"
+ resolved "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb"
+ integrity sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==
+ dependencies:
+ decode-uri-component "^0.2.0"
+ object-assign "^4.1.0"
+ strict-uri-encode "^1.0.0"
+
query-string@^4.1.0:
version "4.3.4"
resolved "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb"
@@ -22074,7 +23064,7 @@ react-helmet@6.1.0:
react-fast-compare "^3.1.1"
react-side-effect "^2.1.0"
-react-hook-form@^6.15.4, react-hook-form@^6.6.0:
+react-hook-form@^6.15.4:
version "6.15.4"
resolved "https://registry.npmjs.org/react-hook-form/-/react-hook-form-6.15.4.tgz#328003e1ccc096cd158899ffe7e3b33735a9b024"
integrity sha512-K+Sw33DtTMengs8OdqFJI3glzNl1wBzSefD/ksQw/hJf9CnOHQAU6qy82eOrh0IRNt2G53sjr7qnnw1JDjvx1w==
@@ -22590,7 +23580,7 @@ read@1, read@~1.0.1:
dependencies:
mute-stream "~0.0.4"
-"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6:
+"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@^2.3.7, readable-stream@~2.3.6:
version "2.3.7"
resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
@@ -22645,6 +23635,36 @@ readdirp@~3.5.0:
dependencies:
picomatch "^2.2.1"
+reakit-system@^0.15.1:
+ version "0.15.1"
+ resolved "https://registry.npmjs.org/reakit-system/-/reakit-system-0.15.1.tgz#bf5cc7a03f60a817373bc9cbb4a689c1f4100547"
+ integrity sha512-PkqfAyEohtcEu/gUvKriCv42NywDtUgvocEN3147BI45dOFAB89nrT7wRIbIcKJiUT598F+JlPXAZZVLWhc1Kg==
+ dependencies:
+ reakit-utils "^0.15.1"
+
+reakit-utils@^0.15.1:
+ version "0.15.1"
+ resolved "https://registry.npmjs.org/reakit-utils/-/reakit-utils-0.15.1.tgz#797f0a43f6a1dbc22d161224d5d2272e287dbfe3"
+ integrity sha512-6cZgKGvOkAMQgkwU9jdYbHfkuIN1Pr+vwcB19plLvcTfVN0Or10JhIuj9X+JaPZyI7ydqTDFaKNdUcDP69o/+Q==
+
+reakit-warning@^0.6.1:
+ version "0.6.1"
+ resolved "https://registry.npmjs.org/reakit-warning/-/reakit-warning-0.6.1.tgz#dba33bb8866aebe30e67ac433ead707d16d38a36"
+ integrity sha512-poFUV0EyxB+CcV9uTNBAFmcgsnR2DzAbOTkld4Ul+QOKSeEHZB3b3+MoZQgcYHmbvG19Na1uWaM7ES+/Eyr8tQ==
+ dependencies:
+ reakit-utils "^0.15.1"
+
+"reakit@npm:@stoplight/reakit@~1.3.5":
+ version "1.3.5"
+ resolved "https://registry.npmjs.org/@stoplight/reakit/-/reakit-1.3.5.tgz#0c1a1ae89a92de98413d3723b993c05d943bd56b"
+ integrity sha512-/Con1m4eSaztckgnEPckNPMkAIcOCYku60mANTGScevY9wYk56V2L6vpv6HR4r8gsFCl4S/CVoNCVMxkxi/pGw==
+ dependencies:
+ "@popperjs/core" "^2.5.4"
+ body-scroll-lock "^3.1.5"
+ reakit-system "^0.15.1"
+ reakit-utils "^0.15.1"
+ reakit-warning "^0.6.1"
+
recharts-scale@^0.4.2:
version "0.4.3"
resolved "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.3.tgz#040b4f638ed687a530357292ecac880578384b59"
@@ -23389,6 +24409,11 @@ safe-regex@^1.1.0:
dependencies:
ret "~0.1.10"
+safe-stable-stringify@^1.1:
+ version "1.1.1"
+ resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-1.1.1.tgz#c8a220ab525cd94e60ebf47ddc404d610dc5d84a"
+ integrity sha512-ERq4hUjKDbJfE4+XtZLFPCDi8Vb1JqaxAPTxWFLBx8XcAlf9Bda/ZJdVezs/NAfsMQScyIlUMx+Yeu7P7rx5jw==
+
"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
version "2.1.2"
resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
@@ -23583,12 +24608,7 @@ sentence-case@^3.0.4:
tslib "^2.0.3"
upper-case-first "^2.0.2"
-serialize-error@^2.1.0:
- version "2.1.0"
- resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a"
- integrity sha1-ULZ51WNc34Rme9yOWa9OW4HV9go=
-
-serialize-error@^8.0.1:
+serialize-error@^8.0.1, serialize-error@^8.1.0:
version "8.1.0"
resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-8.1.0.tgz#3a069970c712f78634942ddd50fbbc0eaebe2f67"
integrity sha512-3NnuWfM6vBYoy5gZFvHiYsVbafvI9vZv/+jlIigFn4oP4zjNPK3LhcY0xSCgeb1a5L8jO71Mit9LlNoi2UfDDQ==
@@ -24297,9 +25317,9 @@ stacktrace-js@^2.0.0, stacktrace-js@^2.0.2:
stacktrace-gps "^3.0.4"
start-server-and-test@^1.10.11:
- version "1.12.0"
- resolved "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.12.0.tgz#e836553c928a13026f79c740757d378b92bee8d6"
- integrity sha512-y3M/PLUPkPBsgKoengMIMQeceT8uOnOc4bkdor/RSCK9Ih/j8z4WthSCrAboXLjgtJJWOporAiEQsnYox+THXg==
+ version "1.12.1"
+ resolved "https://registry.npmjs.org/start-server-and-test/-/start-server-and-test-1.12.1.tgz#bf84eb5c5a4c8a98b93ed36519035b3f76179f0e"
+ integrity sha512-qGQ2HQiF2yDIfyaHsXkHfoE5UOl4zJUbJ/gx2xOkfX7iPMXW9qHmoFyaMfIDJVLNkxCK7RxSrvWEI9hNVKQluw==
dependencies:
bluebird "3.7.2"
check-more-types "2.24.0"
@@ -24307,7 +25327,7 @@ start-server-and-test@^1.10.11:
execa "3.4.0"
lazy-ass "1.6.0"
ps-tree "1.2.0"
- wait-on "5.2.1"
+ wait-on "5.3.0"
start-server-webpack-plugin@^2.2.5:
version "2.2.5"
@@ -24859,10 +25879,10 @@ svgo@^1.0.0, svgo@^1.2.2:
unquote "~1.1.1"
util.promisify "~1.0.0"
-swagger-client@^3.13.1:
- version "3.13.1"
- resolved "https://registry.npmjs.org/swagger-client/-/swagger-client-3.13.1.tgz#d2531ede4a498911aa084384e387e5008e7b6a70"
- integrity sha512-Hmy4+wVVa3kveWzC7PIeUwiAY5qcYbm4XlC4uZ7e5kAePfB2cprXImiqrZHIzL+ndU0YTN7I+9w/ZayTisn3Jg==
+swagger-client@^3.13.2:
+ version "3.13.2"
+ resolved "https://registry.npmjs.org/swagger-client/-/swagger-client-3.13.2.tgz#df1a1fe92e6db87ab5f76cee6381dcb7da1ad117"
+ integrity sha512-kamtyXtmbZiA2C5YTVqJYgoPJgzqtM5RbeP23Rt/YPYjMArTKZ2fjx1UTsI0aSbws0GluU5pVHiGp8YMciSUfw==
dependencies:
"@babel/runtime-corejs3" "^7.11.2"
btoa "^1.2.1"
@@ -24880,19 +25900,19 @@ swagger-client@^3.13.1:
url "~0.11.0"
swagger-ui-react@^3.37.2:
- version "3.45.1"
- resolved "https://registry.npmjs.org/swagger-ui-react/-/swagger-ui-react-3.45.1.tgz#6c8e551c5c1d443e7195acd9614f2f6bc4557daf"
- integrity sha512-ATXMVIb5YaxxmHJdvPq1nnXxsJ1FCo02fQI2gExEtZCQkouMThZh50DRxdKYNae53Ovz3w8glxxwmsMuWtmKaQ==
+ version "3.48.0"
+ resolved "https://registry.npmjs.org/swagger-ui-react/-/swagger-ui-react-3.48.0.tgz#f53e1b7de5bc2628635a2d832e254043badb3a91"
+ integrity sha512-39cibLdJYeujP5CAzBg+LiNFyIuHomi4Blru/1hyFyiTkFx9yYGvcFpZrKFKq1Me4GSUCQJ1DzUyUMblo+VFcA==
dependencies:
- "@babel/runtime-corejs3" "^7.13.10"
+ "@babel/runtime-corejs3" "^7.13.17"
"@braintree/sanitize-url" "^5.0.0"
"@kyleshockey/object-assign-deep" "^0.4.2"
"@kyleshockey/xml" "^1.0.2"
base64-js "^1.5.1"
- classnames "^2.2.6"
+ classnames "^2.3.1"
css.escape "1.5.1"
deep-extend "0.6.0"
- dompurify "^2.2.7"
+ dompurify "^2.2.8"
ieee754 "^1.2.1"
immutable "^3.x.x"
js-file-download "^0.4.12"
@@ -24913,9 +25933,9 @@ swagger-ui-react@^3.37.2:
redux-immutable "3.1.0"
remarkable "^2.0.1"
reselect "^4.0.0"
- serialize-error "^2.1.0"
+ serialize-error "^8.1.0"
sha.js "^2.4.11"
- swagger-client "^3.13.1"
+ swagger-client "^3.13.2"
url-parse "^1.5.1"
xml-but-prettier "^1.0.1"
zenscroll "^4.0.2"
@@ -25542,6 +26562,11 @@ ts-jest@^26.4.3:
semver "7.x"
yargs-parser "20.x"
+ts-keycode-enum@^1.0.6:
+ version "1.0.6"
+ resolved "https://registry.npmjs.org/ts-keycode-enum/-/ts-keycode-enum-1.0.6.tgz#aeefd1c2fc7b0557f86a0e696e300905bbb4c1c1"
+ integrity sha512-DF8+Cf/FJJnPRxwz8agCoDelQXKZWQOS/gnnwx01nZ106tPJdB3BgJ9QTtLwXgR82D8O+nTjuZzWgf0Rg4vuRA==
+
ts-loader@^8.0.17:
version "8.0.17"
resolved "https://registry.npmjs.org/ts-loader/-/ts-loader-8.0.17.tgz#98f2ccff9130074f4079fd89b946b4c637b1f2fc"
@@ -26220,7 +27245,7 @@ util.promisify@1.0.0:
define-properties "^1.1.2"
object.getownpropertydescriptors "^2.0.3"
-util.promisify@^1.0.0, util.promisify@~1.0.0:
+util.promisify@1.0.1, util.promisify@^1.0.0, util.promisify@~1.0.0:
version "1.0.1"
resolved "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee"
integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==
@@ -26249,6 +27274,11 @@ utila@^0.4.0, utila@~0.4:
resolved "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c"
integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=
+utility-types@^3.10.0:
+ version "3.10.0"
+ resolved "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b"
+ integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==
+
utils-merge@1.0.1, utils-merge@1.x.x:
version "1.0.1"
resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713"
@@ -26420,14 +27450,14 @@ w3c-xmlserializer@^2.0.0:
dependencies:
xml-name-validator "^3.0.0"
-wait-on@5.2.1:
- version "5.2.1"
- resolved "https://registry.npmjs.org/wait-on/-/wait-on-5.2.1.tgz#05b66fcb4d7f5da01537f03e7cf96e8836422996"
- integrity sha512-H2F986kNWMU9hKlI9l/ppO6tN8ZSJd35yBljMLa1/vjzWP++Qh6aXyt77/u7ySJFZQqBtQxnvm/xgG48AObXcw==
+wait-on@5.3.0:
+ version "5.3.0"
+ resolved "https://registry.npmjs.org/wait-on/-/wait-on-5.3.0.tgz#584e17d4b3fe7b46ac2b9f8e5e102c005c2776c7"
+ integrity sha512-DwrHrnTK+/0QFaB9a8Ol5Lna3k7WvUR4jzSKmz0YaPBpuN2sACyiPVKVfj6ejnjcajAcvn3wlbTyMIn9AZouOg==
dependencies:
axios "^0.21.1"
joi "^17.3.0"
- lodash "^4.17.20"
+ lodash "^4.17.21"
minimist "^1.2.5"
rxjs "^6.6.3"
@@ -26786,28 +27816,33 @@ windows-release@^3.1.0:
dependencies:
execa "^1.0.0"
-winston-transport@^4.3.0:
- version "4.3.0"
- resolved "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz#df68c0c202482c448d9b47313c07304c2d7c2c66"
- integrity sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==
+winston-transport@^4.4.0:
+ version "4.4.0"
+ resolved "https://registry.npmjs.org/winston-transport/-/winston-transport-4.4.0.tgz#17af518daa690d5b2ecccaa7acf7b20ca7925e59"
+ integrity sha512-Lc7/p3GtqtqPBYYtS6KCN3c77/2QCev51DvcJKbkFPQNoj1sinkGwLGFDxkXY9J6p9+EPnYs+D90uwbnaiURTw==
dependencies:
- readable-stream "^2.3.6"
+ readable-stream "^2.3.7"
triple-beam "^1.2.0"
winston@^3.2.1:
- version "3.2.1"
- resolved "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz#63061377976c73584028be2490a1846055f77f07"
- integrity sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==
+ version "3.3.3"
+ resolved "https://registry.npmjs.org/winston/-/winston-3.3.3.tgz#ae6172042cafb29786afa3d09c8ff833ab7c9170"
+ integrity sha512-oEXTISQnC8VlSAKf1KYSSd7J6IWuRPQqDdo8eoRNaYKLvwSb5+79Z3Yi1lrl6KDpU6/VWaxpakDAtb1oQ4n9aw==
dependencies:
- async "^2.6.1"
- diagnostics "^1.1.1"
- is-stream "^1.1.0"
- logform "^2.1.1"
- one-time "0.0.4"
- readable-stream "^3.1.1"
+ "@dabh/diagnostics" "^2.0.2"
+ async "^3.1.0"
+ is-stream "^2.0.0"
+ logform "^2.2.0"
+ one-time "^1.0.0"
+ readable-stream "^3.4.0"
stack-trace "0.0.x"
triple-beam "^1.3.0"
- winston-transport "^4.3.0"
+ winston-transport "^4.4.0"
+
+wolfy87-eventemitter@~5.2.8:
+ version "5.2.9"
+ resolved "https://registry.npmjs.org/wolfy87-eventemitter/-/wolfy87-eventemitter-5.2.9.tgz#e879f770b30fbb6512a8afbb330c388591099c2a"
+ integrity sha512-P+6vtWyuDw+MB01X7UeF8TaHBvbCovf4HPEMF/SV7BdDc1SMTiBy13SRD71lQh4ExFTG1d/WNzDGDCyOKSMblw==
word-wrap@^1.2.3, word-wrap@~1.2.3:
version "1.2.3"
@@ -27268,6 +28303,11 @@ z-schema@~3.18.3:
optionalDependencies:
commander "^2.7.1"
+zalgo-promise@^1, zalgo-promise@^1.0.11, zalgo-promise@^1.0.26:
+ version "1.0.46"
+ resolved "https://registry.npmjs.org/zalgo-promise/-/zalgo-promise-1.0.46.tgz#325988d75d0be4cd63a266bad5e18f8f6cd85675"
+ integrity sha512-tzPpQRqaQQavxl17TY98nznvmr+judUg3My7ugsUcRDbdqisYOE2z79HNNDgXnyX3eA0mf2bMOJrqHptt00npg==
+
zen-observable-ts@^0.8.21:
version "0.8.21"
resolved "https://registry.npmjs.org/zen-observable-ts/-/zen-observable-ts-0.8.21.tgz#85d0031fbbde1eba3cd07d3ba90da241215f421d"
@@ -27313,6 +28353,11 @@ zombie@^6.1.4:
tough-cookie "^2.3.4"
ws "^6.1.2"
+zustand@^3.3.3:
+ version "3.4.2"
+ resolved "https://registry.npmjs.org/zustand/-/zustand-3.4.2.tgz#22f0e0503a364672c6e3bb83399e69479bcea9b2"
+ integrity sha512-/v0RRbzi8NNyiXf7vw2eizPfJaTlTbXNM3fjQ6xF+qr5Xc0cF0ypaa0ARLOvyaKsGx/q2p5azVhfGxl4uHK0Ag==
+
zwitch@^1.0.0:
version "1.0.5"
resolved "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920"