diff --git a/.changeset/afraid-shirts-train.md b/.changeset/afraid-shirts-train.md new file mode 100644 index 0000000000..bd83716dc4 --- /dev/null +++ b/.changeset/afraid-shirts-train.md @@ -0,0 +1,10 @@ +--- +'@backstage/plugin-tech-insights': patch +--- + +Added the possibility to customize the check description in the scorecard component. + +- The `CheckResultRenderer` type now exposes an optional `description` method that allows to overwrite the description with a different string or a React component for a provided check result. + +Until now only the `BooleanCheck` element could be overridden, but from now on it's also possible to override the description for a check. +As an example, the description could change depending on the check result. Refer to the [README](https://github.com/backstage/backstage/blob/master/plugins/tech-insights/README.md#adding-custom-rendering-components) file for more details diff --git a/.changeset/backend-like-a-tattoo.md b/.changeset/backend-like-a-tattoo.md new file mode 100644 index 0000000000..0d2edfa7a9 --- /dev/null +++ b/.changeset/backend-like-a-tattoo.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-test-utils': patch +--- + +Added `POSTGRES_11` and `POSTGRES_12` as supported test database IDs. diff --git a/.changeset/beige-tigers-matter.md b/.changeset/beige-tigers-matter.md new file mode 100644 index 0000000000..248ce1fbf9 --- /dev/null +++ b/.changeset/beige-tigers-matter.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Fix case GitLab workspace is a nested subgroup diff --git a/.changeset/brown-eyes-yell.md b/.changeset/brown-eyes-yell.md new file mode 100644 index 0000000000..5ed4140bba --- /dev/null +++ b/.changeset/brown-eyes-yell.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-github-pull-requests-board': patch +--- + +The `EntityTeamPullRequestsContent` and `EntityTeamPullRequestsCard` support the ability to view the labels/tags added to each PR diff --git a/.changeset/calm-wolves-taste.md b/.changeset/calm-wolves-taste.md new file mode 100644 index 0000000000..ec0a7fb4f0 --- /dev/null +++ b/.changeset/calm-wolves-taste.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search': patch +--- + +Fixed 404 Error when fetching search results due to URL encoding changes diff --git a/.changeset/chilly-fireants-type.md b/.changeset/chilly-fireants-type.md new file mode 100644 index 0000000000..6bff750d57 --- /dev/null +++ b/.changeset/chilly-fireants-type.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +Remove the direct dependency on deprecated "request" library diff --git a/.changeset/clean-lobsters-brake.md b/.changeset/clean-lobsters-brake.md new file mode 100644 index 0000000000..f6da6e986e --- /dev/null +++ b/.changeset/clean-lobsters-brake.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-kubernetes-backend': minor +--- + +Allow fetching pod metrics limited by a `labelSelector`. + +This is used by the Kubernetes tab on a components' page and leads to much smaller responses being received from Kubernetes, especially with larger Kubernetes clusters. diff --git a/.changeset/cold-drinks-exercise.md b/.changeset/cold-drinks-exercise.md new file mode 100644 index 0000000000..e47e133929 --- /dev/null +++ b/.changeset/cold-drinks-exercise.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-explore': patch +--- + +Make sure that the first support button row does not break across lines diff --git a/.changeset/create-app-1682437922.md b/.changeset/create-app-1682437922.md new file mode 100644 index 0000000000..b50d431d4b --- /dev/null +++ b/.changeset/create-app-1682437922.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': patch +--- + +Bumped create-app version. diff --git a/.changeset/dry-boats-sniff.md b/.changeset/dry-boats-sniff.md new file mode 100644 index 0000000000..0c359b5536 --- /dev/null +++ b/.changeset/dry-boats-sniff.md @@ -0,0 +1,10 @@ +--- +'@backstage/app-defaults': patch +--- + +Added a System Icon for resource entities. +This can be obtained using: + +```ts +useApp().getSystemIcon('kind:resource'); +``` diff --git a/.changeset/dull-wombats-stare.md b/.changeset/dull-wombats-stare.md new file mode 100644 index 0000000000..36ba412c02 --- /dev/null +++ b/.changeset/dull-wombats-stare.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-openapi-utils': patch +--- + +Adjusted README accordingly after the generated output now has a `.generated.ts` extension diff --git a/.changeset/fifty-laws-count.md b/.changeset/fifty-laws-count.md new file mode 100644 index 0000000000..f20e41fc20 --- /dev/null +++ b/.changeset/fifty-laws-count.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kubernetes': patch +--- + +Omit managed fields in the Kubernetes resource YAML display. diff --git a/.changeset/fresh-moons-unite.md b/.changeset/fresh-moons-unite.md new file mode 100644 index 0000000000..3d3af7e698 --- /dev/null +++ b/.changeset/fresh-moons-unite.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Adjusted the OpenAPI schema file name according to the new structure diff --git a/.changeset/good-lions-approve.md b/.changeset/good-lions-approve.md new file mode 100644 index 0000000000..f4065a6ab3 --- /dev/null +++ b/.changeset/good-lions-approve.md @@ -0,0 +1,5 @@ +--- +'@backstage/integration': patch +--- + +Fixed a bug where the wrong credentials would be selected when using multiple GitHub app integrations. diff --git a/.changeset/green-cheetahs-cover.md b/.changeset/green-cheetahs-cover.md new file mode 100644 index 0000000000..2633a5af01 --- /dev/null +++ b/.changeset/green-cheetahs-cover.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-app-api': minor +--- + +The analytics' `navigate` event will now include the route parameters as attributes of the navigate event diff --git a/.changeset/healthy-ladybugs-chew.md b/.changeset/healthy-ladybugs-chew.md new file mode 100644 index 0000000000..83f53d5c2c --- /dev/null +++ b/.changeset/healthy-ladybugs-chew.md @@ -0,0 +1,5 @@ +--- +'@backstage/repo-tools': minor +--- + +Generated OpenAPI files now have a `.generated.ts` file name and a warning header at the top, to highlight that they should not be edited by hand. diff --git a/.changeset/honest-countries-deny.md b/.changeset/honest-countries-deny.md new file mode 100644 index 0000000000..14c9094592 --- /dev/null +++ b/.changeset/honest-countries-deny.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-jenkins-backend': patch +--- + +Fix handling of slashes in branch names diff --git a/.changeset/hungry-foxes-divide.md b/.changeset/hungry-foxes-divide.md new file mode 100644 index 0000000000..589c899443 --- /dev/null +++ b/.changeset/hungry-foxes-divide.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-graph': patch +--- + +Expose all `EntityRelationsGraphProps` to Catalog Graph Page diff --git a/.changeset/mighty-bears-glow.md b/.changeset/mighty-bears-glow.md new file mode 100644 index 0000000000..e540cdd8ae --- /dev/null +++ b/.changeset/mighty-bears-glow.md @@ -0,0 +1,10 @@ +--- +'@backstage/plugin-search-react': minor +'@backstage/plugin-search': minor +--- + +Add close button & improve search input. + +MUI's Paper wrapping the SearchBar in the SearchPage was removed, we recommend users update their apps accordingly. + +SearchBarBase's TextField's label support added & aria-label uses label string if present, tests relying on the default placeholder value should still work unless custom placeholder was given. diff --git a/.changeset/mighty-cows-greet.md b/.changeset/mighty-cows-greet.md new file mode 100644 index 0000000000..2e871db0c6 --- /dev/null +++ b/.changeset/mighty-cows-greet.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-analytics-module-ga4': minor +--- + +Plugin provides Backstage Analytics API for Google Analytics 4. Once installed and configured, analytics events will be sent to GA4 as your users navigate and use your Backstage instance diff --git a/.changeset/nine-ties-smoke.md b/.changeset/nine-ties-smoke.md new file mode 100644 index 0000000000..f7ae8016be --- /dev/null +++ b/.changeset/nine-ties-smoke.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-home': patch +--- + +Bump to using the later v5 versions of `@rjsf/*` diff --git a/.changeset/olive-turkeys-switch.md b/.changeset/olive-turkeys-switch.md new file mode 100644 index 0000000000..d208f3b197 --- /dev/null +++ b/.changeset/olive-turkeys-switch.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-github': patch +--- + +Fixed bug in queryWithPaging that caused secondary rate limit errors in GitHub with organizations having more than 1000 repositories. This change makes one request per second to avoid concurrency issues. diff --git a/.changeset/polite-dingos-train.md b/.changeset/polite-dingos-train.md new file mode 100644 index 0000000000..49ac56a000 --- /dev/null +++ b/.changeset/polite-dingos-train.md @@ -0,0 +1,33 @@ +--- +'@backstage/plugin-kubernetes': minor +--- + +Added Pod logs components for Kubernetes plugin + +**BREAKING**: `kubernetesProxyApi` for custom plugins built with components from the Kubernetes plugin apis, `kubernetesProxyApi` should be added to the plugin's API list. + +``` +... +export const kubernetesPlugin = createPlugin({ + id: 'kubernetes', + apis: [ +... + createApiFactory({ + api: kubernetesProxyApiRef, + deps: { + kubernetesApi: kubernetesApiRef, + }, + factory: ({ kubernetesApi }) => + new KubernetesProxyClient({ + kubernetesApi, + }), + }), +``` + +**BREAKING**: `KubernetesDrawer` is now called `KubernetesStructuredMetadataTableDrawer` so that we can do more than just show `StructuredMetadataTable` + +`import { KubernetesDrawer } from "@backstage/plugin-kubernetes"` + +should now be: + +`import { KubernetesStructuredMetadataTableDrawer } from "@backstage/plugin-kubernetes"` diff --git a/.changeset/pre.json b/.changeset/pre.json index c51fb059ac..759b1b40e2 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -219,7 +219,53 @@ "@backstage/plugin-user-settings-backend": "0.1.8", "@backstage/plugin-vault": "0.1.11", "@backstage/plugin-vault-backend": "0.3.0", - "@backstage/plugin-xcmetrics": "0.2.37" + "@backstage/plugin-xcmetrics": "0.2.37", + "@backstage/plugin-analytics-module-ga4": "0.0.0" }, - "changesets": [] + "changesets": [ + "afraid-shirts-train", + "backend-like-a-tattoo", + "beige-tigers-matter", + "brown-eyes-yell", + "calm-wolves-taste", + "chilly-fireants-type", + "clean-lobsters-brake", + "cold-drinks-exercise", + "create-app-1682437922", + "curvy-months-appear", + "dry-boats-sniff", + "dull-wombats-stare", + "eighty-olives-live", + "fifty-laws-count", + "five-tigers-whisper", + "fresh-moons-unite", + "funny-trains-sniff", + "good-lions-approve", + "green-cheetahs-cover", + "healthy-ladybugs-chew", + "honest-countries-deny", + "hungry-foxes-divide", + "lazy-keys-work", + "mighty-bears-glow", + "mighty-cows-greet", + "modern-pumpkins-join", + "moody-lizards-beam", + "nine-ties-smoke", + "olive-turkeys-switch", + "polite-dingos-train", + "pretty-gifts-greet", + "quick-flies-guess", + "red-cheetahs-invite", + "rotten-chefs-jog", + "serious-hornets-remember", + "six-mails-shout", + "slimy-turkeys-return", + "soft-readers-exist", + "swift-fishes-run", + "tame-games-rule", + "thick-parents-pump", + "tough-moles-whisper", + "unlucky-plants-give", + "warm-lamps-tease" + ] } diff --git a/.changeset/quick-flies-guess.md b/.changeset/quick-flies-guess.md new file mode 100644 index 0000000000..73e5589b98 --- /dev/null +++ b/.changeset/quick-flies-guess.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-app-api': patch +--- + +Added `FrontendHostDiscovery` for config driven discovery implementation diff --git a/.changeset/red-cheetahs-invite.md b/.changeset/red-cheetahs-invite.md new file mode 100644 index 0000000000..ef1711c761 --- /dev/null +++ b/.changeset/red-cheetahs-invite.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-octopus-deploy': minor +--- + +Added support for Octopus Deploy spaces. The octopus.com/project-id annotation can now (optionally) be prefixed by a space identifier, for example. Spaces-1/Projects-102. +Also note that some of this plugins exported API's have changed to accommodate this change, changing from separate arguments to a single object. diff --git a/.changeset/rotten-chefs-jog.md b/.changeset/rotten-chefs-jog.md new file mode 100644 index 0000000000..120520c087 --- /dev/null +++ b/.changeset/rotten-chefs-jog.md @@ -0,0 +1,10 @@ +--- +'@backstage/plugin-scaffolder-react': patch +'@backstage/plugin-scaffolder': patch +--- + +Improvements to the `scaffolder/next` buttons UX: + +- Added padding around the "Create" button in the `Stepper` component +- Added a button bar that includes the "Cancel" and "Start Over" buttons to the `OngoingTask` component. The state of these buttons match their existing counter parts in the Context Menu +- Added a "Show Button Bar"/"Hide Button Bar" item to the `ContextMenu` component diff --git a/.changeset/serious-hornets-remember.md b/.changeset/serious-hornets-remember.md new file mode 100644 index 0000000000..05221cd055 --- /dev/null +++ b/.changeset/serious-hornets-remember.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-circleci': patch +--- + +Hide empty time field data for queued builds which haven't started yet diff --git a/.changeset/slimy-turkeys-return.md b/.changeset/slimy-turkeys-return.md new file mode 100644 index 0000000000..db10000509 --- /dev/null +++ b/.changeset/slimy-turkeys-return.md @@ -0,0 +1,22 @@ +--- +'@backstage/plugin-permission-node': patch +--- + +`createPermissionIntegrationRouter` now accepts rules and permissions for multiple resource types. Example: + +```typescript +createPermissionIntegrationRouter({ + resources: [ + { + resourceType: 'resourceType-1', + permissions: permissionsResourceType1, + rules: rulesResourceType1, + }, + { + resourceType: 'resourceType-2', + permissions: permissionsResourceType2, + rules: rulesResourceType2, + }, + ], +}); +``` diff --git a/.changeset/soft-readers-exist.md b/.changeset/soft-readers-exist.md new file mode 100644 index 0000000000..8fce13caca --- /dev/null +++ b/.changeset/soft-readers-exist.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +Added `HostDiscovery` to supersede deprecated `SingleHostDiscovery` (deprecated due to name) diff --git a/.changeset/swift-fishes-run.md b/.changeset/swift-fishes-run.md new file mode 100644 index 0000000000..ee3d1217ed --- /dev/null +++ b/.changeset/swift-fishes-run.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +--- + +Bump minimum required version of `vm2` to be 3.9.17 diff --git a/.changeset/tame-games-rule.md b/.changeset/tame-games-rule.md new file mode 100644 index 0000000000..408c8ca14b --- /dev/null +++ b/.changeset/tame-games-rule.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': patch +--- + +Pin some octokit dependencies to avoid failing typescript build under `tsc:full` diff --git a/.changeset/thick-parents-pump.md b/.changeset/thick-parents-pump.md new file mode 100644 index 0000000000..ba65e10610 --- /dev/null +++ b/.changeset/thick-parents-pump.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +'@backstage/plugin-scaffolder-node': patch +--- + +Update typing for `RouterOptions::actions` and `ScaffolderActionsExtensionPoint::addActions` to allow any kind of action being assigned to it. diff --git a/.changeset/tough-moles-whisper.md b/.changeset/tough-moles-whisper.md new file mode 100644 index 0000000000..14dd76c116 --- /dev/null +++ b/.changeset/tough-moles-whisper.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-tech-radar': patch +--- + +Added the ability to display a timeline to each entry in the details box diff --git a/.changeset/unlucky-plants-give.md b/.changeset/unlucky-plants-give.md new file mode 100644 index 0000000000..504b475727 --- /dev/null +++ b/.changeset/unlucky-plants-give.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Start capturing sidebar click events in analytics by default. diff --git a/.github/workflows/deploy_microsite.yml b/.github/workflows/deploy_microsite.yml index 2c86ebf0b4..4ced080329 100644 --- a/.github/workflows/deploy_microsite.yml +++ b/.github/workflows/deploy_microsite.yml @@ -8,10 +8,6 @@ jobs: deploy-microsite-and-storybook: runs-on: ubuntu-latest - strategy: - matrix: - node-version: [16.x] - env: CI: true NODE_OPTIONS: --max-old-space-size=8192 @@ -20,10 +16,10 @@ jobs: steps: - uses: actions/checkout@v3 - - name: use node.js ${{ matrix.node-version }} + - name: use node.js 18.x uses: actions/setup-node@v3 with: - node-version: ${{ matrix.node-version }} + node-version: 18.x registry-url: https://registry.npmjs.org/ # Needed for auth # We avoid caching in this workflow, as we're running an install of both the top-level diff --git a/.github/workflows/deploy_nightly.yml b/.github/workflows/deploy_nightly.yml index 1bb6b67839..2a9c91b820 100644 --- a/.github/workflows/deploy_nightly.yml +++ b/.github/workflows/deploy_nightly.yml @@ -9,10 +9,6 @@ jobs: runs-on: ubuntu-latest - strategy: - matrix: - node-version: [16.x] - env: CI: true NODE_OPTIONS: --max-old-space-size=4096 @@ -20,15 +16,15 @@ jobs: steps: - uses: actions/checkout@v3 - - name: use node.js ${{ matrix.node-version }} + - name: use node.js 18.x uses: actions/setup-node@v3 with: - node-version: ${{ matrix.node-version }} + node-version: 18.x registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install uses: backstage/actions/yarn-install@v0.6.3 with: - cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} + cache-prefix: ${{ runner.os }}-v18.x # No verification done here, only build & publish. If the master branch # is broken we will see that from those builds, but we still want to push nightly diff --git a/.github/workflows/sync_snyk-github-issues.yml b/.github/workflows/sync_snyk-github-issues.yml index ec2f11e267..b3c8291b65 100644 --- a/.github/workflows/sync_snyk-github-issues.yml +++ b/.github/workflows/sync_snyk-github-issues.yml @@ -10,22 +10,18 @@ jobs: runs-on: ubuntu-latest - strategy: - matrix: - node-version: [16.x] - steps: - uses: actions/checkout@v3 - - name: use node.js ${{ matrix.node-version }} + - name: use node.js 18.x uses: actions/setup-node@v3 with: - node-version: ${{ matrix.node-version }} + node-version: 18.x registry-url: https://registry.npmjs.org/ # Needed for auth - name: yarn install uses: backstage/actions/yarn-install@v0.6.3 with: - cache-prefix: ${{ runner.os }}-v${{ matrix.node-version }} + cache-prefix: ${{ runner.os }}-v18.x - name: Create Snyk report uses: snyk/actions/node@master diff --git a/.github/workflows/verify_accessibility-noop.yml b/.github/workflows/verify_accessibility-noop.yml index 5db9ecf2a5..bde483eece 100644 --- a/.github/workflows/verify_accessibility-noop.yml +++ b/.github/workflows/verify_accessibility-noop.yml @@ -8,10 +8,14 @@ on: paths-ignore: - 'lighthouserc.js' - '.github/workflows/verify_accessibility_core.yml' - - 'plugins/catalog/**' - - 'plugins/techdocs/**' - - 'plugins/scaffolder/**' - - 'plugins/search/**' + - 'plugins/catalog/src/**' + - 'plugins/catalog-react/src/**' + - 'plugins/techdocs/src/**' + - 'plugins/techdocs-react/src/**' + - 'plugins/scaffolder/src/**' + - 'plugins/scaffolder-react/src/**' + - 'plugins/search/src/**' + - 'plugins/search-react/src/**' jobs: noop: diff --git a/.github/workflows/verify_accessibility.yml b/.github/workflows/verify_accessibility.yml index 6b83495811..cf7b750c54 100644 --- a/.github/workflows/verify_accessibility.yml +++ b/.github/workflows/verify_accessibility.yml @@ -6,11 +6,14 @@ on: paths: - 'lighthouserc.js' - '.github/workflows/verify_accessibility_core.yml' - - 'plugins/catalog/**' - - 'plugins/techdocs/**' - - 'plugins/scaffolder/**' - - 'plugins/search/**' - + - 'plugins/catalog/src/**' + - 'plugins/catalog-react/src/**' + - 'plugins/techdocs/src/**' + - 'plugins/techdocs-react/src/**' + - 'plugins/scaffolder/src/**' + - 'plugins/scaffolder-react/src/**' + - 'plugins/search/src/**' + - 'plugins/search-react/src/**' jobs: lhci: name: Accessibility diff --git a/.github/workflows/verify_microsite-noop.yml b/.github/workflows/verify_microsite-noop.yml index 42b2dbcca5..0fa23812f5 100644 --- a/.github/workflows/verify_microsite-noop.yml +++ b/.github/workflows/verify_microsite-noop.yml @@ -13,10 +13,6 @@ jobs: noop: runs-on: ubuntu-latest - strategy: - matrix: - node-version: [16.x] - name: Microsite steps: - run: echo NOOP diff --git a/.github/workflows/verify_microsite.yml b/.github/workflows/verify_microsite.yml index 8d02070df3..e5037684e9 100644 --- a/.github/workflows/verify_microsite.yml +++ b/.github/workflows/verify_microsite.yml @@ -11,10 +11,6 @@ jobs: build-microsite: runs-on: ubuntu-latest - strategy: - matrix: - node-version: [16.x] - env: CI: true NODE_OPTIONS: --max-old-space-size=8192 @@ -24,10 +20,10 @@ jobs: steps: - uses: actions/checkout@v3 - - name: use node.js ${{ matrix.node-version }} + - name: use node.js 18.x uses: actions/setup-node@v3 with: - node-version: ${{ matrix.node-version }} + node-version: 18.x # Skip caching of microsite dependencies, it keeps the global cache size # smaller, which make Windows builds a lot faster for the rest of the project. diff --git a/.github/workflows/verify_storybook-noop.yml b/.github/workflows/verify_storybook-noop.yml index e2089205be..c1f16e4fbd 100644 --- a/.github/workflows/verify_storybook-noop.yml +++ b/.github/workflows/verify_storybook-noop.yml @@ -22,10 +22,6 @@ jobs: noop: runs-on: ubuntu-latest - strategy: - matrix: - node-version: [16.x] - name: Storybook steps: - run: echo NOOP diff --git a/ADOPTERS.md b/ADOPTERS.md index d6a86316a9..b66fbea0f6 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -243,3 +243,4 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/ | [Chartboost](https://www.chartboost.com)| [@brucearctor](https://github.com/brucearctor), [@ArtemChekunov](https://github.com/ArtemChekunov) | We are building our internal develper portal on top of Backstage.| | [Quantum Metric](https://www.quantummetric.com/) | [Eric Irwin](https://www.linkedin.com/in/ericirwin1124/) | Backstage is used within our Developer Experience Platform (DXP) in order to increase self-service, standardization and discoverability across our Engineering teams. | | [VodafoneZiggo](https://www.vodafoneziggo.nl/) | [Peter Macdonald](https://github.com/Parsifal-M) | We use Backstage as our go-to platform for managing our internal tools and services. With Backstage, we can easily discover and access all the services we need to do our work, whether it's deploying code, managing infrastructure, or accessing documentation. We appreciate the standardized, consistent interface and the ability to easily create custom plugins to integrate with our existing workflows. Overall, Backstage is streamlining our internal operations and helps us work more efficiently as a team. | +| [Volvo Cars](https://www.volvocars.com) | [Martin Wänerskär](https://github.com/martin-wanerskar) | Internal developer portal with intent to unify infrastructure tooling, services, and developer documentation under a single, easy-to-use interface. | \ No newline at end of file diff --git a/docs/conf/reading.md b/docs/conf/reading.md index fd1ce4c7a6..976a418905 100644 --- a/docs/conf/reading.md +++ b/docs/conf/reading.md @@ -37,8 +37,11 @@ app: We can access the `baseUrl` using `config.getString('app.baseUrl')`. Because of this syntax, configuration keys are not allowed to contain dots. In fact, -configuration keys are validated using the following RegEx: -`/^[a-z][a-z0-9]*(?:[-_][a-z][a-z0-9]*)*$/i`. +configuration keys are validated using the following regular expression: +`/^[a-z][a-z0-9]*(?:[-_][a-z][a-z0-9]*)*$/i`. This basically means that keys +must only contain the letters `a` through `z` and digits, in groups separated by +dashes or underscores. Additionally, the very first character of each such group +must be a letter, not a digit. Another option of accessing the `baseUrl` value is to create a sub-view of the configuration, `config.getConfig('app').getString('baseUrl')`. When reading out @@ -62,8 +65,9 @@ each sub-view to be handled individually. ```ts for (const itemKey of config.keys('my-plugin.items')) { - const itemConfig = config.getConfig(`my-plugin.items`).getConfig(key); - const item = createItemFromConfig(itemConfig); + const itemConfig = config.getConfig(`my-plugin.items`).getConfig(itemKey); + const title = itemConfig.getString('title'); + // ... } ``` @@ -76,7 +80,8 @@ much more detailed and relevant error messages. For example, if `itemConfig.getString('title')` fails in the above example because a boolean was supplied, the user will receive an error message with the full path, e.g. `my-plugin.items.b.title`, as well as the name of the config file with the bad -value. +value. Conversely, if you try to access missing fields in raw JSON, you tend to +end up with very technical and hard-to-understand type errors from javascript. Note that no matter what method is used for reading out nested config, the same merging rules apply. You will always get the same value for any way of accessing diff --git a/docs/features/software-templates/authorizing-parameters-steps-and-actions.md b/docs/features/software-templates/authorizing-parameters-steps-and-actions.md new file mode 100644 index 0000000000..1351676c37 --- /dev/null +++ b/docs/features/software-templates/authorizing-parameters-steps-and-actions.md @@ -0,0 +1,175 @@ +--- +id: authorizing-parameters-steps-and-actions +title: 'Authorizing parameters, steps and actions' +description: How to authorize part of a template +--- + +The scaffolder plugin integrates with the Backstage [permission framework](../../permissions/overview.md), which allows you to control access to certain parameters and steps in your templates based on the user executing the template. + +### Authorizing parameters and steps + +To mark specific parameters or steps as requiring permission, add the `backstage:permissions` property to the parameter or step with one or more tags. For example: + +```yaml +apiVersion: scaffolder.backstage.io/v1beta3 +kind: Template +metadata: + name: my_custom_template + parameters: + - title: Provide some simple information + properties: + title: + title: Title + type: string + - title: Extra information + properties: + description: + title: Description + type: string + backstage:permissions: + tags: + - secret + steps: + - id: step1 + name: First log + action: debug:log + input: + message: hello + - id: step2 + name: Log message + action: debug:log + input: + message: hello + backstage:permissions: + tags: + - secret +``` + +In this example, the `description` parameter and the `step2` step are marked with the `secret` tag. + +To conditionally authorize parameters and steps based on the user executing the template, [edit your permission policy](../../permissions/writing-a-policy.md), by targeting `templateParameterReadPermission` and `templateStepReadPermission` permissions, which are provided by the scaffolder plugin. For example: + +```ts title="packages/backend/src/plugins/permission.ts" +/* highlight-add-start */ +import { + templateParameterReadPermission, + templateStepReadPermission, +} from '@backstage/plugin-scaffolder-common/alpha'; +import { + createScaffolderActionConditionalDecision, + scaffolderTemplateConditions, +} from '@backstage/plugin-scaffolder-backend/alpha'; +/* highlight-add-end */ + +class ExamplePermissionPolicy implements PermissionPolicy { + async handle( + request: PolicyQuery, + user?: BackstageIdentityResponse, + ): Promise { + /* highlight-add-start */ + if ( + isPermission(request.permission, templateParameterReadPermission) || + isPermission(request.permission, templateStepReadPermission) + ) { + if (user?.identity.userEntityRef === 'user:default/spiderman') + return createScaffolderTemplateConditionalDecision(request.permission, { + not: scaffolderTemplateConditions.hasTag({ tag: 'secret' }), + }); + } + /* highlight-add-end */ + + return { + result: AuthorizeResult.ALLOW, + }; + } +} +``` + +In this example, the user `spiderman` is not authorized to read parameters or steps marked with the `secret` tag. + +By combining this feature with restricting the ingestion of templates in the Catalog as recommended in our threat model, you can create a solid system to restrict certain actions. + +### Authorizing actions + +Similar to parameters and steps, the scaffolder plugin exposes permissions to restrict access to certain actions. This can be useful if you want to secure your templates. + +To restrict access to a particular action, you can modify your permission policy as follows: + +```ts title="packages/backend/src/plugins/permission.ts" +/* highlight-add-start */ +import { actionExecutePermission } from '@backstage/plugin-scaffolder-common/alpha'; +import { + createScaffolderActionConditionalDecision, + scaffolderActionConditions, +} from '@backstage/plugin-scaffolder-backend/alpha'; +/* highlight-add-end */ + +class ExamplePermissionPolicy implements PermissionPolicy { + async handle( + request: PolicyQuery, + user?: BackstageIdentityResponse, + ): Promise { + /* highlight-add-start */ + if (isPermission(request.permission, actionExecutePermission)) { + if (user?.identity.userEntityRef === 'user:default/spiderman') { + return createScaffolderActionConditionalDecision(request.permission, { + not: scaffolderActionConditions.hasActionId({ + actionId: 'debug:log', + }), + }); + } + } + /* highlight-add-end */ + + return { + result: AuthorizeResult.ALLOW, + }; + } +} +``` + +With this permission policy, the user `spiderman` won't be able to execute the debug:log action. + +You can also restrict the input provided to the action by combining multiple rules. +In the example below, `spiderman` won't be able to execute debug:log when passing `{ "message": "not-this!" }` as action input: + +```ts title="packages/backend/src/plugins/permission.ts" +/* highlight-add-start */ +import { actionExecutePermission } from '@backstage/plugin-scaffolder-common/alpha'; +import { + createScaffolderActionConditionalDecision, + scaffolderActionConditions, +} from '@backstage/plugin-scaffolder-backend/alpha'; +/* highlight-add-end */ + +class ExamplePermissionPolicy implements PermissionPolicy { + async handle( + request: PolicyQuery, + user?: BackstageIdentityResponse, + ): Promise { + /* highlight-add-start */ + if (isPermission(request.permission, actionExecutePermission)) { + if (user?.identity.userEntityRef === 'user:default/spiderman') { + return createScaffolderActionConditionalDecision(request.permission, { + not: { + allOf: [ + scaffolderActionConditions.hasActionId({ actionId: 'debug:log' }), + scaffolderActionConditions.hasProperty({ + key: 'message', + value: 'not-this!', + }), + ], + }, + }); + } + } + /* highlight-add-end */ + + return { + result: AuthorizeResult.ALLOW, + }; + } +} +``` + +Although the rules exported by the scaffolder are simple, combining them can help you achieve more complex cases. diff --git a/docs/getting-started/app-custom-theme.md b/docs/getting-started/app-custom-theme.md index 697c58ac8f..1b97d5199b 100644 --- a/docs/getting-started/app-custom-theme.md +++ b/docs/getting-started/app-custom-theme.md @@ -400,15 +400,10 @@ As you've seen there are many ways that you can customize your Backstage app. Th For this example we'll show you how you can expand the sidebar with a sub-menu: 1. Open the `Root.tsx` file located in `packages/app/src/components/Root` as this is where the sidebar code lives -2. Then we want to add the following imports for the icons: +2. Then we want to add the following import for `useApp`: ```tsx title="packages/app/src/components/Root/Root.tsx" - import ApiIcon from '@material-ui/icons/Extension'; - import ComponentIcon from '@material-ui/icons/Memory'; - import DomainIcon from '@material-ui/icons/Apartment'; - import ResourceIcon from '@material-ui/icons/Work'; - import SystemIcon from '@material-ui/icons/Category'; - import UserIcon from '@material-ui/icons/Person'; + import { useApp } from '@backstage/core-plugin-api'; ``` 3. Then update the `@backstage/core-components` import like this: @@ -441,39 +436,39 @@ For this example we'll show you how you can expand the sidebar with a sub-menu: diff --git a/docs/overview/threat-model.md b/docs/overview/threat-model.md index a6435f8cc5..bda7b40381 100644 --- a/docs/overview/threat-model.md +++ b/docs/overview/threat-model.md @@ -38,6 +38,8 @@ In a typical Backstage setup, there is no boundary between plugins that run on t The `UrlReader` facility is of particular interest for a secure Backstage configuration. In particular the `backend.reading.allow` configuration lists the hosts that you trust the backend to be able to read content from on behalf of users. It is extremely important that this list does not, for example, allow access to instance metadata endpoints of cloud providers, or other endpoints that your Backstage instance may have access to which contain sensitive information. In general it is recommended to keep the list minimal and only allow reading from required endpoints. The same concerns apply to custom implementations of the `UrlReader` interface, if you need to implement these through code. +Note that the `UrlReader` system operates with a service context and is not integrated with the Backstage permission system or other external access control mechanisms. This means users of your Backstage instance may be able to read external content which that individual should not have access to. For example, the `$text` placeholder in a `catalog-info.yaml` can be used to read contents from a source such as a GitHub repository that the user does not have direct access too. If this is a concern it is recommended to either disable or replace the resolvers in the catalog placeholder processor and similar features in any other plugin. + ## Authentication Backstage provides authentication of users through the `auth` plugin, which primarily acts as an authorization server for different OAuth 2.0 provider integrations. These integrations can both serve the purpose of signing users into Backstage, as well as providing delegated access to external resources, and are all subject to the common concerns of implementing secure OAuth 2.0 authorization servers. All auth provider integrations are disabled by default, and need to be enabled through configuration in order to be used. For each Backstage installation it is recommended to only enable the minimal set of providers that are in use by that instance. diff --git a/docs/plugins/analytics.md b/docs/plugins/analytics.md index e949f7beb4..fa9aed7fe5 100644 --- a/docs/plugins/analytics.md +++ b/docs/plugins/analytics.md @@ -54,7 +54,7 @@ installed, may be captured. | Action | Subject | Other Notes | | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `navigate` | The URL of the page that was navigated to. | | +| `navigate` | The URL of the page that was navigated to. | The parameters of the current route will be included as attributes | | `click` | The text of the link that was clicked on. | The `to` attribute represents the URL clicked to. | | `create` | The `name` of the software being created; if no `name` property is requested by the given Software Template, then the string `new {templateName}` is used instead. | The context holds an `entityRef`, set to the template's ref (e.g. `template:default/template-name`). | | `search` | The search term entered in any search bar component. | The context holds `searchTypes`, representing `types` constraining the search. The `value` represents the total number of search results for the query. This may not be visible if the permission framework is being used. | diff --git a/docs/releases/v1.14.0-next.0-changelog.md b/docs/releases/v1.14.0-next.0-changelog.md new file mode 100644 index 0000000000..d89b1c7949 --- /dev/null +++ b/docs/releases/v1.14.0-next.0-changelog.md @@ -0,0 +1,2294 @@ +# Release v1.14.0-next.0 + +## @backstage/config-loader@1.3.0-next.0 + +### Minor Changes + +- 201206132da: Introduced a new config source system to replace `loadConfig`. There is a new `ConfigSource` interface along with utilities provided by `ConfigSources`, as well as a number of built-in configuration source implementations. The new system is more flexible and makes it easier to create new and reusable sources of configuration, such as loading configuration from secret providers. + + The following is an example of how to load configuration using the default behavior: + + ```ts + const source = ConfigSources.default({ + argv: options?.argv, + remote: options?.remote, + }); + const config = await ConfigSources.toConfig(source); + ``` + + The `ConfigSource` interface looks like this: + + ```ts + export interface ConfigSource { + readConfigData(options?: ReadConfigDataOptions): AsyncConfigSourceIterator; + } + ``` + + It is best implemented using an async iterator: + + ```ts + class MyConfigSource implements ConfigSource { + async *readConfigData() { + yield { + config: [ + { + context: 'example', + data: { backend: { baseUrl: 'http://localhost' } }, + }, + ], + }; + } + } + ``` + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-analytics-module-ga4@0.1.0-next.0 + +### Minor Changes + +- 22b46f7f562: Plugin provides Backstage Analytics API for Google Analytics 4. Once installed and configured, analytics events will be sent to GA4 as your users navigate and use your Backstage instance + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19 + +## @backstage/plugin-catalog@1.11.0-next.0 + +### Minor Changes + +- 2258dcae970: Added an entity namespace filter and column on the default catalog page. + + If you have a custom version of the catalog page, you can add this filter in your CatalogPage code: + + ```ts + + + + + + /* if you want namespace picker */ + + + + + + + ``` + + The namespace column can be added using `createNamespaceColumn();`. This is only needed if you customized the columns for CatalogTable. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/plugin-search-react@1.6.0-next.0 + - @backstage/integration-react@1.1.13-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-catalog-react@1.6.0-next.0 + +### Minor Changes + +- 2258dcae970: Added an entity namespace filter and column on the default catalog page. + + If you have a custom version of the catalog page, you can add this filter in your CatalogPage code: + + ```ts + + + + + + /* if you want namespace picker */ + + + + + + + ``` + + The namespace column can be added using `createNamespaceColumn();`. This is only needed if you customized the columns for CatalogTable. + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.4.5-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-permission-react@0.4.12 + +## @backstage/plugin-kubernetes-backend@0.11.0-next.0 + +### Minor Changes + +- 890988341e9: Update `aws-sdk` client from v2 to v3. + + **BREAKING**: The `AwsIamKubernetesAuthTranslator` class no longer exposes the following methods `awsGetCredentials`, `getBearerToken`, `getCredentials` and `validCredentials`. There is no replacement for these methods. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-permission-node@0.7.8-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/integration-aws-node@0.1.2 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-kubernetes-common@0.6.2 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-search@1.3.0-next.0 + +### Minor Changes + +- 750e45539ad: Add close button & improve search input. + + MUI's Paper wrapping the SearchBar in the SearchPage was removed, we recommend users update their apps accordingly. + + SearchBarBase's TextField's label support added & aria-label uses label string if present, tests relying on the default placeholder value should still work unless custom placeholder was given. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/plugin-search-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-search-react@1.6.0-next.0 + +### Minor Changes + +- 750e45539ad: Add close button & improve search input. + + MUI's Paper wrapping the SearchBar in the SearchPage was removed, we recommend users update their apps accordingly. + + SearchBarBase's TextField's label support added & aria-label uses label string if present, tests relying on the default placeholder value should still work unless custom placeholder was given. + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/theme@0.2.19 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/app-defaults@1.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.7.1-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/theme@0.2.19 + - @backstage/plugin-permission-react@0.4.12 + +## @backstage/backend-app-api@0.4.3-next.0 + +### Patch Changes + +- cf13b482f9e: Switch `configServiceFactory` to use `ConfigSources` from `@backstage/config-loader` to load config. +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/config-loader@1.3.0-next.0 + - @backstage/plugin-permission-node@0.7.8-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/backend-common@0.18.5-next.0 + +### Patch Changes + +- 284db225083: Updated the `DatabaseManager` to include the plugin id in the Postgres application name of the database connections created for each plugin. +- 42d817e76ab: Added `HostDiscovery` to supersede deprecated `SingleHostDiscovery` (deprecated due to name) +- Updated dependencies + - @backstage/integration@1.4.5-next.0 + - @backstage/backend-app-api@0.4.3-next.0 + - @backstage/config-loader@1.3.0-next.0 + - @backstage/integration-aws-node@0.1.2 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/backend-dev-utils@0.1.1 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/backend-defaults@0.1.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-app-api@0.4.3-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + +## @backstage/backend-plugin-api@0.5.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/backend-tasks@0.5.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/backend-test-utils@0.1.37-next.0 + +### Patch Changes + +- b1eb268bf9d: Added `POSTGRES_11` and `POSTGRES_12` as supported test database IDs. +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-app-api@0.4.3-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/cli@0.22.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config-loader@1.3.0-next.0 + - @backstage/cli-common@0.1.12 + - @backstage/cli-node@0.1.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/eslint-plugin@0.1.3 + - @backstage/release-manifests@0.0.9 + - @backstage/types@1.0.2 + +## @backstage/core-app-api@1.7.1-next.0 + +### Patch Changes + +- 42d817e76ab: Added `FrontendHostDiscovery` for config driven discovery implementation +- Updated dependencies + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + +## @backstage/create-app@0.5.1-next.0 + +### Patch Changes + +- Bumped create-app version. +- Updated dependencies + - @backstage/cli-common@0.1.12 + +## @backstage/dev-utils@1.0.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-app-api@1.7.1-next.0 + - @backstage/integration-react@1.1.13-next.0 + - @backstage/app-defaults@1.3.1-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/test-utils@1.3.1-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + +## @backstage/integration@1.4.5-next.0 + +### Patch Changes + +- b026275bcc8: Fixed a bug where the wrong credentials would be selected when using multiple GitHub app integrations. +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/integration-react@1.1.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.4.5-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19 + +## @techdocs/cli@1.4.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-techdocs-node@1.7.1-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + +## @backstage/test-utils@1.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.7.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-permission-react@0.4.12 + +## @backstage/plugin-adr@0.5.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/plugin-search-react@1.6.0-next.0 + - @backstage/integration-react@1.1.13-next.0 + - @backstage/plugin-adr-common@0.2.9-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-adr-backend@0.3.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-adr-common@0.2.9-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-adr-common@0.2.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.4.5-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-airbrake@0.3.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/dev-utils@1.0.15-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/test-utils@1.3.1-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + +## @backstage/plugin-airbrake-backend@0.2.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/config@1.0.7 + +## @backstage/plugin-allure@0.1.34-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + +## @backstage/plugin-api-docs@0.9.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/plugin-catalog@1.11.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + +## @backstage/plugin-app-backend@0.3.45-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/config-loader@1.3.0-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + +## @backstage/plugin-auth-backend@0.18.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-auth-node@0.2.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-azure-devops@0.2.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/plugin-azure-devops-common@0.3.0 + +## @backstage/plugin-azure-devops-backend@0.3.24-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-azure-devops-common@0.3.0 + +## @backstage/plugin-azure-sites@0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + - @backstage/plugin-azure-sites-common@0.1.0 + +## @backstage/plugin-azure-sites-backend@0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-azure-sites-common@0.1.0 + +## @backstage/plugin-badges@0.2.42-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + +## @backstage/plugin-badges-backend@0.1.39-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-bazaar@0.2.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/plugin-catalog@1.11.0-next.0 + - @backstage/cli@0.22.7-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + +## @backstage/plugin-bazaar-backend@0.2.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-bitbucket-cloud-common@0.2.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.4.5-next.0 + +## @backstage/plugin-bitrise@0.1.45-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + +## @backstage/plugin-catalog-backend@1.9.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-permission-node@0.7.8-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.1-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-scaffolder-common@1.2.7 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-catalog-backend-module-aws@0.1.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-kubernetes-common@0.6.2 + +## @backstage/plugin-catalog-backend-module-azure@0.1.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + +## @backstage/plugin-catalog-backend-module-bitbucket@0.2.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.6-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.1.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.6-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-events-node@0.2.6-next.0 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.1.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-catalog-backend-module-gerrit@0.1.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-catalog-backend-module-github@0.2.8-next.0 + +### Patch Changes + +- 78bb674a713: Fixed bug in queryWithPaging that caused secondary rate limit errors in GitHub with organizations having more than 1000 repositories. This change makes one request per second to avoid concurrency issues. +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-catalog-backend@1.9.1-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-events-node@0.2.6-next.0 + +## @backstage/plugin-catalog-backend-module-gitlab@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-catalog-backend@1.9.1-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-events-node@0.2.6-next.0 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-catalog-backend-module-ldap@0.5.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + +## @backstage/plugin-catalog-backend-module-msgraph@0.5.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13 + +## @backstage/plugin-catalog-backend-module-openapi@0.1.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-catalog-backend@1.9.1-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + +## @backstage/plugin-catalog-backend-module-puppetdb@0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-catalog-graph@0.2.30-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + +## @backstage/plugin-catalog-import@0.9.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/integration-react@1.1.13-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-common@1.0.13 + +## @backstage/plugin-catalog-node@1.3.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + +## @backstage/plugin-cicd-statistics@0.1.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + +## @backstage/plugin-cicd-statistics-module-gitlab@0.1.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-cicd-statistics@0.1.20-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + +## @backstage/plugin-circleci@0.3.18-next.0 + +### Patch Changes + +- 451b3cadb3d: Fixes row display for in progress jobs to not display trailing "took" +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + +## @backstage/plugin-cloudbuild@0.3.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + +## @backstage/plugin-code-climate@0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + +## @backstage/plugin-code-coverage@0.2.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + +## @backstage/plugin-code-coverage-backend@0.2.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-cost-insights@0.12.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19 + - @backstage/plugin-cost-insights-common@0.1.1 + +## @backstage/plugin-dynatrace@5.0.0-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + +## @backstage/plugin-entity-feedback@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/plugin-entity-feedback-common@0.1.1 + +## @backstage/plugin-entity-feedback-backend@0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-entity-feedback-common@0.1.1 + +## @backstage/plugin-entity-validation@0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/plugin-catalog-common@1.0.13 + +## @backstage/plugin-events-backend@0.2.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6-next.0 + +## @backstage/plugin-events-backend-module-aws-sqs@0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-events-node@0.2.6-next.0 + +## @backstage/plugin-events-backend-module-azure@0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/plugin-events-node@0.2.6-next.0 + +## @backstage/plugin-events-backend-module-bitbucket-cloud@0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/plugin-events-node@0.2.6-next.0 + +## @backstage/plugin-events-backend-module-gerrit@0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/plugin-events-node@0.2.6-next.0 + +## @backstage/plugin-events-backend-module-github@0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6-next.0 + +## @backstage/plugin-events-backend-module-gitlab@0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6-next.0 + +## @backstage/plugin-events-backend-test-utils@0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.6-next.0 + +## @backstage/plugin-events-node@0.2.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.0 + +## @backstage/plugin-explore@0.4.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/plugin-search-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-explore-react@0.0.28 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-explore-backend@0.0.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.1-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-firehydrant@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + +## @backstage/plugin-fossa@0.2.50-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + +## @backstage/plugin-git-release-manager@0.3.31-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.4.5-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/theme@0.2.19 + +## @backstage/plugin-github-actions@0.5.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + +## @backstage/plugin-github-deployments@0.1.49-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/integration-react@1.1.13-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + +## @backstage/plugin-github-issues@0.2.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + +## @backstage/plugin-github-pull-requests-board@0.1.12-next.0 + +### Patch Changes + +- cf125c36569: The `EntityTeamPullRequestsContent` and `EntityTeamPullRequestsCard` support the ability to view the labels/tags added to each PR +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + +## @backstage/plugin-gocd@0.1.24-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + +## @backstage/plugin-graphql-backend@0.1.35-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-graphql@0.3.20 + +## @backstage/plugin-home@0.5.1-next.0 + +### Patch Changes + +- 5272cfabc3b: Add missing @rjsf/core dependency +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19 + +## @backstage/plugin-ilert@0.2.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + +## @backstage/plugin-jenkins@0.7.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/plugin-jenkins-common@0.1.15 + +## @backstage/plugin-jenkins-backend@0.1.35-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-jenkins-common@0.1.15 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-kafka@0.3.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19 + +## @backstage/plugin-kafka-backend@0.2.38-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-kubernetes@0.8.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/plugin-kubernetes-common@0.6.2 + +## @backstage/plugin-lighthouse@0.4.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19 + - @backstage/plugin-lighthouse-common@0.1.1 + +## @backstage/plugin-lighthouse-backend@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-lighthouse-common@0.1.1 + +## @backstage/plugin-linguist@0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/plugin-linguist-common@0.1.0 + +## @backstage/plugin-linguist-backend@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-linguist-common@0.1.0 + +## @backstage/plugin-newrelic-dashboard@0.2.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + +## @backstage/plugin-octopus-deploy@0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + +## @backstage/plugin-org@0.6.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + +## @backstage/plugin-org-react@0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + +## @backstage/plugin-pagerduty@0.5.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + +## @backstage/plugin-periskop@0.1.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + +## @backstage/plugin-periskop-backend@0.1.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + +## @backstage/plugin-permission-backend@0.5.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-permission-node@0.7.8-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-permission-node@0.7.8-next.0 + +### Patch Changes + +- a788e715cfc: `createPermissionIntegrationRouter` now accepts rules and permissions for multiple resource types. Example: + + ```typescript + createPermissionIntegrationRouter({ + resources: [ + { + resourceType: 'resourceType-1', + permissions: permissionsResourceType1, + rules: rulesResourceType1, + }, + { + resourceType: 'resourceType-2', + permissions: permissionsResourceType2, + rules: rulesResourceType2, + }, + ], + }); + ``` + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + +## @backstage/plugin-playlist@0.1.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/plugin-search-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-permission-react@0.4.12 + - @backstage/plugin-playlist-common@0.1.6 + +## @backstage/plugin-playlist-backend@0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-permission-node@0.7.8-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-playlist-common@0.1.6 + +## @backstage/plugin-proxy-backend@0.2.39-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + +## @backstage/plugin-puppetdb@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + +## @backstage/plugin-rollbar@0.4.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + +## @backstage/plugin-rollbar-backend@0.1.42-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/config@1.0.7 + +## @backstage/plugin-scaffolder@1.13.1-next.0 + +### Patch Changes + +- ad1a1429de4: Improvements to the `scaffolder/next` buttons UX: + + - Added padding around the "Create" button in the `Stepper` component + - Added a button bar that includes the "Cancel" and "Start Over" buttons to the `OngoingTask` component. The state of these buttons match their existing counter parts in the Context Menu + - Added a "Show Button Bar"/"Hide Button Bar" item to the `ContextMenu` component + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-scaffolder-react@1.3.1-next.0 + - @backstage/integration-react@1.1.13-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-react@0.4.12 + - @backstage/plugin-scaffolder-common@1.2.7 + +## @backstage/plugin-scaffolder-backend@1.13.2-next.0 + +### Patch Changes + +- d20c87966a4: Bump minimum required version of `vm2` to be 3.9.17 +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-permission-node@0.7.8-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/plugin-catalog-backend@1.9.1-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-scaffolder-common@1.2.7 + - @backstage/plugin-scaffolder-node@0.1.3-next.0 + +## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-scaffolder-backend@1.13.2-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-node@0.1.3-next.0 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.21-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-scaffolder-backend@1.13.2-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-node@0.1.3-next.0 + +## @backstage/plugin-scaffolder-backend-module-gitlab@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.4.5-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-scaffolder-node@0.1.3-next.0 + +## @backstage/plugin-scaffolder-backend-module-rails@0.4.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-scaffolder-backend@1.13.2-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-node@0.1.3-next.0 + +## @backstage/plugin-scaffolder-backend-module-sentry@0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-scaffolder-node@0.1.3-next.0 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.2.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-node@0.1.3-next.0 + +## @backstage/plugin-scaffolder-node@0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-common@1.2.7 + +## @backstage/plugin-scaffolder-react@1.3.1-next.0 + +### Patch Changes + +- ad1a1429de4: Improvements to the `scaffolder/next` buttons UX: + + - Added padding around the "Create" button in the `Stepper` component + - Added a button bar that includes the "Cancel" and "Start Over" buttons to the `OngoingTask` component. The state of these buttons match their existing counter parts in the Context Menu + - Added a "Show Button Bar"/"Hide Button Bar" item to the `ContextMenu` component + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-scaffolder-common@1.2.7 + +## @backstage/plugin-search-backend@1.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-permission-node@0.7.8-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/plugin-search-backend-node@1.2.1-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-search-backend-module-catalog@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-search-backend-node@1.2.1-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-search-backend-module-elasticsearch@1.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-search-backend-node@1.2.1-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-search-backend-module-explore@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-search-backend-node@1.2.1-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-search-backend-module-pg@0.5.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-search-backend-node@1.2.1-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-search-backend-module-techdocs@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-search-backend-node@1.2.1-next.0 + - @backstage/plugin-techdocs-node@1.7.1-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-search-backend-node@1.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-sentry@0.5.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + +## @backstage/plugin-shortcuts@0.3.10-next.0 + +### Patch Changes + +- 8a7174e297c: Marked `LocalStoredShortcuts` as deprecated, replacing it with `DefaultShortcutsApi` whose naming more clearly suggests that the shortcuts aren't necessarily stored locally (it depends on the storage implementation). +- Updated dependencies + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/theme@0.2.19 + - @backstage/types@1.0.2 + +## @backstage/plugin-sonarqube@0.6.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + - @backstage/plugin-sonarqube-react@0.1.5 + +## @backstage/plugin-sonarqube-backend@0.1.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-splunk-on-call@0.4.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + +## @backstage/plugin-stack-overflow@0.1.14-next.0 + +### Patch Changes + +- c1ff65f315a: StackOverflowSearchResultListItem can now accept an empty result prop so that it can be rendered in the suggested SearchResultListItem pattern. +- Updated dependencies + - @backstage/plugin-search-react@1.6.0-next.0 + - @backstage/plugin-home@0.5.1-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-stack-overflow-backend@0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-tech-insights@0.3.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + +## @backstage/plugin-tech-insights-backend@0.5.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-tech-insights-node@0.4.3-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + +## @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.29-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-tech-insights-node@0.4.3-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-tech-insights-common@0.2.10 + +## @backstage/plugin-tech-insights-node@0.4.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + +## @backstage/plugin-tech-radar@0.6.4-next.0 + +### Patch Changes + +- Added the ability to display a timeline to each entry in the details box +- Updated dependencies + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/theme@0.2.19 + +## @backstage/plugin-techdocs@1.6.2-next.0 + +### Patch Changes + +- 863beb49498: Re-add the possibility to have trailing slashes in Techdocs navigation. +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-search-react@1.6.0-next.0 + - @backstage/integration-react@1.1.13-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/plugin-search-common@1.2.3 + - @backstage/plugin-techdocs-react@1.1.5 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs@1.6.2-next.0 + - @backstage/plugin-catalog@1.11.0-next.0 + - @backstage/plugin-search-react@1.6.0-next.0 + - @backstage/core-app-api@1.7.1-next.0 + - @backstage/integration-react@1.1.13-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/test-utils@1.3.1-next.0 + - @backstage/theme@0.2.19 + - @backstage/plugin-techdocs-react@1.1.5 + +## @backstage/plugin-techdocs-backend@1.6.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.1-next.0 + - @backstage/plugin-techdocs-node@1.7.1-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-techdocs-module-addons-contrib@1.0.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.4.5-next.0 + - @backstage/integration-react@1.1.13-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/theme@0.2.19 + - @backstage/plugin-techdocs-react@1.1.5 + +## @backstage/plugin-techdocs-node@1.7.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/integration-aws-node@0.1.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-search-common@1.2.3 + +## @backstage/plugin-todo@0.2.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + +## @backstage/plugin-todo-backend@0.1.42-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## @backstage/plugin-user-settings@0.7.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-app-api@1.7.1-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/types@1.0.2 + +## @backstage/plugin-user-settings-backend@0.1.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + +## @backstage/plugin-vault@0.1.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + +## @backstage/plugin-vault-backend@0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + +## example-app@0.2.83-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs@1.6.2-next.0 + - @backstage/plugin-stack-overflow@0.1.14-next.0 + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/plugin-circleci@0.3.18-next.0 + - @backstage/plugin-search-react@1.6.0-next.0 + - @backstage/plugin-search@1.3.0-next.0 + - @backstage/plugin-home@0.5.1-next.0 + - @backstage/core-app-api@1.7.1-next.0 + - @backstage/plugin-scaffolder-react@1.3.1-next.0 + - @backstage/plugin-scaffolder@1.13.1-next.0 + - @backstage/plugin-shortcuts@0.3.10-next.0 + - @backstage/plugin-tech-radar@0.6.4-next.0 + - @backstage/cli@0.22.7-next.0 + - @backstage/plugin-airbrake@0.3.18-next.0 + - @backstage/plugin-api-docs@0.9.3-next.0 + - @backstage/plugin-azure-devops@0.2.9-next.0 + - @backstage/plugin-azure-sites@0.1.7-next.0 + - @backstage/plugin-badges@0.2.42-next.0 + - @internal/plugin-catalog-customized@0.0.10-next.0 + - @backstage/plugin-catalog-graph@0.2.30-next.0 + - @backstage/plugin-catalog-import@0.9.8-next.0 + - @backstage/plugin-cloudbuild@0.3.18-next.0 + - @backstage/plugin-code-coverage@0.2.11-next.0 + - @backstage/plugin-cost-insights@0.12.7-next.0 + - @backstage/plugin-dynatrace@5.0.0-next.0 + - @backstage/plugin-entity-feedback@0.2.1-next.0 + - @backstage/plugin-explore@0.4.3-next.0 + - @backstage/plugin-github-actions@0.5.18-next.0 + - @backstage/plugin-gocd@0.1.24-next.0 + - @backstage/plugin-jenkins@0.7.17-next.0 + - @backstage/plugin-kafka@0.3.18-next.0 + - @backstage/plugin-kubernetes@0.8.1-next.0 + - @backstage/plugin-lighthouse@0.4.3-next.0 + - @backstage/plugin-linguist@0.1.3-next.0 + - @backstage/plugin-newrelic-dashboard@0.2.11-next.0 + - @backstage/plugin-org@0.6.8-next.0 + - @backstage/plugin-pagerduty@0.5.11-next.0 + - @backstage/plugin-playlist@0.1.9-next.0 + - @backstage/plugin-puppetdb@0.1.1-next.0 + - @backstage/plugin-rollbar@0.4.18-next.0 + - @backstage/plugin-sentry@0.5.3-next.0 + - @backstage/plugin-tech-insights@0.3.10-next.0 + - @backstage/plugin-todo@0.2.20-next.0 + - @backstage/plugin-user-settings@0.7.3-next.0 + - @backstage/integration-react@1.1.13-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.13-next.0 + - @backstage/app-defaults@1.3.1-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-apache-airflow@0.2.10 + - @backstage/plugin-gcalendar@0.3.13 + - @backstage/plugin-gcp-projects@0.3.36 + - @backstage/plugin-graphiql@0.2.49 + - @backstage/plugin-microsoft-calendar@0.1.2 + - @backstage/plugin-newrelic@0.3.35 + - @backstage/plugin-stackstorm@0.1.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-linguist-common@0.1.0 + - @backstage/plugin-permission-react@0.4.12 + - @backstage/plugin-search-common@1.2.3 + - @backstage/plugin-techdocs-react@1.1.5 + +## example-backend@0.2.83-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-permission-node@0.7.8-next.0 + - @backstage/plugin-scaffolder-backend@1.13.2-next.0 + - @backstage/plugin-kubernetes-backend@0.11.0-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-app-backend@0.3.45-next.0 + - @backstage/plugin-auth-backend@0.18.3-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/plugin-catalog-backend@1.9.1-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/plugin-entity-feedback-backend@0.1.3-next.0 + - @backstage/plugin-events-backend@0.2.6-next.0 + - @backstage/plugin-playlist-backend@0.3.1-next.0 + - @backstage/plugin-rollbar-backend@0.1.42-next.0 + - @backstage/plugin-search-backend@1.3.1-next.0 + - @backstage/plugin-search-backend-module-pg@0.5.6-next.0 + - @backstage/plugin-tech-insights-backend@0.5.11-next.0 + - @backstage/plugin-techdocs-backend@1.6.2-next.0 + - example-app@0.2.83-next.0 + - @backstage/plugin-adr-backend@0.3.3-next.0 + - @backstage/plugin-azure-devops-backend@0.3.24-next.0 + - @backstage/plugin-azure-sites-backend@0.1.7-next.0 + - @backstage/plugin-badges-backend@0.1.39-next.0 + - @backstage/plugin-code-coverage-backend@0.2.11-next.0 + - @backstage/plugin-explore-backend@0.0.7-next.0 + - @backstage/plugin-graphql-backend@0.1.35-next.0 + - @backstage/plugin-jenkins-backend@0.1.35-next.0 + - @backstage/plugin-kafka-backend@0.2.38-next.0 + - @backstage/plugin-lighthouse-backend@0.2.1-next.0 + - @backstage/plugin-linguist-backend@0.2.2-next.0 + - @backstage/plugin-permission-backend@0.5.20-next.0 + - @backstage/plugin-proxy-backend@0.2.39-next.0 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.14-next.0 + - @backstage/plugin-search-backend-module-elasticsearch@1.2.1-next.0 + - @backstage/plugin-search-backend-node@1.2.1-next.0 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.29-next.0 + - @backstage/plugin-tech-insights-node@0.4.3-next.0 + - @backstage/plugin-todo-backend@0.1.42-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6-next.0 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + +## example-backend-next@0.0.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-node@0.7.8-next.0 + - @backstage/plugin-scaffolder-backend@1.13.2-next.0 + - @backstage/plugin-kubernetes-backend@0.11.0-next.0 + - @backstage/backend-defaults@0.1.10-next.0 + - @backstage/plugin-app-backend@0.3.45-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/plugin-catalog-backend@1.9.1-next.0 + - @backstage/plugin-search-backend@1.3.1-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.1-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.1-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.1-next.0 + - @backstage/plugin-techdocs-backend@1.6.2-next.0 + - @backstage/plugin-permission-backend@0.5.20-next.0 + - @backstage/plugin-search-backend-node@1.2.1-next.0 + - @backstage/plugin-todo-backend@0.1.42-next.0 + - @backstage/plugin-permission-common@0.7.5 + +## e2e-test@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.1-next.0 + - @backstage/cli-common@0.1.12 + - @backstage/errors@1.1.5 + +## techdocs-cli-embedded-app@0.2.82-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs@1.6.2-next.0 + - @backstage/plugin-catalog@1.11.0-next.0 + - @backstage/core-app-api@1.7.1-next.0 + - @backstage/cli@0.22.7-next.0 + - @backstage/integration-react@1.1.13-next.0 + - @backstage/app-defaults@1.3.1-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/test-utils@1.3.1-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19 + - @backstage/plugin-techdocs-react@1.1.5 + +## @internal/plugin-catalog-customized@0.0.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/plugin-catalog@1.11.0-next.0 + +## @internal/plugin-todo-list-backend@1.0.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 diff --git a/docs/releases/v1.14.0-next.1-changelog.md b/docs/releases/v1.14.0-next.1-changelog.md new file mode 100644 index 0000000000..2f91cb402e --- /dev/null +++ b/docs/releases/v1.14.0-next.1-changelog.md @@ -0,0 +1,1860 @@ +# Release v1.14.0-next.1 + +## @backstage/core-app-api@1.8.0-next.1 + +### Minor Changes + +- c89437db899: The analytics' `navigate` event will now include the route parameters as attributes of the navigate event + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + +## @backstage/repo-tools@0.3.0-next.0 + +### Minor Changes + +- 27956d78671: Generated OpenAPI files now have a `.generated.ts` file name and a warning header at the top, to highlight that they should not be edited by hand. + +## @backstage/plugin-kubernetes@0.9.0-next.1 + +### Minor Changes + +- 280ec10c18e: Added Pod logs components for Kubernetes plugin + + **BREAKING**: `kubernetesProxyApi` for custom plugins built with components from the Kubernetes plugin apis, `kubernetesProxyApi` should be added to the plugin's API list. + + ... + export const kubernetesPlugin = createPlugin({ + id: 'kubernetes', + apis: [ + ... + createApiFactory({ + api: kubernetesProxyApiRef, + deps: { + kubernetesApi: kubernetesApiRef, + }, + factory: ({ kubernetesApi }) => + new KubernetesProxyClient({ + kubernetesApi, + }), + }), + + **BREAKING**: `KubernetesDrawer` is now called `KubernetesStructuredMetadataTableDrawer` so that we can do more than just show `StructuredMetadataTable` + + `import { KubernetesDrawer } from "@backstage/plugin-kubernetes"` + + should now be: + + `import { KubernetesStructuredMetadataTableDrawer } from "@backstage/plugin-kubernetes"` + +### Patch Changes + +- a160e02c3d7: Omit managed fields in the Kubernetes resource YAML display. +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-kubernetes-backend@0.11.0-next.1 + +### Minor Changes + +- f4114f02d49: Allow fetching pod metrics limited by a `labelSelector`. + + This is used by the Kubernetes tab on a components' page and leads to much smaller responses being received from Kubernetes, especially with larger Kubernetes clusters. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/plugin-permission-node@0.7.8-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + - @backstage/integration-aws-node@0.1.2 + +## @backstage/plugin-octopus-deploy@0.2.0-next.1 + +### Minor Changes + +- 87211bc2873: Added support for Octopus Deploy spaces. The octopus.com/project-id annotation can now (optionally) be prefixed by a space identifier, for example. Spaces-1/Projects-102. + Also note that some of this plugins exported API's have changed to accommodate this change, changing from separate arguments to a single object. + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/app-defaults@1.3.1-next.1 + +### Patch Changes + +- 575d9178eff: Added a System Icon for resource entities. + This can be obtained using: + + ```ts + useApp().getSystemIcon('kind:resource'); + ``` + +- Updated dependencies + - @backstage/core-app-api@1.8.0-next.1 + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-permission-react@0.4.12 + +## @backstage/backend-app-api@0.4.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/plugin-permission-node@0.7.8-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config-loader@1.3.0-next.0 + - @backstage/config@1.0.7 + +## @backstage/backend-common@0.18.5-next.1 + +### Patch Changes + +- 0297f7a54af: Remove the direct dependency on deprecated "request" library +- Updated dependencies + - @backstage/backend-app-api@0.4.3-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config-loader@1.3.0-next.0 + - @backstage/config@1.0.7 + - @backstage/integration-aws-node@0.1.2 + +## @backstage/backend-defaults@0.1.10-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-app-api@0.4.3-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + +## @backstage/backend-openapi-utils@0.0.2-next.0 + +### Patch Changes + +- 27956d78671: Adjusted README accordingly after the generated output now has a `.generated.ts` extension + +## @backstage/backend-plugin-api@0.5.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/config@1.0.7 + +## @backstage/backend-tasks@0.5.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + +## @backstage/backend-test-utils@0.1.37-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-app-api@0.4.3-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/core-components@0.13.1-next.0 + +### Patch Changes + +- 26cff1a5dfb: Start capturing sidebar click events in analytics by default. +- Updated dependencies + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + +## @backstage/create-app@0.5.1-next.1 + +### Patch Changes + +- 4027aa9e753: Pin some octokit dependencies to avoid failing typescript build under `tsc:full` + +## @backstage/dev-utils@1.0.15-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/app-defaults@1.3.1-next.1 + - @backstage/core-app-api@1.8.0-next.1 + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/test-utils@1.3.1-next.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/integration-react@1.1.13-next.1 + +## @backstage/integration-react@1.1.13-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + +## @techdocs/cli@1.4.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-techdocs-node@1.7.1-next.1 + - @backstage/config@1.0.7 + +## @backstage/test-utils@1.3.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.8.0-next.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + - @backstage/plugin-permission-react@0.4.12 + +## @backstage/plugin-adr@0.5.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/plugin-search-react@1.6.0-next.1 + - @backstage/integration-react@1.1.13-next.1 + +## @backstage/plugin-adr-backend@0.3.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-airbrake@0.3.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/dev-utils@1.0.15-next.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/test-utils@1.3.1-next.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-airbrake-backend@0.2.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-allure@0.1.34-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-analytics-module-ga@0.1.29-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-analytics-module-ga4@0.1.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-apache-airflow@0.2.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-api-docs@0.9.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog@1.11.0-next.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-apollo-explorer@0.1.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-app-backend@0.3.45-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config-loader@1.3.0-next.0 + - @backstage/config@1.0.7 + +## @backstage/plugin-auth-backend@0.18.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-auth-node@0.2.14-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-azure-devops@0.2.9-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-azure-devops-backend@0.3.24-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-azure-sites@0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-azure-sites-backend@0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-badges@0.2.42-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-badges-backend@0.1.39-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-bazaar@0.2.8-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/cli@0.22.7-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog@1.11.0-next.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-bazaar-backend@0.2.8-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-bitrise@0.1.45-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-catalog@1.11.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/plugin-search-react@1.6.0-next.1 + - @backstage/integration-react@1.1.13-next.1 + +## @backstage/plugin-catalog-backend@1.9.1-next.1 + +### Patch Changes + +- 27956d78671: Adjusted the OpenAPI schema file name according to the new structure +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/plugin-permission-node@0.7.8-next.1 + - @backstage/plugin-search-backend-module-catalog@0.1.1-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-catalog-backend-module-aws@0.1.19-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-catalog-backend-module-azure@0.1.16-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-catalog-backend-module-bitbucket@0.2.12-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.1.12-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6-next.1 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.1.10-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-catalog-backend-module-gerrit@0.1.13-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-catalog-backend-module-github@0.2.8-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-catalog-backend@1.9.1-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6-next.1 + +## @backstage/plugin-catalog-backend-module-gitlab@0.2.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.3.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-catalog-backend@1.9.1-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6-next.1 + +## @backstage/plugin-catalog-backend-module-ldap@0.5.12-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-catalog-backend-module-msgraph@0.5.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-catalog-backend-module-openapi@0.1.11-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-catalog-backend@1.9.1-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-catalog-backend-module-puppetdb@0.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-catalog-graph@0.2.30-next.1 + +### Patch Changes + +- d446f8fb0a8: Expose all `EntityRelationsGraphProps` to Catalog Graph Page +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-catalog-import@0.9.8-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/integration-react@1.1.13-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-catalog-node@1.3.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.1 + +## @backstage/plugin-catalog-react@1.6.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-permission-react@0.4.12 + +## @backstage/plugin-cicd-statistics@0.1.20-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-cicd-statistics-module-gitlab@0.1.14-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-cicd-statistics@0.1.20-next.1 + +## @backstage/plugin-circleci@0.3.18-next.1 + +### Patch Changes + +- 1c4958d905f: Hide empty time field data for queued builds which haven't started yet +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-cloudbuild@0.3.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-code-climate@0.1.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-code-coverage@0.2.11-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-code-coverage-backend@0.2.11-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-codescene@0.1.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-config-schema@0.1.41-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-cost-insights@0.12.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-dynatrace@5.0.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-entity-feedback@0.2.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-entity-feedback-backend@0.1.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-entity-validation@0.1.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-events-backend@0.2.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6-next.1 + +## @backstage/plugin-events-backend-module-aws-sqs@0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6-next.1 + +## @backstage/plugin-events-backend-module-azure@0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/plugin-events-node@0.2.6-next.1 + +## @backstage/plugin-events-backend-module-bitbucket-cloud@0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/plugin-events-node@0.2.6-next.1 + +## @backstage/plugin-events-backend-module-gerrit@0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/plugin-events-node@0.2.6-next.1 + +## @backstage/plugin-events-backend-module-github@0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6-next.1 + +## @backstage/plugin-events-backend-module-gitlab@0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6-next.1 + +## @backstage/plugin-events-backend-test-utils@0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.6-next.1 + +## @backstage/plugin-events-node@0.2.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.1 + +## @backstage/plugin-explore@0.4.3-next.1 + +### Patch Changes + +- 1996920782b: Make sure that the first support button row does not break across lines +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/plugin-search-react@1.6.0-next.1 + - @backstage/plugin-explore-react@0.0.28 + +## @backstage/plugin-explore-backend@0.0.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-search-backend-module-explore@0.1.1-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-firehydrant@0.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-fossa@0.2.50-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-gcalendar@0.3.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-gcp-projects@0.3.37-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-git-release-manager@0.3.31-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-github-actions@0.5.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-github-deployments@0.1.49-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/integration-react@1.1.13-next.1 + +## @backstage/plugin-github-issues@0.2.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-github-pull-requests-board@0.1.12-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-gitops-profiles@0.3.36-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-gocd@0.1.24-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-graphiql@0.2.50-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-graphql-backend@0.1.35-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-graphql@0.3.20 + +## @backstage/plugin-graphql-voyager@0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-home@0.5.2-next.1 + +### Patch Changes + +- 0e19e7b0f3a: Bump to using the later v5 versions of `@rjsf/*` +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-ilert@0.2.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-jenkins@0.7.17-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-jenkins-backend@0.1.35-next.1 + +### Patch Changes + +- 670a2dd6f4e: Fix handling of slashes in branch names +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-kafka@0.3.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-kafka-backend@0.2.38-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-lighthouse@0.4.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-lighthouse-backend@0.2.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-linguist@0.1.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-linguist-backend@0.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-microsoft-calendar@0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-newrelic@0.3.36-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-newrelic-dashboard@0.2.11-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-org@0.6.8-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-org-react@0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-pagerduty@0.5.11-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-periskop@0.1.16-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-periskop-backend@0.1.16-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-permission-backend@0.5.20-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/plugin-permission-node@0.7.8-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-permission-node@0.7.8-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-playlist@0.1.9-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/plugin-search-react@1.6.0-next.1 + - @backstage/plugin-permission-react@0.4.12 + +## @backstage/plugin-playlist-backend@0.3.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/plugin-permission-node@0.7.8-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-proxy-backend@0.2.39-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-puppetdb@0.1.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-rollbar@0.4.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-rollbar-backend@0.1.42-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-scaffolder@1.13.1-next.1 + +### Patch Changes + +- d560d457c98: Fix case GitLab workspace is a nested subgroup +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/plugin-scaffolder-react@1.3.1-next.1 + - @backstage/integration-react@1.1.13-next.1 + - @backstage/config@1.0.7 + - @backstage/plugin-permission-react@0.4.12 + +## @backstage/plugin-scaffolder-backend@1.13.2-next.1 + +### Patch Changes + +- 6d954de4b06: Update typing for `RouterOptions::actions` and `ScaffolderActionsExtensionPoint::addActions` to allow any kind of action being assigned to it. +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-catalog-backend@1.9.1-next.1 + - @backstage/plugin-scaffolder-node@0.1.3-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/plugin-permission-node@0.7.8-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-scaffolder-backend@1.13.2-next.1 + - @backstage/plugin-scaffolder-node@0.1.3-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.21-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-scaffolder-backend@1.13.2-next.1 + - @backstage/plugin-scaffolder-node@0.1.3-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-scaffolder-backend-module-gitlab@0.1.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.3-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-scaffolder-backend-module-rails@0.4.14-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-scaffolder-backend@1.13.2-next.1 + - @backstage/plugin-scaffolder-node@0.1.3-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-scaffolder-backend-module-sentry@0.1.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.3-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.2.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.3-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-scaffolder-node@0.1.3-next.1 + +### Patch Changes + +- 6d954de4b06: Update typing for `RouterOptions::actions` and `ScaffolderActionsExtensionPoint::addActions` to allow any kind of action being assigned to it. +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.1 + +## @backstage/plugin-scaffolder-react@1.3.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-search@1.3.0-next.1 + +### Patch Changes + +- 0e3d8d69318: Fixed 404 Error when fetching search results due to URL encoding changes +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/plugin-search-react@1.6.0-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-search-backend@1.3.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/plugin-permission-node@0.7.8-next.1 + - @backstage/plugin-search-backend-node@1.2.1-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-search-backend-module-catalog@0.1.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-search-backend-node@1.2.1-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-search-backend-module-elasticsearch@1.2.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-search-backend-node@1.2.1-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-search-backend-module-explore@0.1.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-search-backend-node@1.2.1-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-search-backend-module-pg@0.5.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-search-backend-node@1.2.1-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-search-backend-module-techdocs@0.1.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-search-backend-node@1.2.1-next.1 + - @backstage/plugin-techdocs-node@1.7.1-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-search-backend-node@1.2.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-search-react@1.6.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-sentry@0.5.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-shortcuts@0.3.10-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-sonarqube@0.6.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-sonarqube-backend@0.1.10-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-splunk-on-call@0.4.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-stack-overflow@0.1.15-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-home@0.5.2-next.1 + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-search-react@1.6.0-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-stack-overflow-backend@0.2.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-stackstorm@0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-tech-insights@0.3.10-next.1 + +### Patch Changes + +- 22963209d23: Added the possibility to customize the check description in the scorecard component. + + - The `CheckResultRenderer` type now exposes an optional `description` method that allows to overwrite the description with a different string or a React component for a provided check result. + + Until now only the `BooleanCheck` element could be overridden, but from now on it's also possible to override the description for a check. + As an example, the description could change depending on the check result. Refer to the [README](https://github.com/backstage/backstage/blob/master/plugins/tech-insights/README.md#adding-custom-rendering-components) file for more details + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-tech-insights-backend@0.5.11-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-tech-insights-node@0.4.3-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.29-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-tech-insights-node@0.4.3-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-tech-insights-node@0.4.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-tech-radar@0.6.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + +## @backstage/plugin-techdocs@1.6.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/plugin-search-react@1.6.0-next.1 + - @backstage/integration-react@1.1.13-next.1 + - @backstage/plugin-techdocs-react@1.1.6-next.0 + - @backstage/config@1.0.7 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.13-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.8.0-next.1 + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/test-utils@1.3.1-next.1 + - @backstage/plugin-catalog@1.11.0-next.1 + - @backstage/plugin-search-react@1.6.0-next.1 + - @backstage/plugin-techdocs@1.6.2-next.1 + - @backstage/integration-react@1.1.13-next.1 + - @backstage/plugin-techdocs-react@1.1.6-next.0 + +## @backstage/plugin-techdocs-backend@1.6.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.1-next.1 + - @backstage/plugin-techdocs-node@1.7.1-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-techdocs-module-addons-contrib@1.0.13-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/integration-react@1.1.13-next.1 + - @backstage/plugin-techdocs-react@1.1.6-next.0 + +## @backstage/plugin-techdocs-node@1.7.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + - @backstage/integration-aws-node@0.1.2 + +## @backstage/plugin-techdocs-react@1.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-todo@0.2.20-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-todo-backend@0.1.42-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-user-settings@0.7.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.8.0-next.1 + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-user-settings-backend@0.1.9-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + +## @backstage/plugin-vault@0.1.12-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @backstage/plugin-vault-backend@0.3.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/config@1.0.7 + +## @backstage/plugin-xcmetrics@0.2.38-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + +## example-app@0.2.83-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-tech-insights@0.3.10-next.1 + - @backstage/plugin-scaffolder@1.13.1-next.1 + - @backstage/plugin-search@1.3.0-next.1 + - @backstage/plugin-explore@0.4.3-next.1 + - @backstage/app-defaults@1.3.1-next.1 + - @backstage/plugin-kubernetes@0.9.0-next.1 + - @backstage/core-app-api@1.8.0-next.1 + - @backstage/plugin-catalog-graph@0.2.30-next.1 + - @backstage/plugin-home@0.5.2-next.1 + - @backstage/plugin-octopus-deploy@0.2.0-next.1 + - @backstage/plugin-circleci@0.3.18-next.1 + - @backstage/core-components@0.13.1-next.0 + - @backstage/cli@0.22.7-next.0 + - @backstage/plugin-airbrake@0.3.18-next.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-apache-airflow@0.2.11-next.0 + - @backstage/plugin-api-docs@0.9.3-next.1 + - @backstage/plugin-azure-devops@0.2.9-next.1 + - @backstage/plugin-azure-sites@0.1.7-next.1 + - @backstage/plugin-badges@0.2.42-next.1 + - @backstage/plugin-catalog-import@0.9.8-next.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/plugin-cloudbuild@0.3.18-next.1 + - @backstage/plugin-code-coverage@0.2.11-next.1 + - @backstage/plugin-cost-insights@0.12.7-next.1 + - @backstage/plugin-dynatrace@5.0.0-next.1 + - @backstage/plugin-entity-feedback@0.2.1-next.1 + - @backstage/plugin-gcalendar@0.3.14-next.0 + - @backstage/plugin-gcp-projects@0.3.37-next.0 + - @backstage/plugin-github-actions@0.5.18-next.1 + - @backstage/plugin-gocd@0.1.24-next.1 + - @backstage/plugin-graphiql@0.2.50-next.0 + - @backstage/plugin-jenkins@0.7.17-next.1 + - @backstage/plugin-kafka@0.3.18-next.1 + - @backstage/plugin-lighthouse@0.4.3-next.1 + - @backstage/plugin-linguist@0.1.3-next.1 + - @backstage/plugin-microsoft-calendar@0.1.3-next.0 + - @backstage/plugin-newrelic@0.3.36-next.0 + - @backstage/plugin-org@0.6.8-next.1 + - @backstage/plugin-pagerduty@0.5.11-next.1 + - @backstage/plugin-playlist@0.1.9-next.1 + - @backstage/plugin-puppetdb@0.1.1-next.1 + - @backstage/plugin-rollbar@0.4.18-next.1 + - @backstage/plugin-scaffolder-react@1.3.1-next.1 + - @backstage/plugin-search-react@1.6.0-next.1 + - @backstage/plugin-sentry@0.5.3-next.1 + - @backstage/plugin-shortcuts@0.3.10-next.1 + - @backstage/plugin-stack-overflow@0.1.15-next.1 + - @backstage/plugin-stackstorm@0.1.2-next.0 + - @backstage/plugin-tech-radar@0.6.4-next.1 + - @backstage/plugin-techdocs@1.6.2-next.1 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.13-next.1 + - @backstage/plugin-todo@0.2.20-next.1 + - @backstage/plugin-user-settings@0.7.3-next.1 + - @backstage/integration-react@1.1.13-next.1 + - @backstage/plugin-newrelic-dashboard@0.2.11-next.1 + - @backstage/plugin-techdocs-react@1.1.6-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-permission-react@0.4.12 + - @internal/plugin-catalog-customized@0.0.10-next.1 + +## example-backend@0.2.83-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-kubernetes-backend@0.11.0-next.1 + - @backstage/plugin-catalog-backend@1.9.1-next.1 + - @backstage/plugin-jenkins-backend@0.1.35-next.1 + - @backstage/plugin-scaffolder-backend@1.13.2-next.1 + - example-app@0.2.83-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-adr-backend@0.3.3-next.1 + - @backstage/plugin-app-backend@0.3.45-next.1 + - @backstage/plugin-auth-backend@0.18.3-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/plugin-azure-devops-backend@0.3.24-next.1 + - @backstage/plugin-azure-sites-backend@0.1.7-next.1 + - @backstage/plugin-badges-backend@0.1.39-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/plugin-code-coverage-backend@0.2.11-next.1 + - @backstage/plugin-entity-feedback-backend@0.1.3-next.1 + - @backstage/plugin-events-backend@0.2.6-next.1 + - @backstage/plugin-explore-backend@0.0.7-next.1 + - @backstage/plugin-graphql-backend@0.1.35-next.1 + - @backstage/plugin-kafka-backend@0.2.38-next.1 + - @backstage/plugin-lighthouse-backend@0.2.1-next.1 + - @backstage/plugin-linguist-backend@0.2.2-next.1 + - @backstage/plugin-permission-backend@0.5.20-next.1 + - @backstage/plugin-permission-node@0.7.8-next.1 + - @backstage/plugin-playlist-backend@0.3.1-next.1 + - @backstage/plugin-proxy-backend@0.2.39-next.1 + - @backstage/plugin-rollbar-backend@0.1.42-next.1 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.14-next.1 + - @backstage/plugin-search-backend@1.3.1-next.1 + - @backstage/plugin-search-backend-module-elasticsearch@1.2.1-next.1 + - @backstage/plugin-search-backend-module-pg@0.5.6-next.1 + - @backstage/plugin-search-backend-node@1.2.1-next.1 + - @backstage/plugin-tech-insights-backend@0.5.11-next.1 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.29-next.1 + - @backstage/plugin-tech-insights-node@0.4.3-next.1 + - @backstage/plugin-techdocs-backend@1.6.2-next.1 + - @backstage/plugin-todo-backend@0.1.42-next.1 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6-next.1 + +## example-backend-next@0.0.11-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.11.0-next.1 + - @backstage/plugin-catalog-backend@1.9.1-next.1 + - @backstage/plugin-scaffolder-backend@1.13.2-next.1 + - @backstage/backend-defaults@0.1.10-next.1 + - @backstage/plugin-app-backend@0.3.45-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/plugin-permission-backend@0.5.20-next.1 + - @backstage/plugin-permission-node@0.7.8-next.1 + - @backstage/plugin-search-backend@1.3.1-next.1 + - @backstage/plugin-search-backend-module-catalog@0.1.1-next.1 + - @backstage/plugin-search-backend-module-explore@0.1.1-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.1-next.1 + - @backstage/plugin-search-backend-node@1.2.1-next.1 + - @backstage/plugin-techdocs-backend@1.6.2-next.1 + - @backstage/plugin-todo-backend@0.1.42-next.1 + +## e2e-test@0.2.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.1-next.1 + +## techdocs-cli-embedded-app@0.2.82-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/app-defaults@1.3.1-next.1 + - @backstage/core-app-api@1.8.0-next.1 + - @backstage/core-components@0.13.1-next.0 + - @backstage/cli@0.22.7-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/test-utils@1.3.1-next.1 + - @backstage/plugin-catalog@1.11.0-next.1 + - @backstage/plugin-techdocs@1.6.2-next.1 + - @backstage/integration-react@1.1.13-next.1 + - @backstage/plugin-techdocs-react@1.1.6-next.0 + - @backstage/config@1.0.7 + +## @internal/plugin-catalog-customized@0.0.10-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.11.0-next.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## @internal/plugin-todo-list@1.0.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + +## @internal/plugin-todo-list-backend@1.0.13-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 diff --git a/lighthouserc.js b/lighthouserc.js index 18b2bee5bb..90a15abbd3 100644 --- a/lighthouserc.js +++ b/lighthouserc.js @@ -46,7 +46,6 @@ module.exports = { startServerReadyTimeout: 600000, numberOfRuns: 1, puppeteerScript: './.lighthouseci/scripts/guest-auth.js', - startServerReadyPattern: 'Listening on :7007', }, assert: { assertions: { @@ -54,7 +53,7 @@ module.exports = { 'categories:pwa': 'off', 'categories:best-practices': 'off', 'categories:seo': 'off', - 'categories:accessibility': ['error', { minScore: 0.85 }], + 'categories:accessibility': ['error', { minScore: 0.95 }], }, }, }, diff --git a/microsite/blog/2020-03-16-announcing-backstage.md b/microsite/blog/2020-03-16-announcing-backstage.mdx similarity index 99% rename from microsite/blog/2020-03-16-announcing-backstage.md rename to microsite/blog/2020-03-16-announcing-backstage.mdx index 5094de7b37..97565df538 100644 --- a/microsite/blog/2020-03-16-announcing-backstage.md +++ b/microsite/blog/2020-03-16-announcing-backstage.mdx @@ -13,7 +13,7 @@ It’s the first open source infrastructure platform by Spotify that allows you ![img](assets/blog_1.png) - +{/* truncate */} ## As simple as writing a plugin. diff --git a/microsite/blog/2020-03-18-what-is-backstage.md b/microsite/blog/2020-03-18-what-is-backstage.mdx similarity index 99% rename from microsite/blog/2020-03-18-what-is-backstage.md rename to microsite/blog/2020-03-18-what-is-backstage.mdx index 5e3ec4ac90..caac489ca1 100644 --- a/microsite/blog/2020-03-18-what-is-backstage.md +++ b/microsite/blog/2020-03-18-what-is-backstage.mdx @@ -9,7 +9,7 @@ authorImageURL: https://pbs.twimg.com/profile_images/121166861/6919c047c0d0edaac Two days ago, we released the open source version of [Backstage](https://backstage.io/), our homegrown developer portal. And we learned a thing or two via the feedback we received. So, I wanted to take this opportunity to further explain what we’re trying to do with Backstage — and more importantly, what we want to give to the greater engineering community beyond Spotify. - +{/* truncate */} ## What’s the big infrastructure problem? diff --git a/microsite/blog/2020-04-06-lighthouse-plugin.md b/microsite/blog/2020-04-06-lighthouse-plugin.mdx similarity index 99% rename from microsite/blog/2020-04-06-lighthouse-plugin.md rename to microsite/blog/2020-04-06-lighthouse-plugin.mdx index dcdb4b78e5..d94ec8bd8d 100644 --- a/microsite/blog/2020-04-06-lighthouse-plugin.md +++ b/microsite/blog/2020-04-06-lighthouse-plugin.mdx @@ -9,7 +9,7 @@ authorImageURL: https://pbs.twimg.com/profile_images/1224058798958088192/JPxS8uz We’re proud to announce that our first internal plugin at Spotify has been open-sourced as part of Backstage. This plugin works with the newly open-sourced [lighthouse-audit-service](https://github.com/spotify/lighthouse-audit-service) to run and track Lighthouse audits for your websites. - +{/* truncate */} ## What is Lighthouse? 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.mdx similarity index 99% rename from microsite/blog/2020-04-30-how-to-quickly-set-up-backstage.md rename to microsite/blog/2020-04-30-how-to-quickly-set-up-backstage.mdx index 7d5098a721..4884762560 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.mdx @@ -11,7 +11,7 @@ We want users to be able to create their own version of Backstage quickly and ea In this blog post we’ll look at what a Backstage app is and how to create one using our [CLI](https://www.npmjs.com/package/@backstage/cli). - +{/* truncate */} ## What is a Backstage app? diff --git a/microsite/blog/2020-05-14-tech-radar-plugin.md b/microsite/blog/2020-05-14-tech-radar-plugin.mdx similarity index 99% rename from microsite/blog/2020-05-14-tech-radar-plugin.md rename to microsite/blog/2020-05-14-tech-radar-plugin.mdx index b78cf9004f..457a03d488 100644 --- a/microsite/blog/2020-05-14-tech-radar-plugin.md +++ b/microsite/blog/2020-05-14-tech-radar-plugin.mdx @@ -9,7 +9,7 @@ authorImageURL: https://avatars0.githubusercontent.com/bih Just a few weeks ago, we released our internal plugin for [Lighthouse website audits] as our first open source plugin, so the whole community could use it. Today, we’re excited to add a new plugin to that list — say hello to the [Tech Radar plugin]! - +{/* truncate */} ## What is Tech Radar? diff --git a/microsite/blog/2020-05-14-weaveworks-covid-19-app-uses-backstage-ui.md b/microsite/blog/2020-05-14-weaveworks-covid-19-app-uses-backstage-ui.mdx similarity index 99% rename from microsite/blog/2020-05-14-weaveworks-covid-19-app-uses-backstage-ui.md rename to microsite/blog/2020-05-14-weaveworks-covid-19-app-uses-backstage-ui.mdx index 3e3d8a537a..4555f495e1 100644 --- a/microsite/blog/2020-05-14-weaveworks-covid-19-app-uses-backstage-ui.md +++ b/microsite/blog/2020-05-14-weaveworks-covid-19-app-uses-backstage-ui.mdx @@ -9,7 +9,7 @@ authorImageURL: https://avatars2.githubusercontent.com/u/46946747 One of the great things about the open source community is once you put your work out there, you really never know where it might end up. That’s certainly the case here. - +{/* truncate */} When Weaveworks decided to build an X-ray diagnostics app to help fight COVID-19, they pulled together a lot of different open source resources — from projects big and small, built by both familiar tech partners and some brand new ones, too. diff --git a/microsite/blog/2020-05-22-phase-2-service-catalog.md b/microsite/blog/2020-05-22-phase-2-service-catalog.mdx similarity index 99% rename from microsite/blog/2020-05-22-phase-2-service-catalog.md rename to microsite/blog/2020-05-22-phase-2-service-catalog.mdx index 5ab994a343..3b556bbd3d 100644 --- a/microsite/blog/2020-05-22-phase-2-service-catalog.md +++ b/microsite/blog/2020-05-22-phase-2-service-catalog.mdx @@ -12,7 +12,7 @@ We released the open source version of Backstage a little less than two months a ![img](assets/20-05-20/Service_Catalog_MVP.png) - +{/* truncate */} ## Progress so far diff --git a/microsite/blog/2020-06-22-backstage-service-catalog-alpha.md b/microsite/blog/2020-06-22-backstage-service-catalog-alpha.mdx similarity index 99% rename from microsite/blog/2020-06-22-backstage-service-catalog-alpha.md rename to microsite/blog/2020-06-22-backstage-service-catalog-alpha.mdx index 0f324cd5be..98f4aa15e1 100644 --- a/microsite/blog/2020-06-22-backstage-service-catalog-alpha.md +++ b/microsite/blog/2020-06-22-backstage-service-catalog-alpha.mdx @@ -9,7 +9,7 @@ image: https://backstage.io/blog/assets/6/header.png ![img](assets/6/header.png) - +{/* truncate */} ## You asked, we listened diff --git a/microsite/blog/2020-07-01-how-to-enable-authentication-in-backstage-using-passport.md b/microsite/blog/2020-07-01-how-to-enable-authentication-in-backstage-using-passport.mdx similarity index 99% rename from microsite/blog/2020-07-01-how-to-enable-authentication-in-backstage-using-passport.md rename to microsite/blog/2020-07-01-how-to-enable-authentication-in-backstage-using-passport.mdx index ce778c9dc2..f1242fcee1 100644 --- a/microsite/blog/2020-07-01-how-to-enable-authentication-in-backstage-using-passport.md +++ b/microsite/blog/2020-07-01-how-to-enable-authentication-in-backstage-using-passport.mdx @@ -9,7 +9,7 @@ authorImageURL: https://avatars1.githubusercontent.com/u/1236238?s=460&v=4 Getting authentication right is important. It helps keep your platform safe, it’s one of the first things users will interact with, and there are many different authentication providers to support. To this end, we chose to use [Passport](http://www.passportjs.org/) to provide an easy-to-use, out-of-the-box experience that can be extended to your own, pre-existing authentication providers (known as strategies). The Auth APIs in Backstage serve two purposes: identify the user and provide a way for plugins to request access to third-party services on behalf of the user. We’ve already implemented Google and GitHub authentication to provide examples and to get you started. - +{/* truncate */} ## What is Passport? diff --git a/microsite/blog/2020-08-05-announcing-backstage-software-templates.md b/microsite/blog/2020-08-05-announcing-backstage-software-templates.mdx similarity index 99% rename from microsite/blog/2020-08-05-announcing-backstage-software-templates.md rename to microsite/blog/2020-08-05-announcing-backstage-software-templates.mdx index f9db71d3c4..b8f787d630 100644 --- a/microsite/blog/2020-08-05-announcing-backstage-software-templates.md +++ b/microsite/blog/2020-08-05-announcing-backstage-software-templates.mdx @@ -10,7 +10,7 @@ authorURL: https://twitter.com/stalund - +{/* truncate */} ## Balancing autonomy and standardization diff --git a/microsite/blog/2020-09-08-announcing-tech-docs.md b/microsite/blog/2020-09-08-announcing-tech-docs.mdx similarity index 98% rename from microsite/blog/2020-09-08-announcing-tech-docs.md rename to microsite/blog/2020-09-08-announcing-tech-docs.mdx index d83a9d0dbc..40ab40e5f0 100644 --- a/microsite/blog/2020-09-08-announcing-tech-docs.md +++ b/microsite/blog/2020-09-08-announcing-tech-docs.mdx @@ -7,10 +7,16 @@ authorURL: https://github.com/garyniemen Since we [open sourced Backstage](https://backstage.io/blog/2020/03/16/announcing-backstage), one of the most requested features has been for a technical documentation plugin. Well, good news. The first open source version of TechDocs is here. Now let’s start collaborating and making it better, together. - + - +{/* truncate */} Internally, we call it TechDocs. It’s the most used plugin at Spotify by far — accounting for about 20% of our Backstage traffic (even though it is just one of 130+ plugins). Its popularity is evidence of something simple: We made documentation so easy to create, find, and use — people actually use it. diff --git a/microsite/blog/2020-09-23-backstage-cncf-sandbox.md b/microsite/blog/2020-09-23-backstage-cncf-sandbox.mdx similarity index 99% rename from microsite/blog/2020-09-23-backstage-cncf-sandbox.md rename to microsite/blog/2020-09-23-backstage-cncf-sandbox.mdx index 70ef06f242..b11b0ff18b 100644 --- a/microsite/blog/2020-09-23-backstage-cncf-sandbox.md +++ b/microsite/blog/2020-09-23-backstage-cncf-sandbox.mdx @@ -8,7 +8,7 @@ authorURL: https://twitter.com/stalund ![cncf](assets/cncf-sandbox/cncf.png) - +{/* truncate */} Backstage garnered quite a bit of interest from developers and organizations when it was first announced, and community interest continues to grow as plugins and new features are added with the open source community. We released the open source version of Backstage ‘early’. That was intentional. Because even though we’ve been using Backstage internally for years, we wanted the open source version to be developed with input and contributions from the community. And that’s exactly the product that’s going into the [CNCF Sandbox](https://www.cncf.io/sandbox-projects/) today. diff --git a/microsite/blog/2020-09-30-backstage-design-system.md b/microsite/blog/2020-09-30-backstage-design-system.mdx similarity index 99% rename from microsite/blog/2020-09-30-backstage-design-system.md rename to microsite/blog/2020-09-30-backstage-design-system.mdx index fc227ea5d3..7fa30a6068 100644 --- a/microsite/blog/2020-09-30-backstage-design-system.md +++ b/microsite/blog/2020-09-30-backstage-design-system.mdx @@ -8,7 +8,7 @@ authorURL: http://twitter.com/katherinemzhou We are excited to launch the Backstage Design System, which includes a [Figma UI kit](https://www.figma.com/community/file/850673348101741100), a rich set of [reusable code components](http://backstage.io/storybook) on Storybook, and [Guidelines](https://backstage.io/docs/dls/design) for designers and developers as they build plugins for Backstage. - +{/* truncate */} ## Not just the way it looks diff --git a/microsite/blog/2020-09-30-plugin-marketplace.md b/microsite/blog/2020-09-30-plugin-marketplace.mdx similarity index 99% rename from microsite/blog/2020-09-30-plugin-marketplace.md rename to microsite/blog/2020-09-30-plugin-marketplace.mdx index f4e9b749e2..2f74b0200e 100644 --- a/microsite/blog/2020-09-30-plugin-marketplace.md +++ b/microsite/blog/2020-09-30-plugin-marketplace.mdx @@ -12,7 +12,7 @@ Now you may be thinking, “Yeah, sure, that sounds nice and all, but how does B ![plugins](https://backstage.io/img/cards-plugins.png) - +{/* truncate */} Think of plugins as a mini version of an infrastructure tool or service — just the parts you need, made quick and easy. The advantage of using a Backstage plugin instead of a tool’s dedicated UI is that all your infrastructure is packaged into a “single pane of glass” instead of being spread out like independently built “islands”. Once you grow your infrastructure portfolio, the complexity really starts to add up. The Backstage plugin model allows you to add more tools without increasing the cognitive load for your users. diff --git a/microsite/blog/2020-10-22-cost-insights-plugin.md b/microsite/blog/2020-10-22-cost-insights-plugin.mdx similarity index 97% rename from microsite/blog/2020-10-22-cost-insights-plugin.md rename to microsite/blog/2020-10-22-cost-insights-plugin.mdx index b3b615c20b..98bca88477 100644 --- a/microsite/blog/2020-10-22-cost-insights-plugin.md +++ b/microsite/blog/2020-10-22-cost-insights-plugin.mdx @@ -7,11 +7,18 @@ authorURL: https://twitter.com/janisa_a How did Spotify save millions on cloud costs within a matter of months?? We made cost optimization just another part of the daily development process. Our newly open sourced [Cost Insights plugin](https://github.com/backstage/backstage/tree/master/plugins/cost-insights) makes a team’s cloud costs visible — and actionable — right inside Backstage. So engineers can see the impact of their cloud usage (down to a product and resource level) and make optimizations wherever and whenever it makes sense. By managing cloud costs from the ground up, you can make smarter decisions that let you continue to build and scale quickly, without wasting resources. - + Are we turning engineers into accountants? Nope, we’re just letting engineers do what they do best, in the place that feels natural to them: inside Backstage. - +{/* truncate */} ## Why put a cost management tool in the hands of engineers? diff --git a/microsite/blog/2020-12-22-stability-index.md b/microsite/blog/2020-12-22-stability-index.mdx similarity index 99% rename from microsite/blog/2020-12-22-stability-index.md rename to microsite/blog/2020-12-22-stability-index.mdx index e49abb1a35..07b5854dc2 100644 --- a/microsite/blog/2020-12-22-stability-index.md +++ b/microsite/blog/2020-12-22-stability-index.mdx @@ -10,7 +10,7 @@ authorURL: https://github.com/Rugvip ![Animation cycling between stability index scores](assets/2020-12-22/stability-index-hero.gif) - +{/* truncate */} Backstage has a great and growing community of users and contributors. With so much valuable feedback, this inevitably means that sometimes we will go back and revise design decisions that introduce breaking changes. Furthermore, as we continue to ship new features and systems, we’ll continue this cycle of iterating, gathering feedback, and iterating again before reaching a stable API. diff --git a/microsite/blog/2021-01-12-new-backstage-feature-kubernetes-for-service-owners.md b/microsite/blog/2021-01-12-new-backstage-feature-kubernetes-for-service-owners.mdx similarity index 99% rename from microsite/blog/2021-01-12-new-backstage-feature-kubernetes-for-service-owners.md rename to microsite/blog/2021-01-12-new-backstage-feature-kubernetes-for-service-owners.mdx index 7b0686aae7..c1232a5f12 100644 --- a/microsite/blog/2021-01-12-new-backstage-feature-kubernetes-for-service-owners.md +++ b/microsite/blog/2021-01-12-new-backstage-feature-kubernetes-for-service-owners.mdx @@ -11,7 +11,7 @@ TLDR; We’re rethinking the Kubernetes developer experience with a new feature: And since Backstage uses the native Kubernetes API, the feature works with whichever cloud provider (AWS, Azure, GCP, etc.) or managed service (OpenShift, IBM Cloud, GKE, etc.) you already use. - +{/* truncate */} ## The missing link between K8s and your service diff --git a/microsite/blog/2021-05-20-adopting-backstage.md b/microsite/blog/2021-05-20-adopting-backstage.mdx similarity index 99% rename from microsite/blog/2021-05-20-adopting-backstage.md rename to microsite/blog/2021-05-20-adopting-backstage.mdx index 0a606fbe60..9fc1e36618 100644 --- a/microsite/blog/2021-05-20-adopting-backstage.md +++ b/microsite/blog/2021-05-20-adopting-backstage.mdx @@ -8,7 +8,7 @@ authorURL: https://www.linkedin.com/in/austinlamon One of the greatest strengths of Backstage also presents a never-ending challenge: Backstage is highly customizable and allows you to easily build a unique developer portal suited to your organization’s needs. The downside of this flexibility is that it can be hard to know where to start. Backstage can do so many things — integrating every part of your tech infrastructure and developer experience — but if you set off building a developer portal without a plan, it’s easy to get overwhelmed by all the possibilities. To help you form your plan, this post will detail how Spotify came to design our internal portal and recommend potential models for you to use when designing and building your own. - +{/* truncate */} ## Infrastructure as tech culture @@ -23,12 +23,14 @@ Spotify’s developers were facing three big challenges on a daily basis: - They needed to keep an eye on what squads around them might be building to ensure they could reuse systems when they needed to solve similar problems in the future. In short, Spotify developers needed to continue building industry leading features at breakneck speed, while simultaneously maintaining a mental model for all the software at Spotify (oh, and help every new joiner develop that mental model as well!). -
+ +
## Three jobs: Create, manage, explore Around the same time, the [jobs to be done](https://hbr.org/2016/09/know-your-customers-jobs-to-be-done) framework was becoming popular and luckily, a few Spotifiers helped guide the vision for a _sense-making tool for developers_ toward using it. After user research and many failed attempts, we landed on three jobs Spotify developers needed to do consistently: -
+ +
- **Create**: Spotify developers want to delight their customers with incredible features. They create new software to do that. - **Manage**: Spotify developers are proud of their work and treat their software and data like products. That requires maintaining all the software they own on an ongoing basis. @@ -73,7 +75,8 @@ Within today’s complex development environments, there are barriers both big a After talking with companies who have already adopted Backstage, we’ve seen a few common strategies for getting started. The different strategies are based on the size of your engineering org (which often also corresponds with how fast you’re growing). ![200 engineers](assets/21-05-20/200-engineers_v.2.png) -
+ +
### My org has ~200 engineers (and is growing fast) diff --git a/microsite/blog/2021-06-22-spotify-backstage-is-growing.md b/microsite/blog/2021-06-22-spotify-backstage-is-growing.mdx similarity index 99% rename from microsite/blog/2021-06-22-spotify-backstage-is-growing.md rename to microsite/blog/2021-06-22-spotify-backstage-is-growing.mdx index 35285c5e04..c90484c055 100644 --- a/microsite/blog/2021-06-22-spotify-backstage-is-growing.md +++ b/microsite/blog/2021-06-22-spotify-backstage-is-growing.mdx @@ -13,7 +13,7 @@ In order to grow Backstage further, Spotify is increasing the support we provide And while Spotify remains committed to maturing the Backstage platform — both as original creator and active maintainer — we also want to make room for the community to take greater ownership. Backstage may have started inside Spotify, but it belongs to all of you. So, we hope you join us in what’s next. - +{/* truncate */} ## What’s next: More support for adopters and contributors diff --git a/microsite/blog/2021-06-24-announcing-backstage-search-platform.md b/microsite/blog/2021-06-24-announcing-backstage-search-platform.mdx similarity index 97% rename from microsite/blog/2021-06-24-announcing-backstage-search-platform.md rename to microsite/blog/2021-06-24-announcing-backstage-search-platform.mdx index d96b5153ad..bb30a3b9ec 100644 --- a/microsite/blog/2021-06-24-announcing-backstage-search-platform.md +++ b/microsite/blog/2021-06-24-announcing-backstage-search-platform.mdx @@ -13,7 +13,7 @@ So, you don’t just get an improved out-of-the-box experience for searching wha With one query, your teams can find exactly what they’re looking for: anything and everything. - +{/* truncate */} ## Search and explore @@ -80,9 +80,9 @@ That's why we have put effort into making your search page experience composable A good example of the level of customization the platform allows is how list items are displayed in search results. A search result component can be a list, this list can consist of different list items (search results returned from the search engine) — but these list items could look different depending on what the search result returns in terms of its fields. -Let’s say that for an entity returned from the software catalog maybe the most important information to show is the name, while a result returned from the TechDocs plugin should maybe show the text content as the most important information. This can be customized by creating components (like TechDocsResultListItem or CatalogResultListItem or whatever list item component you want) and configuring them in the app. +Let’s say that for an entity returned from the software catalog maybe the most important information to show is the name, while a result returned from the TechDocs plugin should maybe show the text content as the most important information. This can be customized by creating `` components (like `TechDocsResultListItem` or `CatalogResultListItem` or whatever list item component you want) and configuring them in the app. -If there is no need to customize your search result list items, the component is there for you to reuse. +If there is no need to customize your search result list items, the `` component is there for you to reuse. ## Getting started with Backstage Search diff --git a/microsite/blog/2021-07-26-software-templates-are-now-in-beta.md b/microsite/blog/2021-07-26-software-templates-are-now-in-beta.mdx similarity index 99% rename from microsite/blog/2021-07-26-software-templates-are-now-in-beta.md rename to microsite/blog/2021-07-26-software-templates-are-now-in-beta.mdx index b646fbdb22..25197220c4 100644 --- a/microsite/blog/2021-07-26-software-templates-are-now-in-beta.md +++ b/microsite/blog/2021-07-26-software-templates-are-now-in-beta.mdx @@ -9,7 +9,7 @@ authorImageURL: https://avatars.githubusercontent.com/u/3645856?v=4 **TLDR**; At a high level, Backstage performs three main jobs: [Create, Manage, and Explore](https://backstage.io/blog/2021/05/20/adopting-backstage#three-jobs-create-manage-explore). Throughout the year, we’ve been focussed on improving the stability and scalability of these areas while enhancing the feature sets based upon requests from the community. Software Templates — which enable push-button deployments with all your standards and best practices built-in — is our first feature-complete release candidate to graduate to beta. Read on to learn how this release improves template customization and flexibility, as well as performance. - +{/* truncate */} Let’s rewind a little bit, around a year in fact. Backstage had been open sourced, and we released our first version of Software Templates and our Scaffolder plugin. diff --git a/microsite/blog/2021-09-16-the-techdocs-beta-has-landed.md b/microsite/blog/2021-09-16-the-techdocs-beta-has-landed.mdx similarity index 94% rename from microsite/blog/2021-09-16-the-techdocs-beta-has-landed.md rename to microsite/blog/2021-09-16-the-techdocs-beta-has-landed.mdx index 27df0b3a44..a576f4f032 100644 --- a/microsite/blog/2021-09-16-the-techdocs-beta-has-landed.md +++ b/microsite/blog/2021-09-16-the-techdocs-beta-has-landed.mdx @@ -9,7 +9,7 @@ authorImageURL: https://avatars.githubusercontent.com/u/3496491?v=4 **TLDR:** Another beta has landed! We continue to focus on improving the stability and scalability of Backstage while enhancing its functionality. Thanks to focused efforts from the TechDocs core team and community, we're happy to say that TechDocs — [our docs-like-code solution](https://backstage.io/blog/2020/09/08/announcing-tech-docs) for all the software in your catalog — is now, after [Software Templates](https://backstage.io/blog/2021/07/26/software-templates-are-now-in-beta), the second core feature to graduate to beta. - +{/* truncate */} In addition to new features and improvements, we made numerous compatibility updates ahead of this feature release. You'll find support for a variety of CI systems, cloud storage solutions, and source control systems — so that TechDocs works for most orgs, right out of box. But there's much more to explore in this beta, thanks to contributions from the community. @@ -21,7 +21,10 @@ When we set out to define what beta looked like, we combed through GitHub issues TechDocs can be transformational once fully up and running (update your code and your docs with the same pull request!). But for first-time users and especially those unfamiliar with the MkDocs ecosystem upon which TechDocs is built, there are often many small, obtuse hurdles that can get in the way of success. Leading up to the beta release, we worked to surface and improve relevant errors and other details during the documentation generation process. Better still, all of this detail is now provided to users _in real-time_, as docs are generated and refreshed. -

🙌 Shout out to Dominik Henneke for implementing the interactive experience.

+

+ 🙌 Shout out to Dominik Henneke for + implementing the interactive experience. +

## Custom homepages: Make TechDocs yours @@ -29,7 +32,10 @@ TechDocs can be transformational once fully up and running (update your code and We strive to make it so that you can mold Backstage into the shape that best fits your organization. With this beta release, just as you can with the Catalog entities and [Search](https://backstage.io/blog/2021/06/24/announcing-backstage-search-platform#composable-search-page-experiences), you can now customize and compose your own TechDocs homepage. Use it to level up the front page of your Backstage documentation by highlighting golden documentation at your company, or use the new and improved (and Catalog-inspired) experience. Read more about [how to customize the TechDocs homepage](https://backstage.io/docs/features/techdocs/how-to-guides#how-to-customize-the-techdocs-home-page). -

🙏 Thanks to Phil Kuang for the improved default TechDocs home experience.

+

+ 🙏 Thanks to Phil Kuang for the + improved default TechDocs home experience. +

## Simpler YAML annotations: What's in a ref? @@ -39,7 +45,9 @@ We often forget that in order to enable TechDocs on a Catalog entity, documentat In the beta, we've simplified this annotation dramatically for documentation authors, aligning its value with TechDocs' docs-like-code philosophy itself. In the vast majority of cases, its value will simply be `dir:.` — which means this catalog entity contains documentation and the mkdocs.yml file describing this documentation lives in the current directory. We continue to support edge cases for [other techdocs-ref annotation values](https://backstage.io/docs/features/techdocs/how-to-guides#how-to-understand-techdocs-ref-annotation-values), as well. -

👏 Another round of applause for Dominik for driving this improvement through.

+

+ 👏 Another round of applause for Dominik for driving this improvement through. +

## Everything neat and tidy diff --git a/microsite/blog/2021-09-30-50-public-adopters.md b/microsite/blog/2021-09-30-50-public-adopters.mdx similarity index 99% rename from microsite/blog/2021-09-30-50-public-adopters.md rename to microsite/blog/2021-09-30-50-public-adopters.mdx index 6a4652b99f..e8f6c58160 100644 --- a/microsite/blog/2021-09-30-50-public-adopters.md +++ b/microsite/blog/2021-09-30-50-public-adopters.mdx @@ -11,7 +11,7 @@ We’re excited to celebrate an important milestone for the Backstage community: Before digging into why we believe this is so important, we want to send a huge “thank you” to all the Backstage adopters and contributors who have helped grow the Backstage community. First, to the publicly listed adopters as your visible support for the project excites others to learn more about Backstage. Second, to those non-listed adopters, many of whom still engage in the community via issues, comments, or code contributions. Thank you! - +{/* truncate */} ## Why we care about public adopters diff --git a/microsite/blog/2021-12-20-backstage-wrapped-2021.md b/microsite/blog/2021-12-20-backstage-wrapped-2021.mdx similarity index 95% rename from microsite/blog/2021-12-20-backstage-wrapped-2021.md rename to microsite/blog/2021-12-20-backstage-wrapped-2021.mdx index 2a6234a9f6..b4bb0f8e4c 100644 --- a/microsite/blog/2021-12-20-backstage-wrapped-2021.md +++ b/microsite/blog/2021-12-20-backstage-wrapped-2021.mdx @@ -15,7 +15,7 @@ In 2021 we’ve seen the project and community grow in every dimension, reaching Now let’s hear from the maintainers and look at the stats! - +{/* truncate */} ## The community grew…and grew @@ -48,11 +48,25 @@ Along with the growth in contributors, PRs, and issues, our active, thriving com Watch the visualization below to see where in the world all those contributions came from this past year. - + ### What does 9,000 contributions look like? - + Can you spot your name in the video above? diff --git a/microsite/blog/2022-01-25-backstage-homepage-templates.md b/microsite/blog/2022-01-25-backstage-homepage-templates.mdx similarity index 99% rename from microsite/blog/2022-01-25-backstage-homepage-templates.md rename to microsite/blog/2022-01-25-backstage-homepage-templates.mdx index 8ca8b7373e..c84ded530e 100644 --- a/microsite/blog/2022-01-25-backstage-homepage-templates.md +++ b/microsite/blog/2022-01-25-backstage-homepage-templates.mdx @@ -11,7 +11,7 @@ _This blog post is co-authored by Emma Indal ([@emmaindal](https://github.com/em _TLDR;_ We’re excited to announce the arrival of homepage templates for Backstage. It can be intimidating to build up your own instance of Backstage, so we decided to make your life a bit easier by giving you an out-of-the-box homepage to hit the ground running. This template can be found in our [Backstage Storybook](https://backstage.io/storybook/?path=/story/plugins-home-templates--default-template), as well as future templates that we build. - +{/* truncate */} ## Why homepage templates? diff --git a/microsite/blog/2022-03-04-backstage-upgrade-helper.md b/microsite/blog/2022-03-04-backstage-upgrade-helper.mdx similarity index 99% rename from microsite/blog/2022-03-04-backstage-upgrade-helper.md rename to microsite/blog/2022-03-04-backstage-upgrade-helper.mdx index 3f4fc6da77..f3652ba59e 100644 --- a/microsite/blog/2022-03-04-backstage-upgrade-helper.md +++ b/microsite/blog/2022-03-04-backstage-upgrade-helper.mdx @@ -9,7 +9,7 @@ authorImageURL: https://avatars.githubusercontent.com/u/8433119?v=4 _TLDR;_ The Spotify team recently announced [Backstage Upgrade Helper](https://backstage.github.io/upgrade-helper): a tool that helps adopters keep their Backstage application up-to-date. **Spoiler alert**: this is also a hidden and heartwarming tale about the beauty of open source innovation. - +{/* truncate */} ## Upgrading Backstage was a common pain point diff --git a/microsite/blog/2022-03-16-backstage-turns-two.md b/microsite/blog/2022-03-16-backstage-turns-two.mdx similarity index 97% rename from microsite/blog/2022-03-16-backstage-turns-two.md rename to microsite/blog/2022-03-16-backstage-turns-two.mdx index 172fb7b971..3a16588832 100644 --- a/microsite/blog/2022-03-16-backstage-turns-two.md +++ b/microsite/blog/2022-03-16-backstage-turns-two.mdx @@ -9,7 +9,7 @@ authorImageURL: https://avatars1.githubusercontent.com/u/1236238?s=460&v=4 **TLDR:** Backstage has turned two. Of course, this is software, so we expect things to move fast. But when you have a passionate, worldwide community building together, we’ve now seen firsthand just how fast that can be. We’re marking our second year as a community by becoming a CNCF incubating project, reaching 100 public adopters, releasing version 1.0 of the core app, and other very nice birthday gifts. Rather than a toddler finding their feet, Backstage today is beginning to look awfully grown-up for a two-year-old. - +{/* truncate */} ## Out of the Sandbox and into Incubation @@ -49,7 +49,14 @@ The Backstage community is truly global with adopters and contributors from almo We asked a few contributors and maintainers to share their thoughts around this two-year milestone. - + Warms the heart, doesn’t it? Thanks again to all our contributors for making this possible. Seriously. We’re proud of what the community has accomplished and how we’ve accomplished it. All along, it’s your enthusiasm and warm/collaborative/positive vibes that have carried us and this project through. diff --git a/microsite/blog/2022-03-17-backstage-1.0.md b/microsite/blog/2022-03-17-backstage-1.0.mdx similarity index 99% rename from microsite/blog/2022-03-17-backstage-1.0.md rename to microsite/blog/2022-03-17-backstage-1.0.mdx index 5afbc3d1ee..6f9dd3ee09 100644 --- a/microsite/blog/2022-03-17-backstage-1.0.md +++ b/microsite/blog/2022-03-17-backstage-1.0.mdx @@ -10,7 +10,7 @@ authorImageURL: https://avatars.githubusercontent.com/u/6010860?v=4 _TL;DR:_ If you’ve been waiting for Backstage to come out of beta, we’re excited to announce that Backstage 1.0 is here! - +{/* truncate */} It’s been two years since Spotify [open sourced Backstage](https://backstage.io/blog/2020/03/16/announcing-backstage) so companies of all shapes and sizes — and in every industry all over the world — could build highly extensible and customized developer portals to best suit their organization’s needs and culture. Now hundreds of adopters are using Backstage as the single pane of glass for their core development, managing millions of components and technical documentation, and helping hundreds of thousands of developers be more productive and happy. diff --git a/microsite/blog/2022-05-13-techdocs-addon-framework.md b/microsite/blog/2022-05-13-techdocs-addon-framework.mdx similarity index 99% rename from microsite/blog/2022-05-13-techdocs-addon-framework.md rename to microsite/blog/2022-05-13-techdocs-addon-framework.mdx index 1c88989dd6..7f2a588834 100644 --- a/microsite/blog/2022-05-13-techdocs-addon-framework.md +++ b/microsite/blog/2022-05-13-techdocs-addon-framework.mdx @@ -12,7 +12,7 @@ _This blog post is co-authored by Eric Peterson ([@iamEAP](https://github.com/ia _TL;DR:_ Introducing the TechDocs Addon Framework — a way for us all to contribute and share additional features, TechDocs Addons, on top of the base docs-like-code experience. - +{/* truncate */} [TechDocs](https://backstage.io/docs/features/techdocs/) is a centralized platform for publishing, viewing, and discovering technical documentation across an entire organization. It's a solid foundation! But TechDocs doesn't solve higher order documentation needs on its own such as: How do you create and reinforce a culture of documentation? How do you build trust in the quality of technical documentation? diff --git a/microsite/blog/2022-07-19-releasing-backstage-search-1.0.md b/microsite/blog/2022-07-19-releasing-backstage-search-1.0.mdx similarity index 99% rename from microsite/blog/2022-07-19-releasing-backstage-search-1.0.md rename to microsite/blog/2022-07-19-releasing-backstage-search-1.0.mdx index 4c63e21f21..1936dd4fc3 100644 --- a/microsite/blog/2022-07-19-releasing-backstage-search-1.0.md +++ b/microsite/blog/2022-07-19-releasing-backstage-search-1.0.mdx @@ -13,7 +13,7 @@ We first released the Backstage Search Platform over a year ago. Backstage Searc Backstage Search Platform makes it possible for you to search across your entire software ecosystem. With a Search platform that is customizable and extendable, you can identify your needs within your organization and set up search to solve these problems. Whether it is to search through the Software Catalog or technical documentation generated by the TechDocs plugin. - +{/* truncate */} ## So what is Backstage Search 1.0? diff --git a/microsite/blog/2022-08-23-backstage-security-audit.md b/microsite/blog/2022-08-23-backstage-security-audit.mdx similarity index 99% rename from microsite/blog/2022-08-23-backstage-security-audit.md rename to microsite/blog/2022-08-23-backstage-security-audit.mdx index d81b9b1cf6..6b9f2f6463 100644 --- a/microsite/blog/2022-08-23-backstage-security-audit.md +++ b/microsite/blog/2022-08-23-backstage-security-audit.mdx @@ -11,7 +11,7 @@ authorURL: https://github.com/Rugvip As an [Incubating project](https://www.cncf.io/blog/2022/03/15/backstage-project-joins-the-cncf-incubator/) within the [Cloud Native Computing Foundation (CNCF)](https://www.cncf.io/), Backstage was fortunate enough to take advantage of a sponsored security audit. The [Open Source Technology Improvement Fund (OSTIF)](https://ostif.org/) sponsored the audit as part of its ongoing efforts to secure the open source software ecosystem, and the audit itself was performed by [X41 D-Sec](https://x41-dsec.de/). Our goal with the audit was to evaluate and improve Backstage’s security posture, focusing on the core Backstage framework and plugins. - +{/* truncate */} ## Report Findings and Fixes diff --git a/microsite/blog/2022-09-08-fyi-plugin-analytics-api.md b/microsite/blog/2022-09-08-fyi-plugin-analytics-api.mdx similarity index 99% rename from microsite/blog/2022-09-08-fyi-plugin-analytics-api.md rename to microsite/blog/2022-09-08-fyi-plugin-analytics-api.mdx index 4fba242e3e..aff30752ec 100644 --- a/microsite/blog/2022-09-08-fyi-plugin-analytics-api.md +++ b/microsite/blog/2022-09-08-fyi-plugin-analytics-api.mdx @@ -10,7 +10,7 @@ authorImageURL: https://avatars.githubusercontent.com/u/3496491?v=4 ![The Plugin Analytics API](assets/22-09-08/analytics-api-fyi.png) - +{/* truncate */} ## What is the plugin analytics API? diff --git a/microsite/blog/2022-10-28-backstagecon-kubecon-2022.md b/microsite/blog/2022-10-28-backstagecon-kubecon-2022.mdx similarity index 100% rename from microsite/blog/2022-10-28-backstagecon-kubecon-2022.md rename to microsite/blog/2022-10-28-backstagecon-kubecon-2022.mdx diff --git a/microsite/blog/2022-11-15-linux-foundation-introduction-to-backstage-course.md b/microsite/blog/2022-11-15-linux-foundation-introduction-to-backstage-course.mdx similarity index 99% rename from microsite/blog/2022-11-15-linux-foundation-introduction-to-backstage-course.md rename to microsite/blog/2022-11-15-linux-foundation-introduction-to-backstage-course.mdx index b762bd7e97..e049c6f03a 100644 --- a/microsite/blog/2022-11-15-linux-foundation-introduction-to-backstage-course.md +++ b/microsite/blog/2022-11-15-linux-foundation-introduction-to-backstage-course.mdx @@ -9,7 +9,7 @@ Backstage continues to grow in [popularity and maturity](https://roadie.io/blog/ [![Introduction to Backstage: Developer Portals Made Easy (LFS142x): Enroll!](assets/22-11-15/Introduction-to-Backstage-Developer-Portals-Made-Easy-2-768x432.png)](https://www.edx.org/course/introduction-to-backstage-developer-portals-made-easy) - +{/* truncate */} The course, [Introduction to Backstage: Developer Portals Made Easy (LFS142x)](https://www.edx.org/course/introduction-to-backstage-developer-portals-made-easy), starts discussing the benefits of adopting a Developer Portal. Then, it dives into what is Backstage, its main features (Catalog, Scaffolder, TechDocs), and how to map its capabilities to your organization. At last, it provides tips on how to connect with the community to ease up your adoption journey. diff --git a/microsite/blog/2022-12-19-backstage-wrapped-2022.md b/microsite/blog/2022-12-19-backstage-wrapped-2022.mdx similarity index 97% rename from microsite/blog/2022-12-19-backstage-wrapped-2022.md rename to microsite/blog/2022-12-19-backstage-wrapped-2022.mdx index 4986b3effd..e92c9f2265 100644 --- a/microsite/blog/2022-12-19-backstage-wrapped-2022.md +++ b/microsite/blog/2022-12-19-backstage-wrapped-2022.mdx @@ -12,7 +12,7 @@ Our community is full of people from across the globe who bring incredible engag But before anticipating too much, let’s share some stats of this amazing 2022. - +{/* truncate */} ## We grew … a lot! @@ -40,7 +40,14 @@ All of these people driving the enormous growth and maturity of the project are Wow… that’s a lot of activity. We’ve generated this animation showing all of your contributions to the Backstage repository in 2022, look at this project grow: - + ## But wait… there’s more diff --git a/microsite/blog/2023-01-31-incremental-entity-provider.md b/microsite/blog/2023-01-31-incremental-entity-provider.mdx similarity index 99% rename from microsite/blog/2023-01-31-incremental-entity-provider.md rename to microsite/blog/2023-01-31-incremental-entity-provider.mdx index b878c66871..8138b8a39a 100644 --- a/microsite/blog/2023-01-31-incremental-entity-provider.md +++ b/microsite/blog/2023-01-31-incremental-entity-provider.mdx @@ -8,7 +8,7 @@ At the heart of [Backstage](https://backstage.io/) is the [Backstage Software Ca ![catalog pipeline](assets/2023-01-31/catalog-pipeline.png) - +{/* truncate */} A common use case is for an organization to want to surface ownership and metadata about repositories. Backstage provides a mechanism for discovering and transforming repository information into a standard data structure and persisting it into the Backstage [Catalog](https://backstage.io/docs/features/software-catalog/). This process is known as ingestion, where all data is transformed into a standard Backstage data structure known as an entity. Entities in the Catalog’s data store are accessible to the Backstage App via the REST API. diff --git a/microsite/blog/2023-02-06-whats-ahead-in-2023.md b/microsite/blog/2023-02-06-whats-ahead-in-2023.mdx similarity index 99% rename from microsite/blog/2023-02-06-whats-ahead-in-2023.md rename to microsite/blog/2023-02-06-whats-ahead-in-2023.mdx index f989973ca0..b7dbe9119f 100644 --- a/microsite/blog/2023-02-06-whats-ahead-in-2023.md +++ b/microsite/blog/2023-02-06-whats-ahead-in-2023.mdx @@ -10,7 +10,7 @@ authorURL: https://github.com/leemills83 Okay, everyone. Time to move on from all the 2022 reflections, Top 10 lists, and Wrapped(s), and turn our gaze in the other direction — towards 2023. As the Backstage team moves into the new year, we find ourselves asking those perennial questions: How can we continue to grow and enhance the Backstage community? How can we improve the experience for those adopting Backstage? How can we give the best support to Backstage contributors? - +{/* truncate */} Well, we don’t have all the answers, but we do have some. So we wanted to share more on three ongoing initiatives aimed at moving the needle forward for these three distinct, yet interrelated, questions. diff --git a/microsite/blog/2023-02-15-backend-system-alpha.md b/microsite/blog/2023-02-15-backend-system-alpha.mdx similarity index 97% rename from microsite/blog/2023-02-15-backend-system-alpha.md rename to microsite/blog/2023-02-15-backend-system-alpha.mdx index 9970945f67..2aef5596a0 100644 --- a/microsite/blog/2023-02-15-backend-system-alpha.md +++ b/microsite/blog/2023-02-15-backend-system-alpha.mdx @@ -11,7 +11,7 @@ For the past year, the Backstage maintainer team has been spending time to give We’re happy to announce that the [v1.11](https://backstage.io/docs/releases/v1.11.0) release includes the public alpha of the [new Backstage backend system](https://backstage.io/docs/backend-system/)! The system has already been available to use for some time, as some of you have already found, but this alpha release marks the point where we are finally ready to encourage widespread adoption by plugin builders. We still don’t recommend that you use this new system in your production setups just yet, more on that later. - +{/* truncate */} ## History of the Backstage backend system @@ -37,9 +37,16 @@ A few months later as the RFC settled, we resumed work and followed up with an i We wrapped up this work just before KubeCon NA 2022, with the full system implemented. The state of the system at this point was presented in our talk on the topic, which you can see just below. Except for a few API tweaks, this is what the system still looks like today. - + -
+
The final stage was all about polish, which we picked up at the beginning of this year. By leaving a bit of space between the main implementation, or phase two, and the polish phase, phase three, it was much easier to properly scrutinize our past solutions. We forget a lot of the low level reasoning for changes, and it is easier to step back and reconsider parts of the system. For example, we found that our initial design of the `createServiceFactory` function was unnecessarily complex, and could be made much simpler for most usages. In addition to reviewing all the APIs, we also wrote more documentation to help users, ensured that the local development and testing experience was solid, and double checked that there was a smooth migration path from the old system. diff --git a/microsite/blog/2023-03-15-backstage-turns-3.md b/microsite/blog/2023-03-15-backstage-turns-3.mdx similarity index 93% rename from microsite/blog/2023-03-15-backstage-turns-3.md rename to microsite/blog/2023-03-15-backstage-turns-3.mdx index 317cdc0c4d..2c5cdf65d5 100644 --- a/microsite/blog/2023-03-15-backstage-turns-3.md +++ b/microsite/blog/2023-03-15-backstage-turns-3.mdx @@ -9,7 +9,7 @@ authorImageURL: https://avatars.githubusercontent.com/u/3645856?v=4 **TL;DR** Spotify released Backstage into open source three years ago today. Since then, the community has grown by leaps and bounds to stretch across the globe (and the Discord server!). Now that Backstage is a threenager, the growing pains are real. So, on this birthday, we want to cover our collective efforts to make it easier to adopt and contribute to Backstage. - +{/* truncate */} ## They grow up so fast, don’t they? @@ -33,9 +33,29 @@ But, without a doubt, the best thing about the Backstage project is the people i Don’t take our word for it! Take a look at this birthday video we put together with a few community members. -
- +
+
## The growing pains are real diff --git a/microsite/blog/2023-04-26-kubecon-eu-2023.mdx b/microsite/blog/2023-04-26-kubecon-eu-2023.mdx new file mode 100644 index 0000000000..7ee549c088 --- /dev/null +++ b/microsite/blog/2023-04-26-kubecon-eu-2023.mdx @@ -0,0 +1,34 @@ +--- +title: 'ICYMI: KubeCon EU 2023' +author: Bailey Brooks, Spotify +authorURL: http://github.com/bailey +authorImageURL: https://pbs.twimg.com/profile_images/1477424303192694785/qCfN6XWW_400x400.jpg +--- + +![KubeCon CloudNativeCon Europe 2023 banner](assets/2023-04-26/Backstage_News_3-7-23_KubeCon.png) + +We had a blast talking all things Backstage at KubeCon EU 2023 in Amsterdam last week. In case you missed it, here’s a quick recap: + +{/* truncate */} + +## Backstage Project Meeting + +![A packed room for the Backstage project meeting](assets/2023-04-26/IMG_2522.png) + +On Tuesday the Backstage maintainers hosted a jam-packed project meeting. The community welcomed many teams and individuals that were early in their Backstage journey, either actively adopting, preparing for the POC phase, or learning about the capabilities of Backstage. Many of the newcomers were eager to learn about how Backstage could help streamline their development workflows and improve developer productivity. During the project meeting, the maintainers covered a “day in the life” of a core maintainer, walked through spinning up a new instance of Backstage in a live demo, and opened it up to questions from the community. It’s super exciting to see so much growing interest in Backstage and all of the ways adopters are adapting it to their needs. + +## State of Backstage in 2023 + +![Patrik and Ben onstage for the State of Backstage talk](assets/2023-04-26/IMG_0120.png) + +Core maintainers [Ben Lambert](https://github.com/benjdlambert) and [Patrik Oldsberg](https://github.com/Rugvip) took center stage on Wednesday for the Backstage Maintainer Track: State of Backstage in 2023 talk. Backstage has officially hit over 1,000 adopters and 1,000 contributors – so it’s apt timing to modernize the governance model for the project. Taking pointers from the [CNCF Contributor Ladder Governance Template](https://contribute.cncf.io/maintainers/templates/), a new [Backstage Governance Model](https://github.com/backstage/backstage/blob/master/GOVERNANCE.md) is now in effect! Patrik walked us through the new ladder model which introduces a number of changes, one being the addition of [project area maintainers](https://github.com/backstage/backstage/blob/master/GOVERNANCE.md#project-area-maintainer). This role lets members of the community take increased ownership over a specific area of interest, like Catalog, Discoverability, TechDocs, Helm Charts, and Kubernetes. New project areas that will be added include Permissions and Software Templates. New project areas can be proposed by nominating a project area maintainer for the area. The new model also adds an organization member role for contributors who want to take a more active role in the Backstage community. You can open an issue to become an organization member [here](https://github.com/backstage/community/issues/new/choose). + +![Contributor ladder](assets/2023-04-26/contributor_ladder.png) + +Ben and Patrik also covered new capabilities for Software Templates and framework updates. Lots of exciting new features are planned for Software Templates including a new UI, async validation for CustomFieldExtensions, and embedded workflows. Lastly, the maintainers also announced a new focus on declarative integration – permitting plugin installation without TypeScript. Development is still early, but we can’t wait to see this in action! + +## Other KubeCon excitement! + +Throughout the week, we also heard success stories of adopters, like AppsFlyer’s talk, “How We Migrated Over 1000 Services to Backstage Using GitOps and Survived to Talk About It!” AppsFlyer has over 1,000 services and processes over 200 billion events per day – so migrating to Backstage as their service catalog platform was no small feat. As part of their migration, they also integrated GitOps and Terraform into their Backstage instance. Many attendees found interest in these case studies where you could see the adoption and POC process directly from other adopters. It was exciting to see firsthand how teams can extend Backstage to fit their needs on the fly. + +We were thrilled to see so much excitement and interest brewing around Backstage this year! If you missed it, you can catch up as soon as more talks are added to the [CNCF YouTube channel](https://www.youtube.com/@cncf/featured). We can’t wait to catch up with you all again soon at KubeCon North America in Chicago. diff --git a/microsite/blog/assets/2023-04-26/Backstage_News_3-7-23_KubeCon.png b/microsite/blog/assets/2023-04-26/Backstage_News_3-7-23_KubeCon.png new file mode 100644 index 0000000000..0f95a5fa90 Binary files /dev/null and b/microsite/blog/assets/2023-04-26/Backstage_News_3-7-23_KubeCon.png differ diff --git a/microsite/blog/assets/2023-04-26/IMG_0120.png b/microsite/blog/assets/2023-04-26/IMG_0120.png new file mode 100644 index 0000000000..031833f333 Binary files /dev/null and b/microsite/blog/assets/2023-04-26/IMG_0120.png differ diff --git a/microsite/blog/assets/2023-04-26/IMG_2522.png b/microsite/blog/assets/2023-04-26/IMG_2522.png new file mode 100644 index 0000000000..97faea007c Binary files /dev/null and b/microsite/blog/assets/2023-04-26/IMG_2522.png differ diff --git a/microsite/blog/assets/2023-04-26/contributor_ladder.png b/microsite/blog/assets/2023-04-26/contributor_ladder.png new file mode 100644 index 0000000000..09ebfe1948 Binary files /dev/null and b/microsite/blog/assets/2023-04-26/contributor_ladder.png differ diff --git a/microsite/data/plugins/chatgpt-plugin b/microsite/data/plugins/chatgpt-plugin new file mode 100644 index 0000000000..fdf6c162b8 --- /dev/null +++ b/microsite/data/plugins/chatgpt-plugin @@ -0,0 +1,10 @@ +--- +title: 'ChatGPT Plugin' +author: Enfuse +authorUrl: https://enfuse.io/ +category: Development +description: Experiment with the OpenAI playground to help you develop more efficiently +documentation: https://github.com/enfuse/backstage-chatgpt-plugin/blob/main/README.md +iconUrl: /img/enfuse.png +npmPackageName: '@enfuse/chatgpt-plugin-frontend' +addedDate: '2023-04-21' diff --git a/microsite/data/plugins/dbt.yaml b/microsite/data/plugins/dbt.yaml new file mode 100644 index 0000000000..e287da7752 --- /dev/null +++ b/microsite/data/plugins/dbt.yaml @@ -0,0 +1,12 @@ +--- +title: dbt Docs +author: IIBenII +authorUrl: https://github.com/IIBenII +category: Discovery +description: View dbt models and tests documentation. +documentation: https://github.com/IIBenII/backstage-plugin-dbt +npmPackageName: '@iiben_orgii/backstage-plugin-dbt' +tags: + - dbt + - doc +addedDate: '2023-04-27' diff --git a/microsite/docusaurus.config.js b/microsite/docusaurus.config.js index 4164a1c865..e6137b572b 100644 --- a/microsite/docusaurus.config.js +++ b/microsite/docusaurus.config.js @@ -68,6 +68,12 @@ module.exports = { }, ], ], + markdown: { + preprocessor({ filePath, fileContent }) { + // Replace all HTML comments with emtpy strings as these are not supported by MDXv2. + return fileContent.replace(//gs, ''); + }, + }, webpack: { jsLoader: isServer => ({ loader: require.resolve('swc-loader'), diff --git a/microsite/package.json b/microsite/package.json index 76696ce939..6e20cad4fa 100644 --- a/microsite/package.json +++ b/microsite/package.json @@ -17,21 +17,20 @@ "docusaurus": "docusaurus" }, "devDependencies": { - "@docusaurus/module-type-aliases": "2.4.0", + "@docusaurus/module-type-aliases": "0.0.0-5566", "@spotify/prettier-config": "^14.0.0", "@tsconfig/docusaurus": "^1.0.6", "@types/webpack-env": "^1.18.0", "js-yaml": "^4.1.0", "prettier": "^2.6.2", - "replace": "^1.2.2", "typescript": "^4.9.4", "yaml-loader": "^0.8.0" }, "prettier": "@spotify/prettier-config", "dependencies": { - "@docusaurus/core": "2.4.0", - "@docusaurus/plugin-client-redirects": "^2.3.1", - "@docusaurus/preset-classic": "2.4.0", + "@docusaurus/core": "0.0.0-5566", + "@docusaurus/plugin-client-redirects": "0.0.0-5566", + "@docusaurus/preset-classic": "0.0.0-5566", "@swc/core": "^1.3.46", "clsx": "^1.1.1", "docusaurus-plugin-sass": "^0.2.3", diff --git a/microsite/scripts/pre-build.js b/microsite/scripts/pre-build.js index 8b4fb4f71e..3b5bd4fb0b 100644 --- a/microsite/scripts/pre-build.js +++ b/microsite/scripts/pre-build.js @@ -14,7 +14,6 @@ * limitations under the License. */ -const replace = require('replace'); const { existsSync, writeFileSync, mkdirSync } = require('fs'); const path = require('path'); @@ -28,16 +27,7 @@ Run \`yarn build:api-docs\` to generate the API docs. async function main() { const referencesDir = '../docs/reference'; - if (existsSync(referencesDir)) { - console.log('Removing HTML comments from docs/reference folder'); - replace({ - regex: '', - replacement: '', - paths: [referencesDir], - recursive: true, - silent: false, - }); - } else { + if (!existsSync(referencesDir)) { mkdirSync(referencesDir); writeFileSync(path.join(referencesDir, 'index.md'), PLACEHOLDER); } diff --git a/microsite/sidebars.json b/microsite/sidebars.json index 5e9629733d..cf2f9b7b56 100644 --- a/microsite/sidebars.json +++ b/microsite/sidebars.json @@ -108,6 +108,7 @@ "features/software-templates/writing-custom-actions", "features/software-templates/writing-custom-field-extensions", "features/software-templates/writing-custom-step-layouts", + "features/software-templates/authorizing-parameters-steps-and-actions", "features/software-templates/testing-scaffolder-alpha", "features/software-templates/migrating-from-v1beta2-to-v1beta3" ] diff --git a/microsite/yarn.lock b/microsite/yarn.lock index 17af858e2f..10028fc4b4 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -5,111 +5,111 @@ __metadata: version: 6 cacheKey: 8 -"@algolia/autocomplete-core@npm:1.7.2": - version: 1.7.2 - resolution: "@algolia/autocomplete-core@npm:1.7.2" +"@algolia/autocomplete-core@npm:1.8.2": + version: 1.8.2 + resolution: "@algolia/autocomplete-core@npm:1.8.2" dependencies: - "@algolia/autocomplete-shared": 1.7.2 - checksum: 7d3e879ac74f2d3fd6f80a01d6c05bd22264c428030396234112be7628a80d3a7c250613b2d4102f8ef63115be7b96d8d0231bdf8a02aa9b58873500aa61ffcc + "@algolia/autocomplete-shared": 1.8.2 + checksum: 03c164d8ce685e8b690734364a2e8653a7ebaf9b49ccbea5f94236b1231d66ed6771010406a0b00a2ce884b767712d71903a7d124ec11f35a87006d1456da762 languageName: node linkType: hard -"@algolia/autocomplete-preset-algolia@npm:1.7.2": - version: 1.7.2 - resolution: "@algolia/autocomplete-preset-algolia@npm:1.7.2" +"@algolia/autocomplete-preset-algolia@npm:1.8.2": + version: 1.8.2 + resolution: "@algolia/autocomplete-preset-algolia@npm:1.8.2" dependencies: - "@algolia/autocomplete-shared": 1.7.2 + "@algolia/autocomplete-shared": 1.8.2 peerDependencies: "@algolia/client-search": ">= 4.9.1 < 6" algoliasearch: ">= 4.9.1 < 6" - checksum: 7120ce1d312dbe6d898a0cecd9b28e45f9162a2fd9208a4c4e2efa77027455ee083c11cb782196374da717e990d6ca362c286ace475db97916e52bd277061d77 + checksum: f968b0f9d0ad9e75d3e1cfe35a02816ed01d83eb3d702bb8d4297bb9abf542991659c4a16c6ea323eea9268f189e85f58fcb109de76e6c4a9f58a0d63812c92e languageName: node linkType: hard -"@algolia/autocomplete-shared@npm:1.7.2": - version: 1.7.2 - resolution: "@algolia/autocomplete-shared@npm:1.7.2" - checksum: 8336cd1e79e56e3901196862ae17896c6e9542e269a05860ab72d869e35f17ab0f40ecbe35d1e34617cc70749d3f8323d09b347c443a7b7b2b126dddb44779aa +"@algolia/autocomplete-shared@npm:1.8.2": + version: 1.8.2 + resolution: "@algolia/autocomplete-shared@npm:1.8.2" + checksum: 1ec17deb594c41e983643cfd888e3590963aa7207ef6a67859c49a8f4835340493ba3b025b8b617b488365730ba9817ad58ee44a610c172332446e560fb68780 languageName: node linkType: hard -"@algolia/cache-browser-local-storage@npm:4.14.2": - version: 4.14.2 - resolution: "@algolia/cache-browser-local-storage@npm:4.14.2" +"@algolia/cache-browser-local-storage@npm:4.17.0": + version: 4.17.0 + resolution: "@algolia/cache-browser-local-storage@npm:4.17.0" dependencies: - "@algolia/cache-common": 4.14.2 - checksum: e7d5f43ff01df5f21a2b5304b5d8f8ae25f2c6093e83e79556cb78ae07f342111ba77eba633b837b5b74a17293ea6a208acb1ade71782baafa9c2da7d58ee45c + "@algolia/cache-common": 4.17.0 + checksum: cca4bd274a93ff4b47895b7396666294297e650ae8f9f50cc1a1dfe70d4bcf9bd1c5dbc15027f4b42c51693d1d0b996fa6c53b95462f3e31d44f4f4b76384a48 languageName: node linkType: hard -"@algolia/cache-common@npm:4.14.2": - version: 4.14.2 - resolution: "@algolia/cache-common@npm:4.14.2" - checksum: 4fd04c714aee19f6eaaac4ae7e00e914a44473af9a84cf3c4260e436c6ea20f5590e05e9006d963372d84ce57268776811fcb929d79e0415b59d74779bd31ee7 +"@algolia/cache-common@npm:4.17.0": + version: 4.17.0 + resolution: "@algolia/cache-common@npm:4.17.0" + checksum: cbf8d6ca4ee653f2bef6665eb36b7afee2d4031abe5444cd121d60614189f2c96d0e00cfef990cbe68d318dbcef9b38f5df70476f9088ef43f8c83d69d0802b8 languageName: node linkType: hard -"@algolia/cache-in-memory@npm:4.14.2": - version: 4.14.2 - resolution: "@algolia/cache-in-memory@npm:4.14.2" +"@algolia/cache-in-memory@npm:4.17.0": + version: 4.17.0 + resolution: "@algolia/cache-in-memory@npm:4.17.0" dependencies: - "@algolia/cache-common": 4.14.2 - checksum: d6981f812a368a38db21e52c98ec81a5c0eda5d896377f7bdcc04a0be1673ac9e184836d7973065fab84dc947a63fe959586468fc14b9a87e32f916959df6222 + "@algolia/cache-common": 4.17.0 + checksum: 95d8a831d86da4971b62ddfa3a0bad991dc78d2482b47e409ab3e81a88e2d1e020287f36900a71caee7ef76c8730609e74bad10f3a7fa0fa7fd7fe1ece68a29e languageName: node linkType: hard -"@algolia/client-account@npm:4.14.2": - version: 4.14.2 - resolution: "@algolia/client-account@npm:4.14.2" +"@algolia/client-account@npm:4.17.0": + version: 4.17.0 + resolution: "@algolia/client-account@npm:4.17.0" dependencies: - "@algolia/client-common": 4.14.2 - "@algolia/client-search": 4.14.2 - "@algolia/transporter": 4.14.2 - checksum: 2e9eed5a4b8434775af87899bda8140d51eb2dd0cf08fc49370a4dc9541c220db9b241976dad14ae5d07a25f7ddafd9759a2eb462788f21a20f14e04968f98a4 + "@algolia/client-common": 4.17.0 + "@algolia/client-search": 4.17.0 + "@algolia/transporter": 4.17.0 + checksum: 5ba40c348c07c059e303857a726a163256a159ca4ca9419f3c6eb80ef979838b375614674cf778fd35faaecd5e51c91811e19e9d5fabc3c421182dfc9464b798 languageName: node linkType: hard -"@algolia/client-analytics@npm:4.14.2": - version: 4.14.2 - resolution: "@algolia/client-analytics@npm:4.14.2" +"@algolia/client-analytics@npm:4.17.0": + version: 4.17.0 + resolution: "@algolia/client-analytics@npm:4.17.0" dependencies: - "@algolia/client-common": 4.14.2 - "@algolia/client-search": 4.14.2 - "@algolia/requester-common": 4.14.2 - "@algolia/transporter": 4.14.2 - checksum: 61874e026c9d08dd628da443b5b34d1a3bb707a0283e727d94ee6d61057631039c5cf6303e6234cc6fbe84ff71c2758f952b664277715ca5761819aec73e7aad + "@algolia/client-common": 4.17.0 + "@algolia/client-search": 4.17.0 + "@algolia/requester-common": 4.17.0 + "@algolia/transporter": 4.17.0 + checksum: 6cddb0bc8fb2f7ce46c0f051f282a9ecb22333f32e43274bbec61228bcb040af87029b759ab300c9f1af90e4b4a08adf7b4899faf13ab94426a43823c39e951a languageName: node linkType: hard -"@algolia/client-common@npm:4.14.2": - version: 4.14.2 - resolution: "@algolia/client-common@npm:4.14.2" +"@algolia/client-common@npm:4.17.0": + version: 4.17.0 + resolution: "@algolia/client-common@npm:4.17.0" dependencies: - "@algolia/requester-common": 4.14.2 - "@algolia/transporter": 4.14.2 - checksum: da2be279ac51e1b43c02c6d2bbf0d9cc8b1cb3250ad10a803fca609bcfb8164a8adc21281b599fd8aa322c04deea77d2f07adcae1a363952559472e781e26c71 + "@algolia/requester-common": 4.17.0 + "@algolia/transporter": 4.17.0 + checksum: 05791d5483e16a0776a1fb16f42a8e62c67be844e82ff506b5ed82669367f6ea5fba79bcffa90ff4af2039bd8fb16db395edc4c0b1e0c11c050de8a118642180 languageName: node linkType: hard -"@algolia/client-personalization@npm:4.14.2": - version: 4.14.2 - resolution: "@algolia/client-personalization@npm:4.14.2" +"@algolia/client-personalization@npm:4.17.0": + version: 4.17.0 + resolution: "@algolia/client-personalization@npm:4.17.0" dependencies: - "@algolia/client-common": 4.14.2 - "@algolia/requester-common": 4.14.2 - "@algolia/transporter": 4.14.2 - checksum: 0dd25c84a40fe9853d14fadc3c8893e84bee370b5a3eb6730afe816afe1f92b970096d2dfb68073f606fa074fdeb66c3a73811d9a9a9774af5311f34d939fd72 + "@algolia/client-common": 4.17.0 + "@algolia/requester-common": 4.17.0 + "@algolia/transporter": 4.17.0 + checksum: 01e08bd8919d30469bfb01acd221528b3a25b56ac5a4754353e87d73643fe85e0126b1ab070bdb2b6d442fc260f4f781b95cbd5c1363fca5ba37a0a2bf6292b2 languageName: node linkType: hard -"@algolia/client-search@npm:4.14.2": - version: 4.14.2 - resolution: "@algolia/client-search@npm:4.14.2" +"@algolia/client-search@npm:4.17.0": + version: 4.17.0 + resolution: "@algolia/client-search@npm:4.17.0" dependencies: - "@algolia/client-common": 4.14.2 - "@algolia/requester-common": 4.14.2 - "@algolia/transporter": 4.14.2 - checksum: 2695bc9e8c98badb601b915dbb075dd92996af350b0e4915a7a3b7825bd45f20815534debcfcb51bb7f682ba5d09f3c41918edb36e0a7f7bb154d3b205825f65 + "@algolia/client-common": 4.17.0 + "@algolia/requester-common": 4.17.0 + "@algolia/transporter": 4.17.0 + checksum: ca6aedd67e69112e3a86086e48de4f38b9d127c2e606b345de58a528dd2d2016e70783cf446dfa669036c69ffbd0616f27b180cacb6ab0fafe85065b2b8d323f languageName: node linkType: hard @@ -120,139 +120,116 @@ __metadata: languageName: node linkType: hard -"@algolia/logger-common@npm:4.14.2": - version: 4.14.2 - resolution: "@algolia/logger-common@npm:4.14.2" - checksum: a4000a98831d64c8d826ccece9f5f3a77bc000d93d74a7c6b51f186d3dfd96c0bb00934f70c69da8f3c4dfb9f30ce55ab59aca9ba79c3cc3e924597838a94429 +"@algolia/logger-common@npm:4.17.0": + version: 4.17.0 + resolution: "@algolia/logger-common@npm:4.17.0" + checksum: e6359266544ed9d9eab8d4217c126a8209f74fbd1e407f2249b886915a521e89e419dc6401a65389523f3bdffb3880c0a95578c3c437653f941ddb1095c37e08 languageName: node linkType: hard -"@algolia/logger-console@npm:4.14.2": - version: 4.14.2 - resolution: "@algolia/logger-console@npm:4.14.2" +"@algolia/logger-console@npm:4.17.0": + version: 4.17.0 + resolution: "@algolia/logger-console@npm:4.17.0" dependencies: - "@algolia/logger-common": 4.14.2 - checksum: 96c6209c7ef72cbc170b180f5b84c6523a5b6f4dea978c982577d2417eb19eb9c9ea3bc73089ced692a05bec141d66fd6d5401458d0aa162dbcace5017dbd127 + "@algolia/logger-common": 4.17.0 + checksum: b58790af42258a586a2584154674dbe13802e05602ff000ce9c34cadc2b5d29a3d41af150bde3f29aa5711a468d56d4c7fd16a72a350243e81af794bfadab213 languageName: node linkType: hard -"@algolia/requester-browser-xhr@npm:4.14.2": - version: 4.14.2 - resolution: "@algolia/requester-browser-xhr@npm:4.14.2" +"@algolia/requester-browser-xhr@npm:4.17.0": + version: 4.17.0 + resolution: "@algolia/requester-browser-xhr@npm:4.17.0" dependencies: - "@algolia/requester-common": 4.14.2 - checksum: 7d8666e21cd0d15dc2e25f6917464c2f98cf73e0d2fced94cc6a3c4e97a990b8b93d9531bbf6f3b1ff2342b9ce9760d1dcb64dbbf61a5f2c31fe4f42541deef2 + "@algolia/requester-common": 4.17.0 + checksum: 374247cf30887be1c4649d0cdee5b9bbd59c9bc663122e14e157c70978a87a58e8708956bc4b58fbe9ad5b31ee1014a097322f748d27ad9b9de051943f1ebba2 languageName: node linkType: hard -"@algolia/requester-common@npm:4.14.2": - version: 4.14.2 - resolution: "@algolia/requester-common@npm:4.14.2" - checksum: 7de4148a55db56fe2bf18c1359cccbc2f41031fe2bfbc945d75f143b854638c51e7ec2ef9c6dc69b38d5edb87cd096ce5d7087680da32825562db79026ea39cc +"@algolia/requester-common@npm:4.17.0": + version: 4.17.0 + resolution: "@algolia/requester-common@npm:4.17.0" + checksum: 13ace23f53fc88677d896ae4506f04a5defd17f69b9611571e19dd45c91fda74a71acd27f799f55f88d550264b8f4477831d9ff546ffeb7257e35ec4ee983ca8 languageName: node linkType: hard -"@algolia/requester-node-http@npm:4.14.2": - version: 4.14.2 - resolution: "@algolia/requester-node-http@npm:4.14.2" +"@algolia/requester-node-http@npm:4.17.0": + version: 4.17.0 + resolution: "@algolia/requester-node-http@npm:4.17.0" dependencies: - "@algolia/requester-common": 4.14.2 - checksum: 5f5fe8b040f73bd95c6bdb5b97396e078b629b2b4cd93fea671d545be375c79501c65296c34824f0ff8368b5b51edc7a6ad9e694b04223c1416dcda869c6f566 + "@algolia/requester-common": 4.17.0 + checksum: 9d5e9c90e300737620be2cb21dbdc3ffe9f37453893b62f3e1fce2678abb0e1bd8b95735ddffc25ab79692539ecf6dbcb7eb9e8f7cf405d73521d416ebfb39ca languageName: node linkType: hard -"@algolia/transporter@npm:4.14.2": - version: 4.14.2 - resolution: "@algolia/transporter@npm:4.14.2" +"@algolia/transporter@npm:4.17.0": + version: 4.17.0 + resolution: "@algolia/transporter@npm:4.17.0" dependencies: - "@algolia/cache-common": 4.14.2 - "@algolia/logger-common": 4.14.2 - "@algolia/requester-common": 4.14.2 - checksum: 72c72013f3edb4d4484e7a43fb3c2555646ab04f422249514ed0309e20f41f5563f4c4dcf5623ca64c293624ecc74f87acaf2d9820e8c829cb5de067bdfe0257 + "@algolia/cache-common": 4.17.0 + "@algolia/logger-common": 4.17.0 + "@algolia/requester-common": 4.17.0 + checksum: 1864bf9ccdf63f5090a89f44358c30317f549b4dc37dd8ce446383ca217c1a9737ab2749ca92394a320574690ea04134ae600c2a3f1f9d393549a5124079c2a6 languageName: node linkType: hard -"@ampproject/remapping@npm:^2.1.0": - version: 2.2.0 - resolution: "@ampproject/remapping@npm:2.2.0" +"@ampproject/remapping@npm:^2.2.0": + version: 2.2.1 + resolution: "@ampproject/remapping@npm:2.2.1" dependencies: - "@jridgewell/gen-mapping": ^0.1.0 + "@jridgewell/gen-mapping": ^0.3.0 "@jridgewell/trace-mapping": ^0.3.9 - checksum: d74d170d06468913921d72430259424b7e4c826b5a7d39ff839a29d547efb97dc577caa8ba3fb5cf023624e9af9d09651afc3d4112a45e2050328abc9b3a2292 + checksum: 03c04fd526acc64a1f4df22651186f3e5ef0a9d6d6530ce4482ec9841269cf7a11dbb8af79237c282d721c5312024ff17529cd72cc4768c11e999b58e2302079 languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.18.6, @babel/code-frame@npm:^7.8.3": - version: 7.18.6 - resolution: "@babel/code-frame@npm:7.18.6" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.16.0, @babel/code-frame@npm:^7.18.6, @babel/code-frame@npm:^7.21.4, @babel/code-frame@npm:^7.8.3": + version: 7.21.4 + resolution: "@babel/code-frame@npm:7.21.4" dependencies: "@babel/highlight": ^7.18.6 - checksum: 195e2be3172d7684bf95cff69ae3b7a15a9841ea9d27d3c843662d50cdd7d6470fd9c8e64be84d031117e4a4083486effba39f9aef6bbb2c89f7f21bcfba33ba + checksum: e5390e6ec1ac58dcef01d4f18eaf1fd2f1325528661ff6d4a5de8979588b9f5a8e852a54a91b923846f7a5c681b217f0a45c2524eb9560553160cd963b7d592c languageName: node linkType: hard -"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.20.0, @babel/compat-data@npm:^7.20.1": - version: 7.20.5 - resolution: "@babel/compat-data@npm:7.20.5" - checksum: 523790c43ef6388fae91d1ca9acf1ab0e1b22208dcd39c0e5e7a6adf0b48a133f1831be8d5931a72ecd48860f3e3fb777cb89840794abd8647a5c8e5cfab484e +"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.20.5, @babel/compat-data@npm:^7.21.4": + version: 7.21.4 + resolution: "@babel/compat-data@npm:7.21.4" + checksum: 5f8b98c66f2ffba9f3c3a82c0cf354c52a0ec5ad4797b370dc32bdcd6e136ac4febe5e93d76ce76e175632e2dbf6ce9f46319aa689fcfafa41b6e49834fa4b66 languageName: node linkType: hard -"@babel/core@npm:7.12.9": - version: 7.12.9 - resolution: "@babel/core@npm:7.12.9" +"@babel/core@npm:^7.19.6, @babel/core@npm:^7.20.12": + version: 7.21.4 + resolution: "@babel/core@npm:7.21.4" dependencies: - "@babel/code-frame": ^7.10.4 - "@babel/generator": ^7.12.5 - "@babel/helper-module-transforms": ^7.12.1 - "@babel/helpers": ^7.12.5 - "@babel/parser": ^7.12.7 - "@babel/template": ^7.12.7 - "@babel/traverse": ^7.12.9 - "@babel/types": ^7.12.7 - convert-source-map: ^1.7.0 - debug: ^4.1.0 - gensync: ^1.0.0-beta.1 - json5: ^2.1.2 - lodash: ^4.17.19 - resolve: ^1.3.2 - semver: ^5.4.1 - source-map: ^0.5.0 - checksum: 4d34eca4688214a4eb6bd5dde906b69a7824f17b931f52cd03628a8ac94d8fbe15565aebffdde106e974c8738cd64ac62c6a6060baa7139a06db1f18c4ff872d - languageName: node - linkType: hard - -"@babel/core@npm:^7.18.6, @babel/core@npm:^7.19.6": - version: 7.20.5 - resolution: "@babel/core@npm:7.20.5" - dependencies: - "@ampproject/remapping": ^2.1.0 - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.20.5 - "@babel/helper-compilation-targets": ^7.20.0 - "@babel/helper-module-transforms": ^7.20.2 - "@babel/helpers": ^7.20.5 - "@babel/parser": ^7.20.5 - "@babel/template": ^7.18.10 - "@babel/traverse": ^7.20.5 - "@babel/types": ^7.20.5 + "@ampproject/remapping": ^2.2.0 + "@babel/code-frame": ^7.21.4 + "@babel/generator": ^7.21.4 + "@babel/helper-compilation-targets": ^7.21.4 + "@babel/helper-module-transforms": ^7.21.2 + "@babel/helpers": ^7.21.0 + "@babel/parser": ^7.21.4 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.21.4 + "@babel/types": ^7.21.4 convert-source-map: ^1.7.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 - json5: ^2.2.1 + json5: ^2.2.2 semver: ^6.3.0 - checksum: 9547f1e6364bc58c3621e3b17ec17f0d034ff159e5a520091d9381608d40af3be4042dd27c20ad7d3e938422d75850ac56a3758d6801d65df701557af4bd244b + checksum: a3beebb2cc79908a02f27a07dc381bcb34e8ecc58fa99f568ad0934c49e12111fc977ee9c5b51eb7ea2da66f63155d37c4dd96b6472eaeecfc35843ccb56bf3d languageName: node linkType: hard -"@babel/generator@npm:^7.12.5, @babel/generator@npm:^7.18.7, @babel/generator@npm:^7.20.5": - version: 7.20.5 - resolution: "@babel/generator@npm:7.20.5" +"@babel/generator@npm:^7.21.1, @babel/generator@npm:^7.21.4": + version: 7.21.4 + resolution: "@babel/generator@npm:7.21.4" dependencies: - "@babel/types": ^7.20.5 + "@babel/types": ^7.21.4 "@jridgewell/gen-mapping": ^0.3.2 + "@jridgewell/trace-mapping": ^0.3.17 jsesc: ^2.5.1 - checksum: 31c10d1e122f08cf755a24bd6f5d197f47eceba03f1133759687d00ab72d210e60ba4011da42f368b6e9fa85cbfda7dc4adb9889c2c20cc5c34bb2d57c1deab7 + checksum: 9ffbb526a53bb8469b5402f7b5feac93809b09b2a9f82fcbfcdc5916268a65dae746a1f2479e03ba4fb0776facd7c892191f63baa61ab69b2cfdb24f7b92424d languageName: node linkType: hard @@ -275,34 +252,36 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.20.0": - version: 7.20.0 - resolution: "@babel/helper-compilation-targets@npm:7.20.0" +"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.20.7, @babel/helper-compilation-targets@npm:^7.21.4": + version: 7.21.4 + resolution: "@babel/helper-compilation-targets@npm:7.21.4" dependencies: - "@babel/compat-data": ^7.20.0 - "@babel/helper-validator-option": ^7.18.6 + "@babel/compat-data": ^7.21.4 + "@babel/helper-validator-option": ^7.21.0 browserslist: ^4.21.3 + lru-cache: ^5.1.1 semver: ^6.3.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: bc183f2109648849c8fde0b3c5cf08adf2f7ad6dc617b546fd20f34c8ef574ee5ee293c8d1bd0ed0221212e8f5907cdc2c42097870f1dcc769a654107d82c95b + checksum: bf9c7d3e7e6adff9222c05d898724cd4ee91d7eb9d52222c7ad2a22955620c2872cc2d9bdf0e047df8efdb79f4e3af2a06b53f509286145feccc4d10ddc318be languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.20.2, @babel/helper-create-class-features-plugin@npm:^7.20.5": - version: 7.20.5 - resolution: "@babel/helper-create-class-features-plugin@npm:7.20.5" +"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0": + version: 7.21.4 + resolution: "@babel/helper-create-class-features-plugin@npm:7.21.4" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.19.0 - "@babel/helper-member-expression-to-functions": ^7.18.9 + "@babel/helper-function-name": ^7.21.0 + "@babel/helper-member-expression-to-functions": ^7.21.0 "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/helper-replace-supers": ^7.19.1 + "@babel/helper-replace-supers": ^7.20.7 + "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 "@babel/helper-split-export-declaration": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0 - checksum: 51b0662cc44ae5fe3691ed552f97312006709ec3f5321a5e5b5a139a5743eaaf65987f30ee7c171af80ab77460fb57c1970b0b1583dd70d90b58e4433b117a1b + checksum: 9123ca80a4894aafdb1f0bc08e44f6be7b12ed1fbbe99c501b484f9b1a17ff296b6c90c18c222047d53c276f07f17b4de857946fa9d0aa207023b03e4cc716f2 languageName: node linkType: hard @@ -350,13 +329,13 @@ __metadata: languageName: node linkType: hard -"@babel/helper-function-name@npm:^7.18.9, @babel/helper-function-name@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/helper-function-name@npm:7.19.0" +"@babel/helper-function-name@npm:^7.18.9, @babel/helper-function-name@npm:^7.19.0, @babel/helper-function-name@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/helper-function-name@npm:7.21.0" dependencies: - "@babel/template": ^7.18.10 - "@babel/types": ^7.19.0 - checksum: eac1f5db428ba546270c2b8d750c24eb528b8fcfe50c81de2e0bdebf0e20f24bec688d4331533b782e4a907fad435244621ca2193cfcf80a86731299840e0f6e + "@babel/template": ^7.20.7 + "@babel/types": ^7.21.0 + checksum: d63e63c3e0e3e8b3138fa47b0cd321148a300ef12b8ee951196994dcd2a492cc708aeda94c2c53759a5c9177fffaac0fd8778791286746f72a000976968daf4e languageName: node linkType: hard @@ -369,37 +348,37 @@ __metadata: languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-member-expression-to-functions@npm:7.18.9" +"@babel/helper-member-expression-to-functions@npm:^7.20.7, @babel/helper-member-expression-to-functions@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/helper-member-expression-to-functions@npm:7.21.0" dependencies: - "@babel/types": ^7.18.9 - checksum: fcf8184e3b55051c4286b2cbedf0eccc781d0f3c9b5cbaba582eca19bf0e8d87806cdb7efc8554fcb969ceaf2b187d5ea748d40022d06ec7739fbb18c1b19a7a + "@babel/types": ^7.21.0 + checksum: 49cbb865098195fe82ba22da3a8fe630cde30dcd8ebf8ad5f9a24a2b685150c6711419879cf9d99b94dad24cff9244d8c2a890d3d7ec75502cd01fe58cff5b5d languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-module-imports@npm:7.18.6" +"@babel/helper-module-imports@npm:^7.18.6, @babel/helper-module-imports@npm:^7.21.4": + version: 7.21.4 + resolution: "@babel/helper-module-imports@npm:7.21.4" dependencies: - "@babel/types": ^7.18.6 - checksum: f393f8a3b3304b1b7a288a38c10989de754f01d29caf62ce7c4e5835daf0a27b81f3ac687d9d2780d39685aae7b55267324b512150e7b2be967b0c493b6a1def + "@babel/types": ^7.21.4 + checksum: bd330a2edaafeb281fbcd9357652f8d2666502567c0aad71db926e8499c773c9ea9c10dfaae30122452940326d90c8caff5c649ed8e1bf15b23f858758d3abc6 languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.12.1, @babel/helper-module-transforms@npm:^7.18.6, @babel/helper-module-transforms@npm:^7.19.6, @babel/helper-module-transforms@npm:^7.20.2": - version: 7.20.2 - resolution: "@babel/helper-module-transforms@npm:7.20.2" +"@babel/helper-module-transforms@npm:^7.18.6, @babel/helper-module-transforms@npm:^7.20.11, @babel/helper-module-transforms@npm:^7.21.2": + version: 7.21.2 + resolution: "@babel/helper-module-transforms@npm:7.21.2" dependencies: "@babel/helper-environment-visitor": ^7.18.9 "@babel/helper-module-imports": ^7.18.6 "@babel/helper-simple-access": ^7.20.2 "@babel/helper-split-export-declaration": ^7.18.6 "@babel/helper-validator-identifier": ^7.19.1 - "@babel/template": ^7.18.10 - "@babel/traverse": ^7.20.1 - "@babel/types": ^7.20.2 - checksum: 33a60ca115f6fce2c9d98e2a2e5649498aa7b23e2ae3c18745d7a021487708fc311458c33542f299387a0da168afccba94116e077f2cce49ae9e5ab83399e8a2 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.21.2 + "@babel/types": ^7.21.2 + checksum: 8a1c129a4f90bdf97d8b6e7861732c9580f48f877aaaafbc376ce2482febebcb8daaa1de8bc91676d12886487603f8c62a44f9e90ee76d6cac7f9225b26a49e1 languageName: node linkType: hard @@ -412,13 +391,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:7.10.4": - version: 7.10.4 - resolution: "@babel/helper-plugin-utils@npm:7.10.4" - checksum: 639ed8fc462b97a83226cee6bb081b1d77e7f73e8b033d2592ed107ee41d96601e321e5ea53a33e47469c7f1146b250a3dcda5ab873c7de162ab62120c341a41 - languageName: node - linkType: hard - "@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": version: 7.20.2 resolution: "@babel/helper-plugin-utils@npm:7.20.2" @@ -426,7 +398,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-remap-async-to-generator@npm:^7.18.6, @babel/helper-remap-async-to-generator@npm:^7.18.9": +"@babel/helper-remap-async-to-generator@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-remap-async-to-generator@npm:7.18.9" dependencies: @@ -440,20 +412,21 @@ __metadata: languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.18.6, @babel/helper-replace-supers@npm:^7.19.1": - version: 7.19.1 - resolution: "@babel/helper-replace-supers@npm:7.19.1" +"@babel/helper-replace-supers@npm:^7.18.6, @babel/helper-replace-supers@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/helper-replace-supers@npm:7.20.7" dependencies: "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-member-expression-to-functions": ^7.18.9 + "@babel/helper-member-expression-to-functions": ^7.20.7 "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/traverse": ^7.19.1 - "@babel/types": ^7.19.0 - checksum: a0e4bf79ebe7d2bb5947169e47a0b4439c73fb0ec57d446cf3ea81b736721129ec373c3f94d2ebd2716b26dd65f8e6c083dac898170d42905e7ba815a2f52c25 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.20.7 + "@babel/types": ^7.20.7 + checksum: b8e0087c9b0c1446e3c6f3f72b73b7e03559c6b570e2cfbe62c738676d9ebd8c369a708cf1a564ef88113b4330750a50232ee1131d303d478b7a5e65e46fbc7c languageName: node linkType: hard -"@babel/helper-simple-access@npm:^7.19.4, @babel/helper-simple-access@npm:^7.20.2": +"@babel/helper-simple-access@npm:^7.20.2": version: 7.20.2 resolution: "@babel/helper-simple-access@npm:7.20.2" dependencies: @@ -462,7 +435,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.18.9": +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0": version: 7.20.0 resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.20.0" dependencies: @@ -494,10 +467,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-validator-option@npm:7.18.6" - checksum: f9cc6eb7cc5d759c5abf006402180f8d5e4251e9198197428a97e05d65eb2f8ae5a0ce73b1dfd2d35af41d0eb780627a64edf98a4e71f064eeeacef8de58f2cf +"@babel/helper-validator-option@npm:^7.18.6, @babel/helper-validator-option@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/helper-validator-option@npm:7.21.0" + checksum: 8ece4c78ffa5461fd8ab6b6e57cc51afad59df08192ed5d84b475af4a7193fc1cb794b59e3e7be64f3cdc4df7ac78bf3dbb20c129d7757ae078e6279ff8c2f07 languageName: node linkType: hard @@ -513,14 +486,14 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.12.5, @babel/helpers@npm:^7.20.5": - version: 7.20.6 - resolution: "@babel/helpers@npm:7.20.6" +"@babel/helpers@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/helpers@npm:7.21.0" dependencies: - "@babel/template": ^7.18.10 - "@babel/traverse": ^7.20.5 - "@babel/types": ^7.20.5 - checksum: f03ec6eb2bf8dc7cdfe2569ee421fd9ba6c7bac6c862d90b608ccdd80281ebe858bc56ca175fc92b3ac50f63126b66bbd5ec86f9f361729289a20054518f1ac5 + "@babel/template": ^7.20.7 + "@babel/traverse": ^7.21.0 + "@babel/types": ^7.21.0 + checksum: 9370dad2bb665c551869a08ac87c8bdafad53dbcdce1f5c5d498f51811456a3c005d9857562715151a0f00b2e912ac8d89f56574f837b5689f5f5072221cdf54 languageName: node linkType: hard @@ -535,12 +508,12 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.12.7, @babel/parser@npm:^7.18.10, @babel/parser@npm:^7.18.8, @babel/parser@npm:^7.20.5": - version: 7.20.5 - resolution: "@babel/parser@npm:7.20.5" +"@babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.2, @babel/parser@npm:^7.21.4": + version: 7.21.4 + resolution: "@babel/parser@npm:7.21.4" bin: parser: ./bin/babel-parser.js - checksum: e8d514ce0aa74d56725bd102919a49fa367afef9cd8208cf52f670f54b061c4672f51b4b7980058ab1f5fe73615fe4dc90720ab47bbcebae07ad08d667eda318 + checksum: de610ecd1bff331766d0c058023ca11a4f242bfafefc42caf926becccfb6756637d167c001987ca830dd4b34b93c629a4cef63f8c8c864a8564cdfde1989ac77 languageName: node linkType: hard @@ -555,30 +528,30 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.18.9" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.20.7" dependencies: - "@babel/helper-plugin-utils": ^7.18.9 - "@babel/helper-skip-transparent-expression-wrappers": ^7.18.9 - "@babel/plugin-proposal-optional-chaining": ^7.18.9 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 + "@babel/plugin-proposal-optional-chaining": ^7.20.7 peerDependencies: "@babel/core": ^7.13.0 - checksum: 93abb5cb179a13db171bfc2cdf79489598f43c50cc174f97a2b7bb1d44d24ade7109665a20cf4e317ad6c1c730f036f06478f7c7e789b4240be1abdb60d6452f + checksum: d610f532210bee5342f5b44a12395ccc6d904e675a297189bc1e401cc185beec09873da523466d7fec34ae1574f7a384235cba1ccc9fe7b89ba094167897c845 languageName: node linkType: hard -"@babel/plugin-proposal-async-generator-functions@npm:^7.20.1": - version: 7.20.1 - resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.20.1" +"@babel/plugin-proposal-async-generator-functions@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.20.7" dependencies: "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-plugin-utils": ^7.19.0 + "@babel/helper-plugin-utils": ^7.20.2 "@babel/helper-remap-async-to-generator": ^7.18.9 "@babel/plugin-syntax-async-generators": ^7.8.4 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 518483a68c5618932109913eb7316ed5e656c575cbd9d22667bc0451e35a1be45f8eaeb8e2065834b36c8a93c4840f78cebf8f1d067b07c422f7be16d58eca60 + checksum: 111109ee118c9e69982f08d5e119eab04190b36a0f40e22e873802d941956eee66d2aa5a15f5321e51e3f9aa70a91136451b987fe15185ef8cc547ac88937723 languageName: node linkType: hard @@ -594,16 +567,16 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-class-static-block@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-class-static-block@npm:7.18.6" +"@babel/plugin-proposal-class-static-block@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/plugin-proposal-class-static-block@npm:7.21.0" dependencies: - "@babel/helper-create-class-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-create-class-features-plugin": ^7.21.0 + "@babel/helper-plugin-utils": ^7.20.2 "@babel/plugin-syntax-class-static-block": ^7.14.5 peerDependencies: "@babel/core": ^7.12.0 - checksum: b8d7ae99ed5ad784f39e7820e3ac03841f91d6ed60ab4a98c61d6112253da36013e12807bae4ffed0ef3cb318e47debac112ed614e03b403fb8b075b09a828ee + checksum: 236c0ad089e7a7acab776cc1d355330193314bfcd62e94e78f2df35817c6144d7e0e0368976778afd6b7c13e70b5068fa84d7abbf967d4f182e60d03f9ef802b languageName: node linkType: hard @@ -643,15 +616,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-logical-assignment-operators@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-proposal-logical-assignment-operators@npm:7.18.9" +"@babel/plugin-proposal-logical-assignment-operators@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/plugin-proposal-logical-assignment-operators@npm:7.20.7" dependencies: - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-plugin-utils": ^7.20.2 "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: dd87fa4a48c6408c5e85dbd6405a65cc8fe909e3090030df46df90df64cdf3e74007381a58ed87608778ee597eff7395d215274009bb3f5d8964b2db5557754f + checksum: cdd7b8136cc4db3f47714d5266f9e7b592a2ac5a94a5878787ce08890e97c8ab1ca8e94b27bfeba7b0f2b1549a026d9fc414ca2196de603df36fb32633bbdc19 languageName: node linkType: hard @@ -679,31 +652,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-object-rest-spread@npm:7.12.1": - version: 7.12.1 - resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.12.1" +"@babel/plugin-proposal-object-rest-spread@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.20.7" dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - "@babel/plugin-syntax-object-rest-spread": ^7.8.0 - "@babel/plugin-transform-parameters": ^7.12.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 221a41630c9a7162bf0416c71695b3f7f38482078a1d0d3af7abdc4f07ea1c9feed890399158d56c1d0278c971fe6f565ce822e9351e4481f7d98e9ff735dced - languageName: node - linkType: hard - -"@babel/plugin-proposal-object-rest-spread@npm:^7.20.2": - version: 7.20.2 - resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.20.2" - dependencies: - "@babel/compat-data": ^7.20.1 - "@babel/helper-compilation-targets": ^7.20.0 + "@babel/compat-data": ^7.20.5 + "@babel/helper-compilation-targets": ^7.20.7 "@babel/helper-plugin-utils": ^7.20.2 "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-transform-parameters": ^7.20.1 + "@babel/plugin-transform-parameters": ^7.20.7 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 9764d1a4735fcd384fdb9b6c6ccb20d1bea2f88f648640d26ce5d9cd5880ce1e389d2f852d7bea7e86ff343726225dc16e1deb92c7b3dc5c5721ed905a602318 + checksum: 1329db17009964bc644484c660eab717cb3ca63ac0ab0f67c651a028d1bc2ead51dc4064caea283e46994f1b7221670a35cbc0b4beb6273f55e915494b5aa0b2 languageName: node linkType: hard @@ -719,16 +679,16 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-optional-chaining@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-proposal-optional-chaining@npm:7.18.9" +"@babel/plugin-proposal-optional-chaining@npm:^7.20.7, @babel/plugin-proposal-optional-chaining@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/plugin-proposal-optional-chaining@npm:7.21.0" dependencies: - "@babel/helper-plugin-utils": ^7.18.9 - "@babel/helper-skip-transparent-expression-wrappers": ^7.18.9 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 "@babel/plugin-syntax-optional-chaining": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f2db40e26172f07c50b635cb61e1f36165de3ba868fcf608d967642f0d044b7c6beb0e7ecf17cbd421144b99e1eae7ad6031ded92925343bb0ed1d08707b514f + checksum: 11c5449e01b18bb8881e8e005a577fa7be2fe5688e2382c8822d51f8f7005342a301a46af7b273b1f5645f9a7b894c428eee8526342038a275ef6ba4c8d8d746 languageName: node linkType: hard @@ -744,17 +704,17 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-private-property-in-object@npm:^7.18.6": - version: 7.20.5 - resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.20.5" +"@babel/plugin-proposal-private-property-in-object@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-create-class-features-plugin": ^7.20.5 + "@babel/helper-create-class-features-plugin": ^7.21.0 "@babel/helper-plugin-utils": ^7.20.2 "@babel/plugin-syntax-private-property-in-object": ^7.14.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 513b5e0e2c1b2846be5336cf680e932ae17924ef885aa1429e1a4f7924724bdd99b15f28d67187d0a006d5f18a0c4b61d96c3ecb4902fed3c8fe2f0abfc9753a + checksum: add881a6a836635c41d2710551fdf777e2c07c0b691bf2baacc5d658dd64107479df1038680d6e67c468bfc6f36fb8920025d6bac2a1df0a81b867537d40ae78 languageName: node linkType: hard @@ -847,25 +807,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:7.12.1": - version: 7.12.1 - resolution: "@babel/plugin-syntax-jsx@npm:7.12.1" +"@babel/plugin-syntax-jsx@npm:^7.18.6, @babel/plugin-syntax-jsx@npm:^7.21.4": + version: 7.21.4 + resolution: "@babel/plugin-syntax-jsx@npm:7.21.4" dependencies: - "@babel/helper-plugin-utils": ^7.10.4 + "@babel/helper-plugin-utils": ^7.20.2 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d4b9b589c484b2e0856799770f060dff34c67b24d7f4526f66309a0e0e9cf388a5c1f2c0da329d1973cc87d1b2cede8f3dc8facfac59e785d6393a003bcdd0f9 - languageName: node - linkType: hard - -"@babel/plugin-syntax-jsx@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-syntax-jsx@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 6d37ea972970195f1ffe1a54745ce2ae456e0ac6145fae9aa1480f297248b262ea6ebb93010eddb86ebfacb94f57c05a1fc5d232b9a67325b09060299d515c67 + checksum: bb7309402a1d4e155f32aa0cf216e1fa8324d6c4cfd248b03280028a015a10e46b6efd6565f515f8913918a3602b39255999c06046f7d4b8a5106be2165d724a languageName: node linkType: hard @@ -902,7 +851,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-object-rest-spread@npm:7.8.3, @babel/plugin-syntax-object-rest-spread@npm:^7.8.0, @babel/plugin-syntax-object-rest-spread@npm:^7.8.3": +"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": version: 7.8.3 resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" dependencies: @@ -968,27 +917,27 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.18.6" +"@babel/plugin-transform-arrow-functions@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.20.7" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.20.2 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 900f5c695755062b91eec74da6f9092f40b8fada099058b92576f1e23c55e9813ec437051893a9b3c05cefe39e8ac06303d4a91b384e1c03dd8dc1581ea11602 + checksum: b43cabe3790c2de7710abe32df9a30005eddb2050dadd5d122c6872f679e5710e410f1b90c8f99a2aff7b614cccfecf30e7fd310236686f60d3ed43fd80b9847 languageName: node linkType: hard -"@babel/plugin-transform-async-to-generator@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.18.6" +"@babel/plugin-transform-async-to-generator@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.20.7" dependencies: "@babel/helper-module-imports": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/helper-remap-async-to-generator": ^7.18.6 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-remap-async-to-generator": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c2cca47468cf1aeefdc7ec35d670e195c86cee4de28a1970648c46a88ce6bd1806ef0bab27251b9e7fb791bb28a64dcd543770efd899f28ee5f7854e64e873d3 + checksum: fe9ee8a5471b4317c1b9ea92410ace8126b52a600d7cfbfe1920dcac6fb0fad647d2e08beb4fd03c630eb54430e6c72db11e283e3eddc49615c68abd39430904 languageName: node linkType: hard @@ -1003,55 +952,56 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.20.2": - version: 7.20.5 - resolution: "@babel/plugin-transform-block-scoping@npm:7.20.5" +"@babel/plugin-transform-block-scoping@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/plugin-transform-block-scoping@npm:7.21.0" dependencies: "@babel/helper-plugin-utils": ^7.20.2 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 03606bc6710c15cd4e4d1163e1cbab08799f852a5dd55a1f7e115032e9406ac9430ddc0cb6d09a51a4095446985640411f60683c6fcea9bc1a7b202462022e1c + checksum: 15aacaadbecf96b53a750db1be4990b0d89c7f5bc3e1794b63b49fb219638c1fd25d452d15566d7e5ddf5b5f4e1a0a0055c35c1c7aee323c7b114bf49f66f4b0 languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.20.2": - version: 7.20.2 - resolution: "@babel/plugin-transform-classes@npm:7.20.2" +"@babel/plugin-transform-classes@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/plugin-transform-classes@npm:7.21.0" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-compilation-targets": ^7.20.0 + "@babel/helper-compilation-targets": ^7.20.7 "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.19.0 + "@babel/helper-function-name": ^7.21.0 "@babel/helper-optimise-call-expression": ^7.18.6 "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-replace-supers": ^7.19.1 + "@babel/helper-replace-supers": ^7.20.7 "@babel/helper-split-export-declaration": ^7.18.6 globals: ^11.1.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 57f3467a8eb7853cdb61cda963cfb6c6568ad276d77c9de2ff5a2194650010217aa318ef3733975537c6fb906b73a019afb6ea650b01852e7d2e1fab4034361b + checksum: 088ae152074bd0e90f64659169255bfe50393e637ec8765cb2a518848b11b0299e66b91003728fd0a41563a6fdc6b8d548ece698a314fd5447f5489c22e466b7 languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-computed-properties@npm:7.18.9" +"@babel/plugin-transform-computed-properties@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/plugin-transform-computed-properties@npm:7.20.7" dependencies: - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/template": ^7.20.7 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: a6bfbea207827d77592628973c0e8cc3319db636506bdc6e81e21582de2e767890e6975b382d0511e9ec3773b9f43691185df90832883bbf9251f688d27fbc1d + checksum: be70e54bda8b469146459f429e5f2bd415023b87b2d5af8b10e48f465ffb02847a3ed162ca60378c004b82db848e4d62e90010d41ded7e7176b6d8d1c2911139 languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.20.2": - version: 7.20.2 - resolution: "@babel/plugin-transform-destructuring@npm:7.20.2" +"@babel/plugin-transform-destructuring@npm:^7.21.3": + version: 7.21.3 + resolution: "@babel/plugin-transform-destructuring@npm:7.21.3" dependencies: "@babel/helper-plugin-utils": ^7.20.2 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 09033e09b28ca1b0d46a8d82f5a677b1d718a739b3c199886908c3ef1af23369317d0c429b21507d480ee82721c15892a9893be18e50ad6fc219e69312f4b097 + checksum: 43ebbe0bfa20287e34427be7c2200ce096c20913775ea75268fb47fe0e55f9510800587e6052c42fe6dffa0daaad95dd465c3e312fd1ef9785648384c45417ac languageName: node linkType: hard @@ -1090,14 +1040,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.18.8": - version: 7.18.8 - resolution: "@babel/plugin-transform-for-of@npm:7.18.8" +"@babel/plugin-transform-for-of@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/plugin-transform-for-of@npm:7.21.0" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-plugin-utils": ^7.20.2 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: ca64c623cf0c7a80ab6f07ebd3e6e4ade95e2ae806696f70b43eafe6394fa8ce21f2b1ffdd15df2067f7363d2ecfe26472a97c6c774403d2163fa05f50c98f17 + checksum: 2f3f86ca1fab2929fcda6a87e4303d5c635b5f96dc9a45fd4ca083308a3020c79ac33b9543eb4640ef2b79f3586a00ab2d002a7081adb9e9d7440dce30781034 languageName: node linkType: hard @@ -1136,42 +1086,42 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-amd@npm:^7.19.6": - version: 7.19.6 - resolution: "@babel/plugin-transform-modules-amd@npm:7.19.6" +"@babel/plugin-transform-modules-amd@npm:^7.20.11": + version: 7.20.11 + resolution: "@babel/plugin-transform-modules-amd@npm:7.20.11" dependencies: - "@babel/helper-module-transforms": ^7.19.6 - "@babel/helper-plugin-utils": ^7.19.0 + "@babel/helper-module-transforms": ^7.20.11 + "@babel/helper-plugin-utils": ^7.20.2 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4236aad970025bc10c772c1589b1e2eab8b7681933bb5ffa6e395d4c1a52532b28c47c553e3011b4272ea81e5ab39fe969eb5349584e8390e59771055c467d42 + checksum: 23665c1c20c8f11c89382b588fb9651c0756d130737a7625baeaadbd3b973bc5bfba1303bedffa8fb99db1e6d848afb01016e1df2b69b18303e946890c790001 languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.19.6": - version: 7.19.6 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.19.6" +"@babel/plugin-transform-modules-commonjs@npm:^7.21.2": + version: 7.21.2 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.21.2" dependencies: - "@babel/helper-module-transforms": ^7.19.6 - "@babel/helper-plugin-utils": ^7.19.0 - "@babel/helper-simple-access": ^7.19.4 + "@babel/helper-module-transforms": ^7.21.2 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-simple-access": ^7.20.2 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 85d46945ab5ba3fff89e962d560a5d40253f228b9659a697683db3de07c0236e8cd60e5eb41958007359951a42bc268bf32350fcdb5b4a86f58dff1e032c096e + checksum: 65aa06e3e3792f39b99eb5f807034693ff0ecf80438580f7ae504f4c4448ef04147b1889ea5e6f60f3ad4a12ebbb57c6f1f979a249dadbd8d11fe22f4441918b languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.19.6": - version: 7.19.6 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.19.6" +"@babel/plugin-transform-modules-systemjs@npm:^7.20.11": + version: 7.20.11 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.20.11" dependencies: "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-module-transforms": ^7.19.6 - "@babel/helper-plugin-utils": ^7.19.0 + "@babel/helper-module-transforms": ^7.20.11 + "@babel/helper-plugin-utils": ^7.20.2 "@babel/helper-validator-identifier": ^7.19.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 8526431cc81ea3eb232ad50862d0ed1cbb422b5251d14a8d6610d0ca0617f6e75f35179e98eb1235d0cccb980120350b9f112594e5646dd45378d41eaaf87342 + checksum: 4546c47587f88156d66c7eb7808e903cf4bb3f6ba6ac9bc8e3af2e29e92eb9f0b3f44d52043bfd24eb25fa7827fd7b6c8bfeac0cac7584e019b87e1ecbd0e673 languageName: node linkType: hard @@ -1187,7 +1137,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.19.1": +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.20.5": version: 7.20.5 resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.20.5" dependencies: @@ -1222,14 +1172,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.12.1, @babel/plugin-transform-parameters@npm:^7.20.1": - version: 7.20.5 - resolution: "@babel/plugin-transform-parameters@npm:7.20.5" +"@babel/plugin-transform-parameters@npm:^7.20.7, @babel/plugin-transform-parameters@npm:^7.21.3": + version: 7.21.3 + resolution: "@babel/plugin-transform-parameters@npm:7.21.3" dependencies: "@babel/helper-plugin-utils": ^7.20.2 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: fa588b0d8551e3e0cfde5fcb9d63a7acd38da199bee1851dd7e2abb34b3d754684defb1209a5669ecf0076d3d17ddc375b3f107da770b550a30402e4b9d7aa2f + checksum: c92128d7b1fcf54e2cab186c196bbbf55a9a6de11a83328dc2602649c9dc6d16ef73712beecd776cd49bfdc624b5f56740f4a53568d3deb9505ec666bc869da3 languageName: node linkType: hard @@ -1304,7 +1254,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.18.6": +"@babel/plugin-transform-regenerator@npm:^7.20.5": version: 7.20.5 resolution: "@babel/plugin-transform-regenerator@npm:7.20.5" dependencies: @@ -1327,19 +1277,19 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-runtime@npm:^7.18.6": - version: 7.19.6 - resolution: "@babel/plugin-transform-runtime@npm:7.19.6" +"@babel/plugin-transform-runtime@npm:^7.21.0": + version: 7.21.4 + resolution: "@babel/plugin-transform-runtime@npm:7.21.4" dependencies: - "@babel/helper-module-imports": ^7.18.6 - "@babel/helper-plugin-utils": ^7.19.0 + "@babel/helper-module-imports": ^7.21.4 + "@babel/helper-plugin-utils": ^7.20.2 babel-plugin-polyfill-corejs2: ^0.3.3 babel-plugin-polyfill-corejs3: ^0.6.0 babel-plugin-polyfill-regenerator: ^0.4.1 semver: ^6.3.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: ef93efbcbb00dcf4da6dcc55bda698a2a57fca3fb05a6a13e932ecfdb7c1c5d2f0b5b245c1c4faca0318853937caba0d82442f58b7653249f64275d08052fbd8 + checksum: 7e2e6b0d6f9762fde58738829e4d3b5e13dc88ccc1463e4eee83c8d8f50238eeb8e3699923f5ad4d7edf597515f74d67fbb14eb330225075fc7733b547e22145 languageName: node linkType: hard @@ -1354,15 +1304,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.19.0": - version: 7.19.0 - resolution: "@babel/plugin-transform-spread@npm:7.19.0" +"@babel/plugin-transform-spread@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/plugin-transform-spread@npm:7.20.7" dependencies: - "@babel/helper-plugin-utils": ^7.19.0 - "@babel/helper-skip-transparent-expression-wrappers": ^7.18.9 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: e73a4deb095999185e70b524d0ff4e35df50fcda58299e700a6149a15bbc1a9b369ef1cef384e15a54b3c3ce316cc0f054dbf249dcd0d1ca59f4281dd4df9718 + checksum: 8ea698a12da15718aac7489d4cde10beb8a3eea1f66167d11ab1e625033641e8b328157fd1a0b55dd6531933a160c01fc2e2e61132a385cece05f26429fd0cc2 languageName: node linkType: hard @@ -1399,16 +1349,17 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.18.6": - version: 7.20.2 - resolution: "@babel/plugin-transform-typescript@npm:7.20.2" +"@babel/plugin-transform-typescript@npm:^7.21.3": + version: 7.21.3 + resolution: "@babel/plugin-transform-typescript@npm:7.21.3" dependencies: - "@babel/helper-create-class-features-plugin": ^7.20.2 + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-create-class-features-plugin": ^7.21.0 "@babel/helper-plugin-utils": ^7.20.2 "@babel/plugin-syntax-typescript": ^7.20.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 14434eb77cb3c8c4187a055eabdd5ff8b3e90a37ac95ecc7c9007ea8fc5660e0652c445646a2a25836a02d91944e0dc1e8b58ef55b063a901e54a24fdb4168af + checksum: c16fd577bf43f633deb76fca2a8527d8ae25968c8efdf327c1955472c3e0257e62992473d1ad7f9ee95379ce2404699af405ea03346055adadd3478ad0ecd117 languageName: node linkType: hard @@ -1435,30 +1386,30 @@ __metadata: languageName: node linkType: hard -"@babel/preset-env@npm:^7.18.6, @babel/preset-env@npm:^7.19.4": - version: 7.20.2 - resolution: "@babel/preset-env@npm:7.20.2" +"@babel/preset-env@npm:^7.19.4, @babel/preset-env@npm:^7.20.2": + version: 7.21.4 + resolution: "@babel/preset-env@npm:7.21.4" dependencies: - "@babel/compat-data": ^7.20.1 - "@babel/helper-compilation-targets": ^7.20.0 + "@babel/compat-data": ^7.21.4 + "@babel/helper-compilation-targets": ^7.21.4 "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-validator-option": ^7.18.6 + "@babel/helper-validator-option": ^7.21.0 "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.18.6 - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.18.9 - "@babel/plugin-proposal-async-generator-functions": ^7.20.1 + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.20.7 + "@babel/plugin-proposal-async-generator-functions": ^7.20.7 "@babel/plugin-proposal-class-properties": ^7.18.6 - "@babel/plugin-proposal-class-static-block": ^7.18.6 + "@babel/plugin-proposal-class-static-block": ^7.21.0 "@babel/plugin-proposal-dynamic-import": ^7.18.6 "@babel/plugin-proposal-export-namespace-from": ^7.18.9 "@babel/plugin-proposal-json-strings": ^7.18.6 - "@babel/plugin-proposal-logical-assignment-operators": ^7.18.9 + "@babel/plugin-proposal-logical-assignment-operators": ^7.20.7 "@babel/plugin-proposal-nullish-coalescing-operator": ^7.18.6 "@babel/plugin-proposal-numeric-separator": ^7.18.6 - "@babel/plugin-proposal-object-rest-spread": ^7.20.2 + "@babel/plugin-proposal-object-rest-spread": ^7.20.7 "@babel/plugin-proposal-optional-catch-binding": ^7.18.6 - "@babel/plugin-proposal-optional-chaining": ^7.18.9 + "@babel/plugin-proposal-optional-chaining": ^7.21.0 "@babel/plugin-proposal-private-methods": ^7.18.6 - "@babel/plugin-proposal-private-property-in-object": ^7.18.6 + "@babel/plugin-proposal-private-property-in-object": ^7.21.0 "@babel/plugin-proposal-unicode-property-regex": ^7.18.6 "@babel/plugin-syntax-async-generators": ^7.8.4 "@babel/plugin-syntax-class-properties": ^7.12.13 @@ -1475,40 +1426,40 @@ __metadata: "@babel/plugin-syntax-optional-chaining": ^7.8.3 "@babel/plugin-syntax-private-property-in-object": ^7.14.5 "@babel/plugin-syntax-top-level-await": ^7.14.5 - "@babel/plugin-transform-arrow-functions": ^7.18.6 - "@babel/plugin-transform-async-to-generator": ^7.18.6 + "@babel/plugin-transform-arrow-functions": ^7.20.7 + "@babel/plugin-transform-async-to-generator": ^7.20.7 "@babel/plugin-transform-block-scoped-functions": ^7.18.6 - "@babel/plugin-transform-block-scoping": ^7.20.2 - "@babel/plugin-transform-classes": ^7.20.2 - "@babel/plugin-transform-computed-properties": ^7.18.9 - "@babel/plugin-transform-destructuring": ^7.20.2 + "@babel/plugin-transform-block-scoping": ^7.21.0 + "@babel/plugin-transform-classes": ^7.21.0 + "@babel/plugin-transform-computed-properties": ^7.20.7 + "@babel/plugin-transform-destructuring": ^7.21.3 "@babel/plugin-transform-dotall-regex": ^7.18.6 "@babel/plugin-transform-duplicate-keys": ^7.18.9 "@babel/plugin-transform-exponentiation-operator": ^7.18.6 - "@babel/plugin-transform-for-of": ^7.18.8 + "@babel/plugin-transform-for-of": ^7.21.0 "@babel/plugin-transform-function-name": ^7.18.9 "@babel/plugin-transform-literals": ^7.18.9 "@babel/plugin-transform-member-expression-literals": ^7.18.6 - "@babel/plugin-transform-modules-amd": ^7.19.6 - "@babel/plugin-transform-modules-commonjs": ^7.19.6 - "@babel/plugin-transform-modules-systemjs": ^7.19.6 + "@babel/plugin-transform-modules-amd": ^7.20.11 + "@babel/plugin-transform-modules-commonjs": ^7.21.2 + "@babel/plugin-transform-modules-systemjs": ^7.20.11 "@babel/plugin-transform-modules-umd": ^7.18.6 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.19.1 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.20.5 "@babel/plugin-transform-new-target": ^7.18.6 "@babel/plugin-transform-object-super": ^7.18.6 - "@babel/plugin-transform-parameters": ^7.20.1 + "@babel/plugin-transform-parameters": ^7.21.3 "@babel/plugin-transform-property-literals": ^7.18.6 - "@babel/plugin-transform-regenerator": ^7.18.6 + "@babel/plugin-transform-regenerator": ^7.20.5 "@babel/plugin-transform-reserved-words": ^7.18.6 "@babel/plugin-transform-shorthand-properties": ^7.18.6 - "@babel/plugin-transform-spread": ^7.19.0 + "@babel/plugin-transform-spread": ^7.20.7 "@babel/plugin-transform-sticky-regex": ^7.18.6 "@babel/plugin-transform-template-literals": ^7.18.9 "@babel/plugin-transform-typeof-symbol": ^7.18.9 "@babel/plugin-transform-unicode-escapes": ^7.18.10 "@babel/plugin-transform-unicode-regex": ^7.18.6 "@babel/preset-modules": ^0.1.5 - "@babel/types": ^7.20.2 + "@babel/types": ^7.21.4 babel-plugin-polyfill-corejs2: ^0.3.3 babel-plugin-polyfill-corejs3: ^0.6.0 babel-plugin-polyfill-regenerator: ^0.4.1 @@ -1516,7 +1467,7 @@ __metadata: semver: ^6.3.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: ece2d7e9c7789db6116e962b8e1a55eb55c110c44c217f0c8f6ffea4ca234954e66557f7bd019b7affadf7fbb3a53ccc807e93fc935aacd48146234b73b6947e + checksum: 1e328674c4b39e985fa81e5a8eee9aaab353dea4ff1f28f454c5e27a6498c762e25d42e827f5bfc9d7acf6c9b8bc317b5283aa7c83d9fd03c1a89e5c08f334f9 languageName: node linkType: hard @@ -1551,75 +1502,77 @@ __metadata: languageName: node linkType: hard -"@babel/preset-typescript@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/preset-typescript@npm:7.18.6" +"@babel/preset-typescript@npm:^7.18.6, @babel/preset-typescript@npm:^7.21.0": + version: 7.21.4 + resolution: "@babel/preset-typescript@npm:7.21.4" dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/helper-validator-option": ^7.18.6 - "@babel/plugin-transform-typescript": ^7.18.6 + "@babel/helper-plugin-utils": ^7.20.2 + "@babel/helper-validator-option": ^7.21.0 + "@babel/plugin-syntax-jsx": ^7.21.4 + "@babel/plugin-transform-modules-commonjs": ^7.21.2 + "@babel/plugin-transform-typescript": ^7.21.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 7fe0da5103eb72d3cf39cf3e138a794c8cdd19c0b38e3e101507eef519c46a87a0d6d0e8bc9e28a13ea2364001ebe7430b9d75758aab4c3c3a8db9a487b9dc7c + checksum: 83b2f2bf7be3a970acd212177525f58bbb1f2e042b675a47d021a675ae27cf00b6b6babfaf3ae5c980592c9ed1b0712e5197796b691905d25c99f9006478ea06 languageName: node linkType: hard -"@babel/runtime-corejs3@npm:^7.18.6": - version: 7.20.6 - resolution: "@babel/runtime-corejs3@npm:7.20.6" +"@babel/runtime-corejs3@npm:^7.21.0": + version: 7.21.0 + resolution: "@babel/runtime-corejs3@npm:7.21.0" dependencies: core-js-pure: ^3.25.1 regenerator-runtime: ^0.13.11 - checksum: d533d432216509426c4f9dad56db2fe453112b7d738433111944372fba4abd0b07bee3261f19a218530b435de46592121b2a6a57b98c0c7c3452d552ba009c3e + checksum: a47927671672b1e1644771458f804e03802303eeffcafd55f85cb121d3d3ca33032cc2fe68e086e3de6923049343d0aa599fc3eb3ad5749e30646e2a2ef6f11d languageName: node linkType: hard -"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.10.3, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.8.4": - version: 7.20.6 - resolution: "@babel/runtime@npm:7.20.6" +"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.10.3, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.8.4": + version: 7.21.0 + resolution: "@babel/runtime@npm:7.21.0" dependencies: regenerator-runtime: ^0.13.11 - checksum: 42a8504db21031b1859fbc0f52d698a3d2f5ada9519eb76c6f96a7e657d8d555732a18fe71ef428a67cc9fc81ca0d3562fb7afdc70549c5fec343190cbaa9b03 + checksum: 7b33e25bfa9e0e1b9e8828bb61b2d32bdd46b41b07ba7cb43319ad08efc6fda8eb89445193e67d6541814627df0ca59122c0ea795e412b99c5183a0540d338ab languageName: node linkType: hard -"@babel/template@npm:^7.12.7, @babel/template@npm:^7.18.10": - version: 7.18.10 - resolution: "@babel/template@npm:7.18.10" +"@babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7": + version: 7.20.7 + resolution: "@babel/template@npm:7.20.7" dependencies: "@babel/code-frame": ^7.18.6 - "@babel/parser": ^7.18.10 - "@babel/types": ^7.18.10 - checksum: 93a6aa094af5f355a72bd55f67fa1828a046c70e46f01b1606e6118fa1802b6df535ca06be83cc5a5e834022be95c7b714f0a268b5f20af984465a71e28f1473 + "@babel/parser": ^7.20.7 + "@babel/types": ^7.20.7 + checksum: 2eb1a0ab8d415078776bceb3473d07ab746e6bb4c2f6ca46ee70efb284d75c4a32bb0cd6f4f4946dec9711f9c0780e8e5d64b743208deac6f8e9858afadc349e languageName: node linkType: hard -"@babel/traverse@npm:^7.12.9, @babel/traverse@npm:^7.18.8, @babel/traverse@npm:^7.19.1, @babel/traverse@npm:^7.20.1, @babel/traverse@npm:^7.20.5": - version: 7.20.5 - resolution: "@babel/traverse@npm:7.20.5" +"@babel/traverse@npm:^7.20.5, @babel/traverse@npm:^7.20.7, @babel/traverse@npm:^7.21.0, @babel/traverse@npm:^7.21.2, @babel/traverse@npm:^7.21.4": + version: 7.21.4 + resolution: "@babel/traverse@npm:7.21.4" dependencies: - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.20.5 + "@babel/code-frame": ^7.21.4 + "@babel/generator": ^7.21.4 "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.19.0 + "@babel/helper-function-name": ^7.21.0 "@babel/helper-hoist-variables": ^7.18.6 "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.20.5 - "@babel/types": ^7.20.5 + "@babel/parser": ^7.21.4 + "@babel/types": ^7.21.4 debug: ^4.1.0 globals: ^11.1.0 - checksum: c7fed468614aab1cf762dda5df26e2cfcd2b1b448c9d3321ac44786c4ee773fb0e10357e6593c3c6a648ae2e0be6d90462d855998dc10e3abae84de99291e008 + checksum: f22f067c2d9b6497abf3d4e53ea71f3aa82a21f2ed434dd69b8c5767f11f2a4c24c8d2f517d2312c9e5248e5c69395fdca1c95a2b3286122c75f5783ddb6f53c languageName: node linkType: hard -"@babel/types@npm:^7.12.7, @babel/types@npm:^7.18.10, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.19.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.5, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.20.5 - resolution: "@babel/types@npm:7.20.5" +"@babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.19.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.5, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.0, @babel/types@npm:^7.21.2, @babel/types@npm:^7.21.4, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.21.4 + resolution: "@babel/types@npm:7.21.4" dependencies: "@babel/helper-string-parser": ^7.19.4 "@babel/helper-validator-identifier": ^7.19.1 to-fast-properties: ^2.0.0 - checksum: 773f0a1ad9f6ca5c5beaf751d1d8d81b9130de87689d1321fc911d73c3b1167326d66f0ae086a27fb5bfc8b4ee3ffebf1339be50d3b4d8015719692468c31f2d + checksum: 587bc55a91ce003b0f8aa10d70070f8006560d7dc0360dc0406d306a2cb2a10154e2f9080b9c37abec76907a90b330a536406cb75e6bdc905484f37b75c73219 languageName: node linkType: hard @@ -1630,20 +1583,27 @@ __metadata: languageName: node linkType: hard -"@docsearch/css@npm:3.3.0": - version: 3.3.0 - resolution: "@docsearch/css@npm:3.3.0" - checksum: 1cbf381fe0b454f933e736d04fe8a2d9f86c375022ef738b44d67a0b4c187b0d8fcb945a1ba5a404059e50e3968d9fe769de22779d071f6189f07c161239892c +"@discoveryjs/json-ext@npm:0.5.7": + version: 0.5.7 + resolution: "@discoveryjs/json-ext@npm:0.5.7" + checksum: 2176d301cc258ea5c2324402997cf8134ebb212469c0d397591636cea8d3c02f2b3cf9fd58dcb748c7a0dade77ebdc1b10284fa63e608c033a1db52fddc69918 languageName: node linkType: hard -"@docsearch/react@npm:^3.1.1": - version: 3.3.0 - resolution: "@docsearch/react@npm:3.3.0" +"@docsearch/css@npm:3.3.4": + version: 3.3.4 + resolution: "@docsearch/css@npm:3.3.4" + checksum: 56e3ae677423fa4cf508ffb964d0616862a4af22affad308f47edf5c1ad097a2b21187c53d240f83463c4e7add3cd60e3630022a68e2089bb3066bfbaded64a0 + languageName: node + linkType: hard + +"@docsearch/react@npm:^3.3.3": + version: 3.3.4 + resolution: "@docsearch/react@npm:3.3.4" dependencies: - "@algolia/autocomplete-core": 1.7.2 - "@algolia/autocomplete-preset-algolia": 1.7.2 - "@docsearch/css": 3.3.0 + "@algolia/autocomplete-core": 1.8.2 + "@algolia/autocomplete-preset-algolia": 1.8.2 + "@docsearch/css": 3.3.4 algoliasearch: ^4.0.0 peerDependencies: "@types/react": ">= 16.8.0 < 19.0.0" @@ -1656,83 +1616,83 @@ __metadata: optional: true react-dom: optional: true - checksum: 2bc4aa649fad3ff74e61537e674e658903c01509b2835827943f23895b40b7697476399179d43bc721f7e72044c797d4d793fcdaa394ff4f9fca1389a197a78c + checksum: 50f122f08c543711fffe8ba3b507311a01defef6db5d47401bd2b5c7759512357fa26d2a88a68b50916b9084fd922f7340ad03e479b4d60ac2e22b4a198dc06d languageName: node linkType: hard -"@docusaurus/core@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/core@npm:2.4.0" +"@docusaurus/core@npm:0.0.0-5566": + version: 0.0.0-5566 + resolution: "@docusaurus/core@npm:0.0.0-5566" dependencies: - "@babel/core": ^7.18.6 - "@babel/generator": ^7.18.7 + "@babel/core": ^7.20.12 + "@babel/generator": ^7.21.1 "@babel/plugin-syntax-dynamic-import": ^7.8.3 - "@babel/plugin-transform-runtime": ^7.18.6 - "@babel/preset-env": ^7.18.6 + "@babel/plugin-transform-runtime": ^7.21.0 + "@babel/preset-env": ^7.20.2 "@babel/preset-react": ^7.18.6 - "@babel/preset-typescript": ^7.18.6 - "@babel/runtime": ^7.18.6 - "@babel/runtime-corejs3": ^7.18.6 - "@babel/traverse": ^7.18.8 - "@docusaurus/cssnano-preset": 2.4.0 - "@docusaurus/logger": 2.4.0 - "@docusaurus/mdx-loader": 2.4.0 + "@babel/preset-typescript": ^7.21.0 + "@babel/runtime": ^7.21.0 + "@babel/runtime-corejs3": ^7.21.0 + "@babel/traverse": ^7.21.2 + "@docusaurus/cssnano-preset": 0.0.0-5566 + "@docusaurus/logger": 0.0.0-5566 + "@docusaurus/mdx-loader": 0.0.0-5566 "@docusaurus/react-loadable": 5.5.2 - "@docusaurus/utils": 2.4.0 - "@docusaurus/utils-common": 2.4.0 - "@docusaurus/utils-validation": 2.4.0 + "@docusaurus/utils": 0.0.0-5566 + "@docusaurus/utils-common": 0.0.0-5566 + "@docusaurus/utils-validation": 0.0.0-5566 "@slorber/static-site-generator-webpack-plugin": ^4.0.7 - "@svgr/webpack": ^6.2.1 - autoprefixer: ^10.4.7 - babel-loader: ^8.2.5 + "@svgr/webpack": ^6.5.1 + autoprefixer: ^10.4.13 + babel-loader: ^9.1.2 babel-plugin-dynamic-import-node: ^2.3.3 boxen: ^6.2.1 chalk: ^4.1.2 chokidar: ^3.5.3 - clean-css: ^5.3.0 - cli-table3: ^0.6.2 + clean-css: ^5.3.2 + cli-table3: ^0.6.3 combine-promises: ^1.1.0 commander: ^5.1.0 copy-webpack-plugin: ^11.0.0 - core-js: ^3.23.3 - css-loader: ^6.7.1 - css-minimizer-webpack-plugin: ^4.0.0 - cssnano: ^5.1.12 + core-js: ^3.29.0 + css-loader: ^6.7.3 + css-minimizer-webpack-plugin: ^4.2.2 + cssnano: ^5.1.15 del: ^6.1.1 - detect-port: ^1.3.0 + detect-port: ^1.5.1 escape-html: ^1.0.3 - eta: ^2.0.0 + eta: ^2.0.1 file-loader: ^6.2.0 - fs-extra: ^10.1.0 - html-minifier-terser: ^6.1.0 + fs-extra: ^11.1.0 + html-minifier-terser: ^7.1.0 html-tags: ^3.2.0 html-webpack-plugin: ^5.5.0 import-fresh: ^3.3.0 leven: ^3.1.0 lodash: ^4.17.21 - mini-css-extract-plugin: ^2.6.1 - postcss: ^8.4.14 - postcss-loader: ^7.0.0 + mini-css-extract-plugin: ^2.7.3 + postcss: ^8.4.21 + postcss-loader: ^7.0.2 prompts: ^2.4.2 react-dev-utils: ^12.0.1 react-helmet-async: ^1.3.0 react-loadable: "npm:@docusaurus/react-loadable@5.5.2" react-loadable-ssr-addon-v5-slorber: ^1.0.1 - react-router: ^5.3.3 + react-router: ^5.3.4 react-router-config: ^5.1.1 - react-router-dom: ^5.3.3 + react-router-dom: ^5.3.4 rtl-detect: ^1.0.4 - semver: ^7.3.7 - serve-handler: ^6.1.3 + semver: ^7.3.8 + serve-handler: ^6.1.5 shelljs: ^0.8.5 - terser-webpack-plugin: ^5.3.3 - tslib: ^2.4.0 - update-notifier: ^5.1.0 + terser-webpack-plugin: ^5.3.7 + tslib: ^2.5.0 + update-notifier: ^6.0.2 url-loader: ^4.1.1 - wait-on: ^6.0.1 - webpack: ^5.73.0 - webpack-bundle-analyzer: ^4.5.0 - webpack-dev-server: ^4.9.3 + wait-on: ^7.0.1 + webpack: ^5.76.0 + webpack-bundle-analyzer: ^4.8.0 + webpack-dev-server: ^4.11.1 webpack-merge: ^5.8.0 webpackbar: ^5.0.2 peerDependencies: @@ -1740,66 +1700,73 @@ __metadata: react-dom: ^16.8.4 || ^17.0.0 bin: docusaurus: bin/docusaurus.mjs - checksum: 04d30e31e9c4198ce3f4a47c4f59943f357ef96a5cfa10674fd3049d4cf067c15fa0ae184383ba3e420f59a9b3077ed1cf1f373626399f0e46cea6fcf0897d7b + checksum: c85ea103cd3a14dc340533d1cad0627736d87e4336b5919adabd23627958eed108fddb2dd45066944185ebe52a8648a4463a9587804f3a537f0a8deaea3e835e languageName: node linkType: hard -"@docusaurus/cssnano-preset@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/cssnano-preset@npm:2.4.0" +"@docusaurus/cssnano-preset@npm:0.0.0-5566": + version: 0.0.0-5566 + resolution: "@docusaurus/cssnano-preset@npm:0.0.0-5566" dependencies: - cssnano-preset-advanced: ^5.3.8 - postcss: ^8.4.14 - postcss-sort-media-queries: ^4.2.1 - tslib: ^2.4.0 - checksum: b8982230ec014378a5453453df400a328a6ecdeecffb666ead5cfbeb5dc689610f0e62ee818ffcc8adc270c7c47cb818ad730c769eb8fa689dd79d4f9d448b6d + cssnano-preset-advanced: ^5.3.10 + postcss: ^8.4.21 + postcss-sort-media-queries: ^4.3.0 + tslib: ^2.5.0 + checksum: 9aece7f723e7bdeecaa0cc9ce956ef590dfd1c11200f9799236ce80ad94f4653c717a0f16d8694a9f635fb21e0e5bbf3093ba59f8996c012b71062560d9e0fd3 languageName: node linkType: hard -"@docusaurus/logger@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/logger@npm:2.4.0" +"@docusaurus/logger@npm:0.0.0-5566": + version: 0.0.0-5566 + resolution: "@docusaurus/logger@npm:0.0.0-5566" dependencies: chalk: ^4.1.2 - tslib: ^2.4.0 - checksum: 0424b77e2abaa50f20d6042ededf831157852656d1242ae9b0829b897e6f5b1e1e5ea30df599839e0ec51c72e42a5a867b136387dd5359032c735f431eddd078 + tslib: ^2.5.0 + checksum: aab288cf6f7c062bb54de296723bbd8deea3029267c49e3f2fb6ab86b462256c4cff805debfd93bd3b35daaefdb9f5bb1a07876434e0b4887e0ec6cf159594d0 languageName: node linkType: hard -"@docusaurus/mdx-loader@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/mdx-loader@npm:2.4.0" +"@docusaurus/mdx-loader@npm:0.0.0-5566": + version: 0.0.0-5566 + resolution: "@docusaurus/mdx-loader@npm:0.0.0-5566" dependencies: - "@babel/parser": ^7.18.8 - "@babel/traverse": ^7.18.8 - "@docusaurus/logger": 2.4.0 - "@docusaurus/utils": 2.4.0 - "@mdx-js/mdx": ^1.6.22 + "@babel/parser": ^7.21.2 + "@babel/traverse": ^7.21.2 + "@docusaurus/logger": 0.0.0-5566 + "@docusaurus/utils": 0.0.0-5566 + "@docusaurus/utils-validation": 0.0.0-5566 + "@mdx-js/mdx": ^2.1.5 escape-html: ^1.0.3 + estree-util-value-to-estree: ^2.1.0 file-loader: ^6.2.0 - fs-extra: ^10.1.0 - image-size: ^1.0.1 - mdast-util-to-string: ^2.0.0 + fs-extra: ^11.1.0 + hastscript: ^7.1.0 + image-size: ^1.0.2 + mdast-util-mdx: ^2.0.0 + mdast-util-to-string: ^3.0.0 + remark-comment: ^1.0.0 + remark-directive: ^2.0.1 remark-emoji: ^2.2.0 + remark-gfm: ^3.0.1 stringify-object: ^3.3.0 - tslib: ^2.4.0 - unified: ^9.2.2 + tslib: ^2.5.0 + unified: ^10.1.2 unist-util-visit: ^2.0.3 url-loader: ^4.1.1 - webpack: ^5.73.0 + webpack: ^5.76.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 3d4e7bf6840fa7dcf4250aa5ea019f80dac6cc38e9f8b9a0515b81b6c0f6d6f4ed4103f521784e70db856aec06cff4be176ef281e1cac53afc82bc1182bbf9ad + checksum: d4e82a3bdf8eefe7c3996c9ac3860a60f6bb028ab60dce31cef199d22da606631e7eacfeacd4e51c0181d3649026e081c353dea5f01317ec05b48c20b4e8cc39 languageName: node linkType: hard -"@docusaurus/module-type-aliases@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/module-type-aliases@npm:2.4.0" +"@docusaurus/module-type-aliases@npm:0.0.0-5566": + version: 0.0.0-5566 + resolution: "@docusaurus/module-type-aliases@npm:0.0.0-5566" dependencies: "@docusaurus/react-loadable": 5.5.2 - "@docusaurus/types": 2.4.0 + "@docusaurus/types": 0.0.0-5566 "@types/history": ^4.7.11 "@types/react": "*" "@types/react-router-config": "*" @@ -1809,206 +1776,207 @@ __metadata: peerDependencies: react: "*" react-dom: "*" - checksum: fc655d9dc77d88ba9d10abe602c9fd5533992b14de495e4f3e4caea368693a7b7e5a805fb2938287bed949900e7e3d7f94bea3c1a8727b45e19c85996965d0c7 + checksum: 6f8a86386c54829f41e28d01a7ffe96b2a3211aaa9fd217f614154726620ce118a0a9bba5563b512bdbc4d3e4a03e1d73848caadbd7fe2b55e59e4ff1ae3633a languageName: node linkType: hard -"@docusaurus/plugin-client-redirects@npm:^2.3.1": - version: 2.4.0 - resolution: "@docusaurus/plugin-client-redirects@npm:2.4.0" +"@docusaurus/plugin-client-redirects@npm:0.0.0-5566": + version: 0.0.0-5566 + resolution: "@docusaurus/plugin-client-redirects@npm:0.0.0-5566" dependencies: - "@docusaurus/core": 2.4.0 - "@docusaurus/logger": 2.4.0 - "@docusaurus/utils": 2.4.0 - "@docusaurus/utils-common": 2.4.0 - "@docusaurus/utils-validation": 2.4.0 - eta: ^2.0.0 - fs-extra: ^10.1.0 + "@docusaurus/core": 0.0.0-5566 + "@docusaurus/logger": 0.0.0-5566 + "@docusaurus/utils": 0.0.0-5566 + "@docusaurus/utils-common": 0.0.0-5566 + "@docusaurus/utils-validation": 0.0.0-5566 + eta: ^2.0.1 + fs-extra: ^11.1.0 lodash: ^4.17.21 - tslib: ^2.4.0 + tslib: ^2.5.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: e0a82b71521752fb338b928fd0e04c78f01a1b8f240ffde12631a25711cdf63b0bf1a56d1ee19e479ea11d33ef9aabf337071f2eb5dcd55b4f17228374ceae26 + checksum: 01976bc176541b7506680f56f74f2f5cf8d128f33eb6151bdd3bf09795a5ec5161356f4d7711c1fb63e7617fbdd2c6d08a4243870144b04fc1c02b67a98bdcb6 languageName: node linkType: hard -"@docusaurus/plugin-content-blog@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/plugin-content-blog@npm:2.4.0" +"@docusaurus/plugin-content-blog@npm:0.0.0-5566": + version: 0.0.0-5566 + resolution: "@docusaurus/plugin-content-blog@npm:0.0.0-5566" dependencies: - "@docusaurus/core": 2.4.0 - "@docusaurus/logger": 2.4.0 - "@docusaurus/mdx-loader": 2.4.0 - "@docusaurus/types": 2.4.0 - "@docusaurus/utils": 2.4.0 - "@docusaurus/utils-common": 2.4.0 - "@docusaurus/utils-validation": 2.4.0 + "@docusaurus/core": 0.0.0-5566 + "@docusaurus/logger": 0.0.0-5566 + "@docusaurus/mdx-loader": 0.0.0-5566 + "@docusaurus/types": 0.0.0-5566 + "@docusaurus/utils": 0.0.0-5566 + "@docusaurus/utils-common": 0.0.0-5566 + "@docusaurus/utils-validation": 0.0.0-5566 cheerio: ^1.0.0-rc.12 feed: ^4.2.2 - fs-extra: ^10.1.0 + fs-extra: ^11.1.0 lodash: ^4.17.21 reading-time: ^1.5.0 - tslib: ^2.4.0 + tslib: ^2.5.0 unist-util-visit: ^2.0.3 utility-types: ^3.10.0 - webpack: ^5.73.0 + webpack: ^5.76.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: e912ea1a01c1769b374aecf1af72cef96dbed5faa01b74cc12d951dd5dccc089994ff649f0a18f994e39730338f99c0aa12f3b2a1eefc40888f1fb7956cece29 + checksum: 1d1dfaf61c98de3e5722d1ea726dae29b75eb8747600583347aaca1dfe1ba0cb3b023d1af02ab8aac6e8750288ecd7f5b90bde5e5a693a822c874f0c053a24ea languageName: node linkType: hard -"@docusaurus/plugin-content-docs@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/plugin-content-docs@npm:2.4.0" +"@docusaurus/plugin-content-docs@npm:0.0.0-5566": + version: 0.0.0-5566 + resolution: "@docusaurus/plugin-content-docs@npm:0.0.0-5566" dependencies: - "@docusaurus/core": 2.4.0 - "@docusaurus/logger": 2.4.0 - "@docusaurus/mdx-loader": 2.4.0 - "@docusaurus/module-type-aliases": 2.4.0 - "@docusaurus/types": 2.4.0 - "@docusaurus/utils": 2.4.0 - "@docusaurus/utils-validation": 2.4.0 + "@docusaurus/core": 0.0.0-5566 + "@docusaurus/logger": 0.0.0-5566 + "@docusaurus/mdx-loader": 0.0.0-5566 + "@docusaurus/module-type-aliases": 0.0.0-5566 + "@docusaurus/types": 0.0.0-5566 + "@docusaurus/utils": 0.0.0-5566 + "@docusaurus/utils-validation": 0.0.0-5566 "@types/react-router-config": ^5.0.6 combine-promises: ^1.1.0 - fs-extra: ^10.1.0 + fs-extra: ^11.1.0 import-fresh: ^3.3.0 js-yaml: ^4.1.0 lodash: ^4.17.21 - tslib: ^2.4.0 + tslib: ^2.5.0 utility-types: ^3.10.0 - webpack: ^5.73.0 + webpack: ^5.76.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 5a273e80f2c28e4a33ab994e8702b3afaff04eb73f156a0a3e42cd9d182f8e1ed2b794348b090ec170cc1e4aba2e997d1fb6e8684f73ac6698bf66d96114c57b + checksum: 32bb9c8c82ff4dfb9639b8fabda4d7b3c69c7a4a551719dba7495be8c7baf2ad96cb79b241904def5bab33f38c4e84a01d870f7200fe5c4eae74d380abaa6c60 languageName: node linkType: hard -"@docusaurus/plugin-content-pages@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/plugin-content-pages@npm:2.4.0" +"@docusaurus/plugin-content-pages@npm:0.0.0-5566": + version: 0.0.0-5566 + resolution: "@docusaurus/plugin-content-pages@npm:0.0.0-5566" dependencies: - "@docusaurus/core": 2.4.0 - "@docusaurus/mdx-loader": 2.4.0 - "@docusaurus/types": 2.4.0 - "@docusaurus/utils": 2.4.0 - "@docusaurus/utils-validation": 2.4.0 - fs-extra: ^10.1.0 - tslib: ^2.4.0 - webpack: ^5.73.0 + "@docusaurus/core": 0.0.0-5566 + "@docusaurus/mdx-loader": 0.0.0-5566 + "@docusaurus/types": 0.0.0-5566 + "@docusaurus/utils": 0.0.0-5566 + "@docusaurus/utils-validation": 0.0.0-5566 + fs-extra: ^11.1.0 + tslib: ^2.5.0 + webpack: ^5.76.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 5381e913101f271476cbdc264e6058a0cbe0835ed4a823e430540da545253c1dc56578c66a6d978ee2f1aca114110aba529443ae835f26ef0eaf7de1ed6a5001 + checksum: 6764c2d922d308305b0f71866f951b05a9cf885ff758e8982f865d8a52d77295802ae0d35cad20518b45a6a4daf7fbfbe2728fd5e078fdcc5104a4f21de0134f languageName: node linkType: hard -"@docusaurus/plugin-debug@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/plugin-debug@npm:2.4.0" +"@docusaurus/plugin-debug@npm:0.0.0-5566": + version: 0.0.0-5566 + resolution: "@docusaurus/plugin-debug@npm:0.0.0-5566" dependencies: - "@docusaurus/core": 2.4.0 - "@docusaurus/types": 2.4.0 - "@docusaurus/utils": 2.4.0 - fs-extra: ^10.1.0 + "@docusaurus/core": 0.0.0-5566 + "@docusaurus/types": 0.0.0-5566 + "@docusaurus/utils": 0.0.0-5566 + fs-extra: ^11.1.0 react-json-view: ^1.21.3 - tslib: ^2.4.0 + tslib: ^2.5.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 921614843453ef189dfa2ada31e7abed8f976b0c314f7486fde35f976911de2ab307863608326e96bea67468e98dc648aeea82dbad04d0701c3c48c92bd40c6c + checksum: 32a996e40cc58ebc2fd3cbfb9f6d33b7303952788d9c9b2f41f36b54a327939807e990784191f6f3a6169a4c56c7dabec2f7b369828d86f86414e32c3ac39dfe languageName: node linkType: hard -"@docusaurus/plugin-google-analytics@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/plugin-google-analytics@npm:2.4.0" +"@docusaurus/plugin-google-analytics@npm:0.0.0-5566": + version: 0.0.0-5566 + resolution: "@docusaurus/plugin-google-analytics@npm:0.0.0-5566" dependencies: - "@docusaurus/core": 2.4.0 - "@docusaurus/types": 2.4.0 - "@docusaurus/utils-validation": 2.4.0 - tslib: ^2.4.0 + "@docusaurus/core": 0.0.0-5566 + "@docusaurus/types": 0.0.0-5566 + "@docusaurus/utils-validation": 0.0.0-5566 + tslib: ^2.5.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 2d8c7e5689675ced9acffe1e2187144d6ebeea471a5992139c3eea87094e315e272263da5499591e85bc3501b7583f693d33c660507b36a835fc9eb75584c706 + checksum: a1549324beb15024b3cfc6ebc0fb1ef7017f28d4a7419c14d469cc24025a53e460bceeed7401e01900b530e06ec84c302de891aea165ed5c3885261eb8eccb12 languageName: node linkType: hard -"@docusaurus/plugin-google-gtag@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/plugin-google-gtag@npm:2.4.0" +"@docusaurus/plugin-google-gtag@npm:0.0.0-5566": + version: 0.0.0-5566 + resolution: "@docusaurus/plugin-google-gtag@npm:0.0.0-5566" dependencies: - "@docusaurus/core": 2.4.0 - "@docusaurus/types": 2.4.0 - "@docusaurus/utils-validation": 2.4.0 - tslib: ^2.4.0 + "@docusaurus/core": 0.0.0-5566 + "@docusaurus/types": 0.0.0-5566 + "@docusaurus/utils-validation": 0.0.0-5566 + "@types/gtag.js": ^0.0.12 + tslib: ^2.5.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 6aa0bb6ac5e410ea438db2de20c95a4a34d7056855b2e0baa7685e31bd9b3f48ef55f8135ca496688ccbfaba88945219acae146a244141bfb7e2372ba54c0ce2 + checksum: 3e98f82b2e2767205fc3d40673e6db5b188d2cd4c3ff83d7f6ff7588b0e2486a6d48c1a6ef37bae6a1fafb77309bbc4000eb2784bd4f01df21deb23235f13884 languageName: node linkType: hard -"@docusaurus/plugin-google-tag-manager@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/plugin-google-tag-manager@npm:2.4.0" +"@docusaurus/plugin-google-tag-manager@npm:0.0.0-5566": + version: 0.0.0-5566 + resolution: "@docusaurus/plugin-google-tag-manager@npm:0.0.0-5566" dependencies: - "@docusaurus/core": 2.4.0 - "@docusaurus/types": 2.4.0 - "@docusaurus/utils-validation": 2.4.0 - tslib: ^2.4.0 + "@docusaurus/core": 0.0.0-5566 + "@docusaurus/types": 0.0.0-5566 + "@docusaurus/utils-validation": 0.0.0-5566 + tslib: ^2.5.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 2df57cd95808ed7cf58ade342dcc3382e167ecebaedc7184588c214f6b64eab60fa0145ab0ce7e25803acfe3952412c1134d52ad0ea636cef652a73ccd79a5cb + checksum: 6ea3e845ad5bab9cec34947e851e3adbf27c609227ad4dec8c4bad6ff05ab2190028dea78a4c0d844b6c377357189d9b739ca83c330d8f46dfe25e48ee61037a languageName: node linkType: hard -"@docusaurus/plugin-sitemap@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/plugin-sitemap@npm:2.4.0" +"@docusaurus/plugin-sitemap@npm:0.0.0-5566": + version: 0.0.0-5566 + resolution: "@docusaurus/plugin-sitemap@npm:0.0.0-5566" dependencies: - "@docusaurus/core": 2.4.0 - "@docusaurus/logger": 2.4.0 - "@docusaurus/types": 2.4.0 - "@docusaurus/utils": 2.4.0 - "@docusaurus/utils-common": 2.4.0 - "@docusaurus/utils-validation": 2.4.0 - fs-extra: ^10.1.0 + "@docusaurus/core": 0.0.0-5566 + "@docusaurus/logger": 0.0.0-5566 + "@docusaurus/types": 0.0.0-5566 + "@docusaurus/utils": 0.0.0-5566 + "@docusaurus/utils-common": 0.0.0-5566 + "@docusaurus/utils-validation": 0.0.0-5566 + fs-extra: ^11.1.0 sitemap: ^7.1.1 - tslib: ^2.4.0 + tslib: ^2.5.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: e96fcc84352880da6a3e566cdc249e44ad825b400f2d798746201c3a4a255b196b999f5bf5d0a5b52c752acf9e9eb1169111b463914502a6cae9c114800fa09e + checksum: 1ceb243d048aaadfd05aaa4bb02455d3e87281ba49c08ecaa2ceb58f2cfa94a52af55756e20c562a2fa0c01524396d754d116e6ecb0d7591c2718baeaa334688 languageName: node linkType: hard -"@docusaurus/preset-classic@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/preset-classic@npm:2.4.0" +"@docusaurus/preset-classic@npm:0.0.0-5566": + version: 0.0.0-5566 + resolution: "@docusaurus/preset-classic@npm:0.0.0-5566" dependencies: - "@docusaurus/core": 2.4.0 - "@docusaurus/plugin-content-blog": 2.4.0 - "@docusaurus/plugin-content-docs": 2.4.0 - "@docusaurus/plugin-content-pages": 2.4.0 - "@docusaurus/plugin-debug": 2.4.0 - "@docusaurus/plugin-google-analytics": 2.4.0 - "@docusaurus/plugin-google-gtag": 2.4.0 - "@docusaurus/plugin-google-tag-manager": 2.4.0 - "@docusaurus/plugin-sitemap": 2.4.0 - "@docusaurus/theme-classic": 2.4.0 - "@docusaurus/theme-common": 2.4.0 - "@docusaurus/theme-search-algolia": 2.4.0 - "@docusaurus/types": 2.4.0 + "@docusaurus/core": 0.0.0-5566 + "@docusaurus/plugin-content-blog": 0.0.0-5566 + "@docusaurus/plugin-content-docs": 0.0.0-5566 + "@docusaurus/plugin-content-pages": 0.0.0-5566 + "@docusaurus/plugin-debug": 0.0.0-5566 + "@docusaurus/plugin-google-analytics": 0.0.0-5566 + "@docusaurus/plugin-google-gtag": 0.0.0-5566 + "@docusaurus/plugin-google-tag-manager": 0.0.0-5566 + "@docusaurus/plugin-sitemap": 0.0.0-5566 + "@docusaurus/theme-classic": 0.0.0-5566 + "@docusaurus/theme-common": 0.0.0-5566 + "@docusaurus/theme-search-algolia": 0.0.0-5566 + "@docusaurus/types": 0.0.0-5566 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 33961a1edd445f13971e640db9445a0fae418babf0fe5f4078f21e605f9d945f7a3a4b7ad53ac7b578a7302f093c708429f462a76a3f297b3439d8e23b3990aa + checksum: e7b1181b414f7795c540a4c9fed282ce350eaeee5006a9eb228cb42990d67ec933231f0af2f0329571ea135d87012a6ad606e9adaee61ae105573bbe6433a698 languageName: node linkType: hard @@ -2024,162 +1992,162 @@ __metadata: languageName: node linkType: hard -"@docusaurus/theme-classic@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/theme-classic@npm:2.4.0" +"@docusaurus/theme-classic@npm:0.0.0-5566": + version: 0.0.0-5566 + resolution: "@docusaurus/theme-classic@npm:0.0.0-5566" dependencies: - "@docusaurus/core": 2.4.0 - "@docusaurus/mdx-loader": 2.4.0 - "@docusaurus/module-type-aliases": 2.4.0 - "@docusaurus/plugin-content-blog": 2.4.0 - "@docusaurus/plugin-content-docs": 2.4.0 - "@docusaurus/plugin-content-pages": 2.4.0 - "@docusaurus/theme-common": 2.4.0 - "@docusaurus/theme-translations": 2.4.0 - "@docusaurus/types": 2.4.0 - "@docusaurus/utils": 2.4.0 - "@docusaurus/utils-common": 2.4.0 - "@docusaurus/utils-validation": 2.4.0 - "@mdx-js/react": ^1.6.22 + "@docusaurus/core": 0.0.0-5566 + "@docusaurus/mdx-loader": 0.0.0-5566 + "@docusaurus/module-type-aliases": 0.0.0-5566 + "@docusaurus/plugin-content-blog": 0.0.0-5566 + "@docusaurus/plugin-content-docs": 0.0.0-5566 + "@docusaurus/plugin-content-pages": 0.0.0-5566 + "@docusaurus/theme-common": 0.0.0-5566 + "@docusaurus/theme-translations": 0.0.0-5566 + "@docusaurus/types": 0.0.0-5566 + "@docusaurus/utils": 0.0.0-5566 + "@docusaurus/utils-common": 0.0.0-5566 + "@docusaurus/utils-validation": 0.0.0-5566 + "@mdx-js/react": ^2.1.5 clsx: ^1.2.1 copy-text-to-clipboard: ^3.0.1 infima: 0.2.0-alpha.43 lodash: ^4.17.21 nprogress: ^0.2.0 - postcss: ^8.4.14 + postcss: ^8.4.21 prism-react-renderer: ^1.3.5 - prismjs: ^1.28.0 - react-router-dom: ^5.3.3 - rtlcss: ^3.5.0 - tslib: ^2.4.0 + prismjs: ^1.29.0 + react-router-dom: ^5.3.4 + rtlcss: ^4.0.0 + tslib: ^2.5.0 utility-types: ^3.10.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 7f3161d7be653b6a86ffd58d8a6c6d62f464db919c32b7b9ab2ec9ca1b79136e2278fdc908e90cfa31cf21385d87cd7496d5bf9c80d30c2279ef95e7f7be28aa + checksum: 17ba0e0d5f27b0dfd700dd1c9536eae416268abc8d4b308cdf4015b2aff246153b4906e5aa292be58987ccc10b9fe0d0d3182bbba52e370c3116076787009206 languageName: node linkType: hard -"@docusaurus/theme-common@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/theme-common@npm:2.4.0" +"@docusaurus/theme-common@npm:0.0.0-5566": + version: 0.0.0-5566 + resolution: "@docusaurus/theme-common@npm:0.0.0-5566" dependencies: - "@docusaurus/mdx-loader": 2.4.0 - "@docusaurus/module-type-aliases": 2.4.0 - "@docusaurus/plugin-content-blog": 2.4.0 - "@docusaurus/plugin-content-docs": 2.4.0 - "@docusaurus/plugin-content-pages": 2.4.0 - "@docusaurus/utils": 2.4.0 - "@docusaurus/utils-common": 2.4.0 + "@docusaurus/mdx-loader": 0.0.0-5566 + "@docusaurus/module-type-aliases": 0.0.0-5566 + "@docusaurus/plugin-content-blog": 0.0.0-5566 + "@docusaurus/plugin-content-docs": 0.0.0-5566 + "@docusaurus/plugin-content-pages": 0.0.0-5566 + "@docusaurus/utils": 0.0.0-5566 + "@docusaurus/utils-common": 0.0.0-5566 "@types/history": ^4.7.11 "@types/react": "*" "@types/react-router-config": "*" clsx: ^1.2.1 parse-numeric-range: ^1.3.0 prism-react-renderer: ^1.3.5 - tslib: ^2.4.0 + tslib: ^2.5.0 use-sync-external-store: ^1.2.0 utility-types: ^3.10.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 0790c6e5ad14bc8518173314a058e01837321d5992364d1ae4f9907f1d055f5852f883512d7a64e5add95dcfe362a009b374220de6493b32624a406d8ce74750 + checksum: 5f2978300b9a01c93d12e6fcd768259cab224207da15f6fd6889cc3e441fda61354e165f084f0353257e9c6d6af5184adb0f03ce7cf009845751657c3d52a00f languageName: node linkType: hard -"@docusaurus/theme-search-algolia@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/theme-search-algolia@npm:2.4.0" +"@docusaurus/theme-search-algolia@npm:0.0.0-5566": + version: 0.0.0-5566 + resolution: "@docusaurus/theme-search-algolia@npm:0.0.0-5566" dependencies: - "@docsearch/react": ^3.1.1 - "@docusaurus/core": 2.4.0 - "@docusaurus/logger": 2.4.0 - "@docusaurus/plugin-content-docs": 2.4.0 - "@docusaurus/theme-common": 2.4.0 - "@docusaurus/theme-translations": 2.4.0 - "@docusaurus/utils": 2.4.0 - "@docusaurus/utils-validation": 2.4.0 - algoliasearch: ^4.13.1 - algoliasearch-helper: ^3.10.0 + "@docsearch/react": ^3.3.3 + "@docusaurus/core": 0.0.0-5566 + "@docusaurus/logger": 0.0.0-5566 + "@docusaurus/plugin-content-docs": 0.0.0-5566 + "@docusaurus/theme-common": 0.0.0-5566 + "@docusaurus/theme-translations": 0.0.0-5566 + "@docusaurus/utils": 0.0.0-5566 + "@docusaurus/utils-validation": 0.0.0-5566 + algoliasearch: ^4.15.0 + algoliasearch-helper: ^3.12.0 clsx: ^1.2.1 - eta: ^2.0.0 - fs-extra: ^10.1.0 + eta: ^2.0.1 + fs-extra: ^11.1.0 lodash: ^4.17.21 - tslib: ^2.4.0 + tslib: ^2.5.0 utility-types: ^3.10.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: a74a199faf6bab1d663cd41f9477c65c17f8dd2080664d5c00f998eb7c57345f1c30ff4f2c3bc88863f2e606c6f7475300747480dc145e61dd42798ca4fd435e + checksum: 89256f242ccc5d0e1aca92e817413a1e40d18de58fb069e283741b2e5dbc29b267b345fc6d602ad88ac0faf0a003c3a99d549e9bc9027aa79b0e767ad4d7b79c languageName: node linkType: hard -"@docusaurus/theme-translations@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/theme-translations@npm:2.4.0" +"@docusaurus/theme-translations@npm:0.0.0-5566": + version: 0.0.0-5566 + resolution: "@docusaurus/theme-translations@npm:0.0.0-5566" dependencies: - fs-extra: ^10.1.0 - tslib: ^2.4.0 - checksum: 37f329eb74fcb16c14bd370038d8bd1e18017fb1f78564d960c53fd4e110eb166f6f1c03f323dea28ede95873ebe28a659554d02cc26d1c3e748a772f9d2313a + fs-extra: ^11.1.0 + tslib: ^2.5.0 + checksum: e6595e675617669267b48e8cf79cbde8e65f279b8cdf0a3a45cb75f32ec0d2ddd59d0d02ac3f0aaa5328f0a13cd63a41aaff49a2251ce6665bba4abdfba71361 languageName: node linkType: hard -"@docusaurus/types@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/types@npm:2.4.0" +"@docusaurus/types@npm:0.0.0-5566": + version: 0.0.0-5566 + resolution: "@docusaurus/types@npm:0.0.0-5566" dependencies: "@types/history": ^4.7.11 "@types/react": "*" commander: ^5.1.0 - joi: ^17.6.0 + joi: ^17.8.3 react-helmet-async: ^1.3.0 utility-types: ^3.10.0 - webpack: ^5.73.0 + webpack: ^5.76.0 webpack-merge: ^5.8.0 peerDependencies: react: ^16.8.4 || ^17.0.0 react-dom: ^16.8.4 || ^17.0.0 - checksum: 54b0cd8992269ab0508d94ce19a7fcc2b3e7c9700eb112c9b859ddac8228dcc64282c414b602ba44894be87be79eeeef730fb8e569be68b6e26453e18addcf21 + checksum: aec430471a0019e650e168320c168f942ce8097022c45fb70e1ec86ba793b146f95a9d3cf434e3d9c985a45cea363f870cc51395dddaf0d0f600496ca6dbf810 languageName: node linkType: hard -"@docusaurus/utils-common@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/utils-common@npm:2.4.0" +"@docusaurus/utils-common@npm:0.0.0-5566": + version: 0.0.0-5566 + resolution: "@docusaurus/utils-common@npm:0.0.0-5566" dependencies: - tslib: ^2.4.0 + tslib: ^2.5.0 peerDependencies: "@docusaurus/types": "*" peerDependenciesMeta: "@docusaurus/types": optional: true - checksum: 711e61e899b133fc7cd755e6de75fd79a712eeabbd9853b9122e3929c8390e015bb9e4bca2284028e40e7a0fb2b89ef1c184f7e4149097ffd7b64821b38c11da + checksum: 14cc02aac8a59350244ab733f8c662b838aac9ed3bc156a75113cbf1e2bf50d3db2e722313f9b6fe2616dcfafef3abc858f064289a8a0539b97745c571ec3fca languageName: node linkType: hard -"@docusaurus/utils-validation@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/utils-validation@npm:2.4.0" +"@docusaurus/utils-validation@npm:0.0.0-5566": + version: 0.0.0-5566 + resolution: "@docusaurus/utils-validation@npm:0.0.0-5566" dependencies: - "@docusaurus/logger": 2.4.0 - "@docusaurus/utils": 2.4.0 - joi: ^17.6.0 + "@docusaurus/logger": 0.0.0-5566 + "@docusaurus/utils": 0.0.0-5566 + joi: ^17.8.3 js-yaml: ^4.1.0 - tslib: ^2.4.0 - checksum: 21a229858ed9254830b68dd08de6456dc19b68adead581f86e854ea3e55b64b9616a3bbca521e74f754c9c7bc835ca348dfe9f0949d9a8d189db5b39bcdb9f6b + tslib: ^2.5.0 + checksum: 85a3570134ee26c88571ccb409c08f8ed182257cd72eb564e2a553e0d32a9a0c8bf4daaf1c33c5805e77e47a9fb97d29dfa0a758d8a7224d70ece80e82b583cc languageName: node linkType: hard -"@docusaurus/utils@npm:2.4.0": - version: 2.4.0 - resolution: "@docusaurus/utils@npm:2.4.0" +"@docusaurus/utils@npm:0.0.0-5566": + version: 0.0.0-5566 + resolution: "@docusaurus/utils@npm:0.0.0-5566" dependencies: - "@docusaurus/logger": 2.4.0 - "@svgr/webpack": ^6.2.1 + "@docusaurus/logger": 0.0.0-5566 + "@svgr/webpack": ^6.5.1 escape-string-regexp: ^4.0.0 file-loader: ^6.2.0 - fs-extra: ^10.1.0 - github-slugger: ^1.4.0 + fs-extra: ^11.1.0 + github-slugger: ^1.5.0 globby: ^11.1.0 gray-matter: ^4.0.3 js-yaml: ^4.1.0 @@ -2187,15 +2155,15 @@ __metadata: micromatch: ^4.0.5 resolve-pathname: ^3.0.0 shelljs: ^0.8.5 - tslib: ^2.4.0 + tslib: ^2.5.0 url-loader: ^4.1.1 - webpack: ^5.73.0 + webpack: ^5.76.0 peerDependencies: "@docusaurus/types": "*" peerDependenciesMeta: "@docusaurus/types": optional: true - checksum: 7ba6634b6ff71bb7cc64b0eb3c6d2892a21873bce8559bcd460693a80ca0229828c04da751277cdb17c6f18e80e061322bbcd84e9b743adc96c594b43e8a2165 + checksum: 82f682fdec2711d4608bb84f4a400e4f93bfbd4fde2da4cce37691b91e3e501bd409e7e86bae19bcc3b5dce576edcd33e078b25c28236ed1f15628d814cfe04e languageName: node linkType: hard @@ -2245,16 +2213,6 @@ __metadata: languageName: node linkType: hard -"@jridgewell/gen-mapping@npm:^0.1.0": - version: 0.1.1 - resolution: "@jridgewell/gen-mapping@npm:0.1.1" - dependencies: - "@jridgewell/set-array": ^1.0.0 - "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: 3bcc21fe786de6ffbf35c399a174faab05eb23ce6a03e8769569de28abbf4facc2db36a9ddb0150545ae23a8d35a7cf7237b2aa9e9356a7c626fb4698287d5cc - languageName: node - linkType: hard - "@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": version: 0.3.2 resolution: "@jridgewell/gen-mapping@npm:0.3.2" @@ -2273,7 +2231,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/set-array@npm:^1.0.0, @jridgewell/set-array@npm:^1.0.1": +"@jridgewell/set-array@npm:^1.0.1": version: 1.1.2 resolution: "@jridgewell/set-array@npm:1.1.2" checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e @@ -2297,13 +2255,13 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.14, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.17 - resolution: "@jridgewell/trace-mapping@npm:0.3.17" +"@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": + version: 0.3.18 + resolution: "@jridgewell/trace-mapping@npm:0.3.18" dependencies: "@jridgewell/resolve-uri": 3.1.0 "@jridgewell/sourcemap-codec": 1.4.14 - checksum: 9d703b859cff5cd83b7308fd457a431387db5db96bd781a63bf48e183418dd9d3d44e76b9e4ae13237f6abeeb25d739ec9215c1d5bfdd08f66f750a50074a339 + checksum: 0572669f855260808c16fe8f78f5f1b4356463b11d3f2c7c0b5580c8ba1cbf4ae53efe9f627595830856e57dbac2325ac17eb0c3dd0ec42102e6f227cc289c02 languageName: node linkType: hard @@ -2314,46 +2272,40 @@ __metadata: languageName: node linkType: hard -"@mdx-js/mdx@npm:^1.6.22": - version: 1.6.22 - resolution: "@mdx-js/mdx@npm:1.6.22" +"@mdx-js/mdx@npm:^2.1.5": + version: 2.3.0 + resolution: "@mdx-js/mdx@npm:2.3.0" dependencies: - "@babel/core": 7.12.9 - "@babel/plugin-syntax-jsx": 7.12.1 - "@babel/plugin-syntax-object-rest-spread": 7.8.3 - "@mdx-js/util": 1.6.22 - babel-plugin-apply-mdx-type-prop: 1.6.22 - babel-plugin-extract-import-names: 1.6.22 - camelcase-css: 2.0.1 - detab: 2.0.4 - hast-util-raw: 6.0.1 - lodash.uniq: 4.5.0 - mdast-util-to-hast: 10.0.1 - remark-footnotes: 2.0.0 - remark-mdx: 1.6.22 - remark-parse: 8.0.3 - remark-squeeze-paragraphs: 4.0.0 - style-to-object: 0.3.0 - unified: 9.2.0 - unist-builder: 2.0.3 - unist-util-visit: 2.0.3 - checksum: 0839b4a3899416326ea6578fe9e470af319da559bc6d3669c60942e456b49a98eebeb3358c623007b4786a2175a450d2c51cd59df64639013c5a3d22366931a6 + "@types/estree-jsx": ^1.0.0 + "@types/mdx": ^2.0.0 + estree-util-build-jsx: ^2.0.0 + estree-util-is-identifier-name: ^2.0.0 + estree-util-to-js: ^1.1.0 + estree-walker: ^3.0.0 + hast-util-to-estree: ^2.0.0 + markdown-extensions: ^1.0.0 + periscopic: ^3.0.0 + remark-mdx: ^2.0.0 + remark-parse: ^10.0.0 + remark-rehype: ^10.0.0 + unified: ^10.0.0 + unist-util-position-from-estree: ^1.0.0 + unist-util-stringify-position: ^3.0.0 + unist-util-visit: ^4.0.0 + vfile: ^5.0.0 + checksum: d918766a326502ec0b54adee61dc2930daf5b748acb9107f9bfd1ab0dbc4d7b1a4d0dbb9e21da9dd2a9fc2f9950b2973a43c6ba62d3a72eb67a30f6c953e5be8 languageName: node linkType: hard -"@mdx-js/react@npm:^1.6.22": - version: 1.6.22 - resolution: "@mdx-js/react@npm:1.6.22" +"@mdx-js/react@npm:^2.1.5": + version: 2.3.0 + resolution: "@mdx-js/react@npm:2.3.0" + dependencies: + "@types/mdx": ^2.0.0 + "@types/react": ">=16" peerDependencies: - react: ^16.13.1 || ^17.0.0 - checksum: bc84bd514bc127f898819a0c6f1a6915d9541011bd8aefa1fcc1c9bea8939f31051409e546bdec92babfa5b56092a16d05ef6d318304ac029299df5181dc94c8 - languageName: node - linkType: hard - -"@mdx-js/util@npm:1.6.22": - version: 1.6.22 - resolution: "@mdx-js/util@npm:1.6.22" - checksum: 4b393907e39a1a75214f0314bf72a0adfa5e5adffd050dd5efe9c055b8549481a3cfc9f308c16dfb33311daf3ff63added7d5fd1fe52db614c004f886e0e559a + react: ">=16" + checksum: f45fe779556e6cd9a787f711274480e0638b63c460f192ebdcd77cc07ffa61e23c98cb46dd46e577093e1cb4997a232a848d1fb0ba850ae204422cf603add524 languageName: node linkType: hard @@ -2404,6 +2356,33 @@ __metadata: languageName: node linkType: hard +"@pnpm/config.env-replace@npm:^1.1.0": + version: 1.1.0 + resolution: "@pnpm/config.env-replace@npm:1.1.0" + checksum: a3d2b57e35eec9543d9eb085854f6e33e8102dac99fdef2fad2eebdbbfc345e93299f0c20e8eb61c1b4c7aa123bfd47c175678626f161cda65dd147c2b6e1fa0 + languageName: node + linkType: hard + +"@pnpm/network.ca-file@npm:^1.0.1": + version: 1.0.2 + resolution: "@pnpm/network.ca-file@npm:1.0.2" + dependencies: + graceful-fs: 4.2.10 + checksum: d8d0884646500576bd5390464d13db1bb9a62e32a1069293e5bddb2ad8354b354b7e2d2a35e12850025651e795e6a80ce9e601c66312504667b7e3ee7b52becc + languageName: node + linkType: hard + +"@pnpm/npm-conf@npm:^2.1.0": + version: 2.1.1 + resolution: "@pnpm/npm-conf@npm:2.1.1" + dependencies: + "@pnpm/config.env-replace": ^1.1.0 + "@pnpm/network.ca-file": ^1.0.1 + config-chain: ^1.1.11 + checksum: d9a386c3d4cd97436d050e9c80b198e5e9c3288e6fe0e8972f9969cf46617cb43218120529852a886c62c5b15f06832b1d6cc75b256f2ee9092d9cfb3ce329fb + languageName: node + linkType: hard + "@polka/url@npm:^1.0.0-next.20": version: 1.0.0-next.21 resolution: "@polka/url@npm:1.0.0-next.21" @@ -2420,7 +2399,7 @@ __metadata: languageName: node linkType: hard -"@sideway/formula@npm:^3.0.0": +"@sideway/formula@npm:^3.0.1": version: 3.0.1 resolution: "@sideway/formula@npm:3.0.1" checksum: e4beeebc9dbe2ff4ef0def15cec0165e00d1612e3d7cea0bc9ce5175c3263fc2c818b679bd558957f49400ee7be9d4e5ac90487e1625b4932e15c4aa7919c57a @@ -2441,10 +2420,10 @@ __metadata: languageName: node linkType: hard -"@sindresorhus/is@npm:^0.14.0": - version: 0.14.0 - resolution: "@sindresorhus/is@npm:0.14.0" - checksum: 971e0441dd44ba3909b467219a5e242da0fc584048db5324cfb8048148fa8dcc9d44d71e3948972c4f6121d24e5da402ef191420d1266a95f713bb6d6e59c98a +"@sindresorhus/is@npm:^5.2.0": + version: 5.3.0 + resolution: "@sindresorhus/is@npm:5.3.0" + checksum: b31cebabcdece3d5322de2a4dbc8c0f004e04147a00f2606787bcaf5655ad4b1954f6727fc6914c524009b2b9a2cc01c42835b55f651ce69fd2a0083b60bb852 languageName: node linkType: hard @@ -2608,7 +2587,7 @@ __metadata: languageName: node linkType: hard -"@svgr/webpack@npm:^6.2.1": +"@svgr/webpack@npm:^6.5.1": version: 6.5.1 resolution: "@svgr/webpack@npm:6.5.1" dependencies: @@ -2738,12 +2717,12 @@ __metadata: languageName: node linkType: hard -"@szmarczak/http-timer@npm:^1.1.2": - version: 1.1.2 - resolution: "@szmarczak/http-timer@npm:1.1.2" +"@szmarczak/http-timer@npm:^5.0.1": + version: 5.0.1 + resolution: "@szmarczak/http-timer@npm:5.0.1" dependencies: - defer-to-connect: ^1.0.1 - checksum: 4d9158061c5f397c57b4988cde33a163244e4f02df16364f103971957a32886beb104d6180902cbe8b38cb940e234d9f98a4e486200deca621923f62f50a06fe + defer-to-connect: ^2.0.1 + checksum: fc9cb993e808806692e4a3337c90ece0ec00c89f4b67e3652a356b89730da98bc824273a6d67ca84d5f33cd85f317dcd5ce39d8cc0a2f060145a608a7cb8ce92 languageName: node linkType: hard @@ -2768,6 +2747,15 @@ __metadata: languageName: node linkType: hard +"@types/acorn@npm:^4.0.0": + version: 4.0.6 + resolution: "@types/acorn@npm:4.0.6" + dependencies: + "@types/estree": "*" + checksum: 60e1fd28af18d6cb54a93a7231c7c18774a9a8739c9b179e9e8750dca631e10cbef2d82b02830ea3f557b1d121e6406441e9e1250bd492dc81d4b3456e76e4d4 + languageName: node + linkType: hard + "@types/body-parser@npm:*": version: 1.19.2 resolution: "@types/body-parser@npm:1.19.2" @@ -2806,6 +2794,15 @@ __metadata: languageName: node linkType: hard +"@types/debug@npm:^4.0.0": + version: 4.1.7 + resolution: "@types/debug@npm:4.1.7" + dependencies: + "@types/ms": "*" + checksum: 0a7b89d8ed72526858f0b61c6fd81f477853e8c4415bb97f48b1b5545248d2ae389931680b94b393b993a7cfe893537a200647d93defe6d87159b96812305adc + languageName: node + linkType: hard + "@types/eslint-scope@npm:^3.7.3": version: 3.7.4 resolution: "@types/eslint-scope@npm:3.7.4" @@ -2826,17 +2823,19 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:*": +"@types/estree-jsx@npm:^1.0.0": version: 1.0.0 - resolution: "@types/estree@npm:1.0.0" - checksum: 910d97fb7092c6738d30a7430ae4786a38542023c6302b95d46f49420b797f21619cdde11fa92b338366268795884111c2eb10356e4bd2c8ad5b92941e9e6443 + resolution: "@types/estree-jsx@npm:1.0.0" + dependencies: + "@types/estree": "*" + checksum: 851d7afb63a89fb9ce7822563930660433f29106d72db279ce9c99f791ec996ef21b05adc6f545325cd1745b3041cc86422f0ffa39a06734305b90cfbc871765 languageName: node linkType: hard -"@types/estree@npm:^0.0.51": - version: 0.0.51 - resolution: "@types/estree@npm:0.0.51" - checksum: e56a3bcf759fd9185e992e7fdb3c6a5f81e8ff120e871641607581fb3728d16c811702a7d40fa5f869b7f7b4437ab6a87eb8d98ffafeee51e85bbe955932a189 +"@types/estree@npm:*, @types/estree@npm:^1.0.0": + version: 1.0.1 + resolution: "@types/estree@npm:1.0.1" + checksum: e9aa175eacb797216fafce4d41e8202c7a75555bc55232dee0f9903d7171f8f19f0ae7d5191bb1a88cb90e65468be508c0df850a9fb81b4433b293a5a749899d languageName: node linkType: hard @@ -2863,6 +2862,13 @@ __metadata: languageName: node linkType: hard +"@types/gtag.js@npm:^0.0.12": + version: 0.0.12 + resolution: "@types/gtag.js@npm:0.0.12" + checksum: 34efc27fbfd0013255b8bfd4af38ded9d5a6ba761130c76f17fd3a9585d83acc88d8005aab667cfec4bdec0e7c7217f689739799a8f61aed0edb929be58b162e + languageName: node + linkType: hard + "@types/hast@npm:^2.0.0": version: 2.3.4 resolution: "@types/hast@npm:2.3.4" @@ -2886,6 +2892,13 @@ __metadata: languageName: node linkType: hard +"@types/http-cache-semantics@npm:^4.0.1": + version: 4.0.1 + resolution: "@types/http-cache-semantics@npm:4.0.1" + checksum: 1048aacf627829f0d5f00184e16548205cd9f964bf0841c29b36bc504509230c40bc57c39778703a1c965a6f5b416ae2cbf4c1d4589c889d2838dd9dbfccf6e9 + languageName: node + linkType: hard + "@types/http-proxy@npm:^1.17.8": version: 1.17.9 resolution: "@types/http-proxy@npm:1.17.9" @@ -2927,15 +2940,6 @@ __metadata: languageName: node linkType: hard -"@types/keyv@npm:^3.1.1": - version: 3.1.4 - resolution: "@types/keyv@npm:3.1.4" - dependencies: - "@types/node": "*" - checksum: e009a2bfb50e90ca9b7c6e8f648f8464067271fd99116f881073fa6fa76dc8d0133181dd65e6614d5fb1220d671d67b0124aef7d97dc02d7e342ab143a47779d - languageName: node - linkType: hard - "@types/mdast@npm:^3.0.0": version: 3.0.10 resolution: "@types/mdast@npm:3.0.10" @@ -2945,6 +2949,13 @@ __metadata: languageName: node linkType: hard +"@types/mdx@npm:^2.0.0": + version: 2.0.5 + resolution: "@types/mdx@npm:2.0.5" + checksum: 1069baff0b2d0fb0bc724748e2386af626cc30f8ef99e680afb4dee566ed0aeabd31cea774212a7033f491e594a0acc234116078b252cba94ac413f91eb585a3 + languageName: node + linkType: hard + "@types/mime@npm:*": version: 3.0.1 resolution: "@types/mime@npm:3.0.1" @@ -2952,6 +2963,13 @@ __metadata: languageName: node linkType: hard +"@types/ms@npm:*": + version: 0.7.31 + resolution: "@types/ms@npm:0.7.31" + checksum: daadd354aedde024cce6f5aa873fefe7b71b22cd0e28632a69e8b677aeb48ae8caa1c60e5919bb781df040d116b01cb4316335167a3fc0ef6a63fa3614c0f6da + languageName: node + linkType: hard + "@types/node@npm:*": version: 18.11.13 resolution: "@types/node@npm:18.11.13" @@ -2973,13 +2991,6 @@ __metadata: languageName: node linkType: hard -"@types/parse5@npm:^5.0.0": - version: 5.0.3 - resolution: "@types/parse5@npm:5.0.3" - checksum: d6b7495cb1850f9f2e9c5e103ede9f2d30a5320669707b105c403868adc9e4bf8d3a7ff314cc23f67826bbbbbc0e6147346ce9062ab429f099dba7a01f463919 - languageName: node - linkType: hard - "@types/prop-types@npm:*": version: 15.7.5 resolution: "@types/prop-types@npm:15.7.5" @@ -3033,23 +3044,14 @@ __metadata: languageName: node linkType: hard -"@types/react@npm:*": - version: 18.0.26 - resolution: "@types/react@npm:18.0.26" +"@types/react@npm:*, @types/react@npm:>=16": + version: 18.2.0 + resolution: "@types/react@npm:18.2.0" dependencies: "@types/prop-types": "*" "@types/scheduler": "*" csstype: ^3.0.2 - checksum: b62f0ea3cdfa68e106391728325057ad36f1bde7ba2dfae029472c47e01e482bc77c6ba4f1dad59f3f04ee81cb597618ff7c30a33c157c0a20462b6dd6aa2d4d - languageName: node - linkType: hard - -"@types/responselike@npm:^1.0.0": - version: 1.0.0 - resolution: "@types/responselike@npm:1.0.0" - dependencies: - "@types/node": "*" - checksum: e99fc7cc6265407987b30deda54c1c24bb1478803faf6037557a774b2f034c5b097ffd65847daa87e82a61a250d919f35c3588654b0fdaa816906650f596d1b0 + checksum: db3d92b423150222a666329f7aa3023e3e942044700557b8a7d161530847e621aec9f56c9e7f71761b06dd164c8a7b17ad52355863efe80963dffa5537e8e5fd languageName: node linkType: hard @@ -3104,7 +3106,7 @@ __metadata: languageName: node linkType: hard -"@types/unist@npm:*, @types/unist@npm:^2.0.0, @types/unist@npm:^2.0.2, @types/unist@npm:^2.0.3": +"@types/unist@npm:*, @types/unist@npm:^2.0.0": version: 2.0.6 resolution: "@types/unist@npm:2.0.6" checksum: 25cb860ff10dde48b54622d58b23e66214211a61c84c0f15f88d38b61aa1b53d4d46e42b557924a93178c501c166aa37e28d7f6d994aba13d24685326272d5db @@ -3143,154 +3145,154 @@ __metadata: languageName: node linkType: hard -"@webassemblyjs/ast@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/ast@npm:1.11.1" +"@webassemblyjs/ast@npm:1.11.5, @webassemblyjs/ast@npm:^1.11.5": + version: 1.11.5 + resolution: "@webassemblyjs/ast@npm:1.11.5" dependencies: - "@webassemblyjs/helper-numbers": 1.11.1 - "@webassemblyjs/helper-wasm-bytecode": 1.11.1 - checksum: 1eee1534adebeece635362f8e834ae03e389281972611408d64be7895fc49f48f98fddbbb5339bf8a72cb101bcb066e8bca3ca1bf1ef47dadf89def0395a8d87 + "@webassemblyjs/helper-numbers": 1.11.5 + "@webassemblyjs/helper-wasm-bytecode": 1.11.5 + checksum: 7df16d8d4364d40e2506776330f8114fddc6494e6e18e8d5ec386312a0881a564cef136b0a74cc4a6ba284e2ff6bad890ddc029a0ba6cf45cc15186e638db118 languageName: node linkType: hard -"@webassemblyjs/floating-point-hex-parser@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.1" - checksum: b8efc6fa08e4787b7f8e682182d84dfdf8da9d9c77cae5d293818bc4a55c1f419a87fa265ab85252b3e6c1fd323d799efea68d825d341a7c365c64bc14750e97 +"@webassemblyjs/floating-point-hex-parser@npm:1.11.5": + version: 1.11.5 + resolution: "@webassemblyjs/floating-point-hex-parser@npm:1.11.5" + checksum: a6f35e3035a1ec4e446fa43da01539f3ed7e0f4b53d152f36ff34be1b63b08d86c4b09b6af375c95472a75f0c37b3b98b07199d157e767b8b3274e7a3962890c languageName: node linkType: hard -"@webassemblyjs/helper-api-error@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/helper-api-error@npm:1.11.1" - checksum: 0792813f0ed4a0e5ee0750e8b5d0c631f08e927f4bdfdd9fe9105dc410c786850b8c61bff7f9f515fdfb149903bec3c976a1310573a4c6866a94d49bc7271959 +"@webassemblyjs/helper-api-error@npm:1.11.5": + version: 1.11.5 + resolution: "@webassemblyjs/helper-api-error@npm:1.11.5" + checksum: 717a6ffb3283bd24a7b74710c9bd3d71ec331a26c15446441af19fae9f087e36acb8dcf25b900b6897a1d1eff838e463fe678d66281e7eccee9a3ac0e3447372 languageName: node linkType: hard -"@webassemblyjs/helper-buffer@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/helper-buffer@npm:1.11.1" - checksum: a337ee44b45590c3a30db5a8b7b68a717526cf967ada9f10253995294dbd70a58b2da2165222e0b9830cd4fc6e4c833bf441a721128d1fe2e9a7ab26b36003ce +"@webassemblyjs/helper-buffer@npm:1.11.5": + version: 1.11.5 + resolution: "@webassemblyjs/helper-buffer@npm:1.11.5" + checksum: 2c0925b1c3c9b115c183b88d9cf1a12e87fa4fc83ef985aa2a65d72cda543eba6b73b378d231b4feb810b17d3aa6cd297bd603199854346f8a50e3458d7ebbc0 languageName: node linkType: hard -"@webassemblyjs/helper-numbers@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/helper-numbers@npm:1.11.1" +"@webassemblyjs/helper-numbers@npm:1.11.5": + version: 1.11.5 + resolution: "@webassemblyjs/helper-numbers@npm:1.11.5" dependencies: - "@webassemblyjs/floating-point-hex-parser": 1.11.1 - "@webassemblyjs/helper-api-error": 1.11.1 + "@webassemblyjs/floating-point-hex-parser": 1.11.5 + "@webassemblyjs/helper-api-error": 1.11.5 "@xtuc/long": 4.2.2 - checksum: 44d2905dac2f14d1e9b5765cf1063a0fa3d57295c6d8930f6c59a36462afecc6e763e8a110b97b342a0f13376166c5d41aa928e6ced92e2f06b071fd0db59d3a + checksum: 49c8bbf561d4df38009e38e6357c396f4454773fd31a03579a8e050a2b28053f5c47f675f00a37f79a65082c938c2159fa603049688ac01b1bafdb472c21110c languageName: node linkType: hard -"@webassemblyjs/helper-wasm-bytecode@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.1" - checksum: eac400113127832c88f5826bcc3ad1c0db9b3dbd4c51a723cfdb16af6bfcbceb608170fdaac0ab7731a7e18b291be7af68a47fcdb41cfe0260c10857e7413d97 +"@webassemblyjs/helper-wasm-bytecode@npm:1.11.5": + version: 1.11.5 + resolution: "@webassemblyjs/helper-wasm-bytecode@npm:1.11.5" + checksum: 4e868de92587e131a7f22bc4eb44eee60c178d4c2c3eeabcb973b4eac73ec477f25d5f838394797265dbe4b600e781c6e150c762a45f249b94bf0711e73409a7 languageName: node linkType: hard -"@webassemblyjs/helper-wasm-section@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/helper-wasm-section@npm:1.11.1" +"@webassemblyjs/helper-wasm-section@npm:1.11.5": + version: 1.11.5 + resolution: "@webassemblyjs/helper-wasm-section@npm:1.11.5" dependencies: - "@webassemblyjs/ast": 1.11.1 - "@webassemblyjs/helper-buffer": 1.11.1 - "@webassemblyjs/helper-wasm-bytecode": 1.11.1 - "@webassemblyjs/wasm-gen": 1.11.1 - checksum: 617696cfe8ecaf0532763162aaf748eb69096fb27950219bb87686c6b2e66e11cd0614d95d319d0ab1904bc14ebe4e29068b12c3e7c5e020281379741fe4bedf + "@webassemblyjs/ast": 1.11.5 + "@webassemblyjs/helper-buffer": 1.11.5 + "@webassemblyjs/helper-wasm-bytecode": 1.11.5 + "@webassemblyjs/wasm-gen": 1.11.5 + checksum: 1752d7e0dbbf236a5cdc2257e1626a3562bfb0a7d2e967dc5e798c73088f18f20a991491565e2ffee61615f08035b4760e7aa080380bb60b86b393b6eb7486ae languageName: node linkType: hard -"@webassemblyjs/ieee754@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/ieee754@npm:1.11.1" +"@webassemblyjs/ieee754@npm:1.11.5": + version: 1.11.5 + resolution: "@webassemblyjs/ieee754@npm:1.11.5" dependencies: "@xtuc/ieee754": ^1.2.0 - checksum: 23a0ac02a50f244471631802798a816524df17e56b1ef929f0c73e3cde70eaf105a24130105c60aff9d64a24ce3b640dad443d6f86e5967f922943a7115022ec + checksum: 68a855a3e3dd488fff4d2d100e491cb6ac07f728c9432f3216b8e1bb0a374b397b0a5f58fd3b71195e525d49c0c827db15c18897e1c220c629e759b19978e64c languageName: node linkType: hard -"@webassemblyjs/leb128@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/leb128@npm:1.11.1" +"@webassemblyjs/leb128@npm:1.11.5": + version: 1.11.5 + resolution: "@webassemblyjs/leb128@npm:1.11.5" dependencies: "@xtuc/long": 4.2.2 - checksum: 33ccc4ade2f24de07bf31690844d0b1ad224304ee2062b0e464a610b0209c79e0b3009ac190efe0e6bd568b0d1578d7c3047fc1f9d0197c92fc061f56224ff4a + checksum: 555314708b6615c203c31a9dd810141c6de728e0043c2169ca69905ccf4d8603102994cb74ac5d057ac229bfc2be40f69cad2edd134ef2b909ef694eefe7bba6 languageName: node linkType: hard -"@webassemblyjs/utf8@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/utf8@npm:1.11.1" - checksum: 972c5cfc769d7af79313a6bfb96517253a270a4bf0c33ba486aa43cac43917184fb35e51dfc9e6b5601548cd5931479a42e42c89a13bb591ffabebf30c8a6a0b +"@webassemblyjs/utf8@npm:1.11.5": + version: 1.11.5 + resolution: "@webassemblyjs/utf8@npm:1.11.5" + checksum: d8f67a5650d9bf26810da76e72d0547211a44f30f35657953f547e08185facb39ff326920bddec96d35b5cc65e4e66b1f23c6461847e2f93fad2a60b0bb20211 languageName: node linkType: hard -"@webassemblyjs/wasm-edit@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/wasm-edit@npm:1.11.1" +"@webassemblyjs/wasm-edit@npm:^1.11.5": + version: 1.11.5 + resolution: "@webassemblyjs/wasm-edit@npm:1.11.5" dependencies: - "@webassemblyjs/ast": 1.11.1 - "@webassemblyjs/helper-buffer": 1.11.1 - "@webassemblyjs/helper-wasm-bytecode": 1.11.1 - "@webassemblyjs/helper-wasm-section": 1.11.1 - "@webassemblyjs/wasm-gen": 1.11.1 - "@webassemblyjs/wasm-opt": 1.11.1 - "@webassemblyjs/wasm-parser": 1.11.1 - "@webassemblyjs/wast-printer": 1.11.1 - checksum: 6d7d9efaec1227e7ef7585a5d7ff0be5f329f7c1c6b6c0e906b18ed2e9a28792a5635e450aca2d136770d0207225f204eff70a4b8fd879d3ac79e1dcc26dbeb9 + "@webassemblyjs/ast": 1.11.5 + "@webassemblyjs/helper-buffer": 1.11.5 + "@webassemblyjs/helper-wasm-bytecode": 1.11.5 + "@webassemblyjs/helper-wasm-section": 1.11.5 + "@webassemblyjs/wasm-gen": 1.11.5 + "@webassemblyjs/wasm-opt": 1.11.5 + "@webassemblyjs/wasm-parser": 1.11.5 + "@webassemblyjs/wast-printer": 1.11.5 + checksum: 790142a1e282848201c7b68860aabc0141ee44a98a62c3f0af05f8de3cc69b439c3af54ae9a06acbbfbf7fd192b30ee97fb31eda3e08973cae373534ad2135c7 languageName: node linkType: hard -"@webassemblyjs/wasm-gen@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/wasm-gen@npm:1.11.1" +"@webassemblyjs/wasm-gen@npm:1.11.5": + version: 1.11.5 + resolution: "@webassemblyjs/wasm-gen@npm:1.11.5" dependencies: - "@webassemblyjs/ast": 1.11.1 - "@webassemblyjs/helper-wasm-bytecode": 1.11.1 - "@webassemblyjs/ieee754": 1.11.1 - "@webassemblyjs/leb128": 1.11.1 - "@webassemblyjs/utf8": 1.11.1 - checksum: 1f6921e640293bf99fb16b21e09acb59b340a79f986c8f979853a0ae9f0b58557534b81e02ea2b4ef11e929d946708533fd0693c7f3712924128fdafd6465f5b + "@webassemblyjs/ast": 1.11.5 + "@webassemblyjs/helper-wasm-bytecode": 1.11.5 + "@webassemblyjs/ieee754": 1.11.5 + "@webassemblyjs/leb128": 1.11.5 + "@webassemblyjs/utf8": 1.11.5 + checksum: 0122df4e5ce52d873f19f34b3ebe8237072e9e6a69667cbec42a2d98ba49f85ea2ed3d935195e6a7ad4f64b9dd7da42883f057fe1103d2062bc90f3428b063fe languageName: node linkType: hard -"@webassemblyjs/wasm-opt@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/wasm-opt@npm:1.11.1" +"@webassemblyjs/wasm-opt@npm:1.11.5": + version: 1.11.5 + resolution: "@webassemblyjs/wasm-opt@npm:1.11.5" dependencies: - "@webassemblyjs/ast": 1.11.1 - "@webassemblyjs/helper-buffer": 1.11.1 - "@webassemblyjs/wasm-gen": 1.11.1 - "@webassemblyjs/wasm-parser": 1.11.1 - checksum: 21586883a20009e2b20feb67bdc451bbc6942252e038aae4c3a08e6f67b6bae0f5f88f20bfc7bd0452db5000bacaf5ab42b98cf9aa034a6c70e9fc616142e1db + "@webassemblyjs/ast": 1.11.5 + "@webassemblyjs/helper-buffer": 1.11.5 + "@webassemblyjs/wasm-gen": 1.11.5 + "@webassemblyjs/wasm-parser": 1.11.5 + checksum: f9416b0dece071e308616fb30e560f0c3c53b5bb23cc4409781b8c47d31e935b27e9a248c65aee9dd9136271e37a4c5cb0971b27e5adf623020fbb298423fe55 languageName: node linkType: hard -"@webassemblyjs/wasm-parser@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/wasm-parser@npm:1.11.1" +"@webassemblyjs/wasm-parser@npm:1.11.5, @webassemblyjs/wasm-parser@npm:^1.11.5": + version: 1.11.5 + resolution: "@webassemblyjs/wasm-parser@npm:1.11.5" dependencies: - "@webassemblyjs/ast": 1.11.1 - "@webassemblyjs/helper-api-error": 1.11.1 - "@webassemblyjs/helper-wasm-bytecode": 1.11.1 - "@webassemblyjs/ieee754": 1.11.1 - "@webassemblyjs/leb128": 1.11.1 - "@webassemblyjs/utf8": 1.11.1 - checksum: 1521644065c360e7b27fad9f4bb2df1802d134dd62937fa1f601a1975cde56bc31a57b6e26408b9ee0228626ff3ba1131ae6f74ffb7d718415b6528c5a6dbfc2 + "@webassemblyjs/ast": 1.11.5 + "@webassemblyjs/helper-api-error": 1.11.5 + "@webassemblyjs/helper-wasm-bytecode": 1.11.5 + "@webassemblyjs/ieee754": 1.11.5 + "@webassemblyjs/leb128": 1.11.5 + "@webassemblyjs/utf8": 1.11.5 + checksum: 094b3df07532cd2a1db91710622cbaf3d7467a361f9f73dc564999385a472fcc08497d8ccf9294bd7c8813d5e2056c06a81e032abb60520168899605fde9b12c languageName: node linkType: hard -"@webassemblyjs/wast-printer@npm:1.11.1": - version: 1.11.1 - resolution: "@webassemblyjs/wast-printer@npm:1.11.1" +"@webassemblyjs/wast-printer@npm:1.11.5": + version: 1.11.5 + resolution: "@webassemblyjs/wast-printer@npm:1.11.5" dependencies: - "@webassemblyjs/ast": 1.11.1 + "@webassemblyjs/ast": 1.11.5 "@xtuc/long": 4.2.2 - checksum: f15ae4c2441b979a3b4fce78f3d83472fb22350c6dc3fd34bfe7c3da108e0b2360718734d961bba20e7716cb8578e964b870da55b035e209e50ec9db0378a3f7 + checksum: c2995224c56b403be7fce7afbb3ad6b2ceadce07a47b28bce745eabb0435fa363c0180bca907d28703ece02422d0de219e689253b55de288c79b8f92416c1d71 languageName: node linkType: hard @@ -3334,6 +3336,15 @@ __metadata: languageName: node linkType: hard +"acorn-jsx@npm:^5.0.0": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 + languageName: node + linkType: hard + "acorn-walk@npm:^8.0.0": version: 8.2.0 resolution: "acorn-walk@npm:8.2.0" @@ -3341,12 +3352,12 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.0.4, acorn@npm:^8.5.0, acorn@npm:^8.7.1": - version: 8.8.1 - resolution: "acorn@npm:8.8.1" +"acorn@npm:^8.0.0, acorn@npm:^8.0.4, acorn@npm:^8.5.0, acorn@npm:^8.7.1": + version: 8.8.2 + resolution: "acorn@npm:8.8.2" bin: acorn: bin/acorn - checksum: 4079b67283b94935157698831967642f24a075c52ce3feaaaafe095776dfbe15d86a1b33b1e53860fc0d062ed6c83f4284a5c87c85b9ad51853a01173da6097f + checksum: f790b99a1bf63ef160c967e23c46feea7787e531292bb827126334612c234ed489a0dc2c7ba33156416f0ffa8d25bf2b0fdb7f35c2ba60eb3e960572bece4001 languageName: node linkType: hard @@ -3421,7 +3432,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.12.2, ajv@npm:^6.12.4, ajv@npm:^6.12.5": +"ajv@npm:^6.12.2, ajv@npm:^6.12.5": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -3445,40 +3456,40 @@ __metadata: languageName: node linkType: hard -"algoliasearch-helper@npm:^3.10.0": - version: 3.11.1 - resolution: "algoliasearch-helper@npm:3.11.1" +"algoliasearch-helper@npm:^3.12.0": + version: 3.12.0 + resolution: "algoliasearch-helper@npm:3.12.0" dependencies: "@algolia/events": ^4.0.1 peerDependencies: algoliasearch: ">= 3.1 < 6" - checksum: 207616ca4549e2d06a278357ce478951a37c606f40f5b39b8e2d13bba143023a10814f065cd89629e5f2c121935d61a97d96bfb687ae7a98ef25b63da37fcf70 + checksum: 177ead2a04c60f1005a9ccac4096714cd992f0f158b91791deb719765f9a94ea67efc782f29cf5182e9a8ce75bcf7461bb8bf8bab9846b5fa1b9ed1f8a2b902f languageName: node linkType: hard -"algoliasearch@npm:^4.0.0, algoliasearch@npm:^4.13.1": - version: 4.14.2 - resolution: "algoliasearch@npm:4.14.2" +"algoliasearch@npm:^4.0.0, algoliasearch@npm:^4.15.0": + version: 4.17.0 + resolution: "algoliasearch@npm:4.17.0" dependencies: - "@algolia/cache-browser-local-storage": 4.14.2 - "@algolia/cache-common": 4.14.2 - "@algolia/cache-in-memory": 4.14.2 - "@algolia/client-account": 4.14.2 - "@algolia/client-analytics": 4.14.2 - "@algolia/client-common": 4.14.2 - "@algolia/client-personalization": 4.14.2 - "@algolia/client-search": 4.14.2 - "@algolia/logger-common": 4.14.2 - "@algolia/logger-console": 4.14.2 - "@algolia/requester-browser-xhr": 4.14.2 - "@algolia/requester-common": 4.14.2 - "@algolia/requester-node-http": 4.14.2 - "@algolia/transporter": 4.14.2 - checksum: 4365a0d0f066f3ad6798e4dd0d7487cba1cf4546dac27e66cb84865f91955d6537dc5bad4e71d4bf22a68c0b721b1e6f20109203566ca1a252fe2713d713c0fd + "@algolia/cache-browser-local-storage": 4.17.0 + "@algolia/cache-common": 4.17.0 + "@algolia/cache-in-memory": 4.17.0 + "@algolia/client-account": 4.17.0 + "@algolia/client-analytics": 4.17.0 + "@algolia/client-common": 4.17.0 + "@algolia/client-personalization": 4.17.0 + "@algolia/client-search": 4.17.0 + "@algolia/logger-common": 4.17.0 + "@algolia/logger-console": 4.17.0 + "@algolia/requester-browser-xhr": 4.17.0 + "@algolia/requester-common": 4.17.0 + "@algolia/requester-node-http": 4.17.0 + "@algolia/transporter": 4.17.0 + checksum: 982fd46519283ea769142aebb24eb15a0f8090a8211159c60772d0333bbb7f4dec1edcc72fc79223aa87ebf2a970d9d12b5735236f47fc3b5c5b07dd2eb24e35 languageName: node linkType: hard -"ansi-align@npm:^3.0.0, ansi-align@npm:^3.0.1": +"ansi-align@npm:^3.0.1": version: 3.0.1 resolution: "ansi-align@npm:3.0.1" dependencies: @@ -3519,7 +3530,7 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": +"ansi-styles@npm:^4.1.0": version: 4.3.0 resolution: "ansi-styles@npm:4.3.0" dependencies: @@ -3613,6 +3624,22 @@ __metadata: languageName: node linkType: hard +"astring@npm:^1.8.0": + version: 1.8.4 + resolution: "astring@npm:1.8.4" + bin: + astring: bin/astring + checksum: bc0b98087350c4a0c8a510d491d648cf8b299ec904629d5e0f5ae8d2ccc515cd27475327bb9729c7e92f4a4873adcd05cef15379d0f6f7293f1320319f0d24f0 + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be + languageName: node + linkType: hard + "at-least-node@npm:^1.0.0": version: 1.0.0 resolution: "at-least-node@npm:1.0.0" @@ -3620,12 +3647,12 @@ __metadata: languageName: node linkType: hard -"autoprefixer@npm:^10.4.12, autoprefixer@npm:^10.4.7": - version: 10.4.13 - resolution: "autoprefixer@npm:10.4.13" +"autoprefixer@npm:^10.4.12, autoprefixer@npm:^10.4.13": + version: 10.4.14 + resolution: "autoprefixer@npm:10.4.14" dependencies: - browserslist: ^4.21.4 - caniuse-lite: ^1.0.30001426 + browserslist: ^4.21.5 + caniuse-lite: ^1.0.30001464 fraction.js: ^4.2.0 normalize-range: ^0.1.2 picocolors: ^1.0.0 @@ -3634,43 +3661,30 @@ __metadata: postcss: ^8.1.0 bin: autoprefixer: bin/autoprefixer - checksum: dcb1cb7ae96a3363d65d82e52f9a0a7d8c982256f6fd032d7e1ec311f099c23acfebfd517ff8e96bf93f716a66c4ea2b80c60aa19efd2f474ce434bd75ef7b79 + checksum: e9f18e664a4e4a54a8f4ec5f6b49ed228ec45afaa76efcae361c93721795dc5ab644f36d2fdfc0dea446b02a8067b9372f91542ea431994399e972781ed46d95 languageName: node linkType: hard -"axios@npm:^0.25.0": - version: 0.25.0 - resolution: "axios@npm:0.25.0" +"axios@npm:^0.27.2": + version: 0.27.2 + resolution: "axios@npm:0.27.2" dependencies: - follow-redirects: ^1.14.7 - checksum: 2a8a3787c05f2a0c9c3878f49782357e2a9f38945b93018fb0c4fd788171c43dceefbb577988628e09fea53952744d1ecebde234b561f1e703aa43e0a598a3ad + follow-redirects: ^1.14.9 + form-data: ^4.0.0 + checksum: 38cb7540465fe8c4102850c4368053c21683af85c5fdf0ea619f9628abbcb59415d1e22ebc8a6390d2bbc9b58a9806c874f139767389c862ec9b772235f06854 languageName: node linkType: hard -"babel-loader@npm:^8.2.5": - version: 8.3.0 - resolution: "babel-loader@npm:8.3.0" +"babel-loader@npm:^9.1.2": + version: 9.1.2 + resolution: "babel-loader@npm:9.1.2" dependencies: - find-cache-dir: ^3.3.1 - loader-utils: ^2.0.0 - make-dir: ^3.1.0 - schema-utils: ^2.6.5 + find-cache-dir: ^3.3.2 + schema-utils: ^4.0.0 peerDependencies: - "@babel/core": ^7.0.0 - webpack: ">=2" - checksum: d48bcf9e030e598656ad3ff5fb85967db2eaaf38af5b4a4b99d25618a2057f9f100e6b231af2a46c1913206db506115ca7a8cbdf52c9c73d767070dae4352ab5 - languageName: node - linkType: hard - -"babel-plugin-apply-mdx-type-prop@npm:1.6.22": - version: 1.6.22 - resolution: "babel-plugin-apply-mdx-type-prop@npm:1.6.22" - dependencies: - "@babel/helper-plugin-utils": 7.10.4 - "@mdx-js/util": 1.6.22 - peerDependencies: - "@babel/core": ^7.11.6 - checksum: 43e2100164a8f3e46fddd76afcbfb1f02cbebd5612cfe63f3d344a740b0afbdc4d2bf5659cffe9323dd2554c7b86b23ebedae9dadcec353b6594f4292a1a28e2 + "@babel/core": ^7.12.0 + webpack: ">=5" + checksum: f0edb8e157f9806b810ba3f2c8ca8fa489d377ae5c2b7b00c2ace900a6925641ce4ec520b9c12f70e37b94aa5366e7003e0f6271b26821643e109966ce741cb7 languageName: node linkType: hard @@ -3683,15 +3697,6 @@ __metadata: languageName: node linkType: hard -"babel-plugin-extract-import-names@npm:1.6.22": - version: 1.6.22 - resolution: "babel-plugin-extract-import-names@npm:1.6.22" - dependencies: - "@babel/helper-plugin-utils": 7.10.4 - checksum: 145ccf09c96d36411d340e78086555f8d4d5924ea39fcb0eca461c066cfa98bc4344982bb35eb85d054ef88f8d4dfc0205ba27370c1d8fcc78191b02908d044d - languageName: node - linkType: hard - "babel-plugin-polyfill-corejs2@npm:^0.3.3": version: 0.3.3 resolution: "babel-plugin-polyfill-corejs2@npm:0.3.3" @@ -3732,10 +3737,10 @@ __metadata: version: 0.0.0-use.local resolution: "backstage-microsite@workspace:." dependencies: - "@docusaurus/core": 2.4.0 - "@docusaurus/module-type-aliases": 2.4.0 - "@docusaurus/plugin-client-redirects": ^2.3.1 - "@docusaurus/preset-classic": 2.4.0 + "@docusaurus/core": 0.0.0-5566 + "@docusaurus/module-type-aliases": 0.0.0-5566 + "@docusaurus/plugin-client-redirects": 0.0.0-5566 + "@docusaurus/preset-classic": 0.0.0-5566 "@spotify/prettier-config": ^14.0.0 "@swc/core": ^1.3.46 "@tsconfig/docusaurus": ^1.0.6 @@ -3747,7 +3752,6 @@ __metadata: prism-react-renderer: ^1.3.5 react: ^17.0.2 react-dom: ^17.0.2 - replace: ^1.2.2 sass: ^1.57.1 swc-loader: ^0.2.3 typescript: ^4.9.4 @@ -3755,10 +3759,10 @@ __metadata: languageName: unknown linkType: soft -"bail@npm:^1.0.0": - version: 1.0.5 - resolution: "bail@npm:1.0.5" - checksum: 6c334940d7eaa4e656a12fb12407b6555649b6deb6df04270fa806e0da82684ebe4a4e47815b271c794b40f8d6fa286e0c248b14ddbabb324a917fab09b7301a +"bail@npm:^2.0.0": + version: 2.0.2 + resolution: "bail@npm:2.0.2" + checksum: aab4e8ccdc8d762bf3fdfce8e706601695620c0c2eda256dd85088dc0be3cfd7ff126f6e99c2bee1f24f5d418414aacf09d7f9702f16d6963df2fa488cda8824 languageName: node linkType: hard @@ -3836,22 +3840,6 @@ __metadata: languageName: node linkType: hard -"boxen@npm:^5.0.0": - version: 5.1.2 - resolution: "boxen@npm:5.1.2" - dependencies: - ansi-align: ^3.0.0 - camelcase: ^6.2.0 - chalk: ^4.1.0 - cli-boxes: ^2.2.1 - string-width: ^4.2.2 - type-fest: ^0.20.2 - widest-line: ^3.1.0 - wrap-ansi: ^7.0.0 - checksum: 82d03e42a72576ff235123f17b7c505372fe05c83f75f61e7d4fa4bcb393897ec95ce766fecb8f26b915f0f7a7227d66e5ec7cef43f5b2bd9d3aeed47ec55877 - languageName: node - linkType: hard - "boxen@npm:^6.2.1": version: 6.2.1 resolution: "boxen@npm:6.2.1" @@ -3868,6 +3856,22 @@ __metadata: languageName: node linkType: hard +"boxen@npm:^7.0.0": + version: 7.0.2 + resolution: "boxen@npm:7.0.2" + dependencies: + ansi-align: ^3.0.1 + camelcase: ^7.0.0 + chalk: ^5.0.1 + cli-boxes: ^3.0.0 + string-width: ^5.1.2 + type-fest: ^2.13.0 + widest-line: ^4.0.1 + wrap-ansi: ^8.0.1 + checksum: 9bd2977ac8d8df19285ee7d9e1e84a2dfa52a363df93110a5ba0217f5a628a39e09e5bc9853ad7dc32cd817ddfc9144da74014bcf67c40f7e2789e413981e15e + languageName: node + linkType: hard + "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -3896,17 +3900,17 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.16.6, browserslist@npm:^4.18.1, browserslist@npm:^4.21.3, browserslist@npm:^4.21.4": - version: 4.21.4 - resolution: "browserslist@npm:4.21.4" +"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.18.1, browserslist@npm:^4.21.3, browserslist@npm:^4.21.4, browserslist@npm:^4.21.5": + version: 4.21.5 + resolution: "browserslist@npm:4.21.5" dependencies: - caniuse-lite: ^1.0.30001400 - electron-to-chromium: ^1.4.251 - node-releases: ^2.0.6 - update-browserslist-db: ^1.0.9 + caniuse-lite: ^1.0.30001449 + electron-to-chromium: ^1.4.284 + node-releases: ^2.0.8 + update-browserslist-db: ^1.0.10 bin: browserslist: cli.js - checksum: 4af3793704dbb4615bcd29059ab472344dc7961c8680aa6c4bb84f05340e14038d06a5aead58724eae69455b8fade8b8c69f1638016e87e5578969d74c078b79 + checksum: 9755986b22e73a6a1497fd8797aedd88e04270be33ce66ed5d85a1c8a798292a65e222b0f251bafa1c2522261e237d73b08b58689d4920a607e5a53d56dc4706 languageName: node linkType: hard @@ -3957,18 +3961,25 @@ __metadata: languageName: node linkType: hard -"cacheable-request@npm:^6.0.0": - version: 6.1.0 - resolution: "cacheable-request@npm:6.1.0" +"cacheable-lookup@npm:^7.0.0": + version: 7.0.0 + resolution: "cacheable-lookup@npm:7.0.0" + checksum: 9e2856763fc0a7347ab34d704c010440b819d4bb5e3593b664381b7433e942dd22e67ee5581f12256f908e79b82d30b86ebbacf40a081bfe10ee93fbfbc2d6a9 + languageName: node + linkType: hard + +"cacheable-request@npm:^10.2.8": + version: 10.2.10 + resolution: "cacheable-request@npm:10.2.10" dependencies: - clone-response: ^1.0.2 - get-stream: ^5.1.0 - http-cache-semantics: ^4.0.0 - keyv: ^3.0.0 - lowercase-keys: ^2.0.0 - normalize-url: ^4.1.0 - responselike: ^1.0.2 - checksum: b510b237b18d17e89942e9ee2d2a077cb38db03f12167fd100932dfa8fc963424bfae0bfa1598df4ae16c944a5484e43e03df8f32105b04395ee9495e9e4e9f1 + "@types/http-cache-semantics": ^4.0.1 + get-stream: ^6.0.1 + http-cache-semantics: ^4.1.1 + keyv: ^4.5.2 + mimic-response: ^4.0.0 + normalize-url: ^8.0.0 + responselike: ^3.0.0 + checksum: 6f56cf6dc88c000936c89e386fdfd65c9a7833f6a4f73314f546287352efca50ef8c7ccc80c64d5c51fe104f5a60356366e190846f56abf3f2e90c1bacec7eee languageName: node linkType: hard @@ -3999,20 +4010,6 @@ __metadata: languageName: node linkType: hard -"camelcase-css@npm:2.0.1": - version: 2.0.1 - resolution: "camelcase-css@npm:2.0.1" - checksum: 1cec2b3b3dcb5026688a470b00299a8db7d904c4802845c353dbd12d9d248d3346949a814d83bfd988d4d2e5b9904c07efe76fecd195a1d4f05b543e7c0b56b1 - languageName: node - linkType: hard - -"camelcase@npm:^5.0.0": - version: 5.3.1 - resolution: "camelcase@npm:5.3.1" - checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b - languageName: node - linkType: hard - "camelcase@npm:^6.2.0": version: 6.3.0 resolution: "camelcase@npm:6.3.0" @@ -4020,6 +4017,13 @@ __metadata: languageName: node linkType: hard +"camelcase@npm:^7.0.0": + version: 7.0.1 + resolution: "camelcase@npm:7.0.1" + checksum: 86ab8f3ebf08bcdbe605a211a242f00ed30d8bfb77dab4ebb744dd36efbc84432d1c4adb28975ba87a1b8be40a80fbd1e60e2f06565315918fa7350011a26d3d + languageName: node + linkType: hard + "caniuse-api@npm:^3.0.0": version: 3.0.0 resolution: "caniuse-api@npm:3.0.0" @@ -4032,21 +4036,21 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001400, caniuse-lite@npm:^1.0.30001426": - version: 1.0.30001439 - resolution: "caniuse-lite@npm:1.0.30001439" - checksum: 3912dd536c9735713ca85e47721988bbcefb881ddb4886b0b9923fa984247fd22cba032cf268e57d158af0e8a2ae2eae042ae01942a1d6d7849fa9fa5d62fb82 +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001449, caniuse-lite@npm:^1.0.30001464": + version: 1.0.30001481 + resolution: "caniuse-lite@npm:1.0.30001481" + checksum: 8200a043c191b4fd4fe0beda37a58fd61869c895ab93f87bdd0420e5927453f48434d716ce9da8552ff6c3ecc4dcd1366354cda3a134f3cc844af741574a7cab languageName: node linkType: hard -"ccount@npm:^1.0.0": - version: 1.1.0 - resolution: "ccount@npm:1.1.0" - checksum: b335a79d0aa4308919cf7507babcfa04ac63d389ebed49dbf26990d4607c8a4713cde93cc83e707d84571ddfe1e7615dad248be9bc422ae4c188210f71b08b78 +"ccount@npm:^2.0.0": + version: 2.0.1 + resolution: "ccount@npm:2.0.1" + checksum: 48193dada54c9e260e0acf57fc16171a225305548f9ad20d5471e0f7a8c026aedd8747091dccb0d900cde7df4e4ddbd235df0d8de4a64c71b12f0d3303eeafd4 languageName: node linkType: hard -"chalk@npm:2.4.2, chalk@npm:^2.0.0": +"chalk@npm:^2.0.0": version: 2.4.2 resolution: "chalk@npm:2.4.2" dependencies: @@ -4067,24 +4071,38 @@ __metadata: languageName: node linkType: hard -"character-entities-legacy@npm:^1.0.0": - version: 1.1.4 - resolution: "character-entities-legacy@npm:1.1.4" - checksum: fe03a82c154414da3a0c8ab3188e4237ec68006cbcd681cf23c7cfb9502a0e76cd30ab69a2e50857ca10d984d57de3b307680fff5328ccd427f400e559c3a811 +"chalk@npm:^5.0.1": + version: 5.2.0 + resolution: "chalk@npm:5.2.0" + checksum: 03d8060277de6cf2fd567dc25fcf770593eb5bb85f460ce443e49255a30ff1242edd0c90a06a03803b0466ff0687a939b41db1757bec987113e83de89a003caa languageName: node linkType: hard -"character-entities@npm:^1.0.0": - version: 1.2.4 - resolution: "character-entities@npm:1.2.4" - checksum: e1545716571ead57beac008433c1ff69517cd8ca5b336889321c5b8ff4a99c29b65589a701e9c086cda8a5e346a67295e2684f6c7ea96819fe85cbf49bf8686d +"character-entities-html4@npm:^2.0.0": + version: 2.1.0 + resolution: "character-entities-html4@npm:2.1.0" + checksum: 7034aa7c7fa90309667f6dd50499c8a760c3d3a6fb159adb4e0bada0107d194551cdbad0714302f62d06ce4ed68565c8c2e15fdef2e8f8764eb63fa92b34b11d languageName: node linkType: hard -"character-reference-invalid@npm:^1.0.0": - version: 1.1.4 - resolution: "character-reference-invalid@npm:1.1.4" - checksum: 20274574c70e05e2f81135f3b93285536bc8ff70f37f0809b0d17791a832838f1e49938382899ed4cb444e5bbd4314ca1415231344ba29f4222ce2ccf24fea0b +"character-entities-legacy@npm:^3.0.0": + version: 3.0.0 + resolution: "character-entities-legacy@npm:3.0.0" + checksum: 7582af055cb488b626d364b7d7a4e46b06abd526fb63c0e4eb35bcb9c9799cc4f76b39f34fdccef2d1174ac95e53e9ab355aae83227c1a2505877893fce77731 + languageName: node + linkType: hard + +"character-entities@npm:^2.0.0": + version: 2.0.2 + resolution: "character-entities@npm:2.0.2" + checksum: cf1643814023697f725e47328fcec17923b8f1799102a8a79c1514e894815651794a2bffd84bb1b3a4b124b050154e4529ed6e81f7c8068a734aecf07a6d3def + languageName: node + linkType: hard + +"character-reference-invalid@npm:^2.0.0": + version: 2.0.1 + resolution: "character-reference-invalid@npm:2.0.1" + checksum: 98d3b1a52ae510b7329e6ee7f6210df14f1e318c5415975d4c9e7ee0ef4c07875d47c6e74230c64551f12f556b4a8ccc24d9f3691a2aa197019e72a95e9297ee languageName: node linkType: hard @@ -4150,13 +4168,6 @@ __metadata: languageName: node linkType: hard -"ci-info@npm:^2.0.0": - version: 2.0.0 - resolution: "ci-info@npm:2.0.0" - checksum: 3b374666a85ea3ca43fa49aa3a048d21c9b475c96eb13c133505d2324e7ae5efd6a454f41efe46a152269e9b6a00c9edbe63ec7fa1921957165aae16625acd67 - languageName: node - linkType: hard - "ci-info@npm:^3.2.0": version: 3.7.0 resolution: "ci-info@npm:3.7.0" @@ -4164,12 +4175,12 @@ __metadata: languageName: node linkType: hard -"clean-css@npm:^5.2.2, clean-css@npm:^5.3.0": - version: 5.3.1 - resolution: "clean-css@npm:5.3.1" +"clean-css@npm:^5.2.2, clean-css@npm:^5.3.2, clean-css@npm:~5.3.2": + version: 5.3.2 + resolution: "clean-css@npm:5.3.2" dependencies: source-map: ~0.6.0 - checksum: 860696c60503cbfec480b5f92f62729246304b55950571af7292f2687b57f86b277f2b9fefe6f64643d409008018b78383972b55c2cc859792dcc8658988fb16 + checksum: 8787b281acc9878f309b5f835d410085deedfd4e126472666773040a6a8a72f472a1d24185947d23b87b1c419bf2c5ed429395d5c5ff8279c98b05d8011e9758 languageName: node linkType: hard @@ -4180,13 +4191,6 @@ __metadata: languageName: node linkType: hard -"cli-boxes@npm:^2.2.1": - version: 2.2.1 - resolution: "cli-boxes@npm:2.2.1" - checksum: be79f8ec23a558b49e01311b39a1ea01243ecee30539c880cf14bf518a12e223ef40c57ead0cb44f509bffdffc5c129c746cd50d863ab879385370112af4f585 - languageName: node - linkType: hard - "cli-boxes@npm:^3.0.0": version: 3.0.0 resolution: "cli-boxes@npm:3.0.0" @@ -4194,7 +4198,7 @@ __metadata: languageName: node linkType: hard -"cli-table3@npm:^0.6.2": +"cli-table3@npm:^0.6.3": version: 0.6.3 resolution: "cli-table3@npm:0.6.3" dependencies: @@ -4207,17 +4211,6 @@ __metadata: languageName: node linkType: hard -"cliui@npm:^6.0.0": - version: 6.0.0 - resolution: "cliui@npm:6.0.0" - dependencies: - string-width: ^4.2.0 - strip-ansi: ^6.0.0 - wrap-ansi: ^6.2.0 - checksum: 4fcfd26d292c9f00238117f39fc797608292ae36bac2168cfee4c85923817d0607fe21b3329a8621e01aedf512c99b7eaa60e363a671ffd378df6649fb48ae42 - languageName: node - linkType: hard - "clone-deep@npm:^4.0.1": version: 4.0.1 resolution: "clone-deep@npm:4.0.1" @@ -4229,15 +4222,6 @@ __metadata: languageName: node linkType: hard -"clone-response@npm:^1.0.2": - version: 1.0.3 - resolution: "clone-response@npm:1.0.3" - dependencies: - mimic-response: ^1.0.0 - checksum: 4e671cac39b11c60aa8ba0a450657194a5d6504df51bca3fac5b3bd0145c4f8e8464898f87c8406b83232e3bc5cca555f51c1f9c8ac023969ebfbf7f6bdabb2e - languageName: node - linkType: hard - "clsx@npm:^1.1.1, clsx@npm:^1.2.1": version: 1.2.1 resolution: "clsx@npm:1.2.1" @@ -4245,13 +4229,6 @@ __metadata: languageName: node linkType: hard -"collapse-white-space@npm:^1.0.2": - version: 1.0.6 - resolution: "collapse-white-space@npm:1.0.6" - checksum: 9673fb797952c5c888341435596c69388b22cd5560c8cd3f40edb72734a9c820f56a7c9525166bcb7068b5d5805372e6fd0c4b9f2869782ad070cb5d3faf26e7 - languageName: node - linkType: hard - "color-convert@npm:^1.9.0": version: 1.9.3 resolution: "color-convert@npm:1.9.3" @@ -4314,10 +4291,26 @@ __metadata: languageName: node linkType: hard -"comma-separated-tokens@npm:^1.0.0": +"combined-stream@npm:^1.0.8": version: 1.0.8 - resolution: "comma-separated-tokens@npm:1.0.8" - checksum: 0adcb07174fa4d08cf0f5c8e3aec40a36b5ff0c2c720e5e23f50fe02e6789d1d00a67036c80e0c1e1539f41d3e7f0101b074039dd833b4e4a59031b659d6ca0d + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: ~1.0.0 + checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c + languageName: node + linkType: hard + +"comma-separated-tokens@npm:^2.0.0": + version: 2.0.3 + resolution: "comma-separated-tokens@npm:2.0.3" + checksum: e3bf9e0332a5c45f49b90e79bcdb4a7a85f28d6a6f0876a94f1bb9b2bfbdbbb9292aac50e1e742d8c0db1e62a0229a106f57917e2d067fca951d81737651700d + languageName: node + linkType: hard + +"commander@npm:^10.0.0": + version: 10.0.1 + resolution: "commander@npm:10.0.1" + checksum: 436901d64a818295803c1996cd856621a74f30b9f9e28a588e726b2b1670665bccd7c1a77007ebf328729f0139838a88a19265858a0fa7a8728c4656796db948 languageName: node linkType: hard @@ -4387,17 +4380,26 @@ __metadata: languageName: node linkType: hard -"configstore@npm:^5.0.1": - version: 5.0.1 - resolution: "configstore@npm:5.0.1" +"config-chain@npm:^1.1.11": + version: 1.1.13 + resolution: "config-chain@npm:1.1.13" dependencies: - dot-prop: ^5.2.0 - graceful-fs: ^4.1.2 - make-dir: ^3.0.0 - unique-string: ^2.0.0 - write-file-atomic: ^3.0.0 - xdg-basedir: ^4.0.0 - checksum: 60ef65d493b63f96e14b11ba7ec072fdbf3d40110a94fb7199d1c287761bdea5c5244e76b2596325f30c1b652213aa75de96ea20afd4a5f82065e61ea090988e + ini: ^1.3.4 + proto-list: ~1.2.1 + checksum: 828137a28e7c2fc4b7fb229bd0cd6c1397bcf83434de54347e608154008f411749041ee392cbe42fab6307e02de4c12480260bf769b7d44b778fdea3839eafab + languageName: node + linkType: hard + +"configstore@npm:^6.0.0": + version: 6.0.0 + resolution: "configstore@npm:6.0.0" + dependencies: + dot-prop: ^6.0.1 + graceful-fs: ^4.2.6 + unique-string: ^3.0.0 + write-file-atomic: ^3.0.3 + xdg-basedir: ^5.0.1 + checksum: 81995351c10bc04c58507f17748477aeac6f47465109d20e3534cebc881d22e927cfd29e73dd852c46c55f62c2b7be4cd1fe6eb3a93ba51f7f9813c218f9bae0 languageName: node linkType: hard @@ -4505,10 +4507,10 @@ __metadata: languageName: node linkType: hard -"core-js@npm:^3.23.3": - version: 3.26.1 - resolution: "core-js@npm:3.26.1" - checksum: 0a01149f51ff1e9f41d1ea49cc4c9222047949ea597189ede7c4cf8cde3b097766b9c7615acc77c86fe65b4002f20b638a133dfba7b41dba830d707aeeed45ad +"core-js@npm:^3.29.0": + version: 3.30.1 + resolution: "core-js@npm:3.30.1" + checksum: 6d4a00b488694d4c715c424e15dfef31433ac7aa395c39c518a0cfacec918ada1c716fed74682033197e0164e23bbf38bfd598ee9a239c4aaa590ab1ba862ac8 languageName: node linkType: hard @@ -4519,6 +4521,18 @@ __metadata: languageName: node linkType: hard +"cosmiconfig-typescript-loader@npm:^4.3.0": + version: 4.3.0 + resolution: "cosmiconfig-typescript-loader@npm:4.3.0" + peerDependencies: + "@types/node": "*" + cosmiconfig: ">=7" + ts-node: ">=10" + typescript: ">=3" + checksum: ea61dfd8e112cf2bb18df0ef89280bd3ae3dd5b997b4a9fc22bbabdc02513aadfbc6d4e15e922b6a9a5d987e9dad42286fa38caf77a9b8dcdbe7d4ce1c9db4fb + languageName: node + linkType: hard + "cosmiconfig@npm:^6.0.0": version: 6.0.0 resolution: "cosmiconfig@npm:6.0.0" @@ -4532,7 +4546,7 @@ __metadata: languageName: node linkType: hard -"cosmiconfig@npm:^7.0.0, cosmiconfig@npm:^7.0.1": +"cosmiconfig@npm:^7.0.1": version: 7.1.0 resolution: "cosmiconfig@npm:7.1.0" dependencies: @@ -4545,6 +4559,18 @@ __metadata: languageName: node linkType: hard +"cosmiconfig@npm:^8.1.3": + version: 8.1.3 + resolution: "cosmiconfig@npm:8.1.3" + dependencies: + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + parse-json: ^5.0.0 + path-type: ^4.0.0 + checksum: b3d277bc3a8a9e649bf4c3fc9740f4c52bf07387481302aa79839f595045368903bf26ea24a8f7f7b8b180bf46037b027c5cb63b1391ab099f3f78814a147b2b + languageName: node + linkType: hard + "cross-fetch@npm:^3.1.5": version: 3.1.5 resolution: "cross-fetch@npm:3.1.5" @@ -4565,10 +4591,12 @@ __metadata: languageName: node linkType: hard -"crypto-random-string@npm:^2.0.0": - version: 2.0.0 - resolution: "crypto-random-string@npm:2.0.0" - checksum: 0283879f55e7c16fdceacc181f87a0a65c53bc16ffe1d58b9d19a6277adcd71900d02bb2c4843dd55e78c51e30e89b0fec618a7f170ebcc95b33182c28f05fd6 +"crypto-random-string@npm:^4.0.0": + version: 4.0.0 + resolution: "crypto-random-string@npm:4.0.0" + dependencies: + type-fest: ^1.0.1 + checksum: 91f148f27bcc8582798f0fb3e75a09d9174557f39c3c40a89dd1bd70fb5a14a02548245aa26fa7d663c426ac5026f4729841231c84f9e30e8c8ece5e38656741 languageName: node linkType: hard @@ -4581,12 +4609,12 @@ __metadata: languageName: node linkType: hard -"css-loader@npm:^6.7.1": - version: 6.7.2 - resolution: "css-loader@npm:6.7.2" +"css-loader@npm:^6.7.3": + version: 6.7.3 + resolution: "css-loader@npm:6.7.3" dependencies: icss-utils: ^5.1.0 - postcss: ^8.4.18 + postcss: ^8.4.19 postcss-modules-extract-imports: ^3.0.0 postcss-modules-local-by-default: ^4.0.0 postcss-modules-scope: ^3.0.0 @@ -4595,11 +4623,11 @@ __metadata: semver: ^7.3.8 peerDependencies: webpack: ^5.0.0 - checksum: f3c980cc9c033a02e60df7e5a2f33a1e8c2c3dd552f017485d2d81b383be623ae8c4189404e7a4a7403b52744683ae4b516def0f7ccf125c2b198cb647e46543 + checksum: 473cc32b6c837c2848e2051ad1ba331c1457449f47442e75a8c480d9891451434ada241f7e3de2347e57de17fcd84610b3bcfc4a9da41102cdaedd1e17902d31 languageName: node linkType: hard -"css-minimizer-webpack-plugin@npm:^4.0.0": +"css-minimizer-webpack-plugin@npm:^4.2.2": version: 4.2.2 resolution: "css-minimizer-webpack-plugin@npm:4.2.2" dependencies: @@ -4680,37 +4708,37 @@ __metadata: languageName: node linkType: hard -"cssnano-preset-advanced@npm:^5.3.8": - version: 5.3.9 - resolution: "cssnano-preset-advanced@npm:5.3.9" +"cssnano-preset-advanced@npm:^5.3.10": + version: 5.3.10 + resolution: "cssnano-preset-advanced@npm:5.3.10" dependencies: autoprefixer: ^10.4.12 - cssnano-preset-default: ^5.2.13 + cssnano-preset-default: ^5.2.14 postcss-discard-unused: ^5.1.0 postcss-merge-idents: ^5.1.1 postcss-reduce-idents: ^5.2.0 postcss-zindex: ^5.1.0 peerDependencies: postcss: ^8.2.15 - checksum: 094eb446107254b14f46257068376078c6daa0828c154df0a1d5cc6eabf13bd6015ce84be5de9c2cc34c60383dd27335c0496cecd1a30ce7557a6c5db4502d2d + checksum: d21cb382aea2f35c9eaa50686280bbd5158260edf73020731364b03bae0d887292da51ed0b20b369f51d2573ee8c02c695f604647b839a9ca746be8a44c3bb5b languageName: node linkType: hard -"cssnano-preset-default@npm:^5.2.13": - version: 5.2.13 - resolution: "cssnano-preset-default@npm:5.2.13" +"cssnano-preset-default@npm:^5.2.14": + version: 5.2.14 + resolution: "cssnano-preset-default@npm:5.2.14" dependencies: css-declaration-sorter: ^6.3.1 cssnano-utils: ^3.1.0 postcss-calc: ^8.2.3 - postcss-colormin: ^5.3.0 + postcss-colormin: ^5.3.1 postcss-convert-values: ^5.1.3 postcss-discard-comments: ^5.1.2 postcss-discard-duplicates: ^5.1.0 postcss-discard-empty: ^5.1.1 postcss-discard-overridden: ^5.1.0 postcss-merge-longhand: ^5.1.7 - postcss-merge-rules: ^5.1.3 + postcss-merge-rules: ^5.1.4 postcss-minify-font-values: ^5.1.0 postcss-minify-gradients: ^5.1.1 postcss-minify-params: ^5.1.4 @@ -4725,13 +4753,13 @@ __metadata: postcss-normalize-url: ^5.1.0 postcss-normalize-whitespace: ^5.1.1 postcss-ordered-values: ^5.1.3 - postcss-reduce-initial: ^5.1.1 + postcss-reduce-initial: ^5.1.2 postcss-reduce-transforms: ^5.1.0 postcss-svgo: ^5.1.0 postcss-unique-selectors: ^5.1.1 peerDependencies: postcss: ^8.2.15 - checksum: f773de44f67f71e7301e1f4b4664b894c3a48bba4dadc16c559acd0b14ceafed228bdc76fe19d500b0ded9394732377069daadff2184465fa369f8dfd72d47e2 + checksum: d3bbbe3d50c6174afb28d0bdb65b511fdab33952ec84810aef58b87189f3891c34aaa8b6a6101acd5314f8acded839b43513e39a75f91a698ddc985a1b1d9e95 languageName: node linkType: hard @@ -4744,16 +4772,16 @@ __metadata: languageName: node linkType: hard -"cssnano@npm:^5.1.12, cssnano@npm:^5.1.8": - version: 5.1.14 - resolution: "cssnano@npm:5.1.14" +"cssnano@npm:^5.1.15, cssnano@npm:^5.1.8": + version: 5.1.15 + resolution: "cssnano@npm:5.1.15" dependencies: - cssnano-preset-default: ^5.2.13 + cssnano-preset-default: ^5.2.14 lilconfig: ^2.0.3 yaml: ^1.10.2 peerDependencies: postcss: ^8.2.15 - checksum: 73463c723c5e598b37b8b4d2f014145bd72133e6581349a1b154904e0830e58de17afb1e801ed3ea3b18e386883964ce4d0299e43d4dc37d339214a956c6697f + checksum: ca9e1922178617c66c2f1548824b2c7af2ecf69cc3a187fc96bf8d29251c2e84d9e4966c69cf64a2a6a057a37dff7d6d057bc8a2a0957e6ea382e452ae9d0bbb languageName: node linkType: hard @@ -4782,7 +4810,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.3": +"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.3": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -4794,19 +4822,21 @@ __metadata: languageName: node linkType: hard -"decamelize@npm:^1.2.0": - version: 1.2.0 - resolution: "decamelize@npm:1.2.0" - checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa +"decode-named-character-reference@npm:^1.0.0": + version: 1.0.2 + resolution: "decode-named-character-reference@npm:1.0.2" + dependencies: + character-entities: ^2.0.0 + checksum: f4c71d3b93105f20076052f9cb1523a22a9c796b8296cd35eef1ca54239c78d182c136a848b83ff8da2071e3ae2b1d300bf29d00650a6d6e675438cc31b11d78 languageName: node linkType: hard -"decompress-response@npm:^3.3.0": - version: 3.3.0 - resolution: "decompress-response@npm:3.3.0" +"decompress-response@npm:^6.0.0": + version: 6.0.0 + resolution: "decompress-response@npm:6.0.0" dependencies: - mimic-response: ^1.0.0 - checksum: 952552ac3bd7de2fc18015086b09468645c9638d98a551305e485230ada278c039c91116e946d07894b39ee53c0f0d5b6473f25a224029344354513b412d7380 + mimic-response: ^3.1.0 + checksum: d377cf47e02d805e283866c3f50d3d21578b779731e8c5072d6ce8c13cc31493db1c2f6784da9d1d5250822120cefa44f1deab112d5981015f2e17444b763812 languageName: node linkType: hard @@ -4833,10 +4863,10 @@ __metadata: languageName: node linkType: hard -"defer-to-connect@npm:^1.0.1": - version: 1.1.3 - resolution: "defer-to-connect@npm:1.1.3" - checksum: 9491b301dcfa04956f989481ba7a43c2231044206269eb4ab64a52d6639ee15b1252262a789eb4239fb46ab63e44d4e408641bae8e0793d640aee55398cb3930 +"defer-to-connect@npm:^2.0.1": + version: 2.0.1 + resolution: "defer-to-connect@npm:2.0.1" + checksum: 8a9b50d2f25446c0bfefb55a48e90afd58f85b21bcf78e9207cd7b804354f6409032a1705c2491686e202e64fc05f147aa5aa45f9aa82627563f045937f5791b languageName: node linkType: hard @@ -4873,6 +4903,13 @@ __metadata: languageName: node linkType: hard +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 + languageName: node + linkType: hard + "delegates@npm:^1.0.0": version: 1.0.0 resolution: "delegates@npm:1.0.0" @@ -4894,6 +4931,13 @@ __metadata: languageName: node linkType: hard +"dequal@npm:^2.0.0": + version: 2.0.3 + resolution: "dequal@npm:2.0.3" + checksum: 8679b850e1a3d0ebbc46ee780d5df7b478c23f335887464023a631d1b9af051ad4a6595a44220f9ff8ff95a8ddccf019b5ad778a976fd7bbf77383d36f412f90 + languageName: node + linkType: hard + "destroy@npm:1.2.0": version: 1.2.0 resolution: "destroy@npm:1.2.0" @@ -4901,15 +4945,6 @@ __metadata: languageName: node linkType: hard -"detab@npm:2.0.4": - version: 2.0.4 - resolution: "detab@npm:2.0.4" - dependencies: - repeat-string: ^1.5.4 - checksum: 34b077521ecd4c6357d32ff7923be644d34aa6f6b7d717d40ec4a9168243eefaea2b512a75a460a6f70c31b0bbc31ff90f820a891803b4ddaf99e9d04d0d389d - languageName: node - linkType: hard - "detect-node@npm:^2.0.4": version: 2.1.0 resolution: "detect-node@npm:2.1.0" @@ -4930,7 +4965,7 @@ __metadata: languageName: node linkType: hard -"detect-port@npm:^1.3.0": +"detect-port@npm:^1.5.1": version: 1.5.1 resolution: "detect-port@npm:1.5.1" dependencies: @@ -4943,6 +4978,13 @@ __metadata: languageName: node linkType: hard +"diff@npm:^5.0.0": + version: 5.1.0 + resolution: "diff@npm:5.1.0" + checksum: c7bf0df7c9bfbe1cf8a678fd1b2137c4fb11be117a67bc18a0e03ae75105e8533dbfb1cda6b46beb3586ef5aed22143ef9d70713977d5fb1f9114e21455fba90 + languageName: node + linkType: hard + "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -5068,19 +5110,12 @@ __metadata: languageName: node linkType: hard -"dot-prop@npm:^5.2.0": - version: 5.3.0 - resolution: "dot-prop@npm:5.3.0" +"dot-prop@npm:^6.0.1": + version: 6.0.1 + resolution: "dot-prop@npm:6.0.1" dependencies: is-obj: ^2.0.0 - checksum: d5775790093c234ef4bfd5fbe40884ff7e6c87573e5339432870616331189f7f5d86575c5b5af2dcf0f61172990f4f734d07844b1f23482fff09e3c4bead05ea - languageName: node - linkType: hard - -"duplexer3@npm:^0.1.4": - version: 0.1.5 - resolution: "duplexer3@npm:0.1.5" - checksum: e677cb4c48f031ca728601d6a20bf6aed4c629d69ef9643cb89c67583d673c4ec9317cc6427501f38bd8c368d3a18f173987cc02bd99d8cf8fe3d94259a22a20 + checksum: 0f47600a4b93e1dc37261da4e6909652c008832a5d3684b5bf9a9a0d3f4c67ea949a86dceed9b72f5733ed8e8e6383cc5958df3bbd0799ee317fd181f2ece700 languageName: node linkType: hard @@ -5105,10 +5140,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.4.251": - version: 1.4.284 - resolution: "electron-to-chromium@npm:1.4.284" - checksum: be496e9dca6509dbdbb54dc32146fc99f8eb716d28a7ee8ccd3eba0066561df36fc51418d8bd7cf5a5891810bf56c0def3418e74248f51ea4a843d423603d10a +"electron-to-chromium@npm:^1.4.284": + version: 1.4.374 + resolution: "electron-to-chromium@npm:1.4.374" + checksum: baa53f70401a8fdd3dbf2396d5dfff2f0a8be12c6fefe362ed8608ff045db4e78322cc5b8acac0bd2d94de7850eba83509b3bfda38b4b67e575273b4c4824e5b languageName: node linkType: hard @@ -5156,22 +5191,13 @@ __metadata: languageName: node linkType: hard -"end-of-stream@npm:^1.1.0": - version: 1.4.4 - resolution: "end-of-stream@npm:1.4.4" - dependencies: - once: ^1.4.0 - checksum: 530a5a5a1e517e962854a31693dbb5c0b2fc40b46dad2a56a2deec656ca040631124f4795823acc68238147805f8b021abbe221f4afed5ef3c8e8efc2024908b - languageName: node - linkType: hard - -"enhanced-resolve@npm:^5.10.0": - version: 5.12.0 - resolution: "enhanced-resolve@npm:5.12.0" +"enhanced-resolve@npm:^5.13.0": + version: 5.13.0 + resolution: "enhanced-resolve@npm:5.13.0" dependencies: graceful-fs: ^4.2.4 tapable: ^2.2.0 - checksum: bf3f787facaf4ce3439bef59d148646344e372bef5557f0d37ea8aa02c51f50a925cd1f07b8d338f18992c29f544ec235a8c64bcdb56030196c48832a5494174 + checksum: 76d6844c4393d76beed5b3ce6cf5a98dee3ad5c84a9887f49ccde1224e3b7af201dfbd5a57ebf2b49f623b74883df262d50ff480d3cc02fc2881fc58b84e1bbe languageName: node linkType: hard @@ -5212,10 +5238,10 @@ __metadata: languageName: node linkType: hard -"es-module-lexer@npm:^0.9.0": - version: 0.9.3 - resolution: "es-module-lexer@npm:0.9.3" - checksum: 84bbab23c396281db2c906c766af58b1ae2a1a2599844a504df10b9e8dc77ec800b3211fdaa133ff700f5703d791198807bba25d9667392d27a5e9feda344da8 +"es-module-lexer@npm:^1.2.1": + version: 1.2.1 + resolution: "es-module-lexer@npm:1.2.1" + checksum: c4145b853e1491eaa5d591e4580926d242978c38071ad3d09165c3b6d50314cc0ae3bf6e1dec81a9e53768b9299df2063d2e4a67d7742a5029ddeae6c4fc26f0 languageName: node linkType: hard @@ -5226,10 +5252,10 @@ __metadata: languageName: node linkType: hard -"escape-goat@npm:^2.0.0": - version: 2.1.1 - resolution: "escape-goat@npm:2.1.1" - checksum: ce05c70c20dd7007b60d2d644b625da5412325fdb57acf671ba06cb2ab3cd6789e2087026921a05b665b0a03fadee2955e7fc0b9a67da15a6551a980b260eba7 +"escape-goat@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-goat@npm:4.0.0" + checksum: 7034e0025eec7b751074b837f10312c5b768493265bdad046347c0aadbc1e652776f7e5df94766473fecb5d3681169cc188fe9ccc1e22be53318c18be1671cc0 languageName: node linkType: hard @@ -5254,6 +5280,13 @@ __metadata: languageName: node linkType: hard +"escape-string-regexp@npm:^5.0.0": + version: 5.0.0 + resolution: "escape-string-regexp@npm:5.0.0" + checksum: 20daabe197f3cb198ec28546deebcf24b3dbb1a5a269184381b3116d12f0532e06007f4bc8da25669d6a7f8efb68db0758df4cd981f57bc5b57f521a3e12c59e + languageName: node + linkType: hard + "eslint-scope@npm:5.1.1": version: 5.1.1 resolution: "eslint-scope@npm:5.1.1" @@ -5297,6 +5330,73 @@ __metadata: languageName: node linkType: hard +"estree-util-attach-comments@npm:^2.0.0": + version: 2.1.1 + resolution: "estree-util-attach-comments@npm:2.1.1" + dependencies: + "@types/estree": ^1.0.0 + checksum: c5c2c41c9a55a169fb4fba9627057843f0d2e21e47a2e3e24318a11ffcf6bc704c0f96f405a529bddac7969b7c44f6cf86711505faaf0c5862c2024419b19704 + languageName: node + linkType: hard + +"estree-util-build-jsx@npm:^2.0.0": + version: 2.2.2 + resolution: "estree-util-build-jsx@npm:2.2.2" + dependencies: + "@types/estree-jsx": ^1.0.0 + estree-util-is-identifier-name: ^2.0.0 + estree-walker: ^3.0.0 + checksum: d008ac36a45d797eadca696f41b4c1ac0587ec0e0b52560cfb0e76d14ef15fc18e526f9023b6e5457dafa9cf3f010c9bb1dfc9c727ebd7cf0ba2ebbaa43919ac + languageName: node + linkType: hard + +"estree-util-is-identifier-name@npm:^2.0.0": + version: 2.1.0 + resolution: "estree-util-is-identifier-name@npm:2.1.0" + checksum: cab317a071fafb99cf83b57df7924bccd2e6ab4e252688739e49f00b16cefd168e279c171442b0557c80a1c80ffaa927d670dadea65bb3c9b151efb8e772e89d + languageName: node + linkType: hard + +"estree-util-to-js@npm:^1.1.0": + version: 1.2.0 + resolution: "estree-util-to-js@npm:1.2.0" + dependencies: + "@types/estree-jsx": ^1.0.0 + astring: ^1.8.0 + source-map: ^0.7.0 + checksum: 93a75e1051a6a4f5c631597ecd2ed95129fadbc80a58a10475d6d6b1b076a69393ba4a8d2bb71f698401f64ccca47e3f3828dd0042cac81439b988fae0f5f8e0 + languageName: node + linkType: hard + +"estree-util-value-to-estree@npm:^2.1.0": + version: 2.1.0 + resolution: "estree-util-value-to-estree@npm:2.1.0" + dependencies: + "@types/estree": ^1.0.0 + is-plain-obj: ^4.0.0 + checksum: 6a930e9c8b85c27845ecca010b5b6b64d3b3a4e7d61117d8342fad7b2b595d7052c671616d1c2269e0954a200666834227ce0abb8488ded49700dfde54167ebb + languageName: node + linkType: hard + +"estree-util-visit@npm:^1.0.0": + version: 1.2.1 + resolution: "estree-util-visit@npm:1.2.1" + dependencies: + "@types/estree-jsx": ^1.0.0 + "@types/unist": ^2.0.0 + checksum: 6feea4fdc43b0ba0f79faf1d57cf32373007e146d4810c7c09c13f5a9c1b8600c1ac57a8d949967cedd2a9a91dddd246e19b59bacfc01e417168b4ebf220f691 + languageName: node + linkType: hard + +"estree-walker@npm:^3.0.0": + version: 3.0.3 + resolution: "estree-walker@npm:3.0.3" + dependencies: + "@types/estree": ^1.0.0 + checksum: a65728d5727b71de172c5df323385755a16c0fdab8234dc756c3854cfee343261ddfbb72a809a5660fac8c75d960bb3e21aa898c2d7e9b19bb298482ca58a3af + languageName: node + linkType: hard + "esutils@npm:^2.0.2": version: 2.0.3 resolution: "esutils@npm:2.0.3" @@ -5304,10 +5404,10 @@ __metadata: languageName: node linkType: hard -"eta@npm:^2.0.0": - version: 2.0.0 - resolution: "eta@npm:2.0.0" - checksum: ab8e93af73f0d4917485976aa8fcac68e730c47e9aa54a720c21c2e9087cdcd5f984a50cf5e04d189757612df014a229fa047a437651c9eea31e0b6bf1afe56b +"eta@npm:^2.0.1": + version: 2.0.1 + resolution: "eta@npm:2.0.1" + checksum: 595e18e762925561929a43d06493c8b46ef66dfa967dfcde7050acb016182d0bad87a19177384c93f04ffc87e918429688e07fc428c8691ff50cdfcb197f938a languageName: node linkType: hard @@ -5551,7 +5651,7 @@ __metadata: languageName: node linkType: hard -"find-cache-dir@npm:^3.3.1": +"find-cache-dir@npm:^3.3.2": version: 3.3.2 resolution: "find-cache-dir@npm:3.3.2" dependencies: @@ -5571,7 +5671,7 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^4.0.0, find-up@npm:^4.1.0": +"find-up@npm:^4.0.0": version: 4.1.0 resolution: "find-up@npm:4.1.0" dependencies: @@ -5603,7 +5703,7 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.7": +"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.9": version: 1.15.2 resolution: "follow-redirects@npm:1.15.2" peerDependenciesMeta: @@ -5644,6 +5744,24 @@ __metadata: languageName: node linkType: hard +"form-data-encoder@npm:^2.1.2": + version: 2.1.4 + resolution: "form-data-encoder@npm:2.1.4" + checksum: e0b3e5950fb69b3f32c273944620f9861f1933df9d3e42066e038e26dfb343d0f4465de9f27e0ead1a09d9df20bc2eed06a63c2ca2f8f00949e7202bae9e29dd + languageName: node + linkType: hard + +"form-data@npm:^4.0.0": + version: 4.0.0 + resolution: "form-data@npm:4.0.0" + dependencies: + asynckit: ^0.4.0 + combined-stream: ^1.0.8 + mime-types: ^2.1.12 + checksum: 01135bf8675f9d5c61ff18e2e2932f719ca4de964e3be90ef4c36aacfc7b9cb2fceb5eca0b7e0190e3383fe51c5b37f4cb80b62ca06a99aaabfcfd6ac7c9328c + languageName: node + linkType: hard + "forwarded@npm:0.2.0": version: 0.2.0 resolution: "forwarded@npm:0.2.0" @@ -5665,14 +5783,14 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^10.1.0": - version: 10.1.0 - resolution: "fs-extra@npm:10.1.0" +"fs-extra@npm:^11.1.0": + version: 11.1.1 + resolution: "fs-extra@npm:11.1.1" dependencies: graceful-fs: ^4.2.0 jsonfile: ^6.0.1 universalify: ^2.0.0 - checksum: dc94ab37096f813cc3ca12f0f1b5ad6744dfed9ed21e953d72530d103cea193c2f81584a39e9dee1bea36de5ee66805678c0dddc048e8af1427ac19c00fffc50 + checksum: fb883c68245b2d777fbc1f2082c9efb084eaa2bbf9fddaa366130d196c03608eebef7fb490541276429ee1ca99f317e2d73e96f5ca0999eefedf5a624ae1edfd languageName: node linkType: hard @@ -5753,20 +5871,13 @@ __metadata: languageName: node linkType: hard -"gensync@npm:^1.0.0-beta.1, gensync@npm:^1.0.0-beta.2": +"gensync@npm:^1.0.0-beta.2": version: 1.0.0-beta.2 resolution: "gensync@npm:1.0.0-beta.2" checksum: a7437e58c6be12aa6c90f7730eac7fa9833dc78872b4ad2963d2031b00a3367a93f98aec75f9aaac7220848e4026d67a8655e870b24f20a543d103c0d65952ec languageName: node linkType: hard -"get-caller-file@npm:^2.0.1": - version: 2.0.5 - resolution: "get-caller-file@npm:2.0.5" - checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 - languageName: node - linkType: hard - "get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1": version: 1.1.3 resolution: "get-intrinsic@npm:1.1.3" @@ -5785,32 +5896,14 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^4.1.0": - version: 4.1.0 - resolution: "get-stream@npm:4.1.0" - dependencies: - pump: ^3.0.0 - checksum: 443e1914170c15bd52ff8ea6eff6dfc6d712b031303e36302d2778e3de2506af9ee964d6124010f7818736dcfde05c04ba7ca6cc26883106e084357a17ae7d73 - languageName: node - linkType: hard - -"get-stream@npm:^5.1.0": - version: 5.2.0 - resolution: "get-stream@npm:5.2.0" - dependencies: - pump: ^3.0.0 - checksum: 8bc1a23174a06b2b4ce600df38d6c98d2ef6d84e020c1ddad632ad75bac4e092eeb40e4c09e0761c35fc2dbc5e7fff5dab5e763a383582c4a167dd69a905bd12 - languageName: node - linkType: hard - -"get-stream@npm:^6.0.0": +"get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": version: 6.0.1 resolution: "get-stream@npm:6.0.1" checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad languageName: node linkType: hard -"github-slugger@npm:^1.4.0": +"github-slugger@npm:^1.5.0": version: 1.5.0 resolution: "github-slugger@npm:1.5.0" checksum: c70988224578b3bdaa25df65973ffc8c24594a77a28550c3636e495e49d17aef5cdb04c04fa3f1744babef98c61eecc6a43299a13ea7f3cc33d680bf9053ffbe @@ -5932,26 +6025,26 @@ __metadata: languageName: node linkType: hard -"got@npm:^9.6.0": - version: 9.6.0 - resolution: "got@npm:9.6.0" +"got@npm:^12.1.0": + version: 12.6.0 + resolution: "got@npm:12.6.0" dependencies: - "@sindresorhus/is": ^0.14.0 - "@szmarczak/http-timer": ^1.1.2 - cacheable-request: ^6.0.0 - decompress-response: ^3.3.0 - duplexer3: ^0.1.4 - get-stream: ^4.1.0 - lowercase-keys: ^1.0.1 - mimic-response: ^1.0.1 - p-cancelable: ^1.0.0 - to-readable-stream: ^1.0.0 - url-parse-lax: ^3.0.0 - checksum: 941807bd9704bacf5eb401f0cc1212ffa1f67c6642f2d028fd75900471c221b1da2b8527f4553d2558f3faeda62ea1cf31665f8b002c6137f5de8732f07370b0 + "@sindresorhus/is": ^5.2.0 + "@szmarczak/http-timer": ^5.0.1 + cacheable-lookup: ^7.0.0 + cacheable-request: ^10.2.8 + decompress-response: ^6.0.0 + form-data-encoder: ^2.1.2 + get-stream: ^6.0.1 + http2-wrapper: ^2.1.10 + lowercase-keys: ^3.0.0 + p-cancelable: ^3.0.0 + responselike: ^3.0.0 + checksum: 3621897067068dcb3578d05535cfb10f60aac07198032b3349a488f5741964e7f63d6e37c976840f1bcaaf42f5c049ed3c6d8e0d6c622b74639ca9319ad178a1 languageName: node linkType: hard -"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:4.2.10, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.10 resolution: "graceful-fs@npm:4.2.10" checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da @@ -6023,10 +6116,10 @@ __metadata: languageName: node linkType: hard -"has-yarn@npm:^2.1.0": - version: 2.1.0 - resolution: "has-yarn@npm:2.1.0" - checksum: 5eb1d0bb8518103d7da24532bdbc7124ffc6d367b5d3c10840b508116f2f1bcbcf10fd3ba843ff6e2e991bdf9969fd862d42b2ed58aade88343326c950b7e7f7 +"has-yarn@npm:^3.0.0": + version: 3.0.0 + resolution: "has-yarn@npm:3.0.0" + checksum: b9e14e78e0a37bc070550c862b201534287bc10e62a86ec9c1f455ffb082db42817ce9aed914bd73f1d589bbf268520e194629ff2f62ff6b98a482c4bd2dcbfb languageName: node linkType: hard @@ -6039,83 +6132,55 @@ __metadata: languageName: node linkType: hard -"hast-to-hyperscript@npm:^9.0.0": - version: 9.0.1 - resolution: "hast-to-hyperscript@npm:9.0.1" - dependencies: - "@types/unist": ^2.0.3 - comma-separated-tokens: ^1.0.0 - property-information: ^5.3.0 - space-separated-tokens: ^1.0.0 - style-to-object: ^0.3.0 - unist-util-is: ^4.0.0 - web-namespaces: ^1.0.0 - checksum: de570d789853018fff2fd38fc096549b9814e366b298f60c90c159a57018230eefc44d46a246027b0e2426ed9e99f2e270050bc183d5bdfe4c9487c320b392cd - languageName: node - linkType: hard - -"hast-util-from-parse5@npm:^6.0.0": - version: 6.0.1 - resolution: "hast-util-from-parse5@npm:6.0.1" - dependencies: - "@types/parse5": ^5.0.0 - hastscript: ^6.0.0 - property-information: ^5.0.0 - vfile: ^4.0.0 - vfile-location: ^3.2.0 - web-namespaces: ^1.0.0 - checksum: 4daa78201468af7779161e7caa2513c329830778e0528481ab16b3e1bcef4b831f6285b526aacdddbee802f3bd9d64df55f80f010591ea1916da535e3a923b83 - languageName: node - linkType: hard - -"hast-util-parse-selector@npm:^2.0.0": - version: 2.2.5 - resolution: "hast-util-parse-selector@npm:2.2.5" - checksum: 22ee4afbd11754562144cb3c4f3ec52524dafba4d90ee52512902d17cf11066d83b38f7bdf6ca571bbc2541f07ba30db0d234657b6ecb8ca4631587466459605 - languageName: node - linkType: hard - -"hast-util-raw@npm:6.0.1": - version: 6.0.1 - resolution: "hast-util-raw@npm:6.0.1" +"hast-util-parse-selector@npm:^3.0.0": + version: 3.1.1 + resolution: "hast-util-parse-selector@npm:3.1.1" dependencies: "@types/hast": ^2.0.0 - hast-util-from-parse5: ^6.0.0 - hast-util-to-parse5: ^6.0.0 - html-void-elements: ^1.0.0 - parse5: ^6.0.0 - unist-util-position: ^3.0.0 - vfile: ^4.0.0 - web-namespaces: ^1.0.0 - xtend: ^4.0.0 - zwitch: ^1.0.0 - checksum: f6d960644f9fbbe0b92d0227b20a24d659cce021d5f9fd218e077154931b4524ee920217b7fd5a45ec2736ec1dee53de9209fe449f6f89454c01d225ff0e7851 + checksum: 511d373465f60dd65e924f88bf0954085f4fb6e3a2b062a4b5ac43b93cbfd36a8dce6234b5d1e3e63499d936375687e83fc5da55628b22bd6b581b5ee167d1c4 languageName: node linkType: hard -"hast-util-to-parse5@npm:^6.0.0": - version: 6.0.0 - resolution: "hast-util-to-parse5@npm:6.0.0" +"hast-util-to-estree@npm:^2.0.0": + version: 2.3.2 + resolution: "hast-util-to-estree@npm:2.3.2" dependencies: - hast-to-hyperscript: ^9.0.0 - property-information: ^5.0.0 - web-namespaces: ^1.0.0 - xtend: ^4.0.0 - zwitch: ^1.0.0 - checksum: 91a36244e37df1d63c8b7e865ab0c0a25bb7396155602be005cf71d95c348e709568f80e0f891681a3711d733ad896e70642dc41a05b574eddf2e07d285408a8 + "@types/estree": ^1.0.0 + "@types/estree-jsx": ^1.0.0 + "@types/hast": ^2.0.0 + "@types/unist": ^2.0.0 + comma-separated-tokens: ^2.0.0 + estree-util-attach-comments: ^2.0.0 + estree-util-is-identifier-name: ^2.0.0 + hast-util-whitespace: ^2.0.0 + mdast-util-mdx-expression: ^1.0.0 + mdast-util-mdxjs-esm: ^1.0.0 + property-information: ^6.0.0 + space-separated-tokens: ^2.0.0 + style-to-object: ^0.4.1 + unist-util-position: ^4.0.0 + zwitch: ^2.0.0 + checksum: 721167e275c1b0b9b1dcb35964a39f6180e22983ee7b56748ecab9f6cc35fe5229fd6e30a8eb4826caeee7eed88014ce4710bd79146c080d4dd281058ba09a39 languageName: node linkType: hard -"hastscript@npm:^6.0.0": - version: 6.0.0 - resolution: "hastscript@npm:6.0.0" +"hast-util-whitespace@npm:^2.0.0": + version: 2.0.1 + resolution: "hast-util-whitespace@npm:2.0.1" + checksum: 431be6b2f35472f951615540d7a53f69f39461e5e080c0190268bdeb2be9ab9b1dddfd1f467dd26c1de7e7952df67beb1307b6ee940baf78b24a71b5e0663868 + languageName: node + linkType: hard + +"hastscript@npm:^7.1.0": + version: 7.2.0 + resolution: "hastscript@npm:7.2.0" dependencies: "@types/hast": ^2.0.0 - comma-separated-tokens: ^1.0.0 - hast-util-parse-selector: ^2.0.0 - property-information: ^5.0.0 - space-separated-tokens: ^1.0.0 - checksum: 5e50b85af0d2cb7c17979cb1ddca75d6b96b53019dd999b39e7833192c9004201c3cee6445065620ea05d0087d9ae147a4844e582d64868be5bc6b0232dfe52d + comma-separated-tokens: ^2.0.0 + hast-util-parse-selector: ^3.0.0 + property-information: ^6.0.0 + space-separated-tokens: ^2.0.0 + checksum: 928a21576ff7b9a8c945e7940bcbf2d27f770edb4279d4d04b33dc90753e26ca35c1172d626f54afebd377b2afa32331e399feb3eb0f7b91a399dca5927078ae languageName: node linkType: hard @@ -6170,7 +6235,7 @@ __metadata: languageName: node linkType: hard -"html-minifier-terser@npm:^6.0.2, html-minifier-terser@npm:^6.1.0": +"html-minifier-terser@npm:^6.0.2": version: 6.1.0 resolution: "html-minifier-terser@npm:6.1.0" dependencies: @@ -6187,6 +6252,23 @@ __metadata: languageName: node linkType: hard +"html-minifier-terser@npm:^7.1.0": + version: 7.2.0 + resolution: "html-minifier-terser@npm:7.2.0" + dependencies: + camel-case: ^4.1.2 + clean-css: ~5.3.2 + commander: ^10.0.0 + entities: ^4.4.0 + param-case: ^3.0.4 + relateurl: ^0.2.7 + terser: ^5.15.1 + bin: + html-minifier-terser: cli.js + checksum: 39feed354b5a8aafc8e910977d68cfd961d6db330a8e1a5b16a528c86b8ee7745d8945134822cf00acf7bf0d0135bf1abad650bf308bee4ea73adb003f5b8656 + languageName: node + linkType: hard + "html-tags@npm:^3.2.0": version: 3.2.0 resolution: "html-tags@npm:3.2.0" @@ -6194,13 +6276,6 @@ __metadata: languageName: node linkType: hard -"html-void-elements@npm:^1.0.0": - version: 1.0.5 - resolution: "html-void-elements@npm:1.0.5" - checksum: 1a56f4f6cfbeb994c21701ff72b4b7f556fe784a70e5e554d1566ff775af83b91ea93f10664f039a67802d9f7b40d4a7f1ed20312bab47bd88d89bd792ea84ca - languageName: node - linkType: hard - "html-webpack-plugin@npm:^5.5.0": version: 5.5.0 resolution: "html-webpack-plugin@npm:5.5.0" @@ -6240,7 +6315,7 @@ __metadata: languageName: node linkType: hard -"http-cache-semantics@npm:^4.0.0, http-cache-semantics@npm:^4.1.0": +"http-cache-semantics@npm:^4.1.0, http-cache-semantics@npm:^4.1.1": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 @@ -6326,6 +6401,16 @@ __metadata: languageName: node linkType: hard +"http2-wrapper@npm:^2.1.10": + version: 2.2.0 + resolution: "http2-wrapper@npm:2.2.0" + dependencies: + quick-lru: ^5.1.1 + resolve-alpn: ^1.2.0 + checksum: 6fd20e5cb6a58151715b3581e06a62a47df943187d2d1f69e538a50cccb7175dd334ecfde7900a37d18f3e13a1a199518a2c211f39860e81e9a16210c199cfaa + languageName: node + linkType: hard + "https-proxy-agent@npm:^5.0.0": version: 5.0.1 resolution: "https-proxy-agent@npm:5.0.1" @@ -6386,7 +6471,7 @@ __metadata: languageName: node linkType: hard -"image-size@npm:^1.0.1": +"image-size@npm:^1.0.2": version: 1.0.2 resolution: "image-size@npm:1.0.2" dependencies: @@ -6421,10 +6506,10 @@ __metadata: languageName: node linkType: hard -"import-lazy@npm:^2.1.0": - version: 2.1.0 - resolution: "import-lazy@npm:2.1.0" - checksum: 05294f3b9dd4971d3a996f0d2f176410fb6745d491d6e73376429189f5c1c3d290548116b2960a7cf3e89c20cdf11431739d1d2d8c54b84061980795010e803a +"import-lazy@npm:^4.0.0": + version: 4.0.0 + resolution: "import-lazy@npm:4.0.0" + checksum: 22f5e51702134aef78890156738454f620e5fe7044b204ebc057c614888a1dd6fdf2ede0fdcca44d5c173fd64f65c985f19a51775b06967ef58cc3d26898df07 languageName: node linkType: hard @@ -6466,7 +6551,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.0, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 @@ -6487,7 +6572,7 @@ __metadata: languageName: node linkType: hard -"ini@npm:^1.3.5, ini@npm:~1.3.0": +"ini@npm:^1.3.4, ini@npm:^1.3.5, ini@npm:~1.3.0": version: 1.3.8 resolution: "ini@npm:1.3.8" checksum: dfd98b0ca3a4fc1e323e38a6c8eb8936e31a97a918d3b377649ea15bdb15d481207a0dda1021efbd86b464cae29a0d33c1d7dcaf6c5672bee17fa849bc50a1b3 @@ -6538,20 +6623,20 @@ __metadata: languageName: node linkType: hard -"is-alphabetical@npm:1.0.4, is-alphabetical@npm:^1.0.0": - version: 1.0.4 - resolution: "is-alphabetical@npm:1.0.4" - checksum: 6508cce44fd348f06705d377b260974f4ce68c74000e7da4045f0d919e568226dc3ce9685c5a2af272195384df6930f748ce9213fc9f399b5d31b362c66312cb +"is-alphabetical@npm:^2.0.0": + version: 2.0.1 + resolution: "is-alphabetical@npm:2.0.1" + checksum: 56207db8d9de0850f0cd30f4966bf731eb82cedfe496cbc2e97e7c3bacaf66fc54a972d2d08c0d93bb679cb84976a05d24c5ad63de56fabbfc60aadae312edaa languageName: node linkType: hard -"is-alphanumerical@npm:^1.0.0": - version: 1.0.4 - resolution: "is-alphanumerical@npm:1.0.4" +"is-alphanumerical@npm:^2.0.0": + version: 2.0.1 + resolution: "is-alphanumerical@npm:2.0.1" dependencies: - is-alphabetical: ^1.0.0 - is-decimal: ^1.0.0 - checksum: e2e491acc16fcf5b363f7c726f666a9538dba0a043665740feb45bba1652457a73441e7c5179c6768a638ed396db3437e9905f403644ec7c468fb41f4813d03f + is-alphabetical: ^2.0.0 + is-decimal: ^2.0.0 + checksum: 87acc068008d4c9c4e9f5bd5e251041d42e7a50995c77b1499cf6ed248f971aadeddb11f239cabf09f7975ee58cac7a48ffc170b7890076d8d227b24a68663c9 languageName: node linkType: hard @@ -6578,14 +6663,14 @@ __metadata: languageName: node linkType: hard -"is-ci@npm:^2.0.0": - version: 2.0.0 - resolution: "is-ci@npm:2.0.0" +"is-ci@npm:^3.0.1": + version: 3.0.1 + resolution: "is-ci@npm:3.0.1" dependencies: - ci-info: ^2.0.0 + ci-info: ^3.2.0 bin: is-ci: bin.js - checksum: 77b869057510f3efa439bbb36e9be429d53b3f51abd4776eeea79ab3b221337fe1753d1e50058a9e2c650d38246108beffb15ccfd443929d77748d8c0cc90144 + checksum: 192c66dc7826d58f803ecae624860dccf1899fc1f3ac5505284c0a5cf5f889046ffeb958fa651e5725d5705c5bcb14f055b79150ea5fcad7456a9569de60260e languageName: node linkType: hard @@ -6598,10 +6683,10 @@ __metadata: languageName: node linkType: hard -"is-decimal@npm:^1.0.0": - version: 1.0.4 - resolution: "is-decimal@npm:1.0.4" - checksum: ed483a387517856dc395c68403a10201fddcc1b63dc56513fbe2fe86ab38766120090ecdbfed89223d84ca8b1cd28b0641b93cb6597b6e8f4c097a7c24e3fb96 +"is-decimal@npm:^2.0.0": + version: 2.0.1 + resolution: "is-decimal@npm:2.0.1" + checksum: 97132de7acdce77caa7b797632970a2ecd649a88e715db0e4dbc00ab0708b5e7574ba5903962c860cd4894a14fd12b100c0c4ac8aed445cf6f55c6cf747a4158 languageName: node linkType: hard @@ -6644,10 +6729,10 @@ __metadata: languageName: node linkType: hard -"is-hexadecimal@npm:^1.0.0": - version: 1.0.4 - resolution: "is-hexadecimal@npm:1.0.4" - checksum: a452e047587b6069332d83130f54d30da4faf2f2ebaa2ce6d073c27b5703d030d58ed9e0b729c8e4e5b52c6f1dab26781bb77b7bc6c7805f14f320e328ff8cd5 +"is-hexadecimal@npm:^2.0.0": + version: 2.0.1 + resolution: "is-hexadecimal@npm:2.0.1" + checksum: 66a2ea85994c622858f063f23eda506db29d92b52580709eb6f4c19550552d4dcf3fb81952e52f7cf972097237959e00adc7bb8c9400cd12886e15bf06145321 languageName: node linkType: hard @@ -6668,10 +6753,10 @@ __metadata: languageName: node linkType: hard -"is-npm@npm:^5.0.0": - version: 5.0.0 - resolution: "is-npm@npm:5.0.0" - checksum: 9baff02b0c69a3d3c79b162cb2f9e67fb40ef6d172c16601b2e2471c21e9a4fa1fc9885a308d7bc6f3a3cd2a324c27fa0bf284c133c3349bb22571ab70d041cc +"is-npm@npm:^6.0.0": + version: 6.0.0 + resolution: "is-npm@npm:6.0.0" + checksum: fafe1ddc772345f5460514891bb8014376904ccdbddd59eee7525c9adcc08d426933f28b087bef3e17524da7ebf35c03ef484ff3b6ba9d5fecd8c6e6a7d4bf11 languageName: node linkType: hard @@ -6710,13 +6795,6 @@ __metadata: languageName: node linkType: hard -"is-plain-obj@npm:^2.0.0": - version: 2.1.0 - resolution: "is-plain-obj@npm:2.1.0" - checksum: cec9100678b0a9fe0248a81743041ed990c2d4c99f893d935545cfbc42876cbe86d207f3b895700c690ad2fa520e568c44afc1605044b535a7820c1d40e38daa - languageName: node - linkType: hard - "is-plain-obj@npm:^3.0.0": version: 3.0.0 resolution: "is-plain-obj@npm:3.0.0" @@ -6724,6 +6802,13 @@ __metadata: languageName: node linkType: hard +"is-plain-obj@npm:^4.0.0": + version: 4.1.0 + resolution: "is-plain-obj@npm:4.1.0" + checksum: 6dc45da70d04a81f35c9310971e78a6a3c7a63547ef782e3a07ee3674695081b6ca4e977fbb8efc48dae3375e0b34558d2bcd722aec9bddfa2d7db5b041be8ce + languageName: node + linkType: hard + "is-plain-object@npm:^2.0.4": version: 2.0.4 resolution: "is-plain-object@npm:2.0.4" @@ -6733,6 +6818,15 @@ __metadata: languageName: node linkType: hard +"is-reference@npm:^3.0.0": + version: 3.0.1 + resolution: "is-reference@npm:3.0.1" + dependencies: + "@types/estree": "*" + checksum: 12c316d16191961938057e949c9f59ecac3c00c8101005a81ee351fde0775590238939c294ecac3a371400eb85d4b2556675396ebd4db821b767c145df28623f + languageName: node + linkType: hard + "is-regexp@npm:^1.0.0": version: 1.0.0 resolution: "is-regexp@npm:1.0.0" @@ -6761,20 +6855,6 @@ __metadata: languageName: node linkType: hard -"is-whitespace-character@npm:^1.0.0": - version: 1.0.4 - resolution: "is-whitespace-character@npm:1.0.4" - checksum: adab8ad9847ccfcb6f1b7000b8f622881b5ba2a09ce8be2794a6d2b10c3af325b469fc562c9fb889f468eed27be06e227ac609d0aa1e3a59b4dbcc88e2b0418e - languageName: node - linkType: hard - -"is-word-character@npm:^1.0.0": - version: 1.0.4 - resolution: "is-word-character@npm:1.0.4" - checksum: 1821d6c6abe5bc0b3abe3fdc565d66d7c8a74ea4e93bc77b4a47d26e2e2a306d6ab7d92b353b0d2b182869e3ecaa8f4a346c62d0e31d38ebc0ceaf7cae182c3f - languageName: node - linkType: hard - "is-wsl@npm:^2.2.0": version: 2.2.0 resolution: "is-wsl@npm:2.2.0" @@ -6784,10 +6864,10 @@ __metadata: languageName: node linkType: hard -"is-yarn-global@npm:^0.3.0": - version: 0.3.0 - resolution: "is-yarn-global@npm:0.3.0" - checksum: bca013d65fee2862024c9fbb3ba13720ffca2fe750095174c1c80922fdda16402b5c233f5ac9e265bc12ecb5446e7b7f519a32d9541788f01d4d44e24d2bf481 +"is-yarn-global@npm:^0.4.0": + version: 0.4.1 + resolution: "is-yarn-global@npm:0.4.1" + checksum: 79ec4e6f581c53d4fefdf5f6c237f9a3ad8db29c85cdc4659e76ae345659317552052a97b7e56952aa5d94a23c798ebec8ccad72fb14d3b26dc647ddceddd716 languageName: node linkType: hard @@ -6863,16 +6943,16 @@ __metadata: languageName: node linkType: hard -"joi@npm:^17.6.0": - version: 17.7.0 - resolution: "joi@npm:17.7.0" +"joi@npm:^17.7.0, joi@npm:^17.8.3": + version: 17.9.2 + resolution: "joi@npm:17.9.2" dependencies: "@hapi/hoek": ^9.0.0 "@hapi/topo": ^5.0.0 "@sideway/address": ^4.1.3 - "@sideway/formula": ^3.0.0 + "@sideway/formula": ^3.0.1 "@sideway/pinpoint": ^2.0.0 - checksum: 767a847936cb66787256c4351ff86e1b9e8d7383cbe81a5c827064032c2a8e8b6e938baef5ad32c4035fe4c56e537bd90aa2a952be8a0658601c920cdeb4fb3c + checksum: 8c3709849293411c524e5a679dba7b42598a29a663478941767b8d5b06288611dece58803c468a2c7320cc2429a3e71e3d94337fe47aefcf6c22174dbd90b601 languageName: node linkType: hard @@ -6924,10 +7004,10 @@ __metadata: languageName: node linkType: hard -"json-buffer@npm:3.0.0": - version: 3.0.0 - resolution: "json-buffer@npm:3.0.0" - checksum: 0cecacb8025370686a916069a2ff81f7d55167421b6aa7270ee74e244012650dd6bce22b0852202ea7ff8624fce50ff0ec1bdf95914ccb4553426e290d5a63fa +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 9026b03edc2847eefa2e37646c579300a1f3a4586cfb62bf857832b60c852042d0d6ae55d1afb8926163fa54c2b01d83ae24705f34990348bdac6273a29d4581 languageName: node linkType: hard @@ -6952,7 +7032,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^2.1.2, json5@npm:^2.2.1": +"json5@npm:^2.1.2, json5@npm:^2.2.2": version: 2.2.3 resolution: "json5@npm:2.2.3" bin: @@ -6974,12 +7054,12 @@ __metadata: languageName: node linkType: hard -"keyv@npm:^3.0.0": - version: 3.1.0 - resolution: "keyv@npm:3.1.0" +"keyv@npm:^4.5.2": + version: 4.5.2 + resolution: "keyv@npm:4.5.2" dependencies: - json-buffer: 3.0.0 - checksum: bb7e8f3acffdbafbc2dd5b63f377fe6ec4c0e2c44fc82720449ef8ab54f4a7ce3802671ed94c0f475ae0a8549703353a2124561fcf3317010c141b32ca1ce903 + json-buffer: 3.0.1 + checksum: 13ad58303acd2261c0d4831b4658451603fd159e61daea2121fcb15feb623e75ee328cded0572da9ca76b7b3ceaf8e614f1806c6b3af5db73c9c35a345259651 languageName: node linkType: hard @@ -6997,19 +7077,36 @@ __metadata: languageName: node linkType: hard -"klona@npm:^2.0.4, klona@npm:^2.0.5": +"kleur@npm:^4.0.3": + version: 4.1.5 + resolution: "kleur@npm:4.1.5" + checksum: 1dc476e32741acf0b1b5b0627ffd0d722e342c1b0da14de3e8ae97821327ca08f9fb944542fb3c126d90ac5f27f9d804edbe7c585bf7d12ef495d115e0f22c12 + languageName: node + linkType: hard + +"klona@npm:^2.0.4, klona@npm:^2.0.6": version: 2.0.6 resolution: "klona@npm:2.0.6" checksum: ac9ee3732e42b96feb67faae4d27cf49494e8a3bf3fa7115ce242fe04786788e0aff4741a07a45a2462e2079aa983d73d38519c85d65b70ef11447bbc3c58ce7 languageName: node linkType: hard -"latest-version@npm:^5.1.0": - version: 5.1.0 - resolution: "latest-version@npm:5.1.0" +"latest-version@npm:^7.0.0": + version: 7.0.0 + resolution: "latest-version@npm:7.0.0" dependencies: - package-json: ^6.3.0 - checksum: fbc72b071eb66c40f652441fd783a9cca62f08bf42433651937f078cd9ef94bf728ec7743992777826e4e89305aef24f234b515e6030503a2cbee7fc9bdc2c0f + package-json: ^8.1.0 + checksum: 1f0deba00d5a34394cce4463c938811f51bbb539b131674f4bb2062c63f2cc3b80bccd56ecade3bd5932d04a34cf0a5a8a2ccc4ec9e5e6b285a9a7b3e27d0d66 + languageName: node + linkType: hard + +"launch-editor@npm:^2.6.0": + version: 2.6.0 + resolution: "launch-editor@npm:2.6.0" + dependencies: + picocolors: ^1.0.0 + shell-quote: ^1.7.3 + checksum: 48e4230643e8fdb5c14c11314706d58d9f3fbafe2606be3d6e37da1918ad8bfe39dd87875c726a1b59b9f4da99d87ec3e36d4c528464f0b820f9e91e5cb1c02d languageName: node linkType: hard @@ -7115,20 +7212,27 @@ __metadata: languageName: node linkType: hard -"lodash.uniq@npm:4.5.0, lodash.uniq@npm:^4.5.0": +"lodash.uniq@npm:^4.5.0": version: 4.5.0 resolution: "lodash.uniq@npm:4.5.0" checksum: a4779b57a8d0f3c441af13d9afe7ecff22dd1b8ce1129849f71d9bbc8e8ee4e46dfb4b7c28f7ad3d67481edd6e51126e4e2a6ee276e25906d10f7140187c392d languageName: node linkType: hard -"lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21": +"lodash@npm:^4.17.20, lodash@npm:^4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 languageName: node linkType: hard +"longest-streak@npm:^3.0.0": + version: 3.1.0 + resolution: "longest-streak@npm:3.1.0" + checksum: d7f952ed004cbdb5c8bcfc4f7f5c3d65449e6c5a9e9be4505a656e3df5a57ee125f284286b4bf8ecea0c21a7b3bf2b8f9001ad506c319b9815ad6a63a47d0fd0 + languageName: node + linkType: hard + "loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.2.0, loose-envify@npm:^1.3.1, loose-envify@npm:^1.4.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" @@ -7149,17 +7253,19 @@ __metadata: languageName: node linkType: hard -"lowercase-keys@npm:^1.0.0, lowercase-keys@npm:^1.0.1": - version: 1.0.1 - resolution: "lowercase-keys@npm:1.0.1" - checksum: 4d045026595936e09953e3867722e309415ff2c80d7701d067546d75ef698dac218a4f53c6d1d0e7368b47e45fd7529df47e6cb56fbb90523ba599f898b3d147 +"lowercase-keys@npm:^3.0.0": + version: 3.0.0 + resolution: "lowercase-keys@npm:3.0.0" + checksum: 67a3f81409af969bc0c4ca0e76cd7d16adb1e25aa1c197229587eaf8671275c8c067cd421795dbca4c81be0098e4c426a086a05e30de8a9c587b7a13c0c7ccc5 languageName: node linkType: hard -"lowercase-keys@npm:^2.0.0": - version: 2.0.0 - resolution: "lowercase-keys@npm:2.0.0" - checksum: 24d7ebd56ccdf15ff529ca9e08863f3c54b0b9d1edb97a3ae1af34940ae666c01a1e6d200707bce730a8ef76cb57cc10e65f245ecaaf7e6bc8639f2fb460ac23 +"lru-cache@npm:^5.1.1": + version: 5.1.1 + resolution: "lru-cache@npm:5.1.1" + dependencies: + yallist: ^3.0.2 + checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb languageName: node linkType: hard @@ -7179,7 +7285,7 @@ __metadata: languageName: node linkType: hard -"make-dir@npm:^3.0.0, make-dir@npm:^3.0.2, make-dir@npm:^3.1.0": +"make-dir@npm:^3.0.2": version: 3.1.0 resolution: "make-dir@npm:3.1.0" dependencies: @@ -7212,51 +7318,255 @@ __metadata: languageName: node linkType: hard -"markdown-escapes@npm:^1.0.0": - version: 1.0.4 - resolution: "markdown-escapes@npm:1.0.4" - checksum: 6833a93d72d3f70a500658872312c6fa8015c20cc835a85ae6901fa232683fbc6ed7118ebe920fea7c80039a560f339c026597d96eee0e9de602a36921804997 +"markdown-extensions@npm:^1.0.0": + version: 1.1.1 + resolution: "markdown-extensions@npm:1.1.1" + checksum: 8a6dd128be1c524049ea6a41a9193715c2835d3d706af4b8b714ff2043a82786dbcd4a8f1fa9ddd28facbc444426c97515aef2d1f3dd11d5e2d63749ba577b1e languageName: node linkType: hard -"mdast-squeeze-paragraphs@npm:^4.0.0": - version: 4.0.0 - resolution: "mdast-squeeze-paragraphs@npm:4.0.0" - dependencies: - unist-util-remove: ^2.0.0 - checksum: dfe8ec8e8a62171f020e82b088cc35cb9da787736dc133a3b45ce8811782a93e69bf06d147072e281079f09fac67be8a36153ffffd9bfbf89ed284e4c4f56f75 +"markdown-table@npm:^3.0.0": + version: 3.0.3 + resolution: "markdown-table@npm:3.0.3" + checksum: 8fcd3d9018311120fbb97115987f8b1665a603f3134c93fbecc5d1463380c8036f789e2a62c19432058829e594fff8db9ff81c88f83690b2f8ed6c074f8d9e10 languageName: node linkType: hard -"mdast-util-definitions@npm:^4.0.0": - version: 4.0.0 - resolution: "mdast-util-definitions@npm:4.0.0" - dependencies: - unist-util-visit: ^2.0.0 - checksum: 2325f20b82b3fb8cb5fda77038ee0bbdd44f82cfca7c48a854724b58bc1fe5919630a3ce7c45e210726df59d46c881d020b2da7a493bfd1ee36eb2bbfef5d78e - languageName: node - linkType: hard - -"mdast-util-to-hast@npm:10.0.1": - version: 10.0.1 - resolution: "mdast-util-to-hast@npm:10.0.1" +"mdast-util-definitions@npm:^5.0.0": + version: 5.1.2 + resolution: "mdast-util-definitions@npm:5.1.2" dependencies: "@types/mdast": ^3.0.0 "@types/unist": ^2.0.0 - mdast-util-definitions: ^4.0.0 - mdurl: ^1.0.0 - unist-builder: ^2.0.0 - unist-util-generated: ^1.0.0 - unist-util-position: ^3.0.0 - unist-util-visit: ^2.0.0 - checksum: e5f385757df7e9b37db4d6f326bf7b4fc1b40f9ad01fc335686578f44abe0ba46d3e60af4d5e5b763556d02e65069ef9a09c49db049b52659203a43e7fa9084d + unist-util-visit: ^4.0.0 + checksum: 2544daccab744ea1ede76045c2577ae4f1cc1b9eb1ea51ab273fe1dca8db5a8d6f50f87759c0ce6484975914b144b7f40316f805cb9c86223a78db8de0b77bae languageName: node linkType: hard -"mdast-util-to-string@npm:^2.0.0": - version: 2.0.0 - resolution: "mdast-util-to-string@npm:2.0.0" - checksum: 0b2113ada10e002fbccb014170506dabe2f2ddacaacbe4bc1045c33f986652c5a162732a2c057c5335cdb58419e2ad23e368e5be226855d4d4e280b81c4e9ec2 +"mdast-util-directive@npm:^2.0.0": + version: 2.2.4 + resolution: "mdast-util-directive@npm:2.2.4" + dependencies: + "@types/mdast": ^3.0.0 + "@types/unist": ^2.0.0 + mdast-util-from-markdown: ^1.3.0 + mdast-util-to-markdown: ^1.5.0 + parse-entities: ^4.0.0 + stringify-entities: ^4.0.0 + unist-util-visit-parents: ^5.1.3 + checksum: d04112761659c912b5d7db8f8c035918da52e79ce8cb598c7c270c6f678db0c22f3dea7894b30dec46852409f926306b84ca95683dd1e28731835eb5cb4fbda4 + languageName: node + linkType: hard + +"mdast-util-find-and-replace@npm:^2.0.0": + version: 2.2.2 + resolution: "mdast-util-find-and-replace@npm:2.2.2" + dependencies: + "@types/mdast": ^3.0.0 + escape-string-regexp: ^5.0.0 + unist-util-is: ^5.0.0 + unist-util-visit-parents: ^5.0.0 + checksum: b4ce463c43fe6e1c38a53a89703f755c84ab5437f49bff9a0ac751279733332ca11c85ed0262aa6c17481f77b555d26ca6d64e70d6814f5b8d12d34a3e53a60b + languageName: node + linkType: hard + +"mdast-util-from-markdown@npm:^1.0.0, mdast-util-from-markdown@npm:^1.1.0, mdast-util-from-markdown@npm:^1.3.0": + version: 1.3.0 + resolution: "mdast-util-from-markdown@npm:1.3.0" + dependencies: + "@types/mdast": ^3.0.0 + "@types/unist": ^2.0.0 + decode-named-character-reference: ^1.0.0 + mdast-util-to-string: ^3.1.0 + micromark: ^3.0.0 + micromark-util-decode-numeric-character-reference: ^1.0.0 + micromark-util-decode-string: ^1.0.0 + micromark-util-normalize-identifier: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + unist-util-stringify-position: ^3.0.0 + uvu: ^0.5.0 + checksum: cc971d1ad381150f6504fd753fbcffcc64c0abb527540ce343625c2bba76104505262122ef63d14ab66eb47203f323267017c6d09abfa8535ee6a8e14069595f + languageName: node + linkType: hard + +"mdast-util-gfm-autolink-literal@npm:^1.0.0": + version: 1.0.3 + resolution: "mdast-util-gfm-autolink-literal@npm:1.0.3" + dependencies: + "@types/mdast": ^3.0.0 + ccount: ^2.0.0 + mdast-util-find-and-replace: ^2.0.0 + micromark-util-character: ^1.0.0 + checksum: 1748a8727cfc533bac0c287d6e72d571d165bfa77ae0418be4828177a3ec73c02c3f2ee534d87eb75cbaffa00c0866853bbcc60ae2255babb8210f7636ec2ce2 + languageName: node + linkType: hard + +"mdast-util-gfm-footnote@npm:^1.0.0": + version: 1.0.2 + resolution: "mdast-util-gfm-footnote@npm:1.0.2" + dependencies: + "@types/mdast": ^3.0.0 + mdast-util-to-markdown: ^1.3.0 + micromark-util-normalize-identifier: ^1.0.0 + checksum: 2d77505f9377ed7e14472ef5e6b8366c3fec2cf5f936bb36f9fbe5b97ccb7cce0464d9313c236fa86fb844206fd585db05707e4fcfb755e4fc1864194845f1f6 + languageName: node + linkType: hard + +"mdast-util-gfm-strikethrough@npm:^1.0.0": + version: 1.0.3 + resolution: "mdast-util-gfm-strikethrough@npm:1.0.3" + dependencies: + "@types/mdast": ^3.0.0 + mdast-util-to-markdown: ^1.3.0 + checksum: 17003340ff1bba643ec4a59fd4370fc6a32885cab2d9750a508afa7225ea71449fb05acaef60faa89c6378b8bcfbd86a9d94b05f3c6651ff27a60e3ddefc2549 + languageName: node + linkType: hard + +"mdast-util-gfm-table@npm:^1.0.0": + version: 1.0.7 + resolution: "mdast-util-gfm-table@npm:1.0.7" + dependencies: + "@types/mdast": ^3.0.0 + markdown-table: ^3.0.0 + mdast-util-from-markdown: ^1.0.0 + mdast-util-to-markdown: ^1.3.0 + checksum: 8b8c401bb4162e53f072a2dff8efbca880fd78d55af30601c791315ab6722cb2918176e8585792469a0c530cebb9df9b4e7fede75fdc4d83df2839e238836692 + languageName: node + linkType: hard + +"mdast-util-gfm-task-list-item@npm:^1.0.0": + version: 1.0.2 + resolution: "mdast-util-gfm-task-list-item@npm:1.0.2" + dependencies: + "@types/mdast": ^3.0.0 + mdast-util-to-markdown: ^1.3.0 + checksum: c9b86037d6953b84f11fb2fc3aa23d5b8e14ca0dfcb0eb2fb289200e172bb9d5647bfceb4f86606dc6d935e8d58f6a458c04d3e55e87ff8513c7d4ade976200b + languageName: node + linkType: hard + +"mdast-util-gfm@npm:^2.0.0": + version: 2.0.2 + resolution: "mdast-util-gfm@npm:2.0.2" + dependencies: + mdast-util-from-markdown: ^1.0.0 + mdast-util-gfm-autolink-literal: ^1.0.0 + mdast-util-gfm-footnote: ^1.0.0 + mdast-util-gfm-strikethrough: ^1.0.0 + mdast-util-gfm-table: ^1.0.0 + mdast-util-gfm-task-list-item: ^1.0.0 + mdast-util-to-markdown: ^1.0.0 + checksum: 7078cb985255208bcbce94a121906417d38353c6b1a9acbe56ee8888010d3500608b5d51c16b0999ac63ca58848fb13012d55f26930ff6c6f3450f053d56514e + languageName: node + linkType: hard + +"mdast-util-mdx-expression@npm:^1.0.0": + version: 1.3.2 + resolution: "mdast-util-mdx-expression@npm:1.3.2" + dependencies: + "@types/estree-jsx": ^1.0.0 + "@types/hast": ^2.0.0 + "@types/mdast": ^3.0.0 + mdast-util-from-markdown: ^1.0.0 + mdast-util-to-markdown: ^1.0.0 + checksum: e4c90f26deaa5eb6217b0a9af559a80de41da02ab3bcd864c56bed3304b056ae703896e9876bc6ded500f4aff59f4de5cbf6a4b109a5ba408f2342805fe6dc05 + languageName: node + linkType: hard + +"mdast-util-mdx-jsx@npm:^2.0.0": + version: 2.1.2 + resolution: "mdast-util-mdx-jsx@npm:2.1.2" + dependencies: + "@types/estree-jsx": ^1.0.0 + "@types/hast": ^2.0.0 + "@types/mdast": ^3.0.0 + "@types/unist": ^2.0.0 + ccount: ^2.0.0 + mdast-util-from-markdown: ^1.1.0 + mdast-util-to-markdown: ^1.3.0 + parse-entities: ^4.0.0 + stringify-entities: ^4.0.0 + unist-util-remove-position: ^4.0.0 + unist-util-stringify-position: ^3.0.0 + vfile-message: ^3.0.0 + checksum: 637e0bbd97c0c783f6b12bb05ccb1edaec076c5aa6d349147d77b8e6e10677f1be8e2870c05b1896f69095c9bc527f34be72b349b30737ab2e499bfc579b3a28 + languageName: node + linkType: hard + +"mdast-util-mdx@npm:^2.0.0": + version: 2.0.1 + resolution: "mdast-util-mdx@npm:2.0.1" + dependencies: + mdast-util-from-markdown: ^1.0.0 + mdast-util-mdx-expression: ^1.0.0 + mdast-util-mdx-jsx: ^2.0.0 + mdast-util-mdxjs-esm: ^1.0.0 + mdast-util-to-markdown: ^1.0.0 + checksum: 7303149230a26e524e319833b782bffca94e49cdab012996618701259bd056e014ca22a35d25ffa8880ba9064ee126a2a002f01e5c90a31ca726339ed775875e + languageName: node + linkType: hard + +"mdast-util-mdxjs-esm@npm:^1.0.0": + version: 1.3.1 + resolution: "mdast-util-mdxjs-esm@npm:1.3.1" + dependencies: + "@types/estree-jsx": ^1.0.0 + "@types/hast": ^2.0.0 + "@types/mdast": ^3.0.0 + mdast-util-from-markdown: ^1.0.0 + mdast-util-to-markdown: ^1.0.0 + checksum: ee78a4f58adfec38723cbc920f05481201ebb001eff3982f2d0e5f5ce5c75685e732e9d361ad4a1be8b936b4e5de0f2599cb96b92ad4bd92698ac0c4a09bbec3 + languageName: node + linkType: hard + +"mdast-util-phrasing@npm:^3.0.0": + version: 3.0.1 + resolution: "mdast-util-phrasing@npm:3.0.1" + dependencies: + "@types/mdast": ^3.0.0 + unist-util-is: ^5.0.0 + checksum: c5b616d9b1eb76a6b351d195d94318494722525a12a89d9c8a3b091af7db3dd1fc55d294f9d29266d8159a8267b0df4a7a133bda8a3909d5331c383e1e1ff328 + languageName: node + linkType: hard + +"mdast-util-to-hast@npm:^12.1.0": + version: 12.3.0 + resolution: "mdast-util-to-hast@npm:12.3.0" + dependencies: + "@types/hast": ^2.0.0 + "@types/mdast": ^3.0.0 + mdast-util-definitions: ^5.0.0 + micromark-util-sanitize-uri: ^1.1.0 + trim-lines: ^3.0.0 + unist-util-generated: ^2.0.0 + unist-util-position: ^4.0.0 + unist-util-visit: ^4.0.0 + checksum: ea40c9f07dd0b731754434e81c913590c611b1fd753fa02550a1492aadfc30fb3adecaf62345ebb03cea2ddd250c15ab6e578fffde69c19955c9b87b10f2a9bb + languageName: node + linkType: hard + +"mdast-util-to-markdown@npm:^1.0.0, mdast-util-to-markdown@npm:^1.3.0, mdast-util-to-markdown@npm:^1.5.0": + version: 1.5.0 + resolution: "mdast-util-to-markdown@npm:1.5.0" + dependencies: + "@types/mdast": ^3.0.0 + "@types/unist": ^2.0.0 + longest-streak: ^3.0.0 + mdast-util-phrasing: ^3.0.0 + mdast-util-to-string: ^3.0.0 + micromark-util-decode-string: ^1.0.0 + unist-util-visit: ^4.0.0 + zwitch: ^2.0.0 + checksum: 64338eb33e49bb0aea417591fd986f72fdd39205052563bb7ce9eb9ecc160824509bfacd740086a05af355c6d5c36353aafe95cab9e6927d674478757cee6259 + languageName: node + linkType: hard + +"mdast-util-to-string@npm:^3.0.0, mdast-util-to-string@npm:^3.1.0": + version: 3.2.0 + resolution: "mdast-util-to-string@npm:3.2.0" + dependencies: + "@types/mdast": ^3.0.0 + checksum: dc40b544d54339878ae2c9f2b3198c029e1e07291d2126bd00ca28272ee6616d0d2194eb1c9828a7c34d412a79a7e73b26512a734698d891c710a1e73db1e848 languageName: node linkType: hard @@ -7267,13 +7577,6 @@ __metadata: languageName: node linkType: hard -"mdurl@npm:^1.0.0": - version: 1.0.1 - resolution: "mdurl@npm:1.0.1" - checksum: 71731ecba943926bfbf9f9b51e28b5945f9411c4eda80894221b47cc105afa43ba2da820732b436f0798fd3edbbffcd1fc1415843c41a87fea08a41cc1e3d02b - languageName: node - linkType: hard - "media-typer@npm:0.3.0": version: 0.3.0 resolution: "media-typer@npm:0.3.0" @@ -7318,6 +7621,456 @@ __metadata: languageName: node linkType: hard +"micromark-core-commonmark@npm:^1.0.0, micromark-core-commonmark@npm:^1.0.1": + version: 1.0.6 + resolution: "micromark-core-commonmark@npm:1.0.6" + dependencies: + decode-named-character-reference: ^1.0.0 + micromark-factory-destination: ^1.0.0 + micromark-factory-label: ^1.0.0 + micromark-factory-space: ^1.0.0 + micromark-factory-title: ^1.0.0 + micromark-factory-whitespace: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-chunked: ^1.0.0 + micromark-util-classify-character: ^1.0.0 + micromark-util-html-tag-name: ^1.0.0 + micromark-util-normalize-identifier: ^1.0.0 + micromark-util-resolve-all: ^1.0.0 + micromark-util-subtokenize: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.1 + uvu: ^0.5.0 + checksum: 4b483c46077f696ed310f6d709bb9547434c218ceb5c1220fde1707175f6f68b44da15ab8668f9c801e1a123210071e3af883a7d1215122c913fd626f122bfc2 + languageName: node + linkType: hard + +"micromark-extension-directive@npm:^2.0.0": + version: 2.2.0 + resolution: "micromark-extension-directive@npm:2.2.0" + dependencies: + micromark-factory-space: ^1.0.0 + micromark-factory-whitespace: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + parse-entities: ^4.0.0 + uvu: ^0.5.0 + checksum: 1256374a1327c2aecd4b3592de2c62ddf4798441d3a953f8414ecde05da2595a47428d94959b0bdb67605d4e195b95eb0b6e18ece44a50cbdf5a9c2c25d21905 + languageName: node + linkType: hard + +"micromark-extension-gfm-autolink-literal@npm:^1.0.0": + version: 1.0.3 + resolution: "micromark-extension-gfm-autolink-literal@npm:1.0.3" + dependencies: + micromark-util-character: ^1.0.0 + micromark-util-sanitize-uri: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + checksum: bb181972ac346ca73ca1ab0b80b80c9d6509ed149799d2217d5442670f499c38a94edff73d32fa52b390d89640974cfbd7f29e4ad7d599581d5e1cabcae636a2 + languageName: node + linkType: hard + +"micromark-extension-gfm-footnote@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-extension-gfm-footnote@npm:1.1.0" + dependencies: + micromark-core-commonmark: ^1.0.0 + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-normalize-identifier: ^1.0.0 + micromark-util-sanitize-uri: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + checksum: 7a5408625ef2cca5cc18e6591c2522a8a409f466a6fbc0ed938950aafe5fc9bf1eada65e1a4dd4e36ec3e7b24920de1f4b3e2c365d8f5cd2d6ccb1f8c2377c49 + languageName: node + linkType: hard + +"micromark-extension-gfm-strikethrough@npm:^1.0.0": + version: 1.0.5 + resolution: "micromark-extension-gfm-strikethrough@npm:1.0.5" + dependencies: + micromark-util-chunked: ^1.0.0 + micromark-util-classify-character: ^1.0.0 + micromark-util-resolve-all: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + checksum: 548c0f257753d735c741533411957f04253da53db31e1f398dc5dc1de9f398c45586baad5223dce8f3b55f9433c255e6eb695fc3104256b8c332dd8737136882 + languageName: node + linkType: hard + +"micromark-extension-gfm-table@npm:^1.0.0": + version: 1.0.5 + resolution: "micromark-extension-gfm-table@npm:1.0.5" + dependencies: + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + checksum: f0aab3b4333cc24b1534b08dc4cce986dd606df8b7ed913e5a1de9fe2d3ae67b2435663c0bc271b528874af4928e580e1ad540ea9117d7f2d74edb28859c97ef + languageName: node + linkType: hard + +"micromark-extension-gfm-tagfilter@npm:^1.0.0": + version: 1.0.2 + resolution: "micromark-extension-gfm-tagfilter@npm:1.0.2" + dependencies: + micromark-util-types: ^1.0.0 + checksum: 7d2441df51f890c86f8e7cf7d331a570b69c8105fa1c2fc5b737cb739502c16c8ee01cf35550a8a78f89497c5dfacc97cf82d55de6274e8320f3aec25e2b0dd2 + languageName: node + linkType: hard + +"micromark-extension-gfm-task-list-item@npm:^1.0.0": + version: 1.0.4 + resolution: "micromark-extension-gfm-task-list-item@npm:1.0.4" + dependencies: + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + checksum: 2575bb47b320f2479d3cc2492ba7cf79d6baa9cd0200c0ed120fd0e318e64e8ebab4a93a056a3781cb5107193f3b36ebd2d86a5928308bef45fc121291f97eb5 + languageName: node + linkType: hard + +"micromark-extension-gfm@npm:^2.0.0": + version: 2.0.1 + resolution: "micromark-extension-gfm@npm:2.0.1" + dependencies: + micromark-extension-gfm-autolink-literal: ^1.0.0 + micromark-extension-gfm-footnote: ^1.0.0 + micromark-extension-gfm-strikethrough: ^1.0.0 + micromark-extension-gfm-table: ^1.0.0 + micromark-extension-gfm-tagfilter: ^1.0.0 + micromark-extension-gfm-task-list-item: ^1.0.0 + micromark-util-combine-extensions: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: b181479c87be38d5ae8d28e6dc52fab73c894fd2706876746f27a91fb186644ce03532a9c35dca2186327a0e2285cd5242ad0361dc89adedd4a50376ffd94e22 + languageName: node + linkType: hard + +"micromark-extension-mdx-expression@npm:^1.0.0": + version: 1.0.4 + resolution: "micromark-extension-mdx-expression@npm:1.0.4" + dependencies: + micromark-factory-mdx-expression: ^1.0.0 + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-events-to-acorn: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + checksum: d19a31f9813dd5d4ad96b99e35b7c48067e69d75f92ec670dad5242857fb7688ba8b7c6a15616797b5df25dd89fd3b54916f93cb60ce2cfe97aca84739b45954 + languageName: node + linkType: hard + +"micromark-extension-mdx-jsx@npm:^1.0.0": + version: 1.0.3 + resolution: "micromark-extension-mdx-jsx@npm:1.0.3" + dependencies: + "@types/acorn": ^4.0.0 + estree-util-is-identifier-name: ^2.0.0 + micromark-factory-mdx-expression: ^1.0.0 + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + vfile-message: ^3.0.0 + checksum: 1a5566890aabc52fe96b78e3a3a507dee03a2232e44b9360b00617734e156f934e85bc6a477fbb856c793fe33c9fb7d2207a4f50e680168c0d04ba9c9336d960 + languageName: node + linkType: hard + +"micromark-extension-mdx-md@npm:^1.0.0": + version: 1.0.0 + resolution: "micromark-extension-mdx-md@npm:1.0.0" + dependencies: + micromark-util-types: ^1.0.0 + checksum: b4f205e1d5f0946b4755541ef44ffd0b3be8c7ecfc08d8b139b6a21fbd3ff62d8fdb6b7e6d17bd9a3b610450267f43a41703dc48b341da9addd743a28cdefa64 + languageName: node + linkType: hard + +"micromark-extension-mdxjs-esm@npm:^1.0.0": + version: 1.0.3 + resolution: "micromark-extension-mdxjs-esm@npm:1.0.3" + dependencies: + micromark-core-commonmark: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-events-to-acorn: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + unist-util-position-from-estree: ^1.1.0 + uvu: ^0.5.0 + vfile-message: ^3.0.0 + checksum: 756074656391a5e5bb96bc8a0e9c1df7d9f7be5299847c9719e6a90552e1c76a11876aa89986ad5da89ab485f776a4a43a61ea3acddd4f865a5cee43ac523ffd + languageName: node + linkType: hard + +"micromark-extension-mdxjs@npm:^1.0.0": + version: 1.0.0 + resolution: "micromark-extension-mdxjs@npm:1.0.0" + dependencies: + acorn: ^8.0.0 + acorn-jsx: ^5.0.0 + micromark-extension-mdx-expression: ^1.0.0 + micromark-extension-mdx-jsx: ^1.0.0 + micromark-extension-mdx-md: ^1.0.0 + micromark-extension-mdxjs-esm: ^1.0.0 + micromark-util-combine-extensions: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: ba836c6d2dfc67597886e88f533ffa02f2029dbe216a0651f1066e70f8529a700bcc7fa2bc4201ee12fd3d1cd7da7093d5a442442daeb84b27df96aaffb7699c + languageName: node + linkType: hard + +"micromark-factory-destination@npm:^1.0.0": + version: 1.0.0 + resolution: "micromark-factory-destination@npm:1.0.0" + dependencies: + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: 8e733ae9c1c2342f14ff290bf09946e20f6f540117d80342377a765cac48df2ea5e748f33c8b07501ad7a43414b1a6597c8510ede2052b6bf1251fab89748e20 + languageName: node + linkType: hard + +"micromark-factory-label@npm:^1.0.0": + version: 1.0.2 + resolution: "micromark-factory-label@npm:1.0.2" + dependencies: + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + checksum: 957e9366bdc8dbc1437c0706ff96972fa985ab4b1274abcae12f6094f527cbf5c69e7f2304c23c7f4b96e311ff7911d226563b8b43dcfcd4091e8c985fb97ce6 + languageName: node + linkType: hard + +"micromark-factory-mdx-expression@npm:^1.0.0": + version: 1.0.7 + resolution: "micromark-factory-mdx-expression@npm:1.0.7" + dependencies: + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-events-to-acorn: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + unist-util-position-from-estree: ^1.0.0 + uvu: ^0.5.0 + vfile-message: ^3.0.0 + checksum: e7893f21576bcb7755d341e45d3ff202ba466fa2278c6f31ae4db4002a28d6d13a4efad331ef46223372ec2010d9bc2ff27e2cd57a4580be6491e59ca21ba59d + languageName: node + linkType: hard + +"micromark-factory-space@npm:^1.0.0": + version: 1.0.0 + resolution: "micromark-factory-space@npm:1.0.0" + dependencies: + micromark-util-character: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: 70d3aafde4e68ef4e509a3b644e9a29e4aada00801279e346577b008cbca06d78051bcd62aa7ea7425856ed73f09abd2b36607803055f726f52607ee7cb706b0 + languageName: node + linkType: hard + +"micromark-factory-title@npm:^1.0.0": + version: 1.0.2 + resolution: "micromark-factory-title@npm:1.0.2" + dependencies: + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + checksum: 9a9cf66babde0bad1e25d6c1087082bfde6dfc319a36cab67c89651cc1a53d0e21cdec83262b5a4c33bff49f0e3c8dc2a7bd464e991d40dbea166a8f9b37e5b2 + languageName: node + linkType: hard + +"micromark-factory-whitespace@npm:^1.0.0": + version: 1.0.0 + resolution: "micromark-factory-whitespace@npm:1.0.0" + dependencies: + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: 0888386e6ea2dd665a5182c570d9b3d0a172d3f11694ca5a2a84e552149c9f1429f5b975ec26e1f0fa4388c55a656c9f359ce5e0603aff6175ba3e255076f20b + languageName: node + linkType: hard + +"micromark-util-character@npm:^1.0.0, micromark-util-character@npm:^1.1.0": + version: 1.1.0 + resolution: "micromark-util-character@npm:1.1.0" + dependencies: + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: 504a4e3321f69bddf3fec9f0c1058239fc23336bda5be31d532b150491eda47965a251b37f8a7a9db0c65933b3aaa49cf88044fb1028be3af7c5ee6212bf8d5f + languageName: node + linkType: hard + +"micromark-util-chunked@npm:^1.0.0": + version: 1.0.0 + resolution: "micromark-util-chunked@npm:1.0.0" + dependencies: + micromark-util-symbol: ^1.0.0 + checksum: c1efd56e8c4217bcf1c6f1a9fb9912b4a2a5503b00d031da902be922fb3fee60409ac53f11739991291357b2784fb0647ddfc74c94753a068646c0cb0fd71421 + languageName: node + linkType: hard + +"micromark-util-classify-character@npm:^1.0.0": + version: 1.0.0 + resolution: "micromark-util-classify-character@npm:1.0.0" + dependencies: + micromark-util-character: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: 180446e6a1dec653f625ded028f244784e1db8d10ad05c5d70f08af9de393b4a03dc6cf6fa5ed8ccc9c24bbece7837abf3bf66681c0b4adf159364b7d5236dfd + languageName: node + linkType: hard + +"micromark-util-combine-extensions@npm:^1.0.0": + version: 1.0.0 + resolution: "micromark-util-combine-extensions@npm:1.0.0" + dependencies: + micromark-util-chunked: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: 5304a820ef75340e1be69d6ad167055b6ba9a3bafe8171e5945a935752f462415a9dd61eb3490220c055a8a11167209a45bfa73f278338b7d3d61fa1464d3f35 + languageName: node + linkType: hard + +"micromark-util-decode-numeric-character-reference@npm:^1.0.0": + version: 1.0.0 + resolution: "micromark-util-decode-numeric-character-reference@npm:1.0.0" + dependencies: + micromark-util-symbol: ^1.0.0 + checksum: f3ae2bb582a80f1e9d3face026f585c0c472335c064bd850bde152376f0394cb2831746749b6be6e0160f7d73626f67d10716026c04c87f402c0dd45a1a28633 + languageName: node + linkType: hard + +"micromark-util-decode-string@npm:^1.0.0": + version: 1.0.2 + resolution: "micromark-util-decode-string@npm:1.0.2" + dependencies: + decode-named-character-reference: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-decode-numeric-character-reference: ^1.0.0 + micromark-util-symbol: ^1.0.0 + checksum: 2dbb41c9691cc71505d39706405139fb7d6699429d577a524c7c248ac0cfd09d3dd212ad8e91c143a00b2896f26f81136edc67c5bda32d20446f0834d261b17a + languageName: node + linkType: hard + +"micromark-util-encode@npm:^1.0.0": + version: 1.0.1 + resolution: "micromark-util-encode@npm:1.0.1" + checksum: 9290583abfdc79ea3e7eb92c012c47a0e14327888f8aaa6f57ff79b3058d8e7743716b9d91abca3646f15ab3d78fdad9779fdb4ccf13349cd53309dfc845253a + languageName: node + linkType: hard + +"micromark-util-events-to-acorn@npm:^1.0.0": + version: 1.2.1 + resolution: "micromark-util-events-to-acorn@npm:1.2.1" + dependencies: + "@types/acorn": ^4.0.0 + "@types/estree": ^1.0.0 + estree-util-visit: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + vfile-location: ^4.0.0 + vfile-message: ^3.0.0 + checksum: baf1cad66d860980cf20963f641c48c434e5be5802beabefdda21be136ae037845dd236b5e9ce5cf9409bf1b9ba8b4131a396d3a5bfa12098dae13e4a9724f2b + languageName: node + linkType: hard + +"micromark-util-html-tag-name@npm:^1.0.0": + version: 1.1.0 + resolution: "micromark-util-html-tag-name@npm:1.1.0" + checksum: a9b783cec89ec813648d59799464c1950fe281ae797b2a965f98ad0167d7fa1a247718eff023b4c015f47211a172f9446b8e6b98aad50e3cd44a3337317dad2c + languageName: node + linkType: hard + +"micromark-util-normalize-identifier@npm:^1.0.0": + version: 1.0.0 + resolution: "micromark-util-normalize-identifier@npm:1.0.0" + dependencies: + micromark-util-symbol: ^1.0.0 + checksum: d7c09d5e8318fb72f194af72664bd84a48a2928e3550b2b21c8fbc0ec22524f2a72e0f6663d2b95dc189a6957d3d7759b60716e888909710767cd557be821f8b + languageName: node + linkType: hard + +"micromark-util-resolve-all@npm:^1.0.0": + version: 1.0.0 + resolution: "micromark-util-resolve-all@npm:1.0.0" + dependencies: + micromark-util-types: ^1.0.0 + checksum: 409667f2bd126ef8acce009270d2aecaaa5584c5807672bc657b09e50aa91bd2e552cf41e5be1e6469244a83349cbb71daf6059b746b1c44e3f35446fef63e50 + languageName: node + linkType: hard + +"micromark-util-sanitize-uri@npm:^1.0.0, micromark-util-sanitize-uri@npm:^1.1.0": + version: 1.1.0 + resolution: "micromark-util-sanitize-uri@npm:1.1.0" + dependencies: + micromark-util-character: ^1.0.0 + micromark-util-encode: ^1.0.0 + micromark-util-symbol: ^1.0.0 + checksum: fe6093faa0adeb8fad606184d927ce37f207dcc2ec7256438e7f273c8829686245dd6161b597913ef25a3c4fb61863d3612a40cb04cf15f83ba1b4087099996b + languageName: node + linkType: hard + +"micromark-util-subtokenize@npm:^1.0.0": + version: 1.0.2 + resolution: "micromark-util-subtokenize@npm:1.0.2" + dependencies: + micromark-util-chunked: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + checksum: c32ee58a7e1384ab1161a9ee02fbb04ad7b6e96d0b8c93dba9803c329a53d07f22ab394c7a96b2e30d6b8fbe3585b85817dba07277b1317111fc234e166bd2d1 + languageName: node + linkType: hard + +"micromark-util-symbol@npm:^1.0.0, micromark-util-symbol@npm:^1.0.1": + version: 1.0.1 + resolution: "micromark-util-symbol@npm:1.0.1" + checksum: c6a3023b3a7432c15864b5e33a1bcb5042ac7aa097f2f452e587bef45433d42d39e0a5cce12fbea91e0671098ba0c3f62a2b30ce1cde66ecbb5e8336acf4391d + languageName: node + linkType: hard + +"micromark-util-types@npm:^1.0.0, micromark-util-types@npm:^1.0.1": + version: 1.0.2 + resolution: "micromark-util-types@npm:1.0.2" + checksum: 08dc901b7c06ee3dfeb54befca05cbdab9525c1cf1c1080967c3878c9e72cb9856c7e8ff6112816e18ead36ce6f99d55aaa91560768f2f6417b415dcba1244df + languageName: node + linkType: hard + +"micromark@npm:^3.0.0": + version: 3.1.0 + resolution: "micromark@npm:3.1.0" + dependencies: + "@types/debug": ^4.0.0 + debug: ^4.0.0 + decode-named-character-reference: ^1.0.0 + micromark-core-commonmark: ^1.0.1 + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-chunked: ^1.0.0 + micromark-util-combine-extensions: ^1.0.0 + micromark-util-decode-numeric-character-reference: ^1.0.0 + micromark-util-encode: ^1.0.0 + micromark-util-normalize-identifier: ^1.0.0 + micromark-util-resolve-all: ^1.0.0 + micromark-util-sanitize-uri: ^1.0.0 + micromark-util-subtokenize: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.1 + uvu: ^0.5.0 + checksum: 5fe5bc3bf92e2ddd37b5f0034080fc3a4d4b3c1130dd5e435bb96ec75e9453091272852e71a4d74906a8fcf992d6f79d794607657c534bda49941e9950a92e28 + languageName: node + linkType: hard + "micromatch@npm:^4.0.2, micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": version: 4.0.5 resolution: "micromatch@npm:4.0.5" @@ -7351,7 +8104,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -7376,21 +8129,28 @@ __metadata: languageName: node linkType: hard -"mimic-response@npm:^1.0.0, mimic-response@npm:^1.0.1": - version: 1.0.1 - resolution: "mimic-response@npm:1.0.1" - checksum: 034c78753b0e622bc03c983663b1cdf66d03861050e0c8606563d149bc2b02d63f62ce4d32be4ab50d0553ae0ffe647fc34d1f5281184c6e1e8cf4d85e8d9823 +"mimic-response@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-response@npm:3.1.0" + checksum: 25739fee32c17f433626bf19f016df9036b75b3d84a3046c7d156e72ec963dd29d7fc8a302f55a3d6c5a4ff24259676b15d915aad6480815a969ff2ec0836867 languageName: node linkType: hard -"mini-css-extract-plugin@npm:^2.6.1": - version: 2.7.2 - resolution: "mini-css-extract-plugin@npm:2.7.2" +"mimic-response@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-response@npm:4.0.0" + checksum: 33b804cc961efe206efdb1fca6a22540decdcfce6c14eb5c0c50e5ae9022267ab22ce8f5568b1f7247ba67500fe20d523d81e0e9f009b321ccd9d472e78d1850 + languageName: node + linkType: hard + +"mini-css-extract-plugin@npm:^2.7.3": + version: 2.7.5 + resolution: "mini-css-extract-plugin@npm:2.7.5" dependencies: schema-utils: ^4.0.0 peerDependencies: webpack: ^5.0.0 - checksum: cd65611d6dc452f230c6ebba8a47bc5f5146b813b13b0b402c6f4a69f6451242eeea781152bebd31cad8ca7c7e95dac91e7e464087f18fb65b2d1097b58cf4ae + checksum: afc37cdfb765e8826a1babbab3cd8a99ffc4eaeabb6c013a6b3c80801e44ebc37d930b98c6f66168bb8cd545fcb2e8fc2630d72b4501a1bb8add1547c2534a53 languageName: node linkType: hard @@ -7401,15 +8161,6 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:3.0.5": - version: 3.0.5 - resolution: "minimatch@npm:3.0.5" - dependencies: - brace-expansion: ^1.1.7 - checksum: a3b84b426eafca947741b864502cee02860c4e7b145de11ad98775cfcf3066fef422583bc0ffce0952ddf4750c1ccf4220b1556430d4ce10139f66247d87d69e - languageName: node - linkType: hard - "minimatch@npm:3.1.2, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -7428,10 +8179,10 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.2.0, minimist@npm:^1.2.5": - version: 1.2.7 - resolution: "minimist@npm:1.2.7" - checksum: 7346574a1038ca23c32e02252f603801f09384dd1d78b69a943a4e8c2c28730b80e96193882d3d3b22a063445f460e48316b29b8a25addca2d7e5e8f75478bec +"minimist@npm:^1.2.0, minimist@npm:^1.2.7": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 languageName: node linkType: hard @@ -7523,6 +8274,13 @@ __metadata: languageName: node linkType: hard +"mri@npm:^1.1.0": + version: 1.2.0 + resolution: "mri@npm:1.2.0" + checksum: 83f515abbcff60150873e424894a2f65d68037e5a7fcde8a9e2b285ee9c13ac581b63cfc1e6826c4732de3aeb84902f7c1e16b7aff46cd3f897a0f757a894e85 + languageName: node + linkType: hard + "mrmime@npm:^1.0.0": version: 1.0.1 resolution: "mrmime@npm:1.0.1" @@ -7563,12 +8321,12 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.3.4": - version: 3.3.4 - resolution: "nanoid@npm:3.3.4" +"nanoid@npm:^3.3.6": + version: 3.3.6 + resolution: "nanoid@npm:3.3.6" bin: nanoid: bin/nanoid.cjs - checksum: 2fddd6dee994b7676f008d3ffa4ab16035a754f4bb586c61df5a22cf8c8c94017aadd360368f47d653829e0569a92b129979152ff97af23a558331e47e37cd9c + checksum: 7d0eda657002738aa5206107bd0580aead6c95c460ef1bdd0b1a87a9c7ae6277ac2e9b945306aaa5b32c6dcb7feaf462d0f552e7f8b5718abfc6ead5c94a71b3 languageName: node linkType: hard @@ -7646,10 +8404,10 @@ __metadata: languageName: node linkType: hard -"node-releases@npm:^2.0.6": - version: 2.0.6 - resolution: "node-releases@npm:2.0.6" - checksum: e86a926dc9fbb3b41b4c4a89d998afdf140e20a4e8dbe6c0a807f7b2948b42ea97d7fd3ad4868041487b6e9ee98409829c6e4d84a734a4215dff060a7fbeb4bf +"node-releases@npm:^2.0.8": + version: 2.0.10 + resolution: "node-releases@npm:2.0.10" + checksum: d784ecde25696a15d449c4433077f5cce620ed30a1656c4abf31282bfc691a70d9618bae6868d247a67914d1be5cc4fde22f65a05f4398cdfb92e0fc83cadfbc languageName: node linkType: hard @@ -7678,13 +8436,6 @@ __metadata: languageName: node linkType: hard -"normalize-url@npm:^4.1.0": - version: 4.5.1 - resolution: "normalize-url@npm:4.5.1" - checksum: 9a9dee01df02ad23e171171893e56e22d752f7cff86fb96aafeae074819b572ea655b60f8302e2d85dbb834dc885c972cc1c573892fea24df46b2765065dd05a - languageName: node - linkType: hard - "normalize-url@npm:^6.0.1": version: 6.1.0 resolution: "normalize-url@npm:6.1.0" @@ -7692,6 +8443,13 @@ __metadata: languageName: node linkType: hard +"normalize-url@npm:^8.0.0": + version: 8.0.0 + resolution: "normalize-url@npm:8.0.0" + checksum: 24c20b75ebfd526d8453084692720b49d111c63c0911f1b7447427829597841eef5a8ba3f6bb93d6654007b991c1f5cd85da2c907800e439e2e2ec6c2abd0fc0 + languageName: node + linkType: hard + "npm-run-path@npm:^4.0.1": version: 4.0.1 resolution: "npm-run-path@npm:4.0.1" @@ -7785,7 +8543,7 @@ __metadata: languageName: node linkType: hard -"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": +"once@npm:^1.3.0": version: 1.4.0 resolution: "once@npm:1.4.0" dependencies: @@ -7823,10 +8581,10 @@ __metadata: languageName: node linkType: hard -"p-cancelable@npm:^1.0.0": - version: 1.1.0 - resolution: "p-cancelable@npm:1.1.0" - checksum: 2db3814fef6d9025787f30afaee4496a8857a28be3c5706432cbad76c688a6db1874308f48e364a42f5317f5e41e8e7b4f2ff5c8ff2256dbb6264bc361704ece +"p-cancelable@npm:^3.0.0": + version: 3.0.0 + resolution: "p-cancelable@npm:3.0.0" + checksum: 2b5ae34218f9c2cf7a7c18e5d9a726ef9b165ef07e6c959f6738371509e747334b5f78f3bcdeb03d8a12dcb978faf641fd87eb21486ed7d36fb823b8ddef3219 languageName: node linkType: hard @@ -7901,15 +8659,15 @@ __metadata: languageName: node linkType: hard -"package-json@npm:^6.3.0": - version: 6.5.0 - resolution: "package-json@npm:6.5.0" +"package-json@npm:^8.1.0": + version: 8.1.0 + resolution: "package-json@npm:8.1.0" dependencies: - got: ^9.6.0 - registry-auth-token: ^4.0.0 - registry-url: ^5.0.0 - semver: ^6.2.0 - checksum: cc9f890d3667d7610e6184decf543278b87f657d1ace0deb4a9c9155feca738ef88f660c82200763d3348010f4e42e9c7adc91e96ab0f86a770955995b5351e2 + got: ^12.1.0 + registry-auth-token: ^5.0.1 + registry-url: ^6.0.0 + semver: ^7.3.7 + checksum: 28c16ef0296915533c3dec9ce579fd6ea8ac62df0cd0b4b44e65a45506fda781cf1d1fd4a083fe90af3e041a9514b6be30562d85689da450986aff43dc856cc7 languageName: node linkType: hard @@ -7932,17 +8690,19 @@ __metadata: languageName: node linkType: hard -"parse-entities@npm:^2.0.0": - version: 2.0.0 - resolution: "parse-entities@npm:2.0.0" +"parse-entities@npm:^4.0.0": + version: 4.0.1 + resolution: "parse-entities@npm:4.0.1" dependencies: - character-entities: ^1.0.0 - character-entities-legacy: ^1.0.0 - character-reference-invalid: ^1.0.0 - is-alphanumerical: ^1.0.0 - is-decimal: ^1.0.0 - is-hexadecimal: ^1.0.0 - checksum: 7addfd3e7d747521afac33c8121a5f23043c6973809756920d37e806639b4898385d386fcf4b3c8e2ecf1bc28aac5ae97df0b112d5042034efbe80f44081ebce + "@types/unist": ^2.0.0 + character-entities: ^2.0.0 + character-entities-legacy: ^3.0.0 + character-reference-invalid: ^2.0.0 + decode-named-character-reference: ^1.0.0 + is-alphanumerical: ^2.0.0 + is-decimal: ^2.0.0 + is-hexadecimal: ^2.0.0 + checksum: 32a6ff5b9acb9d2c4d71537308521fd265e685b9215691df73feedd9edfe041bb6da9f89bd0c35c4a2bc7d58e3e76e399bb6078c2fd7d2a343ff1dd46edbf1bd languageName: node linkType: hard @@ -7975,13 +8735,6 @@ __metadata: languageName: node linkType: hard -"parse5@npm:^6.0.0": - version: 6.0.1 - resolution: "parse5@npm:6.0.1" - checksum: 7d569a176c5460897f7c8f3377eff640d54132b9be51ae8a8fa4979af940830b2b0c296ce75e5bd8f4041520aadde13170dbdec44889975f906098ea0002f4bd - languageName: node - linkType: hard - "parse5@npm:^7.0.0": version: 7.1.2 resolution: "parse5@npm:7.1.2" @@ -8080,6 +8833,17 @@ __metadata: languageName: node linkType: hard +"periscopic@npm:^3.0.0": + version: 3.1.0 + resolution: "periscopic@npm:3.1.0" + dependencies: + "@types/estree": ^1.0.0 + estree-walker: ^3.0.0 + is-reference: ^3.0.0 + checksum: 2153244352e58a0d76e7e8d9263e66fe74509495f809af388da20045fb30aa3e93f2f94468dc0b9166ecf206fcfc0d73d2c7641c6fbedc07b1de858b710142cb + languageName: node + linkType: hard + "picocolors@npm:^1.0.0": version: 1.0.0 resolution: "picocolors@npm:1.0.0" @@ -8124,17 +8888,17 @@ __metadata: languageName: node linkType: hard -"postcss-colormin@npm:^5.3.0": - version: 5.3.0 - resolution: "postcss-colormin@npm:5.3.0" +"postcss-colormin@npm:^5.3.1": + version: 5.3.1 + resolution: "postcss-colormin@npm:5.3.1" dependencies: - browserslist: ^4.16.6 + browserslist: ^4.21.4 caniuse-api: ^3.0.0 colord: ^2.9.1 postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.2.15 - checksum: 3d3e3cc25071407fb73d68541ca1039ebd154fceb649041461a8a3cab0400cc89b42dbb34a4eeaf573be4ba2370ce23af5e01aff5e03a8d72275f40605577212 + checksum: e5778baab30877cd1f51e7dc9d2242a162aeca6360a52956acd7f668c5bc235c2ccb7e4df0370a804d65ebe00c5642366f061db53aa823f9ed99972cebd16024 languageName: node linkType: hard @@ -8197,17 +8961,25 @@ __metadata: languageName: node linkType: hard -"postcss-loader@npm:^7.0.0": - version: 7.0.2 - resolution: "postcss-loader@npm:7.0.2" +"postcss-loader@npm:^7.0.2": + version: 7.2.4 + resolution: "postcss-loader@npm:7.2.4" dependencies: - cosmiconfig: ^7.0.0 - klona: ^2.0.5 + cosmiconfig: ^8.1.3 + cosmiconfig-typescript-loader: ^4.3.0 + klona: ^2.0.6 semver: ^7.3.8 peerDependencies: postcss: ^7.0.0 || ^8.0.1 + ts-node: ">=10" + typescript: ">=4" webpack: ^5.0.0 - checksum: 2d251537d482eb751f812c96c8b515f46d7c9905cad7afab33f0f34872670619b7440cefc9e2babbf89fb11b4708850d522d79fa5ff788227587645e78f16638 + peerDependenciesMeta: + ts-node: + optional: true + typescript: + optional: true + checksum: d75de64f6629a2d76b1c1e9ad5022cae9b589472d8d091e21105d93a0f09a4c80f08fe10323d41ddf2fbda157910a03df3c538ce8fccf974b179d0762b408fa3 languageName: node linkType: hard @@ -8235,9 +9007,9 @@ __metadata: languageName: node linkType: hard -"postcss-merge-rules@npm:^5.1.3": - version: 5.1.3 - resolution: "postcss-merge-rules@npm:5.1.3" +"postcss-merge-rules@npm:^5.1.4": + version: 5.1.4 + resolution: "postcss-merge-rules@npm:5.1.4" dependencies: browserslist: ^4.21.4 caniuse-api: ^3.0.0 @@ -8245,7 +9017,7 @@ __metadata: postcss-selector-parser: ^6.0.5 peerDependencies: postcss: ^8.2.15 - checksum: 0ddaddff98cd7f3fac2b0e716c641f529a61a8668be6d5b48d60770d0a1246126088e1d606f309b9748ff598a3794f3fd6dd5b8c3d79112f84744cab5375d4d9 + checksum: 8ab6a569babe6cb412d6612adee74f053cea7edb91fa013398515ab36754b1fec830d68782ed8cdfb44cffdc6b78c79eab157bff650f428aa4460d3f3857447e languageName: node linkType: hard @@ -8463,15 +9235,15 @@ __metadata: languageName: node linkType: hard -"postcss-reduce-initial@npm:^5.1.1": - version: 5.1.1 - resolution: "postcss-reduce-initial@npm:5.1.1" +"postcss-reduce-initial@npm:^5.1.2": + version: 5.1.2 + resolution: "postcss-reduce-initial@npm:5.1.2" dependencies: browserslist: ^4.21.4 caniuse-api: ^3.0.0 peerDependencies: postcss: ^8.2.15 - checksum: 1b704aba8c38103cbb5a75c6201dbf58ec2f3a978013c7f7e8957fd3bf3282f992050dec5a01bc050d031bad836e187dd6622b922ca78ab92bcd0afd21fb0b98 + checksum: 55db697f85231a81f1969d54c894e4773912d9ddb914f9b03d2e73abc4030f2e3bef4d7465756d0c1acfcc2c2d69974bfb50a972ab27546a7d68b5a4fc90282b languageName: node linkType: hard @@ -8496,14 +9268,14 @@ __metadata: languageName: node linkType: hard -"postcss-sort-media-queries@npm:^4.2.1": - version: 4.3.0 - resolution: "postcss-sort-media-queries@npm:4.3.0" +"postcss-sort-media-queries@npm:^4.3.0": + version: 4.4.1 + resolution: "postcss-sort-media-queries@npm:4.4.1" dependencies: sort-css-media-queries: 2.1.0 peerDependencies: postcss: ^8.4.16 - checksum: 7bf9fcde74781f40ca49484e84dcd26e491632b296ba77b3f4b7ea7778f816ac48f87d2c6ab0a629edf636440a4240615b69a4ece1dd7597f6a4e0678794eb0e + checksum: 70b42e479bb1d15d8628678eefefd547d309e33e64262fe437630fe62d8e4b3adcae7f2b48ef8da9d3173576d4af109a9ffa9514573db1281deef324f5ea166f languageName: node linkType: hard @@ -8546,30 +9318,23 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.3.11, postcss@npm:^8.4.14, postcss@npm:^8.4.17, postcss@npm:^8.4.18": - version: 8.4.20 - resolution: "postcss@npm:8.4.20" +"postcss@npm:^8.4.17, postcss@npm:^8.4.19, postcss@npm:^8.4.21": + version: 8.4.23 + resolution: "postcss@npm:8.4.23" dependencies: - nanoid: ^3.3.4 + nanoid: ^3.3.6 picocolors: ^1.0.0 source-map-js: ^1.0.2 - checksum: 1a5609ea1c1b204f9c2974a0019ae9eef2d99bf645c2c9aac675166c4cb1005be7b5e2ba196160bc771f5d9ac896ed883f236f888c891e835e59d28fff6651aa - languageName: node - linkType: hard - -"prepend-http@npm:^2.0.0": - version: 2.0.0 - resolution: "prepend-http@npm:2.0.0" - checksum: 7694a9525405447662c1ffd352fcb41b6410c705b739b6f4e3a3e21cf5fdede8377890088e8934436b8b17ba55365a615f153960f30877bf0d0392f9e93503ea + checksum: 8bb9d1b2ea6e694f8987d4f18c94617971b2b8d141602725fedcc2222fdc413b776a6e1b969a25d627d7b2681ca5aabb56f59e727ef94072e1b6ac8412105a2f languageName: node linkType: hard "prettier@npm:^2.6.2": - version: 2.8.7 - resolution: "prettier@npm:2.8.7" + version: 2.8.8 + resolution: "prettier@npm:2.8.8" bin: prettier: bin-prettier.js - checksum: fdc8f2616f099f5f0d685907f4449a70595a0fc1d081a88919604375989e0d5e9168d6121d8cc6861f21990b31665828e00472544d785d5940ea08a17660c3a6 + checksum: b49e409431bf129dd89238d64299ba80717b57ff5a6d1c1a8b1a28b590d998a34e083fa13573bc732bb8d2305becb4c9a4407f8486c81fa7d55100eb08263cf8 languageName: node linkType: hard @@ -8599,7 +9364,7 @@ __metadata: languageName: node linkType: hard -"prismjs@npm:^1.28.0": +"prismjs@npm:^1.29.0": version: 1.29.0 resolution: "prismjs@npm:1.29.0" checksum: 007a8869d4456ff8049dc59404e32d5666a07d99c3b0e30a18bd3b7676dfa07d1daae9d0f407f20983865fd8da56de91d09cb08e6aa61f5bc420a27c0beeaf93 @@ -8660,12 +9425,17 @@ __metadata: languageName: node linkType: hard -"property-information@npm:^5.0.0, property-information@npm:^5.3.0": - version: 5.6.0 - resolution: "property-information@npm:5.6.0" - dependencies: - xtend: ^4.0.0 - checksum: fcf87c6542e59a8bbe31ca0b3255a4a63ac1059b01b04469680288998bcfa97f341ca989566adbb63975f4d85339030b82320c324a511532d390910d1c583893 +"property-information@npm:^6.0.0": + version: 6.2.0 + resolution: "property-information@npm:6.2.0" + checksum: 23afce07ba821cbe7d926e63cdd680991961c82be4bbb6c0b17c47f48894359c1be6e51cd74485fc10a9d3fd361b475388e1e39311ed2b53127718f72aab1955 + languageName: node + linkType: hard + +"proto-list@npm:~1.2.1": + version: 1.2.4 + resolution: "proto-list@npm:1.2.4" + checksum: 4d4826e1713cbfa0f15124ab0ae494c91b597a3c458670c9714c36e8baddf5a6aad22842776f2f5b137f259c8533e741771445eb8df82e861eea37a6eaba03f7 languageName: node linkType: hard @@ -8679,16 +9449,6 @@ __metadata: languageName: node linkType: hard -"pump@npm:^3.0.0": - version: 3.0.0 - resolution: "pump@npm:3.0.0" - dependencies: - end-of-stream: ^1.1.0 - once: ^1.3.1 - checksum: e42e9229fba14732593a718b04cb5e1cfef8254544870997e0ecd9732b189a48e1256e4e5478148ecb47c8511dca2b09eae56b4d0aad8009e6fac8072923cfc9 - languageName: node - linkType: hard - "punycode@npm:^1.3.2": version: 1.4.1 resolution: "punycode@npm:1.4.1" @@ -8703,12 +9463,12 @@ __metadata: languageName: node linkType: hard -"pupa@npm:^2.1.1": - version: 2.1.1 - resolution: "pupa@npm:2.1.1" +"pupa@npm:^3.1.0": + version: 3.1.0 + resolution: "pupa@npm:3.1.0" dependencies: - escape-goat: ^2.0.0 - checksum: 49529e50372ffdb0cccf0efa0f3b3cb0a2c77805d0d9cc2725bd2a0f6bb414631e61c93a38561b26be1259550b7bb6c2cb92315aa09c8bf93f3bdcb49f2b2fb7 + escape-goat: ^4.0.0 + checksum: 0e4f4ab6bbdce600fa6d23b1833f1af57b2641246ff4cbe10f9d66e4e5479b0de2864a88d5bd629eef59524eda3c6680726acd7f3f873d9ed46b7f095d0bb5f6 languageName: node linkType: hard @@ -8744,6 +9504,13 @@ __metadata: languageName: node linkType: hard +"quick-lru@npm:^5.1.1": + version: 5.1.1 + resolution: "quick-lru@npm:5.1.1" + checksum: a516faa25574be7947969883e6068dbe4aa19e8ef8e8e0fd96cddd6d36485e9106d85c0041a27153286b0770b381328f4072aa40d3b18a19f5f7d2b78b94b5ed + languageName: node + linkType: hard + "randombytes@npm:^2.1.0": version: 2.1.0 resolution: "randombytes@npm:2.1.0" @@ -8779,7 +9546,7 @@ __metadata: languageName: node linkType: hard -"rc@npm:1.2.8, rc@npm:^1.2.8": +"rc@npm:1.2.8": version: 1.2.8 resolution: "rc@npm:1.2.8" dependencies: @@ -8933,7 +9700,7 @@ __metadata: languageName: node linkType: hard -"react-router-dom@npm:^5.3.3": +"react-router-dom@npm:^5.3.4": version: 5.3.4 resolution: "react-router-dom@npm:5.3.4" dependencies: @@ -8950,7 +9717,7 @@ __metadata: languageName: node linkType: hard -"react-router@npm:5.3.4, react-router@npm:^5.3.3": +"react-router@npm:5.3.4, react-router@npm:^5.3.4": version: 5.3.4 resolution: "react-router@npm:5.3.4" dependencies: @@ -9098,21 +9865,21 @@ __metadata: languageName: node linkType: hard -"registry-auth-token@npm:^4.0.0": - version: 4.2.2 - resolution: "registry-auth-token@npm:4.2.2" +"registry-auth-token@npm:^5.0.1": + version: 5.0.2 + resolution: "registry-auth-token@npm:5.0.2" dependencies: - rc: 1.2.8 - checksum: c5030198546ecfdcbcb0722cbc3e260c4f5f174d8d07bdfedd4620e79bfdf17a2db735aa230d600bd388fce6edd26c0a9ed2eb7e9b4641ec15213a28a806688b + "@pnpm/npm-conf": ^2.1.0 + checksum: 0d7683b71ee418993e7872b389024b13645c4295eb7bb850d10728eaf46065db24ea4d47dc6cbb71a60d1aa4bef077b0d8b7363c9ac9d355fdba47bebdfb01dd languageName: node linkType: hard -"registry-url@npm:^5.0.0": - version: 5.1.0 - resolution: "registry-url@npm:5.1.0" +"registry-url@npm:^6.0.0": + version: 6.0.1 + resolution: "registry-url@npm:6.0.1" dependencies: - rc: ^1.2.8 - checksum: bcea86c84a0dbb66467b53187fadebfea79017cddfb4a45cf27530d7275e49082fe9f44301976eb0164c438e395684bcf3dae4819b36ff9d1640d8cc60c73df9 + rc: 1.2.8 + checksum: 33712aa1b489aab7aba2191c1cdadfdd71f5bf166d4792d81744a6be332c160bd7d9273af8269d8a01284b9562f14a5b31b7abcf7ad9306c44887ecff51c89ab languageName: node linkType: hard @@ -9141,6 +9908,29 @@ __metadata: languageName: node linkType: hard +"remark-comment@npm:^1.0.0": + version: 1.0.0 + resolution: "remark-comment@npm:1.0.0" + dependencies: + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.1.0 + micromark-util-symbol: ^1.0.1 + checksum: bb455a7a2ec88fe6927a5c585c2c61de9d2a178cec4f8ec9289a6549e07d835a026a0a8e29a27b125eedca04b3174cebd61d0cc30991b7d3d04b3a5bfc37fcd3 + languageName: node + linkType: hard + +"remark-directive@npm:^2.0.1": + version: 2.0.1 + resolution: "remark-directive@npm:2.0.1" + dependencies: + "@types/mdast": ^3.0.0 + mdast-util-directive: ^2.0.0 + micromark-extension-directive: ^2.0.0 + unified: ^10.0.0 + checksum: 61539926813654011431cc34e3d6c5ba702a6b610a0e8210b4748828809e86614bbb3e2de5fdee59eed24501f95c41665b175b852cc26544079789db10ac6cd7 + languageName: node + linkType: hard + "remark-emoji@npm:^2.2.0": version: 2.2.0 resolution: "remark-emoji@npm:2.2.0" @@ -9152,59 +9942,48 @@ __metadata: languageName: node linkType: hard -"remark-footnotes@npm:2.0.0": - version: 2.0.0 - resolution: "remark-footnotes@npm:2.0.0" - checksum: f2f87ffd6fe25892373c7164d6584a7cb03ab0ea4f186af493a73df519e24b72998a556e7f16cb996f18426cdb80556b95ff252769e252cf3ccba0fd2ca20621 +"remark-gfm@npm:^3.0.1": + version: 3.0.1 + resolution: "remark-gfm@npm:3.0.1" + dependencies: + "@types/mdast": ^3.0.0 + mdast-util-gfm: ^2.0.0 + micromark-extension-gfm: ^2.0.0 + unified: ^10.0.0 + checksum: 02254f74d67b3419c2c9cf62d799ec35f6c6cd74db25c001361751991552a7ce86049a972107bff8122d85d15ae4a8d1a0618f3bc01a7df837af021ae9b2a04e languageName: node linkType: hard -"remark-mdx@npm:1.6.22": - version: 1.6.22 - resolution: "remark-mdx@npm:1.6.22" +"remark-mdx@npm:^2.0.0": + version: 2.3.0 + resolution: "remark-mdx@npm:2.3.0" dependencies: - "@babel/core": 7.12.9 - "@babel/helper-plugin-utils": 7.10.4 - "@babel/plugin-proposal-object-rest-spread": 7.12.1 - "@babel/plugin-syntax-jsx": 7.12.1 - "@mdx-js/util": 1.6.22 - is-alphabetical: 1.0.4 - remark-parse: 8.0.3 - unified: 9.2.0 - checksum: 45e62f8a821c37261f94448d54f295de1c5c393f762ff96cd4d4b730715037fafeb6c89ef94adf6a10a09edfa72104afe1431b93b5ae5e40ce2a7677e133c3d9 + mdast-util-mdx: ^2.0.0 + micromark-extension-mdxjs: ^1.0.0 + checksum: 98486986c5b6f6a8321eb2f3b13c70fcd5644821428c77b7bfeb5ee5d4605b9761b322b2f6b531e83883cd2d5bc7bc4623427149aee00e1eba012f538b3d5627 languageName: node linkType: hard -"remark-parse@npm:8.0.3": - version: 8.0.3 - resolution: "remark-parse@npm:8.0.3" +"remark-parse@npm:^10.0.0": + version: 10.0.1 + resolution: "remark-parse@npm:10.0.1" dependencies: - ccount: ^1.0.0 - collapse-white-space: ^1.0.2 - is-alphabetical: ^1.0.0 - is-decimal: ^1.0.0 - is-whitespace-character: ^1.0.0 - is-word-character: ^1.0.0 - markdown-escapes: ^1.0.0 - parse-entities: ^2.0.0 - repeat-string: ^1.5.4 - state-toggle: ^1.0.0 - trim: 0.0.1 - trim-trailing-lines: ^1.0.0 - unherit: ^1.0.4 - unist-util-remove-position: ^2.0.0 - vfile-location: ^3.0.0 - xtend: ^4.0.1 - checksum: 2dfea250e7606ddfc9e223b9f41e0b115c5c701be4bd35181beaadd46ee59816bc00aadc6085a420f8df00b991ada73b590ea7fd34ace14557de4a0a41805be5 + "@types/mdast": ^3.0.0 + mdast-util-from-markdown: ^1.0.0 + unified: ^10.0.0 + checksum: 505088e564ab53ff054433368adbb7b551f69240c7d9768975529837a86f1d0f085e72d6211929c5c42db315273df4afc94f3d3a8662ffdb69468534c6643d29 languageName: node linkType: hard -"remark-squeeze-paragraphs@npm:4.0.0": - version: 4.0.0 - resolution: "remark-squeeze-paragraphs@npm:4.0.0" +"remark-rehype@npm:^10.0.0": + version: 10.1.0 + resolution: "remark-rehype@npm:10.1.0" dependencies: - mdast-squeeze-paragraphs: ^4.0.0 - checksum: 2071eb74d0ecfefb152c4932690a9fd950c3f9f798a676f1378a16db051da68fb20bf288688cc153ba5019dded35408ff45a31dfe9686eaa7a9f1df9edbb6c81 + "@types/hast": ^2.0.0 + "@types/mdast": ^3.0.0 + mdast-util-to-hast: ^12.1.0 + unified: ^10.0.0 + checksum: b9ac8acff3383b204dfdc2599d0bdf86e6ca7e837033209584af2e6aaa6a9013e519a379afa3201299798cab7298c8f4b388de118c312c67234c133318aec084 languageName: node linkType: hard @@ -9221,34 +10000,6 @@ __metadata: languageName: node linkType: hard -"repeat-string@npm:^1.5.4": - version: 1.6.1 - resolution: "repeat-string@npm:1.6.1" - checksum: 1b809fc6db97decdc68f5b12c4d1a671c8e3f65ec4a40c238bc5200e44e85bcc52a54f78268ab9c29fcf5fe4f1343e805420056d1f30fa9a9ee4c2d93e3cc6c0 - languageName: node - linkType: hard - -"replace@npm:^1.2.2": - version: 1.2.2 - resolution: "replace@npm:1.2.2" - dependencies: - chalk: 2.4.2 - minimatch: 3.0.5 - yargs: ^15.3.1 - bin: - replace: bin/replace.js - search: bin/search.js - checksum: 1d69f43937a5fdf9dea278e78d6f3b51c1889ba5135bd201918bbda6330684adf8276e8e90e1c021034420dd4df239e51c23ca40752cb9bc6180c153d6d46a37 - languageName: node - linkType: hard - -"require-directory@npm:^2.1.1": - version: 2.1.1 - resolution: "require-directory@npm:2.1.1" - checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 - languageName: node - linkType: hard - "require-from-string@npm:^2.0.2": version: 2.0.2 resolution: "require-from-string@npm:2.0.2" @@ -9263,13 +10014,6 @@ __metadata: languageName: node linkType: hard -"require-main-filename@npm:^2.0.0": - version: 2.0.0 - resolution: "require-main-filename@npm:2.0.0" - checksum: e9e294695fea08b076457e9ddff854e81bffbe248ed34c1eec348b7abbd22a0d02e8d75506559e2265e96978f3c4720bd77a6dad84755de8162b357eb6c778c7 - languageName: node - linkType: hard - "requires-port@npm:^1.0.0": version: 1.0.0 resolution: "requires-port@npm:1.0.0" @@ -9277,6 +10021,13 @@ __metadata: languageName: node linkType: hard +"resolve-alpn@npm:^1.2.0": + version: 1.2.1 + resolution: "resolve-alpn@npm:1.2.1" + checksum: f558071fcb2c60b04054c99aebd572a2af97ef64128d59bef7ab73bd50d896a222a056de40ffc545b633d99b304c259ea9d0c06830d5c867c34f0bfa60b8eae0 + languageName: node + linkType: hard + "resolve-from@npm:^4.0.0": version: 4.0.0 resolution: "resolve-from@npm:4.0.0" @@ -9291,7 +10042,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.6, resolve@npm:^1.14.2, resolve@npm:^1.3.2": +"resolve@npm:^1.1.6, resolve@npm:^1.14.2": version: 1.22.1 resolution: "resolve@npm:1.22.1" dependencies: @@ -9304,7 +10055,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.3.2#~builtin": +"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.14.2#~builtin": version: 1.22.1 resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=07638b" dependencies: @@ -9317,12 +10068,12 @@ __metadata: languageName: node linkType: hard -"responselike@npm:^1.0.2": - version: 1.0.2 - resolution: "responselike@npm:1.0.2" +"responselike@npm:^3.0.0": + version: 3.0.0 + resolution: "responselike@npm:3.0.0" dependencies: - lowercase-keys: ^1.0.0 - checksum: 2e9e70f1dcca3da621a80ce71f2f9a9cad12c047145c6ece20df22f0743f051cf7c73505e109814915f23f9e34fb0d358e22827723ee3d56b623533cab8eafcd + lowercase-keys: ^3.0.0 + checksum: e0cc9be30df4f415d6d83cdede3c5c887cd4a73e7cc1708bcaab1d50a28d15acb68460ac5b02bcc55a42f3d493729c8856427dcf6e57e6e128ad05cba4cfb95e languageName: node linkType: hard @@ -9365,17 +10116,17 @@ __metadata: languageName: node linkType: hard -"rtlcss@npm:^3.5.0": - version: 3.5.0 - resolution: "rtlcss@npm:3.5.0" +"rtlcss@npm:^4.0.0": + version: 4.1.0 + resolution: "rtlcss@npm:4.1.0" dependencies: - find-up: ^5.0.0 + escalade: ^3.1.1 picocolors: ^1.0.0 - postcss: ^8.3.11 + postcss: ^8.4.21 strip-json-comments: ^3.1.1 bin: rtlcss: bin/rtlcss.js - checksum: a3763cad2cb58ce1b950de155097c3c294e7aefc8bf328b58d0cc8d5efb88bf800865edc158a78ace6d1f7f99fea6fd66fb4a354d859b172dadd3dab3e0027b3 + checksum: 778b0efb98f0e3a9e9cc2f3a1438887ae8248adf9e7e606361c88e86186cf1eb69d91e9476383b954c40f78bafeb3ce75e32d5fe36059901e07e4e6542ba8b6d languageName: node linkType: hard @@ -9388,12 +10139,21 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:^7.5.4": - version: 7.6.0 - resolution: "rxjs@npm:7.6.0" +"rxjs@npm:^7.8.0": + version: 7.8.1 + resolution: "rxjs@npm:7.8.1" dependencies: tslib: ^2.1.0 - checksum: b3abbbfe1ddfd06fca9314b83cbd13bcddc3320429218136f75c79a4802ac430dd13873364aac1ded54fd457f8c77df332d205a92d8a1c61656565bb718c50af + checksum: de4b53db1063e618ec2eca0f7965d9137cabe98cf6be9272efe6c86b47c17b987383df8574861bcced18ebd590764125a901d5506082be84a8b8e364bf05f119 + languageName: node + linkType: hard + +"sade@npm:^1.7.3": + version: 1.8.1 + resolution: "sade@npm:1.8.1" + dependencies: + mri: ^1.1.0 + checksum: 0756e5b04c51ccdc8221ebffd1548d0ce5a783a44a0fa9017a026659b97d632913e78f7dca59f2496aa996a0be0b0c322afd87ca72ccd909406f49dbffa0f45d languageName: node linkType: hard @@ -9484,25 +10244,14 @@ __metadata: languageName: node linkType: hard -"schema-utils@npm:^2.6.5": - version: 2.7.1 - resolution: "schema-utils@npm:2.7.1" - dependencies: - "@types/json-schema": ^7.0.5 - ajv: ^6.12.4 - ajv-keywords: ^3.5.2 - checksum: 32c62fc9e28edd101e1bd83453a4216eb9bd875cc4d3775e4452b541908fa8f61a7bbac8ffde57484f01d7096279d3ba0337078e85a918ecbeb72872fb09fb2b - languageName: node - linkType: hard - -"schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.0, schema-utils@npm:^3.1.1": - version: 3.1.1 - resolution: "schema-utils@npm:3.1.1" +"schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.1, schema-utils@npm:^3.1.2": + version: 3.1.2 + resolution: "schema-utils@npm:3.1.2" dependencies: "@types/json-schema": ^7.0.8 ajv: ^6.12.5 ajv-keywords: ^3.5.2 - checksum: fb73f3d759d43ba033c877628fe9751620a26879f6301d3dbeeb48cf2a65baec5cdf99da65d1bf3b4ff5444b2e59cbe4f81c2456b5e0d2ba7d7fd4aed5da29ce + checksum: 39683edfe3beff018cdb1ae4fa296fc55cea13a080aa2b4d9351895cd64b22ba4d87e2e548c2a2ac1bc76e60980670adb0f413a58104479f1a0c12e5663cb8ca languageName: node linkType: hard @@ -9544,25 +10293,16 @@ __metadata: languageName: node linkType: hard -"semver-diff@npm:^3.1.1": - version: 3.1.1 - resolution: "semver-diff@npm:3.1.1" +"semver-diff@npm:^4.0.0": + version: 4.0.0 + resolution: "semver-diff@npm:4.0.0" dependencies: - semver: ^6.3.0 - checksum: 8bbe5a5d7add2d5e51b72314a9215cd294d71f41cdc2bf6bd59ee76411f3610b576172896f1d191d0d7294cb9f2f847438d2ee158adacc0c224dca79052812fe + semver: ^7.3.5 + checksum: 4a958d6f76c7e7858268e1e2cf936712542441c9e003e561b574167279eee0a9bd55cc7eae1bfb31d3e7ad06a9fc370e7dd412fcfefec8c0daf1ce5aea623559 languageName: node linkType: hard -"semver@npm:^5.4.1": - version: 5.7.1 - resolution: "semver@npm:5.7.1" - bin: - semver: ./bin/semver - checksum: 57fd0acfd0bac382ee87cd52cd0aaa5af086a7dc8d60379dfe65fea491fb2489b6016400813930ecd61fd0952dae75c115287a1b16c234b1550887117744dfaf - languageName: node - linkType: hard - -"semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.2.0, semver@npm:^6.3.0": +"semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0": version: 6.3.0 resolution: "semver@npm:6.3.0" bin: @@ -9571,7 +10311,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8": +"semver@npm:^7.3.2, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8": version: 7.3.8 resolution: "semver@npm:7.3.8" dependencies: @@ -9603,16 +10343,16 @@ __metadata: languageName: node linkType: hard -"serialize-javascript@npm:^6.0.0": - version: 6.0.0 - resolution: "serialize-javascript@npm:6.0.0" +"serialize-javascript@npm:^6.0.0, serialize-javascript@npm:^6.0.1": + version: 6.0.1 + resolution: "serialize-javascript@npm:6.0.1" dependencies: randombytes: ^2.1.0 - checksum: 56f90b562a1bdc92e55afb3e657c6397c01a902c588c0fe3d4c490efdcc97dcd2a3074ba12df9e94630f33a5ce5b76a74784a7041294628a6f4306e0ec84bf93 + checksum: 3c4f4cb61d0893b988415bdb67243637333f3f574e9e9cc9a006a2ced0b390b0b3b44aef8d51c951272a9002ec50885eefdc0298891bc27eb2fe7510ea87dc4f languageName: node linkType: hard -"serve-handler@npm:^6.1.3": +"serve-handler@npm:^6.1.5": version: 6.1.5 resolution: "serve-handler@npm:6.1.5" dependencies: @@ -9862,13 +10602,6 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.5.0": - version: 0.5.7 - resolution: "source-map@npm:0.5.7" - checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d - languageName: node - linkType: hard - "source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.0": version: 0.6.1 resolution: "source-map@npm:0.6.1" @@ -9876,10 +10609,17 @@ __metadata: languageName: node linkType: hard -"space-separated-tokens@npm:^1.0.0": - version: 1.1.5 - resolution: "space-separated-tokens@npm:1.1.5" - checksum: 8ef68f1cfa8ccad316b7f8d0df0919d0f1f6d32101e8faeee34ea3a923ce8509c1ad562f57388585ee4951e92d27afa211ed0a077d3d5995b5ba9180331be708 +"source-map@npm:^0.7.0": + version: 0.7.4 + resolution: "source-map@npm:0.7.4" + checksum: 01cc5a74b1f0e1d626a58d36ad6898ea820567e87f18dfc9d24a9843a351aaa2ec09b87422589906d6ff1deed29693e176194dc88bcae7c9a852dc74b311dbf5 + languageName: node + linkType: hard + +"space-separated-tokens@npm:^2.0.0": + version: 2.0.2 + resolution: "space-separated-tokens@npm:2.0.2" + checksum: 202e97d7ca1ba0758a0aa4fe226ff98142073bcceeff2da3aad037968878552c3bbce3b3231970025375bbba5aee00c5b8206eda408da837ab2dc9c0f26be990 languageName: node linkType: hard @@ -9933,13 +10673,6 @@ __metadata: languageName: node linkType: hard -"state-toggle@npm:^1.0.0": - version: 1.0.3 - resolution: "state-toggle@npm:1.0.3" - checksum: 17398af928413e8d8b866cf0c81fd1b1348bb7d65d8983126ff6ff2317a80d6ee023484fba0c54d8169f5aa544f125434a650ae3a71eddc935cae307d4692b4f - languageName: node - linkType: hard - "statuses@npm:2.0.1": version: 2.0.1 resolution: "statuses@npm:2.0.1" @@ -9961,7 +10694,7 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.0.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.2, string-width@npm:^4.2.3": +"string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" dependencies: @@ -9972,7 +10705,7 @@ __metadata: languageName: node linkType: hard -"string-width@npm:^5.0.1": +"string-width@npm:^5.0.1, string-width@npm:^5.1.2": version: 5.1.2 resolution: "string-width@npm:5.1.2" dependencies: @@ -10001,6 +10734,16 @@ __metadata: languageName: node linkType: hard +"stringify-entities@npm:^4.0.0": + version: 4.0.3 + resolution: "stringify-entities@npm:4.0.3" + dependencies: + character-entities-html4: ^2.0.0 + character-entities-legacy: ^3.0.0 + checksum: 59e8f523b403bf7d415690e72ae52982decd6ea5426bd8b3f5c66225ddde73e766c0c0d91627df082d0794e30b19dd907ffb5864cef3602e4098d6777d7ca3c2 + languageName: node + linkType: hard + "stringify-object@npm:^3.3.0": version: 3.3.0 resolution: "stringify-object@npm:3.3.0" @@ -10012,7 +10755,7 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": +"strip-ansi@npm:^6.0.1": version: 6.0.1 resolution: "strip-ansi@npm:6.0.1" dependencies: @@ -10058,12 +10801,12 @@ __metadata: languageName: node linkType: hard -"style-to-object@npm:0.3.0, style-to-object@npm:^0.3.0": - version: 0.3.0 - resolution: "style-to-object@npm:0.3.0" +"style-to-object@npm:^0.4.1": + version: 0.4.1 + resolution: "style-to-object@npm:0.4.1" dependencies: inline-style-parser: 0.1.1 - checksum: 4d7084015207f2a606dfc10c29cb5ba569f2fe8005551df7396110dd694d6ff650f2debafa95bd5d147dfb4ca50f57868e2a7f91bf5d11ef734fe7ccbd7abf59 + checksum: 2ea213e98eed21764ae1d1dc9359231a9f2d480d6ba55344c4c15eb275f0809f1845786e66d4caf62414a5cc8f112ce9425a58d251c77224060373e0db48f8c2 languageName: node linkType: hard @@ -10175,15 +10918,15 @@ __metadata: languageName: node linkType: hard -"terser-webpack-plugin@npm:^5.1.3, terser-webpack-plugin@npm:^5.3.3": - version: 5.3.6 - resolution: "terser-webpack-plugin@npm:5.3.6" +"terser-webpack-plugin@npm:^5.3.7": + version: 5.3.7 + resolution: "terser-webpack-plugin@npm:5.3.7" dependencies: - "@jridgewell/trace-mapping": ^0.3.14 + "@jridgewell/trace-mapping": ^0.3.17 jest-worker: ^27.4.5 schema-utils: ^3.1.1 - serialize-javascript: ^6.0.0 - terser: ^5.14.1 + serialize-javascript: ^6.0.1 + terser: ^5.16.5 peerDependencies: webpack: ^5.1.0 peerDependenciesMeta: @@ -10193,13 +10936,13 @@ __metadata: optional: true uglify-js: optional: true - checksum: 8f3448d7fdb0434ce6a0c09d95c462bfd2f4a5a430233d854163337f734a7f5c07c74513d16081e06d4ca33d366d5b1a36f5444219bc41a7403afd6162107bad + checksum: 095e699fdeeb553cdf2c6f75f983949271b396d9c201d7ae9fc633c45c1c1ad14c7257ef9d51ccc62213dd3e97f875870ba31550f6d4f1b6674f2615562da7f7 languageName: node linkType: hard -"terser@npm:^5.10.0, terser@npm:^5.14.1": - version: 5.16.1 - resolution: "terser@npm:5.16.1" +"terser@npm:^5.10.0, terser@npm:^5.15.1, terser@npm:^5.16.5": + version: 5.17.1 + resolution: "terser@npm:5.17.1" dependencies: "@jridgewell/source-map": ^0.3.2 acorn: ^8.5.0 @@ -10207,7 +10950,7 @@ __metadata: source-map-support: ~0.5.20 bin: terser: bin/terser - checksum: cb524123504a2f0d9140c1e1a8628c83bba9cacc404c6aca79e2493a38dfdf21275617ba75b91006b3f1ff586e401ab31121160cd253699f334c6340ea2756f5 + checksum: 69b0e80e3c4084db2819de4d6ae8a2ba79f2fcd7ed6df40fe4b602ec7bfd8e889cc63c7d5268f30990ffecbf6eeda18f857adad9386fe2c2331b398d58ed855c languageName: node linkType: hard @@ -10246,13 +10989,6 @@ __metadata: languageName: node linkType: hard -"to-readable-stream@npm:^1.0.0": - version: 1.0.0 - resolution: "to-readable-stream@npm:1.0.0" - checksum: 2bd7778490b6214a2c40276065dd88949f4cf7037ce3964c76838b8cb212893aeb9cceaaf4352a4c486e3336214c350270f3263e1ce7a0c38863a715a4d9aeb5 - languageName: node - linkType: hard - "to-regex-range@npm:^5.0.1": version: 5.0.1 resolution: "to-regex-range@npm:5.0.1" @@ -10283,42 +11019,35 @@ __metadata: languageName: node linkType: hard -"trim-trailing-lines@npm:^1.0.0": - version: 1.1.4 - resolution: "trim-trailing-lines@npm:1.1.4" - checksum: 5d39d21c0d4b258667012fcd784f73129e148ea1c213b1851d8904f80499fc91df6710c94c7dd49a486a32da2b9cb86020dda79f285a9a2586cfa622f80490c2 +"trim-lines@npm:^3.0.0": + version: 3.0.1 + resolution: "trim-lines@npm:3.0.1" + checksum: e241da104682a0e0d807222cc1496b92e716af4db7a002f4aeff33ae6a0024fef93165d49eab11aa07c71e1347c42d46563f91dfaa4d3fb945aa535cdead53ed languageName: node linkType: hard -"trim@npm:0.0.1": - version: 0.0.1 - resolution: "trim@npm:0.0.1" - checksum: 2b4646dff99a222e8e1526edd4e3a43bbd925af0b8e837c340455d250157e7deefaa4da49bb891ab841e5c27b1afc5e9e32d4b57afb875d2dfcabf4e319b8f7f +"trough@npm:^2.0.0": + version: 2.1.0 + resolution: "trough@npm:2.1.0" + checksum: a577bb561c2b401cc0e1d9e188fcfcdf63b09b151ff56a668da12197fe97cac15e3d77d5b51f426ccfd94255744a9118e9e9935afe81a3644fa1be9783c82886 languageName: node linkType: hard -"trough@npm:^1.0.0": - version: 1.0.5 - resolution: "trough@npm:1.0.5" - checksum: d6c8564903ed00e5258bab92134b020724dbbe83148dc72e4bf6306c03ed8843efa1bcc773fa62410dd89161ecb067432dd5916501793508a9506cacbc408e25 +"tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.5.0": + version: 2.5.0 + resolution: "tslib@npm:2.5.0" + checksum: ae3ed5f9ce29932d049908ebfdf21b3a003a85653a9a140d614da6b767a93ef94f460e52c3d787f0e4f383546981713f165037dc2274df212ea9f8a4541004e1 languageName: node linkType: hard -"tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.4.0": - version: 2.4.1 - resolution: "tslib@npm:2.4.1" - checksum: 19480d6e0313292bd6505d4efe096a6b31c70e21cf08b5febf4da62e95c265c8f571f7b36fcc3d1a17e068032f59c269fab3459d6cd3ed6949eafecf64315fca +"type-fest@npm:^1.0.1": + version: 1.4.0 + resolution: "type-fest@npm:1.4.0" + checksum: b011c3388665b097ae6a109a437a04d6f61d81b7357f74cbcb02246f2f5bd72b888ae33631b99871388122ba0a87f4ff1c94078e7119ff22c70e52c0ff828201 languageName: node linkType: hard -"type-fest@npm:^0.20.2": - version: 0.20.2 - resolution: "type-fest@npm:0.20.2" - checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73 - languageName: node - linkType: hard - -"type-fest@npm:^2.5.0": +"type-fest@npm:^2.13.0, type-fest@npm:^2.5.0": version: 2.19.0 resolution: "type-fest@npm:2.19.0" checksum: a4ef07ece297c9fba78fc1bd6d85dff4472fe043ede98bd4710d2615d15776902b595abf62bd78339ed6278f021235fb28a96361f8be86ed754f778973a0d278 @@ -10371,16 +11100,6 @@ __metadata: languageName: node linkType: hard -"unherit@npm:^1.0.4": - version: 1.1.3 - resolution: "unherit@npm:1.1.3" - dependencies: - inherits: ^2.0.0 - xtend: ^4.0.0 - checksum: fd7922f84fc0bfb7c4df6d1f5a50b5b94a0218e3cda98a54dbbd209226ddd4072d742d3df44d0e295ab08d5ccfd304a1e193dfe31a86d2a91b7cb9fdac093194 - languageName: node - linkType: hard - "unicode-canonical-property-names-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" @@ -10412,31 +11131,18 @@ __metadata: languageName: node linkType: hard -"unified@npm:9.2.0": - version: 9.2.0 - resolution: "unified@npm:9.2.0" +"unified@npm:^10.0.0, unified@npm:^10.1.2": + version: 10.1.2 + resolution: "unified@npm:10.1.2" dependencies: - bail: ^1.0.0 + "@types/unist": ^2.0.0 + bail: ^2.0.0 extend: ^3.0.0 is-buffer: ^2.0.0 - is-plain-obj: ^2.0.0 - trough: ^1.0.0 - vfile: ^4.0.0 - checksum: 0cac4ae119893fbd49d309b4db48595e4d4e9f0a2dc1dde4d0074059f9a46012a2905f37c1346715e583f30c970bc8078db8462675411d39ff5036ae18b4fb8a - languageName: node - linkType: hard - -"unified@npm:^9.2.2": - version: 9.2.2 - resolution: "unified@npm:9.2.2" - dependencies: - bail: ^1.0.0 - extend: ^3.0.0 - is-buffer: ^2.0.0 - is-plain-obj: ^2.0.0 - trough: ^1.0.0 - vfile: ^4.0.0 - checksum: 7c24461be7de4145939739ce50d18227c5fbdf9b3bc5a29dabb1ce26dd3e8bd4a1c385865f6f825f3b49230953ee8b591f23beab3bb3643e3e9dc37aa8a089d5 + is-plain-obj: ^4.0.0 + trough: ^2.0.0 + vfile: ^5.0.0 + checksum: 053e7c65ede644607f87bd625a299e4b709869d2f76ec8138569e6e886903b6988b21cd9699e471eda42bee189527be0a9dac05936f1d069a5e65d0125d5d756 languageName: node linkType: hard @@ -10458,26 +11164,19 @@ __metadata: languageName: node linkType: hard -"unique-string@npm:^2.0.0": - version: 2.0.0 - resolution: "unique-string@npm:2.0.0" +"unique-string@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-string@npm:3.0.0" dependencies: - crypto-random-string: ^2.0.0 - checksum: ef68f639136bcfe040cf7e3cd7a8dff076a665288122855148a6f7134092e6ed33bf83a7f3a9185e46c98dddc445a0da6ac25612afa1a7c38b8b654d6c02498e + crypto-random-string: ^4.0.0 + checksum: 1a1e2e7d02eab1bb10f720475da735e1990c8a5ff34edd1a3b6bc31590cb4210b7a1233d779360cc622ce11c211e43afa1628dd658f35d3e6a89964b622940df languageName: node linkType: hard -"unist-builder@npm:2.0.3, unist-builder@npm:^2.0.0": - version: 2.0.3 - resolution: "unist-builder@npm:2.0.3" - checksum: e946fdf77dbfc320feaece137ce4959ae2da6614abd1623bd39512dc741a9d5f313eb2ba79f8887d941365dccddec7fef4e953827475e392bf49b45336f597f6 - languageName: node - linkType: hard - -"unist-util-generated@npm:^1.0.0": - version: 1.1.6 - resolution: "unist-util-generated@npm:1.1.6" - checksum: 86239ff88a08800d52198f2f0e15911f05bab2dad17cef95550f7c2728f15ebb0344694fcc3101d05762d88adaf86cb85aa7a3300fedabd0b6d7d00b41cdcb7f +"unist-util-generated@npm:^2.0.0": + version: 2.0.1 + resolution: "unist-util-generated@npm:2.0.1" + checksum: 6221ad0571dcc9c8964d6b054f39ef6571ed59cc0ce3e88ae97ea1c70afe76b46412a5ffaa91f96814644ac8477e23fb1b477d71f8d70e625728c5258f5c0d99 languageName: node linkType: hard @@ -10488,37 +11187,49 @@ __metadata: languageName: node linkType: hard -"unist-util-position@npm:^3.0.0": - version: 3.1.0 - resolution: "unist-util-position@npm:3.1.0" - checksum: 10b3952e32a1ffabbecad41c3946237f7059f5bb6436796da05531a285f50b97e4f37cfc2f7164676d041063f40fe1ad92fbb8ca38d3ae8747328ebe738d738f +"unist-util-is@npm:^5.0.0": + version: 5.2.1 + resolution: "unist-util-is@npm:5.2.1" + dependencies: + "@types/unist": ^2.0.0 + checksum: ae76fdc3d35352cd92f1bedc3a0d407c3b9c42599a52ab9141fe89bdd786b51f0ec5a2ab68b93fb532e239457cae62f7e39eaa80229e1cb94875da2eafcbe5c4 languageName: node linkType: hard -"unist-util-remove-position@npm:^2.0.0": - version: 2.0.1 - resolution: "unist-util-remove-position@npm:2.0.1" +"unist-util-position-from-estree@npm:^1.0.0, unist-util-position-from-estree@npm:^1.1.0": + version: 1.1.2 + resolution: "unist-util-position-from-estree@npm:1.1.2" dependencies: - unist-util-visit: ^2.0.0 - checksum: 4149294969f1a78a367b5d03eb0a138aa8320a39e1b15686647a2bec5945af3df27f2936a1e9752ecbb4a82dc23bd86f7e5a0ee048e5eeaedc2deb9237872795 + "@types/unist": ^2.0.0 + checksum: e3f4060e2a9e894c6ed63489c5a7cb58ff282e5dae9497cbc2073033ca74d6e412af4d4d342c97aea08d997c908b8bce2fe43a2062aafc2bb3f266533016588b languageName: node linkType: hard -"unist-util-remove@npm:^2.0.0": - version: 2.1.0 - resolution: "unist-util-remove@npm:2.1.0" +"unist-util-position@npm:^4.0.0": + version: 4.0.4 + resolution: "unist-util-position@npm:4.0.4" dependencies: - unist-util-is: ^4.0.0 - checksum: 99e54f3ea0523f8cf957579a6e84e5b58427bffab929cc7f6aa5119581f929db683dd4691ea5483df0c272f486dda9dbd04f4ab74dca6cae1f3ebe8e4261a4d9 + "@types/unist": ^2.0.0 + checksum: e7487b6cec9365299695e3379ded270a1717074fa11fd2407c9b934fb08db6fe1d9077ddeaf877ecf1813665f8ccded5171693d3d9a7a01a125ec5cdd5e88691 languageName: node linkType: hard -"unist-util-stringify-position@npm:^2.0.0": - version: 2.0.3 - resolution: "unist-util-stringify-position@npm:2.0.3" +"unist-util-remove-position@npm:^4.0.0": + version: 4.0.2 + resolution: "unist-util-remove-position@npm:4.0.2" dependencies: - "@types/unist": ^2.0.2 - checksum: f755cadc959f9074fe999578a1a242761296705a7fe87f333a37c00044de74ab4b184b3812989a57d4cd12211f0b14ad397b327c3a594c7af84361b1c25a7f09 + "@types/unist": ^2.0.0 + unist-util-visit: ^4.0.0 + checksum: 989831da913d09a82a99ed9b47b78471b6409bde95942cde47e09da54b7736516f17e3c7e026af468684c1efcec5fb52df363381b2f9dc7fd96ce791c5a2fa4a + languageName: node + linkType: hard + +"unist-util-stringify-position@npm:^3.0.0": + version: 3.0.3 + resolution: "unist-util-stringify-position@npm:3.0.3" + dependencies: + "@types/unist": ^2.0.0 + checksum: dbd66c15183607ca942a2b1b7a9f6a5996f91c0d30cf8966fb88955a02349d9eefd3974e9010ee67e71175d784c5a9fea915b0aa0b0df99dcb921b95c4c9e124 languageName: node linkType: hard @@ -10532,7 +11243,17 @@ __metadata: languageName: node linkType: hard -"unist-util-visit@npm:2.0.3, unist-util-visit@npm:^2.0.0, unist-util-visit@npm:^2.0.3": +"unist-util-visit-parents@npm:^5.0.0, unist-util-visit-parents@npm:^5.1.1, unist-util-visit-parents@npm:^5.1.3": + version: 5.1.3 + resolution: "unist-util-visit-parents@npm:5.1.3" + dependencies: + "@types/unist": ^2.0.0 + unist-util-is: ^5.0.0 + checksum: 8ecada5978994f846b64658cf13b4092cd78dea39e1ba2f5090a5de842ba4852712c02351a8ae95250c64f864635e7b02aedf3b4a093552bb30cf1bd160efbaa + languageName: node + linkType: hard + +"unist-util-visit@npm:^2.0.3": version: 2.0.3 resolution: "unist-util-visit@npm:2.0.3" dependencies: @@ -10543,6 +11264,17 @@ __metadata: languageName: node linkType: hard +"unist-util-visit@npm:^4.0.0": + version: 4.1.2 + resolution: "unist-util-visit@npm:4.1.2" + dependencies: + "@types/unist": ^2.0.0 + unist-util-is: ^5.0.0 + unist-util-visit-parents: ^5.1.1 + checksum: 95a34e3f7b5b2d4b68fd722b6229972099eb97b6df18913eda44a5c11df8b1e27efe7206dd7b88c4ed244a48c474a5b2e2629ab79558ff9eb936840295549cee + languageName: node + linkType: hard + "universalify@npm:^2.0.0": version: 2.0.0 resolution: "universalify@npm:2.0.0" @@ -10557,39 +11289,39 @@ __metadata: languageName: node linkType: hard -"update-browserslist-db@npm:^1.0.9": - version: 1.0.10 - resolution: "update-browserslist-db@npm:1.0.10" +"update-browserslist-db@npm:^1.0.10": + version: 1.0.11 + resolution: "update-browserslist-db@npm:1.0.11" dependencies: escalade: ^3.1.1 picocolors: ^1.0.0 peerDependencies: browserslist: ">= 4.21.0" bin: - browserslist-lint: cli.js - checksum: 12db73b4f63029ac407b153732e7cd69a1ea8206c9100b482b7d12859cd3cd0bc59c602d7ae31e652706189f1acb90d42c53ab24a5ba563ed13aebdddc5561a0 + update-browserslist-db: cli.js + checksum: b98327518f9a345c7cad5437afae4d2ae7d865f9779554baf2a200fdf4bac4969076b679b1115434bd6557376bdd37ca7583d0f9b8f8e302d7d4cc1e91b5f231 languageName: node linkType: hard -"update-notifier@npm:^5.1.0": - version: 5.1.0 - resolution: "update-notifier@npm:5.1.0" +"update-notifier@npm:^6.0.2": + version: 6.0.2 + resolution: "update-notifier@npm:6.0.2" dependencies: - boxen: ^5.0.0 - chalk: ^4.1.0 - configstore: ^5.0.1 - has-yarn: ^2.1.0 - import-lazy: ^2.1.0 - is-ci: ^2.0.0 + boxen: ^7.0.0 + chalk: ^5.0.1 + configstore: ^6.0.0 + has-yarn: ^3.0.0 + import-lazy: ^4.0.0 + is-ci: ^3.0.1 is-installed-globally: ^0.4.0 - is-npm: ^5.0.0 - is-yarn-global: ^0.3.0 - latest-version: ^5.1.0 - pupa: ^2.1.1 - semver: ^7.3.4 - semver-diff: ^3.1.1 - xdg-basedir: ^4.0.0 - checksum: 461e5e5b002419296d3868ee2abe0f9ab3e1846d9db642936d0c46f838872ec56069eddfe662c45ce1af0a8d6d5026353728de2e0a95ab2e3546a22ea077caf1 + is-npm: ^6.0.0 + is-yarn-global: ^0.4.0 + latest-version: ^7.0.0 + pupa: ^3.1.0 + semver: ^7.3.7 + semver-diff: ^4.0.0 + xdg-basedir: ^5.1.0 + checksum: 4bae7b3eca7b2068b6b87dde88c9dad24831fa913a5b83ecb39a7e4702c93e8b05fd9bcac5f1a005178f6e5dc859e0b3817ddda833d2a7ab92c6485e078b3cc8 languageName: node linkType: hard @@ -10619,15 +11351,6 @@ __metadata: languageName: node linkType: hard -"url-parse-lax@npm:^3.0.0": - version: 3.0.0 - resolution: "url-parse-lax@npm:3.0.0" - dependencies: - prepend-http: ^2.0.0 - checksum: 1040e357750451173132228036aff1fd04abbd43eac1fb3e4fca7495a078bcb8d33cb765fe71ad7e473d9c94d98fd67adca63bd2716c815a2da066198dd37217 - languageName: node - linkType: hard - "use-composed-ref@npm:^1.3.0": version: 1.3.0 resolution: "use-composed-ref@npm:1.3.0" @@ -10709,6 +11432,20 @@ __metadata: languageName: node linkType: hard +"uvu@npm:^0.5.0": + version: 0.5.6 + resolution: "uvu@npm:0.5.6" + dependencies: + dequal: ^2.0.0 + diff: ^5.0.0 + kleur: ^4.0.3 + sade: ^1.7.3 + bin: + uvu: bin.js + checksum: 09460a37975627de9fcad396e5078fb844d01aaf64a6399ebfcfd9e55f1c2037539b47611e8631f89be07656962af0cf48c334993db82b9ae9c3d25ce3862168 + languageName: node + linkType: hard + "value-equal@npm:^1.0.1": version: 1.0.1 resolution: "value-equal@npm:1.0.1" @@ -10723,47 +11460,50 @@ __metadata: languageName: node linkType: hard -"vfile-location@npm:^3.0.0, vfile-location@npm:^3.2.0": - version: 3.2.0 - resolution: "vfile-location@npm:3.2.0" - checksum: 9bb3df6d0be31b5dd2d8da0170c27b7045c64493a8ba7b6ff7af8596c524fc8896924b8dd85ae12d201eead2709217a0fbc44927b7264f4bbf0aa8027a78be9c - languageName: node - linkType: hard - -"vfile-message@npm:^2.0.0": - version: 2.0.4 - resolution: "vfile-message@npm:2.0.4" +"vfile-location@npm:^4.0.0": + version: 4.1.0 + resolution: "vfile-location@npm:4.1.0" dependencies: "@types/unist": ^2.0.0 - unist-util-stringify-position: ^2.0.0 - checksum: 1bade499790f46ca5aba04bdce07a1e37c2636a8872e05cf32c26becc912826710b7eb063d30c5754fdfaeedc8a7658e78df10b3bc535c844890ec8a184f5643 + vfile: ^5.0.0 + checksum: c894e8e5224170d1f85288f4a1d1ebcee0780823ea2b49d881648ab360ebf01b37ecb09b1c4439a75f9a51f31a9f9742cd045e987763e367c352a1ef7c50d446 languageName: node linkType: hard -"vfile@npm:^4.0.0": - version: 4.2.1 - resolution: "vfile@npm:4.2.1" +"vfile-message@npm:^3.0.0": + version: 3.1.4 + resolution: "vfile-message@npm:3.1.4" + dependencies: + "@types/unist": ^2.0.0 + unist-util-stringify-position: ^3.0.0 + checksum: d0ee7da1973ad76513c274e7912adbed4d08d180eaa34e6bd40bc82459f4b7bc50fcaff41556135e3339995575eac5f6f709aba9332b80f775618ea4880a1367 + languageName: node + linkType: hard + +"vfile@npm:^5.0.0": + version: 5.3.7 + resolution: "vfile@npm:5.3.7" dependencies: "@types/unist": ^2.0.0 is-buffer: ^2.0.0 - unist-util-stringify-position: ^2.0.0 - vfile-message: ^2.0.0 - checksum: ee5726e10d170472cde778fc22e0f7499caa096eb85babea5d0ce0941455b721037ee1c9e6ae506ca2803250acd313d0f464328ead0b55cfe7cb6315f1b462d6 + unist-util-stringify-position: ^3.0.0 + vfile-message: ^3.0.0 + checksum: 642cce703afc186dbe7cabf698dc954c70146e853491086f5da39e1ce850676fc96b169fcf7898aa3ff245e9313aeec40da93acd1e1fcc0c146dc4f6308b4ef9 languageName: node linkType: hard -"wait-on@npm:^6.0.1": - version: 6.0.1 - resolution: "wait-on@npm:6.0.1" +"wait-on@npm:^7.0.1": + version: 7.0.1 + resolution: "wait-on@npm:7.0.1" dependencies: - axios: ^0.25.0 - joi: ^17.6.0 + axios: ^0.27.2 + joi: ^17.7.0 lodash: ^4.17.21 - minimist: ^1.2.5 - rxjs: ^7.5.4 + minimist: ^1.2.7 + rxjs: ^7.8.0 bin: wait-on: bin/wait-on - checksum: e4d62aa4145d99fe34747ccf7506d4b4d6e60dd677c0eb18a51e316d38116ace2d194e4b22a9eb7b767b0282f39878ddcc4ae9440dcb0c005c9150668747cf5b + checksum: 1e8a17d8ee6436f71d3ab82781ce31267481fcd7bbccde49b0f8124871e6e40a1acac3401f04f775ba6203853a5813352fa131620fc139914351f3b2894d573f languageName: node linkType: hard @@ -10786,13 +11526,6 @@ __metadata: languageName: node linkType: hard -"web-namespaces@npm:^1.0.0": - version: 1.1.4 - resolution: "web-namespaces@npm:1.1.4" - checksum: 5149842ccbfbc56fe4f8758957b3f8c8616a281874a5bb84aa1b305e4436a9bad853d21c629a7b8f174902449e1489c7a6c724fccf60965077c5636bd8aed42b - languageName: node - linkType: hard - "webidl-conversions@npm:^3.0.0": version: 3.0.1 resolution: "webidl-conversions@npm:3.0.1" @@ -10800,10 +11533,11 @@ __metadata: languageName: node linkType: hard -"webpack-bundle-analyzer@npm:^4.5.0": - version: 4.7.0 - resolution: "webpack-bundle-analyzer@npm:4.7.0" +"webpack-bundle-analyzer@npm:^4.8.0": + version: 4.8.0 + resolution: "webpack-bundle-analyzer@npm:4.8.0" dependencies: + "@discoveryjs/json-ext": 0.5.7 acorn: ^8.0.4 acorn-walk: ^8.0.0 chalk: ^4.1.0 @@ -10815,7 +11549,7 @@ __metadata: ws: ^7.3.1 bin: webpack-bundle-analyzer: lib/bin/analyzer.js - checksum: 4ce3b379c61ce16b2219756843407cc99f2b82cd191f653043f1b705a3e32b3af03834af0dfded98ab852313a892a148bed1a8effaacd6440f028c19f41581f3 + checksum: acd86f68abb2bcb1a240043c6e2d8e53079499363afed94b96c0ec1abcc4fca2b7a7cbeeb5e13027d02a993c6ea8153194c69e7697faf47528bdaff1e2ce297e languageName: node linkType: hard @@ -10834,9 +11568,9 @@ __metadata: languageName: node linkType: hard -"webpack-dev-server@npm:^4.9.3": - version: 4.11.1 - resolution: "webpack-dev-server@npm:4.11.1" +"webpack-dev-server@npm:^4.11.1": + version: 4.13.3 + resolution: "webpack-dev-server@npm:4.13.3" dependencies: "@types/bonjour": ^3.5.9 "@types/connect-history-api-fallback": ^1.3.5 @@ -10857,6 +11591,7 @@ __metadata: html-entities: ^2.3.2 http-proxy-middleware: ^2.0.3 ipaddr.js: ^2.0.1 + launch-editor: ^2.6.0 open: ^8.0.9 p-retry: ^4.5.0 rimraf: ^3.0.2 @@ -10866,15 +11601,17 @@ __metadata: sockjs: ^0.3.24 spdy: ^4.0.2 webpack-dev-middleware: ^5.3.1 - ws: ^8.4.2 + ws: ^8.13.0 peerDependencies: webpack: ^4.37.0 || ^5.0.0 peerDependenciesMeta: + webpack: + optional: true webpack-cli: optional: true bin: webpack-dev-server: bin/webpack-dev-server.js - checksum: b7601a39ee0f413988259e29a36835b0a68522cfaa161de5b7ec99b3399acdd99d44189add4aaf4a5191258bb130f9cf3e68919324a1955c7557f5fe6ab0d96c + checksum: d019844d3bc384676921afadfbd0a95fd06e475f2d43604789a4a8f42f79a8fb37e745f15f47f352630046dd6c6c9694051a7552b34a056c59d3a601e74d6320 languageName: node linkType: hard @@ -10895,21 +11632,21 @@ __metadata: languageName: node linkType: hard -"webpack@npm:^5.73.0": - version: 5.76.2 - resolution: "webpack@npm:5.76.2" +"webpack@npm:^5.76.0": + version: 5.81.0 + resolution: "webpack@npm:5.81.0" dependencies: "@types/eslint-scope": ^3.7.3 - "@types/estree": ^0.0.51 - "@webassemblyjs/ast": 1.11.1 - "@webassemblyjs/wasm-edit": 1.11.1 - "@webassemblyjs/wasm-parser": 1.11.1 + "@types/estree": ^1.0.0 + "@webassemblyjs/ast": ^1.11.5 + "@webassemblyjs/wasm-edit": ^1.11.5 + "@webassemblyjs/wasm-parser": ^1.11.5 acorn: ^8.7.1 acorn-import-assertions: ^1.7.6 browserslist: ^4.14.5 chrome-trace-event: ^1.0.2 - enhanced-resolve: ^5.10.0 - es-module-lexer: ^0.9.0 + enhanced-resolve: ^5.13.0 + es-module-lexer: ^1.2.1 eslint-scope: 5.1.1 events: ^3.2.0 glob-to-regexp: ^0.4.1 @@ -10918,9 +11655,9 @@ __metadata: loader-runner: ^4.2.0 mime-types: ^2.1.27 neo-async: ^2.6.2 - schema-utils: ^3.1.0 + schema-utils: ^3.1.2 tapable: ^2.1.1 - terser-webpack-plugin: ^5.1.3 + terser-webpack-plugin: ^5.3.7 watchpack: ^2.4.0 webpack-sources: ^3.2.3 peerDependenciesMeta: @@ -10928,7 +11665,7 @@ __metadata: optional: true bin: webpack: bin/webpack.js - checksum: 86db98299a175c371031449c26077e87b33acd8f45de7f7945ed4b9b37c8ca11bc5169af9c44743efccd4d55e08042a3aa3a3bc42aff831309a0821ffbcd395e + checksum: 1a6eecaffac3226d80f4e8f330b32e0ff117d9dafd8700166d230afbc171d68ea1ff55a9939fa789307f7b9d11881889ccb8e6cd79d4ccbaeef916788ce73fdb languageName: node linkType: hard @@ -10974,13 +11711,6 @@ __metadata: languageName: node linkType: hard -"which-module@npm:^2.0.0": - version: 2.0.0 - resolution: "which-module@npm:2.0.0" - checksum: 809f7fd3dfcb2cdbe0180b60d68100c88785084f8f9492b0998c051d7a8efe56784492609d3f09ac161635b78ea29219eb1418a98c15ce87d085bce905705c9c - languageName: node - linkType: hard - "which@npm:^1.3.1": version: 1.3.1 resolution: "which@npm:1.3.1" @@ -11012,15 +11742,6 @@ __metadata: languageName: node linkType: hard -"widest-line@npm:^3.1.0": - version: 3.1.0 - resolution: "widest-line@npm:3.1.0" - dependencies: - string-width: ^4.0.0 - checksum: 03db6c9d0af9329c37d74378ff1d91972b12553c7d72a6f4e8525fe61563fa7adb0b9d6e8d546b7e059688712ea874edd5ded475999abdeedf708de9849310e0 - languageName: node - linkType: hard - "widest-line@npm:^4.0.1": version: 4.0.1 resolution: "widest-line@npm:4.0.1" @@ -11037,28 +11758,6 @@ __metadata: languageName: node linkType: hard -"wrap-ansi@npm:^6.2.0": - version: 6.2.0 - resolution: "wrap-ansi@npm:6.2.0" - dependencies: - ansi-styles: ^4.0.0 - string-width: ^4.1.0 - strip-ansi: ^6.0.0 - checksum: 6cd96a410161ff617b63581a08376f0cb9162375adeb7956e10c8cd397821f7eb2a6de24eb22a0b28401300bf228c86e50617cd568209b5f6775b93c97d2fe3a - languageName: node - linkType: hard - -"wrap-ansi@npm:^7.0.0": - version: 7.0.0 - resolution: "wrap-ansi@npm:7.0.0" - dependencies: - ansi-styles: ^4.0.0 - string-width: ^4.1.0 - strip-ansi: ^6.0.0 - checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b - languageName: node - linkType: hard - "wrap-ansi@npm:^8.0.1": version: 8.0.1 resolution: "wrap-ansi@npm:8.0.1" @@ -11077,7 +11776,7 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^3.0.0": +"write-file-atomic@npm:^3.0.3": version: 3.0.3 resolution: "write-file-atomic@npm:3.0.3" dependencies: @@ -11104,25 +11803,25 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.4.2": - version: 8.11.0 - resolution: "ws@npm:8.11.0" +"ws@npm:^8.13.0": + version: 8.13.0 + resolution: "ws@npm:8.13.0" peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 + utf-8-validate: ">=5.0.2" peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true - checksum: 316b33aba32f317cd217df66dbfc5b281a2f09ff36815de222bc859e3424d83766d9eb2bd4d667de658b6ab7be151f258318fb1da812416b30be13103e5b5c67 + checksum: 53e991bbf928faf5dc6efac9b8eb9ab6497c69feeb94f963d648b7a3530a720b19ec2e0ec037344257e05a4f35bd9ad04d9de6f289615ffb133282031b18c61c languageName: node linkType: hard -"xdg-basedir@npm:^4.0.0": - version: 4.0.0 - resolution: "xdg-basedir@npm:4.0.0" - checksum: 0073d5b59a37224ed3a5ac0dd2ec1d36f09c49f0afd769008a6e9cd3cd666bd6317bd1c7ce2eab47e1de285a286bad11a9b038196413cd753b79770361855f3c +"xdg-basedir@npm:^5.0.1, xdg-basedir@npm:^5.1.0": + version: 5.1.0 + resolution: "xdg-basedir@npm:5.1.0" + checksum: b60e8a2c663ccb1dac77c2d913f3b96de48dafbfa083657171d3d50e10820b8a04bb4edfe9f00808c8c20e5f5355e1927bea9029f03136e29265cb98291e1fea languageName: node linkType: hard @@ -11137,17 +11836,10 @@ __metadata: languageName: node linkType: hard -"xtend@npm:^4.0.0, xtend@npm:^4.0.1": - version: 4.0.2 - resolution: "xtend@npm:4.0.2" - checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a - languageName: node - linkType: hard - -"y18n@npm:^4.0.0": - version: 4.0.3 - resolution: "y18n@npm:4.0.3" - checksum: 014dfcd9b5f4105c3bb397c1c8c6429a9df004aa560964fb36732bfb999bfe83d45ae40aeda5b55d21b1ee53d8291580a32a756a443e064317953f08025b1aa4 +"yallist@npm:^3.0.2": + version: 3.1.1 + resolution: "yallist@npm:3.1.1" + checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d languageName: node linkType: hard @@ -11183,35 +11875,6 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:^18.1.2": - version: 18.1.3 - resolution: "yargs-parser@npm:18.1.3" - dependencies: - camelcase: ^5.0.0 - decamelize: ^1.2.0 - checksum: 60e8c7d1b85814594d3719300ecad4e6ae3796748b0926137bfec1f3042581b8646d67e83c6fc80a692ef08b8390f21ddcacb9464476c39bbdf52e34961dd4d9 - languageName: node - linkType: hard - -"yargs@npm:^15.3.1": - version: 15.4.1 - resolution: "yargs@npm:15.4.1" - dependencies: - cliui: ^6.0.0 - decamelize: ^1.2.0 - find-up: ^4.1.0 - get-caller-file: ^2.0.1 - require-directory: ^2.1.1 - require-main-filename: ^2.0.0 - set-blocking: ^2.0.0 - string-width: ^4.2.0 - which-module: ^2.0.0 - y18n: ^4.0.0 - yargs-parser: ^18.1.2 - checksum: 40b974f508d8aed28598087720e086ecd32a5fd3e945e95ea4457da04ee9bdb8bdd17fd91acff36dc5b7f0595a735929c514c40c402416bbb87c03f6fb782373 - languageName: node - linkType: hard - "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0" @@ -11219,9 +11882,9 @@ __metadata: languageName: node linkType: hard -"zwitch@npm:^1.0.0": - version: 1.0.5 - resolution: "zwitch@npm:1.0.5" - checksum: 28a1bebacab3bc60150b6b0a2ba1db2ad033f068e81f05e4892ec0ea13ae63f5d140a1d692062ac0657840c8da076f35b94433b5f1c329d7803b247de80f064a +"zwitch@npm:^2.0.0": + version: 2.0.4 + resolution: "zwitch@npm:2.0.4" + checksum: f22ec5fc2d5f02c423c93d35cdfa83573a3a3bd98c66b927c368ea4d0e7252a500df2a90a6b45522be536a96a73404393c958e945fdba95e6832c200791702b6 languageName: node linkType: hard diff --git a/package.json b/package.json index 1ffa4b09f6..44778ae926 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "@types/react": "^17", "@types/react-dom": "^17" }, - "version": "1.13.0", + "version": "1.14.0-next.1", "dependencies": { "@backstage/errors": "workspace:^", "@manypkg/get-packages": "^1.1.3" diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md index f7b3a2dc2f..5d781b58ca 100644 --- a/packages/app-defaults/CHANGELOG.md +++ b/packages/app-defaults/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/app-defaults +## 1.3.1-next.1 + +### Patch Changes + +- 575d9178eff: Added a System Icon for resource entities. + This can be obtained using: + + ```ts + useApp().getSystemIcon('kind:resource'); + ``` + +- Updated dependencies + - @backstage/core-app-api@1.8.0-next.1 + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-permission-react@0.4.12 + +## 1.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.7.1-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/theme@0.2.19 + - @backstage/plugin-permission-react@0.4.12 + ## 1.3.0 ### Minor Changes diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json index 1f6620d36e..0a8f2e5dc1 100644 --- a/packages/app-defaults/package.json +++ b/packages/app-defaults/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/app-defaults", "description": "Provides the default wiring of a Backstage App", - "version": "1.3.0", + "version": "1.3.1-next.1", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/app-defaults/src/defaults/icons.tsx b/packages/app-defaults/src/defaults/icons.tsx index c4f2d2b7e4..80fa4dcf12 100644 --- a/packages/app-defaults/src/defaults/icons.tsx +++ b/packages/app-defaults/src/defaults/icons.tsx @@ -34,6 +34,7 @@ import MuiMenuBookIcon from '@material-ui/icons/MenuBook'; import MuiPeopleIcon from '@material-ui/icons/People'; import MuiPersonIcon from '@material-ui/icons/Person'; import MuiWarningIcon from '@material-ui/icons/Warning'; +import MuiWorkIcon from '@material-ui/icons/Work'; export const icons = { brokenImage: MuiBrokenImageIcon as IconComponent, @@ -56,6 +57,7 @@ export const icons = { 'kind:location': MuiLocationOnIcon as IconComponent, 'kind:system': MuiCategoryIcon as IconComponent, 'kind:user': MuiPersonIcon as IconComponent, + 'kind:resource': MuiWorkIcon as IconComponent, user: MuiPersonIcon as IconComponent, warning: MuiWarningIcon as IconComponent, }; diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index ed96f29c47..b20fafb995 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,141 @@ # example-app +## 0.2.83-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-tech-insights@0.3.10-next.1 + - @backstage/plugin-scaffolder@1.13.1-next.1 + - @backstage/plugin-search@1.3.0-next.1 + - @backstage/plugin-explore@0.4.3-next.1 + - @backstage/app-defaults@1.3.1-next.1 + - @backstage/plugin-kubernetes@0.9.0-next.1 + - @backstage/core-app-api@1.8.0-next.1 + - @backstage/plugin-catalog-graph@0.2.30-next.1 + - @backstage/plugin-home@0.5.2-next.1 + - @backstage/plugin-octopus-deploy@0.2.0-next.1 + - @backstage/plugin-circleci@0.3.18-next.1 + - @backstage/core-components@0.13.1-next.0 + - @backstage/cli@0.22.7-next.0 + - @backstage/plugin-airbrake@0.3.18-next.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-apache-airflow@0.2.11-next.0 + - @backstage/plugin-api-docs@0.9.3-next.1 + - @backstage/plugin-azure-devops@0.2.9-next.1 + - @backstage/plugin-azure-sites@0.1.7-next.1 + - @backstage/plugin-badges@0.2.42-next.1 + - @backstage/plugin-catalog-import@0.9.8-next.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/plugin-cloudbuild@0.3.18-next.1 + - @backstage/plugin-code-coverage@0.2.11-next.1 + - @backstage/plugin-cost-insights@0.12.7-next.1 + - @backstage/plugin-dynatrace@5.0.0-next.1 + - @backstage/plugin-entity-feedback@0.2.1-next.1 + - @backstage/plugin-gcalendar@0.3.14-next.0 + - @backstage/plugin-gcp-projects@0.3.37-next.0 + - @backstage/plugin-github-actions@0.5.18-next.1 + - @backstage/plugin-gocd@0.1.24-next.1 + - @backstage/plugin-graphiql@0.2.50-next.0 + - @backstage/plugin-jenkins@0.7.17-next.1 + - @backstage/plugin-kafka@0.3.18-next.1 + - @backstage/plugin-lighthouse@0.4.3-next.1 + - @backstage/plugin-linguist@0.1.3-next.1 + - @backstage/plugin-microsoft-calendar@0.1.3-next.0 + - @backstage/plugin-newrelic@0.3.36-next.0 + - @backstage/plugin-org@0.6.8-next.1 + - @backstage/plugin-pagerduty@0.5.11-next.1 + - @backstage/plugin-playlist@0.1.9-next.1 + - @backstage/plugin-puppetdb@0.1.1-next.1 + - @backstage/plugin-rollbar@0.4.18-next.1 + - @backstage/plugin-scaffolder-react@1.3.1-next.1 + - @backstage/plugin-search-react@1.6.0-next.1 + - @backstage/plugin-sentry@0.5.3-next.1 + - @backstage/plugin-shortcuts@0.3.10-next.1 + - @backstage/plugin-stack-overflow@0.1.15-next.1 + - @backstage/plugin-stackstorm@0.1.2-next.0 + - @backstage/plugin-tech-radar@0.6.4-next.1 + - @backstage/plugin-techdocs@1.6.2-next.1 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.13-next.1 + - @backstage/plugin-todo@0.2.20-next.1 + - @backstage/plugin-user-settings@0.7.3-next.1 + - @backstage/integration-react@1.1.13-next.1 + - @backstage/plugin-newrelic-dashboard@0.2.11-next.1 + - @backstage/plugin-techdocs-react@1.1.6-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-permission-react@0.4.12 + - @internal/plugin-catalog-customized@0.0.10-next.1 + +## 0.2.83-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs@1.6.2-next.0 + - @backstage/plugin-stack-overflow@0.1.14-next.0 + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/plugin-circleci@0.3.18-next.0 + - @backstage/plugin-search-react@1.6.0-next.0 + - @backstage/plugin-search@1.3.0-next.0 + - @backstage/plugin-home@0.5.1-next.0 + - @backstage/core-app-api@1.7.1-next.0 + - @backstage/plugin-scaffolder-react@1.3.1-next.0 + - @backstage/plugin-scaffolder@1.13.1-next.0 + - @backstage/plugin-shortcuts@0.3.10-next.0 + - @backstage/plugin-tech-radar@0.6.4-next.0 + - @backstage/cli@0.22.7-next.0 + - @backstage/plugin-airbrake@0.3.18-next.0 + - @backstage/plugin-api-docs@0.9.3-next.0 + - @backstage/plugin-azure-devops@0.2.9-next.0 + - @backstage/plugin-azure-sites@0.1.7-next.0 + - @backstage/plugin-badges@0.2.42-next.0 + - @internal/plugin-catalog-customized@0.0.10-next.0 + - @backstage/plugin-catalog-graph@0.2.30-next.0 + - @backstage/plugin-catalog-import@0.9.8-next.0 + - @backstage/plugin-cloudbuild@0.3.18-next.0 + - @backstage/plugin-code-coverage@0.2.11-next.0 + - @backstage/plugin-cost-insights@0.12.7-next.0 + - @backstage/plugin-dynatrace@5.0.0-next.0 + - @backstage/plugin-entity-feedback@0.2.1-next.0 + - @backstage/plugin-explore@0.4.3-next.0 + - @backstage/plugin-github-actions@0.5.18-next.0 + - @backstage/plugin-gocd@0.1.24-next.0 + - @backstage/plugin-jenkins@0.7.17-next.0 + - @backstage/plugin-kafka@0.3.18-next.0 + - @backstage/plugin-kubernetes@0.8.1-next.0 + - @backstage/plugin-lighthouse@0.4.3-next.0 + - @backstage/plugin-linguist@0.1.3-next.0 + - @backstage/plugin-newrelic-dashboard@0.2.11-next.0 + - @backstage/plugin-org@0.6.8-next.0 + - @backstage/plugin-pagerduty@0.5.11-next.0 + - @backstage/plugin-playlist@0.1.9-next.0 + - @backstage/plugin-puppetdb@0.1.1-next.0 + - @backstage/plugin-rollbar@0.4.18-next.0 + - @backstage/plugin-sentry@0.5.3-next.0 + - @backstage/plugin-tech-insights@0.3.10-next.0 + - @backstage/plugin-todo@0.2.20-next.0 + - @backstage/plugin-user-settings@0.7.3-next.0 + - @backstage/integration-react@1.1.13-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.0.13-next.0 + - @backstage/app-defaults@1.3.1-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-apache-airflow@0.2.10 + - @backstage/plugin-gcalendar@0.3.13 + - @backstage/plugin-gcp-projects@0.3.36 + - @backstage/plugin-graphiql@0.2.49 + - @backstage/plugin-microsoft-calendar@0.1.2 + - @backstage/plugin-newrelic@0.3.35 + - @backstage/plugin-stackstorm@0.1.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-linguist-common@0.1.0 + - @backstage/plugin-permission-react@0.4.12 + - @backstage/plugin-search-common@1.2.3 + - @backstage/plugin-techdocs-react@1.1.5 + ## 0.2.82 ### Patch Changes diff --git a/packages/app/package.json b/packages/app/package.json index de491f349d..d4941ecd48 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "example-app", - "version": "0.2.82", + "version": "0.2.83-next.1", "private": true, "backstage": { "role": "frontend" @@ -47,6 +47,7 @@ "@backstage/plugin-microsoft-calendar": "workspace:^", "@backstage/plugin-newrelic": "workspace:^", "@backstage/plugin-newrelic-dashboard": "workspace:^", + "@backstage/plugin-octopus-deploy": "workspace:^", "@backstage/plugin-org": "workspace:^", "@backstage/plugin-pagerduty": "workspace:^", "@backstage/plugin-permission-react": "workspace:^", diff --git a/packages/app/src/components/Root/Root.tsx b/packages/app/src/components/Root/Root.tsx index 8b71637773..904fa4a7d4 100644 --- a/packages/app/src/components/Root/Root.tsx +++ b/packages/app/src/components/Root/Root.tsx @@ -17,11 +17,9 @@ import React, { PropsWithChildren } from 'react'; import { makeStyles } from '@material-ui/core'; import HomeIcon from '@material-ui/icons/Home'; -import ExtensionIcon from '@material-ui/icons/Extension'; import RuleIcon from '@material-ui/icons/AssignmentTurnedIn'; import MapIcon from '@material-ui/icons/MyLocation'; import LayersIcon from '@material-ui/icons/Layers'; -import LibraryBooks from '@material-ui/icons/LibraryBooks'; import PlaylistPlayIcon from '@material-ui/icons/PlaylistPlay'; import CreateComponentIcon from '@material-ui/icons/AddCircleOutline'; import SearchIcon from '@material-ui/icons/Search'; @@ -51,16 +49,9 @@ import { SidebarSubmenuItem, } from '@backstage/core-components'; import { MyGroupsSidebarItem } from '@backstage/plugin-org'; -import GroupIcon from '@material-ui/icons/People'; import { SearchModal } from '../search/SearchModal'; import Score from '@material-ui/icons/Score'; - -import ApiIcon from '@material-ui/icons/Extension'; -import ComponentIcon from '@material-ui/icons/Memory'; -import DomainIcon from '@material-ui/icons/Apartment'; -import ResourceIcon from '@material-ui/icons/Work'; -import SystemIcon from '@material-ui/icons/Category'; -import UserIcon from '@material-ui/icons/Person'; +import { useApp } from '@backstage/core-plugin-api'; const useSidebarLogoStyles = makeStyles({ root: { @@ -107,49 +98,57 @@ export const Root = ({ children }: PropsWithChildren<{}>) => ( + + - - diff --git a/packages/app/src/components/catalog/EntityPage.tsx b/packages/app/src/components/catalog/EntityPage.tsx index d2f6fbe109..026544ab26 100644 --- a/packages/app/src/components/catalog/EntityPage.tsx +++ b/packages/app/src/components/catalog/EntityPage.tsx @@ -41,6 +41,10 @@ import { isAzureDevOpsAvailable, isAzurePipelinesAvailable, } from '@backstage/plugin-azure-devops'; +import { + isOctopusDeployAvailable, + EntityOctopusDeployContent, +} from '@backstage/plugin-octopus-deploy'; import { EntityBadgesDialog } from '@backstage/plugin-badges'; import { EntityAboutCard, @@ -262,6 +266,10 @@ export const cicdContent = ( + + + + ({ + dialogTitle: { + gap: theme.spacing(1), + display: 'grid', + alignItems: 'center', + gridTemplateColumns: '1fr auto', + '&> button': { + marginTop: theme.spacing(1), + }, + }, container: { borderRadius: 30, display: 'flex', height: '2.4em', + padding: theme.spacing(1), }, filter: { '& + &': { @@ -83,7 +94,7 @@ export const SearchModal = ({ toggleModal }: { toggleModal: () => void }) => { }); const handleSearchBarKeyDown = useCallback( - (e: KeyboardEvent) => { + (e: KeyboardEvent) => { if (e.key === 'Enter') { toggleModal(); navigate(searchPagePath); @@ -95,13 +106,17 @@ export const SearchModal = ({ toggleModal }: { toggleModal: () => void }) => { return ( <> - + - + + + + + @@ -173,15 +188,15 @@ export const SearchModal = ({ toggleModal }: { toggleModal: () => void }) => { alignItems="center" > - - - View Full Results - - - + diff --git a/packages/app/src/components/search/SearchPage.tsx b/packages/app/src/components/search/SearchPage.tsx index 6c4f06aed9..ecae90a06a 100644 --- a/packages/app/src/components/search/SearchPage.tsx +++ b/packages/app/src/components/search/SearchPage.tsx @@ -44,9 +44,6 @@ import { ToolSearchResultListItem } from '@backstage/plugin-explore'; import BuildIcon from '@material-ui/icons/Build'; const useStyles = makeStyles((theme: Theme) => ({ - bar: { - padding: theme.spacing(1, 0), - }, filter: { '& + &': { marginTop: theme.spacing(2.5), @@ -70,9 +67,7 @@ const SearchPage = () => { - - - + {!isMobile && ( diff --git a/packages/backend-app-api/CHANGELOG.md b/packages/backend-app-api/CHANGELOG.md index 10bf48033c..00e7582ad3 100644 --- a/packages/backend-app-api/CHANGELOG.md +++ b/packages/backend-app-api/CHANGELOG.md @@ -1,5 +1,35 @@ # @backstage/backend-app-api +## 0.4.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/plugin-permission-node@0.7.8-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config-loader@1.3.0-next.0 + - @backstage/config@1.0.7 + +## 0.4.3-next.0 + +### Patch Changes + +- cf13b482f9e: Switch `configServiceFactory` to use `ConfigSources` from `@backstage/config-loader` to load config. +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/config-loader@1.3.0-next.0 + - @backstage/plugin-permission-node@0.7.8-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.4.2 ### Patch Changes diff --git a/packages/backend-app-api/package.json b/packages/backend-app-api/package.json index d599c713fa..a21484ff2e 100644 --- a/packages/backend-app-api/package.json +++ b/packages/backend-app-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-app-api", "description": "Core API used by Backstage backend apps", - "version": "0.4.2", + "version": "0.4.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-common/CHANGELOG.md b/packages/backend-common/CHANGELOG.md index 11d6cf96e8..fc6d99cf93 100644 --- a/packages/backend-common/CHANGELOG.md +++ b/packages/backend-common/CHANGELOG.md @@ -1,5 +1,35 @@ # @backstage/backend-common +## 0.18.5-next.1 + +### Patch Changes + +- 0297f7a54af: Remove the direct dependency on deprecated "request" library +- Updated dependencies + - @backstage/backend-app-api@0.4.3-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config-loader@1.3.0-next.0 + - @backstage/config@1.0.7 + - @backstage/integration-aws-node@0.1.2 + +## 0.18.5-next.0 + +### Patch Changes + +- 284db225083: Updated the `DatabaseManager` to include the plugin id in the Postgres application name of the database connections created for each plugin. +- 42d817e76ab: Added `HostDiscovery` to supersede deprecated `SingleHostDiscovery` (deprecated due to name) +- Updated dependencies + - @backstage/integration@1.4.5-next.0 + - @backstage/backend-app-api@0.4.3-next.0 + - @backstage/config-loader@1.3.0-next.0 + - @backstage/integration-aws-node@0.1.2 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/backend-dev-utils@0.1.1 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.18.4 ### Patch Changes diff --git a/packages/backend-common/api-report.md b/packages/backend-common/api-report.md index 640358664c..d40027cba9 100644 --- a/packages/backend-common/api-report.md +++ b/packages/backend-common/api-report.md @@ -472,6 +472,20 @@ export class GitlabUrlReader implements UrlReader { toString(): string; } +// @public +export class HostDiscovery implements PluginEndpointDiscovery { + static fromConfig( + config: Config, + options?: { + basePath?: string; + }, + ): HostDiscovery; + // (undocumented) + getBaseUrl(pluginId: string): Promise; + // (undocumented) + getExternalBaseUrl(pluginId: string): Promise; +} + export { isChildPath }; // @public @@ -728,19 +742,8 @@ export type ServiceBuilder = { // @public export function setRootLogger(newLogger: winston.Logger): void; -// @public -export class SingleHostDiscovery implements PluginEndpointDiscovery { - static fromConfig( - config: Config, - options?: { - basePath?: string; - }, - ): SingleHostDiscovery; - // (undocumented) - getBaseUrl(pluginId: string): Promise; - // (undocumented) - getExternalBaseUrl(pluginId: string): Promise; -} +// @public @deprecated +export const SingleHostDiscovery: typeof HostDiscovery; // @public export type StatusCheck = () => Promise; diff --git a/packages/backend-common/config.d.ts b/packages/backend-common/config.d.ts index 8dd2c2db84..dc2e2fa133 100644 --- a/packages/backend-common/config.d.ts +++ b/packages/backend-common/config.d.ts @@ -204,4 +204,24 @@ export interface Config { */ csp?: { [policyId: string]: string[] | false }; }; + + /** Discovery options. */ + discovery?: { + /** + * Endpoints + * + * A list of target baseUrls and the associated plugins. + */ + endpoints: { + /** + * The target baseUrl to use for the plugin + * + * Can be either a string or an object with internal and external keys. + * Targets with `{{pluginId}}` or `{{ pluginId }} in the url will be replaced with the pluginId. + */ + target: string | { internal: string; external: string }; + /** Array of plugins which use the target baseUrl. */ + plugins: string[]; + }[]; + }; } diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json index 7138414924..045a385218 100644 --- a/packages/backend-common/package.json +++ b/packages/backend-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-common", "description": "Common functionality library for Backstage backends", - "version": "0.18.4", + "version": "0.18.5-next.1", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { @@ -96,7 +96,6 @@ "node-forge": "^1.3.1", "pg": "^8.3.0", "raw-body": "^2.4.1", - "request": "^2.88.2", "selfsigned": "^2.0.0", "stoppable": "^1.1.0", "tar": "^6.1.12", diff --git a/packages/backend-common/src/discovery/HostDiscovery.test.ts b/packages/backend-common/src/discovery/HostDiscovery.test.ts new file mode 100644 index 0000000000..577da3a679 --- /dev/null +++ b/packages/backend-common/src/discovery/HostDiscovery.test.ts @@ -0,0 +1,239 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ConfigReader } from '@backstage/config'; +import { HostDiscovery } from './HostDiscovery'; + +describe('HostDiscovery', () => { + it('is created from config', async () => { + const discovery = HostDiscovery.fromConfig( + new ConfigReader({ + backend: { + baseUrl: 'http://localhost:40', + listen: { port: 80, host: 'localhost' }, + }, + }), + ); + + await expect(discovery.getBaseUrl('catalog')).resolves.toBe( + 'http://localhost:80/api/catalog', + ); + await expect(discovery.getExternalBaseUrl('catalog')).resolves.toBe( + 'http://localhost:40/api/catalog', + ); + }); + + it('can configure the base path', async () => { + const discovery = HostDiscovery.fromConfig( + new ConfigReader({ + backend: { + baseUrl: 'http://localhost:40', + listen: { port: 80, host: 'localhost' }, + }, + }), + { basePath: '/service' }, + ); + + await expect(discovery.getBaseUrl('catalog')).resolves.toBe( + 'http://localhost:80/service/catalog', + ); + await expect(discovery.getExternalBaseUrl('catalog')).resolves.toBe( + 'http://localhost:40/service/catalog', + ); + }); + + it.each([ + [{ listen: ':80' }, 'http://localhost:80'], + [{ listen: ':40', https: true }, 'https://localhost:40'], + [{ listen: '127.0.0.1:80' }, 'http://127.0.0.1:80'], + [{ listen: '127.0.0.1:80', https: true }, 'https://127.0.0.1:80'], + [{ listen: '0.0.0.0:40' }, 'http://127.0.0.1:40'], + [{ listen: { port: 80 } }, 'http://localhost:80'], + [{ listen: { port: 8000 } }, 'http://localhost:8000'], + [{ listen: { port: 80, host: '0.0.0.0' } }, 'http://127.0.0.1:80'], + [{ listen: { port: 80, host: '::' } }, 'http://localhost:80'], + [{ listen: { port: 80, host: '::1' } }, 'http://[::1]:80'], + [{ listen: { port: 90, host: '::2' }, https: true }, 'https://[::2]:90'], + ])('resolves internal baseUrl for %j as %s', async (config, expected) => { + const discovery = HostDiscovery.fromConfig( + new ConfigReader({ + backend: { + baseUrl: 'http://localhost:40', + ...config, + }, + }), + ); + + await expect(discovery.getBaseUrl('catalog')).resolves.toBe( + `${expected}/api/catalog`, + ); + }); + + it('uses plugin specific targets from config if provided', async () => { + const discovery = HostDiscovery.fromConfig( + new ConfigReader({ + backend: { + baseUrl: 'http://localhost:40', + listen: { port: 80, host: 'localhost' }, + }, + discovery: { + endpoints: [ + { + target: { + internal: 'http://catalog-backend-internal:8080/api/catalog', + external: 'http://catalog-backend-external:8080/api/catalog', + }, + plugins: ['catalog'], + }, + ], + }, + }), + ); + + await expect(discovery.getBaseUrl('catalog')).resolves.toBe( + 'http://catalog-backend-internal:8080/api/catalog', + ); + await expect(discovery.getExternalBaseUrl('catalog')).resolves.toBe( + 'http://catalog-backend-external:8080/api/catalog', + ); + }); + + it('uses a single target for internal and external for a plugin', async () => { + const discovery = HostDiscovery.fromConfig( + new ConfigReader({ + backend: { + baseUrl: 'http://localhost:40', + listen: { port: 80, host: 'localhost' }, + }, + discovery: { + endpoints: [ + { + target: 'http://catalog-backend:8080/api/catalog', + plugins: ['catalog'], + }, + ], + }, + }), + ); + + await expect(discovery.getBaseUrl('catalog')).resolves.toBe( + 'http://catalog-backend:8080/api/catalog', + ); + await expect(discovery.getExternalBaseUrl('catalog')).resolves.toBe( + 'http://catalog-backend:8080/api/catalog', + ); + }); + + it('defaults to the backend baseUrl when there is not an endpoint for a plugin', async () => { + const discovery = HostDiscovery.fromConfig( + new ConfigReader({ + backend: { + baseUrl: 'http://localhost:40', + listen: { port: 80, host: 'localhost' }, + }, + discovery: { + endpoints: [ + { + target: 'http://catalog-backend:8080/api/catalog', + plugins: ['catalog'], + }, + ], + }, + }), + ); + + await expect(discovery.getBaseUrl('scaffolder')).resolves.toBe( + 'http://localhost:80/api/scaffolder', + ); + await expect(discovery.getExternalBaseUrl('scaffolder')).resolves.toBe( + 'http://localhost:40/api/scaffolder', + ); + }); + + it('replaces {{pluginId}} or {{ pluginId }} in the target', async () => { + const discovery = HostDiscovery.fromConfig( + new ConfigReader({ + backend: { + baseUrl: 'http://localhost:40', + listen: { port: 80, host: 'localhost' }, + }, + discovery: { + endpoints: [ + { + target: 'http://common-backend:8080/api/{{pluginId}}', + plugins: ['catalog', 'docs'], + }, + { + target: { + internal: 'http://scaffolder-internal:8080/api/{{ pluginId }}', + external: 'http://scaffolder-external:8080/api/{{ pluginId }}', + }, + plugins: ['scaffolder'], + }, + ], + }, + }), + ); + + await expect(discovery.getBaseUrl('catalog')).resolves.toBe( + 'http://common-backend:8080/api/catalog', + ); + await expect(discovery.getExternalBaseUrl('catalog')).resolves.toBe( + 'http://common-backend:8080/api/catalog', + ); + await expect(discovery.getBaseUrl('docs')).resolves.toBe( + 'http://common-backend:8080/api/docs', + ); + await expect(discovery.getExternalBaseUrl('docs')).resolves.toBe( + 'http://common-backend:8080/api/docs', + ); + await expect(discovery.getBaseUrl('scaffolder')).resolves.toBe( + 'http://scaffolder-internal:8080/api/scaffolder', + ); + await expect(discovery.getExternalBaseUrl('scaffolder')).resolves.toBe( + 'http://scaffolder-external:8080/api/scaffolder', + ); + }); + + it('encodes the pluginId', async () => { + const discovery = HostDiscovery.fromConfig( + new ConfigReader({ + backend: { + baseUrl: 'http://localhost:40', + listen: { port: 80, host: 'localhost' }, + }, + discovery: { + endpoints: [ + { + target: 'http://common-backend:8080/api/{{pluginId}}', + plugins: ['plugin/beta'], + }, + ], + }, + }), + ); + + await expect(discovery.getBaseUrl('plugin/beta')).resolves.toBe( + 'http://common-backend:8080/api/plugin%2Fbeta', + ); + await expect(discovery.getBaseUrl('plugin/alpha')).resolves.toBe( + 'http://localhost:80/api/plugin%2Falpha', + ); + await expect(discovery.getExternalBaseUrl('plugin/alpha')).resolves.toBe( + 'http://localhost:40/api/plugin%2Falpha', + ); + }); +}); diff --git a/packages/backend-common/src/discovery/SingleHostDiscovery.ts b/packages/backend-common/src/discovery/HostDiscovery.ts similarity index 55% rename from packages/backend-common/src/discovery/SingleHostDiscovery.ts rename to packages/backend-common/src/discovery/HostDiscovery.ts index ded23b3374..abac4413be 100644 --- a/packages/backend-common/src/discovery/SingleHostDiscovery.ts +++ b/packages/backend-common/src/discovery/HostDiscovery.ts @@ -18,9 +18,11 @@ import { Config } from '@backstage/config'; import { PluginEndpointDiscovery } from './types'; import { readHttpServerOptions } from '@backstage/backend-app-api'; +type Target = string | { internal: string; external: string }; + /** - * SingleHostDiscovery is a basic PluginEndpointDiscovery implementation - * that assumes that all plugins are hosted in a single deployment. + * HostDiscovery is a basic PluginEndpointDiscovery implementation + * that can handle plugins that are hosted in a single or multiple deployments. * * The deployment may be scaled horizontally, as long as the external URL * is the same for all instances. However, internal URLs will always be @@ -28,13 +30,28 @@ import { readHttpServerOptions } from '@backstage/backend-app-api'; * * @public */ -export class SingleHostDiscovery implements PluginEndpointDiscovery { +export class HostDiscovery implements PluginEndpointDiscovery { /** - * Creates a new SingleHostDiscovery discovery instance by reading + * Creates a new HostDiscovery discovery instance by reading * from the `backend` config section, specifically the `.baseUrl` for * discovering the external URL, and the `.listen` and `.https` config * for the internal one. * + * Can be overridden in config by providing a target and corresponding plugins in `discovery.endpoints`. + * eg. + * ```yaml + * discovery: + * endpoints: + * - target: https://internal.example.com/internal-catalog + * plugins: [catalog] + * - target: https://internal.example.com/secure/api/{{pluginId}} + * plugins: [auth, permissions] + * - target: + * internal: https://internal.example.com/search + * external: https://example.com/search + * plugins: [search] + * ``` + * * The basePath defaults to `/api`, meaning the default full internal * path for the `catalog` plugin will be `http://localhost:7007/api/catalog`. */ @@ -63,22 +80,64 @@ export class SingleHostDiscovery implements PluginEndpointDiscovery { const internalBaseUrl = `${protocol}://${host}:${listenPort}`; - return new SingleHostDiscovery( + return new HostDiscovery( internalBaseUrl + basePath, externalBaseUrl + basePath, + config.getOptionalConfig('discovery'), ); } private constructor( private readonly internalBaseUrl: string, private readonly externalBaseUrl: string, + private readonly discoveryConfig: Config | undefined, ) {} + private getTargetFromConfig(pluginId: string, type: 'internal' | 'external') { + const endpoints = this.discoveryConfig?.getOptionalConfigArray('endpoints'); + + const target = endpoints + ?.find(endpoint => endpoint.getStringArray('plugins').includes(pluginId)) + ?.get('target'); + + if (!target) { + const baseUrl = + type === 'external' ? this.externalBaseUrl : this.internalBaseUrl; + + return `${baseUrl}/${encodeURIComponent(pluginId)}`; + } + + if (typeof target === 'string') { + return target.replace( + /\{\{\s*pluginId\s*\}\}/g, + encodeURIComponent(pluginId), + ); + } + + return target[type].replace( + /\{\{\s*pluginId\s*\}\}/g, + encodeURIComponent(pluginId), + ); + } + async getBaseUrl(pluginId: string): Promise { - return `${this.internalBaseUrl}/${pluginId}`; + return this.getTargetFromConfig(pluginId, 'internal'); } async getExternalBaseUrl(pluginId: string): Promise { - return `${this.externalBaseUrl}/${pluginId}`; + return this.getTargetFromConfig(pluginId, 'external'); } } + +/** + * SingleHostDiscovery is a basic PluginEndpointDiscovery implementation + * that assumes that all plugins are hosted in a single deployment. + * + * The deployment may be scaled horizontally, as long as the external URL + * is the same for all instances. However, internal URLs will always be + * resolved to the same host, so there won't be any balancing of internal traffic. + * + * @public + * @deprecated Use {@link HostDiscovery} instead + */ +export const SingleHostDiscovery = HostDiscovery; diff --git a/packages/backend-common/src/discovery/SingleHostDiscovery.test.ts b/packages/backend-common/src/discovery/SingleHostDiscovery.test.ts deleted file mode 100644 index ce4a5ae261..0000000000 --- a/packages/backend-common/src/discovery/SingleHostDiscovery.test.ts +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { ConfigReader } from '@backstage/config'; -import { SingleHostDiscovery } from './SingleHostDiscovery'; - -describe('SingleHostDiscovery', () => { - it('is created from config', async () => { - const discovery = SingleHostDiscovery.fromConfig( - new ConfigReader({ - backend: { - baseUrl: 'http://localhost:40', - listen: { port: 80, host: 'localhost' }, - }, - }), - ); - - await expect(discovery.getBaseUrl('catalog')).resolves.toBe( - 'http://localhost:80/api/catalog', - ); - await expect(discovery.getExternalBaseUrl('catalog')).resolves.toBe( - 'http://localhost:40/api/catalog', - ); - }); - - it('can configure the base path', async () => { - const discovery = SingleHostDiscovery.fromConfig( - new ConfigReader({ - backend: { - baseUrl: 'http://localhost:40', - listen: { port: 80, host: 'localhost' }, - }, - }), - { basePath: '/service' }, - ); - - await expect(discovery.getBaseUrl('catalog')).resolves.toBe( - 'http://localhost:80/service/catalog', - ); - await expect(discovery.getExternalBaseUrl('catalog')).resolves.toBe( - 'http://localhost:40/service/catalog', - ); - }); - - it.each([ - [{ listen: ':80' }, 'http://localhost:80'], - [{ listen: ':40', https: true }, 'https://localhost:40'], - [{ listen: '127.0.0.1:80' }, 'http://127.0.0.1:80'], - [{ listen: '127.0.0.1:80', https: true }, 'https://127.0.0.1:80'], - [{ listen: '0.0.0.0:40' }, 'http://127.0.0.1:40'], - [{ listen: { port: 80 } }, 'http://localhost:80'], - [{ listen: { port: 8000 } }, 'http://localhost:8000'], - [{ listen: { port: 80, host: '0.0.0.0' } }, 'http://127.0.0.1:80'], - [{ listen: { port: 80, host: '::' } }, 'http://localhost:80'], - [{ listen: { port: 80, host: '::1' } }, 'http://[::1]:80'], - [{ listen: { port: 90, host: '::2' }, https: true }, 'https://[::2]:90'], - ])('resolves internal baseUrl for %j as %s', async (config, expected) => { - const discovery = SingleHostDiscovery.fromConfig( - new ConfigReader({ - backend: { - baseUrl: 'http://localhost:40', - ...config, - }, - }), - ); - - await expect(discovery.getBaseUrl('catalog')).resolves.toBe( - `${expected}/api/catalog`, - ); - }); -}); diff --git a/packages/backend-common/src/discovery/index.ts b/packages/backend-common/src/discovery/index.ts index 5b62d6f4e4..5c7f5300c0 100644 --- a/packages/backend-common/src/discovery/index.ts +++ b/packages/backend-common/src/discovery/index.ts @@ -13,6 +13,5 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -export { SingleHostDiscovery } from './SingleHostDiscovery'; +export { HostDiscovery, SingleHostDiscovery } from './HostDiscovery'; export type { PluginEndpointDiscovery } from './types'; diff --git a/packages/backend-common/src/util/KubernetesContainerRunner.ts b/packages/backend-common/src/util/KubernetesContainerRunner.ts index f3590a0bdc..4a9c447430 100644 --- a/packages/backend-common/src/util/KubernetesContainerRunner.ts +++ b/packages/backend-common/src/util/KubernetesContainerRunner.ts @@ -30,7 +30,6 @@ import { Watch, } from '@kubernetes/client-node'; import { v4 as uuid } from 'uuid'; -import { Request } from 'request'; /** * An existing Kubernetes volume that will be used as base for mounts. @@ -228,7 +227,7 @@ export class KubernetesContainerRunner implements ContainerRunner { taskId: string, callback: (pod: V1Pod) => void, errorCallback: (reason: any) => void, - ): Promise { + ): Promise<{ abort: () => void }> { const watch = new Watch(this.kubeConfig); const labelSelector = `task=${taskId}`; return watch.watch( @@ -251,8 +250,8 @@ export class KubernetesContainerRunner implements ContainerRunner { taskId: string, logStream: Writable, ): { promise: Promise; close: () => Promise } { - let log: Promise; - let req: Promise; + let log: Promise<{ abort: () => void }>; + let req: Promise<{ abort: () => void }>; const watchPromise = new Promise((_, reject) => { req = this.watchPod( taskId, @@ -299,7 +298,7 @@ export class KubernetesContainerRunner implements ContainerRunner { promise: Promise; close: () => Promise; } { - let req: Promise; + let req: Promise<{ abort: () => void }>; const promise = new Promise(async (resolve, reject) => { req = this.watchPod( taskId, diff --git a/packages/backend-defaults/CHANGELOG.md b/packages/backend-defaults/CHANGELOG.md index 1a014542a4..52043b4ecf 100644 --- a/packages/backend-defaults/CHANGELOG.md +++ b/packages/backend-defaults/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/backend-defaults +## 0.1.10-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-app-api@0.4.3-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + +## 0.1.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-app-api@0.4.3-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + ## 0.1.9 ### Patch Changes diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index bc5e7d3750..d99e462efa 100644 --- a/packages/backend-defaults/package.json +++ b/packages/backend-defaults/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-defaults", "description": "Backend defaults used by Backstage backend apps", - "version": "0.1.9", + "version": "0.1.10-next.1", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-next/CHANGELOG.md b/packages/backend-next/CHANGELOG.md index c995521426..2eea18b4af 100644 --- a/packages/backend-next/CHANGELOG.md +++ b/packages/backend-next/CHANGELOG.md @@ -1,5 +1,48 @@ # example-backend-next +## 0.0.11-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.11.0-next.1 + - @backstage/plugin-catalog-backend@1.9.1-next.1 + - @backstage/plugin-scaffolder-backend@1.13.2-next.1 + - @backstage/backend-defaults@0.1.10-next.1 + - @backstage/plugin-app-backend@0.3.45-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/plugin-permission-backend@0.5.20-next.1 + - @backstage/plugin-permission-node@0.7.8-next.1 + - @backstage/plugin-search-backend@1.3.1-next.1 + - @backstage/plugin-search-backend-module-catalog@0.1.1-next.1 + - @backstage/plugin-search-backend-module-explore@0.1.1-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.1-next.1 + - @backstage/plugin-search-backend-node@1.2.1-next.1 + - @backstage/plugin-techdocs-backend@1.6.2-next.1 + - @backstage/plugin-todo-backend@0.1.42-next.1 + +## 0.0.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-node@0.7.8-next.0 + - @backstage/plugin-scaffolder-backend@1.13.2-next.0 + - @backstage/plugin-kubernetes-backend@0.11.0-next.0 + - @backstage/backend-defaults@0.1.10-next.0 + - @backstage/plugin-app-backend@0.3.45-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/plugin-catalog-backend@1.9.1-next.0 + - @backstage/plugin-search-backend@1.3.1-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.1-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.1-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.1-next.0 + - @backstage/plugin-techdocs-backend@1.6.2-next.0 + - @backstage/plugin-permission-backend@0.5.20-next.0 + - @backstage/plugin-search-backend-node@1.2.1-next.0 + - @backstage/plugin-todo-backend@0.1.42-next.0 + - @backstage/plugin-permission-common@0.7.5 + ## 0.0.10 ### Patch Changes diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json index ec4a4eecc5..bf913492ac 100644 --- a/packages/backend-next/package.json +++ b/packages/backend-next/package.json @@ -1,6 +1,6 @@ { "name": "example-backend-next", - "version": "0.0.10", + "version": "0.0.11-next.1", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/backend-openapi-utils/CHANGELOG.md b/packages/backend-openapi-utils/CHANGELOG.md index c902572079..015a54cf45 100644 --- a/packages/backend-openapi-utils/CHANGELOG.md +++ b/packages/backend-openapi-utils/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/backend-openapi-utils +## 0.0.2-next.0 + +### Patch Changes + +- 27956d78671: Adjusted README accordingly after the generated output now has a `.generated.ts` extension + ## 0.0.1 ### Patch Changes diff --git a/packages/backend-openapi-utils/README.md b/packages/backend-openapi-utils/README.md index 51455ccccb..fe22ac2cf2 100644 --- a/packages/backend-openapi-utils/README.md +++ b/packages/backend-openapi-utils/README.md @@ -8,18 +8,18 @@ This package is meant to provide a typed Express router for an OpenAPI spec. Bas ### Configuration -1. Run `yarn --cwd backstage-cli package schema:openapi:generate` to translate your `src/schema/openapi.yaml` to a new Typescript file in `src/schema/openapi.ts`. In the case of projects that require linting + a license header, you will need to do this manually. +1. Run `yarn --cwd backstage-cli package schema:openapi:generate` to translate your `src/schema/openapi.yaml` to a new Typescript file in `src/schema/openapi.generated.ts`. The command will try to execute both a lint and prettier step on the generated file, where applicable. 2. In your plugin's `src/service/createRouter.ts`, ```ts -import {ApiRouter} from `@backstage/backend-openapi-utils`; -import spec from '../schema/openapi' -... - -export function createRouter(){ +import { ApiRouter } from `@backstage/backend-openapi-utils`; +import spec from '../schema/openapi.generated'; +// ... +export function createRouter() { const router = Router() as ApiRouter; - ... + // ... + return router; } ``` diff --git a/packages/backend-openapi-utils/package.json b/packages/backend-openapi-utils/package.json index 9fb04150a4..e59da29840 100644 --- a/packages/backend-openapi-utils/package.json +++ b/packages/backend-openapi-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-openapi-utils", "description": "OpenAPI typescript support.", - "version": "0.0.1", + "version": "0.0.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/backend-plugin-api/CHANGELOG.md b/packages/backend-plugin-api/CHANGELOG.md index 99d7d615d6..9a28b1dd3a 100644 --- a/packages/backend-plugin-api/CHANGELOG.md +++ b/packages/backend-plugin-api/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/backend-plugin-api +## 0.5.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/config@1.0.7 + +## 0.5.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + ## 0.5.1 ### Patch Changes diff --git a/packages/backend-plugin-api/package.json b/packages/backend-plugin-api/package.json index 65ba128cde..58e103e647 100644 --- a/packages/backend-plugin-api/package.json +++ b/packages/backend-plugin-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-plugin-api", "description": "Core API used by Backstage backend plugins", - "version": "0.5.1", + "version": "0.5.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-tasks/CHANGELOG.md b/packages/backend-tasks/CHANGELOG.md index aaddba05a2..1ef0203eb1 100644 --- a/packages/backend-tasks/CHANGELOG.md +++ b/packages/backend-tasks/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/backend-tasks +## 0.5.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + +## 0.5.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.5.1 ### Patch Changes diff --git a/packages/backend-tasks/package.json b/packages/backend-tasks/package.json index 41244a9c5f..b0f5c3afb3 100644 --- a/packages/backend-tasks/package.json +++ b/packages/backend-tasks/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-tasks", "description": "Common distributed task management library for Backstage backends", - "version": "0.5.1", + "version": "0.5.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-test-utils/CHANGELOG.md b/packages/backend-test-utils/CHANGELOG.md index 7ad5aedb13..3ce5006003 100644 --- a/packages/backend-test-utils/CHANGELOG.md +++ b/packages/backend-test-utils/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/backend-test-utils +## 0.1.37-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-app-api@0.4.3-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 0.1.37-next.0 + +### Patch Changes + +- b1eb268bf9d: Added `POSTGRES_11` and `POSTGRES_12` as supported test database IDs. +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-app-api@0.4.3-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.1.36 ### Patch Changes diff --git a/packages/backend-test-utils/api-report.md b/packages/backend-test-utils/api-report.md index c13d1bb859..358b51071f 100644 --- a/packages/backend-test-utils/api-report.md +++ b/packages/backend-test-utils/api-report.md @@ -169,6 +169,8 @@ export interface TestBackendOptions< // @public export type TestDatabaseId = | 'POSTGRES_13' + | 'POSTGRES_12' + | 'POSTGRES_11' | 'POSTGRES_9' | 'MYSQL_8' | 'SQLITE_3'; diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json index fc522128fa..b23d3b411e 100644 --- a/packages/backend-test-utils/package.json +++ b/packages/backend-test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-test-utils", "description": "Test helpers library for Backstage backends", - "version": "0.1.36", + "version": "0.1.37-next.1", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-test-utils/src/database/TestDatabases.test.ts b/packages/backend-test-utils/src/database/TestDatabases.test.ts index 691ac5259e..be29a42806 100644 --- a/packages/backend-test-utils/src/database/TestDatabases.test.ts +++ b/packages/backend-test-utils/src/database/TestDatabases.test.ts @@ -36,7 +36,7 @@ describe('TestDatabases', () => { process.env = OLD_ENV; }); - describe('each', () => { + describe('each create', () => { const dbs = TestDatabases.create(); it.each(dbs.eachSupportedId())( @@ -56,81 +56,160 @@ describe('TestDatabases', () => { ); }); - itIfDocker('obeys a provided connection string for postgres 13', async () => { + describe('each connect', () => { const dbs = TestDatabases.create(); - const { host, port, user, password, stop } = await startPostgresContainer( - 'postgres:13', + + itIfDocker( + 'obeys a provided connection string for postgres 13', + async () => { + const { host, port, user, password, stop } = + await startPostgresContainer('postgres:13'); + + try { + // Leave a mark + process.env.BACKSTAGE_TEST_DATABASE_POSTGRES13_CONNECTION_STRING = `postgresql://${user}:${password}@${host}:${port}`; + const input = await dbs.init('POSTGRES_13'); + await input.schema.createTable('a', table => + table.string('x').primary(), + ); + await input.insert({ x: 'y' }).into('a'); + + // Look for the mark + const database = input.client.config.connection.database; + const output = knexFactory({ + client: 'pg', + connection: { host, port, user, password, database }, + }); + // eslint-disable-next-line jest/no-standalone-expect + await expect(output.select('x').from('a')).resolves.toEqual([ + { x: 'y' }, + ]); + } finally { + await stop(); + } + }, ); - try { - // Leave a mark - process.env.BACKSTAGE_TEST_DATABASE_POSTGRES13_CONNECTION_STRING = `postgresql://${user}:${password}@${host}:${port}`; - const input = await dbs.init('POSTGRES_13'); - await input.schema.createTable('a', table => table.string('x').primary()); - await input.insert({ x: 'y' }).into('a'); + itIfDocker( + 'obeys a provided connection string for postgres 12', + async () => { + const { host, port, user, password, stop } = + await startPostgresContainer('postgres:12'); - // Look for the mark - const database = input.client.config.connection.database; - const output = knexFactory({ - client: 'pg', - connection: { host, port, user, password, database }, - }); - // eslint-disable-next-line jest/no-standalone-expect - await expect(output.select('x').from('a')).resolves.toEqual([{ x: 'y' }]); - } finally { - await stop(); - } - }); + try { + // Leave a mark + process.env.BACKSTAGE_TEST_DATABASE_POSTGRES12_CONNECTION_STRING = `postgresql://${user}:${password}@${host}:${port}`; + const input = await dbs.init('POSTGRES_12'); + await input.schema.createTable('a', table => + table.string('x').primary(), + ); + await input.insert({ x: 'y' }).into('a'); - itIfDocker('obeys a provided connection string for postgres 9', async () => { - const dbs = TestDatabases.create(); - const { host, port, user, password, stop } = await startPostgresContainer( - 'postgres:9', + // Look for the mark + const database = input.client.config.connection.database; + const output = knexFactory({ + client: 'pg', + connection: { host, port, user, password, database }, + }); + // eslint-disable-next-line jest/no-standalone-expect + await expect(output.select('x').from('a')).resolves.toEqual([ + { x: 'y' }, + ]); + } finally { + await stop(); + } + }, ); - try { - // Leave a mark - process.env.BACKSTAGE_TEST_DATABASE_POSTGRES9_CONNECTION_STRING = `postgresql://${user}:${password}@${host}:${port}`; - const input = await dbs.init('POSTGRES_9'); - await input.schema.createTable('a', table => table.string('x').primary()); - await input.insert({ x: 'y' }).into('a'); + itIfDocker( + 'obeys a provided connection string for postgres 11', + async () => { + const { host, port, user, password, stop } = + await startPostgresContainer('postgres:11'); - // Look for the mark - const database = input.client.config.connection.database; - const output = knexFactory({ - client: 'pg', - connection: { host, port, user, password, database }, - }); - // eslint-disable-next-line jest/no-standalone-expect - await expect(output.select('x').from('a')).resolves.toEqual([{ x: 'y' }]); - } finally { - await stop(); - } - }); + try { + // Leave a mark + process.env.BACKSTAGE_TEST_DATABASE_POSTGRES11_CONNECTION_STRING = `postgresql://${user}:${password}@${host}:${port}`; + const input = await dbs.init('POSTGRES_11'); + await input.schema.createTable('a', table => + table.string('x').primary(), + ); + await input.insert({ x: 'y' }).into('a'); - itIfDocker('obeys a provided connection string for mysql 8', async () => { - const dbs = TestDatabases.create(); - const { host, port, user, password, stop } = await startMysqlContainer( - 'mysql:8', + // Look for the mark + const database = input.client.config.connection.database; + const output = knexFactory({ + client: 'pg', + connection: { host, port, user, password, database }, + }); + // eslint-disable-next-line jest/no-standalone-expect + await expect(output.select('x').from('a')).resolves.toEqual([ + { x: 'y' }, + ]); + } finally { + await stop(); + } + }, ); - try { - // Leave a mark - process.env.BACKSTAGE_TEST_DATABASE_MYSQL8_CONNECTION_STRING = `mysql://${user}:${password}@${host}:${port}/ignored`; - const input = await dbs.init('MYSQL_8'); - await input.schema.createTable('a', table => table.string('x').primary()); - await input.insert({ x: 'y' }).into('a'); + itIfDocker( + 'obeys a provided connection string for postgres 9', + async () => { + const { host, port, user, password, stop } = + await startPostgresContainer('postgres:9'); - // Look for the mark - const database = input.client.config.connection.database; - const output = knexFactory({ - client: 'mysql2', - connection: { host, port, user, password, database }, - }); - // eslint-disable-next-line jest/no-standalone-expect - await expect(output.select('x').from('a')).resolves.toEqual([{ x: 'y' }]); - } finally { - await stop(); - } + try { + // Leave a mark + process.env.BACKSTAGE_TEST_DATABASE_POSTGRES9_CONNECTION_STRING = `postgresql://${user}:${password}@${host}:${port}`; + const input = await dbs.init('POSTGRES_9'); + await input.schema.createTable('a', table => + table.string('x').primary(), + ); + await input.insert({ x: 'y' }).into('a'); + + // Look for the mark + const database = input.client.config.connection.database; + const output = knexFactory({ + client: 'pg', + connection: { host, port, user, password, database }, + }); + // eslint-disable-next-line jest/no-standalone-expect + await expect(output.select('x').from('a')).resolves.toEqual([ + { x: 'y' }, + ]); + } finally { + await stop(); + } + }, + ); + + itIfDocker('obeys a provided connection string for mysql 8', async () => { + const { host, port, user, password, stop } = await startMysqlContainer( + 'mysql:8', + ); + + try { + // Leave a mark + process.env.BACKSTAGE_TEST_DATABASE_MYSQL8_CONNECTION_STRING = `mysql://${user}:${password}@${host}:${port}/ignored`; + const input = await dbs.init('MYSQL_8'); + await input.schema.createTable('a', table => + table.string('x').primary(), + ); + await input.insert({ x: 'y' }).into('a'); + + // Look for the mark + const database = input.client.config.connection.database; + const output = knexFactory({ + client: 'mysql2', + connection: { host, port, user, password, database }, + }); + // eslint-disable-next-line jest/no-standalone-expect + await expect(output.select('x').from('a')).resolves.toEqual([ + { x: 'y' }, + ]); + } finally { + await stop(); + } + }); }); }); diff --git a/packages/backend-test-utils/src/database/types.ts b/packages/backend-test-utils/src/database/types.ts index 083853ac78..89ec21e7cc 100644 --- a/packages/backend-test-utils/src/database/types.ts +++ b/packages/backend-test-utils/src/database/types.ts @@ -24,6 +24,8 @@ import { Knex } from 'knex'; */ export type TestDatabaseId = | 'POSTGRES_13' + | 'POSTGRES_12' + | 'POSTGRES_11' | 'POSTGRES_9' | 'MYSQL_8' | 'SQLITE_3'; @@ -50,6 +52,20 @@ export const allDatabases: Record = connectionStringEnvironmentVariableName: 'BACKSTAGE_TEST_DATABASE_POSTGRES13_CONNECTION_STRING', }, + POSTGRES_12: { + name: 'Postgres 12.x', + driver: 'pg', + dockerImageName: 'postgres:12', + connectionStringEnvironmentVariableName: + 'BACKSTAGE_TEST_DATABASE_POSTGRES12_CONNECTION_STRING', + }, + POSTGRES_11: { + name: 'Postgres 11.x', + driver: 'pg', + dockerImageName: 'postgres:11', + connectionStringEnvironmentVariableName: + 'BACKSTAGE_TEST_DATABASE_POSTGRES11_CONNECTION_STRING', + }, POSTGRES_9: { name: 'Postgres 9.x', driver: 'pg', diff --git a/packages/backend-test-utils/src/next/services/MockRootLoggerService.test.ts b/packages/backend-test-utils/src/next/services/MockRootLoggerService.test.ts index a3cbb5c384..007b24faeb 100644 --- a/packages/backend-test-utils/src/next/services/MockRootLoggerService.test.ts +++ b/packages/backend-test-utils/src/next/services/MockRootLoggerService.test.ts @@ -39,7 +39,7 @@ describe('MockRootLoggerService', () => { expect(console.debug).not.toHaveBeenCalled(); }); - it('shuld be able to set none level', () => { + it('should be able to set none level', () => { jest.spyOn(console, 'error').mockImplementation(() => {}); jest.spyOn(console, 'warn').mockImplementation(() => {}); jest.spyOn(console, 'info').mockImplementation(() => {}); @@ -57,7 +57,7 @@ describe('MockRootLoggerService', () => { expect(console.debug).not.toHaveBeenCalled(); }); - it('shuld be able to set error level', () => { + it('should be able to set error level', () => { jest.spyOn(console, 'error').mockImplementation(() => {}); jest.spyOn(console, 'warn').mockImplementation(() => {}); jest.spyOn(console, 'info').mockImplementation(() => {}); @@ -75,7 +75,7 @@ describe('MockRootLoggerService', () => { expect(console.debug).not.toHaveBeenCalled(); }); - it('shuld be able to set warn level', () => { + it('should be able to set warn level', () => { jest.spyOn(console, 'error').mockImplementation(() => {}); jest.spyOn(console, 'warn').mockImplementation(() => {}); jest.spyOn(console, 'info').mockImplementation(() => {}); @@ -93,7 +93,7 @@ describe('MockRootLoggerService', () => { expect(console.debug).not.toHaveBeenCalled(); }); - it('shuld be able to set info level', () => { + it('should be able to set info level', () => { jest.spyOn(console, 'error').mockImplementation(() => {}); jest.spyOn(console, 'warn').mockImplementation(() => {}); jest.spyOn(console, 'info').mockImplementation(() => {}); @@ -111,7 +111,7 @@ describe('MockRootLoggerService', () => { expect(console.debug).not.toHaveBeenCalled(); }); - it('shuld be able to set debug level', () => { + it('should be able to set debug level', () => { jest.spyOn(console, 'error').mockImplementation(() => {}); jest.spyOn(console, 'warn').mockImplementation(() => {}); jest.spyOn(console, 'info').mockImplementation(() => {}); diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index 31719a92ec..e676df6839 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,102 @@ # example-backend +## 0.2.83-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-kubernetes-backend@0.11.0-next.1 + - @backstage/plugin-catalog-backend@1.9.1-next.1 + - @backstage/plugin-jenkins-backend@0.1.35-next.1 + - @backstage/plugin-scaffolder-backend@1.13.2-next.1 + - example-app@0.2.83-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-adr-backend@0.3.3-next.1 + - @backstage/plugin-app-backend@0.3.45-next.1 + - @backstage/plugin-auth-backend@0.18.3-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/plugin-azure-devops-backend@0.3.24-next.1 + - @backstage/plugin-azure-sites-backend@0.1.7-next.1 + - @backstage/plugin-badges-backend@0.1.39-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/plugin-code-coverage-backend@0.2.11-next.1 + - @backstage/plugin-entity-feedback-backend@0.1.3-next.1 + - @backstage/plugin-events-backend@0.2.6-next.1 + - @backstage/plugin-explore-backend@0.0.7-next.1 + - @backstage/plugin-graphql-backend@0.1.35-next.1 + - @backstage/plugin-kafka-backend@0.2.38-next.1 + - @backstage/plugin-lighthouse-backend@0.2.1-next.1 + - @backstage/plugin-linguist-backend@0.2.2-next.1 + - @backstage/plugin-permission-backend@0.5.20-next.1 + - @backstage/plugin-permission-node@0.7.8-next.1 + - @backstage/plugin-playlist-backend@0.3.1-next.1 + - @backstage/plugin-proxy-backend@0.2.39-next.1 + - @backstage/plugin-rollbar-backend@0.1.42-next.1 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.14-next.1 + - @backstage/plugin-search-backend@1.3.1-next.1 + - @backstage/plugin-search-backend-module-elasticsearch@1.2.1-next.1 + - @backstage/plugin-search-backend-module-pg@0.5.6-next.1 + - @backstage/plugin-search-backend-node@1.2.1-next.1 + - @backstage/plugin-tech-insights-backend@0.5.11-next.1 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.29-next.1 + - @backstage/plugin-tech-insights-node@0.4.3-next.1 + - @backstage/plugin-techdocs-backend@1.6.2-next.1 + - @backstage/plugin-todo-backend@0.1.42-next.1 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6-next.1 + +## 0.2.83-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-permission-node@0.7.8-next.0 + - @backstage/plugin-scaffolder-backend@1.13.2-next.0 + - @backstage/plugin-kubernetes-backend@0.11.0-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-app-backend@0.3.45-next.0 + - @backstage/plugin-auth-backend@0.18.3-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/plugin-catalog-backend@1.9.1-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/plugin-entity-feedback-backend@0.1.3-next.0 + - @backstage/plugin-events-backend@0.2.6-next.0 + - @backstage/plugin-playlist-backend@0.3.1-next.0 + - @backstage/plugin-rollbar-backend@0.1.42-next.0 + - @backstage/plugin-search-backend@1.3.1-next.0 + - @backstage/plugin-search-backend-module-pg@0.5.6-next.0 + - @backstage/plugin-tech-insights-backend@0.5.11-next.0 + - @backstage/plugin-techdocs-backend@1.6.2-next.0 + - example-app@0.2.83-next.0 + - @backstage/plugin-adr-backend@0.3.3-next.0 + - @backstage/plugin-azure-devops-backend@0.3.24-next.0 + - @backstage/plugin-azure-sites-backend@0.1.7-next.0 + - @backstage/plugin-badges-backend@0.1.39-next.0 + - @backstage/plugin-code-coverage-backend@0.2.11-next.0 + - @backstage/plugin-explore-backend@0.0.7-next.0 + - @backstage/plugin-graphql-backend@0.1.35-next.0 + - @backstage/plugin-jenkins-backend@0.1.35-next.0 + - @backstage/plugin-kafka-backend@0.2.38-next.0 + - @backstage/plugin-lighthouse-backend@0.2.1-next.0 + - @backstage/plugin-linguist-backend@0.2.2-next.0 + - @backstage/plugin-permission-backend@0.5.20-next.0 + - @backstage/plugin-proxy-backend@0.2.39-next.0 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.14-next.0 + - @backstage/plugin-search-backend-module-elasticsearch@1.2.1-next.0 + - @backstage/plugin-search-backend-node@1.2.1-next.0 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.29-next.0 + - @backstage/plugin-tech-insights-node@0.4.3-next.0 + - @backstage/plugin-todo-backend@0.1.42-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6-next.0 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + ## 0.2.82 ### Patch Changes diff --git a/packages/backend/package.json b/packages/backend/package.json index f23aabf020..900ee150fc 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "example-backend", - "version": "0.2.82", + "version": "0.2.83-next.1", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index f388a6d6c7..a8c7207650 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/cli +## 0.22.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config-loader@1.3.0-next.0 + - @backstage/cli-common@0.1.12 + - @backstage/cli-node@0.1.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/eslint-plugin@0.1.3 + - @backstage/release-manifests@0.0.9 + - @backstage/types@1.0.2 + ## 0.22.6 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 19e4f64210..9de7b3dbb2 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/cli", "description": "CLI for developing Backstage plugins and apps", - "version": "0.22.6", + "version": "0.22.7-next.0", "publishConfig": { "access": "public" }, diff --git a/packages/config-loader/CHANGELOG.md b/packages/config-loader/CHANGELOG.md index f1bd4a6074..9b2d34f957 100644 --- a/packages/config-loader/CHANGELOG.md +++ b/packages/config-loader/CHANGELOG.md @@ -1,5 +1,54 @@ # @backstage/config-loader +## 1.3.0-next.0 + +### Minor Changes + +- 201206132da: Introduced a new config source system to replace `loadConfig`. There is a new `ConfigSource` interface along with utilities provided by `ConfigSources`, as well as a number of built-in configuration source implementations. The new system is more flexible and makes it easier to create new and reusable sources of configuration, such as loading configuration from secret providers. + + The following is an example of how to load configuration using the default behavior: + + ```ts + const source = ConfigSources.default({ + argv: options?.argv, + remote: options?.remote, + }); + const config = await ConfigSources.toConfig(source); + ``` + + The `ConfigSource` interface looks like this: + + ```ts + export interface ConfigSource { + readConfigData(options?: ReadConfigDataOptions): AsyncConfigSourceIterator; + } + ``` + + It is best implemented using an async iterator: + + ```ts + class MyConfigSource implements ConfigSource { + async *readConfigData() { + yield { + config: [ + { + context: 'example', + data: { backend: { baseUrl: 'http://localhost' } }, + }, + ], + }; + } + } + ``` + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 1.2.0 ### Minor Changes diff --git a/packages/config-loader/api-report.md b/packages/config-loader/api-report.md index 662446ad03..1cc353fd4c 100644 --- a/packages/config-loader/api-report.md +++ b/packages/config-loader/api-report.md @@ -11,23 +11,13 @@ import { JSONSchema7 } from 'json-schema'; import { Observable } from '@backstage/types'; // @public -export interface AsyncConfigSourceIterator - extends AsyncIterator< - { - configs: ConfigSourceData[]; - }, - void, - void - > { - // (undocumented) - [Symbol.asyncIterator](): AsyncIterator< - { - configs: ConfigSourceData[]; - }, - void, - void - >; -} +export type AsyncConfigSourceGenerator = AsyncGenerator< + { + configs: ConfigSourceData[]; + }, + void, + void +>; // @public export interface BaseConfigSourcesOptions { @@ -65,7 +55,7 @@ export type ConfigSchemaProcessingOptions = { // @public export interface ConfigSource { // (undocumented) - readConfigData(options?: ReadConfigDataOptions): AsyncConfigSourceIterator; + readConfigData(options?: ReadConfigDataOptions): AsyncConfigSourceGenerator; } // @public @@ -126,7 +116,7 @@ export type ConfigVisibility = 'frontend' | 'backend' | 'secret'; export class EnvConfigSource implements ConfigSource { static create(options: EnvConfigSourceOptions): ConfigSource; // (undocumented) - readConfigData(): AsyncConfigSourceIterator; + readConfigData(): AsyncConfigSourceGenerator; // (undocumented) toString(): string; } @@ -143,7 +133,7 @@ export type EnvFunc = (name: string) => Promise; export class FileConfigSource implements ConfigSource { static create(options: FileConfigSourceOptions): ConfigSource; // (undocumented) - readConfigData(options?: ReadConfigDataOptions): AsyncConfigSourceIterator; + readConfigData(options?: ReadConfigDataOptions): AsyncConfigSourceGenerator; // (undocumented) toString(): string; } @@ -209,7 +199,7 @@ export class MutableConfigSource implements ConfigSource { // (undocumented) readConfigData( options?: ReadConfigDataOptions | undefined, - ): AsyncConfigSourceIterator; + ): AsyncConfigSourceGenerator; setData(data: JsonObject): void; // (undocumented) toString(): string; @@ -240,7 +230,7 @@ export class RemoteConfigSource implements ConfigSource { // (undocumented) readConfigData( options?: ReadConfigDataOptions | undefined, - ): AsyncConfigSourceIterator; + ): AsyncConfigSourceGenerator; // (undocumented) toString(): string; } @@ -256,7 +246,7 @@ export interface RemoteConfigSourceOptions { export class StaticConfigSource implements ConfigSource { static create(options: StaticConfigSourceOptions): ConfigSource; // (undocumented) - readConfigData(): AsyncConfigSourceIterator; + readConfigData(): AsyncConfigSourceGenerator; // (undocumented) toString(): string; } diff --git a/packages/config-loader/package.json b/packages/config-loader/package.json index bf2b82345b..0aa071c206 100644 --- a/packages/config-loader/package.json +++ b/packages/config-loader/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/config-loader", "description": "Config loading functionality used by Backstage backend, and CLI", - "version": "1.2.0", + "version": "1.3.0-next.0", "publishConfig": { "access": "public", "main": "dist/index.cjs.js", diff --git a/packages/config-loader/src/sources/EnvConfigSource.ts b/packages/config-loader/src/sources/EnvConfigSource.ts index 0e42bfe79a..5b4590e107 100644 --- a/packages/config-loader/src/sources/EnvConfigSource.ts +++ b/packages/config-loader/src/sources/EnvConfigSource.ts @@ -17,7 +17,7 @@ import { AppConfig } from '@backstage/config'; import { assertError } from '@backstage/errors'; import { JsonObject } from '@backstage/types'; -import { AsyncConfigSourceIterator, ConfigSource } from './types'; +import { AsyncConfigSourceGenerator, ConfigSource } from './types'; /** * Options for {@link EnvConfigSource.create}. @@ -68,7 +68,7 @@ export class EnvConfigSource implements ConfigSource { private readonly env: { [name: string]: string | undefined }, ) {} - async *readConfigData(): AsyncConfigSourceIterator { + async *readConfigData(): AsyncConfigSourceGenerator { const configs = readEnvConfig(this.env); yield { configs }; return; diff --git a/packages/config-loader/src/sources/FileConfigSource.ts b/packages/config-loader/src/sources/FileConfigSource.ts index 6e0cf6fde7..da31c128a0 100644 --- a/packages/config-loader/src/sources/FileConfigSource.ts +++ b/packages/config-loader/src/sources/FileConfigSource.ts @@ -19,7 +19,7 @@ import fs from 'fs-extra'; import { basename, dirname, isAbsolute, resolve as resolvePath } from 'path'; import yaml from 'yaml'; import { - AsyncConfigSourceIterator, + AsyncConfigSourceGenerator, ConfigSource, ConfigSourceData, SubstitutionFunc, @@ -92,7 +92,7 @@ export class FileConfigSource implements ConfigSource { // changes it might be worth refactoring this to avoid duplicate work. async *readConfigData( options?: ReadConfigDataOptions, - ): AsyncConfigSourceIterator { + ): AsyncConfigSourceGenerator { const signal = options?.signal; const configFileName = basename(this.#path); diff --git a/packages/config-loader/src/sources/MergedConfigSource.ts b/packages/config-loader/src/sources/MergedConfigSource.ts index 45387269dc..97918d7a0a 100644 --- a/packages/config-loader/src/sources/MergedConfigSource.ts +++ b/packages/config-loader/src/sources/MergedConfigSource.ts @@ -15,7 +15,7 @@ */ import { - AsyncConfigSourceIterator, + AsyncConfigSourceGenerator, ConfigSource, ConfigSourceData, ReadConfigDataOptions, @@ -54,7 +54,7 @@ export class MergedConfigSource implements ConfigSource { async *readConfigData( options?: ReadConfigDataOptions, - ): AsyncConfigSourceIterator { + ): AsyncConfigSourceGenerator { const its = this.sources.map(source => source.readConfigData(options)); const initialResults = await Promise.all(its.map(it => it.next())); const configs = initialResults.map((result, i) => { diff --git a/packages/config-loader/src/sources/MutableConfigSource.ts b/packages/config-loader/src/sources/MutableConfigSource.ts index eff015ab3a..85585e2882 100644 --- a/packages/config-loader/src/sources/MutableConfigSource.ts +++ b/packages/config-loader/src/sources/MutableConfigSource.ts @@ -16,7 +16,7 @@ import { JsonObject } from '@backstage/types'; import { - AsyncConfigSourceIterator, + AsyncConfigSourceGenerator, ConfigSource, ReadConfigDataOptions, } from './types'; @@ -64,7 +64,7 @@ export class MutableConfigSource implements ConfigSource { async *readConfigData( options?: ReadConfigDataOptions | undefined, - ): AsyncConfigSourceIterator { + ): AsyncConfigSourceGenerator { let deferredPromise = this.#deferred.promise; if (this.#currentData !== undefined) { diff --git a/packages/config-loader/src/sources/RemoteConfigSource.ts b/packages/config-loader/src/sources/RemoteConfigSource.ts index 22d9d1ca69..ff75060f56 100644 --- a/packages/config-loader/src/sources/RemoteConfigSource.ts +++ b/packages/config-loader/src/sources/RemoteConfigSource.ts @@ -21,7 +21,7 @@ import fetch from 'node-fetch'; import yaml from 'yaml'; import { ConfigTransformer, createConfigTransformer } from './transform'; import { - AsyncConfigSourceIterator, + AsyncConfigSourceGenerator, ConfigSource, SubstitutionFunc, ReadConfigDataOptions, @@ -114,7 +114,7 @@ export class RemoteConfigSource implements ConfigSource { async *readConfigData( options?: ReadConfigDataOptions | undefined, - ): AsyncConfigSourceIterator { + ): AsyncConfigSourceGenerator { let data = await this.#load(); yield { configs: [{ data, context: this.#url }] }; diff --git a/packages/config-loader/src/sources/StaticConfigSource.ts b/packages/config-loader/src/sources/StaticConfigSource.ts index e549f06391..3cbe9771a7 100644 --- a/packages/config-loader/src/sources/StaticConfigSource.ts +++ b/packages/config-loader/src/sources/StaticConfigSource.ts @@ -16,7 +16,7 @@ import { JsonObject, Observable } from '@backstage/types'; import { - AsyncConfigSourceIterator, + AsyncConfigSourceGenerator, ConfigSource, ReadConfigDataOptions, } from './types'; @@ -45,7 +45,7 @@ class StaticObservableConfigSource implements ConfigSource { async *readConfigData( options?: ReadConfigDataOptions | undefined, - ): AsyncConfigSourceIterator { + ): AsyncConfigSourceGenerator { const queue = new Array(); let deferred = simpleDefer(); @@ -108,7 +108,7 @@ export class StaticConfigSource implements ConfigSource { const { data, context = 'static-config' } = options; if (!data) { return { - async *readConfigData(): AsyncConfigSourceIterator { + async *readConfigData(): AsyncConfigSourceGenerator { yield { configs: [] }; return; }, @@ -121,7 +121,7 @@ export class StaticConfigSource implements ConfigSource { if (isAsyncIterable(data)) { return { - async *readConfigData(): AsyncConfigSourceIterator { + async *readConfigData(): AsyncConfigSourceGenerator { for await (const value of data) { yield { configs: [{ data: value, context }] }; } @@ -137,7 +137,7 @@ export class StaticConfigSource implements ConfigSource { private readonly context: string, ) {} - async *readConfigData(): AsyncConfigSourceIterator { + async *readConfigData(): AsyncConfigSourceGenerator { yield { configs: [{ data: await this.promise, context: this.context }] }; return; } diff --git a/packages/config-loader/src/sources/index.ts b/packages/config-loader/src/sources/index.ts index 364cc59298..a25f689b40 100644 --- a/packages/config-loader/src/sources/index.ts +++ b/packages/config-loader/src/sources/index.ts @@ -37,5 +37,5 @@ export type { ConfigSource, ConfigSourceData, ReadConfigDataOptions, - AsyncConfigSourceIterator, + AsyncConfigSourceGenerator, } from './types'; diff --git a/packages/config-loader/src/sources/types.ts b/packages/config-loader/src/sources/types.ts index 2c1641a526..dec6f415f2 100644 --- a/packages/config-loader/src/sources/types.ts +++ b/packages/config-loader/src/sources/types.ts @@ -38,18 +38,15 @@ export interface ReadConfigDataOptions { } /** - * The type of the iterator returned by {@link ConfigSource.readConfigData}. + * The the generator returned by {@link ConfigSource.readConfigData}. * * @public */ -export interface AsyncConfigSourceIterator - extends AsyncIterator<{ configs: ConfigSourceData[] }, void, void> { - [Symbol.asyncIterator](): AsyncIterator< - { configs: ConfigSourceData[] }, - void, - void - >; -} +export type AsyncConfigSourceGenerator = AsyncGenerator< + { configs: ConfigSourceData[] }, + void, + void +>; /** * A source of configuration data. @@ -76,7 +73,7 @@ export interface AsyncConfigSourceIterator * @public */ export interface ConfigSource { - readConfigData(options?: ReadConfigDataOptions): AsyncConfigSourceIterator; + readConfigData(options?: ReadConfigDataOptions): AsyncConfigSourceGenerator; } /** diff --git a/packages/core-app-api/CHANGELOG.md b/packages/core-app-api/CHANGELOG.md index 6dd03028cb..f4179e6fb6 100644 --- a/packages/core-app-api/CHANGELOG.md +++ b/packages/core-app-api/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/core-app-api +## 1.8.0-next.1 + +### Minor Changes + +- c89437db899: The analytics' `navigate` event will now include the route parameters as attributes of the navigate event + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + +## 1.7.1-next.0 + +### Patch Changes + +- 42d817e76ab: Added `FrontendHostDiscovery` for config driven discovery implementation +- Updated dependencies + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + ## 1.7.0 ### Minor Changes diff --git a/packages/core-app-api/api-report.md b/packages/core-app-api/api-report.md index d295f6cd6f..f922f5e7d5 100644 --- a/packages/core-app-api/api-report.md +++ b/packages/core-app-api/api-report.md @@ -410,6 +410,18 @@ export type FlatRoutesProps = { children: ReactNode; }; +// @public +export class FrontendHostDiscovery implements DiscoveryApi { + static fromConfig( + config: Config, + options?: { + pathPattern?: string; + }, + ): FrontendHostDiscovery; + // (undocumented) + getBaseUrl(pluginId: string): Promise; +} + // @public export class GithubAuth { // (undocumented) diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json index a57fd6628e..5d99754068 100644 --- a/packages/core-app-api/package.json +++ b/packages/core-app-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-app-api", "description": "Core app API used by Backstage apps", - "version": "1.7.0", + "version": "1.8.0-next.1", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/core-app-api/src/apis/implementations/DiscoveryApi/FrontendHostDiscovery.test.ts b/packages/core-app-api/src/apis/implementations/DiscoveryApi/FrontendHostDiscovery.test.ts new file mode 100644 index 0000000000..0ba6457a1b --- /dev/null +++ b/packages/core-app-api/src/apis/implementations/DiscoveryApi/FrontendHostDiscovery.test.ts @@ -0,0 +1,178 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { ConfigReader } from '@backstage/config'; +import { FrontendHostDiscovery } from './FrontendHostDiscovery'; + +describe('FrontendHostDiscovery', () => { + it('is created from config', async () => { + const discovery = FrontendHostDiscovery.fromConfig( + new ConfigReader({ + backend: { + baseUrl: 'http://localhost:40', + }, + }), + ); + + await expect(discovery.getBaseUrl('catalog')).resolves.toBe( + 'http://localhost:40/api/catalog', + ); + }); + + it('can configure the base path', async () => { + const discovery = FrontendHostDiscovery.fromConfig( + new ConfigReader({ + backend: { + baseUrl: 'http://localhost:40', + }, + }), + { pathPattern: '/service/{{pluginId}}' }, + ); + + await expect(discovery.getBaseUrl('catalog')).resolves.toBe( + 'http://localhost:40/service/catalog', + ); + }); + + it('uses plugin specific targets from config if provided', async () => { + const discovery = FrontendHostDiscovery.fromConfig( + new ConfigReader({ + backend: { + baseUrl: 'http://localhost:40', + }, + discovery: { + endpoints: [ + { + target: { + internal: 'http://catalog-backend-internal:8080/api/catalog', + external: 'http://catalog-backend-external:8080/api/catalog', + }, + plugins: ['catalog'], + }, + ], + }, + }), + ); + + await expect(discovery.getBaseUrl('catalog')).resolves.toBe( + 'http://catalog-backend-external:8080/api/catalog', + ); + }); + + it('uses a single target for internal and external for a plugin', async () => { + const discovery = FrontendHostDiscovery.fromConfig( + new ConfigReader({ + backend: { + baseUrl: 'http://localhost:40', + }, + discovery: { + endpoints: [ + { + target: 'http://catalog-backend:8080/api/catalog', + plugins: ['catalog'], + }, + ], + }, + }), + ); + + await expect(discovery.getBaseUrl('catalog')).resolves.toBe( + 'http://catalog-backend:8080/api/catalog', + ); + }); + + it('defaults to the backend baseUrl when there is not an endpoint for a plugin', async () => { + const discovery = FrontendHostDiscovery.fromConfig( + new ConfigReader({ + backend: { + baseUrl: 'http://localhost:40', + }, + discovery: { + endpoints: [ + { + target: 'http://catalog-backend:8080/api/catalog', + plugins: ['catalog'], + }, + ], + }, + }), + ); + + await expect(discovery.getBaseUrl('scaffolder')).resolves.toBe( + 'http://localhost:40/api/scaffolder', + ); + }); + + it('replaces {{pluginId}} or {{ pluginId }} in the target', async () => { + const discovery = FrontendHostDiscovery.fromConfig( + new ConfigReader({ + backend: { + baseUrl: 'http://localhost:40', + }, + discovery: { + endpoints: [ + { + target: 'http://common-backend:8080/api/{{pluginId}}', + plugins: ['catalog', 'docs'], + }, + { + target: { + internal: 'http://scaffolder-internal:8080/api/{{ pluginId }}', + external: 'http://scaffolder-external:8080/api/{{ pluginId }}', + }, + plugins: ['scaffolder'], + }, + ], + }, + }), + ); + + await expect(discovery.getBaseUrl('catalog')).resolves.toBe( + 'http://common-backend:8080/api/catalog', + ); + await expect(discovery.getBaseUrl('docs')).resolves.toBe( + 'http://common-backend:8080/api/docs', + ); + await expect(discovery.getBaseUrl('scaffolder')).resolves.toBe( + 'http://scaffolder-external:8080/api/scaffolder', + ); + }); + + it('encodes the pluginId', async () => { + const discovery = FrontendHostDiscovery.fromConfig( + new ConfigReader({ + backend: { + baseUrl: 'http://localhost:40', + }, + discovery: { + endpoints: [ + { + target: 'http://common-backend:8080/api/{{pluginId}}', + plugins: ['plugin/beta'], + }, + ], + }, + }), + ); + + await expect(discovery.getBaseUrl('plugin/beta')).resolves.toBe( + 'http://common-backend:8080/api/plugin%2Fbeta', + ); + await expect(discovery.getBaseUrl('plugin/alpha')).resolves.toBe( + 'http://localhost:40/api/plugin%2Falpha', + ); + }); +}); diff --git a/packages/core-app-api/src/apis/implementations/DiscoveryApi/FrontendHostDiscovery.ts b/packages/core-app-api/src/apis/implementations/DiscoveryApi/FrontendHostDiscovery.ts new file mode 100644 index 0000000000..950b746684 --- /dev/null +++ b/packages/core-app-api/src/apis/implementations/DiscoveryApi/FrontendHostDiscovery.ts @@ -0,0 +1,83 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { Config } from '@backstage/config'; +import { DiscoveryApi } from '@backstage/core-plugin-api'; +import { UrlPatternDiscovery } from './UrlPatternDiscovery'; + +/** + * FrontendHostDiscovery is a config driven DiscoveryApi implementation. + * It uses the app-config to determine the url for a plugin. + * + * @public + */ +export class FrontendHostDiscovery implements DiscoveryApi { + /** + * Creates a new FrontendHostDiscovery discovery instance by reading + * the external target URL from the `discovery.endpoints` config section. + * + * eg. + * ```yaml + * discovery: + * endpoints: + * - target: https://internal.example.com/internal-catalog + * plugins: [catalog] + * - target: https://internal.example.com/secure/api/{{pluginId}} + * plugins: [auth, permissions] + * - target: + * internal: https://internal.example.com/search + * external: https://example.com/search + * plugins: [search] + * ``` + * + * If a plugin is not declared in the config, the discovery will fall back to using the baseUrl with + * the provided `pathPattern` appended. The default path pattern is `"/api/{{ pluginId }}"`. + */ + static fromConfig(config: Config, options?: { pathPattern?: string }) { + const path = options?.pathPattern ?? '/api/{{ pluginId }}'; + const baseUrl = config.getString('backend.baseUrl'); + + const endpoints = config + .getOptionalConfigArray('discovery.endpoints') + ?.flatMap(e => { + const target = + typeof e.get('target') === 'object' + ? e.getString('target.external') + : e.getString('target'); + const discovery = UrlPatternDiscovery.compile(target); + return e + .getStringArray('plugins') + .map(pluginId => [pluginId, discovery] as const); + }); + + return new FrontendHostDiscovery( + new Map(endpoints), + UrlPatternDiscovery.compile(`${baseUrl}${path}`), + ); + } + + private constructor( + private readonly endpoints: Map, + private readonly defaultEndpoint: DiscoveryApi, + ) {} + + async getBaseUrl(pluginId: string): Promise { + const endpoint = this.endpoints.get(pluginId); + if (endpoint) { + return endpoint.getBaseUrl(pluginId); + } + return this.defaultEndpoint.getBaseUrl(pluginId); + } +} diff --git a/packages/core-app-api/src/apis/implementations/DiscoveryApi/UrlPatternDiscovery.ts b/packages/core-app-api/src/apis/implementations/DiscoveryApi/UrlPatternDiscovery.ts index cba8344977..58ffc9441b 100644 --- a/packages/core-app-api/src/apis/implementations/DiscoveryApi/UrlPatternDiscovery.ts +++ b/packages/core-app-api/src/apis/implementations/DiscoveryApi/UrlPatternDiscovery.ts @@ -58,6 +58,6 @@ export class UrlPatternDiscovery implements DiscoveryApi { private constructor(private readonly parts: string[]) {} async getBaseUrl(pluginId: string): Promise { - return this.parts.join(pluginId); + return this.parts.join(encodeURIComponent(pluginId)); } } diff --git a/packages/core-app-api/src/apis/implementations/DiscoveryApi/index.ts b/packages/core-app-api/src/apis/implementations/DiscoveryApi/index.ts index 184346401f..6972ca7b85 100644 --- a/packages/core-app-api/src/apis/implementations/DiscoveryApi/index.ts +++ b/packages/core-app-api/src/apis/implementations/DiscoveryApi/index.ts @@ -15,3 +15,4 @@ */ export { UrlPatternDiscovery } from './UrlPatternDiscovery'; +export { FrontendHostDiscovery } from './FrontendHostDiscovery'; diff --git a/packages/core-app-api/src/routing/RouteTracker.test.tsx b/packages/core-app-api/src/routing/RouteTracker.test.tsx new file mode 100644 index 0000000000..6896b60169 --- /dev/null +++ b/packages/core-app-api/src/routing/RouteTracker.test.tsx @@ -0,0 +1,115 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { TestApiProvider } from '@backstage/test-utils'; +import React from 'react'; +import { BackstageRouteObject } from './types'; +import { fireEvent, render } from '@testing-library/react'; +import { RouteTracker } from './RouteTracker'; +import { Link, MemoryRouter, Route, Routes } from 'react-router-dom'; +import { + AnalyticsApi, + analyticsApiRef, + createRouteRef, +} from '@backstage/core-plugin-api'; + +describe('RouteTracker', () => { + const routeRef1 = createRouteRef({ + id: 'route1', + }); + const routeRef2 = createRouteRef({ + id: 'route2', + }); + + const routeObjects: BackstageRouteObject[] = [ + { + path: '/path/:p1/:p2', + element: go, + routeRefs: new Set([routeRef1]), + caseSensitive: false, + }, + { + path: '/path2/:param', + element:
hi there
, + routeRefs: new Set([routeRef2]), + caseSensitive: false, + }, + ]; + + const mockedAnalytics: jest.Mocked = { + captureEvent: jest.fn(), + }; + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should capture the navigate event on load', async () => { + render( + + + + + , + ); + + expect(mockedAnalytics.captureEvent).toHaveBeenCalledWith({ + action: 'navigate', + attributes: { + p1: 'foo', + p2: 'bar', + }, + context: { + extension: 'App', + pluginId: 'root', + routeRef: 'route1', + }, + subject: '/path/foo/bar', + value: undefined, + }); + }); + + it('should capture the navigate event on route change', async () => { + const { getByText } = render( + + + + + + {routeObjects.map(({ routeRefs, ...props }) => ( + + ))} + + + , + ); + + fireEvent.click(getByText('go')); + + expect(mockedAnalytics.captureEvent).toHaveBeenCalledWith({ + action: 'navigate', + attributes: { + param: 'hello', + }, + context: { + extension: 'App', + pluginId: 'root', + routeRef: 'route2', + }, + subject: '/path2/hello', + value: undefined, + }); + }); +}); diff --git a/packages/core-app-api/src/routing/RouteTracker.tsx b/packages/core-app-api/src/routing/RouteTracker.tsx index f9d8c78fc0..5ec858b28e 100644 --- a/packages/core-app-api/src/routing/RouteTracker.tsx +++ b/packages/core-app-api/src/routing/RouteTracker.tsx @@ -19,8 +19,8 @@ import { matchRoutes, useLocation } from 'react-router-dom'; import { useAnalytics, AnalyticsContext, - CommonAnalyticsContext, RouteRef, + AnalyticsEventAttributes, } from '@backstage/core-plugin-api'; import { BackstageRouteObject } from './types'; @@ -31,22 +31,23 @@ import { BackstageRouteObject } from './types'; const getExtensionContext = ( pathname: string, routes: BackstageRouteObject[], -): CommonAnalyticsContext | {} => { +) => { try { // Find matching routes for the given path name. - const matches = matchRoutes(routes, { pathname }) as - | { route: BackstageRouteObject }[] - | null; + const matches = matchRoutes(routes, { pathname }); // Of the matching routes, get the last (e.g. most specific) instance of // the BackstageRouteObject. - const routeObject = matches + + const routeMatch = matches ?.filter(match => match?.route.routeRefs?.size > 0) - .pop()?.route; + .pop(); + + const routeObject = routeMatch?.route; // If there is no route object, then allow inheritance of default context. if (!routeObject) { - return {}; + return undefined; } // If there is a single route ref, return it. @@ -56,13 +57,23 @@ const getExtensionContext = ( routeRef = routeObject.routeRefs.values().next().value; } + const params = Object.entries( + routeMatch?.params || {}, + ).reduce((acc, [key, value]) => { + if (value !== undefined) { + acc[key] = value; + } + return acc; + }, {}); + return { extension: 'App', pluginId: routeObject.plugin?.getId() || 'root', ...(routeRef ? { routeRef: (routeRef as { id?: string }).id } : {}), + params, }; } catch { - return {}; + return undefined; } }; @@ -73,16 +84,19 @@ const TrackNavigation = ({ pathname, search, hash, + attributes, }: { pathname: string; search: string; hash: string; + attributes?: AnalyticsEventAttributes; }) => { const analytics = useAnalytics(); - useEffect(() => { - analytics.captureEvent('navigate', `${pathname}${search}${hash}`); - }, [analytics, pathname, search, hash]); + analytics.captureEvent('navigate', `${pathname}${search}${hash}`, { + attributes, + }); + }, [analytics, pathname, search, hash, attributes]); return null; }; @@ -98,9 +112,19 @@ export const RouteTracker = ({ }) => { const { pathname, search, hash } = useLocation(); + const { params, ...attributes } = getExtensionContext( + pathname, + routeObjects, + ) || { params: {} }; + return ( - - + + ); }; diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md index 86a5f2882a..825b793d2c 100644 --- a/packages/core-components/CHANGELOG.md +++ b/packages/core-components/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/core-components +## 0.13.1-next.0 + +### Patch Changes + +- 26cff1a5dfb: Start capturing sidebar click events in analytics by default. +- Updated dependencies + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + ## 0.13.0 ### Minor Changes diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 45f12f039c..cdb5a6e4a8 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-components", "description": "Core components used by Backstage plugins and apps", - "version": "0.13.0", + "version": "0.13.1-next.0", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/core-components/src/layout/Sidebar/Items.test.tsx b/packages/core-components/src/layout/Sidebar/Items.test.tsx index eafbf3827e..9479180180 100644 --- a/packages/core-components/src/layout/Sidebar/Items.test.tsx +++ b/packages/core-components/src/layout/Sidebar/Items.test.tsx @@ -15,7 +15,11 @@ */ import React from 'react'; -import { renderInTestApp } from '@backstage/test-utils'; +import { + MockAnalyticsApi, + TestApiProvider, + renderInTestApp, +} from '@backstage/test-utils'; import { createEvent, fireEvent, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import HomeIcon from '@material-ui/icons/Home'; @@ -24,6 +28,7 @@ import { Sidebar } from './Bar'; import { SidebarItem, SidebarSearchField, SidebarExpandButton } from './Items'; import { renderHook } from '@testing-library/react-hooks'; import { makeStyles } from '@material-ui/core/styles'; +import { analyticsApiRef } from '@backstage/core-plugin-api'; const useStyles = makeStyles({ spotlight: { @@ -31,27 +36,50 @@ const useStyles = makeStyles({ }, }); +let analyticsApiMock: MockAnalyticsApi; + +const handleSidebarItemClick = jest.fn(); + async function renderSidebar() { const { result } = renderHook(() => useStyles()); await renderInTestApp( - - {}} to="/search" /> - - {}} - text="Create..." - className={result.current.spotlight} - /> - - , + + + {}} to="/search" /> + + + + + + + , ); await userEvent.hover(screen.getByTestId('sidebar-root')); } describe('Items', () => { beforeEach(async () => { + jest.clearAllMocks(); + analyticsApiMock = new MockAnalyticsApi(); await renderSidebar(); }); @@ -73,6 +101,40 @@ describe('Items', () => { await screen.findByRole('button', { name: /create/i }), ).toHaveStyle(`background-color: transparent`); }); + + it('should send button clicks to analytics', async () => { + await userEvent.click( + await screen.findByRole('button', { name: /create/i }), + ); + expect(handleSidebarItemClick).toHaveBeenCalledTimes(1); + expect(analyticsApiMock.getEvents()).toHaveLength(1); + expect(analyticsApiMock.getEvents()[0]).toMatchObject({ + action: 'click', + subject: 'Create...', + context: { routeRef: 'unknown', pluginId: 'root', extension: 'App' }, + attributes: { to: '/' }, + }); + }); + + it('should send link clicks to analytics', async () => { + await userEvent.click(await screen.findByRole('link', { name: /docs/i })); + expect(handleSidebarItemClick).toHaveBeenCalledTimes(1); + expect(analyticsApiMock.getEvents()).toHaveLength(1); + expect(analyticsApiMock.getEvents()[0]).toMatchObject({ + action: 'click', + subject: 'Docs', + context: { routeRef: 'unknown', pluginId: 'root', extension: 'App' }, + attributes: { to: '/docs' }, + }); + }); + + it('should not send clicks to analytics when tracking is disabled', async () => { + await userEvent.click( + await screen.findByRole('link', { name: /explore/i }), + ); + expect(handleSidebarItemClick).toHaveBeenCalledTimes(1); + expect(analyticsApiMock.getEvents()).toHaveLength(0); + }); }); describe('SidebarSearchField', () => { it('should be defaultPrevented when enter is pressed', async () => { diff --git a/packages/core-components/src/layout/Sidebar/Items.tsx b/packages/core-components/src/layout/Sidebar/Items.tsx index 00d1871947..96c2b382e7 100644 --- a/packages/core-components/src/layout/Sidebar/Items.tsx +++ b/packages/core-components/src/layout/Sidebar/Items.tsx @@ -13,7 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { IconComponent, useElementFilter } from '@backstage/core-plugin-api'; +import { + IconComponent, + useAnalytics, + useElementFilter, +} from '@backstage/core-plugin-api'; import { BackstageTheme } from '@backstage/theme'; import Badge from '@material-ui/core/Badge'; import Box from '@material-ui/core/Box'; @@ -38,6 +42,7 @@ import React, { forwardRef, KeyboardEventHandler, ReactNode, + useCallback, useContext, useMemo, useState, @@ -264,6 +269,8 @@ type SidebarItemBaseProps = { hasSubmenu?: boolean; disableHighlight?: boolean; className?: string; + noTrack?: boolean; + onClick?: (ev: React.MouseEvent) => void; }; type SidebarItemButtonProps = SidebarItemBaseProps & { @@ -362,6 +369,7 @@ const SidebarItemBase = forwardRef((props, ref) => { hasSubmenu = false, disableHighlight = false, onClick, + noTrack, children, className, ...navLinkProps @@ -424,9 +432,33 @@ const SidebarItemBase = forwardRef((props, ref) => { ), }; + const analyticsApi = useAnalytics(); + const { pathname: to } = useResolvedPath( + !isButtonItem(props) && props.to ? props.to : '', + ); + + const handleClick = useCallback( + (event: React.MouseEvent) => { + if (!noTrack) { + const action = 'click'; + const subject = text ?? 'Sidebar Item'; + const options = to ? { attributes: { to } } : undefined; + analyticsApi.captureEvent(action, subject, options); + } + onClick?.(event); + }, + [analyticsApi, text, to, noTrack, onClick], + ); + if (isButtonItem(props)) { return ( - ); @@ -440,6 +472,7 @@ const SidebarItemBase = forwardRef((props, ref) => { ref={ref} aria-label={text ? text : props.to} {...navLinkProps} + onClick={handleClick} > {content} diff --git a/packages/core-plugin-api/src/analytics/useAnalytics.tsx b/packages/core-plugin-api/src/analytics/useAnalytics.tsx index 5a047e5a63..50cec8f790 100644 --- a/packages/core-plugin-api/src/analytics/useAnalytics.tsx +++ b/packages/core-plugin-api/src/analytics/useAnalytics.tsx @@ -53,6 +53,8 @@ export function useAnalytics(): AnalyticsTracker { } const tracker = getTracker(); + // this is not ideal, but it allows to memoize the tracker + // without explicitly set the context as dependency. tracker.setContext(context); return tracker; diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md index a28042cc3d..948c4017a3 100644 --- a/packages/create-app/CHANGELOG.md +++ b/packages/create-app/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/create-app +## 0.5.1-next.1 + +### Patch Changes + +- 4027aa9e753: Pin some octokit dependencies to avoid failing typescript build under `tsc:full` + +## 0.5.1-next.0 + +### Patch Changes + +- Bumped create-app version. +- Updated dependencies + - @backstage/cli-common@0.1.12 + ## 0.5.0 ### Minor Changes diff --git a/packages/create-app/package.json b/packages/create-app/package.json index 5435a03b7b..ef61e1c5b8 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/create-app", "description": "A CLI that helps you create your own Backstage app", - "version": "0.5.0", + "version": "0.5.1-next.1", "publishConfig": { "access": "public" }, diff --git a/packages/create-app/templates/default-app/package.json.hbs b/packages/create-app/templates/default-app/package.json.hbs index 0682114a35..f00500af68 100644 --- a/packages/create-app/templates/default-app/package.json.hbs +++ b/packages/create-app/templates/default-app/package.json.hbs @@ -39,7 +39,10 @@ }, "resolutions": { "@types/react": "^17", - "@types/react-dom": "^17" + "@types/react-dom": "^17", + "@octokit/rest": "18.5.6", + "@octokit/plugin-rest-endpoint-methods": "5.16.2", + "@octokit/plugin-paginate-rest": "2.7.0" }, "prettier": "@spotify/prettier-config", "lint-staged": { diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index 67abd4e4dc..a6aeda0901 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/dev-utils +## 1.0.15-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/app-defaults@1.3.1-next.1 + - @backstage/core-app-api@1.8.0-next.1 + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/test-utils@1.3.1-next.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/integration-react@1.1.13-next.1 + +## 1.0.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-app-api@1.7.1-next.0 + - @backstage/integration-react@1.1.13-next.0 + - @backstage/app-defaults@1.3.1-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/test-utils@1.3.1-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + ## 1.0.14 ### Patch Changes diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index 6e7f26aaf4..ca5057c928 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/dev-utils", "description": "Utilities for developing Backstage plugins.", - "version": "1.0.14", + "version": "1.0.15-next.1", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/e2e-test/CHANGELOG.md b/packages/e2e-test/CHANGELOG.md index f9998ddbe7..2486a83f5c 100644 --- a/packages/e2e-test/CHANGELOG.md +++ b/packages/e2e-test/CHANGELOG.md @@ -1,5 +1,21 @@ # e2e-test +## 0.2.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.1-next.1 + +## 0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.1-next.0 + - @backstage/cli-common@0.1.12 + - @backstage/errors@1.1.5 + ## 0.2.2 ### Patch Changes diff --git a/packages/e2e-test/package.json b/packages/e2e-test/package.json index 28d93b87c6..513a9c6a96 100644 --- a/packages/e2e-test/package.json +++ b/packages/e2e-test/package.json @@ -1,7 +1,7 @@ { "name": "e2e-test", "description": "E2E test for verifying Backstage packages", - "version": "0.2.2", + "version": "0.2.3-next.1", "private": true, "backstage": { "role": "cli" diff --git a/packages/integration-react/CHANGELOG.md b/packages/integration-react/CHANGELOG.md index 57e8d588cc..ac62e9aab7 100644 --- a/packages/integration-react/CHANGELOG.md +++ b/packages/integration-react/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/integration-react +## 1.1.13-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + +## 1.1.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.4.5-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19 + ## 1.1.12 ### Patch Changes diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json index 2e1649c331..e59c8f48c4 100644 --- a/packages/integration-react/package.json +++ b/packages/integration-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration-react", "description": "Frontend package for managing integrations towards external systems", - "version": "1.1.12", + "version": "1.1.13-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/integration/CHANGELOG.md b/packages/integration/CHANGELOG.md index 2c82900143..92eff86bb5 100644 --- a/packages/integration/CHANGELOG.md +++ b/packages/integration/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/integration +## 1.4.5-next.0 + +### Patch Changes + +- b026275bcc8: Fixed a bug where the wrong credentials would be selected when using multiple GitHub app integrations. +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 1.4.4 ### Patch Changes diff --git a/packages/integration/package.json b/packages/integration/package.json index 3e50f5cc3b..fbe8ac1fc3 100644 --- a/packages/integration/package.json +++ b/packages/integration/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration", "description": "Helpers for managing integrations towards external systems", - "version": "1.4.4", + "version": "1.4.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts index a1544fbc68..ec07d1b465 100644 --- a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts +++ b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.test.ts @@ -133,6 +133,66 @@ describe('SingleInstanceGithubCredentialsProvider tests', () => { expect(token).toEqual('secret_token'); }); + it('creates tokens for an organization with multiple configured apps', async () => { + const multipleGithubApps = SingleInstanceGithubCredentialsProvider.create({ + host: 'github.com', + apps: [ + { + appId: 1, + privateKey: 'privateKey', + webhookSecret: '123', + clientId: 'CLIENT_ID', + clientSecret: 'CLIENT_SECRET', + allowedInstallationOwners: ['not-allowed'], + }, + { + appId: 2, + privateKey: 'privateKey_2', + webhookSecret: '456', + clientId: 'CLIENT_ID_2', + clientSecret: 'CLIENT_SECRET_2', + allowedInstallationOwners: ['allowed'], + }, + ], + }); + + octokit.apps.listInstallations.mockResolvedValue({ + headers: { + etag: '123', + }, + data: [ + { + id: 2, + repository_selection: 'all', + account: { + login: 'allowed', + }, + }, + { + id: 2, + repository_selection: 'all', + account: { + login: 'not-allowed', + }, + }, + ], + } as RestEndpointMethodTypes['apps']['listInstallations']['response']); + + octokit.apps.createInstallationAccessToken.mockResolvedValue({ + data: { + expires_at: DateTime.local().plus({ hours: 1 }).toString(), + token: 'secret_token', + }, + } as RestEndpointMethodTypes['apps']['createInstallationAccessToken']['response']); + + const { token, headers } = await multipleGithubApps.getCredentials({ + url: 'https://github.com/allowed', + }); + + expect(headers).toEqual({ Authorization: 'Bearer secret_token' }); + expect(token).toEqual('secret_token'); + }); + it('does not return a token where the organisation is not in the allowedInstallationsList', async () => { github = SingleInstanceGithubCredentialsProvider.create({ host: 'github.com', diff --git a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts index d42ad4597d..402a62d97c 100644 --- a/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts +++ b/packages/integration/src/github/SingleInstanceGithubCredentialsProvider.ts @@ -232,13 +232,15 @@ export class GithubAppCredentialsMux { ), ); - const result = results.find(resultItem => resultItem.credentials); + const result = results.find( + resultItem => resultItem.credentials?.accessToken, + ); if (result) { return result.credentials!.accessToken; } const errors = results.map(r => r.error); - const notNotFoundError = errors.find(err => err.name !== 'NotFoundError'); + const notNotFoundError = errors.find(err => err?.name !== 'NotFoundError'); if (notNotFoundError) { throw notNotFoundError; } diff --git a/packages/repo-tools/CHANGELOG.md b/packages/repo-tools/CHANGELOG.md index 2c2e979aac..e31c05532c 100644 --- a/packages/repo-tools/CHANGELOG.md +++ b/packages/repo-tools/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/repo-tools +## 0.3.0-next.0 + +### Minor Changes + +- 27956d78671: Generated OpenAPI files now have a `.generated.ts` file name and a warning header at the top, to highlight that they should not be edited by hand. + ## 0.2.0 ### Minor Changes diff --git a/packages/repo-tools/package.json b/packages/repo-tools/package.json index 968c958bd8..74c39fc9a8 100644 --- a/packages/repo-tools/package.json +++ b/packages/repo-tools/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/repo-tools", "description": "CLI for Backstage repo tooling ", - "version": "0.2.0", + "version": "0.3.0-next.0", "publishConfig": { "access": "public" }, diff --git a/packages/repo-tools/src/commands/index.ts b/packages/repo-tools/src/commands/index.ts index 87d3f7acde..f4d02df3bc 100644 --- a/packages/repo-tools/src/commands/index.ts +++ b/packages/repo-tools/src/commands/index.ts @@ -66,7 +66,7 @@ export function registerCommands(program: Command) { program .command('schema:openapi:verify [paths...]') .description( - 'Verify that all OpenAPI schemas are valid and have a matching `schemas/openapi.ts` file.', + 'Verify that all OpenAPI schemas are valid and have a matching `schemas/openapi.generated.ts` file.', ) .action(lazy(() => import('./openapi/verify').then(m => m.bulkCommand))); diff --git a/packages/repo-tools/src/commands/openapi/constants.ts b/packages/repo-tools/src/commands/openapi/constants.ts index 7c91f423c1..defef4ab53 100644 --- a/packages/repo-tools/src/commands/openapi/constants.ts +++ b/packages/repo-tools/src/commands/openapi/constants.ts @@ -13,6 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + export const YAML_SCHEMA_PATH = 'src/schema/openapi.yaml'; -export const TS_MODULE = 'src/schema/openapi'; + +export const TS_MODULE = 'src/schema/openapi.generated'; + export const TS_SCHEMA_PATH = `${TS_MODULE}.ts`; diff --git a/packages/repo-tools/src/commands/openapi/generate.ts b/packages/repo-tools/src/commands/openapi/generate.ts index fc73013765..e6c9f79f6e 100644 --- a/packages/repo-tools/src/commands/openapi/generate.ts +++ b/packages/repo-tools/src/commands/openapi/generate.ts @@ -18,6 +18,7 @@ import fs from 'fs-extra'; import YAML from 'js-yaml'; import chalk from 'chalk'; import { resolve } from 'path'; +import { paths as cliPaths } from '../../lib/paths'; import { runner } from './runner'; import { TS_SCHEMA_PATH, YAML_SCHEMA_PATH } from './constants'; import { promisify } from 'util'; @@ -41,12 +42,25 @@ async function generate( const tsPath = resolve(directoryPath, TS_SCHEMA_PATH); + // The first set of comment slashes allow for the eslint notice plugin to run + // with onNonMatchingHeader: 'replace', as is the case in the open source + // Backstage repo. Otherwise the auto-generated comment will be removed by the + // lint call below. await fs.writeFile( tsPath, - `export default ${JSON.stringify(yaml, null, 2)} as const`, + `// + +// ****************************************************************** +// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * +// ****************************************************************** + +export default ${JSON.stringify(yaml, null, 2)} as const;`, ); await exec(`yarn backstage-cli package lint --fix ${tsPath}`); + if (await cliPaths.resolveTargetRoot('node_modules/.bin/prettier')) { + await exec(`yarn prettier --write ${tsPath}`); + } } export async function bulkCommand(paths: string[] = []): Promise { diff --git a/packages/techdocs-cli-embedded-app/CHANGELOG.md b/packages/techdocs-cli-embedded-app/CHANGELOG.md index bce0472948..98bf3668d6 100644 --- a/packages/techdocs-cli-embedded-app/CHANGELOG.md +++ b/packages/techdocs-cli-embedded-app/CHANGELOG.md @@ -1,5 +1,41 @@ # techdocs-cli-embedded-app +## 0.2.82-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/app-defaults@1.3.1-next.1 + - @backstage/core-app-api@1.8.0-next.1 + - @backstage/core-components@0.13.1-next.0 + - @backstage/cli@0.22.7-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/test-utils@1.3.1-next.1 + - @backstage/plugin-catalog@1.11.0-next.1 + - @backstage/plugin-techdocs@1.6.2-next.1 + - @backstage/integration-react@1.1.13-next.1 + - @backstage/plugin-techdocs-react@1.1.6-next.0 + - @backstage/config@1.0.7 + +## 0.2.82-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs@1.6.2-next.0 + - @backstage/plugin-catalog@1.11.0-next.0 + - @backstage/core-app-api@1.7.1-next.0 + - @backstage/cli@0.22.7-next.0 + - @backstage/integration-react@1.1.13-next.0 + - @backstage/app-defaults@1.3.1-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/test-utils@1.3.1-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19 + - @backstage/plugin-techdocs-react@1.1.5 + ## 0.2.81 ### Patch Changes diff --git a/packages/techdocs-cli-embedded-app/package.json b/packages/techdocs-cli-embedded-app/package.json index c756ab15d4..01f5f8128c 100644 --- a/packages/techdocs-cli-embedded-app/package.json +++ b/packages/techdocs-cli-embedded-app/package.json @@ -1,6 +1,6 @@ { "name": "techdocs-cli-embedded-app", - "version": "0.2.81", + "version": "0.2.82-next.1", "private": true, "backstage": { "role": "frontend" diff --git a/packages/techdocs-cli/CHANGELOG.md b/packages/techdocs-cli/CHANGELOG.md index 46f73ae7c1..35f3b4bc28 100644 --- a/packages/techdocs-cli/CHANGELOG.md +++ b/packages/techdocs-cli/CHANGELOG.md @@ -1,5 +1,25 @@ # @techdocs/cli +## 1.4.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-techdocs-node@1.7.1-next.1 + - @backstage/config@1.0.7 + +## 1.4.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-techdocs-node@1.7.1-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + ## 1.4.1 ### Patch Changes diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json index 420681e58c..8b533b4453 100644 --- a/packages/techdocs-cli/package.json +++ b/packages/techdocs-cli/package.json @@ -1,7 +1,7 @@ { "name": "@techdocs/cli", "description": "Utility CLI for managing TechDocs sites in Backstage.", - "version": "1.4.1", + "version": "1.4.2-next.1", "publishConfig": { "access": "public" }, diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md index ff653591c0..9fd73a6840 100644 --- a/packages/test-utils/CHANGELOG.md +++ b/packages/test-utils/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/test-utils +## 1.3.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.8.0-next.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + - @backstage/plugin-permission-react@0.4.12 + +## 1.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.7.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-permission-react@0.4.12 + ## 1.3.0 ### Minor Changes diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index a700050dec..80d5a2e620 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/test-utils", "description": "Utilities to test Backstage plugins and apps.", - "version": "1.3.0", + "version": "1.3.1-next.1", "publishConfig": { "access": "public" }, diff --git a/packages/test-utils/src/testUtils/logCollector.test.ts b/packages/test-utils/src/testUtils/logCollector.test.ts index fc66d7a26e..b217aaad8c 100644 --- a/packages/test-utils/src/testUtils/logCollector.test.ts +++ b/packages/test-utils/src/testUtils/logCollector.test.ts @@ -34,7 +34,7 @@ describe('logCollector', () => { expect(logs.error).toEqual(['c', '3']); }); - it('should collect some logs asynchrnously', async () => { + it('should collect some logs asynchronously', async () => { const logs = await withLogCollector(async () => { console.log('a'); console.warn('b'); @@ -70,7 +70,7 @@ describe('logCollector', () => { expect(missedLogs.error).toEqual(['c', '3']); }); - it('should collect specific logs asynchrnously', async () => { + it('should collect specific logs asynchronously', async () => { const missedLogs = await withLogCollector(async () => { const logs = await withLogCollector(['error'], async () => { console.log('a'); diff --git a/plugins/adr-backend/CHANGELOG.md b/plugins/adr-backend/CHANGELOG.md index f494f381d9..39e8bf7e4c 100644 --- a/plugins/adr-backend/CHANGELOG.md +++ b/plugins/adr-backend/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-adr-backend +## 0.3.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + +## 0.3.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-adr-common@0.2.9-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-search-common@1.2.3 + ## 0.3.2 ### Patch Changes diff --git a/plugins/adr-backend/package.json b/plugins/adr-backend/package.json index 7826d28496..a1f6a859a0 100644 --- a/plugins/adr-backend/package.json +++ b/plugins/adr-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr-backend", - "version": "0.3.2", + "version": "0.3.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/adr-common/CHANGELOG.md b/plugins/adr-common/CHANGELOG.md index bada4a3b38..c3b8806c80 100644 --- a/plugins/adr-common/CHANGELOG.md +++ b/plugins/adr-common/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-adr-common +## 0.2.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.4.5-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/plugin-search-common@1.2.3 + ## 0.2.8 ### Patch Changes diff --git a/plugins/adr-common/package.json b/plugins/adr-common/package.json index ac89d2f300..0fdf94003a 100644 --- a/plugins/adr-common/package.json +++ b/plugins/adr-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-adr-common", "description": "Common functionalities for the adr plugin", - "version": "0.2.8", + "version": "0.2.9-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/adr/CHANGELOG.md b/plugins/adr/CHANGELOG.md index 129db25f8f..b0ce02fa19 100644 --- a/plugins/adr/CHANGELOG.md +++ b/plugins/adr/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-adr +## 0.5.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/plugin-search-react@1.6.0-next.1 + - @backstage/integration-react@1.1.13-next.1 + +## 0.5.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/plugin-search-react@1.6.0-next.0 + - @backstage/integration-react@1.1.13-next.0 + - @backstage/plugin-adr-common@0.2.9-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + - @backstage/plugin-search-common@1.2.3 + ## 0.5.0 ### Minor Changes diff --git a/plugins/adr/package.json b/plugins/adr/package.json index 143ae5a035..3202a8c14e 100644 --- a/plugins/adr/package.json +++ b/plugins/adr/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr", - "version": "0.5.0", + "version": "0.5.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/airbrake-backend/CHANGELOG.md b/plugins/airbrake-backend/CHANGELOG.md index f37125e87c..8407f5822e 100644 --- a/plugins/airbrake-backend/CHANGELOG.md +++ b/plugins/airbrake-backend/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-airbrake-backend +## 0.2.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + +## 0.2.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/config@1.0.7 + ## 0.2.17 ### Patch Changes diff --git a/plugins/airbrake-backend/package.json b/plugins/airbrake-backend/package.json index d23e0fee0f..c57ffa8be9 100644 --- a/plugins/airbrake-backend/package.json +++ b/plugins/airbrake-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake-backend", - "version": "0.2.17", + "version": "0.2.18-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/airbrake/CHANGELOG.md b/plugins/airbrake/CHANGELOG.md index 52ccf65729..191207e591 100644 --- a/plugins/airbrake/CHANGELOG.md +++ b/plugins/airbrake/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-airbrake +## 0.3.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/dev-utils@1.0.15-next.1 + - @backstage/core-plugin-api@1.5.1 + - @backstage/test-utils@1.3.1-next.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.3.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/dev-utils@1.0.15-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/test-utils@1.3.1-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + ## 0.3.17 ### Patch Changes diff --git a/plugins/airbrake/package.json b/plugins/airbrake/package.json index ce2db0684d..6f7f404742 100644 --- a/plugins/airbrake/package.json +++ b/plugins/airbrake/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake", - "version": "0.3.17", + "version": "0.3.18-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/allure/CHANGELOG.md b/plugins/allure/CHANGELOG.md index d5b2e7abae..a20bd80961 100644 --- a/plugins/allure/CHANGELOG.md +++ b/plugins/allure/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-allure +## 0.1.34-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.1.34-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + ## 0.1.33 ### Patch Changes diff --git a/plugins/allure/package.json b/plugins/allure/package.json index f0da1e6342..2a98ae1faf 100644 --- a/plugins/allure/package.json +++ b/plugins/allure/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-allure", "description": "A Backstage plugin that integrates with Allure", - "version": "0.1.33", + "version": "0.1.34-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/analytics-module-ga/CHANGELOG.md b/plugins/analytics-module-ga/CHANGELOG.md index 59f15c972c..4195e02248 100644 --- a/plugins/analytics-module-ga/CHANGELOG.md +++ b/plugins/analytics-module-ga/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-analytics-module-ga +## 0.1.29-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + ## 0.1.28 ### Patch Changes diff --git a/plugins/analytics-module-ga/package.json b/plugins/analytics-module-ga/package.json index 02d57fa86d..31215bd84f 100644 --- a/plugins/analytics-module-ga/package.json +++ b/plugins/analytics-module-ga/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-analytics-module-ga", - "version": "0.1.28", + "version": "0.1.29-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/analytics-module-ga4/.eslintrc.js b/plugins/analytics-module-ga4/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/analytics-module-ga4/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/analytics-module-ga4/CHANGELOG.md b/plugins/analytics-module-ga4/CHANGELOG.md new file mode 100644 index 0000000000..59c03fec0f --- /dev/null +++ b/plugins/analytics-module-ga4/CHANGELOG.md @@ -0,0 +1,24 @@ +# @backstage/plugin-analytics-module-ga4 + +## 0.1.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + +## 0.1.0-next.0 + +### Minor Changes + +- 22b46f7f562: Plugin provides Backstage Analytics API for Google Analytics 4. Once installed and configured, analytics events will be sent to GA4 as your users navigate and use your Backstage instance + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19 diff --git a/plugins/analytics-module-ga4/README.md b/plugins/analytics-module-ga4/README.md new file mode 100644 index 0000000000..d060c9d9b1 --- /dev/null +++ b/plugins/analytics-module-ga4/README.md @@ -0,0 +1,221 @@ +# Analytics Module: Google Analytics 4 + +This plugin provides an opinionated implementation of the Backstage Analytics +API for Google Analytics 4. Once installed and configured, analytics events will +be sent to GA as your users navigate and use your Backstage instance. + +This plugin contains no other functionality. + +## Installation + +1. Install the plugin package in your Backstage app: + `cd packages/app && yarn add @backstage/plugin-analytics-module-ga4` +2. Wire up the API implementation to your App: + +```tsx +// packages/app/src/apis.ts +import { + analyticsApiRef, + configApiRef, + identityApiRef, +} from '@backstage/core-plugin-api'; +import { GoogleAnalytics4 } from '@backstage/plugin-analytics-module-ga4'; + +export const apis: AnyApiFactory[] = [ + // Instantiate and register the GA Analytics API Implementation. + createApiFactory({ + api: analyticsApiRef, + deps: { configApi: configApiRef, identityApi: identityApiRef }, + factory: ({ configApi, identityApi }) => + GoogleAnalytics4.fromConfig(configApi, { + identityApi, + }), + }), +]; +``` + +3. Configure the plugin in your `app-config.yaml`: + +The following is the minimum configuration required to start sending analytics +events to GA. All that's needed is your GA4 measurement ID: + +```yaml +# app-config.yaml +app: + analytics: + ga4: + measurementId: G-0000000-0 +``` + +4. Update CSP in your `app-config.yaml`: + +The following is the minimal content security policy required to load scripts from GA. + +```yaml +backend: + csp: + connect-src: ["'self'", 'http:', 'https:'] + # Add these two lines below + script-src: ["'self'", "'unsafe-eval'", 'https://www.google-analytics.com'] + img-src: ["'self'", 'data:', 'https://www.google-analytics.com'] +``` + +## Configuration + +In order to be able to analyze usage of your Backstage instance by plugin, we recommend configuring [a content grouping](#enabling-content-grouping). +Additional dimensional data can be captured using custom dimensions, like this: + +1. First, [configure the custom dimension in GA] [configure-custom-dimension]. + Be sure to set the Scope to `Event`, and name it `dimension1`. +2. Then, add a mapping to your `app.analytics.ga4` configuration that instructs + the plugin to capture Plugin IDs on the custom dimension you just created. + It should look like this: +3. `allowedContexts` config accepts array of string, where each entry is a context parameter that will be sent in the event. + context names will be prefixed by `c_`. +4. `allowedAttributes` config accepts array of string, where each entry is an attribute that will be sent in the event. + attribute names will be prefixed by `a_`. +5. `allowedContexts` and `allowedAttributes` are optional, if not provided, no additional context and attributes will be sent. +6. if `allowedContexts` or `allowedAttributes` is set to '\*', all context and attributes will be sent. + +```yaml +app: + analytics: + ga4: + measurementId: G-0000000-0 + allowedContexts: ['pluginId'] +``` + +```yaml +app: + analytics: + ga4: + allowedContexts: ['pluginId'] + allowedAttributes: ['someEventContextAttr'] +``` + +### User IDs + +This plugin supports accurately deriving user-oriented metrics (like monthly +active users) using Google Analytics' [user ID views][ga-user-id-view]. To +enable this... + +1. Be sure you've gone through the process of setting up a user ID view in your + Backstage instance's Google Analytics property (see docs linked above). +2. Make sure you instantiate `GoogleAnalytics` with an `identityApi` instance + passed to it, as shown in the installation section above. +3. Set `app.analytics.ga4.identity` to either `required` or `optional` in your + `app.config.yaml`, like this: + + ```yaml + app: + analytics: + ga4: + measurementId: G-0000000-0 + identity: optional + ``` + + Set `identity` to `optional` if you need accurate session counts, including + cases where users do not sign in at all. Use `required` if you need all hits + to be associated with a user ID without exception (and don't mind if some + sessions are not captured, such as those where no sign in occur). + +Note that, to comply with GA policies, the value of the User ID is +pseudonymized before being sent to GA. By default, it is a `sha256` hash of the +current user's `userEntityRef` as returned by the `identityApi`. To set a +different value, provide a `userIdTransform` function alongside `identityApi` +when you instantiate `GoogleAnalytics`. This function will be passed the +`userEntityRef` as an argument and should resolve to the value you wish to set +as the user ID. For example: + +```typescript +import { + analyticsApiRef, + configApiRef, + identityApiRef, +} from '@backstage/core-plugin-api'; +import { GoogleAnalytics } from '@backstage/plugin-analytics-module-ga'; + +export const apis: AnyApiFactory[] = [ + createApiFactory({ + api: analyticsApiRef, + deps: { configApi: configApiRef, identityApi: identityApiRef }, + factory: ({ configApi, identityApi }) => + GoogleAnalytics4.fromConfig(configApi, { + identityApi, + userIdTransform: async (userEntityRef: string): Promise => { + return customHashingFunction(userEntityRef); + }, + }), + }), +]; +``` + +### Enabling content grouping + +Content groups enable you to categorize pages and screens into custom buckets which you can see +metrics for related groups of information. +More about content grouping here [content groups][content-grouping]. +It's recommended to enable content grouping by PluginId. `contentGrouping` supports `routeRef` and extension. + +```yaml +app: + analytics: + ga4: + contentGrouping: pluginId +``` + +Please note, content grouping takes 24hrs to show up in the Google Analytics dashboard. + +### Debugging and Testing + +In pre-production environments, you may wish to set additional configurations +to turn off reporting to Analytics and/or print debug statements to the +console. You can do so like this: + +```yaml +app: + analytics: + ga4: + testMode: true # Prevents data being sent to GA + debug: true # Logs analytics event to the web console +``` + +You might commonly set the above in an `app-config.local.yaml` file, which is +normally `gitignore`'d but loaded and merged in when Backstage is bootstrapped. + +## Development + +If you would like to contribute improvements to this plugin, the easiest way to +make and test changes is to do the following: + +1. Clone the main Backstage monorepo `git clone git@github.com:backstage/backstage.git` +2. Install all dependencies `yarn install` +3. If one does not exist, create an `app-config.local.yaml` file in the root of + the monorepo and add config for this plugin (see below) +4. Enter this plugin's working directory: `cd plugins/analytics-provider-ga4` +5. Start the plugin in isolation: `yarn start` +6. Navigate to the playground page at `http://localhost:3000/ga4` +7. Open the web console to see events fire when you navigate or when you + interact with instrumented components. + +Code for the isolated version of the plugin can be found inside the [/dev](./dev) +directory. Changes to the plugin are hot-reloaded. + +#### Recommended Dev Config + +Paste this into your `app-config.local.yaml` while developing this plugin: + +```yaml +app: + analytics: + ga4: + measurementId: G-0000000-0 + debug: true + testMode: true + allowedContexts: ['pluginId'] +``` + +[what-is-a-custom-dimension]: https://support.google.com/analytics/answer/2709828 +[configure-custom-dimension]: https://support.google.com/analytics/answer/10075209?hl=en# +[ga-user-id-view]: https://support.google.com/analytics/answer/3123669 +[content-grouping]: https://support.google.com/analytics/answer/11523339?hl=en diff --git a/plugins/analytics-module-ga4/api-report.md b/plugins/analytics-module-ga4/api-report.md new file mode 100644 index 0000000000..77f3094210 --- /dev/null +++ b/plugins/analytics-module-ga4/api-report.md @@ -0,0 +1,26 @@ +## API Report File for "@backstage/plugin-analytics-module-ga4" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { AnalyticsApi } from '@backstage/core-plugin-api'; +import { AnalyticsEvent } from '@backstage/core-plugin-api'; +import { Config } from '@backstage/config'; +import { IdentityApi } from '@backstage/core-plugin-api'; + +// @public +export class GoogleAnalytics4 implements AnalyticsApi { + captureEvent(event: AnalyticsEvent): void; + static fromConfig( + config: Config, + options?: { + identityApi?: IdentityApi; + userIdTransform?: + | 'sha-256' + | ((userEntityRef: string) => Promise); + }, + ): GoogleAnalytics4; +} + +// (No @packageDocumentation comment for this package) +``` diff --git a/plugins/analytics-module-ga4/config.d.ts b/plugins/analytics-module-ga4/config.d.ts new file mode 100644 index 0000000000..d90ccb5938 --- /dev/null +++ b/plugins/analytics-module-ga4/config.d.ts @@ -0,0 +1,96 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface Config { + app: { + // TODO: Only marked as optional because backstage-cli config:check in the + // context of the monorepo is too strict. Ideally, this would be marked as + // required. + analytics?: { + ga4: { + /** + * Google Analytics measurement ID, e.g. G-000000-0 + * @visibility frontend + */ + measurementId: string; + + /** + * Controls how the identityApi is used when sending data to GA: + * + * - `disabled`: (Default) Explicitly prevents a user's identity from + * being used when capturing events in GA. + * - `optional`: Pageviews and hits are forwarded to GA as they happen + * and only include user identity metadata once known. Guarantees + * that hits are captured for all sessions, even if no sign in + * occurs, but may result in dropped hits in User ID views. + * - `required`: All pageviews and hits are deferred until an identity + * is known. Guarantees that all data sent to GA correlates to a user + * identity, but prevents GA from receiving events for sessions in + * which a user does not sign in. An `identityApi` instance must be + * passed during instantiation when set to this value. + * + * @visibility frontend + */ + identity?: 'disabled' | 'optional' | 'required'; + + /** + * Whether to log analytics debug statements to the console. + * Defaults to false. + * + * @visibility frontend + */ + debug?: boolean; + + /** + * Prevents events from actually being sent when set to true. Defaults + * to false. + * + * @visibility frontend + */ + testMode?: boolean; + + /** + * Content grouping definition + * Feature available in Google Analytics 4 + * More information https://support.google.com/analytics/answer/11523339?hl=en + * Data can be grouped by pluginId, routeRef + * Takes 24 hours before metrics shows up in GA dashboard + * Specifies the dimension to be used for content grouping + * Can be one of pluginId, extension or routeRef + * @visibility frontend + * + */ + contentGrouping?: 'pluginId' | 'extension' | 'routeRef'; + + /** + * Configuration informing how Analytics Context and Event Attributes + * metadata will be captured in Google Analytics. + * Contexts that will be sent as parameters in the event. + * context-name will be prefixed by c_, for example, pluginId will be c_pluginId in the event. + * + */ + allowedContexts?: string[] | ['*']; + /** + * + * Attributes that will be sent as parameters in the event + * attribute-name will be prefixed by a_, for example , testAttribute will be c_testAttribute in the event. + * + */ + allowedAttributes?: string[] | ['*']; + }; + }; + }; +} diff --git a/plugins/analytics-module-ga4/dev/Playground.tsx b/plugins/analytics-module-ga4/dev/Playground.tsx new file mode 100644 index 0000000000..cf21aadacc --- /dev/null +++ b/plugins/analytics-module-ga4/dev/Playground.tsx @@ -0,0 +1,26 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from 'react'; +import { Link } from '@backstage/core-components'; + +export const Playground = () => { + return ( + <> + Click Here + + ); +}; diff --git a/plugins/analytics-module-ga4/dev/index.tsx b/plugins/analytics-module-ga4/dev/index.tsx new file mode 100644 index 0000000000..eb694498f5 --- /dev/null +++ b/plugins/analytics-module-ga4/dev/index.tsx @@ -0,0 +1,38 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React from 'react'; +import { createDevApp } from '@backstage/dev-utils'; +import { Playground } from './Playground'; + +import { createPlugin } from '@backstage/core-plugin-api'; + +/** + * @deprecated Importing and including this plugin in an app has no effect. + * This will be removed in a future release. + * + * @public + */ +export const analyticsModuleGA4 = createPlugin({ + id: 'analytics-provider-ga4', +}); +createDevApp() + .registerPlugin(analyticsModuleGA4) + .addPage({ + path: '/ga4', + title: 'GA4 Playground', + element: , + }) + .render(); diff --git a/plugins/analytics-module-ga4/package.json b/plugins/analytics-module-ga4/package.json new file mode 100644 index 0000000000..5e27228534 --- /dev/null +++ b/plugins/analytics-module-ga4/package.json @@ -0,0 +1,57 @@ +{ + "name": "@backstage/plugin-analytics-module-ga4", + "version": "0.1.0-next.1", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "publishConfig": { + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "frontend-plugin-module" + }, + "scripts": { + "build": "backstage-cli package build", + "start": "backstage-cli package start", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack", + "clean": "backstage-cli package clean" + }, + "dependencies": { + "@backstage/config": "workspace:^", + "@backstage/core-components": "workspace:^", + "@backstage/core-plugin-api": "workspace:^", + "@backstage/theme": "workspace:^", + "react-ga4": "^2.0.0", + "react-use": "^17.2.4" + }, + "peerDependencies": { + "react": "^16.13.1 || ^17.0.0", + "react-dom": "^16.13.1 || ^17.0.0", + "react-router-dom": "6.0.0-beta.0 || ^6.3.0" + }, + "devDependencies": { + "@backstage/cli": "workspace:^", + "@backstage/core-app-api": "workspace:^", + "@backstage/dev-utils": "workspace:^", + "@backstage/test-utils": "workspace:^", + "@testing-library/dom": "^8.0.0", + "@testing-library/jest-dom": "^5.10.1", + "@testing-library/react": "^12.1.3", + "@testing-library/user-event": "^14.0.0", + "@types/jest": "^28.1.3", + "@types/node": "^16.11.26", + "@types/react": "^16.13.1 || ^17.0.0", + "cross-fetch": "^3.1.5", + "msw": "^1.0.0" + }, + "files": [ + "dist", + "config.d.ts" + ], + "configSchema": "config.d.ts" +} diff --git a/plugins/analytics-module-ga4/src/apis/implementations/AnalyticsApi/GoogleAnalytics4.test.ts b/plugins/analytics-module-ga4/src/apis/implementations/AnalyticsApi/GoogleAnalytics4.test.ts new file mode 100644 index 0000000000..16db7075b3 --- /dev/null +++ b/plugins/analytics-module-ga4/src/apis/implementations/AnalyticsApi/GoogleAnalytics4.test.ts @@ -0,0 +1,495 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { ConfigReader } from '@backstage/config'; +import { IdentityApi } from '@backstage/core-plugin-api'; +import ReactGA from 'react-ga4'; +import { GoogleAnalytics4 } from './GoogleAnalytics4'; +import { UaEventOptions } from 'react-ga4/types/ga4'; + +const fnEvent = jest.spyOn(ReactGA, 'event'); + +fnEvent.mockImplementation( + // @ts-ignore + (optionsOrName: string | UaEventOptions, params?: any) => { + return; + }, +); + +const fnSet = jest.spyOn(ReactGA, 'set'); +// @ts-ignore +fnSet.mockImplementation((fieldObject: any) => { + return; +}); + +afterEach(() => { + jest.clearAllMocks(); +}); + +describe('GoogleAnalytics4', () => { + const context = { + extension: 'App', + pluginId: 'some-plugin', + routeRef: 'unknown', + releaseNum: 1337, + }; + const measurementId = 'G-000000-0'; + const basicValidConfig = new ConfigReader({ + app: { + analytics: { ga4: { measurementId: measurementId, testMode: true } }, + }, + }); + + describe('fromConfig', () => { + it('throws when missing measurementId', () => { + const config = new ConfigReader({ app: { analytics: { ga4: {} } } }); + expect(() => GoogleAnalytics4.fromConfig(config)).toThrow( + /Missing required config value/, + ); + }); + + it('returns implementation', () => { + const api = GoogleAnalytics4.fromConfig(basicValidConfig); + + expect(api.captureEvent).toBeDefined(); + + api.captureEvent({ + action: 'navigate', + subject: '/', + context, + }); + expect(fnEvent).toHaveBeenCalledWith('page_view', { + action: 'page_view', + label: '/', + category: 'App', + }); + }); + }); + + describe('integration', () => { + const searchConfig = new ConfigReader({ + app: { + analytics: { + ga4: { + measurementId: measurementId, + testMode: true, + virtualSearchPageView: { + mode: 'both', + searchQuery: 'term', + }, + }, + }, + }, + }); + + const configWithContentGrouping = new ConfigReader({ + app: { + analytics: { + ga4: { + measurementId: measurementId, + testMode: true, + contentGrouping: 'pluginId', + }, + }, + }, + }); + + const advancedConfig = new ConfigReader({ + app: { + analytics: { + ga4: { + measurementId: measurementId, + testMode: true, + allowedContexts: ['pluginId', 'releaseNum'], + allowedAttributes: ['extraDimension', 'extraMetric'], + }, + }, + }, + }); + + const allowAllContextsAndAttrsConfig = new ConfigReader({ + app: { + analytics: { + ga4: { + measurementId: measurementId, + testMode: true, + allowedContexts: ['*'], + allowedAttributes: ['*'], + }, + }, + }, + }); + + it('testing content grouping', () => { + const api = GoogleAnalytics4.fromConfig(configWithContentGrouping); + api.captureEvent({ + action: 'navigate', + subject: '/a-page', + context, + }); + + expect(fnEvent).toHaveBeenCalledWith('page_view', { + action: 'page_view', + label: '/a-page', + category: 'App', + value: undefined, + content_group: context.pluginId, + }); + }); + + it('tracks search', () => { + const api = GoogleAnalytics4.fromConfig(searchConfig); + const expectedAction = 'search'; + const expectedLabel = 'search-term'; + const expectedValue = 42; + api.captureEvent({ + action: expectedAction, + subject: expectedLabel, + value: expectedValue, + context, + }); + expect(fnEvent).toHaveBeenCalledWith('search', { + action: 'search', + category: 'App', + label: 'search-term', + value: 42, + search_term: 'search-term', + }); + }); + + it('tracks basic event', () => { + const api = GoogleAnalytics4.fromConfig(basicValidConfig); + + const expectedAction = 'click'; + const expectedLabel = 'on something'; + const expectedValue = 42; + api.captureEvent({ + action: expectedAction, + subject: expectedLabel, + value: expectedValue, + context, + }); + + expect(fnEvent).toHaveBeenCalledWith('click', { + action: 'click', + category: context.extension, + label: 'on something', + value: expectedValue, + }); + }); + + it('captures configured custom dimensions/metrics on pageviews', () => { + const api = GoogleAnalytics4.fromConfig(advancedConfig); + api.captureEvent({ + action: 'navigate', + subject: '/a-page', + context, + }); + + expect(fnEvent).toHaveBeenCalledWith('page_view', { + action: 'page_view', + label: '/a-page', + category: 'App', + value: undefined, + c_pluginId: context.pluginId, + c_releaseNum: context.releaseNum, + }); + }); + + it('captures all dimensions/metrics on pageviews', () => { + const api = GoogleAnalytics4.fromConfig(allowAllContextsAndAttrsConfig); + api.captureEvent({ + action: 'navigate', + subject: '/a-page', + context, + attributes: { + 'attr-1': 'attr-value-1', + 'attr-2': 'attr-value-2', + }, + }); + expect(fnEvent).toHaveBeenCalledWith('page_view', { + action: 'page_view', + category: 'App', + label: '/a-page', + value: undefined, + c_pluginId: context.pluginId, + c_releaseNum: context.releaseNum, + c_routeRef: context.routeRef, + c_extension: context.extension, + 'a_attr-1': 'attr-value-1', + 'a_attr-2': 'attr-value-2', + }); + }); + + it('captures configured custom dimensions/metrics on events', () => { + const api = GoogleAnalytics4.fromConfig(advancedConfig); + + const expectedAction = 'search'; + const expectedLabel = 'some query'; + const expectedValue = 5; + api.captureEvent({ + action: expectedAction, + subject: expectedLabel, + value: expectedValue, + attributes: { + extraDimension: false, + extraMetric: 0, + }, + context, + }); + + expect(fnEvent).toHaveBeenCalledWith('search', { + action: 'search', + category: context.extension, + label: expectedLabel, + value: expectedValue, + c_pluginId: context.pluginId, + c_releaseNum: context.releaseNum, + search_term: expectedLabel, + }); + }); + + it('does not pass non-numeric data on metrics', () => { + const api = GoogleAnalytics4.fromConfig(advancedConfig); + + api.captureEvent({ + action: 'verb', + subject: 'noun', + attributes: { + extraMetric: 'not a number', + }, + context, + }); + + expect(fnEvent).not.toHaveBeenCalledWith({ + category: context.extension, + action: 'verb', + label: 'noun', + c_pluginId: context.pluginId, + c_releaseNum: context.releaseNum, + c_extraMetric: 'not a number', + }); + }); + }); + + describe('identityApi', () => { + const identityApi = { + getBackstageIdentity: jest.fn().mockResolvedValue({ + userEntityRef: 'User:default/someone', + }), + } as unknown as IdentityApi; + + it('does not set userId unless explicitly configured', async () => { + // Instantiate with identityApi and default configs. + const api = GoogleAnalytics4.fromConfig(basicValidConfig, { + identityApi, + }); + api.captureEvent({ + action: 'navigate', + subject: '/', + context, + }); + + // Wait for any/all promises involved to settle. + await new Promise(resolve => setTimeout(resolve)); + // There should not have been a UserID set. + expect(fnSet).not.toHaveBeenCalled(); + }); + + it('sets hashed userId when identityApi is provided', async () => { + // Instantiate with identityApi and identity set to optional + const optionalConfig = new ConfigReader({ + app: { + analytics: { + ga4: { + measurementId: measurementId, + testMode: true, + identity: 'optional', + }, + }, + }, + }); + const api = GoogleAnalytics4.fromConfig(optionalConfig, { identityApi }); + api.captureEvent({ + action: 'navigate', + subject: '/', + context, + }); + + // Wait for any/all promises involved to settle. + await new Promise(resolve => setTimeout(resolve)); + + expect(fnSet).toHaveBeenCalledTimes(1); + expect(fnSet).toHaveBeenCalledWith({ + // String indicating userEntityRef went through expected hashing. + user_id: '557365723a64656661756c742f736f6d656f6e65', + }); + }); + + it('set custom-hashed userId when userIdTransform is provided', async () => { + const userIdTransform = jest.fn().mockResolvedValue('s0m3hash3dvalu3'); + const optionalConfig = new ConfigReader({ + app: { + analytics: { + ga4: { + measurementId: measurementId, + testMode: true, + identity: 'optional', + }, + }, + }, + }); + const api = GoogleAnalytics4.fromConfig(optionalConfig, { + identityApi, + userIdTransform, + }); + api.captureEvent({ + action: 'navigate', + subject: '/', + context, + }); + + // Wait for any/all promises involved to settle. + await new Promise(resolve => setTimeout(resolve)); + + // User ID should have been set after the pageview. + expect(fnSet).toHaveBeenCalledWith({ + user_id: 's0m3hash3dvalu3', + }); + expect(userIdTransform).toHaveBeenCalledWith('User:default/someone'); + }); + + it('does not set userId when identityApi is provided and ga4.identity is explicitly disabled', async () => { + // Instantiate with identityApi and identity explicitly disabled. + const disabledConfig = new ConfigReader({ + app: { + analytics: { + ga4: { + measurementId: measurementId, + testMode: true, + identity: 'disabled', + }, + }, + }, + }); + const api = GoogleAnalytics4.fromConfig(disabledConfig, { identityApi }); + api.captureEvent({ + action: 'navigate', + subject: '/', + context, + }); + + // Wait for any/all promises involved to settle. + await new Promise(resolve => setTimeout(resolve)); + + // A pageview should have been fired immediately. + expect(fnEvent).toHaveBeenCalledWith('page_view', { + action: 'page_view', + label: '/', + category: 'App', + value: undefined, + }); + + // There should not have been a UserID set. + expect(fnSet).toHaveBeenCalledTimes(0); + }); + + it('throws error when ga4.identity is required but no identityApi is provided', async () => { + // Instantiate without identityApi and identity explicitly disabled. + const requiredConfig = new ConfigReader({ + app: { + analytics: { + ga4: { + measurementId: measurementId, + testMode: true, + identity: 'required', + }, + }, + }, + }); + + expect(() => GoogleAnalytics4.fromConfig(requiredConfig)).toThrow(); + }); + + it('defers event capture when ga4.identity is required', async () => { + // Instantiate with identityApi and identity explicitly required. + const requiredConfig = new ConfigReader({ + app: { + analytics: { + ga4: { + measurementId: measurementId, + testMode: true, + identity: 'required', + }, + }, + }, + }); + const api = GoogleAnalytics4.fromConfig(requiredConfig, { identityApi }); + + // Fire a pageview and an event. + api.captureEvent({ + action: 'navigate', + subject: '/', + context, + }); + api.captureEvent({ + action: 'test', + subject: 'some label', + context, + }); + + // Wait for any/all promises involved to settle. + await new Promise(resolve => setTimeout(resolve)); + + // User ID should have been set first. + expect(fnSet).toHaveBeenCalledWith({ + // String indicating userEntityRef went through expected hashing. + user_id: '557365723a64656661756c742f736f6d656f6e65', + }); + + // Then a pageview should have been fired with a queue time. + expect(fnEvent).toHaveBeenCalledWith('page_view', { + action: 'page_view', + label: '/', + timestamp_micros: expect.any(Number), + value: undefined, + category: 'App', + }); + + // Then an event should have been fired with a queue time. + expect(fnEvent).toHaveBeenCalledWith('test', { + action: 'test', + timestamp_micros: expect.any(Number), + label: 'some label', + category: 'App', + value: undefined, + }); + + // And subsequent hits should not have a queue time. + api.captureEvent({ + action: 'navigate', + subject: '/page-2', + context, + }); + + expect(fnEvent).toHaveBeenCalledWith('page_view', { + action: 'page_view', + label: '/page-2', + category: 'App', + value: undefined, + }); + }); + }); +}); diff --git a/plugins/analytics-module-ga4/src/apis/implementations/AnalyticsApi/GoogleAnalytics4.ts b/plugins/analytics-module-ga4/src/apis/implementations/AnalyticsApi/GoogleAnalytics4.ts new file mode 100644 index 0000000000..399366b804 --- /dev/null +++ b/plugins/analytics-module-ga4/src/apis/implementations/AnalyticsApi/GoogleAnalytics4.ts @@ -0,0 +1,283 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import ReactGA from 'react-ga4'; +import { + AnalyticsApi, + AnalyticsContextValue, + AnalyticsEventAttributes, + AnalyticsEvent, + IdentityApi, +} from '@backstage/core-plugin-api'; +import { Config } from '@backstage/config'; +import { DeferredCapture } from '../../../util/DeferredCapture'; + +/** + * Google Analytics API provider for the Backstage Analytics API. + * @public + */ +export class GoogleAnalytics4 implements AnalyticsApi { + private readonly customUserIdTransform?: ( + userEntityRef: string, + ) => Promise; + private readonly capture: DeferredCapture; + private readonly contentGroupBy?: string; + private readonly allowedContexts?: string[]; + private readonly allowedAttributes?: string[]; + /** + * Instantiate the implementation and initialize ReactGA. + * @param options initializes Google Analytics module with the config + */ + private constructor(options: { + identityApi?: IdentityApi; + userIdTransform?: 'sha-256' | ((userEntityRef: string) => Promise); + identity: string; + measurementId: string; + testMode: boolean; + debug: boolean; + contentGroupBy?: string; + allowedContexts?: string[]; + allowedAttributes?: string[]; + }) { + const { + identity, + measurementId, + identityApi, + userIdTransform = 'sha-256', + testMode, + debug, + contentGroupBy, + allowedContexts, + allowedAttributes, + } = options; + // Initialize Google Analytics. + ReactGA.initialize(measurementId, { + testMode, + gaOptions: { + debug_mode: debug, + }, + gtagOptions: { + debug_mode: debug, + }, + }); + + this.contentGroupBy = contentGroupBy; + this.allowedAttributes = allowedAttributes; + this.allowedContexts = allowedContexts; + // If identity is required, defer event capture until identity is known. + this.capture = new DeferredCapture({ defer: identity === 'required' }); + + // Allow custom userId transformation. + this.customUserIdTransform = + typeof userIdTransform === 'function' ? userIdTransform : undefined; + + // Capture user only when explicitly enabled and provided. + if (identity !== 'disabled') { + if (identityApi) { + this.setUserFrom(identityApi).then(() => { + return; + }); + } + } + } + + /** + * Instantiate a fully configured GA Analytics API implementation. + * @param config - Config object from app config + * @param options - options with identityApi and userIdTransform config + */ + static fromConfig( + config: Config, + options: { + identityApi?: IdentityApi; + userIdTransform?: + | 'sha-256' + | ((userEntityRef: string) => Promise); + } = {}, + ) { + // Get all necessary configuration. + const measurementId = config.getString('app.analytics.ga4.measurementId'); + const identity = + config.getOptionalString('app.analytics.ga4.identity') || 'disabled'; + const debug = config.getOptionalBoolean('app.analytics.ga4.debug') ?? false; + const testMode = + config.getOptionalBoolean('app.analytics.ga4.testMode') ?? false; + + const contentGroupBy = config.getOptionalString( + 'app.analytics.ga4.contentGrouping', + ); + const allowedContexts = config.getOptionalStringArray( + 'app.analytics.ga4.allowedContexts', + ); + const allowedAttributes = config.getOptionalStringArray( + 'app.analytics.ga4.allowedAttributes', + ); + + if (identity === 'required' && !options.identityApi) { + throw new Error( + 'Invalid config: identity API must be provided to deps when ga4.identity is required', + ); + } + + // Return an implementation instance. + return new GoogleAnalytics4({ + ...options, + identity, + measurementId: measurementId, + testMode, + debug, + contentGroupBy, + allowedContexts, + allowedAttributes, + }); + } + + /** + * Primary event capture implementation. Handles core navigate event as a + * pageview and the rest as custom events. All custom dimensions/metrics are + * applied as they should be (set on pageview, merged object on events). + * @param event - AnalyticsEvent type captured + */ + captureEvent(event: AnalyticsEvent) { + const { context, action, subject, value, attributes } = event; + const customEventData = this.setEventParameters(context, attributes); + if (this.contentGroupBy) { + customEventData.content_group = context[this.contentGroupBy]!; + } + + if (action === 'navigate' && context.extension === 'App') { + this.capture.event( + { + category: context.extension || 'App', + action: 'page_view', + label: subject, + value, + }, + customEventData, + ); + return; + } + + if (action === 'search') { + customEventData.search_term = subject; + } + + this.capture.event( + { + category: context.extension || 'App', + action, + label: subject, + value, + }, + customEventData, + ); + } + + /** + * Returns an object of dimensions/metrics given an Analytics Context and an + * Event Attributes, e.g. { c_pluginId: "some value", a_attribute1: 42 } + * @param context analytics context object + * @param attributes additional analytics event attributes + */ + private setEventParameters( + context: AnalyticsContextValue, + attributes: AnalyticsEventAttributes = {}, + ) { + const customEventParameters: { + [x: string]: string | number | boolean | undefined; + } = {}; + + const contextKeys = + this.allowedContexts?.join('') === '*' + ? Object.keys(context) + : this.allowedContexts; + + contextKeys?.forEach(ctx => { + if (context[ctx]) { + customEventParameters[`c_${ctx}`] = context[ctx]; + } + }); + + const attrKeys = + this.allowedAttributes?.join('') === '*' + ? Object.keys(attributes) + : this.allowedAttributes; + attrKeys?.forEach(attr => { + if (attributes[attr]) { + customEventParameters[`a_${attr}`] = attributes[attr]; + } + }); + + return customEventParameters; + } + + /** + * Sets the GA userId, based on the `userEntityRef` set on the backstage + * identity loaded from a given Backstage Identity API instance. Because + * Google forbids sending any PII (including on the userId field), we hash + * the entire `userEntityRef` on behalf of integrators: + * + * - With value `User:default/name`, userId becomes `sha256(User:default/name)` + * + * If an integrator wishes to use an alternative hashing mechanism or an + * entirely different value, they may do so by passing a `userIdTransform` + * function alongside the `identityApi` to `GoogleAnalytics.fromConfig()`. + * This function receives the `userEntityRef` as an argument and should + * resolve to a hashed version of whatever identifier they choose. + * + * Note: this feature requires that an integrator has set up a Google + * Analytics User ID view in the property used to track Backstage. + * @param identityApi IdentityApi object + */ + private async setUserFrom(identityApi: IdentityApi) { + const { userEntityRef } = await identityApi.getBackstageIdentity(); + + // Prevent PII from being passed to Google Analytics. + const userId = await this.getPrivateUserId(userEntityRef); + + // Set the user ID. + ReactGA.set({ user_id: userId }); + + // Notify the deferred capture mechanism that it may proceed. + this.capture.setReady(); + } + + /** + * Returns a PII-free (according to Google's terms of service) user ID for + * use in Google Analytics. + * @param userEntityRef user entity as string + */ + private getPrivateUserId(userEntityRef: string): Promise { + // Allow integrators to provide their own hashing transformer. + if (this.customUserIdTransform) { + return this.customUserIdTransform(userEntityRef); + } + + return this.hash(userEntityRef); + } + + /** + * Simple hash function; relies on web cryptography + the sha-256 algorithm. + * @param value value to be hashed + */ + private async hash(value: string): Promise { + const digest = await window.crypto.subtle.digest( + 'sha-256', + new TextEncoder().encode(value), + ); + const hashArray = Array.from(new Uint8Array(digest)); + return hashArray.map(b => b.toString(16).padStart(2, '0')).join(''); + } +} diff --git a/plugins/analytics-module-ga4/src/apis/implementations/AnalyticsApi/index.ts b/plugins/analytics-module-ga4/src/apis/implementations/AnalyticsApi/index.ts new file mode 100644 index 0000000000..2b21af1b1b --- /dev/null +++ b/plugins/analytics-module-ga4/src/apis/implementations/AnalyticsApi/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +export { GoogleAnalytics4 } from './GoogleAnalytics4'; diff --git a/plugins/analytics-module-ga4/src/index.ts b/plugins/analytics-module-ga4/src/index.ts new file mode 100644 index 0000000000..0adf114679 --- /dev/null +++ b/plugins/analytics-module-ga4/src/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +export * from './apis/implementations/AnalyticsApi'; diff --git a/plugins/analytics-module-ga4/src/setupTests.ts b/plugins/analytics-module-ga4/src/setupTests.ts new file mode 100644 index 0000000000..4ed20ac097 --- /dev/null +++ b/plugins/analytics-module-ga4/src/setupTests.ts @@ -0,0 +1,34 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import '@testing-library/jest-dom'; +import 'cross-fetch/polyfill'; + +// eslint-disable-next-line no-restricted-imports +import { TextEncoder } from 'util'; + +// Mock browser crypto.subtle.digest method for sha-256 hashing. +Object.defineProperty(global.self, 'crypto', { + value: { + subtle: { + digest: (_algo: string, data: Uint8Array): ArrayBuffer => data.buffer, + }, + }, +}); + +// Also used in browser-based APIs for hashing. +Object.defineProperty(global.self, 'TextEncoder', { + value: TextEncoder, +}); diff --git a/plugins/analytics-module-ga4/src/util/DeferredCapture.ts b/plugins/analytics-module-ga4/src/util/DeferredCapture.ts new file mode 100644 index 0000000000..c2a1629d2a --- /dev/null +++ b/plugins/analytics-module-ga4/src/util/DeferredCapture.ts @@ -0,0 +1,96 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import ReactGA from 'react-ga4'; + +import { UaEventOptions } from 'react-ga4/types/ga4'; + +type Hit = { + hitType: string; + data: { + [x: string]: any; + }; +}; + +/** + * A wrapper around ReactGA that can optionally handle latent capture logic. + * + * - When defer is `false`, event data is sent directly to GA. + * - When defer is `true`, event data is queued (with a timestamp), so that it + * can be sent to GA once externally indicated to be ready. This relies on + * the `qt` or `queueTime` parameter of the Measurement Protocol. + * + * @see https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters#qt + */ +export class DeferredCapture { + /** + * Queue of deferred hits to be processed when ready. When undefined, hits + * can safely be sent without delay. + */ + private queue: Hit[] | undefined; + + /** + * constructor for creating the DeferredCapture object + * @param defer type of {defer: boolean} + */ + constructor({ defer = false }: { defer: boolean }) { + this.queue = defer ? [] : undefined; + } + + /** + * Indicates that deferred capture may now proceed. + */ + setReady() { + if (this.queue) { + this.queue.forEach(this.sendDeferred); + this.queue = undefined; + } + } + + /** + * Either forwards the event directly to GA, or (if configured) enqueues the + * event hit to be captured when ready. + * @param eventDetails type of UaEventOptions object + * @param metadata any object that can be passed as additional parameter to the event + */ + event(eventDetails: UaEventOptions, metadata: any = {}) { + const data = { + ...eventDetails, + ...metadata, + }; + if (this.queue) { + this.queue.push({ + hitType: eventDetails.action, + data: { + ...data, + timestamp_micros: Date.now() * 1000, + }, + }); + return; + } + ReactGA.event(eventDetails.action, data); + } + + /** + * Sends a given hit to GA, decorated with the correct queue time. + * @param hit Hit object + */ + private sendDeferred(hit: Hit) { + // Send the hit with the appropriate queue time (`qt`). + ReactGA.event(hit.hitType, { + ...hit.data, + }); + } +} diff --git a/plugins/analytics-module-ga4/src/util/index.ts b/plugins/analytics-module-ga4/src/util/index.ts new file mode 100644 index 0000000000..267e7a2e62 --- /dev/null +++ b/plugins/analytics-module-ga4/src/util/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +export { DeferredCapture } from './DeferredCapture'; diff --git a/plugins/apache-airflow/CHANGELOG.md b/plugins/apache-airflow/CHANGELOG.md index 7d296313ff..368995a369 100644 --- a/plugins/apache-airflow/CHANGELOG.md +++ b/plugins/apache-airflow/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-apache-airflow +## 0.2.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.2.10 ### Patch Changes diff --git a/plugins/apache-airflow/package.json b/plugins/apache-airflow/package.json index 4475515312..6d503e972a 100644 --- a/plugins/apache-airflow/package.json +++ b/plugins/apache-airflow/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-apache-airflow", - "version": "0.2.10", + "version": "0.2.11-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md index ca5d9862dd..635b1e2dca 100644 --- a/plugins/api-docs/CHANGELOG.md +++ b/plugins/api-docs/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-api-docs +## 0.9.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog@1.11.0-next.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.9.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/plugin-catalog@1.11.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + ## 0.9.2 ### Patch Changes diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index d1c7743740..89e65dfcc3 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-api-docs", "description": "A Backstage plugin that helps represent API entities in the frontend", - "version": "0.9.2", + "version": "0.9.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/apollo-explorer/CHANGELOG.md b/plugins/apollo-explorer/CHANGELOG.md index 302798c454..174a862d61 100644 --- a/plugins/apollo-explorer/CHANGELOG.md +++ b/plugins/apollo-explorer/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-apollo-explorer +## 0.1.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.1.10 ### Patch Changes diff --git a/plugins/apollo-explorer/package.json b/plugins/apollo-explorer/package.json index 5ca7dbf365..c1164cf1d6 100644 --- a/plugins/apollo-explorer/package.json +++ b/plugins/apollo-explorer/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-apollo-explorer", - "version": "0.1.10", + "version": "0.1.11-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/app-backend/CHANGELOG.md b/plugins/app-backend/CHANGELOG.md index ae135f09d8..1e98f25c64 100644 --- a/plugins/app-backend/CHANGELOG.md +++ b/plugins/app-backend/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-app-backend +## 0.3.45-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config-loader@1.3.0-next.0 + - @backstage/config@1.0.7 + +## 0.3.45-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/config-loader@1.3.0-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + ## 0.3.44 ### Patch Changes diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json index f8984d2289..85602a06e4 100644 --- a/plugins/app-backend/package.json +++ b/plugins/app-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-app-backend", "description": "A Backstage backend plugin that serves the Backstage frontend app", - "version": "0.3.44", + "version": "0.3.45-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md index eac329e9b5..c6ff454a7d 100644 --- a/plugins/auth-backend/CHANGELOG.md +++ b/plugins/auth-backend/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-auth-backend +## 0.18.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/config@1.0.7 + +## 0.18.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.18.2 ### Patch Changes diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index 33624970c6..61c3fe9a8d 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-auth-backend", "description": "A Backstage backend plugin that handles authentication", - "version": "0.18.2", + "version": "0.18.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-node/CHANGELOG.md b/plugins/auth-node/CHANGELOG.md index e8831af428..7cb9f4cc64 100644 --- a/plugins/auth-node/CHANGELOG.md +++ b/plugins/auth-node/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-auth-node +## 0.2.14-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + +## 0.2.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.2.13 ### Patch Changes diff --git a/plugins/auth-node/package.json b/plugins/auth-node/package.json index bc44ef7cdd..1d8e71a4c0 100644 --- a/plugins/auth-node/package.json +++ b/plugins/auth-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-node", - "version": "0.2.13", + "version": "0.2.14-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-devops-backend/CHANGELOG.md b/plugins/azure-devops-backend/CHANGELOG.md index c272b557b7..3dd206ae66 100644 --- a/plugins/azure-devops-backend/CHANGELOG.md +++ b/plugins/azure-devops-backend/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-azure-devops-backend +## 0.3.24-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + +## 0.3.24-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-azure-devops-common@0.3.0 + ## 0.3.23 ### Patch Changes diff --git a/plugins/azure-devops-backend/package.json b/plugins/azure-devops-backend/package.json index bc91be652c..f28bfa5cb4 100644 --- a/plugins/azure-devops-backend/package.json +++ b/plugins/azure-devops-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops-backend", - "version": "0.3.23", + "version": "0.3.24-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-devops/CHANGELOG.md b/plugins/azure-devops/CHANGELOG.md index f9ff8859b9..a0328bcb22 100644 --- a/plugins/azure-devops/CHANGELOG.md +++ b/plugins/azure-devops/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-azure-devops +## 0.2.9-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.2.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/plugin-azure-devops-common@0.3.0 + ## 0.2.8 ### Patch Changes diff --git a/plugins/azure-devops/package.json b/plugins/azure-devops/package.json index 500a09c443..914cc9a4ba 100644 --- a/plugins/azure-devops/package.json +++ b/plugins/azure-devops/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops", - "version": "0.2.8", + "version": "0.2.9-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-sites-backend/CHANGELOG.md b/plugins/azure-sites-backend/CHANGELOG.md index 50ffed69aa..9c25a70214 100644 --- a/plugins/azure-sites-backend/CHANGELOG.md +++ b/plugins/azure-sites-backend/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-azure-sites-backend +## 0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + +## 0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-azure-sites-common@0.1.0 + ## 0.1.6 ### Patch Changes diff --git a/plugins/azure-sites-backend/package.json b/plugins/azure-sites-backend/package.json index 03f581d002..a58459d2aa 100644 --- a/plugins/azure-sites-backend/package.json +++ b/plugins/azure-sites-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-sites-backend", - "version": "0.1.6", + "version": "0.1.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-sites/CHANGELOG.md b/plugins/azure-sites/CHANGELOG.md index 6be4df0138..1eea015834 100644 --- a/plugins/azure-sites/CHANGELOG.md +++ b/plugins/azure-sites/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-azure-sites +## 0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + - @backstage/plugin-azure-sites-common@0.1.0 + ## 0.1.6 ### Patch Changes diff --git a/plugins/azure-sites/package.json b/plugins/azure-sites/package.json index 961a22ac2c..8863e76dae 100644 --- a/plugins/azure-sites/package.json +++ b/plugins/azure-sites/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-sites", - "version": "0.1.6", + "version": "0.1.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/badges-backend/CHANGELOG.md b/plugins/badges-backend/CHANGELOG.md index ffc366ce14..50bf55c918 100644 --- a/plugins/badges-backend/CHANGELOG.md +++ b/plugins/badges-backend/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-badges-backend +## 0.1.39-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + +## 0.1.39-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.1.38 ### Patch Changes diff --git a/plugins/badges-backend/package.json b/plugins/badges-backend/package.json index a24a4069ab..5f9b5b51a3 100644 --- a/plugins/badges-backend/package.json +++ b/plugins/badges-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges-backend", "description": "A Backstage backend plugin that generates README badges for your entities", - "version": "0.1.38", + "version": "0.1.39-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/badges/CHANGELOG.md b/plugins/badges/CHANGELOG.md index e9ac52cab0..b4a0e6aec6 100644 --- a/plugins/badges/CHANGELOG.md +++ b/plugins/badges/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-badges +## 0.2.42-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.2.42-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + ## 0.2.41 ### Patch Changes diff --git a/plugins/badges/package.json b/plugins/badges/package.json index d65ec34acc..0e736d1cbc 100644 --- a/plugins/badges/package.json +++ b/plugins/badges/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges", "description": "A Backstage plugin that generates README badges for your entities", - "version": "0.2.41", + "version": "0.2.42-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bazaar-backend/CHANGELOG.md b/plugins/bazaar-backend/CHANGELOG.md index 5808a9c9fe..11d820a334 100644 --- a/plugins/bazaar-backend/CHANGELOG.md +++ b/plugins/bazaar-backend/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-bazaar-backend +## 0.2.8-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 0.2.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.2.7 ### Patch Changes diff --git a/plugins/bazaar-backend/package.json b/plugins/bazaar-backend/package.json index d9148b2b90..60e549655e 100644 --- a/plugins/bazaar-backend/package.json +++ b/plugins/bazaar-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar-backend", - "version": "0.2.7", + "version": "0.2.8-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bazaar/CHANGELOG.md b/plugins/bazaar/CHANGELOG.md index 04c1e34d42..298c684d3e 100644 --- a/plugins/bazaar/CHANGELOG.md +++ b/plugins/bazaar/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-bazaar +## 0.2.8-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/cli@0.22.7-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog@1.11.0-next.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.2.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/plugin-catalog@1.11.0-next.0 + - @backstage/cli@0.22.7-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + ## 0.2.7 ### Patch Changes diff --git a/plugins/bazaar/package.json b/plugins/bazaar/package.json index 8b376b66f1..c61db47231 100644 --- a/plugins/bazaar/package.json +++ b/plugins/bazaar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar", - "version": "0.2.7", + "version": "0.2.8-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bitbucket-cloud-common/CHANGELOG.md b/plugins/bitbucket-cloud-common/CHANGELOG.md index ae847c3723..c3c31ed392 100644 --- a/plugins/bitbucket-cloud-common/CHANGELOG.md +++ b/plugins/bitbucket-cloud-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-bitbucket-cloud-common +## 0.2.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.4.5-next.0 + ## 0.2.5 ### Patch Changes diff --git a/plugins/bitbucket-cloud-common/package.json b/plugins/bitbucket-cloud-common/package.json index 848c612e4c..7bf2c5791e 100644 --- a/plugins/bitbucket-cloud-common/package.json +++ b/plugins/bitbucket-cloud-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-bitbucket-cloud-common", "description": "Common functionalities for bitbucket-cloud plugins", - "version": "0.2.5", + "version": "0.2.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bitrise/CHANGELOG.md b/plugins/bitrise/CHANGELOG.md index 3eb329235a..1ef42a6bbe 100644 --- a/plugins/bitrise/CHANGELOG.md +++ b/plugins/bitrise/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-bitrise +## 0.1.45-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.1.45-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + ## 0.1.44 ### Patch Changes diff --git a/plugins/bitrise/package.json b/plugins/bitrise/package.json index 67b5e7ff10..1b3740a058 100644 --- a/plugins/bitrise/package.json +++ b/plugins/bitrise/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-bitrise", "description": "A Backstage plugin that integrates towards Bitrise", - "version": "0.1.44", + "version": "0.1.45-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-aws/CHANGELOG.md b/plugins/catalog-backend-module-aws/CHANGELOG.md index 0e73b07da1..f7ffc5e63c 100644 --- a/plugins/catalog-backend-module-aws/CHANGELOG.md +++ b/plugins/catalog-backend-module-aws/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-catalog-backend-module-aws +## 0.1.19-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 0.1.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-kubernetes-common@0.6.2 + ## 0.1.18 ### Patch Changes diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json index b072d2c4da..73bd5123d2 100644 --- a/plugins/catalog-backend-module-aws/package.json +++ b/plugins/catalog-backend-module-aws/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-aws", "description": "A Backstage catalog backend module that helps integrate towards AWS", - "version": "0.1.18", + "version": "0.1.19-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-azure/CHANGELOG.md b/plugins/catalog-backend-module-azure/CHANGELOG.md index 1f7e3ded6a..e8458d82e7 100644 --- a/plugins/catalog-backend-module-azure/CHANGELOG.md +++ b/plugins/catalog-backend-module-azure/CHANGELOG.md @@ -1,5 +1,32 @@ # @backstage/plugin-catalog-backend-module-azure +## 0.1.16-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 0.1.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + ## 0.1.15 ### Patch Changes diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index 0ae8557f0b..2e2ff96e7e 100644 --- a/plugins/catalog-backend-module-azure/package.json +++ b/plugins/catalog-backend-module-azure/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-azure", "description": "A Backstage catalog backend module that helps integrate towards Azure", - "version": "0.1.15", + "version": "0.1.16-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md index fd34ccec1f..af6e6c3a7f 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,34 @@ # @backstage/plugin-catalog-backend-module-bitbucket-cloud +## 0.1.12-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6-next.1 + +## 0.1.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.6-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-events-node@0.2.6-next.0 + ## 0.1.11 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json index 5c4eb55789..77df5b12b4 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/package.json +++ b/plugins/catalog-backend-module-bitbucket-cloud/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-cloud", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket Cloud", - "version": "0.1.11", + "version": "0.1.12-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md index a75dfb73f0..3c9e51b08e 100644 --- a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-catalog-backend-module-bitbucket-server +## 0.1.10-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 0.1.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.1.9 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json index 820296d739..68960fbf81 100644 --- a/plugins/catalog-backend-module-bitbucket-server/package.json +++ b/plugins/catalog-backend-module-bitbucket-server/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-server", - "version": "0.1.9", + "version": "0.1.10-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md index 2da292f450..0193d551a5 100644 --- a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-catalog-backend-module-bitbucket +## 0.2.12-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/config@1.0.7 + +## 0.2.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.6-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.2.11 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket/package.json b/plugins/catalog-backend-module-bitbucket/package.json index af070f141e..64269a9102 100644 --- a/plugins/catalog-backend-module-bitbucket/package.json +++ b/plugins/catalog-backend-module-bitbucket/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket", - "version": "0.2.11", + "version": "0.2.12-next.1", "deprecated": true, "main": "src/index.ts", "types": "src/index.ts", diff --git a/plugins/catalog-backend-module-gerrit/CHANGELOG.md b/plugins/catalog-backend-module-gerrit/CHANGELOG.md index 056ef109a3..ea3d4af960 100644 --- a/plugins/catalog-backend-module-gerrit/CHANGELOG.md +++ b/plugins/catalog-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-catalog-backend-module-gerrit +## 0.1.13-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 0.1.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.1.12 ### Patch Changes diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json index e90ecf8ac5..22bc3a95e5 100644 --- a/plugins/catalog-backend-module-gerrit/package.json +++ b/plugins/catalog-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-gerrit", - "version": "0.1.12", + "version": "0.1.13-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-github/CHANGELOG.md b/plugins/catalog-backend-module-github/CHANGELOG.md index 13abe6ffc3..f54a55f9e9 100644 --- a/plugins/catalog-backend-module-github/CHANGELOG.md +++ b/plugins/catalog-backend-module-github/CHANGELOG.md @@ -1,5 +1,38 @@ # @backstage/plugin-catalog-backend-module-github +## 0.2.8-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-catalog-backend@1.9.1-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6-next.1 + +## 0.2.8-next.0 + +### Patch Changes + +- 78bb674a713: Fixed bug in queryWithPaging that caused secondary rate limit errors in GitHub with organizations having more than 1000 repositories. This change makes one request per second to avoid concurrency issues. +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-catalog-backend@1.9.1-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-events-node@0.2.6-next.0 + ## 0.2.7 ### Patch Changes diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json index d87c385269..5b29baa05c 100644 --- a/plugins/catalog-backend-module-github/package.json +++ b/plugins/catalog-backend-module-github/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-github", "description": "A Backstage catalog backend module that helps integrate towards GitHub", - "version": "0.2.7", + "version": "0.2.8-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-github/src/lib/github.ts b/plugins/catalog-backend-module-github/src/lib/github.ts index 39501e89bc..d0b629092a 100644 --- a/plugins/catalog-backend-module-github/src/lib/github.ts +++ b/plugins/catalog-backend-module-github/src/lib/github.ts @@ -545,6 +545,7 @@ export async function queryWithPaging< variables: Variables, ): Promise { const result: OutputType[] = []; + const sleep = (ms: number) => new Promise(r => setTimeout(r, ms)); let cursor: string | undefined = undefined; for (let j = 0; j < 1000 /* just for sanity */; ++j) { @@ -573,6 +574,7 @@ export async function queryWithPaging< if (!conn.pageInfo.hasNextPage) { break; } else { + await sleep(1000); cursor = conn.pageInfo.endCursor; } } diff --git a/plugins/catalog-backend-module-gitlab/CHANGELOG.md b/plugins/catalog-backend-module-gitlab/CHANGELOG.md index c235ea5eef..9882178a2b 100644 --- a/plugins/catalog-backend-module-gitlab/CHANGELOG.md +++ b/plugins/catalog-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-catalog-backend-module-gitlab +## 0.2.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.2.0 ### Minor Changes diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index c56248abb2..22237862aa 100644 --- a/plugins/catalog-backend-module-gitlab/package.json +++ b/plugins/catalog-backend-module-gitlab/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-gitlab", "description": "A Backstage catalog backend module that helps integrate towards GitLab", - "version": "0.2.0", + "version": "0.2.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md index d5894d9aba..9921b0dabc 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md +++ b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md @@ -1,5 +1,34 @@ # @backstage/plugin-catalog-backend-module-incremental-ingestion +## 0.3.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-catalog-backend@1.9.1-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6-next.1 + +## 0.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-catalog-backend@1.9.1-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-events-node@0.2.6-next.0 + - @backstage/plugin-permission-common@0.7.5 + ## 0.3.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-incremental-ingestion/package.json b/plugins/catalog-backend-module-incremental-ingestion/package.json index da3f63c624..686c89cd25 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/package.json +++ b/plugins/catalog-backend-module-incremental-ingestion/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-incremental-ingestion", "description": "An entity provider for streaming large asset sources into the catalog", - "version": "0.3.1", + "version": "0.3.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-ldap/CHANGELOG.md b/plugins/catalog-backend-module-ldap/CHANGELOG.md index edcc7f6eb0..104e3f1c0f 100644 --- a/plugins/catalog-backend-module-ldap/CHANGELOG.md +++ b/plugins/catalog-backend-module-ldap/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-catalog-backend-module-ldap +## 0.5.12-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/config@1.0.7 + +## 0.5.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + ## 0.5.11 ### Patch Changes diff --git a/plugins/catalog-backend-module-ldap/package.json b/plugins/catalog-backend-module-ldap/package.json index e3513350c0..120131d95a 100644 --- a/plugins/catalog-backend-module-ldap/package.json +++ b/plugins/catalog-backend-module-ldap/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-ldap", "description": "A Backstage catalog backend module that helps integrate towards LDAP", - "version": "0.5.11", + "version": "0.5.12-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-msgraph/CHANGELOG.md b/plugins/catalog-backend-module-msgraph/CHANGELOG.md index 337d0d381b..c0c0888f38 100644 --- a/plugins/catalog-backend-module-msgraph/CHANGELOG.md +++ b/plugins/catalog-backend-module-msgraph/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-catalog-backend-module-msgraph +## 0.5.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 0.5.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13 + ## 0.5.3 ### Patch Changes diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json index b990f19d24..026386457a 100644 --- a/plugins/catalog-backend-module-msgraph/package.json +++ b/plugins/catalog-backend-module-msgraph/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-msgraph", "description": "A Backstage catalog backend module that helps integrate towards Microsoft Graph", - "version": "0.5.3", + "version": "0.5.4-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-openapi/CHANGELOG.md b/plugins/catalog-backend-module-openapi/CHANGELOG.md index a4bd0a94f8..5fc587a4f9 100644 --- a/plugins/catalog-backend-module-openapi/CHANGELOG.md +++ b/plugins/catalog-backend-module-openapi/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-catalog-backend-module-openapi +## 0.1.11-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-catalog-backend@1.9.1-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/config@1.0.7 + +## 0.1.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-catalog-backend@1.9.1-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + ## 0.1.10 ### Patch Changes diff --git a/plugins/catalog-backend-module-openapi/package.json b/plugins/catalog-backend-module-openapi/package.json index 4d8bc18845..e02490ef59 100644 --- a/plugins/catalog-backend-module-openapi/package.json +++ b/plugins/catalog-backend-module-openapi/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-openapi", "description": "A Backstage catalog backend module that helps with OpenAPI specifications", - "version": "0.1.10", + "version": "0.1.11-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md index 6479938723..39bd1e3cdc 100644 --- a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md +++ b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-catalog-backend-module-puppetdb +## 0.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.1.1 ### Patch Changes diff --git a/plugins/catalog-backend-module-puppetdb/package.json b/plugins/catalog-backend-module-puppetdb/package.json index 20e45ec2d8..65bda327dd 100644 --- a/plugins/catalog-backend-module-puppetdb/package.json +++ b/plugins/catalog-backend-module-puppetdb/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-puppetdb", "description": "A Backstage catalog backend module that helps integrate towards PuppetDB", - "version": "0.1.1", + "version": "0.1.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md index 6eb6be9e00..1a715e26bc 100644 --- a/plugins/catalog-backend/CHANGELOG.md +++ b/plugins/catalog-backend/CHANGELOG.md @@ -1,5 +1,41 @@ # @backstage/plugin-catalog-backend +## 1.9.1-next.1 + +### Patch Changes + +- 27956d78671: Adjusted the OpenAPI schema file name according to the new structure +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/plugin-permission-node@0.7.8-next.1 + - @backstage/plugin-search-backend-module-catalog@0.1.1-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 1.9.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-permission-node@0.7.8-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.1-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-scaffolder-common@1.2.7 + - @backstage/plugin-search-common@1.2.3 + ## 1.9.0 ### Minor Changes diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index c6c0198462..289a9a801d 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend", "description": "The Backstage backend plugin that provides the Backstage catalog", - "version": "1.9.0", + "version": "1.9.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend/src/schema/openapi.ts b/plugins/catalog-backend/src/schema/openapi.generated.ts similarity index 99% rename from plugins/catalog-backend/src/schema/openapi.ts rename to plugins/catalog-backend/src/schema/openapi.generated.ts index 3d775c54cf..e1853f252d 100644 --- a/plugins/catalog-backend/src/schema/openapi.ts +++ b/plugins/catalog-backend/src/schema/openapi.generated.ts @@ -13,6 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + +// ****************************************************************** +// * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * +// ****************************************************************** + export default { openapi: '3.1.0', info: { diff --git a/plugins/catalog-backend/src/service/createRouter.ts b/plugins/catalog-backend/src/service/createRouter.ts index 35a6426ae8..5ac1f2eda7 100644 --- a/plugins/catalog-backend/src/service/createRouter.ts +++ b/plugins/catalog-backend/src/service/createRouter.ts @@ -51,7 +51,7 @@ import { validateRequestBody, } from './util'; import type { ApiRouter } from '@backstage/backend-openapi-utils'; -import spec from '../schema/openapi'; +import spec from '../schema/openapi.generated'; import { PluginTaskScheduler } from '@backstage/backend-tasks'; /** diff --git a/plugins/catalog-customized/CHANGELOG.md b/plugins/catalog-customized/CHANGELOG.md index 5dafdbacaf..138edaee90 100644 --- a/plugins/catalog-customized/CHANGELOG.md +++ b/plugins/catalog-customized/CHANGELOG.md @@ -1,5 +1,21 @@ # @internal/plugin-catalog-customized +## 0.0.10-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.11.0-next.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.0.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/plugin-catalog@1.11.0-next.0 + ## 0.0.9 ### Patch Changes diff --git a/plugins/catalog-customized/package.json b/plugins/catalog-customized/package.json index 52bd7620bf..808f7a40e4 100644 --- a/plugins/catalog-customized/package.json +++ b/plugins/catalog-customized/package.json @@ -1,7 +1,7 @@ { "name": "@internal/plugin-catalog-customized", "description": "The internal Backstage Customizable plugin for browsing the Backstage catalog", - "version": "0.0.9", + "version": "0.0.10-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-graph/CHANGELOG.md b/plugins/catalog-graph/CHANGELOG.md index 2df93ff452..eabfdaff12 100644 --- a/plugins/catalog-graph/CHANGELOG.md +++ b/plugins/catalog-graph/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-catalog-graph +## 0.2.30-next.1 + +### Patch Changes + +- d446f8fb0a8: Expose all `EntityRelationsGraphProps` to Catalog Graph Page +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.2.30-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + ## 0.2.29 ### Patch Changes diff --git a/plugins/catalog-graph/api-report.md b/plugins/catalog-graph/api-report.md index f7444c5f1b..645fc1162e 100644 --- a/plugins/catalog-graph/api-report.md +++ b/plugins/catalog-graph/api-report.md @@ -18,22 +18,23 @@ import { RouteRef } from '@backstage/core-plugin-api'; export const ALL_RELATION_PAIRS: RelationPairs; // @public -export const CatalogGraphPage: (props: { - relationPairs?: RelationPairs | undefined; - initialState?: - | { - selectedRelations?: string[] | undefined; - selectedKinds?: string[] | undefined; - rootEntityRefs?: string[] | undefined; - maxDepth?: number | undefined; - unidirectional?: boolean | undefined; - mergeRelations?: boolean | undefined; - direction?: Direction | undefined; - showFilters?: boolean | undefined; - curve?: 'curveStepBefore' | 'curveMonotoneX' | undefined; - } - | undefined; -}) => JSX.Element; +export const CatalogGraphPage: ( + props: { + initialState?: + | { + selectedRelations?: string[] | undefined; + selectedKinds?: string[] | undefined; + rootEntityRefs?: string[] | undefined; + maxDepth?: number | undefined; + unidirectional?: boolean | undefined; + mergeRelations?: boolean | undefined; + direction?: Direction | undefined; + showFilters?: boolean | undefined; + curve?: 'curveStepBefore' | 'curveMonotoneX' | undefined; + } + | undefined; + } & Partial, +) => JSX.Element; // @public export const catalogGraphPlugin: BackstagePlugin< diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json index e0837c7cda..b9ac5ea1c1 100644 --- a/plugins/catalog-graph/package.json +++ b/plugins/catalog-graph/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-graph", - "version": "0.2.29", + "version": "0.2.30-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.tsx b/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.tsx index 0e766c2887..92da650359 100644 --- a/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.tsx +++ b/plugins/catalog-graph/src/components/CatalogGraphPage/CatalogGraphPage.tsx @@ -38,7 +38,7 @@ import { Direction, EntityNode, EntityRelationsGraph, - RelationPairs, + EntityRelationsGraphProps, } from '../EntityRelationsGraph'; import { CurveFilter } from './CurveFilter'; import { DirectionFilter } from './DirectionFilter'; @@ -103,20 +103,21 @@ const useStyles = makeStyles( { name: 'PluginCatalogGraphCatalogGraphPage' }, ); -export const CatalogGraphPage = (props: { - relationPairs?: RelationPairs; - initialState?: { - selectedRelations?: string[]; - selectedKinds?: string[]; - rootEntityRefs?: string[]; - maxDepth?: number; - unidirectional?: boolean; - mergeRelations?: boolean; - direction?: Direction; - showFilters?: boolean; - curve?: 'curveStepBefore' | 'curveMonotoneX'; - }; -}) => { +export const CatalogGraphPage = ( + props: { + initialState?: { + selectedRelations?: string[]; + selectedKinds?: string[]; + rootEntityRefs?: string[]; + maxDepth?: number; + unidirectional?: boolean; + mergeRelations?: boolean; + direction?: Direction; + showFilters?: boolean; + curve?: 'curveStepBefore' | 'curveMonotoneX'; + }; + } & Partial, +) => { const { relationPairs = ALL_RELATION_PAIRS, initialState } = props; const navigate = useNavigate(); @@ -234,6 +235,7 @@ export const CatalogGraphPage = (props: { navigate to entity. + + + + + /* if you want namespace picker */ + + + + + + + ``` + + The namespace column can be added using `createNamespaceColumn();`. This is only needed if you customized the columns for CatalogTable. + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.4.5-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-permission-react@0.4.12 + ## 1.5.0 ### Minor Changes diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index bfda409d74..37190aa4c8 100644 --- a/plugins/catalog-react/package.json +++ b/plugins/catalog-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-react", "description": "A frontend library that helps other Backstage plugins interact with the catalog", - "version": "1.5.0", + "version": "1.6.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md index efa132de8c..1082396da1 100644 --- a/plugins/catalog/CHANGELOG.md +++ b/plugins/catalog/CHANGELOG.md @@ -1,5 +1,57 @@ # @backstage/plugin-catalog +## 1.11.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/plugin-search-react@1.6.0-next.1 + - @backstage/integration-react@1.1.13-next.1 + +## 1.11.0-next.0 + +### Minor Changes + +- 2258dcae970: Added an entity namespace filter and column on the default catalog page. + + If you have a custom version of the catalog page, you can add this filter in your CatalogPage code: + + ```ts + + + + + + /* if you want namespace picker */ + + + + + + + ``` + + The namespace column can be added using `createNamespaceColumn();`. This is only needed if you customized the columns for CatalogTable. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/plugin-search-react@1.6.0-next.0 + - @backstage/integration-react@1.1.13-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-search-common@1.2.3 + ## 1.10.0 ### Minor Changes diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index 439346d0b1..0d5a9badcd 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog", "description": "The Backstage plugin for browsing the Backstage catalog", - "version": "1.10.0", + "version": "1.11.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md index 551454641f..d895633ad4 100644 --- a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md +++ b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-cicd-statistics-module-gitlab +## 0.1.14-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-cicd-statistics@0.1.20-next.1 + +## 0.1.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-cicd-statistics@0.1.20-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + ## 0.1.13 ### Patch Changes diff --git a/plugins/cicd-statistics-module-gitlab/package.json b/plugins/cicd-statistics-module-gitlab/package.json index 43ef182238..20d82e485f 100644 --- a/plugins/cicd-statistics-module-gitlab/package.json +++ b/plugins/cicd-statistics-module-gitlab/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cicd-statistics-module-gitlab", "description": "CI/CD Statistics plugin module; Gitlab CICD", - "version": "0.1.13", + "version": "0.1.14-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cicd-statistics/CHANGELOG.md b/plugins/cicd-statistics/CHANGELOG.md index 4f45df49ab..3a802df672 100644 --- a/plugins/cicd-statistics/CHANGELOG.md +++ b/plugins/cicd-statistics/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-cicd-statistics +## 0.1.20-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.1.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + ## 0.1.19 ### Patch Changes diff --git a/plugins/cicd-statistics/package.json b/plugins/cicd-statistics/package.json index a1302cec59..a6a01ae05c 100644 --- a/plugins/cicd-statistics/package.json +++ b/plugins/cicd-statistics/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cicd-statistics", "description": "A frontend plugin visualizing CI/CD pipeline statistics (build time)", - "version": "0.1.19", + "version": "0.1.20-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/circleci/CHANGELOG.md b/plugins/circleci/CHANGELOG.md index dbf17bcca8..8afa59660d 100644 --- a/plugins/circleci/CHANGELOG.md +++ b/plugins/circleci/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-circleci +## 0.3.18-next.1 + +### Patch Changes + +- 1c4958d905f: Hide empty time field data for queued builds which haven't started yet +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.3.18-next.0 + +### Patch Changes + +- 451b3cadb3d: Fixes row display for in progress jobs to not display trailing "took" +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + ## 0.3.17 ### Patch Changes diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index 000bc1023e..683b43795c 100644 --- a/plugins/circleci/package.json +++ b/plugins/circleci/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-circleci", "description": "A Backstage plugin that integrates towards Circle CI", - "version": "0.3.17", + "version": "0.3.18-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/circleci/src/components/BuildsPage/lib/CITable/CITable.tsx b/plugins/circleci/src/components/BuildsPage/lib/CITable/CITable.tsx index a9d19bf6db..248275fb77 100644 --- a/plugins/circleci/src/components/BuildsPage/lib/CITable/CITable.tsx +++ b/plugins/circleci/src/components/BuildsPage/lib/CITable/CITable.tsx @@ -205,18 +205,19 @@ const generatedColumns: TableColumn[] = [ { title: 'Time', field: 'startTime', - render: (row: Partial) => ( - <> - - run {relativeTimeTo(row?.startTime)} - - - {row?.stopTime - ? `took ${durationHumanized(row?.startTime, row?.stopTime)}` - : ''} - - - ), + render: (row: Partial) => + row?.startTime ? ( + <> + + run {relativeTimeTo(row?.startTime)} + + + {row?.stopTime + ? `took ${durationHumanized(row?.startTime, row?.stopTime)}` + : ''} + + + ) : null, }, { title: 'Workflow', diff --git a/plugins/cloudbuild/CHANGELOG.md b/plugins/cloudbuild/CHANGELOG.md index b55e9f0bac..ba462e356c 100644 --- a/plugins/cloudbuild/CHANGELOG.md +++ b/plugins/cloudbuild/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-cloudbuild +## 0.3.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.3.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + ## 0.3.17 ### Patch Changes diff --git a/plugins/cloudbuild/package.json b/plugins/cloudbuild/package.json index 1ed9d3416b..26a72a6c84 100644 --- a/plugins/cloudbuild/package.json +++ b/plugins/cloudbuild/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cloudbuild", "description": "A Backstage plugin that integrates towards Google Cloud Build", - "version": "0.3.17", + "version": "0.3.18-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-climate/CHANGELOG.md b/plugins/code-climate/CHANGELOG.md index 87fb1954fb..405e65e814 100644 --- a/plugins/code-climate/CHANGELOG.md +++ b/plugins/code-climate/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-code-climate +## 0.1.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + ## 0.1.17 ### Patch Changes diff --git a/plugins/code-climate/package.json b/plugins/code-climate/package.json index 4f3e28d735..2edda59078 100644 --- a/plugins/code-climate/package.json +++ b/plugins/code-climate/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-code-climate", - "version": "0.1.17", + "version": "0.1.18-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-coverage-backend/CHANGELOG.md b/plugins/code-coverage-backend/CHANGELOG.md index f5af0e7496..a63405bd75 100644 --- a/plugins/code-coverage-backend/CHANGELOG.md +++ b/plugins/code-coverage-backend/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-code-coverage-backend +## 0.2.11-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + +## 0.2.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.2.10 ### Patch Changes diff --git a/plugins/code-coverage-backend/package.json b/plugins/code-coverage-backend/package.json index d12c125179..549e0a1b2c 100644 --- a/plugins/code-coverage-backend/package.json +++ b/plugins/code-coverage-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-code-coverage-backend", "description": "A Backstage backend plugin that helps you keep track of your code coverage", - "version": "0.2.10", + "version": "0.2.11-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-coverage/CHANGELOG.md b/plugins/code-coverage/CHANGELOG.md index 19a82d8e36..7f5789d3a5 100644 --- a/plugins/code-coverage/CHANGELOG.md +++ b/plugins/code-coverage/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-code-coverage +## 0.2.11-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/config@1.0.7 + +## 0.2.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + ## 0.2.10 ### Patch Changes diff --git a/plugins/code-coverage/package.json b/plugins/code-coverage/package.json index 75725f15b9..412c7d3281 100644 --- a/plugins/code-coverage/package.json +++ b/plugins/code-coverage/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-code-coverage", "description": "A Backstage plugin that helps you keep track of your code coverage", - "version": "0.2.10", + "version": "0.2.11-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/codescene/CHANGELOG.md b/plugins/codescene/CHANGELOG.md index 89df441bd9..3c6338dfb0 100644 --- a/plugins/codescene/CHANGELOG.md +++ b/plugins/codescene/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-codescene +## 0.1.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + ## 0.1.12 ### Patch Changes diff --git a/plugins/codescene/package.json b/plugins/codescene/package.json index 410fe69808..744634130c 100644 --- a/plugins/codescene/package.json +++ b/plugins/codescene/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-codescene", - "version": "0.1.12", + "version": "0.1.13-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/config-schema/CHANGELOG.md b/plugins/config-schema/CHANGELOG.md index 5403ca1246..e744ff73b1 100644 --- a/plugins/config-schema/CHANGELOG.md +++ b/plugins/config-schema/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-config-schema +## 0.1.41-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + ## 0.1.40 ### Patch Changes diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json index 2e08ed39ed..893048274e 100644 --- a/plugins/config-schema/package.json +++ b/plugins/config-schema/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-config-schema", "description": "A Backstage plugin that lets you browse the configuration schema of your app", - "version": "0.1.40", + "version": "0.1.41-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cost-insights/CHANGELOG.md b/plugins/cost-insights/CHANGELOG.md index 9036842de6..89ba2ebaa0 100644 --- a/plugins/cost-insights/CHANGELOG.md +++ b/plugins/cost-insights/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-cost-insights +## 0.12.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/config@1.0.7 + +## 0.12.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19 + - @backstage/plugin-cost-insights-common@0.1.1 + ## 0.12.6 ### Patch Changes diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json index e8f9a38b78..4855aae01a 100644 --- a/plugins/cost-insights/package.json +++ b/plugins/cost-insights/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cost-insights", "description": "A Backstage plugin that helps you keep track of your cloud spend", - "version": "0.12.6", + "version": "0.12.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/dynatrace/CHANGELOG.md b/plugins/dynatrace/CHANGELOG.md index b75776ba57..5ede228812 100644 --- a/plugins/dynatrace/CHANGELOG.md +++ b/plugins/dynatrace/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-dynatrace +## 5.0.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 5.0.0-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + ## 4.0.0 ### Patch Changes diff --git a/plugins/dynatrace/package.json b/plugins/dynatrace/package.json index 436f8dbcee..b7c8244753 100644 --- a/plugins/dynatrace/package.json +++ b/plugins/dynatrace/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-dynatrace", - "version": "4.0.0", + "version": "5.0.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-feedback-backend/CHANGELOG.md b/plugins/entity-feedback-backend/CHANGELOG.md index f293051bb4..2ee2ffb799 100644 --- a/plugins/entity-feedback-backend/CHANGELOG.md +++ b/plugins/entity-feedback-backend/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-entity-feedback-backend +## 0.1.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/config@1.0.7 + +## 0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-entity-feedback-common@0.1.1 + ## 0.1.2 ### Patch Changes diff --git a/plugins/entity-feedback-backend/package.json b/plugins/entity-feedback-backend/package.json index 73f0f90876..bfda97de8f 100644 --- a/plugins/entity-feedback-backend/package.json +++ b/plugins/entity-feedback-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-entity-feedback-backend", - "version": "0.1.2", + "version": "0.1.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-feedback/CHANGELOG.md b/plugins/entity-feedback/CHANGELOG.md index 0853f0465b..3f4575ca8a 100644 --- a/plugins/entity-feedback/CHANGELOG.md +++ b/plugins/entity-feedback/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-entity-feedback +## 0.2.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/plugin-entity-feedback-common@0.1.1 + ## 0.2.0 ### Minor Changes diff --git a/plugins/entity-feedback/package.json b/plugins/entity-feedback/package.json index d6d6607e61..0c15a0f3c8 100644 --- a/plugins/entity-feedback/package.json +++ b/plugins/entity-feedback/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-entity-feedback", - "version": "0.2.0", + "version": "0.2.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-validation/CHANGELOG.md b/plugins/entity-validation/CHANGELOG.md index 536c95a7ab..9b63d46c5b 100644 --- a/plugins/entity-validation/CHANGELOG.md +++ b/plugins/entity-validation/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-entity-validation +## 0.1.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/plugin-catalog-common@1.0.13 + ## 0.1.2 ### Patch Changes diff --git a/plugins/entity-validation/package.json b/plugins/entity-validation/package.json index 0c74bcee17..674c5c6a56 100644 --- a/plugins/entity-validation/package.json +++ b/plugins/entity-validation/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-entity-validation", - "version": "0.1.2", + "version": "0.1.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-aws-sqs/CHANGELOG.md b/plugins/events-backend-module-aws-sqs/CHANGELOG.md index 32c5d04ec7..9b076afbd3 100644 --- a/plugins/events-backend-module-aws-sqs/CHANGELOG.md +++ b/plugins/events-backend-module-aws-sqs/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-events-backend-module-aws-sqs +## 0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6-next.1 + +## 0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-events-node@0.2.6-next.0 + ## 0.1.6 ### Patch Changes diff --git a/plugins/events-backend-module-aws-sqs/package.json b/plugins/events-backend-module-aws-sqs/package.json index 3ec8716cf9..0125d5e5b4 100644 --- a/plugins/events-backend-module-aws-sqs/package.json +++ b/plugins/events-backend-module-aws-sqs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-aws-sqs", - "version": "0.1.6", + "version": "0.1.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-azure/CHANGELOG.md b/plugins/events-backend-module-azure/CHANGELOG.md index d982639bd2..b89363b7c3 100644 --- a/plugins/events-backend-module-azure/CHANGELOG.md +++ b/plugins/events-backend-module-azure/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-events-backend-module-azure +## 0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/plugin-events-node@0.2.6-next.1 + +## 0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/plugin-events-node@0.2.6-next.0 + ## 0.1.6 ### Patch Changes diff --git a/plugins/events-backend-module-azure/package.json b/plugins/events-backend-module-azure/package.json index 17278bbdaf..3667e73ebd 100644 --- a/plugins/events-backend-module-azure/package.json +++ b/plugins/events-backend-module-azure/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-azure", - "version": "0.1.6", + "version": "0.1.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md index 54156b72f9..ea70f7686e 100644 --- a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-events-backend-module-bitbucket-cloud +## 0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/plugin-events-node@0.2.6-next.1 + +## 0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/plugin-events-node@0.2.6-next.0 + ## 0.1.6 ### Patch Changes diff --git a/plugins/events-backend-module-bitbucket-cloud/package.json b/plugins/events-backend-module-bitbucket-cloud/package.json index 8e3b4ca54a..ea04a4faaa 100644 --- a/plugins/events-backend-module-bitbucket-cloud/package.json +++ b/plugins/events-backend-module-bitbucket-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-bitbucket-cloud", - "version": "0.1.6", + "version": "0.1.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-gerrit/CHANGELOG.md b/plugins/events-backend-module-gerrit/CHANGELOG.md index 9cfbd1c1a5..411d9ffff8 100644 --- a/plugins/events-backend-module-gerrit/CHANGELOG.md +++ b/plugins/events-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-events-backend-module-gerrit +## 0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/plugin-events-node@0.2.6-next.1 + +## 0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/plugin-events-node@0.2.6-next.0 + ## 0.1.6 ### Patch Changes diff --git a/plugins/events-backend-module-gerrit/package.json b/plugins/events-backend-module-gerrit/package.json index 77ebbb18f7..64fe31d31f 100644 --- a/plugins/events-backend-module-gerrit/package.json +++ b/plugins/events-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-gerrit", - "version": "0.1.6", + "version": "0.1.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-github/CHANGELOG.md b/plugins/events-backend-module-github/CHANGELOG.md index e823807d48..0e2b2ae8de 100644 --- a/plugins/events-backend-module-github/CHANGELOG.md +++ b/plugins/events-backend-module-github/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-events-backend-module-github +## 0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6-next.1 + +## 0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6-next.0 + ## 0.1.6 ### Patch Changes diff --git a/plugins/events-backend-module-github/package.json b/plugins/events-backend-module-github/package.json index 6d6042c424..74b74469ca 100644 --- a/plugins/events-backend-module-github/package.json +++ b/plugins/events-backend-module-github/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-github", - "version": "0.1.6", + "version": "0.1.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-gitlab/CHANGELOG.md b/plugins/events-backend-module-gitlab/CHANGELOG.md index 1d339dda6e..d8d48674c8 100644 --- a/plugins/events-backend-module-gitlab/CHANGELOG.md +++ b/plugins/events-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-events-backend-module-gitlab +## 0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6-next.1 + +## 0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6-next.0 + ## 0.1.6 ### Patch Changes diff --git a/plugins/events-backend-module-gitlab/package.json b/plugins/events-backend-module-gitlab/package.json index b0ebb94dbb..07102c0b6f 100644 --- a/plugins/events-backend-module-gitlab/package.json +++ b/plugins/events-backend-module-gitlab/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-gitlab", - "version": "0.1.6", + "version": "0.1.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-test-utils/CHANGELOG.md b/plugins/events-backend-test-utils/CHANGELOG.md index e5784003a1..3d665a44ce 100644 --- a/plugins/events-backend-test-utils/CHANGELOG.md +++ b/plugins/events-backend-test-utils/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-events-backend-test-utils +## 0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.6-next.1 + +## 0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.6-next.0 + ## 0.1.6 ### Patch Changes diff --git a/plugins/events-backend-test-utils/package.json b/plugins/events-backend-test-utils/package.json index 1b0f3ec5c7..3d46ea9210 100644 --- a/plugins/events-backend-test-utils/package.json +++ b/plugins/events-backend-test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-events-backend-test-utils", "description": "The plugin-events-backend-test-utils for @backstage/plugin-events-node", - "version": "0.1.6", + "version": "0.1.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend/CHANGELOG.md b/plugins/events-backend/CHANGELOG.md index cc233b5b44..929a003cf9 100644 --- a/plugins/events-backend/CHANGELOG.md +++ b/plugins/events-backend/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-events-backend +## 0.2.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6-next.1 + +## 0.2.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.6-next.0 + ## 0.2.5 ### Patch Changes diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json index 496662c212..fdaee7d4a8 100644 --- a/plugins/events-backend/package.json +++ b/plugins/events-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend", - "version": "0.2.5", + "version": "0.2.6-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-node/CHANGELOG.md b/plugins/events-node/CHANGELOG.md index 8d549d0091..c44e1e3999 100644 --- a/plugins/events-node/CHANGELOG.md +++ b/plugins/events-node/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-events-node +## 0.2.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.1 + +## 0.2.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.0 + ## 0.2.5 ### Patch Changes diff --git a/plugins/events-node/package.json b/plugins/events-node/package.json index ad2755d5e6..7a368206bf 100644 --- a/plugins/events-node/package.json +++ b/plugins/events-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-events-node", "description": "The plugin-events-node module for @backstage/plugin-events-backend", - "version": "0.2.5", + "version": "0.2.6-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/example-todo-list-backend/CHANGELOG.md b/plugins/example-todo-list-backend/CHANGELOG.md index 051d2bbc50..3fb578f05a 100644 --- a/plugins/example-todo-list-backend/CHANGELOG.md +++ b/plugins/example-todo-list-backend/CHANGELOG.md @@ -1,5 +1,26 @@ # @internal/plugin-todo-list-backend +## 1.0.13-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 1.0.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 1.0.12 ### Patch Changes diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json index 5a2b164710..0b635586b7 100644 --- a/plugins/example-todo-list-backend/package.json +++ b/plugins/example-todo-list-backend/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list-backend", - "version": "1.0.12", + "version": "1.0.13-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/example-todo-list/CHANGELOG.md b/plugins/example-todo-list/CHANGELOG.md index 06502ea1c1..87cc779cde 100644 --- a/plugins/example-todo-list/CHANGELOG.md +++ b/plugins/example-todo-list/CHANGELOG.md @@ -1,5 +1,13 @@ # @internal/plugin-todo-list +## 1.0.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + ## 1.0.12 ### Patch Changes diff --git a/plugins/example-todo-list/package.json b/plugins/example-todo-list/package.json index c2ed0b80ff..fcd193bd5f 100644 --- a/plugins/example-todo-list/package.json +++ b/plugins/example-todo-list/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list", - "version": "1.0.12", + "version": "1.0.13-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore-backend/CHANGELOG.md b/plugins/explore-backend/CHANGELOG.md index 4506edea17..d178b091b1 100644 --- a/plugins/explore-backend/CHANGELOG.md +++ b/plugins/explore-backend/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-explore-backend +## 0.0.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-search-backend-module-explore@0.1.1-next.1 + - @backstage/config@1.0.7 + +## 0.0.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.1-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.3 + ## 0.0.6 ### Patch Changes diff --git a/plugins/explore-backend/package.json b/plugins/explore-backend/package.json index f600e91414..7b21e885c1 100644 --- a/plugins/explore-backend/package.json +++ b/plugins/explore-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-explore-backend", - "version": "0.0.6", + "version": "0.0.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore/CHANGELOG.md b/plugins/explore/CHANGELOG.md index bbc62778da..3ad9bdb917 100644 --- a/plugins/explore/CHANGELOG.md +++ b/plugins/explore/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-explore +## 0.4.3-next.1 + +### Patch Changes + +- 1996920782b: Make sure that the first support button row does not break across lines +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/plugin-search-react@1.6.0-next.1 + - @backstage/plugin-explore-react@0.0.28 + +## 0.4.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/plugin-search-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-explore-react@0.0.28 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.3 + ## 0.4.2 ### Patch Changes diff --git a/plugins/explore/package.json b/plugins/explore/package.json index ab078080a0..bbe114c1f0 100644 --- a/plugins/explore/package.json +++ b/plugins/explore/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-explore", "description": "A Backstage plugin for building an exploration page of your software ecosystem", - "version": "0.4.2", + "version": "0.4.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore/src/components/CatalogKindExploreContent/CatalogKindExploreContent.tsx b/plugins/explore/src/components/CatalogKindExploreContent/CatalogKindExploreContent.tsx index f6f76ce1e0..69607b58da 100644 --- a/plugins/explore/src/components/CatalogKindExploreContent/CatalogKindExploreContent.tsx +++ b/plugins/explore/src/components/CatalogKindExploreContent/CatalogKindExploreContent.tsx @@ -99,7 +99,7 @@ export const CatalogKindExploreContent = (props: { - Discover the {pluralize(kindLowercase)} in your ecosystem. + <>Discover the {pluralize(kindLowercase)} in your ecosystem. diff --git a/plugins/firehydrant/CHANGELOG.md b/plugins/firehydrant/CHANGELOG.md index a978c71283..27c6a1b62e 100644 --- a/plugins/firehydrant/CHANGELOG.md +++ b/plugins/firehydrant/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-firehydrant +## 0.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + ## 0.2.1 ### Patch Changes diff --git a/plugins/firehydrant/package.json b/plugins/firehydrant/package.json index 175063f6c9..d5e136229c 100644 --- a/plugins/firehydrant/package.json +++ b/plugins/firehydrant/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-firehydrant", "description": "A Backstage plugin that integrates towards FireHydrant", - "version": "0.2.1", + "version": "0.2.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/fossa/CHANGELOG.md b/plugins/fossa/CHANGELOG.md index 7d1fbfc565..0399ad0ce2 100644 --- a/plugins/fossa/CHANGELOG.md +++ b/plugins/fossa/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-fossa +## 0.2.50-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.2.50-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + ## 0.2.49 ### Patch Changes diff --git a/plugins/fossa/package.json b/plugins/fossa/package.json index 252503d6fd..985202a403 100644 --- a/plugins/fossa/package.json +++ b/plugins/fossa/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-fossa", "description": "A Backstage plugin that integrates towards FOSSA", - "version": "0.2.49", + "version": "0.2.50-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gcalendar/CHANGELOG.md b/plugins/gcalendar/CHANGELOG.md index 746aac9a7e..1c23885154 100644 --- a/plugins/gcalendar/CHANGELOG.md +++ b/plugins/gcalendar/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-gcalendar +## 0.3.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.3.13 ### Patch Changes diff --git a/plugins/gcalendar/package.json b/plugins/gcalendar/package.json index 0d1883211a..0cc77cabad 100644 --- a/plugins/gcalendar/package.json +++ b/plugins/gcalendar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-gcalendar", - "version": "0.3.13", + "version": "0.3.14-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gcp-projects/CHANGELOG.md b/plugins/gcp-projects/CHANGELOG.md index c995b49c96..7a5ea25c0d 100644 --- a/plugins/gcp-projects/CHANGELOG.md +++ b/plugins/gcp-projects/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-gcp-projects +## 0.3.37-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.3.36 ### Patch Changes diff --git a/plugins/gcp-projects/package.json b/plugins/gcp-projects/package.json index c773d8f80e..039bcd094c 100644 --- a/plugins/gcp-projects/package.json +++ b/plugins/gcp-projects/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gcp-projects", "description": "A Backstage plugin that helps you manage projects in GCP", - "version": "0.3.36", + "version": "0.3.37-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/git-release-manager/CHANGELOG.md b/plugins/git-release-manager/CHANGELOG.md index 6c19ae3903..976585c656 100644 --- a/plugins/git-release-manager/CHANGELOG.md +++ b/plugins/git-release-manager/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-git-release-manager +## 0.3.31-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + +## 0.3.31-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.4.5-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/theme@0.2.19 + ## 0.3.30 ### Patch Changes diff --git a/plugins/git-release-manager/package.json b/plugins/git-release-manager/package.json index 056873f55a..7bc4df059e 100644 --- a/plugins/git-release-manager/package.json +++ b/plugins/git-release-manager/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-git-release-manager", "description": "A Backstage plugin that helps you manage releases in git", - "version": "0.3.30", + "version": "0.3.31-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-actions/CHANGELOG.md b/plugins/github-actions/CHANGELOG.md index a04b2624cc..09b205c9f1 100644 --- a/plugins/github-actions/CHANGELOG.md +++ b/plugins/github-actions/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-github-actions +## 0.5.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.5.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + ## 0.5.17 ### Patch Changes diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json index 81aaa77e1b..25fac2b774 100644 --- a/plugins/github-actions/package.json +++ b/plugins/github-actions/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-actions", "description": "A Backstage plugin that integrates towards GitHub Actions", - "version": "0.5.17", + "version": "0.5.18-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-deployments/CHANGELOG.md b/plugins/github-deployments/CHANGELOG.md index 001fbea6f2..41475febd3 100644 --- a/plugins/github-deployments/CHANGELOG.md +++ b/plugins/github-deployments/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-github-deployments +## 0.1.49-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/integration-react@1.1.13-next.1 + +## 0.1.49-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/integration-react@1.1.13-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + ## 0.1.48 ### Patch Changes diff --git a/plugins/github-deployments/package.json b/plugins/github-deployments/package.json index 68088ecd09..dcb4156f9d 100644 --- a/plugins/github-deployments/package.json +++ b/plugins/github-deployments/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-deployments", "description": "A Backstage plugin that integrates towards GitHub Deployments", - "version": "0.1.48", + "version": "0.1.49-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-issues/CHANGELOG.md b/plugins/github-issues/CHANGELOG.md index 9ed3465e67..d1e2103800 100644 --- a/plugins/github-issues/CHANGELOG.md +++ b/plugins/github-issues/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-github-issues +## 0.2.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.2.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + ## 0.2.6 ### Patch Changes diff --git a/plugins/github-issues/package.json b/plugins/github-issues/package.json index 84558dca86..ed982410e9 100644 --- a/plugins/github-issues/package.json +++ b/plugins/github-issues/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-github-issues", - "version": "0.2.6", + "version": "0.2.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-pull-requests-board/CHANGELOG.md b/plugins/github-pull-requests-board/CHANGELOG.md index 8e94bbfe03..7421c6e015 100644 --- a/plugins/github-pull-requests-board/CHANGELOG.md +++ b/plugins/github-pull-requests-board/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-github-pull-requests-board +## 0.1.12-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.1.12-next.0 + +### Patch Changes + +- cf125c36569: The `EntityTeamPullRequestsContent` and `EntityTeamPullRequestsCard` support the ability to view the labels/tags added to each PR +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + ## 0.1.11 ### Patch Changes diff --git a/plugins/github-pull-requests-board/package.json b/plugins/github-pull-requests-board/package.json index 0030d5cbea..e805cd99ce 100644 --- a/plugins/github-pull-requests-board/package.json +++ b/plugins/github-pull-requests-board/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-pull-requests-board", "description": "A Backstage plugin that allows you to see all open Pull Requests for all the repositories owned by your team", - "version": "0.1.11", + "version": "0.1.12-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-pull-requests-board/src/api/useGetPullRequestDetails.ts b/plugins/github-pull-requests-board/src/api/useGetPullRequestDetails.ts index a276c8fe9d..75f4d37cf4 100644 --- a/plugins/github-pull-requests-board/src/api/useGetPullRequestDetails.ts +++ b/plugins/github-pull-requests-board/src/api/useGetPullRequestDetails.ts @@ -60,6 +60,12 @@ export const useGetPullRequestDetails = () => { mergeable state reviewDecision + labels(first: 10) { + nodes { + id + name + } + } isDraft createdAt author { diff --git a/plugins/github-pull-requests-board/src/components/Card/Card.tsx b/plugins/github-pull-requests-board/src/components/Card/Card.tsx index 3a47fca696..320e166358 100644 --- a/plugins/github-pull-requests-board/src/components/Card/Card.tsx +++ b/plugins/github-pull-requests-board/src/components/Card/Card.tsx @@ -16,6 +16,7 @@ import React, { PropsWithChildren, FunctionComponent } from 'react'; import { Box, Paper, CardActionArea } from '@material-ui/core'; import CardHeader from './CardHeader'; +import { Label } from '../../utils/types'; type Props = { title: string; @@ -27,6 +28,7 @@ type Props = { repositoryName: string; isDraft: boolean; repositoryIsArchived: boolean; + labels?: Label[]; }; const Card: FunctionComponent = (props: PropsWithChildren) => { @@ -40,6 +42,7 @@ const Card: FunctionComponent = (props: PropsWithChildren) => { repositoryName, isDraft, repositoryIsArchived, + labels, children, } = props; @@ -57,6 +60,7 @@ const Card: FunctionComponent = (props: PropsWithChildren) => { repositoryName={repositoryName} isDraft={isDraft} repositoryIsArchived={repositoryIsArchived} + labels={labels} /> {children} diff --git a/plugins/github-pull-requests-board/src/components/Card/CardHeader.test.tsx b/plugins/github-pull-requests-board/src/components/Card/CardHeader.test.tsx new file mode 100644 index 0000000000..3171bff10f --- /dev/null +++ b/plugins/github-pull-requests-board/src/components/Card/CardHeader.test.tsx @@ -0,0 +1,57 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React from 'react'; +import { screen } from '@testing-library/react'; +import { renderInTestApp } from '@backstage/test-utils'; +import CardHeader from './CardHeader'; + +const props = { + title: 'Fix problem', + createdAt: 'createdAt', + updatedAt: 'updatedAt', + authorName: 'user1246', + authorAvatar: 'authorAvatar', + repositoryName: 'NewRepository', + repositoryIsArchived: false, + isDraft: false, + labels: [ + { + id: '01h82', + name: 'bug', + }, + { + id: 'id2904', + name: 'documentation', + }, + ], +}; + +describe('', () => { + it('finds labels in PR Card Header when PR includes labels', async () => { + await renderInTestApp(); + expect(screen.getByText('bug')).toBeInTheDocument(); + expect(screen.getByText('documentation')).toBeInTheDocument(); + }); + + it('does not find labels in PR Card Header when PR does not include labels', async () => { + const propsWithNoLabels = { + ...props, + labels: [], + }; + await renderInTestApp(); + expect(screen.queryByRole('listitem')).not.toBeInTheDocument(); + }); +}); diff --git a/plugins/github-pull-requests-board/src/components/Card/CardHeader.tsx b/plugins/github-pull-requests-board/src/components/Card/CardHeader.tsx index bb6f3e564d..c59349b95f 100644 --- a/plugins/github-pull-requests-board/src/components/Card/CardHeader.tsx +++ b/plugins/github-pull-requests-board/src/components/Card/CardHeader.tsx @@ -14,11 +14,13 @@ * limitations under the License. */ import React, { FunctionComponent } from 'react'; -import { Typography, Box, Tooltip } from '@material-ui/core'; +import { Typography, Box, Tooltip, Chip } from '@material-ui/core'; import { getElapsedTime } from '../../utils/functions'; import { UserHeader } from '../UserHeader'; import { DraftPrIcon } from '../icons/DraftPr'; import UnarchiveIcon from '@material-ui/icons/Unarchive'; +import { Label } from '../../utils/types'; +import { useFormClasses } from './styles'; type Props = { title: string; @@ -29,9 +31,12 @@ type Props = { repositoryName: string; isDraft: boolean; repositoryIsArchived: boolean; + labels?: Label[]; }; const CardHeader: FunctionComponent = (props: Props) => { + const classes = useFormClasses(); + const { title, createdAt, @@ -41,6 +46,7 @@ const CardHeader: FunctionComponent = (props: Props) => { repositoryName, isDraft, repositoryIsArchived, + labels, } = props; return ( @@ -80,6 +86,17 @@ const CardHeader: FunctionComponent = (props: Props) => { )} + {labels && ( + + {labels.map(data => { + return ( +
  • + +
  • + ); + })} +
    + )} ); }; diff --git a/plugins/github-pull-requests-board/src/components/Card/styles.ts b/plugins/github-pull-requests-board/src/components/Card/styles.ts new file mode 100644 index 0000000000..2da12cb15e --- /dev/null +++ b/plugins/github-pull-requests-board/src/components/Card/styles.ts @@ -0,0 +1,39 @@ +/* + * Copyright 2021 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { makeStyles } from '@material-ui/core'; + +export const useFormClasses = makeStyles(() => ({ + labelItem: { + display: 'flex', + position: 'relative', + boxSizing: 'border-box', + textAlign: 'left', + alignItems: 'center', + paddingTop: 2, + paddingBottom: 2, + justifyContent: 'flex-start', + textDecoration: 'none', + paddingLeft: 2, + paddingRight: 2, + }, + tagBox: { + display: 'flex', + flexWrap: 'wrap', + alignItems: 'center', + maxWidth: 750, + }, +})); diff --git a/plugins/github-pull-requests-board/src/components/EntityTeamPullRequestsCard/EntityTeamPullRequestsCard.test.tsx b/plugins/github-pull-requests-board/src/components/EntityTeamPullRequestsCard/EntityTeamPullRequestsCard.test.tsx index 4965e1fbba..219e587971 100644 --- a/plugins/github-pull-requests-board/src/components/EntityTeamPullRequestsCard/EntityTeamPullRequestsCard.test.tsx +++ b/plugins/github-pull-requests-board/src/components/EntityTeamPullRequestsCard/EntityTeamPullRequestsCard.test.tsx @@ -59,6 +59,9 @@ jest.mock('../../hooks/usePullRequestsByTeam', () => { }, isArchived: isArchived, }, + labels: { + nodes: [], + }, isDraft: isDraft, author: { login: authorLogin, diff --git a/plugins/github-pull-requests-board/src/components/EntityTeamPullRequestsCard/EntityTeamPullRequestsCard.tsx b/plugins/github-pull-requests-board/src/components/EntityTeamPullRequestsCard/EntityTeamPullRequestsCard.tsx index ea605327ab..25ef32362b 100644 --- a/plugins/github-pull-requests-board/src/components/EntityTeamPullRequestsCard/EntityTeamPullRequestsCard.tsx +++ b/plugins/github-pull-requests-board/src/components/EntityTeamPullRequestsCard/EntityTeamPullRequestsCard.tsx @@ -113,6 +113,7 @@ const EntityTeamPullRequestsCard = (props: EntityTeamPullRequestsCardProps) => { latestReviews, repository, isDraft, + labels, }, index, ) => @@ -135,6 +136,7 @@ const EntityTeamPullRequestsCard = (props: EntityTeamPullRequestsCardProps) => { repositoryName={repository.name} repositoryIsArchived={repository.isArchived} isDraft={isDraft} + labels={labels.nodes} /> ), )} diff --git a/plugins/github-pull-requests-board/src/components/EntityTeamPullRequestsContent/EntityTeamPullRequestsContent.test.tsx b/plugins/github-pull-requests-board/src/components/EntityTeamPullRequestsContent/EntityTeamPullRequestsContent.test.tsx index 58faa7fb70..35c323a4f1 100644 --- a/plugins/github-pull-requests-board/src/components/EntityTeamPullRequestsContent/EntityTeamPullRequestsContent.test.tsx +++ b/plugins/github-pull-requests-board/src/components/EntityTeamPullRequestsContent/EntityTeamPullRequestsContent.test.tsx @@ -59,6 +59,9 @@ jest.mock('../../hooks/usePullRequestsByTeam', () => { }, isArchived: isArchived, }, + labels: { + nodes: [], + }, isDraft: isDraft, author: { login: authorLogin, diff --git a/plugins/github-pull-requests-board/src/components/EntityTeamPullRequestsContent/EntityTeamPullRequestsContent.tsx b/plugins/github-pull-requests-board/src/components/EntityTeamPullRequestsContent/EntityTeamPullRequestsContent.tsx index 662e6f4265..f901acb119 100644 --- a/plugins/github-pull-requests-board/src/components/EntityTeamPullRequestsContent/EntityTeamPullRequestsContent.tsx +++ b/plugins/github-pull-requests-board/src/components/EntityTeamPullRequestsContent/EntityTeamPullRequestsContent.tsx @@ -105,6 +105,7 @@ const EntityTeamPullRequestsContent = ( latestReviews, repository, isDraft, + labels, }, index, ) => @@ -127,6 +128,7 @@ const EntityTeamPullRequestsContent = ( repositoryName={repository.name} repositoryIsArchived={repository.isArchived} isDraft={isDraft} + labels={labels.nodes} /> ), )} diff --git a/plugins/github-pull-requests-board/src/components/PullRequestCard/PullRequestCard.tsx b/plugins/github-pull-requests-board/src/components/PullRequestCard/PullRequestCard.tsx index fa3ce4eb9c..e9ad2aeab6 100644 --- a/plugins/github-pull-requests-board/src/components/PullRequestCard/PullRequestCard.tsx +++ b/plugins/github-pull-requests-board/src/components/PullRequestCard/PullRequestCard.tsx @@ -19,7 +19,7 @@ import { getChangeRequests, getCommentedReviews, } from '../../utils/functions'; -import { Reviews, Author } from '../../utils/types'; +import { Reviews, Author, Label } from '../../utils/types'; import { Card } from '../Card'; import { UserHeaderList } from '../UserHeaderList'; @@ -33,6 +33,7 @@ type Props = { repositoryName: string; repositoryIsArchived: boolean; isDraft: boolean; + labels?: Label[]; }; const PullRequestCard: FunctionComponent = (props: Props) => { @@ -46,6 +47,7 @@ const PullRequestCard: FunctionComponent = (props: Props) => { repositoryName, repositoryIsArchived, isDraft, + labels, } = props; const approvedReviews = getApprovedReviews(reviews); @@ -63,6 +65,7 @@ const PullRequestCard: FunctionComponent = (props: Props) => { prUrl={url} isDraft={isDraft} repositoryIsArchived={repositoryIsArchived} + labels={labels} > {!!approvedReviews.length && ( createStyles({ @@ -72,6 +75,7 @@ export const WidgetSettingsOverlay = (props: WidgetSettingsOverlayProps) => { >
    { 'foo', 'bar', 'catpants', + 'with-a/slash', ]); expect(mockedJenkins).toHaveBeenCalledWith({ @@ -192,6 +193,10 @@ describe('JenkinsApi', () => { name: `${jenkinsInfo.jobFullName}/catpants`, tree: expect.anything(), }); + expect(mockedJenkinsClient.job.get).toHaveBeenCalledWith({ + name: `${jenkinsInfo.jobFullName}/with-a%2Fslash`, + tree: expect.anything(), + }); expect(result).toHaveLength(1); }); }); diff --git a/plugins/jenkins-backend/src/service/jenkinsApi.ts b/plugins/jenkins-backend/src/service/jenkinsApi.ts index ef4ddc47b0..e14437fa68 100644 --- a/plugins/jenkins-backend/src/service/jenkinsApi.ts +++ b/plugins/jenkins-backend/src/service/jenkinsApi.ts @@ -80,7 +80,7 @@ export class JenkinsApiImpl { const job = await Promise.any( branches.map(branch => client.job.get({ - name: `${jenkinsInfo.jobFullName}/${branch}`, + name: `${jenkinsInfo.jobFullName}/${encodeURIComponent(branch)}`, tree: JenkinsApiImpl.jobTreeSpec.replace(/\s/g, ''), }), ), diff --git a/plugins/jenkins/CHANGELOG.md b/plugins/jenkins/CHANGELOG.md index 65b4b0ce29..6b900dcb18 100644 --- a/plugins/jenkins/CHANGELOG.md +++ b/plugins/jenkins/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-jenkins +## 0.7.17-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.7.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/plugin-jenkins-common@0.1.15 + ## 0.7.16 ### Patch Changes diff --git a/plugins/jenkins/package.json b/plugins/jenkins/package.json index fc952ac142..e57c1c77f2 100644 --- a/plugins/jenkins/package.json +++ b/plugins/jenkins/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-jenkins", "description": "A Backstage plugin that integrates towards Jenkins", - "version": "0.7.16", + "version": "0.7.17-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kafka-backend/CHANGELOG.md b/plugins/kafka-backend/CHANGELOG.md index 215fe80db5..2b788a1bea 100644 --- a/plugins/kafka-backend/CHANGELOG.md +++ b/plugins/kafka-backend/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-kafka-backend +## 0.2.38-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 0.2.38-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.2.37 ### Patch Changes diff --git a/plugins/kafka-backend/package.json b/plugins/kafka-backend/package.json index e26f204b82..7eb51bfe72 100644 --- a/plugins/kafka-backend/package.json +++ b/plugins/kafka-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka-backend", "description": "A Backstage backend plugin that integrates towards Kafka", - "version": "0.2.37", + "version": "0.2.38-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kafka/CHANGELOG.md b/plugins/kafka/CHANGELOG.md index e22dcefa17..42f46a13a7 100644 --- a/plugins/kafka/CHANGELOG.md +++ b/plugins/kafka/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-kafka +## 0.3.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/config@1.0.7 + +## 0.3.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19 + ## 0.3.17 ### Patch Changes diff --git a/plugins/kafka/package.json b/plugins/kafka/package.json index c855007077..c4eebb6446 100644 --- a/plugins/kafka/package.json +++ b/plugins/kafka/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka", "description": "A Backstage plugin that integrates towards Kafka", - "version": "0.3.17", + "version": "0.3.18-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes-backend/CHANGELOG.md b/plugins/kubernetes-backend/CHANGELOG.md index 8c88f605a5..fd6a844304 100644 --- a/plugins/kubernetes-backend/CHANGELOG.md +++ b/plugins/kubernetes-backend/CHANGELOG.md @@ -1,5 +1,48 @@ # @backstage/plugin-kubernetes-backend +## 0.11.0-next.1 + +### Minor Changes + +- f4114f02d49: Allow fetching pod metrics limited by a `labelSelector`. + + This is used by the Kubernetes tab on a components' page and leads to much smaller responses being received from Kubernetes, especially with larger Kubernetes clusters. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/plugin-permission-node@0.7.8-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + - @backstage/integration-aws-node@0.1.2 + +## 0.11.0-next.0 + +### Minor Changes + +- 890988341e9: Update `aws-sdk` client from v2 to v3. + + **BREAKING**: The `AwsIamKubernetesAuthTranslator` class no longer exposes the following methods `awsGetCredentials`, `getBearerToken`, `getCredentials` and `validCredentials`. There is no replacement for these methods. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-permission-node@0.7.8-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/integration-aws-node@0.1.2 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-kubernetes-common@0.6.2 + - @backstage/plugin-permission-common@0.7.5 + ## 0.10.0 ### Minor Changes diff --git a/plugins/kubernetes-backend/api-report.md b/plugins/kubernetes-backend/api-report.md index 7dfb0635bd..668061cd31 100644 --- a/plugins/kubernetes-backend/api-report.md +++ b/plugins/kubernetes-backend/api-report.md @@ -298,6 +298,7 @@ export interface KubernetesFetcher { fetchPodMetricsByNamespaces( clusterDetails: ClusterDetails, namespaces: Set, + labelSelector?: string, ): Promise; } diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index 963b260b90..5e254f48e0 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-backend", "description": "A Backstage backend plugin that integrates towards Kubernetes", - "version": "0.10.0", + "version": "0.11.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts index e24c08cafd..4397bce441 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.test.ts @@ -918,7 +918,7 @@ describe('getKubernetesObjectsByEntity', () => { { errorType: 'FETCH_ERROR', message: - 'request to https://fails/api/v1/pods?labelSelector=backstage.io/kubernetes-id=test-component failed, reason: socket error', + 'request to https://fails/api/v1/pods?labelSelector=backstage.io%2Fkubernetes-id%3Dtest-component failed, reason: socket error', }, ], }, diff --git a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts index 8441effabd..79003ae1ca 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFanOutHandler.ts @@ -283,7 +283,9 @@ export class KubernetesFanOutHandler { })), namespace, }) - .then(result => this.getMetricsForPods(clusterDetailsItem, result)) + .then(result => + this.getMetricsForPods(clusterDetailsItem, labelSelector, result), + ) .catch( (e): Promise => e.name === 'FetchError' @@ -365,6 +367,7 @@ export class KubernetesFanOutHandler { async getMetricsForPods( clusterDetails: ClusterDetails, + labelSelector: string, result: FetchResponseWrapper, ): Promise { if (clusterDetails.skipMetricsLookup) { @@ -385,6 +388,7 @@ export class KubernetesFanOutHandler { const podMetrics = await this.fetcher.fetchPodMetricsByNamespaces( clusterDetails, namespaces, + labelSelector, ); result.errors.push(...podMetrics.errors); diff --git a/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts b/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts index 48bea3106b..b2be199d50 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesFetcher.ts @@ -119,6 +119,7 @@ export class KubernetesClientBasedFetcher implements KubernetesFetcher { fetchPodMetricsByNamespaces( clusterDetails: ClusterDetails, namespaces: Set, + labelSelector?: string, ): Promise { const fetchResults = Array.from(namespaces).map(async ns => { const [podMetrics, podList] = await Promise.all([ @@ -128,8 +129,9 @@ export class KubernetesClientBasedFetcher implements KubernetesFetcher { 'v1beta1', 'pods', ns, + labelSelector, ), - this.fetchResource(clusterDetails, '', 'v1', 'pods', ns), + this.fetchResource(clusterDetails, '', 'v1', 'pods', ns, labelSelector), ]); if (podMetrics.ok && podList.ok) { return topPods( @@ -213,7 +215,7 @@ export class KubernetesClientBasedFetcher implements KubernetesFetcher { } if (labelSelector) { - url.search = `labelSelector=${labelSelector}`; + url.search = `labelSelector=${encode(labelSelector)}`; } return fetch(url, requestInit); diff --git a/plugins/kubernetes-backend/src/types/types.ts b/plugins/kubernetes-backend/src/types/types.ts index e460edbc29..15ed1662de 100644 --- a/plugins/kubernetes-backend/src/types/types.ts +++ b/plugins/kubernetes-backend/src/types/types.ts @@ -56,6 +56,7 @@ export interface KubernetesFetcher { fetchPodMetricsByNamespaces( clusterDetails: ClusterDetails, namespaces: Set, + labelSelector?: string, ): Promise; } diff --git a/plugins/kubernetes/CHANGELOG.md b/plugins/kubernetes/CHANGELOG.md index c8dd1061af..a012240830 100644 --- a/plugins/kubernetes/CHANGELOG.md +++ b/plugins/kubernetes/CHANGELOG.md @@ -1,5 +1,62 @@ # @backstage/plugin-kubernetes +## 0.9.0-next.1 + +### Minor Changes + +- 280ec10c18e: Added Pod logs components for Kubernetes plugin + + **BREAKING**: `kubernetesProxyApi` for custom plugins built with components from the Kubernetes plugin apis, `kubernetesProxyApi` should be added to the plugin's API list. + + ``` + ... + export const kubernetesPlugin = createPlugin({ + id: 'kubernetes', + apis: [ + ... + createApiFactory({ + api: kubernetesProxyApiRef, + deps: { + kubernetesApi: kubernetesApiRef, + }, + factory: ({ kubernetesApi }) => + new KubernetesProxyClient({ + kubernetesApi, + }), + }), + ``` + + **BREAKING**: `KubernetesDrawer` is now called `KubernetesStructuredMetadataTableDrawer` so that we can do more than just show `StructuredMetadataTable` + + `import { KubernetesDrawer } from "@backstage/plugin-kubernetes"` + + should now be: + + `import { KubernetesStructuredMetadataTableDrawer } from "@backstage/plugin-kubernetes"` + +### Patch Changes + +- a160e02c3d7: Omit managed fields in the Kubernetes resource YAML display. +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/config@1.0.7 + +## 0.8.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/plugin-kubernetes-common@0.6.2 + ## 0.8.0 ### Minor Changes diff --git a/plugins/kubernetes/api-report.md b/plugins/kubernetes/api-report.md index 3814bcb4a5..60f5d3fc99 100644 --- a/plugins/kubernetes/api-report.md +++ b/plugins/kubernetes/api-report.md @@ -15,11 +15,13 @@ import { CustomResourceMatcher } from '@backstage/plugin-kubernetes-common'; import { DiscoveryApi } from '@backstage/core-plugin-api'; import { Entity } from '@backstage/catalog-model'; import { IdentityApi } from '@backstage/core-plugin-api'; +import { IObjectMeta } from '@kubernetes-models/apimachinery/apis/meta/v1/ObjectMeta'; import type { JsonObject } from '@backstage/types'; import { KubernetesRequestBody } from '@backstage/plugin-kubernetes-common'; import { OAuthApi } from '@backstage/core-plugin-api'; import { ObjectsByEntityResponse } from '@backstage/plugin-kubernetes-common'; import { OpenIdConnectApi } from '@backstage/core-plugin-api'; +import { Pod } from 'kubernetes-models/v1'; import { default as React_2 } from 'react'; import { RouteRef } from '@backstage/core-plugin-api'; import { V1ConfigMap } from '@kubernetes/client-node'; @@ -360,19 +362,28 @@ export const KubernetesContent: ({ refreshIntervalMs, }: KubernetesContentProps) => JSX.Element; -// Warning: (ae-forgotten-export) The symbol "KubernetesDrawerable" needs to be exported by the entry point index.d.ts // Warning: (ae-forgotten-export) The symbol "KubernetesDrawerProps" needs to be exported by the entry point index.d.ts // Warning: (ae-missing-release-tag) "KubernetesDrawer" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -export const KubernetesDrawer: ({ - object, - renderObject, - kind, - buttonVariant, - expanded, +export const KubernetesDrawer: ({ + open, + label, + drawerContentsHeader, + kubernetesObject, children, -}: KubernetesDrawerProps) => JSX.Element; +}: KubernetesDrawerProps) => JSX.Element; + +// Warning: (ae-forgotten-export) The symbol "KubernetesDrawerContentProps" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "KubernetesDrawerContent" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const KubernetesDrawerContent: ({ + children, + header, + kubernetesObject, + close, +}: KubernetesDrawerContentProps) => JSX.Element; // Warning: (ae-missing-release-tag) "KubernetesObjects" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) // @@ -399,11 +410,75 @@ const kubernetesPlugin: BackstagePlugin< export { kubernetesPlugin }; export { kubernetesPlugin as plugin }; +// Warning: (ae-missing-release-tag) "KubernetesProxyApi" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// // @public (undocumented) -export const PodDrawer: (props: { - pod: V1Pod; - expanded?: boolean; -}) => JSX.Element; +export interface KubernetesProxyApi { + // (undocumented) + getPodLogs(request: { + podName: string; + namespace: string; + clusterName: string; + containerName: string; + }): Promise<{ + text: string; + }>; +} + +// Warning: (ae-missing-release-tag) "kubernetesProxyApiRef" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const kubernetesProxyApiRef: ApiRef; + +// @public +export class KubernetesProxyClient { + constructor(options: { kubernetesApi: KubernetesApi }); + // (undocumented) + getPodLogs({ + podName, + namespace, + clusterName, + containerName, + }: { + podName: string; + namespace: string; + clusterName: string; + containerName: string; + }): Promise<{ + text: string; + }>; +} + +// Warning: (ae-forgotten-export) The symbol "KubernetesDrawerable" needs to be exported by the entry point index.d.ts +// Warning: (ae-forgotten-export) The symbol "KubernetesStructuredMetadataTableDrawerProps" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "KubernetesStructuredMetadataTableDrawer" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const KubernetesStructuredMetadataTableDrawer: < + T extends KubernetesDrawerable, +>({ + object, + renderObject, + kind, + buttonVariant, + expanded, + children, +}: KubernetesStructuredMetadataTableDrawerProps) => JSX.Element; + +// Warning: (ae-forgotten-export) The symbol "ErrorPanelProps_2" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "LinkErrorPanel" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const LinkErrorPanel: ({ + cluster, + errorMessage, +}: ErrorPanelProps_2) => JSX.Element; + +// Warning: (ae-forgotten-export) The symbol "PodDrawerProps" needs to be exported by the entry point index.d.ts +// Warning: (ae-missing-release-tag) "PodDrawer" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) +// +// @public (undocumented) +export const PodDrawer: ({ podAndErrors, open }: PodDrawerProps) => JSX.Element; // Warning: (ae-missing-release-tag) "PodNamesWithErrorsContext" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) // diff --git a/plugins/kubernetes/dev/index.tsx b/plugins/kubernetes/dev/index.tsx index 5780d649fb..520f8802a9 100644 --- a/plugins/kubernetes/dev/index.tsx +++ b/plugins/kubernetes/dev/index.tsx @@ -61,6 +61,15 @@ class MockKubernetesClient implements KubernetesApi { ({ type: type.toLocaleLowerCase('en-US'), resources } as FetchResponse), ); } + async getPodLogs(_request: { + podName: string; + namespace: string; + clusterName: string; + containerName: string; + token: string; + }): Promise { + return await 'some logs'; + } async getWorkloadsByEntity( _request: WorkloadsByEntityRequest, ): Promise { diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index 345d7b94f5..75b51cdbb5 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes", "description": "A Backstage plugin that integrates towards Kubernetes", - "version": "0.8.0", + "version": "0.9.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -41,6 +41,7 @@ "@backstage/plugin-catalog-react": "workspace:^", "@backstage/plugin-kubernetes-common": "workspace:^", "@backstage/theme": "workspace:^", + "@kubernetes-models/apimachinery": "^1.1.0", "@kubernetes/client-node": "0.18.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", diff --git a/plugins/kubernetes/src/api/KubernetesProxyClient.test.ts b/plugins/kubernetes/src/api/KubernetesProxyClient.test.ts new file mode 100644 index 0000000000..6db1e459be --- /dev/null +++ b/plugins/kubernetes/src/api/KubernetesProxyClient.test.ts @@ -0,0 +1,54 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { KubernetesProxyClient } from './KubernetesProxyClient'; + +describe('KubernetesProxyClient', () => { + let proxy: KubernetesProxyClient; + const callProxyMock = jest.fn(); + + beforeEach(() => { + jest.resetAllMocks(); + proxy = new KubernetesProxyClient({ + kubernetesApi: { + proxy: callProxyMock, + } as any, + }); + }); + it('/logs returns log text', async () => { + const request = { + podName: 'some-pod', + namespace: 'some-namespace', + clusterName: 'some-cluster', + containerName: 'some-container', + }; + + callProxyMock.mockResolvedValue({ + text: jest.fn().mockResolvedValue('Hello World'), + ok: true, + }); + + const response = await proxy.getPodLogs(request); + await expect(response).toStrictEqual({ text: 'Hello World' }); + expect(callProxyMock).toHaveBeenCalledWith({ + clusterName: 'some-cluster', + init: { + method: 'GET', + }, + path: '/api/v1/namespaces/some-namespace/pods/some-pod/log?container=some-container', + }); + }); +}); diff --git a/plugins/kubernetes/src/api/KubernetesProxyClient.ts b/plugins/kubernetes/src/api/KubernetesProxyClient.ts new file mode 100644 index 0000000000..8fd4674ddd --- /dev/null +++ b/plugins/kubernetes/src/api/KubernetesProxyClient.ts @@ -0,0 +1,69 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { KubernetesApi } from './types'; + +/** + * A client for common requests through the proxy endpoint of the kubernetes backend plugin. + * + * @public + */ +export class KubernetesProxyClient { + private readonly kubernetesApi: KubernetesApi; + + constructor(options: { kubernetesApi: KubernetesApi }) { + this.kubernetesApi = options.kubernetesApi; + } + + private async handleText(response: Response): Promise { + if (!response.ok) { + const payload = await response.text(); + let message; + switch (response.status) { + default: + message = `Proxy request failed with ${response.status} ${response.statusText}, ${payload}`; + } + throw new Error(message); + } + + return await response.text(); + } + + async getPodLogs({ + podName, + namespace, + clusterName, + containerName, + }: { + podName: string; + namespace: string; + clusterName: string; + containerName: string; + }): Promise<{ text: string }> { + const params = new URLSearchParams({ + container: containerName, + }); + return await this.kubernetesApi + .proxy({ + clusterName: clusterName, + path: `/api/v1/namespaces/${namespace}/pods/${podName}/log?${params.toString()}`, + init: { + method: 'GET', + }, + }) + .then(response => this.handleText(response)) + .then(text => ({ text })); + } +} diff --git a/plugins/kubernetes/src/api/index.ts b/plugins/kubernetes/src/api/index.ts index c21a258279..ec8843937a 100644 --- a/plugins/kubernetes/src/api/index.ts +++ b/plugins/kubernetes/src/api/index.ts @@ -14,6 +14,7 @@ * limitations under the License. */ -export { kubernetesApiRef } from './types'; -export type { KubernetesApi } from './types'; +export { kubernetesApiRef, kubernetesProxyApiRef } from './types'; +export type { KubernetesApi, KubernetesProxyApi } from './types'; export { KubernetesBackendClient } from './KubernetesBackendClient'; +export { KubernetesProxyClient } from './KubernetesProxyClient'; diff --git a/plugins/kubernetes/src/api/types.ts b/plugins/kubernetes/src/api/types.ts index 02f2fd3521..5dec189982 100644 --- a/plugins/kubernetes/src/api/types.ts +++ b/plugins/kubernetes/src/api/types.ts @@ -26,6 +26,10 @@ export const kubernetesApiRef = createApiRef({ id: 'plugin.kubernetes.service', }); +export const kubernetesProxyApiRef = createApiRef({ + id: 'plugin.kubernetes.proxy-service', +}); + export interface KubernetesApi { getObjectsByEntity( requestBody: KubernetesRequestBody, @@ -49,3 +53,12 @@ export interface KubernetesApi { init?: RequestInit; }): Promise; } + +export interface KubernetesProxyApi { + getPodLogs(request: { + podName: string; + namespace: string; + clusterName: string; + containerName: string; + }): Promise<{ text: string }>; +} diff --git a/plugins/kubernetes/src/components/CronJobsAccordions/CronJobsDrawer.tsx b/plugins/kubernetes/src/components/CronJobsAccordions/CronJobsDrawer.tsx index 0dc53396bb..45242af307 100644 --- a/plugins/kubernetes/src/components/CronJobsAccordions/CronJobsDrawer.tsx +++ b/plugins/kubernetes/src/components/CronJobsAccordions/CronJobsDrawer.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; import { V1CronJob } from '@kubernetes/client-node'; -import { KubernetesDrawer } from '../KubernetesDrawer/KubernetesDrawer'; +import { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer'; import { Typography, Grid, Chip } from '@material-ui/core'; export const CronJobDrawer = ({ @@ -27,7 +27,7 @@ export const CronJobDrawer = ({ }) => { const namespace = cronJob.metadata?.namespace; return ( - )} - + ); }; diff --git a/plugins/kubernetes/src/components/CustomResources/ArgoRollouts/RolloutDrawer.tsx b/plugins/kubernetes/src/components/CustomResources/ArgoRollouts/RolloutDrawer.tsx index f1c4fe7f7e..150f3bc186 100644 --- a/plugins/kubernetes/src/components/CustomResources/ArgoRollouts/RolloutDrawer.tsx +++ b/plugins/kubernetes/src/components/CustomResources/ArgoRollouts/RolloutDrawer.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { KubernetesDrawer } from '../../KubernetesDrawer/KubernetesDrawer'; +import { KubernetesStructuredMetadataTableDrawer } from '../../KubernetesDrawer'; import { Typography, Grid } from '@material-ui/core'; export const RolloutDrawer = ({ @@ -26,7 +26,7 @@ export const RolloutDrawer = ({ expanded?: boolean; }) => { return ( - - + ); }; diff --git a/plugins/kubernetes/src/components/CustomResources/DefaultCustomResourceDrawer.tsx b/plugins/kubernetes/src/components/CustomResources/DefaultCustomResourceDrawer.tsx index 5b968f72a5..82dcd0746f 100644 --- a/plugins/kubernetes/src/components/CustomResources/DefaultCustomResourceDrawer.tsx +++ b/plugins/kubernetes/src/components/CustomResources/DefaultCustomResourceDrawer.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { KubernetesDrawer } from '../KubernetesDrawer/KubernetesDrawer'; +import { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer'; import { Typography, Grid } from '@material-ui/core'; const capitalize = (str: string) => @@ -33,7 +33,7 @@ export const DefaultCustomResourceDrawer = ({ const capitalizedName = capitalize(customResourceName); return ( - - + ); }; diff --git a/plugins/kubernetes/src/components/DeploymentsAccordions/DeploymentDrawer.tsx b/plugins/kubernetes/src/components/DeploymentsAccordions/DeploymentDrawer.tsx index 8be5ee1e46..0fc8463f73 100644 --- a/plugins/kubernetes/src/components/DeploymentsAccordions/DeploymentDrawer.tsx +++ b/plugins/kubernetes/src/components/DeploymentsAccordions/DeploymentDrawer.tsx @@ -16,7 +16,7 @@ import React from 'react'; import { V1Deployment } from '@kubernetes/client-node'; -import { KubernetesDrawer } from '../KubernetesDrawer/KubernetesDrawer'; +import { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer'; import { renderCondition } from '../../utils/pod'; import { Typography, Grid, Chip } from '@material-ui/core'; @@ -29,7 +29,7 @@ export const DeploymentDrawer = ({ }) => { const namespace = deployment.metadata?.namespace; return ( - )} - + ); }; diff --git a/plugins/kubernetes/src/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.tsx b/plugins/kubernetes/src/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.tsx index ca7abe07aa..dba942155c 100644 --- a/plugins/kubernetes/src/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.tsx +++ b/plugins/kubernetes/src/components/HorizontalPodAutoscalers/HorizontalPodAutoscalerDrawer.tsx @@ -16,7 +16,7 @@ import React from 'react'; import { V1HorizontalPodAutoscaler } from '@kubernetes/client-node'; -import { KubernetesDrawer } from '../KubernetesDrawer/KubernetesDrawer'; +import { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer'; /** @public */ export const HorizontalPodAutoscalerDrawer = (props: { @@ -27,7 +27,7 @@ export const HorizontalPodAutoscalerDrawer = (props: { const { hpa, expanded, children } = props; return ( - {children} - + ); }; diff --git a/plugins/kubernetes/src/components/IngressesAccordions/IngressDrawer.tsx b/plugins/kubernetes/src/components/IngressesAccordions/IngressDrawer.tsx index ea79c1e4dc..5881f6d6c4 100644 --- a/plugins/kubernetes/src/components/IngressesAccordions/IngressDrawer.tsx +++ b/plugins/kubernetes/src/components/IngressesAccordions/IngressDrawer.tsx @@ -16,7 +16,7 @@ import React from 'react'; import { V1Ingress } from '@kubernetes/client-node'; -import { KubernetesDrawer } from '../KubernetesDrawer/KubernetesDrawer'; +import { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer'; import { Typography, Grid } from '@material-ui/core'; export const IngressDrawer = ({ @@ -27,7 +27,7 @@ export const IngressDrawer = ({ expanded?: boolean; }) => { return ( - - + ); }; diff --git a/plugins/kubernetes/src/components/JobsAccordions/JobsDrawer.tsx b/plugins/kubernetes/src/components/JobsAccordions/JobsDrawer.tsx index b91fb15541..c60153e77f 100644 --- a/plugins/kubernetes/src/components/JobsAccordions/JobsDrawer.tsx +++ b/plugins/kubernetes/src/components/JobsAccordions/JobsDrawer.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; import { V1Job } from '@kubernetes/client-node'; -import { KubernetesDrawer } from '../KubernetesDrawer/KubernetesDrawer'; +import { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer'; import { Typography, Grid } from '@material-ui/core'; export const JobDrawer = ({ @@ -26,7 +26,7 @@ export const JobDrawer = ({ expanded?: boolean; }) => { return ( - - + ); }; diff --git a/plugins/kubernetes/src/components/KubernetesDrawer/KubernetesDrawer.tsx b/plugins/kubernetes/src/components/KubernetesDrawer/KubernetesDrawer.tsx index 7e194c3ec2..18ef5d9505 100644 --- a/plugins/kubernetes/src/components/KubernetesDrawer/KubernetesDrawer.tsx +++ b/plugins/kubernetes/src/components/KubernetesDrawer/KubernetesDrawer.tsx @@ -1,5 +1,5 @@ /* - * Copyright 2020 The Backstage Authors + * Copyright 2023 The Backstage Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,35 +13,115 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import React, { ChangeEvent, useState } from 'react'; -import React, { ChangeEvent, useContext, useState } from 'react'; +import { IObjectMeta } from '@kubernetes-models/apimachinery/apis/meta/v1/ObjectMeta'; import { - Button, - Typography, - makeStyles, - IconButton, createStyles, - Theme, Drawer, - Switch, - FormControlLabel, + makeStyles, + Theme, Grid, + IconButton, + Switch, + Typography, + Button, + withStyles, + FormControlLabel, } from '@material-ui/core'; -import Close from '@material-ui/icons/Close'; -import OpenInNewIcon from '@material-ui/icons/OpenInNew'; -import { V1ObjectMeta } from '@kubernetes/client-node'; -import { withStyles } from '@material-ui/core/styles'; -import jsYaml from 'js-yaml'; -import { - LinkButton as BackstageButton, - CodeSnippet, - StructuredMetadataTable, - WarningPanel, -} from '@backstage/core-components'; -import { ClusterContext } from '../../hooks'; -import { formatClusterLink } from '../../utils/clusterLinks'; -import { ClusterAttributes } from '@backstage/plugin-kubernetes-common'; -import { FormatClusterLinkOptions } from '../../utils/clusterLinks/formatClusterLink'; +import CloseIcon from '@material-ui/icons/Close'; +import { ManifestYaml } from './ManifestYaml'; + +const useDrawerContentStyles = makeStyles((_theme: Theme) => + createStyles({ + header: { + display: 'flex', + flexDirection: 'row', + justifyContent: 'space-between', + }, + content: { + height: '80%', + }, + icon: { + fontSize: 20, + }, + }), +); + +interface KubernetesObject { + kind: string; + metadata?: IObjectMeta; +} + +interface KubernetesDrawerContentProps { + close: () => void; + kubernetesObject: KubernetesObject; + header?: React.ReactNode; + children?: React.ReactNode; +} + +export const KubernetesDrawerContent = ({ + children, + header, + kubernetesObject, + close, +}: KubernetesDrawerContentProps) => { + const classes = useDrawerContentStyles(); + const [isYaml, setIsYaml] = useState(false); + + return ( + <> +
    + + + + {kubernetesObject.metadata?.name} + + + + close()} + color="inherit" + > + + + + + {header} + + + { + setIsYaml(event.target.checked); + }} + name="YAML" + /> + } + label="YAML" + /> + + +
    +
    + {isYaml && } + {!isYaml && children} +
    + + ); +}; + +interface KubernetesDrawerProps { + open?: boolean; + kubernetesObject: KubernetesObject; + label: React.ReactNode; + drawerContentsHeader?: React.ReactNode; + children?: React.ReactNode; +} const useDrawerStyles = makeStyles((theme: Theme) => createStyles({ @@ -53,32 +133,7 @@ const useDrawerStyles = makeStyles((theme: Theme) => }), ); -const useDrawerContentStyles = makeStyles((_: Theme) => - createStyles({ - header: { - display: 'flex', - flexDirection: 'row', - justifyContent: 'space-between', - }, - errorMessage: { - marginTop: '1em', - marginBottom: '1em', - }, - options: { - display: 'flex', - flexDirection: 'row', - justifyContent: 'space-between', - }, - icon: { - fontSize: 20, - }, - content: { - height: '80%', - }, - }), -); - -const PodDrawerButton = withStyles({ +const DrawerButton = withStyles({ root: { padding: '6px 5px', }, @@ -87,170 +142,15 @@ const PodDrawerButton = withStyles({ }, })(Button); -type ErrorPanelProps = { - cluster: ClusterAttributes; - errorMessage?: string; - children?: React.ReactNode; -}; - -export const ErrorPanel = ({ cluster, errorMessage }: ErrorPanelProps) => ( - - {errorMessage && ( - Errors: {errorMessage} - )} - -); - -interface KubernetesDrawerable { - metadata?: V1ObjectMeta; -} - -interface KubernetesDrawerContentProps { - toggleDrawer: (e: ChangeEvent<{}>, isOpen: boolean) => void; - object: T; - renderObject: (obj: T) => object; - kind: string; -} - -function replaceNullsWithUndefined(someObj: any) { - const replacer = (_: any, value: any) => - String(value) === 'null' || String(value) === 'undefined' - ? undefined - : value; - - return JSON.parse(JSON.stringify(someObj, replacer)); -} - -function tryFormatClusterLink(options: FormatClusterLinkOptions) { - try { - return { - clusterLink: formatClusterLink(options), - errorMessage: '', - }; - } catch (err) { - return { - clusterLink: '', - errorMessage: err.message || err.toString(), - }; - } -} - -const KubernetesDrawerContent = ({ - toggleDrawer, - object, - renderObject, - kind, -}: KubernetesDrawerContentProps) => { - const [isYaml, setIsYaml] = useState(false); - - const classes = useDrawerContentStyles(); - const cluster = useContext(ClusterContext); - const { clusterLink, errorMessage } = tryFormatClusterLink({ - dashboardUrl: cluster.dashboardUrl, - dashboardApp: cluster.dashboardApp, - dashboardParameters: cluster.dashboardParameters, - object, - kind, - }); - - return ( - <> -
    - - - - {object.metadata?.name ?? 'unknown name'} - - - - - {kind} - - - - toggleDrawer(e, false)} - color="inherit" - > - - -
    - {errorMessage && ( -
    - -
    - )} -
    -
    - {clusterLink && ( - } - > - Open Kubernetes Dashboard - - )} -
    - { - setIsYaml(event.target.checked); - }} - name="YAML" - /> - } - label="YAML" - /> -
    -
    - {isYaml && } - {!isYaml && ( - - )} -
    - - ); -}; -interface KubernetesDrawerProps { - object: T; - renderObject: (obj: T) => object; - buttonVariant?: 'h5' | 'subtitle2'; - kind: string; - expanded?: boolean; - children?: React.ReactNode; -} - -export const KubernetesDrawer = ({ - object, - renderObject, - kind, - buttonVariant = 'subtitle2', - expanded = false, +export const KubernetesDrawer = ({ + open, + label, + drawerContentsHeader, + kubernetesObject, children, -}: KubernetesDrawerProps) => { - const [isOpen, setIsOpen] = useState(expanded); +}: KubernetesDrawerProps) => { const classes = useDrawerStyles(); + const [isOpen, setIsOpen] = useState(open ?? false); const toggleDrawer = (e: ChangeEvent<{}>, newValue: boolean) => { e.stopPropagation(); @@ -259,18 +159,7 @@ export const KubernetesDrawer = ({ return ( <> - toggleDrawer(e, true)} - onFocus={event => event.stopPropagation()} - > - {children === undefined ? ( - - {object.metadata?.name ?? 'unknown object'} - - ) : ( - children - )} - + setIsOpen(true)}>{label} ({ onClose={(e: any) => toggleDrawer(e, false)} onClick={event => event.stopPropagation()} > - + {isOpen && ( + setIsOpen(false)} + /> + )} ); diff --git a/plugins/kubernetes/src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.tsx b/plugins/kubernetes/src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.tsx new file mode 100644 index 0000000000..8f28549f83 --- /dev/null +++ b/plugins/kubernetes/src/components/KubernetesDrawer/KubernetesStructuredMetadataTableDrawer.tsx @@ -0,0 +1,298 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React, { ChangeEvent, useContext, useState } from 'react'; +import { + Button, + Typography, + makeStyles, + IconButton, + createStyles, + Theme, + Drawer, + Switch, + FormControlLabel, + Grid, +} from '@material-ui/core'; +import Close from '@material-ui/icons/Close'; +import OpenInNewIcon from '@material-ui/icons/OpenInNew'; +import { V1ObjectMeta } from '@kubernetes/client-node'; +import { withStyles } from '@material-ui/core/styles'; +import { + LinkButton as BackstageButton, + StructuredMetadataTable, + WarningPanel, +} from '@backstage/core-components'; +import { ClusterContext } from '../../hooks'; +import { formatClusterLink } from '../../utils/clusterLinks'; +import { ClusterAttributes } from '@backstage/plugin-kubernetes-common'; +import { FormatClusterLinkOptions } from '../../utils/clusterLinks/formatClusterLink'; +import { ManifestYaml } from './ManifestYaml'; + +const useDrawerStyles = makeStyles((theme: Theme) => + createStyles({ + paper: { + width: '50%', + justifyContent: 'space-between', + padding: theme.spacing(2.5), + }, + }), +); + +const useDrawerContentStyles = makeStyles((_: Theme) => + createStyles({ + header: { + display: 'flex', + flexDirection: 'row', + justifyContent: 'space-between', + }, + errorMessage: { + marginTop: '1em', + marginBottom: '1em', + }, + options: { + display: 'flex', + flexDirection: 'row', + justifyContent: 'space-between', + }, + icon: { + fontSize: 20, + }, + content: { + height: '80%', + }, + }), +); + +const PodDrawerButton = withStyles({ + root: { + padding: '6px 5px', + }, + label: { + textTransform: 'none', + }, +})(Button); + +type ErrorPanelProps = { + cluster: ClusterAttributes; + errorMessage?: string; + children?: React.ReactNode; +}; + +export const LinkErrorPanel = ({ cluster, errorMessage }: ErrorPanelProps) => ( + + {errorMessage && ( + Errors: {errorMessage} + )} + +); + +interface KubernetesDrawerable { + metadata?: V1ObjectMeta; +} + +interface KubernetesStructuredMetadataTableDrawerContentProps< + T extends KubernetesDrawerable, +> { + toggleDrawer: (e: ChangeEvent<{}>, isOpen: boolean) => void; + object: T; + renderObject: (obj: T) => object; + kind: string; +} + +function replaceNullsWithUndefined(someObj: any) { + const replacer = (_: any, value: any) => + String(value) === 'null' || String(value) === 'undefined' + ? undefined + : value; + + return JSON.parse(JSON.stringify(someObj, replacer)); +} + +function tryFormatClusterLink(options: FormatClusterLinkOptions) { + try { + return { + clusterLink: formatClusterLink(options), + errorMessage: '', + }; + } catch (err) { + return { + clusterLink: '', + errorMessage: err.message || err.toString(), + }; + } +} + +const KubernetesStructuredMetadataTableDrawerContent = < + T extends KubernetesDrawerable, +>({ + toggleDrawer, + object, + renderObject, + kind, +}: KubernetesStructuredMetadataTableDrawerContentProps) => { + const [isYaml, setIsYaml] = useState(false); + + const classes = useDrawerContentStyles(); + const cluster = useContext(ClusterContext); + const { clusterLink, errorMessage } = tryFormatClusterLink({ + dashboardUrl: cluster.dashboardUrl, + dashboardApp: cluster.dashboardApp, + dashboardParameters: cluster.dashboardParameters, + object, + kind, + }); + + return ( + <> +
    + + + + {object.metadata?.name ?? 'unknown name'} + + + + toggleDrawer(e, false)} + color="inherit" + > + + + + + + {kind} + + + + { + setIsYaml(event.target.checked); + }} + name="YAML" + /> + } + label="YAML" + /> + + +
    + {errorMessage && ( +
    + +
    + )} +
    +
    + {clusterLink && ( + } + > + Open Kubernetes Dashboard + + )} +
    +
    +
    + {isYaml && } + {!isYaml && ( + + )} +
    + + ); +}; +interface KubernetesStructuredMetadataTableDrawerProps< + T extends KubernetesDrawerable, +> { + object: T; + renderObject: (obj: T) => object; + buttonVariant?: 'h5' | 'subtitle2'; + kind: string; + expanded?: boolean; + children?: React.ReactNode; +} + +export const KubernetesStructuredMetadataTableDrawer = < + T extends KubernetesDrawerable, +>({ + object, + renderObject, + kind, + buttonVariant = 'subtitle2', + expanded = false, + children, +}: KubernetesStructuredMetadataTableDrawerProps) => { + const [isOpen, setIsOpen] = useState(expanded); + const classes = useDrawerStyles(); + + const toggleDrawer = (e: ChangeEvent<{}>, newValue: boolean) => { + e.stopPropagation(); + setIsOpen(newValue); + }; + + return ( + <> + toggleDrawer(e, true)} + onFocus={event => event.stopPropagation()} + > + {children === undefined ? ( + + {object.metadata?.name ?? 'unknown object'} + + ) : ( + children + )} + + toggleDrawer(e, false)} + onClick={event => event.stopPropagation()} + > + + + + ); +}; diff --git a/plugins/kubernetes/src/components/KubernetesDrawer/ManifestYaml.tsx b/plugins/kubernetes/src/components/KubernetesDrawer/ManifestYaml.tsx new file mode 100644 index 0000000000..8f0c38afde --- /dev/null +++ b/plugins/kubernetes/src/components/KubernetesDrawer/ManifestYaml.tsx @@ -0,0 +1,60 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { CodeSnippet } from '@backstage/core-components'; +import { FormControlLabel, Switch } from '@material-ui/core'; +import jsyaml from 'js-yaml'; +import React, { useState } from 'react'; + +export interface ManifestYamlProps { + object: object; +} + +export const ManifestYaml = ({ object }: ManifestYamlProps) => { + // Toggle whether the Kubernetes resource managed fields should be shown in + // the YAML display. This toggle is only available when the YAML is being + // shown because managed fields are never visible in the structured display. + const [managedFields, setManagedFields] = useState(false); + return ( + <> + { + setManagedFields(event.target.checked); + }} + name="Managed Fields" + /> + } + label="Managed Fields" + /> + { + if (!managedFields) { + return key === 'managedFields' ? undefined : value; + } + return value; + }, + })} + /> + + ); +}; diff --git a/plugins/kubernetes/src/components/KubernetesDrawer/index.ts b/plugins/kubernetes/src/components/KubernetesDrawer/index.ts index ecd4b1b653..a0108cbda6 100644 --- a/plugins/kubernetes/src/components/KubernetesDrawer/index.ts +++ b/plugins/kubernetes/src/components/KubernetesDrawer/index.ts @@ -14,4 +14,5 @@ * limitations under the License. */ +export * from './KubernetesStructuredMetadataTableDrawer'; export * from './KubernetesDrawer'; diff --git a/plugins/kubernetes/src/components/Pods/PodDrawer.test.tsx b/plugins/kubernetes/src/components/Pods/PodDrawer.test.tsx deleted file mode 100644 index b11093250d..0000000000 --- a/plugins/kubernetes/src/components/Pods/PodDrawer.test.tsx +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import React from 'react'; -import { render } from '@testing-library/react'; -import * as pod from './__fixtures__/pod.json'; -import * as crashingPod from './__fixtures__/crashing-pod.json'; -import { textContentMatcher, wrapInTestApp } from '@backstage/test-utils'; -import { PodDrawer } from './PodDrawer'; - -describe('PodDrawer', () => { - it('should render pod', async () => { - const { getByText, getAllByText } = render( - wrapInTestApp(), - ); - - expect(getAllByText('dice-roller-6c8646bfd-2m5hv')).toHaveLength(2); - expect(getByText('Pod')).toBeInTheDocument(); - expect(getByText('YAML')).toBeInTheDocument(); - expect(getByText('Images')).toBeInTheDocument(); - expect(getByText('nginx=nginx:1.14.2')).toBeInTheDocument(); - expect(getByText('Phase')).toBeInTheDocument(); - expect(getByText('Running')).toBeInTheDocument(); - expect(getAllByText('Containers Ready')).toHaveLength(2); - expect(getByText('1/1')).toBeInTheDocument(); - expect(getByText('Total Restarts')).toBeInTheDocument(); - expect(getByText('0')).toBeInTheDocument(); - expect(getByText('Container Statuses')).toBeInTheDocument(); - expect(getByText('OK')).toBeInTheDocument(); - expect(getByText('Initialized')).toBeInTheDocument(); - expect(getByText('Ready')).toBeInTheDocument(); - expect(getByText('Pod Scheduled')).toBeInTheDocument(); - expect(getAllByText('True')).toHaveLength(4); - expect(getByText('Exposed Ports')).toBeInTheDocument(); - expect(getByText('Nginx:')).toBeInTheDocument(); - expect( - getByText(textContentMatcher('Container Port: 80')), - ).toBeInTheDocument(); - expect(getByText(textContentMatcher('Protocol: TCP'))).toBeInTheDocument(); - }); - it('should render crashing pod', async () => { - const { getByText, getAllByText } = render( - wrapInTestApp(), - ); - - expect(getAllByText('dice-roller-canary-7d64cd756c-55rfq')).toHaveLength(2); - expect(getByText('Pod')).toBeInTheDocument(); - expect(getByText('YAML')).toBeInTheDocument(); - expect(getByText('Images')).toBeInTheDocument(); - expect(getByText('nginx=nginx:1.14.2')).toBeInTheDocument(); - expect(getByText('other-side-car=nginx:1.14.2')).toBeInTheDocument(); - expect(getByText('side-car=nginx:1.14.2')).toBeInTheDocument(); - expect(getByText('Phase')).toBeInTheDocument(); - expect(getByText('Running')).toBeInTheDocument(); - expect(getAllByText('Containers Ready')).toHaveLength(2); - expect(getByText('1/3')).toBeInTheDocument(); - expect(getByText('Total Restarts')).toBeInTheDocument(); - expect(getByText('76')).toBeInTheDocument(); - expect(getByText('Container Statuses')).toBeInTheDocument(); - expect(getByText('Container: side-car')).toBeInTheDocument(); - expect(getByText('Container: other-side-car')).toBeInTheDocument(); - expect(getAllByText('CrashLoopBackOff')).toHaveLength(2); - expect(getByText('Initialized')).toBeInTheDocument(); - expect(getByText('Ready')).toBeInTheDocument(); - expect(getByText('Pod Scheduled')).toBeInTheDocument(); - expect(getAllByText('True')).toHaveLength(2); - expect(getAllByText('False')).toHaveLength(2); - expect( - getAllByText('containers with unready status: [side-car other-side-car]'), - ).toHaveLength(2); - expect(getByText('Exposed Ports')).toBeInTheDocument(); - expect(getAllByText(textContentMatcher('Protocol: TCP'))).toHaveLength(3); - expect(getByText('Nginx:')).toBeInTheDocument(); - expect( - getByText(textContentMatcher('Container Port: 80')), - ).toBeInTheDocument(); - expect(getByText('Side Car:')).toBeInTheDocument(); - expect( - getByText(textContentMatcher('Container Port: 81')), - ).toBeInTheDocument(); - expect(getByText('Other Side Car:')).toBeInTheDocument(); - expect( - getByText(textContentMatcher('Container Port: 82')), - ).toBeInTheDocument(); - }); -}); diff --git a/plugins/kubernetes/src/components/Pods/PodDrawer.tsx b/plugins/kubernetes/src/components/Pods/PodDrawer.tsx deleted file mode 100644 index fa775a89c5..0000000000 --- a/plugins/kubernetes/src/components/Pods/PodDrawer.tsx +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import React from 'react'; -import { V1Pod } from '@kubernetes/client-node'; -import { - containersReady, - containerStatuses, - totalRestarts, - imageChips, - renderCondition, -} from '../../utils/pod'; -import { KubernetesDrawer } from '../KubernetesDrawer/KubernetesDrawer'; - -/** @public */ -export const PodDrawer = (props: { pod: V1Pod; expanded?: boolean }) => { - const { pod, expanded } = props; - - return ( - { - const phase = podObject.status?.phase ?? 'unknown'; - - const ports = - podObject.spec?.containers?.map(c => { - return { - [c.name]: c.ports, - }; - }) ?? 'N/A'; - - const conditions = (podObject.status?.conditions ?? []) - .map(renderCondition) - .reduce((accum, next) => { - accum[next[0]] = next[1]; - return accum; - }, {} as { [key: string]: React.ReactNode }); - - return { - images: imageChips(podObject), - phase: phase, - 'Containers Ready': containersReady(podObject), - 'Total Restarts': totalRestarts(podObject), - 'Container Statuses': containerStatuses(podObject), - ...conditions, - 'Exposed ports': ports, - }; - }} - /> - ); -}; diff --git a/plugins/kubernetes/src/components/Pods/PodDrawer/ContainerCard.test.tsx b/plugins/kubernetes/src/components/Pods/PodDrawer/ContainerCard.test.tsx new file mode 100644 index 0000000000..7bc7c989ed --- /dev/null +++ b/plugins/kubernetes/src/components/Pods/PodDrawer/ContainerCard.test.tsx @@ -0,0 +1,137 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React from 'react'; + +import { render } from '@testing-library/react'; + +import '@testing-library/jest-dom'; +import { wrapInTestApp } from '@backstage/test-utils'; +import { ContainerCard } from './ContainerCard'; +import { DateTime } from 'luxon'; + +const now = DateTime.now(); +const oneHourAgo = now.minus({ hours: 1 }).toISO(); +const twoHoursAgo = now.minus({ hours: 2 }).toISO(); + +describe('ContainerCard', () => { + it('show healthy when all checks pass', async () => { + const { getByText, queryByText, getAllByText } = render( + wrapInTestApp( + , + ), + ); + expect(getByText('Started: 1 hour ago')).toBeInTheDocument(); + expect(getByText('Status: Running')).toBeInTheDocument(); + expect(getByText('some-name')).toBeInTheDocument(); + expect(getByText('gcr.io/some-proj/some-image')).toBeInTheDocument(); + expect(getAllByText('✅')).toHaveLength(5); + expect(queryByText('❌')).toBeNull(); + }); + it('show unhealthy when all checks fail', async () => { + const { getByText, queryByText, getAllByText } = render( + wrapInTestApp( + , + ), + ); + expect(getByText('some-name')).toBeInTheDocument(); + expect(getByText('gcr.io/some-proj/some-image')).toBeInTheDocument(); + expect(getAllByText('❌')).toHaveLength(5); + expect(queryByText('✅')).toBeNull(); + }); + it('show correct checks for completed container', async () => { + const { getByText, queryByText, getAllByText } = render( + wrapInTestApp( + , + ), + ); + expect(getByText('some-name')).toBeInTheDocument(); + expect(getByText('gcr.io/some-proj/some-image')).toBeInTheDocument(); + expect(getByText('Started: 2 hours ago')).toBeInTheDocument(); + expect(getByText('Completed: 1 hour ago')).toBeInTheDocument(); + expect( + getByText('Execution time: 1 hour, 0 minutes, 0 seconds'), + ).toBeInTheDocument(); + expect(getByText('Status: Completed')).toBeInTheDocument(); + expect(getAllByText('✅')).toHaveLength(2); + expect(queryByText('❌')).toBeNull(); + }); +}); diff --git a/plugins/kubernetes/src/components/Pods/PodDrawer/ContainerCard.tsx b/plugins/kubernetes/src/components/Pods/PodDrawer/ContainerCard.tsx new file mode 100644 index 0000000000..eac64ae741 --- /dev/null +++ b/plugins/kubernetes/src/components/Pods/PodDrawer/ContainerCard.tsx @@ -0,0 +1,173 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React from 'react'; + +import { IContainer, IContainerStatus } from 'kubernetes-models/v1'; +import { + Card, + CardActions, + CardContent, + CardHeader, + Grid, + Typography, +} from '@material-ui/core'; + +import { DateTime } from 'luxon'; + +import { PodScope, PodLogsDialog } from '../PodLogs'; +import { StructuredMetadataTable } from '@backstage/core-components'; + +const getContainerHealthChecks = ( + containerSpec: IContainer, + containerStatus: IContainerStatus, +): { [key: string]: boolean } => { + if (containerStatus.state?.terminated?.reason === 'Completed') { + return { + 'not waiting to start': containerStatus.state?.waiting === undefined, + 'no restarts': containerStatus.restartCount === 0, + }; + } + return { + 'not waiting to start': containerStatus.state?.waiting === undefined, + started: !!containerStatus.started, + ready: containerStatus.ready, + 'no restarts': containerStatus.restartCount === 0, + 'readiness probe set': + containerSpec && containerSpec?.readinessProbe !== undefined, + }; +}; + +const getCurrentState = (containerStatus: IContainerStatus): string => { + return ( + containerStatus.state?.waiting?.reason || + containerStatus.state?.terminated?.reason || + (containerStatus.state?.running !== undefined ? 'Running' : 'Unknown') + ); +}; + +const getStartedAtTime = ( + containerStatus: IContainerStatus, +): string | undefined => { + return ( + containerStatus.state?.running?.startedAt || + containerStatus.state?.terminated?.startedAt + ); +}; + +interface ContainerDatetimeProps { + prefix: string; + dateTime: string; +} + +const ContainerDatetime = ({ prefix, dateTime }: ContainerDatetimeProps) => { + return ( + + {prefix}:{' '} + {DateTime.fromISO(dateTime).toRelative({ + locale: 'en', + })} + + ); +}; + +export interface ContainerCardProps { + podScope: PodScope; + containerSpec?: IContainer; + containerStatus: IContainerStatus; +} + +export const ContainerCard: React.FC = ({ + podScope, + containerSpec, + containerStatus, +}: ContainerCardProps) => { + // This should never be undefined + if (containerSpec === undefined) { + return error reading pod from cluster; + } + const containerStartedTime = getStartedAtTime(containerStatus); + const containerFinishedTime = containerStatus.state?.terminated?.finishedAt; + + return ( + + + + + + {containerStartedTime && ( + + )} + {containerFinishedTime && ( + + )} + {containerStartedTime && containerFinishedTime && ( + + Execution time:{' '} + {DateTime.fromISO(containerFinishedTime) + .diff(DateTime.fromISO(containerStartedTime), [ + 'hours', + 'minutes', + 'seconds', + ]) + .toHuman()} + + )} + + + + Status: {getCurrentState(containerStatus)} + + + {containerStatus.restartCount > 0 && ( + + + Restarts: {containerStatus.restartCount} + + + )} + + Container health + + + + + + + + + + + ); +}; diff --git a/plugins/kubernetes/src/components/Pods/PodDrawer/PendingPodContent.test.tsx b/plugins/kubernetes/src/components/Pods/PodDrawer/PendingPodContent.test.tsx new file mode 100644 index 0000000000..e4d042217b --- /dev/null +++ b/plugins/kubernetes/src/components/Pods/PodDrawer/PendingPodContent.test.tsx @@ -0,0 +1,185 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React from 'react'; + +import { render } from '@testing-library/react'; + +import '@testing-library/jest-dom'; +import { wrapInTestApp } from '@backstage/test-utils'; +import { PendingPodContent } from './PendingPodContent'; +import { IPodCondition } from 'kubernetes-models/v1'; +import { DateTime } from 'luxon'; + +const podWithConditions = (conditions: IPodCondition[]): any => { + return { + metadata: { + name: 'ok-pod', + }, + spec: { + containers: [ + { + name: 'some-container', + }, + ], + }, + status: { + podIP: '127.0.0.1', + conditions: conditions, + }, + }; +}; + +describe('PendingPodContent', () => { + it('show startup conditions - all healthy', async () => { + const oneDayAgo = DateTime.now().minus({ days: 1 }).toISO(); + const { getByText, queryByLabelText, queryAllByLabelText } = render( + wrapInTestApp( + , + ), + ); + expect(getByText('Pod is Pending. Conditions:')).toBeInTheDocument(); + + expect(getByText('Initialized - (1 day ago)')).toBeInTheDocument(); + expect(getByText('PodScheduled - (1 day ago)')).toBeInTheDocument(); + expect(getByText('ContainersReady - (1 day ago)')).toBeInTheDocument(); + expect(getByText('Ready - (1 day ago)')).toBeInTheDocument(); + + expect(queryAllByLabelText('Status ok')).toHaveLength(4); + expect(queryByLabelText('Status warning')).not.toBeInTheDocument(); + expect(queryByLabelText('Status error')).not.toBeInTheDocument(); + }); + it('show startup conditions - all fail', async () => { + const oneHourAgo = DateTime.now().minus({ hours: 1 }).toISO(); + const { getByText, queryByLabelText, queryAllByLabelText } = render( + wrapInTestApp( + , + ), + ); + expect(getByText('Pod is Pending. Conditions:')).toBeInTheDocument(); + + expect( + getByText( + 'Initialized - (InitializedFailureReason 1 hour ago) - reason why Initialized failed', + ), + ).toBeInTheDocument(); + expect( + getByText( + 'PodScheduled - (PodScheduledFailureReason 1 hour ago) - reason why PodScheduled failed', + ), + ).toBeInTheDocument(); + expect( + getByText( + 'ContainersReady - (ContainersReadyFailureReason 1 hour ago) - reason why ContainersReady failed', + ), + ).toBeInTheDocument(); + expect( + getByText( + 'Ready - (ReadyFailureReason 1 hour ago) - reason why Ready failed', + ), + ).toBeInTheDocument(); + + expect(queryByLabelText('Status ok')).not.toBeInTheDocument(); + expect(queryByLabelText('Status warning')).not.toBeInTheDocument(); + expect(queryAllByLabelText('Status error')).toHaveLength(4); + }); + it('show startup conditions - show unknown', async () => { + const oneHourAgo = DateTime.now().minus({ hours: 1 }).toISO(); + const { getByText, queryByLabelText, getByLabelText } = render( + wrapInTestApp( + , + ), + ); + expect(getByText('Pod is Pending. Conditions:')).toBeInTheDocument(); + + expect( + getByText('Initialized - (1 hour ago) dont know what is happening'), + ).toBeInTheDocument(); + + expect(queryByLabelText('Status ok')).not.toBeInTheDocument(); + expect(getByLabelText('Status warning')).toBeInTheDocument(); + expect(queryByLabelText('Status error')).not.toBeInTheDocument(); + }); +}); diff --git a/plugins/kubernetes/src/components/Pods/PodDrawer/PendingPodContent.tsx b/plugins/kubernetes/src/components/Pods/PodDrawer/PendingPodContent.tsx new file mode 100644 index 0000000000..ef6851b146 --- /dev/null +++ b/plugins/kubernetes/src/components/Pods/PodDrawer/PendingPodContent.tsx @@ -0,0 +1,94 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React from 'react'; +import { Grid, List, ListItem, Typography } from '@material-ui/core'; +import { IPodCondition, Pod } from 'kubernetes-models/v1'; +import { + StatusError, + StatusOK, + StatusWarning, +} from '@backstage/core-components'; +import { DateTime } from 'luxon'; + +interface PodConditionProps { + condition: IPodCondition; +} + +export const PodCondition = ({ condition }: PodConditionProps) => { + return ( + <> + {condition.status === 'False' && ( + + {condition.type} - ({condition.reason}{' '} + {condition.lastTransitionTime && + DateTime.fromISO(condition.lastTransitionTime).toRelative({ + locale: 'en', + })} + ) - {condition.message}{' '} + + )} + {condition.status === 'True' && ( + + {condition.type} - ( + {condition.lastTransitionTime && + DateTime.fromISO(condition.lastTransitionTime).toRelative({ + locale: 'en', + })} + ) + + )} + {condition.status === 'Unknown' && ( + + {condition.type} - ( + {condition.lastTransitionTime && + DateTime.fromISO(condition.lastTransitionTime).toRelative({ + locale: 'en', + })} + ) {condition.message} + + )} + + ); +}; + +interface PendingPodContentProps { + pod: Pod; +} + +export const PendingPodContent = ({ pod }: PendingPodContentProps) => { + // TODO add PodHasNetwork when it's out of alpha + // https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-conditions + const startupConditions = [ + pod.status?.conditions?.find(c => c.type === 'PodScheduled'), + pod.status?.conditions?.find(c => c.type === 'Initialized'), + pod.status?.conditions?.find(c => c.type === 'ContainersReady'), + pod.status?.conditions?.find(c => c.type === 'Ready'), + ].filter((c): c is IPodCondition => !!c); // filter out undefined + return ( + + + Pod is Pending. Conditions: + + {startupConditions.map(c => ( + + + + ))} + + + + ); +}; diff --git a/plugins/kubernetes/src/components/Pods/PodDrawer/PodDrawer.test.tsx b/plugins/kubernetes/src/components/Pods/PodDrawer/PodDrawer.test.tsx new file mode 100644 index 0000000000..fa4f9f7168 --- /dev/null +++ b/plugins/kubernetes/src/components/Pods/PodDrawer/PodDrawer.test.tsx @@ -0,0 +1,67 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from 'react'; + +import { render } from '@testing-library/react'; +import { wrapInTestApp } from '@backstage/test-utils'; +import '@testing-library/jest-dom'; + +import { PodDrawer } from '.'; + +describe('PodDrawer', () => { + it('Should show title and container names', async () => { + const { getAllByText, getByText } = render( + wrapInTestApp( + , + ), + ); + + expect(getAllByText('ok-pod')).toHaveLength(2); + expect(getByText('Pod (127.0.0.1)')).toBeInTheDocument(); + expect(getByText('YAML')).toBeInTheDocument(); + expect(getByText('Containers')).toBeInTheDocument(); + expect(getByText('some-container')).toBeInTheDocument(); + }); +}); diff --git a/plugins/kubernetes/src/components/Pods/PodDrawer/PodDrawer.tsx b/plugins/kubernetes/src/components/Pods/PodDrawer/PodDrawer.tsx new file mode 100644 index 0000000000..a78f08683c --- /dev/null +++ b/plugins/kubernetes/src/components/Pods/PodDrawer/PodDrawer.tsx @@ -0,0 +1,124 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from 'react'; + +import { ItemCardGrid } from '@backstage/core-components'; +import { + createStyles, + makeStyles, + Theme, + Grid, + Typography, +} from '@material-ui/core'; + +import { Pod } from 'kubernetes-models/v1'; + +import { ContainerCard } from './ContainerCard'; + +import { PodAndErrors } from '../types'; +import { KubernetesDrawer } from '../../KubernetesDrawer'; +import { PendingPodContent } from './PendingPodContent'; + +const useDrawerContentStyles = makeStyles((_theme: Theme) => + createStyles({ + header: { + display: 'flex', + flexDirection: 'row', + justifyContent: 'space-between', + }, + content: { + height: '80%', + }, + icon: { + fontSize: 20, + }, + podoklist: { + width: '100%', + maxWidth: 360, + maxHeight: 360, + }, + }), +); + +function getContainerSpecByName(pod: Pod, containerName: string) { + return pod.spec?.containers.find(c => c.name === containerName); +} +interface PodDrawerProps { + open?: boolean; + podAndErrors: PodAndErrors; +} + +export const PodDrawer = ({ podAndErrors, open }: PodDrawerProps) => { + const classes = useDrawerContentStyles(); + + return ( + + Pod{' '} + {podAndErrors.pod.status?.podIP && + `(${podAndErrors.pod.status?.podIP})`} + + } + kubernetesObject={podAndErrors.pod} + label={ + + {podAndErrors.pod.metadata?.name ?? 'unknown'} + + } + > +
    + {podAndErrors.pod.status?.phase === 'Pending' && ( + + )} + {podAndErrors.pod.status?.containerStatuses?.length && ( + + + Containers + + + + {podAndErrors.pod.status?.containerStatuses?.map( + (containerStatus, i) => { + const containerSpec = getContainerSpecByName( + podAndErrors.pod, + containerStatus.name, + ); + return ( + + ); + }, + )} + + + + )} +
    +
    + ); +}; diff --git a/plugins/kubernetes/src/components/Pods/PodDrawer/index.ts b/plugins/kubernetes/src/components/Pods/PodDrawer/index.ts new file mode 100644 index 0000000000..17d50ddfcd --- /dev/null +++ b/plugins/kubernetes/src/components/Pods/PodDrawer/index.ts @@ -0,0 +1,16 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +export { PodDrawer } from './PodDrawer'; diff --git a/plugins/kubernetes/src/components/Pods/PodLogs/PodLogs.tsx b/plugins/kubernetes/src/components/Pods/PodLogs/PodLogs.tsx new file mode 100644 index 0000000000..5cff023772 --- /dev/null +++ b/plugins/kubernetes/src/components/Pods/PodLogs/PodLogs.tsx @@ -0,0 +1,55 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React from 'react'; + +import { DismissableBanner, LogViewer } from '@backstage/core-components'; +import { Paper } from '@material-ui/core'; +import { Skeleton } from '@material-ui/lab'; + +import { ContainerScope } from './types'; +import { usePodLogs } from './usePodLogs'; + +interface PodLogsProps { + podScope: ContainerScope; +} + +export const PodLogs: React.FC = ({ podScope }: PodLogsProps) => { + const { value, error, loading } = usePodLogs({ + podScope: podScope, + }); + + return ( + <> + {error && ( + + )} + + {loading && } + {!loading && value !== undefined && } + + + ); +}; diff --git a/plugins/kubernetes/src/components/Pods/PodLogs/PodLogsDialog.tsx b/plugins/kubernetes/src/components/Pods/PodLogs/PodLogsDialog.tsx new file mode 100644 index 0000000000..05d980b26a --- /dev/null +++ b/plugins/kubernetes/src/components/Pods/PodLogs/PodLogsDialog.tsx @@ -0,0 +1,90 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import React, { useState } from 'react'; + +import { + Button, + createStyles, + Dialog, + DialogContent, + DialogTitle, + IconButton, + makeStyles, + Theme, +} from '@material-ui/core'; +import SubjectIcon from '@material-ui/icons/Subject'; + +import CloseIcon from '@material-ui/icons/Close'; + +import { PodLogs } from './PodLogs'; +import { ContainerScope } from './types'; + +const useStyles = makeStyles((theme: Theme) => + createStyles({ + closeButton: { + position: 'absolute', + right: theme.spacing(1), + top: theme.spacing(1), + color: theme.palette.grey[500], + }, + }), +); + +interface PodLogsDialogProps { + podScope: ContainerScope; +} + +export const PodLogsDialog = ({ podScope }: PodLogsDialogProps) => { + const classes = useStyles(); + const [open, setOpen] = useState(false); + + const openDialog = () => { + setOpen(true); + }; + + const closeDialog = () => { + setOpen(false); + }; + return ( + <> + + + {podScope.podName} - {podScope.containerName} logs on cluster{' '} + {podScope.clusterName} + + + + + + + + + + + ); +}; diff --git a/plugins/kubernetes/src/components/Pods/PodLogs/index.ts b/plugins/kubernetes/src/components/Pods/PodLogs/index.ts new file mode 100644 index 0000000000..ca5c1dde11 --- /dev/null +++ b/plugins/kubernetes/src/components/Pods/PodLogs/index.ts @@ -0,0 +1,19 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +export * from './PodLogs'; +export * from './PodLogsDialog'; +export * from './usePodLogs'; +export * from './types'; diff --git a/plugins/kubernetes/src/components/Pods/PodLogs/types.ts b/plugins/kubernetes/src/components/Pods/PodLogs/types.ts new file mode 100644 index 0000000000..fcc1c40194 --- /dev/null +++ b/plugins/kubernetes/src/components/Pods/PodLogs/types.ts @@ -0,0 +1,25 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface PodScope { + podName: string; + podNamespace: string; + clusterName: string; +} + +export interface ContainerScope extends PodScope { + containerName: string; +} diff --git a/plugins/kubernetes/src/components/Pods/PodLogs/usePodLogs.ts b/plugins/kubernetes/src/components/Pods/PodLogs/usePodLogs.ts new file mode 100644 index 0000000000..9f3af5cb3b --- /dev/null +++ b/plugins/kubernetes/src/components/Pods/PodLogs/usePodLogs.ts @@ -0,0 +1,36 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { kubernetesProxyApiRef } from '@backstage/plugin-kubernetes'; +import useAsync from 'react-use/lib/useAsync'; + +import { ContainerScope } from './types'; +import { useApi } from '@backstage/core-plugin-api'; + +interface PodLogsOptions { + podScope: ContainerScope; +} + +export const usePodLogs = ({ podScope }: PodLogsOptions) => { + const kubernetesProxyApi = useApi(kubernetesProxyApiRef); + return useAsync(async () => { + return await kubernetesProxyApi.getPodLogs({ + podName: podScope.podName, + namespace: podScope.podNamespace, + containerName: podScope.containerName, + clusterName: podScope.clusterName, + }); + }, [JSON.stringify(podScope)]); +}; diff --git a/plugins/kubernetes/src/components/Pods/PodsTable.tsx b/plugins/kubernetes/src/components/Pods/PodsTable.tsx index a6e4b33020..4b7b4b93ed 100644 --- a/plugins/kubernetes/src/components/Pods/PodsTable.tsx +++ b/plugins/kubernetes/src/components/Pods/PodsTable.tsx @@ -26,6 +26,7 @@ import { } from '../../utils/pod'; import { Table, TableColumn } from '@backstage/core-components'; import { PodNamesWithMetricsContext } from '../../hooks/PodNamesWithMetrics'; +import { ClusterContext } from '../../hooks/Cluster'; export const READY_COLUMNS: PodColumns = 'READY'; export const RESOURCE_COLUMNS: PodColumns = 'RESOURCE'; @@ -37,23 +38,6 @@ type PodsTablesProps = { children?: React.ReactNode; }; -const DEFAULT_COLUMNS: TableColumn[] = [ - { - title: 'name', - highlight: true, - render: (pod: V1Pod) => , - }, - { - title: 'phase', - render: (pod: V1Pod) => pod.status?.phase ?? 'unknown', - width: 'auto', - }, - { - title: 'status', - render: containerStatuses, - }, -]; - const READY: TableColumn[] = [ { title: 'containers ready', @@ -72,7 +56,32 @@ const READY: TableColumn[] = [ export const PodsTable = ({ pods, extraColumns = [] }: PodsTablesProps) => { const podNamesWithMetrics = useContext(PodNamesWithMetricsContext); - const columns: TableColumn[] = [...DEFAULT_COLUMNS]; + const cluster = useContext(ClusterContext); + const defaultColumns: TableColumn[] = [ + { + title: 'name', + highlight: true, + render: (pod: V1Pod) => ( + + ), + }, + { + title: 'phase', + render: (pod: V1Pod) => pod.status?.phase ?? 'unknown', + width: 'auto', + }, + { + title: 'status', + render: containerStatuses, + }, + ]; + const columns: TableColumn[] = [...defaultColumns]; if (extraColumns.includes(READY_COLUMNS)) { columns.push(...READY); diff --git a/plugins/kubernetes/src/components/Pods/types.ts b/plugins/kubernetes/src/components/Pods/types.ts new file mode 100644 index 0000000000..195f0b9135 --- /dev/null +++ b/plugins/kubernetes/src/components/Pods/types.ts @@ -0,0 +1,22 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { Pod } from 'kubernetes-models/v1'; + +export interface PodAndErrors { + clusterName: string; + pod: Pod; + errors: any[]; +} diff --git a/plugins/kubernetes/src/components/ServicesAccordions/ServiceDrawer.tsx b/plugins/kubernetes/src/components/ServicesAccordions/ServiceDrawer.tsx index a088c4792d..9588cd00ed 100644 --- a/plugins/kubernetes/src/components/ServicesAccordions/ServiceDrawer.tsx +++ b/plugins/kubernetes/src/components/ServicesAccordions/ServiceDrawer.tsx @@ -16,7 +16,7 @@ import React from 'react'; import { V1Service } from '@kubernetes/client-node'; -import { KubernetesDrawer } from '../KubernetesDrawer/KubernetesDrawer'; +import { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer'; import { Typography, Grid } from '@material-ui/core'; export const ServiceDrawer = ({ @@ -27,7 +27,7 @@ export const ServiceDrawer = ({ expanded?: boolean; }) => { return ( - - + ); }; diff --git a/plugins/kubernetes/src/components/StatefulSetsAccordions/StatefulSetDrawer.tsx b/plugins/kubernetes/src/components/StatefulSetsAccordions/StatefulSetDrawer.tsx index e83c890426..e07a5f426c 100644 --- a/plugins/kubernetes/src/components/StatefulSetsAccordions/StatefulSetDrawer.tsx +++ b/plugins/kubernetes/src/components/StatefulSetsAccordions/StatefulSetDrawer.tsx @@ -16,7 +16,7 @@ import React from 'react'; import { V1StatefulSet } from '@kubernetes/client-node'; -import { KubernetesDrawer } from '../KubernetesDrawer/KubernetesDrawer'; +import { KubernetesStructuredMetadataTableDrawer } from '../KubernetesDrawer'; import { renderCondition } from '../../utils/pod'; import { Typography, Grid, Chip } from '@material-ui/core'; @@ -29,7 +29,7 @@ export const StatefulSetDrawer = ({ }) => { const namespace = statefulset.metadata?.namespace; return ( - )} - + ); }; diff --git a/plugins/kubernetes/src/components/index.ts b/plugins/kubernetes/src/components/index.ts index 72a3cd3ee1..11550e767b 100644 --- a/plugins/kubernetes/src/components/index.ts +++ b/plugins/kubernetes/src/components/index.ts @@ -22,7 +22,7 @@ export * from './ErrorReporting'; export * from './HorizontalPodAutoscalers'; export * from './IngressesAccordions'; export * from './JobsAccordions'; -export { KubernetesDrawer } from './KubernetesDrawer'; +export * from './KubernetesDrawer'; export * from './Pods'; export * from './ServicesAccordions'; export * from './KubernetesContent'; diff --git a/plugins/kubernetes/src/plugin.ts b/plugins/kubernetes/src/plugin.ts index cb85cf06fb..e10b4856b7 100644 --- a/plugins/kubernetes/src/plugin.ts +++ b/plugins/kubernetes/src/plugin.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { KubernetesBackendClient } from './api/KubernetesBackendClient'; -import { kubernetesApiRef } from './api/types'; +import { kubernetesApiRef, kubernetesProxyApiRef } from './api/types'; import { kubernetesAuthProvidersApiRef } from './kubernetes-auth-provider/types'; import { KubernetesAuthProviders } from './kubernetes-auth-provider/KubernetesAuthProviders'; import { @@ -30,6 +30,7 @@ import { oneloginAuthApiRef, createRoutableExtension, } from '@backstage/core-plugin-api'; +import { KubernetesProxyClient } from './api'; export const rootCatalogKubernetesRouteRef = createRouteRef({ id: 'kubernetes', @@ -52,6 +53,16 @@ export const kubernetesPlugin = createPlugin({ kubernetesAuthProvidersApi, }), }), + createApiFactory({ + api: kubernetesProxyApiRef, + deps: { + kubernetesApi: kubernetesApiRef, + }, + factory: ({ kubernetesApi }) => + new KubernetesProxyClient({ + kubernetesApi, + }), + }), createApiFactory({ api: kubernetesAuthProvidersApiRef, deps: { diff --git a/plugins/lighthouse-backend/CHANGELOG.md b/plugins/lighthouse-backend/CHANGELOG.md index bfbdab193e..81da2807af 100644 --- a/plugins/lighthouse-backend/CHANGELOG.md +++ b/plugins/lighthouse-backend/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-lighthouse-backend +## 0.2.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-lighthouse-common@0.1.1 + ## 0.2.0 ### Minor Changes diff --git a/plugins/lighthouse-backend/package.json b/plugins/lighthouse-backend/package.json index 844b5d10b9..351ee3fb7e 100644 --- a/plugins/lighthouse-backend/package.json +++ b/plugins/lighthouse-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-lighthouse-backend", "description": "Backend functionalities for lighthouse", - "version": "0.2.0", + "version": "0.2.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/lighthouse/CHANGELOG.md b/plugins/lighthouse/CHANGELOG.md index 0e9712266c..67aa76b0f9 100644 --- a/plugins/lighthouse/CHANGELOG.md +++ b/plugins/lighthouse/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-lighthouse +## 0.4.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/config@1.0.7 + +## 0.4.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19 + - @backstage/plugin-lighthouse-common@0.1.1 + ## 0.4.2 ### Patch Changes diff --git a/plugins/lighthouse/package.json b/plugins/lighthouse/package.json index eaa82ed0e0..7afa358f76 100644 --- a/plugins/lighthouse/package.json +++ b/plugins/lighthouse/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-lighthouse", "description": "A Backstage plugin that integrates towards Lighthouse", - "version": "0.4.2", + "version": "0.4.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/linguist-backend/CHANGELOG.md b/plugins/linguist-backend/CHANGELOG.md index d835d4314e..5096043450 100644 --- a/plugins/linguist-backend/CHANGELOG.md +++ b/plugins/linguist-backend/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-linguist-backend +## 0.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/config@1.0.7 + +## 0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-linguist-common@0.1.0 + ## 0.2.1 ### Patch Changes diff --git a/plugins/linguist-backend/package.json b/plugins/linguist-backend/package.json index 5336988140..f3feacb740 100644 --- a/plugins/linguist-backend/package.json +++ b/plugins/linguist-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-linguist-backend", - "version": "0.2.1", + "version": "0.2.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/linguist/CHANGELOG.md b/plugins/linguist/CHANGELOG.md index bc41f56a8a..7c3a38f09d 100644 --- a/plugins/linguist/CHANGELOG.md +++ b/plugins/linguist/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-linguist +## 0.1.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/plugin-linguist-common@0.1.0 + ## 0.1.2 ### Patch Changes diff --git a/plugins/linguist/package.json b/plugins/linguist/package.json index ee0cfd02b9..e71271c03f 100644 --- a/plugins/linguist/package.json +++ b/plugins/linguist/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-linguist", - "version": "0.1.2", + "version": "0.1.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/microsoft-calendar/CHANGELOG.md b/plugins/microsoft-calendar/CHANGELOG.md index e64850aee9..6e4ca92146 100644 --- a/plugins/microsoft-calendar/CHANGELOG.md +++ b/plugins/microsoft-calendar/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-microsoft-calendar +## 0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.1.2 ### Patch Changes diff --git a/plugins/microsoft-calendar/package.json b/plugins/microsoft-calendar/package.json index 7c452ab67b..a28d9a5111 100644 --- a/plugins/microsoft-calendar/package.json +++ b/plugins/microsoft-calendar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-microsoft-calendar", - "version": "0.1.2", + "version": "0.1.3-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/newrelic-dashboard/CHANGELOG.md b/plugins/newrelic-dashboard/CHANGELOG.md index 17ef1630f8..6e3142ef09 100644 --- a/plugins/newrelic-dashboard/CHANGELOG.md +++ b/plugins/newrelic-dashboard/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-newrelic-dashboard +## 0.2.11-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.2.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + ## 0.2.10 ### Patch Changes diff --git a/plugins/newrelic-dashboard/package.json b/plugins/newrelic-dashboard/package.json index c3ca886de7..c7d6ee5733 100644 --- a/plugins/newrelic-dashboard/package.json +++ b/plugins/newrelic-dashboard/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-newrelic-dashboard", - "version": "0.2.10", + "version": "0.2.11-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/newrelic/CHANGELOG.md b/plugins/newrelic/CHANGELOG.md index f1f6f8688c..b9beb277dc 100644 --- a/plugins/newrelic/CHANGELOG.md +++ b/plugins/newrelic/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-newrelic +## 0.3.36-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.3.35 ### Patch Changes diff --git a/plugins/newrelic/package.json b/plugins/newrelic/package.json index 0f48005bd7..117d51f9e9 100644 --- a/plugins/newrelic/package.json +++ b/plugins/newrelic/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-newrelic", "description": "A Backstage plugin that integrates towards New Relic", - "version": "0.3.35", + "version": "0.3.36-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/octopus-deploy/CHANGELOG.md b/plugins/octopus-deploy/CHANGELOG.md index b7c6308d81..98c05807bf 100644 --- a/plugins/octopus-deploy/CHANGELOG.md +++ b/plugins/octopus-deploy/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-octopus-deploy +## 0.2.0-next.1 + +### Minor Changes + +- 87211bc2873: Added support for Octopus Deploy spaces. The octopus.com/project-id annotation can now (optionally) be prefixed by a space identifier, for example. Spaces-1/Projects-102. + Also note that some of this plugins exported API's have changed to accommodate this change, changing from separate arguments to a single object. + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + ## 0.1.1 ### Patch Changes diff --git a/plugins/octopus-deploy/README.md b/plugins/octopus-deploy/README.md index abc0559896..6039856998 100644 --- a/plugins/octopus-deploy/README.md +++ b/plugins/octopus-deploy/README.md @@ -42,7 +42,7 @@ const cicdContent = ( ) ``` -3. Add `octopus.com/project-id` annotation in catalog descriptor file +3. Add `octopus.com/project-id` annotation in the catalog descriptor file. To obtain a projects ID you will have to query the Octopus API. In the future we'll add support for using a projects slug as well. @@ -58,4 +58,20 @@ spec: type: service ``` -All set , you will be able to see the plugin in action! +If your project is not part of the default space you can add the space ID to the annotation as a prefix. For example: + +``` +// catalog-info.yaml +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + # ... + annotations: + octopus.com/project-id: Spaces-2/Projects-102 +spec: + type: service +``` + +You can get the ID of the space from the URL in the Octopus Deploy UI. + +All set, you will be able to see the plugin in action! diff --git a/plugins/octopus-deploy/api-report.md b/plugins/octopus-deploy/api-report.md index 82512ebcef..53c92403bd 100644 --- a/plugins/octopus-deploy/api-report.md +++ b/plugins/octopus-deploy/api-report.md @@ -25,10 +25,10 @@ export const OCTOPUS_DEPLOY_PROJECT_ID_ANNOTATION = 'octopus.com/project-id'; // @public (undocumented) export interface OctopusDeployApi { // (undocumented) - getReleaseProgression( - projectId: string, - releaseHistoryCount: number, - ): Promise; + getReleaseProgression(opts: { + projectReference: ProjectReference; + releaseHistoryCount: number; + }): Promise; } // @public (undocumented) @@ -42,10 +42,10 @@ export class OctopusDeployClient implements OctopusDeployApi { proxyPathBase?: string; }); // (undocumented) - getReleaseProgression( - projectId: string, - releaseHistoryCount: number, - ): Promise; + getReleaseProgression(opts: { + projectReference: ProjectReference; + releaseHistoryCount: number; + }): Promise; } // @public (undocumented) @@ -82,5 +82,11 @@ export type OctopusReleaseProgression = { }; }; +// @public (undocumented) +export type ProjectReference = { + projectId: string; + spaceId?: string; +}; + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/octopus-deploy/package.json b/plugins/octopus-deploy/package.json index f050aed3bd..f8cfe04450 100644 --- a/plugins/octopus-deploy/package.json +++ b/plugins/octopus-deploy/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-octopus-deploy", - "version": "0.1.1", + "version": "0.2.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/octopus-deploy/src/api/index.ts b/plugins/octopus-deploy/src/api/index.ts index 9cba49d6c0..0364bed269 100644 --- a/plugins/octopus-deploy/src/api/index.ts +++ b/plugins/octopus-deploy/src/api/index.ts @@ -18,6 +18,7 @@ import { DiscoveryApi, FetchApi, } from '@backstage/core-plugin-api'; +import { ProjectReference } from '../utils/getAnnotationFromEntity'; /** @public */ export type OctopusProgression = { @@ -57,10 +58,10 @@ const DEFAULT_PROXY_PATH_BASE = '/octopus-deploy'; /** @public */ export interface OctopusDeployApi { - getReleaseProgression( - projectId: string, - releaseHistoryCount: number, - ): Promise; + getReleaseProgression(opts: { + projectReference: ProjectReference; + releaseHistoryCount: number; + }): Promise; } /** @public */ @@ -79,11 +80,11 @@ export class OctopusDeployClient implements OctopusDeployApi { this.proxyPathBase = options.proxyPathBase ?? DEFAULT_PROXY_PATH_BASE; } - async getReleaseProgression( - projectId: string, - releaseHistoryCount: number, - ): Promise { - const url = await this.getApiUrl(projectId, releaseHistoryCount); + async getReleaseProgression(opts: { + projectReference: ProjectReference; + releaseHistoryCount: number; + }): Promise { + const url = await this.getApiUrl(opts); const response = await this.fetchApi.fetch(url); @@ -106,13 +107,24 @@ export class OctopusDeployClient implements OctopusDeployApi { return responseJson; } - private async getApiUrl(projectId: string, releaseHistoryCount: number) { + private async getApiUrl(opts: { + projectReference: ProjectReference; + releaseHistoryCount: number; + }) { const proxyUrl = await this.discoveryApi.getBaseUrl('proxy'); const queryParameters = new URLSearchParams({ - releaseHistoryCount: releaseHistoryCount.toString(), + releaseHistoryCount: opts.releaseHistoryCount.toString(), }); + if (opts.projectReference.spaceId !== undefined) { + return `${proxyUrl}${this.proxyPathBase}/${encodeURIComponent( + opts.projectReference.spaceId, + )}/projects/${encodeURIComponent( + opts.projectReference.projectId, + )}/progression?${queryParameters}`; + } + return `${proxyUrl}${this.proxyPathBase}/projects/${encodeURIComponent( - projectId, + opts.projectReference.projectId, )}/progression?${queryParameters}`; } } diff --git a/plugins/octopus-deploy/src/components/EntityPageOctopusDeploy/EntityPageOctopusDeploy.tsx b/plugins/octopus-deploy/src/components/EntityPageOctopusDeploy/EntityPageOctopusDeploy.tsx index de28edb9e0..21080cb408 100644 --- a/plugins/octopus-deploy/src/components/EntityPageOctopusDeploy/EntityPageOctopusDeploy.tsx +++ b/plugins/octopus-deploy/src/components/EntityPageOctopusDeploy/EntityPageOctopusDeploy.tsx @@ -15,18 +15,19 @@ */ import { useEntity } from '@backstage/plugin-catalog-react'; import { useReleases } from '../../hooks/useReleases'; -import { getAnnotationFromEntity } from '../../utils/getAnnotationFromEntity'; +import { getProjectReferenceAnnotationFromEntity } from '../../utils/getAnnotationFromEntity'; import React from 'react'; import { ReleaseTable } from '../ReleaseTable'; export const EntityPageOctopusDeploy = (props: { defaultLimit?: number }) => { const { entity } = useEntity(); - const projectId = getAnnotationFromEntity(entity); + const projectReference = getProjectReferenceAnnotationFromEntity(entity); const { environments, releases, loading, error } = useReleases( - projectId, + projectReference.projectId, props.defaultLimit ?? 3, + projectReference.spaceId, ); return ( diff --git a/plugins/octopus-deploy/src/hooks/useReleases.ts b/plugins/octopus-deploy/src/hooks/useReleases.ts index 742ce78dca..671a0a7e7f 100644 --- a/plugins/octopus-deploy/src/hooks/useReleases.ts +++ b/plugins/octopus-deploy/src/hooks/useReleases.ts @@ -24,6 +24,7 @@ import { export function useReleases( projectId: string, releaseHistoryCount: number, + spaceId?: string, ): { environments?: OctopusEnvironment[]; releases?: OctopusReleaseProgression[]; @@ -33,8 +34,11 @@ export function useReleases( const api = useApi(octopusDeployApiRef); const { value, loading, error } = useAsync(() => { - return api.getReleaseProgression(projectId, releaseHistoryCount); - }, [api, projectId, releaseHistoryCount]); + return api.getReleaseProgression({ + projectReference: { projectId, spaceId }, + releaseHistoryCount, + }); + }, [api, projectId, spaceId, releaseHistoryCount]); return { environments: value?.Environments, diff --git a/plugins/octopus-deploy/src/index.ts b/plugins/octopus-deploy/src/index.ts index e3264efaf0..2b39431606 100644 --- a/plugins/octopus-deploy/src/index.ts +++ b/plugins/octopus-deploy/src/index.ts @@ -21,4 +21,6 @@ export { export * from './api'; +export type { ProjectReference } from './utils/getAnnotationFromEntity'; + export { OCTOPUS_DEPLOY_PROJECT_ID_ANNOTATION } from './constants'; diff --git a/plugins/octopus-deploy/src/utils/getAnnotationFromEntity.ts b/plugins/octopus-deploy/src/utils/getAnnotationFromEntity.ts index e59a32235f..80ebaab76a 100644 --- a/plugins/octopus-deploy/src/utils/getAnnotationFromEntity.ts +++ b/plugins/octopus-deploy/src/utils/getAnnotationFromEntity.ts @@ -17,7 +17,12 @@ import { OCTOPUS_DEPLOY_PROJECT_ID_ANNOTATION } from '../constants'; import { Entity } from '@backstage/catalog-model'; -export function getAnnotationFromEntity(entity: Entity): string { +/** @public */ +export type ProjectReference = { projectId: string; spaceId?: string }; + +export function getProjectReferenceAnnotationFromEntity( + entity: Entity, +): ProjectReference { const annotation = entity.metadata.annotations?.[OCTOPUS_DEPLOY_PROJECT_ID_ANNOTATION]; if (!annotation) { @@ -26,5 +31,9 @@ export function getAnnotationFromEntity(entity: Entity): string { ); } - return annotation; + const referencedProject = annotation.split('/', 2); + if (referencedProject.length === 2) { + return { projectId: referencedProject[1], spaceId: referencedProject[0] }; + } + return { projectId: referencedProject[0] }; } diff --git a/plugins/org-react/CHANGELOG.md b/plugins/org-react/CHANGELOG.md index dd4af56c70..54b536cb79 100644 --- a/plugins/org-react/CHANGELOG.md +++ b/plugins/org-react/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-org-react +## 0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + ## 0.1.6 ### Patch Changes diff --git a/plugins/org-react/package.json b/plugins/org-react/package.json index d3e7b8da29..7778af38db 100644 --- a/plugins/org-react/package.json +++ b/plugins/org-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-org-react", - "version": "0.1.6", + "version": "0.1.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/org/CHANGELOG.md b/plugins/org/CHANGELOG.md index 9c27c1addf..017d0c6db6 100644 --- a/plugins/org/CHANGELOG.md +++ b/plugins/org/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-org +## 0.6.8-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.6.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + ## 0.6.7 ### Patch Changes diff --git a/plugins/org/package.json b/plugins/org/package.json index a5b3308922..8d6490b2e2 100644 --- a/plugins/org/package.json +++ b/plugins/org/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-org", "description": "A Backstage plugin that helps you create entity pages for your organization", - "version": "0.6.7", + "version": "0.6.8-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/pagerduty/CHANGELOG.md b/plugins/pagerduty/CHANGELOG.md index 059917d401..c1ce6836eb 100644 --- a/plugins/pagerduty/CHANGELOG.md +++ b/plugins/pagerduty/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-pagerduty +## 0.5.11-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.5.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + ## 0.5.10 ### Patch Changes diff --git a/plugins/pagerduty/package.json b/plugins/pagerduty/package.json index 5c263976f6..8e599ca240 100644 --- a/plugins/pagerduty/package.json +++ b/plugins/pagerduty/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-pagerduty", "description": "A Backstage plugin that integrates towards PagerDuty", - "version": "0.5.10", + "version": "0.5.11-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/periskop-backend/CHANGELOG.md b/plugins/periskop-backend/CHANGELOG.md index 90b3dd291e..fde89edbe9 100644 --- a/plugins/periskop-backend/CHANGELOG.md +++ b/plugins/periskop-backend/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-periskop-backend +## 0.1.16-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 0.1.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + ## 0.1.15 ### Patch Changes diff --git a/plugins/periskop-backend/package.json b/plugins/periskop-backend/package.json index f2e1f01a51..b453b2bc59 100644 --- a/plugins/periskop-backend/package.json +++ b/plugins/periskop-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop-backend", - "version": "0.1.15", + "version": "0.1.16-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/periskop/CHANGELOG.md b/plugins/periskop/CHANGELOG.md index 1b7955ddb9..f205e47356 100644 --- a/plugins/periskop/CHANGELOG.md +++ b/plugins/periskop/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-periskop +## 0.1.16-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.1.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + ## 0.1.15 ### Patch Changes diff --git a/plugins/periskop/package.json b/plugins/periskop/package.json index 839e6535f0..97b7c26418 100644 --- a/plugins/periskop/package.json +++ b/plugins/periskop/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop", - "version": "0.1.15", + "version": "0.1.16-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-backend/CHANGELOG.md b/plugins/permission-backend/CHANGELOG.md index 0f8e8ab27f..02bb528853 100644 --- a/plugins/permission-backend/CHANGELOG.md +++ b/plugins/permission-backend/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-permission-backend +## 0.5.20-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/plugin-permission-node@0.7.8-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 0.5.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-permission-node@0.7.8-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + ## 0.5.19 ### Patch Changes diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index 26f7e725c0..0156c96626 100644 --- a/plugins/permission-backend/package.json +++ b/plugins/permission-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-backend", - "version": "0.5.19", + "version": "0.5.20-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-node/CHANGELOG.md b/plugins/permission-node/CHANGELOG.md index f2a6ca836d..b2014e3e62 100644 --- a/plugins/permission-node/CHANGELOG.md +++ b/plugins/permission-node/CHANGELOG.md @@ -1,5 +1,46 @@ # @backstage/plugin-permission-node +## 0.7.8-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 0.7.8-next.0 + +### Patch Changes + +- a788e715cfc: `createPermissionIntegrationRouter` now accepts rules and permissions for multiple resource types. Example: + + ```typescript + createPermissionIntegrationRouter({ + resources: [ + { + resourceType: 'resourceType-1', + permissions: permissionsResourceType1, + rules: rulesResourceType1, + }, + { + resourceType: 'resourceType-2', + permissions: permissionsResourceType2, + rules: rulesResourceType2, + }, + ], + }); + ``` + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + ## 0.7.7 ### Patch Changes diff --git a/plugins/permission-node/api-report.md b/plugins/permission-node/api-report.md index 9d49fd3d01..ea99d22fc5 100644 --- a/plugins/permission-node/api-report.md +++ b/plugins/permission-node/api-report.md @@ -113,20 +113,31 @@ export const createConditionTransformer: < // @public export function createPermissionIntegrationRouter< - TResourceType extends string, - TResource, + TResourceType1 extends string, + TResource1, + TResourceType2 extends string, + TResource2, + TResourceType3 extends string, + TResource3, >( - options: CreatePermissionIntegrationRouterResourceOptions< - TResourceType, - TResource - >, + options: + | { + permissions: Array; + } + | CreatePermissionIntegrationRouterResourceOptions< + TResourceType1, + TResource1 + > + | PermissionIntegrationRouterOptions< + TResourceType1, + TResource1, + TResourceType2, + TResource2, + TResourceType3, + TResource3 + >, ): express.Router; -// @public -export function createPermissionIntegrationRouter(options: { - permissions: Array; -}): express.Router; - // @public export type CreatePermissionIntegrationRouterResourceOptions< TResourceType extends string, @@ -188,6 +199,49 @@ export type MetadataResponseSerializedRule = { paramsSchema?: ReturnType; }; +// @public +export type PermissionIntegrationRouterOptions< + TResourceType1 extends string = string, + TResource1 = any, + TResourceType2 extends string = string, + TResource2 = any, + TResourceType3 extends string = string, + TResource3 = any, +> = { + resources: Readonly< + | [ + CreatePermissionIntegrationRouterResourceOptions< + TResourceType1, + TResource1 + >, + ] + | [ + CreatePermissionIntegrationRouterResourceOptions< + TResourceType1, + TResource1 + >, + CreatePermissionIntegrationRouterResourceOptions< + TResourceType2, + TResource2 + >, + ] + | [ + CreatePermissionIntegrationRouterResourceOptions< + TResourceType1, + TResource1 + >, + CreatePermissionIntegrationRouterResourceOptions< + TResourceType2, + TResource2 + >, + CreatePermissionIntegrationRouterResourceOptions< + TResourceType3, + TResource3 + >, + ] + >; +}; + // @public export interface PermissionPolicy { // (undocumented) diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json index e4169469bd..a0187f4576 100644 --- a/plugins/permission-node/package.json +++ b/plugins/permission-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-permission-node", "description": "Common permission and authorization utilities for backend plugins", - "version": "0.7.7", + "version": "0.7.8-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts index 6e28c5ddc4..24e1b91065 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts @@ -26,6 +26,7 @@ import { createPermissionIntegrationRouter, CreatePermissionIntegrationRouterResourceOptions, createConditionAuthorizer, + PermissionIntegrationRouterOptions, } from './createPermissionIntegrationRouter'; import { createPermissionRule } from './createPermissionRule'; @@ -34,6 +35,11 @@ const testPermission: Permission = createPermission({ attributes: {}, }); +const testPermission2: Permission = createPermission({ + name: 'test.permission2', + attributes: {}, +}); + const mockTestRule1Apply = jest .fn() .mockImplementation((_resource: any, _params) => true); @@ -60,17 +66,52 @@ const testRule2 = createPermissionRule({ toQuery: () => ({}), }); -const defaultMockedGetResources: CreatePermissionIntegrationRouterResourceOptions< +const mockTestRule3Apply = jest + .fn() + .mockImplementation((_resource: any) => false); +const testRule3 = createPermissionRule({ + // simulating a clash of name with test-rule-1 rule of test-resource + name: 'test-rule-1', + description: 'Test rule 3', + resourceType: 'test-resource-2', + apply: mockTestRule3Apply, + toQuery: () => ({}), +}); + +const defaultMockedGetResources1: CreatePermissionIntegrationRouterResourceOptions< string, { id: string } >['getResources'] = jest.fn(async resourceRefs => resourceRefs.map(resourceRef => ({ id: resourceRef })), ); +const defaultMockedGetResources2: CreatePermissionIntegrationRouterResourceOptions< + string, + { id: string } +>['getResources'] = jest.fn(async resourceRefs => + resourceRefs.map(resourceRef => ({ id: resourceRef })), +); + +const mockedOptionResources: PermissionIntegrationRouterOptions = { + resources: [ + { + resourceType: 'test-resource', + permissions: [testPermission], + getResources: defaultMockedGetResources1, + rules: [testRule1, testRule2], + }, + { + resourceType: 'test-resource-2', + permissions: [testPermission2], + getResources: defaultMockedGetResources2, + rules: [testRule3], + }, + ], +}; + const createApp = ( mockedGetResources: - | typeof defaultMockedGetResources - | null = defaultMockedGetResources, + | typeof defaultMockedGetResources1 = defaultMockedGetResources1, ) => { const router = mockedGetResources ? createPermissionIntegrationRouter({ @@ -160,7 +201,7 @@ describe('createPermissionIntegrationRouter', () => { ], }, ])('returns 200/ALLOW when criteria match (case %#)', async conditions => { - const response = await request(createApp()) + let response = await request(createApp()) .post('/.well-known/backstage/permissions/apply-conditions') .send({ items: [ @@ -182,6 +223,41 @@ describe('createPermissionIntegrationRouter', () => { }, ], }); + + expect(defaultMockedGetResources1).toHaveBeenCalled(); + expect(mockTestRule3Apply).not.toHaveBeenCalled(); + + (defaultMockedGetResources1 as jest.Mock).mockClear(); + + const app = express().use( + createPermissionIntegrationRouter(mockedOptionResources), + ); + + response = await request(app) + .post('/.well-known/backstage/permissions/apply-conditions') + .send({ + items: [ + { + id: '123', + resourceRef: 'default:test/resource', + resourceType: 'test-resource', + conditions, + }, + ], + }); + + expect(response.status).toEqual(200); + expect(response.body).toEqual({ + items: [ + { + id: '123', + result: AuthorizeResult.ALLOW, + }, + ], + }); + expect(defaultMockedGetResources1).toHaveBeenCalled(); + expect(defaultMockedGetResources2).not.toHaveBeenCalled(); + expect(mockTestRule3Apply).not.toHaveBeenCalled(); }); it.each([ @@ -363,7 +439,7 @@ describe('createPermissionIntegrationRouter', () => { }); it('calls getResources for all required resources at once', () => { - expect(defaultMockedGetResources).toHaveBeenCalledWith([ + expect(defaultMockedGetResources1).toHaveBeenCalledWith([ 'default:test/resource-1', 'default:test/resource-2', 'default:test/resource-3', @@ -372,6 +448,116 @@ describe('createPermissionIntegrationRouter', () => { }); }); + describe('batched requests with different resource types', () => { + let response: Response; + + beforeEach(async () => { + const app = express().use( + createPermissionIntegrationRouter(mockedOptionResources), + ); + + response = await request(app) + .post('/.well-known/backstage/permissions/apply-conditions') + .send({ + items: [ + { + id: '123', + resourceRef: 'default:test/resource-1', + resourceType: 'test-resource', + conditions: { + rule: 'test-rule-1', + resourceType: 'test-resource', + params: { + foo: 'a', + bar: 1, + }, + }, + }, + { + id: '234', + resourceRef: 'default:test/resource-1', + resourceType: 'test-resource', + conditions: { + rule: 'test-rule-2', + resourceType: 'test-resource', + }, + }, + { + id: '345', + resourceRef: 'default:test/resource-2', + resourceType: 'test-resource-2', + conditions: { + not: { + rule: 'test-rule-1', + resourceType: 'test-resource-2', + params: { + foo: 'a', + bar: 1, + }, + }, + }, + }, + { + id: '456', + resourceRef: 'default:test/resource-3', + resourceType: 'test-resource', + conditions: { + not: { + rule: 'test-rule-2', + resourceType: 'test-resource', + }, + }, + }, + { + id: '567', + resourceRef: 'default:test/resource-4', + resourceType: 'test-resource-2', + conditions: { + anyOf: [ + { + rule: 'test-rule-1', + resourceType: 'test-resource-2', + params: { + foo: 'a', + bar: 1, + }, + }, + { + rule: 'test-rule-1', + resourceType: 'test-resource-2', + }, + ], + }, + }, + ], + }); + }); + + it('processes batched requests', () => { + expect(response.status).toEqual(200); + expect(response.body).toEqual({ + items: [ + { id: '123', result: AuthorizeResult.ALLOW }, + { id: '234', result: AuthorizeResult.DENY }, + { id: '345', result: AuthorizeResult.ALLOW }, + { id: '456', result: AuthorizeResult.ALLOW }, + { id: '567', result: AuthorizeResult.DENY }, + ], + }); + }); + + it('calls getResources for all required resources at once', () => { + expect(defaultMockedGetResources1).toHaveBeenCalledWith([ + 'default:test/resource-1', + 'default:test/resource-3', + ]); + expect(defaultMockedGetResources2).toHaveBeenCalledWith([ + 'default:test/resource-2', + 'default:test/resource-4', + ]); + }); + }); + it('returns 400 when called with incorrect resource type', async () => { const response = await request(createApp()) .post('/.well-known/backstage/permissions/apply-conditions') @@ -573,21 +759,43 @@ describe('createPermissionIntegrationRouter', () => { }); it('returns 501 with no getResources implementation', async () => { - const response = await request(createApp(null)) + const response = await request( + express().use( + createPermissionIntegrationRouter({ + resourceType: 'test-resource', + permissions: [testPermission], + rules: [testRule1, testRule2], + }), + ), + ) .post('/.well-known/backstage/permissions/apply-conditions') .send({ - items: [], + items: [ + { + id: '345', + resourceRef: 'default:test/resource-2', + resourceType: 'test-resource', + conditions: { + rule: 'test-rule-1', + resourceType: 'test-resource', + params: { + foo: 'a', + bar: 1, + }, + }, + }, + ], }); expect(response.status).toEqual(501); expect(response.body.error.message).toEqual( - `This plugin does not expose any permission rule or can't evaluate conditional decisions`, + `This plugin does not expose any permission rule or can't evaluate the conditions request for test-resource`, ); }); }); describe('GET /.well-known/backstage/permissions/metadata', () => { - it('returns a list of permissions and rules used by a given backend', async () => { + it('returns a list of permissions and rules of a single resource type', async () => { const response = await request(createApp()).get( '/.well-known/backstage/permissions/metadata', ); @@ -630,6 +838,139 @@ describe('createPermissionIntegrationRouter', () => { ], }); }); + + it('returns a list of permissions and rules from multiple resource types', async () => { + const response = await request( + express().use(createPermissionIntegrationRouter(mockedOptionResources)), + ).get('/.well-known/backstage/permissions/metadata'); + + expect(response.status).toEqual(200); + expect(response.body).toEqual({ + permissions: [testPermission, testPermission2], + rules: [ + { + name: testRule1.name, + description: testRule1.description, + resourceType: testRule1.resourceType, + paramsSchema: { + $schema: 'http://json-schema.org/draft-07/schema#', + additionalProperties: false, + properties: { + foo: { + type: 'string', + }, + bar: { + description: 'bar', + type: 'number', + }, + }, + required: ['foo', 'bar'], + type: 'object', + }, + }, + { + name: testRule2.name, + description: testRule2.description, + resourceType: testRule2.resourceType, + paramsSchema: { + $schema: 'http://json-schema.org/draft-07/schema#', + additionalProperties: false, + properties: {}, + type: 'object', + }, + }, + { + name: testRule3.name, + description: testRule3.description, + resourceType: testRule3.resourceType, + paramsSchema: { + $schema: 'http://json-schema.org/draft-07/schema#', + additionalProperties: false, + properties: {}, + type: 'object', + }, + }, + ], + }); + }); + }); + + it('returns a list of basic permissions together with permissions and rules from multiple resource types', async () => { + const aPermission = createPermission({ + name: 'a.permission', + attributes: {}, + }); + + const response = await request( + express().use( + createPermissionIntegrationRouter({ + permissions: [aPermission], + resources: [ + { + resourceType: 'test-resource', + permissions: [testPermission], + getResources: defaultMockedGetResources1, + rules: [testRule1, testRule2], + }, + { + resourceType: 'test-resource-2', + permissions: [testPermission2], + getResources: defaultMockedGetResources2, + rules: [testRule3], + }, + ], + }), + ), + ).get('/.well-known/backstage/permissions/metadata'); + + expect(response.status).toEqual(200); + expect(response.body).toEqual({ + permissions: [aPermission, testPermission, testPermission2], + rules: [ + { + name: testRule1.name, + description: testRule1.description, + resourceType: testRule1.resourceType, + paramsSchema: { + $schema: 'http://json-schema.org/draft-07/schema#', + additionalProperties: false, + properties: { + foo: { + type: 'string', + }, + bar: { + description: 'bar', + type: 'number', + }, + }, + required: ['foo', 'bar'], + type: 'object', + }, + }, + { + name: testRule2.name, + description: testRule2.description, + resourceType: testRule2.resourceType, + paramsSchema: { + $schema: 'http://json-schema.org/draft-07/schema#', + additionalProperties: false, + properties: {}, + type: 'object', + }, + }, + { + name: testRule3.name, + description: testRule3.description, + resourceType: testRule3.resourceType, + paramsSchema: { + $schema: 'http://json-schema.org/draft-07/schema#', + additionalProperties: false, + properties: {}, + type: 'object', + }, + }, + ], + }); }); }); diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts index 850123d55e..b6f6176f4d 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts @@ -207,6 +207,54 @@ export type CreatePermissionIntegrationRouterResourceOptions< ) => Promise>; }; +/** + * Options for creating a permission integration router exposing + * permissions and rules from multiple resource types. + * + * @public + */ +export type PermissionIntegrationRouterOptions< + TResourceType1 extends string = string, + TResource1 = any, + TResourceType2 extends string = string, + TResource2 = any, + TResourceType3 extends string = string, + TResource3 = any, +> = { + resources: Readonly< + | [ + CreatePermissionIntegrationRouterResourceOptions< + TResourceType1, + TResource1 + >, + ] + | [ + CreatePermissionIntegrationRouterResourceOptions< + TResourceType1, + TResource1 + >, + CreatePermissionIntegrationRouterResourceOptions< + TResourceType2, + TResource2 + >, + ] + | [ + CreatePermissionIntegrationRouterResourceOptions< + TResourceType1, + TResource1 + >, + CreatePermissionIntegrationRouterResourceOptions< + TResourceType2, + TResource2 + >, + CreatePermissionIntegrationRouterResourceOptions< + TResourceType3, + TResource3 + >, + ] + >; +}; + /** * Create an express Router which provides an authorization route to allow * integration between the permission backend and other Backstage backend @@ -217,6 +265,9 @@ export type CreatePermissionIntegrationRouterResourceOptions< * In case the `permissions` option is provided, the router also * provides a route that exposes permissions and routes of a plugin. * + * In case resources is provided, the routes can handle permissions + * for multiple resource types. + * * @remarks * * To make this concrete, we can use the Backstage software catalog as an @@ -246,45 +297,75 @@ export type CreatePermissionIntegrationRouterResourceOptions< * @public */ export function createPermissionIntegrationRouter< - TResourceType extends string, - TResource, ->( - options: CreatePermissionIntegrationRouterResourceOptions< - TResourceType, - TResource - >, -): express.Router; - -/** - * - * Create an express Router which provides a route that exposes - * permissions and routes of a plugin. - * @public - */ -export function createPermissionIntegrationRouter(options: { - permissions: Array; -}): express.Router; - -/** - * @public - */ -export function createPermissionIntegrationRouter< - TResourceType extends string, - TResource, + TResourceType1 extends string, + TResource1, + TResourceType2 extends string, + TResource2, + TResourceType3 extends string, + TResource3, >( options: | { permissions: Array } | CreatePermissionIntegrationRouterResourceOptions< - TResourceType, - TResource + TResourceType1, + TResource1 + > + | PermissionIntegrationRouterOptions< + TResourceType1, + TResource1, + TResourceType2, + TResource2, + TResourceType3, + TResource3 >, ): express.Router { + const optionsWithResources = options as PermissionIntegrationRouterOptions; + const allOptions = [ + optionsWithResources.resources ? optionsWithResources.resources : options, + ].flat(); + const allRules = allOptions.flatMap( + option => + ( + option as CreatePermissionIntegrationRouterResourceOptions< + TResourceType1, + TResource1 + > + ).rules || [], + ); + const allPermissions = [ + ...((options as { permissions: Permission[] }).permissions || []), + ...(optionsWithResources.resources?.flatMap(o => o.permissions || []) || + []), + ]; + + const allResourceTypes = allOptions.reduce((acc, option) => { + if ( + isCreatePermissionIntegrationRouterResourceOptions( + option as + | { permissions: Array } + | CreatePermissionIntegrationRouterResourceOptions< + TResourceType1, + TResource1 + >, + ) + ) { + acc.push( + ( + option as CreatePermissionIntegrationRouterResourceOptions< + TResourceType1, + TResource1 + > + ).resourceType, + ); + } + return acc; + }, [] as string[]); + const router = Router(); router.use(express.json()); - const { permissions = [], rules = [] } = { rules: [], ...options }; router.get('/.well-known/backstage/permissions/metadata', (_, res) => { - const serializedRules: MetadataResponseSerializedRule[] = rules.map( + const serializedRules: MetadataResponseSerializedRule[] = allRules.map( rule => ({ name: rule.name, description: rule.description, @@ -294,7 +375,7 @@ export function createPermissionIntegrationRouter< ); const responseJson: MetadataResponse = { - permissions, + permissions: allPermissions, rules: serializedRules, }; @@ -304,23 +385,39 @@ export function createPermissionIntegrationRouter< router.post( '/.well-known/backstage/permissions/apply-conditions', async (req, res: Response) => { - if ( - !isCreatePermissionIntegrationRouterResourceOptions(options) || - options.getResources === undefined - ) { - throw new NotImplementedError( - `This plugin does not expose any permission rule or can't evaluate conditional decisions`, - ); - } - const { resourceType, getResources } = options; + const ruleMapByResourceType: Record< + string, + ReturnType + > = {}; + const getResourcesByResourceType: Record< + string, + CreatePermissionIntegrationRouterResourceOptions< + TResourceType1, + TResource1 + >['getResources'] + > = {}; - const getRule = createGetRule(rules); + for (let option of allOptions) { + option = option as + | { permissions: Array } + | CreatePermissionIntegrationRouterResourceOptions< + TResourceType1, + TResource1 + >; + if (isCreatePermissionIntegrationRouterResourceOptions(option)) { + ruleMapByResourceType[option.resourceType] = createGetRule( + option.rules, + ); + + getResourcesByResourceType[option.resourceType] = option.getResources; + } + } const assertValidResourceTypes = ( requests: ApplyConditionsRequestEntry[], ) => { const invalidResourceTypes = requests - .filter(request => request.resourceType !== resourceType) + .filter(request => !allResourceTypes.includes(request.resourceType)) .map(request => request.resourceType); if (invalidResourceTypes.length) { @@ -340,23 +437,43 @@ export function createPermissionIntegrationRouter< assertValidResourceTypes(body.items); - const resourceRefs = Array.from( - new Set(body.items.map(({ resourceRef }) => resourceRef)), - ); - const resourceArray = await getResources(resourceRefs); - const resources = resourceRefs.reduce((acc, resourceRef, index) => { - acc[resourceRef] = resourceArray[index]; - + const resourceRefsByResourceType = body.items.reduce< + Record> + >((acc, item) => { + if (!acc[item.resourceType]) { + acc[item.resourceType] = new Set(); + } + acc[item.resourceType].add(item.resourceRef); return acc; - }, {} as Record); + }, {}); + + const resourcesByResourceType: Record> = {}; + for (const resourceType of Object.keys(resourceRefsByResourceType)) { + const getResources = getResourcesByResourceType[resourceType]; + if (!getResources) { + throw new NotImplementedError( + `This plugin does not expose any permission rule or can't evaluate the conditions request for ${resourceType}`, + ); + } + const resourceRefs = Array.from( + resourceRefsByResourceType[resourceType], + ); + const resources = await getResources(resourceRefs); + resourceRefs.forEach((resourceRef, index) => { + if (!resourcesByResourceType[resourceType]) { + resourcesByResourceType[resourceType] = {}; + } + resourcesByResourceType[resourceType][resourceRef] = resources[index]; + }); + } return res.json({ items: body.items.map(request => ({ id: request.id, result: applyConditions( request.conditions, - resources[request.resourceRef], - getRule, + resourcesByResourceType[request.resourceType][request.resourceRef], + ruleMapByResourceType[request.resourceType], ) ? AuthorizeResult.ALLOW : AuthorizeResult.DENY, diff --git a/plugins/playlist-backend/CHANGELOG.md b/plugins/playlist-backend/CHANGELOG.md index 06bdfb9fc6..2bf296d6b4 100644 --- a/plugins/playlist-backend/CHANGELOG.md +++ b/plugins/playlist-backend/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-playlist-backend +## 0.3.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/plugin-permission-node@0.7.8-next.1 + - @backstage/config@1.0.7 + +## 0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-permission-node@0.7.8-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-playlist-common@0.1.6 + ## 0.3.0 ### Minor Changes diff --git a/plugins/playlist-backend/package.json b/plugins/playlist-backend/package.json index f54b4cc133..c0ac336383 100644 --- a/plugins/playlist-backend/package.json +++ b/plugins/playlist-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-playlist-backend", - "version": "0.3.0", + "version": "0.3.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist/CHANGELOG.md b/plugins/playlist/CHANGELOG.md index e0e5bd4986..363c92681d 100644 --- a/plugins/playlist/CHANGELOG.md +++ b/plugins/playlist/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-playlist +## 0.1.9-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/plugin-search-react@1.6.0-next.1 + - @backstage/plugin-permission-react@0.4.12 + +## 0.1.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/plugin-search-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-permission-react@0.4.12 + - @backstage/plugin-playlist-common@0.1.6 + ## 0.1.8 ### Patch Changes diff --git a/plugins/playlist/package.json b/plugins/playlist/package.json index 49b549aae7..c542e6f05b 100644 --- a/plugins/playlist/package.json +++ b/plugins/playlist/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-playlist", - "version": "0.1.8", + "version": "0.1.9-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/proxy-backend/CHANGELOG.md b/plugins/proxy-backend/CHANGELOG.md index 384486e63f..e18a0f5a7f 100644 --- a/plugins/proxy-backend/CHANGELOG.md +++ b/plugins/proxy-backend/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-proxy-backend +## 0.2.39-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 0.2.39-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + ## 0.2.38 ### Patch Changes diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json index e5b9f1c3ff..f16c87f3d7 100644 --- a/plugins/proxy-backend/package.json +++ b/plugins/proxy-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-proxy-backend", "description": "A Backstage backend plugin that helps you set up proxy endpoints in the backend", - "version": "0.2.38", + "version": "0.2.39-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/puppetdb/CHANGELOG.md b/plugins/puppetdb/CHANGELOG.md index 02e1116d1a..f5bad45030 100644 --- a/plugins/puppetdb/CHANGELOG.md +++ b/plugins/puppetdb/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-puppetdb +## 0.1.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + ## 0.1.0 ### Minor Changes diff --git a/plugins/puppetdb/package.json b/plugins/puppetdb/package.json index e4d09d60af..8e7cafac21 100644 --- a/plugins/puppetdb/package.json +++ b/plugins/puppetdb/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-puppetdb", "description": "Backstage plugin to visualize resource information and Puppet facts from PuppetDB.", - "version": "0.1.0", + "version": "0.1.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/rollbar-backend/CHANGELOG.md b/plugins/rollbar-backend/CHANGELOG.md index 94e56c2a35..337ba58f5f 100644 --- a/plugins/rollbar-backend/CHANGELOG.md +++ b/plugins/rollbar-backend/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-rollbar-backend +## 0.1.42-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + +## 0.1.42-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/config@1.0.7 + ## 0.1.41 ### Patch Changes diff --git a/plugins/rollbar-backend/package.json b/plugins/rollbar-backend/package.json index 128eec63bb..170f06dcb0 100644 --- a/plugins/rollbar-backend/package.json +++ b/plugins/rollbar-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-rollbar-backend", "description": "A Backstage backend plugin that integrates towards Rollbar", - "version": "0.1.41", + "version": "0.1.42-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/rollbar/CHANGELOG.md b/plugins/rollbar/CHANGELOG.md index e4b6a58409..758244bd93 100644 --- a/plugins/rollbar/CHANGELOG.md +++ b/plugins/rollbar/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-rollbar +## 0.4.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.4.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + ## 0.4.17 ### Patch Changes diff --git a/plugins/rollbar/package.json b/plugins/rollbar/package.json index cfcc68da74..b057062bb7 100644 --- a/plugins/rollbar/package.json +++ b/plugins/rollbar/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-rollbar", "description": "A Backstage plugin that integrates towards Rollbar", - "version": "0.4.17", + "version": "0.4.18-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md index 70261e601c..f384a38e48 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-scaffolder-backend-module-confluence-to-markdown +## 0.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-scaffolder-backend@1.13.2-next.1 + - @backstage/plugin-scaffolder-node@0.1.3-next.1 + - @backstage/config@1.0.7 + +## 0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-scaffolder-backend@1.13.2-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-node@0.1.3-next.0 + ## 0.1.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json index 5f4752718d..bdc9238d2e 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown", "description": "The confluence-to-markdown module for @backstage/plugin-scaffolder-backend", - "version": "0.1.0", + "version": "0.1.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.test.ts b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.test.ts index 67f98d5fea..136bfc521e 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.test.ts +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.test.ts @@ -209,7 +209,7 @@ describe('confluence:transform:markdown', () => { expect(writeFile).toHaveBeenCalledTimes(1); }); - it('shoud fail on the first fetch call with response.ok set to false', async () => { + it('should fail on the first fetch call with response.ok set to false', async () => { const options = { reader, integrations, diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.ts b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.ts index 655b1bbdb7..801f8abb28 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.ts +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/confluenceToMarkdown.ts @@ -107,7 +107,7 @@ export const createConfluenceToMarkdownAction = (options: { `Could not find document ${url}. Please check your input.`, ); } - // This gets attachements for the confluence page if they exist + // This gets attachments for the confluence page if they exist const getDocAttachments = await fetchConfluence( `/rest/api/content/${getConfluenceDoc.results[0].id}/child/attachment`, config, diff --git a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md index 8d712cf3b3..05d8456582 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-scaffolder-backend-module-cookiecutter +## 0.2.21-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-scaffolder-backend@1.13.2-next.1 + - @backstage/plugin-scaffolder-node@0.1.3-next.1 + - @backstage/config@1.0.7 + +## 0.2.21-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-scaffolder-backend@1.13.2-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-node@0.1.3-next.0 + ## 0.2.19 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json index 0ec16def72..f8e494ae8b 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/package.json +++ b/plugins/scaffolder-backend-module-cookiecutter/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-cookiecutter", "description": "A module for the scaffolder backend that lets you template projects using cookiecutter", - "version": "0.2.19", + "version": "0.2.21-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md index 8fd95cfdb0..4d0b7edcc4 100644 --- a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-scaffolder-backend-module-gitlab +## 0.1.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.3-next.1 + - @backstage/config@1.0.7 + +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.4.5-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-scaffolder-node@0.1.3-next.0 + ## 0.1.0 ### Minor Changes diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json index 7edf247b25..ee10ecaf65 100644 --- a/plugins/scaffolder-backend-module-gitlab/package.json +++ b/plugins/scaffolder-backend-module-gitlab/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-gitlab", - "version": "0.1.0", + "version": "0.1.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-rails/CHANGELOG.md b/plugins/scaffolder-backend-module-rails/CHANGELOG.md index acad7920c3..cd815f8d1e 100644 --- a/plugins/scaffolder-backend-module-rails/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-rails/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-scaffolder-backend-module-rails +## 0.4.14-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-scaffolder-backend@1.13.2-next.1 + - @backstage/plugin-scaffolder-node@0.1.3-next.1 + - @backstage/config@1.0.7 + +## 0.4.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-scaffolder-backend@1.13.2-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-node@0.1.3-next.0 + ## 0.4.12 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json index a895e89657..035d698089 100644 --- a/plugins/scaffolder-backend-module-rails/package.json +++ b/plugins/scaffolder-backend-module-rails/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-rails", "description": "A module for the scaffolder backend that lets you template projects using Rails", - "version": "0.4.12", + "version": "0.4.14-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md index fc94fb8fa2..128526ac64 100644 --- a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-scaffolder-backend-module-sentry +## 0.1.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.3-next.1 + - @backstage/config@1.0.7 + +## 0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-scaffolder-node@0.1.3-next.0 + ## 0.1.4 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-sentry/package.json b/plugins/scaffolder-backend-module-sentry/package.json index 7a9e010920..fa851fd80e 100644 --- a/plugins/scaffolder-backend-module-sentry/package.json +++ b/plugins/scaffolder-backend-module-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-sentry", - "version": "0.1.4", + "version": "0.1.5-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md index 156ee8a1d2..b70c32aa52 100644 --- a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-scaffolder-backend-module-yeoman +## 0.2.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.3-next.1 + - @backstage/config@1.0.7 + +## 0.2.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-node@0.1.3-next.0 + ## 0.2.17 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-yeoman/package.json b/plugins/scaffolder-backend-module-yeoman/package.json index 8dab52ec59..77f50e3130 100644 --- a/plugins/scaffolder-backend-module-yeoman/package.json +++ b/plugins/scaffolder-backend-module-yeoman/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-yeoman", - "version": "0.2.17", + "version": "0.2.18-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md index 71e3f32d7b..0b5b88b148 100644 --- a/plugins/scaffolder-backend/CHANGELOG.md +++ b/plugins/scaffolder-backend/CHANGELOG.md @@ -1,5 +1,45 @@ # @backstage/plugin-scaffolder-backend +## 1.13.2-next.1 + +### Patch Changes + +- 6d954de4b06: Update typing for `RouterOptions::actions` and `ScaffolderActionsExtensionPoint::addActions` to allow any kind of action being assigned to it. +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-catalog-backend@1.9.1-next.1 + - @backstage/plugin-scaffolder-node@0.1.3-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/plugin-permission-node@0.7.8-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 1.13.2-next.0 + +### Patch Changes + +- d20c87966a4: Bump minimum required version of `vm2` to be 3.9.17 +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-permission-node@0.7.8-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/plugin-catalog-backend@1.9.1-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-scaffolder-common@1.2.7 + - @backstage/plugin-scaffolder-node@0.1.3-next.0 + ## 1.13.0 ### Minor Changes diff --git a/plugins/scaffolder-backend/alpha-api-report.md b/plugins/scaffolder-backend/alpha-api-report.md index 814540f028..1fe1d4a6ed 100644 --- a/plugins/scaffolder-backend/alpha-api-report.md +++ b/plugins/scaffolder-backend/alpha-api-report.md @@ -91,7 +91,7 @@ export const scaffolderPlugin: ( // @alpha export type ScaffolderPluginOptions = { - actions?: TemplateAction[]; + actions?: TemplateAction[]; taskWorkers?: number; taskBroker?: TaskBroker; additionalTemplateFilters?: Record; diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index 00a8553e30..a6fd41a29e 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -746,7 +746,7 @@ export type OctokitWithPullRequestPluginClient = Octokit & { // @public export interface RouterOptions { // (undocumented) - actions?: TemplateAction_2[]; + actions?: TemplateAction_2[]; // (undocumented) additionalTemplateFilters?: Record; // (undocumented) diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index 9653481052..5b9e28322d 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend", "description": "The Backstage backend plugin that helps you create new things", - "version": "1.13.0", + "version": "1.13.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -92,7 +92,7 @@ "p-queue": "^6.6.2", "prom-client": "^14.0.1", "uuid": "^8.2.0", - "vm2": "^3.9.11", + "vm2": "^3.9.17", "winston": "^3.2.1", "yaml": "^2.0.0", "zen-observable": "^0.10.0", diff --git a/plugins/scaffolder-backend/src/ScaffolderPlugin.ts b/plugins/scaffolder-backend/src/ScaffolderPlugin.ts index b7975e167e..90dcc868e2 100644 --- a/plugins/scaffolder-backend/src/ScaffolderPlugin.ts +++ b/plugins/scaffolder-backend/src/ScaffolderPlugin.ts @@ -40,7 +40,7 @@ import { createRouter } from './service/router'; * @alpha */ export type ScaffolderPluginOptions = { - actions?: TemplateAction[]; + actions?: TemplateAction[]; taskWorkers?: number; taskBroker?: TaskBroker; additionalTemplateFilters?: Record; @@ -50,7 +50,7 @@ export type ScaffolderPluginOptions = { class ScaffolderActionsExtensionPointImpl implements ScaffolderActionsExtensionPoint { - #actions = new Array>(); + #actions = new Array>(); addActions(...actions: TemplateAction[]): void { this.#actions.push(...actions); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.ts index 7659cff240..1f80f92334 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.ts @@ -324,7 +324,7 @@ function containsSkippedContent(localOutputPath: string): boolean { // if the path is empty means that there is a file skipped in the root // if the path starts with a separator it means that the root directory has been skipped // if the path includes // means that there is a subdirectory skipped - // All paths returned are considered with / seperator because of globby returning the linux seperator for all os'. + // All paths returned are considered with / separator because of globby returning the linux separator for all os'. return ( localOutputPath === '' || localOutputPath.startsWith('/') || diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index 0a45f2017d..deff4392d6 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -98,7 +98,7 @@ export interface RouterOptions { database: PluginDatabaseManager; catalogClient: CatalogApi; scheduler?: PluginTaskScheduler; - actions?: TemplateAction[]; + actions?: TemplateAction[]; /** * @deprecated taskWorkers is deprecated in favor of concurrentTasksLimit option with a single TaskWorker * @defaultValue 1 diff --git a/plugins/scaffolder-node/CHANGELOG.md b/plugins/scaffolder-node/CHANGELOG.md index bb5d75b5ac..796c157f7a 100644 --- a/plugins/scaffolder-node/CHANGELOG.md +++ b/plugins/scaffolder-node/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-scaffolder-node +## 0.1.3-next.1 + +### Patch Changes + +- 6d954de4b06: Update typing for `RouterOptions::actions` and `ScaffolderActionsExtensionPoint::addActions` to allow any kind of action being assigned to it. +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.1 + +## 0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-common@1.2.7 + ## 0.1.2 ### Patch Changes diff --git a/plugins/scaffolder-node/api-report.md b/plugins/scaffolder-node/api-report.md index bea689dc70..46aba960d8 100644 --- a/plugins/scaffolder-node/api-report.md +++ b/plugins/scaffolder-node/api-report.md @@ -70,7 +70,7 @@ export const createTemplateAction: < // @alpha export interface ScaffolderActionsExtensionPoint { // (undocumented) - addActions(...actions: TemplateAction[]): void; + addActions(...actions: TemplateAction[]): void; } // @alpha diff --git a/plugins/scaffolder-node/package.json b/plugins/scaffolder-node/package.json index 7328351583..f1e49a52e1 100644 --- a/plugins/scaffolder-node/package.json +++ b/plugins/scaffolder-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-node", "description": "The plugin-scaffolder-node module for @backstage/plugin-scaffolder-backend", - "version": "0.1.2", + "version": "0.1.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-node/src/extensions.ts b/plugins/scaffolder-node/src/extensions.ts index a706101043..1ae51ce2e6 100644 --- a/plugins/scaffolder-node/src/extensions.ts +++ b/plugins/scaffolder-node/src/extensions.ts @@ -23,7 +23,7 @@ import { TemplateAction } from './actions'; * @alpha */ export interface ScaffolderActionsExtensionPoint { - addActions(...actions: TemplateAction[]): void; + addActions(...actions: TemplateAction[]): void; } /** diff --git a/plugins/scaffolder-react/CHANGELOG.md b/plugins/scaffolder-react/CHANGELOG.md index e7f984a5b9..402c552c79 100644 --- a/plugins/scaffolder-react/CHANGELOG.md +++ b/plugins/scaffolder-react/CHANGELOG.md @@ -1,5 +1,36 @@ # @backstage/plugin-scaffolder-react +## 1.3.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 1.3.1-next.0 + +### Patch Changes + +- ad1a1429de4: Improvements to the `scaffolder/next` buttons UX: + + - Added padding around the "Create" button in the `Stepper` component + - Added a button bar that includes the "Cancel" and "Start Over" buttons to the `OngoingTask` component. The state of these buttons match their existing counter parts in the Context Menu + - Added a "Show Button Bar"/"Hide Button Bar" item to the `ContextMenu` component + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-scaffolder-common@1.2.7 + ## 1.3.0 ### Minor Changes diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json index 3d87399797..571b356a2d 100644 --- a/plugins/scaffolder-react/package.json +++ b/plugins/scaffolder-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-react", "description": "A frontend library that helps other Backstage plugins interact with the Scaffolder", - "version": "1.3.0", + "version": "1.3.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-react/src/next/components/Stepper/Stepper.tsx b/plugins/scaffolder-react/src/next/components/Stepper/Stepper.tsx index 946cc583a3..e15953bf1f 100644 --- a/plugins/scaffolder-react/src/next/components/Stepper/Stepper.tsx +++ b/plugins/scaffolder-react/src/next/components/Stepper/Stepper.tsx @@ -49,11 +49,11 @@ const useStyles = makeStyles(theme => ({ backButton: { marginRight: theme.spacing(1), }, - footer: { display: 'flex', flexDirection: 'row', justifyContent: 'right', + marginTop: theme.spacing(2), }, formWrapper: { padding: theme.spacing(2), @@ -216,6 +216,7 @@ export const Stepper = (stepperProps: StepperProps) => { + +
    + + + + ) : null} + {logsVisible ? ( diff --git a/plugins/search-backend-module-catalog/CHANGELOG.md b/plugins/search-backend-module-catalog/CHANGELOG.md index 72cbf037c0..bf64047538 100644 --- a/plugins/search-backend-module-catalog/CHANGELOG.md +++ b/plugins/search-backend-module-catalog/CHANGELOG.md @@ -1,5 +1,32 @@ # @backstage/plugin-search-backend-module-catalog +## 0.1.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-search-backend-node@1.2.1-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-search-backend-node@1.2.1-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + ## 0.1.0 ### Minor Changes diff --git a/plugins/search-backend-module-catalog/package.json b/plugins/search-backend-module-catalog/package.json index 4ca9b03dd8..15421990e2 100644 --- a/plugins/search-backend-module-catalog/package.json +++ b/plugins/search-backend-module-catalog/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-catalog", "description": "A module for the search backend that exports catalog modules", - "version": "0.1.0", + "version": "0.1.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-elasticsearch/CHANGELOG.md b/plugins/search-backend-module-elasticsearch/CHANGELOG.md index 08d1514915..f5c5d9acd5 100644 --- a/plugins/search-backend-module-elasticsearch/CHANGELOG.md +++ b/plugins/search-backend-module-elasticsearch/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-search-backend-module-elasticsearch +## 1.2.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-search-backend-node@1.2.1-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 1.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-search-backend-node@1.2.1-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.3 + ## 1.2.0 ### Minor Changes diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json index 3a0fd215f4..73c3a5d7dc 100644 --- a/plugins/search-backend-module-elasticsearch/package.json +++ b/plugins/search-backend-module-elasticsearch/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-elasticsearch", "description": "A module for the search backend that implements search using ElasticSearch", - "version": "1.2.0", + "version": "1.2.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-explore/CHANGELOG.md b/plugins/search-backend-module-explore/CHANGELOG.md index 41e335736a..df693832db 100644 --- a/plugins/search-backend-module-explore/CHANGELOG.md +++ b/plugins/search-backend-module-explore/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-search-backend-module-explore +## 0.1.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-search-backend-node@1.2.1-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-search-backend-node@1.2.1-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.3 + ## 0.1.0 ### Minor Changes diff --git a/plugins/search-backend-module-explore/package.json b/plugins/search-backend-module-explore/package.json index 96e9b6fcf6..00f63ef41e 100644 --- a/plugins/search-backend-module-explore/package.json +++ b/plugins/search-backend-module-explore/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-explore", "description": "A module for the search backend that exports explore modules", - "version": "0.1.0", + "version": "0.1.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-pg/CHANGELOG.md b/plugins/search-backend-module-pg/CHANGELOG.md index 173b9d3894..9b9ddfa0ff 100644 --- a/plugins/search-backend-module-pg/CHANGELOG.md +++ b/plugins/search-backend-module-pg/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-search-backend-module-pg +## 0.5.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-search-backend-node@1.2.1-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 0.5.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-search-backend-node@1.2.1-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.3 + ## 0.5.5 ### Patch Changes diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json index d96757a28d..5d63d913e0 100644 --- a/plugins/search-backend-module-pg/package.json +++ b/plugins/search-backend-module-pg/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-pg", "description": "A module for the search backend that implements search using PostgreSQL", - "version": "0.5.5", + "version": "0.5.6-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-techdocs/CHANGELOG.md b/plugins/search-backend-module-techdocs/CHANGELOG.md index 623cbc6df1..83eed95d8e 100644 --- a/plugins/search-backend-module-techdocs/CHANGELOG.md +++ b/plugins/search-backend-module-techdocs/CHANGELOG.md @@ -1,5 +1,34 @@ # @backstage/plugin-search-backend-module-techdocs +## 0.1.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-search-backend-node@1.2.1-next.1 + - @backstage/plugin-techdocs-node@1.7.1-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-search-backend-node@1.2.1-next.0 + - @backstage/plugin-techdocs-node@1.7.1-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + ## 0.1.0 ### Minor Changes diff --git a/plugins/search-backend-module-techdocs/package.json b/plugins/search-backend-module-techdocs/package.json index 0291c271ff..f7d7151aeb 100644 --- a/plugins/search-backend-module-techdocs/package.json +++ b/plugins/search-backend-module-techdocs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-techdocs", "description": "A module for the search backend that exports techdocs modules", - "version": "0.1.0", + "version": "0.1.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-node/CHANGELOG.md b/plugins/search-backend-node/CHANGELOG.md index 02759a245b..00a828f132 100644 --- a/plugins/search-backend-node/CHANGELOG.md +++ b/plugins/search-backend-node/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-search-backend-node +## 1.2.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 1.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + ## 1.2.0 ### Minor Changes diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json index b0a228ceb9..9d7b0b0210 100644 --- a/plugins/search-backend-node/package.json +++ b/plugins/search-backend-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-node", "description": "A library for Backstage backend plugins that want to interact with the search backend plugin", - "version": "1.2.0", + "version": "1.2.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend/CHANGELOG.md b/plugins/search-backend/CHANGELOG.md index 6d5b03d71f..321fdefbc1 100644 --- a/plugins/search-backend/CHANGELOG.md +++ b/plugins/search-backend/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-search-backend +## 1.3.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/plugin-permission-node@0.7.8-next.1 + - @backstage/plugin-search-backend-node@1.2.1-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 1.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-permission-node@0.7.8-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/plugin-search-backend-node@1.2.1-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + ## 1.3.0 ### Minor Changes diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json index d2b4bf5ff7..5fa59077db 100644 --- a/plugins/search-backend/package.json +++ b/plugins/search-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend", "description": "The Backstage backend plugin that provides your backstage app with search", - "version": "1.3.0", + "version": "1.3.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-react/CHANGELOG.md b/plugins/search-react/CHANGELOG.md index 21bc9f5101..569e66eaba 100644 --- a/plugins/search-react/CHANGELOG.md +++ b/plugins/search-react/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-search-react +## 1.6.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + +## 1.6.0-next.0 + +### Minor Changes + +- 750e45539ad: Add close button & improve search input. + + MUI's Paper wrapping the SearchBar in the SearchPage was removed, we recommend users update their apps accordingly. + + SearchBarBase's TextField's label support added & aria-label uses label string if present, tests relying on the default placeholder value should still work unless custom placeholder was given. + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/theme@0.2.19 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-search-common@1.2.3 + ## 1.5.2 ### Patch Changes diff --git a/plugins/search-react/api-report.md b/plugins/search-react/api-report.md index 30b5d4b581..e39e91de72 100644 --- a/plugins/search-react/api-report.md +++ b/plugins/search-react/api-report.md @@ -10,7 +10,6 @@ import { AsyncState } from 'react-use/lib/useAsync'; import { AutocompleteProps } from '@material-ui/lab'; import { Extension } from '@backstage/core-plugin-api'; import { ForwardRefExoticComponent } from 'react'; -import { InputBaseProps } from '@material-ui/core'; import { JsonObject } from '@backstage/types'; import { JsonValue } from '@backstage/types'; import { LinkProps } from '@backstage/core-components'; @@ -26,6 +25,7 @@ import { SearchDocument } from '@backstage/plugin-search-common'; import { SearchQuery } from '@backstage/plugin-search-common'; import { SearchResult as SearchResult_2 } from '@backstage/plugin-search-common'; import { SearchResultSet } from '@backstage/plugin-search-common'; +import { TextFieldProps } from '@material-ui/core/TextField'; import { TypographyProps } from '@material-ui/core'; // @public (undocumented) @@ -136,12 +136,13 @@ export const SearchBar: ForwardRefExoticComponent; export const SearchBarBase: ForwardRefExoticComponent; // @public -export type SearchBarBaseProps = Omit & { +export type SearchBarBaseProps = Omit & { debounceTime?: number; clearButton?: boolean; onClear?: () => void; onSubmit?: () => void; onChange: (value: string) => void; + endAdornment?: React_2.ReactNode; }; // @public diff --git a/plugins/search-react/package.json b/plugins/search-react/package.json index 558c838abd..2467c60b09 100644 --- a/plugins/search-react/package.json +++ b/plugins/search-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-react", - "version": "1.5.2", + "version": "1.6.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-react/src/components/SearchBar/SearchBar.stories.tsx b/plugins/search-react/src/components/SearchBar/SearchBar.stories.tsx index 88aed35f8d..559ae1776e 100644 --- a/plugins/search-react/src/components/SearchBar/SearchBar.stories.tsx +++ b/plugins/search-react/src/components/SearchBar/SearchBar.stories.tsx @@ -44,7 +44,7 @@ export default { export const Default = () => { return ( - + ); @@ -52,15 +52,23 @@ export const Default = () => { export const CustomPlaceholder = () => { return ( - + ); }; +export const CustomLabel = () => { + return ( + + + + ); +}; + export const Focused = () => { return ( - + {/* decision up to adopter, read https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/master/docs/rules/no-autofocus.md#no-autofocus */} {/* eslint-disable-next-line jsx-a11y/no-autofocus */} @@ -70,7 +78,7 @@ export const Focused = () => { export const WithoutClearButton = () => { return ( - + ); @@ -80,7 +88,7 @@ const useStyles = makeStyles({ search: { display: 'flex', justifyContent: 'space-between', - padding: '8px 0', + padding: '8px 16px', borderRadius: '50px', margin: 'auto', }, diff --git a/plugins/search-react/src/components/SearchBar/SearchBar.test.tsx b/plugins/search-react/src/components/SearchBar/SearchBar.test.tsx index fba50f74d8..e4859861d9 100644 --- a/plugins/search-react/src/components/SearchBar/SearchBar.test.tsx +++ b/plugins/search-react/src/components/SearchBar/SearchBar.test.tsx @@ -70,9 +70,28 @@ describe('SearchBar', () => { ); await waitFor(() => { - expect( - screen.getByPlaceholderText('Search in Mock title'), - ).toBeInTheDocument(); + expect(screen.getByLabelText('Search')).toBeInTheDocument(); + }); + }); + + it('Renders with custom label', async () => { + const label = 'label'; + + const result = await renderWithEffects( + + + + + , + ); + + await waitFor(() => { + expect(result.getByLabelText(label)).toBeInTheDocument(); }); }); diff --git a/plugins/search-react/src/components/SearchBar/SearchBar.tsx b/plugins/search-react/src/components/SearchBar/SearchBar.tsx index 9c312718bf..913f515aaa 100644 --- a/plugins/search-react/src/components/SearchBar/SearchBar.tsx +++ b/plugins/search-react/src/components/SearchBar/SearchBar.tsx @@ -13,39 +13,32 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -import React, { - ChangeEvent, - KeyboardEvent, - useState, - useEffect, - useCallback, - forwardRef, - ComponentType, - ForwardRefExoticComponent, -} from 'react'; -import useDebounce from 'react-use/lib/useDebounce'; - -import { - InputBase, - InputBaseProps, - InputAdornment, - IconButton, -} from '@material-ui/core'; -import SearchIcon from '@material-ui/icons/Search'; -import ClearButton from '@material-ui/icons/Clear'; - import { AnalyticsContext, configApiRef, useApi, } from '@backstage/core-plugin-api'; +import { IconButton, InputAdornment, TextField } from '@material-ui/core'; +import Button from '@material-ui/core/Button'; +import { TextFieldProps } from '@material-ui/core/TextField'; +import SearchIcon from '@material-ui/icons/Search'; +import React, { + ChangeEvent, + ComponentType, + forwardRef, + ForwardRefExoticComponent, + KeyboardEvent, + useCallback, + useEffect, + useState, +} from 'react'; +import useDebounce from 'react-use/lib/useDebounce'; import { SearchContextProvider, useSearch } from '../../context'; import { TrackSearch } from '../SearchTracker'; function withContext(Component: ComponentType) { - return forwardRef((props, ref) => ( + return forwardRef((props, ref) => ( @@ -57,12 +50,13 @@ function withContext(Component: ComponentType) { * * @public */ -export type SearchBarBaseProps = Omit & { +export type SearchBarBaseProps = Omit & { debounceTime?: number; clearButton?: boolean; onClear?: () => void; onSubmit?: () => void; onChange: (value: string) => void; + endAdornment?: React.ReactNode; }; /** @@ -84,9 +78,10 @@ export const SearchBarBase: ForwardRefExoticComponent = clearButton = true, fullWidth = true, value: defaultValue, - placeholder: defaultPlaceholder, + label, + placeholder, inputProps: defaultInputProps = {}, - endAdornment: defaultEndAdornment, + endAdornment, ...rest } = props; @@ -109,7 +104,7 @@ export const SearchBarBase: ForwardRefExoticComponent = ); const handleKeyDown = useCallback( - (e: KeyboardEvent) => { + (e: KeyboardEvent) => { if (onKeyDown) onKeyDown(e); if (onSubmit && e.key === 'Enter') { onSubmit(); @@ -125,8 +120,10 @@ export const SearchBarBase: ForwardRefExoticComponent = } }, [onChange, onClear]); - const placeholder = - defaultPlaceholder ?? + const ariaLabel: string | undefined = label ? undefined : 'Search'; + + const inputPlaceholder = + placeholder ?? `Search in ${configApi.getOptionalString('app.title') || 'Backstage'}`; const startAdornment = ( @@ -137,24 +134,45 @@ export const SearchBarBase: ForwardRefExoticComponent = ); - const endAdornment = ( + const clearButtonEndAdornment = ( - - - + ); return ( - { it('Fetch is called with expected URL (including stringified Q params)', async () => { await client.query(query); - expect(getBaseUrl).toHaveBeenLastCalledWith('search/query'); - expect(fetch).toHaveBeenLastCalledWith(`${baseUrl}?term=`, { + expect(getBaseUrl).toHaveBeenLastCalledWith('search'); + expect(fetch).toHaveBeenLastCalledWith(`${baseUrl}/query?term=`, { headers: {}, }); }); @@ -63,8 +63,8 @@ describe('apis', () => { identityApi: createIdentityApiMock(withToken), }); await authedClient.query(query); - expect(getBaseUrl).toHaveBeenLastCalledWith('search/query'); - expect(fetch).toHaveBeenLastCalledWith(`${baseUrl}?term=`, { + expect(getBaseUrl).toHaveBeenLastCalledWith('search'); + expect(fetch).toHaveBeenLastCalledWith(`${baseUrl}/query?term=`, { headers: { Authorization: `Bearer ${token}` }, }); }); diff --git a/plugins/search/src/apis.ts b/plugins/search/src/apis.ts index 208ad98b0a..eb5f47a65c 100644 --- a/plugins/search/src/apis.ts +++ b/plugins/search/src/apis.ts @@ -37,8 +37,8 @@ export class SearchClient implements SearchApi { const { token } = await this.identityApi.getCredentials(); const queryString = qs.stringify(query); const url = `${await this.discoveryApi.getBaseUrl( - 'search/query', - )}?${queryString}`; + 'search', + )}/query?${queryString}`; const response = await fetch(url, { headers: token ? { Authorization: `Bearer ${token}` } : {}, }); diff --git a/plugins/search/src/components/SearchModal/SearchModal.tsx b/plugins/search/src/components/SearchModal/SearchModal.tsx index 3513eec65d..cfeabf3358 100644 --- a/plugins/search/src/components/SearchModal/SearchModal.tsx +++ b/plugins/search/src/components/SearchModal/SearchModal.tsx @@ -13,9 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -import React, { KeyboardEvent, useRef, useEffect, useCallback } from 'react'; -import { useNavigate } from 'react-router-dom'; +import { Link, useContent } from '@backstage/core-components'; +import { useRouteRef } from '@backstage/core-plugin-api'; +import { + SearchBar, + SearchContextProvider, + SearchResult, + SearchResultPager, + useSearch, +} from '@backstage/plugin-search-react'; import { Dialog, DialogActions, @@ -23,21 +29,17 @@ import { DialogTitle, Divider, Grid, - Paper, useTheme, } from '@material-ui/core'; -import Typography from '@material-ui/core/Typography'; -import LaunchIcon from '@material-ui/icons/Launch'; +import Box from '@material-ui/core/Box'; +import Button from '@material-ui/core/Button'; +import IconButton from '@material-ui/core/IconButton'; import { makeStyles } from '@material-ui/core/styles'; -import { - SearchContextProvider, - SearchBar, - SearchResult, - SearchResultPager, - useSearch, -} from '@backstage/plugin-search-react'; -import { useRouteRef } from '@backstage/core-plugin-api'; -import { Link, useContent } from '@backstage/core-components'; +import ArrowForwardIcon from '@material-ui/icons/ArrowForward'; +import CloseIcon from '@material-ui/icons/Close'; +import React, { KeyboardEvent, useCallback, useEffect, useRef } from 'react'; +import { useNavigate } from 'react-router-dom'; + import { rootRouteRef } from '../../plugin'; /** @@ -78,10 +80,14 @@ export interface SearchModalProps { } const useStyles = makeStyles(theme => ({ - container: { - borderRadius: 30, - display: 'flex', - height: '2.4em', + dialogTitle: { + gap: theme.spacing(1), + display: 'grid', + alignItems: 'center', + gridTemplateColumns: '1fr auto', + '&> button': { + marginTop: theme.spacing(1), + }, }, input: { flex: 1, @@ -92,7 +98,7 @@ const useStyles = makeStyles(theme => ({ viewResultsLink: { verticalAlign: '0.5em' }, })); -export const Modal = () => { +export const Modal = ({ toggleModal }: SearchModalChildrenProps) => { const classes = useStyles(); const navigate = useNavigate(); const { transitions } = useTheme(); @@ -111,7 +117,7 @@ export const Modal = () => { }, [focusContent, transitions]); const handleSearchBarKeyDown = useCallback( - (e: KeyboardEvent) => { + (e: KeyboardEvent) => { if (e.key === 'Enter') { navigate(searchPagePath); handleSearchResultClick(); @@ -123,13 +129,17 @@ export const Modal = () => { return ( <> - + - + + + + + { alignItems="center" > - - - View Full Results - - - + @@ -186,7 +199,9 @@ export const SearchModal = (props: SearchModalProps) => { > {open && ( - {(children && children({ toggleModal })) ?? } + {(children && children({ toggleModal })) ?? ( + + )} )} diff --git a/plugins/sentry/CHANGELOG.md b/plugins/sentry/CHANGELOG.md index a88671030d..8fd1432c3a 100644 --- a/plugins/sentry/CHANGELOG.md +++ b/plugins/sentry/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-sentry +## 0.5.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.5.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + ## 0.5.2 ### Patch Changes diff --git a/plugins/sentry/package.json b/plugins/sentry/package.json index b87290ef26..e83531f95a 100644 --- a/plugins/sentry/package.json +++ b/plugins/sentry/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sentry", "description": "A Backstage plugin that integrates towards Sentry", - "version": "0.5.2", + "version": "0.5.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/shortcuts/CHANGELOG.md b/plugins/shortcuts/CHANGELOG.md index ca7ef67ed6..bbe2b74584 100644 --- a/plugins/shortcuts/CHANGELOG.md +++ b/plugins/shortcuts/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-shortcuts +## 0.3.10-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + +## 0.3.10-next.0 + +### Patch Changes + +- 8a7174e297c: Marked `LocalStoredShortcuts` as deprecated, replacing it with `DefaultShortcutsApi` whose naming more clearly suggests that the shortcuts aren't necessarily stored locally (it depends on the storage implementation). +- Updated dependencies + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/theme@0.2.19 + - @backstage/types@1.0.2 + ## 0.3.9 ### Patch Changes diff --git a/plugins/shortcuts/package.json b/plugins/shortcuts/package.json index 91215cf38e..4695c858c3 100644 --- a/plugins/shortcuts/package.json +++ b/plugins/shortcuts/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-shortcuts", "description": "A Backstage plugin that provides a shortcuts feature to the sidebar", - "version": "0.3.9", + "version": "0.3.10-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube-backend/CHANGELOG.md b/plugins/sonarqube-backend/CHANGELOG.md index 6861897557..cf90264ece 100644 --- a/plugins/sonarqube-backend/CHANGELOG.md +++ b/plugins/sonarqube-backend/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-sonarqube-backend +## 0.1.10-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + +## 0.1.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.1.9 ### Patch Changes diff --git a/plugins/sonarqube-backend/package.json b/plugins/sonarqube-backend/package.json index e96c85d25b..9b452471de 100644 --- a/plugins/sonarqube-backend/package.json +++ b/plugins/sonarqube-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-sonarqube-backend", - "version": "0.1.9", + "version": "0.1.10-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube/CHANGELOG.md b/plugins/sonarqube/CHANGELOG.md index c6a09e89f9..3a599bfd5f 100644 --- a/plugins/sonarqube/CHANGELOG.md +++ b/plugins/sonarqube/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-sonarqube +## 0.6.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.6.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + - @backstage/plugin-sonarqube-react@0.1.5 + ## 0.6.6 ### Patch Changes diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json index 553ef14b69..566a5cf757 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sonarqube", "description": "", - "version": "0.6.6", + "version": "0.6.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/splunk-on-call/CHANGELOG.md b/plugins/splunk-on-call/CHANGELOG.md index 71fb9e4b1a..1fe8e00511 100644 --- a/plugins/splunk-on-call/CHANGELOG.md +++ b/plugins/splunk-on-call/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-splunk-on-call +## 0.4.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.4.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/theme@0.2.19 + ## 0.4.6 ### Patch Changes diff --git a/plugins/splunk-on-call/package.json b/plugins/splunk-on-call/package.json index fc4f49f13c..97204eed93 100644 --- a/plugins/splunk-on-call/package.json +++ b/plugins/splunk-on-call/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-splunk-on-call", "description": "A Backstage plugin that integrates towards Splunk On-Call", - "version": "0.4.6", + "version": "0.4.7-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stack-overflow-backend/CHANGELOG.md b/plugins/stack-overflow-backend/CHANGELOG.md index 4c2868e139..03006fd490 100644 --- a/plugins/stack-overflow-backend/CHANGELOG.md +++ b/plugins/stack-overflow-backend/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-stack-overflow-backend +## 0.2.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.3 + ## 0.2.0 ### Minor Changes diff --git a/plugins/stack-overflow-backend/package.json b/plugins/stack-overflow-backend/package.json index 2a72bdb688..fd08b70f52 100644 --- a/plugins/stack-overflow-backend/package.json +++ b/plugins/stack-overflow-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-stack-overflow-backend", - "version": "0.2.0", + "version": "0.2.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stack-overflow/CHANGELOG.md b/plugins/stack-overflow/CHANGELOG.md index 9ad495f2fa..4e70b57ce3 100644 --- a/plugins/stack-overflow/CHANGELOG.md +++ b/plugins/stack-overflow/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-stack-overflow +## 0.1.15-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-home@0.5.2-next.1 + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-search-react@1.6.0-next.1 + - @backstage/config@1.0.7 + +## 0.1.14-next.0 + +### Patch Changes + +- c1ff65f315a: StackOverflowSearchResultListItem can now accept an empty result prop so that it can be rendered in the suggested SearchResultListItem pattern. +- Updated dependencies + - @backstage/plugin-search-react@1.6.0-next.0 + - @backstage/plugin-home@0.5.1-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + - @backstage/theme@0.2.19 + - @backstage/plugin-search-common@1.2.3 + ## 0.1.13 ### Patch Changes diff --git a/plugins/stack-overflow/package.json b/plugins/stack-overflow/package.json index 11d24a4cf3..d30311eb61 100644 --- a/plugins/stack-overflow/package.json +++ b/plugins/stack-overflow/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-stack-overflow", - "version": "0.1.13", + "version": "0.1.15-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stackstorm/CHANGELOG.md b/plugins/stackstorm/CHANGELOG.md index 01fe7f1f40..bf8fedd4c3 100644 --- a/plugins/stackstorm/CHANGELOG.md +++ b/plugins/stackstorm/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-stackstorm +## 0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.1.1 ### Patch Changes diff --git a/plugins/stackstorm/package.json b/plugins/stackstorm/package.json index e809bbbe39..c9a9e7fc16 100644 --- a/plugins/stackstorm/package.json +++ b/plugins/stackstorm/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-stackstorm", "description": "A Backstage plugin that integrates towards StackStorm", - "version": "0.1.1", + "version": "0.1.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md index 269f8485b5..864c0cb830 100644 --- a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md +++ b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-tech-insights-backend-module-jsonfc +## 0.1.29-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-tech-insights-node@0.4.3-next.1 + - @backstage/config@1.0.7 + +## 0.1.29-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-tech-insights-node@0.4.3-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-tech-insights-common@0.2.10 + ## 0.1.28 ### Patch Changes diff --git a/plugins/tech-insights-backend-module-jsonfc/package.json b/plugins/tech-insights-backend-module-jsonfc/package.json index 9b018eaf11..489f36e2f8 100644 --- a/plugins/tech-insights-backend-module-jsonfc/package.json +++ b/plugins/tech-insights-backend-module-jsonfc/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-backend-module-jsonfc", - "version": "0.1.28", + "version": "0.1.29-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-backend/CHANGELOG.md b/plugins/tech-insights-backend/CHANGELOG.md index d0dec7017a..1c3b902c3f 100644 --- a/plugins/tech-insights-backend/CHANGELOG.md +++ b/plugins/tech-insights-backend/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-tech-insights-backend +## 0.5.11-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/plugin-tech-insights-node@0.4.3-next.1 + - @backstage/config@1.0.7 + +## 0.5.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/plugin-tech-insights-node@0.4.3-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + ## 0.5.10 ### Patch Changes diff --git a/plugins/tech-insights-backend/package.json b/plugins/tech-insights-backend/package.json index b881c8ad1c..09bb9c8d6f 100644 --- a/plugins/tech-insights-backend/package.json +++ b/plugins/tech-insights-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-backend", - "version": "0.5.10", + "version": "0.5.11-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-backend/src/service/fact/FactRetrieverEngine.ts b/plugins/tech-insights-backend/src/service/fact/FactRetrieverEngine.ts index e223604829..846871db88 100644 --- a/plugins/tech-insights-backend/src/service/fact/FactRetrieverEngine.ts +++ b/plugins/tech-insights-backend/src/service/fact/FactRetrieverEngine.ts @@ -48,7 +48,7 @@ export interface FactRetrieverEngine { * Schedules fact retriever run cycles based on configuration provided in the registration. * * Default implementation uses backend-tasks to handle scheduling. This function can be called multiple - * times, where initial calls schedule the tasks and subsequents invocations update the schedules. + * times, where initial calls schedule the tasks and subsequent invocations update the schedules. */ schedule(): Promise; diff --git a/plugins/tech-insights-node/CHANGELOG.md b/plugins/tech-insights-node/CHANGELOG.md index d50d5c479d..e5eec67a40 100644 --- a/plugins/tech-insights-node/CHANGELOG.md +++ b/plugins/tech-insights-node/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-tech-insights-node +## 0.4.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 0.4.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + ## 0.4.2 ### Patch Changes diff --git a/plugins/tech-insights-node/package.json b/plugins/tech-insights-node/package.json index 63f840dd10..bc5c0816f7 100644 --- a/plugins/tech-insights-node/package.json +++ b/plugins/tech-insights-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-node", - "version": "0.4.2", + "version": "0.4.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights/CHANGELOG.md b/plugins/tech-insights/CHANGELOG.md index f08610b880..a59782e2cc 100644 --- a/plugins/tech-insights/CHANGELOG.md +++ b/plugins/tech-insights/CHANGELOG.md @@ -1,5 +1,35 @@ # @backstage/plugin-tech-insights +## 0.3.10-next.1 + +### Patch Changes + +- 22963209d23: Added the possibility to customize the check description in the scorecard component. + + - The `CheckResultRenderer` type now exposes an optional `description` method that allows to overwrite the description with a different string or a React component for a provided check result. + + Until now only the `BooleanCheck` element could be overridden, but from now on it's also possible to override the description for a check. + As an example, the description could change depending on the check result. Refer to the [README](https://github.com/backstage/backstage/blob/master/plugins/tech-insights/README.md#adding-custom-rendering-components) file for more details + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.3.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + ## 0.3.9 ### Patch Changes diff --git a/plugins/tech-insights/README.md b/plugins/tech-insights/README.md index 98d4777ba2..3185d40441 100644 --- a/plugins/tech-insights/README.md +++ b/plugins/tech-insights/README.md @@ -127,3 +127,26 @@ export const myCustomBooleanRenderer: CheckResultRenderer = { ), }; ``` + +It's also possible to customize the description. Both strings and React components are accepted. As an example, you would like +to display another information if the check has failed. In such cases, you could do something like the following: + +```tsx +// packages/app/src/components/myCustomBooleanRenderer.tsx + +export const myCustomBooleanRenderer: CheckResultRenderer = { + type: 'boolean', + component: (checkResult: CheckResult) => ( + + ), + description: (checkResult: CheckResult) => ( + <> + { + checkResult.result + ? checkResult.check.description // In case of success, return the same description + : `The check has failed! ${checkResult.check.description}` // Add a prefix text if the check failed + } + + ), +}; +``` diff --git a/plugins/tech-insights/api-report.md b/plugins/tech-insights/api-report.md index 47aa8bbbea..f535a69120 100644 --- a/plugins/tech-insights/api-report.md +++ b/plugins/tech-insights/api-report.md @@ -35,6 +35,7 @@ export type Check = { export type CheckResultRenderer = { type: string; component: (check: CheckResult) => React_2.ReactElement; + description?: (check: CheckResult) => string | React_2.ReactElement; }; // @public (undocumented) diff --git a/plugins/tech-insights/package.json b/plugins/tech-insights/package.json index 02c44390be..e8ead43ad6 100644 --- a/plugins/tech-insights/package.json +++ b/plugins/tech-insights/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights", - "version": "0.3.9", + "version": "0.3.10-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights/src/components/CheckResultRenderer.tsx b/plugins/tech-insights/src/components/CheckResultRenderer.tsx index 452715ddeb..7db3c72c02 100644 --- a/plugins/tech-insights/src/components/CheckResultRenderer.tsx +++ b/plugins/tech-insights/src/components/CheckResultRenderer.tsx @@ -26,6 +26,7 @@ import { BooleanCheck } from './BooleanCheck'; export type CheckResultRenderer = { type: string; component: (check: CheckResult) => React.ReactElement; + description?: (check: CheckResult) => string | React.ReactElement; }; /** diff --git a/plugins/tech-insights/src/components/ScorecardsList/ScorecardsList.tsx b/plugins/tech-insights/src/components/ScorecardsList/ScorecardsList.tsx index 03dfa06abf..9973abef71 100644 --- a/plugins/tech-insights/src/components/ScorecardsList/ScorecardsList.tsx +++ b/plugins/tech-insights/src/components/ScorecardsList/ScorecardsList.tsx @@ -38,21 +38,29 @@ export const ScorecardsList = (props: { checkResults: CheckResult[] }) => { return ( - {checkResults.map((result, index) => ( - - - {checkResultRenderers - .find(({ type }) => type === result.check.type) - ?.component(result) ?? ( - Unknown type. - )} - - ))} + {checkResults.map((result, index) => { + const description = checkResultRenderers.find( + renderer => renderer.type === result.check.type, + )?.description; + + return ( + + + {checkResultRenderers + .find(({ type }) => type === result.check.type) + ?.component(result) ?? ( + Unknown type. + )} + + ); + })} ); }; diff --git a/plugins/tech-radar/CHANGELOG.md b/plugins/tech-radar/CHANGELOG.md index a5318c231a..c28aa05ea9 100644 --- a/plugins/tech-radar/CHANGELOG.md +++ b/plugins/tech-radar/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-tech-radar +## 0.6.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + +## 0.6.4-next.0 + +### Patch Changes + +- Added the ability to display a timeline to each entry in the details box +- Updated dependencies + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/theme@0.2.19 + ## 0.6.3 ### Patch Changes diff --git a/plugins/tech-radar/README.md b/plugins/tech-radar/README.md index 5c99541c2a..1c64e4fc9e 100644 --- a/plugins/tech-radar/README.md +++ b/plugins/tech-radar/README.md @@ -67,6 +67,127 @@ export interface TechRadarPageProps { When defining the radar entries you can see the available properties on the file [api](./src/api.ts) +## Tech radar data model + +| Name | Type | Description | Required? | +| ----------- | ----------------------- | -------------------------------------------------------------------- | --------- | +| `title` | string | The title of the radar | Yes | +| `quadrants` | [quadrant[]](#quadrant) | The 4 quadrants of the radar, clockwise starting at the bottom right | Yes | +| `rings` | [ring[]](#ring) | The radar rings, starting from the inside | Yes | +| `entries` | [entry[]](#entry) | The radar entries | Yes | + +### quadrant + +| Name | Type | Description | Required? | +| ------ | ------ | ------------------------ | --------- | +| `id` | string | The id of the quadrant | Yes | +| `name` | string | The name of the quadrant | Yes | + +### ring + +| Name | Type | Description | Required? | +| ------- | ------ | ------------------------------------------------- | --------- | +| `id` | string | The id of the ring | Yes | +| `name` | string | The name of the ring | Yes | +| `color` | string | The color of the ring and entries inside the ring | Yes | + +### entry + +| Name | Type | Description | Required? | +| ------------- | ----------------------- | ----------------------------------------------- | --------- | +| `id` | string | The unique id from the entry | Yes | +| `title` | string | The title that is shown in the radar | Yes | +| `description` | string | The full description of the entry | No | +| key | string | The entry key | Yes | +| `url` | string | The URL to the entry internal or external page | No | +| `quadrant` | string | The name of the quadrant connected to the entry | Yes | +| `timeline` | [timeline[]](#timeline) | Requires minimal one timeline entry | Yes | + +### timeline + +| Name | Type | Description | Required? | +| ------------- | ------ | ------------------------------------------------------------- | --------- | +| `moved` | number | Possible values are: -1 (moved out), 0 (stayed), 1 (moved in) | Yes | +| `ringId` | string | The ring id | Yes | +| `date` | string | Date in format (YYYY-MM-dd) | Yes | +| `description` | string | A long description | Yes | + +### Sample + +This is a sample on how the JSON file could look like. +The TS example can be found [here](src/sample.ts). + +```JSON +{ + "title": "Title of your Tech radar", + "quadrants": [ + { + "id": "1", + "name": "Bottom right" + }, + { + "id": "2", + "name": "Bottom left" + }, + { + "id": "3", + "name": "Top left" + }, + { + "id": "4", + "name": "Top right" + } + ], + "rings": [ + { + "id": "adopt", + "name": "ADOPT", + "color": "#93c47d" + }, + { + "id": "trial", + "name": "TRIAL", + "color": "#93d2c2" + }, + { + "id": "assess", + "name": "ASSESS", + "color": "#fbdb84" + }, + { + "id": "hold", + "name": "HOLD", + "color": "#efafa9" + } + ], + "entries": [ + { + "id": "typescript", + "title": "Typescript", + "description": "Long description for Typescript", + "key": "typescript", + "url": "#", + "quadrant": "1", + "timeline": [ + { + "moved": 0, + "ringId": "trial", + "date": "2022-02-06", + "description": "Long description for trial" + }, + { + "moved": 1, + "ringId": "adopt", + "date": "2022-02-08", + "description": "Long description for adopt" + } + ] + }, + ... + ] +} +``` + ## Frequently Asked Questions ### Who created the Tech Radar? diff --git a/plugins/tech-radar/package.json b/plugins/tech-radar/package.json index 44af33f9f0..4621f89c87 100644 --- a/plugins/tech-radar/package.json +++ b/plugins/tech-radar/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-tech-radar", "description": "A Backstage plugin that lets you display a Tech Radar for your organization", - "version": "0.6.3", + "version": "0.6.4-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-radar/src/components/RadarDescription/RadarDescription.test.tsx b/plugins/tech-radar/src/components/RadarDescription/RadarDescription.test.tsx index 51fed918ec..dd6cd66f87 100644 --- a/plugins/tech-radar/src/components/RadarDescription/RadarDescription.test.tsx +++ b/plugins/tech-radar/src/components/RadarDescription/RadarDescription.test.tsx @@ -19,11 +19,22 @@ import { screen } from '@testing-library/react'; import { Props, RadarDescription } from './RadarDescription'; import { renderInTestApp } from '@backstage/test-utils'; +import { Ring } from '../../utils/types'; + +const ring: Ring = { + id: 'example-ring', + name: 'example-ring', + color: 'red', +}; const minProps: Props = { open: true, title: 'example-title', description: 'example-description', + timeline: [ + { date: new Date(), ring: ring, description: 'test timeline 1' }, + { date: new Date(), ring: ring, description: 'test timeline 2' }, + ], links: [{ url: 'https://example.com/docs', title: 'example-link' }], onClose: () => {}, }; diff --git a/plugins/tech-radar/src/components/RadarDescription/RadarDescription.tsx b/plugins/tech-radar/src/components/RadarDescription/RadarDescription.tsx index 92b15d985a..df39c2ce55 100644 --- a/plugins/tech-radar/src/components/RadarDescription/RadarDescription.tsx +++ b/plugins/tech-radar/src/components/RadarDescription/RadarDescription.tsx @@ -21,12 +21,15 @@ import { Button, DialogActions, DialogContent } from '@material-ui/core'; import LinkIcon from '@material-ui/icons/Link'; import { Link, MarkdownContent } from '@backstage/core-components'; import { isValidUrl } from '../../utils/components'; +import type { EntrySnapshot } from '../../utils/types'; +import { RadarTimeline } from '../RadarTimeline'; export type Props = { open: boolean; onClose: () => void; title: string; description: string; + timeline?: EntrySnapshot[]; url?: string; links?: Array<{ url: string; title: string }>; }; @@ -39,7 +42,7 @@ const RadarDescription = (props: Props): JSX.Element => { return isValidUrl(url) || Boolean(links && links.length > 0); } - const { open, onClose, title, description, url, links } = props; + const { open, onClose, title, description, timeline, url, links } = props; return ( @@ -48,6 +51,7 @@ const RadarDescription = (props: Props): JSX.Element => { + {showDialogActions(url, links) && ( diff --git a/plugins/tech-radar/src/components/RadarEntry/RadarEntry.tsx b/plugins/tech-radar/src/components/RadarEntry/RadarEntry.tsx index 829b9c7708..af9e840ead 100644 --- a/plugins/tech-radar/src/components/RadarEntry/RadarEntry.tsx +++ b/plugins/tech-radar/src/components/RadarEntry/RadarEntry.tsx @@ -18,6 +18,7 @@ import React from 'react'; import { makeStyles, Theme } from '@material-ui/core'; import { WithLink } from '../../utils/components'; import { RadarDescription } from '../RadarDescription'; +import type { EntrySnapshot } from '../../utils/types'; export type Props = { x: number; @@ -27,6 +28,7 @@ export type Props = { url?: string; moved?: number; description?: string; + timeline?: EntrySnapshot[]; title?: string; onMouseEnter?: (event: React.MouseEvent) => void; onMouseLeave?: (event: React.MouseEvent) => void; @@ -67,6 +69,7 @@ const RadarEntry = (props: Props): JSX.Element => { const { moved, description, + timeline, title, color, url, @@ -107,6 +110,7 @@ const RadarEntry = (props: Props): JSX.Element => { onClose={handleClose} title={title ? title : 'no title'} description={description ? description : 'no description'} + timeline={timeline ? timeline : []} url={url} /> )} diff --git a/plugins/tech-radar/src/components/RadarLegend/RadarLegendLink.tsx b/plugins/tech-radar/src/components/RadarLegend/RadarLegendLink.tsx index 7e31ddddd5..4273963690 100644 --- a/plugins/tech-radar/src/components/RadarLegend/RadarLegendLink.tsx +++ b/plugins/tech-radar/src/components/RadarLegend/RadarLegendLink.tsx @@ -18,6 +18,7 @@ import Typography from '@material-ui/core/Typography'; import React from 'react'; import { WithLink } from '../../utils/components'; import { RadarDescription } from '../RadarDescription'; +import type { EntrySnapshot } from '../../utils/types'; type RadarLegendLinkProps = { url?: string; @@ -26,6 +27,7 @@ type RadarLegendLinkProps = { classes: ClassNameMap; active?: boolean; links: Array<{ url: string; title: string }>; + timeline: EntrySnapshot[]; }; export const RadarLegendLink = ({ @@ -35,6 +37,7 @@ export const RadarLegendLink = ({ classes, active, links, + timeline, }: RadarLegendLinkProps) => { const [open, setOpen] = React.useState(false); @@ -75,6 +78,7 @@ export const RadarLegendLink = ({ title={title ? title : 'no title'} url={url} description={description} + timeline={timeline ? timeline : []} links={links} /> )} diff --git a/plugins/tech-radar/src/components/RadarLegend/RadarLegendRing.tsx b/plugins/tech-radar/src/components/RadarLegend/RadarLegendRing.tsx index da5c10831e..2005d21915 100644 --- a/plugins/tech-radar/src/components/RadarLegend/RadarLegendRing.tsx +++ b/plugins/tech-radar/src/components/RadarLegend/RadarLegendRing.tsx @@ -68,6 +68,7 @@ export const RadarLegendRing = ({ description={entry.description} active={entry.active} links={entry.links ?? []} + timeline={entry.timeline ?? []} /> ))} diff --git a/plugins/tech-radar/src/components/RadarPlot/RadarPlot.tsx b/plugins/tech-radar/src/components/RadarPlot/RadarPlot.tsx index d9788be887..957017692b 100644 --- a/plugins/tech-radar/src/components/RadarPlot/RadarPlot.tsx +++ b/plugins/tech-radar/src/components/RadarPlot/RadarPlot.tsx @@ -76,6 +76,7 @@ const RadarPlot = (props: Props): JSX.Element => { description={entry.description} moved={entry.moved} title={entry.title} + timeline={entry.timeline} onMouseEnter={onEntryMouseEnter && (() => onEntryMouseEnter(entry))} onMouseLeave={onEntryMouseLeave && (() => onEntryMouseLeave(entry))} /> diff --git a/plugins/tech-radar/src/components/RadarTimeline/RadarTimeline.test.tsx b/plugins/tech-radar/src/components/RadarTimeline/RadarTimeline.test.tsx new file mode 100644 index 0000000000..e5142a7af2 --- /dev/null +++ b/plugins/tech-radar/src/components/RadarTimeline/RadarTimeline.test.tsx @@ -0,0 +1,43 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from 'react'; +import { screen } from '@testing-library/react'; + +import { Props, RadarTimeline } from './RadarTimeline'; +import { renderInTestApp } from '@backstage/test-utils'; +import { Ring } from '../../utils/types'; + +const ring: Ring = { + id: 'example-ring', + name: 'example-ring', + color: 'red', +}; + +const minProps: Props = { + timeline: [ + { date: new Date(), ring: ring, description: 'test timeline 1' }, + { date: new Date(), ring: ring, description: 'test timeline 2' }, + ], +}; + +describe('RadarDescription', () => { + it('should render', async () => { + await renderInTestApp(); + expect(screen.getByText(String('test timeline 1'))).toBeInTheDocument(); + expect(screen.getByText(String('test timeline 2'))).toBeInTheDocument(); + }); +}); diff --git a/plugins/tech-radar/src/components/RadarTimeline/RadarTimeline.tsx b/plugins/tech-radar/src/components/RadarTimeline/RadarTimeline.tsx new file mode 100644 index 0000000000..555873cf94 --- /dev/null +++ b/plugins/tech-radar/src/components/RadarTimeline/RadarTimeline.tsx @@ -0,0 +1,99 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import React from 'react'; +import type { EntrySnapshot } from '../../utils/types'; +import Table from '@material-ui/core/Table'; +import TableBody from '@material-ui/core/TableBody'; +import TableCell from '@material-ui/core/TableCell'; +import TableContainer from '@material-ui/core/TableContainer'; +import TableHead from '@material-ui/core/TableHead'; +import TableRow from '@material-ui/core/TableRow'; +import Paper from '@material-ui/core/Paper'; +import Typography from '@material-ui/core/Typography'; + +import ArrowUpwardIcon from '@material-ui/icons/ArrowUpward'; +import ArrowDownwardIcon from '@material-ui/icons/ArrowDownward'; +import AdjustIcon from '@material-ui/icons/Adjust'; + +import { MovedState } from '../../api'; + +export type Props = { + timeline?: EntrySnapshot[]; +}; + +const RadarTimeline = (props: Props): JSX.Element => { + const { timeline } = props; + + return ( + <> + + History + + + + + + Moved in direction + Moved to ring + Moved on date + Description + + + + {timeline?.length === 0 && ( + + + No Timeline + + + )} + {timeline?.map(timeEntry => ( + + + {timeEntry.moved === MovedState.Up ? : ''} + {timeEntry.moved === MovedState.Down ? ( + + ) : ( + '' + )} + {timeEntry.moved === MovedState.NoChange ? ( + + ) : ( + '' + )} + + + {timeEntry.ring.name ? timeEntry.ring.name : ''} + + + {timeEntry.date.toLocaleDateString() + ? timeEntry.date.toLocaleDateString() + : ''} + + + {timeEntry.description ? timeEntry.description : ''} + + + ))} + +
    +
    + + ); +}; + +export { RadarTimeline }; diff --git a/plugins/tech-radar/src/components/RadarTimeline/index.ts b/plugins/tech-radar/src/components/RadarTimeline/index.ts new file mode 100644 index 0000000000..cdf156ce24 --- /dev/null +++ b/plugins/tech-radar/src/components/RadarTimeline/index.ts @@ -0,0 +1,18 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { RadarTimeline } from './RadarTimeline'; +export type { Props } from './RadarTimeline'; diff --git a/plugins/tech-radar/src/sample.ts b/plugins/tech-radar/src/sample.ts index a967d2cbe7..9f6d65a683 100644 --- a/plugins/tech-radar/src/sample.ts +++ b/plugins/tech-radar/src/sample.ts @@ -177,6 +177,11 @@ entries.push({ date: new Date('2020-08-06'), description: 'long description', }, + { + ringId: 'trial', + date: new Date('2020-07-05'), + description: 'long description', + }, ], links: [ { diff --git a/plugins/techdocs-addons-test-utils/CHANGELOG.md b/plugins/techdocs-addons-test-utils/CHANGELOG.md index d7febf826f..cb41a62031 100644 --- a/plugins/techdocs-addons-test-utils/CHANGELOG.md +++ b/plugins/techdocs-addons-test-utils/CHANGELOG.md @@ -1,5 +1,36 @@ # @backstage/plugin-techdocs-addons-test-utils +## 1.0.13-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.8.0-next.1 + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/test-utils@1.3.1-next.1 + - @backstage/plugin-catalog@1.11.0-next.1 + - @backstage/plugin-search-react@1.6.0-next.1 + - @backstage/plugin-techdocs@1.6.2-next.1 + - @backstage/integration-react@1.1.13-next.1 + - @backstage/plugin-techdocs-react@1.1.6-next.0 + +## 1.0.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs@1.6.2-next.0 + - @backstage/plugin-catalog@1.11.0-next.0 + - @backstage/plugin-search-react@1.6.0-next.0 + - @backstage/core-app-api@1.7.1-next.0 + - @backstage/integration-react@1.1.13-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/test-utils@1.3.1-next.0 + - @backstage/theme@0.2.19 + - @backstage/plugin-techdocs-react@1.1.5 + ## 1.0.12 ### Patch Changes diff --git a/plugins/techdocs-addons-test-utils/package.json b/plugins/techdocs-addons-test-utils/package.json index 40a7023507..27ae3ccadd 100644 --- a/plugins/techdocs-addons-test-utils/package.json +++ b/plugins/techdocs-addons-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-addons-test-utils", - "version": "1.0.12", + "version": "1.0.13-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-backend/CHANGELOG.md b/plugins/techdocs-backend/CHANGELOG.md index a862b6869b..8df2623fa0 100644 --- a/plugins/techdocs-backend/CHANGELOG.md +++ b/plugins/techdocs-backend/CHANGELOG.md @@ -1,5 +1,34 @@ # @backstage/plugin-techdocs-backend +## 1.6.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-search-backend-module-techdocs@0.1.1-next.1 + - @backstage/plugin-techdocs-node@1.7.1-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 1.6.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.1-next.0 + - @backstage/plugin-techdocs-node@1.7.1-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-catalog-common@1.0.13 + - @backstage/plugin-permission-common@0.7.5 + - @backstage/plugin-search-common@1.2.3 + ## 1.6.1 ### Patch Changes diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index cd50832320..b90c299621 100644 --- a/plugins/techdocs-backend/package.json +++ b/plugins/techdocs-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-backend", "description": "The Backstage backend plugin that renders technical documentation for your components", - "version": "1.6.1", + "version": "1.6.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-module-addons-contrib/CHANGELOG.md b/plugins/techdocs-module-addons-contrib/CHANGELOG.md index 57ec2eb713..283f08934f 100644 --- a/plugins/techdocs-module-addons-contrib/CHANGELOG.md +++ b/plugins/techdocs-module-addons-contrib/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-techdocs-module-addons-contrib +## 1.0.13-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/integration-react@1.1.13-next.1 + - @backstage/plugin-techdocs-react@1.1.6-next.0 + +## 1.0.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.4.5-next.0 + - @backstage/integration-react@1.1.13-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/theme@0.2.19 + - @backstage/plugin-techdocs-react@1.1.5 + ## 1.0.12 ### Patch Changes diff --git a/plugins/techdocs-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json index 7b0d535f00..763696fbbf 100644 --- a/plugins/techdocs-module-addons-contrib/package.json +++ b/plugins/techdocs-module-addons-contrib/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-module-addons-contrib", "description": "Plugin module for contributed TechDocs Addons", - "version": "1.0.12", + "version": "1.0.13-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-node/CHANGELOG.md b/plugins/techdocs-node/CHANGELOG.md index b5b2de9505..e3715430c9 100644 --- a/plugins/techdocs-node/CHANGELOG.md +++ b/plugins/techdocs-node/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-techdocs-node +## 1.7.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/config@1.0.7 + - @backstage/integration-aws-node@0.1.2 + +## 1.7.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/integration-aws-node@0.1.2 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/plugin-search-common@1.2.3 + ## 1.7.0 ### Minor Changes diff --git a/plugins/techdocs-node/package.json b/plugins/techdocs-node/package.json index 4e967982d7..2513033dc3 100644 --- a/plugins/techdocs-node/package.json +++ b/plugins/techdocs-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-node", "description": "Common node.js functionalities for TechDocs, to be shared between techdocs-backend plugin and techdocs-cli", - "version": "1.7.0", + "version": "1.7.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/plugins/techdocs-node/src/stages/publish/azureBlobStorage.test.ts b/plugins/techdocs-node/src/stages/publish/azureBlobStorage.test.ts index a392d3c172..01565aa2df 100644 --- a/plugins/techdocs-node/src/stages/publish/azureBlobStorage.test.ts +++ b/plugins/techdocs-node/src/stages/publish/azureBlobStorage.test.ts @@ -506,7 +506,7 @@ describe('AzureBlobStoragePublish', () => { name: 'path', }; - const techDocsMetadaFilePath = path.posix.join( + const techDocsMetadataFilePath = path.posix.join( ...Object.values(invalidEntityName), 'techdocs_metadata.json', ); @@ -514,7 +514,7 @@ describe('AzureBlobStoragePublish', () => { const fails = publisher.fetchTechDocsMetadata(invalidEntityName); await expect(fails).rejects.toMatchObject({ - message: `TechDocs metadata fetch failed; caused by Error: The file ${techDocsMetadaFilePath} does not exist!`, + message: `TechDocs metadata fetch failed; caused by Error: The file ${techDocsMetadataFilePath} does not exist!`, }); }); }); diff --git a/plugins/techdocs-react/CHANGELOG.md b/plugins/techdocs-react/CHANGELOG.md index d22379bf5b..d201805fb5 100644 --- a/plugins/techdocs-react/CHANGELOG.md +++ b/plugins/techdocs-react/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-techdocs-react +## 1.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/config@1.0.7 + ## 1.1.5 ### Patch Changes diff --git a/plugins/techdocs-react/package.json b/plugins/techdocs-react/package.json index 7e9189a5fb..318f8d56de 100644 --- a/plugins/techdocs-react/package.json +++ b/plugins/techdocs-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-react", "description": "Shared frontend utilities for TechDocs and Addons", - "version": "1.1.5", + "version": "1.1.6-next.0", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md index 1665513cd0..31a3653f2e 100644 --- a/plugins/techdocs/CHANGELOG.md +++ b/plugins/techdocs/CHANGELOG.md @@ -1,5 +1,37 @@ # @backstage/plugin-techdocs +## 1.6.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + - @backstage/plugin-search-react@1.6.0-next.1 + - @backstage/integration-react@1.1.13-next.1 + - @backstage/plugin-techdocs-react@1.1.6-next.0 + - @backstage/config@1.0.7 + +## 1.6.2-next.0 + +### Patch Changes + +- 863beb49498: Re-add the possibility to have trailing slashes in Techdocs navigation. +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-search-react@1.6.0-next.0 + - @backstage/integration-react@1.1.13-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/plugin-search-common@1.2.3 + - @backstage/plugin-techdocs-react@1.1.5 + ## 1.6.1 ### Patch Changes diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index e8ab495bbd..d0a6e49d13 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs", "description": "The Backstage plugin that renders technical documentation for your components", - "version": "1.6.1", + "version": "1.6.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/todo-backend/CHANGELOG.md b/plugins/todo-backend/CHANGELOG.md index 8a4950d469..84d8807698 100644 --- a/plugins/todo-backend/CHANGELOG.md +++ b/plugins/todo-backend/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-todo-backend +## 0.1.42-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-catalog-node@1.3.6-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 0.1.42-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/integration@1.4.5-next.0 + - @backstage/plugin-catalog-node@1.3.6-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-client@1.4.1 + - @backstage/catalog-model@1.3.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.1.41 ### Patch Changes diff --git a/plugins/todo-backend/package.json b/plugins/todo-backend/package.json index d7950ed845..d98a44f874 100644 --- a/plugins/todo-backend/package.json +++ b/plugins/todo-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-todo-backend", "description": "A Backstage backend plugin that lets you browse TODO comments in your source code", - "version": "0.1.41", + "version": "0.1.42-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/todo/CHANGELOG.md b/plugins/todo/CHANGELOG.md index be54b3e27a..cb9e1464ff 100644 --- a/plugins/todo/CHANGELOG.md +++ b/plugins/todo/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-todo +## 0.2.20-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.2.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + ## 0.2.19 ### Patch Changes diff --git a/plugins/todo/package.json b/plugins/todo/package.json index b59d23bae7..f8a86b9cb2 100644 --- a/plugins/todo/package.json +++ b/plugins/todo/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-todo", "description": "A Backstage plugin that lets you browse TODO comments in your source code", - "version": "0.2.19", + "version": "0.2.20-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/user-settings-backend/CHANGELOG.md b/plugins/user-settings-backend/CHANGELOG.md index 268badcb6a..4420e63f8e 100644 --- a/plugins/user-settings-backend/CHANGELOG.md +++ b/plugins/user-settings-backend/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-user-settings-backend +## 0.1.9-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/plugin-auth-node@0.2.14-next.1 + - @backstage/backend-plugin-api@0.5.2-next.1 + +## 0.1.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/plugin-auth-node@0.2.14-next.0 + - @backstage/backend-plugin-api@0.5.2-next.0 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/types@1.0.2 + ## 0.1.8 ### Patch Changes diff --git a/plugins/user-settings-backend/package.json b/plugins/user-settings-backend/package.json index a2e400b905..6fdeee038d 100644 --- a/plugins/user-settings-backend/package.json +++ b/plugins/user-settings-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-user-settings-backend", "description": "The Backstage backend plugin to manage user settings", - "version": "0.1.8", + "version": "0.1.9-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/user-settings/CHANGELOG.md b/plugins/user-settings/CHANGELOG.md index b3adbd49ef..92558dfba7 100644 --- a/plugins/user-settings/CHANGELOG.md +++ b/plugins/user-settings/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-user-settings +## 0.7.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.8.0-next.1 + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.7.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-app-api@1.7.1-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + - @backstage/types@1.0.2 + ## 0.7.2 ### Patch Changes diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index 167c2e6281..b55293d414 100644 --- a/plugins/user-settings/package.json +++ b/plugins/user-settings/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-user-settings", "description": "A Backstage plugin that provides a settings page", - "version": "0.7.2", + "version": "0.7.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/vault-backend/CHANGELOG.md b/plugins/vault-backend/CHANGELOG.md index 162b74b5c7..33fcd6017c 100644 --- a/plugins/vault-backend/CHANGELOG.md +++ b/plugins/vault-backend/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-vault-backend +## 0.3.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.1 + - @backstage/backend-tasks@0.5.2-next.1 + - @backstage/config@1.0.7 + +## 0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.18.5-next.0 + - @backstage/backend-tasks@0.5.2-next.0 + - @backstage/config@1.0.7 + - @backstage/errors@1.1.5 + ## 0.3.0 ### Minor Changes diff --git a/plugins/vault-backend/package.json b/plugins/vault-backend/package.json index d3e41ca14a..0f4467ca80 100644 --- a/plugins/vault-backend/package.json +++ b/plugins/vault-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault-backend", "description": "A Backstage backend plugin that integrates towards Vault", - "version": "0.3.0", + "version": "0.3.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/vault/CHANGELOG.md b/plugins/vault/CHANGELOG.md index 2c3c62aacf..7af7f47adc 100644 --- a/plugins/vault/CHANGELOG.md +++ b/plugins/vault/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-vault +## 0.1.12-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/plugin-catalog-react@1.6.0-next.1 + +## 0.1.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.6.0-next.0 + - @backstage/core-components@0.13.0 + - @backstage/core-plugin-api@1.5.1 + - @backstage/catalog-model@1.3.0 + - @backstage/errors@1.1.5 + - @backstage/theme@0.2.19 + ## 0.1.11 ### Patch Changes diff --git a/plugins/vault/package.json b/plugins/vault/package.json index 5b2361e8ab..6d97b0a5e9 100644 --- a/plugins/vault/package.json +++ b/plugins/vault/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault", "description": "A Backstage plugin that integrates towards Vault", - "version": "0.1.11", + "version": "0.1.12-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/xcmetrics/CHANGELOG.md b/plugins/xcmetrics/CHANGELOG.md index cdc0e13fd5..eccce54f0b 100644 --- a/plugins/xcmetrics/CHANGELOG.md +++ b/plugins/xcmetrics/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-xcmetrics +## 0.2.38-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.1-next.0 + - @backstage/core-plugin-api@1.5.1 + ## 0.2.37 ### Patch Changes diff --git a/plugins/xcmetrics/package.json b/plugins/xcmetrics/package.json index bb2c524c80..18b86eb0ee 100644 --- a/plugins/xcmetrics/package.json +++ b/plugins/xcmetrics/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-xcmetrics", "description": "A Backstage plugin that shows XCode build metrics for your components", - "version": "0.2.37", + "version": "0.2.38-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/yarn.lock b/yarn.lock index 571cf81605..0bd97d81f8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -85,8 +85,8 @@ __metadata: linkType: hard "@apollo/client@npm:^3.0.0": - version: 3.7.12 - resolution: "@apollo/client@npm:3.7.12" + version: 3.7.13 + resolution: "@apollo/client@npm:3.7.13" dependencies: "@graphql-typed-document-node/core": ^3.1.1 "@wry/context": ^0.7.0 @@ -116,7 +116,7 @@ __metadata: optional: true subscriptions-transport-ws: optional: true - checksum: 9b9b0cd3b02d6b90ac4565737a1fa4d0e3c8e1f4cd0a0e1c680ed6f174f522469d16f0a71bc57ea358538b482c5085c33ae22d0d3cc42d90cef1c03b1f036e61 + checksum: 9c8adfcb5da0ec8adaa1f7bc7c16bc6fa4e5ec171422ca985043d92e1012958f0ab9b1bcb5a25167c713995f0502f0240a807114941d48b118de34dbd9f63428 languageName: node linkType: hard @@ -182,8 +182,8 @@ __metadata: linkType: hard "@apollo/server@npm:^4.0.0": - version: 4.6.0 - resolution: "@apollo/server@npm:4.6.0" + version: 4.7.0 + resolution: "@apollo/server@npm:4.7.0" dependencies: "@apollo/cache-control-types": ^1.0.2 "@apollo/server-gateway-interface": ^1.1.0 @@ -213,7 +213,7 @@ __metadata: whatwg-mimetype: ^3.0.0 peerDependencies: graphql: ^16.6.0 - checksum: 309d22df0caa73671d856c31f53d0eb8a5505a6dd0c1691223891e0fa2931667c7ccd680e418a678e1d2570f54596bcc514775854cbc16bfff9009c7cfe9febe + checksum: 68f94a3859b99b931d8c6ae36f8684ec85eb7524a74e2a814b36ae3ae87773ff73562657021eaa2c2d382ec32bb6b1d9f9f7975fdc0a4509f24cddd71d33953e languageName: node linkType: hard @@ -3585,7 +3585,6 @@ __metadata: pg: ^8.3.0 raw-body: ^2.4.1 recursive-readdir: ^2.2.2 - request: ^2.88.2 selfsigned: ^2.0.0 stoppable: ^1.1.0 supertest: ^6.1.3 @@ -3700,7 +3699,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/catalog-client@workspace:^, @backstage/catalog-client@workspace:packages/catalog-client": +"@backstage/catalog-client@^1.4.1, @backstage/catalog-client@workspace:^, @backstage/catalog-client@workspace:packages/catalog-client": version: 0.0.0-use.local resolution: "@backstage/catalog-client@workspace:packages/catalog-client" dependencies: @@ -3712,7 +3711,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/catalog-model@^1.1.5, @backstage/catalog-model@^1.2.1, @backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model": +"@backstage/catalog-model@^1.1.5, @backstage/catalog-model@^1.3.0, @backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model": version: 0.0.0-use.local resolution: "@backstage/catalog-model@workspace:packages/catalog-model" dependencies: @@ -4001,7 +4000,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-components@npm:^0.12.3, @backstage/core-components@npm:^0.12.5": +"@backstage/core-components@npm:^0.12.3": version: 0.12.5 resolution: "@backstage/core-components@npm:0.12.5" dependencies: @@ -4051,6 +4050,59 @@ __metadata: languageName: node linkType: hard +"@backstage/core-components@npm:^0.13.0": + version: 0.13.0 + resolution: "@backstage/core-components@npm:0.13.0" + dependencies: + "@backstage/config": ^1.0.7 + "@backstage/core-plugin-api": ^1.5.1 + "@backstage/errors": ^1.1.5 + "@backstage/theme": ^0.2.19 + "@backstage/version-bridge": ^1.0.4 + "@date-io/core": ^1.3.13 + "@material-table/core": ^3.1.0 + "@material-ui/core": ^4.12.2 + "@material-ui/icons": ^4.9.1 + "@material-ui/lab": 4.0.0-alpha.61 + "@react-hookz/web": ^20.0.0 + "@types/react": ^16.13.1 || ^17.0.0 + "@types/react-sparklines": ^1.7.0 + "@types/react-text-truncate": ^0.14.0 + ansi-regex: ^6.0.1 + classnames: ^2.2.6 + d3-selection: ^3.0.0 + d3-shape: ^3.0.0 + d3-zoom: ^3.0.0 + dagre: ^0.8.5 + history: ^5.0.0 + immer: ^9.0.1 + linkify-react: 4.1.1 + linkifyjs: 4.1.1 + lodash: ^4.17.21 + pluralize: ^8.0.0 + prop-types: ^15.7.2 + qs: ^6.9.4 + rc-progress: 3.4.1 + react-helmet: 6.1.0 + react-hook-form: ^7.12.2 + react-markdown: ^8.0.0 + react-sparklines: ^1.7.0 + react-syntax-highlighter: ^15.4.5 + react-text-truncate: ^0.19.0 + react-use: ^17.3.2 + react-virtualized-auto-sizer: ^1.0.11 + react-window: ^1.8.6 + remark-gfm: ^3.0.1 + zen-observable: ^0.10.0 + zod: ^3.21.4 + peerDependencies: + react: ^16.13.1 || ^17.0.0 + react-dom: ^16.13.1 || ^17.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: 49c5301ff45c6f7516e78e80f46b25d2efb8d9ba510c7718f94c25b1f7d9b2869840db7ec896fbf9d083ceca8fa8cddf718a78eeb074993e95d474195f4bc9cd + languageName: node + linkType: hard + "@backstage/core-components@workspace:^, @backstage/core-components@workspace:packages/core-components": version: 0.0.0-use.local resolution: "@backstage/core-components@workspace:packages/core-components" @@ -4126,7 +4178,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-plugin-api@^1.3.0, @backstage/core-plugin-api@^1.5.0, @backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api": +"@backstage/core-plugin-api@^1.3.0, @backstage/core-plugin-api@^1.5.0, @backstage/core-plugin-api@^1.5.1, @backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api": version: 0.0.0-use.local resolution: "@backstage/core-plugin-api@workspace:packages/core-plugin-api" dependencies: @@ -4255,7 +4307,28 @@ __metadata: languageName: unknown linkType: soft -"@backstage/integration-react@^1.1.11, @backstage/integration-react@workspace:^, @backstage/integration-react@workspace:packages/integration-react": +"@backstage/integration-react@npm:^1.1.12": + version: 1.1.12 + resolution: "@backstage/integration-react@npm:1.1.12" + dependencies: + "@backstage/config": ^1.0.7 + "@backstage/core-components": ^0.13.0 + "@backstage/core-plugin-api": ^1.5.1 + "@backstage/integration": ^1.4.4 + "@backstage/theme": ^0.2.19 + "@material-ui/core": ^4.12.2 + "@material-ui/icons": ^4.9.1 + "@material-ui/lab": 4.0.0-alpha.61 + react-use: ^17.2.4 + peerDependencies: + react: ^16.13.1 || ^17.0.0 + react-dom: ^16.13.1 || ^17.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: c7ae5754f074f3cee020a5dfca50deecaccd0f5a8510a1446bb1070d7b9b6e32a82564cff77b98ef63b19fde5a29aceaf4b8e8662dd1a3ed00c408c8ae06dc65 + languageName: node + linkType: hard + +"@backstage/integration-react@workspace:^, @backstage/integration-react@workspace:packages/integration-react": version: 0.0.0-use.local resolution: "@backstage/integration-react@workspace:packages/integration-react" dependencies: @@ -4286,6 +4359,22 @@ __metadata: languageName: unknown linkType: soft +"@backstage/integration@npm:^1.4.4": + version: 1.4.4 + resolution: "@backstage/integration@npm:1.4.4" + dependencies: + "@backstage/config": ^1.0.7 + "@backstage/errors": ^1.1.5 + "@octokit/auth-app": ^4.0.0 + "@octokit/rest": ^19.0.3 + cross-fetch: ^3.1.5 + git-url-parse: ^13.0.0 + lodash: ^4.17.21 + luxon: ^3.0.0 + checksum: 715310efe55b3c2fb93f5197bc1422917822a15a7550aae9d84b257bb0a6cff2bfab9a44296a977a56651499fbecd0ef31f954f92a62cc94bfbc7319d9a48c04 + languageName: node + linkType: hard + "@backstage/integration@workspace:^, @backstage/integration@workspace:packages/integration": version: 0.0.0-use.local resolution: "@backstage/integration@workspace:packages/integration" @@ -4468,6 +4557,36 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-analytics-module-ga4@workspace:plugins/analytics-module-ga4": + version: 0.0.0-use.local + resolution: "@backstage/plugin-analytics-module-ga4@workspace:plugins/analytics-module-ga4" + dependencies: + "@backstage/cli": "workspace:^" + "@backstage/config": "workspace:^" + "@backstage/core-app-api": "workspace:^" + "@backstage/core-components": "workspace:^" + "@backstage/core-plugin-api": "workspace:^" + "@backstage/dev-utils": "workspace:^" + "@backstage/test-utils": "workspace:^" + "@backstage/theme": "workspace:^" + "@testing-library/dom": ^8.0.0 + "@testing-library/jest-dom": ^5.10.1 + "@testing-library/react": ^12.1.3 + "@testing-library/user-event": ^14.0.0 + "@types/jest": ^28.1.3 + "@types/node": ^16.11.26 + "@types/react": ^16.13.1 || ^17.0.0 + cross-fetch: ^3.1.5 + msw: ^1.0.0 + react-ga4: ^2.0.0 + react-use: ^17.2.4 + peerDependencies: + react: ^16.13.1 || ^17.0.0 + react-dom: ^16.13.1 || ^17.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + languageName: unknown + linkType: soft + "@backstage/plugin-analytics-module-ga@workspace:plugins/analytics-module-ga": version: 0.0.0-use.local resolution: "@backstage/plugin-analytics-module-ga@workspace:plugins/analytics-module-ga" @@ -5412,7 +5531,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-common@^1.0.10, @backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common": +"@backstage/plugin-catalog-common@^1.0.10, @backstage/plugin-catalog-common@^1.0.13, @backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-common@workspace:plugins/catalog-common" dependencies: @@ -5550,7 +5669,43 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-react@^1.2.4, @backstage/plugin-catalog-react@^1.4.0, @backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": +"@backstage/plugin-catalog-react@npm:^1.2.4, @backstage/plugin-catalog-react@npm:^1.5.0": + version: 1.5.0 + resolution: "@backstage/plugin-catalog-react@npm:1.5.0" + dependencies: + "@backstage/catalog-client": ^1.4.1 + "@backstage/catalog-model": ^1.3.0 + "@backstage/core-components": ^0.13.0 + "@backstage/core-plugin-api": ^1.5.1 + "@backstage/errors": ^1.1.5 + "@backstage/integration": ^1.4.4 + "@backstage/plugin-catalog-common": ^1.0.13 + "@backstage/plugin-permission-common": ^0.7.5 + "@backstage/plugin-permission-react": ^0.4.12 + "@backstage/theme": ^0.2.19 + "@backstage/types": ^1.0.2 + "@backstage/version-bridge": ^1.0.4 + "@material-ui/core": ^4.12.2 + "@material-ui/icons": ^4.9.1 + "@material-ui/lab": 4.0.0-alpha.61 + "@types/react": ^16.13.1 || ^17.0.0 + classnames: ^2.2.6 + jwt-decode: ^3.1.0 + lodash: ^4.17.21 + material-ui-popup-state: ^1.9.3 + qs: ^6.9.4 + react-use: ^17.2.4 + yaml: ^2.0.0 + zen-observable: ^0.10.0 + peerDependencies: + react: ^16.13.1 || ^17.0.0 + react-dom: ^16.13.1 || ^17.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: 0ffa1a9ecf142df389e2ecdbda1fae1718d4b65782654d99cd1de562520aae6ecc4677c15aff50a10fee9d9e89a35d2978e53da8f5f7129deef02c7044eb6e46 + languageName: node + linkType: hard + +"@backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-react@workspace:plugins/catalog-react" dependencies: @@ -6832,26 +6987,35 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-home@npm:^0.4.32": - version: 0.4.32 - resolution: "@backstage/plugin-home@npm:0.4.32" +"@backstage/plugin-home@npm:^0.5.1": + version: 0.5.1 + resolution: "@backstage/plugin-home@npm:0.5.1" dependencies: - "@backstage/catalog-model": ^1.2.1 + "@backstage/catalog-model": ^1.3.0 "@backstage/config": ^1.0.7 - "@backstage/core-components": ^0.12.5 - "@backstage/core-plugin-api": ^1.5.0 - "@backstage/plugin-catalog-react": ^1.4.0 - "@backstage/theme": ^0.2.18 + "@backstage/core-components": ^0.13.0 + "@backstage/core-plugin-api": ^1.5.1 + "@backstage/plugin-catalog-react": ^1.5.0 + "@backstage/theme": ^0.2.19 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.57 - lodash: ^4.17.21 - react-use: ^17.2.4 - peerDependencies: + "@material-ui/lab": 4.0.0-alpha.61 + "@rjsf/core-v5": "npm:@rjsf/core@5.6.0" + "@rjsf/material-ui": 5.6.0 + "@rjsf/utils": 5.6.0 + "@rjsf/validator-ajv8": 5.6.0 "@types/react": ^16.13.1 || ^17.0.0 + lodash: ^4.17.21 + object-hash: ^3.0.0 + react-grid-layout: ^1.3.4 + react-resizable: ^3.0.4 + react-use: ^17.2.4 + zod: ~3.21.4 + peerDependencies: react: ^16.13.1 || ^17.0.0 + react-dom: ^16.13.1 || ^17.0.0 react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: 24e4b880be179b940098ab636333218200d26dbea249c883dc27b4e209bbec9ae74970d11340833c668dbd05d978a354be771d15dba96a105267365321f1db57 + checksum: 0470e0d4848818c59fdf5c3765b769c22bf2b47e26b0ed0c80398baac6a8e1ac703e94152dc20498bfda790aec18a2af65605fcd8c6eb2e7ba7b85eb6ce80b69 languageName: node linkType: hard @@ -6872,9 +7036,10 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@rjsf/core": ^3.2.1 - "@rjsf/material-ui": ^3.2.1 + "@rjsf/core-v5": "npm:@rjsf/core@5.6.0" + "@rjsf/material-ui": 5.6.0 "@rjsf/utils": 5.6.0 + "@rjsf/validator-ajv8": 5.6.0 "@testing-library/dom": ^8.0.0 "@testing-library/jest-dom": ^5.10.1 "@testing-library/react": ^12.1.3 @@ -7142,6 +7307,7 @@ __metadata: "@backstage/plugin-kubernetes-common": "workspace:^" "@backstage/test-utils": "workspace:^" "@backstage/theme": "workspace:^" + "@kubernetes-models/apimachinery": ^1.1.0 "@kubernetes/client-node": 0.18.1 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 @@ -7395,7 +7561,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-octopus-deploy@workspace:plugins/octopus-deploy": +"@backstage/plugin-octopus-deploy@workspace:^, @backstage/plugin-octopus-deploy@workspace:plugins/octopus-deploy": version: 0.0.0-use.local resolution: "@backstage/plugin-octopus-deploy@workspace:plugins/octopus-deploy" dependencies: @@ -7614,7 +7780,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-permission-common@workspace:^, @backstage/plugin-permission-common@workspace:plugins/permission-common": +"@backstage/plugin-permission-common@^0.7.5, @backstage/plugin-permission-common@workspace:^, @backstage/plugin-permission-common@workspace:plugins/permission-common": version: 0.0.0-use.local resolution: "@backstage/plugin-permission-common@workspace:plugins/permission-common" dependencies: @@ -7652,7 +7818,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-permission-react@workspace:^, @backstage/plugin-permission-react@workspace:plugins/permission-react": +"@backstage/plugin-permission-react@^0.4.12, @backstage/plugin-permission-react@workspace:^, @backstage/plugin-permission-react@workspace:plugins/permission-react": version: 0.0.0-use.local resolution: "@backstage/plugin-permission-react@workspace:plugins/permission-react" dependencies: @@ -8049,7 +8215,7 @@ __metadata: prom-client: ^14.0.1 supertest: ^6.1.3 uuid: ^8.2.0 - vm2: ^3.9.11 + vm2: ^3.9.17 wait-for-expect: ^3.0.2 winston: ^3.2.1 yaml: ^2.0.0 @@ -9386,7 +9552,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/theme@^0.2.16, @backstage/theme@^0.2.18, @backstage/theme@workspace:^, @backstage/theme@workspace:packages/theme": +"@backstage/theme@^0.2.16, @backstage/theme@^0.2.18, @backstage/theme@^0.2.19, @backstage/theme@workspace:^, @backstage/theme@workspace:packages/theme": version: 0.0.0-use.local resolution: "@backstage/theme@workspace:packages/theme" dependencies: @@ -9410,7 +9576,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/version-bridge@^1.0.3, @backstage/version-bridge@workspace:^, @backstage/version-bridge@workspace:packages/version-bridge": +"@backstage/version-bridge@^1.0.3, @backstage/version-bridge@^1.0.4, @backstage/version-bridge@workspace:^, @backstage/version-bridge@workspace:packages/version-bridge": version: 0.0.0-use.local resolution: "@backstage/version-bridge@workspace:packages/version-bridge" dependencies: @@ -9985,9 +10151,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.17.15": - version: 0.17.15 - resolution: "@esbuild/android-arm64@npm:0.17.15" +"@esbuild/android-arm64@npm:0.17.18": + version: 0.17.18 + resolution: "@esbuild/android-arm64@npm:0.17.18" conditions: os=android & cpu=arm64 languageName: node linkType: hard @@ -10006,9 +10172,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm@npm:0.17.15": - version: 0.17.15 - resolution: "@esbuild/android-arm@npm:0.17.15" +"@esbuild/android-arm@npm:0.17.18": + version: 0.17.18 + resolution: "@esbuild/android-arm@npm:0.17.18" conditions: os=android & cpu=arm languageName: node linkType: hard @@ -10020,9 +10186,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-x64@npm:0.17.15": - version: 0.17.15 - resolution: "@esbuild/android-x64@npm:0.17.15" +"@esbuild/android-x64@npm:0.17.18": + version: 0.17.18 + resolution: "@esbuild/android-x64@npm:0.17.18" conditions: os=android & cpu=x64 languageName: node linkType: hard @@ -10034,9 +10200,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.17.15": - version: 0.17.15 - resolution: "@esbuild/darwin-arm64@npm:0.17.15" +"@esbuild/darwin-arm64@npm:0.17.18": + version: 0.17.18 + resolution: "@esbuild/darwin-arm64@npm:0.17.18" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -10048,9 +10214,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.17.15": - version: 0.17.15 - resolution: "@esbuild/darwin-x64@npm:0.17.15" +"@esbuild/darwin-x64@npm:0.17.18": + version: 0.17.18 + resolution: "@esbuild/darwin-x64@npm:0.17.18" conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -10062,9 +10228,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.17.15": - version: 0.17.15 - resolution: "@esbuild/freebsd-arm64@npm:0.17.15" +"@esbuild/freebsd-arm64@npm:0.17.18": + version: 0.17.18 + resolution: "@esbuild/freebsd-arm64@npm:0.17.18" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard @@ -10076,9 +10242,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.17.15": - version: 0.17.15 - resolution: "@esbuild/freebsd-x64@npm:0.17.15" +"@esbuild/freebsd-x64@npm:0.17.18": + version: 0.17.18 + resolution: "@esbuild/freebsd-x64@npm:0.17.18" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard @@ -10090,9 +10256,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.17.15": - version: 0.17.15 - resolution: "@esbuild/linux-arm64@npm:0.17.15" +"@esbuild/linux-arm64@npm:0.17.18": + version: 0.17.18 + resolution: "@esbuild/linux-arm64@npm:0.17.18" conditions: os=linux & cpu=arm64 languageName: node linkType: hard @@ -10104,9 +10270,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.17.15": - version: 0.17.15 - resolution: "@esbuild/linux-arm@npm:0.17.15" +"@esbuild/linux-arm@npm:0.17.18": + version: 0.17.18 + resolution: "@esbuild/linux-arm@npm:0.17.18" conditions: os=linux & cpu=arm languageName: node linkType: hard @@ -10118,9 +10284,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.17.15": - version: 0.17.15 - resolution: "@esbuild/linux-ia32@npm:0.17.15" +"@esbuild/linux-ia32@npm:0.17.18": + version: 0.17.18 + resolution: "@esbuild/linux-ia32@npm:0.17.18" conditions: os=linux & cpu=ia32 languageName: node linkType: hard @@ -10139,9 +10305,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.17.15": - version: 0.17.15 - resolution: "@esbuild/linux-loong64@npm:0.17.15" +"@esbuild/linux-loong64@npm:0.17.18": + version: 0.17.18 + resolution: "@esbuild/linux-loong64@npm:0.17.18" conditions: os=linux & cpu=loong64 languageName: node linkType: hard @@ -10153,9 +10319,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.17.15": - version: 0.17.15 - resolution: "@esbuild/linux-mips64el@npm:0.17.15" +"@esbuild/linux-mips64el@npm:0.17.18": + version: 0.17.18 + resolution: "@esbuild/linux-mips64el@npm:0.17.18" conditions: os=linux & cpu=mips64el languageName: node linkType: hard @@ -10167,9 +10333,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.17.15": - version: 0.17.15 - resolution: "@esbuild/linux-ppc64@npm:0.17.15" +"@esbuild/linux-ppc64@npm:0.17.18": + version: 0.17.18 + resolution: "@esbuild/linux-ppc64@npm:0.17.18" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard @@ -10181,9 +10347,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.17.15": - version: 0.17.15 - resolution: "@esbuild/linux-riscv64@npm:0.17.15" +"@esbuild/linux-riscv64@npm:0.17.18": + version: 0.17.18 + resolution: "@esbuild/linux-riscv64@npm:0.17.18" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard @@ -10195,9 +10361,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.17.15": - version: 0.17.15 - resolution: "@esbuild/linux-s390x@npm:0.17.15" +"@esbuild/linux-s390x@npm:0.17.18": + version: 0.17.18 + resolution: "@esbuild/linux-s390x@npm:0.17.18" conditions: os=linux & cpu=s390x languageName: node linkType: hard @@ -10209,9 +10375,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.17.15": - version: 0.17.15 - resolution: "@esbuild/linux-x64@npm:0.17.15" +"@esbuild/linux-x64@npm:0.17.18": + version: 0.17.18 + resolution: "@esbuild/linux-x64@npm:0.17.18" conditions: os=linux & cpu=x64 languageName: node linkType: hard @@ -10223,9 +10389,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.17.15": - version: 0.17.15 - resolution: "@esbuild/netbsd-x64@npm:0.17.15" +"@esbuild/netbsd-x64@npm:0.17.18": + version: 0.17.18 + resolution: "@esbuild/netbsd-x64@npm:0.17.18" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard @@ -10237,9 +10403,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.17.15": - version: 0.17.15 - resolution: "@esbuild/openbsd-x64@npm:0.17.15" +"@esbuild/openbsd-x64@npm:0.17.18": + version: 0.17.18 + resolution: "@esbuild/openbsd-x64@npm:0.17.18" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard @@ -10251,9 +10417,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.17.15": - version: 0.17.15 - resolution: "@esbuild/sunos-x64@npm:0.17.15" +"@esbuild/sunos-x64@npm:0.17.18": + version: 0.17.18 + resolution: "@esbuild/sunos-x64@npm:0.17.18" conditions: os=sunos & cpu=x64 languageName: node linkType: hard @@ -10265,9 +10431,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.17.15": - version: 0.17.15 - resolution: "@esbuild/win32-arm64@npm:0.17.15" +"@esbuild/win32-arm64@npm:0.17.18": + version: 0.17.18 + resolution: "@esbuild/win32-arm64@npm:0.17.18" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -10279,9 +10445,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.17.15": - version: 0.17.15 - resolution: "@esbuild/win32-ia32@npm:0.17.15" +"@esbuild/win32-ia32@npm:0.17.18": + version: 0.17.18 + resolution: "@esbuild/win32-ia32@npm:0.17.18" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard @@ -10293,9 +10459,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.17.15": - version: 0.17.15 - resolution: "@esbuild/win32-x64@npm:0.17.15" +"@esbuild/win32-x64@npm:0.17.18": + version: 0.17.18 + resolution: "@esbuild/win32-x64@npm:0.17.18" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -11179,16 +11345,16 @@ __metadata: linkType: hard "@graphql-tools/schema@npm:^9.0.0, @graphql-tools/schema@npm:^9.0.16": - version: 9.0.18 - resolution: "@graphql-tools/schema@npm:9.0.18" + version: 9.0.19 + resolution: "@graphql-tools/schema@npm:9.0.19" dependencies: "@graphql-tools/merge": ^8.4.1 "@graphql-tools/utils": ^9.2.1 tslib: ^2.4.0 - value-or-promise: 1.0.12 + value-or-promise: ^1.0.12 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 316bc3ce2673a357e3e8ed8f2dbd8e194c27323af7a78a1112253a597bacea70c6d1ea811e385e60c4226cd6ded54ef41b5bc44969433e14bcb192b666379b83 + checksum: 1be91f61bf4be0c1c9aa640a6ad5b58328d5434d15e78ba73a47263420939db6741ad6723dece4611257e7e1e56518e116b76513a3014305d3f52d67aafb62fb languageName: node linkType: hard @@ -11937,35 +12103,35 @@ __metadata: linkType: hard "@kubernetes-models/apimachinery@npm:^1.1.0": - version: 1.1.0 - resolution: "@kubernetes-models/apimachinery@npm:1.1.0" + version: 1.1.1 + resolution: "@kubernetes-models/apimachinery@npm:1.1.1" dependencies: - "@kubernetes-models/base": ^4.0.0 - "@kubernetes-models/validate": ^3.0.0 + "@kubernetes-models/base": ^4.0.1 + "@kubernetes-models/validate": ^3.0.1 tslib: ^2.4.0 - checksum: 71fc127a8e50c3686e32d9f9df94a307ae4d69995d6e82ea50a7eb9a5ce6a18e9950700ad0eb445e1451c997aabb22e2594ab1037c11faa9c0051b51bab569c6 + checksum: 915d6a55b485335622d43c6e1f1031ea949bfb3e985deba6389462b4c0a3b3030e71e6eebfc1e7b894afee543de2e5a1af0ff6694225a372e220f7dccb5b6eed languageName: node linkType: hard -"@kubernetes-models/base@npm:^4.0.0": - version: 4.0.0 - resolution: "@kubernetes-models/base@npm:4.0.0" +"@kubernetes-models/base@npm:^4.0.0, @kubernetes-models/base@npm:^4.0.1": + version: 4.0.1 + resolution: "@kubernetes-models/base@npm:4.0.1" dependencies: - "@kubernetes-models/validate": ^3.0.0 + "@kubernetes-models/validate": ^3.0.1 is-plain-object: ^5.0.0 tslib: ^2.4.0 - checksum: 3c44f2220e119c24b874d6d674f38f9796f0ab682ba0cff1516d39549a6536055348bcee6c3c5257ebb8d4d6c8d1865d84e519d8f8948e6dd29eb1d72f3830cb + checksum: c2e91b749b39c068631bf5df1f992f890b20106b7a361e3f12a8c6851719170328a83ac7452b62522aabe1d1c0cc465e1dc06bd20ab749b2315c540da52c1369 languageName: node linkType: hard -"@kubernetes-models/validate@npm:^3.0.0": - version: 3.0.0 - resolution: "@kubernetes-models/validate@npm:3.0.0" +"@kubernetes-models/validate@npm:^3.0.0, @kubernetes-models/validate@npm:^3.0.1": + version: 3.0.1 + resolution: "@kubernetes-models/validate@npm:3.0.1" dependencies: ajv: ^8.11.0 ajv-formats: ^2.1.1 tslib: ^2.4.0 - checksum: b53b7181ddaad7e8faf6ceac228cb23df239ef5da3784887f3378dd3a7f89e1936b7b1884ab123255a905627311bab4302a06668fba35d26152e69fbf208a855 + checksum: 14b2517c0a6244184df6e00927ec682953c36a623975e862c00a12fa1cbe6c0909dc716b41187b37d572d8dc763a8339e8178df19a33fac26161d12fd861896e languageName: node linkType: hard @@ -12874,15 +13040,6 @@ __metadata: languageName: node linkType: hard -"@octokit/auth-token@npm:^2.4.4": - version: 2.4.4 - resolution: "@octokit/auth-token@npm:2.4.4" - dependencies: - "@octokit/types": ^6.0.0 - checksum: ee2c90af0f3274b482b6e615f7c200928a8f86b0596ec95f0e49219515578990118bf1db3baff723191b0e2a94d82af376f357df0ba9a2d8d732b77e9b801feb - languageName: node - linkType: hard - "@octokit/auth-token@npm:^3.0.0": version: 3.0.1 resolution: "@octokit/auth-token@npm:3.0.1" @@ -12902,20 +13059,6 @@ __metadata: languageName: node linkType: hard -"@octokit/core@npm:^3.2.3": - version: 3.2.4 - resolution: "@octokit/core@npm:3.2.4" - dependencies: - "@octokit/auth-token": ^2.4.4 - "@octokit/graphql": ^4.5.8 - "@octokit/request": ^5.4.12 - "@octokit/types": ^6.0.3 - before-after-hook: ^2.1.0 - universal-user-agent: ^6.0.0 - checksum: f9d48423e45103c3e759231f0b4671c7d7d481f8fa7ead7316dc3d126465b697fd1a8f7f258950f22f602a58aacb7524b4b9f617d284f74429df7bd51ad67052 - languageName: node - linkType: hard - "@octokit/core@npm:^4.0.0, @octokit/core@npm:^4.0.4, @octokit/core@npm:^4.1.0": version: 4.1.0 resolution: "@octokit/core@npm:4.1.0" @@ -12953,17 +13096,6 @@ __metadata: languageName: node linkType: hard -"@octokit/graphql@npm:^4.5.8": - version: 4.8.0 - resolution: "@octokit/graphql@npm:4.8.0" - dependencies: - "@octokit/request": ^5.6.0 - "@octokit/types": ^6.0.3 - universal-user-agent: ^6.0.0 - checksum: f68afe53f63900d4a16a0a733f2f500df2695b731f8ed32edb728d50edead7f5011437f71d069c2d2f6d656227703d0c832a3c8af58ecf82bd5dcc051f2d2d74 - languageName: node - linkType: hard - "@octokit/graphql@npm:^5.0.0": version: 5.0.5 resolution: "@octokit/graphql@npm:5.0.5" @@ -12976,8 +13108,8 @@ __metadata: linkType: hard "@octokit/oauth-app@npm:^4.0.4, @octokit/oauth-app@npm:^4.0.6, @octokit/oauth-app@npm:^4.2.0": - version: 4.2.0 - resolution: "@octokit/oauth-app@npm:4.2.0" + version: 4.2.1 + resolution: "@octokit/oauth-app@npm:4.2.1" dependencies: "@octokit/auth-oauth-app": ^5.0.0 "@octokit/auth-oauth-user": ^2.0.0 @@ -12988,7 +13120,7 @@ __metadata: "@types/aws-lambda": ^8.10.83 fromentries: ^1.3.1 universal-user-agent: ^6.0.0 - checksum: 6cf5638d27e589daa577653177f2b135c0c346c8f74cc420d9fd0dc0f559a84040073eee147bd555a55bb5756bd0940e6dc4c3a6b3a508a818e3d5bee3837095 + checksum: 0f5d4036b027c6611147e5669e3fed0319d486149587c9e408751fd6cf1b4bd9b29b4acd00d51feb33dc1d146bc433c6e5fae96b065804c8f0dc3a5718a42dcf languageName: node linkType: hard @@ -13060,17 +13192,6 @@ __metadata: languageName: node linkType: hard -"@octokit/plugin-paginate-rest@npm:^2.6.2": - version: 2.7.0 - resolution: "@octokit/plugin-paginate-rest@npm:2.7.0" - dependencies: - "@octokit/types": ^6.0.1 - peerDependencies: - "@octokit/core": ">=2" - checksum: 68a61e6acb07965a5bd8be5302aeaa46d8e9038e65fa047a85f834fc25c4773f085a878e73eac79c072cb0ace7e4e5187c8549ab6c6d749e620e0f341ee83835 - languageName: node - linkType: hard - "@octokit/plugin-paginate-rest@npm:^3.0.0": version: 3.0.0 resolution: "@octokit/plugin-paginate-rest@npm:3.0.0" @@ -13104,7 +13225,7 @@ __metadata: languageName: node linkType: hard -"@octokit/plugin-request-log@npm:^1.0.2, @octokit/plugin-request-log@npm:^1.0.4": +"@octokit/plugin-request-log@npm:^1.0.4": version: 1.0.4 resolution: "@octokit/plugin-request-log@npm:1.0.4" peerDependencies: @@ -13113,18 +13234,6 @@ __metadata: languageName: node linkType: hard -"@octokit/plugin-rest-endpoint-methods@npm:5.3.1": - version: 5.3.1 - resolution: "@octokit/plugin-rest-endpoint-methods@npm:5.3.1" - dependencies: - "@octokit/types": ^6.16.2 - deprecation: ^2.3.1 - peerDependencies: - "@octokit/core": ">=3" - checksum: 7bc7e294dd66af4b2692ce93d28544f2c3473b4fbe5d935cbe6f7765339e5a83bb12977a403af5d093e8fd038fa707bfd68f81b9d38d4038391de64be73d003c - languageName: node - linkType: hard - "@octokit/plugin-rest-endpoint-methods@npm:^6.0.0": version: 6.7.0 resolution: "@octokit/plugin-rest-endpoint-methods@npm:6.7.0" @@ -13193,7 +13302,7 @@ __metadata: languageName: node linkType: hard -"@octokit/request@npm:^5.4.12, @octokit/request@npm:^5.4.14, @octokit/request@npm:^5.6.0, @octokit/request@npm:^5.6.3": +"@octokit/request@npm:^5.4.14, @octokit/request@npm:^5.6.3": version: 5.6.3 resolution: "@octokit/request@npm:5.6.3" dependencies: @@ -13221,18 +13330,6 @@ __metadata: languageName: node linkType: hard -"@octokit/rest@npm:^18.5.3": - version: 18.5.6 - resolution: "@octokit/rest@npm:18.5.6" - dependencies: - "@octokit/core": ^3.2.3 - "@octokit/plugin-paginate-rest": ^2.6.2 - "@octokit/plugin-request-log": ^1.0.2 - "@octokit/plugin-rest-endpoint-methods": 5.3.1 - checksum: f8db5a06692515413b0124edec2b1d77b35bac99659d4b7b9df2aee01b6b145d7fd6deed602addc79d69429095f1d2fee627e9230cc108f1a389041ab270cb91 - languageName: node - linkType: hard - "@octokit/rest@npm:^19.0.3": version: 19.0.7 resolution: "@octokit/rest@npm:19.0.7" @@ -13245,16 +13342,7 @@ __metadata: languageName: node linkType: hard -"@octokit/types@npm:^5.0.1": - version: 5.5.0 - resolution: "@octokit/types@npm:5.5.0" - dependencies: - "@types/node": ">= 8" - checksum: f17f37c2b51837680afb313335828013e95618ecd6ba1500fa513f932657b040e9facfdebbf81f4a92789eefe7e170d452de4e7c68ead0ffc23137e9cf98c177 - languageName: node - linkType: hard - -"@octokit/types@npm:^6.0.0, @octokit/types@npm:^6.0.1, @octokit/types@npm:^6.0.3, @octokit/types@npm:^6.10.0, @octokit/types@npm:^6.12.2, @octokit/types@npm:^6.14.2, @octokit/types@npm:^6.16.1, @octokit/types@npm:^6.16.2, @octokit/types@npm:^6.27.1, @octokit/types@npm:^6.39.0, @octokit/types@npm:^6.8.2": +"@octokit/types@npm:^6.0.1, @octokit/types@npm:^6.0.3, @octokit/types@npm:^6.10.0, @octokit/types@npm:^6.12.2, @octokit/types@npm:^6.16.1, @octokit/types@npm:^6.27.1, @octokit/types@npm:^6.39.0, @octokit/types@npm:^6.8.2": version: 6.41.0 resolution: "@octokit/types@npm:6.41.0" dependencies: @@ -13640,7 +13728,7 @@ __metadata: languageName: node linkType: hard -"@rjsf/material-ui-v5@npm:@rjsf/material-ui@5.6.0": +"@rjsf/material-ui-v5@npm:@rjsf/material-ui@5.6.0, @rjsf/material-ui@npm:5.6.0": version: 5.6.0 resolution: "@rjsf/material-ui@npm:5.6.0" peerDependencies: @@ -13695,14 +13783,14 @@ __metadata: linkType: hard "@roadiehq/backstage-plugin-buildkite@npm:^2.0.8": - version: 2.1.8 - resolution: "@roadiehq/backstage-plugin-buildkite@npm:2.1.8" + version: 2.1.9 + resolution: "@roadiehq/backstage-plugin-buildkite@npm:2.1.9" dependencies: - "@backstage/catalog-model": ^1.2.1 - "@backstage/core-components": ^0.12.5 - "@backstage/core-plugin-api": ^1.5.0 - "@backstage/plugin-catalog-react": ^1.4.0 - "@backstage/theme": ^0.2.18 + "@backstage/catalog-model": ^1.3.0 + "@backstage/core-components": ^0.13.0 + "@backstage/core-plugin-api": ^1.5.1 + "@backstage/plugin-catalog-react": ^1.5.0 + "@backstage/theme": ^0.2.19 "@material-ui/core": ^4.12.1 "@material-ui/icons": ^4.11.2 "@material-ui/lab": 4.0.0-alpha.57 @@ -13714,26 +13802,26 @@ __metadata: react-dom: ^16.13.1 || ^17.0.0 react-router: 6.0.0-beta.0 || ^6.3.0 react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: f35f5bb78cb415a894532e5af5879d47d6b61c2f52bc6f4274fde46bc7bba2bca974845a802fdd361591002d048b8f14a4ce4aee1b6a2d70df531b8bb60ae447 + checksum: e7218a5c1abe34eac99840da194159ba9b779f9a447050f6e793dd38c104e502fc8d67e4986dd4d14fbe847d841c124e2029c86735411c25842de072d16b2033 languageName: node linkType: hard "@roadiehq/backstage-plugin-github-insights@npm:^2.0.5": - version: 2.3.9 - resolution: "@roadiehq/backstage-plugin-github-insights@npm:2.3.9" + version: 2.3.11 + resolution: "@roadiehq/backstage-plugin-github-insights@npm:2.3.11" dependencies: - "@backstage/catalog-model": ^1.2.1 - "@backstage/core-components": ^0.12.5 - "@backstage/core-plugin-api": ^1.5.0 - "@backstage/integration-react": ^1.1.11 - "@backstage/plugin-catalog-react": ^1.4.0 - "@backstage/theme": ^0.2.18 + "@backstage/catalog-model": ^1.3.0 + "@backstage/core-components": ^0.13.0 + "@backstage/core-plugin-api": ^1.5.1 + "@backstage/integration-react": ^1.1.12 + "@backstage/plugin-catalog-react": ^1.5.0 + "@backstage/theme": ^0.2.19 "@date-io/core": 2.10.7 "@material-ui/core": ^4.11.0 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.45 - "@octokit/rest": ^18.5.3 - "@octokit/types": ^6.14.2 + "@octokit/rest": ^19.0.3 + "@octokit/types": ^9.0.0 history: ^5.0.0 immer: 9.0.7 react-use: ^17.2.4 @@ -13742,24 +13830,24 @@ __metadata: react: ^16.13.1 || ^17.0.0 react-dom: ^16.13.1 || ^17.0.0 react-router: 6.0.0-beta.0 || ^6.3.0 - checksum: 49b95a6724cb1126686dc29fc6d949583209dc47cc299c30a84fa5f9ac951bd74bb15901110856ba410e86dd75027562277ce5a9456d5c07557a67ef04bb9d7f + checksum: 175b8b1f7e307fe5e06c3caa2845cee45840e64dfb0fd8a4a7e44f6bfa45a4c0ecc07998ec4239ca39246c073ae55bc4541650b0bb1e43d2ee3441efbedfe3cd languageName: node linkType: hard "@roadiehq/backstage-plugin-github-pull-requests@npm:^2.2.7": - version: 2.5.7 - resolution: "@roadiehq/backstage-plugin-github-pull-requests@npm:2.5.7" + version: 2.5.9 + resolution: "@roadiehq/backstage-plugin-github-pull-requests@npm:2.5.9" dependencies: - "@backstage/catalog-model": ^1.2.1 - "@backstage/core-components": ^0.12.5 - "@backstage/core-plugin-api": ^1.5.0 - "@backstage/plugin-catalog-react": ^1.4.0 - "@backstage/plugin-home": ^0.4.32 + "@backstage/catalog-model": ^1.3.0 + "@backstage/core-components": ^0.13.0 + "@backstage/core-plugin-api": ^1.5.1 + "@backstage/plugin-catalog-react": ^1.5.0 + "@backstage/plugin-home": ^0.5.1 "@material-ui/core": ^4.11.0 "@material-ui/icons": ^4.9.1 "@material-ui/lab": ^4.0.0-alpha.60 - "@octokit/rest": ^18.5.3 - "@octokit/types": ^5.0.1 + "@octokit/rest": ^19.0.3 + "@octokit/types": ^9.0.0 "@types/node-fetch": ^2.5.7 history: ^5.0.0 lodash: ^4.17.21 @@ -13771,19 +13859,19 @@ __metadata: react: ^16.13.1 || ^17.0.0 react-dom: ^16.13.1 || ^17.0.0 react-router: 6.0.0-beta.0 || ^6.3.0 - checksum: 325d448ea877da7dbc0a9604cd20f3f6cd74634314cd74c22d1853f0eb6b8550190616c1817a35f35e5e3762f41d7d375cea58aa77163bbfe82e6df621fa3f38 + checksum: 5a60f2c67c095a0fbf081b4097e0dfd4d6c22f59514e66800eba8460ef32ee43cf1eb7105a36a56f7b63d8ac44f5343f7e4ec66279ba2009945b828e6698e00e languageName: node linkType: hard "@roadiehq/backstage-plugin-travis-ci@npm:^2.0.5": - version: 2.1.8 - resolution: "@roadiehq/backstage-plugin-travis-ci@npm:2.1.8" + version: 2.1.9 + resolution: "@roadiehq/backstage-plugin-travis-ci@npm:2.1.9" dependencies: - "@backstage/catalog-model": ^1.2.1 - "@backstage/core-components": ^0.12.5 - "@backstage/core-plugin-api": ^1.5.0 - "@backstage/plugin-catalog-react": ^1.4.0 - "@backstage/theme": ^0.2.18 + "@backstage/catalog-model": ^1.3.0 + "@backstage/core-components": ^0.13.0 + "@backstage/core-plugin-api": ^1.5.1 + "@backstage/plugin-catalog-react": ^1.5.0 + "@backstage/theme": ^0.2.19 "@material-ui/core": ^4.11.3 "@material-ui/icons": ^4.11.2 "@material-ui/lab": 4.0.0-alpha.57 @@ -13797,7 +13885,7 @@ __metadata: react-dom: ^16.13.1 || ^17.0.0 react-router: 6.0.0-beta.0 || ^6.3.0 react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: b135750b1fbf6f74743dd9142c2fcdec00379633ffd1b3793649eeea9ef6b015165da0dcb85f5442294364794c77592ef8ec1e83ada9f8bbb66ac394729a6f1a + checksum: 94b2f7ec47e026ac0e97fb00291b592826c0a3ef6444ea427b4d2e10eab4dfdb2d8f0e9461526bbad5351459ded6ac6e814aca5a0947d4b628f1344f4d3646a4 languageName: node linkType: hard @@ -14313,337 +14401,337 @@ __metadata: languageName: node linkType: hard -"@swagger-api/apidom-ast@npm:^0.69.0": - version: 0.69.0 - resolution: "@swagger-api/apidom-ast@npm:0.69.0" +"@swagger-api/apidom-ast@npm:^0.69.3": + version: 0.69.3 + resolution: "@swagger-api/apidom-ast@npm:0.69.3" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 + "@types/ramda": =0.29.0 + ramda: =0.29.0 + ramda-adjunct: =4.0.0 stampit: =4.3.2 unraw: =2.0.1 - checksum: 59625e7f3543766d901227d9afec0ebce0cc1368cc63d22ad5f348a9da0b3777ea83acce7eb0eecdbe6210022f3bf0fafdb46d59b0e90d630ad55c428ede14a2 + checksum: 5ca1609598694ccd295f3c80316bf54fa73ade3d38c5db8c3d00a5d6300c98d9a585f3f8c12c6935ec32fc70d08d53cdee4db59896a3874119d8cb85d43cc662 languageName: node linkType: hard -"@swagger-api/apidom-core@npm:>=0.69.2 <1.0.0, @swagger-api/apidom-core@npm:^0.69.2": - version: 0.69.2 - resolution: "@swagger-api/apidom-core@npm:0.69.2" +"@swagger-api/apidom-core@npm:>=0.69.3 <1.0.0, @swagger-api/apidom-core@npm:^0.69.3": + version: 0.69.3 + resolution: "@swagger-api/apidom-core@npm:0.69.3" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-ast": ^0.69.0 - "@types/ramda": =0.28.23 + "@swagger-api/apidom-ast": ^0.69.3 + "@types/ramda": =0.29.0 minim: =0.23.8 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 + ramda: =0.29.0 + ramda-adjunct: =4.0.0 short-unique-id: =4.4.4 stampit: =4.3.2 - checksum: c7820c1fb7e2e790796f5b124054f48f2153e0480f949a8baa3bfd7a507ae63da0303c252573f76a30844c9d8acc50bd6a29a7139f36ba57d7d582c7ca8eb29f + checksum: 2063c7822abb57176c379c3797c7dddeab673deaf0cddf5138ce308893eec2cb7121a45eb16c615e359b6585f0d2166d6345754654a8771b78326eb96d4ccd97 languageName: node linkType: hard -"@swagger-api/apidom-json-pointer@npm:>=0.69.2 <1.0.0, @swagger-api/apidom-json-pointer@npm:^0.69.2": - version: 0.69.2 - resolution: "@swagger-api/apidom-json-pointer@npm:0.69.2" +"@swagger-api/apidom-json-pointer@npm:>=0.69.3 <1.0.0, @swagger-api/apidom-json-pointer@npm:^0.69.3": + version: 0.69.3 + resolution: "@swagger-api/apidom-json-pointer@npm:0.69.3" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.2 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - checksum: 3485f1ed477a4c5b2982b996ab94695612d922da1c57432576936eb1ef22023f399f26fbc7b498d95f269ba37445393ea6f9548e82006483fd33e86c25dcf953 + "@swagger-api/apidom-core": ^0.69.3 + "@types/ramda": =0.29.0 + ramda: =0.29.0 + ramda-adjunct: =4.0.0 + checksum: 2d826944a2a9c9368a4c7723a246dea2a0a8178a19a9e234c762efa5495f9cade14f39fd9fb5e03ba00b7c8d3042ba6c5462c7c56aba511913b79e42e6315172 languageName: node linkType: hard -"@swagger-api/apidom-ns-api-design-systems@npm:^0.69.2": - version: 0.69.2 - resolution: "@swagger-api/apidom-ns-api-design-systems@npm:0.69.2" +"@swagger-api/apidom-ns-api-design-systems@npm:^0.69.3": + version: 0.69.3 + resolution: "@swagger-api/apidom-ns-api-design-systems@npm:0.69.3" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.2 - "@swagger-api/apidom-ns-openapi-3-1": ^0.69.2 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 + "@swagger-api/apidom-core": ^0.69.3 + "@swagger-api/apidom-ns-openapi-3-1": ^0.69.3 + "@types/ramda": =0.29.0 + ramda: =0.29.0 + ramda-adjunct: =4.0.0 stampit: =4.3.2 - checksum: 63dc8eb922bf41896645d09cb012126fd25c59e9d4c82c688b2677080c850ee5917163c84eb27ceffbdb4302eef4c5d9aee8a9dae9c4e28a63956d1fbd0dbf7b + checksum: a84458484698817302257664615f45984878fa1845f6861c0ee045166afcf1e573697ae1d10452b98e4fd4ae183b07a3808388acfa9780c06ff42f1ae7494c01 languageName: node linkType: hard -"@swagger-api/apidom-ns-asyncapi-2@npm:^0.69.2": - version: 0.69.2 - resolution: "@swagger-api/apidom-ns-asyncapi-2@npm:0.69.2" +"@swagger-api/apidom-ns-asyncapi-2@npm:^0.69.3": + version: 0.69.3 + resolution: "@swagger-api/apidom-ns-asyncapi-2@npm:0.69.3" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.2 - "@swagger-api/apidom-ns-json-schema-draft-7": ^0.69.2 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 + "@swagger-api/apidom-core": ^0.69.3 + "@swagger-api/apidom-ns-json-schema-draft-7": ^0.69.3 + "@types/ramda": =0.29.0 + ramda: =0.29.0 + ramda-adjunct: =4.0.0 stampit: =4.3.2 - checksum: 067437e2f020a64824d6726b833e42c48776f1ebbe007552a2bf9659305a11cc1e852aa4860c529e730c792b698e77564cf8688131f6c48c63b0a230c049e030 + checksum: 179a1b031141e958f56e468125a620fc57212939aa38464b775a922183fbaafbda9aaad1a45b38589db5857c6ec41ebc02eb261fe305963030e69dbf18fdb26c languageName: node linkType: hard -"@swagger-api/apidom-ns-json-schema-draft-4@npm:^0.69.2": - version: 0.69.2 - resolution: "@swagger-api/apidom-ns-json-schema-draft-4@npm:0.69.2" +"@swagger-api/apidom-ns-json-schema-draft-4@npm:^0.69.3": + version: 0.69.3 + resolution: "@swagger-api/apidom-ns-json-schema-draft-4@npm:0.69.3" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.2 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 + "@swagger-api/apidom-core": ^0.69.3 + "@types/ramda": =0.29.0 + ramda: =0.29.0 + ramda-adjunct: =4.0.0 stampit: =4.3.2 - checksum: 61d4ed9c69e7f4eeaa57cb56e789453deebc73209ecfaa9630c4ef9b90d54adb52424c877e039da266a80741521d41f3c02fd9792e244b4fec70803439b49070 + checksum: baffa7620cdf3758223c0d23ec9b6adcbf71a3cd1c52a9be89c4508428ed07a237091e45d92d5e32dad677133e989dcc9bf9e14ac31bae39eebb1402051ecc25 languageName: node linkType: hard -"@swagger-api/apidom-ns-json-schema-draft-6@npm:^0.69.2": - version: 0.69.2 - resolution: "@swagger-api/apidom-ns-json-schema-draft-6@npm:0.69.2" +"@swagger-api/apidom-ns-json-schema-draft-6@npm:^0.69.3": + version: 0.69.3 + resolution: "@swagger-api/apidom-ns-json-schema-draft-6@npm:0.69.3" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.2 - "@swagger-api/apidom-ns-json-schema-draft-4": ^0.69.2 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 + "@swagger-api/apidom-core": ^0.69.3 + "@swagger-api/apidom-ns-json-schema-draft-4": ^0.69.3 + "@types/ramda": =0.29.0 + ramda: =0.29.0 + ramda-adjunct: =4.0.0 stampit: =4.3.2 - checksum: fa37e493d6057739b1e18ba6bd21954e559185db1ea4318eed9d30cbe05e4b87c371712fdcd21bd81fccd9b94bdfda99c11f4260386764aaa95e0d8177921a7e + checksum: 08b2ddc052cffd96a3bdd55aa013bb660faa164e8796773ca49af7003f31f160dcb3942ff2e2bc78b592c34cbdce4980f0f4cb52d5ef8d4b0cbc7547f15fa181 languageName: node linkType: hard -"@swagger-api/apidom-ns-json-schema-draft-7@npm:^0.69.2": - version: 0.69.2 - resolution: "@swagger-api/apidom-ns-json-schema-draft-7@npm:0.69.2" +"@swagger-api/apidom-ns-json-schema-draft-7@npm:^0.69.3": + version: 0.69.3 + resolution: "@swagger-api/apidom-ns-json-schema-draft-7@npm:0.69.3" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.2 - "@swagger-api/apidom-ns-json-schema-draft-6": ^0.69.2 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 + "@swagger-api/apidom-core": ^0.69.3 + "@swagger-api/apidom-ns-json-schema-draft-6": ^0.69.3 + "@types/ramda": =0.29.0 + ramda: =0.29.0 + ramda-adjunct: =4.0.0 stampit: =4.3.2 - checksum: f6ae001675eb918aed498c1cc71da735463047c2f5cfadcf33746b663535ed029164a2fc8cafeabb118ab1b00a53bc93a08296f6593688c4225bf2c12b1fa2b5 + checksum: f1f83fc5530847f971cccb7c1295474e6e85c3e089563616b71f13dd0782fbdf9ee36f4a2b72bd661ac027003bdfed970cd5662183e313ce46e7b82881f27131 languageName: node linkType: hard -"@swagger-api/apidom-ns-openapi-3-0@npm:^0.69.2": - version: 0.69.2 - resolution: "@swagger-api/apidom-ns-openapi-3-0@npm:0.69.2" +"@swagger-api/apidom-ns-openapi-3-0@npm:^0.69.3": + version: 0.69.3 + resolution: "@swagger-api/apidom-ns-openapi-3-0@npm:0.69.3" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.2 - "@swagger-api/apidom-ns-json-schema-draft-4": ^0.69.2 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 + "@swagger-api/apidom-core": ^0.69.3 + "@swagger-api/apidom-ns-json-schema-draft-4": ^0.69.3 + "@types/ramda": =0.29.0 + ramda: =0.29.0 + ramda-adjunct: =4.0.0 stampit: =4.3.2 - checksum: d876bde22b46d511ed74d0431d86f6d00e51567647e0d540288ab2965dfd7610189b1fe58f4a7accd9c83daa914ead87af572090daf2e07ef9df65c6c95e7bdd + checksum: e8f054f1b881a084298768db0b9302656782e94ed93a40345e7bfd994bf080c9f04ba9df7f42f70d1ea1127b34e7d212fddb21e8d47fe9932749895293df0ab1 languageName: node linkType: hard -"@swagger-api/apidom-ns-openapi-3-1@npm:>=0.69.2 <1.0.0, @swagger-api/apidom-ns-openapi-3-1@npm:^0.69.2": - version: 0.69.2 - resolution: "@swagger-api/apidom-ns-openapi-3-1@npm:0.69.2" +"@swagger-api/apidom-ns-openapi-3-1@npm:>=0.69.3 <1.0.0, @swagger-api/apidom-ns-openapi-3-1@npm:^0.69.3": + version: 0.69.3 + resolution: "@swagger-api/apidom-ns-openapi-3-1@npm:0.69.3" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.2 - "@swagger-api/apidom-ns-openapi-3-0": ^0.69.2 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 + "@swagger-api/apidom-core": ^0.69.3 + "@swagger-api/apidom-ns-openapi-3-0": ^0.69.3 + "@types/ramda": =0.29.0 + ramda: =0.29.0 + ramda-adjunct: =4.0.0 stampit: =4.3.2 - checksum: 2862f9e7855687a997658d17681cbb89531d2713d49fad9eca972c1fb904769990c019a7082aab1f5750ea9e2e4f108fb62181d1e02e2519b027742a1cd9d02b + checksum: ea781604f6ca11c1e58e7db1f060c334e9402e52e3bb410b30b1d22a08d524a23681b999e9a27e89365c6f4f12a70ee73fc3d113b23c5b0ce78a1900b35caa37 languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-api-design-systems-json@npm:^0.69.2": - version: 0.69.2 - resolution: "@swagger-api/apidom-parser-adapter-api-design-systems-json@npm:0.69.2" +"@swagger-api/apidom-parser-adapter-api-design-systems-json@npm:^0.69.3": + version: 0.69.3 + resolution: "@swagger-api/apidom-parser-adapter-api-design-systems-json@npm:0.69.3" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.2 - "@swagger-api/apidom-ns-api-design-systems": ^0.69.2 - "@swagger-api/apidom-parser-adapter-json": ^0.69.2 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - checksum: 062ad18d3fd402008558854415c725e94d9e1941b2049e40c54cbbdd190a9435c6f105808b7b8c36e0a3f0d8232bc17b2145d32f88957ff01e649aaa03fe2d8e + "@swagger-api/apidom-core": ^0.69.3 + "@swagger-api/apidom-ns-api-design-systems": ^0.69.3 + "@swagger-api/apidom-parser-adapter-json": ^0.69.3 + "@types/ramda": =0.29.0 + ramda: =0.29.0 + ramda-adjunct: =4.0.0 + checksum: cc16a11ec4034af843d7bc0c7af82e783510854816e995c1bfe20815873297ebb2445e2ef8e4f35d3e83e4c5807f616a7c3ee57ba0ecf6d147e6827078f0f123 languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-api-design-systems-yaml@npm:^0.69.2": - version: 0.69.2 - resolution: "@swagger-api/apidom-parser-adapter-api-design-systems-yaml@npm:0.69.2" +"@swagger-api/apidom-parser-adapter-api-design-systems-yaml@npm:^0.69.3": + version: 0.69.3 + resolution: "@swagger-api/apidom-parser-adapter-api-design-systems-yaml@npm:0.69.3" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.2 - "@swagger-api/apidom-ns-api-design-systems": ^0.69.2 - "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.2 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - checksum: 09deb1fe9234780c93d5cae4c25bfbe2b31e0f13726fafeeed3f79120ad3bfcf1a4ca85790b8e2ddd5d0120df4c7cd667b7ff7ba9270f07e66c56316008b90a3 + "@swagger-api/apidom-core": ^0.69.3 + "@swagger-api/apidom-ns-api-design-systems": ^0.69.3 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.3 + "@types/ramda": =0.29.0 + ramda: =0.29.0 + ramda-adjunct: =4.0.0 + checksum: b8268f0a74ef60ce9d8d5e0d061db21b0d7bfcbe4cb55c31cee5d9965bffe8667adaae4ae73e4832c5b12374d49b139ec5d4e6fc758341c5619f5b70487e73bc languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-asyncapi-json-2@npm:^0.69.2": - version: 0.69.2 - resolution: "@swagger-api/apidom-parser-adapter-asyncapi-json-2@npm:0.69.2" +"@swagger-api/apidom-parser-adapter-asyncapi-json-2@npm:^0.69.3": + version: 0.69.3 + resolution: "@swagger-api/apidom-parser-adapter-asyncapi-json-2@npm:0.69.3" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.2 - "@swagger-api/apidom-ns-asyncapi-2": ^0.69.2 - "@swagger-api/apidom-parser-adapter-json": ^0.69.2 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - checksum: 7730bf99d5c57be4b5af56701f376b4b50009e9d6ddb854fd643ea331720e12855834c869a95fca06959971879ebc7227db3f76074b56ea1ee07bb7b14bcb18a + "@swagger-api/apidom-core": ^0.69.3 + "@swagger-api/apidom-ns-asyncapi-2": ^0.69.3 + "@swagger-api/apidom-parser-adapter-json": ^0.69.3 + "@types/ramda": =0.29.0 + ramda: =0.29.0 + ramda-adjunct: =4.0.0 + checksum: ee7763ee32c4fe5896e3adb144c7055f87bfb0173b5e3816a5c8ca8c9963ef02490ba884048378faa350c556541177b2626a9c8dd3a4f618f409c3ade26052a7 languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@npm:^0.69.2": - version: 0.69.2 - resolution: "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@npm:0.69.2" +"@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@npm:^0.69.3": + version: 0.69.3 + resolution: "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@npm:0.69.3" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.2 - "@swagger-api/apidom-ns-asyncapi-2": ^0.69.2 - "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.2 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - checksum: d3de29891320bed19f0a7ab161c73a2bef34cca634119f2c71dd782f41cd7086322f5f8e80a337e07585cd723d6cf1be8b1a7e7fe98154afb79fd88027b5b44e + "@swagger-api/apidom-core": ^0.69.3 + "@swagger-api/apidom-ns-asyncapi-2": ^0.69.3 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.3 + "@types/ramda": =0.29.0 + ramda: =0.29.0 + ramda-adjunct: =4.0.0 + checksum: 85d86f0ce64177972985c774b7dd9083ca3317a6697d15f0f5be842ad0041a2ad783ea22b9999d2366b5b6137f43adf6dd20e4b1f56d2d1c315086c73a25ca12 languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-json@npm:^0.69.2": - version: 0.69.2 - resolution: "@swagger-api/apidom-parser-adapter-json@npm:0.69.2" +"@swagger-api/apidom-parser-adapter-json@npm:^0.69.3": + version: 0.69.3 + resolution: "@swagger-api/apidom-parser-adapter-json@npm:0.69.3" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-ast": ^0.69.0 - "@swagger-api/apidom-core": ^0.69.2 - "@types/ramda": =0.28.23 + "@swagger-api/apidom-ast": ^0.69.3 + "@swagger-api/apidom-core": ^0.69.3 + "@types/ramda": =0.29.0 node-gyp: latest - ramda: =0.28.0 - ramda-adjunct: =3.4.0 + ramda: =0.29.0 + ramda-adjunct: =4.0.0 stampit: =4.3.2 tree-sitter: =0.20.1 tree-sitter-json: =0.20.0 web-tree-sitter: =0.20.7 - checksum: 30fbb4fd5f2c63440b4d64577997c33c5cc9d881a9eb07a08704fcfc5171a75e7ec9e9364c7de8aac829d08bf2e48be5e7803f22f3fdca72fa58e56bd90aaed6 + checksum: 50515c2de8cd7a2a34c38410e42d6de68ff872104cd4729efd7ccb1bdd2d0bb452bf7c419e57ee968c32cdf4a9fb29b8a4baa188e986f8032807fc3bce9d6511 languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-openapi-json-3-0@npm:^0.69.2": - version: 0.69.2 - resolution: "@swagger-api/apidom-parser-adapter-openapi-json-3-0@npm:0.69.2" +"@swagger-api/apidom-parser-adapter-openapi-json-3-0@npm:^0.69.3": + version: 0.69.3 + resolution: "@swagger-api/apidom-parser-adapter-openapi-json-3-0@npm:0.69.3" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.2 - "@swagger-api/apidom-ns-openapi-3-0": ^0.69.2 - "@swagger-api/apidom-parser-adapter-json": ^0.69.2 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - checksum: 7c030340a7f9a24091dd0542377e5ea95b6c10967f9791ea065456301ac3766eb373ee402ed10766c4c215801308c7274f0dce925d4cab4b38b02bd3e2d58ed3 + "@swagger-api/apidom-core": ^0.69.3 + "@swagger-api/apidom-ns-openapi-3-0": ^0.69.3 + "@swagger-api/apidom-parser-adapter-json": ^0.69.3 + "@types/ramda": =0.29.0 + ramda: =0.29.0 + ramda-adjunct: =4.0.0 + checksum: 7f754fffc769b47919ff4d100683c04715b556007286812f3b6011b8b10e94fbde6b6ce99c198b4fd947f73a96b14ce8484c5b2549d37f500d1e53a8680d0b33 languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-openapi-json-3-1@npm:^0.69.2": - version: 0.69.2 - resolution: "@swagger-api/apidom-parser-adapter-openapi-json-3-1@npm:0.69.2" +"@swagger-api/apidom-parser-adapter-openapi-json-3-1@npm:^0.69.3": + version: 0.69.3 + resolution: "@swagger-api/apidom-parser-adapter-openapi-json-3-1@npm:0.69.3" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.2 - "@swagger-api/apidom-ns-openapi-3-1": ^0.69.2 - "@swagger-api/apidom-parser-adapter-json": ^0.69.2 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - checksum: b7535677eae57c5e4b6eadb834b17606e3bd4702e3753bdf4daaa675fbd1609691f3a76c355f6d8ad8e58a82d7f2e6089d0cff59edc3de7e5a505abf81f568f4 + "@swagger-api/apidom-core": ^0.69.3 + "@swagger-api/apidom-ns-openapi-3-1": ^0.69.3 + "@swagger-api/apidom-parser-adapter-json": ^0.69.3 + "@types/ramda": =0.29.0 + ramda: =0.29.0 + ramda-adjunct: =4.0.0 + checksum: e1aca29a6130b32cdd36e7a7f06938e7c1fd6276cdad5fbfb334b21158af64d67e81d54b14b8417217bfdba895fa4f40eb3d4deee1c2a6f7448bbe2dfde0151e languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@npm:^0.69.2": - version: 0.69.2 - resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@npm:0.69.2" +"@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@npm:^0.69.3": + version: 0.69.3 + resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@npm:0.69.3" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.2 - "@swagger-api/apidom-ns-openapi-3-0": ^0.69.2 - "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.2 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - checksum: f8129919930c6f79e7ff16a7eef0f58d1f585d4df3c69c52cebd2fb21fdde58be0192ac4a1a16ba4e0efc6e5aee4adcd34c63c726dc71b88f154b8ce785fcd2b + "@swagger-api/apidom-core": ^0.69.3 + "@swagger-api/apidom-ns-openapi-3-0": ^0.69.3 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.3 + "@types/ramda": =0.29.0 + ramda: =0.29.0 + ramda-adjunct: =4.0.0 + checksum: 4df305b5f27564862a6dbf022b3fa3442b58079bad31b0f4cd4f5038fedb14bb1a2381b033b5f5080cbe13837b3295d90f3803c0733bcc8d9b86cb43a9e95165 languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@npm:^0.69.2": - version: 0.69.2 - resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@npm:0.69.2" +"@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@npm:^0.69.3": + version: 0.69.3 + resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@npm:0.69.3" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.2 - "@swagger-api/apidom-ns-openapi-3-1": ^0.69.2 - "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.2 - "@types/ramda": =0.28.23 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 - checksum: fc9772e9e6028a67c089806207a289ac585b5c6ab4645377467fbf3d5c6f6f01d2ccddeb9324e5faca7495a2efb09f8d04570bf22acde58cecca682edc75d420 + "@swagger-api/apidom-core": ^0.69.3 + "@swagger-api/apidom-ns-openapi-3-1": ^0.69.3 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.3 + "@types/ramda": =0.29.0 + ramda: =0.29.0 + ramda-adjunct: =4.0.0 + checksum: 4a1a995854b7634114e6013c85e802d192199dfaa1a2c0b1011e77fdd8f9e9f174b3b384e9e2e63fac939228c389ee6628849c243f2ec3449ca6caa49c47c13f languageName: node linkType: hard -"@swagger-api/apidom-parser-adapter-yaml-1-2@npm:^0.69.2": - version: 0.69.2 - resolution: "@swagger-api/apidom-parser-adapter-yaml-1-2@npm:0.69.2" +"@swagger-api/apidom-parser-adapter-yaml-1-2@npm:^0.69.3": + version: 0.69.3 + resolution: "@swagger-api/apidom-parser-adapter-yaml-1-2@npm:0.69.3" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-ast": ^0.69.0 - "@swagger-api/apidom-core": ^0.69.2 - "@types/ramda": =0.28.23 + "@swagger-api/apidom-ast": ^0.69.3 + "@swagger-api/apidom-core": ^0.69.3 + "@types/ramda": =0.29.0 node-gyp: latest - ramda: =0.28.0 - ramda-adjunct: =3.4.0 + ramda: =0.29.0 + ramda-adjunct: =4.0.0 stampit: =4.3.2 tree-sitter: =0.20.1 tree-sitter-yaml: =0.5.0 web-tree-sitter: =0.20.7 - checksum: 9d4fb2638e84e756ce01b9115956885c6f00ecdfe745af105ba4328b6092b4073cf1dcbc7cf33e420a5c4191ce7a4173fc8b0abc7dcb22d8af4a10ac62818ec6 + checksum: 4693c8b429bb1ef102286a7c567c5945e03bb81cde98ed37973a80d577c1b50f23f9029b5d0046ab1eabacd2efb7f680aeb920eed324f802bff1fd0e09631051 languageName: node linkType: hard -"@swagger-api/apidom-reference@npm:>=0.69.2 <1.0.0": - version: 0.69.2 - resolution: "@swagger-api/apidom-reference@npm:0.69.2" +"@swagger-api/apidom-reference@npm:>=0.69.3 <1.0.0": + version: 0.69.3 + resolution: "@swagger-api/apidom-reference@npm:0.69.3" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.2 - "@swagger-api/apidom-json-pointer": ^0.69.2 - "@swagger-api/apidom-ns-asyncapi-2": ^0.69.2 - "@swagger-api/apidom-ns-openapi-3-0": ^0.69.2 - "@swagger-api/apidom-ns-openapi-3-1": ^0.69.2 - "@swagger-api/apidom-parser-adapter-api-design-systems-json": ^0.69.2 - "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": ^0.69.2 - "@swagger-api/apidom-parser-adapter-asyncapi-json-2": ^0.69.2 - "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": ^0.69.2 - "@swagger-api/apidom-parser-adapter-json": ^0.69.2 - "@swagger-api/apidom-parser-adapter-openapi-json-3-0": ^0.69.2 - "@swagger-api/apidom-parser-adapter-openapi-json-3-1": ^0.69.2 - "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": ^0.69.2 - "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": ^0.69.2 - "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.2 - "@types/ramda": =0.28.23 - axios: =1.3.4 + "@swagger-api/apidom-core": ^0.69.3 + "@swagger-api/apidom-json-pointer": ^0.69.3 + "@swagger-api/apidom-ns-asyncapi-2": ^0.69.3 + "@swagger-api/apidom-ns-openapi-3-0": ^0.69.3 + "@swagger-api/apidom-ns-openapi-3-1": ^0.69.3 + "@swagger-api/apidom-parser-adapter-api-design-systems-json": ^0.69.3 + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": ^0.69.3 + "@swagger-api/apidom-parser-adapter-asyncapi-json-2": ^0.69.3 + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": ^0.69.3 + "@swagger-api/apidom-parser-adapter-json": ^0.69.3 + "@swagger-api/apidom-parser-adapter-openapi-json-3-0": ^0.69.3 + "@swagger-api/apidom-parser-adapter-openapi-json-3-1": ^0.69.3 + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": ^0.69.3 + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": ^0.69.3 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.69.3 + "@types/ramda": =0.29.0 + axios: =1.3.6 minimatch: =7.4.3 process: =0.11.10 - ramda: =0.28.0 - ramda-adjunct: =3.4.0 + ramda: =0.29.0 + ramda-adjunct: =4.0.0 stampit: =4.3.2 dependenciesMeta: "@swagger-api/apidom-json-pointer": @@ -14674,7 +14762,7 @@ __metadata: optional: true "@swagger-api/apidom-parser-adapter-yaml-1-2": optional: true - checksum: 92bda2e2d905a184f005a9be51cbe02cbaa3791a349d9fc956bf24b3d42b9215a0d6ff036929a5104cb0402713e7b12760a4ceeda23b89e3936fbd799c8515f0 + checksum: 7fcc0a2dba562f8c937e4895f2f0337346ce71147622388fff34480fede4cf04448de94c9ace5be536cb19f6741a52047a9da18ab1ce3abfb3229cebe49f3417 languageName: node linkType: hard @@ -15568,13 +15656,14 @@ __metadata: linkType: hard "@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.30, @types/express-serve-static-core@npm:^4.17.33, @types/express-serve-static-core@npm:^4.17.5": - version: 4.17.33 - resolution: "@types/express-serve-static-core@npm:4.17.33" + version: 4.17.34 + resolution: "@types/express-serve-static-core@npm:4.17.34" dependencies: "@types/node": "*" "@types/qs": "*" "@types/range-parser": "*" - checksum: dce580d16b85f207445af9d4053d66942b27d0c72e86153089fa00feee3e96ae336b7bedb31ed4eea9e553c99d6dd356ed6e0928f135375d9f862a1a8015adf2 + "@types/send": "*" + checksum: 3b5242e7d6cfecca5300635fd2af0f63aca3a92754da79a4a355c4d85b57099aa2cabb1c8557fc38a8a9e6f0be996339140ad017e5be405ea1b877a8294a136d languageName: node linkType: hard @@ -15719,11 +15808,11 @@ __metadata: linkType: hard "@types/http-proxy@npm:*, @types/http-proxy@npm:^1.17.4, @types/http-proxy@npm:^1.17.8": - version: 1.17.10 - resolution: "@types/http-proxy@npm:1.17.10" + version: 1.17.11 + resolution: "@types/http-proxy@npm:1.17.11" dependencies: "@types/node": "*" - checksum: 8fabee5d01715e338f426715325121d6c4b7a9694dee716ab61c874e0aaccee9a0fff7ccc3c9d7e37a8feeaab7c783c17aaa9943efbc8849c5e79ecd7eaf02ab + checksum: 38ef4f8c91c7a5b664cf6dd4d90de7863f88549a9f8ef997f2f1184e4f8cf2e7b9b63c04f0b7b962f34a09983073a31a9856de5aae5159b2ddbb905a4c44dc9f languageName: node linkType: hard @@ -16123,10 +16212,10 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:>= 8, @types/node@npm:>=12.12.47, @types/node@npm:>=13.7.0, @types/node@npm:^18.11.17": - version: 18.15.11 - resolution: "@types/node@npm:18.15.11" - checksum: 977b4ad04708897ff0eb049ecf82246d210939c82461922d20f7d2dcfd81bbc661582ba3af28869210f7e8b1934529dcd46bff7d448551400f9d48b9d3bddec3 +"@types/node@npm:*, @types/node@npm:>=12.12.47, @types/node@npm:>=13.7.0, @types/node@npm:^18.11.17": + version: 18.16.3 + resolution: "@types/node@npm:18.16.3" + checksum: 816b39d45b05ebdc6f362b630970df3f6d82f71d418a2555353522f4eeeb078fa201de5299f02c09a09faa975e43b2745fe19c263d44069f87ddf37d6c37b717 languageName: node linkType: hard @@ -16145,9 +16234,9 @@ __metadata: linkType: hard "@types/node@npm:^14.14.31": - version: 14.18.42 - resolution: "@types/node@npm:14.18.42" - checksum: 1c92f04a482ab54a21342b3911fc6f0093f04d3314197bc0e2f20012e9efc929c44e2ea41990b9b3cde420d7859c9ed716733f3e65c0cd6c2910a55799465f6b + version: 14.18.43 + resolution: "@types/node@npm:14.18.43" + checksum: 3ef43eda265c346597bc5c8329605255550f7a92300a76e9e3c48e07fd685b4a48d47465997bf6f1a68b235c7339e6e583d73515769efcad70e4f8f4c7f47fd4 languageName: node linkType: hard @@ -16159,9 +16248,9 @@ __metadata: linkType: hard "@types/node@npm:^16.0.0, @types/node@npm:^16.11.26, @types/node@npm:^16.9.2": - version: 16.18.23 - resolution: "@types/node@npm:16.18.23" - checksum: 00e51db28fc7a182747f37215b3f25400b1c7a8525e09fa14e55be5798891a118ebf636a49d3197335a3580fcb8222fd4ecc20c2ccff69f1c0d233fc5697465d + version: 16.18.25 + resolution: "@types/node@npm:16.18.25" + checksum: 181760ad6b54fcc498dfeb249e98bbf0be51d7c35e92e760e1a82004fa42b86e8c33a8f8dd7743b5ef872bda0753d9e6a5b8e3f0aed63e9eb79b4e65760c1fbe languageName: node linkType: hard @@ -16331,12 +16420,12 @@ __metadata: languageName: node linkType: hard -"@types/ramda@npm:=0.28.23": - version: 0.28.23 - resolution: "@types/ramda@npm:0.28.23" +"@types/ramda@npm:=0.29.0": + version: 0.29.0 + resolution: "@types/ramda@npm:0.29.0" dependencies: - ts-toolbelt: ^6.15.1 - checksum: 61d7416c0f4f189c6524e093c7546ca2f159553e54d7933836d46aac1332611aa7b02fd8c8bfa98c0865f262fd9e99e06e3d9538deba0bab1f6153cbcf841160 + types-ramda: ^0.29.1 + checksum: f133675d7cf0df801de3d9790bc04af76e489179c31f21f6bbd8939dd659cefd878cce77f7abba41b04c6986c25008e3dd55c3250315e5232b5bccac213e5da9 languageName: node linkType: hard @@ -16591,6 +16680,16 @@ __metadata: languageName: node linkType: hard +"@types/send@npm:*": + version: 0.17.1 + resolution: "@types/send@npm:0.17.1" + dependencies: + "@types/mime": ^1 + "@types/node": "*" + checksum: 10b620a5960058ef009afbc17686f680d6486277c62f640845381ec4baa0ea683fdd77c3afea4803daf5fcddd3fb2972c8aa32e078939f1d4e96f83195c89793 + languageName: node + linkType: hard + "@types/serve-handler@npm:^6.1.0": version: 6.1.1 resolution: "@types/serve-handler@npm:6.1.1" @@ -17198,9 +17297,9 @@ __metadata: languageName: node linkType: hard -"@uiw/codemirror-extensions-basic-setup@npm:4.19.11": - version: 4.19.11 - resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.19.11" +"@uiw/codemirror-extensions-basic-setup@npm:4.19.16": + version: 4.19.16 + resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.19.16" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/commands": ^6.0.0 @@ -17217,19 +17316,19 @@ __metadata: "@codemirror/search": ">=6.0.0" "@codemirror/state": ">=6.0.0" "@codemirror/view": ">=6.0.0" - checksum: c7bc3498ace8efa29492674ed94feb3c6d941f389302696136c1509ab5e3b55e590ca9887a7883b7e4972cee921d7120d9af7f78354094ccb341a72656ad8ac9 + checksum: e5263f19e1ca838ac9cc7c0ab03d4d1ca2453ff306e17d354b0772954c14cfaa146b0a00ed2d5690f5687aeafdd5f2f5587efc573ffb5714bd77f6af46444f74 languageName: node linkType: hard "@uiw/react-codemirror@npm:^4.9.3": - version: 4.19.11 - resolution: "@uiw/react-codemirror@npm:4.19.11" + version: 4.19.16 + resolution: "@uiw/react-codemirror@npm:4.19.16" dependencies: "@babel/runtime": ^7.18.6 "@codemirror/commands": ^6.1.0 "@codemirror/state": ^6.1.1 "@codemirror/theme-one-dark": ^6.0.0 - "@uiw/codemirror-extensions-basic-setup": 4.19.11 + "@uiw/codemirror-extensions-basic-setup": 4.19.16 codemirror: ^6.0.0 peerDependencies: "@babel/runtime": ">=7.11.0" @@ -17239,7 +17338,7 @@ __metadata: codemirror: ">=6.0.0" react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 5ff4c7d021b565bc578d0fce2f4b6761b8d55024fa3190288435d287028cc8770b8fe5b4b103a64c452eaf26ab88c8bfd25819782a4b4d7dcfd4361765e307ff + checksum: 0625a544eb53ff1236e75dc4c81400285bf4dfdacd5c9c71129066f7decb7e902c97f756c6edc854d44b586ad4b0d3d303df065429532df9085c5f6b1adbad80 languageName: node linkType: hard @@ -18387,14 +18486,14 @@ __metadata: languageName: node linkType: hard -"axios@npm:=1.3.4": - version: 1.3.4 - resolution: "axios@npm:1.3.4" +"axios@npm:=1.3.6": + version: 1.3.6 + resolution: "axios@npm:1.3.6" dependencies: follow-redirects: ^1.15.0 form-data: ^4.0.0 proxy-from-env: ^1.1.0 - checksum: 7440edefcf8498bc3cdf39de00443e8101f249972c83b739c6e880d9d669fea9486372dbe8739e88b3bf8bb1ad15f6106693f206f078f4516fe8fd47b1c3093c + checksum: c90497ebf738723654a6e80147dc294186ad9d7b08f95f5a22fd48f826c7e06a576229b8dff3137195ca627349a4312e00fa78e4f1c499250b9860596adef44a languageName: node linkType: hard @@ -18731,7 +18830,7 @@ __metadata: languageName: node linkType: hard -"before-after-hook@npm:^2.1.0, before-after-hook@npm:^2.2.0": +"before-after-hook@npm:^2.2.0": version: 2.2.2 resolution: "before-after-hook@npm:2.2.2" checksum: dc2e1ffe389e5afbef2a46790b1b5a50247ed57aba67649cfa9ec2552d248cc9278f222e72fb5a8ff59bbb39d78fbaa97e7234ead0c6b5e8418b67a8644ce207 @@ -22077,10 +22176,10 @@ __metadata: languageName: node linkType: hard -"dompurify@npm:=3.0.1": - version: 3.0.1 - resolution: "dompurify@npm:3.0.1" - checksum: 19447e6d96415a8ad3a67bc9c76ffe671eb31cf7c1e0a538cbe5037c8b8b03afe144d64cf96c6e0f7fe63b83721a33b5b913394d20a85e96550e42e31f7c086b +"dompurify@npm:=3.0.2": + version: 3.0.2 + resolution: "dompurify@npm:3.0.2" + checksum: 768c3bb2f139ce1e1a53faf81aae6abe03e24d0b043e2fda0b70e91ef15bb1df854a35e82d8c519adfe5b81c24bfdad3e0b1085534bfbf427137cb742406c47f languageName: node linkType: hard @@ -22768,31 +22867,31 @@ __metadata: linkType: hard "esbuild@npm:^0.17.0": - version: 0.17.15 - resolution: "esbuild@npm:0.17.15" + version: 0.17.18 + resolution: "esbuild@npm:0.17.18" dependencies: - "@esbuild/android-arm": 0.17.15 - "@esbuild/android-arm64": 0.17.15 - "@esbuild/android-x64": 0.17.15 - "@esbuild/darwin-arm64": 0.17.15 - "@esbuild/darwin-x64": 0.17.15 - "@esbuild/freebsd-arm64": 0.17.15 - "@esbuild/freebsd-x64": 0.17.15 - "@esbuild/linux-arm": 0.17.15 - "@esbuild/linux-arm64": 0.17.15 - "@esbuild/linux-ia32": 0.17.15 - "@esbuild/linux-loong64": 0.17.15 - "@esbuild/linux-mips64el": 0.17.15 - "@esbuild/linux-ppc64": 0.17.15 - "@esbuild/linux-riscv64": 0.17.15 - "@esbuild/linux-s390x": 0.17.15 - "@esbuild/linux-x64": 0.17.15 - "@esbuild/netbsd-x64": 0.17.15 - "@esbuild/openbsd-x64": 0.17.15 - "@esbuild/sunos-x64": 0.17.15 - "@esbuild/win32-arm64": 0.17.15 - "@esbuild/win32-ia32": 0.17.15 - "@esbuild/win32-x64": 0.17.15 + "@esbuild/android-arm": 0.17.18 + "@esbuild/android-arm64": 0.17.18 + "@esbuild/android-x64": 0.17.18 + "@esbuild/darwin-arm64": 0.17.18 + "@esbuild/darwin-x64": 0.17.18 + "@esbuild/freebsd-arm64": 0.17.18 + "@esbuild/freebsd-x64": 0.17.18 + "@esbuild/linux-arm": 0.17.18 + "@esbuild/linux-arm64": 0.17.18 + "@esbuild/linux-ia32": 0.17.18 + "@esbuild/linux-loong64": 0.17.18 + "@esbuild/linux-mips64el": 0.17.18 + "@esbuild/linux-ppc64": 0.17.18 + "@esbuild/linux-riscv64": 0.17.18 + "@esbuild/linux-s390x": 0.17.18 + "@esbuild/linux-x64": 0.17.18 + "@esbuild/netbsd-x64": 0.17.18 + "@esbuild/openbsd-x64": 0.17.18 + "@esbuild/sunos-x64": 0.17.18 + "@esbuild/win32-arm64": 0.17.18 + "@esbuild/win32-ia32": 0.17.18 + "@esbuild/win32-x64": 0.17.18 dependenciesMeta: "@esbuild/android-arm": optional: true @@ -22840,7 +22939,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: 4e3640d7bc8f6edb3465c076eb519ccb7684382714a1b883e000a7a592f8e285501ec7e82cb68441dfec8f7be7f70f40b00129ceb05057f6fa87f95d2187370a + checksum: 900b333f649fd89804216fb61fb5a0ffadc6dc37a2ec3b5981b588f72821676ea649a7c0ec785f0dbe6e774080b084c8af5f6ee7adbc1b138faf2a8c35e2c69c languageName: node linkType: hard @@ -23049,13 +23148,13 @@ __metadata: linkType: hard "eslint-plugin-cypress@npm:^2.10.3": - version: 2.13.2 - resolution: "eslint-plugin-cypress@npm:2.13.2" + version: 2.13.3 + resolution: "eslint-plugin-cypress@npm:2.13.3" dependencies: globals: ^11.12.0 peerDependencies: eslint: ">= 3.2.1" - checksum: 81cc425cfced563cf50ad2553f887e20a39fe179275e95408c53989bcf8f65f0fac648b429d006130c84221edf99eada663a2c6419eb837bf81ece3d18998cf5 + checksum: 9affbcee29e030a4251c4794f7533e8e8c0e3b98ab3470a2c730ed059f733c5857a04c7ac214cc0ca7aeef1b11242e72595de7fc1f6b8b4d4578d9eca10af203 languageName: node linkType: hard @@ -23537,6 +23636,7 @@ __metadata: "@backstage/plugin-microsoft-calendar": "workspace:^" "@backstage/plugin-newrelic": "workspace:^" "@backstage/plugin-newrelic-dashboard": "workspace:^" + "@backstage/plugin-octopus-deploy": "workspace:^" "@backstage/plugin-org": "workspace:^" "@backstage/plugin-pagerduty": "workspace:^" "@backstage/plugin-permission-react": "workspace:^" @@ -27978,10 +28078,10 @@ __metadata: languageName: node linkType: hard -"jose@npm:^4.10.0, jose@npm:^4.6.0": - version: 4.12.0 - resolution: "jose@npm:4.12.0" - checksum: 09e67611768127ab54b6b507401de4b1f87e1e285cf2c2fc917e931e001b7e584c90081b421f483f13a6eec4fc44936e4a5f4b8ae2d59928061e886e35d33fa2 +"jose@npm:^4.14.1, jose@npm:^4.6.0": + version: 4.14.3 + resolution: "jose@npm:4.14.3" + checksum: b766d65a60c0407f891003aae053fb500be0edb7e0745e6702bce39199d9f06fda5eb74a90df10611cb7bd7daf2636cbe3726341fef388b51cb4e43b64200f4f languageName: node linkType: hard @@ -31815,7 +31915,7 @@ __metadata: languageName: node linkType: hard -"object-hash@npm:^2.0.1": +"object-hash@npm:^2.2.0": version: 2.2.0 resolution: "object-hash@npm:2.2.0" checksum: 55ba841e3adce9c4f1b9b46b41983eda40f854e0d01af2802d3ae18a7085a17168d6b81731d43fdf1d6bcbb3c9f9c56d22c8fea992203ad90a38d7d919bc28f1 @@ -31940,10 +32040,10 @@ __metadata: languageName: node linkType: hard -"oidc-token-hash@npm:^5.0.1": - version: 5.0.1 - resolution: "oidc-token-hash@npm:5.0.1" - checksum: d62aa8c665f1a0133a3694785e4cd75f471364e6a2f4fbf7997e193a49ccf8f8de15596f475c7fdf8510d021c3b72f7ff6ab8bc5b07bff4cf21d490177f164a5 +"oidc-token-hash@npm:^5.0.3": + version: 5.0.3 + resolution: "oidc-token-hash@npm:5.0.3" + checksum: 35fa19aea9ff2c509029ec569d74b778c8a215b92bd5e6e9bc4ebbd7ab035f44304ff02430a6397c3fb7c1d15ebfa467807ca0bcd31d06ba610b47798287d303 languageName: node linkType: hard @@ -32056,14 +32156,14 @@ __metadata: linkType: hard "openid-client@npm:^5.2.1, openid-client@npm:^5.3.0": - version: 5.4.0 - resolution: "openid-client@npm:5.4.0" + version: 5.4.2 + resolution: "openid-client@npm:5.4.2" dependencies: - jose: ^4.10.0 + jose: ^4.14.1 lru-cache: ^6.0.0 - object-hash: ^2.0.1 - oidc-token-hash: ^5.0.1 - checksum: d198dbcaf0aa1d8b9f0f1d99ae30e90ec594eaf9ae668b5d61f2ee9af94a4460968d8dea7e53bd18903a1fb9c445e05aefca965bb88be3688a4bac273d1634d9 + object-hash: ^2.2.0 + oidc-token-hash: ^5.0.3 + checksum: 0f3570990a4979aff8581de35078c82d21d45baed9805e0e385dfc62c24fa295ee82d86386846a33bc33ed3b524a5406d8564f9f927420027719f84bf1d8b741 languageName: node linkType: hard @@ -33727,11 +33827,11 @@ __metadata: linkType: hard "prettier@npm:^2.2.1, prettier@npm:^2.7.1": - version: 2.8.7 - resolution: "prettier@npm:2.8.7" + version: 2.8.8 + resolution: "prettier@npm:2.8.8" bin: prettier: bin-prettier.js - checksum: fdc8f2616f099f5f0d685907f4449a70595a0fc1d081a88919604375989e0d5e9168d6121d8cc6861f21990b31665828e00472544d785d5940ea08a17660c3a6 + checksum: b49e409431bf129dd89238d64299ba80717b57ff5a6d1c1a8b1a28b590d998a34e083fa13573bc732bb8d2305becb4c9a4407f8486c81fa7d55100eb08263cf8 languageName: node linkType: hard @@ -34235,16 +34335,23 @@ __metadata: languageName: node linkType: hard -"ramda-adjunct@npm:=3.4.0": - version: 3.4.0 - resolution: "ramda-adjunct@npm:3.4.0" +"ramda-adjunct@npm:=4.0.0": + version: 4.0.0 + resolution: "ramda-adjunct@npm:4.0.0" peerDependencies: - ramda: ">= 0.28.0 <= 0.28.0" - checksum: 05d4daa44a28879dafc75adba6d0b660f8fc0280c03ad62c51ba779d93b11fdaa28a039b28f7ea4a8ca42fdb0a2a750b793fa073125bcc74799630e58cd4770f + ramda: ">= 0.29.0" + checksum: 449736c561a6d70c20a27c09d6002030632e7570f78fd46b1d8636211a87d5c7daf16f41ac1d84bc62020b9c4532fa62afe8fe5b3cb5d34105e21f994c331ead languageName: node linkType: hard -"ramda@npm:=0.28.0, ramda@npm:^0.28.0": +"ramda@npm:=0.29.0": + version: 0.29.0 + resolution: "ramda@npm:0.29.0" + checksum: 9ab26c06eb7545cbb7eebcf75526d6ee2fcaae19e338f165b2bf32772121e7b28192d6664d1ba222ff76188ba26ab307342d66e805dbb02c860560adc4d5dd57 + languageName: node + linkType: hard + +"ramda@npm:^0.28.0": version: 0.28.0 resolution: "ramda@npm:0.28.0" checksum: 44ea6e5010bba70151b6a92d8114a91915e8b5a16105cce65fae58c9d7386b812c429645e35f21141d7087568550ce383bc10ee1a65cdec951f4b69ea457e6a4 @@ -34528,6 +34635,13 @@ __metadata: languageName: node linkType: hard +"react-ga4@npm:^2.0.0": + version: 2.1.0 + resolution: "react-ga4@npm:2.1.0" + checksum: f7fb41141418d4ad14756f1126a1e9958db37d4d84ae6cd798043dc03a390b6dba74d69311af0349f0b9580a43bda8930138194ccc29c4100efe446e2d6eb057 + languageName: node + linkType: hard + "react-ga@npm:^3.3.0": version: 3.3.1 resolution: "react-ga@npm:3.3.1" @@ -34972,15 +35086,15 @@ __metadata: linkType: hard "react-window@npm:^1.8.6": - version: 1.8.8 - resolution: "react-window@npm:1.8.8" + version: 1.8.9 + resolution: "react-window@npm:1.8.9" dependencies: "@babel/runtime": ^7.0.0 memoize-one: ">=3.1.1 <6" peerDependencies: react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 - checksum: a19f43b9015fb84e16db983617dac618a8b298881d2ca96ffc2fb00534afd958ee57a00fd0017733b56f8c34dd84e5be59337877aed3c66329ed3b84e8d018ba + checksum: cefa232f4f37269d292529ef15780fb108123d6bb5beee19eeac657e75cf8d4664be66f2da04baf0cb1bc64c5ab3d83a88199c3358f023b78940acd37b0673b2 languageName: node linkType: hard @@ -35539,7 +35653,7 @@ __metadata: languageName: node linkType: hard -"request@npm:^2.88.0, request@npm:^2.88.2": +"request@npm:^2.88.0": version: 2.88.2 resolution: "request@npm:2.88.2" dependencies: @@ -35611,10 +35725,10 @@ __metadata: languageName: node linkType: hard -"reselect@npm:^4.1.5": - version: 4.1.5 - resolution: "reselect@npm:4.1.5" - checksum: 54c13c1e795b2ea70cba8384138aebe78adda00cbea303cc94b64da0a70d74c896cc9a03115ae38b8bff990e7a60dcd6452ab68cbec01b0b38c1afda70714cf0 +"reselect@npm:^4.1.8": + version: 4.1.8 + resolution: "reselect@npm:4.1.8" + checksum: a4ac87cedab198769a29be92bc221c32da76cfdad6911eda67b4d3e7136dca86208c3b210e31632eae31ebd2cded18596f0dd230d3ccc9e978df22f233b5583e languageName: node linkType: hard @@ -37850,15 +37964,15 @@ __metadata: languageName: node linkType: hard -"swagger-client@npm:^3.19.5": - version: 3.19.6 - resolution: "swagger-client@npm:3.19.6" +"swagger-client@npm:^3.19.6": + version: 3.19.7 + resolution: "swagger-client@npm:3.19.7" dependencies: "@babel/runtime-corejs3": ^7.20.13 - "@swagger-api/apidom-core": ">=0.69.2 <1.0.0" - "@swagger-api/apidom-json-pointer": ">=0.69.2 <1.0.0" - "@swagger-api/apidom-ns-openapi-3-1": ">=0.69.2 <1.0.0" - "@swagger-api/apidom-reference": ">=0.69.2 <1.0.0" + "@swagger-api/apidom-core": ">=0.69.3 <1.0.0" + "@swagger-api/apidom-json-pointer": ">=0.69.3 <1.0.0" + "@swagger-api/apidom-ns-openapi-3-1": ">=0.69.3 <1.0.0" + "@swagger-api/apidom-reference": ">=0.69.3 <1.0.0" cookie: ~0.5.0 cross-fetch: ^3.1.5 deepmerge: ~4.3.0 @@ -37871,13 +37985,13 @@ __metadata: qs: ^6.10.2 traverse: ~0.6.6 url: ~0.11.0 - checksum: de41a3cafd343f56478782cac463882305e73bd5c4298820bda2f6f35ad4bc65701e4599dbdd135f56592beebb2beca0fa5412051b52b1af8017cf981e692aa4 + checksum: ddd96eac36004e37a459c42a06f66b7a76389f909f95dbd041a104c6733cdd20843607679ee46ce3854ce35f68ed9964e535b5aff662291ed4064883339b710b languageName: node linkType: hard "swagger-ui-react@npm:^4.11.1": - version: 4.18.2 - resolution: "swagger-ui-react@npm:4.18.2" + version: 4.18.3 + resolution: "swagger-ui-react@npm:4.18.3" dependencies: "@babel/runtime-corejs3": ^7.18.9 "@braintree/sanitize-url": =6.0.2 @@ -37885,7 +37999,7 @@ __metadata: classnames: ^2.3.1 css.escape: 1.5.1 deep-extend: 0.6.0 - dompurify: =3.0.1 + dompurify: =3.0.2 ieee754: ^1.2.1 immutable: ^3.x.x js-file-download: ^0.4.12 @@ -37905,10 +38019,10 @@ __metadata: redux: ^4.1.2 redux-immutable: ^4.0.0 remarkable: ^2.0.1 - reselect: ^4.1.5 + reselect: ^4.1.8 serialize-error: ^8.1.0 sha.js: ^2.4.11 - swagger-client: ^3.19.5 + swagger-client: ^3.19.6 url-parse: ^1.5.8 xml: =1.0.1 xml-but-prettier: ^1.0.1 @@ -37916,7 +38030,7 @@ __metadata: peerDependencies: react: ">=17.0.0" react-dom: ">=17.0.0" - checksum: 400a0fef6f00b82a8933a2698c12e8f9c9563debaf24901089d6bfa69408d9e1da66b2cb93abed659e4922d672c64609c67561363ab06c0d6d2577cdc670b755 + checksum: c42521a72ca1336a7952d6fbdf9259d4bc7a6d107cd5befdc52352500cbfc917418f0516ab2b71e7ad0d32b08c9ade0c02bf6908a412997f4dc303a0212b0a21 languageName: node linkType: hard @@ -37940,13 +38054,13 @@ __metadata: linkType: hard "swr@npm:^2.0.0": - version: 2.1.3 - resolution: "swr@npm:2.1.3" + version: 2.1.5 + resolution: "swr@npm:2.1.5" dependencies: use-sync-external-store: ^1.2.0 peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 - checksum: e983f5bd58d1564b86ebdf6117173b16d6e9368df06a7d1ff7c2f73900f1f90c877887b88bbb4c4ee70ff1c06cc272a4d0ca9190bbf1a328e57d13e4168e14ef + checksum: f2ef9b83ec4b2ebf4d520578ab847307700db01ffcab64b3aec6ea94feaf96ca10e38e8b08bc8adfab8eaa6ec1bdfd64f82b6f5c14cc4cb5cf11e6fd22b405a4 languageName: node linkType: hard @@ -38665,10 +38779,10 @@ __metadata: languageName: node linkType: hard -"ts-toolbelt@npm:^6.15.1": - version: 6.15.5 - resolution: "ts-toolbelt@npm:6.15.5" - checksum: 24ad00cfd9ce735c76c873a9b1347eac475b94e39ebbdf100c9019dce88dd5f4babed52884cf82bb456a38c28edd0099ab6f704b84b2e5e034852b618472c1f3 +"ts-toolbelt@npm:^9.6.0": + version: 9.6.0 + resolution: "ts-toolbelt@npm:9.6.0" + checksum: 9f35fd95d895a5d32ea9fd2e532a695b0bae6cbff6832b77292efa188a0ed1ed6e54f63f74a8920390f3d909a7a3adb20a144686372a8e78b420246a9bd3d58a languageName: node linkType: hard @@ -38865,6 +38979,15 @@ __metadata: languageName: node linkType: hard +"types-ramda@npm:^0.29.1": + version: 0.29.2 + resolution: "types-ramda@npm:0.29.2" + dependencies: + ts-toolbelt: ^9.6.0 + checksum: 0b394d4be7d7f110eff2b3c13fe1a648dc14ac22da2acb5575f6621230d43e6bb1067d5a61b9793ba122efe46cda85b9e5eff7bb23d82ffa436e1f24140fff79 + languageName: node + linkType: hard + "typescript-json-schema@npm:^0.55.0": version: 0.55.0 resolution: "typescript-json-schema@npm:0.55.0" @@ -39694,15 +39817,15 @@ __metadata: languageName: node linkType: hard -"vm2@npm:^3.9.11": - version: 3.9.16 - resolution: "vm2@npm:3.9.16" +"vm2@npm:^3.9.17": + version: 3.9.17 + resolution: "vm2@npm:3.9.17" dependencies: acorn: ^8.7.0 acorn-walk: ^8.2.0 bin: vm2: bin/vm2 - checksum: 646b45dca721acb3c8e4ae0742129f13612972387911c2475f3c06ac2b4232000cab0bdaaa65d97d6ea8dc70880e039542618b1b3d04adea79cd94803cbc4ab3 + checksum: 9a03740a40ab2be5e3348a95fb31512da1a3c85318febb07e5299fa103ff05bcd7b6f458211fa38a1281dc27beccd04ff90355fc1d34fe2ee6ca10d0bb8c6f35 languageName: node linkType: hard @@ -39922,8 +40045,8 @@ __metadata: linkType: hard "webpack-dev-server@npm:^4.7.3": - version: 4.13.2 - resolution: "webpack-dev-server@npm:4.13.2" + version: 4.13.3 + resolution: "webpack-dev-server@npm:4.13.3" dependencies: "@types/bonjour": ^3.5.9 "@types/connect-history-api-fallback": ^1.3.5 @@ -39964,7 +40087,7 @@ __metadata: optional: true bin: webpack-dev-server: bin/webpack-dev-server.js - checksum: 9bf573abf05b0e0f1e8219820f6264e25a0f8ee6aebed3c0d0449c24a37f88b575972e0a2bec426112ee37d48c8f5090e7754aa1873206d3c9b6344a54718232 + checksum: d019844d3bc384676921afadfbd0a95fd06e475f2d43604789a4a8f42f79a8fb37e745f15f47f352630046dd6c6c9694051a7552b34a056c59d3a601e74d6320 languageName: node linkType: hard @@ -40578,9 +40701,9 @@ __metadata: linkType: hard "yaml@npm:^2.0.0, yaml@npm:^2.1.1, yaml@npm:^2.2.1": - version: 2.2.1 - resolution: "yaml@npm:2.2.1" - checksum: 84f68cbe462d5da4e7ded4a8bded949ffa912bc264472e5a684c3d45b22d8f73a3019963a32164023bdf3d83cfb6f5b58ff7b2b10ef5b717c630f40bd6369a23 + version: 2.2.2 + resolution: "yaml@npm:2.2.2" + checksum: d90c235e099e30094dcff61ba3350437aef53325db4a6bcd04ca96e1bfe7e348b191f6a7a52b5211e2dbc4eeedb22a00b291527da030de7c189728ef3f2b4eb3 languageName: node linkType: hard