diff --git a/.changeset/afraid-rules-yell.md b/.changeset/afraid-rules-yell.md deleted file mode 100644 index 258a07dc89..0000000000 --- a/.changeset/afraid-rules-yell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-common': patch ---- - -Updated the backend database connection configuration schema to set the password visibility to secret diff --git a/.changeset/analytics-millenial-whoop.md b/.changeset/analytics-millenial-whoop.md new file mode 100644 index 0000000000..265e0072ce --- /dev/null +++ b/.changeset/analytics-millenial-whoop.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-app-api': patch +--- + +Fixed a bug that could cause `navigate` analytics events to be misattributed to the plugin mounted on the root route (e.g. the `home` plugin at `/`) when the route that was navigated to wasn't associated with a routable extension. diff --git a/.changeset/angry-beers-relate.md b/.changeset/angry-beers-relate.md new file mode 100644 index 0000000000..4e51de99e4 --- /dev/null +++ b/.changeset/angry-beers-relate.md @@ -0,0 +1,43 @@ +--- +'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch +'@backstage/plugin-catalog-backend-module-bitbucket-server': patch +'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch +'@backstage/plugin-search-backend-module-elasticsearch': patch +'@backstage/plugin-catalog-backend-module-puppetdb': patch +'@backstage/plugin-catalog-backend-module-msgraph': patch +'@backstage/plugin-search-backend-module-techdocs': patch +'@backstage/plugin-catalog-backend-module-gerrit': patch +'@backstage/plugin-catalog-backend-module-github': patch +'@backstage/plugin-catalog-backend-module-gitlab': patch +'@backstage/plugin-events-backend-module-aws-sqs': patch +'@backstage/plugin-search-backend-module-catalog': patch +'@backstage/plugin-search-backend-module-explore': patch +'@backstage/plugin-catalog-backend-module-azure': patch +'@backstage/plugin-events-backend-module-github': patch +'@backstage/plugin-events-backend-module-gitlab': patch +'@backstage/plugin-catalog-backend-module-aws': patch +'@backstage/plugin-catalog-backend-module-gcp': patch +'@backstage/plugin-search-backend-module-pg': patch +'@backstage/plugin-azure-devops-backend': patch +'@backstage/plugin-kubernetes-backend': patch +'@backstage/plugin-lighthouse-backend': patch +'@backstage/plugin-permission-backend': patch +'@backstage/plugin-scaffolder-backend': patch +'@backstage/backend-defaults': patch +'@backstage/plugin-airbrake-backend': patch +'@backstage/plugin-devtools-backend': patch +'@backstage/plugin-periskop-backend': patch +'@backstage/plugin-techdocs-backend': patch +'@backstage/backend-common': patch +'@backstage/plugin-catalog-backend': patch +'@backstage/plugin-badges-backend': patch +'@backstage/plugin-bazaar-backend': patch +'@backstage/plugin-events-backend': patch +'@backstage/plugin-search-backend': patch +'@backstage/plugin-kafka-backend': patch +'@backstage/plugin-proxy-backend': patch +'@backstage/plugin-todo-backend': patch +'@backstage/plugin-app-backend': patch +--- + +Use `coreServices.rootConfig` instead of `coreService.config` diff --git a/.changeset/angry-jobs-ring.md b/.changeset/angry-jobs-ring.md deleted file mode 100644 index a216af1683..0000000000 --- a/.changeset/angry-jobs-ring.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/catalog-client': patch ---- - -Updated API docs diff --git a/.changeset/beige-files-reflect.md b/.changeset/beige-files-reflect.md new file mode 100644 index 0000000000..e888d5e0f8 --- /dev/null +++ b/.changeset/beige-files-reflect.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-search-backend-module-techdocs': patch +'@backstage/plugin-search-backend-module-catalog': patch +'@backstage/plugin-search-backend-module-explore': patch +--- + +Ensure that all services are dependency injected into the module instead of taken from options diff --git a/.changeset/beige-kangaroos-suffer.md b/.changeset/beige-kangaroos-suffer.md deleted file mode 100644 index 249fb5a4b6..0000000000 --- a/.changeset/beige-kangaroos-suffer.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-kubernetes': patch ---- - -Fix cyclical dependency in built output diff --git a/.changeset/beige-zebras-walk.md b/.changeset/beige-zebras-walk.md deleted file mode 100644 index 26ad52dc1d..0000000000 --- a/.changeset/beige-zebras-walk.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-user-settings': patch ---- - -Reflect the updated sign on status for a provider after signing out. diff --git a/.changeset/breezy-kids-obey.md b/.changeset/breezy-kids-obey.md deleted file mode 100644 index 131a1ec1f3..0000000000 --- a/.changeset/breezy-kids-obey.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-import': patch ---- - -Added analytics event for import entity button diff --git a/.changeset/chatty-ads-attack.md b/.changeset/chatty-ads-attack.md deleted file mode 100644 index 709db946dd..0000000000 --- a/.changeset/chatty-ads-attack.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': patch ---- - -fixed refresh problem when backstage backend disconnects without any feedback to user. Now we send a generic message and try to reconnect after 15 seconds diff --git a/.changeset/chatty-foxes-buy.md b/.changeset/chatty-foxes-buy.md new file mode 100644 index 0000000000..609ddc5269 --- /dev/null +++ b/.changeset/chatty-foxes-buy.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-graph': patch +--- + +Propagate entity spec to EntityNode so that spec info such as type can be used for graph node customization diff --git a/.changeset/chatty-seahorses-juggle.md b/.changeset/chatty-seahorses-juggle.md new file mode 100644 index 0000000000..8d699699a7 --- /dev/null +++ b/.changeset/chatty-seahorses-juggle.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kubernetes-backend': patch +--- + +Fixed a bug where the proxy was not rewriting WebSocket request paths properly. diff --git a/.changeset/chatty-seals-tap.md b/.changeset/chatty-seals-tap.md deleted file mode 100644 index 01d69e1562..0000000000 --- a/.changeset/chatty-seals-tap.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/create-app': patch -'@backstage/plugin-catalog': patch ---- - -Add link from Template entity to the scaffolder launch page for the template in the AboutCard. diff --git a/.changeset/chilly-keys-count.md b/.changeset/chilly-keys-count.md new file mode 100644 index 0000000000..3bbc4e40dc --- /dev/null +++ b/.changeset/chilly-keys-count.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-playlist': patch +--- + +Displaying an alert popup each time the Playlist is created or deleted diff --git a/.changeset/clean-meals-pay.md b/.changeset/clean-meals-pay.md deleted file mode 100644 index 629549112c..0000000000 --- a/.changeset/clean-meals-pay.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-jenkins-backend': patch ---- - -Don't expose username and authentication header if configured. diff --git a/.changeset/clean-months-bake.md b/.changeset/clean-months-bake.md deleted file mode 100644 index 5886dea66b..0000000000 --- a/.changeset/clean-months-bake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-octopus-deploy': patch ---- - -Improved getting started documentation diff --git a/.changeset/clean-years-whisper.md b/.changeset/clean-years-whisper.md deleted file mode 100644 index fd77430cd7..0000000000 --- a/.changeset/clean-years-whisper.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-home': patch ---- - -Update set up documentation to export homepage as element instead of React component. diff --git a/.changeset/cold-numbers-sleep.md b/.changeset/cold-numbers-sleep.md new file mode 100644 index 0000000000..ac53307b07 --- /dev/null +++ b/.changeset/cold-numbers-sleep.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Fix the get entities query in the `MyGroupsPicker` to query the `kind=Group` entities. diff --git a/.changeset/create-app-1684855417.md b/.changeset/create-app-1690284535.md similarity index 100% rename from .changeset/create-app-1684855417.md rename to .changeset/create-app-1690284535.md diff --git a/.changeset/create-app-1686056275.md b/.changeset/create-app-1690892926.md similarity index 100% rename from .changeset/create-app-1686056275.md rename to .changeset/create-app-1690892926.md diff --git a/.changeset/curvy-years-smoke.md b/.changeset/curvy-years-smoke.md deleted file mode 100644 index 056056fdff..0000000000 --- a/.changeset/curvy-years-smoke.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder': patch ---- - -Forward `Authorization` header for `EventSource` when credentials are available. diff --git a/.changeset/dirty-chefs-listen.md b/.changeset/dirty-chefs-listen.md new file mode 100644 index 0000000000..84b684b977 --- /dev/null +++ b/.changeset/dirty-chefs-listen.md @@ -0,0 +1,7 @@ +--- +'@backstage/config-loader': minor +--- + +Loading invalid TypeScript configuration schemas will now throw an error rather than silently being ignored. + +In particular this includes defining any additional types other than `Config` in the schema file, or use of unsupported types such as `Record` or `Partial`. diff --git a/.changeset/dull-bottles-teach.md b/.changeset/dull-bottles-teach.md deleted file mode 100644 index 74203eb758..0000000000 --- a/.changeset/dull-bottles-teach.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-home': patch ---- - -Allow more customization for the CustomHomepageGrid diff --git a/.changeset/famous-days-kneel.md b/.changeset/famous-days-kneel.md deleted file mode 100644 index 418a1f6d4e..0000000000 --- a/.changeset/famous-days-kneel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend-module-confluence-to-markdown': patch ---- - -Added support for Confluence Cloud to the `confluence:transform:markdown` action in addition to the existing Confluence Server support, view the [README](https://github.com/backstage/backstage/tree/master/plugins/scaffolder-backend-module-confluence-to-markdown) for more details diff --git a/.changeset/fast-ears-know.md b/.changeset/fast-ears-know.md deleted file mode 100644 index fa56c4c99d..0000000000 --- a/.changeset/fast-ears-know.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-user-settings': patch ---- - -Improved the user experience of the feature flags list. It now sorts the enabled flags to the top of the list to increase the visibilities of the toggled flags. diff --git a/.changeset/fast-zebras-watch.md b/.changeset/fast-zebras-watch.md deleted file mode 100644 index 7466565e79..0000000000 --- a/.changeset/fast-zebras-watch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-devtools-backend': patch ---- - -Expose permissions through the metadata endpoint. diff --git a/.changeset/few-games-swim.md b/.changeset/few-games-swim.md deleted file mode 100644 index d0cd13ab11..0000000000 --- a/.changeset/few-games-swim.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-cicd-statistics-module-gitlab': patch -'@backstage/plugin-scaffolder-backend-module-gitlab': patch ---- - -Fixed publish configuration. diff --git a/.changeset/few-oranges-complain.md b/.changeset/few-oranges-complain.md deleted file mode 100644 index 70eb921a92..0000000000 --- a/.changeset/few-oranges-complain.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -Fix handling of `optional` property in `catalog:register` scaffolder action diff --git a/.changeset/few-pugs-jam.md b/.changeset/few-pugs-jam.md deleted file mode 100644 index 83908a2cc1..0000000000 --- a/.changeset/few-pugs-jam.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-sonarqube-backend': patch ---- - -Provide full schema definition for sonarqube plugin, especially to protect api keys. diff --git a/.changeset/five-turtles-play.md b/.changeset/five-turtles-play.md deleted file mode 100644 index 447cd60b3f..0000000000 --- a/.changeset/five-turtles-play.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend-module-gitlab': patch ---- - -Add support for dry run for `gitlab:group:ensureExists` action. diff --git a/.changeset/gentle-turtles-applaud.md b/.changeset/gentle-turtles-applaud.md deleted file mode 100644 index f05d8b156c..0000000000 --- a/.changeset/gentle-turtles-applaud.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-analytics-module-ga4': patch ---- - -Fixed configuration visibility settings for `allowedContexts` and `allowedAttributes` diff --git a/.changeset/giant-maps-compete.md b/.changeset/giant-maps-compete.md deleted file mode 100644 index 776332b308..0000000000 --- a/.changeset/giant-maps-compete.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-pagerduty': patch ---- - -Add a homepage widget for the `Pagerduty` component. diff --git a/.changeset/good-rabbits-exist.md b/.changeset/good-rabbits-exist.md deleted file mode 100644 index df38293783..0000000000 --- a/.changeset/good-rabbits-exist.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-kubernetes-backend': patch ---- - -Fixed bug in KubernetesProxy where Host header was not propagated, leading to certificate issues diff --git a/.changeset/gorgeous-months-doubt.md b/.changeset/gorgeous-months-doubt.md new file mode 100644 index 0000000000..d440e28b72 --- /dev/null +++ b/.changeset/gorgeous-months-doubt.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-openapi-utils': patch +--- + +Add a new `createRouter` method for generating an `express` router that validates against your spec. Also fixes a bug with the query parameters type resolution. diff --git a/.changeset/gorgeous-timers-act.md b/.changeset/gorgeous-timers-act.md deleted file mode 100644 index 130ed5085f..0000000000 --- a/.changeset/gorgeous-timers-act.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-gitlab': patch ---- - -Fixed bug that caused ingestion errors when a user's name or profile picture is undefined. diff --git a/.changeset/grumpy-carrots-sin.md b/.changeset/grumpy-carrots-sin.md deleted file mode 100644 index 8f2843ebd0..0000000000 --- a/.changeset/grumpy-carrots-sin.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-catalog-unprocessed-entities': minor -'@backstage/plugin-catalog-backend-module-unprocessed': minor ---- - -Added a new plugin to expose entities which are unprocessed or have errors processing diff --git a/.changeset/heavy-ravens-fold.md b/.changeset/heavy-ravens-fold.md deleted file mode 100644 index f5f88c7662..0000000000 --- a/.changeset/heavy-ravens-fold.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs-node': patch ---- - -Use latest techdocs docker image by default. The latest image contains security updates. diff --git a/.changeset/hot-apples-cross.md b/.changeset/hot-apples-cross.md deleted file mode 100644 index 3284c0ca8f..0000000000 --- a/.changeset/hot-apples-cross.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/theme': patch ---- - -Tweaked `UnifiedThemeProvider` to avoid overlapping JSS class names in production. diff --git a/.changeset/hot-badgers-double.md b/.changeset/hot-badgers-double.md deleted file mode 100644 index 835420b91a..0000000000 --- a/.changeset/hot-badgers-double.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': minor ---- - -`scaffolder/next`: Provide some default template components to `rjsf` to allow for standardization and markdown descriptions diff --git a/.changeset/hungry-lies-drop.md b/.changeset/hungry-lies-drop.md deleted file mode 100644 index 4c6fead716..0000000000 --- a/.changeset/hungry-lies-drop.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-badges-backend': patch ---- - -Adding migrations to the packages.json diff --git a/.changeset/hungry-shrimps-care.md b/.changeset/hungry-shrimps-care.md new file mode 100644 index 0000000000..665a7bfc82 --- /dev/null +++ b/.changeset/hungry-shrimps-care.md @@ -0,0 +1,91 @@ +--- +'@backstage/plugin-scaffolder-backend-module-confluence-to-markdown': patch +'@backstage/plugin-scaffolder-backend-module-cookiecutter': patch +'@backstage/plugin-events-backend-module-bitbucket-cloud': patch +'@backstage/plugin-search-backend-module-elasticsearch': patch +'@backstage/plugin-catalog-backend-module-unprocessed': patch +'@backstage/plugin-scaffolder-backend-module-sentry': patch +'@backstage/plugin-scaffolder-backend-module-yeoman': patch +'@backstage/plugin-scaffolder-backend-module-rails': patch +'@backstage/plugin-search-backend-module-techdocs': patch +'@backstage/plugin-cicd-statistics-module-gitlab': patch +'@backstage/plugin-events-backend-module-aws-sqs': patch +'@backstage/plugin-search-backend-module-catalog': patch +'@backstage/plugin-search-backend-module-explore': patch +'@backstage/plugin-events-backend-module-gerrit': patch +'@backstage/plugin-events-backend-module-github': patch +'@backstage/plugin-events-backend-module-gitlab': patch +'@backstage/plugin-events-backend-module-azure': patch +'@backstage/plugin-events-backend-test-utils': patch +'@backstage/plugin-search-backend-module-pg': patch +'@backstage/plugin-entity-feedback-backend': patch +'@backstage/backend-openapi-utils': patch +'@backstage/plugin-bitbucket-cloud-common': patch +'@backstage/plugin-entity-feedback-common': patch +'@backstage/plugin-code-coverage-backend': patch +'@backstage/plugin-user-settings-backend': patch +'@backstage/plugin-analytics-module-ga4': patch +'@backstage/plugin-azure-devops-backend': patch +'@backstage/plugin-analytics-module-ga': patch +'@backstage/plugin-git-release-manager': patch +'@backstage/plugin-search-backend-node': patch +'@backstage/integration-react': patch +'@backstage/plugin-github-deployments': patch +'@backstage/plugin-microsoft-calendar': patch +'@backstage/plugin-newrelic-dashboard': patch +'@backstage/plugin-permission-backend': patch +'@backstage/plugin-entity-validation': patch +'@backstage/plugin-sonarqube-backend': patch +'@backstage/plugin-airbrake-backend': patch +'@backstage/plugin-devtools-backend': patch +'@backstage/plugin-linguist-backend': patch +'@backstage/plugin-periskop-backend': patch +'@backstage/plugin-playlist-backend': patch +'@backstage/plugin-apollo-explorer': patch +'@backstage/plugin-devtools-common': patch +'@backstage/plugin-entity-feedback': patch +'@backstage/plugin-explore-backend': patch +'@backstage/plugin-graphql-voyager': patch +'@backstage/plugin-jenkins-backend': patch +'@backstage/plugin-linguist-common': patch +'@backstage/plugin-playlist-common': patch +'@backstage/plugin-scaffolder-node': patch +'@backstage/plugin-apache-airflow': patch +'@backstage/plugin-bazaar-backend': patch +'@backstage/plugin-events-backend': patch +'@backstage/plugin-jenkins-common': patch +'@backstage/plugin-octopus-deploy': patch +'@backstage/plugin-search-backend': patch +'@backstage/plugin-stack-overflow': patch +'@backstage/plugin-catalog-graph': patch +'@backstage/plugin-code-coverage': patch +'@backstage/plugin-config-schema': patch +'@backstage/plugin-github-issues': patch +'@backstage/plugin-nomad-backend': patch +'@backstage/plugin-tech-insights': patch +'@backstage/plugin-catalog-node': patch +'@backstage/plugin-code-climate': patch +'@backstage/plugin-events-node': patch +'@backstage/plugin-firehydrant': patch +'@backstage/cli-node': patch +'@backstage/plugin-auth-node': patch +'@backstage/plugin-codescene': patch +'@backstage/plugin-dynatrace': patch +'@backstage/plugin-gcalendar': patch +'@backstage/plugin-org-react': patch +'@backstage/plugin-shortcuts': patch +'@backstage/plugin-xcmetrics': patch +'@backstage/plugin-airbrake': patch +'@backstage/plugin-periskop': patch +'@backstage/plugin-playlist': patch +'@backstage/plugin-bitrise': patch +'@backstage/plugin-allure': patch +'@backstage/plugin-bazaar': patch +'@backstage/plugin-ilert': patch +'@backstage/plugin-kafka': patch +'@backstage/plugin-nomad': patch +'@backstage/plugin-adr': patch +'@backstage/plugin-org': patch +--- + +Add package repository and homepage metadata diff --git a/.changeset/itchy-mirrors-greet.md b/.changeset/itchy-mirrors-greet.md deleted file mode 100644 index 3cd0dc6c35..0000000000 --- a/.changeset/itchy-mirrors-greet.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch ---- - -Replace getBearerToken with library function of same diff --git a/.changeset/khaki-flies-draw.md b/.changeset/khaki-flies-draw.md new file mode 100644 index 0000000000..ada45dea06 --- /dev/null +++ b/.changeset/khaki-flies-draw.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-gitlab': patch +--- + +Added option to skip forked repos in GitlabDiscoveryEntityProvider diff --git a/.changeset/khaki-radios-teach.md b/.changeset/khaki-radios-teach.md deleted file mode 100644 index 05ede0593c..0000000000 --- a/.changeset/khaki-radios-teach.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/config-loader': patch ---- - -Fix a bug where config items with `/` in the key were incorrectly handled. diff --git a/.changeset/kind-cougars-allow.md b/.changeset/kind-cougars-allow.md new file mode 100644 index 0000000000..d37c4c5cf2 --- /dev/null +++ b/.changeset/kind-cougars-allow.md @@ -0,0 +1,14 @@ +--- +'@backstage/plugin-devtools-backend': patch +--- + +Add DevTools configuration to enable dependency listing to be filtered with custom prefixes. For instance, in your `app-config.yaml`: + +```yaml +devTools: + info: + packagePrefixes: + - @backstage/ + - @roadiehq/backstage- + - @spotify/backstage- +``` diff --git a/.changeset/large-experts-poke.md b/.changeset/large-experts-poke.md new file mode 100644 index 0000000000..9f6ca640b6 --- /dev/null +++ b/.changeset/large-experts-poke.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-linguist-backend': patch +--- + +Fixed bug in LinguistBackendClient.ts file where if the linguistJsOptions is specified and sent over to the linguist-js package it would get changed (another attribute would be added) causing future entities of the batch to fail with an error diff --git a/.changeset/large-vans-cross.md b/.changeset/large-vans-cross.md new file mode 100644 index 0000000000..f50b432742 --- /dev/null +++ b/.changeset/large-vans-cross.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-sonarqube': patch +--- + +Remove sonarQube card disable class diff --git a/.changeset/lazy-dancers-begin.md b/.changeset/lazy-dancers-begin.md deleted file mode 100644 index 27282ec981..0000000000 --- a/.changeset/lazy-dancers-begin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/integration': minor ---- - -Add credential provider for GitLab. diff --git a/.changeset/light-cows-bow.md b/.changeset/light-cows-bow.md deleted file mode 100644 index ba1b1c7631..0000000000 --- a/.changeset/light-cows-bow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -Clearer error messages for action `publish:gitlab:merge-request` diff --git a/.changeset/little-boats-think.md b/.changeset/little-boats-think.md deleted file mode 100644 index d389bfbbb1..0000000000 --- a/.changeset/little-boats-think.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@backstage/plugin-catalog-react': minor ---- - -The `EntityOwnerPicker` component has undergone improvements to enhance its performance. - -The component now loads entities asynchronously, resulting in improved performance and responsiveness. Instead of loading all entities upfront, they are now loaded in batches as the user scrolls. -The previous implementation inferred users and groups displayed by the `EntityOwnerPicker` component based on the entities available in the `EntityListContext`. The updated version no longer relies on the `EntityListContext` for inference, allowing for better decoupling and improved performance. diff --git a/.changeset/long-lobsters-brake.md b/.changeset/long-lobsters-brake.md deleted file mode 100644 index 01ae3f4e93..0000000000 --- a/.changeset/long-lobsters-brake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-jenkins-common': patch ---- - -Export list of permissions diff --git a/.changeset/loud-garlics-press.md b/.changeset/loud-garlics-press.md new file mode 100644 index 0000000000..28aee20619 --- /dev/null +++ b/.changeset/loud-garlics-press.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Reload the frontend when app config changes diff --git a/.changeset/lovely-impalas-sell.md b/.changeset/lovely-impalas-sell.md deleted file mode 100644 index 80447c066f..0000000000 --- a/.changeset/lovely-impalas-sell.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -'@backstage/plugin-search-backend-module-explore': patch ---- - -Allows for an optional `tokenManager` to authenticate requests from the collator to the explore backend. For example: - -```diff - indexBuilder.addCollator({ - schedule: every10MinutesSchedule, - factory: ToolDocumentCollatorFactory.fromConfig(env.config, { - discovery: env.discovery, - logger: env.logger, - + tokenManager: env.tokenManager, - }), - }); -``` diff --git a/.changeset/lucky-keys-behave.md b/.changeset/lucky-keys-behave.md deleted file mode 100644 index a223f83fa6..0000000000 --- a/.changeset/lucky-keys-behave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-jenkins-backend': patch ---- - -Expose permissions through the metadata endpoint. diff --git a/.changeset/mean-insects-hope.md b/.changeset/mean-insects-hope.md deleted file mode 100644 index 0a71a9c1ee..0000000000 --- a/.changeset/mean-insects-hope.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-react': patch ---- - -Make `useRelatedEntities` use `getEntitiesByRefs` under the hood diff --git a/.changeset/mean-squids-relax.md b/.changeset/mean-squids-relax.md new file mode 100644 index 0000000000..558b42fcfc --- /dev/null +++ b/.changeset/mean-squids-relax.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-home-react': patch +--- + +Make `title` optional when defining the `createCardExtension` diff --git a/.changeset/mighty-lions-search-2.md b/.changeset/mighty-lions-search-2.md new file mode 100644 index 0000000000..a7fb1a4a7d --- /dev/null +++ b/.changeset/mighty-lions-search-2.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-test-utils': minor +--- + +**BREAKING**: Renamed `mockServices.config` to `mockServices.rootConfig`. diff --git a/.changeset/mighty-lions-search-3.md b/.changeset/mighty-lions-search-3.md new file mode 100644 index 0000000000..6b381ce2b2 --- /dev/null +++ b/.changeset/mighty-lions-search-3.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-app-api': minor +--- + +**BREAKING**: Renamed `configServiceFactory` to `rootConfigServiceFactory`. diff --git a/.changeset/mighty-lions-search.md b/.changeset/mighty-lions-search.md new file mode 100644 index 0000000000..6d2ffd02c0 --- /dev/null +++ b/.changeset/mighty-lions-search.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-plugin-api': minor +--- + +**BREAKING**: Renamed `coreServices.config` to `coreServices.rootConfig`. diff --git a/.changeset/modern-dancers-sit.md b/.changeset/modern-dancers-sit.md deleted file mode 100644 index 5894352707..0000000000 --- a/.changeset/modern-dancers-sit.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -Fix wrong gitlabUrl format in repoUrl input description diff --git a/.changeset/neat-coins-raise.md b/.changeset/neat-coins-raise.md new file mode 100644 index 0000000000..c3045634bf --- /dev/null +++ b/.changeset/neat-coins-raise.md @@ -0,0 +1,17 @@ +--- +'@backstage/plugin-catalog-backend-module-bitbucket-server': patch +'@backstage/plugin-catalog-backend-module-bitbucket-cloud': patch +'@backstage/plugin-catalog-backend-module-puppetdb': patch +'@backstage/plugin-catalog-backend-module-msgraph': patch +'@backstage/plugin-catalog-backend-module-gerrit': patch +'@backstage/plugin-catalog-backend-module-github': patch +'@backstage/plugin-catalog-backend-module-gitlab': patch +'@backstage/plugin-events-backend-module-aws-sqs': patch +'@backstage/plugin-catalog-backend-module-azure': patch +'@backstage/plugin-catalog-backend-module-aws': patch +'@backstage/backend-common': patch +'@backstage/plugin-jenkins-backend': patch +'@backstage/plugin-proxy-backend': patch +--- + +Fixed invalid configuration schema. The configuration schema may be more strict as a result. diff --git a/.changeset/neat-lamps-press.md b/.changeset/neat-lamps-press.md new file mode 100644 index 0000000000..23c0b15fb7 --- /dev/null +++ b/.changeset/neat-lamps-press.md @@ -0,0 +1,8 @@ +--- +'@backstage/core-components': patch +'@backstage/plugin-splunk-on-call': patch +'@backstage/plugin-xcmetrics': patch +'@backstage/plugin-catalog': patch +--- + +Prefer simple `theme.spacing` without string interpolation diff --git a/.changeset/nice-peaches-reflect.md b/.changeset/nice-peaches-reflect.md deleted file mode 100644 index 45c9f0ed6f..0000000000 --- a/.changeset/nice-peaches-reflect.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-auth-backend': patch ---- - -Set the expiration time of oidc `idToken` to be less than backstage session expiration time. diff --git a/.changeset/nice-readers-heal.md b/.changeset/nice-readers-heal.md deleted file mode 100644 index 54534f8289..0000000000 --- a/.changeset/nice-readers-heal.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-common': patch ---- - -Fixed typo in HostDiscovery's JSDoc diff --git a/.changeset/nine-bags-dream.md b/.changeset/nine-bags-dream.md deleted file mode 100644 index f0967775db..0000000000 --- a/.changeset/nine-bags-dream.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-adr': patch ---- - -Render table of front matter metadata when displaying MADR v3 formatted ADR diff --git a/.changeset/ninety-jeans-scream.md b/.changeset/ninety-jeans-scream.md deleted file mode 100644 index 3465a67444..0000000000 --- a/.changeset/ninety-jeans-scream.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/errors': minor ---- - -Added `ServiceUnavailableError` diff --git a/.changeset/ninety-turkeys-knock.md b/.changeset/ninety-turkeys-knock.md deleted file mode 100644 index 7f26f0eeda..0000000000 --- a/.changeset/ninety-turkeys-knock.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-app-api': patch ---- - -Switched startup strategy to initialize all plugins in parallel, as well as hook into the new startup lifecycle hooks. diff --git a/.changeset/odd-avocados-buy.md b/.changeset/odd-avocados-buy.md new file mode 100644 index 0000000000..9e71c19fc0 --- /dev/null +++ b/.changeset/odd-avocados-buy.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend-module-confluence-to-markdown': patch +--- + +Use `fetchContents` directly instead of a `fetchPlainAction` diff --git a/.changeset/olive-carpets-explode.md b/.changeset/olive-carpets-explode.md deleted file mode 100644 index 6741355d58..0000000000 --- a/.changeset/olive-carpets-explode.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-plugin-api': patch ---- - -Added startup hooks to the lifecycle services. diff --git a/.changeset/orange-taxis-exercise.md b/.changeset/orange-taxis-exercise.md deleted file mode 100644 index 59a52b74bc..0000000000 --- a/.changeset/orange-taxis-exercise.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@backstage/backend-common': minor -'@backstage/integration': minor -'@backstage/plugin-catalog-backend-module-azure': patch ---- - -Support authentication with a service principal or managed identity for Azure DevOps - -Azure DevOps recently released support, in public preview, for authenticating with a service principal or managed identity instead of a personal access token (PAT): https://devblogs.microsoft.com/devops/introducing-service-principal-and-managed-identity-support-on-azure-devops/. With this change the Azure integration now supports service principals and managed identities for Azure AD backed Azure DevOps organizations. Service principal and managed identity authentication is not supported on Azure DevOps Server (on-premises) organizations. diff --git a/.changeset/perfect-donkeys-cry.md b/.changeset/perfect-donkeys-cry.md deleted file mode 100644 index 744dc19d64..0000000000 --- a/.changeset/perfect-donkeys-cry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-components': patch ---- - -Added `exact` prop to `SidebarSubmenuItem` which causes it to only highlight if the current location is an exact match. diff --git a/.changeset/perfect-readers-attack.md b/.changeset/perfect-readers-attack.md deleted file mode 100644 index 93d205eb9c..0000000000 --- a/.changeset/perfect-readers-attack.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend-module-gitlab': patch ---- - -Tweak README diff --git a/.changeset/pink-goats-talk.md b/.changeset/pink-goats-talk.md deleted file mode 100644 index 3b67af81f4..0000000000 --- a/.changeset/pink-goats-talk.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-search-react': patch -'@backstage/plugin-search': patch -'@backstage/plugin-techdocs': patch ---- - -Fix SearchBar styles & update StoryBook stories for custom styles for `notchedOutline` class. diff --git a/.changeset/pink-squids-nail.md b/.changeset/pink-squids-nail.md new file mode 100644 index 0000000000..989b5034d5 --- /dev/null +++ b/.changeset/pink-squids-nail.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-unprocessed': minor +--- + +**BREAKING**: Fixing typo in exported module. You will have to rename the import to the correct spelling. `UnprocessedEntites` -> `UnprocessedEntities` diff --git a/.changeset/plenty-roses-raise.md b/.changeset/plenty-roses-raise.md deleted file mode 100644 index 71605705e3..0000000000 --- a/.changeset/plenty-roses-raise.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-devtools-common': patch ---- - -Export the list of permissions diff --git a/.changeset/poor-months-switch.md b/.changeset/poor-months-switch.md deleted file mode 100644 index 732152a965..0000000000 --- a/.changeset/poor-months-switch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-tech-insights': patch ---- - -The check description is now rendered with markdown. diff --git a/.changeset/popular-fans-camp.md b/.changeset/popular-fans-camp.md new file mode 100644 index 0000000000..47fc095ef8 --- /dev/null +++ b/.changeset/popular-fans-camp.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend': patch +--- + +Updated config schema to match what was being used in code diff --git a/.changeset/pre.json b/.changeset/pre.json index 4824e0494f..605f1ea771 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -2,318 +2,280 @@ "mode": "pre", "tag": "next", "initialVersions": { - "example-app": "0.2.83", - "@backstage/app-defaults": "1.3.1", - "example-backend": "0.2.83", - "@backstage/backend-app-api": "0.4.3", - "@backstage/backend-common": "0.18.5", - "@backstage/backend-defaults": "0.1.10", + "example-app": "0.2.85", + "@backstage/app-defaults": "1.4.1", + "example-backend": "0.2.85", + "@backstage/backend-app-api": "0.4.5", + "@backstage/backend-common": "0.19.1", + "@backstage/backend-defaults": "0.1.12", "@backstage/backend-dev-utils": "0.1.1", - "example-backend-next": "0.0.11", + "example-backend-next": "0.0.13", "@backstage/backend-openapi-utils": "0.0.2", - "@backstage/backend-plugin-api": "0.5.2", - "@backstage/backend-tasks": "0.5.2", - "@backstage/backend-test-utils": "0.1.37", - "@backstage/catalog-client": "1.4.1", - "@backstage/catalog-model": "1.3.0", - "@backstage/cli": "0.22.7", + "@backstage/backend-plugin-api": "0.5.4", + "@backstage/backend-tasks": "0.5.4", + "@backstage/backend-test-utils": "0.1.39", + "@backstage/catalog-client": "1.4.3", + "@backstage/catalog-model": "1.4.1", + "@backstage/cli": "0.22.9", "@backstage/cli-common": "0.1.12", - "@backstage/cli-node": "0.1.0", - "@backstage/codemods": "0.1.44", - "@backstage/config": "1.0.7", - "@backstage/config-loader": "1.3.0", - "@backstage/core-app-api": "1.8.0", - "@backstage/core-components": "0.13.1", - "@backstage/core-plugin-api": "1.5.1", - "@backstage/create-app": "0.5.1", - "@backstage/dev-utils": "1.0.15", - "e2e-test": "0.2.3", - "@backstage/errors": "1.1.5", + "@backstage/cli-node": "0.1.2", + "@backstage/codemods": "0.1.45", + "@backstage/config": "1.0.8", + "@backstage/config-loader": "1.3.2", + "@backstage/core-app-api": "1.9.0", + "@backstage/core-components": "0.13.3", + "@backstage/core-plugin-api": "1.5.3", + "@backstage/create-app": "0.5.3", + "@backstage/dev-utils": "1.0.17", + "e2e-test": "0.2.5", + "@backstage/errors": "1.2.1", "@backstage/eslint-plugin": "0.1.3", - "@backstage/integration": "1.4.5", - "@backstage/integration-aws-node": "0.1.3", - "@backstage/integration-react": "1.1.13", + "@backstage/integration": "1.5.1", + "@backstage/integration-aws-node": "0.1.5", + "@backstage/integration-react": "1.1.15", "@backstage/release-manifests": "0.0.9", - "@backstage/repo-tools": "0.3.0", - "@techdocs/cli": "1.4.2", - "techdocs-cli-embedded-app": "0.2.82", - "@backstage/test-utils": "1.3.1", - "@backstage/theme": "0.3.0", - "@backstage/types": "1.0.2", + "@backstage/repo-tools": "0.3.2", + "@techdocs/cli": "1.4.4", + "techdocs-cli-embedded-app": "0.2.84", + "@backstage/test-utils": "1.4.1", + "@backstage/theme": "0.4.1", + "@backstage/types": "1.1.0", "@backstage/version-bridge": "1.0.4", - "@backstage/plugin-adr": "0.6.0", - "@backstage/plugin-adr-backend": "0.3.3", - "@backstage/plugin-adr-common": "0.2.9", - "@backstage/plugin-airbrake": "0.3.18", - "@backstage/plugin-airbrake-backend": "0.2.18", - "@backstage/plugin-allure": "0.1.34", - "@backstage/plugin-analytics-module-ga": "0.1.29", - "@backstage/plugin-analytics-module-ga4": "0.1.0", - "@backstage/plugin-apache-airflow": "0.2.11", - "@backstage/plugin-api-docs": "0.9.3", + "@backstage/plugin-adr": "0.6.3", + "@backstage/plugin-adr-backend": "0.3.5", + "@backstage/plugin-adr-common": "0.2.11", + "@backstage/plugin-airbrake": "0.3.20", + "@backstage/plugin-airbrake-backend": "0.2.20", + "@backstage/plugin-allure": "0.1.36", + "@backstage/plugin-analytics-module-ga": "0.1.31", + "@backstage/plugin-analytics-module-ga4": "0.1.2", + "@backstage/plugin-apache-airflow": "0.2.13", + "@backstage/plugin-api-docs": "0.9.6", "@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.2", - "@backstage/plugin-apollo-explorer": "0.1.11", - "@backstage/plugin-app-backend": "0.3.45", - "@backstage/plugin-auth-backend": "0.18.3", - "@backstage/plugin-auth-node": "0.2.14", - "@backstage/plugin-azure-devops": "0.3.0", - "@backstage/plugin-azure-devops-backend": "0.3.24", + "@backstage/plugin-apollo-explorer": "0.1.13", + "@backstage/plugin-app-backend": "0.3.47", + "@backstage/plugin-auth-backend": "0.18.5", + "@backstage/plugin-auth-node": "0.2.16", + "@backstage/plugin-azure-devops": "0.3.2", + "@backstage/plugin-azure-devops-backend": "0.3.26", "@backstage/plugin-azure-devops-common": "0.3.0", - "@backstage/plugin-azure-sites": "0.1.7", - "@backstage/plugin-azure-sites-backend": "0.1.7", + "@backstage/plugin-azure-sites": "0.1.9", + "@backstage/plugin-azure-sites-backend": "0.1.9", "@backstage/plugin-azure-sites-common": "0.1.0", - "@backstage/plugin-badges": "0.2.42", - "@backstage/plugin-badges-backend": "0.2.0", - "@backstage/plugin-bazaar": "0.2.8", - "@backstage/plugin-bazaar-backend": "0.2.8", - "@backstage/plugin-bitbucket-cloud-common": "0.2.6", - "@backstage/plugin-bitrise": "0.1.45", - "@backstage/plugin-catalog": "1.11.0", - "@backstage/plugin-catalog-backend": "1.9.1", - "@backstage/plugin-catalog-backend-module-aws": "0.2.0", - "@backstage/plugin-catalog-backend-module-azure": "0.1.16", - "@backstage/plugin-catalog-backend-module-bitbucket": "0.2.12", - "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.1.12", - "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.1.10", - "@backstage/plugin-catalog-backend-module-gerrit": "0.1.13", - "@backstage/plugin-catalog-backend-module-github": "0.3.0", - "@backstage/plugin-catalog-backend-module-gitlab": "0.2.1", - "@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.3.2", - "@backstage/plugin-catalog-backend-module-ldap": "0.5.12", - "@backstage/plugin-catalog-backend-module-msgraph": "0.5.4", - "@backstage/plugin-catalog-backend-module-openapi": "0.1.11", - "@backstage/plugin-catalog-backend-module-puppetdb": "0.1.2", - "@backstage/plugin-catalog-common": "1.0.13", - "@internal/plugin-catalog-customized": "0.0.10", - "@backstage/plugin-catalog-graph": "0.2.30", - "@backstage/plugin-catalog-graphql": "0.3.20", - "@backstage/plugin-catalog-import": "0.9.8", - "@backstage/plugin-catalog-node": "1.3.6", - "@backstage/plugin-catalog-react": "1.6.0", - "@backstage/plugin-cicd-statistics": "0.1.20", - "@backstage/plugin-cicd-statistics-module-gitlab": "0.1.14", - "@backstage/plugin-circleci": "0.3.18", - "@backstage/plugin-cloudbuild": "0.3.18", - "@backstage/plugin-code-climate": "0.1.18", - "@backstage/plugin-code-coverage": "0.2.11", - "@backstage/plugin-code-coverage-backend": "0.2.11", - "@backstage/plugin-codescene": "0.1.13", - "@backstage/plugin-config-schema": "0.1.41", - "@backstage/plugin-cost-insights": "0.12.7", + "@backstage/plugin-badges": "0.2.44", + "@backstage/plugin-badges-backend": "0.2.2", + "@backstage/plugin-bazaar": "0.2.11", + "@backstage/plugin-bazaar-backend": "0.2.10", + "@backstage/plugin-bitbucket-cloud-common": "0.2.8", + "@backstage/plugin-bitrise": "0.1.47", + "@backstage/plugin-catalog": "1.12.0", + "@backstage/plugin-catalog-backend": "1.11.0", + "@backstage/plugin-catalog-backend-module-aws": "0.2.2", + "@backstage/plugin-catalog-backend-module-azure": "0.1.18", + "@backstage/plugin-catalog-backend-module-bitbucket": "0.2.14", + "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.1.14", + "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.1.12", + "@backstage/plugin-catalog-backend-module-gerrit": "0.1.15", + "@backstage/plugin-catalog-backend-module-github": "0.3.2", + "@backstage/plugin-catalog-backend-module-gitlab": "0.2.3", + "@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.4.0", + "@backstage/plugin-catalog-backend-module-ldap": "0.5.14", + "@backstage/plugin-catalog-backend-module-msgraph": "0.5.6", + "@backstage/plugin-catalog-backend-module-openapi": "0.1.13", + "@backstage/plugin-catalog-backend-module-puppetdb": "0.1.4", + "@backstage/plugin-catalog-backend-module-unprocessed": "0.1.1", + "@backstage/plugin-catalog-common": "1.0.15", + "@internal/plugin-catalog-customized": "0.0.12", + "@backstage/plugin-catalog-graph": "0.2.32", + "@backstage/plugin-catalog-graphql": "0.3.22", + "@backstage/plugin-catalog-import": "0.9.10", + "@backstage/plugin-catalog-node": "1.4.0", + "@backstage/plugin-catalog-react": "1.8.0", + "@backstage/plugin-catalog-unprocessed-entities": "0.1.1", + "@backstage/plugin-cicd-statistics": "0.1.22", + "@backstage/plugin-cicd-statistics-module-gitlab": "0.1.16", + "@backstage/plugin-circleci": "0.3.20", + "@backstage/plugin-cloudbuild": "0.3.20", + "@backstage/plugin-code-climate": "0.1.20", + "@backstage/plugin-code-coverage": "0.2.13", + "@backstage/plugin-code-coverage-backend": "0.2.13", + "@backstage/plugin-codescene": "0.1.15", + "@backstage/plugin-config-schema": "0.1.43", + "@backstage/plugin-cost-insights": "0.12.9", "@backstage/plugin-cost-insights-common": "0.1.1", - "@backstage/plugin-devtools": "0.1.0", - "@backstage/plugin-devtools-backend": "0.1.0", - "@backstage/plugin-devtools-common": "0.1.0", - "@backstage/plugin-dynatrace": "5.0.0", - "@backstage/plugin-entity-feedback": "0.2.1", - "@backstage/plugin-entity-feedback-backend": "0.1.3", + "@backstage/plugin-devtools": "0.1.2", + "@backstage/plugin-devtools-backend": "0.1.2", + "@backstage/plugin-devtools-common": "0.1.2", + "@backstage/plugin-dynatrace": "7.0.0", + "@backstage/plugin-entity-feedback": "0.2.3", + "@backstage/plugin-entity-feedback-backend": "0.1.5", "@backstage/plugin-entity-feedback-common": "0.1.1", - "@backstage/plugin-entity-validation": "0.1.3", - "@backstage/plugin-events-backend": "0.2.6", - "@backstage/plugin-events-backend-module-aws-sqs": "0.2.0", - "@backstage/plugin-events-backend-module-azure": "0.1.7", - "@backstage/plugin-events-backend-module-bitbucket-cloud": "0.1.7", - "@backstage/plugin-events-backend-module-gerrit": "0.1.7", - "@backstage/plugin-events-backend-module-github": "0.1.7", - "@backstage/plugin-events-backend-module-gitlab": "0.1.7", - "@backstage/plugin-events-backend-test-utils": "0.1.7", - "@backstage/plugin-events-node": "0.2.6", - "@internal/plugin-todo-list": "1.0.13", - "@internal/plugin-todo-list-backend": "1.0.13", - "@internal/plugin-todo-list-common": "1.0.10", - "@backstage/plugin-explore": "0.4.3", - "@backstage/plugin-explore-backend": "0.0.7", + "@backstage/plugin-entity-validation": "0.1.5", + "@backstage/plugin-events-backend": "0.2.8", + "@backstage/plugin-events-backend-module-aws-sqs": "0.2.2", + "@backstage/plugin-events-backend-module-azure": "0.1.9", + "@backstage/plugin-events-backend-module-bitbucket-cloud": "0.1.9", + "@backstage/plugin-events-backend-module-gerrit": "0.1.9", + "@backstage/plugin-events-backend-module-github": "0.1.9", + "@backstage/plugin-events-backend-module-gitlab": "0.1.9", + "@backstage/plugin-events-backend-test-utils": "0.1.9", + "@backstage/plugin-events-node": "0.2.8", + "@internal/plugin-todo-list": "1.0.15", + "@internal/plugin-todo-list-backend": "1.0.15", + "@internal/plugin-todo-list-common": "1.0.12", + "@backstage/plugin-explore": "0.4.6", + "@backstage/plugin-explore-backend": "0.0.9", "@backstage/plugin-explore-common": "0.0.1", - "@backstage/plugin-explore-react": "0.0.28", - "@backstage/plugin-firehydrant": "0.2.2", - "@backstage/plugin-fossa": "0.2.50", - "@backstage/plugin-gcalendar": "0.3.14", - "@backstage/plugin-gcp-projects": "0.3.37", - "@backstage/plugin-git-release-manager": "0.3.31", - "@backstage/plugin-github-actions": "0.5.18", - "@backstage/plugin-github-deployments": "0.1.49", - "@backstage/plugin-github-issues": "0.2.7", - "@backstage/plugin-github-pull-requests-board": "0.1.12", - "@backstage/plugin-gitops-profiles": "0.3.36", - "@backstage/plugin-gocd": "0.1.24", - "@backstage/plugin-graphiql": "0.2.50", - "@backstage/plugin-graphql-backend": "0.1.35", - "@backstage/plugin-graphql-voyager": "0.1.3", - "@backstage/plugin-home": "0.5.2", - "@backstage/plugin-home-react": "0.0.0", - "@backstage/plugin-ilert": "0.2.7", - "@backstage/plugin-jenkins": "0.8.0", - "@backstage/plugin-jenkins-backend": "0.2.0", - "@backstage/plugin-jenkins-common": "0.1.15", - "@backstage/plugin-kafka": "0.3.18", - "@backstage/plugin-kafka-backend": "0.2.38", - "@backstage/plugin-kubernetes": "0.9.0", - "@backstage/plugin-kubernetes-backend": "0.11.0", - "@backstage/plugin-kubernetes-common": "0.6.3", - "@backstage/plugin-lighthouse": "0.4.3", - "@backstage/plugin-lighthouse-backend": "0.2.1", - "@backstage/plugin-lighthouse-common": "0.1.1", - "@backstage/plugin-linguist": "0.1.3", - "@backstage/plugin-linguist-backend": "0.2.2", + "@backstage/plugin-explore-react": "0.0.30", + "@backstage/plugin-firehydrant": "0.2.4", + "@backstage/plugin-fossa": "0.2.52", + "@backstage/plugin-gcalendar": "0.3.16", + "@backstage/plugin-gcp-projects": "0.3.39", + "@backstage/plugin-git-release-manager": "0.3.33", + "@backstage/plugin-github-actions": "0.6.1", + "@backstage/plugin-github-deployments": "0.1.51", + "@backstage/plugin-github-issues": "0.2.9", + "@backstage/plugin-github-pull-requests-board": "0.1.14", + "@backstage/plugin-gitops-profiles": "0.3.38", + "@backstage/plugin-gocd": "0.1.26", + "@backstage/plugin-graphiql": "0.2.52", + "@backstage/plugin-graphql-backend": "0.1.37", + "@backstage/plugin-graphql-voyager": "0.1.5", + "@backstage/plugin-home": "0.5.4", + "@backstage/plugin-home-react": "0.1.1", + "@backstage/plugin-ilert": "0.2.9", + "@backstage/plugin-jenkins": "0.8.2", + "@backstage/plugin-jenkins-backend": "0.2.2", + "@backstage/plugin-jenkins-common": "0.1.17", + "@backstage/plugin-kafka": "0.3.20", + "@backstage/plugin-kafka-backend": "0.2.40", + "@backstage/plugin-kubernetes": "0.9.3", + "@backstage/plugin-kubernetes-backend": "0.11.2", + "@backstage/plugin-kubernetes-common": "0.6.5", + "@backstage/plugin-lighthouse": "0.4.5", + "@backstage/plugin-lighthouse-backend": "0.2.3", + "@backstage/plugin-lighthouse-common": "0.1.2", + "@backstage/plugin-linguist": "0.1.5", + "@backstage/plugin-linguist-backend": "0.3.1", "@backstage/plugin-linguist-common": "0.1.0", - "@backstage/plugin-microsoft-calendar": "0.1.3", - "@backstage/plugin-newrelic": "0.3.36", - "@backstage/plugin-newrelic-dashboard": "0.2.11", - "@backstage/plugin-octopus-deploy": "0.2.0", - "@backstage/plugin-org": "0.6.8", - "@backstage/plugin-org-react": "0.1.7", - "@backstage/plugin-pagerduty": "0.5.11", - "@backstage/plugin-periskop": "0.1.16", - "@backstage/plugin-periskop-backend": "0.1.16", - "@backstage/plugin-permission-backend": "0.5.20", - "@backstage/plugin-permission-common": "0.7.5", - "@backstage/plugin-permission-node": "0.7.8", - "@backstage/plugin-permission-react": "0.4.12", - "@backstage/plugin-playlist": "0.1.9", - "@backstage/plugin-playlist-backend": "0.3.1", - "@backstage/plugin-playlist-common": "0.1.6", - "@backstage/plugin-proxy-backend": "0.2.39", - "@backstage/plugin-puppetdb": "0.1.1", - "@backstage/plugin-rollbar": "0.4.18", - "@backstage/plugin-rollbar-backend": "0.1.42", - "@backstage/plugin-scaffolder": "1.13.1", - "@backstage/plugin-scaffolder-backend": "1.14.0", - "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.1.2", - "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.2.21", - "@backstage/plugin-scaffolder-backend-module-gitlab": "0.2.0", - "@backstage/plugin-scaffolder-backend-module-rails": "0.4.14", - "@backstage/plugin-scaffolder-backend-module-sentry": "0.1.5", - "@backstage/plugin-scaffolder-backend-module-yeoman": "0.2.18", - "@backstage/plugin-scaffolder-common": "1.3.0", - "@backstage/plugin-scaffolder-node": "0.1.3", - "@backstage/plugin-scaffolder-react": "1.4.0", - "@backstage/plugin-search": "1.3.0", - "@backstage/plugin-search-backend": "1.3.1", - "@backstage/plugin-search-backend-module-catalog": "0.1.1", - "@backstage/plugin-search-backend-module-elasticsearch": "1.3.0", - "@backstage/plugin-search-backend-module-explore": "0.1.1", - "@backstage/plugin-search-backend-module-pg": "0.5.6", - "@backstage/plugin-search-backend-module-techdocs": "0.1.1", - "@backstage/plugin-search-backend-node": "1.2.1", - "@backstage/plugin-search-common": "1.2.3", - "@backstage/plugin-search-react": "1.6.0", - "@backstage/plugin-sentry": "0.5.3", - "@backstage/plugin-shortcuts": "0.3.10", - "@backstage/plugin-sonarqube": "0.6.7", - "@backstage/plugin-sonarqube-backend": "0.1.10", - "@backstage/plugin-sonarqube-react": "0.1.5", - "@backstage/plugin-splunk-on-call": "0.4.7", - "@backstage/plugin-stack-overflow": "0.1.15", - "@backstage/plugin-stack-overflow-backend": "0.2.1", - "@backstage/plugin-stackstorm": "0.1.2", - "@backstage/plugin-tech-insights": "0.3.10", - "@backstage/plugin-tech-insights-backend": "0.5.11", - "@backstage/plugin-tech-insights-backend-module-jsonfc": "0.1.29", - "@backstage/plugin-tech-insights-common": "0.2.10", - "@backstage/plugin-tech-insights-node": "0.4.3", - "@backstage/plugin-tech-radar": "0.6.4", - "@backstage/plugin-techdocs": "1.6.2", - "@backstage/plugin-techdocs-addons-test-utils": "1.0.13", - "@backstage/plugin-techdocs-backend": "1.6.2", - "@backstage/plugin-techdocs-module-addons-contrib": "1.0.13", - "@backstage/plugin-techdocs-node": "1.7.1", - "@backstage/plugin-techdocs-react": "1.1.6", - "@backstage/plugin-todo": "0.2.20", - "@backstage/plugin-todo-backend": "0.1.42", - "@backstage/plugin-user-settings": "0.7.3", - "@backstage/plugin-user-settings-backend": "0.1.9", - "@backstage/plugin-vault": "0.1.12", - "@backstage/plugin-vault-backend": "0.3.1", - "@backstage/plugin-xcmetrics": "0.2.38", - "@backstage/plugin-catalog-backend-module-unprocessed": "0.0.0", - "@backstage/plugin-catalog-unprocessed-entities": "0.0.0" + "@backstage/plugin-microsoft-calendar": "0.1.5", + "@backstage/plugin-newrelic": "0.3.38", + "@backstage/plugin-newrelic-dashboard": "0.2.13", + "@backstage/plugin-nomad": "0.1.1", + "@backstage/plugin-nomad-backend": "0.1.1", + "@backstage/plugin-octopus-deploy": "0.2.2", + "@backstage/plugin-org": "0.6.10", + "@backstage/plugin-org-react": "0.1.9", + "@backstage/plugin-pagerduty": "0.6.1", + "@backstage/plugin-periskop": "0.1.18", + "@backstage/plugin-periskop-backend": "0.1.18", + "@backstage/plugin-permission-backend": "0.5.22", + "@backstage/plugin-permission-common": "0.7.7", + "@backstage/plugin-permission-node": "0.7.10", + "@backstage/plugin-permission-react": "0.4.14", + "@backstage/plugin-playlist": "0.1.12", + "@backstage/plugin-playlist-backend": "0.3.3", + "@backstage/plugin-playlist-common": "0.1.8", + "@backstage/plugin-proxy-backend": "0.2.41", + "@backstage/plugin-puppetdb": "0.1.3", + "@backstage/plugin-rollbar": "0.4.20", + "@backstage/plugin-rollbar-backend": "0.1.44", + "@backstage/plugin-scaffolder": "1.14.1", + "@backstage/plugin-scaffolder-backend": "1.15.1", + "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.2.0", + "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.2.23", + "@backstage/plugin-scaffolder-backend-module-gitlab": "0.2.2", + "@backstage/plugin-scaffolder-backend-module-rails": "0.4.16", + "@backstage/plugin-scaffolder-backend-module-sentry": "0.1.7", + "@backstage/plugin-scaffolder-backend-module-yeoman": "0.2.20", + "@backstage/plugin-scaffolder-common": "1.3.2", + "@backstage/plugin-scaffolder-node": "0.1.5", + "@backstage/plugin-scaffolder-react": "1.5.1", + "@backstage/plugin-search": "1.3.3", + "@backstage/plugin-search-backend": "1.3.3", + "@backstage/plugin-search-backend-module-catalog": "0.1.3", + "@backstage/plugin-search-backend-module-elasticsearch": "1.3.2", + "@backstage/plugin-search-backend-module-explore": "0.1.3", + "@backstage/plugin-search-backend-module-pg": "0.5.8", + "@backstage/plugin-search-backend-module-techdocs": "0.1.3", + "@backstage/plugin-search-backend-node": "1.2.3", + "@backstage/plugin-search-common": "1.2.5", + "@backstage/plugin-search-react": "1.6.3", + "@backstage/plugin-sentry": "0.5.5", + "@backstage/plugin-shortcuts": "0.3.12", + "@backstage/plugin-sonarqube": "0.7.1", + "@backstage/plugin-sonarqube-backend": "0.2.1", + "@backstage/plugin-sonarqube-react": "0.1.7", + "@backstage/plugin-splunk-on-call": "0.4.9", + "@backstage/plugin-stack-overflow": "0.1.18", + "@backstage/plugin-stack-overflow-backend": "0.2.3", + "@backstage/plugin-stackstorm": "0.1.4", + "@backstage/plugin-tech-insights": "0.3.12", + "@backstage/plugin-tech-insights-backend": "0.5.13", + "@backstage/plugin-tech-insights-backend-module-jsonfc": "0.1.31", + "@backstage/plugin-tech-insights-common": "0.2.11", + "@backstage/plugin-tech-insights-node": "0.4.5", + "@backstage/plugin-tech-radar": "0.6.6", + "@backstage/plugin-techdocs": "1.6.5", + "@backstage/plugin-techdocs-addons-test-utils": "1.0.16", + "@backstage/plugin-techdocs-backend": "1.6.4", + "@backstage/plugin-techdocs-module-addons-contrib": "1.0.15", + "@backstage/plugin-techdocs-node": "1.7.3", + "@backstage/plugin-techdocs-react": "1.1.8", + "@backstage/plugin-todo": "0.2.22", + "@backstage/plugin-todo-backend": "0.1.44", + "@backstage/plugin-user-settings": "0.7.5", + "@backstage/plugin-user-settings-backend": "0.1.11", + "@backstage/plugin-vault": "0.1.14", + "@backstage/plugin-vault-backend": "0.3.3", + "@backstage/plugin-xcmetrics": "0.2.40", + "@backstage/plugin-analytics-module-newrelic-browser": "0.0.0", + "@backstage/plugin-catalog-backend-module-gcp": "0.0.0" }, "changesets": [ - "afraid-rules-yell", - "angry-jobs-ring", - "beige-kangaroos-suffer", - "beige-zebras-walk", - "breezy-kids-obey", - "chatty-ads-attack", - "chatty-seals-tap", - "clean-meals-pay", - "clean-months-bake", - "clean-years-whisper", - "create-app-1684855417", - "create-app-1686056275", - "curvy-years-smoke", - "dull-bottles-teach", - "famous-days-kneel", - "fast-ears-know", - "fast-zebras-watch", - "few-games-swim", - "few-oranges-complain", - "few-pugs-jam", - "five-turtles-play", - "gentle-turtles-applaud", - "giant-maps-compete", - "good-rabbits-exist", - "gorgeous-timers-act", - "grumpy-carrots-sin", - "heavy-ravens-fold", - "hot-apples-cross", - "hot-badgers-double", - "hungry-lies-drop", - "itchy-mirrors-greet", - "khaki-radios-teach", - "lazy-dancers-begin", - "light-cows-bow", - "little-boats-think", - "long-lobsters-brake", - "lovely-impalas-sell", - "lucky-keys-behave", - "mean-insects-hope", - "modern-dancers-sit", - "nice-peaches-reflect", - "nice-readers-heal", - "nine-bags-dream", - "ninety-jeans-scream", - "ninety-turkeys-knock", - "olive-carpets-explode", - "orange-taxis-exercise", - "perfect-donkeys-cry", - "perfect-readers-attack", - "pink-goats-talk", - "plenty-roses-raise", - "poor-months-switch", - "rare-bugs-chew", - "real-donuts-brush", - "renovate-de04315", - "selfish-carrots-sneeze", - "selfish-mugs-study", - "selfish-olives-end", - "shaggy-gorillas-occur", - "shaggy-maps-whisper", - "shaggy-terms-travel", - "short-seahorses-kiss", - "shy-numbers-try", - "silent-garlics-drum", - "silent-kangaroos-pay", - "silver-cars-type", - "silver-ducks-drum", - "smart-berries-wash", - "sour-papayas-wink", - "strange-geese-argue", - "tame-buttons-smell", - "tasty-oranges-sleep", - "three-guests-beam", - "tiny-hounds-cross", - "twenty-suns-breathe", - "two-mayflies-tell", - "violet-pots-push", - "warm-hornets-fetch", - "weak-rats-serve", - "weak-snails-spar", - "weak-snails-spark", - "weak-snails-sparkl", - "weak-snails-sparkle", - "wet-vans-drive", - "wise-bats-repair", - "yellow-crews-float" + "analytics-millenial-whoop", + "angry-beers-relate", + "chatty-foxes-buy", + "chatty-seahorses-juggle", + "chilly-keys-count", + "cold-numbers-sleep", + "create-app-1690284535", + "create-app-1690892926", + "dirty-chefs-listen", + "gorgeous-months-doubt", + "hungry-shrimps-care", + "khaki-flies-draw", + "kind-cougars-allow", + "large-experts-poke", + "large-vans-cross", + "loud-garlics-press", + "mean-squids-relax", + "mighty-lions-search-2", + "mighty-lions-search-3", + "mighty-lions-search", + "neat-coins-raise", + "neat-lamps-press", + "odd-avocados-buy", + "pink-squids-nail", + "popular-fans-camp", + "quiet-starfishes-kick", + "rare-pens-exist", + "rich-zoos-occur", + "rude-feet-sparkle", + "search-donuts-wash", + "selfish-coats-shout", + "serious-bats-repair", + "slimy-kids-jam", + "smart-pandas-applaud", + "stale-wombats-talk", + "strong-bobcats-unite", + "stupid-berries-run", + "ten-otters-appear", + "tender-fireants-cheer", + "thin-yaks-hang", + "tidy-cobras-scream", + "tough-dolphins-care", + "tough-lies-float", + "wild-timers-sparkle" ] } diff --git a/.changeset/quiet-starfishes-kick.md b/.changeset/quiet-starfishes-kick.md new file mode 100644 index 0000000000..2fc8ed632e --- /dev/null +++ b/.changeset/quiet-starfishes-kick.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-home': patch +--- + +Now, user can provide a language (optional) as input to receive a greeting in that specific language. Example: `` diff --git a/.changeset/rare-bugs-chew.md b/.changeset/rare-bugs-chew.md deleted file mode 100644 index 1b9f12c13e..0000000000 --- a/.changeset/rare-bugs-chew.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-github': patch ---- - -Properly handle `async` event callback diff --git a/.changeset/rare-pens-exist.md b/.changeset/rare-pens-exist.md new file mode 100644 index 0000000000..7363f5033a --- /dev/null +++ b/.changeset/rare-pens-exist.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Enable to print the config schema not merged with the `--no-merge` flag diff --git a/.changeset/real-donuts-brush.md b/.changeset/real-donuts-brush.md deleted file mode 100644 index b6a875bd64..0000000000 --- a/.changeset/real-donuts-brush.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-adr-backend': patch ---- - -Use front matter parser for MADR v3 formatted ADRs when indexing status/date diff --git a/.changeset/renovate-de04315.md b/.changeset/renovate-de04315.md deleted file mode 100644 index 9b8f5bd72c..0000000000 --- a/.changeset/renovate-de04315.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-code-coverage-backend': patch ---- - -Updated dependency `xml2js` to `^0.6.0`. diff --git a/.changeset/rich-zoos-occur.md b/.changeset/rich-zoos-occur.md new file mode 100644 index 0000000000..979acb93c6 --- /dev/null +++ b/.changeset/rich-zoos-occur.md @@ -0,0 +1,6 @@ +--- +'@backstage/backend-plugin-api': minor +'@backstage/backend-defaults': minor +--- + +**BREAKING**: Removing shared environments concept from the new experimental backend system. diff --git a/.changeset/rude-feet-sparkle.md b/.changeset/rude-feet-sparkle.md new file mode 100644 index 0000000000..fabc83bb0b --- /dev/null +++ b/.changeset/rude-feet-sparkle.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-analytics-module-newrelic-browser': patch +--- + +Introduced the New Relic Browser analytics module. Check out the plugins [README.md](https://github.com/backstage/backstage/tree/master/plugins/analytics-module-newrelic-browser) for more details! diff --git a/.changeset/search-donuts-wash.md b/.changeset/search-donuts-wash.md new file mode 100644 index 0000000000..2fa3325761 --- /dev/null +++ b/.changeset/search-donuts-wash.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search-backend-node': patch +--- + +Fix Lunr search engine highlight by ignoring invalid metadata positions. diff --git a/.changeset/selfish-carrots-sneeze.md b/.changeset/selfish-carrots-sneeze.md deleted file mode 100644 index 0920f78f86..0000000000 --- a/.changeset/selfish-carrots-sneeze.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-proxy-backend': patch ---- - -Marked headers `Authorization` and `X-Api-Key` as secret in order to not show up in frontend configuration. diff --git a/.changeset/selfish-coats-shout.md b/.changeset/selfish-coats-shout.md new file mode 100644 index 0000000000..071c47e371 --- /dev/null +++ b/.changeset/selfish-coats-shout.md @@ -0,0 +1,55 @@ +--- +'@backstage/config-loader': minor +--- + +Adds a new `deepVisibility` schema keyword that sets child visibility recursively to the defined value, respecting preexisting values or child `deepVisibility`. + +Example usage: + +```ts +export interface Config { + /** + * Enforces a default of `secret` instead of `backend` for this object. + * @deepVisibility secret + */ + mySecretProperty: { + type: 'object'; + properties: { + secretValue: { + type: 'string'; + }; + + verySecretProperty: { + type: 'string'; + }; + }; + }; +} +``` + +Example of a schema that would not be allowed: + +```ts +export interface Config { + /** + * Set the top level property to secret, enforcing a default of `secret` instead of `backend` for this object. + * @deepVisibility secret + */ + mySecretProperty: { + type: 'object'; + properties: { + frontendUrl: { + /** + * We can NOT override the visibility to reveal a property to the front end. + * @visibility frontend + */ + type: 'string'; + }; + + verySecretProperty: { + type: 'string'; + }; + }; + }; +} +``` diff --git a/.changeset/selfish-mugs-study.md b/.changeset/selfish-mugs-study.md deleted file mode 100644 index 0a2152aecc..0000000000 --- a/.changeset/selfish-mugs-study.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-kubernetes': patch ---- - -Add errors to PodDrawer diff --git a/.changeset/selfish-olives-end.md b/.changeset/selfish-olives-end.md deleted file mode 100644 index cb3778f316..0000000000 --- a/.changeset/selfish-olives-end.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-app-api': patch ---- - -Introduced built-in middleware into the default `HttpService` implementation that throws a `ServiceNotAvailable` error when plugins aren't able to serve request. Also introduced a request stalling mechanism that pauses incoming request until plugins have been fully initialized. diff --git a/.changeset/serious-bats-repair.md b/.changeset/serious-bats-repair.md new file mode 100644 index 0000000000..d93b49bda0 --- /dev/null +++ b/.changeset/serious-bats-repair.md @@ -0,0 +1,5 @@ +--- +'@backstage/repo-tools': patch +--- + +Update `schema openapi generate` command to now create a default router that can be imported and used directly. diff --git a/.changeset/shaggy-gorillas-occur.md b/.changeset/shaggy-gorillas-occur.md deleted file mode 100644 index ce7c2aba3b..0000000000 --- a/.changeset/shaggy-gorillas-occur.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -'@backstage/plugin-linguist-backend': minor ---- - -**BREAKING**: Removed public constructor from `LinguistBackendApi`. Removed export of `LinguistBackendDatabase` and `LinguistBackendStore` - -Several improvements to the Linguist backend have been made: - -- Added tests for the `LinguistBackendDatabase` and `LinguistBackendApi` -- Added support for using SQLite as a database, helpful for local development -- Removed the default from the `processes_date` column -- Converted the `LinguistBackendApi` into an Interface -- Added the `LinguistBackendClient` which implements the `LinguistBackendApi` Interface -- Unprocessed entities will get processed before stale entities -- Entities in the Linguist database but not in the Catalog anymore will be deleted -- Improved the README's headings diff --git a/.changeset/shaggy-maps-whisper.md b/.changeset/shaggy-maps-whisper.md deleted file mode 100644 index d67a98373c..0000000000 --- a/.changeset/shaggy-maps-whisper.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/core-components': patch -'@backstage/plugin-api-docs': patch ---- - -Replaced usages of `theme.palette.theme.hint` with `theme.palette.text.secondary` as it has been removed in MUI v5 diff --git a/.changeset/shaggy-terms-travel.md b/.changeset/shaggy-terms-travel.md deleted file mode 100644 index a131608487..0000000000 --- a/.changeset/shaggy-terms-travel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-backend-module-pg': patch ---- - -Updated Postgres search query filter in DatabaseDocumentStore to support field value search in array. diff --git a/.changeset/short-seahorses-kiss.md b/.changeset/short-seahorses-kiss.md deleted file mode 100644 index 0127e4c575..0000000000 --- a/.changeset/short-seahorses-kiss.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs': patch ---- - -Change deprecated local references to import from shared `plugin-techdocs-react` plugin diff --git a/.changeset/shy-numbers-try.md b/.changeset/shy-numbers-try.md deleted file mode 100644 index a0af1bf12b..0000000000 --- a/.changeset/shy-numbers-try.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': minor ---- - -`scaffolder/next`: Don't render `TemplateGroups` when there's no results in with search query diff --git a/.changeset/silent-garlics-drum.md b/.changeset/silent-garlics-drum.md deleted file mode 100644 index 64666521c8..0000000000 --- a/.changeset/silent-garlics-drum.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-gitlab': patch ---- - -Added option to skip forked repos diff --git a/.changeset/silent-kangaroos-pay.md b/.changeset/silent-kangaroos-pay.md deleted file mode 100644 index f3da827a34..0000000000 --- a/.changeset/silent-kangaroos-pay.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': patch ---- - -Extract `ui:*` fields from conditional `then` and `else` schema branches. diff --git a/.changeset/silver-cars-type.md b/.changeset/silver-cars-type.md deleted file mode 100644 index 0636eccd8f..0000000000 --- a/.changeset/silver-cars-type.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-github-actions': minor ---- - -Added support GitHub Enterprise hosted repositories. - -**BREAKING**: The `GithubActionsClient` is updated to take an `scmAuthApi` instead of the previous `githubAuthApi`. This does not require any code changes unless you construct your own `GithubActionsClient` diff --git a/.changeset/silver-ducks-drum.md b/.changeset/silver-ducks-drum.md deleted file mode 100644 index 6cca57fdd4..0000000000 --- a/.changeset/silver-ducks-drum.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-react': patch ---- - -`EntityAutocompletePicker` add `initialSelectedOptions` prop diff --git a/.changeset/slimy-kids-jam.md b/.changeset/slimy-kids-jam.md new file mode 100644 index 0000000000..c02daf325e --- /dev/null +++ b/.changeset/slimy-kids-jam.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': minor +--- + +Added OpenTelemetry spans for catalog processing diff --git a/.changeset/smart-berries-wash.md b/.changeset/smart-berries-wash.md deleted file mode 100644 index 8d1454c837..0000000000 --- a/.changeset/smart-berries-wash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-devtools': patch ---- - -Added note to README about how secrets are displayed in the Config tab of the DevTools plugin diff --git a/.changeset/smart-pandas-applaud.md b/.changeset/smart-pandas-applaud.md new file mode 100644 index 0000000000..5f2c297df5 --- /dev/null +++ b/.changeset/smart-pandas-applaud.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-todo-backend': minor +'@backstage/plugin-catalog-backend': minor +'@backstage/plugin-search-backend': minor +--- + +Now performs request validation based on OpenAPI schema through `@backstage/backend-openapi-utils`. Error responses for invalid input, like `"a"` instead of a number, may have changed. diff --git a/.changeset/sour-papayas-wink.md b/.changeset/sour-papayas-wink.md deleted file mode 100644 index 30d5110fff..0000000000 --- a/.changeset/sour-papayas-wink.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/catalog-model': minor ---- - -Deprecate target field and make targetRef required in common.schema.json diff --git a/.changeset/stale-wombats-talk.md b/.changeset/stale-wombats-talk.md new file mode 100644 index 0000000000..f4e0b852f8 --- /dev/null +++ b/.changeset/stale-wombats-talk.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-aws': patch +--- + +Added option to configure AWS `accountId` in `AwsS3EntityProvider` diff --git a/.changeset/strange-geese-argue.md b/.changeset/strange-geese-argue.md deleted file mode 100644 index 7be0886abb..0000000000 --- a/.changeset/strange-geese-argue.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-adr-common': patch ---- - -Add utility function for parsing MADR front matter diff --git a/.changeset/strong-bobcats-unite.md b/.changeset/strong-bobcats-unite.md new file mode 100644 index 0000000000..ef86023d58 --- /dev/null +++ b/.changeset/strong-bobcats-unite.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-test-utils': patch +--- + +Add needed constants and constructs to support PostgreSQL version 14 as test database diff --git a/.changeset/stupid-berries-run.md b/.changeset/stupid-berries-run.md new file mode 100644 index 0000000000..f506ce2475 --- /dev/null +++ b/.changeset/stupid-berries-run.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-home': patch +--- + +Make sure the widget name is never empty in the `AddWidgetDialog`. If the title was set to "", the entry would contain an empty string. Use the name as a fallback diff --git a/.changeset/tame-buttons-smell.md b/.changeset/tame-buttons-smell.md deleted file mode 100644 index c7e51738e7..0000000000 --- a/.changeset/tame-buttons-smell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-kubernetes-backend': patch ---- - -Fixed wrong `pluginID` in the `kubernetes` alpha backend support, that made the `kubernetes` plugin fail with the new experimental backend. diff --git a/.changeset/tasty-oranges-sleep.md b/.changeset/tasty-oranges-sleep.md deleted file mode 100644 index 7c99ecc822..0000000000 --- a/.changeset/tasty-oranges-sleep.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-app-api': patch ---- - -Added handling of `ServiceUnavailableError` to error handling middleware. diff --git a/.changeset/ten-otters-appear.md b/.changeset/ten-otters-appear.md new file mode 100644 index 0000000000..4cb3d301ae --- /dev/null +++ b/.changeset/ten-otters-appear.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-react': patch +--- + +Fixed bug in Workflow component by passing a prop `templateName` down to Stepper component. diff --git a/.changeset/tender-fireants-cheer.md b/.changeset/tender-fireants-cheer.md new file mode 100644 index 0000000000..1d829f673b --- /dev/null +++ b/.changeset/tender-fireants-cheer.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-devtools': patch +--- + +Fix readme typo diff --git a/.changeset/thin-yaks-hang.md b/.changeset/thin-yaks-hang.md new file mode 100644 index 0000000000..1a1bdb4ab7 --- /dev/null +++ b/.changeset/thin-yaks-hang.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search-backend': patch +--- + +Add missing `configSchema` to package.json diff --git a/.changeset/three-guests-beam.md b/.changeset/three-guests-beam.md deleted file mode 100644 index b46e80a13c..0000000000 --- a/.changeset/three-guests-beam.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-react': patch ---- - -`EntityLifecycleFilter` loads data using the facets endpoint diff --git a/.changeset/tidy-cobras-scream.md b/.changeset/tidy-cobras-scream.md new file mode 100644 index 0000000000..2917f11dfc --- /dev/null +++ b/.changeset/tidy-cobras-scream.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-scaffolder-backend-module-confluence-to-markdown': patch +'@backstage/plugin-scaffolder-backend-module-cookiecutter': patch +'@backstage/plugin-scaffolder-backend-module-rails': patch +--- + +Import helpers from the node package instead of the backend package diff --git a/.changeset/tiny-hounds-cross.md b/.changeset/tiny-hounds-cross.md deleted file mode 100644 index 822538423f..0000000000 --- a/.changeset/tiny-hounds-cross.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': patch -'@backstage/plugin-home-react': patch -'@backstage/plugin-scaffolder': patch -'@backstage/plugin-home': patch ---- - -bump `rjsf` dependencies to 5.7.3 diff --git a/.changeset/tough-dolphins-care.md b/.changeset/tough-dolphins-care.md new file mode 100644 index 0000000000..7d9739ec10 --- /dev/null +++ b/.changeset/tough-dolphins-care.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-gcp': minor +--- + +Added GCP catalog plugin with GKE provider diff --git a/.changeset/tough-lies-float.md b/.changeset/tough-lies-float.md new file mode 100644 index 0000000000..2ad3b8623f --- /dev/null +++ b/.changeset/tough-lies-float.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +'@backstage/plugin-scaffolder-node': patch +--- + +Deprecated `executeShellCommand`, `RunCommandOptions`, and `fetchContents` from `@backstage/plugin-scaffolder-backend`, since they are useful for Scaffolder modules (who should not be importing from the plugin package itself). You should now import these from `@backstage/plugin-scaffolder-backend-node` instead. `RunCommandOptions` was renamed in the Node package as `ExecuteShellCommandOptions`, for consistency. diff --git a/.changeset/twenty-suns-breathe.md b/.changeset/twenty-suns-breathe.md deleted file mode 100644 index edc189a95e..0000000000 --- a/.changeset/twenty-suns-breathe.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': minor ---- - -`scaffolder/next`: provide a `ScaffolderField` component which is meant to replace some of the `FormControl` components from MUI, making it easier to write `FieldExtensions`. diff --git a/.changeset/two-mayflies-tell.md b/.changeset/two-mayflies-tell.md deleted file mode 100644 index a5226b5164..0000000000 --- a/.changeset/two-mayflies-tell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Add discovery feature to the onboard cli command. diff --git a/.changeset/unlucky-bags-pump.md b/.changeset/unlucky-bags-pump.md new file mode 100644 index 0000000000..a275887410 --- /dev/null +++ b/.changeset/unlucky-bags-pump.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend': patch +--- + +Add frontend visibility to provider objects in `auth` config. diff --git a/.changeset/violet-pots-push.md b/.changeset/violet-pots-push.md deleted file mode 100644 index f0074ed82e..0000000000 --- a/.changeset/violet-pots-push.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-stack-overflow': patch -'@backstage/plugin-home-react': minor -'@backstage/plugin-home': patch ---- - -Extract new plugin-home-react package and deprecate createCardExtension in plugin-home diff --git a/.changeset/warm-hornets-fetch.md b/.changeset/warm-hornets-fetch.md deleted file mode 100644 index eb84a72f0a..0000000000 --- a/.changeset/warm-hornets-fetch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog': patch ---- - -Keyboard navigation to open EntityContextMenu now focus visible the first element. diff --git a/.changeset/weak-rats-serve.md b/.changeset/weak-rats-serve.md deleted file mode 100644 index fe7cd78510..0000000000 --- a/.changeset/weak-rats-serve.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@backstage/core-app-api': patch -'@backstage/core-plugin-api': patch -'@backstage/dev-utils': patch -'@backstage/plugin-scaffolder-react': patch -'@backstage/plugin-scaffolder': patch ---- - -Add `PropsWithChildren` to usages of `ComponentType`, in preparation for React 18 where the children are no longer implicit. diff --git a/.changeset/weak-snails-spar.md b/.changeset/weak-snails-spar.md deleted file mode 100644 index 3cd930d5b0..0000000000 --- a/.changeset/weak-snails-spar.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs-addons-test-utils': patch ---- - -Avoiding re-running tests on cleanup. diff --git a/.changeset/weak-snails-spark.md b/.changeset/weak-snails-spark.md deleted file mode 100644 index c82626ea39..0000000000 --- a/.changeset/weak-snails-spark.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/test-utils': minor ---- - -Test App Wrapper is now using `UnifiedThemeProvider` for supporting MUI v5 next to MUI v4 in tests. diff --git a/.changeset/weak-snails-sparkl.md b/.changeset/weak-snails-sparkl.md deleted file mode 100644 index 9bbc7d843b..0000000000 --- a/.changeset/weak-snails-sparkl.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'@backstage/app-defaults': minor -'@backstage/theme': minor ---- - -**MUI v5 Support:** Adding platform-wide support for MUI v5 allowing a transition phase for migrating central plugins & components over. We still support v4 instances & plugins by adding a - -To allow the future support of plugins & components using MUI v5 you want to upgrade your `AppTheme`'s to using the `UnifiedThemeProvider` - -```diff - Provider: ({ children }) => ( -- -- {children} -- -+ - ), -``` diff --git a/.changeset/weak-snails-sparkle.md b/.changeset/weak-snails-sparkle.md deleted file mode 100644 index 95a2255e56..0000000000 --- a/.changeset/weak-snails-sparkle.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Enforcing MUI v5 specific linting to minimize bundle size. diff --git a/.changeset/wet-vans-drive.md b/.changeset/wet-vans-drive.md deleted file mode 100644 index 75f4d96293..0000000000 --- a/.changeset/wet-vans-drive.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': minor -'@backstage/plugin-catalog-backend-module-github': patch -'@backstage/integration': patch ---- - -Add support for Repository Variables and Secrets to the `publish:github` and `github:repo:create` scaffolder actions. You will need to add `read/write` permissions to your GITHUB_TOKEN and/or Github Backstage App for Repository `Secrets` and `Variables` - -Upgrade octokit introduces some breaking changes. diff --git a/.changeset/wild-timers-sparkle.md b/.changeset/wild-timers-sparkle.md new file mode 100644 index 0000000000..3df14f3a69 --- /dev/null +++ b/.changeset/wild-timers-sparkle.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-microsoft-calendar': patch +--- + +README update - example of apiRef definition and fixed component name diff --git a/.changeset/wise-bats-repair.md b/.changeset/wise-bats-repair.md deleted file mode 100644 index fc383eb11d..0000000000 --- a/.changeset/wise-bats-repair.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-kubernetes-backend': patch -'@backstage/plugin-kubernetes': patch ---- - -Add proposed fix dialog for pod errors diff --git a/.changeset/yellow-crews-float.md b/.changeset/yellow-crews-float.md deleted file mode 100644 index ce3ce84ad7..0000000000 --- a/.changeset/yellow-crews-float.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'@backstage/plugin-analytics-module-ga4': patch -'@backstage/plugin-entity-validation': patch -'@backstage/plugin-devtools-backend': patch -'@backstage/plugin-linguist-backend': patch -'@backstage/plugin-techdocs-react': patch -'@backstage/plugin-dynatrace': patch -'@backstage/plugin-pagerduty': patch ---- - -Update plugin installation docs to be more consistent across documentations diff --git a/.eslintrc.js b/.eslintrc.js index 1616404a6f..0d937fc6b4 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -246,11 +246,14 @@ module.exports = { 1, { forbid: [ - { element: 'button', message: 'use MUI diff --git a/packages/backend-app-api/CHANGELOG.md b/packages/backend-app-api/CHANGELOG.md index 275161942d..cbfbfef468 100644 --- a/packages/backend-app-api/CHANGELOG.md +++ b/packages/backend-app-api/CHANGELOG.md @@ -1,5 +1,110 @@ # @backstage/backend-app-api +## 0.5.0-next.1 + +### Minor Changes + +- b9c57a4f857e: **BREAKING**: Renamed `configServiceFactory` to `rootConfigServiceFactory`. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/config-loader@1.4.0-next.1 + - @backstage/plugin-auth-node@0.2.17-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/backend-tasks@0.5.5-next.1 + - @backstage/plugin-permission-node@0.7.11-next.1 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + +## 0.4.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config-loader@1.4.0-next.0 + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/backend-tasks@0.5.5-next.0 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.17-next.0 + - @backstage/plugin-permission-node@0.7.11-next.0 + +## 0.4.5 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-common@0.19.1 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/backend-tasks@0.5.4 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.8 + - @backstage/config-loader@1.3.2 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.16 + - @backstage/plugin-permission-node@0.7.10 + +## 0.4.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/backend-tasks@0.5.4-next.0 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.8 + - @backstage/config-loader@1.3.2-next.0 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.16-next.0 + - @backstage/plugin-permission-node@0.7.10-next.0 + +## 0.4.4 + +### Patch Changes + +- 3bb4158a8aa4: Switched startup strategy to initialize all plugins in parallel, as well as hook into the new startup lifecycle hooks. +- 68a21956ef52: Remove reference to deprecated import +- a5c5491ff50c: Use `durationToMilliseconds` from `@backstage/types` instead of our own +- 2c9f67e6f166: Introduced built-in middleware into the default `HttpService` implementation that throws a `ServiceNotAvailable` error when plugins aren't able to serve request. Also introduced a request stalling mechanism that pauses incoming request until plugins have been fully initialized. +- c4e8fefd9f13: Added handling of `ServiceUnavailableError` to error handling middleware. +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/types@1.1.0 + - @backstage/config-loader@1.3.1 + - @backstage/errors@1.2.0 + - @backstage/backend-plugin-api@0.5.3 + - @backstage/backend-tasks@0.5.3 + - @backstage/plugin-auth-node@0.2.15 + - @backstage/plugin-permission-node@0.7.9 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.8 + +## 0.4.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/backend-tasks@0.5.3-next.2 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/config-loader@1.3.1-next.1 + - @backstage/errors@1.2.0-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.15-next.2 + - @backstage/plugin-permission-node@0.7.9-next.2 + ## 0.4.4-next.1 ### Patch Changes diff --git a/packages/backend-app-api/api-report.md b/packages/backend-app-api/api-report.md index 5f452f9e03..675a7755fc 100644 --- a/packages/backend-app-api/api-report.md +++ b/packages/backend-app-api/api-report.md @@ -9,7 +9,6 @@ import type { AppConfig } from '@backstage/config'; import { BackendFeature } from '@backstage/backend-plugin-api'; import { CacheClient } from '@backstage/backend-common'; import { Config } from '@backstage/config'; -import { ConfigService } from '@backstage/backend-plugin-api'; import { CorsOptions } from 'cors'; import { ErrorRequestHandler } from 'express'; import { Express as Express_2 } from 'express'; @@ -30,6 +29,7 @@ import { PluginEndpointDiscovery } from '@backstage/backend-common'; import { RemoteConfigSourceOptions } from '@backstage/config-loader'; import { RequestHandler } from 'express'; import { RequestListener } from 'http'; +import { RootConfigService } from '@backstage/backend-plugin-api'; import { RootHttpRouterService } from '@backstage/backend-plugin-api'; import { RootLifecycleService } from '@backstage/backend-plugin-api'; import { RootLoggerService } from '@backstage/backend-plugin-api'; @@ -53,17 +53,6 @@ export interface Backend { // @public (undocumented) export const cacheServiceFactory: () => ServiceFactory; -// @public (undocumented) -export interface ConfigFactoryOptions { - argv?: string[]; - remote?: Pick; -} - -// @public (undocumented) -export const configServiceFactory: ( - options?: ConfigFactoryOptions | undefined, -) => ServiceFactory; - // @public (undocumented) export function createConfigSecretEnumerator(options: { logger: LoggerService; @@ -224,7 +213,7 @@ export interface MiddlewareFactoryErrorOptions { // @public export interface MiddlewareFactoryOptions { // (undocumented) - config: ConfigService; + config: RootConfigService; // (undocumented) logger: LoggerService; } @@ -244,12 +233,23 @@ export function readHelmetOptions(config?: Config): HelmetOptions; // @public export function readHttpServerOptions(config?: Config): HttpServerOptions; +// @public (undocumented) +export interface RootConfigFactoryOptions { + argv?: string[]; + remote?: Pick; +} + +// @public (undocumented) +export const rootConfigServiceFactory: ( + options?: RootConfigFactoryOptions | undefined, +) => ServiceFactory; + // @public (undocumented) export interface RootHttpRouterConfigureContext { // (undocumented) app: Express_2; // (undocumented) - config: ConfigService; + config: RootConfigService; // (undocumented) lifecycle: LifecycleService; // (undocumented) diff --git a/packages/backend-app-api/package.json b/packages/backend-app-api/package.json index 903249f164..d1aa511794 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.4-next.1", + "version": "0.5.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-app-api/src/config/ObservableConfigProxy.ts b/packages/backend-app-api/src/config/ObservableConfigProxy.ts index dd3334c9a5..8c8d3b553f 100644 --- a/packages/backend-app-api/src/config/ObservableConfigProxy.ts +++ b/packages/backend-app-api/src/config/ObservableConfigProxy.ts @@ -14,12 +14,11 @@ * limitations under the License. */ -import { ConfigService } from '@backstage/backend-plugin-api'; -import { ConfigReader } from '@backstage/config'; +import { Config, ConfigReader } from '@backstage/config'; import { JsonValue } from '@backstage/types'; -export class ObservableConfigProxy implements ConfigService { - private config: ConfigService = new ConfigReader({}); +export class ObservableConfigProxy implements Config { + private config: Config = new ConfigReader({}); private readonly subscribers: (() => void)[] = []; @@ -32,7 +31,7 @@ export class ObservableConfigProxy implements ConfigService { } } - setConfig(config: ConfigService) { + setConfig(config: Config) { if (this.parent) { throw new Error('immutable'); } @@ -62,9 +61,9 @@ export class ObservableConfigProxy implements ConfigService { }; } - private select(required: true): ConfigService; - private select(required: false): ConfigService | undefined; - private select(required: boolean): ConfigService | undefined { + private select(required: true): Config; + private select(required: false): Config | undefined; + private select(required: boolean): Config | undefined { if (this.parent && this.parentKey) { if (required) { return this.parent.select(true).getConfig(this.parentKey); @@ -87,19 +86,19 @@ export class ObservableConfigProxy implements ConfigService { getOptional(key?: string): T | undefined { return this.select(false)?.getOptional(key); } - getConfig(key: string): ConfigService { + getConfig(key: string): Config { return new ObservableConfigProxy(this, key); } - getOptionalConfig(key: string): ConfigService | undefined { + getOptionalConfig(key: string): Config | undefined { if (this.select(false)?.has(key)) { return new ObservableConfigProxy(this, key); } return undefined; } - getConfigArray(key: string): ConfigService[] { + getConfigArray(key: string): Config[] { return this.select(true).getConfigArray(key); } - getOptionalConfigArray(key: string): ConfigService[] | undefined { + getOptionalConfigArray(key: string): Config[] | undefined { return this.select(false)?.getOptionalConfigArray(key); } getNumber(key: string): number { diff --git a/packages/backend-app-api/src/http/MiddlewareFactory.ts b/packages/backend-app-api/src/http/MiddlewareFactory.ts index 774e784d1d..bd78d77045 100644 --- a/packages/backend-app-api/src/http/MiddlewareFactory.ts +++ b/packages/backend-app-api/src/http/MiddlewareFactory.ts @@ -14,7 +14,10 @@ * limitations under the License. */ -import { ConfigService, LoggerService } from '@backstage/backend-plugin-api'; +import { + RootConfigService, + LoggerService, +} from '@backstage/backend-plugin-api'; import { Request, Response, @@ -47,7 +50,7 @@ import { NotImplementedError } from '@backstage/errors'; * @public */ export interface MiddlewareFactoryOptions { - config: ConfigService; + config: RootConfigService; logger: LoggerService; } @@ -78,7 +81,7 @@ export interface MiddlewareFactoryErrorOptions { * @public */ export class MiddlewareFactory { - #config: ConfigService; + #config: RootConfigService; #logger: LoggerService; /** diff --git a/packages/backend-app-api/src/services/implementations/cache/cacheServiceFactory.ts b/packages/backend-app-api/src/services/implementations/cache/cacheServiceFactory.ts index 2208249280..b91356a13a 100644 --- a/packages/backend-app-api/src/services/implementations/cache/cacheServiceFactory.ts +++ b/packages/backend-app-api/src/services/implementations/cache/cacheServiceFactory.ts @@ -24,7 +24,7 @@ import { export const cacheServiceFactory = createServiceFactory({ service: coreServices.cache, deps: { - config: coreServices.config, + config: coreServices.rootConfig, plugin: coreServices.pluginMetadata, }, async createRootContext({ config }) { diff --git a/packages/backend-app-api/src/services/implementations/config/index.ts b/packages/backend-app-api/src/services/implementations/config/index.ts index 690f1e2d36..1775ef2efc 100644 --- a/packages/backend-app-api/src/services/implementations/config/index.ts +++ b/packages/backend-app-api/src/services/implementations/config/index.ts @@ -14,5 +14,5 @@ * limitations under the License. */ -export { configServiceFactory } from './configServiceFactory'; -export type { ConfigFactoryOptions } from './configServiceFactory'; +export { rootConfigServiceFactory } from './rootConfigServiceFactory'; +export type { RootConfigFactoryOptions } from './rootConfigServiceFactory'; diff --git a/packages/backend-app-api/src/services/implementations/config/configServiceFactory.ts b/packages/backend-app-api/src/services/implementations/config/rootConfigServiceFactory.ts similarity index 87% rename from packages/backend-app-api/src/services/implementations/config/configServiceFactory.ts rename to packages/backend-app-api/src/services/implementations/config/rootConfigServiceFactory.ts index d3b29ce545..1fa8d792ad 100644 --- a/packages/backend-app-api/src/services/implementations/config/configServiceFactory.ts +++ b/packages/backend-app-api/src/services/implementations/config/rootConfigServiceFactory.ts @@ -24,7 +24,7 @@ import { } from '@backstage/config-loader'; /** @public */ -export interface ConfigFactoryOptions { +export interface RootConfigFactoryOptions { /** * Process arguments to use instead of the default `process.argv()`. */ @@ -37,9 +37,9 @@ export interface ConfigFactoryOptions { } /** @public */ -export const configServiceFactory = createServiceFactory( - (options?: ConfigFactoryOptions) => ({ - service: coreServices.config, +export const rootConfigServiceFactory = createServiceFactory( + (options?: RootConfigFactoryOptions) => ({ + service: coreServices.rootConfig, deps: {}, async factory() { const source = ConfigSources.default({ diff --git a/packages/backend-app-api/src/services/implementations/database/databaseServiceFactory.ts b/packages/backend-app-api/src/services/implementations/database/databaseServiceFactory.ts index 05e2f1deb9..139609b6c1 100644 --- a/packages/backend-app-api/src/services/implementations/database/databaseServiceFactory.ts +++ b/packages/backend-app-api/src/services/implementations/database/databaseServiceFactory.ts @@ -25,7 +25,7 @@ import { ConfigReader } from '@backstage/config'; export const databaseServiceFactory = createServiceFactory({ service: coreServices.database, deps: { - config: coreServices.config, + config: coreServices.rootConfig, lifecycle: coreServices.lifecycle, pluginMetadata: coreServices.pluginMetadata, }, diff --git a/packages/backend-app-api/src/services/implementations/discovery/discoveryServiceFactory.ts b/packages/backend-app-api/src/services/implementations/discovery/discoveryServiceFactory.ts index 6c0da8521d..6bdc4b4856 100644 --- a/packages/backend-app-api/src/services/implementations/discovery/discoveryServiceFactory.ts +++ b/packages/backend-app-api/src/services/implementations/discovery/discoveryServiceFactory.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { SingleHostDiscovery } from '@backstage/backend-common'; +import { HostDiscovery } from '@backstage/backend-common'; import { coreServices, createServiceFactory, @@ -24,9 +24,9 @@ import { export const discoveryServiceFactory = createServiceFactory({ service: coreServices.discovery, deps: { - config: coreServices.config, + config: coreServices.rootConfig, }, async factory({ config }) { - return SingleHostDiscovery.fromConfig(config); + return HostDiscovery.fromConfig(config); }, }); diff --git a/packages/backend-app-api/src/services/implementations/httpRouter/createLifecycleMiddleware.ts b/packages/backend-app-api/src/services/implementations/httpRouter/createLifecycleMiddleware.ts index 958ae33e99..3f8ee3ea69 100644 --- a/packages/backend-app-api/src/services/implementations/httpRouter/createLifecycleMiddleware.ts +++ b/packages/backend-app-api/src/services/implementations/httpRouter/createLifecycleMiddleware.ts @@ -16,32 +16,11 @@ import { LifecycleService } from '@backstage/backend-plugin-api'; import { ServiceUnavailableError } from '@backstage/errors'; -import { HumanDuration } from '@backstage/types'; +import { HumanDuration, durationToMilliseconds } from '@backstage/types'; import { RequestHandler } from 'express'; export const DEFAULT_TIMEOUT = { seconds: 5 }; -function durationToMs(duration: HumanDuration): number { - const { - years = 0, - months = 0, - weeks = 0, - days = 0, - hours = 0, - minutes = 0, - seconds = 0, - milliseconds = 0, - } = duration; - - const totalDays = years * 365 + months * 30 + weeks * 7 + days; - const totalHours = totalDays * 24 + hours; - const totalMinutes = totalHours * 60 + minutes; - const totalSeconds = totalMinutes * 60 + seconds; - const totalMilliseconds = totalSeconds * 1000 + milliseconds; - - return totalMilliseconds; -} - /** * Options for {@link createLifecycleMiddleware}. * @public @@ -102,7 +81,7 @@ export function createLifecycleMiddleware( waiting.clear(); }); - const timeoutMs = durationToMs(startupRequestPauseTimeout); + const timeoutMs = durationToMilliseconds(startupRequestPauseTimeout); return (_req, _res, next) => { if (state === 'up') { diff --git a/packages/backend-app-api/src/services/implementations/permissions/permissionsServiceFactory.ts b/packages/backend-app-api/src/services/implementations/permissions/permissionsServiceFactory.ts index 38cba73eda..3e5b7da9dd 100644 --- a/packages/backend-app-api/src/services/implementations/permissions/permissionsServiceFactory.ts +++ b/packages/backend-app-api/src/services/implementations/permissions/permissionsServiceFactory.ts @@ -24,7 +24,7 @@ import { ServerPermissionClient } from '@backstage/plugin-permission-node'; export const permissionsServiceFactory = createServiceFactory({ service: coreServices.permissions, deps: { - config: coreServices.config, + config: coreServices.rootConfig, discovery: coreServices.discovery, tokenManager: coreServices.tokenManager, }, diff --git a/packages/backend-app-api/src/services/implementations/rootHttpRouter/rootHttpRouterServiceFactory.ts b/packages/backend-app-api/src/services/implementations/rootHttpRouter/rootHttpRouterServiceFactory.ts index 5eaf8aa152..4c410e25ea 100644 --- a/packages/backend-app-api/src/services/implementations/rootHttpRouter/rootHttpRouterServiceFactory.ts +++ b/packages/backend-app-api/src/services/implementations/rootHttpRouter/rootHttpRouterServiceFactory.ts @@ -15,7 +15,7 @@ */ import { - ConfigService, + RootConfigService, coreServices, createServiceFactory, LifecycleService, @@ -36,7 +36,7 @@ export interface RootHttpRouterConfigureContext { app: Express; middleware: MiddlewareFactory; routes: RequestHandler; - config: ConfigService; + config: RootConfigService; logger: LoggerService; lifecycle: LifecycleService; } @@ -70,7 +70,7 @@ export const rootHttpRouterServiceFactory = createServiceFactory( (options?: RootHttpRouterFactoryOptions) => ({ service: coreServices.rootHttpRouter, deps: { - config: coreServices.config, + config: coreServices.rootConfig, rootLogger: coreServices.rootLogger, lifecycle: coreServices.rootLifecycle, }, diff --git a/packages/backend-app-api/src/services/implementations/rootLogger/rootLoggerServiceFactory.ts b/packages/backend-app-api/src/services/implementations/rootLogger/rootLoggerServiceFactory.ts index 11bbd58050..bd45df383f 100644 --- a/packages/backend-app-api/src/services/implementations/rootLogger/rootLoggerServiceFactory.ts +++ b/packages/backend-app-api/src/services/implementations/rootLogger/rootLoggerServiceFactory.ts @@ -26,7 +26,7 @@ import { createConfigSecretEnumerator } from '../../../config'; export const rootLoggerServiceFactory = createServiceFactory({ service: coreServices.rootLogger, deps: { - config: coreServices.config, + config: coreServices.rootConfig, }, async factory({ config }) { const logger = WinstonLogger.create({ diff --git a/packages/backend-app-api/src/services/implementations/tokenManager/tokenManagerServiceFactory.ts b/packages/backend-app-api/src/services/implementations/tokenManager/tokenManagerServiceFactory.ts index b3726176b6..7417c18e23 100644 --- a/packages/backend-app-api/src/services/implementations/tokenManager/tokenManagerServiceFactory.ts +++ b/packages/backend-app-api/src/services/implementations/tokenManager/tokenManagerServiceFactory.ts @@ -24,7 +24,7 @@ import { ServerTokenManager } from '@backstage/backend-common'; export const tokenManagerServiceFactory = createServiceFactory({ service: coreServices.tokenManager, deps: { - config: coreServices.config, + config: coreServices.rootConfig, logger: coreServices.rootLogger, }, createRootContext({ config, logger }) { diff --git a/packages/backend-app-api/src/services/implementations/urlReader/urlReaderServiceFactory.ts b/packages/backend-app-api/src/services/implementations/urlReader/urlReaderServiceFactory.ts index 83e594aa0b..6da71ac0fc 100644 --- a/packages/backend-app-api/src/services/implementations/urlReader/urlReaderServiceFactory.ts +++ b/packages/backend-app-api/src/services/implementations/urlReader/urlReaderServiceFactory.ts @@ -24,7 +24,7 @@ import { export const urlReaderServiceFactory = createServiceFactory({ service: coreServices.urlReader, deps: { - config: coreServices.config, + config: coreServices.rootConfig, logger: coreServices.logger, }, async factory({ config, logger }) { diff --git a/packages/backend-common/CHANGELOG.md b/packages/backend-common/CHANGELOG.md index 4df3a19884..f0c6d75478 100644 --- a/packages/backend-common/CHANGELOG.md +++ b/packages/backend-common/CHANGELOG.md @@ -1,5 +1,127 @@ # @backstage/backend-common +## 0.19.2-next.1 + +### Patch Changes + +- 629cbd194a87: Use `coreServices.rootConfig` instead of `coreService.config` +- 4b82382ed8c2: Fixed invalid configuration schema. The configuration schema may be more strict as a result. +- Updated dependencies + - @backstage/config-loader@1.4.0-next.1 + - @backstage/backend-app-api@0.5.0-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/integration@1.5.1 + - @backstage/integration-aws-node@0.1.5 + - @backstage/backend-dev-utils@0.1.1 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + +## 0.19.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config-loader@1.4.0-next.0 + - @backstage/backend-app-api@0.4.6-next.0 + - @backstage/backend-dev-utils@0.1.1 + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/integration@1.5.1 + - @backstage/integration-aws-node@0.1.5 + - @backstage/types@1.1.0 + +## 0.19.1 + +### Patch Changes + +- 787ddcc5ef99: use `Readable.from` to explicitly convert the `buffer` from `node-fetch` to a `Readable` stream +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-app-api@0.4.5 + - @backstage/backend-dev-utils@0.1.1 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.8 + - @backstage/config-loader@1.3.2 + - @backstage/integration@1.5.1 + - @backstage/integration-aws-node@0.1.5 + - @backstage/types@1.1.0 + +## 0.19.1-next.0 + +### Patch Changes + +- 787ddcc5ef99: use `Readable.from` to explicitly convert the `buffer` from `node-fetch` to a `Readable` stream +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-app-api@0.4.5-next.0 + - @backstage/backend-dev-utils@0.1.1 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.8 + - @backstage/config-loader@1.3.2-next.0 + - @backstage/integration@1.5.1-next.0 + - @backstage/integration-aws-node@0.1.5-next.0 + - @backstage/types@1.1.0 + +## 0.19.0 + +### Minor Changes + +- c7f848bcea3c: Support authentication with a service principal or managed identity for Azure DevOps + + Azure DevOps recently released support, in public preview, for authenticating with a service principal or managed identity instead of a personal access token (PAT): https://devblogs.microsoft.com/devops/introducing-service-principal-and-managed-identity-support-on-azure-devops/. With this change the Azure integration now supports service principals and managed identities for Azure AD backed Azure DevOps organizations. Service principal and managed identity authentication is not supported on Azure DevOps Server (on-premises) organizations. + +### Patch Changes + +- 4ef91ab46732: Updated the backend database connection configuration schema to set the password visibility to secret +- 52d599817680: Changed the default backend CacheClient to an in-memory cache when not explicitly configured. + + Explicit configuration of an **in-memory cache** can be removed from `app-config.yaml`, as this is now the default: + + ```diff + backend: + - cache: + - store: memory + ``` + +- 5f2c38c70f5b: Fix SNYK-JS-FASTXMLPARSER-5668858 (`fast-xml-parser`) by upgrading aws-sdk to at least the current latest version. +- eeb3f801fddf: `HostDiscovery` now strips trailing slashes in the `backend.baseUrl` config. +- 9f47a743632c: Fixed typo in HostDiscovery's JSDoc +- 810c6de51604: Remove unused dev dependency `aws-sdk-mock`. +- Updated dependencies + - @backstage/types@1.1.0 + - @backstage/integration-aws-node@0.1.4 + - @backstage/config-loader@1.3.1 + - @backstage/integration@1.5.0 + - @backstage/errors@1.2.0 + - @backstage/backend-app-api@0.4.4 + - @backstage/backend-plugin-api@0.5.3 + - @backstage/backend-dev-utils@0.1.1 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.8 + +## 0.19.0-next.2 + +### Patch Changes + +- 5f2c38c70f5b: Fix SNYK-JS-FASTXMLPARSER-5668858 (`fast-xml-parser`) by upgrading aws-sdk to at least the current latest version. +- Updated dependencies + - @backstage/integration-aws-node@0.1.4-next.1 + - @backstage/backend-app-api@0.4.4-next.2 + - @backstage/backend-dev-utils@0.1.1 + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/config-loader@1.3.1-next.1 + - @backstage/errors@1.2.0-next.0 + - @backstage/integration@1.5.0-next.0 + - @backstage/types@1.0.2 + ## 0.19.0-next.1 ### Minor Changes diff --git a/packages/backend-common/api-report.md b/packages/backend-common/api-report.md index d40027cba9..fae3e2117d 100644 --- a/packages/backend-common/api-report.md +++ b/packages/backend-common/api-report.md @@ -18,7 +18,6 @@ import { CacheService as CacheClient } from '@backstage/backend-plugin-api'; import { CacheServiceOptions as CacheClientOptions } from '@backstage/backend-plugin-api'; import { CacheServiceSetOptions as CacheClientSetOptions } from '@backstage/backend-plugin-api'; import { Config } from '@backstage/config'; -import { ConfigService } from '@backstage/backend-plugin-api'; import cors from 'cors'; import Docker from 'dockerode'; import { ErrorRequestHandler } from 'express'; @@ -51,6 +50,7 @@ import { ReadTreeResponseFile } from '@backstage/backend-plugin-api'; import { ReadUrlOptions } from '@backstage/backend-plugin-api'; import { ReadUrlResponse } from '@backstage/backend-plugin-api'; import { RequestHandler } from 'express'; +import { RootConfigService } from '@backstage/backend-plugin-api'; import { Router } from 'express'; import { SchedulerService } from '@backstage/backend-plugin-api'; import { SearchOptions } from '@backstage/backend-plugin-api'; @@ -525,7 +525,7 @@ export const legacyPlugin: ( TransformedEnv< { cache: CacheClient; - config: ConfigService; + config: RootConfigService; database: PluginDatabaseManager; discovery: PluginEndpointDiscovery; logger: LoggerService; diff --git a/packages/backend-common/config.d.ts b/packages/backend-common/config.d.ts index 3fd886874e..e5b193c543 100644 --- a/packages/backend-common/config.d.ts +++ b/packages/backend-common/config.d.ts @@ -77,17 +77,17 @@ export interface Config { */ connection: | string - | Partial<{ + | { /** * Password that belongs to the client User * @visibility secret */ - password: string; + password?: string; /** * Other connection settings */ [key: string]: unknown; - }>; + }; /** Database name prefix override */ prefix?: string; /** diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json index e1192dac00..e18369b7e7 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.19.0-next.1", + "version": "0.19.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { @@ -46,10 +46,10 @@ "test:kubernetes": "backstage-cli package test -t KubernetesContainerRunner --no-watch" }, "dependencies": { - "@aws-sdk/abort-controller": "^3.310.0", - "@aws-sdk/client-s3": "^3.310.0", - "@aws-sdk/credential-providers": "^3.310.0", - "@aws-sdk/types": "^3.310.0", + "@aws-sdk/abort-controller": "^3.347.0", + "@aws-sdk/client-s3": "^3.350.0", + "@aws-sdk/credential-providers": "^3.350.0", + "@aws-sdk/types": "^3.347.0", "@backstage/backend-app-api": "workspace:^", "@backstage/backend-dev-utils": "workspace:^", "@backstage/backend-plugin-api": "workspace:^", @@ -114,7 +114,7 @@ } }, "devDependencies": { - "@aws-sdk/util-stream-node": "^3.310.0", + "@aws-sdk/util-stream-node": "^3.350.0", "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", "@types/archiver": "^5.1.0", @@ -135,7 +135,6 @@ "@types/webpack-env": "^1.15.2", "@types/yauzl": "^2.10.0", "aws-sdk-client-mock": "^2.0.0", - "aws-sdk-mock": "^5.2.1", "better-sqlite3": "^8.0.0", "http-errors": "^2.0.0", "mock-fs": "^5.1.0", diff --git a/packages/backend-common/src/cache/CacheManager.test.ts b/packages/backend-common/src/cache/CacheManager.test.ts index 3239be4d0e..4578d4fed9 100644 --- a/packages/backend-common/src/cache/CacheManager.test.ts +++ b/packages/backend-common/src/cache/CacheManager.test.ts @@ -20,7 +20,6 @@ import KeyvMemcache from '@keyv/memcache'; import KeyvRedis from '@keyv/redis'; import { DefaultCacheClient } from './CacheClient'; import { CacheManager } from './CacheManager'; -import { NoStore } from './NoStore'; jest.createMockFromModule('keyv'); jest.mock('keyv'); @@ -119,17 +118,23 @@ describe('CacheManager', () => { }); describe('CacheManager.forPlugin stores', () => { - it('returns none client when no cache is configured', () => { + it('returns memory client when no cache is configured', () => { const manager = CacheManager.fromConfig( new ConfigReader({ backend: {} }), ); + const expectedTtl = 3600; const expectedNamespace = 'test-plugin'; - manager.forPlugin(expectedNamespace).getClient(); + manager + .forPlugin(expectedNamespace) + .getClient({ defaultTtl: expectedTtl }); const cache = Keyv as unknown as jest.Mock; const mockCalls = cache.mock.calls.splice(-1); const callArgs = mockCalls[0]; - expect(callArgs[0].store).toBeInstanceOf(NoStore); + expect(callArgs[0]).toMatchObject({ + ttl: expectedTtl, + namespace: expectedNamespace, + }); }); it('returns memory client when explicitly configured', () => { diff --git a/packages/backend-common/src/cache/CacheManager.ts b/packages/backend-common/src/cache/CacheManager.ts index 12ece42854..9101445b08 100644 --- a/packages/backend-common/src/cache/CacheManager.ts +++ b/packages/backend-common/src/cache/CacheManager.ts @@ -25,7 +25,6 @@ import { } from '@backstage/backend-plugin-api'; import { getRootLogger } from '../logging'; import { DefaultCacheClient } from './CacheClient'; -import { NoStore } from './NoStore'; import { CacheManagerOptions, PluginCacheManager } from './types'; /** @@ -44,7 +43,6 @@ export class CacheManager { redis: this.getRedisClient, memcache: this.getMemcacheClient, memory: this.getMemoryClient, - none: this.getNoneClient, }; /** @@ -70,8 +68,8 @@ export class CacheManager { options: CacheManagerOptions = {}, ): CacheManager { // If no `backend.cache` config is provided, instantiate the CacheManager - // with a "NoStore" cache client. - const store = config.getOptionalString('backend.cache.store') || 'none'; + // with an in-memory cache client. + const store = config.getOptionalString('backend.cache.store') || 'memory'; const connectionString = config.getOptionalString('backend.cache.connection') || ''; const logger = (options.logger || getRootLogger()).child({ @@ -169,13 +167,6 @@ export class CacheManager { store: this.memoryStore, }); } - - private getNoneClient(pluginId: string): Keyv { - return new Keyv({ - namespace: pluginId, - store: new NoStore(), - }); - } } /** @public */ diff --git a/packages/backend-common/src/discovery/HostDiscovery.test.ts b/packages/backend-common/src/discovery/HostDiscovery.test.ts index 577da3a679..4e6aff5853 100644 --- a/packages/backend-common/src/discovery/HostDiscovery.test.ts +++ b/packages/backend-common/src/discovery/HostDiscovery.test.ts @@ -36,6 +36,24 @@ describe('HostDiscovery', () => { ); }); + it('strips trailing slashes in 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({ diff --git a/packages/backend-common/src/discovery/HostDiscovery.ts b/packages/backend-common/src/discovery/HostDiscovery.ts index 1c72445443..89b6404143 100644 --- a/packages/backend-common/src/discovery/HostDiscovery.ts +++ b/packages/backend-common/src/discovery/HostDiscovery.ts @@ -57,7 +57,9 @@ export class HostDiscovery implements PluginEndpointDiscovery { */ static fromConfig(config: Config, options?: { basePath?: string }) { const basePath = options?.basePath ?? '/api'; - const externalBaseUrl = config.getString('backend.baseUrl'); + const externalBaseUrl = config + .getString('backend.baseUrl') + .replace(/\/+$/, ''); const { listen: { host: listenHost = '::', port: listenPort }, diff --git a/packages/backend-common/src/legacy.ts b/packages/backend-common/src/legacy.ts index 408966f3bc..df1030e6b6 100644 --- a/packages/backend-common/src/legacy.ts +++ b/packages/backend-common/src/legacy.ts @@ -108,7 +108,7 @@ export function makeLegacyPlugin< export const legacyPlugin = makeLegacyPlugin( { cache: coreServices.cache, - config: coreServices.config, + config: coreServices.rootConfig, database: coreServices.database, discovery: coreServices.discovery, logger: coreServices.logger, diff --git a/packages/backend-common/src/reading/AzureUrlReader.ts b/packages/backend-common/src/reading/AzureUrlReader.ts index 26fe3f4a12..94abf3a178 100644 --- a/packages/backend-common/src/reading/AzureUrlReader.ts +++ b/packages/backend-common/src/reading/AzureUrlReader.ts @@ -158,7 +158,7 @@ export class AzureUrlReader implements UrlReader { } return await this.deps.treeResponseFactory.fromZipArchive({ - stream: archiveAzureResponse.body as unknown as Readable, + stream: Readable.from(archiveAzureResponse.body), etag: commitSha, filter, subpath, diff --git a/packages/backend-common/src/reading/BitbucketCloudUrlReader.ts b/packages/backend-common/src/reading/BitbucketCloudUrlReader.ts index 1522b7678d..93587cd6ae 100644 --- a/packages/backend-common/src/reading/BitbucketCloudUrlReader.ts +++ b/packages/backend-common/src/reading/BitbucketCloudUrlReader.ts @@ -160,7 +160,7 @@ export class BitbucketCloudUrlReader implements UrlReader { } return await this.deps.treeResponseFactory.fromTarArchive({ - stream: archiveResponse.body as unknown as Readable, + stream: Readable.from(archiveResponse.body), subpath: filepath, etag: lastCommitShortHash, filter: options?.filter, diff --git a/packages/backend-common/src/reading/BitbucketServerUrlReader.ts b/packages/backend-common/src/reading/BitbucketServerUrlReader.ts index 2b6b5a1f8f..8e2f1708c4 100644 --- a/packages/backend-common/src/reading/BitbucketServerUrlReader.ts +++ b/packages/backend-common/src/reading/BitbucketServerUrlReader.ts @@ -151,7 +151,7 @@ export class BitbucketServerUrlReader implements UrlReader { } return await this.deps.treeResponseFactory.fromTarArchive({ - stream: archiveResponse.body as unknown as Readable, + stream: Readable.from(archiveResponse.body), subpath: filepath, etag: lastCommitShortHash, filter: options?.filter, diff --git a/packages/backend-common/src/reading/BitbucketUrlReader.ts b/packages/backend-common/src/reading/BitbucketUrlReader.ts index 3a34c725c6..090fe9098d 100644 --- a/packages/backend-common/src/reading/BitbucketUrlReader.ts +++ b/packages/backend-common/src/reading/BitbucketUrlReader.ts @@ -171,7 +171,7 @@ export class BitbucketUrlReader implements UrlReader { } return await this.deps.treeResponseFactory.fromTarArchive({ - stream: archiveBitbucketResponse.body as unknown as Readable, + stream: Readable.from(archiveBitbucketResponse.body), subpath: filepath, etag: lastCommitShortHash, filter: options?.filter, diff --git a/packages/backend-common/src/reading/GerritUrlReader.ts b/packages/backend-common/src/reading/GerritUrlReader.ts index 5d86e5d9ac..8ac5452a4c 100644 --- a/packages/backend-common/src/reading/GerritUrlReader.ts +++ b/packages/backend-common/src/reading/GerritUrlReader.ts @@ -204,7 +204,7 @@ export class GerritUrlReader implements UrlReader { }); const tarArchive = Readable.from(data); return await this.deps.treeResponseFactory.fromTarArchive({ - stream: tarArchive as unknown as Readable, + stream: tarArchive, subpath: filePath === '/' ? undefined : filePath, etag: branchInfo.revision, filter: options?.filter, diff --git a/packages/backend-common/src/reading/GithubUrlReader.ts b/packages/backend-common/src/reading/GithubUrlReader.ts index 8300127c5b..764431386d 100644 --- a/packages/backend-common/src/reading/GithubUrlReader.ts +++ b/packages/backend-common/src/reading/GithubUrlReader.ts @@ -238,7 +238,7 @@ export class GithubUrlReader implements UrlReader { return await this.deps.treeResponseFactory.fromTarArchive({ // TODO(Rugvip): Underlying implementation of fetch will be node-fetch, we probably want // to stick to using that in exclusively backend code. - stream: archive.body as unknown as Readable, + stream: Readable.from(archive.body), subpath, etag: sha, filter: options?.filter, @@ -347,7 +347,6 @@ export class GithubUrlReader implements UrlReader { init: RequestInit, ): Promise { const urlAsString = url.toString(); - const response = await fetch(urlAsString, init); if (!response.ok) { diff --git a/packages/backend-common/src/reading/GitlabUrlReader.ts b/packages/backend-common/src/reading/GitlabUrlReader.ts index ab59c19b16..178e65b40a 100644 --- a/packages/backend-common/src/reading/GitlabUrlReader.ts +++ b/packages/backend-common/src/reading/GitlabUrlReader.ts @@ -229,7 +229,7 @@ export class GitlabUrlReader implements UrlReader { } return await this.deps.treeResponseFactory.fromTarArchive({ - stream: archiveGitLabResponse.body as unknown as Readable, + stream: Readable.from(archiveGitLabResponse.body), subpath: filepath, etag: commitSha, filter: options?.filter, diff --git a/packages/backend-common/src/reading/tree/TarArchiveResponse.ts b/packages/backend-common/src/reading/tree/TarArchiveResponse.ts index 493e283c5f..e1529c196a 100644 --- a/packages/backend-common/src/reading/tree/TarArchiveResponse.ts +++ b/packages/backend-common/src/reading/tree/TarArchiveResponse.ts @@ -151,7 +151,6 @@ export class TarArchiveResponse implements ReadTreeResponse { const strip = this.subPath ? this.subPath.split('/').length : 1; let filterError: Error | undefined = undefined; - await pipeline( this.stream, tar.extract({ diff --git a/packages/backend-defaults/CHANGELOG.md b/packages/backend-defaults/CHANGELOG.md index 4c92ebbc12..089f80d745 100644 --- a/packages/backend-defaults/CHANGELOG.md +++ b/packages/backend-defaults/CHANGELOG.md @@ -1,5 +1,64 @@ # @backstage/backend-defaults +## 0.2.0-next.1 + +### Minor Changes + +- d008aefef808: **BREAKING**: Removing shared environments concept from the new experimental backend system. + +### Patch Changes + +- 629cbd194a87: Use `coreServices.rootConfig` instead of `coreService.config` +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/backend-app-api@0.5.0-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + +## 0.1.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-app-api@0.4.6-next.0 + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-plugin-api@0.5.5-next.0 + +## 0.1.12 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1 + - @backstage/backend-app-api@0.4.5 + - @backstage/backend-plugin-api@0.5.4 + +## 0.1.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-app-api@0.4.5-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + +## 0.1.11 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/backend-app-api@0.4.4 + - @backstage/backend-plugin-api@0.5.3 + +## 0.1.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/backend-app-api@0.4.4-next.2 + - @backstage/backend-plugin-api@0.5.3-next.2 + ## 0.1.11-next.1 ### Patch Changes diff --git a/packages/backend-defaults/api-report.md b/packages/backend-defaults/api-report.md index 07218f610e..6cc58de663 100644 --- a/packages/backend-defaults/api-report.md +++ b/packages/backend-defaults/api-report.md @@ -5,15 +5,12 @@ ```ts import { Backend } from '@backstage/backend-app-api'; import { ServiceFactoryOrFunction } from '@backstage/backend-plugin-api'; -import { SharedBackendEnvironment } from '@backstage/backend-plugin-api'; // @public (undocumented) export function createBackend(options?: CreateBackendOptions): Backend; // @public (undocumented) export interface CreateBackendOptions { - // (undocumented) - env?: SharedBackendEnvironment; // (undocumented) services?: ServiceFactoryOrFunction[]; } diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index aabd493ff9..5a89bb51f0 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.11-next.1", + "version": "0.2.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-defaults/src/CreateBackend.test.ts b/packages/backend-defaults/src/CreateBackend.test.ts index 946de90b2b..de04d4e350 100644 --- a/packages/backend-defaults/src/CreateBackend.test.ts +++ b/packages/backend-defaults/src/CreateBackend.test.ts @@ -16,17 +16,10 @@ import { coreServices, - createBackendPlugin, createServiceFactory, - createServiceRef, - createSharedEnvironment, } from '@backstage/backend-plugin-api'; -import { mockServices } from '@backstage/backend-test-utils'; import { createBackend } from './CreateBackend'; -const fooServiceRef = createServiceRef({ id: 'foo', scope: 'root' }); -const barServiceRef = createServiceRef({ id: 'bar', scope: 'root' }); - describe('createBackend', () => { it('should not throw when overriding a default service implementation', () => { expect(() => @@ -85,91 +78,4 @@ describe('createBackend', () => { }), ).toThrow('The core.pluginMetadata service cannot be overridden'); }); - - it('should throw if an unsupported InternalSharedEnvironment version is passed in', () => { - expect(() => - createBackend({ - env: {} as any, - }), - ).toThrow( - "Shared environment version 'undefined' is invalid or not supported", - ); - expect(() => - createBackend({ - env: { version: {} } as any, - }), - ).toThrow( - "Shared environment version '[object Object]' is invalid or not supported", - ); - expect(() => - createBackend({ - env: { version: 'v2' } as any, - }), - ).toThrow("Shared environment version 'v2' is invalid or not supported"); - }); - - it('should prioritize services correctly', async () => { - const backend = createBackend({ - env: createSharedEnvironment({ - services: [ - createServiceFactory({ - service: coreServices.rootHttpRouter, - deps: {}, - async factory() { - return { - use() {}, - }; - }, - }), - mockServices.config.factory({ - data: { root: 'root-env' }, - }), - createServiceFactory({ - service: fooServiceRef, - deps: {}, - async factory() { - return 'foo-env'; - }, - }), - createServiceFactory({ - service: barServiceRef, - deps: {}, - async factory() { - return 'bar-env'; - }, - }), - ], - })(), - services: [ - createServiceFactory({ - service: fooServiceRef, - deps: {}, - factory: async () => 'foo-backend', - }), - ], - }); - - expect.assertions(3); - backend.add( - createBackendPlugin({ - pluginId: 'test', - register(reg) { - reg.registerInit({ - deps: { - config: coreServices.config, - foo: fooServiceRef, - bar: barServiceRef, - }, - async init({ config, foo, bar }) { - expect(config.get('root')).toBe('root-env'); - expect(foo).toBe('foo-backend'); - expect(bar).toBe('bar-env'); - }, - }); - }, - })(), - ); - - await backend.start(); - }); }); diff --git a/packages/backend-defaults/src/CreateBackend.ts b/packages/backend-defaults/src/CreateBackend.ts index 480f365216..3db013a290 100644 --- a/packages/backend-defaults/src/CreateBackend.ts +++ b/packages/backend-defaults/src/CreateBackend.ts @@ -17,7 +17,7 @@ import { Backend, cacheServiceFactory, - configServiceFactory, + rootConfigServiceFactory, createSpecializedBackend, databaseServiceFactory, discoveryServiceFactory, @@ -36,16 +36,11 @@ import { import { ServiceFactory, ServiceFactoryOrFunction, - SharedBackendEnvironment, } from '@backstage/backend-plugin-api'; -// Internal import of the type to avoid needing to export this. -// eslint-disable-next-line @backstage/no-forbidden-package-imports -import type { InternalSharedBackendEnvironment } from '@backstage/backend-plugin-api/src/wiring/createSharedEnvironment'; - export const defaultServiceFactories = [ cacheServiceFactory(), - configServiceFactory(), + rootConfigServiceFactory(), databaseServiceFactory(), discoveryServiceFactory(), httpRouterServiceFactory(), @@ -65,7 +60,6 @@ export const defaultServiceFactories = [ * @public */ export interface CreateBackendOptions { - env?: SharedBackendEnvironment; services?: ServiceFactoryOrFunction[]; } @@ -81,22 +75,6 @@ export function createBackend(options?: CreateBackendOptions): Backend { ); services.push(...providedServices); - // Middle priority: Services from the shared environment - if (options?.env) { - const env = options.env as unknown as InternalSharedBackendEnvironment; - if (env.version !== 'v1') { - throw new Error( - `Shared environment version '${env.version}' is invalid or not supported`, - ); - } - - const environmentServices = - env.services?.filter( - sf => !services.some(({ service }) => sf.service.id === service.id), - ) ?? []; - services.push(...environmentServices); - } - // Lowest priority: Default services that are not already provided by environment or directly to createBackend const defaultServices = defaultServiceFactories.filter( sf => !services.some(({ service }) => service.id === sf.service.id), diff --git a/packages/backend-next/CHANGELOG.md b/packages/backend-next/CHANGELOG.md index 3717628d4b..a5eb6fe466 100644 --- a/packages/backend-next/CHANGELOG.md +++ b/packages/backend-next/CHANGELOG.md @@ -1,5 +1,209 @@ # example-backend-next +## 0.0.14-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-module-techdocs@0.1.4-next.1 + - @backstage/plugin-search-backend-module-catalog@0.1.4-next.1 + - @backstage/plugin-search-backend-module-explore@0.1.4-next.1 + - @backstage/plugin-azure-devops-backend@0.3.27-next.1 + - @backstage/plugin-kubernetes-backend@0.11.3-next.1 + - @backstage/plugin-lighthouse-backend@0.2.4-next.1 + - @backstage/plugin-permission-backend@0.5.23-next.1 + - @backstage/plugin-scaffolder-backend@1.15.2-next.1 + - @backstage/backend-defaults@0.2.0-next.1 + - @backstage/plugin-devtools-backend@0.1.3-next.1 + - @backstage/plugin-techdocs-backend@1.6.5-next.1 + - @backstage/plugin-catalog-backend@1.12.0-next.1 + - @backstage/plugin-badges-backend@0.2.3-next.1 + - @backstage/plugin-search-backend@1.4.0-next.1 + - @backstage/plugin-todo-backend@0.2.0-next.1 + - @backstage/plugin-app-backend@0.3.48-next.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.2.0-next.1 + - @backstage/plugin-entity-feedback-backend@0.1.6-next.1 + - @backstage/plugin-search-backend-node@1.2.4-next.1 + - @backstage/plugin-linguist-backend@0.3.2-next.1 + - @backstage/plugin-auth-node@0.2.17-next.1 + - @backstage/backend-tasks@0.5.5-next.1 + - @backstage/plugin-adr-backend@0.3.6-next.1 + - @backstage/plugin-permission-node@0.7.11-next.1 + - @backstage/plugin-permission-common@0.7.7 + +## 0.0.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-linguist-backend@0.3.2-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.2.0-next.0 + - @backstage/plugin-search-backend-node@1.2.4-next.0 + - @backstage/plugin-todo-backend@0.2.0-next.0 + - @backstage/plugin-catalog-backend@1.12.0-next.0 + - @backstage/plugin-search-backend@1.4.0-next.0 + - @backstage/backend-defaults@0.1.13-next.0 + - @backstage/backend-tasks@0.5.5-next.0 + - @backstage/plugin-adr-backend@0.3.6-next.0 + - @backstage/plugin-app-backend@0.3.48-next.0 + - @backstage/plugin-auth-node@0.2.17-next.0 + - @backstage/plugin-azure-devops-backend@0.3.27-next.0 + - @backstage/plugin-badges-backend@0.2.3-next.0 + - @backstage/plugin-devtools-backend@0.1.3-next.0 + - @backstage/plugin-entity-feedback-backend@0.1.6-next.0 + - @backstage/plugin-kubernetes-backend@0.11.3-next.0 + - @backstage/plugin-lighthouse-backend@0.2.4-next.0 + - @backstage/plugin-permission-backend@0.5.23-next.0 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-permission-node@0.7.11-next.0 + - @backstage/plugin-scaffolder-backend@1.15.2-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.4-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.4-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.4-next.0 + - @backstage/plugin-techdocs-backend@1.6.5-next.0 + +## 0.0.13 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.11.2 + - @backstage/plugin-badges-backend@0.2.2 + - @backstage/plugin-devtools-backend@0.1.2 + - @backstage/plugin-scaffolder-backend@1.15.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.1.1 + - @backstage/plugin-azure-devops-backend@0.3.26 + - @backstage/plugin-linguist-backend@0.3.1 + - @backstage/plugin-adr-backend@0.3.5 + - @backstage/plugin-lighthouse-backend@0.2.3 + - @backstage/plugin-entity-feedback-backend@0.1.5 + - @backstage/plugin-catalog-backend@1.11.0 + - @backstage/backend-defaults@0.1.12 + - @backstage/backend-tasks@0.5.4 + - @backstage/plugin-app-backend@0.3.47 + - @backstage/plugin-auth-node@0.2.16 + - @backstage/plugin-permission-backend@0.5.22 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-permission-node@0.7.10 + - @backstage/plugin-search-backend@1.3.3 + - @backstage/plugin-search-backend-module-catalog@0.1.3 + - @backstage/plugin-search-backend-module-explore@0.1.3 + - @backstage/plugin-search-backend-module-techdocs@0.1.3 + - @backstage/plugin-search-backend-node@1.2.3 + - @backstage/plugin-techdocs-backend@1.6.4 + - @backstage/plugin-todo-backend@0.1.44 + +## 0.0.13-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-devtools-backend@0.1.2-next.2 + - @backstage/plugin-scaffolder-backend@1.15.1-next.1 + - @backstage/plugin-kubernetes-backend@0.11.2-next.2 + - @backstage/plugin-adr-backend@0.3.5-next.1 + - @backstage/backend-defaults@0.1.12-next.0 + - @backstage/backend-tasks@0.5.4-next.0 + - @backstage/plugin-app-backend@0.3.47-next.0 + - @backstage/plugin-auth-node@0.2.16-next.0 + - @backstage/plugin-azure-devops-backend@0.3.26-next.1 + - @backstage/plugin-badges-backend@0.2.2-next.1 + - @backstage/plugin-catalog-backend@1.11.0-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.1.1-next.0 + - @backstage/plugin-entity-feedback-backend@0.1.5-next.0 + - @backstage/plugin-linguist-backend@0.3.1-next.1 + - @backstage/plugin-permission-backend@0.5.22-next.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + - @backstage/plugin-permission-node@0.7.10-next.0 + - @backstage/plugin-search-backend@1.3.3-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.3-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.3-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.3-next.0 + - @backstage/plugin-search-backend-node@1.2.3-next.0 + - @backstage/plugin-techdocs-backend@1.6.4-next.0 + - @backstage/plugin-todo-backend@0.1.44-next.0 + +## 0.0.13-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.11.2-next.1 + - @backstage/plugin-badges-backend@0.2.2-next.1 + - @backstage/plugin-azure-devops-backend@0.3.26-next.1 + - @backstage/plugin-devtools-backend@0.1.2-next.1 + - @backstage/plugin-linguist-backend@0.3.1-next.1 + +## 0.0.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend-module-unprocessed@0.1.1-next.0 + - @backstage/plugin-entity-feedback-backend@0.1.5-next.0 + - @backstage/plugin-catalog-backend@1.11.0-next.0 + - @backstage/plugin-kubernetes-backend@0.11.2-next.0 + - @backstage/backend-defaults@0.1.12-next.0 + - @backstage/plugin-app-backend@0.3.47-next.0 + - @backstage/plugin-auth-node@0.2.16-next.0 + - @backstage/plugin-permission-backend@0.5.22-next.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + - @backstage/plugin-permission-node@0.7.10-next.0 + - @backstage/plugin-scaffolder-backend@1.15.1-next.0 + - @backstage/plugin-search-backend@1.3.3-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.3-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.3-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.3-next.0 + - @backstage/plugin-search-backend-node@1.2.3-next.0 + - @backstage/plugin-techdocs-backend@1.6.4-next.0 + - @backstage/plugin-todo-backend@0.1.44-next.0 + +## 0.0.12 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.15.0 + - @backstage/plugin-kubernetes-backend@0.11.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.1.0 + - @backstage/plugin-catalog-backend@1.10.0 + - @backstage/plugin-search-backend@1.3.2 + - @backstage/plugin-search-backend-module-explore@0.1.2 + - @backstage/backend-defaults@0.1.11 + - @backstage/plugin-app-backend@0.3.46 + - @backstage/plugin-auth-node@0.2.15 + - @backstage/plugin-permission-backend@0.5.21 + - @backstage/plugin-permission-node@0.7.9 + - @backstage/plugin-search-backend-module-catalog@0.1.2 + - @backstage/plugin-search-backend-module-techdocs@0.1.2 + - @backstage/plugin-search-backend-node@1.2.2 + - @backstage/plugin-techdocs-backend@1.6.3 + - @backstage/plugin-todo-backend@0.1.43 + - @backstage/plugin-permission-common@0.7.6 + +## 0.0.12-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.15.0-next.3 + - @backstage/plugin-kubernetes-backend@0.11.1-next.3 + - @backstage/plugin-catalog-backend@1.10.0-next.2 + - @backstage/backend-defaults@0.1.11-next.2 + - @backstage/plugin-app-backend@0.3.46-next.2 + - @backstage/plugin-auth-node@0.2.15-next.2 + - @backstage/plugin-catalog-backend-module-unprocessed@0.1.0-next.1 + - @backstage/plugin-permission-backend@0.5.21-next.2 + - @backstage/plugin-permission-common@0.7.6-next.0 + - @backstage/plugin-permission-node@0.7.9-next.2 + - @backstage/plugin-search-backend@1.3.2-next.2 + - @backstage/plugin-search-backend-module-catalog@0.1.2-next.2 + - @backstage/plugin-search-backend-module-explore@0.1.2-next.2 + - @backstage/plugin-search-backend-module-techdocs@0.1.2-next.2 + - @backstage/plugin-search-backend-node@1.2.2-next.2 + - @backstage/plugin-techdocs-backend@1.6.3-next.2 + - @backstage/plugin-todo-backend@0.1.43-next.2 + ## 0.0.12-next.2 ### Patch Changes diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json index 78b1638c57..38f85fb8c0 100644 --- a/packages/backend-next/package.json +++ b/packages/backend-next/package.json @@ -1,6 +1,6 @@ { "name": "example-backend-next", - "version": "0.0.12-next.2", + "version": "0.0.14-next.1", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", @@ -26,11 +26,19 @@ }, "dependencies": { "@backstage/backend-defaults": "workspace:^", + "@backstage/backend-tasks": "workspace:^", + "@backstage/plugin-adr-backend": "workspace:^", "@backstage/plugin-app-backend": "workspace:^", "@backstage/plugin-auth-node": "workspace:^", + "@backstage/plugin-azure-devops-backend": "workspace:^", + "@backstage/plugin-badges-backend": "workspace:^", "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^", + "@backstage/plugin-devtools-backend": "workspace:^", + "@backstage/plugin-entity-feedback-backend": "workspace:^", "@backstage/plugin-kubernetes-backend": "workspace:^", + "@backstage/plugin-lighthouse-backend": "workspace:^", + "@backstage/plugin-linguist-backend": "workspace:^", "@backstage/plugin-permission-backend": "workspace:^", "@backstage/plugin-permission-common": "workspace:^", "@backstage/plugin-permission-node": "workspace:^", diff --git a/packages/backend-next/src/index.ts b/packages/backend-next/src/index.ts index cdba12e0e3..fa7561e211 100644 --- a/packages/backend-next/src/index.ts +++ b/packages/backend-next/src/index.ts @@ -30,15 +30,53 @@ import { searchModuleTechDocsCollator } from '@backstage/plugin-search-backend-m import { searchPlugin } from '@backstage/plugin-search-backend/alpha'; import { techdocsPlugin } from '@backstage/plugin-techdocs-backend/alpha'; import { todoPlugin } from '@backstage/plugin-todo-backend'; +import { entityFeedbackPlugin } from '@backstage/plugin-entity-feedback-backend'; import { catalogModuleUnprocessedEntities } from '@backstage/plugin-catalog-backend-module-unprocessed'; +import { badgesPlugin } from '@backstage/plugin-badges-backend'; +import { azureDevOpsPlugin } from '@backstage/plugin-azure-devops-backend'; +import { linguistPlugin } from '@backstage/plugin-linguist-backend'; +import { devtoolsPlugin } from '@backstage/plugin-devtools-backend'; +import { TaskScheduleDefinition } from '@backstage/backend-tasks'; +import { adrPlugin } from '@backstage/plugin-adr-backend'; +import { lighthousePlugin } from '@backstage/plugin-lighthouse-backend'; const backend = createBackend(); backend.add(appPlugin({ appPackageName: 'example-app' })); +// Badges +backend.add(badgesPlugin()); + +// Azure DevOps +backend.add(azureDevOpsPlugin()); + +// DevTools +backend.add(devtoolsPlugin()); + +// Entity Feedback +backend.add(entityFeedbackPlugin()); + +// Linguist +const linguistSchedule: TaskScheduleDefinition = { + frequency: { minutes: 2 }, + timeout: { minutes: 15 }, + initialDelay: { seconds: 15 }, +}; + +backend.add( + linguistPlugin({ + schedule: linguistSchedule, + age: { days: 30 }, + batchSize: 2, + useSourceLocation: false, + }), +); + // Todo backend.add(todoPlugin()); +backend.add(adrPlugin()); + // Techdocs backend.add(techdocsPlugin()); @@ -57,6 +95,9 @@ backend.add(searchModuleExploreCollator()); // Kubernetes backend.add(kubernetesPlugin()); +// Lighthouse +backend.add(lighthousePlugin()); + // Permissions backend.add(permissionPlugin()); backend.add(permissionModuleAllowAllPolicy()); diff --git a/packages/backend-openapi-utils/CHANGELOG.md b/packages/backend-openapi-utils/CHANGELOG.md index 0255bbbf73..3eb95afe95 100644 --- a/packages/backend-openapi-utils/CHANGELOG.md +++ b/packages/backend-openapi-utils/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/backend-openapi-utils +## 0.0.3-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/errors@1.2.1 + +## 0.0.3-next.0 + +### Patch Changes + +- ebeb77586975: Add a new `createRouter` method for generating an `express` router that validates against your spec. Also fixes a bug with the query parameters type resolution. +- Updated dependencies + - @backstage/errors@1.2.1 + ## 0.0.2 ### Patch Changes diff --git a/packages/backend-openapi-utils/README.md b/packages/backend-openapi-utils/README.md index ba286f94e8..1efab0e85b 100644 --- a/packages/backend-openapi-utils/README.md +++ b/packages/backend-openapi-utils/README.md @@ -13,16 +13,56 @@ This package is meant to provide a typed Express router for an OpenAPI spec. Bas 2. In your plugin's `src/service/createRouter.ts`, ```ts -import { ApiRouter } from `@backstage/backend-openapi-utils`; -import spec from '../schema/openapi.generated'; +import { createOpenApiRouter } from '../schema/openapi.generated'; // ... export function createRouter() { - const router = Router() as ApiRouter; - // ... - return router; + const router = createOpenApiRouter(); + // add routes to router, it's just an express router. + return router; } ``` +3. Add `@backstage/backend-openapi-utils` to your `package.json`'s `dependencies`. + +Why do I need to add this to `dependencies`? If you check the `src/schema/openapi.generated.ts` file, we're creating a router stub for you with the `@backstage/backend-openapi-utils` package. + +### Customization + +If the out of the box `router` doesn't work, you can do the following, + +```ts +import { createOpenApiRouter } from '../schema/openapi.generated'; +// ... +export function createRouter() { + // See https://github.com/cdimascio/express-openapi-validator/wiki/Documentation for available options. + const router = createOpenApiRouter(validatorOptions); + // add routes to router, it's just an express router. + return router; +} +``` + +If you need even more control -- say for example you wanted to update the spec at runtime -- you can do the following, + +```ts +import { spec } from '../schema/openapi.generated'; +import { createValidatedOpenApiRouter } from '@backstage/backend-openapi-utils'; +// ... +export function createRouter() { + // Update the spec here. + const newSpec = { ...spec, myproperty123: 123 }; + + // See https://github.com/cdimascio/express-openapi-validator/wiki/Documentation for available options. + const router = createValidatedOpenApiRouter( + newSpec, + validatorOptions, + ); + // add routes to router, it's just an express router. + return router; +} +``` + +## INTERNAL + ### Limitations 1. `as const` makes all fields `readonly` @@ -40,6 +80,10 @@ Router() as ApiRouter> ## Future Work -### Runtime validation +### Response Validation -Using a package like [`express-openapi-validator`](https://www.npmjs.com/package/express-openapi-validator), would allow us to remove [validation of request bodies with `AJV`](https://github.com/backstage/backstage/blob/e0506af8fc54074a160fb91c83d6cae8172d3bb3/plugins/catalog-backend/src/service/util.ts#L58). However, `AJV` currently doesn't have support for OpenAPI 3.1 and `express-openapi-validator` enforces full URL matching for paths, meaning it cannot be mounted at the router level. +This is a murky ground and something that will take a while to gain adoption. For now, keep responses in the spec and at the type level, but will need to work to drive adoption of response validation. + +### Common Error Format + +With the new `createRouter` method, we can start to control error response formats for input and coercion errors. diff --git a/packages/backend-openapi-utils/api-report.md b/packages/backend-openapi-utils/api-report.md index a4db8ac7bd..08ffa23a30 100644 --- a/packages/backend-openapi-utils/api-report.md +++ b/packages/backend-openapi-utils/api-report.md @@ -7,10 +7,12 @@ import type { ContentObject } from 'openapi3-ts'; import type core from 'express-serve-static-core'; import { FromSchema } from 'json-schema-to-ts'; import { JSONSchema7 } from 'json-schema-to-ts'; +import { middleware } from 'express-openapi-validator'; import type { OpenAPIObject } from 'openapi3-ts'; import type { ParameterObject } from 'openapi3-ts'; import type { ReferenceObject } from 'openapi3-ts'; import type { RequestBodyObject } from 'openapi3-ts'; +import { RequestHandler } from 'express'; import type { ResponseObject } from 'openapi3-ts'; import { Router } from 'express'; import type { SchemaObject } from 'openapi3-ts'; @@ -79,6 +81,15 @@ type CookieSchema< Method extends DocPathMethod, > = ParametersSchema, Method, ImmutableCookieObject>; +// @public +export function createValidatedOpenApiRouter( + spec: T, + options?: { + validatorOptions?: Partial['0']>; + middleware?: RequestHandler[]; + }, +): ApiRouter; + // @public (undocumented) type DiscriminateUnion = Extract< T, @@ -117,15 +128,18 @@ type DocParameters< Doc extends RequiredDoc, Path extends Extract, Method extends keyof Doc['paths'][Path], -> = DocOperation['parameters'] extends ReadonlyArray - ? { - [Index in keyof DocOperation< - Doc, - Path, - Method - >['parameters']]: DocParameter; - } - : never; +> = { + [Index in keyof DocOperation< + Doc, + Path, + Method + >['parameters'] as FromNumberStringToNumber]: DocParameter< + Doc, + Path, + Method, + Index + >; +}; // @public type DocPath< @@ -204,6 +218,10 @@ interface DocRequestMatcher< // @public (undocumented) type Filter = T extends U ? T : never; +// @public +type FromNumberStringToNumber = + NumberString extends `${infer R extends number}` ? R : never; + // @public (undocumented) type FullMap< T extends { @@ -332,6 +350,7 @@ declare namespace internal { ImmutablePathObject, ImmutableSchemaObject, DocParameter, + FromNumberStringToNumber, DocParameters, ParameterSchema, MapToSchema, @@ -425,17 +444,15 @@ type ParametersSchema< Path extends Extract, Method extends keyof Doc['paths'][Path], FilterType extends ImmutableParameterObject, -> = number extends keyof DocParameters - ? MapToSchema< - Doc, - FullMap< - MapDiscriminatedUnion< - Filter[number], FilterType>, - 'name' - > - > +> = MapToSchema< + Doc, + FullMap< + MapDiscriminatedUnion< + Filter>, FilterType>, + 'name' > - : never; + > +>; // @public (undocumented) type PathDoc = Pick; diff --git a/packages/backend-openapi-utils/package.json b/packages/backend-openapi-utils/package.json index 89a4621a49..9123d6dd77 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.2", + "version": "0.0.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -11,6 +11,12 @@ "module": "dist/index.esm.js", "types": "dist/index.d.ts" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "packages/backend-openapi-utils" + }, "backstage": { "role": "node-library" }, @@ -24,17 +30,21 @@ "postpack": "backstage-cli package postpack" }, "devDependencies": { - "@backstage/cli": "workspace:^" + "@backstage/cli": "workspace:^", + "supertest": "^6.1.3" }, "files": [ "dist" ], "dependencies": { + "@backstage/errors": "workspace:^", "@types/express": "^4.17.6", "@types/express-serve-static-core": "^4.17.5", "express": "^4.17.1", + "express-openapi-validator": "^5.0.4", "express-promise-router": "^4.1.0", "json-schema-to-ts": "^2.6.2", + "lodash": "^4.17.21", "openapi3-ts": "^3.1.2" } } diff --git a/packages/backend-openapi-utils/src/___fixtures__/single-path.ts b/packages/backend-openapi-utils/src/___fixtures__/single-path.ts new file mode 100644 index 0000000000..d050c5a88b --- /dev/null +++ b/packages/backend-openapi-utils/src/___fixtures__/single-path.ts @@ -0,0 +1,120 @@ +/* + * 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 default { + openapi: '3.0.2', + info: { + title: 'Swagger Petstore - OpenAPI 3.0', + description: + "This is a sample Pet Store Server based on the OpenAPI 3.0 specification. You can find out more about\nSwagger at [http://swagger.io](http://swagger.io). In the third iteration of the pet store, we've switched to the design first approach!\nYou can now help us improve the API whether it's by making changes to the definition itself or to the code.\nThat way, with time, we can improve the API in general, and expose some of the new features in OAS3.\n\nSome useful links:\n- [The Pet Store repository](https://github.com/swagger-api/swagger-petstore)\n- [The source API definition for the Pet Store](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/resources/openapi.yaml)", + termsOfService: 'http://swagger.io/terms/', + contact: { + email: 'apiteam@swagger.io', + }, + license: { + name: 'Apache 2.0', + url: 'http://www.apache.org/licenses/LICENSE-2.0.html', + }, + version: '1.0.17', + }, + externalDocs: { + description: 'Find out more about Swagger', + url: 'http://swagger.io', + }, + servers: [ + { + url: '/', + }, + ], + paths: { + '/pet/{petId}': { + get: { + summary: 'Find pet by ID', + description: 'Returns a single pet', + operationId: 'getPetById', + parameters: [ + { + name: 'petId', + in: 'path', + description: 'ID of pet to return', + required: true, + schema: { + type: 'integer', + format: 'int64', + }, + }, + ], + responses: { + '200': { + description: 'successful operation', + content: { + 'application/json': { + schema: { + $ref: '#/components/schemas/Pet', + }, + }, + }, + }, + '400': { + description: 'Invalid ID supplied', + }, + '404': { + description: 'Pet not found', + }, + }, + }, + }, + }, + components: { + schemas: { + Pet: { + required: ['name', 'photoUrls'], + type: 'object', + properties: { + id: { + type: 'integer', + format: 'int64', + example: 10, + }, + name: { + type: 'string', + example: 'doggie', + }, + photoUrls: { + type: 'array', + xml: { + wrapped: true, + }, + items: { + type: 'string', + xml: { + name: 'photoUrl', + }, + }, + }, + status: { + type: 'string', + description: 'pet status in the store', + enum: ['available', 'pending', 'sold'], + }, + }, + xml: { + name: 'pet', + }, + }, + }, + }, +} as const; diff --git a/packages/backend-openapi-utils/src/index.ts b/packages/backend-openapi-utils/src/index.ts index f8fdcff16b..3acdcbf6f0 100644 --- a/packages/backend-openapi-utils/src/index.ts +++ b/packages/backend-openapi-utils/src/index.ts @@ -23,3 +23,4 @@ import * as internal from './types'; export { internal }; export type { ApiRouter } from './router'; +export { createValidatedOpenApiRouter } from './stub'; diff --git a/packages/backend-openapi-utils/src/stub.test.ts b/packages/backend-openapi-utils/src/stub.test.ts new file mode 100644 index 0000000000..678445c818 --- /dev/null +++ b/packages/backend-openapi-utils/src/stub.test.ts @@ -0,0 +1,71 @@ +/* + * 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 { createValidatedOpenApiRouter } from './stub'; +import express from 'express'; +import request from 'supertest'; +import singlePathSpec from './___fixtures__/single-path'; + +describe('createRouter', () => { + it('does NOT override originalUrl and basePath after execution', async () => { + expect.assertions(2); + const router = createValidatedOpenApiRouter(singlePathSpec); + router.get('/pet/:petId', (req, res) => { + expect(req.baseUrl).toBe('/pet-store'); + expect(req.originalUrl).toBe(`/pet-store/pet/${req.params.petId}`); + res.send(''); + }); + + const appRouter = express(); + appRouter.use('/pet-store', router); + + await request(appRouter).get('/pet-store/pet/1'); + }); + + it('handles nested routes correctly (by treating plugin specs as full paths)', async () => { + expect.assertions(1); + const router = createValidatedOpenApiRouter(singlePathSpec); + const routerGetFn = jest.fn(); + router.get('/pet/:petId', (_, res) => { + routerGetFn(); + res.send(''); + }); + + const apiRouter = express.Router(); + apiRouter.use('/pet-store', router); + const appRouter = express(); + appRouter.use('/api', apiRouter); + + await request(appRouter).get('/api/pet-store/pet/1'); + expect(routerGetFn).toHaveBeenCalledTimes(1); + }); + + it('handles coercing parameters correctly', async () => { + expect.assertions(1); + const router = createValidatedOpenApiRouter(singlePathSpec); + router.get('/pet/:petId', (req, res) => { + expect(typeof req.params.petId).toBe('integer'); + res.send(''); + }); + + const apiRouter = express.Router(); + apiRouter.use('/pet-store', router); + const appRouter = express(); + appRouter.use('/api', apiRouter); + + await request(appRouter).get('/api/pet-store/pet/1'); + }); +}); diff --git a/packages/backend-openapi-utils/src/stub.ts b/packages/backend-openapi-utils/src/stub.ts new file mode 100644 index 0000000000..6ec0e1db3c --- /dev/null +++ b/packages/backend-openapi-utils/src/stub.ts @@ -0,0 +1,120 @@ +/* + * 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 PromiseRouter from 'express-promise-router'; +import { ApiRouter } from './router'; +import { RequiredDoc } from './types'; +import { + ErrorRequestHandler, + RequestHandler, + NextFunction, + Request, + Response, + json, +} from 'express'; +import { InputError } from '@backstage/errors'; +import { middleware as OpenApiValidator } from 'express-openapi-validator'; + +type PropertyOverrideRequest = Request & { + [key: symbol]: string; +}; + +const baseUrlSymbol = Symbol(); +const originalUrlSymbol = Symbol(); + +function validatorErrorTransformer(): ErrorRequestHandler { + return (error: Error, _: Request, _2: Response, next: NextFunction) => { + next(new InputError(error.message)); + }; +} + +export function getDefaultRouterMiddleware() { + return [json()]; +} + +/** + * Create a new OpenAPI router with some default middleware. + * @param spec - Your OpenAPI spec imported as a JSON object. + * @param validatorOptions - `openapi-express-validator` options to override the defaults. + * @returns A new express router with validation middleware. + * @public + */ +export function createValidatedOpenApiRouter( + spec: T, + options?: { + validatorOptions?: Partial['0']>; + middleware?: RequestHandler[]; + }, +) { + const router = PromiseRouter() as ApiRouter; + router.use(options?.middleware || getDefaultRouterMiddleware()); + + /** + * Middleware to setup the routing for OpenApiValidator. OpenApiValidator expects `req.originalUrl` + * and `req.baseUrl` to be the full path. We adjust them here to basically be nothing and then + * revive the old values in the last function in this method. We could instead update `req.path` + * but that might affect the routing and I'd rather not. + * + * TODO: I opened https://github.com/cdimascio/express-openapi-validator/issues/843 + * to track this on the middleware side, but there was a similar ticket, https://github.com/cdimascio/express-openapi-validator/issues/113 + * that has had minimal activity. If that changes, update this to use a new option on their side. + */ + router.use((req: Request, _, next) => { + /** + * Express typings are weird. They don't recognize PropertyOverrideRequest as a valid + * Request child and try to overload as PathParams. Just cast it here, since we know + * what we're doing. + */ + const customRequest = req as PropertyOverrideRequest; + customRequest[baseUrlSymbol] = customRequest.baseUrl; + customRequest.baseUrl = ''; + customRequest[originalUrlSymbol] = customRequest.originalUrl; + customRequest.originalUrl = customRequest.url; + next(); + }); + + // TODO: Handle errors by converting from OpenApiValidator errors to known @backstage/errors errors. + router.use( + OpenApiValidator({ + validateRequests: { + coerceTypes: false, + allowUnknownQueryParameters: false, + }, + ignoreUndocumented: true, + validateResponses: false, + ...options?.validatorOptions, + apiSpec: spec as any, + }), + ); + + /** + * Revert `req.baseUrl` and `req.originalUrl` changes. This ensures that any further usage + * of these variables will be unchanged. + */ + router.use((req: Request, _, next) => { + const customRequest = req as PropertyOverrideRequest; + customRequest.baseUrl = customRequest[baseUrlSymbol]; + customRequest.originalUrl = customRequest[originalUrlSymbol]; + delete customRequest[baseUrlSymbol]; + delete customRequest[originalUrlSymbol]; + next(); + }); + + // Any errors from the middleware get through here. + router.use(validatorErrorTransformer()); + + return router; +} diff --git a/packages/backend-openapi-utils/src/types/params.ts b/packages/backend-openapi-utils/src/types/params.ts index b737450db7..52d61a2683 100644 --- a/packages/backend-openapi-utils/src/types/params.ts +++ b/packages/backend-openapi-utils/src/types/params.ts @@ -35,6 +35,7 @@ import { PathTemplate, RequiredDoc, SchemaRef, + ValueOf, } from './common'; import { FromSchema, JSONSchema7 } from 'json-schema-to-ts'; @@ -60,6 +61,14 @@ export type DocParameter< : never : DocOperation['parameters'][Parameter]; +/** + * Helper to convert from string to number, used to index arrays and pull out just the indices in the array. + * @public + */ +export type FromNumberStringToNumber< + NumberString extends string | number | symbol, +> = NumberString extends `${infer R extends number}` ? R : never; + /** * @public */ @@ -67,15 +76,18 @@ export type DocParameters< Doc extends RequiredDoc, Path extends Extract, Method extends keyof Doc['paths'][Path], -> = DocOperation['parameters'] extends ReadonlyArray - ? { - [Index in keyof DocOperation< - Doc, - Path, - Method - >['parameters']]: DocParameter; - } - : never; +> = { + [Index in keyof DocOperation< + Doc, + Path, + Method + >['parameters'] as FromNumberStringToNumber]: DocParameter< + Doc, + Path, + Method, + Index + >; +}; /** * @public @@ -111,17 +123,15 @@ export type ParametersSchema< Path extends Extract, Method extends keyof Doc['paths'][Path], FilterType extends ImmutableParameterObject, -> = number extends keyof DocParameters - ? MapToSchema< - Doc, - FullMap< - MapDiscriminatedUnion< - Filter[number], FilterType>, - 'name' - > - > +> = MapToSchema< + Doc, + FullMap< + MapDiscriminatedUnion< + Filter>, FilterType>, + 'name' > - : never; + > +>; /** * @public diff --git a/packages/backend-plugin-api/CHANGELOG.md b/packages/backend-plugin-api/CHANGELOG.md index 6e68141e75..510797672c 100644 --- a/packages/backend-plugin-api/CHANGELOG.md +++ b/packages/backend-plugin-api/CHANGELOG.md @@ -1,5 +1,77 @@ # @backstage/backend-plugin-api +## 0.6.0-next.1 + +### Minor Changes + +- 629cbd194a87: **BREAKING**: Renamed `coreServices.config` to `coreServices.rootConfig`. +- d008aefef808: **BREAKING**: Removing shared environments concept from the new experimental backend system. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.2.17-next.1 + - @backstage/backend-tasks@0.5.5-next.1 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-permission-common@0.7.7 + +## 0.5.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.5-next.0 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.17-next.0 + - @backstage/plugin-permission-common@0.7.7 + +## 0.5.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.4 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.16 + - @backstage/plugin-permission-common@0.7.7 + +## 0.5.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.4-next.0 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.16-next.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + +## 0.5.3 + +### Patch Changes + +- 3bb4158a8aa4: Added startup hooks to the lifecycle services. +- Updated dependencies + - @backstage/types@1.1.0 + - @backstage/backend-tasks@0.5.3 + - @backstage/plugin-auth-node@0.2.15 + - @backstage/config@1.0.8 + - @backstage/plugin-permission-common@0.7.6 + +## 0.5.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.3-next.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.15-next.2 + - @backstage/plugin-permission-common@0.7.6-next.0 + ## 0.5.3-next.1 ### Patch Changes diff --git a/packages/backend-plugin-api/api-report.md b/packages/backend-plugin-api/api-report.md index b3cbef993c..a1ae6284c6 100644 --- a/packages/backend-plugin-api/api-report.md +++ b/packages/backend-plugin-api/api-report.md @@ -93,13 +93,10 @@ export type CacheServiceSetOptions = { ttl?: number; }; -// @public (undocumented) -export interface ConfigService extends Config {} - // @public export namespace coreServices { const cache: ServiceRef; - const config: ServiceRef; + const rootConfig: ServiceRef; const database: ServiceRef; const discovery: ServiceRef; const httpRouter: ServiceRef; @@ -222,15 +219,6 @@ export function createServiceRef( config: ServiceRefConfig, ): ServiceRef; -// @public -export function createSharedEnvironment< - TOptions extends [options?: object] = [], ->( - config: - | SharedBackendEnvironmentConfig - | ((...params: TOptions) => SharedBackendEnvironmentConfig), -): (...options: TOptions) => SharedBackendEnvironment; - // @public export interface DatabaseService { getClient(): Promise; @@ -389,6 +377,9 @@ export type ReadUrlResponse = { lastModifiedAt?: Date; }; +// @public (undocumented) +export interface RootConfigService extends Config {} + // @public (undocumented) export interface RootHttpRouterService { use(path: string, handler: Handler): void; @@ -476,18 +467,6 @@ export interface ServiceRefConfig { scope?: TScope; } -// @public -export interface SharedBackendEnvironment { - // (undocumented) - $$type: '@backstage/SharedBackendEnvironment'; -} - -// @public -export interface SharedBackendEnvironmentConfig { - // (undocumented) - services?: ServiceFactoryOrFunction[]; -} - // @public export interface TokenManagerService { authenticate(token: string): Promise; diff --git a/packages/backend-plugin-api/package.json b/packages/backend-plugin-api/package.json index db36b17aca..5d0bfe08fb 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.3-next.1", + "version": "0.6.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-plugin-api/src/services/definitions/ConfigService.ts b/packages/backend-plugin-api/src/services/definitions/RootConfigService.ts similarity index 92% rename from packages/backend-plugin-api/src/services/definitions/ConfigService.ts rename to packages/backend-plugin-api/src/services/definitions/RootConfigService.ts index db9aa88dda..02343e4ee8 100644 --- a/packages/backend-plugin-api/src/services/definitions/ConfigService.ts +++ b/packages/backend-plugin-api/src/services/definitions/RootConfigService.ts @@ -19,4 +19,4 @@ import { Config } from '@backstage/config'; /** * @public */ -export interface ConfigService extends Config {} +export interface RootConfigService extends Config {} diff --git a/packages/backend-plugin-api/src/services/definitions/coreServices.ts b/packages/backend-plugin-api/src/services/definitions/coreServices.ts index 7dad94cebf..b42795d052 100644 --- a/packages/backend-plugin-api/src/services/definitions/coreServices.ts +++ b/packages/backend-plugin-api/src/services/definitions/coreServices.ts @@ -32,13 +32,13 @@ export namespace coreServices { }); /** - * The service reference for the root scoped {@link ConfigService}. + * The service reference for the root scoped {@link RootConfigService}. * * @public */ - export const config = createServiceRef< - import('./ConfigService').ConfigService - >({ id: 'core.config', scope: 'root' }); + export const rootConfig = createServiceRef< + import('./RootConfigService').RootConfigService + >({ id: 'core.rootConfig', scope: 'root' }); /** * The service reference for the plugin scoped {@link DatabaseService}. diff --git a/packages/backend-plugin-api/src/services/definitions/index.ts b/packages/backend-plugin-api/src/services/definitions/index.ts index ab0f0b84b1..98be8211db 100644 --- a/packages/backend-plugin-api/src/services/definitions/index.ts +++ b/packages/backend-plugin-api/src/services/definitions/index.ts @@ -20,7 +20,7 @@ export type { CacheServiceOptions, CacheServiceSetOptions, } from './CacheService'; -export type { ConfigService } from './ConfigService'; +export type { RootConfigService } from './RootConfigService'; export type { DatabaseService } from './DatabaseService'; export type { DiscoveryService } from './DiscoveryService'; export type { HttpRouterService } from './HttpRouterService'; diff --git a/packages/backend-plugin-api/src/wiring/createSharedEnvironment.test.ts b/packages/backend-plugin-api/src/wiring/createSharedEnvironment.test.ts deleted file mode 100644 index 381a4799d2..0000000000 --- a/packages/backend-plugin-api/src/wiring/createSharedEnvironment.test.ts +++ /dev/null @@ -1,100 +0,0 @@ -/* - * 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 { - createServiceFactory, - createServiceRef, - ServiceFactoryOrFunction, -} from '../services'; -import { - createSharedEnvironment, - InternalSharedBackendEnvironment, -} from './createSharedEnvironment'; - -const fooService = createServiceRef({ id: 'foo', scope: 'root' }); -const fooFactory = createServiceFactory({ - service: fooService, - deps: {}, - async factory() { - return 'foo'; - }, -}); - -const barService = createServiceRef({ id: 'bar', scope: 'root' }); -const barFactory = createServiceFactory({ - service: barService, - deps: {}, - async factory() { - return 0xba5; - }, -}); - -describe('createSharedEnvironment', () => { - it('should create an empty shared environment', () => { - const env = createSharedEnvironment({}); - expect(env).toBeDefined(); - const internalEnv = env() as unknown as InternalSharedBackendEnvironment; - expect(internalEnv).toEqual({ - $$type: '@backstage/SharedBackendEnvironment', - version: 'v1', - services: undefined, - }); - }); - - it('should create a shared environment with services', () => { - const env = createSharedEnvironment({ - services: [fooFactory, barFactory()], - }); - const internalEnv = env() as unknown as InternalSharedBackendEnvironment; - expect(internalEnv.version).toBe('v1'); - expect(internalEnv.services?.length).toBe(2); - expect(internalEnv.services?.[0]?.service.id).toBe('foo'); - expect(internalEnv.services?.[1]?.service.id).toBe('bar'); - }); - - it('should create a shared environment with options', () => { - const env = createSharedEnvironment((options?: { withFoo?: boolean }) => { - const services = new Array(); - if (options?.withFoo) { - services.push(fooFactory()); - } - services.push(barFactory); - return { services }; - }); - const internalEnv1 = env() as unknown as InternalSharedBackendEnvironment; - expect(internalEnv1.version).toBe('v1'); - expect(internalEnv1.services?.length).toBe(1); - expect(internalEnv1.services?.[0]?.service.id).toBe('bar'); - - const internalEnv2 = env({ - withFoo: true, - }) as unknown as InternalSharedBackendEnvironment; - expect(internalEnv2.version).toBe('v1'); - expect(internalEnv2.services?.length).toBe(2); - expect(internalEnv2.services?.[0]?.service.id).toBe('foo'); - expect(internalEnv2.services?.[1]?.service.id).toBe('bar'); - }); - - it('should not allow duplicate service factories', () => { - expect(() => - createSharedEnvironment({ - services: [fooFactory, fooFactory()], - })(), - ).toThrow( - "Duplicate service implementations provided in shared environment for 'foo'", - ); - }); -}); diff --git a/packages/backend-plugin-api/src/wiring/createSharedEnvironment.ts b/packages/backend-plugin-api/src/wiring/createSharedEnvironment.ts deleted file mode 100644 index 57f0533523..0000000000 --- a/packages/backend-plugin-api/src/wiring/createSharedEnvironment.ts +++ /dev/null @@ -1,102 +0,0 @@ -/* - * 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 { ServiceFactory, ServiceFactoryOrFunction } from '../services'; - -/** - * The configuration options passed to {@link createSharedEnvironment}. - * - * @public - */ -export interface SharedBackendEnvironmentConfig { - services?: ServiceFactoryOrFunction[]; -} - -/** - * An opaque type that represents the contents of a shared backend environment. - * - * @public - */ -export interface SharedBackendEnvironment { - $$type: '@backstage/SharedBackendEnvironment'; - - // NOTE: This type is opaque in order to allow for future API evolution without - // cluttering the external API. For example we might want to add support - // for more powerful callback based backend modifications. - // - // By making this opaque we also ensure that the type doesn't become an input - // type that we need to care about, as it would otherwise be possible to pass - // a custom environment definition to `createBackend`, which we don't want. -} - -/** - * This type is NOT supposed to be used by anyone except internally by the - * backend-app-api package. - * - * @internal - */ -export interface InternalSharedBackendEnvironment { - version: 'v1'; - services?: ServiceFactory[]; -} - -/** - * Creates a shared backend environment which can be used to create multiple - * backends. - * - * @public - */ -export function createSharedEnvironment< - TOptions extends [options?: object] = [], ->( - config: - | SharedBackendEnvironmentConfig - | ((...params: TOptions) => SharedBackendEnvironmentConfig), -): (...options: TOptions) => SharedBackendEnvironment { - const configCallback = typeof config === 'function' ? config : () => config; - - return (...options) => { - const actualConfig = configCallback(...options); - const services = actualConfig?.services?.map(sf => - typeof sf === 'function' ? sf() : sf, - ); - - const exists = new Set(); - const duplicates = new Set(); - for (const { service } of services ?? []) { - if (exists.has(service.id)) { - duplicates.add(service.id); - } else { - exists.add(service.id); - } - } - - if (duplicates.size > 0) { - const dupStr = [...duplicates].map(id => `'${id}'`).join(', '); - throw new Error( - `Duplicate service implementations provided in shared environment for ${dupStr}`, - ); - } - - // Here to ensure type safety in this internal implementation. - const env: SharedBackendEnvironment & InternalSharedBackendEnvironment = { - $$type: '@backstage/SharedBackendEnvironment', - version: 'v1', - services, - }; - return env; - }; -} diff --git a/packages/backend-plugin-api/src/wiring/index.ts b/packages/backend-plugin-api/src/wiring/index.ts index 242301ea4d..9cb767b8ac 100644 --- a/packages/backend-plugin-api/src/wiring/index.ts +++ b/packages/backend-plugin-api/src/wiring/index.ts @@ -14,11 +14,6 @@ * limitations under the License. */ -export { createSharedEnvironment } from './createSharedEnvironment'; -export type { - SharedBackendEnvironment, - SharedBackendEnvironmentConfig, -} from './createSharedEnvironment'; export type { BackendModuleConfig, BackendPluginConfig, diff --git a/packages/backend-tasks/CHANGELOG.md b/packages/backend-tasks/CHANGELOG.md index 8290ea3b99..05e51c661c 100644 --- a/packages/backend-tasks/CHANGELOG.md +++ b/packages/backend-tasks/CHANGELOG.md @@ -1,5 +1,65 @@ # @backstage/backend-tasks +## 0.5.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + +## 0.5.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + +## 0.5.4 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-common@0.19.1 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + +## 0.5.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + +## 0.5.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/types@1.1.0 + - @backstage/errors@1.2.0 + - @backstage/config@1.0.8 + +## 0.5.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.2.0-next.0 + - @backstage/types@1.0.2 + ## 0.5.3-next.1 ### Patch Changes diff --git a/packages/backend-tasks/package.json b/packages/backend-tasks/package.json index 604edce8dc..9dd2c9e557 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.3-next.1", + "version": "0.5.5-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 dabf0c1605..78a8e7cd6d 100644 --- a/packages/backend-test-utils/CHANGELOG.md +++ b/packages/backend-test-utils/CHANGELOG.md @@ -1,5 +1,83 @@ # @backstage/backend-test-utils +## 0.2.0-next.1 + +### Minor Changes + +- b9c57a4f857e: **BREAKING**: Renamed `mockServices.config` to `mockServices.rootConfig`. + +### Patch Changes + +- ae9304818136: Add needed constants and constructs to support PostgreSQL version 14 as test database +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/plugin-auth-node@0.2.17-next.1 + - @backstage/backend-app-api@0.5.0-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + +## 0.1.40-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-app-api@0.4.6-next.0 + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.17-next.0 + +## 0.1.39 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1 + - @backstage/backend-app-api@0.4.5 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.16 + +## 0.1.39-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-app-api@0.4.5-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.16-next.0 + +## 0.1.38 + +### Patch Changes + +- 68a21956ef52: Remove reference to deprecated import +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/types@1.1.0 + - @backstage/backend-app-api@0.4.4 + - @backstage/backend-plugin-api@0.5.3 + - @backstage/plugin-auth-node@0.2.15 + - @backstage/config@1.0.8 + +## 0.1.38-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/backend-app-api@0.4.4-next.2 + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.15-next.2 + ## 0.1.38-next.1 ### Patch Changes diff --git a/packages/backend-test-utils/api-report.md b/packages/backend-test-utils/api-report.md index 358b51071f..1cb7a83a0e 100644 --- a/packages/backend-test-utils/api-report.md +++ b/packages/backend-test-utils/api-report.md @@ -6,7 +6,6 @@ import { Backend } from '@backstage/backend-app-api'; import { BackendFeature } from '@backstage/backend-plugin-api'; import { CacheService } from '@backstage/backend-plugin-api'; -import { ConfigService } from '@backstage/backend-plugin-api'; import { DatabaseService } from '@backstage/backend-plugin-api'; import { ExtendedHttpServer } from '@backstage/backend-app-api'; import { ExtensionPoint } from '@backstage/backend-plugin-api'; @@ -18,6 +17,7 @@ import { Knex } from 'knex'; import { LifecycleService } from '@backstage/backend-plugin-api'; import { LoggerService } from '@backstage/backend-plugin-api'; import { PermissionsService } from '@backstage/backend-plugin-api'; +import { RootConfigService } from '@backstage/backend-plugin-api'; import { RootLifecycleService } from '@backstage/backend-plugin-api'; import { SchedulerService } from '@backstage/backend-plugin-api'; import { ServiceFactory } from '@backstage/backend-plugin-api'; @@ -36,19 +36,6 @@ export namespace mockServices { factory: () => ServiceFactory; } // (undocumented) - export function config(options?: config.Options): ConfigService; - // (undocumented) - export namespace config { - // (undocumented) - export type Options = { - data?: JsonObject; - }; - const // (undocumented) - factory: ( - options?: Options | undefined, - ) => ServiceFactory; - } - // (undocumented) export namespace database { const // (undocumented) factory: () => ServiceFactory; @@ -83,6 +70,19 @@ export namespace mockServices { factory: () => ServiceFactory; } // (undocumented) + export function rootConfig(options?: rootConfig.Options): RootConfigService; + // (undocumented) + export namespace rootConfig { + // (undocumented) + export type Options = { + data?: JsonObject; + }; + const // (undocumented) + factory: ( + options?: Options | undefined, + ) => ServiceFactory; + } + // (undocumented) export namespace rootLifecycle { const // (undocumented) factory: () => ServiceFactory; @@ -168,6 +168,7 @@ export interface TestBackendOptions< // @public export type TestDatabaseId = + | 'POSTGRES_14' | 'POSTGRES_13' | 'POSTGRES_12' | 'POSTGRES_11' diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json index 4bf7bde46a..beebf06624 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.38-next.1", + "version": "0.2.0-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 be29a42806..d766d38815 100644 --- a/packages/backend-test-utils/src/database/TestDatabases.test.ts +++ b/packages/backend-test-utils/src/database/TestDatabases.test.ts @@ -59,6 +59,37 @@ describe('TestDatabases', () => { describe('each connect', () => { const dbs = TestDatabases.create(); + itIfDocker( + 'obeys a provided connection string for postgres 14', + async () => { + const { host, port, user, password, stop } = + await startPostgresContainer('postgres:14'); + + try { + // Leave a mark + process.env.BACKSTAGE_TEST_DATABASE_POSTGRES14_CONNECTION_STRING = `postgresql://${user}:${password}@${host}:${port}`; + const input = await dbs.init('POSTGRES_14'); + 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 postgres 13', async () => { diff --git a/packages/backend-test-utils/src/database/types.ts b/packages/backend-test-utils/src/database/types.ts index 8c1d6f5193..a7bfdeb12d 100644 --- a/packages/backend-test-utils/src/database/types.ts +++ b/packages/backend-test-utils/src/database/types.ts @@ -24,6 +24,7 @@ import { getDockerImageForName } from '../util/getDockerImageForName'; * @public */ export type TestDatabaseId = + | 'POSTGRES_14' | 'POSTGRES_13' | 'POSTGRES_12' | 'POSTGRES_11' @@ -46,6 +47,13 @@ export type Instance = { export const allDatabases: Record = Object.freeze({ + POSTGRES_14: { + name: 'Postgres 14.x', + driver: 'pg', + dockerImageName: getDockerImageForName('postgres:14'), + connectionStringEnvironmentVariableName: + 'BACKSTAGE_TEST_DATABASE_POSTGRES14_CONNECTION_STRING', + }, POSTGRES_13: { name: 'Postgres 13.x', driver: 'pg', diff --git a/packages/backend-test-utils/src/next/services/mockServices.ts b/packages/backend-test-utils/src/next/services/mockServices.ts index 8a3125214c..0455b9f1ae 100644 --- a/packages/backend-test-utils/src/next/services/mockServices.ts +++ b/packages/backend-test-utils/src/next/services/mockServices.ts @@ -15,7 +15,7 @@ */ import { - ConfigService, + RootConfigService, coreServices, createServiceFactory, IdentityService, @@ -61,13 +61,13 @@ function simpleFactory< * @public */ export namespace mockServices { - export function config(options?: config.Options): ConfigService { + export function rootConfig(options?: rootConfig.Options): RootConfigService { return new ConfigReader(options?.data, 'mock-config'); } - export namespace config { + export namespace rootConfig { export type Options = { data?: JsonObject }; - export const factory = simpleFactory(coreServices.config, config); + export const factory = simpleFactory(coreServices.rootConfig, rootConfig); } export function rootLogger(options?: rootLogger.Options): LoggerService { diff --git a/packages/backend-test-utils/src/next/wiring/TestBackend.test.ts b/packages/backend-test-utils/src/next/wiring/TestBackend.test.ts index aa93a7dae1..cc916d4309 100644 --- a/packages/backend-test-utils/src/next/wiring/TestBackend.test.ts +++ b/packages/backend-test-utils/src/next/wiring/TestBackend.test.ts @@ -168,7 +168,7 @@ describe('TestBackend', () => { env.registerInit({ deps: { cache: coreServices.cache, - config: coreServices.config, + config: coreServices.rootConfig, database: coreServices.database, discovery: coreServices.discovery, httpRouter: coreServices.httpRouter, diff --git a/packages/backend-test-utils/src/next/wiring/TestBackend.ts b/packages/backend-test-utils/src/next/wiring/TestBackend.ts index 66bbb62193..8a4e1d8471 100644 --- a/packages/backend-test-utils/src/next/wiring/TestBackend.ts +++ b/packages/backend-test-utils/src/next/wiring/TestBackend.ts @@ -22,7 +22,7 @@ import { ExtendedHttpServer, DefaultRootHttpRouter, } from '@backstage/backend-app-api'; -import { SingleHostDiscovery } from '@backstage/backend-common'; +import { HostDiscovery } from '@backstage/backend-common'; import { ServiceFactory, ServiceRef, @@ -73,7 +73,7 @@ export interface TestBackend extends Backend { const defaultServiceFactories = [ mockServices.cache.factory(), - mockServices.config.factory(), + mockServices.rootConfig.factory(), mockServices.database.factory(), mockServices.httpRouter.factory(), mockServices.identity.factory(), @@ -108,7 +108,7 @@ export async function startTestBackend< const rootHttpRouterFactory = createServiceFactory({ service: coreServices.rootHttpRouter, deps: { - config: coreServices.config, + config: coreServices.rootConfig, lifecycle: coreServices.rootLifecycle, rootLogger: coreServices.rootLogger, }, @@ -148,7 +148,7 @@ export async function startTestBackend< throw new Error('Test server not started yet'); } const port = server.port(); - const discovery = SingleHostDiscovery.fromConfig( + const discovery = HostDiscovery.fromConfig( new ConfigReader({ backend: { baseUrl: `http://localhost:${port}`, listen: { port } }, }), diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index 0d60cc67c9..84c802ae58 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,403 @@ # example-backend +## 0.2.86-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-module-elasticsearch@1.3.3-next.1 + - @backstage/plugin-search-backend-module-pg@0.5.9-next.1 + - @backstage/plugin-azure-devops-backend@0.3.27-next.1 + - @backstage/plugin-kubernetes-backend@0.11.3-next.1 + - @backstage/plugin-lighthouse-backend@0.2.4-next.1 + - @backstage/plugin-permission-backend@0.5.23-next.1 + - @backstage/plugin-scaffolder-backend@1.15.2-next.1 + - @backstage/plugin-devtools-backend@0.1.3-next.1 + - @backstage/plugin-techdocs-backend@1.6.5-next.1 + - @backstage/backend-common@0.19.2-next.1 + - @backstage/plugin-catalog-backend@1.12.0-next.1 + - @backstage/plugin-badges-backend@0.2.3-next.1 + - @backstage/plugin-events-backend@0.2.9-next.1 + - @backstage/plugin-search-backend@1.4.0-next.1 + - @backstage/plugin-kafka-backend@0.2.41-next.1 + - @backstage/plugin-proxy-backend@0.2.42-next.1 + - @backstage/plugin-todo-backend@0.2.0-next.1 + - @backstage/plugin-app-backend@0.3.48-next.1 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.1-next.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.2.0-next.1 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.17-next.1 + - @backstage/plugin-entity-feedback-backend@0.1.6-next.1 + - @backstage/plugin-code-coverage-backend@0.2.14-next.1 + - @backstage/plugin-search-backend-node@1.2.4-next.1 + - @backstage/plugin-linguist-backend@0.3.2-next.1 + - @backstage/plugin-playlist-backend@0.3.4-next.1 + - @backstage/plugin-explore-backend@0.0.10-next.1 + - @backstage/plugin-jenkins-backend@0.2.3-next.1 + - @backstage/plugin-nomad-backend@0.1.2-next.1 + - @backstage/plugin-catalog-node@1.4.1-next.1 + - @backstage/plugin-events-node@0.2.9-next.1 + - @backstage/plugin-auth-node@0.2.17-next.1 + - @backstage/plugin-auth-backend@0.18.6-next.1 + - @backstage/backend-tasks@0.5.5-next.1 + - @backstage/plugin-adr-backend@0.3.6-next.1 + - @backstage/plugin-azure-sites-backend@0.1.10-next.1 + - @backstage/plugin-graphql-backend@0.1.38-next.1 + - @backstage/plugin-permission-node@0.7.11-next.1 + - @backstage/plugin-rollbar-backend@0.1.45-next.1 + - @backstage/plugin-tech-insights-backend@0.5.14-next.1 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.32-next.1 + - @backstage/plugin-tech-insights-node@0.4.6-next.1 + - example-app@0.2.86-next.1 + - @backstage/integration@1.5.1 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-search-common@1.2.5 + +## 0.2.86-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-linguist-backend@0.3.2-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.2.0-next.0 + - @backstage/plugin-search-backend-node@1.2.4-next.0 + - @backstage/plugin-todo-backend@0.2.0-next.0 + - @backstage/plugin-catalog-backend@1.12.0-next.0 + - @backstage/plugin-search-backend@1.4.0-next.0 + - example-app@0.2.86-next.0 + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-tasks@0.5.5-next.0 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1 + - @backstage/plugin-adr-backend@0.3.6-next.0 + - @backstage/plugin-app-backend@0.3.48-next.0 + - @backstage/plugin-auth-backend@0.18.6-next.0 + - @backstage/plugin-auth-node@0.2.17-next.0 + - @backstage/plugin-azure-devops-backend@0.3.27-next.0 + - @backstage/plugin-azure-sites-backend@0.1.10-next.0 + - @backstage/plugin-badges-backend@0.2.3-next.0 + - @backstage/plugin-catalog-node@1.4.1-next.0 + - @backstage/plugin-code-coverage-backend@0.2.14-next.0 + - @backstage/plugin-devtools-backend@0.1.3-next.0 + - @backstage/plugin-entity-feedback-backend@0.1.6-next.0 + - @backstage/plugin-events-backend@0.2.9-next.0 + - @backstage/plugin-events-node@0.2.9-next.0 + - @backstage/plugin-explore-backend@0.0.10-next.0 + - @backstage/plugin-graphql-backend@0.1.38-next.0 + - @backstage/plugin-jenkins-backend@0.2.3-next.0 + - @backstage/plugin-kafka-backend@0.2.41-next.0 + - @backstage/plugin-kubernetes-backend@0.11.3-next.0 + - @backstage/plugin-lighthouse-backend@0.2.4-next.0 + - @backstage/plugin-nomad-backend@0.1.2-next.0 + - @backstage/plugin-permission-backend@0.5.23-next.0 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-permission-node@0.7.11-next.0 + - @backstage/plugin-playlist-backend@0.3.4-next.0 + - @backstage/plugin-proxy-backend@0.2.42-next.0 + - @backstage/plugin-rollbar-backend@0.1.45-next.0 + - @backstage/plugin-scaffolder-backend@1.15.2-next.0 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.1-next.0 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.17-next.0 + - @backstage/plugin-search-backend-module-elasticsearch@1.3.3-next.0 + - @backstage/plugin-search-backend-module-pg@0.5.9-next.0 + - @backstage/plugin-search-common@1.2.5 + - @backstage/plugin-tech-insights-backend@0.5.14-next.0 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.32-next.0 + - @backstage/plugin-tech-insights-node@0.4.6-next.0 + - @backstage/plugin-techdocs-backend@1.6.5-next.0 + +## 0.2.85 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.11.2 + - @backstage/plugin-badges-backend@0.2.2 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.0 + - @backstage/plugin-devtools-backend@0.1.2 + - @backstage/plugin-tech-insights-backend@0.5.13 + - @backstage/backend-common@0.19.1 + - @backstage/plugin-scaffolder-backend@1.15.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.1.1 + - @backstage/plugin-azure-devops-backend@0.3.26 + - @backstage/plugin-linguist-backend@0.3.1 + - @backstage/plugin-adr-backend@0.3.5 + - @backstage/plugin-lighthouse-backend@0.2.3 + - @backstage/plugin-entity-feedback-backend@0.1.5 + - @backstage/plugin-catalog-backend@1.11.0 + - @backstage/plugin-catalog-node@1.4.0 + - @backstage/plugin-auth-backend@0.18.5 + - example-app@0.2.85 + - @backstage/backend-tasks@0.5.4 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1 + - @backstage/plugin-app-backend@0.3.47 + - @backstage/plugin-auth-node@0.2.16 + - @backstage/plugin-azure-sites-backend@0.1.9 + - @backstage/plugin-code-coverage-backend@0.2.13 + - @backstage/plugin-events-backend@0.2.8 + - @backstage/plugin-events-node@0.2.8 + - @backstage/plugin-explore-backend@0.0.9 + - @backstage/plugin-graphql-backend@0.1.37 + - @backstage/plugin-jenkins-backend@0.2.2 + - @backstage/plugin-kafka-backend@0.2.40 + - @backstage/plugin-nomad-backend@0.1.1 + - @backstage/plugin-permission-backend@0.5.22 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-permission-node@0.7.10 + - @backstage/plugin-playlist-backend@0.3.3 + - @backstage/plugin-proxy-backend@0.2.41 + - @backstage/plugin-rollbar-backend@0.1.44 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.16 + - @backstage/plugin-search-backend@1.3.3 + - @backstage/plugin-search-backend-module-elasticsearch@1.3.2 + - @backstage/plugin-search-backend-module-pg@0.5.8 + - @backstage/plugin-search-backend-node@1.2.3 + - @backstage/plugin-search-common@1.2.5 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.31 + - @backstage/plugin-tech-insights-node@0.4.5 + - @backstage/plugin-techdocs-backend@1.6.4 + - @backstage/plugin-todo-backend@0.1.44 + +## 0.2.85-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.0-next.1 + - @backstage/plugin-devtools-backend@0.1.2-next.2 + - @backstage/plugin-tech-insights-backend@0.5.13-next.1 + - @backstage/plugin-scaffolder-backend@1.15.1-next.1 + - @backstage/plugin-kubernetes-backend@0.11.2-next.2 + - @backstage/plugin-adr-backend@0.3.5-next.1 + - example-app@0.2.85-next.2 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-tasks@0.5.4-next.0 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1-next.0 + - @backstage/plugin-app-backend@0.3.47-next.0 + - @backstage/plugin-auth-backend@0.18.5-next.1 + - @backstage/plugin-auth-node@0.2.16-next.0 + - @backstage/plugin-azure-devops-backend@0.3.26-next.1 + - @backstage/plugin-azure-sites-backend@0.1.9-next.0 + - @backstage/plugin-badges-backend@0.2.2-next.1 + - @backstage/plugin-catalog-backend@1.11.0-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.1.1-next.0 + - @backstage/plugin-catalog-node@1.4.0-next.0 + - @backstage/plugin-code-coverage-backend@0.2.13-next.0 + - @backstage/plugin-entity-feedback-backend@0.1.5-next.0 + - @backstage/plugin-events-backend@0.2.8-next.0 + - @backstage/plugin-events-node@0.2.8-next.0 + - @backstage/plugin-explore-backend@0.0.9-next.0 + - @backstage/plugin-graphql-backend@0.1.37-next.0 + - @backstage/plugin-jenkins-backend@0.2.2-next.0 + - @backstage/plugin-kafka-backend@0.2.40-next.0 + - @backstage/plugin-lighthouse-backend@0.2.3-next.0 + - @backstage/plugin-linguist-backend@0.3.1-next.1 + - @backstage/plugin-nomad-backend@0.1.1-next.0 + - @backstage/plugin-permission-backend@0.5.22-next.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + - @backstage/plugin-permission-node@0.7.10-next.0 + - @backstage/plugin-playlist-backend@0.3.3-next.0 + - @backstage/plugin-proxy-backend@0.2.41-next.0 + - @backstage/plugin-rollbar-backend@0.1.44-next.0 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.16-next.1 + - @backstage/plugin-search-backend@1.3.3-next.0 + - @backstage/plugin-search-backend-module-elasticsearch@1.3.2-next.0 + - @backstage/plugin-search-backend-module-pg@0.5.8-next.0 + - @backstage/plugin-search-backend-node@1.2.3-next.0 + - @backstage/plugin-search-common@1.2.5-next.0 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.31-next.0 + - @backstage/plugin-tech-insights-node@0.4.5-next.0 + - @backstage/plugin-techdocs-backend@1.6.4-next.0 + - @backstage/plugin-todo-backend@0.1.44-next.0 + +## 0.2.85-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-backend@0.11.2-next.1 + - @backstage/plugin-badges-backend@0.2.2-next.1 + - @backstage/plugin-azure-devops-backend@0.3.26-next.1 + - @backstage/plugin-devtools-backend@0.1.2-next.1 + - @backstage/plugin-linguist-backend@0.3.1-next.1 + - @backstage/plugin-auth-backend@0.18.5-next.1 + - example-app@0.2.85-next.1 + - @backstage/config@1.0.8 + +## 0.2.85-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.1.1-next.0 + - @backstage/plugin-entity-feedback-backend@0.1.5-next.0 + - @backstage/plugin-catalog-backend@1.11.0-next.0 + - @backstage/plugin-catalog-node@1.4.0-next.0 + - @backstage/plugin-kubernetes-backend@0.11.2-next.0 + - example-app@0.2.85-next.0 + - @backstage/backend-tasks@0.5.4-next.0 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1-next.0 + - @backstage/plugin-adr-backend@0.3.5-next.0 + - @backstage/plugin-app-backend@0.3.47-next.0 + - @backstage/plugin-auth-backend@0.18.5-next.0 + - @backstage/plugin-auth-node@0.2.16-next.0 + - @backstage/plugin-azure-devops-backend@0.3.26-next.0 + - @backstage/plugin-azure-sites-backend@0.1.9-next.0 + - @backstage/plugin-badges-backend@0.2.2-next.0 + - @backstage/plugin-code-coverage-backend@0.2.13-next.0 + - @backstage/plugin-devtools-backend@0.1.2-next.0 + - @backstage/plugin-events-backend@0.2.8-next.0 + - @backstage/plugin-events-node@0.2.8-next.0 + - @backstage/plugin-explore-backend@0.0.9-next.0 + - @backstage/plugin-graphql-backend@0.1.37-next.0 + - @backstage/plugin-jenkins-backend@0.2.2-next.0 + - @backstage/plugin-kafka-backend@0.2.40-next.0 + - @backstage/plugin-lighthouse-backend@0.2.3-next.0 + - @backstage/plugin-linguist-backend@0.3.1-next.0 + - @backstage/plugin-nomad-backend@0.1.1-next.0 + - @backstage/plugin-permission-backend@0.5.22-next.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + - @backstage/plugin-permission-node@0.7.10-next.0 + - @backstage/plugin-playlist-backend@0.3.3-next.0 + - @backstage/plugin-proxy-backend@0.2.41-next.0 + - @backstage/plugin-rollbar-backend@0.1.44-next.0 + - @backstage/plugin-scaffolder-backend@1.15.1-next.0 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.1.4-next.0 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.16-next.0 + - @backstage/plugin-search-backend@1.3.3-next.0 + - @backstage/plugin-search-backend-module-elasticsearch@1.3.2-next.0 + - @backstage/plugin-search-backend-module-pg@0.5.8-next.0 + - @backstage/plugin-search-backend-node@1.2.3-next.0 + - @backstage/plugin-search-common@1.2.5-next.0 + - @backstage/plugin-tech-insights-backend@0.5.13-next.0 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.31-next.0 + - @backstage/plugin-tech-insights-node@0.4.5-next.0 + - @backstage/plugin-techdocs-backend@1.6.4-next.0 + - @backstage/plugin-todo-backend@0.1.44-next.0 + +## 0.2.84 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/catalog-client@1.4.2 + - @backstage/plugin-jenkins-backend@0.2.1 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.1.3 + - @backstage/plugin-devtools-backend@0.1.1 + - @backstage/plugin-scaffolder-backend@1.15.0 + - @backstage/plugin-nomad-backend@0.1.0 + - @backstage/plugin-azure-sites-backend@0.1.8 + - @backstage/plugin-kubernetes-backend@0.11.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.1.0 + - @backstage/plugin-badges-backend@0.2.1 + - @backstage/plugin-catalog-backend@1.10.0 + - @backstage/integration@1.5.0 + - @backstage/plugin-search-backend@1.3.2 + - @backstage/plugin-explore-backend@0.0.8 + - @backstage/catalog-model@1.4.0 + - @backstage/plugin-auth-backend@0.18.4 + - @backstage/plugin-adr-backend@0.3.4 + - @backstage/plugin-code-coverage-backend@0.2.12 + - @backstage/plugin-proxy-backend@0.2.40 + - @backstage/plugin-linguist-backend@0.3.0 + - @backstage/plugin-search-backend-module-pg@0.5.7 + - example-app@0.2.84 + - @backstage/backend-tasks@0.5.3 + - @backstage/plugin-app-backend@0.3.46 + - @backstage/plugin-auth-node@0.2.15 + - @backstage/plugin-azure-devops-backend@0.3.25 + - @backstage/plugin-catalog-node@1.3.7 + - @backstage/plugin-entity-feedback-backend@0.1.4 + - @backstage/plugin-events-backend@0.2.7 + - @backstage/plugin-graphql-backend@0.1.36 + - @backstage/plugin-kafka-backend@0.2.39 + - @backstage/plugin-lighthouse-backend@0.2.2 + - @backstage/plugin-permission-backend@0.5.21 + - @backstage/plugin-permission-node@0.7.9 + - @backstage/plugin-playlist-backend@0.3.2 + - @backstage/plugin-rollbar-backend@0.1.43 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.15 + - @backstage/plugin-search-backend-module-elasticsearch@1.3.1 + - @backstage/plugin-search-backend-node@1.2.2 + - @backstage/plugin-tech-insights-backend@0.5.12 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.30 + - @backstage/plugin-tech-insights-node@0.4.4 + - @backstage/plugin-techdocs-backend@1.6.3 + - @backstage/plugin-todo-backend@0.1.43 + - @backstage/config@1.0.8 + - @backstage/plugin-events-node@0.2.7 + - @backstage/plugin-permission-common@0.7.6 + - @backstage/plugin-search-common@1.2.4 + +## 0.2.84-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.15.0-next.3 + - @backstage/plugin-kubernetes-backend@0.11.1-next.3 + - @backstage/backend-common@0.19.0-next.2 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/plugin-catalog-backend@1.10.0-next.2 + - example-app@0.2.84-next.3 + - @backstage/backend-tasks@0.5.3-next.2 + - @backstage/catalog-client@1.4.2-next.2 + - @backstage/config@1.0.7 + - @backstage/integration@1.5.0-next.0 + - @backstage/plugin-adr-backend@0.3.4-next.2 + - @backstage/plugin-app-backend@0.3.46-next.2 + - @backstage/plugin-auth-backend@0.18.4-next.3 + - @backstage/plugin-auth-node@0.2.15-next.2 + - @backstage/plugin-azure-devops-backend@0.3.25-next.2 + - @backstage/plugin-azure-sites-backend@0.1.8-next.2 + - @backstage/plugin-badges-backend@0.2.1-next.3 + - @backstage/plugin-catalog-backend-module-unprocessed@0.1.0-next.1 + - @backstage/plugin-catalog-node@1.3.7-next.2 + - @backstage/plugin-code-coverage-backend@0.2.12-next.3 + - @backstage/plugin-devtools-backend@0.1.1-next.2 + - @backstage/plugin-entity-feedback-backend@0.1.4-next.2 + - @backstage/plugin-events-backend@0.2.7-next.2 + - @backstage/plugin-events-node@0.2.7-next.2 + - @backstage/plugin-explore-backend@0.0.8-next.2 + - @backstage/plugin-graphql-backend@0.1.36-next.2 + - @backstage/plugin-jenkins-backend@0.2.1-next.2 + - @backstage/plugin-kafka-backend@0.2.39-next.2 + - @backstage/plugin-lighthouse-backend@0.2.2-next.2 + - @backstage/plugin-linguist-backend@0.3.0-next.2 + - @backstage/plugin-permission-backend@0.5.21-next.2 + - @backstage/plugin-permission-common@0.7.6-next.0 + - @backstage/plugin-permission-node@0.7.9-next.2 + - @backstage/plugin-playlist-backend@0.3.2-next.2 + - @backstage/plugin-proxy-backend@0.2.40-next.2 + - @backstage/plugin-rollbar-backend@0.1.43-next.2 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.1.3-next.3 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.15-next.3 + - @backstage/plugin-search-backend@1.3.2-next.2 + - @backstage/plugin-search-backend-module-elasticsearch@1.3.1-next.2 + - @backstage/plugin-search-backend-module-pg@0.5.7-next.2 + - @backstage/plugin-search-backend-node@1.2.2-next.2 + - @backstage/plugin-search-common@1.2.4-next.0 + - @backstage/plugin-tech-insights-backend@0.5.12-next.2 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.30-next.2 + - @backstage/plugin-tech-insights-node@0.4.4-next.2 + - @backstage/plugin-techdocs-backend@1.6.3-next.2 + - @backstage/plugin-todo-backend@0.1.43-next.2 + ## 0.2.84-next.2 ### Patch Changes diff --git a/packages/backend/package.json b/packages/backend/package.json index 0c7511f2af..4f5b896d27 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "example-backend", - "version": "0.2.84-next.2", + "version": "0.2.86-next.1", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", @@ -54,6 +54,7 @@ "@backstage/plugin-kubernetes-backend": "workspace:^", "@backstage/plugin-lighthouse-backend": "workspace:^", "@backstage/plugin-linguist-backend": "workspace:^", + "@backstage/plugin-nomad-backend": "workspace:^", "@backstage/plugin-permission-backend": "workspace:^", "@backstage/plugin-permission-common": "workspace:^", "@backstage/plugin-permission-node": "workspace:^", diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index 5d22ec92e8..54f0f98e41 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -65,6 +65,7 @@ import adr from './plugins/adr'; import lighthouse from './plugins/lighthouse'; import linguist from './plugins/linguist'; import devTools from './plugins/devtools'; +import nomad from './plugins/nomad'; import { PluginEnvironment } from './types'; import { ServerPermissionClient } from '@backstage/plugin-permission-node'; import { DefaultIdentityClient } from '@backstage/plugin-auth-node'; @@ -172,6 +173,7 @@ async function main() { const lighthouseEnv = useHotMemoize(module, () => createEnv('lighthouse')); const linguistEnv = useHotMemoize(module, () => createEnv('linguist')); const devToolsEnv = useHotMemoize(module, () => createEnv('devtools')); + const nomadEnv = useHotMemoize(module, () => createEnv('nomad')); const apiRouter = Router(); apiRouter.use('/catalog', await catalog(catalogEnv)); @@ -198,6 +200,7 @@ async function main() { apiRouter.use('/adr', await adr(adrEnv)); apiRouter.use('/linguist', await linguist(linguistEnv)); apiRouter.use('/devtools', await devTools(devToolsEnv)); + apiRouter.use('/nomad', await nomad(nomadEnv)); apiRouter.use(notFoundHandler()); await lighthouse(lighthouseEnv); diff --git a/packages/backend/src/plugins/catalog.ts b/packages/backend/src/plugins/catalog.ts index a0fd21b4d8..7afd0a0cb7 100644 --- a/packages/backend/src/plugins/catalog.ts +++ b/packages/backend/src/plugins/catalog.ts @@ -19,7 +19,7 @@ import { ScaffolderEntitiesProcessor } from '@backstage/plugin-scaffolder-backen import { Router } from 'express'; import { PluginEnvironment } from '../types'; import { DemoEventBasedEntityProvider } from './DemoEventBasedEntityProvider'; -import { UnprocessedEntitesModule } from '@backstage/plugin-catalog-backend-module-unprocessed'; +import { UnprocessedEntitiesModule } from '@backstage/plugin-catalog-backend-module-unprocessed'; export default async function createPlugin( env: PluginEnvironment, @@ -36,7 +36,7 @@ export default async function createPlugin( const { processingEngine, router } = await builder.build(); - const unprocessed = new UnprocessedEntitesModule( + const unprocessed = new UnprocessedEntitiesModule( await env.database.getClient(), router, ); diff --git a/packages/backend/src/plugins/nomad.ts b/packages/backend/src/plugins/nomad.ts new file mode 100644 index 0000000000..111cbfbf0d --- /dev/null +++ b/packages/backend/src/plugins/nomad.ts @@ -0,0 +1,24 @@ +/* + * 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 { createRouter } from '@backstage/plugin-nomad-backend'; +import { Router } from 'express'; +import { PluginEnvironment } from '../types'; + +export default async function createPlugin( + props: PluginEnvironment, +): Promise { + return await createRouter(props); +} diff --git a/packages/catalog-client/CHANGELOG.md b/packages/catalog-client/CHANGELOG.md index 82537f9aec..c9bf604360 100644 --- a/packages/catalog-client/CHANGELOG.md +++ b/packages/catalog-client/CHANGELOG.md @@ -1,5 +1,38 @@ # @backstage/catalog-client +## 1.4.3 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/catalog-model@1.4.1 + +## 1.4.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/catalog-model@1.4.1-next.0 + +## 1.4.2 + +### Patch Changes + +- cc936b529676: Updated API docs +- Updated dependencies + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + +## 1.4.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/errors@1.2.0-next.0 + ## 1.4.2-next.1 ### Patch Changes diff --git a/packages/catalog-client/package.json b/packages/catalog-client/package.json index b911c3437f..99c36cdf2d 100644 --- a/packages/catalog-client/package.json +++ b/packages/catalog-client/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/catalog-client", "description": "An isomorphic client for the catalog backend", - "version": "1.4.2-next.1", + "version": "1.4.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/catalog-model/CHANGELOG.md b/packages/catalog-model/CHANGELOG.md index 84bc98fc6d..8425a83c85 100644 --- a/packages/catalog-model/CHANGELOG.md +++ b/packages/catalog-model/CHANGELOG.md @@ -1,5 +1,48 @@ # @backstage/catalog-model +## 1.4.1 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + +## 1.4.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + +## 1.4.0 + +### Minor Changes + +- 33eae4b39a95: Deprecate target field and make targetRef required in common.schema.json + +### Patch Changes + +- af748a148d52: Add OpenAPI Specification (OAS) v3.1.0 examples. +- 1df5fc954798: Remove requirement for 'target' property of EntityRelation +- Updated dependencies + - @backstage/types@1.1.0 + - @backstage/errors@1.2.0 + - @backstage/config@1.0.8 + +## 1.4.0-next.1 + +### Patch Changes + +- af748a148d52: Add OpenAPI Specification (OAS) v3.1.0 examples. +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/errors@1.2.0-next.0 + - @backstage/types@1.0.2 + ## 1.4.0-next.0 ### Minor Changes diff --git a/packages/catalog-model/examples/all-apis.yaml b/packages/catalog-model/examples/all-apis.yaml index 472897bfac..47c6f95539 100644 --- a/packages/catalog-model/examples/all-apis.yaml +++ b/packages/catalog-model/examples/all-apis.yaml @@ -8,6 +8,7 @@ spec: - ./apis/hello-world-api.yaml - ./apis/hello-world-trpc-api.yaml - ./apis/petstore-api.yaml + - ./apis/petstore-webhook-api.yaml - ./apis/spotify-api.yaml - ./apis/streetlights-api.yaml - ./apis/swapi-graphql.yaml diff --git a/packages/catalog-model/examples/apis/petstore-api.yaml b/packages/catalog-model/examples/apis/petstore-api.yaml index 5b6878f7d3..5b6428d602 100644 --- a/packages/catalog-model/examples/apis/petstore-api.yaml +++ b/packages/catalog-model/examples/apis/petstore-api.yaml @@ -10,122 +10,12 @@ metadata: - url: https://github.com/swagger-api/swagger-petstore title: GitHub Repo icon: github - - url: https://github.com/OAI/OpenAPI-Specification/blob/master/examples/v3.0/petstore.yaml + - url: https://github.com/swagger-api/swagger-petstore/blob/master/src/main/resources/openapi.yaml title: API Spec icon: code spec: type: openapi lifecycle: experimental owner: team-c - definition: | - openapi: "3.0.0" - info: - version: 1.0.0 - title: Swagger Petstore - license: - name: MIT - servers: - - url: http://petstore.swagger.io/v1 - paths: - /pets: - get: - summary: List all pets - operationId: listPets - tags: - - pets - parameters: - - name: limit - in: query - description: How many items to return at one time (max 100) - required: false - schema: - type: integer - format: int32 - responses: - '200': - description: A paged array of pets - headers: - x-next: - description: A link to the next page of responses - schema: - type: string - content: - application/json: - schema: - $ref: "#/components/schemas/Pets" - default: - description: unexpected error - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - post: - summary: Create a pet - operationId: createPets - tags: - - pets - responses: - '201': - description: Null response - default: - description: unexpected error - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - /pets/{petId}: - get: - summary: Info for a specific pet - operationId: showPetById - tags: - - pets - parameters: - - name: petId - in: path - required: true - description: The id of the pet to retrieve - schema: - type: string - responses: - '200': - description: Expected response to a valid request - content: - application/json: - schema: - $ref: "#/components/schemas/Pet" - default: - description: unexpected error - content: - application/json: - schema: - $ref: "#/components/schemas/Error" - components: - schemas: - Pet: - type: object - required: - - id - - name - properties: - id: - type: integer - format: int64 - name: - type: string - tag: - type: string - Pets: - type: array - items: - $ref: "#/components/schemas/Pet" - Error: - type: object - required: - - code - - message - properties: - code: - type: integer - format: int32 - message: - type: string + definition: + $text: ./petstore.oas.yaml diff --git a/packages/catalog-model/examples/apis/petstore-webhook-api.yaml b/packages/catalog-model/examples/apis/petstore-webhook-api.yaml new file mode 100644 index 0000000000..019c5fc12c --- /dev/null +++ b/packages/catalog-model/examples/apis/petstore-webhook-api.yaml @@ -0,0 +1,21 @@ +apiVersion: backstage.io/v1alpha1 +kind: API +metadata: + name: petstore-webhook + description: The petstore webhook API + tags: + - store + - rest + links: + - url: https://github.com/swagger-api/swagger-petstore + title: GitHub Repo + icon: github + - url: https://github.com/OAI/OpenAPI-Specification/blob/main/examples/v3.1/webhook-example.yaml + title: API Spec + icon: code +spec: + type: openapi + lifecycle: experimental + owner: team-c + definition: + $text: ./petstore-webhook.oas.yaml diff --git a/packages/catalog-model/examples/apis/petstore-webhook.oas.yaml b/packages/catalog-model/examples/apis/petstore-webhook.oas.yaml new file mode 100644 index 0000000000..7aa10cf2d1 --- /dev/null +++ b/packages/catalog-model/examples/apis/petstore-webhook.oas.yaml @@ -0,0 +1,34 @@ +openapi: 3.1.0 +info: + title: Webhook Example + version: 1.0.0 +# Since OAS 3.1.0 the paths element isn't necessary. Now a valid OpenAPI Document can describe only paths, webhooks, or even only reusable components +webhooks: + # Each webhook needs a name + newPet: + # This is a Path Item Object, the only difference is that the request is initiated by the API provider + post: + requestBody: + description: Information about a new pet in the system + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + responses: + '200': + description: Return a 200 status to indicate that the data was received successfully + +components: + schemas: + Pet: + required: + - id + - name + properties: + id: + type: integer + format: int64 + name: + type: string + tag: + type: string diff --git a/packages/catalog-model/examples/apis/petstore.oas.yaml b/packages/catalog-model/examples/apis/petstore.oas.yaml new file mode 100644 index 0000000000..4c378ac8a8 --- /dev/null +++ b/packages/catalog-model/examples/apis/petstore.oas.yaml @@ -0,0 +1,801 @@ +openapi: 3.1.0 +info: + title: Swagger Petstore - OpenAPI 3.1 + description: |- + This is a sample Pet Store Server based on the OpenAPI 3.1 specification. You can find out more about + Swagger at [https://swagger.io](https://swagger.io). In the third iteration of the pet store, we've switched to the design first approach! + You can now help us improve the API whether it's by making changes to the definition itself or to the code. + That way, with time, we can improve the API in general, and expose some of the new features in OAS3. + + Some useful links: + - [The Pet Store repository](https://github.com/swagger-api/swagger-petstore) + - [The source API definition for the Pet Store](https://github.com/swagger-api/swagger-petstore/blob/master/src/main/resources/openapi.yaml) + + termsOfService: http://swagger.io/terms/ + contact: + email: apiteam@swagger.io + license: + name: Apache 2.0 + url: http://www.apache.org/licenses/LICENSE-2.0.html + version: 1.0.11 +externalDocs: + description: Find out more about Swagger + url: http://swagger.io +servers: + - url: https://petstore3.swagger.io/api/v3 +tags: + - name: pet + description: Everything about your Pets + externalDocs: + description: Find out more + url: http://swagger.io + - name: store + description: Access to Petstore orders + externalDocs: + description: Find out more about our store + url: http://swagger.io + - name: user + description: Operations about user +paths: + /pet: + put: + tags: + - pet + summary: Update an existing pet + description: Update an existing pet by Id + operationId: updatePet + requestBody: + description: Update an existent pet in the store + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + application/xml: + schema: + $ref: '#/components/schemas/Pet' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/Pet' + required: true + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + application/xml: + schema: + $ref: '#/components/schemas/Pet' + '400': + description: Invalid ID supplied + '404': + description: Pet not found + '405': + description: Validation exception + security: + - petstore_auth: + - write:pets + - read:pets + post: + tags: + - pet + summary: Add a new pet to the store + description: Add a new pet to the store + operationId: addPet + requestBody: + description: Create a new pet in the store + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + application/xml: + schema: + $ref: '#/components/schemas/Pet' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/Pet' + required: true + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + application/xml: + schema: + $ref: '#/components/schemas/Pet' + '405': + description: Invalid input + security: + - petstore_auth: + - write:pets + - read:pets + /pet/findByStatus: + get: + tags: + - pet + summary: Finds Pets by status + description: Multiple status values can be provided with comma separated strings + operationId: findPetsByStatus + parameters: + - name: status + in: query + description: Status values that need to be considered for filter + required: false + explode: true + schema: + type: string + default: available + enum: + - available + - pending + - sold + responses: + '200': + description: successful operation + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Pet' + application/xml: + schema: + type: array + items: + $ref: '#/components/schemas/Pet' + '400': + description: Invalid status value + security: + - petstore_auth: + - write:pets + - read:pets + /pet/findByTags: + get: + tags: + - pet + summary: Finds Pets by tags + description: Multiple tags can be provided with comma separated strings. Use tag1, tag2, tag3 for testing. + operationId: findPetsByTags + parameters: + - name: tags + in: query + description: Tags to filter by + required: false + explode: true + schema: + type: array + items: + type: string + responses: + '200': + description: successful operation + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Pet' + application/xml: + schema: + type: array + items: + $ref: '#/components/schemas/Pet' + '400': + description: Invalid tag value + security: + - petstore_auth: + - write:pets + - read:pets + /pet/{petId}: + get: + tags: + - pet + summary: Find pet by ID + description: Returns a single pet + operationId: getPetById + parameters: + - name: petId + in: path + description: ID of pet to return + required: true + schema: + type: integer + format: int64 + responses: + '200': + description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + application/xml: + schema: + $ref: '#/components/schemas/Pet' + '400': + description: Invalid ID supplied + '404': + description: Pet not found + security: + - api_key: [] + - petstore_auth: + - write:pets + - read:pets + post: + tags: + - pet + summary: Updates a pet in the store with form data + description: '' + operationId: updatePetWithForm + parameters: + - name: petId + in: path + description: ID of pet that needs to be updated + required: true + schema: + type: integer + format: int64 + - name: name + in: query + description: Name of pet that needs to be updated + schema: + type: string + - name: status + in: query + description: Status of pet that needs to be updated + schema: + type: string + responses: + '405': + description: Invalid input + security: + - petstore_auth: + - write:pets + - read:pets + delete: + tags: + - pet + summary: Deletes a pet + description: delete a pet + operationId: deletePet + parameters: + - name: api_key + in: header + description: '' + required: false + schema: + type: string + - name: petId + in: path + description: Pet id to delete + required: true + schema: + type: integer + format: int64 + responses: + '400': + description: Invalid pet value + security: + - petstore_auth: + - write:pets + - read:pets + /pet/{petId}/uploadImage: + post: + tags: + - pet + summary: uploads an image + description: '' + operationId: uploadFile + parameters: + - name: petId + in: path + description: ID of pet to update + required: true + schema: + type: integer + format: int64 + - name: additionalMetadata + in: query + description: Additional Metadata + required: false + schema: + type: string + requestBody: + content: + application/octet-stream: + schema: + type: string + format: binary + responses: + '200': + description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/ApiResponse' + security: + - petstore_auth: + - write:pets + - read:pets + /store/inventory: + get: + tags: + - store + summary: Returns pet inventories by status + description: Returns a map of status codes to quantities + operationId: getInventory + responses: + '200': + description: successful operation + content: + application/json: + schema: + type: object + additionalProperties: + type: integer + format: int32 + security: + - api_key: [] + /store/order: + post: + tags: + - store + summary: Place an order for a pet + description: Place a new order in the store + operationId: placeOrder + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/Order' + application/xml: + schema: + $ref: '#/components/schemas/Order' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/Order' + responses: + '200': + description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/Order' + '405': + description: Invalid input + /store/order/{orderId}: + get: + tags: + - store + summary: Find purchase order by ID + description: For valid response try integer IDs with value <= 5 or > 10. Other values will generate exceptions. + operationId: getOrderById + parameters: + - name: orderId + in: path + description: ID of order that needs to be fetched + required: true + schema: + type: integer + format: int64 + responses: + '200': + description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/Order' + application/xml: + schema: + $ref: '#/components/schemas/Order' + '400': + description: Invalid ID supplied + '404': + description: Order not found + delete: + tags: + - store + summary: Delete purchase order by ID + description: For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors + operationId: deleteOrder + parameters: + - name: orderId + in: path + description: ID of the order that needs to be deleted + required: true + schema: + type: integer + format: int64 + responses: + '400': + description: Invalid ID supplied + '404': + description: Order not found + /user: + post: + tags: + - user + summary: Create user + description: This can only be done by the logged in user. + operationId: createUser + requestBody: + description: Created user object + content: + application/json: + schema: + $ref: '#/components/schemas/User' + application/xml: + schema: + $ref: '#/components/schemas/User' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/User' + responses: + default: + description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/User' + application/xml: + schema: + $ref: '#/components/schemas/User' + /user/createWithList: + post: + tags: + - user + summary: Creates list of users with given input array + description: Creates list of users with given input array + operationId: createUsersWithListInput + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/User' + responses: + '200': + description: Successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/User' + application/xml: + schema: + $ref: '#/components/schemas/User' + default: + description: successful operation + /user/login: + get: + tags: + - user + summary: Logs user into the system + description: '' + operationId: loginUser + parameters: + - name: username + in: query + description: The user name for login + required: false + schema: + type: string + - name: password + in: query + description: The password for login in clear text + required: false + schema: + type: string + responses: + '200': + description: successful operation + headers: + X-Rate-Limit: + description: calls per hour allowed by the user + schema: + type: integer + format: int32 + X-Expires-After: + description: date in UTC when token expires + schema: + type: string + format: date-time + content: + application/xml: + schema: + type: string + application/json: + schema: + type: string + '400': + description: Invalid username/password supplied + /user/logout: + get: + tags: + - user + summary: Logs out current logged in user session + description: '' + operationId: logoutUser + parameters: [] + responses: + default: + description: successful operation + /user/{username}: + get: + tags: + - user + summary: Get user by user name + description: '' + operationId: getUserByName + parameters: + - name: username + in: path + description: 'The name that needs to be fetched. Use user1 for testing. ' + required: true + schema: + type: string + responses: + '200': + description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/User' + application/xml: + schema: + $ref: '#/components/schemas/User' + '400': + description: Invalid username supplied + '404': + description: User not found + put: + tags: + - user + summary: Update user + description: This can only be done by the logged in user. + operationId: updateUser + parameters: + - name: username + in: path + description: name that need to be deleted + required: true + schema: + type: string + requestBody: + description: Update an existent user in the store + content: + application/json: + schema: + $ref: '#/components/schemas/User' + application/xml: + schema: + $ref: '#/components/schemas/User' + application/x-www-form-urlencoded: + schema: + $ref: '#/components/schemas/User' + responses: + default: + description: successful operation + delete: + tags: + - user + summary: Delete user + description: This can only be done by the logged in user. + operationId: deleteUser + parameters: + - name: username + in: path + description: The name that needs to be deleted + required: true + schema: + type: string + responses: + '400': + description: Invalid username supplied + '404': + description: User not found +components: + schemas: + Order: + type: object + properties: + id: + type: integer + format: int64 + example: 10 + petId: + type: integer + format: int64 + example: 198772 + quantity: + type: integer + format: int32 + example: 7 + shipDate: + type: string + format: date-time + status: + type: string + description: Order Status + example: approved + enum: + - placed + - approved + - delivered + complete: + type: boolean + xml: + name: order + Customer: + type: object + properties: + id: + type: integer + format: int64 + example: 100000 + username: + type: string + example: fehguy + address: + type: array + xml: + name: addresses + wrapped: true + items: + $ref: '#/components/schemas/Address' + xml: + name: customer + Address: + type: object + properties: + street: + type: string + example: 437 Lytton + city: + type: string + example: Palo Alto + state: + type: string + example: CA + zip: + type: string + example: '94301' + xml: + name: address + Category: + type: object + properties: + id: + type: integer + format: int64 + example: 1 + name: + type: string + example: Dogs + xml: + name: category + User: + type: object + properties: + id: + type: integer + format: int64 + example: 10 + username: + type: string + example: theUser + firstName: + type: string + example: John + lastName: + type: string + example: James + email: + type: string + example: john@email.com + password: + type: string + example: '12345' + phone: + type: string + example: '12345' + userStatus: + type: integer + description: User Status + format: int32 + example: 1 + xml: + name: user + Tag: + type: object + properties: + id: + type: integer + format: int64 + name: + type: string + xml: + name: tag + Pet: + required: + - name + - photoUrls + type: object + properties: + id: + type: integer + format: int64 + example: 10 + name: + type: string + example: doggie + category: + $ref: '#/components/schemas/Category' + photoUrls: + type: array + xml: + wrapped: true + items: + type: string + xml: + name: photoUrl + tags: + type: array + xml: + wrapped: true + items: + $ref: '#/components/schemas/Tag' + status: + type: string + description: pet status in the store + enum: + - available + - pending + - sold + xml: + name: pet + ApiResponse: + type: object + properties: + code: + type: integer + format: int32 + type: + type: string + message: + type: string + xml: + name: '##default' + requestBodies: + Pet: + description: Pet object that needs to be added to the store + content: + application/json: + schema: + $ref: '#/components/schemas/Pet' + application/xml: + schema: + $ref: '#/components/schemas/Pet' + UserArray: + description: List of user object + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/User' + securitySchemes: + petstore_auth: + type: oauth2 + flows: + implicit: + authorizationUrl: https://petstore3.swagger.io/oauth/authorize + scopes: + write:pets: modify pets in your account + read:pets: read your pets + api_key: + type: apiKey + name: api_key + in: header diff --git a/packages/catalog-model/package.json b/packages/catalog-model/package.json index e55c87abb1..869023127f 100644 --- a/packages/catalog-model/package.json +++ b/packages/catalog-model/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/catalog-model", "description": "Types and validators that help describe the model of a Backstage Catalog", - "version": "1.4.0-next.0", + "version": "1.4.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/catalog-model/src/schema/shared/common.schema.json b/packages/catalog-model/src/schema/shared/common.schema.json index 7468bd9d70..77eb4a2612 100644 --- a/packages/catalog-model/src/schema/shared/common.schema.json +++ b/packages/catalog-model/src/schema/shared/common.schema.json @@ -32,7 +32,7 @@ "$id": "#relation", "type": "object", "description": "A directed relation from one entity to another.", - "required": ["type", "target", "targetRef"], + "required": ["type", "targetRef"], "additionalProperties": false, "properties": { "type": { diff --git a/packages/catalog-model/src/validation/entitySchemaValidator.test.ts b/packages/catalog-model/src/validation/entitySchemaValidator.test.ts index bc31c5d800..cf3339b098 100644 --- a/packages/catalog-model/src/validation/entitySchemaValidator.test.ts +++ b/packages/catalog-model/src/validation/entitySchemaValidator.test.ts @@ -365,11 +365,6 @@ describe('entitySchemaValidator', () => { expect(() => validator(entity)).toThrow(/relations/); }); - it('does reject missing relations.target', () => { - delete entity.relations[0].target; - expect(() => validator(entity)).toThrow(/relations/); - }); - it('does reject missing relations.targetRef', () => { delete entity.relations[0].targetRef; expect(() => validator(entity)).toThrow(/relations/); diff --git a/packages/cli-node/CHANGELOG.md b/packages/cli-node/CHANGELOG.md index 2e30357da6..2615c2ddd7 100644 --- a/packages/cli-node/CHANGELOG.md +++ b/packages/cli-node/CHANGELOG.md @@ -1,5 +1,53 @@ # @backstage/cli-node +## 0.1.3-next.0 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/cli-common@0.1.12 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + +## 0.1.2 + +### Patch Changes + +- 4edd1ef71453: semver upgrade to 7.5.3 +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/cli-common@0.1.12 + - @backstage/types@1.1.0 + +## 0.1.2-next.1 + +### Patch Changes + +- 4edd1ef71453: semver upgrade to 7.5.3 +- Updated dependencies + - @backstage/cli-common@0.1.12 + - @backstage/errors@1.2.1-next.0 + - @backstage/types@1.1.0 + +## 0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/cli-common@0.1.12 + - @backstage/types@1.1.0 + +## 0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.1.0 + - @backstage/errors@1.2.0 + - @backstage/cli-common@0.1.12 + ## 0.1.1-next.0 ### Patch Changes diff --git a/packages/cli-node/package.json b/packages/cli-node/package.json index 41b9f8e70d..f87f70b135 100644 --- a/packages/cli-node/package.json +++ b/packages/cli-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/cli-node", "description": "Node.js library for Backstage CLIs", - "version": "0.1.1-next.0", + "version": "0.1.3-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -13,6 +13,12 @@ "backstage": { "role": "node-library" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "packages/cli-node" + }, "scripts": { "build": "backstage-cli package build", "lint": "backstage-cli package lint", @@ -28,7 +34,7 @@ "@manypkg/get-packages": "^1.1.3", "@yarnpkg/parsers": "^3.0.0-rc.4", "fs-extra": "10.1.0", - "semver": "^7.3.2", + "semver": "^7.5.3", "zod": "^3.21.4" }, "devDependencies": { diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index 4f9d9714b0..54660d1773 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,134 @@ # @backstage/cli +## 0.22.10-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config-loader@1.4.0-next.1 + - @backstage/cli-node@0.1.3-next.0 + - @backstage/integration@1.5.1 + - @backstage/catalog-model@1.4.1 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/eslint-plugin@0.1.3 + - @backstage/release-manifests@0.0.9 + - @backstage/types@1.1.0 + +## 0.22.10-next.0 + +### Patch Changes + +- 3f67cefb4780: Reload the frontend when app config changes +- cebbf8a27f3c: Enable to print the config schema not merged with the `--no-merge` flag +- Updated dependencies + - @backstage/config-loader@1.4.0-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/cli-common@0.1.12 + - @backstage/cli-node@0.1.2 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/eslint-plugin@0.1.3 + - @backstage/integration@1.5.1 + - @backstage/release-manifests@0.0.9 + - @backstage/types@1.1.0 + +## 0.22.9 + +### Patch Changes + +- 6adb6f41711a: Fixed the `--alwaysYarnPack` flag on the`backstage-cli build-workspace` command. +- 4edd1ef71453: semver upgrade to 7.5.3 +- ff45cb559e49: Updated dependency `esbuild` to `^0.18.0`. +- 8174cf4c0edf: Fixing MUI / Material UI references +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/cli-node@0.1.2 + - @backstage/catalog-model@1.4.1 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.8 + - @backstage/config-loader@1.3.2 + - @backstage/eslint-plugin@0.1.3 + - @backstage/integration@1.5.1 + - @backstage/release-manifests@0.0.9 + - @backstage/types@1.1.0 + +## 0.22.9-next.1 + +### Patch Changes + +- 4edd1ef71453: semver upgrade to 7.5.3 +- ff45cb559e49: Updated dependency `esbuild` to `^0.18.0`. +- 8174cf4c0edf: Fixing MUI / Material UI references +- Updated dependencies + - @backstage/cli-node@0.1.2-next.1 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.8 + - @backstage/config-loader@1.3.2-next.0 + - @backstage/errors@1.2.1-next.0 + - @backstage/eslint-plugin@0.1.3 + - @backstage/integration@1.5.1-next.0 + - @backstage/release-manifests@0.0.9 + - @backstage/types@1.1.0 + +## 0.22.9-next.0 + +### Patch Changes + +- 6adb6f41711a: Fixed the `--alwaysYarnPack` flag on the`backstage-cli build-workspace` command. +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/cli-common@0.1.12 + - @backstage/cli-node@0.1.2-next.0 + - @backstage/config@1.0.8 + - @backstage/config-loader@1.3.2-next.0 + - @backstage/eslint-plugin@0.1.3 + - @backstage/integration@1.5.1-next.0 + - @backstage/release-manifests@0.0.9 + - @backstage/types@1.1.0 + +## 0.22.8 + +### Patch Changes + +- 314493fa32a0: Introduced the `--alwaysYarnPack` flag on `backstage-cli build-workspace`, which can be passed in cases where accuracy of workspace contents is more important than the + speed with which the workspace is built. Useful in rare situations where `yarn pack` and `npm pack` produce different results. +- 75540599124a: Updated example component for a newly scaffolded app. +- 5d692f72ebfb: Make sure to include a `fetch` environment for `jsdom` in `jest` tests +- 6816352500a7: Add discovery feature to the onboard cli command. +- 20b7da6f1311: Enforcing Material UI v5 specific linting to minimize bundle size. +- Updated dependencies + - @backstage/types@1.1.0 + - @backstage/config-loader@1.3.1 + - @backstage/integration@1.5.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + - @backstage/cli-common@0.1.12 + - @backstage/cli-node@0.1.1 + - @backstage/config@1.0.8 + - @backstage/eslint-plugin@0.1.3 + - @backstage/release-manifests@0.0.9 + +## 0.22.8-next.2 + +### Patch Changes + +- 75540599124a: Updated example component for a newly scaffolded app. +- Updated dependencies + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/cli-common@0.1.12 + - @backstage/cli-node@0.1.1-next.0 + - @backstage/config@1.0.7 + - @backstage/config-loader@1.3.1-next.1 + - @backstage/errors@1.2.0-next.0 + - @backstage/eslint-plugin@0.1.3 + - @backstage/integration@1.5.0-next.0 + - @backstage/release-manifests@0.0.9 + - @backstage/types@1.0.2 + ## 0.22.8-next.1 ### Patch Changes @@ -21,7 +150,7 @@ ### Patch Changes -- 20b7da6f1311: Enforcing MUI v5 specific linting to minimize bundle size. +- 20b7da6f1311: Enforcing Material UI v5 specific linting to minimize bundle size. - Updated dependencies - @backstage/config-loader@1.3.1-next.0 - @backstage/config@1.0.7 diff --git a/packages/cli/cli-report.md b/packages/cli/cli-report.md index 39bee2ed05..e20634df4e 100644 --- a/packages/cli/cli-report.md +++ b/packages/cli/cli-report.md @@ -24,7 +24,7 @@ Commands: versions:bump [options] versions:check [options] clean - build-workspace [packages...] + build-workspace [options] [packages...] create-github-app info help [command] @@ -36,6 +36,7 @@ Commands: Usage: backstage-cli build-workspace [options] [packages...] Options: + --alwaysYarnPack -h, --help ``` @@ -96,6 +97,8 @@ Usage: backstage-cli config:schema [options] Options: --package --format + --merge + --no-merge -h, --help ``` diff --git a/packages/cli/config/eslint-factory.js b/packages/cli/config/eslint-factory.js index 36b51324fc..58a9362051 100644 --- a/packages/cli/config/eslint-factory.js +++ b/packages/cli/config/eslint-factory.js @@ -203,7 +203,7 @@ function createConfigForRole(dir, role, extraConfig = {}) { }, restrictedImports: [ { - // Importing the entire MUI icons packages impedes build performance as the list of icons is huge. + // Importing the entire Material UI icons packages impedes build performance as the list of icons is huge. name: '@material-ui/icons', message: "Please import '@material-ui/icons/' instead.", }, diff --git a/packages/cli/config/jest.js b/packages/cli/config/jest.js index 0e74b00d5a..1756b37db2 100644 --- a/packages/cli/config/jest.js +++ b/packages/cli/config/jest.js @@ -194,9 +194,16 @@ async function getProjectConfig(targetPath, extraConfig) { ...getRoleConfig(closestPkgJson?.backstage?.role), }; + options.setupFilesAfterEnv = options.setupFilesAfterEnv || []; + + if (options.testEnvironment === require.resolve('jest-environment-jsdom')) { + // FIXME https://github.com/jsdom/jsdom/issues/1724 + options.setupFilesAfterEnv.unshift(require.resolve('cross-fetch/polyfill')); + } + // Use src/setupTests.ts as the default location for configuring test env if (fs.existsSync(path.resolve(targetPath, 'src/setupTests.ts'))) { - options.setupFilesAfterEnv = ['/setupTests.ts']; + options.setupFilesAfterEnv.push('/setupTests.ts'); } const config = Object.assign(options, ...pkgJsonConfigs); diff --git a/packages/cli/package.json b/packages/cli/package.json index 4da91b0870..8fe6a579ea 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.8-next.1", + "version": "0.22.10-next.1", "publishConfig": { "access": "public" }, @@ -74,10 +74,11 @@ "chalk": "^4.0.0", "chokidar": "^3.3.1", "commander": "^9.1.0", + "cross-fetch": "^3.1.5", "cross-spawn": "^7.0.3", "css-loader": "^6.5.1", "diff": "^5.0.0", - "esbuild": "^0.17.0", + "esbuild": "^0.18.0", "esbuild-loader": "^2.18.0", "eslint": "^8.6.0", "eslint-config-prettier": "^8.3.0", @@ -122,7 +123,7 @@ "rollup-plugin-postcss": "^4.0.0", "rollup-pluginutils": "^2.8.2", "run-script-webpack-plugin": "^0.1.0", - "semver": "^7.3.2", + "semver": "^7.5.3", "style-loader": "^3.3.1", "sucrase": "^3.20.2", "swc-loader": "^0.2.3", diff --git a/packages/cli/src/commands/buildWorkspace.ts b/packages/cli/src/commands/buildWorkspace.ts index 97bf2f1239..685e4b1cb0 100644 --- a/packages/cli/src/commands/buildWorkspace.ts +++ b/packages/cli/src/commands/buildWorkspace.ts @@ -17,12 +17,17 @@ import fs from 'fs-extra'; import { createDistWorkspace } from '../lib/packager'; -export default async (dir: string, packages: string[]) => { +type Options = { + alwaysYarnPack?: boolean; +}; + +export default async (dir: string, packages: string[], options: Options) => { if (!(await fs.pathExists(dir))) { throw new Error(`Target workspace directory doesn't exist, '${dir}'`); } await createDistWorkspace(packages, { targetDir: dir, + alwaysYarnPack: options.alwaysYarnPack, }); }; diff --git a/packages/cli/src/commands/config/schema.ts b/packages/cli/src/commands/config/schema.ts index f9e6573be6..08bc46d1cc 100644 --- a/packages/cli/src/commands/config/schema.ts +++ b/packages/cli/src/commands/config/schema.ts @@ -28,19 +28,23 @@ export default async (opts: OptionValues) => { mockEnv: true, }); - const merged = mergeConfigSchemas( - (schema.serialize().schemas as JsonObject[]).map( - _ => _.value as JSONSchema, - ), - ); - - merged.title = 'Application Configuration Schema'; - merged.description = - 'This is the schema describing the structure of the app-config.yaml configuration file.'; + let configSchema: JsonObject | JSONSchema; + if (opts.merge) { + configSchema = mergeConfigSchemas( + (schema.serialize().schemas as JsonObject[]).map( + _ => _.value as JSONSchema, + ), + ); + configSchema.title = 'Application Configuration Schema'; + configSchema.description = + 'This is the schema describing the structure of the app-config.yaml configuration file.'; + } else { + configSchema = schema.serialize(); + } if (opts.format === 'json') { - process.stdout.write(`${JSON.stringify(merged, null, 2)}\n`); + process.stdout.write(`${JSON.stringify(configSchema, null, 2)}\n`); } else { - process.stdout.write(`${stringifyYaml(merged)}\n`); + process.stdout.write(`${stringifyYaml(configSchema)}\n`); } }; diff --git a/packages/cli/src/commands/index.ts b/packages/cli/src/commands/index.ts index 3a40839e25..a7f65588a5 100644 --- a/packages/cli/src/commands/index.ts +++ b/packages/cli/src/commands/index.ts @@ -365,6 +365,8 @@ export function registerCommands(program: Command) { '--format ', 'Format to print the schema in, either json or yaml [yaml]', ) + .option('--merge', 'Print the config schemas merged', true) + .option('--no-merge', 'Print the config schemas not merged') .description('Print configuration schema') .action(lazy(() => import('./config/schema').then(m => m.default))); @@ -402,6 +404,10 @@ export function registerCommands(program: Command) { program .command('build-workspace [packages...]') + .option( + '--alwaysYarnPack', + 'Force workspace output to be a result of running `yarn pack` on each package (warning: very slow)', + ) .description('Builds a temporary dist workspace from the provided packages') .action(lazy(() => import('./buildWorkspace').then(m => m.default))); diff --git a/packages/cli/src/commands/start/startFrontend.ts b/packages/cli/src/commands/start/startFrontend.ts index 00f7818b41..a809473788 100644 --- a/packages/cli/src/commands/start/startFrontend.ts +++ b/packages/cli/src/commands/start/startFrontend.ts @@ -14,15 +14,7 @@ * limitations under the License. */ -import fs from 'fs-extra'; -import chalk from 'chalk'; -import uniq from 'lodash/uniq'; import { serveBundle } from '../../lib/bundler'; -import { loadCliConfig } from '../../lib/config'; -import { PackageGraph } from '@backstage/cli-node'; -import { Lockfile } from '../../lib/versioning'; -import { forbiddenDuplicatesFilter, includedFilter } from '../versions/lint'; -import { paths } from '../../lib/paths'; interface StartAppOptions { verifyVersions?: boolean; @@ -32,94 +24,12 @@ interface StartAppOptions { configPaths: string[]; } -function checkReactVersion() { - try { - // Make sure we're looking at the root of the target repo - const reactPkgPath = require.resolve('react/package.json', { - paths: [paths.targetRoot], - }); - const reactPkg = require(reactPkgPath); - if (reactPkg.version.startsWith('16.')) { - console.log( - chalk.yellow( - ` -⚠️ ⚠️ -⚠️ You are using React version 16, which is deprecated for use in Backstage. ⚠️ -⚠️ Please upgrade to React 17 by updating your packages/app dependencies. ⚠️ -⚠️ ⚠️ -`, - ), - ); - } - } catch { - /* ignored */ - } -} - export async function startFrontend(options: StartAppOptions) { - if (options.verifyVersions) { - const lockfile = await Lockfile.load(paths.resolveTargetRoot('yarn.lock')); - const result = lockfile.analyze({ - filter: includedFilter, - localPackages: PackageGraph.fromPackages( - await PackageGraph.listTargetPackages(), - ), - }); - const problemPackages = [...result.newVersions, ...result.newRanges] - .map(({ name }) => name) - .filter(forbiddenDuplicatesFilter); - - if (problemPackages.length > 1) { - console.log( - chalk.yellow( - `⚠️ Some of the following packages may be outdated or have duplicate installations: - - ${uniq(problemPackages).join(', ')} - `, - ), - ); - console.log( - chalk.yellow( - `⚠️ This can be resolved using the following command: - - yarn backstage-cli versions:check --fix - `, - ), - ); - } - } - - checkReactVersion(); - - const { name } = await fs.readJson(paths.resolveTarget('package.json')); - const config = await loadCliConfig({ - args: options.configPaths, - fromPackage: name, - withFilteredKeys: true, - }); - - const appBaseUrl = config.frontendConfig.getString('app.baseUrl'); - const backendBaseUrl = config.frontendConfig.getString('backend.baseUrl'); - if (appBaseUrl === backendBaseUrl) { - console.log( - chalk.yellow( - `⚠️ Conflict between app baseUrl and backend baseUrl: - - app.baseUrl: ${appBaseUrl} - backend.baseUrl: ${backendBaseUrl} - - Must have unique hostname and/or ports. - - This can be resolved by changing app.baseUrl and backend.baseUrl to point to their respective local development ports. -`, - ), - ); - } - const waitForExit = await serveBundle({ entry: options.entry, checksEnabled: options.checksEnabled, - ...config, + configPaths: options.configPaths, + verifyVersions: options.verifyVersions, }); await waitForExit(); diff --git a/packages/cli/src/lib/builder/buildTypeDefinitionsWorker.ts b/packages/cli/src/lib/builder/buildTypeDefinitionsWorker.ts index cf37c2a664..c3c37d91cf 100644 --- a/packages/cli/src/lib/builder/buildTypeDefinitionsWorker.ts +++ b/packages/cli/src/lib/builder/buildTypeDefinitionsWorker.ts @@ -40,7 +40,7 @@ export async function buildTypeDefinitionsWorker( const { Extractor, ExtractorConfig, CompilerState } = apiExtractor; /** - * All of this monkey patching below is because MUI has these bare package.json file as a method + * All of this monkey patching below is because Material UI has these bare package.json file as a method * for making TypeScript accept imports like `@material-ui/core/Button`, and improve tree-shaking * by declaring them side effect free. * diff --git a/packages/cli/src/lib/bundler/bundle.ts b/packages/cli/src/lib/bundler/bundle.ts index b26c2f9f0d..7c45528c5c 100644 --- a/packages/cli/src/lib/bundler/bundle.ts +++ b/packages/cli/src/lib/bundler/bundle.ts @@ -45,6 +45,7 @@ export async function buildBundle(options: BuildOptions) { checksEnabled: false, isDev: false, baseUrl: resolveBaseUrl(options.frontendConfig), + getFrontendAppConfigs: () => options.frontendAppConfigs, }); const isCi = yn(process.env.CI, { default: false }); diff --git a/packages/cli/src/lib/bundler/config.ts b/packages/cli/src/lib/bundler/config.ts index 94b2a1c561..2f09a66e18 100644 --- a/packages/cli/src/lib/bundler/config.ts +++ b/packages/cli/src/lib/bundler/config.ts @@ -117,12 +117,6 @@ export async function createConfig( }), ); - plugins.push( - new webpack.EnvironmentPlugin({ - APP_CONFIG: options.frontendAppConfigs, - }), - ); - plugins.push( new HtmlWebpackPlugin({ template: paths.targetHtml, @@ -137,6 +131,10 @@ export async function createConfig( plugins.push( new webpack.DefinePlugin({ 'process.env.BUILD_INFO': JSON.stringify(buildInfo), + 'process.env.APP_CONFIG': webpack.DefinePlugin.runtimeValue( + () => JSON.stringify(options.getFrontendAppConfigs()), + true, + ), }), ); diff --git a/packages/cli/src/lib/bundler/server.ts b/packages/cli/src/lib/bundler/server.ts index cef55d3265..74c6b2a53c 100644 --- a/packages/cli/src/lib/bundler/server.ts +++ b/packages/cli/src/lib/bundler/server.ts @@ -18,17 +18,100 @@ import fs from 'fs-extra'; import webpack from 'webpack'; import WebpackDevServer from 'webpack-dev-server'; import openBrowser from 'react-dev-utils/openBrowser'; +import uniq from 'lodash/uniq'; + import { createConfig, resolveBaseUrl } from './config'; import { ServeOptions } from './types'; import { resolveBundlingPaths } from './paths'; +import { paths as libPaths } from '../../lib/paths'; +import { loadCliConfig } from '../config'; +import chalk from 'chalk'; +import { AppConfig } from '@backstage/config'; +import { PackageGraph } from '@backstage/cli-node'; +import { Lockfile } from '../versioning'; +import { + forbiddenDuplicatesFilter, + includedFilter, +} from '../../commands/versions/lint'; export async function serveBundle(options: ServeOptions) { - const url = resolveBaseUrl(options.frontendConfig); + if (options.verifyVersions) { + const lockfile = await Lockfile.load( + libPaths.resolveTargetRoot('yarn.lock'), + ); + const result = lockfile.analyze({ + filter: includedFilter, + localPackages: PackageGraph.fromPackages( + await PackageGraph.listTargetPackages(), + ), + }); + const problemPackages = [...result.newVersions, ...result.newRanges] + .map(({ name }) => name) + .filter(forbiddenDuplicatesFilter); + + if (problemPackages.length > 1) { + console.log( + chalk.yellow( + `⚠️ Some of the following packages may be outdated or have duplicate installations: + + ${uniq(problemPackages).join(', ')} + `, + ), + ); + console.log( + chalk.yellow( + `⚠️ This can be resolved using the following command: + + yarn backstage-cli versions:check --fix + `, + ), + ); + } + } + + checkReactVersion(); + + const { name } = await fs.readJson(libPaths.resolveTarget('package.json')); + + let server: WebpackDevServer | undefined = undefined; + let latestFrontendAppConfigs: AppConfig[] = []; + + const cliConfig = await loadCliConfig({ + args: options.configPaths, + fromPackage: name, + withFilteredKeys: true, + watch(appConfigs) { + latestFrontendAppConfigs = appConfigs; + server?.invalidate(); + }, + }); + latestFrontendAppConfigs = cliConfig.frontendAppConfigs; + + const appBaseUrl = cliConfig.frontendConfig.getString('app.baseUrl'); + const backendBaseUrl = cliConfig.frontendConfig.getString('backend.baseUrl'); + if (appBaseUrl === backendBaseUrl) { + console.log( + chalk.yellow( + `⚠️ Conflict between app baseUrl and backend baseUrl: + + app.baseUrl: ${appBaseUrl} + backend.baseUrl: ${backendBaseUrl} + + Must have unique hostname and/or ports. + + This can be resolved by changing app.baseUrl and backend.baseUrl to point to their respective local development ports. +`, + ), + ); + } + + const { frontendConfig, fullConfig } = cliConfig; + const url = resolveBaseUrl(frontendConfig); const host = - options.frontendConfig.getOptionalString('app.listen.host') || url.hostname; + frontendConfig.getOptionalString('app.listen.host') || url.hostname; const port = - options.frontendConfig.getOptionalNumber('app.listen.port') || + frontendConfig.getOptionalNumber('app.listen.port') || Number(url.port) || (url.protocol === 'https:' ? 443 : 80); @@ -36,14 +119,18 @@ export async function serveBundle(options: ServeOptions) { const pkgPath = paths.targetPackageJson; const pkg = await fs.readJson(pkgPath); const config = await createConfig(paths, { - ...options, + checksEnabled: options.checksEnabled, isDev: true, baseUrl: url, + frontendConfig, + getFrontendAppConfigs: () => { + return latestFrontendAppConfigs; + }, }); const compiler = webpack(config); - const server = new WebpackDevServer( + server = new WebpackDevServer( { hot: !process.env.CI, devMiddleware: { @@ -67,8 +154,8 @@ export async function serveBundle(options: ServeOptions) { https: url.protocol === 'https:' ? { - cert: options.fullConfig.getString('app.https.certificate.cert'), - key: options.fullConfig.getString('app.https.certificate.key'), + cert: fullConfig.getString('app.https.certificate.cert'), + key: fullConfig.getString('app.https.certificate.key'), } : false, host, @@ -84,7 +171,7 @@ export async function serveBundle(options: ServeOptions) { ); await new Promise((resolve, reject) => { - server.startCallback((err?: Error) => { + server?.startCallback((err?: Error) => { if (err) { reject(err); return; @@ -98,7 +185,7 @@ export async function serveBundle(options: ServeOptions) { const waitForExit = async () => { for (const signal of ['SIGINT', 'SIGTERM'] as const) { process.on(signal, () => { - server.close(); + server?.close(); // exit instead of resolve. The process is shutting down and resolving a promise here logs an error process.exit(); }); @@ -110,3 +197,27 @@ export async function serveBundle(options: ServeOptions) { return waitForExit; } + +function checkReactVersion() { + try { + // Make sure we're looking at the root of the target repo + const reactPkgPath = require.resolve('react/package.json', { + paths: [libPaths.targetRoot], + }); + const reactPkg = require(reactPkgPath); + if (reactPkg.version.startsWith('16.')) { + console.log( + chalk.yellow( + ` +⚠️ ⚠️ +⚠️ You are using React version 16, which is deprecated for use in Backstage. ⚠️ +⚠️ Please upgrade to React 17 by updating your packages/app dependencies. ⚠️ +⚠️ ⚠️ +`, + ), + ); + } + } catch { + /* ignored */ + } +} diff --git a/packages/cli/src/lib/bundler/types.ts b/packages/cli/src/lib/bundler/types.ts index 64916e349c..69e75b113d 100644 --- a/packages/cli/src/lib/bundler/types.ts +++ b/packages/cli/src/lib/bundler/types.ts @@ -22,16 +22,15 @@ export type BundlingOptions = { checksEnabled: boolean; isDev: boolean; frontendConfig: Config; - frontendAppConfigs: AppConfig[]; + getFrontendAppConfigs(): AppConfig[]; baseUrl: URL; parallelism?: number; }; export type ServeOptions = BundlingPathsOptions & { checksEnabled: boolean; - frontendConfig: Config; - frontendAppConfigs: AppConfig[]; - fullConfig: Config; + configPaths: string[]; + verifyVersions?: boolean; }; export type BuildOptions = BundlingPathsOptions & { diff --git a/packages/cli/src/lib/config.ts b/packages/cli/src/lib/config.ts index aaf3fcfcb9..0c657b640e 100644 --- a/packages/cli/src/lib/config.ts +++ b/packages/cli/src/lib/config.ts @@ -19,7 +19,7 @@ import { loadConfig, loadConfigSchema, } from '@backstage/config-loader'; -import { ConfigReader } from '@backstage/config'; +import { AppConfig, ConfigReader } from '@backstage/config'; import { paths } from './paths'; import { isValidUrl } from './urls'; import { getPackages } from '@manypkg/get-packages'; @@ -33,6 +33,7 @@ type Options = { withDeprecatedKeys?: boolean; fullVisibility?: boolean; strict?: boolean; + watch?: (newFrontendAppConfigs: AppConfig[]) => void; }; export async function loadCliConfig(options: Options) { @@ -80,6 +81,19 @@ export async function loadCliConfig(options: Options) { : undefined, configRoot: paths.targetRoot, configTargets: configTargets, + watch: options.watch && { + onChange(newAppConfigs) { + const newFrontendAppConfigs = schema.process(newAppConfigs, { + visibility: options.fullVisibility + ? ['frontend', 'backend', 'secret'] + : ['frontend'], + withFilteredKeys: options.withFilteredKeys, + withDeprecatedKeys: options.withDeprecatedKeys, + ignoreSchemaErrors: !options.strict, + }); + options.watch?.(newFrontendAppConfigs); + }, + }, }); // printing to stderr to not clobber stdout in case the cli command diff --git a/packages/cli/src/lib/packager/createDistWorkspace.ts b/packages/cli/src/lib/packager/createDistWorkspace.ts index ab8b20919f..e91924dd37 100644 --- a/packages/cli/src/lib/packager/createDistWorkspace.ts +++ b/packages/cli/src/lib/packager/createDistWorkspace.ts @@ -95,6 +95,13 @@ type Options = { * with the same structure as the workspace dir. */ skeleton?: 'skeleton.tar' | 'skeleton.tar.gz'; + + /** + * If set to true, `yarn pack` is always preferred when creating the dist + * workspace. This ensures correct workspace output at significant cost to + * command performance. + */ + alwaysYarnPack?: boolean; }; function prefixLogFunc(prefix: string, out: 'stdout' | 'stderr') { @@ -220,7 +227,11 @@ export async function createDistWorkspace( } } - await moveToDistWorkspace(targetDir, targets); + await moveToDistWorkspace( + targetDir, + targets, + Boolean(options.alwaysYarnPack), + ); const files: FileEntry[] = options.files ?? ['yarn.lock', 'package.json']; @@ -262,9 +273,13 @@ const FAST_PACK_SCRIPTS = [ async function moveToDistWorkspace( workspaceDir: string, localPackages: PackageGraphNode[], + alwaysYarnPack: boolean, ): Promise { - const [fastPackPackages, slowPackPackages] = partition(localPackages, pkg => - FAST_PACK_SCRIPTS.includes(pkg.packageJson.scripts?.prepack), + const [fastPackPackages, slowPackPackages] = partition( + localPackages, + pkg => + !alwaysYarnPack && + FAST_PACK_SCRIPTS.includes(pkg.packageJson.scripts?.prepack), ); // New an improved flow where we avoid calling `yarn pack` diff --git a/packages/cli/src/lib/svgrTemplate.ts b/packages/cli/src/lib/svgrTemplate.ts index 6af1b95e71..b583004f81 100644 --- a/packages/cli/src/lib/svgrTemplate.ts +++ b/packages/cli/src/lib/svgrTemplate.ts @@ -16,7 +16,7 @@ /** * This template, together with loaders in the bundler and packages, allows - * for SVG to be imported directly as MUI SvgIcon components by suffixing + * for SVG to be imported directly as Material UI SvgIcon components by suffixing * them with .icon.svg */ export function svgrTemplate( diff --git a/packages/cli/templates/default-plugin/package.json.hbs b/packages/cli/templates/default-plugin/package.json.hbs index 10f893d7dc..463fc6ea90 100644 --- a/packages/cli/templates/default-plugin/package.json.hbs +++ b/packages/cli/templates/default-plugin/package.json.hbs @@ -48,8 +48,7 @@ "@testing-library/react": "{{versionQuery '@testing-library/react' '12.1.3'}}", "@testing-library/user-event": "{{versionQuery '@testing-library/user-event' '14.0.0'}}", "@types/node": "{{versionQuery '@types/node' '16.11.26'}}", - "msw": "{{versionQuery 'msw' '1.0.0'}}", - "cross-fetch": "{{versionQuery 'cross-fetch' '3.1.5'}}" + "msw": "{{versionQuery 'msw' '1.0.0'}}" }, "files": [ "dist" diff --git a/packages/cli/templates/default-plugin/src/components/ExampleFetchComponent/ExampleFetchComponent.test.tsx.hbs b/packages/cli/templates/default-plugin/src/components/ExampleFetchComponent/ExampleFetchComponent.test.tsx.hbs index a553ecd0b0..c1035a8d3c 100644 --- a/packages/cli/templates/default-plugin/src/components/ExampleFetchComponent/ExampleFetchComponent.test.tsx.hbs +++ b/packages/cli/templates/default-plugin/src/components/ExampleFetchComponent/ExampleFetchComponent.test.tsx.hbs @@ -1,25 +1,19 @@ import React from 'react'; import { render, screen } from '@testing-library/react'; import { ExampleFetchComponent } from './ExampleFetchComponent'; -import { rest } from 'msw'; -import { setupServer } from 'msw/node'; -import { setupRequestMockHandlers } from '@backstage/test-utils'; describe('ExampleFetchComponent', () => { - const server = setupServer(); - // Enable sane handlers for network requests - setupRequestMockHandlers(server); + it('renders the user table', async () => { + render(); - // setup mock response - beforeEach(() => { - server.use( - rest.get('https://randomuser.me/*', (_, res, ctx) => - res(ctx.status(200), ctx.delay(2000), ctx.json({})), - ), - ); + // Wait for the table to render + const table = await screen.findByRole('table'); + const nationality = screen.getAllByText("GB") + // Assert that the table contains the expected user data + expect(table).toBeInTheDocument(); + expect(screen.getByAltText('Carolyn')).toBeInTheDocument(); + expect(screen.getByText('Carolyn Moore')).toBeInTheDocument(); + expect(screen.getByText('carolyn.moore@example.com')).toBeInTheDocument(); + expect(nationality[0]).toBeInTheDocument(); }); - it('should render', async () => { - await render(); - expect(await screen.findByTestId('progress')).toBeInTheDocument(); - }); -}); +}); \ No newline at end of file diff --git a/packages/cli/templates/default-plugin/src/components/ExampleFetchComponent/ExampleFetchComponent.tsx.hbs b/packages/cli/templates/default-plugin/src/components/ExampleFetchComponent/ExampleFetchComponent.tsx.hbs index 03b25dfb4f..e4fadfa4c1 100644 --- a/packages/cli/templates/default-plugin/src/components/ExampleFetchComponent/ExampleFetchComponent.tsx.hbs +++ b/packages/cli/templates/default-plugin/src/components/ExampleFetchComponent/ExampleFetchComponent.tsx.hbs @@ -1,9 +1,233 @@ import React from 'react'; import { makeStyles } from '@material-ui/core/styles'; import { Table, TableColumn, Progress, ResponseErrorPanel } from '@backstage/core-components'; -import { fetchApiRef, useApi } from '@backstage/core-plugin-api'; import useAsync from 'react-use/lib/useAsync'; +export const exampleUsers = { + "results": [ + { + "gender": "female", + "name": { + "title": "Miss", + "first": "Carolyn", + "last": "Moore" + }, + "email": "carolyn.moore@example.com", + "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Carolyn", + "nat": "GB" + }, + { + "gender": "female", + "name": { + "title": "Ms", + "first": "Esma", + "last": "Berberoğlu" + }, + "email": "esma.berberoglu@example.com", + "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Esma", + "nat": "TR" + }, + { + "gender": "female", + "name": { + "title": "Ms", + "first": "Isabella", + "last": "Rhodes" + }, + "email": "isabella.rhodes@example.com", + "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Isabella", + "nat": "GB" + }, + { + "gender": "male", + "name": { + "title": "Mr", + "first": "Derrick", + "last": "Carter" + }, + "email": "derrick.carter@example.com", + "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Derrick", + "nat": "IE" + }, + { + "gender": "female", + "name": { + "title": "Miss", + "first": "Mattie", + "last": "Lambert" + }, + "email": "mattie.lambert@example.com", + "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Mattie", + "nat": "AU" + }, + { + "gender": "male", + "name": { + "title": "Mr", + "first": "Mijat", + "last": "Rakić" + }, + "email": "mijat.rakic@example.com", + "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Mijat", + "nat": "RS" + }, + { + "gender": "male", + "name": { + "title": "Mr", + "first": "Javier", + "last": "Reid" + }, + "email": "javier.reid@example.com", + "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Javier", + "nat": "US" + }, + { + "gender": "female", + "name": { + "title": "Ms", + "first": "Isabella", + "last": "Li" + }, + "email": "isabella.li@example.com", + "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Isabella", + "nat": "CA" + }, + { + "gender": "female", + "name": { + "title": "Mrs", + "first": "Stephanie", + "last": "Garrett" + }, + "email": "stephanie.garrett@example.com", + "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Stephanie", + "nat": "AU" + }, + { + "gender": "female", + "name": { + "title": "Ms", + "first": "Antonia", + "last": "Núñez" + }, + "email": "antonia.nunez@example.com", + "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Antonia", + "nat": "ES" + }, + { + "gender": "male", + "name": { + "title": "Mr", + "first": "Donald", + "last": "Young" + }, + "email": "donald.young@example.com", + "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Donald", + "nat": "US" + }, + { + "gender": "male", + "name": { + "title": "Mr", + "first": "Iegor", + "last": "Holodovskiy" + }, + "email": "iegor.holodovskiy@example.com", + "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Iegor", + "nat": "UA" + }, + { + "gender": "female", + "name": { + "title": "Madame", + "first": "Jessica", + "last": "David" + }, + "email": "jessica.david@example.com", + "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Jessica", + "nat": "CH" + }, + { + "gender": "female", + "name": { + "title": "Ms", + "first": "Eve", + "last": "Martinez" + }, + "email": "eve.martinez@example.com", + "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Eve", + "nat": "FR" + }, + { + "gender": "male", + "name": { + "title": "Mr", + "first": "Caleb", + "last": "Silva" + }, + "email": "caleb.silva@example.com", + "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Caleb", + "nat": "US" + }, + { + "gender": "female", + "name": { + "title": "Miss", + "first": "Marcia", + "last": "Jenkins" + }, + "email": "marcia.jenkins@example.com", + "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Marcia", + "nat": "US" + }, + { + "gender": "female", + "name": { + "title": "Mrs", + "first": "Mackenzie", + "last": "Jones" + }, + "email": "mackenzie.jones@example.com", + "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Mackenzie", + "nat": "NZ" + }, + { + "gender": "male", + "name": { + "title": "Mr", + "first": "Jeremiah", + "last": "Gutierrez" + }, + "email": "jeremiah.gutierrez@example.com", + "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Jeremiah", + "nat": "AU" + }, + { + "gender": "female", + "name": { + "title": "Ms", + "first": "Luciara", + "last": "Souza" + }, + "email": "luciara.souza@example.com", + "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Luciara", + "nat": "BR" + }, + { + "gender": "male", + "name": { + "title": "Mr", + "first": "Valgi", + "last": "da Cunha" + }, + "email": "valgi.dacunha@example.com", + "picture": "https://api.dicebear.com/6.x/open-peeps/svg?seed=Valgi", + "nat": "BR" + } + ] +} + const useStyles = makeStyles({ avatar: { height: 32, @@ -19,18 +243,8 @@ type User = { first: string; // "Duane", last: string; // "Reed" }; - location: object; // {street: {number: 5060, name: "Hickory Creek Dr"}, city: "Albany", state: "New South Wales",…} email: string; // "duane.reed@example.com" - login: object; // {uuid: "4b785022-9a23-4ab9-8a23-cb3fb43969a9", username: "blackdog796", password: "patch",…} - dob: object; // {date: "1983-06-22T12:30:23.016Z", age: 37} - registered: object; // {date: "2006-06-13T18:48:28.037Z", age: 14} - phone: string; // "07-2154-5651" - cell: string; // "0405-592-879" - id: { - name: string; // "TFN", - value: string; // "796260432" - }; - picture: { medium: string }; // {medium: "https://randomuser.me/api/portraits/men/95.jpg",…} + picture: string; // "https://api.dicebear.com/6.x/open-peeps/svg?seed=Duane" nat: string; // "AU" }; @@ -52,7 +266,7 @@ export const DenseTable = ({ users }: DenseTableProps) => { return { avatar: ( {user.name.first} @@ -65,7 +279,7 @@ export const DenseTable = ({ users }: DenseTableProps) => { return ( { }; export const ExampleFetchComponent = () => { - const { fetch } = useApi(fetchApiRef); + const { value, loading, error } = useAsync(async (): Promise => { - const response = await fetch('https://randomuser.me/api/?results=20'); - const data = await response.json(); - return data.results; + // Would use fetch in a real world example + return exampleUsers.results; }, []); if (loading) { diff --git a/packages/cli/templates/default-plugin/src/setupTests.ts b/packages/cli/templates/default-plugin/src/setupTests.ts index 48c09b5346..7b0828bfa8 100644 --- a/packages/cli/templates/default-plugin/src/setupTests.ts +++ b/packages/cli/templates/default-plugin/src/setupTests.ts @@ -1,2 +1 @@ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/packages/codemods/CHANGELOG.md b/packages/codemods/CHANGELOG.md index d19c01a7d5..9bb738e4e8 100644 --- a/packages/codemods/CHANGELOG.md +++ b/packages/codemods/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/codemods +## 0.1.45 + +### Patch Changes + +- 325a32e9476e: Updated dependency `jscodeshift` to `^0.15.0`. +- Updated dependencies + - @backstage/cli-common@0.1.12 + +## 0.1.45-next.0 + +### Patch Changes + +- 325a32e9476e: Updated dependency `jscodeshift` to `^0.15.0`. +- Updated dependencies + - @backstage/cli-common@0.1.12 + ## 0.1.44 ### Patch Changes diff --git a/packages/codemods/package.json b/packages/codemods/package.json index acb0f10dd1..ccbc20926b 100644 --- a/packages/codemods/package.json +++ b/packages/codemods/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/codemods", "description": "A collection of codemods for Backstage projects", - "version": "0.1.44", + "version": "0.1.45", "publishConfig": { "access": "public", "main": "dist/index.cjs.js" @@ -36,7 +36,7 @@ "@backstage/cli-common": "workspace:^", "chalk": "^4.0.0", "commander": "^9.1.0", - "jscodeshift": "^0.14.0", + "jscodeshift": "^0.15.0", "jscodeshift-add-imports": "^1.0.10" }, "devDependencies": { diff --git a/packages/config-loader/CHANGELOG.md b/packages/config-loader/CHANGELOG.md index f898331a4b..b02d08495a 100644 --- a/packages/config-loader/CHANGELOG.md +++ b/packages/config-loader/CHANGELOG.md @@ -1,5 +1,117 @@ # @backstage/config-loader +## 1.4.0-next.1 + +### Minor Changes + +- 2f1859585998: Loading invalid TypeScript configuration schemas will now throw an error rather than silently being ignored. + + In particular this includes defining any additional types other than `Config` in the schema file, or use of unsupported types such as `Record` or `Partial`. + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + +## 1.4.0-next.0 + +### Minor Changes + +- cd514545d1d0: Adds a new `deepVisibility` schema keyword that sets child visibility recursively to the defined value, respecting preexisting values or child `deepVisibility`. + + Example usage: + + ```ts + export interface Config { + /** + * Enforces a default of `secret` instead of `backend` for this object. + * @deepVisibility secret + */ + mySecretProperty: { + type: 'object'; + properties: { + secretValue: { + type: 'string'; + }; + + verySecretProperty: { + type: 'string'; + }; + }; + }; + } + ``` + + Example of a schema that would not be allowed: + + ```ts + export interface Config { + /** + * Set the top level property to secret, enforcing a default of `secret` instead of `backend` for this object. + * @deepVisibility secret + */ + mySecretProperty: { + type: 'object'; + properties: { + frontendUrl: { + /** + * We can NOT override the visibility to reveal a property to the front end. + * @visibility frontend + */ + type: 'string'; + }; + + verySecretProperty: { + type: 'string'; + }; + }; + }; + } + ``` + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + +## 1.3.2 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + +## 1.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + +## 1.3.1 + +### Patch Changes + +- f25427f665f7: Fix a bug where config items with `/` in the key were incorrectly handled. +- a5c5491ff50c: Use `durationToMilliseconds` from `@backstage/types` instead of our own +- Updated dependencies + - @backstage/types@1.1.0 + - @backstage/errors@1.2.0 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.8 + ## 1.3.1-next.1 ### Patch Changes diff --git a/packages/config-loader/package.json b/packages/config-loader/package.json index b2e7015f03..5e82c0bb76 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.3.1-next.1", + "version": "1.4.0-next.1", "publishConfig": { "access": "public", "main": "dist/index.cjs.js", diff --git a/packages/config-loader/src/schema/collect.ts b/packages/config-loader/src/schema/collect.ts index 98feffebb2..7120c12d90 100644 --- a/packages/config-loader/src/schema/collect.ts +++ b/packages/config-loader/src/schema/collect.ts @@ -15,6 +15,7 @@ */ import fs from 'fs-extra'; +import { EOL } from 'os'; import { resolve as resolvePath, relative as relativePath, @@ -163,7 +164,7 @@ async function compileTsSchemas(paths: string[]) { // Lazy loaded, because this brings up all of TypeScript and we don't // want that eagerly loaded in tests - const { getProgramFromFiles, generateSchema } = await import( + const { getProgramFromFiles, buildGenerator } = await import( 'typescript-json-schema' ); @@ -183,17 +184,40 @@ async function compileTsSchemas(paths: string[]) { const tsSchemas = paths.map(path => { let value; try { - value = generateSchema( + const generator = buildGenerator( program, - // All schemas should export a `Config` symbol - 'Config', // This enables the use of these tags in TSDoc comments { required: true, - validationKeywords: ['visibility', 'deprecated'], + validationKeywords: ['visibility', 'deepVisibility', 'deprecated'], }, [path.split(sep).join('/')], // Unix paths are expected for all OSes here - ) as JsonObject | null; + ); + + // All schemas should export a `Config` symbol + value = generator?.getSchemaForSymbol('Config') as JsonObject | null; + + // This makes sure that no additional symbols are defined in the schema. We don't allow + // this because they share a global namespace and will be merged together, leading to + // unpredictable behavior. + const userSymbols = new Set(generator?.getUserSymbols()); + userSymbols.delete('Config'); + if (userSymbols.size !== 0) { + const names = Array.from(userSymbols).join("', '"); + throw new Error( + `Invalid configuration schema in ${path}, additional symbol definitions are not allowed, found '${names}'`, + ); + } + + // This makes sure that no unsupported types are used in the schema, for example `Record<,>`. + // The generator will extract these as a schema reference, which will in turn be broken for our usage. + const reffedDefs = Object.keys(generator?.ReffedDefinitions ?? {}); + if (reffedDefs.length !== 0) { + const lines = reffedDefs.join(`${EOL} `); + throw new Error( + `Invalid configuration schema in ${path}, the following definitions are not supported:${EOL}${EOL} ${lines}`, + ); + } } catch (error) { assertError(error); if (error.message !== 'type Config not found') { diff --git a/packages/config-loader/src/schema/compile.test.ts b/packages/config-loader/src/schema/compile.test.ts index df81923684..914a813d9f 100644 --- a/packages/config-loader/src/schema/compile.test.ts +++ b/packages/config-loader/src/schema/compile.test.ts @@ -70,7 +70,7 @@ describe('compileConfigSchemas', () => { c: { type: 'string' }, d: { type: 'array', - visibility: 'secret', + visibility: 'frontend', items: { type: 'string', visibility: 'frontend' }, }, }, @@ -86,7 +86,7 @@ describe('compileConfigSchemas', () => { c: { type: 'string', visibility: 'backend' }, d: { type: 'array', - visibility: 'secret', + visibility: 'frontend', items: { type: 'string' }, }, }, @@ -102,7 +102,7 @@ describe('compileConfigSchemas', () => { Object.entries({ '/a': 'frontend', '/b': 'secret', - '/d': 'secret', + '/d': 'frontend', '/d/0': 'frontend', }), ), @@ -110,7 +110,7 @@ describe('compileConfigSchemas', () => { Object.entries({ '/properties/a': 'frontend', '/properties/b': 'secret', - '/properties/d': 'secret', + '/properties/d': 'frontend', '/properties/d/items': 'frontend', }), ), @@ -231,3 +231,209 @@ describe('compileConfigSchemas', () => { }); }); }); + +describe('deepVisibility', () => { + it('should pass secret visibility to children, but respect existing backend/secret visibility', () => { + const validate = compileConfigSchemas([ + { + path: 'a1', + value: { + type: 'object', + properties: { + a: { type: 'string', visibility: 'backend' }, + b: { type: 'string', visibility: 'backend' }, + c: { type: 'string' }, + d: { + type: 'array', + items: { type: 'string' }, + }, + }, + }, + }, + { + path: 'a2', + value: { + type: 'object', + deepVisibility: 'secret', + properties: { + a: { type: 'string' }, + b: { type: 'string', visibility: 'secret' }, + c: { type: 'string', visibility: 'backend' }, + d: { + type: 'array', + items: { type: 'string' }, + }, + }, + }, + }, + ]); + expect( + validate([ + { + data: { a: 'a', b: 'b', c: 'c', d: ['d'] }, + context: 'test', + }, + ]), + ).toEqual({ + visibilityByDataPath: new Map( + Object.entries({ + '': 'secret', + '/b': 'secret', + '/d': 'secret', + '/d/0': 'secret', + }), + ), + visibilityBySchemaPath: new Map( + Object.entries({ + '': 'secret', + '/properties/b': 'secret', + '/properties/d': 'secret', + '/properties/d/items': 'secret', + }), + ), + deprecationByDataPath: new Map(), + }); + }); + + it('should pass secret visibility to children, but throws when overriding with frontend visibility', () => { + expect(() => + compileConfigSchemas([ + { + path: 'a1', + value: { + type: 'object', + properties: { + a: { type: 'string', visibility: 'frontend' }, + b: { type: 'string', visibility: 'backend' }, + c: { type: 'string' }, + d: { + type: 'array', + items: { type: 'string' }, + }, + }, + }, + }, + { + path: 'a2', + value: { + type: 'object', + deepVisibility: 'secret', + visibility: 'secret', + properties: { + a: { type: 'string' }, + b: { type: 'string', visibility: 'secret' }, + c: { type: 'string', visibility: 'frontend' }, + d: { + type: 'array', + items: { type: 'string' }, + }, + }, + }, + }, + ]), + ).toThrow( + "Config schema visibility is both 'frontend' and 'secret' for /properties/a", + ); + }); + + it('should throw when children have a different deepVisibility', () => { + expect(() => + compileConfigSchemas([ + { + path: 'a1', + value: { + type: 'object', + properties: { + a: { + type: 'object', + properties: { + a: { type: 'string' }, + }, + }, + b: { type: 'string', visibility: 'backend' }, + c: { type: 'string' }, + d: { + type: 'array', + items: { type: 'string' }, + }, + }, + }, + }, + { + path: 'a2', + value: { + type: 'object', + deepVisibility: 'secret', + properties: { + a: { + type: 'object', + properties: { + a: { type: 'string', visibility: 'frontend' }, + }, + }, + b: { type: 'string', visibility: 'secret' }, + c: { type: 'string', visibility: 'backend' }, + d: { + type: 'array', + items: { type: 'string' }, + }, + }, + }, + }, + ]), + ).toThrow( + `Config schema visibility is both 'frontend' and 'secret' for /properties/a`, + ); + }); + + it('should throw when ancestor and children have a different deepVisibility', () => { + expect(() => + compileConfigSchemas([ + { + path: 'a1', + value: { + type: 'object', + properties: { + a: { + type: 'object', + properties: { + a: { type: 'string' }, + }, + }, + b: { type: 'string', visibility: 'backend' }, + c: { type: 'string' }, + d: { + type: 'array', + items: { type: 'string' }, + }, + }, + }, + }, + { + path: 'a2', + value: { + type: 'object', + deepVisibility: 'secret', + properties: { + a: { + type: 'object', + deepVisibility: 'frontend', + properties: { + a: { type: 'string', visibility: 'frontend' }, + }, + }, + b: { type: 'string', visibility: 'secret' }, + c: { type: 'string', visibility: 'backend' }, + d: { + type: 'array', + items: { type: 'string' }, + }, + }, + }, + }, + ]), + ).toThrow( + `Config schema visibility is both 'frontend' and 'secret' for /properties/a`, + ); + }); +}); diff --git a/packages/config-loader/src/schema/compile.ts b/packages/config-loader/src/schema/compile.ts index 63a8e4b8a6..5d448a590a 100644 --- a/packages/config-loader/src/schema/compile.ts +++ b/packages/config-loader/src/schema/compile.ts @@ -74,6 +74,20 @@ export function compileConfigSchemas( }; }, }) + .addKeyword({ + keyword: 'deepVisibility', + metaSchema: { + type: 'string', + /** + * Disallow 'backend' deepVisibility to prevent cases of permission escaping. + * + * Something like: + * - deepVisibility secret -> backend -> frontend. + * - deepVisibility secret -> backend -> visibility frontend. + */ + enum: ['frontend', 'secret'], + }, + }) .removeKeyword('deprecated') // remove `deprecated` keyword so that we can implement our own compiler .addKeyword({ keyword: 'deprecated', @@ -101,17 +115,54 @@ export function compileConfigSchemas( const merged = mergeConfigSchemas(schemas.map(_ => _.value)); - if (options?.noUndeclaredProperties) { - traverse(merged, (schema: SchemaObject) => { - /** - * The `additionalProperties` key can only be applied to `type: object` in the JSON - * schema. - */ - if (schema?.type === 'object') { - schema.additionalProperties ||= false; + traverse( + merged, + ( + schema: SchemaObject, + jsonPtr: string, + _1: any, + _2: any, + _3?: any, + parentSchema?: SchemaObject, + ) => { + // Inherit parent deepVisibility if we don't define one ourselves. + if (parentSchema?.deepVisibility) { + schema.deepVisibility ??= parentSchema?.deepVisibility; } - }); - } + + // Apply deep visibility to self. + if (schema?.deepVisibility) { + // This runs before we compile the AJV so visibilityByDataPath has the + // correct data. + schema.visibility ??= schema.deepVisibility; + + if (parentSchema) { + /** + * Validate that we're not trying to override a child's visibility + * by setting the parent deep visibility. + */ + const values = [schema.visibility, parentSchema.visibility]; + const hasFrontend = values.some(e => e === 'frontend'); + const hasSecret = values.some(e => e === 'secret'); + if (hasFrontend && hasSecret) { + throw new Error( + `Config schema visibility is both 'frontend' and 'secret' for ${jsonPtr}`, + ); + } + } + } + + if (options?.noUndeclaredProperties) { + /** + * The `additionalProperties` key can only be applied to `type: object` in the JSON + * schema. + */ + if (schema?.type === 'object') { + schema.additionalProperties ||= false; + } + } + }, + ); const validate = ajv.compile(merged); diff --git a/packages/config-loader/src/sources/RemoteConfigSource.ts b/packages/config-loader/src/sources/RemoteConfigSource.ts index 3a8f6bf812..10a64ee635 100644 --- a/packages/config-loader/src/sources/RemoteConfigSource.ts +++ b/packages/config-loader/src/sources/RemoteConfigSource.ts @@ -15,7 +15,11 @@ */ import { ResponseError } from '@backstage/errors'; -import { HumanDuration, JsonObject } from '@backstage/types'; +import { + HumanDuration, + JsonObject, + durationToMilliseconds, +} from '@backstage/types'; import isEqual from 'lodash/isEqual'; import fetch from 'node-fetch'; import yaml from 'yaml'; @@ -29,27 +33,6 @@ import { const DEFAULT_RELOAD_INTERVAL = { seconds: 60 }; -function durationToMs(duration: HumanDuration): number { - const { - years = 0, - months = 0, - weeks = 0, - days = 0, - hours = 0, - minutes = 0, - seconds = 0, - milliseconds = 0, - } = duration; - - const totalDays = years * 365 + months * 30 + weeks * 7 + days; - const totalHours = totalDays * 24 + hours; - const totalMinutes = totalHours * 60 + minutes; - const totalSeconds = totalMinutes * 60 + seconds; - const totalMilliseconds = totalSeconds * 1000 + milliseconds; - - return totalMilliseconds; -} - /** * Options for {@link RemoteConfigSource.create}. * @@ -104,7 +87,7 @@ export class RemoteConfigSource implements ConfigSource { private constructor(options: RemoteConfigSourceOptions) { this.#url = options.url; - this.#reloadIntervalMs = durationToMs( + this.#reloadIntervalMs = durationToMilliseconds( options.reloadInterval ?? DEFAULT_RELOAD_INTERVAL, ); this.#transformer = createConfigTransformer({ diff --git a/packages/config/CHANGELOG.md b/packages/config/CHANGELOG.md index 8b20f72905..9f2f38c8ee 100644 --- a/packages/config/CHANGELOG.md +++ b/packages/config/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/config +## 1.0.8 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.1.0 + ## 1.0.7 ### Patch Changes diff --git a/packages/config/package.json b/packages/config/package.json index c90b7d4c5f..4470e9719e 100644 --- a/packages/config/package.json +++ b/packages/config/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/config", "description": "Config API used by Backstage core, backend, and CLI", - "version": "1.0.7", + "version": "1.0.8", "publishConfig": { "access": "public", "main": "dist/index.cjs.js", diff --git a/packages/core-app-api/CHANGELOG.md b/packages/core-app-api/CHANGELOG.md index bd2c6c818d..1de645fb9e 100644 --- a/packages/core-app-api/CHANGELOG.md +++ b/packages/core-app-api/CHANGELOG.md @@ -1,5 +1,63 @@ # @backstage/core-app-api +## 1.9.1-next.0 + +### Patch Changes + +- 9ae4e7e63836: Fixed a bug that could cause `navigate` analytics events to be misattributed to the plugin mounted on the root route (e.g. the `home` plugin at `/`) when the route that was navigated to wasn't associated with a routable extension. +- Updated dependencies + - @backstage/core-plugin-api@1.5.3 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/version-bridge@1.0.4 + +## 1.9.0 + +### Minor Changes + +- a77ddf7ccd71: add login in popup options to config popup width and height + +### Patch Changes + +- 8174cf4c0edf: Fixing MUI / Material UI references +- Updated dependencies + - @backstage/core-plugin-api@1.5.3 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/version-bridge@1.0.4 + +## 1.8.2-next.1 + +### Patch Changes + +- 8174cf4c0edf: Fixing MUI / Material UI references +- Updated dependencies + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/version-bridge@1.0.4 + +## 1.8.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/config@1.0.8 + +## 1.8.1 + +### Patch Changes + +- 12adfbc8fe2d: Fixed a bug that prevented accurate plugin and route data from being applied to `navigate` analytics events when users visited pages constructed with ``, ``, and similar components that are used to gather one or more routable extensions under a given path. +- ac677bc30ae0: Expose discovery.endpoints configuration to use FrontendHostDiscovery +- 74b216ee4e50: Add `PropsWithChildren` to usages of `ComponentType`, in preparation for React 18 where the children are no longer implicit. +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/types@1.1.0 + - @backstage/config@1.0.8 + - @backstage/version-bridge@1.0.4 + ## 1.8.1-next.0 ### Patch Changes @@ -852,7 +910,7 @@ Deprecated the `SamlSession` and `GithubSession` types. -- 784d8078ab: Removed direct and transitive MUI dependencies. +- 784d8078ab: Removed direct and transitive Material UI dependencies. - Updated dependencies - @backstage/config@0.1.12 - @backstage/core-plugin-api@0.5.0 @@ -1051,7 +1109,7 @@ The first and most commonly used one is `createApp` from the new `@backstage/app-defaults` package, which behaves just like the existing `createApp`. In the future this method is likely to be expanded to add more APIs and other pieces into the default setup, for example the Utility APIs from `@backstage/integration-react`. - The other option that we now provide is to use `createSpecializedApp` from `@backstage/core-app-api`. This is a more low-level API where you need to provide a full set of options, including your own `components`, `icons`, `defaultApis`, and `themes`. The `createSpecializedApp` way of creating an app is particularly useful if you are not using `@backstage/core-components` or MUI, as it allows you to avoid those dependencies completely. + The other option that we now provide is to use `createSpecializedApp` from `@backstage/core-app-api`. This is a more low-level API where you need to provide a full set of options, including your own `components`, `icons`, `defaultApis`, and `themes`. The `createSpecializedApp` way of creating an app is particularly useful if you are not using `@backstage/core-components` or Material UI, as it allows you to avoid those dependencies completely. - 475edb5bc5: move the BehaviorSubject init into the constructor - Updated dependencies diff --git a/packages/core-app-api/api-report.md b/packages/core-app-api/api-report.md index 09efe516b9..5746598ffd 100644 --- a/packages/core-app-api/api-report.md +++ b/packages/core-app-api/api-report.md @@ -526,6 +526,7 @@ export class OAuth2 // @public export type OAuth2CreateOptions = OAuthApiCreateOptions & { scopeTransform?: (scopes: string[]) => string[]; + popupOptions?: PopupOptions; }; // @public @@ -577,6 +578,21 @@ export type OneLoginAuthCreateOptions = { provider?: AuthProviderInfo; }; +// @public +export type PopupOptions = { + size?: + | { + width: number; + height: number; + fullscreen?: never; + } + | { + width?: never; + height?: never; + fullscreen: boolean; + }; +}; + // @public export class SamlAuth implements ProfileInfoApi, BackstageIdentityApi, SessionApi diff --git a/packages/core-app-api/config.d.ts b/packages/core-app-api/config.d.ts index e8cc879c90..22f241fbcf 100644 --- a/packages/core-app-api/config.d.ts +++ b/packages/core-app-api/config.d.ts @@ -122,4 +122,43 @@ export interface Config { * @visibility frontend */ enableExperimentalRedirectFlow?: boolean; + + /** + * Discovery options. + * + * @visibility frontend + */ + discovery?: { + /** + * Endpoints + * + * A list of target baseUrls and the associated plugins. + * + * @visibility frontend + */ + endpoints?: Array<{ + /** + * The target baseUrl to use for the plugin + * + * Can be either a string or an object with internal and external keys. (Internal is used for the backend, external for the frontend) + * Targets with `{{pluginId}}` or `{{ pluginId }} in the url will be replaced with the pluginId. + * + * @visibility frontend + */ + target: + | string + | { + /** + * @visibility frontend + */ + external: string; + }; + /** + * Array of plugins which use the target baseUrl. + * + * @visibility frontend + */ + plugins: Array; + }>; + }; } diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json index 932bf05e95..15dca326e0 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.8.1-next.0", + "version": "1.9.1-next.0", "publishConfig": { "access": "public", "main": "dist/index.esm.js", @@ -59,7 +59,6 @@ "@testing-library/user-event": "^14.0.0", "@types/node": "^16.11.26", "@types/zen-observable": "^0.8.0", - "cross-fetch": "^3.1.5", "msw": "^1.0.0", "react-router-beta": "npm:react-router@6.0.0-beta.0", "react-router-dom-beta": "npm:react-router-dom@6.0.0-beta.0", diff --git a/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.ts b/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.ts index 44bd5269ea..fd40a9c8fb 100644 --- a/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.ts +++ b/packages/core-app-api/src/apis/implementations/auth/oauth2/OAuth2.ts @@ -14,7 +14,10 @@ * limitations under the License. */ -import { DefaultAuthConnector } from '../../../../lib/AuthConnector'; +import { + DefaultAuthConnector, + PopupOptions, +} from '../../../../lib/AuthConnector'; import { RefreshingAuthSessionManager } from '../../../../lib/AuthSessionManager'; import { SessionManager } from '../../../../lib/AuthSessionManager/types'; import { @@ -38,6 +41,7 @@ import { OAuthApiCreateOptions } from '../types'; */ export type OAuth2CreateOptions = OAuthApiCreateOptions & { scopeTransform?: (scopes: string[]) => string[]; + popupOptions?: PopupOptions; }; export type OAuth2Response = { @@ -79,6 +83,7 @@ export default class OAuth2 oauthRequestApi, defaultScopes = [], scopeTransform = x => x, + popupOptions, } = options; const connector = new DefaultAuthConnector({ @@ -103,6 +108,7 @@ export default class OAuth2 }, }; }, + popupOptions, }); const sessionManager = new RefreshingAuthSessionManager({ diff --git a/packages/core-app-api/src/apis/implementations/auth/oauth2/types.ts b/packages/core-app-api/src/apis/implementations/auth/oauth2/types.ts index 242cd94154..bd3bb95ba6 100644 --- a/packages/core-app-api/src/apis/implementations/auth/oauth2/types.ts +++ b/packages/core-app-api/src/apis/implementations/auth/oauth2/types.ts @@ -20,6 +20,7 @@ import { } from '@backstage/core-plugin-api'; export type { OAuth2CreateOptions } from './OAuth2'; +export type { PopupOptions } from '../../../../lib/AuthConnector'; /** * Session information for generic OAuth2 auth. * diff --git a/packages/core-app-api/src/app/createSpecializedApp.tsx b/packages/core-app-api/src/app/createSpecializedApp.tsx index 40906ef5c7..717aa3a363 100644 --- a/packages/core-app-api/src/app/createSpecializedApp.tsx +++ b/packages/core-app-api/src/app/createSpecializedApp.tsx @@ -29,7 +29,7 @@ import { AppOptions, BackstageApp } from './types'; * however, this low-level API allows you to provide a full set of options, * including your own `components`, `icons`, `defaultApis`, and `themes`. This * is particularly useful if you are not using `@backstage/core-components` or - * MUI, as it allows you to avoid those dependencies completely. + * Material UI, as it allows you to avoid those dependencies completely. */ export function createSpecializedApp(options: AppOptions): BackstageApp { return new AppManager(options); diff --git a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.test.ts b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.test.ts index c46e87581f..4273ea99ee 100644 --- a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.test.ts +++ b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.test.ts @@ -167,6 +167,80 @@ describe('DefaultAuthConnector', () => { await expect(sessionPromise).resolves.toBe('my-session'); expect(popupSpy).toHaveBeenCalledTimes(1); + expect(popupSpy).toHaveBeenCalledWith({ + name: 'My Provider Login', + origin: 'http://my-host', + url: 'http://my-host/api/auth/my-provider/start?scope=&origin=http%3A%2F%2Flocalhost&flow=popup&env=production', + width: 450, + height: 730, + }); + }); + + it('should show popup fullscreen', async () => { + const popupSpy = jest + .spyOn(loginPopup, 'showLoginPopup') + .mockResolvedValue('my-session'); + + jest.spyOn(window.screen, 'width', 'get').mockReturnValue(1000); + jest.spyOn(window.screen, 'height', 'get').mockReturnValue(1000); + + const connector = new DefaultAuthConnector({ + ...defaultOptions, + oauthRequestApi: new MockOAuthApi(), + sessionTransform: str => str, + popupOptions: { + size: { + fullscreen: true, + }, + }, + }); + + const sessionPromise = connector.createSession({ + scopes: new Set(), + instantPopup: true, + }); + + await expect(sessionPromise).resolves.toBe('my-session'); + + expect(popupSpy).toHaveBeenCalledWith({ + height: 1000, + name: 'My Provider Login', + origin: 'http://my-host', + url: 'http://my-host/api/auth/my-provider/start?scope=&origin=http%3A%2F%2Flocalhost&flow=popup&env=production', + width: 1000, + }); + }); + + it('should show popup with special width and height', async () => { + const popupSpy = jest + .spyOn(loginPopup, 'showLoginPopup') + .mockResolvedValue('my-session'); + const connector = new DefaultAuthConnector({ + ...defaultOptions, + oauthRequestApi: new MockOAuthApi(), + sessionTransform: str => str, + popupOptions: { + size: { + width: 500, + height: 1000, + }, + }, + }); + + const sessionPromise = connector.createSession({ + scopes: new Set(), + instantPopup: true, + }); + + await expect(sessionPromise).resolves.toBe('my-session'); + + expect(popupSpy).toHaveBeenCalledWith({ + name: 'My Provider Login', + origin: 'http://my-host', + url: 'http://my-host/api/auth/my-provider/start?scope=&origin=http%3A%2F%2Flocalhost&flow=popup&env=production', + width: 500, + height: 1000, + }); }); it('should use join func to join scopes', async () => { diff --git a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts index 728ed3878c..ad1b25619d 100644 --- a/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts +++ b/packages/core-app-api/src/lib/AuthConnector/DefaultAuthConnector.ts @@ -21,7 +21,7 @@ import { OAuthRequester, } from '@backstage/core-plugin-api'; import { showLoginPopup } from '../loginPopup'; -import { AuthConnector, CreateSessionOptions } from './types'; +import { AuthConnector, CreateSessionOptions, PopupOptions } from './types'; let warned = false; @@ -55,6 +55,10 @@ type Options = { * ConfigApi instance used to configure authentication flow of pop-up or redirect. */ configApi?: ConfigApi; + /** + * Options used to configure auth popup + */ + popupOptions?: PopupOptions; }; function defaultJoinScopes(scopes: Set) { @@ -76,6 +80,7 @@ export class DefaultAuthConnector private readonly authRequester: OAuthRequester; private readonly sessionTransform: (response: any) => Promise; private readonly enableExperimentalRedirectFlow: boolean; + private readonly popupOptions: PopupOptions | undefined; constructor(options: Options) { const { configApi, @@ -85,6 +90,7 @@ export class DefaultAuthConnector joinScopes = defaultJoinScopes, oauthRequestApi, sessionTransform = id => id, + popupOptions, } = options; if (!warned && !configApi) { @@ -114,6 +120,7 @@ export class DefaultAuthConnector this.provider = provider; this.joinScopesFunc = joinScopes; this.sessionTransform = sessionTransform; + this.popupOptions = popupOptions; } async createSession(options: CreateSessionOptions): Promise { @@ -188,12 +195,20 @@ export class DefaultAuthConnector flow: 'popup', }); + const width = this.popupOptions?.size?.fullscreen + ? window.screen.width + : this.popupOptions?.size?.width || 450; + + const height = this.popupOptions?.size?.fullscreen + ? window.screen.height + : this.popupOptions?.size?.height || 730; + const payload = await showLoginPopup({ url: popupUrl, name: `${this.provider.title} Login`, origin: new URL(popupUrl).origin, - width: 450, - height: 730, + width, + height, }); return await this.sessionTransform(payload); diff --git a/packages/core-app-api/src/lib/AuthConnector/types.ts b/packages/core-app-api/src/lib/AuthConnector/types.ts index c8e83e1ccc..3c01bb254f 100644 --- a/packages/core-app-api/src/lib/AuthConnector/types.ts +++ b/packages/core-app-api/src/lib/AuthConnector/types.ts @@ -28,3 +28,13 @@ export type AuthConnector = { refreshSession(scopes?: Set): Promise; removeSession(): Promise; }; + +/** + * Options for login popup + * @public + */ +export type PopupOptions = { + size?: + | { width: number; height: number; fullscreen?: never } + | { width?: never; height?: never; fullscreen: boolean }; +}; diff --git a/packages/core-app-api/src/routing/RouteResolver.beta.test.ts b/packages/core-app-api/src/routing/RouteResolver.beta.test.ts index f99a7b71f3..7cd9eae021 100644 --- a/packages/core-app-api/src/routing/RouteResolver.beta.test.ts +++ b/packages/core-app-api/src/routing/RouteResolver.beta.test.ts @@ -21,6 +21,7 @@ import { ExternalRouteRef, RouteRef, SubRouteRef, + BackstagePlugin, } from '@backstage/core-plugin-api'; import { RouteResolver } from './RouteResolver'; import { MATCH_ALL_ROUTE } from './collectors'; @@ -31,7 +32,12 @@ jest.mock('react-router-dom', () => ); const element = () => null; -const rest = { element, caseSensitive: false, children: [MATCH_ALL_ROUTE] }; +const rest = { + element, + caseSensitive: false, + children: [MATCH_ALL_ROUTE], + plugins: new Set(), +}; const ref1 = createRouteRef({ id: 'rr1' }); const ref2 = createRouteRef({ id: 'rr2', params: ['x'] }); diff --git a/packages/core-app-api/src/routing/RouteResolver.compat.test.ts b/packages/core-app-api/src/routing/RouteResolver.compat.test.ts index ecc854f474..41e5aba712 100644 --- a/packages/core-app-api/src/routing/RouteResolver.compat.test.ts +++ b/packages/core-app-api/src/routing/RouteResolver.compat.test.ts @@ -21,11 +21,17 @@ import { ExternalRouteRef, RouteRef, SubRouteRef, + BackstagePlugin, } from '@backstage/core-plugin-api'; import { MATCH_ALL_ROUTE } from './collectors'; const element = () => null; -const rest = { element, caseSensitive: false, children: [MATCH_ALL_ROUTE] }; +const rest = { + element, + caseSensitive: false, + children: [MATCH_ALL_ROUTE], + plugins: new Set(), +}; const ref1 = createRouteRef({ id: 'rr1' }); const ref2 = createRouteRef({ id: 'rr2', params: ['x'] }); diff --git a/packages/core-app-api/src/routing/RouteResolver.stable.test.ts b/packages/core-app-api/src/routing/RouteResolver.stable.test.ts index 9cf1fb2fb1..8c484effae 100644 --- a/packages/core-app-api/src/routing/RouteResolver.stable.test.ts +++ b/packages/core-app-api/src/routing/RouteResolver.stable.test.ts @@ -21,6 +21,7 @@ import { ExternalRouteRef, RouteRef, SubRouteRef, + BackstagePlugin, } from '@backstage/core-plugin-api'; import { RouteResolver } from './RouteResolver'; import { MATCH_ALL_ROUTE } from './collectors'; @@ -31,7 +32,12 @@ jest.mock('react-router-dom', () => ); const element = () => null; -const rest = { element, caseSensitive: false, children: [MATCH_ALL_ROUTE] }; +const rest = { + element, + caseSensitive: false, + children: [MATCH_ALL_ROUTE], + plugins: new Set(), +}; const ref1 = createRouteRef({ id: 'rr1' }); const ref2 = createRouteRef({ id: 'rr2', params: ['x'] }); diff --git a/packages/core-app-api/src/routing/RouteTracker.test.tsx b/packages/core-app-api/src/routing/RouteTracker.test.tsx index 6896b60169..25d5cfbcfb 100644 --- a/packages/core-app-api/src/routing/RouteTracker.test.tsx +++ b/packages/core-app-api/src/routing/RouteTracker.test.tsx @@ -22,29 +22,49 @@ import { Link, MemoryRouter, Route, Routes } from 'react-router-dom'; import { AnalyticsApi, analyticsApiRef, + createPlugin, createRouteRef, } from '@backstage/core-plugin-api'; +import { MATCH_ALL_ROUTE } from './collectors'; describe('RouteTracker', () => { + const routeRef0 = createRouteRef({ + id: 'home:root', + }); const routeRef1 = createRouteRef({ id: 'route1', }); const routeRef2 = createRouteRef({ id: 'route2', }); + const plugin0 = createPlugin({ id: 'home' }); + const plugin1 = createPlugin({ id: 'plugin1' }); + const plugin2 = createPlugin({ id: 'plugin2' }); const routeObjects: BackstageRouteObject[] = [ + { + path: '', + element:
home page
, + routeRefs: new Set([routeRef0]), + plugins: new Set([plugin0]), + caseSensitive: false, + children: [MATCH_ALL_ROUTE], + }, { path: '/path/:p1/:p2', element: go, routeRefs: new Set([routeRef1]), + plugins: new Set([plugin1]), caseSensitive: false, + children: [MATCH_ALL_ROUTE], }, { path: '/path2/:param', element:
hi there
, routeRefs: new Set([routeRef2]), + plugins: new Set([plugin2]), caseSensitive: false, + children: [MATCH_ALL_ROUTE], }, ]; @@ -73,7 +93,7 @@ describe('RouteTracker', () => { }, context: { extension: 'App', - pluginId: 'root', + pluginId: 'plugin1', routeRef: 'route1', }, subject: '/path/foo/bar', @@ -88,8 +108,8 @@ describe('RouteTracker', () => { - {routeObjects.map(({ routeRefs, ...props }) => ( - + {routeObjects.map(({ path, element }) => ( + ))} @@ -105,11 +125,110 @@ describe('RouteTracker', () => { }, context: { extension: 'App', - pluginId: 'root', + pluginId: 'plugin2', routeRef: 'route2', }, subject: '/path2/hello', value: undefined, }); }); + + it('should capture path query and hash', async () => { + render( + + + + + , + ); + + expect(mockedAnalytics.captureEvent).toHaveBeenCalledWith({ + action: 'navigate', + attributes: { + p1: 'foo', + p2: 'bar', + }, + context: { + extension: 'App', + pluginId: 'plugin1', + routeRef: 'route1', + }, + subject: '/path/foo/bar?q=1#header-1', + value: undefined, + }); + }); + + it('should match the root path and send relevant context', async () => { + render( + + + + + , + ); + + expect(mockedAnalytics.captureEvent).toHaveBeenCalledWith({ + action: 'navigate', + attributes: {}, + context: { + extension: 'App', + pluginId: 'home', + routeRef: 'home:root', + }, + subject: '/', + value: undefined, + }); + }); + + it('should return default context when it would have otherwise matched on the root path', async () => { + render( + + + + + Non-extension} + /> + + + , + ); + + expect(mockedAnalytics.captureEvent).toHaveBeenCalledWith({ + action: 'navigate', + attributes: {}, + context: { + extension: 'App', + pluginId: 'root', + routeRef: 'unknown', + }, + subject: '/not-routable-extension', + value: undefined, + }); + }); + + it('should return parent route context on navigating to a sub-route', async () => { + render( + + + + + , + ); + + expect(mockedAnalytics.captureEvent).toHaveBeenCalledWith({ + action: 'navigate', + attributes: { + param: 'param-value', + }, + context: { + extension: 'App', + pluginId: 'plugin2', + routeRef: 'route2', + }, + subject: '/path2/param-value/sub-route', + value: undefined, + }); + }); }); diff --git a/packages/core-app-api/src/routing/RouteTracker.tsx b/packages/core-app-api/src/routing/RouteTracker.tsx index 5ec858b28e..69903268ac 100644 --- a/packages/core-app-api/src/routing/RouteTracker.tsx +++ b/packages/core-app-api/src/routing/RouteTracker.tsx @@ -21,6 +21,7 @@ import { AnalyticsContext, RouteRef, AnalyticsEventAttributes, + BackstagePlugin, } from '@backstage/core-plugin-api'; import { BackstageRouteObject } from './types'; @@ -37,12 +38,11 @@ const getExtensionContext = ( const matches = matchRoutes(routes, { pathname }); // Of the matching routes, get the last (e.g. most specific) instance of - // the BackstageRouteObject. - + // the BackstageRouteObject that contains a routeRef. Filtering by routeRef + // ensures subRouteRefs are aligned to their parent routes' context. const routeMatch = matches ?.filter(match => match?.route.routeRefs?.size > 0) .pop(); - const routeObject = routeMatch?.route; // If there is no route object, then allow inheritance of default context. @@ -50,17 +50,28 @@ const getExtensionContext = ( return undefined; } - // If there is a single route ref, return it. - // todo: get routeRef of rendered gathered mount point(?) + // If the matched route is the root route (no path), and the pathname is + // not the path of the homepage, then inherit from the default context. + if (routeObject.path === '' && pathname !== '/') { + return undefined; + } + + // If there is a single route ref, use it. let routeRef: RouteRef | undefined; if (routeObject.routeRefs.size === 1) { routeRef = routeObject.routeRefs.values().next().value; } + // If there is a single plugin, use it. + let plugin: BackstagePlugin | undefined; + if (routeObject.plugins.size === 1) { + plugin = routeObject.plugins.values().next().value; + } + const params = Object.entries( routeMatch?.params || {}, ).reduce((acc, [key, value]) => { - if (value !== undefined) { + if (value !== undefined && key !== '*') { acc[key] = value; } return acc; @@ -68,8 +79,9 @@ const getExtensionContext = ( return { extension: 'App', - pluginId: routeObject.plugin?.getId() || 'root', + pluginId: plugin?.getId() || 'root', ...(routeRef ? { routeRef: (routeRef as { id?: string }).id } : {}), + _routeNodeType: routeObject.element as string, params, }; } catch { diff --git a/packages/core-app-api/src/routing/collectors.beta.test.tsx b/packages/core-app-api/src/routing/collectors.beta.test.tsx index 74d8bbbe53..057674a7e4 100644 --- a/packages/core-app-api/src/routing/collectors.beta.test.tsx +++ b/packages/core-app-api/src/routing/collectors.beta.test.tsx @@ -112,16 +112,17 @@ function routeObj( caseSensitive: false, element: type, routeRefs: new Set(refs), + plugins: backstagePlugin ? new Set([backstagePlugin]) : new Set(), children: [ { path: '*', caseSensitive: false, element: 'match-all', routeRefs: new Set(), + plugins: new Set(), }, ...children, ], - plugin: backstagePlugin, }; } diff --git a/packages/core-app-api/src/routing/collectors.compat.test.tsx b/packages/core-app-api/src/routing/collectors.compat.test.tsx index e1333a070a..5dab06d03e 100644 --- a/packages/core-app-api/src/routing/collectors.compat.test.tsx +++ b/packages/core-app-api/src/routing/collectors.compat.test.tsx @@ -129,12 +129,14 @@ describe.each(['beta', 'stable'])('react-router %s', rrVersion => { caseSensitive: false, element: type, routeRefs: new Set(refs), + plugins: new Set(), children: [ { path: '*', caseSensitive: false, element: 'match-all', routeRefs: new Set(), + plugins: new Set(), }, ...children, ], diff --git a/packages/core-app-api/src/routing/collectors.stable.test.tsx b/packages/core-app-api/src/routing/collectors.stable.test.tsx index de6f350cc9..20c7643b9e 100644 --- a/packages/core-app-api/src/routing/collectors.stable.test.tsx +++ b/packages/core-app-api/src/routing/collectors.stable.test.tsx @@ -118,10 +118,11 @@ function routeObj( caseSensitive: false, element: 'match-all', routeRefs: new Set(), + plugins: new Set(), }, ...children, ], - plugin: backstagePlugin, + plugins: backstagePlugin ? new Set([backstagePlugin]) : new Set(), }; } @@ -333,11 +334,11 @@ describe('discovery', () => { [ref5, ref3], ]); expect(routing.objects).toEqual([ - routeObj('foo', [ref1, ref2], [], 'gathered'), + routeObj('foo', [ref1, ref2], [], 'gathered', plugin), routeObj( 'bar', [ref3], - [routeObj('', [ref4, ref5], [], 'gathered')], + [routeObj('', [ref4, ref5], [], 'gathered', plugin)], undefined, plugin, ), @@ -403,6 +404,7 @@ describe('discovery', () => { ), ], 'gathered', + plugin, ), ], undefined, diff --git a/packages/core-app-api/src/routing/collectors.tsx b/packages/core-app-api/src/routing/collectors.tsx index 0bf5e676a4..23f05fe62a 100644 --- a/packages/core-app-api/src/routing/collectors.tsx +++ b/packages/core-app-api/src/routing/collectors.tsx @@ -33,6 +33,7 @@ export const MATCH_ALL_ROUTE: BackstageRouteObject = { path: '*', element: 'match-all', // These elements aren't used, so we add in a bit of debug information routeRefs: new Set(), + plugins: new Set(), }; function stringifyNode(node: ReactNode): string { @@ -45,6 +46,16 @@ function stringifyNode(node: ReactNode): string { return String(anyNode); } +const pluginSet = ( + plugin: BackstagePlugin | undefined, +): Set => { + const set = new Set(); + if (plugin) { + set.add(plugin); + } + return set; +}; + interface RoutingV2CollectorContext { routeRef?: RouteRef; gatherPath?: string; @@ -132,7 +143,7 @@ export const routingV2Collector = createCollector( routeRefs: new Set(), caseSensitive: Boolean(node.props?.caseSensitive), children: [MATCH_ALL_ROUTE], - plugin: undefined, + plugins: new Set(), }; parentChildren.push(newObj); @@ -162,7 +173,7 @@ export const routingV2Collector = createCollector( routeRefs: new Set([routeRef]), caseSensitive: Boolean(node.props?.caseSensitive), children: [MATCH_ALL_ROUTE], - plugin, + plugins: pluginSet(plugin), }; parentChildren.push(newObj); acc.paths.set(routeRef, path); @@ -187,6 +198,15 @@ export const routingV2Collector = createCollector( } ctx?.obj?.routeRefs.add(mountPoint); + + const mountPointPlugin = getComponentData( + node, + 'core.plugin', + ); + if (mountPointPlugin) { + ctx?.obj?.plugins.add(mountPointPlugin); + } + acc.paths.set(mountPoint, ctx.gatherPath); acc.parents.set(mountPoint, ctx?.gatherRouteRef); @@ -306,9 +326,11 @@ export const routingV1Collector = createCollector( element: 'mounted', routeRefs: new Set([routeRef]), children: [MATCH_ALL_ROUTE], - plugin: getComponentData( - node.props.element, - 'core.plugin', + plugins: pluginSet( + getComponentData( + node.props.element, + 'core.plugin', + ), ), }; parentChildren.push(currentObj); @@ -336,7 +358,7 @@ export const routingV1Collector = createCollector( element: 'gathered', routeRefs: new Set(), children: [MATCH_ALL_ROUTE], - plugin: ctx?.obj?.plugin, + plugins: ctx?.obj?.plugins || new Set(), }; parentChildren.push(currentObj); } diff --git a/packages/core-app-api/src/routing/types.ts b/packages/core-app-api/src/routing/types.ts index e2cf665982..56b82e4b53 100644 --- a/packages/core-app-api/src/routing/types.ts +++ b/packages/core-app-api/src/routing/types.ts @@ -54,7 +54,7 @@ export interface BackstageRouteObject { element: React.ReactNode; path: string; routeRefs: Set; - plugin?: BackstagePlugin; + plugins: Set; } export function isRouteRef( diff --git a/packages/core-app-api/src/setupTests.ts b/packages/core-app-api/src/setupTests.ts index c1d649f2ad..963c0f188b 100644 --- a/packages/core-app-api/src/setupTests.ts +++ b/packages/core-app-api/src/setupTests.ts @@ -15,4 +15,3 @@ */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md index 5564031cb3..4ebd92ceb6 100644 --- a/packages/core-components/CHANGELOG.md +++ b/packages/core-components/CHANGELOG.md @@ -1,5 +1,102 @@ # @backstage/core-components +## 0.13.4-next.0 + +### Patch Changes + +- 3d86be999fdf: Prefer simple `theme.spacing` without string interpolation +- Updated dependencies + - @backstage/core-plugin-api@1.5.3 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + - @backstage/version-bridge@1.0.4 + +## 0.13.3 + +### Patch Changes + +- 7e0f558fbc37: The `Skip to content` button on click focuses on the main article tag and skips the `h1` tag. Users are not able to identify which page they are on currently. Now it's changed the behaviour of the button and focuses on the `h1` tag on the page. +- 68531cc70e1f: Break some internal circular import chains +- 4722c948c217: Parse unicode characters in name for avatar component +- 015439b5b6ca: Updated dependency `rc-progress` to `3.4.2`. +- 8174cf4c0edf: Fixing MUI / Material UI references +- 4317b1c2f430: Remove zooming in restrictions in the catalog graph +- a011d2316a58: Fix keyboard navigation & focus highlight on Select component. +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/core-plugin-api@1.5.3 + - @backstage/config@1.0.8 + - @backstage/version-bridge@1.0.4 + +## 0.13.3-next.2 + +### Patch Changes + +- 8174cf4c0edf: Fixing MUI / Material UI references +- 4317b1c2f430: Remove zooming in restrictions in the catalog graph +- Updated dependencies + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1-next.0 + - @backstage/version-bridge@1.0.4 + +## 0.13.3-next.1 + +### Patch Changes + +- 7e0f558fbc37: The `Skip to content` button on click focuses on the main article tag and skips the `h1` tag. Users are not able to identify which page they are on currently. Now it's changed the behaviour of the button and focuses on the `h1` tag on the page. +- 015439b5b6ca: Updated dependency `rc-progress` to `3.4.2`. +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/config@1.0.8 + +## 0.13.3-next.0 + +### Patch Changes + +- 68531cc70e1f: Break some internal circular import chains +- a011d2316a58: Fix keyboard navigation & focus highlight on Select component. +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/config@1.0.8 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/version-bridge@1.0.4 + +## 0.13.2 + +### Patch Changes + +- 4e697e88f0e2: Add resource utilization to Pod Drawer +- 78cbb8ef8aea: Enhance the sidebar item accessibility by using appropriate header semantics. +- 66ae4d8ca380: Added `exact` prop to `SidebarSubmenuItem` which causes it to only highlight if the current location is an exact match. +- 83bdc3a555c1: Replaced usages of `theme.palette.theme.hint` with `theme.palette.text.secondary` as it has been removed in Material UI v5 +- b4cc4b1415e9: SupportButton auto focus first item when opened. +- e33beb1f2a8e: Make the documentation pages printable (also handy for exporting to PDF) +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/errors@1.2.0 + - @backstage/config@1.0.8 + - @backstage/version-bridge@1.0.4 + +## 0.13.2-next.3 + +### Patch Changes + +- 78cbb8ef8aea: Enhance the sidebar item accessibility by using appropriate header semantics. +- e33beb1f2a8e: Make the documentation pages printable (also handy for exporting to PDF) +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/version-bridge@1.0.4 + ## 0.13.2-next.2 ### Patch Changes @@ -14,7 +111,7 @@ ### Patch Changes -- 83bdc3a555c1: Replaced usages of `theme.palette.theme.hint` with `theme.palette.text.secondary` as it has been removed in MUI v5 +- 83bdc3a555c1: Replaced usages of `theme.palette.theme.hint` with `theme.palette.text.secondary` as it has been removed in Material UI v5 - Updated dependencies - @backstage/errors@1.2.0-next.0 - @backstage/core-plugin-api@1.5.2-next.0 @@ -351,7 +448,7 @@ - 2e701b3796: Internal refactor to use `react-router-dom` rather than `react-router`. - d2e3bf6737: Made AlertDisplay not crash on undefined messages - 64a579a998: Add items prop to SupportButton. This prop can be used to override the items that would otherwise be grabbed from the config. -- 5d3058355d: Add `react/forbid-elements` linter rule for button, suggest MUI `Button` +- 5d3058355d: Add `react/forbid-elements` linter rule for button, suggest Material UI `Button` - 3280711113: Updated dependency `msw` to `^0.49.0`. - 19356df560: Updated dependency `zen-observable` to `^0.9.0`. - c3fa90e184: Updated dependency `zen-observable` to `^0.10.0`. diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 25c654e7d5..c9b1584b85 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.2-next.2", + "version": "0.13.4-next.0", "publishConfig": { "access": "public", "main": "dist/index.esm.js", @@ -60,7 +60,7 @@ "pluralize": "^8.0.0", "prop-types": "^15.7.2", "qs": "^6.9.4", - "rc-progress": "3.4.1", + "rc-progress": "3.4.2", "react-helmet": "6.1.0", "react-hook-form": "^7.12.2", "react-markdown": "^8.0.0", @@ -101,7 +101,6 @@ "@types/react-virtualized-auto-sizer": "^1.0.1", "@types/react-window": "^1.8.5", "@types/zen-observable": "^0.8.0", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "files": [ diff --git a/packages/core-components/src/components/Avatar/util.test.ts b/packages/core-components/src/components/Avatar/util.test.ts index 4d2b5417c0..6581df8b9a 100644 --- a/packages/core-components/src/components/Avatar/util.test.ts +++ b/packages/core-components/src/components/Avatar/util.test.ts @@ -27,6 +27,10 @@ describe('extractInitials', () => { expect(extractInitials('Jenny Doe')).toEqual('JD'); }); + it('extract unicode initials', async () => { + expect(extractInitials('Petr Čech')).toEqual('PČ'); + }); + it('extract single letter for short name', async () => { expect(extractInitials('Doe')).toEqual('D'); }); diff --git a/packages/core-components/src/components/Avatar/utils.ts b/packages/core-components/src/components/Avatar/utils.ts index 4f71d736f1..79627d5996 100644 --- a/packages/core-components/src/components/Avatar/utils.ts +++ b/packages/core-components/src/components/Avatar/utils.ts @@ -28,5 +28,8 @@ export function stringToColor(str: string) { } export function extractInitials(value: string) { - return value.match(/\b\w/g)?.join('').slice(0, 2); + return value + .match(/(?( container.call( d3Zoom .zoom() - .scaleExtent([1, 10]) + .scaleExtent([1, Infinity]) .on('zoom', event => { event.transform.x = Math.min( 0, diff --git a/packages/core-components/src/components/EmptyState/MissingAnnotationEmptyState.tsx b/packages/core-components/src/components/EmptyState/MissingAnnotationEmptyState.tsx index 6b336f5489..9fc9eee959 100644 --- a/packages/core-components/src/components/EmptyState/MissingAnnotationEmptyState.tsx +++ b/packages/core-components/src/components/EmptyState/MissingAnnotationEmptyState.tsx @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { BackstageTheme } from '@backstage/theme'; import Box from '@material-ui/core/Box'; import Button from '@material-ui/core/Button'; @@ -53,7 +54,7 @@ const useStyles = makeStyles( theme => ({ code: { borderRadius: 6, - margin: `${theme.spacing(2)}px 0px`, + margin: theme.spacing(2, 0), background: theme.palette.type === 'dark' ? '#444' : theme.palette.common.white, }, diff --git a/packages/core-components/src/components/LinkButton/LinkButton.stories.tsx b/packages/core-components/src/components/LinkButton/LinkButton.stories.tsx index ec9398e47d..da8ef51db1 100644 --- a/packages/core-components/src/components/LinkButton/LinkButton.stories.tsx +++ b/packages/core-components/src/components/LinkButton/LinkButton.stories.tsx @@ -46,7 +46,7 @@ export default { A collection of buttons that should be used in the Backstage interface. These leverage the properties inherited from{' '} - Material-UI Button + Material UI Button , but include an opinionated set that align to the Backstage design. @@ -131,7 +131,7 @@ export const ButtonLinks = () => { Route Ref -   has props for both Material-UI's component as well as for +   has props for both Material UI's component as well as for react-router-dom's Route object. @@ -151,7 +151,7 @@ export const ButtonLinks = () => { > View URL -   links to a defined URL using Material-UI's Button. +   links to a defined URL using Material UI's Button. @@ -162,7 +162,7 @@ export const ButtonLinks = () => { > Trigger Event -   triggers an onClick event using Material-UI's Button. +   triggers an onClick event using Material UI's Button. diff --git a/packages/core-components/src/components/LinkButton/LinkButton.tsx b/packages/core-components/src/components/LinkButton/LinkButton.tsx index 7da25bcb41..a093aa6628 100644 --- a/packages/core-components/src/components/LinkButton/LinkButton.tsx +++ b/packages/core-components/src/components/LinkButton/LinkButton.tsx @@ -26,7 +26,7 @@ import { Link, LinkProps } from '../Link'; * @public * @remarks * - * See {@link https://v4.mui.com/api/button/#props | Material-UI Button Props} for all properties + * See {@link https://v4.mui.com/api/button/#props | Material UI Button Props} for all properties */ export type LinkButtonProps = MaterialButtonProps & Omit; diff --git a/packages/core-components/src/components/ProgressBars/LinearGauge.test.tsx b/packages/core-components/src/components/ProgressBars/LinearGauge.test.tsx index f7260a9a65..1d76f59faf 100644 --- a/packages/core-components/src/components/ProgressBars/LinearGauge.test.tsx +++ b/packages/core-components/src/components/ProgressBars/LinearGauge.test.tsx @@ -34,4 +34,28 @@ describe('', () => { const { getByTitle } = await renderInTestApp(); expect(getByTitle('100%')).toBeInTheDocument(); }); + + it('renders thick', async () => { + const { container, getByTitle } = await renderInTestApp( + , + ); + expect(getByTitle('50%')).toBeInTheDocument(); + const linePaths = container.getElementsByClassName('rc-progress-line-path'); + expect(linePaths).toHaveLength(1); + const linePath = linePaths[0]; + expect(linePath).toHaveAttribute('stroke-width'); + expect(linePath.getAttribute('stroke-width')).toBe('4'); + }); + + it('renders thin', async () => { + const { container, getByTitle } = await renderInTestApp( + , + ); + expect(getByTitle('50%')).toBeInTheDocument(); + const linePaths = container.getElementsByClassName('rc-progress-line-path'); + expect(linePaths).toHaveLength(1); + const linePath = linePaths[0]; + expect(linePath).toHaveAttribute('stroke-width'); + expect(linePath.getAttribute('stroke-width')).toBe('1'); + }); }); diff --git a/packages/core-components/src/components/ProgressBars/LinearGauge.tsx b/packages/core-components/src/components/ProgressBars/LinearGauge.tsx index 5bfe1b7a61..8d45b83571 100644 --- a/packages/core-components/src/components/ProgressBars/LinearGauge.tsx +++ b/packages/core-components/src/components/ProgressBars/LinearGauge.tsx @@ -27,11 +27,12 @@ type Props = { * Progress value between 0.0 - 1.0. */ value: number; + width?: 'thick' | 'thin'; getColor?: GaugePropsGetColor; }; export function LinearGauge(props: Props) { - const { value, getColor = getProgressColor } = props; + const { value, getColor = getProgressColor, width = 'thick' } = props; const { palette } = useTheme(); if (isNaN(value)) { return null; @@ -40,6 +41,7 @@ export function LinearGauge(props: Props) { if (percent > 100) { percent = 100; } + const lineWidth = width === 'thick' ? 4 : 1; const strokeColor = getColor({ palette, value: percent, @@ -51,8 +53,8 @@ export function LinearGauge(props: Props) { diff --git a/packages/core-components/src/components/Select/Select.tsx b/packages/core-components/src/components/Select/Select.tsx index dbf5601112..918ce301fb 100644 --- a/packages/core-components/src/components/Select/Select.tsx +++ b/packages/core-components/src/components/Select/Select.tsx @@ -43,6 +43,9 @@ const BootstrapInput = withStyles( 'label + &': { marginTop: theme.spacing(3), }, + '&.Mui-focused > div[role=button]': { + borderColor: theme.palette.primary.main, + }, }, input: { borderRadius: theme.shape.borderRadius, @@ -75,7 +78,7 @@ const useStyles = makeStyles( (theme: Theme) => createStyles({ formControl: { - margin: `${theme.spacing(1)} 0px`, + margin: theme.spacing(1, 0), maxWidth: 300, }, label: { @@ -212,7 +215,6 @@ export function SelectComponent(props: SelectProps) { onClose={handleClose} input={} label={label} - tabIndex={0} renderValue={s => multiple && (value as any[]).length !== 0 ? ( diff --git a/packages/core-components/src/components/SupportButton/SupportButton.tsx b/packages/core-components/src/components/SupportButton/SupportButton.tsx index 35cf228f52..dcd4ead321 100644 --- a/packages/core-components/src/components/SupportButton/SupportButton.tsx +++ b/packages/core-components/src/components/SupportButton/SupportButton.tsx @@ -13,17 +13,16 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - import { useApp } from '@backstage/core-plugin-api'; import { BackstageTheme } from '@backstage/theme'; import Box from '@material-ui/core/Box'; import Button from '@material-ui/core/Button'; import DialogActions from '@material-ui/core/DialogActions'; import IconButton from '@material-ui/core/IconButton'; -import List from '@material-ui/core/List'; -import ListItem from '@material-ui/core/ListItem'; import ListItemIcon from '@material-ui/core/ListItemIcon'; import ListItemText from '@material-ui/core/ListItemText'; +import MenuItem from '@material-ui/core/MenuItem'; +import MenuList from '@material-ui/core/MenuList'; import Popover from '@material-ui/core/Popover'; import { makeStyles } from '@material-ui/core/styles'; import Typography from '@material-ui/core/Typography'; @@ -63,7 +62,7 @@ const SupportLink = ({ link }: { link: SupportItemLink }) => ( const SupportListItem = ({ item }: { item: SupportItem }) => { return ( - + @@ -78,7 +77,7 @@ const SupportListItem = ({ item }: { item: SupportItem }) => { [], )} /> - + ); }; @@ -141,21 +140,24 @@ export function SupportButton(props: SupportButtonProps) { }} onClose={popoverCloseHandler} > - + {title && ( - + {title} - + )} {React.Children.map(children, (child, i) => ( - + {child} - + ))} {(items ?? configItems).map((item, i) => ( ))} - + ); }; + +export const ViewComponentButton = ( + props: ComponentProps, +) => { + const classes = useStyles(); + + return ( + + {props.children} + + ); +}; diff --git a/plugins/catalog-import/src/components/DefaultImportPage/DefaultImportPage.tsx b/plugins/catalog-import/src/components/DefaultImportPage/DefaultImportPage.tsx index 30cce9603a..c777953808 100644 --- a/plugins/catalog-import/src/components/DefaultImportPage/DefaultImportPage.tsx +++ b/plugins/catalog-import/src/components/DefaultImportPage/DefaultImportPage.tsx @@ -22,7 +22,7 @@ import { SupportButton, } from '@backstage/core-components'; import { configApiRef, useApi } from '@backstage/core-plugin-api'; -import { Grid } from '@material-ui/core'; +import { Grid, useMediaQuery, useTheme } from '@material-ui/core'; import React from 'react'; import { ImportInfoCard } from '../ImportInfoCard'; import { ImportStepper } from '../ImportStepper'; @@ -33,9 +33,21 @@ import { ImportStepper } from '../ImportStepper'; * @public */ export const DefaultImportPage = () => { + const theme = useTheme(); const configApi = useApi(configApiRef); + const isMobile = useMediaQuery(theme.breakpoints.down('sm')); const appTitle = configApi.getOptional('app.title') || 'Backstage'; + const contentItems = [ + + + , + + + + , + ]; + return (
@@ -47,14 +59,8 @@ export const DefaultImportPage = () => { - - - - - - - - + + {isMobile ? contentItems : contentItems.reverse()} diff --git a/plugins/catalog-import/src/components/StepFinishImportLocation/StepFinishImportLocation.tsx b/plugins/catalog-import/src/components/StepFinishImportLocation/StepFinishImportLocation.tsx index 8d1a588079..38372e59ba 100644 --- a/plugins/catalog-import/src/components/StepFinishImportLocation/StepFinishImportLocation.tsx +++ b/plugins/catalog-import/src/components/StepFinishImportLocation/StepFinishImportLocation.tsx @@ -17,23 +17,45 @@ import { Grid, Typography } from '@material-ui/core'; import LocationOnIcon from '@material-ui/icons/LocationOn'; import React from 'react'; -import { BackButton } from '../Buttons'; +import { BackButton, ViewComponentButton } from '../Buttons'; import { EntityListComponent } from '../EntityListComponent'; import { PrepareResult } from '../useImportState'; import { Link } from '@backstage/core-components'; import partition from 'lodash/partition'; +import { CompoundEntityRef } from '@backstage/catalog-model'; +import { entityRouteRef } from '@backstage/plugin-catalog-react'; +import { useRouteRef } from '@backstage/core-plugin-api'; type Props = { prepareResult: PrepareResult; onReset: () => void; }; +// Among the newly registered entities, return a software entity (e.g. Component, API, Resource) +const filterComponentEntity = ( + newLocations: Array<{ + exists?: boolean; + target: string; + entities: CompoundEntityRef[]; + }>, +): CompoundEntityRef | null => { + for (const location of newLocations) { + for (const entity of location.entities) { + if ( + ['component', 'api', 'resource'].includes( + entity.kind.toLocaleLowerCase('en-US'), + ) + ) { + return entity; + } + } + } + + return null; +}; + export const StepFinishImportLocation = ({ prepareResult, onReset }: Props) => { - const continueButton = ( - - Register another - - ); + const entityRoute = useRouteRef(entityRouteRef); if (prepareResult.type === 'repository') { return ( @@ -48,12 +70,13 @@ export const StepFinishImportLocation = ({ prepareResult, onReset }: Props) => { {prepareResult.pullRequest.url} - Your entities will be imported as soon as the Pull Request is merged. - - {continueButton} + + Register another + + ; ); } @@ -62,7 +85,7 @@ export const StepFinishImportLocation = ({ prepareResult, onReset }: Props) => { prepareResult.locations, l => l.exists, ); - + const newComponentEntity = filterComponentEntity(newLocations); return ( <> {newLocations.length > 0 && ( @@ -91,7 +114,14 @@ export const StepFinishImportLocation = ({ prepareResult, onReset }: Props) => { /> )} - {continueButton} + + {newComponentEntity && ( + + View Component + + )} + Register another + ); }; diff --git a/plugins/catalog-import/src/components/StepInitAnalyzeUrl/StepInitAnalyzeUrl.test.tsx b/plugins/catalog-import/src/components/StepInitAnalyzeUrl/StepInitAnalyzeUrl.test.tsx index a9d662cab0..d8a12d0e5c 100644 --- a/plugins/catalog-import/src/components/StepInitAnalyzeUrl/StepInitAnalyzeUrl.test.tsx +++ b/plugins/catalog-import/src/components/StepInitAnalyzeUrl/StepInitAnalyzeUrl.test.tsx @@ -64,12 +64,8 @@ describe('', () => { wrapper: Wrapper, }); - expect( - screen.getByRole('textbox', { name: /Repository/i }), - ).toBeInTheDocument(); - expect(screen.getByRole('textbox', { name: /Repository/i })).toHaveValue( - '', - ); + expect(screen.getByRole('textbox', { name: /URL/i })).toBeInTheDocument(); + expect(screen.getByRole('textbox', { name: /URL/i })).toHaveValue(''); }); it('should use default analysis url', async () => { @@ -83,10 +79,8 @@ describe('', () => { }, ); - expect( - screen.getByRole('textbox', { name: /Repository/i }), - ).toBeInTheDocument(); - expect(screen.getByRole('textbox', { name: /Repository/i })).toHaveValue( + expect(screen.getByRole('textbox', { name: /URL/i })).toBeInTheDocument(); + expect(screen.getByRole('textbox', { name: /URL/i })).toHaveValue( 'https://default', ); }); @@ -120,7 +114,7 @@ describe('', () => { await act(async () => { await userEvent.type( - screen.getByRole('textbox', { name: /Repository/i }), + screen.getByRole('textbox', { name: /URL/i }), 'http:/', ); await userEvent.click(screen.getByRole('button', { name: /Analyze/i })); @@ -152,7 +146,7 @@ describe('', () => { await act(async () => { await userEvent.type( - screen.getByRole('textbox', { name: /Repository/i }), + screen.getByRole('textbox', { name: /URL/i }), 'https://my-repository', ); await userEvent.click(screen.getByRole('button', { name: /Analyze/i })); @@ -186,7 +180,7 @@ describe('', () => { await act(async () => { await userEvent.type( - screen.getByRole('textbox', { name: /Repository/i }), + screen.getByRole('textbox', { name: /URL/i }), 'https://my-repository-1', ); await userEvent.click(screen.getByRole('button', { name: /Analyze/i })); @@ -219,7 +213,7 @@ describe('', () => { await act(async () => { await userEvent.type( - screen.getByRole('textbox', { name: /Repository/i }), + screen.getByRole('textbox', { name: /URL/i }), 'https://my-repository-1', ); await userEvent.click(screen.getByRole('button', { name: /Analyze/i })); @@ -260,7 +254,7 @@ describe('', () => { await act(async () => { await userEvent.type( - screen.getByRole('textbox', { name: /Repository/i }), + screen.getByRole('textbox', { name: /URL/i }), 'https://my-repository-2', ); await userEvent.click(screen.getByRole('button', { name: /Analyze/i })); @@ -295,7 +289,7 @@ describe('', () => { await act(async () => { await userEvent.type( - screen.getByRole('textbox', { name: /Repository/i }), + screen.getByRole('textbox', { name: /URL/i }), 'https://my-repository-2', ); await userEvent.click(screen.getByRole('button', { name: /Analyze/i })); @@ -339,7 +333,7 @@ describe('', () => { await act(async () => { await userEvent.type( - screen.getByRole('textbox', { name: /Repository/i }), + screen.getByRole('textbox', { name: /URL/i }), 'https://my-repository-2', ); await userEvent.click(screen.getByRole('button', { name: /Analyze/i })); @@ -365,7 +359,7 @@ describe('', () => { await act(async () => { await userEvent.type( - screen.getByRole('textbox', { name: /Repository/i }), + screen.getByRole('textbox', { name: /URL/i }), 'https://my-repository-2', ); await userEvent.click(screen.getByRole('button', { name: /Analyze/i })); diff --git a/plugins/catalog-import/src/components/StepInitAnalyzeUrl/StepInitAnalyzeUrl.tsx b/plugins/catalog-import/src/components/StepInitAnalyzeUrl/StepInitAnalyzeUrl.tsx index 3c655ec11b..588217974c 100644 --- a/plugins/catalog-import/src/components/StepInitAnalyzeUrl/StepInitAnalyzeUrl.tsx +++ b/plugins/catalog-import/src/components/StepInitAnalyzeUrl/StepInitAnalyzeUrl.tsx @@ -147,7 +147,7 @@ export const StepInitAnalyzeUrl = (props: StepInitAnalyzeUrlProps) => { )} fullWidth id="url" - label="Repository URL" + label="URL" placeholder={exampleLocationUrl} helperText="Enter the full path to your entity file to start tracking your component" margin="normal" diff --git a/plugins/catalog-import/src/setupTests.ts b/plugins/catalog-import/src/setupTests.ts index c1d649f2ad..963c0f188b 100644 --- a/plugins/catalog-import/src/setupTests.ts +++ b/plugins/catalog-import/src/setupTests.ts @@ -15,4 +15,3 @@ */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/catalog-node/CHANGELOG.md b/plugins/catalog-node/CHANGELOG.md index 4d282e7db8..6299cd2424 100644 --- a/plugins/catalog-node/CHANGELOG.md +++ b/plugins/catalog-node/CHANGELOG.md @@ -1,5 +1,86 @@ # @backstage/plugin-catalog-node +## 1.4.1-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + - @backstage/plugin-catalog-common@1.0.15 + +## 1.4.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + - @backstage/plugin-catalog-common@1.0.15 + +## 1.4.0 + +### Minor Changes + +- f06f0e46ba88: Support placeholder resolvers in the CatalogPlugin, also moves `PlaceholderResolver` and related types from `@backstage/plugin-catalog-backend` to `@backstage/plugin-catalog-node`. + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/types@1.1.0 + - @backstage/plugin-catalog-common@1.0.15 + +## 1.4.0-next.0 + +### Minor Changes + +- f06f0e46ba88: Support placeholder resolvers in the CatalogPlugin, also moves `PlaceholderResolver` and related types from `@backstage/plugin-catalog-backend` to `@backstage/plugin-catalog-node`. + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/types@1.1.0 + - @backstage/plugin-catalog-common@1.0.15-next.0 + +## 1.3.7 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-client@1.4.2 + - @backstage/types@1.1.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + - @backstage/backend-plugin-api@0.5.3 + - @backstage/plugin-catalog-common@1.0.14 + +## 1.3.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/catalog-client@1.4.2-next.2 + - @backstage/errors@1.2.0-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.14-next.1 + ## 1.3.7-next.1 ### Patch Changes diff --git a/plugins/catalog-node/alpha-api-report.md b/plugins/catalog-node/alpha-api-report.md index ba1bcd47b2..082228a58e 100644 --- a/plugins/catalog-node/alpha-api-report.md +++ b/plugins/catalog-node/alpha-api-report.md @@ -7,6 +7,7 @@ import { CatalogApi } from '@backstage/catalog-client'; import { CatalogProcessor } from '@backstage/plugin-catalog-node'; import { EntityProvider } from '@backstage/plugin-catalog-node'; import { ExtensionPoint } from '@backstage/backend-plugin-api'; +import { PlaceholderResolver } from '@backstage/plugin-catalog-node'; import { ServiceRef } from '@backstage/backend-plugin-api'; // @alpha (undocumented) @@ -16,6 +17,8 @@ export interface CatalogProcessingExtensionPoint { ...providers: Array> ): void; // (undocumented) + addPlaceholderResolver(key: string, resolver: PlaceholderResolver): void; + // (undocumented) addProcessor( ...processors: Array> ): void; diff --git a/plugins/catalog-node/api-report.md b/plugins/catalog-node/api-report.md index 47a8e66ca9..34d7a4bc9b 100644 --- a/plugins/catalog-node/api-report.md +++ b/plugins/catalog-node/api-report.md @@ -152,6 +152,30 @@ export function locationSpecToLocationEntity(opts: { // @public export function locationSpecToMetadataName(location: LocationSpec_2): string; +// @public (undocumented) +export type PlaceholderResolver = ( + params: PlaceholderResolverParams, +) => Promise; + +// @public (undocumented) +export type PlaceholderResolverParams = { + key: string; + value: JsonValue; + baseUrl: string; + read: PlaceholderResolverRead; + resolveUrl: PlaceholderResolverResolveUrl; + emit: CatalogProcessorEmit; +}; + +// @public (undocumented) +export type PlaceholderResolverRead = (url: string) => Promise; + +// @public (undocumented) +export type PlaceholderResolverResolveUrl = ( + url: string, + base: string, +) => string; + // @public export const processingResult: Readonly<{ readonly notFoundError: ( diff --git a/plugins/catalog-node/package.json b/plugins/catalog-node/package.json index c4cbcd7b6b..5a10c9e000 100644 --- a/plugins/catalog-node/package.json +++ b/plugins/catalog-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-node", "description": "The plugin-catalog-node module for @backstage/plugin-catalog-backend", - "version": "1.3.7-next.1", + "version": "1.4.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -26,6 +26,12 @@ "backstage": { "role": "node-library" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/catalog-node" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", diff --git a/plugins/catalog-node/src/extensions.ts b/plugins/catalog-node/src/extensions.ts index 0466af36b0..5225ad7545 100644 --- a/plugins/catalog-node/src/extensions.ts +++ b/plugins/catalog-node/src/extensions.ts @@ -17,6 +17,7 @@ import { createExtensionPoint } from '@backstage/backend-plugin-api'; import { EntityProvider, CatalogProcessor, + PlaceholderResolver, } from '@backstage/plugin-catalog-node'; /** @@ -29,6 +30,7 @@ export interface CatalogProcessingExtensionPoint { addEntityProvider( ...providers: Array> ): void; + addPlaceholderResolver(key: string, resolver: PlaceholderResolver): void; } /** diff --git a/plugins/catalog-node/src/processing/index.ts b/plugins/catalog-node/src/processing/index.ts index 90b87aa850..40cee63e25 100644 --- a/plugins/catalog-node/src/processing/index.ts +++ b/plugins/catalog-node/src/processing/index.ts @@ -14,4 +14,10 @@ * limitations under the License. */ -export type { DeferredEntity } from './types'; +export type { + DeferredEntity, + PlaceholderResolver, + PlaceholderResolverParams, + PlaceholderResolverRead, + PlaceholderResolverResolveUrl, +} from './types'; diff --git a/plugins/catalog-node/src/processing/types.ts b/plugins/catalog-node/src/processing/types.ts index 25e76faea3..b98e2da1b7 100644 --- a/plugins/catalog-node/src/processing/types.ts +++ b/plugins/catalog-node/src/processing/types.ts @@ -15,6 +15,8 @@ */ import { Entity } from '@backstage/catalog-model'; +import { JsonValue } from '@backstage/types'; +import { CatalogProcessorEmit } from '../api'; /** * Entities that are not yet processed. @@ -24,3 +26,27 @@ export type DeferredEntity = { entity: Entity; locationKey?: string; }; + +/** @public */ +export type PlaceholderResolverRead = (url: string) => Promise; + +/** @public */ +export type PlaceholderResolverResolveUrl = ( + url: string, + base: string, +) => string; + +/** @public */ +export type PlaceholderResolverParams = { + key: string; + value: JsonValue; + baseUrl: string; + read: PlaceholderResolverRead; + resolveUrl: PlaceholderResolverResolveUrl; + emit: CatalogProcessorEmit; +}; + +/** @public */ +export type PlaceholderResolver = ( + params: PlaceholderResolverParams, +) => Promise; diff --git a/plugins/catalog-react/CHANGELOG.md b/plugins/catalog-react/CHANGELOG.md index cf21e2b26e..6ae43f297c 100644 --- a/plugins/catalog-react/CHANGELOG.md +++ b/plugins/catalog-react/CHANGELOG.md @@ -1,5 +1,145 @@ # @backstage/plugin-catalog-react +## 1.8.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/errors@1.2.1 + - @backstage/integration@1.5.1 + - @backstage/theme@0.4.1 + - @backstage/types@1.1.0 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-catalog-common@1.0.15 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-permission-react@0.4.14 + +## 1.8.0 + +### Minor Changes + +- eae0352d3864: Tables which use `EntityTableProps` now have an additional `tableOptions` prop which can be used to provide additional table options to these components. + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/integration@1.5.1 + - @backstage/types@1.1.0 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-catalog-common@1.0.15 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-permission-react@0.4.14 + +## 1.8.0-next.2 + +### Minor Changes + +- eae0352d3864: Tables which use `EntityTableProps` now have an additional `tableOptions` prop which can be used to provide additional table options to these components. + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/errors@1.2.1-next.0 + - @backstage/integration@1.5.1-next.0 + - @backstage/types@1.1.0 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-catalog-common@1.0.15-next.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + - @backstage/plugin-permission-react@0.4.14-next.2 + +## 1.7.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-permission-react@0.4.14-next.1 + +## 1.7.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/integration@1.5.1-next.0 + - @backstage/theme@0.4.0 + - @backstage/types@1.1.0 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-catalog-common@1.0.15-next.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + - @backstage/plugin-permission-react@0.4.14-next.0 + +## 1.7.0 + +### Minor Changes + +- cb4c15989b6b: The `EntityOwnerPicker` component has undergone improvements to enhance its performance. + The previous implementation inferred users and groups displayed by the `EntityOwnerPicker` component based on the entities available in the `EntityListContext`. The updated version no longer relies on the `EntityListContext` for inference, allowing for better decoupling and improved performance. + + The component now loads entities asynchronously, resulting in improved performance and responsiveness. A new `mode` prop has been introduced which provides two different behaviours: + + - ``: loads the owners data asynchronously using the facets endpoint. The data is kept in memory and rendered asynchronously as the user scrolls. This is the default mode and is supposed to be retro-compatible with the previous implementation. + + - `` loads all users and groups present in the catalog asynchronously. The data is loaded in batches as the user scrolls. This is more efficient than `owners-only`, but has the drawback of displaying users and groups who aren't owner of any entity. + +### Patch Changes + +- d68692aee97e: Make `useRelatedEntities` use `getEntitiesByRefs` under the hood +- 429319d080cd: `EntityAutocompletePicker` add `initialSelectedOptions` prop +- 429319d080cd: `EntityLifecycleFilter` loads data using the facets endpoint +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/catalog-client@1.4.2 + - @backstage/core-components@0.13.2 + - @backstage/types@1.1.0 + - @backstage/theme@0.4.0 + - @backstage/integration@1.5.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + - @backstage/plugin-permission-react@0.4.13 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-catalog-common@1.0.14 + - @backstage/plugin-permission-common@0.7.6 + +## 1.7.0-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/catalog-client@1.4.2-next.2 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/integration@1.5.0-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-catalog-common@1.0.14-next.1 + - @backstage/plugin-permission-common@0.7.6-next.0 + - @backstage/plugin-permission-react@0.4.13-next.0 + ## 1.7.0-next.2 ### Patch Changes diff --git a/plugins/catalog-react/api-report.md b/plugins/catalog-react/api-report.md index 2fab514de1..9bf87778dd 100644 --- a/plugins/catalog-react/api-report.md +++ b/plugins/catalog-react/api-report.md @@ -25,6 +25,7 @@ import { ScmIntegrationRegistry } from '@backstage/integration'; import { StyleRules } from '@material-ui/core/styles/withStyles'; import { SystemEntity } from '@backstage/catalog-model'; import { TableColumn } from '@backstage/core-components'; +import { TableOptions } from '@backstage/core-components'; // @public export const AsyncEntityProvider: ( @@ -266,7 +267,14 @@ export class EntityOwnerFilter implements EntityFilter { } // @public (undocumented) -export const EntityOwnerPicker: () => JSX.Element | null; +export const EntityOwnerPicker: ( + props?: EntityOwnerPickerProps, +) => JSX.Element | null; + +// @public (undocumented) +export type EntityOwnerPickerProps = { + mode?: 'owners-only' | 'all'; +}; // @public export const EntityPeekAheadPopover: ( @@ -388,6 +396,8 @@ export interface EntityTableProps { // (undocumented) entities: T[]; // (undocumented) + tableOptions?: TableOptions; + // (undocumented) title: string; // (undocumented) variant?: InfoCardVariants; diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index be6c89290c..67a3409830 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.7.0-next.2", + "version": "1.8.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -89,7 +89,6 @@ "@testing-library/user-event": "^14.0.0", "@types/jwt-decode": "^3.1.0", "@types/zen-observable": "^0.8.0", - "cross-fetch": "^3.1.5", "react-test-renderer": "^16.13.1" }, "files": [ diff --git a/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.test.tsx b/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.test.tsx index e5497d022a..a7b98e890f 100644 --- a/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.test.tsx +++ b/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.test.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import { Entity } from '@backstage/catalog-model'; +import { Entity, stringifyEntityRef } from '@backstage/catalog-model'; import { fireEvent, screen, waitFor } from '@testing-library/react'; import React from 'react'; import { MockEntityListContextProvider } from '../../testUtils/providers'; @@ -114,14 +114,18 @@ const mockedQueryEntities: jest.MockedFn = const mockedGetEntitiesByRef: jest.MockedFn = jest.fn(); +const mockedGetEntityFacets: jest.MockedFn = + jest.fn(); + const mockCatalogApi: Partial = { queryEntities: mockedQueryEntities, getEntitiesByRefs: mockedGetEntitiesByRef, + getEntityFacets: mockedGetEntityFacets, }; const mockErrorApi = new MockErrorApi(); -describe('', () => { +describe('', () => { const mockApis = TestApiRegistry.from( [catalogApiRef, mockCatalogApi], [errorApiRef, mockErrorApi], @@ -154,7 +158,7 @@ describe('', () => { await renderWithEffects( - + , ); @@ -205,7 +209,7 @@ describe('', () => { queryParameters, }} > - + , ); @@ -243,7 +247,7 @@ describe('', () => { queryParameters, }} > - + , ); @@ -284,7 +288,7 @@ describe('', () => { updateFilters, }} > - + , ); @@ -312,7 +316,7 @@ describe('', () => { filters: { owners: new EntityOwnerFilter(['some-owner']) }, }} > - + , ); @@ -344,7 +348,7 @@ describe('', () => { queryParameters: { owners: ['team-a'] }, }} > - + , ); @@ -362,7 +366,180 @@ describe('', () => { queryParameters: { owners: ['team-b'] }, }} > - + + + , + ); + expect(updateFilters).toHaveBeenLastCalledWith({ + owners: new EntityOwnerFilter(['group:default/team-b']), + }); + }); +}); + +describe('', () => { + const mockApis = TestApiRegistry.from( + [catalogApiRef, mockCatalogApi], + [errorApiRef, mockErrorApi], + ); + + beforeEach(() => { + jest.resetAllMocks(); + + mockedGetEntityFacets.mockResolvedValue({ + facets: { + 'relations.ownedBy': [ + ...[...ownerEntitiesBatch1, ...ownerEntitiesBatch2].map(o => ({ + count: 1, + value: stringifyEntityRef(o), + })), + ], + }, + }); + }); + + it('renders all users and groups', async () => { + await renderWithEffects( + + + + + , + ); + expect(screen.getByText('Owner')).toBeInTheDocument(); + + fireEvent.click(screen.getByTestId('owner-picker-expand')); + + await waitFor(() => + expect(screen.getByText('another-owner')).toBeInTheDocument(), + ); + + ['some-owner', 'some-owner-2', 'test-namespace/another-owner-2'].forEach( + owner => { + expect(screen.getByText(owner)).toBeInTheDocument(); + }, + ); + + expect(mockedGetEntityFacets).toHaveBeenCalledTimes(1); + + fireEvent.scroll(screen.getByTestId('owner-picker-listbox')); + + await waitFor(() => + expect(screen.getByText('some-owner-batch-2')).toBeInTheDocument(), + ); + + [ + 'some-owner-batch-2', + 'some-owner-2-batch-2', + 'test-namespace/another-owner-2-batch-2', + ].forEach(owner => { + expect(screen.getByText(owner)).toBeInTheDocument(); + }); + }); + + it('respects the query parameter filter value', async () => { + const updateFilters = jest.fn(); + const queryParameters = { owners: ['another-owner'] }; + await renderWithEffects( + + + + + , + ); + + expect(updateFilters).toHaveBeenLastCalledWith({ + owners: new EntityOwnerFilter(['group:default/another-owner']), + }); + }); + + it('adds owners to filters', async () => { + const updateFilters = jest.fn(); + await renderWithEffects( + + + + + , + ); + expect(mockedGetEntitiesByRef).not.toHaveBeenCalled(); + expect(updateFilters).toHaveBeenLastCalledWith({ + owners: undefined, + }); + + fireEvent.click(screen.getByTestId('owner-picker-expand')); + await waitFor(() => screen.getByText('some-owner')); + + fireEvent.click(screen.getByText('some-owner')); + expect(updateFilters).toHaveBeenLastCalledWith({ + owners: new EntityOwnerFilter(['group:default/some-owner']), + }); + }); + + it('removes owners from filters', async () => { + const updateFilters = jest.fn(); + await renderWithEffects( + + + + + , + ); + expect(updateFilters).toHaveBeenLastCalledWith({ + owners: new EntityOwnerFilter(['group:default/some-owner']), + }); + fireEvent.click(screen.getByTestId('owner-picker-expand')); + + await waitFor(() => + expect(screen.getByLabelText('some-owner')).toBeChecked(), + ); + + fireEvent.click(screen.getByLabelText('some-owner')); + expect(updateFilters).toHaveBeenLastCalledWith({ + owner: undefined, + }); + }); + + it('responds to external queryParameters changes', async () => { + const updateFilters = jest.fn(); + const rendered = await renderWithEffects( + + + + + , + ); + + expect(updateFilters).toHaveBeenLastCalledWith({ + owners: new EntityOwnerFilter(['group:default/team-a']), + }); + rendered.rerender( + + + , ); diff --git a/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.tsx b/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.tsx index 8b223c50b1..ed22e126c5 100644 --- a/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.tsx +++ b/plugins/catalog-react/src/components/EntityOwnerPicker/EntityOwnerPicker.tsx @@ -14,7 +14,11 @@ * limitations under the License. */ -import { Entity, stringifyEntityRef } from '@backstage/catalog-model'; +import { + Entity, + parseEntityRef, + stringifyEntityRef, +} from '@backstage/catalog-model'; import { Box, Checkbox, @@ -27,17 +31,14 @@ import CheckBoxIcon from '@material-ui/icons/CheckBox'; import CheckBoxOutlineBlankIcon from '@material-ui/icons/CheckBoxOutlineBlank'; import ExpandMoreIcon from '@material-ui/icons/ExpandMore'; import { Autocomplete } from '@material-ui/lab'; -import React, { useEffect, useMemo, useRef, useState } from 'react'; +import React, { useEffect, useMemo, useState } from 'react'; import { useEntityList } from '../../hooks/useEntityListProvider'; import { EntityOwnerFilter } from '../../filters'; -import { useApi } from '@backstage/core-plugin-api'; -import { catalogApiRef } from '../../api'; -import useAsync from 'react-use/lib/useAsync'; -import useAsyncFn from 'react-use/lib/useAsyncFn'; import { useDebouncedEffect } from '@react-hookz/web'; import PersonIcon from '@material-ui/icons/Person'; import GroupIcon from '@material-ui/icons/Group'; -import { humanizeEntity } from '../EntityRefLink/humanize'; +import { humanizeEntity, humanizeEntityRef } from '../EntityRefLink/humanize'; +import { useFetchEntities } from './useFetchEntities'; /** @public */ export type CatalogReactEntityOwnerPickerClassKey = 'input'; @@ -54,57 +55,25 @@ const useStyles = makeStyles( const icon = ; const checkedIcon = ; +/** + * @public + */ +export type EntityOwnerPickerProps = { + mode?: 'owners-only' | 'all'; +}; + /** @public */ -export const EntityOwnerPicker = () => { +export const EntityOwnerPicker = (props?: EntityOwnerPickerProps) => { const classes = useStyles(); + const { mode = 'owners-only' } = props || {}; const { updateFilters, filters, queryParameters: { owners: ownersParameter }, } = useEntityList(); - const catalogApi = useApi(catalogApiRef); const [text, setText] = useState(''); - const [{ value, loading }, handleFetch] = useAsyncFn( - async (request: { text: string } | { cursor: string; prev: Entity[] }) => { - const initialRequest = request as { text: string }; - const cursorRequest = request as { cursor: string; prev: Entity[] }; - const limit = 20; - - if (cursorRequest.cursor) { - const response = await catalogApi.queryEntities({ - cursor: cursorRequest.cursor, - limit, - }); - return { - ...response, - items: [...cursorRequest.prev, ...response.items], - }; - } - - return catalogApi.queryEntities({ - fullTextFilter: { - term: initialRequest.text || '', - fields: [ - 'metadata.name', - 'kind', - 'spec.profile.displayname', - 'metadata.title', - ], - }, - filter: { kind: ['User', 'Group'] }, - orderFields: [{ field: 'metadata.name', order: 'asc' }], - limit, - }); - }, - [text], - ); - - useDebouncedEffect(() => handleFetch({ text }), [text], 250); - - const availableOwners = value?.items || []; - const queryParamOwners = useMemo( () => [ownersParameter].flat().filter(Boolean) as string[], [ownersParameter], @@ -114,7 +83,13 @@ export const EntityOwnerPicker = () => { queryParamOwners.length ? queryParamOwners : filters.owners?.values ?? [], ); - const { getEntity, setEntity } = useSelectedOwners(selectedOwners); + const [{ value, loading }, handleFetch, cache] = useFetchEntities({ + mode, + initialSelectedOwnersRefs: selectedOwners, + }); + useDebouncedEffect(() => handleFetch({ text }), [text, handleFetch], 250); + + const availableOwners = value?.items || []; // Set selected owners on query parameter updates; this happens at initial page load and from // external updates to the page location. @@ -158,11 +133,15 @@ export const EntityOwnerPicker = () => { return o === v; }} getOptionLabel={o => { - const entity = typeof o === 'string' ? getEntity(o) || o : o; - - return typeof entity === 'string' - ? entity - : humanizeEntity(entity, entity.metadata.name); + const entity = + typeof o === 'string' + ? cache.getEntity(o) || + parseEntityRef(o, { + defaultKind: 'group', + defaultNamespace: 'default', + }) + : o; + return humanizeEntity(entity, humanizeEntityRef(entity)); }} onChange={(_: object, owners) => { setText(''); @@ -172,7 +151,7 @@ export const EntityOwnerPicker = () => { typeof e === 'string' ? e : stringifyEntityRef(e); if (typeof e !== 'string') { - setEntity(e); + cache.setEntity(e); } return entityRef; @@ -181,7 +160,7 @@ export const EntityOwnerPicker = () => { }} filterOptions={x => x} renderOption={(entity, { selected }) => { - const isGroup = entity.kind === 'Group'; + const isGroup = entity.kind.toLocaleLowerCase('en-US') === 'group'; return ( { )}   - {humanizeEntity(entity, entity.metadata.name)} + {humanizeEntity( + entity, + humanizeEntityRef(entity, { defaultKind: entity.kind }), + )} } /> @@ -229,11 +211,8 @@ export const EntityOwnerPicker = () => { element.scrollTop, ) < 1; - if (hasReachedEnd && value?.pageInfo.nextCursor) { - handleFetch({ - cursor: value.pageInfo.nextCursor, - prev: value.items, - }); + if (hasReachedEnd && value?.cursor) { + handleFetch({ items: value.items, cursor: value.cursor }); } }, 'data-testid': 'owner-picker-listbox', @@ -243,36 +222,3 @@ export const EntityOwnerPicker = () => { ); }; - -/** - * Hook used for storing the full entity of the specified owners - * in order to display users and group using the information contained on each entity. - * When a component is rendered for the first time, it loads the content of the entities - * specified by `initialSelectedOwnersRefs` and export the `getEntity` and `setEntity` - * utilities, used to retrieve and modify the owners. - */ -function useSelectedOwners(initialSelectedOwnersRefs: string[]) { - const allEntities = useRef>({}); - const catalogApi = useApi(catalogApiRef); - - useAsync(async () => { - if (initialSelectedOwnersRefs.length === 0) { - return; - } - const initialSelectedEntities = await catalogApi.getEntitiesByRefs({ - entityRefs: initialSelectedOwnersRefs, - }); - initialSelectedEntities.items.forEach(e => { - if (e) { - allEntities.current[stringifyEntityRef(e)] = e; - } - }); - }, []); - - return { - getEntity: (entityRef: string) => allEntities.current[entityRef], - setEntity: (entity: Entity) => { - allEntities.current[stringifyEntityRef(entity)] = entity; - }, - }; -} diff --git a/plugins/catalog-react/src/components/EntityOwnerPicker/index.ts b/plugins/catalog-react/src/components/EntityOwnerPicker/index.ts index c20db945f7..8685d838cd 100644 --- a/plugins/catalog-react/src/components/EntityOwnerPicker/index.ts +++ b/plugins/catalog-react/src/components/EntityOwnerPicker/index.ts @@ -15,4 +15,7 @@ */ export { EntityOwnerPicker } from './EntityOwnerPicker'; -export type { CatalogReactEntityOwnerPickerClassKey } from './EntityOwnerPicker'; +export type { + CatalogReactEntityOwnerPickerClassKey, + EntityOwnerPickerProps, +} from './EntityOwnerPicker'; diff --git a/plugins/catalog-react/src/components/EntityOwnerPicker/useFacetsEntities.test.ts b/plugins/catalog-react/src/components/EntityOwnerPicker/useFacetsEntities.test.ts new file mode 100644 index 0000000000..6f6da43307 --- /dev/null +++ b/plugins/catalog-react/src/components/EntityOwnerPicker/useFacetsEntities.test.ts @@ -0,0 +1,299 @@ +/* + * 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 { renderHook } from '@testing-library/react-hooks'; +import { useFacetsEntities } from './useFacetsEntities'; +import { CatalogApi } from '@backstage/catalog-client'; + +const mockedGetEntityFacets: jest.MockedFn = + jest.fn(); + +const mockCatalogApi: Partial = { + getEntityFacets: mockedGetEntityFacets, +}; + +jest.mock('@backstage/core-plugin-api', () => ({ + ...jest.requireActual('@backstage/core-plugin-api'), + useApi: () => mockCatalogApi, +})); + +describe('useFacetsEntities', () => { + afterEach(() => { + jest.resetAllMocks(); + }); + + it(`should return empty items when facets are loading`, () => { + mockedGetEntityFacets.mockReturnValue(new Promise(() => {})); + const { result } = renderHook(() => useFacetsEntities({ enabled: true })); + expect(result.current[0]).toEqual({ value: { items: [] }, loading: true }); + }); + + it(`should return the owners`, async () => { + mockedGetEntityFacets.mockResolvedValue({ + facets: { + 'relations.ownedBy': [ + { count: 1, value: 'component:default/e2' }, + { count: 1, value: 'component:default/e1' }, + ], + }, + }); + + const { result, waitFor } = renderHook(() => + useFacetsEntities({ enabled: true }), + ); + + result.current[1]({ text: '' }); + await waitFor(() => { + expect(result.current[0]).toEqual({ + value: { + items: [ + { + apiVersion: 'backstage.io/v1beta1', + kind: 'component', + metadata: { name: 'e1', namespace: 'default' }, + }, + { + apiVersion: 'backstage.io/v1beta1', + kind: 'component', + metadata: { name: 'e2', namespace: 'default' }, + }, + ], + }, + loading: false, + }); + }); + }); + + it(`should return the owners sorted by namespace, name and kind`, async () => { + const entityRefs = [ + 'group:namespace/team-b', + 'component:default/c', + 'group:default/a', + 'component:default/a', + 'component:default/b', + ]; + + mockedGetEntityFacets.mockResolvedValue({ + facets: { + 'relations.ownedBy': entityRefs.map(value => ({ count: 1, value })), + }, + }); + + const { result, waitFor } = renderHook(() => + useFacetsEntities({ enabled: true }), + ); + + result.current[1]({ text: '' }); + await waitFor(() => { + expect(result.current[0]).toEqual({ + value: { + items: [ + { + apiVersion: 'backstage.io/v1beta1', + kind: 'component', + metadata: { name: 'a', namespace: 'default' }, + }, + { + apiVersion: 'backstage.io/v1beta1', + kind: 'group', + metadata: { name: 'a', namespace: 'default' }, + }, + { + apiVersion: 'backstage.io/v1beta1', + kind: 'component', + metadata: { name: 'b', namespace: 'default' }, + }, + { + apiVersion: 'backstage.io/v1beta1', + kind: 'component', + metadata: { name: 'c', namespace: 'default' }, + }, + { + apiVersion: 'backstage.io/v1beta1', + kind: 'group', + metadata: { name: 'team-b', namespace: 'namespace' }, + }, + ], + }, + loading: false, + }); + }); + }); + + it(`should paginate the data accordingly`, async () => { + const entityRefs = [ + 'group:namespace/team-b', + 'component:default/c', + 'group:default/a', + 'component:default/a', + 'component:default/b', + ]; + + mockedGetEntityFacets.mockResolvedValue({ + facets: { + 'relations.ownedBy': entityRefs.map(value => ({ count: 1, value })), + }, + }); + + const { result, waitFor } = renderHook(() => + useFacetsEntities({ enabled: true }), + ); + + result.current[1]({ text: '' }, { limit: 2 }); + await waitFor(() => { + expect(result.current[0]).toEqual({ + value: { + items: [ + { + apiVersion: 'backstage.io/v1beta1', + kind: 'component', + metadata: { name: 'a', namespace: 'default' }, + }, + { + apiVersion: 'backstage.io/v1beta1', + kind: 'group', + metadata: { name: 'a', namespace: 'default' }, + }, + ], + cursor: 'eyJ0ZXh0IjoiIiwic3RhcnQiOjJ9', + }, + loading: false, + }); + }); + + result.current[1](result.current[0].value!, { limit: 2 }); + await waitFor(() => { + expect(result.current[0]).toEqual({ + value: { + items: [ + { + apiVersion: 'backstage.io/v1beta1', + kind: 'component', + metadata: { name: 'a', namespace: 'default' }, + }, + { + apiVersion: 'backstage.io/v1beta1', + kind: 'group', + metadata: { name: 'a', namespace: 'default' }, + }, + { + apiVersion: 'backstage.io/v1beta1', + kind: 'component', + metadata: { name: 'b', namespace: 'default' }, + }, + { + apiVersion: 'backstage.io/v1beta1', + kind: 'component', + metadata: { name: 'c', namespace: 'default' }, + }, + ], + cursor: 'eyJ0ZXh0IjoiIiwic3RhcnQiOjR9', + }, + loading: false, + }); + }); + + result.current[1](result.current[0].value!, { limit: 2 }); + await waitFor(() => { + expect(result.current[0]).toEqual({ + value: { + items: [ + { + apiVersion: 'backstage.io/v1beta1', + kind: 'component', + metadata: { name: 'a', namespace: 'default' }, + }, + { + apiVersion: 'backstage.io/v1beta1', + kind: 'group', + metadata: { name: 'a', namespace: 'default' }, + }, + { + apiVersion: 'backstage.io/v1beta1', + kind: 'component', + metadata: { name: 'b', namespace: 'default' }, + }, + { + apiVersion: 'backstage.io/v1beta1', + kind: 'component', + metadata: { name: 'c', namespace: 'default' }, + }, + { + apiVersion: 'backstage.io/v1beta1', + kind: 'group', + metadata: { name: 'team-b', namespace: 'namespace' }, + }, + ], + }, + loading: false, + }); + }); + }); + + it('should filter the data accordingly', async () => { + const entityRefs = [ + 'group:namespace/spiderman', + 'group:spiders/go', + 'group:default/go', + 'component:spiders/a-component', + 'component:default/a-component', + 'component:default/spider', + 'spid:default/lemon', + 'component:default/lemon', + 'component:default/nade', + ]; + + mockedGetEntityFacets.mockResolvedValue({ + facets: { + 'relations.ownedBy': entityRefs.map(value => ({ count: 1, value })), + }, + }); + + const { result, waitFor } = renderHook(() => + useFacetsEntities({ enabled: true }), + ); + + result.current[1]({ text: 'der ' }); + await waitFor(() => { + expect(result.current[0]).toEqual({ + value: { + items: [ + { + apiVersion: 'backstage.io/v1beta1', + kind: 'component', + metadata: { name: 'spider', namespace: 'default' }, + }, + { + apiVersion: 'backstage.io/v1beta1', + kind: 'group', + metadata: { name: 'spiderman', namespace: 'namespace' }, + }, + { + apiVersion: 'backstage.io/v1beta1', + kind: 'component', + metadata: { name: 'a-component', namespace: 'spiders' }, + }, + { + apiVersion: 'backstage.io/v1beta1', + kind: 'group', + metadata: { name: 'go', namespace: 'spiders' }, + }, + ], + }, + loading: false, + }); + }); + }); +}); diff --git a/plugins/catalog-react/src/components/EntityOwnerPicker/useFacetsEntities.ts b/plugins/catalog-react/src/components/EntityOwnerPicker/useFacetsEntities.ts new file mode 100644 index 0000000000..b9af10b697 --- /dev/null +++ b/plugins/catalog-react/src/components/EntityOwnerPicker/useFacetsEntities.ts @@ -0,0 +1,154 @@ +/* + * 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 { useApi } from '@backstage/core-plugin-api'; +import useAsyncFn from 'react-use/lib/useAsyncFn'; +import { catalogApiRef } from '../../api'; +import { useState } from 'react'; +import { Entity, parseEntityRef } from '@backstage/catalog-model'; + +type FacetsCursor = { + start: number; + text: string; +}; + +type FacetsEntitiesResponse = { + items: Entity[]; + cursor?: string; +}; + +type FacetsInitialRequest = { + text: string; +}; + +/** + * This hook asynchronously loads the entity owners using the facets endpoint. + * EntityOwnerPicker uses this hook when mode="owners-only" is passed as prop. + * All the owners are kept internally in memory and rendered in batches once requested + * by the frontend. The values returned by this hook are compatible with `useQueryEntities` + * hook, which is also used by EntityOwnerPicker. + */ +export function useFacetsEntities({ enabled }: { enabled: boolean }) { + const catalogApi = useApi(catalogApiRef); + + const [facetsPromise] = useState(async () => { + if (!enabled) { + return []; + } + const facet = 'relations.ownedBy'; + return catalogApi + .getEntityFacets({ facets: [facet] }) + .then(response => + response.facets[facet] + .map(e => e.value) + .map(ref => { + const { kind, name, namespace } = parseEntityRef(ref); + return { + apiVersion: 'backstage.io/v1beta1', + kind, + metadata: { name, namespace }, + }; + }) + .sort( + (a, b) => + (a.metadata.namespace || '').localeCompare( + b.metadata.namespace || '', + 'en-US', + ) || + a.metadata.name.localeCompare(b.metadata.name, 'en-US') || + a.kind.localeCompare(b.kind, 'en-US'), + ), + ) + .catch(() => []); + }); + + return useAsyncFn< + ( + request: FacetsInitialRequest | FacetsEntitiesResponse, + options?: { limit?: number }, + ) => Promise + >( + async (request, options) => { + const facets = await facetsPromise; + + if (!facets) { + return { + items: [], + }; + } + + const limit = options?.limit ?? 20; + + const { text, start } = decodeCursor(request); + const filteredRefs = facets.filter(e => filterEntity(text, e)); + const end = start + limit; + return { + items: filteredRefs.slice(0, end), + ...encodeCursor({ + entities: filteredRefs, + limit: end, + payload: { + text, + start: end, + }, + }), + }; + }, + [facetsPromise], + { loading: true, value: { items: [] } }, + ); +} + +function decodeCursor( + request: FacetsInitialRequest | FacetsEntitiesResponse, +): FacetsCursor { + if (isFacetsResponse(request) && request.cursor) { + return JSON.parse(atob(request.cursor)); + } + return { + text: (request as FacetsInitialRequest).text || '', + start: 0, + }; +} + +function isFacetsResponse( + request: FacetsInitialRequest | FacetsEntitiesResponse, +): request is FacetsEntitiesResponse { + return !!(request as FacetsEntitiesResponse).cursor; +} + +function encodeCursor({ + entities, + limit, + payload, +}: { + entities: Entity[]; + limit: number; + payload: { text: string; start: number }; +}) { + if (entities.length > limit) { + return { cursor: btoa(JSON.stringify(payload)) }; + } + return {}; +} + +function filterEntity(text: string, entity: Entity) { + const normalizedText = text.trim(); + return ( + entity.kind.includes(normalizedText) || + entity.metadata.namespace?.includes(normalizedText) || + entity.metadata.name.includes(normalizedText) + ); +} diff --git a/plugins/catalog-react/src/components/EntityOwnerPicker/useFetchEntities.ts b/plugins/catalog-react/src/components/EntityOwnerPicker/useFetchEntities.ts new file mode 100644 index 0000000000..01cef24fd6 --- /dev/null +++ b/plugins/catalog-react/src/components/EntityOwnerPicker/useFetchEntities.ts @@ -0,0 +1,92 @@ +/* + * 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 { useRef } from 'react'; +import { useFacetsEntities } from './useFacetsEntities'; +import { useQueryEntities } from './useQueryEntities'; +import { Entity, stringifyEntityRef } from '@backstage/catalog-model'; +import { useApi } from '@backstage/core-plugin-api'; +import { catalogApiRef } from '../../api'; +import useAsyncFn from 'react-use/lib/useAsyncFn'; +import { useMountEffect } from '@react-hookz/web'; + +export function useFetchEntities({ + mode, + initialSelectedOwnersRefs, +}: { + mode: 'owners-only' | 'all'; + initialSelectedOwnersRefs: string[]; +}) { + const isOwnersOnlyMode = mode === 'owners-only'; + const queryEntitiesResponse = useQueryEntities(); + const facetsEntitiesResponse = useFacetsEntities({ + enabled: isOwnersOnlyMode, + }); + + const [state, handleFetch] = isOwnersOnlyMode + ? facetsEntitiesResponse + : queryEntitiesResponse; + + return [ + state, + handleFetch, + useSelectedOwners({ + enabled: !isOwnersOnlyMode, + initialSelectedOwnersRefs, + }), + ] as const; +} + +/** + * Hook used for storing the full entity of the specified owners + * in order to display users and group using the information contained on each entity. + * When a component is rendered for the first time, it loads the content of the entities + * specified by `initialSelectedOwnersRefs` and export the `getEntity` and `setEntity` + * utilities, used to retrieve and modify the owners. + */ +function useSelectedOwners({ + enabled, + initialSelectedOwnersRefs, +}: { + enabled: boolean; + initialSelectedOwnersRefs: string[]; +}) { + const allEntities = useRef>({}); + const catalogApi = useApi(catalogApiRef); + + const [, handleFetch] = useAsyncFn(async () => { + const initialSelectedEntities = await catalogApi.getEntitiesByRefs({ + entityRefs: initialSelectedOwnersRefs, + }); + initialSelectedEntities.items.forEach(e => { + if (e) { + allEntities.current[stringifyEntityRef(e)] = e; + } + }); + }, []); + + useMountEffect(() => { + if (enabled && initialSelectedOwnersRefs.length > 0) { + handleFetch(); + } + }); + + return { + getEntity: (entityRef: string) => allEntities.current[entityRef], + setEntity: (entity: Entity) => { + allEntities.current[stringifyEntityRef(entity)] = entity; + }, + }; +} diff --git a/plugins/catalog-react/src/components/EntityOwnerPicker/useQueryEntities.test.ts b/plugins/catalog-react/src/components/EntityOwnerPicker/useQueryEntities.test.ts new file mode 100644 index 0000000000..d974709d34 --- /dev/null +++ b/plugins/catalog-react/src/components/EntityOwnerPicker/useQueryEntities.test.ts @@ -0,0 +1,106 @@ +/* + * 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 { renderHook } from '@testing-library/react-hooks'; +import { CatalogApi } from '@backstage/catalog-client'; +import { useQueryEntities } from './useQueryEntities'; + +const mockedQueryEntities: jest.MockedFn = + jest.fn(); + +const mockCatalogApi: Partial = { + queryEntities: mockedQueryEntities, +}; + +jest.mock('@backstage/core-plugin-api', () => ({ + ...jest.requireActual('@backstage/core-plugin-api'), + useApi: () => mockCatalogApi, +})); + +describe('useQueryEntities', () => { + afterEach(() => { + jest.resetAllMocks(); + }); + + it(`should not invoke queryEntities on mount`, () => { + mockedQueryEntities.mockResolvedValue({ + items: [], + pageInfo: {}, + totalItems: 0, + }); + + renderHook(() => useQueryEntities()); + expect(mockedQueryEntities).not.toHaveBeenCalled(); + }); + + it(`should fetch the data accordingly`, async () => { + mockedQueryEntities + .mockResolvedValueOnce({ + items: [ + { apiVersion: '1', kind: 'kind', metadata: { name: 'name-1' } }, + ], + pageInfo: { nextCursor: 'next' }, + totalItems: 2, + }) + .mockResolvedValueOnce({ + items: [ + { apiVersion: '1', kind: 'kind', metadata: { name: 'name-2' } }, + ], + pageInfo: {}, + totalItems: 2, + }); + + const { result, waitFor } = renderHook(() => useQueryEntities()); + const [, fetch] = result.current!; + fetch({ text: 'text' }); + + await waitFor(() => + expect(result.current[0].value!).toEqual({ + items: [ + { apiVersion: '1', kind: 'kind', metadata: { name: 'name-1' } }, + ], + cursor: 'next', + }), + ); + expect(mockedQueryEntities).toHaveBeenCalledWith({ + filter: { kind: ['User', 'Group'] }, + fullTextFilter: { + fields: [ + 'metadata.name', + 'kind', + 'spec.profile.displayname', + 'metadata.title', + ], + term: 'text', + }, + limit: 20, + orderFields: [{ field: 'metadata.name', order: 'asc' }], + }); + + fetch(result.current[0].value!); + await waitFor(() => + expect(result.current[0].value!).toEqual({ + items: [ + { apiVersion: '1', kind: 'kind', metadata: { name: 'name-1' } }, + { apiVersion: '1', kind: 'kind', metadata: { name: 'name-2' } }, + ], + }), + ); + expect(mockedQueryEntities).toHaveBeenCalledWith({ + cursor: 'next', + limit: 20, + }); + }); +}); diff --git a/plugins/catalog-react/src/components/EntityOwnerPicker/useQueryEntities.ts b/plugins/catalog-react/src/components/EntityOwnerPicker/useQueryEntities.ts new file mode 100644 index 0000000000..186cfa5566 --- /dev/null +++ b/plugins/catalog-react/src/components/EntityOwnerPicker/useQueryEntities.ts @@ -0,0 +1,71 @@ +/* + * 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 { useApi } from '@backstage/core-plugin-api'; +import { catalogApiRef } from '../../api'; +import useAsyncFn from 'react-use/lib/useAsyncFn'; +import { Entity } from '@backstage/catalog-model'; + +type QueryEntitiesResponse = { + items: Entity[]; + cursor?: string; +}; + +export function useQueryEntities() { + const catalogApi = useApi(catalogApiRef); + return useAsyncFn( + async ( + request: { text: string } | QueryEntitiesResponse, + options?: { limit: number }, + ): Promise => { + const initialRequest = request as { text: string }; + const cursorRequest = request as QueryEntitiesResponse; + const limit = options?.limit ?? 20; + + if (cursorRequest.cursor) { + const response = await catalogApi.queryEntities({ + cursor: cursorRequest.cursor, + limit, + }); + return { + cursor: response.pageInfo.nextCursor, + items: [...cursorRequest.items, ...response.items], + }; + } + + const response = await catalogApi.queryEntities({ + fullTextFilter: { + term: initialRequest.text || '', + fields: [ + 'metadata.name', + 'kind', + 'spec.profile.displayname', + 'metadata.title', + ], + }, + filter: { kind: ['User', 'Group'] }, + orderFields: [{ field: 'metadata.name', order: 'asc' }], + limit, + }); + + return { + cursor: response.pageInfo.nextCursor, + items: response.items, + }; + }, + [], + { loading: true }, + ); +} diff --git a/plugins/catalog-react/src/components/EntityTable/EntityTable.tsx b/plugins/catalog-react/src/components/EntityTable/EntityTable.tsx index 424d8b940e..360f0ee1ac 100644 --- a/plugins/catalog-react/src/components/EntityTable/EntityTable.tsx +++ b/plugins/catalog-react/src/components/EntityTable/EntityTable.tsx @@ -23,6 +23,7 @@ import { InfoCardVariants, Table, TableColumn, + TableOptions, } from '@backstage/core-components'; /** @@ -36,6 +37,7 @@ export interface EntityTableProps { entities: T[]; emptyContent?: ReactNode; columns: TableColumn[]; + tableOptions?: TableOptions; } const useStyles = makeStyles(theme => ({ @@ -59,6 +61,7 @@ export const EntityTable = (props: EntityTableProps) => { emptyContent, variant = 'gridItem', columns, + tableOptions = {}, } = props; const classes = useStyles(); @@ -86,6 +89,7 @@ export const EntityTable = (props: EntityTableProps) => { actionsColumnIndex: -1, padding: 'dense', draggable: false, + ...tableOptions, }} data={entities} /> diff --git a/plugins/catalog-react/src/setupTests.ts b/plugins/catalog-react/src/setupTests.ts index c1d649f2ad..963c0f188b 100644 --- a/plugins/catalog-react/src/setupTests.ts +++ b/plugins/catalog-react/src/setupTests.ts @@ -15,4 +15,3 @@ */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/catalog-unprocessed-entities/CHANGELOG.md b/plugins/catalog-unprocessed-entities/CHANGELOG.md index 2149bc4917..03f4ecc8fa 100644 --- a/plugins/catalog-unprocessed-entities/CHANGELOG.md +++ b/plugins/catalog-unprocessed-entities/CHANGELOG.md @@ -1,5 +1,114 @@ # @backstage/plugin-catalog-unprocessed-entities +## 0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + +## 0.1.1 + +### Patch Changes + +- 2c4869473155: The Catalog Unprocessed Entities plugin can now be integrated as a tab within the DevTools plugin + + - Added an export for `UnprocessedEntitiesContent` + - Updated the `README` with images of the features + - Adjusted the styles to fill in the available space + - Set the table page size to 20 as 40 was causing errors in the browser console + +- 57585d89f926: Export some types and API items. This allows people to call the API from different places with the ApiRef, as well + as completely customize the client if required. Check the [README.md](https://github.com/backstage/backstage/blob/master/plugins/catalog-unprocessed-entities/README.md) to + note what needs to be added in order to use the new `catalogUnprocessedEntitiesApiRef` exported function. +- a8fa79ccc105: Fix and improve documentation for the unprocessed entities modules. +- 267396f45bd0: Corrected the installation instructions. +- 7a9c8a9cd0ce: Fixed spacing for success message +- e6f50426333b: update some peer dependencies to silence yarn install +- 77b408fad872: install command points to correct package name +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + +## 0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/errors@1.2.1-next.0 + +## 0.1.1-next.1 + +### Patch Changes + +- 267396f45bd0: Corrected the installation instructions. +- 7a9c8a9cd0ce: Fixed spacing for success message +- 77b408fad872: install command points to correct package name +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + +## 0.1.1-next.0 + +### Patch Changes + +- 2c4869473155: The Catalog Unprocessed Entities plugin can now be integrated as a tab within the DevTools plugin + + - Added an export for `UnprocessedEntitiesContent` + - Updated the `README` with images of the features + - Adjusted the styles to fill in the available space + - Set the table page size to 20 as 40 was causing errors in the browser console + +- 57585d89f926: Export some types and API items. This allows people to call the API from different places with the ApiRef, as well + as completely customize the client if required. Check the [README.md](https://github.com/backstage/backstage/blob/master/plugins/catalog-unprocessed-entities/README.md) to + note what needs to be added in order to use the new `catalogUnprocessedEntitiesApiRef` exported function. +- a8fa79ccc105: Fix and improve documentation for the unprocessed entities modules. +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + +## 0.1.0 + +### Minor Changes + +- d44fcd9829c2: Added a new plugin to expose entities which are unprocessed or have errors processing + +### Patch Changes + +- 493eab8c577f: Use FetchApi instead of native fetch +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + +## 0.1.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/theme@0.4.0-next.1 + ## 0.1.0-next.1 ### Patch Changes diff --git a/plugins/catalog-unprocessed-entities/README.md b/plugins/catalog-unprocessed-entities/README.md index fd824bec94..3c9f649e37 100644 --- a/plugins/catalog-unprocessed-entities/README.md +++ b/plugins/catalog-unprocessed-entities/README.md @@ -1,16 +1,40 @@ -# catalog-unprocessed-entities +# Catalog Unprocessed Entities + +## Features Frontend plugin to view unprocessed entities. +### Failed Entities + +You can see entities that are in a failed state: + +![Example of failed entities tab](./docs/catalog-unprocessed-entities-failed.png) + +### Pending Entities + +You can see entities that are in a pending state: + +![Example of pending entities tab](./docs/catalog-unprocessed-entities-pending.png) + +### Raw View + +In either of the failed or pending tabs you have the option to see the raw entity as JSON: + +![Example of raw entity](./docs/catalog-unprocessed-entities-raw.png) + ## Requirements Requires the `@backstage/plugin-catalog-backend-module-unprocessed` module to be installed. ## Installation -Import into your App.tsx and include into the `` component: +```shell +yarn add --cwd packages/app @backstage/plugin-catalog-unprocessed-entities +``` -```tsx +Import into your `App.tsx` and include into the `` component: + +```tsx title="packages/app/src/App.tsx" import { CatalogUnprocessedEntitiesPage } from '@backstage/plugin-catalog-unprocessed-entities'; //... @@ -20,9 +44,44 @@ import { CatalogUnprocessedEntitiesPage } from '@backstage/plugin-catalog-unproc />; ``` +## Customization + +If you want to use the provided endpoints in a different way, you can use the ApiRef doing the following: + +```typescript +import { catalogUnprocessedEntitiesApiRef } from '@backstage/plugin-catalog-unprocessed-entities'; +import { useApi } from '@backstage/core-plugin-api'; + +const catalogUnprocessedEntitiesApi = useApi(catalogUnprocessedEntitiesApiRef); +``` + +Note that if you are not rendering the `CatalogUnprocessedEntitiesPage` in the `App.tsx` tree, you will need to export the `catalogUnproccessedEntitiesPlugin` from your `plugins.ts` file to setup the plugin otherwise you will receive an error like `No implementation available for apiRef{plugin.catalog-unprocessed-entities.service}` + +```typescript +// In packages/app/src/plugins.ts +... +export { catalogUnprocessedEntitiesPlugin } from '@backstage/plugin-catalog-unprocessed-entities'; +``` + +If you don't have a `plugins.ts` file, you can create it with the path `packages/app/src/plugins.ts` and then import it into your `App.tsx`: + +```diff ++ import * as plugins from './plugins'; + +const app = createApp({ + apis, ++ plugins: Object.values(plugins), + bindRoutes({ bind }) { + /* ... */ + }, +}); +``` + ## Getting started -Your plugin has been added to the example app in this repository, meaning you'll be able to access it by running `yarn start` in the root directory, and then navigating to [/catalog-unprocessed-entities](http://localhost:3000/catalog-unprocessed-entities). +Your plugin has been added to the example app in this repository, +meaning you'll be able to access it by running `yarn start` in the root directory, +and then navigating to [/catalog-unprocessed-entities](http://localhost:3000/catalog-unprocessed-entities). You can also serve the plugin in isolation by running `yarn start` in the plugin directory. This method of serving the plugin provides quicker iteration speed and a faster startup and hot reloads. diff --git a/plugins/catalog-unprocessed-entities/api-report.md b/plugins/catalog-unprocessed-entities/api-report.md index b1e0d6f53d..0ccf9716f2 100644 --- a/plugins/catalog-unprocessed-entities/api-report.md +++ b/plugins/catalog-unprocessed-entities/api-report.md @@ -5,9 +5,25 @@ ```ts /// +import { ApiRef } from '@backstage/core-plugin-api'; import { BackstagePlugin } from '@backstage/core-plugin-api'; +import { Entity } from '@backstage/catalog-model'; import { RouteRef } from '@backstage/core-plugin-api'; +// @public +export interface CatalogUnprocessedEntitiesApi { + failed(): Promise; + pending(): Promise; +} + +// @public +export const catalogUnprocessedEntitiesApiRef: ApiRef; + +// @public +export type CatalogUnprocessedEntitiesApiResponse = { + entities: UnprocessedEntity[]; +}; + // @public export const CatalogUnprocessedEntitiesPage: () => JSX.Element; @@ -20,5 +36,40 @@ export const catalogUnprocessedEntitiesPlugin: BackstagePlugin< {} >; +// @public (undocumented) +export const UnprocessedEntitiesContent: () => JSX.Element; + +// @public +export type UnprocessedEntity = { + entity_id: string; + entity_ref: string; + unprocessed_entity: Entity; + unprocessed_hash?: string; + processed_entity?: Entity; + result_hash?: string; + cache?: UnprocessedEntityCache; + next_update_at: string | Date; + last_discovery_at: string | Date; + errors?: UnprocessedEntityError[]; + location_key?: string; +}; + +// @public +export type UnprocessedEntityCache = { + ttl: number; + cache: object; +}; + +// @public +export type UnprocessedEntityError = { + name: string; + message: string; + cause: { + name: string; + message: string; + stack: string; + }; +}; + // (No @packageDocumentation comment for this package) ``` diff --git a/plugins/catalog-unprocessed-entities/docs/catalog-unprocessed-entities-failed.png b/plugins/catalog-unprocessed-entities/docs/catalog-unprocessed-entities-failed.png new file mode 100644 index 0000000000..9a65654630 Binary files /dev/null and b/plugins/catalog-unprocessed-entities/docs/catalog-unprocessed-entities-failed.png differ diff --git a/plugins/catalog-unprocessed-entities/docs/catalog-unprocessed-entities-pending.png b/plugins/catalog-unprocessed-entities/docs/catalog-unprocessed-entities-pending.png new file mode 100644 index 0000000000..d2924b0d7e Binary files /dev/null and b/plugins/catalog-unprocessed-entities/docs/catalog-unprocessed-entities-pending.png differ diff --git a/plugins/catalog-unprocessed-entities/docs/catalog-unprocessed-entities-raw.png b/plugins/catalog-unprocessed-entities/docs/catalog-unprocessed-entities-raw.png new file mode 100644 index 0000000000..3b63b00cda Binary files /dev/null and b/plugins/catalog-unprocessed-entities/docs/catalog-unprocessed-entities-raw.png differ diff --git a/plugins/catalog-unprocessed-entities/package.json b/plugins/catalog-unprocessed-entities/package.json index 3aa40fe1c0..ff09e9e7f5 100644 --- a/plugins/catalog-unprocessed-entities/package.json +++ b/plugins/catalog-unprocessed-entities/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-unprocessed-entities", - "version": "0.1.0-next.1", + "version": "0.1.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -12,6 +12,12 @@ "backstage": { "role": "frontend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/catalog-unprocessed-entities" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", @@ -33,7 +39,9 @@ "react-use": "^17.2.4" }, "peerDependencies": { - "react": "^16.13.1 || ^17.0.0" + "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:^", @@ -44,7 +52,6 @@ "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", "@types/node": "*", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/catalog-unprocessed-entities/src/api/index.ts b/plugins/catalog-unprocessed-entities/src/api/index.ts index a4f2294aac..92dde93a93 100644 --- a/plugins/catalog-unprocessed-entities/src/api/index.ts +++ b/plugins/catalog-unprocessed-entities/src/api/index.ts @@ -13,7 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { DiscoveryApi, createApiRef } from '@backstage/core-plugin-api'; +import { + DiscoveryApi, + createApiRef, + FetchApi, +} from '@backstage/core-plugin-api'; import { ResponseError } from '@backstage/errors'; import { UnprocessedEntity } from '../types'; @@ -28,20 +32,43 @@ export const catalogUnprocessedEntitiesApiRef = }); /** - * API client for the Catalog Unprocessed Entities plugin + * Response expected by the {@link CatalogUnprocessedEntitiesApi} * * @public */ -export class CatalogUnprocessedEntitiesApi { - url: string = ''; +export type CatalogUnprocessedEntitiesApiResponse = { + entities: UnprocessedEntity[]; +}; - constructor(public discovery: DiscoveryApi) {} +/** + * Interface for the CatalogUnprocessedEntitiesApi. + * + * @public + */ +export interface CatalogUnprocessedEntitiesApi { + /** + * Returns a list of entities with state 'pending' + */ + pending(): Promise; + /** + * Returns a list of entities with state 'failed' + */ + failed(): Promise; +} + +/** + * Default API implementation for the Catalog Unprocessed Entities plugin + * + * @public + */ +export class CatalogUnprocessedEntitiesClient + implements CatalogUnprocessedEntitiesApi +{ + constructor(public discovery: DiscoveryApi, public fetchApi: FetchApi) {} private async fetch(path: string, init?: RequestInit): Promise { - if (!this.url) { - this.url = await this.discovery.getBaseUrl('catalog'); - } - const resp = await fetch(`${this.url}/${path}`, init); + const url = await this.discovery.getBaseUrl('catalog'); + const resp = await this.fetchApi.fetch(`${url}/${path}`, init); if (!resp.ok) { throw await ResponseError.fromResponse(resp); } @@ -49,11 +76,11 @@ export class CatalogUnprocessedEntitiesApi { return await resp.json(); } - async pending(): Promise<{ entities: UnprocessedEntity[] }> { + async pending(): Promise { return await this.fetch('entities/unprocessed/pending'); } - async failed(): Promise<{ entities: UnprocessedEntity[] }> { + async failed(): Promise { return await this.fetch('entities/unprocessed/failed'); } } diff --git a/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx b/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx index 44a146f027..7bc5d85f50 100644 --- a/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx +++ b/plugins/catalog-unprocessed-entities/src/components/FailedEntities.tsx @@ -23,15 +23,14 @@ import { TableColumn, } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; -import { BackstageThemeOptions } from '@backstage/theme'; -import { Box, Typography, makeStyles } from '@material-ui/core'; +import { Box, Theme, Typography, makeStyles } from '@material-ui/core'; import { UnprocessedEntity } from '../types'; import { EntityDialog } from './EntityDialog'; import { catalogUnprocessedEntitiesApiRef } from '../api'; import useAsync from 'react-use/lib/useAsync'; -const useStyles = makeStyles((theme: BackstageThemeOptions) => ({ +const useStyles = makeStyles((theme: Theme) => ({ errorBox: { color: theme.palette.status.error, backgroundColor: theme.palette.errorBackground, @@ -46,6 +45,7 @@ const useStyles = makeStyles((theme: BackstageThemeOptions) => ({ successMessage: { background: theme.palette.infoBackground, color: theme.palette.infoText, + padding: theme.spacing(2), }, })); @@ -126,7 +126,7 @@ export const FailedEntities = () => { return ( <>
({ +const useStyles = makeStyles((theme: Theme) => ({ successMessage: { background: theme.palette.infoBackground, color: theme.palette.infoText, @@ -82,7 +81,7 @@ export const PendingEntities = () => { return ( <>
({ + tabPanel: { + paddingLeft: '0px', + paddingRight: '0px', + }, +})); + +/** @public */ export const UnprocessedEntitiesContent = () => { + const classes = useStyles(); const [tab, setTab] = useState('failed'); const handleChange = (_event: React.ChangeEvent<{}>, tabValue: string) => { setTab(tabValue); }; return ( - - - - - - - - - - - - - - + + + + + + + + + + + + ); }; export const UnprocessedEntities = () => { return ( -
- +
+ + + ); }; diff --git a/plugins/catalog-unprocessed-entities/src/index.ts b/plugins/catalog-unprocessed-entities/src/index.ts index a65283926e..4fcc9a8fcd 100644 --- a/plugins/catalog-unprocessed-entities/src/index.ts +++ b/plugins/catalog-unprocessed-entities/src/index.ts @@ -17,3 +17,14 @@ export { catalogUnprocessedEntitiesPlugin, CatalogUnprocessedEntitiesPage, } from './plugin'; +export { UnprocessedEntitiesContent } from './components/UnprocessedEntities'; +export { + type CatalogUnprocessedEntitiesApiResponse, + type CatalogUnprocessedEntitiesApi, + catalogUnprocessedEntitiesApiRef, +} from './api'; +export type { + UnprocessedEntity, + UnprocessedEntityCache, + UnprocessedEntityError, +} from './types'; diff --git a/plugins/catalog-unprocessed-entities/src/plugin.ts b/plugins/catalog-unprocessed-entities/src/plugin.ts index 88d3ed45ea..baf7278454 100644 --- a/plugins/catalog-unprocessed-entities/src/plugin.ts +++ b/plugins/catalog-unprocessed-entities/src/plugin.ts @@ -18,11 +18,12 @@ import { createPlugin, createRoutableExtension, discoveryApiRef, + fetchApiRef, } from '@backstage/core-plugin-api'; import { rootRouteRef } from './routes'; import { - CatalogUnprocessedEntitiesApi, + CatalogUnprocessedEntitiesClient, catalogUnprocessedEntitiesApiRef, } from './api'; @@ -39,9 +40,9 @@ export const catalogUnprocessedEntitiesPlugin = createPlugin({ apis: [ createApiFactory({ api: catalogUnprocessedEntitiesApiRef, - deps: { discoveryApi: discoveryApiRef }, - factory: ({ discoveryApi }) => - new CatalogUnprocessedEntitiesApi(discoveryApi), + deps: { discoveryApi: discoveryApiRef, fetchApi: fetchApiRef }, + factory: ({ discoveryApi, fetchApi }) => + new CatalogUnprocessedEntitiesClient(discoveryApi, fetchApi), }), ], }); diff --git a/plugins/catalog-unprocessed-entities/src/setupTests.ts b/plugins/catalog-unprocessed-entities/src/setupTests.ts index 73dd8dce47..865308e634 100644 --- a/plugins/catalog-unprocessed-entities/src/setupTests.ts +++ b/plugins/catalog-unprocessed-entities/src/setupTests.ts @@ -14,4 +14,3 @@ * limitations under the License. */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/catalog-unprocessed-entities/src/types.ts b/plugins/catalog-unprocessed-entities/src/types.ts index 490027b57a..65f21970f5 100644 --- a/plugins/catalog-unprocessed-entities/src/types.ts +++ b/plugins/catalog-unprocessed-entities/src/types.ts @@ -15,6 +15,10 @@ */ import { Entity } from '@backstage/catalog-model'; +/** + * Unprocessed entity data stored in the database. + * @public + */ export type UnprocessedEntity = { entity_id: string; entity_ref: string; @@ -29,11 +33,19 @@ export type UnprocessedEntity = { location_key?: string; }; +/** + * Unprocessed entity cache stored in the database. + * @public + */ export type UnprocessedEntityCache = { ttl: number; cache: object; }; +/** + * Unprocessed entity error information stored in the database. + * @public + */ export type UnprocessedEntityError = { name: string; message: string; diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md index 6bff300488..88d0651a03 100644 --- a/plugins/catalog/CHANGELOG.md +++ b/plugins/catalog/CHANGELOG.md @@ -1,5 +1,170 @@ # @backstage/plugin-catalog +## 1.12.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-react@1.1.16-next.1 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + - @backstage/types@1.1.0 + - @backstage/plugin-catalog-common@1.0.15 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/plugin-scaffolder-common@1.3.2 + - @backstage/plugin-search-common@1.2.5 + - @backstage/plugin-search-react@1.6.4-next.0 + +## 1.12.1-next.0 + +### Patch Changes + +- 3d86be999fdf: Prefer simple `theme.spacing` without string interpolation +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/plugin-search-react@1.6.4-next.0 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/errors@1.2.1 + - @backstage/integration-react@1.1.16-next.0 + - @backstage/theme@0.4.1 + - @backstage/types@1.1.0 + - @backstage/plugin-catalog-common@1.0.15 + - @backstage/plugin-scaffolder-common@1.3.2 + - @backstage/plugin-search-common@1.2.5 + +## 1.12.0 + +### Minor Changes + +- eae0352d3864: Tables which use `EntityTableProps` now have an additional `tableOptions` prop which can be used to provide additional table options to these components. + +### Patch Changes + +- 294b1629de28: Display a warning alert if relations are defined, which don't exist in the catalog. +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/integration-react@1.1.15 + - @backstage/types@1.1.0 + - @backstage/plugin-catalog-common@1.0.15 + - @backstage/plugin-scaffolder-common@1.3.2 + - @backstage/plugin-search-common@1.2.5 + - @backstage/plugin-search-react@1.6.3 + +## 1.12.0-next.2 + +### Minor Changes + +- eae0352d3864: Tables which use `EntityTableProps` now have an additional `tableOptions` prop which can be used to provide additional table options to these components. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/errors@1.2.1-next.0 + - @backstage/integration-react@1.1.15-next.2 + - @backstage/types@1.1.0 + - @backstage/plugin-catalog-common@1.0.15-next.0 + - @backstage/plugin-scaffolder-common@1.3.2-next.0 + - @backstage/plugin-search-common@1.2.5-next.0 + - @backstage/plugin-search-react@1.6.3-next.2 + +## 1.11.3-next.1 + +### Patch Changes + +- 294b1629de28: Display a warning alert if relations are defined, which don't exist in the catalog. +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/integration-react@1.1.15-next.1 + - @backstage/plugin-catalog-react@1.7.1-next.1 + - @backstage/plugin-search-react@1.6.3-next.1 + +## 1.11.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/integration-react@1.1.15-next.0 + - @backstage/theme@0.4.0 + - @backstage/types@1.1.0 + - @backstage/plugin-catalog-common@1.0.15-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + - @backstage/plugin-scaffolder-common@1.3.2-next.0 + - @backstage/plugin-search-common@1.2.5-next.0 + - @backstage/plugin-search-react@1.6.3-next.0 + +## 1.11.2 + +### Patch Changes + +- 08f177b91084: Add link from Template entity to the scaffolder launch page for the template in the AboutCard. +- 2e036369d83b: Updated `alertApi` usages with severity of `info` or `success` to use `display: transient` +- 530b6f364c8c: Adding in type and kind entity details to catalog table title for user clarity +- 886055301abe: `CatalogIndexPage` now accepts an optional `ownerPickerMode` for toggling the behavior of the `EntityOwnerPicker`, + exposing a new mode `` particularly suitable for larger catalogs. In this new mode, `EntityOwnerPicker` will display all the users and groups present in the catalog. +- 47b01e4c5315: Keyboard navigation to open EntityContextMenu now focus visible the first element. +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/catalog-client@1.4.2 + - @backstage/plugin-search-react@1.6.2 + - @backstage/core-components@0.13.2 + - @backstage/types@1.1.0 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + - @backstage/integration-react@1.1.14 + - @backstage/plugin-catalog-common@1.0.14 + - @backstage/plugin-scaffolder-common@1.3.1 + - @backstage/plugin-search-common@1.2.4 + +## 1.11.2-next.3 + +### Patch Changes + +- 530b6f364c8c: Adding in type and kind entity details to catalog table title for user clarity +- 886055301abe: `CatalogIndexPage` now accepts an optional `ownerPickerMode` for toggling the behavior of the `EntityOwnerPicker`, + exposing a new mode `` particularly suitable for larger catalogs. In this new mode, `EntityOwnerPicker` will display all the users and groups present in the catalog. +- Updated dependencies + - @backstage/plugin-search-react@1.6.2-next.3 + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/catalog-client@1.4.2-next.2 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/integration-react@1.1.14-next.3 + - @backstage/theme@0.4.0-next.1 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.14-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + - @backstage/plugin-scaffolder-common@1.3.1-next.1 + - @backstage/plugin-search-common@1.2.4-next.0 + ## 1.11.1-next.2 ### Patch Changes diff --git a/plugins/catalog/api-report.md b/plugins/catalog/api-report.md index 6bb4fcc4a1..fb067150be 100644 --- a/plugins/catalog/api-report.md +++ b/plugins/catalog/api-report.md @@ -10,6 +10,7 @@ import { BackstagePlugin } from '@backstage/core-plugin-api'; import { ComponentEntity } from '@backstage/catalog-model'; import { CompoundEntityRef } from '@backstage/catalog-model'; import { Entity } from '@backstage/catalog-model'; +import { EntityOwnerPickerProps } from '@backstage/plugin-catalog-react'; import { ExternalRouteRef } from '@backstage/core-plugin-api'; import { IconComponent } from '@backstage/core-plugin-api'; import { IndexableDocument } from '@backstage/plugin-search-common'; @@ -26,6 +27,7 @@ import { StarredEntitiesApi } from '@backstage/plugin-catalog-react'; import { StorageApi } from '@backstage/core-plugin-api'; import { StyleRules } from '@material-ui/core/styles/withStyles'; import { TableColumn } from '@backstage/core-components'; +import { TableOptions } from '@backstage/core-components'; import { TableProps } from '@backstage/core-components'; import { TabProps } from '@material-ui/core'; import { UserListFilterKind } from '@backstage/plugin-catalog-react'; @@ -215,6 +217,8 @@ export interface DefaultCatalogPageProps { // (undocumented) initiallySelectedFilter?: UserListFilterKind; // (undocumented) + ownerPickerMode?: EntityOwnerPickerProps['mode']; + // (undocumented) tableOptions?: TableProps['options']; } @@ -240,6 +244,8 @@ export interface DependsOnComponentsCardProps { // (undocumented) columns?: TableColumn[]; // (undocumented) + tableOptions?: TableOptions; + // (undocumented) title?: string; // (undocumented) variant?: InfoCardVariants; @@ -250,6 +256,8 @@ export interface DependsOnResourcesCardProps { // (undocumented) columns?: TableColumn[]; // (undocumented) + tableOptions?: TableOptions; + // (undocumented) title?: string; // (undocumented) variant?: InfoCardVariants; @@ -374,6 +382,9 @@ export interface EntityPredicates { // @public export function EntityProcessingErrorsPanel(): JSX.Element | null; +// @public +export function EntityRelationWarning(): JSX.Element | null; + // @public (undocumented) export const EntitySwitch: { (props: EntitySwitchProps): JSX.Element; @@ -426,6 +437,14 @@ export interface HasComponentsCardProps { // @public export function hasLabels(entity: Entity): boolean; +// @public +export function hasRelationWarnings( + entity: Entity, + context: { + apis: ApiHolder; + }, +): Promise; + // @public (undocumented) export interface HasResourcesCardProps { // (undocumented) @@ -434,6 +453,8 @@ export interface HasResourcesCardProps { // @public (undocumented) export interface HasSubcomponentsCardProps { + // (undocumented) + tableOptions?: TableOptions; // (undocumented) variant?: InfoCardVariants; } @@ -492,6 +513,7 @@ export type RelatedEntitiesCardProps = { emptyMessage: string; emptyHelpLink: string; asRenderableEntities: (entities: Entity[]) => T[]; + tableOptions?: TableOptions; }; // @public (undocumented) diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index 8d5ed9fe8f..a27cb26f77 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.11.1-next.2", + "version": "1.12.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -70,8 +70,7 @@ "@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", - "cross-fetch": "^3.1.5" + "@testing-library/user-event": "^14.0.0" }, "files": [ "dist" diff --git a/plugins/catalog/src/components/AboutCard/AboutCard.tsx b/plugins/catalog/src/components/AboutCard/AboutCard.tsx index a08a9be5a4..06cc020e51 100644 --- a/plugins/catalog/src/components/AboutCard/AboutCard.tsx +++ b/plugins/catalog/src/components/AboutCard/AboutCard.tsx @@ -172,7 +172,11 @@ export function AboutCard(props: AboutCardProps) { const refreshEntity = useCallback(async () => { try { await catalogApi.refreshEntity(stringifyEntityRef(entity)); - alertApi.post({ message: 'Refresh scheduled', severity: 'info' }); + alertApi.post({ + message: 'Refresh scheduled', + severity: 'info', + display: 'transient', + }); } catch (e) { errorApi.post(e); } diff --git a/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.test.tsx b/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.test.tsx index 3411656426..f5027a332e 100644 --- a/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.test.tsx +++ b/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.test.tsx @@ -15,12 +15,7 @@ */ import { CatalogApi } from '@backstage/catalog-client'; -import { - Entity, - parseEntityRef, - RELATION_MEMBER_OF, - RELATION_OWNED_BY, -} from '@backstage/catalog-model'; +import { RELATION_OWNED_BY } from '@backstage/catalog-model'; import { TableColumn, TableProps } from '@backstage/core-components'; import { IdentityApi, @@ -67,6 +62,7 @@ describe('DefaultCatalogPage', () => { kind: 'Component', metadata: { name: 'Entity1', + namespace: 'default', }, spec: { owner: 'tools', @@ -101,31 +97,18 @@ describe('DefaultCatalogPage', () => { }, ], }, - ] as Entity[], + ], }), getLocationByRef: () => Promise.resolve({ id: 'id', type: 'url', target: 'url' }), - getEntityByRef: async entityRef => { - return { - apiVersion: 'backstage.io/v1alpha1', - kind: 'User', - metadata: { name: parseEntityRef(entityRef).name }, - relations: [ - { - type: RELATION_MEMBER_OF, - targetRef: 'group:default/tools', - target: { namespace: 'default', kind: 'Group', name: 'tools' }, - }, + getEntityFacets: async () => ({ + facets: { + 'relations.ownedBy': [ + { count: 1, value: 'group:default/not-tools' }, + { count: 1, value: 'group:default/tools' }, ], - }; - }, - /** - * For the purposes of this test case, use existing functionality. The picker - * isn't being tested, just needs this method to render correctly. - */ - getEntitiesByRefs: async refs => { - return { items: refs.entityRefs.map(() => undefined) }; - }, + }, + }), }; const testProfile: Partial = { displayName: 'Display Name', @@ -205,7 +188,9 @@ describe('DefaultCatalogPage', () => { it('should render the default actions of an item in the grid', async () => { await renderWrapped(); fireEvent.click(screen.getByTestId('user-picker-owned')); - await expect(screen.findByText(/Owned \(1\)/)).resolves.toBeInTheDocument(); + await expect( + screen.findByText(/Owned components \(1\)/), + ).resolves.toBeInTheDocument(); await expect(screen.findByTitle(/View/)).resolves.toBeInTheDocument(); await expect(screen.findByTitle(/Edit/)).resolves.toBeInTheDocument(); await expect( @@ -235,7 +220,9 @@ describe('DefaultCatalogPage', () => { await renderWrapped(); fireEvent.click(screen.getByTestId('user-picker-owned')); - await expect(screen.findByText(/Owned \(1\)/)).resolves.toBeInTheDocument(); + await expect( + screen.findByText(/Owned components \(1\)/), + ).resolves.toBeInTheDocument(); await expect(screen.findByTitle(/Foo Action/)).resolves.toBeInTheDocument(); await expect(screen.findByTitle(/Bar Action/)).resolves.toBeInTheDocument(); await expect( @@ -249,14 +236,20 @@ describe('DefaultCatalogPage', () => { it('should render', async () => { await renderWrapped(); fireEvent.click(screen.getByTestId('user-picker-owned')); - await expect(screen.findByText(/Owned \(1\)/)).resolves.toBeInTheDocument(); + await expect( + screen.findByText(/Owned components \(1\)/), + ).resolves.toBeInTheDocument(); fireEvent.click(screen.getByTestId('user-picker-all')); - await expect(screen.findByText(/All \(2\)/)).resolves.toBeInTheDocument(); + await expect( + screen.findByText(/All components \(2\)/), + ).resolves.toBeInTheDocument(); }, 20_000); it('should set initial filter correctly', async () => { await renderWrapped(); - await expect(screen.findByText(/All \(2\)/)).resolves.toBeInTheDocument(); + await expect( + screen.findByText(/All components \(2\)/), + ).resolves.toBeInTheDocument(); }, 20_000); // this test is for fixing the bug after favoriting an entity, the matching @@ -264,7 +257,9 @@ describe('DefaultCatalogPage', () => { it('should render the correct entities filtered on the selected filter', async () => { await renderWrapped(); fireEvent.click(screen.getByTestId('user-picker-owned')); - await expect(screen.findByText(/Owned \(1\)/)).resolves.toBeInTheDocument(); + await expect( + screen.findByText(/Owned components \(1\)/), + ).resolves.toBeInTheDocument(); // The "Starred" menu option should initially be disabled, since there // aren't any starred entities. expect(screen.getByTestId('user-picker-starred')).toHaveAttribute( @@ -272,11 +267,15 @@ describe('DefaultCatalogPage', () => { 'true', ); fireEvent.click(screen.getByTestId('user-picker-all')); - await expect(screen.findByText(/All \(2\)/)).resolves.toBeInTheDocument(); + await expect( + screen.findByText(/All components \(2\)/), + ).resolves.toBeInTheDocument(); const starredIcons = await screen.findAllByTitle('Add to favorites'); fireEvent.click(starredIcons[0]); - await expect(screen.findByText(/All \(2\)/)).resolves.toBeInTheDocument(); + await expect( + screen.findByText(/All components \(2\)/), + ).resolves.toBeInTheDocument(); // Now that we've starred an entity, the "Starred" menu option should be // enabled. @@ -286,7 +285,7 @@ describe('DefaultCatalogPage', () => { ); fireEvent.click(screen.getByTestId('user-picker-starred')); await expect( - screen.findByText(/Starred \(1\)/), + screen.findByText(/Starred components \(1\)/), ).resolves.toBeInTheDocument(); }, 20_000); diff --git a/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.tsx b/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.tsx index b0fb52b4f0..04f39ee66c 100644 --- a/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.tsx +++ b/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.tsx @@ -36,6 +36,7 @@ import { UserListPicker, EntityKindPicker, EntityNamespacePicker, + EntityOwnerPickerProps, } from '@backstage/plugin-catalog-react'; import React, { ReactNode } from 'react'; import { createComponentRouteRef } from '../../routes'; @@ -54,6 +55,7 @@ export interface DefaultCatalogPageProps { initialKind?: string; tableOptions?: TableProps['options']; emptyContent?: ReactNode; + ownerPickerMode?: EntityOwnerPickerProps['mode']; } export function DefaultCatalogPage(props: DefaultCatalogPageProps) { @@ -64,6 +66,7 @@ export function DefaultCatalogPage(props: DefaultCatalogPageProps) { initialKind = 'component', tableOptions = {}, emptyContent, + ownerPickerMode, } = props; const orgName = useApi(configApiRef).getOptionalString('organization.name') ?? 'Backstage'; @@ -87,7 +90,7 @@ export function DefaultCatalogPage(props: DefaultCatalogPageProps) { - + diff --git a/plugins/catalog/src/components/CatalogTable/CatalogTable.test.tsx b/plugins/catalog/src/components/CatalogTable/CatalogTable.test.tsx index c80b340349..c242372a97 100644 --- a/plugins/catalog/src/components/CatalogTable/CatalogTable.test.tsx +++ b/plugins/catalog/src/components/CatalogTable/CatalogTable.test.tsx @@ -95,6 +95,11 @@ describe('CatalogTable component', () => { () => false, () => false, ), + kind: { + value: 'component', + getCatalogFilters: () => ({ kind: 'component' }), + toQueryValue: () => 'component', + }, }, }} > @@ -107,7 +112,7 @@ describe('CatalogTable component', () => { }, }, ); - expect(screen.getByText(/Owned \(3\)/)).toBeInTheDocument(); + expect(screen.getByText(/Owned components \(3\)/)).toBeInTheDocument(); expect(screen.getByText(/component1/)).toBeInTheDocument(); expect(screen.getByText(/component2/)).toBeInTheDocument(); expect(screen.getByText(/component3/)).toBeInTheDocument(); diff --git a/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx b/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx index 3d0cc75f7c..67579d5273 100644 --- a/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx +++ b/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx @@ -43,6 +43,7 @@ import { capitalize } from 'lodash'; import React, { ReactNode, useMemo } from 'react'; import { columnFactories } from './columns'; import { CatalogTableRow } from './types'; +import pluralize from 'pluralize'; /** * Props for {@link CatalogTable}. @@ -226,6 +227,11 @@ export const CatalogTable = (props: CatalogTableProps) => { typeColumn.hidden = !showTypeColumn; } const showPagination = rows.length > 20; + const currentKind = filters.kind?.value || ''; + const currentType = filters.type?.value || ''; + const titleDisplay = [titlePreamble, currentType, pluralize(currentKind)] + .filter(s => s) + .join(' '); return ( @@ -241,7 +247,7 @@ export const CatalogTable = (props: CatalogTableProps) => { pageSizeOptions: [20, 50, 100], ...tableOptions, }} - title={`${titlePreamble} (${entities.length})`} + title={`${titleDisplay} (${entities.length})`} data={rows} actions={actions || defaultActions} subtitle={subtitle} diff --git a/plugins/catalog/src/components/DependsOnComponentsCard/DependsOnComponentsCard.tsx b/plugins/catalog/src/components/DependsOnComponentsCard/DependsOnComponentsCard.tsx index a7ff97ec73..f4ea850b9b 100644 --- a/plugins/catalog/src/components/DependsOnComponentsCard/DependsOnComponentsCard.tsx +++ b/plugins/catalog/src/components/DependsOnComponentsCard/DependsOnComponentsCard.tsx @@ -15,7 +15,11 @@ */ import { RELATION_DEPENDS_ON, ComponentEntity } from '@backstage/catalog-model'; -import { InfoCardVariants, TableColumn } from '@backstage/core-components'; +import { + InfoCardVariants, + TableColumn, + TableOptions, +} from '@backstage/core-components'; import React from 'react'; import { asComponentEntities, @@ -29,6 +33,7 @@ export interface DependsOnComponentsCardProps { variant?: InfoCardVariants; title?: string; columns?: TableColumn[]; + tableOptions?: TableOptions; } export function DependsOnComponentsCard(props: DependsOnComponentsCardProps) { @@ -36,6 +41,7 @@ export function DependsOnComponentsCard(props: DependsOnComponentsCardProps) { variant = 'gridItem', title = 'Depends on components', columns = componentEntityColumns, + tableOptions = {}, } = props; return ( ); } diff --git a/plugins/catalog/src/components/DependsOnResourcesCard/DependsOnResourcesCard.tsx b/plugins/catalog/src/components/DependsOnResourcesCard/DependsOnResourcesCard.tsx index eba6c1be6b..d99a9df387 100644 --- a/plugins/catalog/src/components/DependsOnResourcesCard/DependsOnResourcesCard.tsx +++ b/plugins/catalog/src/components/DependsOnResourcesCard/DependsOnResourcesCard.tsx @@ -15,7 +15,11 @@ */ import { RELATION_DEPENDS_ON, ResourceEntity } from '@backstage/catalog-model'; -import { InfoCardVariants, TableColumn } from '@backstage/core-components'; +import { + InfoCardVariants, + TableColumn, + TableOptions, +} from '@backstage/core-components'; import React from 'react'; import { asResourceEntities, @@ -29,6 +33,7 @@ export interface DependsOnResourcesCardProps { variant?: InfoCardVariants; title?: string; columns?: TableColumn[]; + tableOptions?: TableOptions; } export function DependsOnResourcesCard(props: DependsOnResourcesCardProps) { @@ -36,6 +41,7 @@ export function DependsOnResourcesCard(props: DependsOnResourcesCardProps) { variant = 'gridItem', title = 'Depends on resources', columns = resourceEntityColumns, + tableOptions = {}, } = props; return ( ); } diff --git a/plugins/catalog/src/components/EntityLabelsCard/EntityLabelsEmptyState.tsx b/plugins/catalog/src/components/EntityLabelsCard/EntityLabelsEmptyState.tsx index b76877d395..a193a90d05 100644 --- a/plugins/catalog/src/components/EntityLabelsCard/EntityLabelsEmptyState.tsx +++ b/plugins/catalog/src/components/EntityLabelsCard/EntityLabelsEmptyState.tsx @@ -28,7 +28,7 @@ const useStyles = makeStyles( theme => ({ code: { borderRadius: 6, - margin: `${theme.spacing(2)}px 0px`, + margin: theme.spacing(2, 0), background: theme.palette.type === 'dark' ? '#444' : theme.palette.common.white, }, diff --git a/plugins/catalog/src/components/EntityLinksCard/EntityLinksEmptyState.tsx b/plugins/catalog/src/components/EntityLinksCard/EntityLinksEmptyState.tsx index c1d502dc78..f55527c78a 100644 --- a/plugins/catalog/src/components/EntityLinksCard/EntityLinksEmptyState.tsx +++ b/plugins/catalog/src/components/EntityLinksCard/EntityLinksEmptyState.tsx @@ -33,7 +33,7 @@ const useStyles = makeStyles( theme => ({ code: { borderRadius: 6, - margin: `${theme.spacing(2)}px 0px`, + margin: theme.spacing(2, 0), background: theme.palette.type === 'dark' ? '#444' : theme.palette.common.white, }, diff --git a/plugins/catalog/src/components/EntityNotFound/Illo/Illo.tsx b/plugins/catalog/src/components/EntityNotFound/Illo/Illo.tsx index a375eca02a..03b23ec6b0 100644 --- a/plugins/catalog/src/components/EntityNotFound/Illo/Illo.tsx +++ b/plugins/catalog/src/components/EntityNotFound/Illo/Illo.tsx @@ -29,7 +29,7 @@ const useStyles = makeStyles(theme => ({ position: 'relative', top: 'unset', right: 'unset', - margin: `${theme.spacing(10)}px auto ${theme.spacing(4)}px`, + margin: theme.spacing(10, 'auto', 4), }, }, })); diff --git a/plugins/catalog/src/components/EntityRelationWarning/EntityRelationWarning.test.tsx b/plugins/catalog/src/components/EntityRelationWarning/EntityRelationWarning.test.tsx new file mode 100644 index 0000000000..41e5f7e3d5 --- /dev/null +++ b/plugins/catalog/src/components/EntityRelationWarning/EntityRelationWarning.test.tsx @@ -0,0 +1,176 @@ +/* + * 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 { Entity } from '@backstage/catalog-model'; +import { ApiProvider } from '@backstage/core-app-api'; +import { + CatalogApi, + catalogApiRef, + EntityProvider, +} from '@backstage/plugin-catalog-react'; +import { renderInTestApp, TestApiRegistry } from '@backstage/test-utils'; +import { screen } from '@testing-library/react'; +import React from 'react'; +import { + EntityRelationWarning, + hasRelationWarnings, +} from './EntityRelationWarning'; + +describe('', () => { + const getEntitiesByRefs: jest.MockedFunction< + CatalogApi['getEntitiesByRefs'] + > = jest.fn(); + const apis = TestApiRegistry.from([catalogApiRef, { getEntitiesByRefs }]); + + const entityExisting: Entity = { + apiVersion: 'v1', + kind: 'Component', + metadata: { + name: 'existing', + }, + }; + + it('renders EntityRelationWarning if the entity has missing relations', async () => { + const entity: Entity = { + apiVersion: 'v1', + kind: 'Component', + metadata: { + name: 'software', + }, + relations: [ + { + type: 'dependsOn', + targetRef: 'component:default/missing', + }, + { + type: 'dependsOn', + targetRef: 'component:default/existing', + }, + ], + }; + + getEntitiesByRefs.mockResolvedValue({ + items: [undefined, entityExisting], + }); + await renderInTestApp( + + + + + , + ); + + expect( + screen.getByText(content => + content.includes( + "This entity has relations to other entities, which can't be found in the catalog.", + ), + ), + ).toBeInTheDocument(); + expect( + screen.getByText(content => + content.includes('Entities not found are: component:default/missing'), + ), + ).toBeInTheDocument(); + }); + + it("doesn't render EntityRelationWarning if the entity has no missing relations", async () => { + const entity: Entity = { + apiVersion: 'v1', + kind: 'Component', + metadata: { + name: 'software', + }, + relations: [ + { + type: 'dependsOn', + targetRef: 'component:default/existing', + }, + ], + }; + + getEntitiesByRefs.mockResolvedValue({ + items: [entityExisting], + }); + await renderInTestApp( + + + + + , + ); + + expect( + screen.queryByText(content => + content.includes( + "This entity has relations to other entities, which can't be found in the catalog.", + ), + ), + ).not.toBeInTheDocument(); + }); + + it('returns hasRelationWarnings truthy if the entity has missing relations', async () => { + const entity: Entity = { + apiVersion: 'v1', + kind: 'Component', + metadata: { + name: 'software', + }, + relations: [ + { + type: 'dependsOn', + targetRef: 'component:default/missing', + }, + { + type: 'dependsOn', + targetRef: 'component:default/existing', + }, + ], + }; + + getEntitiesByRefs.mockResolvedValue({ + items: [undefined, entityExisting], + }); + + const hasWarnings = await hasRelationWarnings(entity, { apis }); + + expect(hasWarnings).toBeTruthy(); + }); + + it('returns hasRelationWarnings falsy if the entity has no missing relations', async () => { + const entity: Entity = { + apiVersion: 'v1', + kind: 'Component', + metadata: { + name: 'software', + }, + relations: [ + { + type: 'dependsOn', + targetRef: 'component:default/existing', + }, + ], + }; + + getEntitiesByRefs.mockResolvedValue({ + items: [entityExisting], + }); + + const hasWarnings = await hasRelationWarnings(entity, { apis }); + + expect(hasWarnings).toBeFalsy(); + }); +}); diff --git a/plugins/catalog/src/components/EntityRelationWarning/EntityRelationWarning.tsx b/plugins/catalog/src/components/EntityRelationWarning/EntityRelationWarning.tsx new file mode 100644 index 0000000000..16384ac1d2 --- /dev/null +++ b/plugins/catalog/src/components/EntityRelationWarning/EntityRelationWarning.tsx @@ -0,0 +1,105 @@ +/* + * 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 { Entity } from '@backstage/catalog-model'; +import { + CatalogApi, + catalogApiRef, + useEntity, +} from '@backstage/plugin-catalog-react'; +import { Alert } from '@material-ui/lab'; +import React from 'react'; +import useAsync from 'react-use/lib/useAsync'; +import { Box } from '@material-ui/core'; +import { ResponseErrorPanel } from '@backstage/core-components'; +import { useApi, ApiHolder } from '@backstage/core-plugin-api'; + +async function getRelationWarnings(entity: Entity, catalogApi: CatalogApi) { + const entityRefRelations = entity.relations?.map( + relation => relation.targetRef, + ); + if ( + !entityRefRelations || + entityRefRelations?.length < 1 || + entityRefRelations.length > 1000 + ) { + return []; + } + + const relatedEntities = await catalogApi.getEntitiesByRefs({ + entityRefs: entityRefRelations, + fields: ['kind', 'metadata.name', 'metadata.namespace'], + }); + + return entityRefRelations.filter( + (_, index) => relatedEntities.items[index] === undefined, + ); +} + +/** + * Returns true if the given entity has relations to other entities, which + * don't exist in the catalog + * + * @public + */ +export async function hasRelationWarnings( + entity: Entity, + context: { apis: ApiHolder }, +) { + const catalogApi = context.apis.get(catalogApiRef); + if (!catalogApi) { + throw new Error(`No implementation available for ${catalogApiRef}`); + } + + const relatedEntitiesMissing = await getRelationWarnings(entity, catalogApi); + return relatedEntitiesMissing.length > 0; +} + +/** + * Displays a warning alert if the entity has relations to other entities, which + * don't exist in the catalog + * + * @public + */ +export function EntityRelationWarning() { + const { entity } = useEntity(); + const catalogApi = useApi(catalogApiRef); + const { loading, error, value } = useAsync(async () => { + return getRelationWarnings(entity, catalogApi); + }, [entity, catalogApi]); + + if (error) { + return ( + + + + ); + } + + if (loading || !value || value.length === 0) { + return null; + } + + return ( + <> + + This entity has relations to other entities, which can't be found in the + catalog.
+ Entities not found are: {value.join(', ')} +
+ + ); +} diff --git a/plugins/catalog/src/components/EntityRelationWarning/index.ts b/plugins/catalog/src/components/EntityRelationWarning/index.ts new file mode 100644 index 0000000000..1d88926f25 --- /dev/null +++ b/plugins/catalog/src/components/EntityRelationWarning/index.ts @@ -0,0 +1,20 @@ +/* + * 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. + */ + +export { + EntityRelationWarning, + hasRelationWarnings, +} from './EntityRelationWarning'; diff --git a/plugins/catalog/src/components/HasSubcomponentsCard/HasSubcomponentsCard.tsx b/plugins/catalog/src/components/HasSubcomponentsCard/HasSubcomponentsCard.tsx index db95d31f9f..6c673c5818 100644 --- a/plugins/catalog/src/components/HasSubcomponentsCard/HasSubcomponentsCard.tsx +++ b/plugins/catalog/src/components/HasSubcomponentsCard/HasSubcomponentsCard.tsx @@ -15,7 +15,7 @@ */ import { RELATION_HAS_PART } from '@backstage/catalog-model'; -import { InfoCardVariants } from '@backstage/core-components'; +import { InfoCardVariants, TableOptions } from '@backstage/core-components'; import React from 'react'; import { asComponentEntities, @@ -26,10 +26,11 @@ import { /** @public */ export interface HasSubcomponentsCardProps { variant?: InfoCardVariants; + tableOptions?: TableOptions; } export function HasSubcomponentsCard(props: HasSubcomponentsCardProps) { - const { variant = 'gridItem' } = props; + const { variant = 'gridItem', tableOptions = {} } = props; return ( ); } diff --git a/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx b/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx index e802b0b583..7a533dcf5b 100644 --- a/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx +++ b/plugins/catalog/src/components/RelatedEntitiesCard/RelatedEntitiesCard.tsx @@ -29,6 +29,7 @@ import { Progress, ResponseErrorPanel, TableColumn, + TableOptions, } from '@backstage/core-components'; /** @public */ @@ -41,6 +42,7 @@ export type RelatedEntitiesCardProps = { emptyMessage: string; emptyHelpLink: string; asRenderableEntities: (entities: Entity[]) => T[]; + tableOptions?: TableOptions; }; /** @@ -67,6 +69,7 @@ export function RelatedEntitiesCard( emptyMessage, emptyHelpLink, asRenderableEntities, + tableOptions = {}, } = props; const { entity } = useEntity(); @@ -105,6 +108,7 @@ export function RelatedEntitiesCard( } columns={columns} entities={asRenderableEntities(entities || [])} + tableOptions={tableOptions} /> ); } diff --git a/plugins/catalog/src/index.ts b/plugins/catalog/src/index.ts index 42150dfd66..a691011c96 100644 --- a/plugins/catalog/src/index.ts +++ b/plugins/catalog/src/index.ts @@ -32,6 +32,7 @@ export * from './components/CatalogKindHeader'; export * from './components/CatalogTable'; export * from './components/EntityLayout'; export * from './components/EntityOrphanWarning'; +export * from './components/EntityRelationWarning'; export * from './components/EntityProcessingErrorsPanel'; export * from './components/EntitySwitch'; export * from './components/FilteredEntityLayout'; diff --git a/plugins/catalog/src/setupTests.ts b/plugins/catalog/src/setupTests.ts index c1d649f2ad..963c0f188b 100644 --- a/plugins/catalog/src/setupTests.ts +++ b/plugins/catalog/src/setupTests.ts @@ -15,4 +15,3 @@ */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md index a6c1df6991..f6c2ea06a6 100644 --- a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md +++ b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md @@ -1,5 +1,78 @@ # @backstage/plugin-cicd-statistics-module-gitlab +## 0.1.17-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/catalog-model@1.4.1 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-cicd-statistics@0.1.23-next.0 + +## 0.1.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + - @backstage/plugin-cicd-statistics@0.1.23-next.0 + +## 0.1.16 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + - @backstage/plugin-cicd-statistics@0.1.22 + +## 0.1.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/plugin-cicd-statistics@0.1.22-next.2 + +## 0.1.16-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-cicd-statistics@0.1.22-next.1 + +## 0.1.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/plugin-cicd-statistics@0.1.22-next.0 + +## 0.1.15 + +### Patch Changes + +- 50c4457119ec: Fixed publish configuration. +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/catalog-model@1.4.0 + - @backstage/plugin-cicd-statistics@0.1.21 + +## 0.1.15-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/plugin-cicd-statistics@0.1.21-next.3 + ## 0.1.15-next.2 ### Patch Changes diff --git a/plugins/cicd-statistics-module-gitlab/package.json b/plugins/cicd-statistics-module-gitlab/package.json index 996f4d1e0f..f7c34ade60 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.15-next.2", + "version": "0.1.17-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -13,6 +13,12 @@ "backstage": { "role": "frontend-plugin-module" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/cicd-statistics-module-gitlab" + }, "keywords": [ "backstage", "cicd statistics", diff --git a/plugins/cicd-statistics/CHANGELOG.md b/plugins/cicd-statistics/CHANGELOG.md index e05b0853de..bdfe0cd1a9 100644 --- a/plugins/cicd-statistics/CHANGELOG.md +++ b/plugins/cicd-statistics/CHANGELOG.md @@ -1,5 +1,67 @@ # @backstage/plugin-cicd-statistics +## 0.1.23-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-model@1.4.1 + +## 0.1.22 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + +## 0.1.22-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/catalog-model@1.4.1-next.0 + +## 0.1.22-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + +## 0.1.22-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/plugin-catalog-react@1.7.1-next.0 + +## 0.1.21 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + +## 0.1.21-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/plugin-catalog-react@1.7.0-next.3 + ## 0.1.21-next.2 ### Patch Changes diff --git a/plugins/cicd-statistics/package.json b/plugins/cicd-statistics/package.json index 347917e64e..6bd94c67e2 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.21-next.2", + "version": "0.1.23-next.0", "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 79b384ea8b..c4a429ec47 100644 --- a/plugins/circleci/CHANGELOG.md +++ b/plugins/circleci/CHANGELOG.md @@ -1,5 +1,81 @@ # @backstage/plugin-circleci +## 0.3.21-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/theme@0.4.1 + +## 0.3.20 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + +## 0.3.20-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + +## 0.3.20-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + +## 0.3.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + +## 0.3.19 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + +## 0.3.19-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + ## 0.3.19-next.2 ### Patch Changes diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index d722fca601..68066ae890 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.19-next.2", + "version": "0.3.21-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cloudbuild/CHANGELOG.md b/plugins/cloudbuild/CHANGELOG.md index bc4c5c9d63..ebd4d6bc54 100644 --- a/plugins/cloudbuild/CHANGELOG.md +++ b/plugins/cloudbuild/CHANGELOG.md @@ -1,5 +1,81 @@ # @backstage/plugin-cloudbuild +## 0.3.21-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/theme@0.4.1 + +## 0.3.20 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + +## 0.3.20-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + +## 0.3.20-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + +## 0.3.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + +## 0.3.19 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + +## 0.3.19-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + ## 0.3.19-next.2 ### Patch Changes diff --git a/plugins/cloudbuild/package.json b/plugins/cloudbuild/package.json index fc8358fadf..6a487c5494 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.19-next.2", + "version": "0.3.21-next.0", "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 79c51afc28..72d15c9730 100644 --- a/plugins/code-climate/CHANGELOG.md +++ b/plugins/code-climate/CHANGELOG.md @@ -1,5 +1,93 @@ # @backstage/plugin-code-climate +## 0.1.21-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/catalog-model@1.4.1 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.1-next.0 + +## 0.1.21-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/theme@0.4.1 + +## 0.1.20 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + +## 0.1.20-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + +## 0.1.20-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + +## 0.1.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + +## 0.1.19 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + +## 0.1.19-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + ## 0.1.19-next.2 ### Patch Changes diff --git a/plugins/code-climate/package.json b/plugins/code-climate/package.json index 83c658673a..3782e25a5a 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.19-next.2", + "version": "0.1.21-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -12,6 +12,12 @@ "backstage": { "role": "frontend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/code-climate" + }, "scripts": { "build": "backstage-cli package build", "start": "backstage-cli package start", @@ -51,7 +57,6 @@ "@types/luxon": "^3.0.0", "@types/node": "^16.11.26", "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/code-climate/src/setupTests.ts b/plugins/code-climate/src/setupTests.ts index eb4654b869..c2f27937b3 100644 --- a/plugins/code-climate/src/setupTests.ts +++ b/plugins/code-climate/src/setupTests.ts @@ -17,4 +17,3 @@ /* eslint-disable @backstage/no-undeclared-imports */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/code-coverage-backend/CHANGELOG.md b/plugins/code-coverage-backend/CHANGELOG.md index 387cf785ad..b2fd302e8c 100644 --- a/plugins/code-coverage-backend/CHANGELOG.md +++ b/plugins/code-coverage-backend/CHANGELOG.md @@ -1,5 +1,79 @@ # @backstage/plugin-code-coverage-backend +## 0.2.14-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/integration@1.5.1 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + +## 0.2.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/integration@1.5.1 + +## 0.2.13 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-common@0.19.1 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1 + +## 0.2.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1-next.0 + +## 0.2.12 + +### Patch Changes + +- a83cb4e5624e: Updated dependency `xml2js` to `^0.6.0`. +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/catalog-client@1.4.2 + - @backstage/integration@1.5.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + - @backstage/config@1.0.8 + +## 0.2.12-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/catalog-client@1.4.2-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.2.0-next.0 + - @backstage/integration@1.5.0-next.0 + ## 0.2.12-next.2 ### Patch Changes diff --git a/plugins/code-coverage-backend/package.json b/plugins/code-coverage-backend/package.json index e9e2b0baa2..6b366ab312 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.12-next.2", + "version": "0.2.14-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -13,6 +13,12 @@ "backstage": { "role": "backend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/code-coverage-backend" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", diff --git a/plugins/code-coverage/CHANGELOG.md b/plugins/code-coverage/CHANGELOG.md index e0ee506c99..28c8abef54 100644 --- a/plugins/code-coverage/CHANGELOG.md +++ b/plugins/code-coverage/CHANGELOG.md @@ -1,5 +1,108 @@ # @backstage/plugin-code-coverage +## 0.2.14-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.1-next.0 + +## 0.2.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + +## 0.2.13 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + +## 0.2.13-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1-next.0 + +## 0.2.13-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + - @backstage/config@1.0.8 + +## 0.2.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + +## 0.2.12 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + - @backstage/config@1.0.8 + +## 0.2.12-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + ## 0.2.12-next.2 ### Patch Changes diff --git a/plugins/code-coverage/package.json b/plugins/code-coverage/package.json index 15c1bee560..8e2b111878 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.12-next.2", + "version": "0.2.14-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -13,6 +13,12 @@ "backstage": { "role": "frontend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/code-coverage" + }, "scripts": { "build": "backstage-cli package build", "start": "backstage-cli package start", @@ -57,7 +63,6 @@ "@types/node": "^16.11.26", "@types/react": "^16.13.1 || ^17.0.0", "@types/recharts": "^1.8.15", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/code-coverage/src/setupTests.ts b/plugins/code-coverage/src/setupTests.ts index fc6dbd98f8..7435872609 100644 --- a/plugins/code-coverage/src/setupTests.ts +++ b/plugins/code-coverage/src/setupTests.ts @@ -14,4 +14,3 @@ * limitations under the License. */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/codescene/CHANGELOG.md b/plugins/codescene/CHANGELOG.md index 13cc7e53f0..3a10b0984f 100644 --- a/plugins/codescene/CHANGELOG.md +++ b/plugins/codescene/CHANGELOG.md @@ -1,5 +1,95 @@ # @backstage/plugin-codescene +## 0.1.16-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/config@1.0.8 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + +## 0.1.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + +## 0.1.15 + +### Patch Changes + +- 015439b5b6ca: Updated dependency `rc-progress` to `3.4.2`. +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/config@1.0.8 + +## 0.1.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1-next.0 + +## 0.1.15-next.1 + +### Patch Changes + +- 015439b5b6ca: Updated dependency `rc-progress` to `3.4.2`. +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/config@1.0.8 + +## 0.1.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/config@1.0.8 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + +## 0.1.14 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/errors@1.2.0 + - @backstage/config@1.0.8 + +## 0.1.14-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/theme@0.4.0-next.1 + ## 0.1.14-next.2 ### Patch Changes diff --git a/plugins/codescene/package.json b/plugins/codescene/package.json index 41afdb82a4..4ec2a9ec4b 100644 --- a/plugins/codescene/package.json +++ b/plugins/codescene/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-codescene", - "version": "0.1.14-next.2", + "version": "0.1.16-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -12,6 +12,12 @@ "backstage": { "role": "frontend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/codescene" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", @@ -30,7 +36,7 @@ "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.61", - "rc-progress": "3.4.1", + "rc-progress": "3.4.2", "react-use": "^17.2.4" }, "peerDependencies": { @@ -49,7 +55,6 @@ "@testing-library/user-event": "^14.0.0", "@types/node": "*", "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/codescene/src/setupTests.ts b/plugins/codescene/src/setupTests.ts index 9bb3e72355..326d2ed212 100644 --- a/plugins/codescene/src/setupTests.ts +++ b/plugins/codescene/src/setupTests.ts @@ -14,4 +14,3 @@ * limitations under the License. */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/config-schema/CHANGELOG.md b/plugins/config-schema/CHANGELOG.md index b0400db459..b607255110 100644 --- a/plugins/config-schema/CHANGELOG.md +++ b/plugins/config-schema/CHANGELOG.md @@ -1,5 +1,100 @@ # @backstage/plugin-config-schema +## 0.1.44-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/config@1.0.8 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + - @backstage/types@1.1.0 + +## 0.1.44-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + - @backstage/types@1.1.0 + +## 0.1.43 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + +## 0.1.43-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1-next.0 + - @backstage/types@1.1.0 + +## 0.1.43-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/config@1.0.8 + +## 0.1.43-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/config@1.0.8 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/types@1.1.0 + +## 0.1.42 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/types@1.1.0 + - @backstage/theme@0.4.0 + - @backstage/errors@1.2.0 + - @backstage/config@1.0.8 + +## 0.1.42-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/types@1.0.2 + ## 0.1.42-next.2 ### Patch Changes diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json index d92b17aa3a..2f8d233407 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.42-next.2", + "version": "0.1.44-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -13,6 +13,12 @@ "backstage": { "role": "frontend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/config-schema" + }, "scripts": { "build": "backstage-cli package build", "start": "backstage-cli package start", @@ -52,7 +58,6 @@ "@testing-library/user-event": "^14.0.0", "@types/node": "^16.11.26", "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/config-schema/src/setupTests.ts b/plugins/config-schema/src/setupTests.ts index fc6dbd98f8..7435872609 100644 --- a/plugins/config-schema/src/setupTests.ts +++ b/plugins/config-schema/src/setupTests.ts @@ -14,4 +14,3 @@ * limitations under the License. */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/cost-insights/CHANGELOG.md b/plugins/cost-insights/CHANGELOG.md index 714cf2af37..98a48380ee 100644 --- a/plugins/cost-insights/CHANGELOG.md +++ b/plugins/cost-insights/CHANGELOG.md @@ -1,5 +1,96 @@ # @backstage/plugin-cost-insights +## 0.12.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/theme@0.4.1 + - @backstage/plugin-cost-insights-common@0.1.1 + +## 0.12.9 + +### Patch Changes + +- 8174cf4c0edf: Fixing MUI / Material UI references +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/plugin-cost-insights-common@0.1.1 + +## 0.12.9-next.2 + +### Patch Changes + +- 8174cf4c0edf: Fixing MUI / Material UI references +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/plugin-cost-insights-common@0.1.1 + +## 0.12.9-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + - @backstage/config@1.0.8 + +## 0.12.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + - @backstage/plugin-cost-insights-common@0.1.1 + +## 0.12.8 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + - @backstage/config@1.0.8 + - @backstage/plugin-cost-insights-common@0.1.1 + +## 0.12.8-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + - @backstage/plugin-cost-insights-common@0.1.1 + ## 0.12.8-next.2 ### Patch Changes diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json index 72bdb06b00..b87b3db435 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.8-next.2", + "version": "0.12.10-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cost-insights/src/utils/styles.ts b/plugins/cost-insights/src/utils/styles.ts index 9b5c53e020..6ccc81c963 100644 --- a/plugins/cost-insights/src/utils/styles.ts +++ b/plugins/cost-insights/src/utils/styles.ts @@ -82,7 +82,7 @@ export const costInsightsDarkTheme = { }, } as CostInsightsThemeOptions; -// The opposite of MUI's emphasize function - darken darks, lighten lights +// The opposite of Material UI's emphasize function - darken darks, lighten lights export function brighten(color: string, coefficient = 0.2) { return getLuminance(color) > 0.5 ? lighten(color, coefficient) diff --git a/plugins/devtools-backend/CHANGELOG.md b/plugins/devtools-backend/CHANGELOG.md index cd864d638a..c1f6c2e10f 100644 --- a/plugins/devtools-backend/CHANGELOG.md +++ b/plugins/devtools-backend/CHANGELOG.md @@ -1,5 +1,147 @@ # @backstage/plugin-devtools-backend +## 0.1.3-next.1 + +### Patch Changes + +- 629cbd194a87: Use `coreServices.rootConfig` instead of `coreService.config` +- 12a8c94eda8d: Add package repository and homepage metadata +- 2b4f77a4e900: Add DevTools configuration to enable dependency listing to be filtered with custom prefixes. For instance, in your `app-config.yaml`: + + ```yaml + devTools: + info: + packagePrefixes: + - @backstage/ + - @roadiehq/backstage- + - @spotify/backstage- + ``` + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/config-loader@1.4.0-next.1 + - @backstage/plugin-devtools-common@0.1.3-next.0 + - @backstage/plugin-auth-node@0.2.17-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/plugin-permission-node@0.7.11-next.1 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + - @backstage/plugin-permission-common@0.7.7 + +## 0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config-loader@1.4.0-next.0 + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.17-next.0 + - @backstage/plugin-devtools-common@0.1.2 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-permission-node@0.7.11-next.0 + +## 0.1.2 + +### Patch Changes + +- 4edd1ef71453: semver upgrade to 7.5.3 +- ae261e79d256: Added alpha support for the [new backend system](https://backstage.io/docs/backend-system/) +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-common@0.19.1 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.8 + - @backstage/config-loader@1.3.2 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.16 + - @backstage/plugin-devtools-common@0.1.2 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-permission-node@0.7.10 + +## 0.1.2-next.2 + +### Patch Changes + +- 4edd1ef71453: semver upgrade to 7.5.3 +- Updated dependencies + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.8 + - @backstage/config-loader@1.3.2-next.0 + - @backstage/errors@1.2.1-next.0 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.16-next.0 + - @backstage/plugin-devtools-common@0.1.2-next.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + - @backstage/plugin-permission-node@0.7.10-next.0 + +## 0.1.2-next.1 + +### Patch Changes + +- ae261e79d256: Added alpha support for the [new backend system](https://backstage.io/docs/backend-system/) +- Updated dependencies + - @backstage/config@1.0.8 + +## 0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.8 + - @backstage/config-loader@1.3.2-next.0 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.16-next.0 + - @backstage/plugin-devtools-common@0.1.2-next.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + - @backstage/plugin-permission-node@0.7.10-next.0 + +## 0.1.1 + +### Patch Changes + +- c312192e61dd: Expose permissions through the metadata endpoint. +- 3d11596a72b5: Update plugin installation docs to be more consistent across documentations +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/types@1.1.0 + - @backstage/config-loader@1.3.1 + - @backstage/errors@1.2.0 + - @backstage/plugin-devtools-common@0.1.1 + - @backstage/plugin-auth-node@0.2.15 + - @backstage/plugin-permission-node@0.7.9 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.8 + - @backstage/plugin-permission-common@0.7.6 + +## 0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/cli-common@0.1.12 + - @backstage/config@1.0.7 + - @backstage/config-loader@1.3.1-next.1 + - @backstage/errors@1.2.0-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.15-next.2 + - @backstage/plugin-devtools-common@0.1.1-next.0 + - @backstage/plugin-permission-common@0.7.6-next.0 + - @backstage/plugin-permission-node@0.7.9-next.2 + ## 0.1.1-next.1 ### Patch Changes diff --git a/plugins/devtools-backend/README.md b/plugins/devtools-backend/README.md index 7304ce33d7..528e864783 100644 --- a/plugins/devtools-backend/README.md +++ b/plugins/devtools-backend/README.md @@ -49,7 +49,26 @@ Here's how to get the DevTools Backend up and running: 4. Now run `yarn start-backend` from the repo root 5. Finally open `http://localhost:7007/api/devtools/health` in a browser and it should return `{"status":"ok"}` +### New Backend System + +The DevTools backend plugin has support for the [new backend system](https://backstage.io/docs/backend-system/), here's how you can set that up: + +In your `packages/backend/src/index.ts` make the following changes: + +```diff + import { createBackend } from '@backstage/backend-defaults'; ++ import { devtoolsPlugin } from '@backstage/plugin-devtools-backend'; + + const backend = createBackend(); + + // ... other feature additions + ++ backend.add(devtoolsPlugin()); + + backend.start(); +``` + ## Links -- [Frontend part of the plugin](../devtools/README.md) +- [Frontend part of the plugin](https://github.com/backstage/backstage/tree/master/plugins/devtools) - [The Backstage homepage](https://backstage.io) diff --git a/plugins/devtools-backend/api-report.md b/plugins/devtools-backend/api-report.md index e28f0697ab..dc51fc8387 100644 --- a/plugins/devtools-backend/api-report.md +++ b/plugins/devtools-backend/api-report.md @@ -3,6 +3,7 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { BackendFeature } from '@backstage/backend-plugin-api'; import { Config } from '@backstage/config'; import { ConfigInfo } from '@backstage/plugin-devtools-common'; import { DevToolsInfo } from '@backstage/plugin-devtools-common'; @@ -25,6 +26,9 @@ export class DevToolsBackendApi { listInfo(): Promise; } +// @public +export const devtoolsPlugin: () => BackendFeature; + // @public (undocumented) export interface RouterOptions { // (undocumented) diff --git a/plugins/devtools-backend/config.d.ts b/plugins/devtools-backend/config.d.ts index 15e70afcf8..9fc7cf1762 100644 --- a/plugins/devtools-backend/config.d.ts +++ b/plugins/devtools-backend/config.d.ts @@ -40,5 +40,15 @@ export interface Config { target: string; }>; }; + /** + * Info configuration + */ + info?: { + /** + * A list of package prefixes that DevTools will use for filtering all available dependencies + * (default is ["@backstage"]) + */ + packagePrefixes?: string[]; + }; }; } diff --git a/plugins/devtools-backend/package.json b/plugins/devtools-backend/package.json index 96f4867cc9..f45b38c120 100644 --- a/plugins/devtools-backend/package.json +++ b/plugins/devtools-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-devtools-backend", - "version": "0.1.1-next.1", + "version": "0.1.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -12,6 +12,12 @@ "backstage": { "role": "backend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/devtools-backend" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", @@ -23,6 +29,7 @@ }, "dependencies": { "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", "@backstage/cli-common": "workspace:^", "@backstage/config": "workspace:^", "@backstage/config-loader": "workspace:^", @@ -42,7 +49,7 @@ "lodash": "^4.17.21", "node-fetch": "^2.6.7", "ping": "^0.4.1", - "semver": "^7.3.2", + "semver": "^7.5.3", "winston": "^3.2.1", "yn": "^4.0.0" }, diff --git a/plugins/devtools-backend/src/api/DevToolsBackendApi.ts b/plugins/devtools-backend/src/api/DevToolsBackendApi.ts index efd0407b31..c1b1a1fa9a 100644 --- a/plugins/devtools-backend/src/api/DevToolsBackendApi.ts +++ b/plugins/devtools-backend/src/api/DevToolsBackendApi.ts @@ -219,7 +219,12 @@ export class DevToolsBackendApi { const lockfilePath = paths.resolveTargetRoot('yarn.lock'); const lockfile = await Lockfile.load(lockfilePath); - const deps = [...lockfile.keys()].filter(n => n.startsWith('@backstage/')); + const prefixes = ['@backstage', '@internal'].concat( + this.config.getOptionalStringArray('devTools.info.packagePrefixes') ?? [], + ); + const deps = [...lockfile.keys()].filter(n => + prefixes.some(prefix => n.startsWith(prefix)), + ); const infoDependencies: PackageDependency[] = []; for (const dep of deps) { diff --git a/plugins/devtools-backend/src/index.ts b/plugins/devtools-backend/src/index.ts index e1545e0022..57c1739c34 100644 --- a/plugins/devtools-backend/src/index.ts +++ b/plugins/devtools-backend/src/index.ts @@ -22,3 +22,4 @@ export { DevToolsBackendApi } from './api'; export * from './service/router'; +export { devtoolsPlugin } from './plugin'; diff --git a/plugins/devtools-backend/src/plugin.ts b/plugins/devtools-backend/src/plugin.ts new file mode 100644 index 0000000000..685522557e --- /dev/null +++ b/plugins/devtools-backend/src/plugin.ts @@ -0,0 +1,50 @@ +/* + * 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 { loggerToWinstonLogger } from '@backstage/backend-common'; +import { + coreServices, + createBackendPlugin, +} from '@backstage/backend-plugin-api'; +import { createRouter } from './service/router'; + +/** + * DevTools backend plugin + * + * @public + */ +export const devtoolsPlugin = createBackendPlugin({ + pluginId: 'devtools', + register(env) { + env.registerInit({ + deps: { + config: coreServices.rootConfig, + logger: coreServices.logger, + permissions: coreServices.permissions, + httpRouter: coreServices.httpRouter, + }, + async init({ config, logger, permissions, httpRouter }) { + httpRouter.use( + await createRouter({ + config, + logger: loggerToWinstonLogger(logger), + permissions, + }), + ); + }, + }); + }, +}); diff --git a/plugins/devtools-common/CHANGELOG.md b/plugins/devtools-common/CHANGELOG.md index 71d8d86821..adf0300433 100644 --- a/plugins/devtools-common/CHANGELOG.md +++ b/plugins/devtools-common/CHANGELOG.md @@ -1,5 +1,39 @@ # @backstage/plugin-devtools-common +## 0.1.3-next.0 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/types@1.1.0 + - @backstage/plugin-permission-common@0.7.7 + +## 0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.1.0 + - @backstage/plugin-permission-common@0.7.7 + +## 0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.1.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + +## 0.1.1 + +### Patch Changes + +- 459331f657ec: Export the list of permissions +- Updated dependencies + - @backstage/types@1.1.0 + - @backstage/plugin-permission-common@0.7.6 + ## 0.1.1-next.0 ### Patch Changes diff --git a/plugins/devtools-common/package.json b/plugins/devtools-common/package.json index eef4731bbb..d098df0e23 100644 --- a/plugins/devtools-common/package.json +++ b/plugins/devtools-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-devtools-common", "description": "Common functionalities for the devtools plugin", - "version": "0.1.1-next.0", + "version": "0.1.3-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -14,6 +14,12 @@ "backstage": { "role": "common-library" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/devtools-common" + }, "scripts": { "build": "backstage-cli package build", "lint": "backstage-cli package lint", diff --git a/plugins/devtools/CHANGELOG.md b/plugins/devtools/CHANGELOG.md index 776bcbd8ef..d87d21a886 100644 --- a/plugins/devtools/CHANGELOG.md +++ b/plugins/devtools/CHANGELOG.md @@ -1,5 +1,115 @@ # @backstage/plugin-devtools +## 0.1.3-next.1 + +### Patch Changes + +- 48b6a04ad045: Fix readme typo +- Updated dependencies + - @backstage/plugin-devtools-common@0.1.3-next.0 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + - @backstage/types@1.1.0 + - @backstage/plugin-permission-react@0.4.14 + +## 0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + - @backstage/types@1.1.0 + - @backstage/plugin-devtools-common@0.1.2 + - @backstage/plugin-permission-react@0.4.14 + +## 0.1.2 + +### Patch Changes + +- 5969639fd075: Allow specifying custom title for `DevToolsLayout` +- 2c4869473155: Updated the `README` with instructions on how to integrate the Catalog Unprocessed Entities plugin as a tab within DevTools +- e6f50426333b: update some peer dependencies to silence yarn install +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/types@1.1.0 + - @backstage/plugin-devtools-common@0.1.2 + - @backstage/plugin-permission-react@0.4.14 + +## 0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/errors@1.2.1-next.0 + - @backstage/types@1.1.0 + - @backstage/plugin-devtools-common@0.1.2-next.0 + - @backstage/plugin-permission-react@0.4.14-next.2 + +## 0.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-permission-react@0.4.14-next.1 + +## 0.1.2-next.0 + +### Patch Changes + +- 5969639fd075: Allow specifying custom title for `DevToolsLayout` +- 2c4869473155: Updated the `README` with instructions on how to integrate the Catalog Unprocessed Entities plugin as a tab within DevTools +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/types@1.1.0 + - @backstage/plugin-devtools-common@0.1.2-next.0 + - @backstage/plugin-permission-react@0.4.14-next.0 + +## 0.1.1 + +### Patch Changes + +- 62d191f6c8b5: Updated DevTools documentation for Docker users +- bbe15f70c5cc: Added note to README about how secrets are displayed in the Config tab of the DevTools plugin +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/types@1.1.0 + - @backstage/theme@0.4.0 + - @backstage/errors@1.2.0 + - @backstage/plugin-devtools-common@0.1.1 + - @backstage/plugin-permission-react@0.4.13 + +## 0.1.1-next.3 + +### Patch Changes + +- 62d191f6c8b5: Updated DevTools documentation for Docker users +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/types@1.0.2 + - @backstage/plugin-devtools-common@0.1.1-next.0 + - @backstage/plugin-permission-react@0.4.13-next.0 + ## 0.1.1-next.2 ### Patch Changes diff --git a/plugins/devtools/README.md b/plugins/devtools/README.md index fb58c1378a..cb6fbb95fd 100644 --- a/plugins/devtools/README.md +++ b/plugins/devtools/README.md @@ -12,6 +12,20 @@ Lists helpful information about your current running Backstage instance such as: ![Example of Info tab](./docs/devtools-info-tab.png) +#### Backstage Version Reporting + +The Backstage Version that is reported requires `backstage.json` to be present at the root of the running backstage instance. +You may need to modify your Dockerfile to ensure `backstage.json` is copied into the `WORKDIR` of your image. + +```sh +WORKDIR /app +# This switches many Node.js dependencies to production mode. +ENV NODE_ENV production + +# Then copy the rest of the backend bundle, along with any other files we might want (including backstage.json). +COPY --chown=node:node ... backstage.json ./ +``` + ### Config Lists the configuration being used by your current running Backstage instance. @@ -30,6 +44,12 @@ Lists the status of configured External Dependencies based on your current runni ![Example of external dependencies tab](./docs/devtools-external-dependencies.png) +### Catalog Unprocessed Entities + +The [Catalog Unprocessed Entities plugin](https://github.com/backstage/backstage/tree/master/plugins/catalog-unprocessed-entities) has an optional tab that you can also be added that will show unprocessed entities: + +![Example of unprocessed entities tab](./docs/catalog-unprocessed-entities-tab.png) + ## Setup The following sections will help you get the DevTools plugin setup and running. @@ -135,6 +155,43 @@ The DevTools plugin has been designed so that you can customize the tabs to suit With this setup you can add or remove the tabs as you'd like or add your own simply by editing your `CustomDevToolsPage.tsx` file +### Adding Tabs From Other Plugins + +You can also add tabs to show content from other plugins that fit well with the other DevTools content. + +#### Catalog Unprocessed Entities Tab + +Here's how to add the Catalog Unprocessed Entities tab: + +1. Install and setup the [Catalog Unprocessed Entities plugin](https://github.com/backstage/backstage/tree/master/plugins/catalog-unprocessed-entities) as per its documentation +2. Add the following import to your `CustomDevToolsPage.tsx`: + + `import { UnprocessedEntitiesContent } from '@backstage/plugin-catalog-unprocessed-entities';` + +3. Then add a new `DevToolsLayout.Route` to the end of your `DevToolsLayout` like this: + + ```diff + + + + + + + + + + + + + + + + + + ``` + +4. Now run `yarn dev` and navigate to the DevTools you'll see a new tab for Unprocessed Entities + ## Permissions The DevTools plugin supports the [permissions framework](https://backstage.io/docs/permissions/overview), the following sections outline how you can use them with the assumption that you have the permissions framework setup and working. @@ -153,7 +210,7 @@ To use the permission framework to secure the DevTools sidebar option you'll wan ``` 2. Then open the `packages/app/src/components/Root/Root.tsx` file -3. The add these imports after all the existing import statements: +3. Then add these imports after all the existing import statements: ```ts import { devToolsAdministerPermission } from '@backstage/plugin-devtools-common'; @@ -351,11 +408,23 @@ export const customDevToolsPage = ; ## Configuration -The following sections outline the configuration for the DevTools plugin +The following sections outline the configuration for the DevTools plugin. + +### Package Dependencies + +By default, only packages with names starting with `@backstage` and `@internal` will be listed on the main "Info" tab. If you would like additional packages to be listed, you can specify the package prefixes (not regular expressions) in your `app-config.yaml`. For example, to not only provide version information about backstage plugins provided by the core application (`@backstage/*` modules) but also `@roadiehq` and `@spotify` plugins, you can specify this configuration: + +```yaml +devTools: + info: + packagePrefixes: + - @roadiehq/backstage- + - @spotify/backstage- +``` ### External Dependencies Configuration -If you decide to use the External Dependencies tab then you'll need to setup the configuration for it in your `app-config.yaml`, if there is no config setup then the tab will be empty. Here's an example: +If you decide to use the External Dependencies tab then you'll need to setup the configuration for it in your `app-config.yaml`. If there is no endpoints configured, then the tab will be empty. Here's an example: ```yaml devTools: @@ -375,3 +444,15 @@ Configuration details: - `name` is the friendly name for your endpoint - `type` can be either `ping` or `fetch` and will perform the respective action on the `target` - `target` is either a URL or server that you want to trigger a `type` action on + +### External Dependencies Requirements + +If you are using the `ping` type you must ensure that `ping` is available in the Host OS that is running Backstage. +For example you may need to add `ping` into the Dockerfile that builds your Backstage image: + +```sh +RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \ + --mount=type=cache,target=/var/lib/apt,sharing=locked \ + apt-get update && \ + apt-get install -y ... iputils-ping +``` diff --git a/plugins/devtools/api-report.md b/plugins/devtools/api-report.md index c9cfbf77e5..3e3fb99ff7 100644 --- a/plugins/devtools/api-report.md +++ b/plugins/devtools/api-report.md @@ -15,12 +15,14 @@ export const ConfigContent: () => JSX.Element; // @public export const DevToolsLayout: { - ({ children }: DevToolsLayoutProps): JSX.Element; + ({ children, title, subtitle }: DevToolsLayoutProps): JSX.Element; Route: (props: SubRoute) => null; }; // @public (undocumented) export type DevToolsLayoutProps = { + title?: string; + subtitle?: string; children?: default_2.ReactNode; }; diff --git a/plugins/devtools/docs/catalog-unprocessed-entities-tab.png b/plugins/devtools/docs/catalog-unprocessed-entities-tab.png new file mode 100644 index 0000000000..82afdcb759 Binary files /dev/null and b/plugins/devtools/docs/catalog-unprocessed-entities-tab.png differ diff --git a/plugins/devtools/package.json b/plugins/devtools/package.json index 3febf7598f..a791233f17 100644 --- a/plugins/devtools/package.json +++ b/plugins/devtools/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-devtools", - "version": "0.1.1-next.2", + "version": "0.1.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -44,6 +44,7 @@ "peerDependencies": { "@types/react": "^16.13.1 || ^17.0.0", "react": "^16.13.1 || ^17.0.0", + "react-dom": "^16.13.1 || ^17.0.0", "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "devDependencies": { diff --git a/plugins/devtools/src/components/DevToolsLayout/DevToolsLayout.tsx b/plugins/devtools/src/components/DevToolsLayout/DevToolsLayout.tsx index 12cd3f7666..ae9a337ced 100644 --- a/plugins/devtools/src/components/DevToolsLayout/DevToolsLayout.tsx +++ b/plugins/devtools/src/components/DevToolsLayout/DevToolsLayout.tsx @@ -40,6 +40,8 @@ attachComponentData(Route, 'core.gatherMountPoints', true); /** @public */ export type DevToolsLayoutProps = { + title?: string; + subtitle?: string; children?: React.ReactNode; }; @@ -56,7 +58,11 @@ export type DevToolsLayoutProps = { * ``` * @public */ -export const DevToolsLayout = ({ children }: DevToolsLayoutProps) => { +export const DevToolsLayout = ({ + children, + title, + subtitle, +}: DevToolsLayoutProps) => { const routes = useElementFilter(children, elements => elements .selectByComponentData({ @@ -70,7 +76,7 @@ export const DevToolsLayout = ({ children }: DevToolsLayoutProps) => { return ( -
+
); diff --git a/plugins/dynatrace/CHANGELOG.md b/plugins/dynatrace/CHANGELOG.md index 60c3b9f424..6cd8f6b0c4 100644 --- a/plugins/dynatrace/CHANGELOG.md +++ b/plugins/dynatrace/CHANGELOG.md @@ -1,5 +1,97 @@ # @backstage/plugin-dynatrace +## 7.0.1-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/catalog-model@1.4.1 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.1-next.0 + +## 7.0.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/theme@0.4.1 + +## 7.0.0 + +### Patch Changes + +- 3424cbfe5f4a: updated the link that the "View Entity in Dynatrace" redirects the user to. +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + +## 7.0.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + +## 6.0.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + +## 6.0.1-next.0 + +### Patch Changes + +- 3424cbfe5f4a: updated the link that the "View Entity in Dynatrace" redirects the user to. +- Updated dependencies + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + +## 6.0.0 + +### Patch Changes + +- 892debb87041: Updated the dynatrace plugin documentation with new minimum API token permission requirements. +- 3d11596a72b5: Update plugin installation docs to be more consistent across documentations +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + +## 6.0.0-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + ## 6.0.0-next.2 ### Patch Changes diff --git a/plugins/dynatrace/README.md b/plugins/dynatrace/README.md index 3d14be9145..b03e65473f 100644 --- a/plugins/dynatrace/README.md +++ b/plugins/dynatrace/README.md @@ -20,6 +20,7 @@ The Dynatrace plugin will require the following information, to be used in the c - Dynatrace API access token (see [documentation](https://www.dynatrace.com/support/help/dynatrace-api/basics/dynatrace-api-authentication)), with the following permissions: - `entities.read` - `problems.read` + - `DataExport` and/or `ExternalSyntheticIntegration` and/or `ReadSyntheticData` #### Install diff --git a/plugins/dynatrace/package.json b/plugins/dynatrace/package.json index 9bede49063..c0a855aa26 100644 --- a/plugins/dynatrace/package.json +++ b/plugins/dynatrace/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-dynatrace", - "version": "6.0.0-next.2", + "version": "7.0.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -12,6 +12,7 @@ "backstage": { "role": "frontend-plugin" }, + "homepage": "https://backstage.io", "repository": { "type": "git", "url": "https://github.com/backstage/backstage", diff --git a/plugins/dynatrace/src/components/Problems/ProblemsList/ProblemsList.tsx b/plugins/dynatrace/src/components/Problems/ProblemsList/ProblemsList.tsx index 2ee0dda48d..9a4ef4d9b9 100644 --- a/plugins/dynatrace/src/components/Problems/ProblemsList/ProblemsList.tsx +++ b/plugins/dynatrace/src/components/Problems/ProblemsList/ProblemsList.tsx @@ -43,6 +43,31 @@ const cardContents = ( ); }; +const dynatraceEntityPrefixes = (idPrefix: string): string => { + switch (idPrefix) { + case 'APPLICATION': + return '#uemapplications/uemappmetrics;uemapplicationId='; + + case 'SERVICE': + return '#services/serviceOverview;id='; + + case `MOBILE_APPLICATION`: + return '#mobileappoverview;appID='; + + case 'SYNTHETIC_TEST': + return 'ui/browser-monitor/'; + + case 'KUBERNETES_CLUSTER': + return 'ui/kubernetes/'; + + case 'PROCESS_GROUP_INSTANCE': + return '#processdetails;id='; + + default: + return 'ui/entity/'; + } +}; + export const ProblemsList = (props: ProblemsListProps) => { const { dynatraceEntityId } = props; const configApi = useApi(configApiRef); @@ -54,6 +79,10 @@ export const ProblemsList = (props: ProblemsListProps) => { }, [dynatraceApi, dynatraceEntityId]); const problems = value?.problems; + const deepLinkPrefix = dynatraceEntityPrefixes( + `${dynatraceEntityId.split('-')[0]}`, + ); + if (loading) { return ; } else if (error) { @@ -65,7 +94,7 @@ export const ProblemsList = (props: ProblemsListProps) => { subheader={`Last 2 hours - ${dynatraceEntityId}`} deepLink={{ title: 'View Entity in Dynatrace', - link: `${dynatraceBaseUrl}/#serviceOverview;id=${dynatraceEntityId}`, + link: `${dynatraceBaseUrl}/${deepLinkPrefix}${dynatraceEntityId}`, }} > {cardContents(problems || [], dynatraceBaseUrl)} diff --git a/plugins/entity-feedback-backend/CHANGELOG.md b/plugins/entity-feedback-backend/CHANGELOG.md index e0cde75e21..c0cd2d8c81 100644 --- a/plugins/entity-feedback-backend/CHANGELOG.md +++ b/plugins/entity-feedback-backend/CHANGELOG.md @@ -1,5 +1,84 @@ # @backstage/plugin-entity-feedback-backend +## 0.1.6-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/plugin-entity-feedback-common@0.1.2-next.0 + - @backstage/plugin-auth-node@0.2.17-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + +## 0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/plugin-auth-node@0.2.17-next.0 + - @backstage/plugin-entity-feedback-common@0.1.1 + +## 0.1.5 + +### Patch Changes + +- 5c1c10adac8f: Added support for the new backend system +- Updated dependencies + - @backstage/backend-common@0.19.1 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/plugin-auth-node@0.2.16 + - @backstage/plugin-entity-feedback-common@0.1.1 + +## 0.1.5-next.0 + +### Patch Changes + +- 5c1c10adac8f: Added support for the new backend system +- Updated dependencies + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/plugin-auth-node@0.2.16-next.0 + - @backstage/plugin-entity-feedback-common@0.1.1 + +## 0.1.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/catalog-client@1.4.2 + - @backstage/catalog-model@1.4.0 + - @backstage/plugin-auth-node@0.2.15 + - @backstage/config@1.0.8 + - @backstage/plugin-entity-feedback-common@0.1.1 + +## 0.1.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/catalog-client@1.4.2-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-auth-node@0.2.15-next.2 + - @backstage/plugin-entity-feedback-common@0.1.1 + ## 0.1.4-next.1 ### Patch Changes diff --git a/plugins/entity-feedback-backend/README.md b/plugins/entity-feedback-backend/README.md index ef180dbae5..99489e28b2 100644 --- a/plugins/entity-feedback-backend/README.md +++ b/plugins/entity-feedback-backend/README.md @@ -48,3 +48,18 @@ async function main() { apiRouter.use(notFoundHandler()); ``` + +### New Backend System + +The Entity Feedback backend plugin has support for the [new backend system](https://backstage.io/docs/backend-system/), here's how you can set that up: +In your `packages/backend/src/index.ts` make the following changes: + +```diff ++ import { entityFeedbackPlugin } from '@backstage/plugin-entity-feedback-backend'; + +const backend = createBackend(); ++ backend.add(entityFeedbackPlugin()); +// ... other feature additions + +backend.start(); +``` diff --git a/plugins/entity-feedback-backend/api-report.md b/plugins/entity-feedback-backend/api-report.md index 3909ac3056..3e8f90220e 100644 --- a/plugins/entity-feedback-backend/api-report.md +++ b/plugins/entity-feedback-backend/api-report.md @@ -3,6 +3,7 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { BackendFeature } from '@backstage/backend-plugin-api'; import express from 'express'; import { IdentityApi } from '@backstage/plugin-auth-node'; import { Logger } from 'winston'; @@ -12,6 +13,9 @@ import { PluginEndpointDiscovery } from '@backstage/backend-common'; // @public (undocumented) export function createRouter(options: RouterOptions): Promise; +// @public +export const entityFeedbackPlugin: () => BackendFeature; + // @public (undocumented) export interface RouterOptions { // (undocumented) diff --git a/plugins/entity-feedback-backend/package.json b/plugins/entity-feedback-backend/package.json index 4f6c7e1601..91cc97a65c 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.4-next.1", + "version": "0.1.6-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -12,6 +12,12 @@ "backstage": { "role": "backend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/entity-feedback-backend" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", @@ -23,6 +29,7 @@ }, "dependencies": { "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", "@backstage/catalog-client": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", diff --git a/plugins/entity-feedback-backend/src/index.ts b/plugins/entity-feedback-backend/src/index.ts index b3c4139eed..74e545de04 100644 --- a/plugins/entity-feedback-backend/src/index.ts +++ b/plugins/entity-feedback-backend/src/index.ts @@ -20,3 +20,4 @@ * @packageDocumentation */ export * from './service/router'; +export { entityFeedbackPlugin } from './plugin'; diff --git a/plugins/entity-feedback-backend/src/plugin.ts b/plugins/entity-feedback-backend/src/plugin.ts new file mode 100644 index 0000000000..6a4ff442ce --- /dev/null +++ b/plugins/entity-feedback-backend/src/plugin.ts @@ -0,0 +1,52 @@ +/* + * 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 { loggerToWinstonLogger } from '@backstage/backend-common'; +import { + coreServices, + createBackendPlugin, +} from '@backstage/backend-plugin-api'; +import { createRouter } from './service/router'; + +/** + * The Entity Feedback backend plugin. + * + * @public + */ +export const entityFeedbackPlugin = createBackendPlugin({ + pluginId: 'entity-feedback', + register(env) { + env.registerInit({ + deps: { + discovery: coreServices.discovery, + database: coreServices.database, + identity: coreServices.identity, + logger: coreServices.logger, + httpRouter: coreServices.httpRouter, + }, + async init({ database, discovery, identity, logger, httpRouter }) { + httpRouter.use( + await createRouter({ + database, + discovery, + identity, + logger: loggerToWinstonLogger(logger), + }), + ); + }, + }); + }, +}); diff --git a/plugins/entity-feedback-common/CHANGELOG.md b/plugins/entity-feedback-common/CHANGELOG.md index 161f990b3a..dd93a7ee36 100644 --- a/plugins/entity-feedback-common/CHANGELOG.md +++ b/plugins/entity-feedback-common/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/plugin-entity-feedback-common +## 0.1.2-next.0 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata + ## 0.1.1 ### Patch Changes diff --git a/plugins/entity-feedback-common/package.json b/plugins/entity-feedback-common/package.json index 6abb002aa4..776e33e198 100644 --- a/plugins/entity-feedback-common/package.json +++ b/plugins/entity-feedback-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-entity-feedback-common", "description": "Common functionalities for the entity-feedback plugin", - "version": "0.1.1", + "version": "0.1.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -14,6 +14,12 @@ "backstage": { "role": "common-library" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/entity-feedback-common" + }, "scripts": { "build": "backstage-cli package build", "lint": "backstage-cli package lint", diff --git a/plugins/entity-feedback/CHANGELOG.md b/plugins/entity-feedback/CHANGELOG.md index 01f330123f..8429cdb56b 100644 --- a/plugins/entity-feedback/CHANGELOG.md +++ b/plugins/entity-feedback/CHANGELOG.md @@ -1,5 +1,108 @@ # @backstage/plugin-entity-feedback +## 0.2.4-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/plugin-entity-feedback-common@0.1.2-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.1-next.0 + +## 0.2.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + - @backstage/plugin-entity-feedback-common@0.1.1 + +## 0.2.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + - @backstage/plugin-entity-feedback-common@0.1.1 + +## 0.2.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/errors@1.2.1-next.0 + - @backstage/plugin-entity-feedback-common@0.1.1 + +## 0.2.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + +## 0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + - @backstage/plugin-entity-feedback-common@0.1.1 + +## 0.2.2 + +### Patch Changes + +- 5c0f095c7660: Show user in feedback response table as link +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + - @backstage/plugin-entity-feedback-common@0.1.1 + +## 0.2.2-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + - @backstage/plugin-entity-feedback-common@0.1.1 + ## 0.2.2-next.2 ### Patch Changes diff --git a/plugins/entity-feedback/package.json b/plugins/entity-feedback/package.json index b55a211b02..2736a3a1e2 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.2-next.2", + "version": "0.2.4-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -12,6 +12,7 @@ "backstage": { "role": "frontend-plugin" }, + "homepage": "https://backstage.io", "repository": { "type": "git", "url": "https://github.com/backstage/backstage", @@ -56,7 +57,6 @@ "@testing-library/react-hooks": "^8.0.1", "@testing-library/user-event": "^14.0.0", "@types/node": "*", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/entity-feedback/src/components/FeedbackResponseTable/FeedbackResponseTable.test.tsx b/plugins/entity-feedback/src/components/FeedbackResponseTable/FeedbackResponseTable.test.tsx index c5d3d51884..5e0dcbf67b 100644 --- a/plugins/entity-feedback/src/components/FeedbackResponseTable/FeedbackResponseTable.test.tsx +++ b/plugins/entity-feedback/src/components/FeedbackResponseTable/FeedbackResponseTable.test.tsx @@ -14,6 +14,7 @@ * limitations under the License. */ +import { entityRouteRef } from '@backstage/plugin-catalog-react'; import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; import React from 'react'; import { EntityFeedbackApi, entityFeedbackApiRef } from '../../api'; @@ -44,6 +45,9 @@ describe('FeedbackResponseTable', () => { , + { + mountedRoutes: { '/catalog/:namespace/:kind/:name': entityRouteRef }, + }, ); beforeEach(() => { diff --git a/plugins/entity-feedback/src/components/FeedbackResponseTable/FeedbackResponseTable.tsx b/plugins/entity-feedback/src/components/FeedbackResponseTable/FeedbackResponseTable.tsx index ba954c7747..654cfd1413 100644 --- a/plugins/entity-feedback/src/components/FeedbackResponseTable/FeedbackResponseTable.tsx +++ b/plugins/entity-feedback/src/components/FeedbackResponseTable/FeedbackResponseTable.tsx @@ -14,10 +14,9 @@ * limitations under the License. */ -import { parseEntityRef } from '@backstage/catalog-model'; import { ErrorPanel, Table } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; -import { humanizeEntityRef } from '@backstage/plugin-catalog-react'; +import { EntityRefLink } from '@backstage/plugin-catalog-react'; import { FeedbackResponse } from '@backstage/plugin-entity-feedback-common'; import { BackstageTheme } from '@backstage/theme'; import { Chip, makeStyles } from '@material-ui/core'; @@ -65,10 +64,9 @@ export const FeedbackResponseTable = (props: FeedbackResponseTableProps) => { title: 'User', field: 'userRef', width: '15%', - render: (response: ResponseRow) => - humanizeEntityRef(parseEntityRef(response.userRef), { - defaultKind: 'user', - }), + render: (response: ResponseRow) => ( + + ), }, { title: 'OK to contact?', diff --git a/plugins/entity-feedback/src/setupTests.ts b/plugins/entity-feedback/src/setupTests.ts index bf4855cb6e..c30f1d15cb 100644 --- a/plugins/entity-feedback/src/setupTests.ts +++ b/plugins/entity-feedback/src/setupTests.ts @@ -15,4 +15,3 @@ */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/entity-validation/CHANGELOG.md b/plugins/entity-validation/CHANGELOG.md index 1f4720a3b3..beaf7524d2 100644 --- a/plugins/entity-validation/CHANGELOG.md +++ b/plugins/entity-validation/CHANGELOG.md @@ -1,5 +1,115 @@ # @backstage/plugin-entity-validation +## 0.1.6-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-common@1.0.15 + - @backstage/plugin-catalog-react@1.8.1-next.0 + +## 0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-common@1.0.15 + +## 0.1.5 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/plugin-catalog-common@1.0.15 + +## 0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/errors@1.2.1-next.0 + - @backstage/plugin-catalog-common@1.0.15-next.0 + +## 0.1.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + +## 0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-common@1.0.15-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + +## 0.1.4 + +### Patch Changes + +- 3d11596a72b5: Update plugin installation docs to be more consistent across documentations +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/catalog-client@1.4.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + - @backstage/plugin-catalog-common@1.0.14 + +## 0.1.4-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/catalog-client@1.4.2-next.2 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-catalog-common@1.0.14-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + ## 0.1.4-next.2 ### Patch Changes diff --git a/plugins/entity-validation/package.json b/plugins/entity-validation/package.json index 803d0a79c2..5b85f1f199 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.4-next.2", + "version": "0.1.6-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -12,6 +12,7 @@ "backstage": { "role": "frontend-plugin" }, + "homepage": "https://backstage.io", "repository": { "type": "git", "url": "https://github.com/backstage/backstage", @@ -63,7 +64,6 @@ "@testing-library/user-event": "^14.0.0", "@types/node": "*", "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/entity-validation/src/setupTests.ts b/plugins/entity-validation/src/setupTests.ts index 73dd8dce47..865308e634 100644 --- a/plugins/entity-validation/src/setupTests.ts +++ b/plugins/entity-validation/src/setupTests.ts @@ -14,4 +14,3 @@ * limitations under the License. */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/events-backend-module-aws-sqs/CHANGELOG.md b/plugins/events-backend-module-aws-sqs/CHANGELOG.md index afe9ed8d8d..ab4643de53 100644 --- a/plugins/events-backend-module-aws-sqs/CHANGELOG.md +++ b/plugins/events-backend-module-aws-sqs/CHANGELOG.md @@ -1,5 +1,82 @@ # @backstage/plugin-events-backend-module-aws-sqs +## 0.2.3-next.1 + +### Patch Changes + +- 629cbd194a87: Use `coreServices.rootConfig` instead of `coreService.config` +- 12a8c94eda8d: Add package repository and homepage metadata +- 4b82382ed8c2: Fixed invalid configuration schema. The configuration schema may be more strict as a result. +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/plugin-events-node@0.2.9-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/backend-tasks@0.5.5-next.1 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + +## 0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/backend-tasks@0.5.5-next.0 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-events-node@0.2.9-next.0 + +## 0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/backend-tasks@0.5.4 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-events-node@0.2.8 + +## 0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/backend-tasks@0.5.4-next.0 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-events-node@0.2.8-next.0 + +## 0.2.1 + +### Patch Changes + +- 5f2c38c70f5b: Fix SNYK-JS-FASTXMLPARSER-5668858 (`fast-xml-parser`) by upgrading aws-sdk to at least the current latest version. +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/types@1.1.0 + - @backstage/backend-plugin-api@0.5.3 + - @backstage/backend-tasks@0.5.3 + - @backstage/config@1.0.8 + - @backstage/plugin-events-node@0.2.7 + +## 0.2.1-next.2 + +### Patch Changes + +- 5f2c38c70f5b: Fix SNYK-JS-FASTXMLPARSER-5668858 (`fast-xml-parser`) by upgrading aws-sdk to at least the current latest version. +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/backend-tasks@0.5.3-next.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-events-node@0.2.7-next.2 + ## 0.2.1-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-aws-sqs/config.d.ts b/plugins/events-backend-module-aws-sqs/config.d.ts index dfef35bf22..c2edfeae8e 100644 --- a/plugins/events-backend-module-aws-sqs/config.d.ts +++ b/plugins/events-backend-module-aws-sqs/config.d.ts @@ -31,9 +31,8 @@ export interface Config { * Contains a record per topic for which an AWS SQS queue * should be used as source of events. */ - topics: Record< - string, - { + topics: { + [name: string]: { /** * (Required) Queue-related configuration. */ @@ -69,8 +68,8 @@ export interface Config { * Default: 1 minute. */ waitTimeAfterEmptyReceive: HumanDuration; - } - >; + }; + }; }; }; }; diff --git a/plugins/events-backend-module-aws-sqs/package.json b/plugins/events-backend-module-aws-sqs/package.json index e4857d952c..0e0e1e65e4 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.2.1-next.1", + "version": "0.2.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,6 +25,12 @@ "backstage": { "role": "backend-plugin-module" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/events-backend-module-aws-sqs" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", @@ -35,7 +41,7 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@aws-sdk/client-sqs": "^3.310.0", + "@aws-sdk/client-sqs": "^3.350.0", "@backstage/backend-common": "workspace:^", "@backstage/backend-plugin-api": "workspace:^", "@backstage/backend-tasks": "workspace:^", @@ -46,7 +52,7 @@ "winston": "^3.2.1" }, "devDependencies": { - "@aws-sdk/types": "^3.310.0", + "@aws-sdk/types": "^3.347.0", "@backstage/backend-common": "workspace:^", "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", diff --git a/plugins/events-backend-module-aws-sqs/src/service/eventsModuleAwsSqsConsumingEventPublisher.test.ts b/plugins/events-backend-module-aws-sqs/src/service/eventsModuleAwsSqsConsumingEventPublisher.test.ts index 921dc38552..849ad733de 100644 --- a/plugins/events-backend-module-aws-sqs/src/service/eventsModuleAwsSqsConsumingEventPublisher.test.ts +++ b/plugins/events-backend-module-aws-sqs/src/service/eventsModuleAwsSqsConsumingEventPublisher.test.ts @@ -64,7 +64,7 @@ describe('eventsModuleAwsSqsConsumingEventPublisher', () => { await startTestBackend({ extensionPoints: [[eventsExtensionPoint, extensionPoint]], services: [ - [coreServices.config, config], + [coreServices.rootConfig, config], [coreServices.logger, getVoidLogger()], [coreServices.scheduler, scheduler], ], diff --git a/plugins/events-backend-module-aws-sqs/src/service/eventsModuleAwsSqsConsumingEventPublisher.ts b/plugins/events-backend-module-aws-sqs/src/service/eventsModuleAwsSqsConsumingEventPublisher.ts index 41ae2d80d7..9045047094 100644 --- a/plugins/events-backend-module-aws-sqs/src/service/eventsModuleAwsSqsConsumingEventPublisher.ts +++ b/plugins/events-backend-module-aws-sqs/src/service/eventsModuleAwsSqsConsumingEventPublisher.ts @@ -33,7 +33,7 @@ export const eventsModuleAwsSqsConsumingEventPublisher = createBackendModule({ register(env) { env.registerInit({ deps: { - config: coreServices.config, + config: coreServices.rootConfig, events: eventsExtensionPoint, logger: coreServices.logger, scheduler: coreServices.scheduler, diff --git a/plugins/events-backend-module-azure/CHANGELOG.md b/plugins/events-backend-module-azure/CHANGELOG.md index bd88fb7d59..c4a72dfbdd 100644 --- a/plugins/events-backend-module-azure/CHANGELOG.md +++ b/plugins/events-backend-module-azure/CHANGELOG.md @@ -1,5 +1,55 @@ # @backstage/plugin-events-backend-module-azure +## 0.1.10-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/plugin-events-node@0.2.9-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + +## 0.1.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/plugin-events-node@0.2.9-next.0 + +## 0.1.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.4 + - @backstage/plugin-events-node@0.2.8 + +## 0.1.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/plugin-events-node@0.2.8-next.0 + +## 0.1.8 + +### Patch Changes + +- 807416a9ed39: fix Installation documentation +- Updated dependencies + - @backstage/backend-plugin-api@0.5.3 + - @backstage/plugin-events-node@0.2.7 + +## 0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/plugin-events-node@0.2.7-next.2 + ## 0.1.8-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-azure/README.md b/plugins/events-backend-module-azure/README.md index 214c00e2fd..26bffbc45d 100644 --- a/plugins/events-backend-module-azure/README.md +++ b/plugins/events-backend-module-azure/README.md @@ -31,12 +31,12 @@ Install this module: yarn add --cwd packages/backend @backstage/plugin-events-backend-module-azure ``` -Add the event router to the `EventsBackend`: +Add the event router to the `EventsBackend` instance in `packages/backend/src/plugins/events.ts`: ```diff +const azureEventRouter = new AzureDevOpsEventRouter(); - EventsBackend +new EventsBackend(env.logger) + .addPublishers(azureEventRouter) + .addSubscribers(azureEventRouter); // [...] diff --git a/plugins/events-backend-module-azure/package.json b/plugins/events-backend-module-azure/package.json index c513fdef75..568e3eda8f 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.8-next.1", + "version": "0.1.10-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,6 +25,12 @@ "backstage": { "role": "backend-plugin-module" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/events-backend-module-azure" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", diff --git a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md index c6c9f0e0d3..a916666a22 100644 --- a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,55 @@ # @backstage/plugin-events-backend-module-bitbucket-cloud +## 0.1.10-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/plugin-events-node@0.2.9-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + +## 0.1.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/plugin-events-node@0.2.9-next.0 + +## 0.1.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.4 + - @backstage/plugin-events-node@0.2.8 + +## 0.1.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/plugin-events-node@0.2.8-next.0 + +## 0.1.8 + +### Patch Changes + +- 807416a9ed39: fix Installation documentation +- Updated dependencies + - @backstage/backend-plugin-api@0.5.3 + - @backstage/plugin-events-node@0.2.7 + +## 0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/plugin-events-node@0.2.7-next.2 + ## 0.1.8-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-bitbucket-cloud/README.md b/plugins/events-backend-module-bitbucket-cloud/README.md index c58529ed7a..60fdf52af9 100644 --- a/plugins/events-backend-module-bitbucket-cloud/README.md +++ b/plugins/events-backend-module-bitbucket-cloud/README.md @@ -31,12 +31,12 @@ Install this module: yarn add --cwd packages/backend @backstage/plugin-events-backend-module-bitbucket-cloud ``` -Add the event router to the `EventsBackend`: +Add the event router to the `EventsBackend` instance in `packages/backend/src/plugins/events.ts`: ```diff +const bitbucketCloudEventRouter = new BitbucketCloudEventRouter(); - EventsBackend +new EventsBackend(env.logger) + .addPublishers(bitbucketCloudEventRouter) + .addSubscribers(bitbucketCloudEventRouter); // [...] diff --git a/plugins/events-backend-module-bitbucket-cloud/package.json b/plugins/events-backend-module-bitbucket-cloud/package.json index 4436959b64..1ef814848d 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.8-next.1", + "version": "0.1.10-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,6 +25,12 @@ "backstage": { "role": "backend-plugin-module" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/events-backend-module-bitbucket-cloud" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", diff --git a/plugins/events-backend-module-gerrit/CHANGELOG.md b/plugins/events-backend-module-gerrit/CHANGELOG.md index c3dae60082..07276b736b 100644 --- a/plugins/events-backend-module-gerrit/CHANGELOG.md +++ b/plugins/events-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,55 @@ # @backstage/plugin-events-backend-module-gerrit +## 0.1.10-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/plugin-events-node@0.2.9-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + +## 0.1.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/plugin-events-node@0.2.9-next.0 + +## 0.1.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.4 + - @backstage/plugin-events-node@0.2.8 + +## 0.1.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/plugin-events-node@0.2.8-next.0 + +## 0.1.8 + +### Patch Changes + +- 807416a9ed39: fix Installation documentation +- Updated dependencies + - @backstage/backend-plugin-api@0.5.3 + - @backstage/plugin-events-node@0.2.7 + +## 0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/plugin-events-node@0.2.7-next.2 + ## 0.1.8-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-gerrit/README.md b/plugins/events-backend-module-gerrit/README.md index 933b7a172f..1808ef46ba 100644 --- a/plugins/events-backend-module-gerrit/README.md +++ b/plugins/events-backend-module-gerrit/README.md @@ -30,12 +30,12 @@ Install this module: yarn add --cwd packages/backend @backstage/plugin-events-backend-module-gerrit ``` -Add the event router to the `EventsBackend`: +Add the event router to the `EventsBackend` instance in `packages/backend/src/plugins/events.ts`: ```diff +const gerritEventRouter = new GerritEventRouter(); - EventsBackend +new EventsBackend(env.logger) + .addPublishers(gerritEventRouter) + .addSubscribers(gerritEventRouter); // [...] diff --git a/plugins/events-backend-module-gerrit/package.json b/plugins/events-backend-module-gerrit/package.json index a084988358..3f265c6613 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.8-next.1", + "version": "0.1.10-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,6 +25,12 @@ "backstage": { "role": "backend-plugin-module" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/events-backend-module-gerrit" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", diff --git a/plugins/events-backend-module-github/CHANGELOG.md b/plugins/events-backend-module-github/CHANGELOG.md index 08e06c45fa..e29d71c92f 100644 --- a/plugins/events-backend-module-github/CHANGELOG.md +++ b/plugins/events-backend-module-github/CHANGELOG.md @@ -1,5 +1,62 @@ # @backstage/plugin-events-backend-module-github +## 0.1.10-next.1 + +### Patch Changes + +- 629cbd194a87: Use `coreServices.rootConfig` instead of `coreService.config` +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/plugin-events-node@0.2.9-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/config@1.0.8 + +## 0.1.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/config@1.0.8 + - @backstage/plugin-events-node@0.2.9-next.0 + +## 0.1.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.4 + - @backstage/config@1.0.8 + - @backstage/plugin-events-node@0.2.8 + +## 0.1.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/config@1.0.8 + - @backstage/plugin-events-node@0.2.8-next.0 + +## 0.1.8 + +### Patch Changes + +- 807416a9ed39: fix Installation documentation +- Updated dependencies + - @backstage/backend-plugin-api@0.5.3 + - @backstage/config@1.0.8 + - @backstage/plugin-events-node@0.2.7 + +## 0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.7-next.2 + ## 0.1.8-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-github/README.md b/plugins/events-backend-module-github/README.md index fb0a0d1c35..7731d10d24 100644 --- a/plugins/events-backend-module-github/README.md +++ b/plugins/events-backend-module-github/README.md @@ -31,12 +31,12 @@ Install this module: yarn add --cwd packages/backend @backstage/plugin-events-backend-module-github ``` -Add the event router to the `EventsBackend`: +Add the event router to the `EventsBackend` instance in `packages/backend/src/plugins/events.ts`: ```diff +const githubEventRouter = new GithubEventRouter(); - EventsBackend +new EventsBackend(env.logger) + .addPublishers(githubEventRouter) + .addSubscribers(githubEventRouter); // [...] diff --git a/plugins/events-backend-module-github/package.json b/plugins/events-backend-module-github/package.json index b8964aec2f..abde4c91a7 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.8-next.1", + "version": "0.1.10-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,6 +25,12 @@ "backstage": { "role": "backend-plugin-module" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/events-backend-module-github" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", diff --git a/plugins/events-backend-module-github/src/service/eventsModuleGithubWebhook.test.ts b/plugins/events-backend-module-github/src/service/eventsModuleGithubWebhook.test.ts index b8a252aaba..f5bb07f0d6 100644 --- a/plugins/events-backend-module-github/src/service/eventsModuleGithubWebhook.test.ts +++ b/plugins/events-backend-module-github/src/service/eventsModuleGithubWebhook.test.ts @@ -59,7 +59,7 @@ describe('eventsModuleGithubWebhook', () => { await startTestBackend({ extensionPoints: [[eventsExtensionPoint, extensionPoint]], - services: [[coreServices.config, config]], + services: [[coreServices.rootConfig, config]], features: [eventsModuleGithubWebhook()], }); diff --git a/plugins/events-backend-module-github/src/service/eventsModuleGithubWebhook.ts b/plugins/events-backend-module-github/src/service/eventsModuleGithubWebhook.ts index 7e89ceead7..b4bd666036 100644 --- a/plugins/events-backend-module-github/src/service/eventsModuleGithubWebhook.ts +++ b/plugins/events-backend-module-github/src/service/eventsModuleGithubWebhook.ts @@ -34,7 +34,7 @@ export const eventsModuleGithubWebhook = createBackendModule({ register(env) { env.registerInit({ deps: { - config: coreServices.config, + config: coreServices.rootConfig, events: eventsExtensionPoint, }, async init({ config, events }) { diff --git a/plugins/events-backend-module-gitlab/CHANGELOG.md b/plugins/events-backend-module-gitlab/CHANGELOG.md index febe50d70e..231bf6dfe2 100644 --- a/plugins/events-backend-module-gitlab/CHANGELOG.md +++ b/plugins/events-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,62 @@ # @backstage/plugin-events-backend-module-gitlab +## 0.1.10-next.1 + +### Patch Changes + +- 629cbd194a87: Use `coreServices.rootConfig` instead of `coreService.config` +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/plugin-events-node@0.2.9-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/config@1.0.8 + +## 0.1.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/config@1.0.8 + - @backstage/plugin-events-node@0.2.9-next.0 + +## 0.1.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.4 + - @backstage/config@1.0.8 + - @backstage/plugin-events-node@0.2.8 + +## 0.1.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/config@1.0.8 + - @backstage/plugin-events-node@0.2.8-next.0 + +## 0.1.8 + +### Patch Changes + +- 807416a9ed39: fix Installation documentation +- Updated dependencies + - @backstage/backend-plugin-api@0.5.3 + - @backstage/config@1.0.8 + - @backstage/plugin-events-node@0.2.7 + +## 0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.7-next.2 + ## 0.1.8-next.1 ### Patch Changes diff --git a/plugins/events-backend-module-gitlab/README.md b/plugins/events-backend-module-gitlab/README.md index dbe9f7bfe3..13e30659a6 100644 --- a/plugins/events-backend-module-gitlab/README.md +++ b/plugins/events-backend-module-gitlab/README.md @@ -30,12 +30,12 @@ Install this module: yarn add --cwd packages/backend @backstage/plugin-events-backend-module-gitlab ``` -Add the event router to the `EventsBackend`: +Add the event router to the `EventsBackend` instance in `packages/backend/src/plugins/events.ts`: ```diff +const gitlabEventRouter = new GitlabEventRouter(); - EventsBackend +new EventsBackend(env.logger) + .addPublishers(gitlabEventRouter) + .addSubscribers(gitlabEventRouter); // [...] diff --git a/plugins/events-backend-module-gitlab/package.json b/plugins/events-backend-module-gitlab/package.json index 55dbfa1297..e25366b2f7 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.8-next.1", + "version": "0.1.10-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,6 +25,12 @@ "backstage": { "role": "backend-plugin-module" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/events-backend-module-gitlab" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", diff --git a/plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabWebhook.test.ts b/plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabWebhook.test.ts index c38233ecfd..92e803c439 100644 --- a/plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabWebhook.test.ts +++ b/plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabWebhook.test.ts @@ -54,7 +54,7 @@ describe('gitlabWebhookEventsModule', () => { await startTestBackend({ extensionPoints: [[eventsExtensionPoint, extensionPoint]], - services: [[coreServices.config, config]], + services: [[coreServices.rootConfig, config]], features: [eventsModuleGitlabWebhook()], }); diff --git a/plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabWebhook.ts b/plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabWebhook.ts index 0933ef342a..bd596b4baf 100644 --- a/plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabWebhook.ts +++ b/plugins/events-backend-module-gitlab/src/service/eventsModuleGitlabWebhook.ts @@ -36,7 +36,7 @@ export const eventsModuleGitlabWebhook = createBackendModule({ register(env) { env.registerInit({ deps: { - config: coreServices.config, + config: coreServices.rootConfig, events: eventsExtensionPoint, }, async init({ config, events }) { diff --git a/plugins/events-backend-test-utils/CHANGELOG.md b/plugins/events-backend-test-utils/CHANGELOG.md index 929a7e12a4..123a6224ed 100644 --- a/plugins/events-backend-test-utils/CHANGELOG.md +++ b/plugins/events-backend-test-utils/CHANGELOG.md @@ -1,5 +1,48 @@ # @backstage/plugin-events-backend-test-utils +## 0.1.10-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/plugin-events-node@0.2.9-next.1 + +## 0.1.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.9-next.0 + +## 0.1.9 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.8 + +## 0.1.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.8-next.0 + +## 0.1.8 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.7 + +## 0.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.7-next.2 + ## 0.1.8-next.1 ### Patch Changes diff --git a/plugins/events-backend-test-utils/package.json b/plugins/events-backend-test-utils/package.json index 3d98fefd8c..a90a16a6c4 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.8-next.1", + "version": "0.1.10-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -13,6 +13,12 @@ "backstage": { "role": "node-library" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/events-backend-test-utils" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", diff --git a/plugins/events-backend/CHANGELOG.md b/plugins/events-backend/CHANGELOG.md index 111309b65f..f2f9d5f01d 100644 --- a/plugins/events-backend/CHANGELOG.md +++ b/plugins/events-backend/CHANGELOG.md @@ -1,5 +1,67 @@ # @backstage/plugin-events-backend +## 0.2.9-next.1 + +### Patch Changes + +- 629cbd194a87: Use `coreServices.rootConfig` instead of `coreService.config` +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/plugin-events-node@0.2.9-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/config@1.0.8 + +## 0.2.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/config@1.0.8 + - @backstage/plugin-events-node@0.2.9-next.0 + +## 0.2.8 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/config@1.0.8 + - @backstage/plugin-events-node@0.2.8 + +## 0.2.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/config@1.0.8 + - @backstage/plugin-events-node@0.2.8-next.0 + +## 0.2.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/backend-plugin-api@0.5.3 + - @backstage/config@1.0.8 + - @backstage/plugin-events-node@0.2.7 + +## 0.2.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-events-node@0.2.7-next.2 + ## 0.2.7-next.1 ### Patch Changes diff --git a/plugins/events-backend/README.md b/plugins/events-backend/README.md index 6f9d5c5a0d..969e1bbcb2 100644 --- a/plugins/events-backend/README.md +++ b/plugins/events-backend/README.md @@ -21,7 +21,7 @@ to the used event broker. ```bash # From your Backstage root directory -yarn add --cwd packages/backend @backstage/plugin-events-backend +yarn add --cwd packages/backend @backstage/plugin-events-backend @backstage/plugin-events-node ``` ### Event Broker diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json index 864fe935f3..eaa9a8f278 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.7-next.1", + "version": "0.2.9-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,6 +25,12 @@ "backstage": { "role": "backend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/events-backend" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", diff --git a/plugins/events-backend/src/service/EventsPlugin.test.ts b/plugins/events-backend/src/service/EventsPlugin.test.ts index 73578ae222..bce45c9ef3 100644 --- a/plugins/events-backend/src/service/EventsPlugin.test.ts +++ b/plugins/events-backend/src/service/EventsPlugin.test.ts @@ -71,7 +71,7 @@ describe('eventPlugin', () => { await startTestBackend({ extensionPoints: [], services: [ - [coreServices.config, config], + [coreServices.rootConfig, config], [coreServices.httpRouter, httpRouter], [coreServices.logger, getVoidLogger()], ], diff --git a/plugins/events-backend/src/service/EventsPlugin.ts b/plugins/events-backend/src/service/EventsPlugin.ts index 07f2b11731..27456b5b2a 100644 --- a/plugins/events-backend/src/service/EventsPlugin.ts +++ b/plugins/events-backend/src/service/EventsPlugin.ts @@ -89,7 +89,7 @@ export const eventsPlugin = createBackendPlugin({ env.registerInit({ deps: { - config: coreServices.config, + config: coreServices.rootConfig, logger: coreServices.logger, router: coreServices.httpRouter, }, diff --git a/plugins/events-node/CHANGELOG.md b/plugins/events-node/CHANGELOG.md index 7ddb5c1a0e..af8c020ca3 100644 --- a/plugins/events-node/CHANGELOG.md +++ b/plugins/events-node/CHANGELOG.md @@ -1,5 +1,48 @@ # @backstage/plugin-events-node +## 0.2.9-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/backend-plugin-api@0.6.0-next.1 + +## 0.2.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.5-next.0 + +## 0.2.8 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.4 + +## 0.2.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.4-next.0 + +## 0.2.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.3 + +## 0.2.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.3-next.2 + ## 0.2.7-next.1 ### Patch Changes diff --git a/plugins/events-node/package.json b/plugins/events-node/package.json index fbcd7dc90d..0cea638e4f 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.7-next.1", + "version": "0.2.9-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -26,6 +26,12 @@ "backstage": { "role": "node-library" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/events-node" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", diff --git a/plugins/example-todo-list-backend/CHANGELOG.md b/plugins/example-todo-list-backend/CHANGELOG.md index adf4f4486a..ef47064c18 100644 --- a/plugins/example-todo-list-backend/CHANGELOG.md +++ b/plugins/example-todo-list-backend/CHANGELOG.md @@ -1,5 +1,71 @@ # @internal/plugin-todo-list-backend +## 1.0.16-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/plugin-auth-node@0.2.17-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + +## 1.0.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/plugin-auth-node@0.2.17-next.0 + +## 1.0.15 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-common@0.19.1 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/config@1.0.8 + - @backstage/plugin-auth-node@0.2.16 + +## 1.0.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/config@1.0.8 + - @backstage/plugin-auth-node@0.2.16-next.0 + +## 1.0.14 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/errors@1.2.0 + - @backstage/backend-plugin-api@0.5.3 + - @backstage/plugin-auth-node@0.2.15 + - @backstage/config@1.0.8 + +## 1.0.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.2.0-next.0 + - @backstage/plugin-auth-node@0.2.15-next.2 + ## 1.0.14-next.1 ### Patch Changes diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json index 5f892c324d..2417f2a883 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.14-next.1", + "version": "1.0.16-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -8,6 +8,12 @@ "backstage": { "role": "backend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/plugins/example-todo-list-backend" + }, "publishConfig": { "access": "public", "main": "dist/index.cjs.js", diff --git a/plugins/example-todo-list-common/CHANGELOG.md b/plugins/example-todo-list-common/CHANGELOG.md index 8218aae8e7..cc614fd356 100644 --- a/plugins/example-todo-list-common/CHANGELOG.md +++ b/plugins/example-todo-list-common/CHANGELOG.md @@ -1,5 +1,26 @@ # @internal/plugin-todo-list-common +## 1.0.12 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.7 + +## 1.0.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.7-next.0 + +## 1.0.11 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.6 + ## 1.0.11-next.0 ### Patch Changes diff --git a/plugins/example-todo-list-common/package.json b/plugins/example-todo-list-common/package.json index 2fb7961e8e..03d39bb49f 100644 --- a/plugins/example-todo-list-common/package.json +++ b/plugins/example-todo-list-common/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list-common", - "version": "1.0.11-next.0", + "version": "1.0.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -13,6 +13,12 @@ "backstage": { "role": "common-library" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/plugins/example-todo-list-common" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", diff --git a/plugins/example-todo-list/CHANGELOG.md b/plugins/example-todo-list/CHANGELOG.md index cbcf3b999e..3c7372410c 100644 --- a/plugins/example-todo-list/CHANGELOG.md +++ b/plugins/example-todo-list/CHANGELOG.md @@ -1,5 +1,68 @@ # @internal/plugin-todo-list +## 1.0.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/theme@0.4.1 + +## 1.0.15 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + +## 1.0.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + +## 1.0.15-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + +## 1.0.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.3-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + +## 1.0.14 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + +## 1.0.14-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/theme@0.4.0-next.1 + ## 1.0.14-next.2 ### Patch Changes diff --git a/plugins/example-todo-list/package.json b/plugins/example-todo-list/package.json index 35b7171de5..da11b3cf24 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.14-next.2", + "version": "1.0.16-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -8,6 +8,12 @@ "backstage": { "role": "frontend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/example-todo-list" + }, "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/explore-backend/CHANGELOG.md b/plugins/explore-backend/CHANGELOG.md index e880365776..2c478e6a4e 100644 --- a/plugins/explore-backend/CHANGELOG.md +++ b/plugins/explore-backend/CHANGELOG.md @@ -1,5 +1,126 @@ # @backstage/plugin-explore-backend +## 0.0.10-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/plugin-search-backend-module-explore@0.1.4-next.1 + - @backstage/backend-common@0.19.2-next.1 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.5 + +## 0.0.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-backend-module-explore@0.1.4-next.0 + - @backstage/plugin-search-common@1.2.5 + +## 0.0.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-backend-module-explore@0.1.3 + - @backstage/plugin-search-common@1.2.5 + +## 0.0.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1-next.0 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-backend-module-explore@0.1.3-next.0 + - @backstage/plugin-search-common@1.2.5-next.0 + +## 0.0.8 + +### Patch Changes + +- 31616c1fc4e4: Allow to provide explore tools through config instead of data in code. + + ```yaml title="app-config.yaml" + explore: + tools: + - title: New Relic + description: Observability platform built to help engineers create and monitor their software + url: /newrelic + image: https://i.imgur.com/L37ikrX.jpg + tags: + - newrelic + - performance + - monitoring + - errors + - alerting + - title: CircleCI + description: Provides builds overview, detailed build info and retriggering functionality for CircleCI. + url: /circleci + image: https://miro.medium.com/max/1200/1*hkTBp22vLAqlIHkrkZHPnw.png + tags: + - circleci + - ci + - dev + # [...] + ``` + + ```diff title="packages/backend/src/plugins/explore.ts" + - import { ExploreTool } from '@backstage/plugin-explore-common'; + - const exploreTools: ExploreTool[] = [ + - { + - title: 'New Relic', + - description: 'Observability platform built to help engineers create and monitor their software', + - url: '/newrelic', + - image: 'https://i.imgur.com/L37ikrX.jpg', + - tags: ['newrelic', 'performance', 'monitoring', 'errors', 'alerting'], + - }, + - { + - title: 'CircleCI', + - description: 'Provides builds overview, detailed build info and retriggering functionality for CircleCI.', + - url: '/circleci', + - image: 'https://miro.medium.com/max/1200/1*hkTBp22vLAqlIHkrkZHPnw.png', + - tags: ['circleci', 'ci', 'dev'], + - }, + - ]; + - + - StaticExploreToolProvider.fromData(tools) + + StaticExploreToolProvider.fromData(env.config) + ``` + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/types@1.1.0 + - @backstage/plugin-search-backend-module-explore@0.1.2 + - @backstage/config@1.0.8 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.4 + +## 0.0.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-backend-module-explore@0.1.2-next.2 + - @backstage/plugin-search-common@1.2.4-next.0 + ## 0.0.8-next.1 ### Patch Changes diff --git a/plugins/explore-backend/README.md b/plugins/explore-backend/README.md index 86f60ae226..a7a6496fe4 100644 --- a/plugins/explore-backend/README.md +++ b/plugins/explore-backend/README.md @@ -7,14 +7,61 @@ for these tools. ## Getting started -### Install the Package +### Adding the plugin to your `packages/backend` + +#### Tools as Config + +Install dependencies + +```bash +# From your Backstage root directory +yarn add --cwd packages/backend @backstage/plugin-explore-backend +``` + +You'll need to add the plugin to the router in your `backend` package. You can +do this by creating a file called `packages/backend/src/plugins/explore.ts` with the following content: + +```ts title="packages/backend/src/plugins/explore.ts" +import { + createRouter, + StaticExploreToolProvider, +} from '@backstage/plugin-explore-backend'; +import { Router } from 'express'; +import { PluginEnvironment } from '../types'; + +export default async function createPlugin( + env: PluginEnvironment, +): Promise { + return await createRouter({ + logger: env.logger, + toolProvider: StaticExploreToolProvider.fromConfig(env.config), + }); +} +``` + +#### Tools as Code + +Install dependencies ```bash # From your Backstage root directory yarn add --cwd packages/backend @backstage/plugin-explore-backend @backstage/plugin-explore-common ``` -### Adding the plugin to your `packages/backend` +Config: + +```yaml +explore: + tools: + - title: New Relic + description: new relic plugin + url: /newrelic + image: https://i.imgur.com/L37ikrX.jpg + tags: + - newrelic + - proxy + - nerdGraph +``` You'll need to add the plugin to the router in your `backend` package. You can do this by creating a file called `packages/backend/src/plugins/explore.ts` with the following content: @@ -49,6 +96,8 @@ export default async function createPlugin( } ``` +#### Register the plugin router + With the `explore.ts` router setup in place, add the router to `packages/backend/src/index.ts`: diff --git a/plugins/explore-backend/api-report.md b/plugins/explore-backend/api-report.md index e3933e350b..b652f5515b 100644 --- a/plugins/explore-backend/api-report.md +++ b/plugins/explore-backend/api-report.md @@ -3,6 +3,7 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { Config } from '@backstage/config'; import { ExploreTool } from '@backstage/plugin-explore-common'; import express from 'express'; import { GetExploreToolsRequest } from '@backstage/plugin-explore-common'; @@ -30,6 +31,8 @@ export interface RouterOptions { // @public export class StaticExploreToolProvider implements ExploreToolProvider { + // (undocumented) + static fromConfig(config: Config): StaticExploreToolProvider; // (undocumented) static fromData(tools: ExploreTool[]): StaticExploreToolProvider; // (undocumented) diff --git a/plugins/explore-backend/config.d.ts b/plugins/explore-backend/config.d.ts new file mode 100644 index 0000000000..700549417a --- /dev/null +++ b/plugins/explore-backend/config.d.ts @@ -0,0 +1,31 @@ +/* + * 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 Config { + explore?: { + /** + * Tools to be used for the explore tool provider. + */ + tools?: Array<{ + title: string; + description?: string; + url: string; + image: string; + tags?: string[]; + lifecycle?: string; + }>; + }; +} diff --git a/plugins/explore-backend/package.json b/plugins/explore-backend/package.json index 7cedc12a09..5b8a20eea7 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.8-next.1", + "version": "0.0.10-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -12,6 +12,12 @@ "backstage": { "role": "backend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/explore-backend" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", @@ -27,6 +33,7 @@ "@backstage/plugin-explore-common": "workspace:^", "@backstage/plugin-search-backend-module-explore": "workspace:^", "@backstage/plugin-search-common": "workspace:^", + "@backstage/types": "workspace:^", "@types/express": "*", "express": "^4.18.1", "express-promise-router": "^4.1.0", @@ -42,6 +49,8 @@ "supertest": "^6.2.4" }, "files": [ + "config.d.ts", "dist" - ] + ], + "configSchema": "config.d.ts" } diff --git a/plugins/explore-backend/src/tools/providers/StaticExploreToolProvider.test.ts b/plugins/explore-backend/src/tools/providers/StaticExploreToolProvider.test.ts index 626426eed9..1df3c6c2f9 100644 --- a/plugins/explore-backend/src/tools/providers/StaticExploreToolProvider.test.ts +++ b/plugins/explore-backend/src/tools/providers/StaticExploreToolProvider.test.ts @@ -14,7 +14,9 @@ * limitations under the License. */ +import { ConfigReader } from '@backstage/config'; import { ExploreTool } from '@backstage/plugin-explore-common'; +import { JsonObject } from '@backstage/types'; import { StaticExploreToolProvider } from './StaticExploreToolProvider'; describe('StaticExploreToolProvider', () => { @@ -40,7 +42,24 @@ describe('StaticExploreToolProvider', () => { const allTools: ExploreTool[] = [tool1, tool2, tool3]; describe('getTools', () => { - it('returns a list of all tools', async () => { + it('fromConfig returns a list of all tools', async () => { + const config = new ConfigReader({ + explore: { + tools: [ + tool1 as JsonObject, + tool2 as JsonObject, + tool3 as JsonObject, + ], + }, + }); + const provider = StaticExploreToolProvider.fromConfig(config); + + await expect(provider.getTools({})).resolves.toEqual({ + tools: allTools, + }); + }); + + it('fromData returns a list of all tools', async () => { const provider = StaticExploreToolProvider.fromData(allTools); await expect(provider.getTools({})).resolves.toEqual({ diff --git a/plugins/explore-backend/src/tools/providers/StaticExploreToolProvider.ts b/plugins/explore-backend/src/tools/providers/StaticExploreToolProvider.ts index ad8bcafada..b8f04a2099 100644 --- a/plugins/explore-backend/src/tools/providers/StaticExploreToolProvider.ts +++ b/plugins/explore-backend/src/tools/providers/StaticExploreToolProvider.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import { Config } from '@backstage/config'; import { ExploreTool, GetExploreToolsRequest, @@ -35,7 +36,22 @@ const anyOf = (prop: T | T[], matches: T[]) => export class StaticExploreToolProvider implements ExploreToolProvider { private readonly tools: ExploreTool[]; - static fromData(tools: ExploreTool[]) { + static fromConfig(config: Config): StaticExploreToolProvider { + const tools: ExploreTool[] = + config.getOptionalConfigArray('explore.tools')?.map(toolConfig => { + return { + description: toolConfig.getOptionalString('description'), + image: toolConfig.getString('image'), + lifecycle: toolConfig.getOptionalString('lifecycle'), + tags: toolConfig.getOptionalStringArray('tags'), + title: toolConfig.getString('title'), + url: toolConfig.getString('url'), + } as ExploreTool; + }) ?? []; + return this.fromData(tools); + } + + static fromData(tools: ExploreTool[]): StaticExploreToolProvider { return new StaticExploreToolProvider(tools); } diff --git a/plugins/explore-react/CHANGELOG.md b/plugins/explore-react/CHANGELOG.md index d3f8578c3f..83bf4cc2a1 100644 --- a/plugins/explore-react/CHANGELOG.md +++ b/plugins/explore-react/CHANGELOG.md @@ -1,5 +1,36 @@ # @backstage/plugin-explore-react +## 0.0.30 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-explore-common@0.0.1 + +## 0.0.30-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/plugin-explore-common@0.0.1 + +## 0.0.30-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.3-next.0 + +## 0.0.29 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/plugin-explore-common@0.0.1 + ## 0.0.29-next.0 ### Patch Changes diff --git a/plugins/explore-react/package.json b/plugins/explore-react/package.json index 53f47f9dd5..55187a6820 100644 --- a/plugins/explore-react/package.json +++ b/plugins/explore-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-explore-react", "description": "A frontend library for Backstage plugins that want to interact with the explore plugin", - "version": "0.0.29-next.0", + "version": "0.0.30", "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 70f4ce0ad3..79cc36bcd3 100644 --- a/plugins/explore/CHANGELOG.md +++ b/plugins/explore/CHANGELOG.md @@ -1,5 +1,115 @@ # @backstage/plugin-explore +## 0.4.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/plugin-search-react@1.6.4-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-explore-react@0.0.30 + - @backstage/plugin-search-common@1.2.5 + +## 0.4.6 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-explore-react@0.0.30 + - @backstage/plugin-search-common@1.2.5 + - @backstage/plugin-search-react@1.6.3 + +## 0.4.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/errors@1.2.1-next.0 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-explore-react@0.0.30-next.1 + - @backstage/plugin-search-common@1.2.5-next.0 + - @backstage/plugin-search-react@1.6.3-next.2 + +## 0.4.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + - @backstage/plugin-search-react@1.6.3-next.1 + - @backstage/plugin-explore-react@0.0.30-next.0 + +## 0.4.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-explore-react@0.0.29 + - @backstage/plugin-search-common@1.2.5-next.0 + - @backstage/plugin-search-react@1.6.3-next.0 + +## 0.4.5 + +### Patch Changes + +- 78cbb8ef8aea: Enhance the tools card accessibility by using appropriate header semantics. +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/plugin-search-react@1.6.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + - @backstage/plugin-explore-react@0.0.29 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.4 + +## 0.4.5-next.3 + +### Patch Changes + +- 78cbb8ef8aea: Enhance the tools card accessibility by using appropriate header semantics. +- Updated dependencies + - @backstage/plugin-search-react@1.6.2-next.3 + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-explore-react@0.0.29-next.0 + - @backstage/plugin-search-common@1.2.4-next.0 + ## 0.4.4-next.2 ### Patch Changes diff --git a/plugins/explore/package.json b/plugins/explore/package.json index 83b9c98846..702bbbf2d4 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.4-next.2", + "version": "0.4.7-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore/src/components/ToolCard/ToolCard.test.tsx b/plugins/explore/src/components/ToolCard/ToolCard.test.tsx index a216f65c5d..20bf6bb594 100644 --- a/plugins/explore/src/components/ToolCard/ToolCard.test.tsx +++ b/plugins/explore/src/components/ToolCard/ToolCard.test.tsx @@ -36,8 +36,12 @@ describe('', () => { }); it('renders props correctly', () => { - const { getByText } = render(wrapInTestApp()); - expect(getByText(minProps.card.title)).toBeInTheDocument(); + const { getByRole, getByText } = render( + wrapInTestApp(), + ); + expect( + getByRole('heading', { name: minProps.card.title }), + ).toBeInTheDocument(); expect(getByText(minProps.card.description)).toBeInTheDocument(); }); diff --git a/plugins/explore/src/components/ToolCard/ToolCard.tsx b/plugins/explore/src/components/ToolCard/ToolCard.tsx index f6137d9c01..a39806dceb 100644 --- a/plugins/explore/src/components/ToolCard/ToolCard.tsx +++ b/plugins/explore/src/components/ToolCard/ToolCard.tsx @@ -74,7 +74,7 @@ export const ToolCard = ({ card, objectFit }: Props) => { })} /> - + {title}{' '} {lifecycle && lifecycle.toLocaleLowerCase('en-US') !== 'ga' && ( (options: { - title: string; + title?: string; components: () => Promise; name?: string; description?: string; @@ -63,14 +65,14 @@ export function createCardExtension(options: { // @public (undocumented) export type RendererProps = { - title: string; + title?: string; } & ComponentParts; // @public (undocumented) export const SettingsModal: (props: { open: boolean; close: Function; - componentName: string; + componentName?: string; children: JSX.Element; }) => JSX.Element; ``` diff --git a/plugins/home-react/package.json b/plugins/home-react/package.json index 2d32db5130..c9bcc3ca61 100644 --- a/plugins/home-react/package.json +++ b/plugins/home-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-home-react", "description": "A Backstage plugin that contains react components helps you build a home page", - "version": "0.1.0-next.2", + "version": "0.1.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/home-react/src/components/SettingsModal.tsx b/plugins/home-react/src/components/SettingsModal.tsx index ace9944f28..43cb16bb40 100644 --- a/plugins/home-react/src/components/SettingsModal.tsx +++ b/plugins/home-react/src/components/SettingsModal.tsx @@ -27,14 +27,16 @@ import { export const SettingsModal = (props: { open: boolean; close: Function; - componentName: string; + componentName?: string; children: JSX.Element; }) => { const { open, close, componentName, children } = props; return ( close()}> - Settings - {componentName} + + {componentName ? `Settings - ${componentName}` : 'Settings'} + {children} + + + + + ); + + if (loading) { + content = ; + } + if (error && !error.message.includes('no audited website found for url')) { + // We only want to display this warning panel when its caused by an error other than no audits for the website + content = ( + + {error.message} + + ); + } + + return {content}; }; diff --git a/plugins/lighthouse/src/components/Cards/LastLighthouseAuditCard.test.tsx b/plugins/lighthouse/src/components/Cards/LastLighthouseAuditCard.test.tsx index 09b21fd028..fd54dd99c8 100644 --- a/plugins/lighthouse/src/components/Cards/LastLighthouseAuditCard.test.tsx +++ b/plugins/lighthouse/src/components/Cards/LastLighthouseAuditCard.test.tsx @@ -26,6 +26,7 @@ import { import { useWebsiteForEntity } from '../../hooks/useWebsiteForEntity'; import * as data from '../../__fixtures__/website-list-response.json'; import { LastLighthouseAuditCard } from './LastLighthouseAuditCard'; +import { fireEvent, screen } from '@testing-library/react'; jest.mock('../../hooks/useWebsiteForEntity', () => ({ useWebsiteForEntity: jest.fn(), @@ -147,17 +148,22 @@ describe('', () => { (useWebsiteForEntity as jest.Mock).mockReturnValue({ value: null, loading: false, - error: 'error', + error: { name: 'error', message: 'error loading data' }, }); }); - it('renders nothing', async () => { - const { queryByTestId } = await renderInTestApp( + it('renders a WarningPanel', async () => { + await renderInTestApp( , ); - expect(queryByTestId('AuditListTable')).toBeNull(); + const expandIcon = screen.getByText('Error: Could not load audit list.'); + fireEvent.click(expandIcon); + expect( + screen.getByText('Error: Could not load audit list.'), + ).toBeInTheDocument(); + expect(screen.getByText('error loading data')).toBeInTheDocument(); }); }); @@ -179,4 +185,26 @@ describe('', () => { expect(queryByTestId('AuditListTable')).toBeNull(); }); }); + + describe('where error was due to an empty database query result', () => { + beforeEach(() => { + (useWebsiteForEntity as jest.Mock).mockReturnValue({ + value: null, + loading: false, + error: { + name: 'error', + message: 'no audited website found for url unit-test-url', + }, + }); + }); + + it('renders EmptyState card', async () => { + const rendered = await renderInTestApp( + + + , + ); + expect(rendered.getByText('No Audits Found')).toBeInTheDocument(); + }); + }); }); diff --git a/plugins/lighthouse/src/components/Cards/LastLighthouseAuditCard.tsx b/plugins/lighthouse/src/components/Cards/LastLighthouseAuditCard.tsx index af5ce94487..8245d558e1 100644 --- a/plugins/lighthouse/src/components/Cards/LastLighthouseAuditCard.tsx +++ b/plugins/lighthouse/src/components/Cards/LastLighthouseAuditCard.tsx @@ -23,6 +23,7 @@ import { import { useWebsiteForEntity } from '../../hooks/useWebsiteForEntity'; import AuditStatusIcon from '../AuditStatusIcon'; import { + EmptyState, InfoCard, InfoCardVariants, Progress, @@ -30,6 +31,7 @@ import { StatusOK, StatusWarning, StructuredMetadataTable, + WarningPanel, } from '@backstage/core-components'; const LighthouseCategoryScoreStatus = (props: { score: number }) => { @@ -105,7 +107,14 @@ export const LastLighthouseAuditCard = (props: { content = ; } if (error) { - content = null; + // We only want to display this warning panel when its caused by an error other than no audits being found for the website + content = error.message.includes('no audited website found for url') ? ( + + ) : ( + + {error.message} + + ); } if (website) { content = ( diff --git a/plugins/lighthouse/src/hooks/useWebsiteForEntity.test.tsx b/plugins/lighthouse/src/hooks/useWebsiteForEntity.test.tsx index 7ab717c57d..199ede3049 100644 --- a/plugins/lighthouse/src/hooks/useWebsiteForEntity.test.tsx +++ b/plugins/lighthouse/src/hooks/useWebsiteForEntity.test.tsx @@ -98,4 +98,21 @@ describe('useWebsiteForEntity', () => { expect(mockErrorApi.post).toHaveBeenCalledWith(error); }); }); + + describe('where there is an error regarding "no audited websites for url"', () => { + const error = new Error('no audited website found for url unit-test-url'); + + beforeEach(() => { + (mockLighthouseApi.getWebsiteByUrl as jest.Mock).mockRejectedValueOnce( + error, + ); + }); + + it('does not post the error to the error api and returns the error to the caller', async () => { + const { result, waitForNextUpdate } = subject(); + await waitForNextUpdate(); + expect(result.current?.error).toBe(error); + expect(mockErrorApi.post).not.toHaveBeenCalledWith(error); + }); + }); }); diff --git a/plugins/lighthouse/src/hooks/useWebsiteForEntity.ts b/plugins/lighthouse/src/hooks/useWebsiteForEntity.ts index 3f7709fee0..1237209749 100644 --- a/plugins/lighthouse/src/hooks/useWebsiteForEntity.ts +++ b/plugins/lighthouse/src/hooks/useWebsiteForEntity.ts @@ -31,7 +31,11 @@ export const useWebsiteForEntity = () => { () => lighthouseApi.getWebsiteByUrl(websiteUrl), [websiteUrl], ); - if (response.error) { + // Do not display error alert if its due to no audits found for a website + if ( + response.error && + !response.error.message.includes('no audited website found for url') + ) { errorApi.post(response.error); } return response; diff --git a/plugins/lighthouse/src/setupTests.ts b/plugins/lighthouse/src/setupTests.ts index c1d649f2ad..963c0f188b 100644 --- a/plugins/lighthouse/src/setupTests.ts +++ b/plugins/lighthouse/src/setupTests.ts @@ -15,4 +15,3 @@ */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/linguist-backend/CHANGELOG.md b/plugins/linguist-backend/CHANGELOG.md index 511009b216..774dc72250 100644 --- a/plugins/linguist-backend/CHANGELOG.md +++ b/plugins/linguist-backend/CHANGELOG.md @@ -1,5 +1,126 @@ # @backstage/plugin-linguist-backend +## 0.3.2-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/plugin-linguist-common@0.1.1-next.0 + - @backstage/plugin-auth-node@0.2.17-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/backend-tasks@0.5.5-next.1 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + +## 0.3.2-next.0 + +### Patch Changes + +- ca5e591cb86a: Fixed bug in LinguistBackendClient.ts file where if the linguistJsOptions is specified and sent over to the linguist-js package it would get changed (another attribute would be added) causing future entities of the batch to fail with an error +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/backend-tasks@0.5.5-next.0 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.17-next.0 + - @backstage/plugin-linguist-common@0.1.0 + +## 0.3.1 + +### Patch Changes + +- ae261e79d256: Added alpha support for the [new backend system](https://backstage.io/docs/backend-system/) +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-common@0.19.1 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/backend-tasks@0.5.4 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.16 + - @backstage/plugin-linguist-common@0.1.0 + +## 0.3.1-next.1 + +### Patch Changes + +- ae261e79d256: Added alpha support for the [new backend system](https://backstage.io/docs/backend-system/) +- Updated dependencies + - @backstage/config@1.0.8 + +## 0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-tasks@0.5.4-next.0 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.16-next.0 + - @backstage/plugin-linguist-common@0.1.0 + +## 0.3.0 + +### Minor Changes + +- bbf91840a52a: **BREAKING**: Removed public constructor from `LinguistBackendApi`. Removed export of `LinguistBackendDatabase` and `LinguistBackendStore` + + Several improvements to the Linguist backend have been made: + + - Added tests for the `LinguistBackendDatabase` and `LinguistBackendApi` + - Added support for using SQLite as a database, helpful for local development + - Removed the default from the `processes_date` column + - Converted the `LinguistBackendApi` into an Interface + - Added the `LinguistBackendClient` which implements the `LinguistBackendApi` Interface + - Unprocessed entities will get processed before stale entities + - Entities in the Linguist database but not in the Catalog anymore will be deleted + - Improved the README's headings + +### Patch Changes + +- e39c3829bbd4: Fix: CatalogClient call without token +- 3d11596a72b5: Update plugin installation docs to be more consistent across documentations +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/catalog-client@1.4.2 + - @backstage/types@1.1.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + - @backstage/backend-tasks@0.5.3 + - @backstage/plugin-auth-node@0.2.15 + - @backstage/config@1.0.8 + - @backstage/plugin-linguist-common@0.1.0 + +## 0.3.0-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/backend-tasks@0.5.3-next.2 + - @backstage/catalog-client@1.4.2-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.2.0-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.15-next.2 + - @backstage/plugin-linguist-common@0.1.0 + ## 0.3.0-next.1 ### Patch Changes diff --git a/plugins/linguist-backend/README.md b/plugins/linguist-backend/README.md index 6cfd3800b6..6e2a20cf2d 100644 --- a/plugins/linguist-backend/README.md +++ b/plugins/linguist-backend/README.md @@ -56,6 +56,38 @@ Here's how to get the backend up and running: 4. Now run `yarn start-backend` from the repo root 5. Finally open `http://localhost:7007/api/linguist/health` in a browser and it should return `{"status":"ok"}` +#### New Backend System + +The Linguist backend plugin has support for the [new backend system](https://backstage.io/docs/backend-system/), here's how you can set that up: + +In your `packages/backend/src/index.ts` make the following changes: + +```diff + import { createBackend } from '@backstage/backend-defaults'; ++ import { linguistPlugin } from '@backstage/plugin-linguist-backend'; + + const backend = createBackend(); + + // ... other feature additions + ++ const linguistSchedule: TaskScheduleDefinition = { ++ frequency: { minutes: 2 }, ++ timeout: { minutes: 15 }, ++ initialDelay: { seconds: 15 }, ++ }; + ++ backend.add( ++ linguistPlugin({ ++ schedule: linguistSchedule, ++ age: { days: 30 }, ++ batchSize: 2, ++ useSourceLocation: false, ++ }), ++ ); + + backend.start(); +``` + ## Plugin Option The Linguist backend has various plugin options that you can provide to the `createRouter` function in your `packages/backend/src/plugins/linguist.ts` file that will allow you to configure various aspects of how it works. The following sections go into the details of these options @@ -114,5 +146,5 @@ return createRouter( ## Links -- [Frontend part of the plugin](../linguist/README.md) +- [Frontend part of the plugin](https://github.com/backstage/backstage/tree/master/plugins/linguist) - [The Backstage homepage](https://backstage.io) diff --git a/plugins/linguist-backend/api-report.md b/plugins/linguist-backend/api-report.md index 294d569ff7..cd2c9cb3f3 100644 --- a/plugins/linguist-backend/api-report.md +++ b/plugins/linguist-backend/api-report.md @@ -3,6 +3,7 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts +import { BackendFeature } from '@backstage/backend-plugin-api'; import express from 'express'; import { HumanDuration } from '@backstage/types'; import { Languages } from '@backstage/plugin-linguist-common'; @@ -28,6 +29,25 @@ export interface LinguistBackendApi { processEntities(): Promise; } +// @public +export const linguistPlugin: (options: LinguistPluginOptions) => BackendFeature; + +// @public +export interface LinguistPluginOptions { + // (undocumented) + age?: HumanDuration; + // (undocumented) + batchSize?: number; + // (undocumented) + kind?: string[]; + // (undocumented) + linguistJsOptions?: Record; + // (undocumented) + schedule?: TaskScheduleDefinition; + // (undocumented) + useSourceLocation?: boolean; +} + // @public (undocumented) export interface PluginOptions { // (undocumented) @@ -61,6 +81,4 @@ export interface RouterOptions { // (undocumented) tokenManager: TokenManager; } - -// (No @packageDocumentation comment for this package) ``` diff --git a/plugins/linguist-backend/package.json b/plugins/linguist-backend/package.json index 8ceaaa15d4..99fc323e86 100644 --- a/plugins/linguist-backend/package.json +++ b/plugins/linguist-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-linguist-backend", - "version": "0.3.0-next.1", + "version": "0.3.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -12,6 +12,12 @@ "backstage": { "role": "backend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/linguist-backend" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", @@ -23,6 +29,7 @@ }, "dependencies": { "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", "@backstage/backend-tasks": "workspace:^", "@backstage/catalog-client": "workspace:^", "@backstage/catalog-model": "workspace:^", diff --git a/plugins/linguist-backend/src/api/LinguistBackendClient.test.ts b/plugins/linguist-backend/src/api/LinguistBackendClient.test.ts index 1b0a4f4673..55c74df424 100644 --- a/plugins/linguist-backend/src/api/LinguistBackendClient.test.ts +++ b/plugins/linguist-backend/src/api/LinguistBackendClient.test.ts @@ -38,6 +38,9 @@ const linguistResultMock = Promise.resolve({ '/readme.md': 'Markdown', '/no-lang': null, }, + alternatives: { + '~/alternatives.asc': ['AsciiDoc', 'Public Key'], + }, }, languages: { count: 3, diff --git a/plugins/linguist-backend/src/api/LinguistBackendClient.ts b/plugins/linguist-backend/src/api/LinguistBackendClient.ts index 5a84201bcb..1be4a7d288 100644 --- a/plugins/linguist-backend/src/api/LinguistBackendClient.ts +++ b/plugins/linguist-backend/src/api/LinguistBackendClient.ts @@ -130,7 +130,8 @@ export class LinguistBackendClient implements LinguistBackendApi { const allEntities = await this.store.getAllEntities(); for (const entityRef of allEntities) { - const result = await this.catalogApi.getEntityByRef(entityRef); + const { token } = await this.tokenManager.getToken(); + const result = await this.catalogApi.getEntityByRef(entityRef, { token }); if (!result) { this.logger?.info( @@ -260,7 +261,7 @@ export class LinguistBackendClient implements LinguistBackendApi { /** @internal */ async getLinguistResults(dir: string): Promise { - const results = await linguist(dir, this.linguistJsOptions); + const results = await linguist(dir, { ...this.linguistJsOptions }); return results; } } diff --git a/plugins/linguist-backend/src/index.ts b/plugins/linguist-backend/src/index.ts index 37ecf2d47f..6ac1c3770a 100644 --- a/plugins/linguist-backend/src/index.ts +++ b/plugins/linguist-backend/src/index.ts @@ -14,5 +14,13 @@ * limitations under the License. */ +/** + * Linguist backend plugin that contains the API for generating and retrieving language breakdown which is used by the Linguist frontend plugin. + * + * @packageDocumentation + */ + export * from './service/router'; export type { LinguistBackendApi } from './api'; +export { linguistPlugin } from './plugin'; +export type { LinguistPluginOptions } from './plugin'; diff --git a/plugins/linguist-backend/src/plugin.ts b/plugins/linguist-backend/src/plugin.ts new file mode 100644 index 0000000000..f655d6a1f4 --- /dev/null +++ b/plugins/linguist-backend/src/plugin.ts @@ -0,0 +1,87 @@ +/* + * 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 { loggerToWinstonLogger } from '@backstage/backend-common'; +import { + coreServices, + createBackendPlugin, +} from '@backstage/backend-plugin-api'; +import { createRouter } from './service/router'; +import { TaskScheduleDefinition } from '@backstage/backend-tasks'; +import { HumanDuration } from '@backstage/types'; + +/** + * Options for Linguist backend plugin + * + * @public + */ +export interface LinguistPluginOptions { + schedule?: TaskScheduleDefinition; + age?: HumanDuration; + batchSize?: number; + useSourceLocation?: boolean; + linguistJsOptions?: Record; + kind?: string[]; +} + +/** + * Linguist backend plugin + * + * @public + */ +export const linguistPlugin = createBackendPlugin( + (options: LinguistPluginOptions) => ({ + pluginId: 'linguist', + register(env) { + env.registerInit({ + deps: { + logger: coreServices.logger, + reader: coreServices.urlReader, + database: coreServices.database, + discovery: coreServices.discovery, + scheduler: coreServices.scheduler, + tokenManager: coreServices.tokenManager, + httpRouter: coreServices.httpRouter, + }, + async init({ + logger, + reader, + database, + discovery, + scheduler, + tokenManager, + httpRouter, + }) { + httpRouter.use( + await createRouter( + { + ...options, + }, + { + logger: loggerToWinstonLogger(logger), + reader, + database, + discovery, + scheduler, + tokenManager, + }, + ), + ); + }, + }); + }, + }), +); diff --git a/plugins/linguist-common/CHANGELOG.md b/plugins/linguist-common/CHANGELOG.md index f2b34faa84..1bfe9fcc84 100644 --- a/plugins/linguist-common/CHANGELOG.md +++ b/plugins/linguist-common/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/plugin-linguist-common +## 0.1.1-next.0 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata + ## 0.1.0 ### Minor Changes diff --git a/plugins/linguist-common/package.json b/plugins/linguist-common/package.json index c13f40dee2..4ca2b65283 100644 --- a/plugins/linguist-common/package.json +++ b/plugins/linguist-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-linguist-common", "description": "Common functionalities for the linguist plugin", - "version": "0.1.0", + "version": "0.1.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -14,6 +14,12 @@ "backstage": { "role": "common-library" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/linguist-common" + }, "scripts": { "build": "backstage-cli package build", "lint": "backstage-cli package lint", diff --git a/plugins/linguist/CHANGELOG.md b/plugins/linguist/CHANGELOG.md index a42f966009..84af3bdd60 100644 --- a/plugins/linguist/CHANGELOG.md +++ b/plugins/linguist/CHANGELOG.md @@ -1,5 +1,106 @@ # @backstage/plugin-linguist +## 0.1.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-linguist-common@0.1.1-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.1-next.0 + +## 0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + - @backstage/plugin-linguist-common@0.1.0 + +## 0.1.5 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + - @backstage/plugin-linguist-common@0.1.0 + +## 0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/errors@1.2.1-next.0 + - @backstage/plugin-linguist-common@0.1.0 + +## 0.1.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + +## 0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + - @backstage/plugin-linguist-common@0.1.0 + +## 0.1.4 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + - @backstage/plugin-linguist-common@0.1.0 + +## 0.1.4-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + - @backstage/plugin-linguist-common@0.1.0 + ## 0.1.4-next.2 ### Patch Changes diff --git a/plugins/linguist/package.json b/plugins/linguist/package.json index 3cbcf07ba3..2f5369b404 100644 --- a/plugins/linguist/package.json +++ b/plugins/linguist/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-linguist", - "version": "0.1.4-next.2", + "version": "0.1.6-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -58,7 +58,6 @@ "@testing-library/user-event": "^14.0.0", "@types/node": "*", "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/linguist/src/setupTests.ts b/plugins/linguist/src/setupTests.ts index 2b5b615b19..7a459ed24e 100644 --- a/plugins/linguist/src/setupTests.ts +++ b/plugins/linguist/src/setupTests.ts @@ -15,4 +15,3 @@ */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/microsoft-calendar/CHANGELOG.md b/plugins/microsoft-calendar/CHANGELOG.md index 1dcec599be..0cb4271d67 100644 --- a/plugins/microsoft-calendar/CHANGELOG.md +++ b/plugins/microsoft-calendar/CHANGELOG.md @@ -1,5 +1,86 @@ # @backstage/plugin-microsoft-calendar +## 0.1.6-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- eea2922e749a: README update - example of apiRef definition and fixed component name +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + +## 0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + +## 0.1.5 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + +## 0.1.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/errors@1.2.1-next.0 + +## 0.1.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + +## 0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + +## 0.1.4 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/errors@1.2.0 + +## 0.1.4-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/theme@0.4.0-next.1 + ## 0.1.4-next.2 ### Patch Changes diff --git a/plugins/microsoft-calendar/README.md b/plugins/microsoft-calendar/README.md index 92421046e2..3dcf58c418 100644 --- a/plugins/microsoft-calendar/README.md +++ b/plugins/microsoft-calendar/README.md @@ -32,15 +32,38 @@ yarn add --cwd packages/app @backstage/plugin-microsoft-calendar 3. You can then use the provided React component `MicrosoftCalendar` in the backstage frontend where ever you want ```tsx -import { MicrosoftCalendar } from '@backstage/plugin-microsoft-calendar'; +import { MicrosoftCalendarCard } from '@backstage/plugin-microsoft-calendar'; // ... - + ; // ... ``` +If your homepage is not static JSX add `microsoftCalendarApiRef` to the App's `apis.ts`: + +```ts +import { + MicrosoftCalendarApiClient, + microsoftCalendarApiRef, +} from '@backstage/plugin-microsoft-calendar'; +import { + // ... + fetchApiRef, + // ... +} from '@backstage/core-plugin-api'; + +export const apis = [ + // ... + createApiFactory({ + api: microsoftCalendarApiRef, + deps: { authApi: microsoftAuthApiRef, fetchApi: fetchApiRef }, + factory: deps => new MicrosoftCalendarApiClient(deps), + }), +]; +``` + ![Microsoft Calendar plugin demo](https://user-images.githubusercontent.com/23618736/215717491-25db5fa6-b237-487f-8c00-28f572e8da05.mp4) ![Sample](./docs/microsoft-calendar-plugin.png) diff --git a/plugins/microsoft-calendar/package.json b/plugins/microsoft-calendar/package.json index f9eb4e0cec..84e307ac2b 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.4-next.2", + "version": "0.1.6-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -12,6 +12,12 @@ "backstage": { "role": "frontend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/microsoft-calendar" + }, "author": { "name": "Statusneo", "email": "reach@statusneo.com", @@ -72,7 +78,6 @@ "@testing-library/user-event": "^14.0.0", "@types/node": "^16.11.26", "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/microsoft-calendar/src/setupTests.ts b/plugins/microsoft-calendar/src/setupTests.ts index 73dd8dce47..865308e634 100644 --- a/plugins/microsoft-calendar/src/setupTests.ts +++ b/plugins/microsoft-calendar/src/setupTests.ts @@ -14,4 +14,3 @@ * limitations under the License. */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/newrelic-dashboard/CHANGELOG.md b/plugins/newrelic-dashboard/CHANGELOG.md index bd955e49f4..de7a9c6b5b 100644 --- a/plugins/newrelic-dashboard/CHANGELOG.md +++ b/plugins/newrelic-dashboard/CHANGELOG.md @@ -1,5 +1,92 @@ # @backstage/plugin-newrelic-dashboard +## 0.2.14-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/catalog-model@1.4.1 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/errors@1.2.1 + - @backstage/plugin-catalog-react@1.8.1-next.0 + +## 0.2.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/errors@1.2.1 + +## 0.2.13 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + +## 0.2.13-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/errors@1.2.1-next.0 + +## 0.2.13-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + +## 0.2.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/plugin-catalog-react@1.7.1-next.0 + +## 0.2.12 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + +## 0.2.12-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/plugin-catalog-react@1.7.0-next.3 + ## 0.2.12-next.2 ### Patch Changes diff --git a/plugins/newrelic-dashboard/package.json b/plugins/newrelic-dashboard/package.json index 1ec9e0953a..b32fd6c1e2 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.12-next.2", + "version": "0.2.14-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -12,6 +12,12 @@ "backstage": { "role": "frontend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/newrelic-dashboard" + }, "scripts": { "build": "backstage-cli package build", "start": "backstage-cli package start", @@ -41,8 +47,7 @@ "@backstage/cli": "workspace:^", "@backstage/dev-utils": "workspace:^", "@testing-library/jest-dom": "^5.10.1", - "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5" + "@types/react": "^16.13.1 || ^17.0.0" }, "files": [ "dist" diff --git a/plugins/newrelic-dashboard/src/setupTests.ts b/plugins/newrelic-dashboard/src/setupTests.ts index fc6dbd98f8..7435872609 100644 --- a/plugins/newrelic-dashboard/src/setupTests.ts +++ b/plugins/newrelic-dashboard/src/setupTests.ts @@ -14,4 +14,3 @@ * limitations under the License. */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/newrelic/CHANGELOG.md b/plugins/newrelic/CHANGELOG.md index c6c755afea..db1fad33e4 100644 --- a/plugins/newrelic/CHANGELOG.md +++ b/plugins/newrelic/CHANGELOG.md @@ -1,5 +1,68 @@ # @backstage/plugin-newrelic +## 0.3.39-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/theme@0.4.1 + +## 0.3.38 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + +## 0.3.38-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + +## 0.3.38-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + +## 0.3.38-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.3-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + +## 0.3.37 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + +## 0.3.37-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/theme@0.4.0-next.1 + ## 0.3.37-next.2 ### Patch Changes diff --git a/plugins/newrelic/package.json b/plugins/newrelic/package.json index 7f45affb1c..b09050c599 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.37-next.2", + "version": "0.3.39-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/nomad-backend/.eslintrc.js b/plugins/nomad-backend/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/nomad-backend/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/nomad-backend/CHANGELOG.md b/plugins/nomad-backend/CHANGELOG.md new file mode 100644 index 0000000000..37a5ba36cf --- /dev/null +++ b/plugins/nomad-backend/CHANGELOG.md @@ -0,0 +1,51 @@ +# @backstage/plugin-nomad-backend + +## 0.1.2-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + +## 0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + +## 0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-common@0.19.1 + - @backstage/config@1.0.8 + +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/config@1.0.8 + +## 0.1.0 + +### Minor Changes + +- 05bf04ca6863: Initialize Nomad plugin with frontend and backend. List jobs/allocations + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/errors@1.2.0 + - @backstage/config@1.0.8 diff --git a/plugins/nomad-backend/README.md b/plugins/nomad-backend/README.md new file mode 100644 index 0000000000..d06444809e --- /dev/null +++ b/plugins/nomad-backend/README.md @@ -0,0 +1,50 @@ +# @backstage/plugin-nomad-backend + +A backend for [Nomad](https://www.nomadproject.io/), this plugin exposes a service with routes that are used by the `@backstage/plugin-nomad` plugin to query Job and Group information from a Nomad API. + +## Set Up + +1. Install the plugin using: + +```bash +# From your Backstage root directory +yarn add --cwd packages/backend @backstage/plugin-nomad-backend +``` + +2. Create a `nomad.ts` file inside `packages/backend/src/plugins/`: + +```typescript +import { createRouter } from '@backstage/plugin-nomad-backend'; +import { Router } from 'express'; +import { PluginEnvironment } from '../types'; + +export default async function createPlugin( + props: PluginEnvironment, +): Promise { + return await createRouter(props); +} +``` + +3. Modify your `packages/backend/src/index.ts` to include: + +```diff + ... + + import { Config } from '@backstage/config'; + import app from './plugins/app'; ++import nomad from './plugins/nomad'; + ... + + async function main() { + ... + + const authEnv = useHotMemoize(module, () => createEnv('auth')); ++ const nomadEnv = useHotMemoize(module, () => createEnv('nomad')); + ... + + const apiRouter = Router(); + apiRouter.use('/catalog', await catalog(catalogEnv)); ++ apiRouter.use('/nomad', await nomad(nomadEnv)); +``` + +Note: for this backend to work, the `nomad` configuration described in the README of `@backstage/plugin-nomad` must be implemented. diff --git a/plugins/nomad-backend/api-report.md b/plugins/nomad-backend/api-report.md new file mode 100644 index 0000000000..5b56661e43 --- /dev/null +++ b/plugins/nomad-backend/api-report.md @@ -0,0 +1,22 @@ +## API Report File for "@backstage/plugin-nomad-backend" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { Config } from '@backstage/config'; +import express from 'express'; +import { Logger } from 'winston'; + +// @public (undocumented) +export function createRouter(options: RouterOptions): Promise; + +// @public (undocumented) +export interface RouterOptions { + // (undocumented) + config: Config; + // (undocumented) + logger: Logger; +} + +// (No @packageDocumentation comment for this package) +``` diff --git a/plugins/nomad-backend/package.json b/plugins/nomad-backend/package.json new file mode 100644 index 0000000000..78a3e3a386 --- /dev/null +++ b/plugins/nomad-backend/package.json @@ -0,0 +1,50 @@ +{ + "name": "@backstage/plugin-nomad-backend", + "version": "0.1.2-next.1", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "publishConfig": { + "access": "public", + "main": "dist/index.cjs.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "backend-plugin" + }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/nomad-backend" + }, + "scripts": { + "start": "backstage-cli package start", + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack" + }, + "dependencies": { + "@backstage/backend-common": "workspace:^", + "@backstage/config": "workspace:^", + "@backstage/errors": "workspace:^", + "@types/express": "*", + "express": "^4.17.1", + "express-promise-router": "^4.1.0", + "node-fetch": "^2.6.7", + "winston": "^3.2.1", + "yn": "^4.0.0" + }, + "devDependencies": { + "@backstage/cli": "workspace:^", + "@types/supertest": "^2.0.8", + "msw": "^1.0.0", + "supertest": "^6.2.4" + }, + "files": [ + "dist" + ] +} diff --git a/plugins/nomad-backend/src/index.ts b/plugins/nomad-backend/src/index.ts new file mode 100644 index 0000000000..d2e8d61bad --- /dev/null +++ b/plugins/nomad-backend/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 './service/router'; diff --git a/plugins/nomad-backend/src/run.ts b/plugins/nomad-backend/src/run.ts new file mode 100644 index 0000000000..711bdcc46c --- /dev/null +++ b/plugins/nomad-backend/src/run.ts @@ -0,0 +1,34 @@ +/* + * 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 { getRootLogger } from '@backstage/backend-common'; +import yn from 'yn'; +import { startStandaloneServer } from './service/standaloneServer'; +import { ConfigReader } from '@backstage/config'; + +const config = new ConfigReader({}); +const port = process.env.PLUGIN_PORT ? Number(process.env.PLUGIN_PORT) : 7007; +const enableCors = yn(process.env.PLUGIN_CORS, { default: false }); +const logger = getRootLogger(); + +startStandaloneServer({ config, port, enableCors, logger }).catch(err => { + logger.error(err); + process.exit(1); +}); + +process.on('SIGINT', () => { + logger.info('CTRL+C pressed; exiting.'); + process.exit(0); +}); diff --git a/plugins/nomad-backend/src/service/router.test.ts b/plugins/nomad-backend/src/service/router.test.ts new file mode 100644 index 0000000000..11c3834ed6 --- /dev/null +++ b/plugins/nomad-backend/src/service/router.test.ts @@ -0,0 +1,51 @@ +/* + * 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 { getVoidLogger } from '@backstage/backend-common'; +import express from 'express'; +import request from 'supertest'; + +import { createRouter } from './router'; +import { ConfigReader } from '@backstage/config'; + +describe('createRouter', () => { + let app: express.Express; + + beforeAll(async () => { + const router = await createRouter({ + config: new ConfigReader({ + nomad: { + addr: 'http://localhost.com', + token: 'asdf', + }, + }), + logger: getVoidLogger(), + }); + app = express().use(router); + }); + + beforeEach(() => { + jest.resetAllMocks(); + }); + + describe('GET /health', () => { + it('returns ok', async () => { + const response = await request(app).get('/health'); + + expect(response.status).toEqual(200); + expect(response.body).toEqual({ status: 'ok' }); + }); + }); +}); diff --git a/plugins/nomad-backend/src/service/router.ts b/plugins/nomad-backend/src/service/router.ts new file mode 100644 index 0000000000..d6b5aa1fc6 --- /dev/null +++ b/plugins/nomad-backend/src/service/router.ts @@ -0,0 +1,126 @@ +/* + * 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 fetch from 'node-fetch'; +import { errorHandler, requestLoggingHandler } from '@backstage/backend-common'; +import { Config } from '@backstage/config'; +import { InputError } from '@backstage/errors'; +import express from 'express'; +import Router from 'express-promise-router'; +import { Logger } from 'winston'; + +/** @public */ +export interface RouterOptions { + logger: Logger; + config: Config; +} + +/** @public */ +export async function createRouter( + options: RouterOptions, +): Promise { + const { config, logger } = options; + + // Get Nomad addr and token from config + const addr = config.getString('nomad.addr'); + const token = config.getOptionalString('nomad.token'); + + const router = Router(); + router.use(express.json()); + + router.get('/health', (_, resp) => { + resp.json({ status: 'ok' }); + }); + + router.get('/v1/allocations', async (req, res) => { + // Check namespace argument + const namespace = (req.query.namespace as string) ?? ''; + if (!namespace || namespace === '') { + throw new InputError(`Missing "namespace" query parameter`); + } + + // Check filter argument + const filter = (req.query.filter as string) ?? ''; + logger.debug(`request headers: namespace=${namespace} filter=${filter}`); + + // Issue the request + const endpoint = `${addr}/v1/allocations?namespace=${encodeURIComponent( + namespace, + )}&filter=${encodeURIComponent(filter)}`; + const allocationsResp = await fetch(endpoint, { + method: 'GET', + headers: { + Accept: 'application/json', + 'X-Nomad-Token': token || '', + }, + }); + + // Check response + if (allocationsResp.status !== 200) { + const body = await allocationsResp.text(); + logger.error(`failed to call /v1/allocations endpoint: ${body}`); + res.status(allocationsResp.status).json({ message: body }); + return; + } + + // Deserialize and return + const allocationsBody = await allocationsResp.json(); + logger.debug(`/v1/allocations response: ${allocationsBody}`); + res.json(allocationsBody); + }); + + router.get('/v1/job/:job_id/versions', async (req, resp) => { + // Check namespace argument + const namespace = (req.query.namespace as string) ?? ''; + if (!namespace || namespace === '') { + throw new InputError(`Missing "namespace" query parameter`); + } + + // Get job ID + const jobID = (req.params.job_id as string) ?? ''; + + // Issue the request + const apiResp = await fetch( + `${addr}/v1/job/${jobID}/versions?namespace=${encodeURIComponent( + namespace, + )}`, + { + method: 'GET', + headers: { + Accept: 'application/json', + 'X-Nomad-Token': token || '', + }, + }, + ); + + // Check response + if (apiResp.status !== 200) { + const body = await apiResp.text(); + logger.error(`failed to call /v1/job/:job_id/versions endpoint: ${body}`); + resp.status(apiResp.status).json({ message: body }); + return; + } + + // Deserialize and return + const versionsBody = await apiResp.json(); + logger.debug(`/v1/job/:job_id/versions response: ${versionsBody}`); + resp.json(versionsBody); + }); + + router.use(requestLoggingHandler()); + router.use(errorHandler()); + return router; +} diff --git a/plugins/nomad-backend/src/service/standaloneServer.ts b/plugins/nomad-backend/src/service/standaloneServer.ts new file mode 100644 index 0000000000..133577ffc2 --- /dev/null +++ b/plugins/nomad-backend/src/service/standaloneServer.ts @@ -0,0 +1,52 @@ +/* + * 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 { createServiceBuilder } from '@backstage/backend-common'; +import { Server } from 'http'; +import { Logger } from 'winston'; +import { createRouter } from './router'; +import { Config } from '@backstage/config'; + +export interface ServerOptions { + config: Config; + enableCors: boolean; + logger: Logger; + port: number; +} + +export async function startStandaloneServer( + options: ServerOptions, +): Promise { + const logger = options.logger.child({ service: 'nomad' }); + logger.debug('Starting application server...'); + const router = await createRouter({ + logger, + config: options.config, + }); + + let service = createServiceBuilder(module) + .setPort(options.port) + .addRouter('/nomad', router); + if (options.enableCors) { + service = service.enableCors({ origin: 'http://localhost:3000' }); + } + + return await service.start().catch(err => { + logger.error(err); + process.exit(1); + }); +} + +module.hot?.accept(); diff --git a/plugins/nomad-backend/src/setupTests.ts b/plugins/nomad-backend/src/setupTests.ts new file mode 100644 index 0000000000..4b9026cde5 --- /dev/null +++ b/plugins/nomad-backend/src/setupTests.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 {}; diff --git a/plugins/nomad/.eslintrc.js b/plugins/nomad/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/nomad/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/nomad/CHANGELOG.md b/plugins/nomad/CHANGELOG.md new file mode 100644 index 0000000000..151657c12b --- /dev/null +++ b/plugins/nomad/CHANGELOG.md @@ -0,0 +1,92 @@ +# @backstage/plugin-nomad + +## 0.1.2-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.1-next.0 + +## 0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/theme@0.4.1 + +## 0.1.1 + +### Patch Changes + +- 68531cc70e1f: Break some internal circular import chains +- e6f50426333b: update some peer dependencies to silence yarn install +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + +## 0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + +## 0.1.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + - @backstage/config@1.0.8 + +## 0.1.1-next.0 + +### Patch Changes + +- 68531cc70e1f: Break some internal circular import chains +- Updated dependencies + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + +## 0.1.0 + +### Minor Changes + +- 05bf04ca6863: Initialize Nomad plugin with frontend and backend. List jobs/allocations + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + - @backstage/config@1.0.8 diff --git a/plugins/nomad/README.md b/plugins/nomad/README.md new file mode 100644 index 0000000000..da14a0a3f3 --- /dev/null +++ b/plugins/nomad/README.md @@ -0,0 +1,167 @@ +# @backstage/plugin-nomad + +This is a frontend plugin is for viewing [Nomad](https://www.nomadproject.io/) [job versions](https://developer.hashicorp.com/nomad/docs/concepts/architecture#job) and [task group allocations](https://developer.hashicorp.com/nomad/docs/concepts/architecture#allocation). + +This plugin has a corresponding backend plugin required to call the Nomad cluster's API: ` @backstage/plugin-nomad-backend`. + +## Introduction + +### [Nomad](https://www.nomadproject.io/) + +> A simple and flexible scheduler and orchestrator to deploy and manage containers and non-containerized applications across on-prem and clouds at scale. + +### Features + +This plugin provides two components: + +- a table to view recent [job versions](https://developer.hashicorp.com/nomad/docs/commands/job/history) +- a table to view [allocations for a job and/or group](https://developer.hashicorp.com/nomad/tutorials/manage-jobs/jobs-inspect) + +## Getting Started + +### Requirements + +You will need to have the backend Nomad plugin, `@backstage/plugin-nomad-backend`, installed and running. See its README for set up instructions. + +You will need a running Nomad cluster with an API address that is reachable from the `@backstage/plugin-nomad/backend` plugin [running in the back end](https://backstage.io/docs/overview/architecture-overview/#third-party-backed-plugins). You can follow [this tutorial](https://developer.hashicorp.com/nomad/tutorials/enterprise/production-deployment-guide-vm-with-consul) to learn how to deploy one. + +If your Nomad cluster has ACLs enabled, you will need a `token` with at least the [`list-jobs`capability](https://developer.hashicorp.com/nomad/tutorials/access-control/access-control-policies#namespace-rules). You can check [this tutorial](https://developer.hashicorp.com/nomad/tutorials/access-control/access-control-create-policy) for more info or the minimal [example below](#example-policy). + +### Installation + +```bash +# From your Backstage root directory +yarn add --cwd packages/app @backstage/plugin-nomad +``` + +### Configuration + +Add configuration to your [`app-config.yaml`](https://github.com/backstage/backstage/blob/master/app-config.yaml). For example: + +```yaml +nomad: + addr: 'http://localhost:4646' + token: '93e034ad-e504-42f9-129d-5d81be9f13d3' +``` + +The `token` can be excluded if [ACLs are not enabled](https://developer.hashicorp.com/nomad/api-docs#authentication). + +### Annotate Components + +Several annotations are available for Components that make use of this plugin: + +```yaml +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + annotations: + nomad.io/namespace: default + nomad.io/job-id: redis + nomad.io/group: 'redis|prometheus-collector' +``` + +- `nomad.io/job-id` annotation's value is matched exactly and corresponds to `JobID` in the Nomad API. It is required for the Job Versions Card but optional for the Allocations Table +- `nomad.io/group` annotation's value is used as a regex pattern against `TaskGroup` using [Nomad's server-side filtering](https://developer.hashicorp.com/nomad/api-docs#filtering). It is optional for the [Allocations Table](#allocations-table) +- `nomad.io/namespace` is the Namespace of the Job and Allocations of the Component. If omitted, it defaults to `default` + +### Job Versions Card + +The snippet below adds a card to the overview tab on the EntityPage. It shows versions of a Nomad job associated with a Component in the Catalog. + +```typescript +// In packages/app/src/components/catalog/EntityPage.tsx + +import { EntityNomadJobVersionListCard, isNomadJobIDAvailable } from '@backstage/plugin-nomad'; + +const overviewContent = ( + ... + + + + + + + +); +``` + +
+ +
+ +#### Requirements + +- the `nomad.io/job-id` annotation must be set + +### Allocations Table + +The snippet below adds a `/nomad` tab to the EntityPage that displays all allocations associated the `nomad.io/job-id` and/or `nomad.io/group` of Component's annotations. + +```typescript +// In packages/app/src/components/catalog/EntityPage.tsx + +import { EntityNomadAllocationListTable, isNomadAllocationsAvailable } from '@backstage/plugin-nomad'; + +const serviceEntityPage = ( + ... + + + +) +``` + +
+ +
+ +#### Requirements + +- `nomad.io/job-id` and/or `nomad.io/group` annotations must be set + +## ACL Policy Example + +Because this plugin uses API endpoints that require the `list-jobs` capability, the token you provide to the plugin's [`nomad` configuration](#configuration) needs at least that. + +To create such a token you can create a policy like below. This policy applies to all namespaces: + +```hcl +# backstage.policy.hcl +namespace "*" { + policy = "read" +} + +node { + policy = "read" +} +``` + +And create a policy for it: + +```bash +nomad acl policy apply backstage backstage.policy.hcl +``` + +Then create a client token for it: + +```bash +nomad acl token create -name=backstage -policy=backstage +Accessor ID = 5e9fe97b-76c5-8803-21b8-083308dc6c11 +Secret ID = 93e034ad-e504-42f9-129d-5d81be9f13d3 +Name = backstage +Type = client +Global = false +Create Time = 2023-06-05 00:45:20.51905 +0000 UTC +Expiry Time = +Create Index = 54 +Modify Index = 54 +Policies = [backstage] + +Roles + +``` + +In the example above, the `Secret ID` is the `token` to use in the [configuration](#configuration). diff --git a/plugins/nomad/api-report.md b/plugins/nomad/api-report.md new file mode 100644 index 0000000000..f000854374 --- /dev/null +++ b/plugins/nomad/api-report.md @@ -0,0 +1,35 @@ +## API Report File for "@backstage/plugin-nomad" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +/// + +import { BackstagePlugin } from '@backstage/core-plugin-api'; +import { Entity } from '@backstage/catalog-model'; +import { RouteRef } from '@backstage/core-plugin-api'; + +// @public +export const EntityNomadAllocationListTable: () => JSX.Element; + +// @public +export const EntityNomadJobVersionListCard: () => JSX.Element | null; + +// @public (undocumented) +export const isNomadAllocationsAvailable: (entity: Entity) => boolean; + +// @public (undocumented) +export const isNomadJobIDAvailable: (entity: Entity) => boolean; + +// @public (undocumented) +export const nomadPlugin: BackstagePlugin< + { + root: RouteRef; + entityContent: RouteRef; + }, + {}, + {} +>; + +// (No @packageDocumentation comment for this package) +``` diff --git a/plugins/nomad/dev/index.tsx b/plugins/nomad/dev/index.tsx new file mode 100644 index 0000000000..73eaffb8e0 --- /dev/null +++ b/plugins/nomad/dev/index.tsx @@ -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. + */ +import { createDevApp } from '@backstage/dev-utils'; +import { nomadPlugin } from '../src/plugin'; + +createDevApp().registerPlugin(nomadPlugin).render(); diff --git a/plugins/nomad/img/allocations-component.png b/plugins/nomad/img/allocations-component.png new file mode 100644 index 0000000000..fb1e9768af Binary files /dev/null and b/plugins/nomad/img/allocations-component.png differ diff --git a/plugins/nomad/img/job-versions-component.png b/plugins/nomad/img/job-versions-component.png new file mode 100644 index 0000000000..d6c9746bcb Binary files /dev/null and b/plugins/nomad/img/job-versions-component.png differ diff --git a/plugins/nomad/package.json b/plugins/nomad/package.json new file mode 100644 index 0000000000..283b6cdb9c --- /dev/null +++ b/plugins/nomad/package.json @@ -0,0 +1,88 @@ +{ + "name": "@backstage/plugin-nomad", + "version": "0.1.2-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" + }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/nomad" + }, + "scripts": { + "start": "backstage-cli package start", + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack" + }, + "dependencies": { + "@backstage/catalog-model": "workspace:^", + "@backstage/config": "workspace:^", + "@backstage/core-components": "workspace:^", + "@backstage/core-plugin-api": "workspace:^", + "@backstage/plugin-catalog-react": "workspace:^", + "@backstage/theme": "workspace:^", + "@material-ui/core": "^4.9.13", + "@material-ui/icons": "^4.9.1", + "@material-ui/lab": "^4.0.0-alpha.60", + "luxon": "^3.3.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/jest-dom": "^5.10.1", + "@testing-library/react": "^12.1.3", + "@testing-library/user-event": "^14.0.0", + "@types/node": "*", + "cross-fetch": "^3.1.5", + "msw": "^1.0.0" + }, + "files": [ + "dist" + ], + "configSchema": { + "$schema": "https://backstage.io/schema/config-v1", + "title": "@backstage/plugin-nomad", + "type": "object", + "properties": { + "nomad": { + "type": "object", + "properties": { + "addr": { + "type": "string", + "description": "The address of the Nomad API. See: https://developer.hashicorp.com/nomad/api-docs#addressing-and-ports", + "visibility": "frontend" + }, + "token": { + "type": "string", + "description": "The token to call the Nomad API with. See: https://developer.hashicorp.com/nomad/api-docs#authentication", + "visibility": "secret" + } + }, + "required": [ + "addr" + ] + } + } + } +} diff --git a/plugins/nomad/src/Router.tsx b/plugins/nomad/src/Router.tsx new file mode 100644 index 0000000000..4a3377779a --- /dev/null +++ b/plugins/nomad/src/Router.tsx @@ -0,0 +1,44 @@ +/* + * 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 { useEntity } from '@backstage/plugin-catalog-react'; +import { MissingAnnotationEmptyState } from '@backstage/core-components'; +import { Route, Routes } from 'react-router-dom'; +import { EntityNomadAllocationListTable } from './components/EntityNomadAllocationListTable/EntityNomadAllocationListTable'; +import { + NOMAD_GROUP_ANNOTATION, + NOMAD_JOB_ID_ANNOTATION, + isNomadAllocationsAvailable, +} from './annotations'; + +export const EmbeddedRouter = () => { + const { entity } = useEntity(); + + if (!isNomadAllocationsAvailable(entity)) { + return ( + + ); + } + + return ( + + } /> + + ); +}; diff --git a/plugins/nomad/src/annotations.ts b/plugins/nomad/src/annotations.ts new file mode 100644 index 0000000000..9854288e5d --- /dev/null +++ b/plugins/nomad/src/annotations.ts @@ -0,0 +1,35 @@ +/* + * 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 { Entity } from '@backstage/catalog-model'; + +/** @public */ +export const NOMAD_NAMESPACE_ANNOTATION = 'nomad.io/namespace'; + +/** @public */ +export const NOMAD_JOB_ID_ANNOTATION = 'nomad.io/job-id'; + +/** @public */ +export const NOMAD_GROUP_ANNOTATION = 'nomad.io/group'; + +/** @public */ +export const isNomadJobIDAvailable = (entity: Entity) => + Boolean(entity.metadata.annotations?.[NOMAD_JOB_ID_ANNOTATION]); + +/** @public */ +export const isNomadAllocationsAvailable = (entity: Entity) => + Boolean(entity.metadata.annotations?.[NOMAD_JOB_ID_ANNOTATION]) || + Boolean(entity.metadata.annotations?.[NOMAD_GROUP_ANNOTATION]); diff --git a/plugins/nomad/src/api.ts b/plugins/nomad/src/api.ts new file mode 100644 index 0000000000..44aa5d48d2 --- /dev/null +++ b/plugins/nomad/src/api.ts @@ -0,0 +1,160 @@ +/* + * 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 { + DiscoveryApi, + FetchApi, + createApiRef, +} from '@backstage/core-plugin-api'; + +/** @public */ +export const nomadApiRef = createApiRef({ + id: 'plugin.nomad.service', +}); + +/** @public */ +export type NomadApi = { + /** + * listAllocations is for listing all allocations matching some part of 'filter'. + * + * See: https://developer.hashicorp.com/nomad/api-docs/allocations#list-allocations + */ + listAllocations: ( + options: ListAllocationsRequest, + ) => Promise; + + /** + * listJobVersions is for listing all deployments matching some part of 'filter'. + * + * See: https://developer.hashicorp.com/nomad/api-docs/deployments#list-deployments + */ + listJobVersions: ( + options: ListJobVersionsRequest, + ) => Promise; +}; + +/** @public */ +export interface ListAllocationsRequest { + namespace: string; + filter: string; +} + +/** @public */ +export interface ListAllocationsResponse { + allocations: Allocation[]; +} + +/** @public */ +export interface Allocation { + ClientStatus: string; + CreateTime: number; + DeploymentStatus: DeploymentStatus; + ID: string; + JobID: string; + JobVersion: string; + ModifyTime: number; + Name: string; + Namespace: string; + NodeID: string; + TaskGroup: string; +} + +/** @public */ +export interface DeploymentStatus { + Healthy: boolean; + Timestamp: string; +} + +/** @public */ +export interface ListJobVersionsRequest { + namespace: string; + jobID: string; +} + +/** @public */ +export interface ListJobVersionsResponse { + versions: Version[]; +} + +/** @public */ +export interface Version { + ID: string; + SubmitTime: number; + Stable: boolean; + Version: number; +} + +/** @public */ +export class FetchError extends Error { + get name(): string { + return this.constructor.name; + } + + static async forResponse(resp: Response): Promise { + return new FetchError( + `Request failed with status code ${ + resp.status + }.\nReason: ${await resp.text()}`, + ); + } +} + +/** @public */ +export class NomadHttpApi implements NomadApi { + static create(discoveryApi: DiscoveryApi, fetchApi: FetchApi) { + return new NomadHttpApi(discoveryApi, fetchApi); + } + + constructor(private discoveryApi: DiscoveryApi, private fetchApi: FetchApi) {} + + // TODO: pagination + async listAllocations( + options: ListAllocationsRequest, + ): Promise { + const apiUrl = await this.discoveryApi.getBaseUrl('nomad'); + + const resp = await this.fetchApi.fetch( + `${apiUrl}/v1/allocations?namespace=${encodeURIComponent( + options.namespace, + )}&filter=${encodeURIComponent(options.filter)}`, + ); + if (!resp.ok) throw await FetchError.forResponse(resp); + + return { + allocations: await resp.json(), + }; + } + + // TODO: pagination + async listJobVersions( + options: ListJobVersionsRequest, + ): Promise { + const apiUrl = await this.discoveryApi.getBaseUrl('nomad'); + + const resp = await this.fetchApi.fetch( + `${apiUrl}/v1/job/${ + options.jobID + }/versions?namespace=${encodeURIComponent(options.namespace)}`, + ); + if (!resp.ok) throw await FetchError.forResponse(resp); + + const respJson = await resp.json(); + + return { + versions: respJson.Versions, + }; + } +} diff --git a/plugins/nomad/src/components/EntityNomadAllocationListTable/EntityNomadAllocationListTable.tsx b/plugins/nomad/src/components/EntityNomadAllocationListTable/EntityNomadAllocationListTable.tsx new file mode 100644 index 0000000000..cc19d1ec53 --- /dev/null +++ b/plugins/nomad/src/components/EntityNomadAllocationListTable/EntityNomadAllocationListTable.tsx @@ -0,0 +1,201 @@ +/* + * 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 { DateTime } from 'luxon'; +import { + Link, + MissingAnnotationEmptyState, + ResponseErrorPanel, + StatusError, + StatusOK, + StatusPending, + StatusRunning, + Table, + TableColumn, +} from '@backstage/core-components'; +import { useEntity } from '@backstage/plugin-catalog-react'; +import React, { useState } from 'react'; +import { Allocation, nomadApiRef } from '../../api'; +import { configApiRef, useApi } from '@backstage/core-plugin-api'; +import { + NOMAD_GROUP_ANNOTATION, + NOMAD_JOB_ID_ANNOTATION, + NOMAD_NAMESPACE_ANNOTATION, + isNomadAllocationsAvailable, +} from '../../annotations'; +import useAsync from 'react-use/lib/useAsync'; + +type rowType = Allocation & { nomadAddr: string }; + +const columns: TableColumn[] = [ + { + title: 'ID', + field: 'ID', + render: row => ( + + {row.ID.split('-')[0]} + + ), + }, + { + title: 'Task Group', + field: 'TaskGroup', + render: row => ( + + {row.TaskGroup} + + ), + }, + { + title: 'Created', + field: 'CreateTime', + render: row => + DateTime.fromMillis(row.CreateTime / 1000000).toLocaleString( + DateTime.DATETIME_MED_WITH_SECONDS, + ), + }, + { + title: 'Status', + field: 'ClientStatus', + render: row => + ({ + pending: pending, + running: running, + failed: failed, + complete: complete, + }[row.ClientStatus] || {row.ClientStatus}), + }, + { + title: 'Version', + field: 'JobVersion', + render: row => row.JobVersion, + }, + { + title: 'Client', + field: 'NodeID', + render: row => ( + + {row.ID.split('-')[0]} + + ), + }, +]; + +/** + * EntityNomadAllocationListTable is roughly based off Nomad's Allocations tab's view. + */ +export const EntityNomadAllocationListTable = () => { + // Wait on entity + const { entity } = useEntity(); + + // Get ref to the backend API + const [init, setInit] = useState(true); + const configApi = useApi(configApiRef); + const nomadApi = useApi(nomadApiRef); + const nomadAddr = configApi.getString('nomad.addr'); + + // Store results of calling API + const [allocations, setAllocations] = useState([]); + const [err, setErr] = useState(); + + // Check that attributes are available + if (!isNomadAllocationsAvailable(entity)) { + ; + } + + // Get plugin attributes + const namespace = + entity.metadata.annotations?.[NOMAD_NAMESPACE_ANNOTATION] ?? 'default'; + const job = entity.metadata.annotations?.[NOMAD_JOB_ID_ANNOTATION] ?? ''; + const group = entity.metadata.annotations?.[NOMAD_GROUP_ANNOTATION] ?? ''; + + // Make filter from attributes + const filter: string[] = []; + if (job) { + filter.push(`(JobID == "${job}")`); + } + if (group) { + filter.push(`(TaskGroup matches "${group}")`); + } + + // Create a query to update allocations + const query = async () => { + try { + // Make call to nomad-backend + const resp = await nomadApi.listAllocations({ + namespace, + filter: filter.join(' and '), + }); + + // Sort results + const results = resp.allocations + .sort((a, b) => a.CreateTime - b.CreateTime) + .sort(({ ClientStatus: a }, { ClientStatus: b }) => { + if (a === 'running' || b !== 'running') { + return -1; + } + return 0; + }); + + setAllocations(results.map(row => ({ ...row, id: row.ID, nomadAddr }))); + setErr(undefined); + } catch (e) { + setAllocations([]); + setErr(e); + } + }; + + // Start querying for allocations every 5s + useAsync(async () => { + if (init) { + setInit(false); + query(); + } + + const interval = setTimeout(() => { + query(); + }, 5_000); + + return () => clearTimeout(interval); + }, [allocations, entity]); + + // Store a ref to a potential error + if (err) { + return ; + } + + return ( + + title="Allocations" + options={{ + search: true, + padding: 'dense', + sorting: true, + draggable: false, + paging: false, + debounceInterval: 500, + filterCellStyle: { padding: '0 16px 0 20px' }, + }} + columns={columns} + data={allocations} + /> + ); +}; diff --git a/plugins/nomad/src/components/EntityNomadJobVersionListCard/EntityNomadJobVersionListCard.tsx b/plugins/nomad/src/components/EntityNomadJobVersionListCard/EntityNomadJobVersionListCard.tsx new file mode 100644 index 0000000000..bb4e4b0fad --- /dev/null +++ b/plugins/nomad/src/components/EntityNomadJobVersionListCard/EntityNomadJobVersionListCard.tsx @@ -0,0 +1,152 @@ +/* + * 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 { DateTime } from 'luxon'; +import { + InfoCard, + MissingAnnotationEmptyState, + ResponseErrorPanel, + Table, + TableColumn, +} from '@backstage/core-components'; +import { useEntity } from '@backstage/plugin-catalog-react'; +import React, { useEffect, useState } from 'react'; +import { Version, nomadApiRef } from '../../api'; +import { configApiRef, useApi } from '@backstage/core-plugin-api'; +import { + NOMAD_JOB_ID_ANNOTATION, + NOMAD_NAMESPACE_ANNOTATION, + isNomadJobIDAvailable, +} from '../../annotations'; +import OpenInNewIcon from '@material-ui/icons/OpenInNew'; +import { Chip } from '@material-ui/core'; + +type rowType = Version & { nomadAddr: string }; + +const columns: TableColumn[] = [ + { + title: 'Version', + field: 'Version', + render: row => row.Version, + }, + { + title: 'Stable', + field: 'Stable', + render: row => , + }, + { + title: 'Submitted', + field: 'SubmitTime', + render: row => + DateTime.fromMillis(row.SubmitTime / 1000000).toLocaleString( + DateTime.DATETIME_MED_WITH_SECONDS, + ), + }, +]; + +/** + * EntityNomadJobVersionListCard is roughly based on the Nomad UI's versions tab. + */ +export const EntityNomadJobVersionListCard = () => { + // Wait on entity + const { entity } = useEntity(); + + // Get ref to the backend API + const configApi = useApi(configApiRef); + const nomadApi = useApi(nomadApiRef); + const nomadAddr = configApi.getString('nomad.addr'); + + // Store results of calling API + const [init, setInit] = useState(true); + const [versions, setVersions] = useState([]); + const [err, setErr] = useState(); + + // Get plugin attributes + const namespace = + entity.metadata.annotations?.[NOMAD_NAMESPACE_ANNOTATION] ?? 'default'; + const jobID = entity.metadata.annotations?.[NOMAD_JOB_ID_ANNOTATION] ?? ''; + + // Start querying for allocations every 10s + useEffect(() => { + // Create a query to update allocations + const query = async () => { + try { + // Make call to nomad-backend + const resp = await nomadApi.listJobVersions({ namespace, jobID }); + + setVersions( + resp.versions.map(row => ({ ...row, id: row.ID, nomadAddr })), + ); + setErr(undefined); + } catch (e) { + setVersions([]); + setErr(e); + } + }; + + if (init) { + setInit(false); + query(); + } + + const interval = setTimeout(() => { + query(); + }, 10_000); + + return () => clearTimeout(interval); + }, [init, jobID, namespace, nomadAddr, nomadApi]); + + // Store a ref to a potential error + if (err) { + return ; + } + + if (!entity) return null; + + // Check that job ID is set + if (!isNomadJobIDAvailable(entity)) { + return ( + + + + ); + } + + return ( + + title="Job versions" + actions={[ + { + icon: () => , + tooltip: 'Open in Nomad UI', + isFreeAction: true, + onClick: () => window.open(`${nomadAddr}/ui/jobs/${jobID}/versions`), + }, + ]} + options={{ + search: false, + padding: 'dense', + sorting: true, + draggable: false, + paging: false, + debounceInterval: 500, + filterCellStyle: { padding: '0 16px 0 20px' }, + }} + columns={columns} + data={versions} + /> + ); +}; diff --git a/plugins/nomad/src/components/index.ts b/plugins/nomad/src/components/index.ts new file mode 100644 index 0000000000..dcdae8cc99 --- /dev/null +++ b/plugins/nomad/src/components/index.ts @@ -0,0 +1,18 @@ +/* + * 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 { EntityNomadJobVersionListCard } from './EntityNomadJobVersionListCard/EntityNomadJobVersionListCard'; +export { EntityNomadAllocationListTable } from './EntityNomadAllocationListTable/EntityNomadAllocationListTable'; diff --git a/plugins/nomad/src/index.ts b/plugins/nomad/src/index.ts new file mode 100644 index 0000000000..d139935f1f --- /dev/null +++ b/plugins/nomad/src/index.ts @@ -0,0 +1,24 @@ +/* + * 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 { + nomadPlugin, + EntityNomadJobVersionListCard, + EntityNomadAllocationListTable, +} from './plugin'; +export { + isNomadAllocationsAvailable, + isNomadJobIDAvailable, +} from './annotations'; diff --git a/plugins/nomad/src/plugin.test.ts b/plugins/nomad/src/plugin.test.ts new file mode 100644 index 0000000000..def0f8ab89 --- /dev/null +++ b/plugins/nomad/src/plugin.test.ts @@ -0,0 +1,34 @@ +/* + * 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 { + nomadPlugin, + entityContentRouteRef, + EntityNomadContent, +} from './plugin'; + +describe('nomad', () => { + it('should export plugin', () => { + expect(nomadPlugin).toBeDefined(); + }); + + it('should export Nomad entity ref', () => { + expect(entityContentRouteRef).toBeDefined(); + }); + + it('should export Nomad entity', () => { + expect(EntityNomadContent).toBeDefined(); + }); +}); diff --git a/plugins/nomad/src/plugin.ts b/plugins/nomad/src/plugin.ts new file mode 100644 index 0000000000..df89785941 --- /dev/null +++ b/plugins/nomad/src/plugin.ts @@ -0,0 +1,87 @@ +/* + * 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 { + discoveryApiRef, + fetchApiRef, + createApiFactory, + createPlugin, + createRouteRef, + createRoutableExtension, + createComponentExtension, +} from '@backstage/core-plugin-api'; + +import { rootRouteRef } from './routes'; +import { NomadHttpApi, nomadApiRef } from './api'; + +export const entityContentRouteRef = createRouteRef({ + id: 'nomad:entity-content', +}); + +/** @public */ +export const nomadPlugin = createPlugin({ + id: 'nomad', + apis: [ + createApiFactory({ + api: nomadApiRef, + deps: { discoveryApi: discoveryApiRef, fetchApi: fetchApiRef }, + factory: ({ discoveryApi, fetchApi }) => + NomadHttpApi.create(discoveryApi, fetchApi), + }), + ], + routes: { + root: rootRouteRef, + entityContent: entityContentRouteRef, + }, +}); + +/** @public */ +export const EntityNomadContent = nomadPlugin.provide( + createRoutableExtension({ + name: 'EntityNomadContent', + component: () => import('./Router').then(m => m.EmbeddedRouter), + mountPoint: entityContentRouteRef, + }), +); + +/** + * Card used to show the list of Nomad job versions. + * + * @public + */ +export const EntityNomadJobVersionListCard = nomadPlugin.provide( + createComponentExtension({ + name: 'EntityNomadJobVersionListCard', + component: { + lazy: () => + import('./components').then(m => m.EntityNomadJobVersionListCard), + }, + }), +); + +/** + * Table used to show the list of Nomad allocations for a job and/or task-group. + * + * @public + */ +export const EntityNomadAllocationListTable = nomadPlugin.provide( + createComponentExtension({ + name: 'EntityNomadAllocationListTable', + component: { + lazy: () => + import('./components').then(m => m.EntityNomadAllocationListTable), + }, + }), +); diff --git a/plugins/nomad/src/routes.ts b/plugins/nomad/src/routes.ts new file mode 100644 index 0000000000..12e8caf4eb --- /dev/null +++ b/plugins/nomad/src/routes.ts @@ -0,0 +1,20 @@ +/* + * 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 { createRouteRef } from '@backstage/core-plugin-api'; + +export const rootRouteRef = createRouteRef({ + id: 'nomad', +}); diff --git a/plugins/nomad/src/setupTests.ts b/plugins/nomad/src/setupTests.ts new file mode 100644 index 0000000000..73dd8dce47 --- /dev/null +++ b/plugins/nomad/src/setupTests.ts @@ -0,0 +1,17 @@ +/* + * 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 '@testing-library/jest-dom'; +import 'cross-fetch/polyfill'; diff --git a/plugins/octopus-deploy/CHANGELOG.md b/plugins/octopus-deploy/CHANGELOG.md index 50aed4c328..b6a652e24d 100644 --- a/plugins/octopus-deploy/CHANGELOG.md +++ b/plugins/octopus-deploy/CHANGELOG.md @@ -1,5 +1,94 @@ # @backstage/plugin-octopus-deploy +## 0.2.3-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/catalog-model@1.4.1 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.1-next.0 + +## 0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/theme@0.4.1 + +## 0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + +## 0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + +## 0.2.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + +## 0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + +## 0.2.1 + +### Patch Changes + +- 944a8ac6fcc0: Improved getting started documentation +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + +## 0.2.1-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + ## 0.2.1-next.2 ### Patch Changes diff --git a/plugins/octopus-deploy/package.json b/plugins/octopus-deploy/package.json index 7a2a2de7ae..65010ae66f 100644 --- a/plugins/octopus-deploy/package.json +++ b/plugins/octopus-deploy/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-octopus-deploy", - "version": "0.2.1-next.2", + "version": "0.2.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -12,6 +12,12 @@ "backstage": { "role": "frontend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/octopus-deploy" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", @@ -48,7 +54,6 @@ "@testing-library/user-event": "^14.0.0", "@types/node": "*", "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/octopus-deploy/src/setupTests.ts b/plugins/octopus-deploy/src/setupTests.ts index 73dd8dce47..865308e634 100644 --- a/plugins/octopus-deploy/src/setupTests.ts +++ b/plugins/octopus-deploy/src/setupTests.ts @@ -14,4 +14,3 @@ * limitations under the License. */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/org-react/CHANGELOG.md b/plugins/org-react/CHANGELOG.md index 08da3167d2..eeac469210 100644 --- a/plugins/org-react/CHANGELOG.md +++ b/plugins/org-react/CHANGELOG.md @@ -1,5 +1,100 @@ # @backstage/plugin-org-react +## 0.1.10-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.1-next.0 + +## 0.1.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/theme@0.4.1 + +## 0.1.9 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + +## 0.1.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + +## 0.1.9-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + +## 0.1.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + +## 0.1.8 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/catalog-client@1.4.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + +## 0.1.8-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/catalog-client@1.4.2-next.2 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + ## 0.1.8-next.2 ### Patch Changes diff --git a/plugins/org-react/package.json b/plugins/org-react/package.json index a224948146..176722ad03 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.8-next.2", + "version": "0.1.10-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -12,6 +12,7 @@ "backstage": { "role": "web-library" }, + "homepage": "https://backstage.io", "repository": { "type": "git", "url": "https://github.com/backstage/backstage", @@ -57,7 +58,6 @@ "@testing-library/user-event": "^14.0.0", "@types/node": "*", "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/org-react/src/setupTests.ts b/plugins/org-react/src/setupTests.ts index 9bb3e72355..326d2ed212 100644 --- a/plugins/org-react/src/setupTests.ts +++ b/plugins/org-react/src/setupTests.ts @@ -14,4 +14,3 @@ * limitations under the License. */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/org/CHANGELOG.md b/plugins/org/CHANGELOG.md index 56151944e1..4e98307d04 100644 --- a/plugins/org/CHANGELOG.md +++ b/plugins/org/CHANGELOG.md @@ -1,5 +1,95 @@ # @backstage/plugin-org +## 0.6.11-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/catalog-model@1.4.1 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.1-next.0 + +## 0.6.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/theme@0.4.1 + +## 0.6.10 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + +## 0.6.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + +## 0.6.10-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + +## 0.6.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + +## 0.6.9 + +### Patch Changes + +- 0151ed6ec37a: EntityOwnershipCard: Fix color to pick up from page theme for component type +- 2e036369d83b: Updated `alertApi` usages with severity of `info` or `success` to use `display: transient` +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + +## 0.6.9-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + ## 0.6.9-next.2 ### Patch Changes diff --git a/plugins/org/package.json b/plugins/org/package.json index b250b6e26f..81d6495d08 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.9-next.2", + "version": "0.6.11-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -13,6 +13,7 @@ "backstage": { "role": "frontend-plugin" }, + "homepage": "https://backstage.io", "repository": { "type": "git", "url": "https://github.com/backstage/backstage", @@ -61,7 +62,6 @@ "@testing-library/user-event": "^14.0.0", "@types/node": "^16.11.26", "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/org/src/components/Cards/Group/GroupProfile/GroupProfileCard.tsx b/plugins/org/src/components/Cards/Group/GroupProfile/GroupProfileCard.tsx index e8f06e49b3..76527362ff 100644 --- a/plugins/org/src/components/Cards/Group/GroupProfile/GroupProfileCard.tsx +++ b/plugins/org/src/components/Cards/Group/GroupProfile/GroupProfileCard.tsx @@ -73,7 +73,11 @@ export const GroupProfileCard = (props: { const refreshEntity = useCallback(async () => { await catalogApi.refreshEntity(stringifyEntityRef(group)); - alertApi.post({ message: 'Refresh scheduled', severity: 'info' }); + alertApi.post({ + message: 'Refresh scheduled', + severity: 'info', + display: 'transient', + }); }, [catalogApi, alertApi, group]); if (!group) { diff --git a/plugins/org/src/components/Cards/OwnershipCard/ComponentsGrid.tsx b/plugins/org/src/components/Cards/OwnershipCard/ComponentsGrid.tsx index b0b4abc1a5..8dab5c4290 100644 --- a/plugins/org/src/components/Cards/OwnershipCard/ComponentsGrid.tsx +++ b/plugins/org/src/components/Cards/OwnershipCard/ComponentsGrid.tsx @@ -42,7 +42,6 @@ const useStyles = makeStyles((theme: BackstageTheme) => boxShadow: theme.shadows[2], borderRadius: '4px', padding: theme.spacing(2), - color: theme.palette.common.white, transition: `${theme.transitions.duration.standard}ms`, '&:hover': { boxShadow: theme.shadows[4], @@ -58,6 +57,8 @@ const useStyles = makeStyles((theme: BackstageTheme) => entityTypeBox: { background: (props: { type: string }) => theme.getPageTheme({ themeId: props.type }).backgroundImage, + color: (props: { type: string }) => + theme.getPageTheme({ themeId: props.type }).fontColor, }, }), ); diff --git a/plugins/org/src/components/Cards/OwnershipCard/OwnershipCard.stories.tsx b/plugins/org/src/components/Cards/OwnershipCard/OwnershipCard.stories.tsx index 67cd512d72..390fff12a4 100644 --- a/plugins/org/src/components/Cards/OwnershipCard/OwnershipCard.stories.tsx +++ b/plugins/org/src/components/Cards/OwnershipCard/OwnershipCard.stories.tsx @@ -22,13 +22,7 @@ import { EntityProvider, } from '@backstage/plugin-catalog-react'; import { TestApiRegistry, wrapInTestApp } from '@backstage/test-utils'; -import { - BackstageTheme, - createTheme, - genPageTheme, - shapes, -} from '@backstage/theme'; -import { Grid, ThemeProvider } from '@material-ui/core'; +import { Grid } from '@material-ui/core'; import React from 'react'; import { catalogIndexRouteRef } from '../../../routes'; import { OwnershipCard } from './OwnershipCard'; @@ -115,40 +109,6 @@ export const Default = () => }, ); -const monochromeTheme = (outer: BackstageTheme) => - createTheme({ - ...outer, - defaultPageTheme: 'home', - pageTheme: { - home: genPageTheme({ colors: ['#444'], shape: shapes.wave2 }), - documentation: genPageTheme({ colors: ['#474747'], shape: shapes.wave2 }), - tool: genPageTheme({ colors: ['#222'], shape: shapes.wave2 }), - service: genPageTheme({ colors: ['#aaa'], shape: shapes.wave2 }), - website: genPageTheme({ colors: ['#0e0e0e'], shape: shapes.wave2 }), - library: genPageTheme({ colors: ['#9d9d9d'], shape: shapes.wave2 }), - other: genPageTheme({ colors: ['#aaa'], shape: shapes.wave2 }), - app: genPageTheme({ colors: ['#666'], shape: shapes.wave2 }), - }, - }); - -export const Themed = () => - wrapInTestApp( - - - - - - - - - - - , - { - mountedRoutes: { '/catalog': catalogIndexRouteRef }, - }, - ); - export const WithVariableEntityList = { argTypes: { entityLimit: { diff --git a/plugins/org/src/setupTests.ts b/plugins/org/src/setupTests.ts index b201a9c83e..28a35d2b06 100644 --- a/plugins/org/src/setupTests.ts +++ b/plugins/org/src/setupTests.ts @@ -14,4 +14,3 @@ * limitations under the License. */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/pagerduty/CHANGELOG.md b/plugins/pagerduty/CHANGELOG.md index a7239e437f..4ff94ae479 100644 --- a/plugins/pagerduty/CHANGELOG.md +++ b/plugins/pagerduty/CHANGELOG.md @@ -1,5 +1,100 @@ # @backstage/plugin-pagerduty +## 0.6.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-home-react@0.1.2-next.0 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + +## 0.6.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/plugin-home-react@0.1.1 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + +## 0.6.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/plugin-home-react@0.1.1-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/errors@1.2.1-next.0 + +## 0.6.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + - @backstage/plugin-home-react@0.1.1-next.1 + +## 0.6.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + - @backstage/plugin-home-react@0.1.1-next.0 + +## 0.6.0 + +### Minor Changes + +- 64bc274a1ee6: Adds a config schema definition so the plugin will validate with the new Backstage CLI "--strict" flag + +### Patch Changes + +- 9512f13eb3af: Add a homepage widget for the `Pagerduty` component. +- 3d11596a72b5: Update plugin installation docs to be more consistent across documentations +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + - @backstage/plugin-home-react@0.1.0 + +## 0.5.12-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + - @backstage/plugin-home-react@0.1.0-next.3 + ## 0.5.12-next.2 ### Patch Changes diff --git a/plugins/pagerduty/README.md b/plugins/pagerduty/README.md index c0ba5c8fe0..bf748439c9 100644 --- a/plugins/pagerduty/README.md +++ b/plugins/pagerduty/README.md @@ -3,26 +3,42 @@ - Display relevant PagerDuty information about an entity within Backstage, such as the escalation policy, if there are any active incidents, and recent changes - Trigger an incident to the currently on-call responder(s) for a service -# How it Works +## How it Works - The Backstage PagerDuty plugin allows PagerDuty information about a Backstage entity to be displayed within Backstage. This includes active incidents, recent change events, as well as the current on-call responders' names, email addresses, and links to their profiles in PagerDuty. - Incidents can be manually triggered via the plugin with a user-provided description, which will in turn notify the current on-call responders (Alternatively, the plugin can be configured with an optional `readOnly` property to suppress the ability to trigger incidents from the plugin). - _Note: This feature is only available when providing the `pagerduty.com/integration-key` annotation_ - Change events will be displayed in a separate tab. If the change event payload has additional links the first link only will be rendered. -# Requirements +## Requirements - Setup of the PagerDuty plugin for Backstage requires a PagerDuty Admin role in order to generate the necessary authorizations, such as the API token. If you do not have this role, please reach out to an Admin or Account Owner within your organization to request configuration of this plugin. -# Support +## Feature Overview + +### View any open incidents + +![PagerDuty plugin showing no incidents and the on-call rotation](doc/pd1.png) + +### Email link, and view contact information for staff on call + +![PagerDuty plugin showing on-call rotation contact information](doc/pd2.png) + +### Trigger an incident for a service + +![PagerDuty plugin popup modal for creating an incident](doc/pd3.png) + +![PagerDuty plugin showing an active incident](doc/pd4.png) + +## Support If you need help with this plugin, please reach out on the [Backstage Discord server](https://discord.gg/backstage-687207715902193673). -# Integration Walk-through +## Integration Walk-through -## In PagerDuty +### In PagerDuty -### Integrating With a PagerDuty Service +#### Integrating With a PagerDuty Service 1. From the **Configuration** menu, select **Services**. 2. There are two ways to add an integration to a service: @@ -33,9 +49,9 @@ If you need help with this plugin, please reach out on the [Backstage Discord se 5. An **Integration Key** will be generated on this screen. Keep this key saved in a safe place, as it will be used when you configure the integration with **Backstage** in the next section. ![](https://pdpartner.s3.amazonaws.com/ig-template-copy-integration-key.png) -## In Backstage +### In Backstage -### Install the plugin +#### Install the plugin The file paths mentioned in the following steps are relative to your app's root directory — for example, the directory created by following the [Getting Started](https://backstage.io/docs/getting-started/) guide and creating your app with `npx @backstage/create-app`. @@ -86,7 +102,7 @@ const overviewContent = ( ); ``` -### Configure the plugin +#### Configure the plugin First, [annotate](https://backstage.io/docs/features/software-catalog/descriptor-format#annotations-optional) the appropriate entity with the PagerDuty integration key in its `.yaml` configuration file: @@ -95,7 +111,7 @@ annotations: pagerduty.com/integration-key: [INTEGRATION_KEY] ``` -### The homepage component +#### The homepage component You may also add the component to the homepage of Backstage. Edit the `HomePage.tsx` file, import `PagerDutyHomepageCard` and add it to the home page. e.g. @@ -140,9 +156,9 @@ $ PAGERDUTY_TOKEN='' yarn start This will proxy the request by adding an `Authorization` header with the provided token. -### Optional configuration +#### Optional configuration -#### Annotating with Service ID +##### Annotating with Service ID If you want to integrate a PagerDuty service with Backstage but don't want to use an integration key, you can also [annotate](https://backstage.io/docs/features/software-catalog/descriptor-format#annotations-optional) the appropriate entity with a PagerDuty Service ID instead @@ -160,12 +176,12 @@ Your browser URL should now be located at `https://pagerduty.com/service-directo _Note: When annotating with `pagerduty.com/service-id`, the feature to Create Incidents is not currently supported_ -#### Custom Events URL +##### Custom Events URL If you want to override the default URL used for events, you can add it to `app-config.yaml`: ```yaml -pagerduty: +pagerDuty: eventsBaseUrl: 'https://events.pagerduty.com/v2' ``` @@ -187,7 +203,7 @@ proxy: allowedMethods: ['GET'] ``` -# How to Uninstall +## How to Uninstall 1. Remove any configuration added in Backstage yaml files, such as the proxy configuration in `app-config.yaml` and the integration key in an entity's annotations. 2. Remove the added code snippets from `EntityPage.tsx` @@ -199,19 +215,3 @@ yarn remove --cwd packages/app @backstage/plugin-pagerduty ``` 4. [Delete the integration](https://support.pagerduty.com/docs/services-and-integrations#delete-an-integration-from-a-service) from the service in PagerDuty - -# Feature Overview - -## View any open incidents - -![PagerDuty plugin showing no incidents and the on-call rotation](doc/pd1.png) - -## Email link, and view contact information for staff on call - -![PagerDuty plugin showing on-call rotation contact information](doc/pd2.png) - -## Trigger an incident for a service - -![PagerDuty plugin popup modal for creating an incident](doc/pd3.png) - -![PagerDuty plugin showing an active incident](doc/pd4.png) diff --git a/plugins/pagerduty/config.d.ts b/plugins/pagerduty/config.d.ts new file mode 100644 index 0000000000..3652909357 --- /dev/null +++ b/plugins/pagerduty/config.d.ts @@ -0,0 +1,28 @@ +/* + * 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 Config { + /** + * Configuration for the PagerDuty plugin + * @visibility frontend + */ + pagerDuty?: { + /** + * Optional Events Base URL to override the default. + * @visibility frontend + */ + eventsBaseUrl?: string; + }; +} diff --git a/plugins/pagerduty/package.json b/plugins/pagerduty/package.json index a0eae611a0..13d56fd3f2 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.12-next.2", + "version": "0.6.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -63,10 +63,11 @@ "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", "@types/node": "^16.11.26", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "files": [ - "dist" - ] + "dist", + "config.d.ts" + ], + "configSchema": "config.d.ts" } diff --git a/plugins/pagerduty/src/setupTests.ts b/plugins/pagerduty/src/setupTests.ts index c1d649f2ad..963c0f188b 100644 --- a/plugins/pagerduty/src/setupTests.ts +++ b/plugins/pagerduty/src/setupTests.ts @@ -15,4 +15,3 @@ */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/periskop-backend/CHANGELOG.md b/plugins/periskop-backend/CHANGELOG.md index 5f1083ec82..2bf8f6c147 100644 --- a/plugins/periskop-backend/CHANGELOG.md +++ b/plugins/periskop-backend/CHANGELOG.md @@ -1,5 +1,61 @@ # @backstage/plugin-periskop-backend +## 0.1.19-next.1 + +### Patch Changes + +- 629cbd194a87: Use `coreServices.rootConfig` instead of `coreService.config` +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/config@1.0.8 + +## 0.1.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/config@1.0.8 + +## 0.1.18 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/config@1.0.8 + +## 0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/config@1.0.8 + +## 0.1.17 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/backend-plugin-api@0.5.3 + - @backstage/config@1.0.8 + +## 0.1.17-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/config@1.0.7 + ## 0.1.17-next.1 ### Patch Changes diff --git a/plugins/periskop-backend/package.json b/plugins/periskop-backend/package.json index 772eafdb84..52c7d127b0 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.17-next.1", + "version": "0.1.19-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -8,6 +8,11 @@ "backstage": { "role": "backend-plugin" }, + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/periskop-backend" + }, "publishConfig": { "access": "public", "main": "dist/index.cjs.js", diff --git a/plugins/periskop-backend/src/plugin.ts b/plugins/periskop-backend/src/plugin.ts index 933c864d50..2123dcbece 100644 --- a/plugins/periskop-backend/src/plugin.ts +++ b/plugins/periskop-backend/src/plugin.ts @@ -31,7 +31,7 @@ export const periskopPlugin = createBackendPlugin({ register(env) { env.registerInit({ deps: { - config: coreServices.config, + config: coreServices.rootConfig, logger: coreServices.logger, httpRouter: coreServices.httpRouter, }, diff --git a/plugins/periskop/CHANGELOG.md b/plugins/periskop/CHANGELOG.md index 56f2e6791b..a12e00971f 100644 --- a/plugins/periskop/CHANGELOG.md +++ b/plugins/periskop/CHANGELOG.md @@ -1,5 +1,100 @@ # @backstage/plugin-periskop +## 0.1.19-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/catalog-model@1.4.1 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.1-next.0 + +## 0.1.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + +## 0.1.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + +## 0.1.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/errors@1.2.1-next.0 + +## 0.1.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + +## 0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + +## 0.1.17 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + +## 0.1.17-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + ## 0.1.17-next.2 ### Patch Changes diff --git a/plugins/periskop/package.json b/plugins/periskop/package.json index 7f818a54f3..3ac124e85c 100644 --- a/plugins/periskop/package.json +++ b/plugins/periskop/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop", - "version": "0.1.17-next.2", + "version": "0.1.19-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -8,6 +8,11 @@ "backstage": { "role": "frontend-plugin" }, + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/periskop" + }, "publishConfig": { "access": "public", "main": "dist/index.esm.js", @@ -52,7 +57,6 @@ "@types/luxon": "^3.0.0", "@types/node": "^16.11.26", "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/periskop/src/setupTests.ts b/plugins/periskop/src/setupTests.ts index 2b5b615b19..7a459ed24e 100644 --- a/plugins/periskop/src/setupTests.ts +++ b/plugins/periskop/src/setupTests.ts @@ -15,4 +15,3 @@ */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/permission-backend/CHANGELOG.md b/plugins/permission-backend/CHANGELOG.md index adda02bc2d..2d641baae8 100644 --- a/plugins/permission-backend/CHANGELOG.md +++ b/plugins/permission-backend/CHANGELOG.md @@ -1,5 +1,85 @@ # @backstage/plugin-permission-backend +## 0.5.23-next.1 + +### Patch Changes + +- 629cbd194a87: Use `coreServices.rootConfig` instead of `coreService.config` +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/plugin-auth-node@0.2.17-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/plugin-permission-node@0.7.11-next.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/plugin-permission-common@0.7.7 + +## 0.5.23-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/plugin-auth-node@0.2.17-next.0 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-permission-node@0.7.11-next.0 + +## 0.5.22 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-common@0.19.1 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/config@1.0.8 + - @backstage/plugin-auth-node@0.2.16 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-permission-node@0.7.10 + +## 0.5.22-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/config@1.0.8 + - @backstage/plugin-auth-node@0.2.16-next.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + - @backstage/plugin-permission-node@0.7.10-next.0 + +## 0.5.21 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/errors@1.2.0 + - @backstage/backend-plugin-api@0.5.3 + - @backstage/plugin-auth-node@0.2.15 + - @backstage/plugin-permission-node@0.7.9 + - @backstage/config@1.0.8 + - @backstage/plugin-permission-common@0.7.6 + +## 0.5.21-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.2.0-next.0 + - @backstage/plugin-auth-node@0.2.15-next.2 + - @backstage/plugin-permission-common@0.7.6-next.0 + - @backstage/plugin-permission-node@0.7.9-next.2 + ## 0.5.21-next.1 ### Patch Changes diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index ef5cee7cd3..269cb12061 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.21-next.1", + "version": "0.5.23-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -27,6 +27,12 @@ "backstage": { "role": "backend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/permission-backend" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", diff --git a/plugins/permission-backend/src/plugin.ts b/plugins/permission-backend/src/plugin.ts index 5c0a9a87a0..a6b731b120 100644 --- a/plugins/permission-backend/src/plugin.ts +++ b/plugins/permission-backend/src/plugin.ts @@ -90,7 +90,7 @@ export const permissionPlugin = createBackendPlugin(() => ({ env.registerInit({ deps: { http: coreServices.httpRouter, - config: coreServices.config, + config: coreServices.rootConfig, logger: coreServices.logger, discovery: coreServices.discovery, identity: coreServices.identity, diff --git a/plugins/permission-common/CHANGELOG.md b/plugins/permission-common/CHANGELOG.md index aa19745cb6..b0a2cb2b42 100644 --- a/plugins/permission-common/CHANGELOG.md +++ b/plugins/permission-common/CHANGELOG.md @@ -1,5 +1,32 @@ # @backstage/plugin-permission-common +## 0.7.7 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + +## 0.7.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + +## 0.7.6 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.1.0 + - @backstage/errors@1.2.0 + - @backstage/config@1.0.8 + ## 0.7.6-next.0 ### Patch Changes diff --git a/plugins/permission-common/package.json b/plugins/permission-common/package.json index c2d0a54942..32f137f560 100644 --- a/plugins/permission-common/package.json +++ b/plugins/permission-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-permission-common", "description": "Isomorphic types and client for Backstage permissions and authorization", - "version": "0.7.6-next.0", + "version": "0.7.7", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/plugins/permission-node/CHANGELOG.md b/plugins/permission-node/CHANGELOG.md index a9b6b80694..41e5f3ca5b 100644 --- a/plugins/permission-node/CHANGELOG.md +++ b/plugins/permission-node/CHANGELOG.md @@ -1,5 +1,77 @@ # @backstage/plugin-permission-node +## 0.7.11-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/plugin-auth-node@0.2.17-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/plugin-permission-common@0.7.7 + +## 0.7.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/plugin-auth-node@0.2.17-next.0 + - @backstage/plugin-permission-common@0.7.7 + +## 0.7.10 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-common@0.19.1 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/config@1.0.8 + - @backstage/plugin-auth-node@0.2.16 + - @backstage/plugin-permission-common@0.7.7 + +## 0.7.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/config@1.0.8 + - @backstage/plugin-auth-node@0.2.16-next.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + +## 0.7.9 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/errors@1.2.0 + - @backstage/backend-plugin-api@0.5.3 + - @backstage/plugin-auth-node@0.2.15 + - @backstage/config@1.0.8 + - @backstage/plugin-permission-common@0.7.6 + +## 0.7.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.2.0-next.0 + - @backstage/plugin-auth-node@0.2.15-next.2 + - @backstage/plugin-permission-common@0.7.6-next.0 + ## 0.7.9-next.1 ### Patch Changes diff --git a/plugins/permission-node/api-report.md b/plugins/permission-node/api-report.md index ea99d22fc5..2a9a79377b 100644 --- a/plugins/permission-node/api-report.md +++ b/plugins/permission-node/api-report.md @@ -75,14 +75,17 @@ export type ConditionTransformer = ( // @public export const createConditionAuthorizer: ( - rules: PermissionRule[], + rules: PermissionRule[], ) => (decision: PolicyDecision, resource: TResource | undefined) => boolean; // @public export const createConditionExports: < TResourceType extends string, TResource, - TRules extends Record>, + TRules extends Record< + string, + PermissionRule + >, >(options: { pluginId: string; resourceType: TResourceType; @@ -91,7 +94,9 @@ export const createConditionExports: < conditions: Conditions; createConditionalDecision: ( permission: ResourcePermission, - conditions: PermissionCriteria>, + conditions: PermissionCriteria< + PermissionCondition + >, ) => ConditionalPolicyDecision; }; @@ -106,7 +111,7 @@ export const createConditionFactory: < // @public export const createConditionTransformer: < TQuery, - TRules extends PermissionRule[], + TRules extends PermissionRule[], >( permissionRules: [...TRules], ) => ConditionTransformer; diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json index 0b42cf21d2..c5f30ff4a0 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.9-next.1", + "version": "0.7.11-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-react/CHANGELOG.md b/plugins/permission-react/CHANGELOG.md index f958e7c492..47aa6a70a3 100644 --- a/plugins/permission-react/CHANGELOG.md +++ b/plugins/permission-react/CHANGELOG.md @@ -1,5 +1,49 @@ # @backstage/plugin-permission-react +## 0.4.14 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.3 + - @backstage/config@1.0.8 + - @backstage/plugin-permission-common@0.7.7 + +## 0.4.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/config@1.0.8 + - @backstage/plugin-permission-common@0.7.7-next.0 + +## 0.4.14-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/config@1.0.8 + +## 0.4.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.8 + - @backstage/core-plugin-api@1.5.2 + - @backstage/plugin-permission-common@0.7.7-next.0 + +## 0.4.13 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/config@1.0.8 + - @backstage/plugin-permission-common@0.7.6 + ## 0.4.13-next.0 ### Patch Changes diff --git a/plugins/permission-react/package.json b/plugins/permission-react/package.json index 6cec30fad8..a8308b5a75 100644 --- a/plugins/permission-react/package.json +++ b/plugins/permission-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-react", - "version": "0.4.13-next.0", + "version": "0.4.14", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist-backend/CHANGELOG.md b/plugins/playlist-backend/CHANGELOG.md index b2d0e1035e..f55ad9991e 100644 --- a/plugins/playlist-backend/CHANGELOG.md +++ b/plugins/playlist-backend/CHANGELOG.md @@ -1,5 +1,96 @@ # @backstage/plugin-playlist-backend +## 0.3.4-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/plugin-playlist-common@0.1.9-next.0 + - @backstage/plugin-auth-node@0.2.17-next.1 + - @backstage/plugin-permission-node@0.7.11-next.1 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/plugin-permission-common@0.7.7 + +## 0.3.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/plugin-auth-node@0.2.17-next.0 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-permission-node@0.7.11-next.0 + - @backstage/plugin-playlist-common@0.1.8 + +## 0.3.3 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-common@0.19.1 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/plugin-auth-node@0.2.16 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-permission-node@0.7.10 + - @backstage/plugin-playlist-common@0.1.8 + +## 0.3.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/plugin-auth-node@0.2.16-next.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + - @backstage/plugin-permission-node@0.7.10-next.0 + - @backstage/plugin-playlist-common@0.1.8-next.0 + +## 0.3.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/catalog-client@1.4.2 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + - @backstage/plugin-auth-node@0.2.15 + - @backstage/plugin-permission-node@0.7.9 + - @backstage/config@1.0.8 + - @backstage/plugin-permission-common@0.7.6 + - @backstage/plugin-playlist-common@0.1.7 + +## 0.3.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/catalog-client@1.4.2-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.2.0-next.0 + - @backstage/plugin-auth-node@0.2.15-next.2 + - @backstage/plugin-permission-common@0.7.6-next.0 + - @backstage/plugin-permission-node@0.7.9-next.2 + - @backstage/plugin-playlist-common@0.1.7-next.0 + ## 0.3.2-next.1 ### Patch Changes diff --git a/plugins/playlist-backend/api-report.md b/plugins/playlist-backend/api-report.md index b755347205..6b51f316c4 100644 --- a/plugins/playlist-backend/api-report.md +++ b/plugins/playlist-backend/api-report.md @@ -15,6 +15,7 @@ import { PermissionCriteria } from '@backstage/plugin-permission-common'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; import { PermissionPolicy } from '@backstage/plugin-permission-node'; import { PermissionRule } from '@backstage/plugin-permission-node'; +import { PermissionRuleParams } from '@backstage/plugin-permission-common'; import { PlaylistMetadata } from '@backstage/plugin-playlist-common'; import { PluginDatabaseManager } from '@backstage/backend-common'; import { PluginEndpointDiscovery } from '@backstage/backend-common'; @@ -25,7 +26,9 @@ import { ResourcePermission } from '@backstage/plugin-permission-common'; // @public (undocumented) export const createPlaylistConditionalDecision: ( permission: ResourcePermission<'playlist-list'>, - conditions: PermissionCriteria>, + conditions: PermissionCriteria< + PermissionCondition<'playlist-list', PermissionRuleParams> + >, ) => ConditionalPolicyDecision; // @public (undocumented) diff --git a/plugins/playlist-backend/package.json b/plugins/playlist-backend/package.json index fa2dba4133..5285406e58 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.2-next.1", + "version": "0.3.4-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -12,6 +12,12 @@ "backstage": { "role": "backend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/playlist-backend" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", diff --git a/plugins/playlist-common/CHANGELOG.md b/plugins/playlist-common/CHANGELOG.md index a50ff9dbe8..ed624302c5 100644 --- a/plugins/playlist-common/CHANGELOG.md +++ b/plugins/playlist-common/CHANGELOG.md @@ -1,5 +1,34 @@ # @backstage/plugin-playlist-common +## 0.1.9-next.0 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/plugin-permission-common@0.7.7 + +## 0.1.8 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.7 + +## 0.1.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.7-next.0 + +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.6 + ## 0.1.7-next.0 ### Patch Changes diff --git a/plugins/playlist-common/package.json b/plugins/playlist-common/package.json index 42e6b1a2dc..2ac82b4852 100644 --- a/plugins/playlist-common/package.json +++ b/plugins/playlist-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-playlist-common", "description": "Common functionalities for the playlist plugin", - "version": "0.1.7-next.0", + "version": "0.1.9-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -14,6 +14,12 @@ "backstage": { "role": "common-library" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/playlist-common" + }, "scripts": { "build": "backstage-cli package build", "lint": "backstage-cli package lint", diff --git a/plugins/playlist/CHANGELOG.md b/plugins/playlist/CHANGELOG.md index c1e7eec7d3..3850cc3e5d 100644 --- a/plugins/playlist/CHANGELOG.md +++ b/plugins/playlist/CHANGELOG.md @@ -1,5 +1,141 @@ # @backstage/plugin-playlist +## 0.1.13-next.1 + +### Patch Changes + +- d1e0588324d1: Displaying an alert popup each time the Playlist is created or deleted +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/plugin-playlist-common@0.1.9-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-common@1.0.15 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-permission-react@0.4.14 + - @backstage/plugin-search-react@1.6.4-next.0 + +## 0.1.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/plugin-search-react@1.6.4-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-common@1.0.15 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-permission-react@0.4.14 + - @backstage/plugin-playlist-common@0.1.8 + +## 0.1.12 + +### Patch Changes + +- 68531cc70e1f: Break some internal circular import chains +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + - @backstage/plugin-catalog-common@1.0.15 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-permission-react@0.4.14 + - @backstage/plugin-playlist-common@0.1.8 + - @backstage/plugin-search-react@1.6.3 + +## 0.1.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/errors@1.2.1-next.0 + - @backstage/plugin-catalog-common@1.0.15-next.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + - @backstage/plugin-permission-react@0.4.14-next.2 + - @backstage/plugin-playlist-common@0.1.8-next.0 + - @backstage/plugin-search-react@1.6.3-next.2 + +## 0.1.12-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + - @backstage/plugin-search-react@1.6.3-next.1 + - @backstage/plugin-permission-react@0.4.14-next.1 + +## 0.1.12-next.0 + +### Patch Changes + +- 68531cc70e1f: Break some internal circular import chains +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-common@1.0.15-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + - @backstage/plugin-permission-react@0.4.14-next.0 + - @backstage/plugin-playlist-common@0.1.8-next.0 + - @backstage/plugin-search-react@1.6.3-next.0 + +## 0.1.11 + +### Patch Changes + +- 2e036369d83b: Updated `alertApi` usages with severity of `info` or `success` to use `display: transient` +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/plugin-search-react@1.6.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + - @backstage/plugin-permission-react@0.4.13 + - @backstage/plugin-catalog-common@1.0.14 + - @backstage/plugin-permission-common@0.7.6 + - @backstage/plugin-playlist-common@0.1.7 + +## 0.1.11-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-react@1.6.2-next.3 + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-catalog-common@1.0.14-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + - @backstage/plugin-permission-common@0.7.6-next.0 + - @backstage/plugin-permission-react@0.4.13-next.0 + - @backstage/plugin-playlist-common@0.1.7-next.0 + ## 0.1.10-next.2 ### Patch Changes diff --git a/plugins/playlist/package.json b/plugins/playlist/package.json index 91fabe172e..69e02df8dd 100644 --- a/plugins/playlist/package.json +++ b/plugins/playlist/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-playlist", - "version": "0.1.10-next.2", + "version": "0.1.13-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -12,6 +12,7 @@ "backstage": { "role": "frontend-plugin" }, + "homepage": "https://backstage.io", "repository": { "type": "git", "url": "https://github.com/backstage/backstage", @@ -64,7 +65,6 @@ "@testing-library/user-event": "^14.0.0", "@types/node": "*", "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", "msw": "^1.0.0", "swr": "^2.0.0" }, diff --git a/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx b/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx index 7669a48c26..d88ffbcda4 100644 --- a/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx +++ b/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx @@ -14,7 +14,12 @@ * limitations under the License. */ -import { errorApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api'; +import { + errorApiRef, + useApi, + useRouteRef, + alertApiRef, +} from '@backstage/core-plugin-api'; import { BackstageTheme } from '@backstage/theme'; import { usePermission } from '@backstage/plugin-permission-react'; import { @@ -34,6 +39,7 @@ import { useTitle } from '../../hooks'; export const CreatePlaylistButton = () => { const navigate = useNavigate(); const errorApi = useApi(errorApiRef); + const alertApi = useApi(alertApiRef); const playlistApi = useApi(playlistApiRef); const playlistRoute = useRouteRef(playlistRouteRef); const [openDialog, setOpenDialog] = useState(false); @@ -49,11 +55,16 @@ export const CreatePlaylistButton = () => { try { const playlistId = await playlistApi.createPlaylist(playlist); navigate(playlistRoute({ playlistId })); + alertApi.post({ + message: `Added playlist '${playlist.name}'`, + severity: 'success', + display: 'transient', + }); } catch (e) { errorApi.post(e); } }, - [errorApi, navigate, playlistApi, playlistRoute], + [errorApi, navigate, playlistApi, playlistRoute, alertApi], ); const singularTitle = useTitle({ diff --git a/plugins/playlist/src/components/EntityPlaylistDialog/EntityPlaylistDialog.test.tsx b/plugins/playlist/src/components/EntityPlaylistDialog/EntityPlaylistDialog.test.tsx index 1d9b298e19..828485bc3d 100644 --- a/plugins/playlist/src/components/EntityPlaylistDialog/EntityPlaylistDialog.test.tsx +++ b/plugins/playlist/src/components/EntityPlaylistDialog/EntityPlaylistDialog.test.tsx @@ -167,6 +167,7 @@ describe('EntityPlaylistDialog', () => { expect(alertApi.post).toHaveBeenCalledWith({ message: 'Entity added to playlist-2', severity: 'success', + display: 'transient', }); }); }); diff --git a/plugins/playlist/src/components/EntityPlaylistDialog/EntityPlaylistDialog.tsx b/plugins/playlist/src/components/EntityPlaylistDialog/EntityPlaylistDialog.tsx index 150ca6bc56..38ea156320 100644 --- a/plugins/playlist/src/components/EntityPlaylistDialog/EntityPlaylistDialog.tsx +++ b/plugins/playlist/src/components/EntityPlaylistDialog/EntityPlaylistDialog.tsx @@ -132,6 +132,11 @@ export const EntityPlaylistDialog = (props: EntityPlaylistDialogProps) => { stringifyEntityRef(entity!), ]); navigate(playlistRoute({ playlistId })); + alertApi.post({ + message: `Added playlist '${playlist.name}'`, + severity: 'success', + display: 'transient', + }); } catch (e) { alertApi.post({ message: `Failed to add entity to ${singularTitleLowerCase}: ${e}`, @@ -159,6 +164,7 @@ export const EntityPlaylistDialog = (props: EntityPlaylistDialogProps) => { alertApi.post({ message: `Entity added to ${playlist.name}`, severity: 'success', + display: 'transient', }); } catch (e) { alertApi.post({ diff --git a/plugins/playlist/src/components/PlaylistPage/PlaylistHeader.tsx b/plugins/playlist/src/components/PlaylistPage/PlaylistHeader.tsx index 621f94f75c..f892e8de7f 100644 --- a/plugins/playlist/src/components/PlaylistPage/PlaylistHeader.tsx +++ b/plugins/playlist/src/components/PlaylistPage/PlaylistHeader.tsx @@ -19,7 +19,12 @@ import { HeaderActionMenu, HeaderLabel, } from '@backstage/core-components'; -import { errorApiRef, useApi, useRouteRef } from '@backstage/core-plugin-api'; +import { + errorApiRef, + useApi, + useRouteRef, + alertApiRef, +} from '@backstage/core-plugin-api'; import { EntityRefLink } from '@backstage/plugin-catalog-react'; import { usePermission } from '@backstage/plugin-permission-react'; import { @@ -72,6 +77,7 @@ export type PlaylistHeaderProps = { export const PlaylistHeader = ({ playlist, onUpdate }: PlaylistHeaderProps) => { const classes = useStyles(); const errorApi = useApi(errorApiRef); + const alertApi = useApi(alertApiRef); const playlistApi = useApi(playlistApiRef); const navigate = useNavigate(); const rootRoute = useRouteRef(rootRouteRef); @@ -94,17 +100,27 @@ export const PlaylistHeader = ({ playlist, onUpdate }: PlaylistHeaderProps) => { await playlistApi.updatePlaylist({ ...update, id: playlist.id }); setOpenEditDialog(false); onUpdate(); + alertApi.post({ + message: `Updated playlist '${playlist.name}'`, + severity: 'success', + display: 'transient', + }); } catch (e) { errorApi.post(e); } }, - [errorApi, onUpdate, playlist, playlistApi], + [errorApi, onUpdate, playlist, playlistApi, alertApi], ); const [deleting, deletePlaylist] = useAsyncFn(async () => { try { await playlistApi.deletePlaylist(playlist.id); navigate(rootRoute()); + alertApi.post({ + message: `Deleted playlist '${playlist.name}'`, + severity: 'success', + display: 'transient', + }); } catch (e) { errorApi.post(e); } diff --git a/plugins/playlist/src/components/PlaylistSortPicker/PlaylistSortPicker.tsx b/plugins/playlist/src/components/PlaylistSortPicker/PlaylistSortPicker.tsx index 21c961eb91..01e3bd08ff 100644 --- a/plugins/playlist/src/components/PlaylistSortPicker/PlaylistSortPicker.tsx +++ b/plugins/playlist/src/components/PlaylistSortPicker/PlaylistSortPicker.tsx @@ -26,7 +26,7 @@ import SwapVertIcon from '@material-ui/icons/SwapVert'; import React from 'react'; import useEffectOnce from 'react-use/lib/useEffectOnce'; -import { usePlaylistList } from '../../hooks'; +import { usePlaylistList } from '../../hooks/usePlaylistList'; import { PlaylistSortCompareFunction } from '../../types'; export const enum DefaultPlaylistSortTypes { diff --git a/plugins/playlist/src/setupTests.ts b/plugins/playlist/src/setupTests.ts index 9bb3e72355..326d2ed212 100644 --- a/plugins/playlist/src/setupTests.ts +++ b/plugins/playlist/src/setupTests.ts @@ -14,4 +14,3 @@ * limitations under the License. */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/proxy-backend/CHANGELOG.md b/plugins/proxy-backend/CHANGELOG.md index 77995395b3..4a9e2bdb70 100644 --- a/plugins/proxy-backend/CHANGELOG.md +++ b/plugins/proxy-backend/CHANGELOG.md @@ -1,5 +1,62 @@ # @backstage/plugin-proxy-backend +## 0.2.42-next.1 + +### Patch Changes + +- 629cbd194a87: Use `coreServices.rootConfig` instead of `coreService.config` +- 4b82382ed8c2: Fixed invalid configuration schema. The configuration schema may be more strict as a result. +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/config@1.0.8 + +## 0.2.42-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/config@1.0.8 + +## 0.2.41 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/config@1.0.8 + +## 0.2.41-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/config@1.0.8 + +## 0.2.40 + +### Patch Changes + +- 95987388f26b: Marked headers `Authorization` and `X-Api-Key` as secret in order to not show up in frontend configuration. +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/backend-plugin-api@0.5.3 + - @backstage/config@1.0.8 + +## 0.2.40-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/config@1.0.7 + ## 0.2.40-next.1 ### Patch Changes diff --git a/plugins/proxy-backend/config.d.ts b/plugins/proxy-backend/config.d.ts index 410ff86a2e..bc9cf7765a 100644 --- a/plugins/proxy-backend/config.d.ts +++ b/plugins/proxy-backend/config.d.ts @@ -31,17 +31,17 @@ export interface Config { /** * Object with extra headers to be added to target requests. */ - headers?: Partial<{ + headers?: { /** @visibility secret */ - Authorization: string; + Authorization?: string; /** @visibility secret */ - authorization: string; + authorization?: string; /** @visibility secret */ - 'X-Api-Key': string; + 'X-Api-Key'?: string; /** @visibility secret */ - 'x-api-key': string; - [key: string]: string; - }>; + 'x-api-key'?: string; + [key: string]: string | undefined; + }; /** * Changes the origin of the host header to the target URL. Default: true. */ diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json index 25b1b3d147..56439cd0f3 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.40-next.1", + "version": "0.2.42-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/proxy-backend/src/plugin.ts b/plugins/proxy-backend/src/plugin.ts index 66eeb4a7b2..c8dbdb4a08 100644 --- a/plugins/proxy-backend/src/plugin.ts +++ b/plugins/proxy-backend/src/plugin.ts @@ -35,7 +35,7 @@ export const proxyPlugin = createBackendPlugin( register(env) { env.registerInit({ deps: { - config: coreServices.config, + config: coreServices.rootConfig, discovery: coreServices.discovery, logger: coreServices.logger, httpRouter: coreServices.httpRouter, diff --git a/plugins/puppetdb/CHANGELOG.md b/plugins/puppetdb/CHANGELOG.md index b253e29936..dbd5fde6df 100644 --- a/plugins/puppetdb/CHANGELOG.md +++ b/plugins/puppetdb/CHANGELOG.md @@ -1,5 +1,88 @@ # @backstage/plugin-puppetdb +## 0.1.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + +## 0.1.3 + +### Patch Changes + +- e6f50426333b: update some peer dependencies to silence yarn install +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + +## 0.1.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/errors@1.2.1-next.0 + +## 0.1.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + +## 0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + +## 0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + +## 0.1.2-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + ## 0.1.2-next.2 ### Patch Changes diff --git a/plugins/puppetdb/package.json b/plugins/puppetdb/package.json index 05b2d60180..ef9370200e 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.2-next.2", + "version": "0.1.4-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -47,6 +47,7 @@ }, "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": { @@ -59,7 +60,6 @@ "@testing-library/user-event": "^14.0.0", "@types/node": "*", "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", "msw": "^1.0.1" }, "files": [ diff --git a/plugins/puppetdb/src/setupTests.ts b/plugins/puppetdb/src/setupTests.ts index 73dd8dce47..865308e634 100644 --- a/plugins/puppetdb/src/setupTests.ts +++ b/plugins/puppetdb/src/setupTests.ts @@ -14,4 +14,3 @@ * limitations under the License. */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/rollbar-backend/CHANGELOG.md b/plugins/rollbar-backend/CHANGELOG.md index 30240f7126..9789127cc4 100644 --- a/plugins/rollbar-backend/CHANGELOG.md +++ b/plugins/rollbar-backend/CHANGELOG.md @@ -1,5 +1,53 @@ # @backstage/plugin-rollbar-backend +## 0.1.45-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/config@1.0.8 + +## 0.1.45-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/config@1.0.8 + +## 0.1.44 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1 + - @backstage/config@1.0.8 + +## 0.1.44-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1-next.0 + - @backstage/config@1.0.8 + +## 0.1.43 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/config@1.0.8 + +## 0.1.43-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/config@1.0.7 + ## 0.1.43-next.1 ### Patch Changes diff --git a/plugins/rollbar-backend/package.json b/plugins/rollbar-backend/package.json index c01dbc2d6d..3def2395f1 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.43-next.1", + "version": "0.1.45-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 f5c82b09a9..6bacf806bc 100644 --- a/plugins/rollbar/CHANGELOG.md +++ b/plugins/rollbar/CHANGELOG.md @@ -1,5 +1,81 @@ # @backstage/plugin-rollbar +## 0.4.21-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/theme@0.4.1 + +## 0.4.20 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + +## 0.4.20-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + +## 0.4.20-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + +## 0.4.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + +## 0.4.19 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + +## 0.4.19-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + ## 0.4.19-next.2 ### Patch Changes diff --git a/plugins/rollbar/package.json b/plugins/rollbar/package.json index 8832a9a039..8c17895e48 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.19-next.2", + "version": "0.4.21-next.0", "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 4383321c6e..ea3e24c720 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md @@ -1,5 +1,249 @@ # @backstage/plugin-scaffolder-backend-module-confluence-to-markdown +## 0.2.1-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- 0d347efc8f18: Use `fetchContents` directly instead of a `fetchPlainAction` +- c186c631b429: Import helpers from the node package instead of the backend package +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/plugin-scaffolder-node@0.1.6-next.1 + - @backstage/integration@1.5.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/integration@1.5.1 + - @backstage/types@1.1.0 + - @backstage/plugin-scaffolder-backend@1.15.2-next.0 + - @backstage/plugin-scaffolder-node@0.1.6-next.0 + +## 0.2.0 + +### Minor Changes + +- 0a7e7c5d0c04: **BREAKING** + + This change updates the configuration of the confluence-to-markdown action so that it does not conflict with other confluence plguins. Currently many plugins make use of the `confluence.auth` configuration. However, only the confluence-to-markdown action uses the `confluence.auth` as a string. This change updates it so that `confluence.auth` is an object. + + ## Required Changes + + Below are examples for updating `bearer`, `basic`, and `userpass` implementations. + + For `bearer`: + Before: + + ```yaml + confluence: + baseUrl: 'https://confluence.example.com' + auth: 'bearer' + token: '${CONFLUENCE_TOKEN}' + ``` + + After: + + ```yaml + confluence: + baseUrl: 'https://confluence.example.com' + auth: + type: 'bearer' + token: '${CONFLUENCE_TOKEN}' + ``` + + For `basic`: + + Before: + + ```yaml + confluence: + baseUrl: 'https://confluence.example.com' + auth: 'basic' + token: '${CONFLUENCE_TOKEN}' + email: 'example@company.org' + ``` + + After: + + ```yaml + confluence: + baseUrl: 'https://confluence.example.com' + auth: + type: 'basic' + token: '${CONFLUENCE_TOKEN}' + email: 'example@company.org' + ``` + + For `userpass` + Before: + + ```yaml + confluence: + baseUrl: 'https://confluence.example.com' + auth: 'userpass' + username: 'your-username' + password: 'your-password' + ``` + + After: + + ```yaml + confluence: + baseUrl: 'https://confluence.example.com' + auth: + type: 'userpass' + username: 'your-username' + password: 'your-password' + ``` + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-common@0.19.1 + - @backstage/plugin-scaffolder-backend@1.15.1 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1 + - @backstage/types@1.1.0 + - @backstage/plugin-scaffolder-node@0.1.5 + +## 0.2.0-next.1 + +### Minor Changes + +- 0a7e7c5d0c04: **BREAKING** + + This change updates the configuration of the confluence-to-markdown action so that it does not conflict with other confluence plguins. Currently many plugins make use of the `confluence.auth` configuration. However, only the confluence-to-markdown action uses the `confluence.auth` as a string. This change updates it so that `confluence.auth` is an object. + + ## Required Changes + + Below are examples for updating `bearer`, `basic`, and `userpass` implementations. + + For `bearer`: + Before: + + ```yaml + confluence: + baseUrl: 'https://confluence.example.com' + auth: 'bearer' + token: '${CONFLUENCE_TOKEN}' + ``` + + After: + + ```yaml + confluence: + baseUrl: 'https://confluence.example.com' + auth: + type: 'bearer' + token: '${CONFLUENCE_TOKEN}' + ``` + + For `basic`: + + Before: + + ```yaml + confluence: + baseUrl: 'https://confluence.example.com' + auth: 'basic' + token: '${CONFLUENCE_TOKEN}' + email: 'example@company.org' + ``` + + After: + + ```yaml + confluence: + baseUrl: 'https://confluence.example.com' + auth: + type: 'basic' + token: '${CONFLUENCE_TOKEN}' + email: 'example@company.org' + ``` + + For `userpass` + Before: + + ```yaml + confluence: + baseUrl: 'https://confluence.example.com' + auth: 'userpass' + username: 'your-username' + password: 'your-password' + ``` + + After: + + ```yaml + confluence: + baseUrl: 'https://confluence.example.com' + auth: + type: 'userpass' + username: 'your-username' + password: 'your-password' + ``` + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.15.1-next.1 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1-next.0 + - @backstage/integration@1.5.1-next.0 + - @backstage/types@1.1.0 + - @backstage/plugin-scaffolder-node@0.1.5-next.0 + +## 0.1.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1-next.0 + - @backstage/types@1.1.0 + - @backstage/plugin-scaffolder-backend@1.15.1-next.0 + - @backstage/plugin-scaffolder-node@0.1.5-next.0 + +## 0.1.3 + +### Patch Changes + +- c59a4b2b9e0a: Added support for Confluence Cloud to the `confluence:transform:markdown` action in addition to the existing Confluence Server support, view the [README](https://github.com/backstage/backstage/tree/master/plugins/scaffolder-backend-module-confluence-to-markdown) for more details +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/plugin-scaffolder-backend@1.15.0 + - @backstage/types@1.1.0 + - @backstage/integration@1.5.0 + - @backstage/errors@1.2.0 + - @backstage/config@1.0.8 + - @backstage/plugin-scaffolder-node@0.1.4 + +## 0.1.3-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.15.0-next.3 + - @backstage/backend-common@0.19.0-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.2.0-next.0 + - @backstage/integration@1.5.0-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-node@0.1.4-next.2 + ## 0.1.3-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/README.md b/plugins/scaffolder-backend-module-confluence-to-markdown/README.md index 7dd9bd96b1..87f6acc6fe 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/README.md +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/README.md @@ -65,7 +65,8 @@ There is some configuration that needs to be setup to use this action, these are ```yaml confluence: baseUrl: 'https://confluence.example.com' - token: '${CONFLUENCE_TOKEN}' + auth: + token: '${CONFLUENCE_TOKEN}' ``` The sections below will go into more details about the Base URL and Auth Methods. @@ -85,8 +86,9 @@ For `bearer`: ```yaml confluence: baseUrl: 'https://confluence.example.com' - auth: 'bearer' - token: '${CONFLUENCE_TOKEN}' + auth: + type: 'bearer' + token: '${CONFLUENCE_TOKEN}' ``` For `basic`: @@ -94,9 +96,10 @@ For `basic`: ```yaml confluence: baseUrl: 'https://confluence.example.com' - auth: 'basic' - token: '${CONFLUENCE_TOKEN}' - email: 'example@company.org' + auth: + type: 'basic' + token: '${CONFLUENCE_TOKEN}' + email: 'example@company.org' ``` For `userpass` @@ -104,9 +107,10 @@ For `userpass` ```yaml confluence: baseUrl: 'https://confluence.example.com' - auth: 'userpass' - username: 'your-username' - password: 'your-password' + auth: + type: 'userpass' + username: 'your-username' + password: 'your-password' ``` **Note:** For `basic` and `bearer` authorization methods you will need an access token for authorization with `Read` permissions. You can create a Personal Access Token (PAT) in Confluence. The value used should be the raw token as it will be encoded for you by the action. diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/config.d.ts b/plugins/scaffolder-backend-module-confluence-to-markdown/config.d.ts index 259d34cbf6..117d265ee1 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/config.d.ts +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/config.d.ts @@ -21,29 +21,31 @@ export interface Config { * The base URL for accessing the Confluence API */ baseUrl: string; - /** - * Authentication method - basic, bearer, username/password - */ - auth: 'basic' | 'bearer' | 'userpass'; - /** - * Token used for the basic and bearer auth methods - * @visibility secret - */ - token?: string; - /** - * Email used with the token for the basic auth method - * @visibility secret - */ - email?: string; - /** - * Username used with the Username/Password auth method - * @visibility secret - */ - username?: string; - /** - * Password used with the Username/Password auth method - * @visibility secret - */ - password?: string; + auth: { + /** + * Authentication method - basic, bearer, username/password + */ + type: 'basic' | 'bearer' | 'userpass'; + /** + * Token used for the basic and bearer auth methods + * @visibility secret + */ + token?: string; + /** + * Email used with the token for the basic auth method + * @visibility secret + */ + email?: string; + /** + * Username used with the Username/Password auth method + * @visibility secret + */ + username?: string; + /** + * Password used with the Username/Password auth method + * @visibility secret + */ + password?: string; + }; }; } diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json index 5cd100c451..0d342d1717 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.3-next.2", + "version": "0.2.1-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -13,6 +13,12 @@ "backstage": { "role": "backend-plugin-module" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/scaffolder-backend-module-confluence-to-markdown" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", @@ -28,7 +34,6 @@ "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", - "@backstage/plugin-scaffolder-backend": "workspace:^", "@backstage/plugin-scaffolder-node": "workspace:^", "@backstage/types": "workspace:^", "fs-extra": "10.1.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 6d6a3ac757..4e4f3091f1 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 @@ -47,7 +47,9 @@ describe('confluence:transform:markdown', () => { const config = new ConfigReader({ confluence: { baseUrl: baseUrl, - token: 'fake_token', + auth: { + token: 'fake_token', + }, }, }); @@ -155,7 +157,7 @@ describe('confluence:transform:markdown', () => { expect(logger.info).toHaveBeenCalledWith( `Fetching the mkdocs.yml catalog from https://notreal.github.com/space/backstage/mkdocs.yml`, ); - expect(logger.info).toHaveBeenCalledTimes(6); + expect(logger.info).toHaveBeenCalledTimes(5); expect(createWriteStream).toHaveBeenCalledTimes(1); expect(readFile).toHaveBeenCalledTimes(1); expect(writeFile).toHaveBeenCalledTimes(1); @@ -202,7 +204,7 @@ describe('confluence:transform:markdown', () => { expect(logger.info).toHaveBeenCalledWith( `Fetching the mkdocs.yml catalog from https://notreal.github.com/space/backstage/mkdocs.yml`, ); - expect(logger.info).toHaveBeenCalledTimes(6); + expect(logger.info).toHaveBeenCalledTimes(5); expect(createWriteStream).not.toHaveBeenCalled(); expect(readFile).toHaveBeenCalledTimes(1); 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 9b666fd99e..71a3af11ae 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 @@ -13,11 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { Config } from '@backstage/config'; import { UrlReader } from '@backstage/backend-common'; import { ScmIntegrations } from '@backstage/integration'; -import { createFetchPlainAction } from '@backstage/plugin-scaffolder-backend'; -import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; +import { + createTemplateAction, + fetchContents, +} from '@backstage/plugin-scaffolder-node'; import { InputError, ConflictError } from '@backstage/errors'; import { NodeHtmlMarkdown } from 'node-html-markdown'; import fs from 'fs-extra'; @@ -41,7 +44,6 @@ export const createConfluenceToMarkdownAction = (options: { config: Config; }) => { const { config, reader, integrations } = options; - const fetchPlainAction = createFetchPlainAction({ reader, integrations }); type Obj = { [key: string]: string; }; @@ -82,18 +84,18 @@ export const createConfluenceToMarkdownAction = (options: { parsedRepoUrl.filepath.lastIndexOf('/') + 1, ); const dirPath = ctx.workspacePath; + const repoFileDir = `${dirPath}/${parsedRepoUrl.filepath}`; let productArray: string[][] = []; ctx.logger.info(`Fetching the mkdocs.yml catalog from ${repoUrl}`); // This grabs the files from Github - const repoFileDir = `${dirPath}/${parsedRepoUrl.filepath}`; - await fetchPlainAction.handler({ - ...ctx, - input: { - url: `https://${parsedRepoUrl.resource}/${parsedRepoUrl.owner}/${parsedRepoUrl.name}`, - targetPath: dirPath, - }, + await fetchContents({ + reader, + integrations, + baseUrl: ctx.templateInfo?.baseUrl, + fetchUrl: `https://${parsedRepoUrl.resource}/${parsedRepoUrl.owner}/${parsedRepoUrl.name}`, + outputPath: ctx.workspacePath, }); for (const url of confluenceUrls) { diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/helpers.test.ts b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/helpers.test.ts index 43d3b4b7dc..42d83c18a8 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/helpers.test.ts +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/helpers.test.ts @@ -57,8 +57,10 @@ describe('getConfluenceConfig', () => { const config = new ConfigReader({ confluence: { baseUrl: 'https://example.atlassian.net', - auth: 'bearer', - token: 'fake_token', + auth: { + type: 'bearer', + token: 'fake_token', + }, }, }); @@ -78,9 +80,11 @@ describe('getConfluenceConfig', () => { const config = new ConfigReader({ confluence: { baseUrl: 'https://example.atlassian.net', - auth: 'basic', - token: 'fake_token', - email: 'example@example.atlassian.net', + auth: { + type: 'basic', + token: 'fake_token', + email: 'example@example.atlassian.net', + }, }, }); @@ -100,9 +104,11 @@ describe('getConfluenceConfig', () => { const config = new ConfigReader({ confluence: { baseUrl: 'https://example.atlassian.net', - auth: 'userpass', - username: 'fake_user', - password: 'fake_password', + auth: { + type: 'userpass', + username: 'fake_user', + password: 'fake_password', + }, }, }); diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/helpers.ts b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/helpers.ts index b2156a1103..65992b10f3 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/helpers.ts +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/src/actions/confluence/helpers.ts @@ -43,7 +43,7 @@ export interface Results { results: Result[]; } -export type ConfluenceConfig = { +export type LocalConfluenceConfig = { baseUrl: string; auth: string; token?: string; @@ -53,13 +53,13 @@ export type ConfluenceConfig = { }; export const getConfluenceConfig = (config: Config) => { - const confluenceConfig: ConfluenceConfig = { + const confluenceConfig = { baseUrl: config.getString('confluence.baseUrl'), - auth: config.getOptionalString('confluence.auth') ?? 'bearer', - token: config.getOptionalString('confluence.token'), - email: config.getOptionalString('confluence.email'), - username: config.getOptionalString('confluence.username'), - password: config.getOptionalString('confluence.password'), + auth: config.getOptionalString('confluence.auth.type') ?? 'bearer', + token: config.getOptionalString('confluence.auth.token'), + email: config.getOptionalString('confluence.auth.email'), + username: config.getOptionalString('confluence.auth.username'), + password: config.getOptionalString('confluence.auth.password'), }; if ( @@ -89,7 +89,7 @@ export const getConfluenceConfig = (config: Config) => { return confluenceConfig; }; -export const getAuthorizationHeaderValue = (config: ConfluenceConfig) => { +export const getAuthorizationHeaderValue = (config: LocalConfluenceConfig) => { switch (config.auth) { case 'bearer': return `Bearer ${config.token}`; @@ -116,7 +116,7 @@ export const readFileAsString = async (fileDir: string) => { export const fetchConfluence = async ( relativeUrl: string, - config: ConfluenceConfig, + config: LocalConfluenceConfig, ) => { const baseUrl = config.baseUrl; const authHeaderValue = getAuthorizationHeaderValue(config); @@ -137,7 +137,7 @@ export const fetchConfluence = async ( export const getAndWriteAttachments = async ( arr: Results, workspace: string, - config: ConfluenceConfig, + config: LocalConfluenceConfig, mkdocsDir: string, ) => { const productArr: string[][] = []; diff --git a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md index c0b3fe5308..f6d1e6bd01 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md @@ -1,5 +1,97 @@ # @backstage/plugin-scaffolder-backend-module-cookiecutter +## 0.2.24-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- c186c631b429: Import helpers from the node package instead of the backend package +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/plugin-scaffolder-node@0.1.6-next.1 + - @backstage/integration@1.5.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + +## 0.2.24-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/integration@1.5.1 + - @backstage/types@1.1.0 + - @backstage/plugin-scaffolder-backend@1.15.2-next.0 + - @backstage/plugin-scaffolder-node@0.1.6-next.0 + +## 0.2.23 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-common@0.19.1 + - @backstage/plugin-scaffolder-backend@1.15.1 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1 + - @backstage/types@1.1.0 + - @backstage/plugin-scaffolder-node@0.1.5 + +## 0.2.23-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.15.1-next.1 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1-next.0 + - @backstage/integration@1.5.1-next.0 + - @backstage/types@1.1.0 + - @backstage/plugin-scaffolder-node@0.1.5-next.0 + +## 0.2.23-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1-next.0 + - @backstage/types@1.1.0 + - @backstage/plugin-scaffolder-backend@1.15.1-next.0 + - @backstage/plugin-scaffolder-node@0.1.5-next.0 + +## 0.2.22 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/plugin-scaffolder-backend@1.15.0 + - @backstage/types@1.1.0 + - @backstage/integration@1.5.0 + - @backstage/errors@1.2.0 + - @backstage/config@1.0.8 + - @backstage/plugin-scaffolder-node@0.1.4 + +## 0.2.22-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.15.0-next.3 + - @backstage/backend-common@0.19.0-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.2.0-next.0 + - @backstage/integration@1.5.0-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-node@0.1.4-next.2 + ## 0.2.22-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json index 94a2c5e5f9..df1d81bbd3 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.22-next.2", + "version": "0.2.24-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -13,6 +13,12 @@ "backstage": { "role": "backend-plugin-module" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/scaffolder-backend-module-cookiecutter" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", @@ -27,7 +33,6 @@ "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", - "@backstage/plugin-scaffolder-backend": "workspace:^", "@backstage/plugin-scaffolder-node": "workspace:^", "@backstage/types": "workspace:^", "command-exists": "^1.2.9", diff --git a/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.test.ts b/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.test.ts index 9d7f06afc8..f944b6e598 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.test.ts +++ b/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.test.ts @@ -33,8 +33,8 @@ const executeShellCommand = jest.fn(); const commandExists = jest.fn(); const fetchContents = jest.fn(); -jest.mock('@backstage/plugin-scaffolder-backend', () => ({ - ...jest.requireActual('@backstage/plugin-scaffolder-backend'), +jest.mock('@backstage/plugin-scaffolder-node', () => ({ + ...jest.requireActual('@backstage/plugin-scaffolder-node'), fetchContents: (...args: any[]) => fetchContents(...args), executeShellCommand: (...args: any[]) => executeShellCommand(...args), })); diff --git a/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.ts b/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.ts index b63a044a20..8b084e6377 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.ts +++ b/plugins/scaffolder-backend-module-cookiecutter/src/actions/fetch/cookiecutter.ts @@ -27,10 +27,10 @@ import fs from 'fs-extra'; import path, { resolve as resolvePath } from 'path'; import { Writable } from 'stream'; import { + createTemplateAction, fetchContents, executeShellCommand, -} from '@backstage/plugin-scaffolder-backend'; -import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; +} from '@backstage/plugin-scaffolder-node'; export class CookiecutterRunner { private readonly containerRunner?: ContainerRunner; diff --git a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md index 0c57141dea..4c50ef46fd 100644 --- a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,80 @@ # @backstage/plugin-scaffolder-backend-module-gitlab +## 0.2.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.6-next.1 + - @backstage/integration@1.5.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + +## 0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/integration@1.5.1 + - @backstage/plugin-scaffolder-node@0.1.6-next.0 + +## 0.2.2 + +### Patch Changes + +- dd367967e2e1: Fixed a bug in `gitlab:group:ensureExists` where `repos` was always set as the root group. +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1 + - @backstage/plugin-scaffolder-node@0.1.5 + +## 0.2.2-next.1 + +### Patch Changes + +- dd367967e2e1: Fixed a bug in `gitlab:group:ensureExists` where `repos` was always set as the root group. +- Updated dependencies + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1-next.0 + - @backstage/integration@1.5.1-next.0 + - @backstage/plugin-scaffolder-node@0.1.5-next.0 + +## 0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1-next.0 + - @backstage/plugin-scaffolder-node@0.1.5-next.0 + +## 0.2.1 + +### Patch Changes + +- 50c4457119ec: Fixed publish configuration. +- 30e6edd7f6a5: Add support for dry run for `gitlab:group:ensureExists` action. +- f5a66052f04f: Tweak README +- Updated dependencies + - @backstage/integration@1.5.0 + - @backstage/errors@1.2.0 + - @backstage/config@1.0.8 + - @backstage/plugin-scaffolder-node@0.1.4 + +## 0.2.1-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/errors@1.2.0-next.0 + - @backstage/integration@1.5.0-next.0 + - @backstage/plugin-scaffolder-node@0.1.4-next.2 + ## 0.2.1-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json index 55cb301087..8c9ba33a77 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.2.1-next.2", + "version": "0.2.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabGroupEnsureExistsAction.test.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabGroupEnsureExistsAction.test.ts index 3c67477ed5..72dcddc83d 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabGroupEnsureExistsAction.test.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabGroupEnsureExistsAction.test.ts @@ -51,17 +51,17 @@ describe('gitlab:group:ensureExists', () => { mockGitlabClient.Groups.search.mockResolvedValue([ { id: 1, - full_path: 'repos/bar', + full_path: 'bar', }, { id: 2, - full_path: 'repos/foo', + full_path: 'foo', }, ]); mockGitlabClient.Groups.create.mockResolvedValue({ id: 3, - full_path: 'repos/foo/bar', + full_path: 'foo/bar', }); const config = new ConfigReader({ @@ -98,15 +98,15 @@ describe('gitlab:group:ensureExists', () => { mockGitlabClient.Groups.search.mockResolvedValue([ { id: 1, - full_path: 'repos/bar', + full_path: 'bar', }, { id: 2, - full_path: 'repos/foo', + full_path: 'foo', }, { id: 42, - full_path: 'repos/foo/bar', + full_path: 'foo/bar', }, ]); diff --git a/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabGroupEnsureExistsAction.ts b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabGroupEnsureExistsAction.ts index 169cdb5b25..74d3805254 100644 --- a/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabGroupEnsureExistsAction.ts +++ b/plugins/scaffolder-backend-module-gitlab/src/actions/createGitlabGroupEnsureExistsAction.ts @@ -66,10 +66,12 @@ export const createGitlabGroupEnsureExistsAction = (options: { token: token, }); - let currentPath: string = 'repos'; + let currentPath: string | null = null; let parent: GroupSchema | null = null; for (const pathElement of path) { - const fullPath = `${currentPath}/${pathElement}`; + const fullPath: string = currentPath + ? `${currentPath}/${pathElement}` + : pathElement; const result = (await api.Groups.search( fullPath, )) as unknown as Array; // recast since the return type for search is wrong in the gitbeaker typings diff --git a/plugins/scaffolder-backend-module-rails/CHANGELOG.md b/plugins/scaffolder-backend-module-rails/CHANGELOG.md index 9444550d47..fa3f9201ac 100644 --- a/plugins/scaffolder-backend-module-rails/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-rails/CHANGELOG.md @@ -1,5 +1,97 @@ # @backstage/plugin-scaffolder-backend-module-rails +## 0.4.17-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- c186c631b429: Import helpers from the node package instead of the backend package +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/plugin-scaffolder-node@0.1.6-next.1 + - @backstage/integration@1.5.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + +## 0.4.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/integration@1.5.1 + - @backstage/types@1.1.0 + - @backstage/plugin-scaffolder-backend@1.15.2-next.0 + - @backstage/plugin-scaffolder-node@0.1.6-next.0 + +## 0.4.16 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-common@0.19.1 + - @backstage/plugin-scaffolder-backend@1.15.1 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1 + - @backstage/types@1.1.0 + - @backstage/plugin-scaffolder-node@0.1.5 + +## 0.4.16-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.15.1-next.1 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1-next.0 + - @backstage/integration@1.5.1-next.0 + - @backstage/types@1.1.0 + - @backstage/plugin-scaffolder-node@0.1.5-next.0 + +## 0.4.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1-next.0 + - @backstage/types@1.1.0 + - @backstage/plugin-scaffolder-backend@1.15.1-next.0 + - @backstage/plugin-scaffolder-node@0.1.5-next.0 + +## 0.4.15 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/plugin-scaffolder-backend@1.15.0 + - @backstage/types@1.1.0 + - @backstage/integration@1.5.0 + - @backstage/errors@1.2.0 + - @backstage/config@1.0.8 + - @backstage/plugin-scaffolder-node@0.1.4 + +## 0.4.15-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend@1.15.0-next.3 + - @backstage/backend-common@0.19.0-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.2.0-next.0 + - @backstage/integration@1.5.0-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-node@0.1.4-next.2 + ## 0.4.15-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json index bc87824801..c514354955 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.15-next.2", + "version": "0.4.17-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -13,6 +13,12 @@ "backstage": { "role": "backend-plugin-module" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/scaffolder-backend-module-rails" + }, "scripts": { "build": "backstage-cli package build", "start": "backstage-cli package start", @@ -27,7 +33,6 @@ "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/integration": "workspace:^", - "@backstage/plugin-scaffolder-backend": "workspace:^", "@backstage/plugin-scaffolder-node": "workspace:^", "@backstage/types": "workspace:^", "command-exists": "^1.2.9", diff --git a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.test.ts b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.test.ts index 37d0bcac4a..2a93644f57 100644 --- a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.test.ts +++ b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.test.ts @@ -15,8 +15,8 @@ */ const mockRailsTemplater = { run: jest.fn() }; -jest.mock('@backstage/plugin-scaffolder-backend', () => ({ - ...jest.requireActual('@backstage/plugin-scaffolder-backend'), +jest.mock('@backstage/plugin-scaffolder-node', () => ({ + ...jest.requireActual('@backstage/plugin-scaffolder-node'), fetchContents: jest.fn(), })); jest.mock('./railsNewRunner', () => { @@ -39,7 +39,7 @@ import os from 'os'; import { resolve as resolvePath } from 'path'; import { PassThrough } from 'stream'; import { createFetchRailsAction } from './index'; -import { fetchContents } from '@backstage/plugin-scaffolder-backend'; +import { fetchContents } from '@backstage/plugin-scaffolder-node'; describe('fetch:rails', () => { const integrations = ScmIntegrations.fromConfig( diff --git a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.ts b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.ts index 2a8a2554a2..2b34f978e3 100644 --- a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.ts +++ b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/index.ts @@ -19,8 +19,10 @@ import { JsonObject } from '@backstage/types'; import { InputError } from '@backstage/errors'; import { ScmIntegrations } from '@backstage/integration'; import fs from 'fs-extra'; -import { fetchContents } from '@backstage/plugin-scaffolder-backend'; -import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; +import { + createTemplateAction, + fetchContents, +} from '@backstage/plugin-scaffolder-node'; import { resolve as resolvePath } from 'path'; import { RailsNewRunner } from './railsNewRunner'; diff --git a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/railsNewRunner.test.ts b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/railsNewRunner.test.ts index 433a1b7965..d7e7b12158 100644 --- a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/railsNewRunner.test.ts +++ b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/railsNewRunner.test.ts @@ -17,7 +17,7 @@ const executeShellCommand = jest.fn(); const commandExists = jest.fn(); -jest.mock('@backstage/plugin-scaffolder-backend', () => ({ +jest.mock('@backstage/plugin-scaffolder-node', () => ({ executeShellCommand: (...args: any[]) => executeShellCommand(...args), })); jest.mock( diff --git a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/railsNewRunner.ts b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/railsNewRunner.ts index 0ed02e293c..7e78c25d62 100644 --- a/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/railsNewRunner.ts +++ b/plugins/scaffolder-backend-module-rails/src/actions/fetch/rails/railsNewRunner.ts @@ -17,7 +17,7 @@ import { ContainerRunner } from '@backstage/backend-common'; import fs from 'fs-extra'; import path from 'path'; -import { executeShellCommand } from '@backstage/plugin-scaffolder-backend'; +import { executeShellCommand } from '@backstage/plugin-scaffolder-node'; import commandExists from 'command-exists'; import { railsArgumentResolver, diff --git a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md index 0039e6756b..fbeed9e5e3 100644 --- a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md @@ -1,5 +1,60 @@ # @backstage/plugin-scaffolder-backend-module-sentry +## 0.1.8-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.6-next.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + +## 0.1.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/plugin-scaffolder-node@0.1.6-next.0 + +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/config@1.0.8 + - @backstage/plugin-scaffolder-node@0.1.5 + +## 0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/config@1.0.8 + - @backstage/plugin-scaffolder-node@0.1.5-next.0 + +## 0.1.6 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.0 + - @backstage/config@1.0.8 + - @backstage/plugin-scaffolder-node@0.1.4 + +## 0.1.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/errors@1.2.0-next.0 + - @backstage/plugin-scaffolder-node@0.1.4-next.2 + ## 0.1.6-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-sentry/package.json b/plugins/scaffolder-backend-module-sentry/package.json index ff6cdcd3cc..5b58d1ef87 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.6-next.1", + "version": "0.1.8-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -12,6 +12,12 @@ "backstage": { "role": "backend-plugin-module" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/scaffolder-backend-module-sentry" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", diff --git a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md index e7b43e864f..fcf915a348 100644 --- a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md @@ -1,5 +1,60 @@ # @backstage/plugin-scaffolder-backend-module-yeoman +## 0.2.21-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.1.6-next.1 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + +## 0.2.21-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-scaffolder-node@0.1.6-next.0 + +## 0.2.20 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-scaffolder-node@0.1.5 + +## 0.2.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-scaffolder-node@0.1.5-next.0 + +## 0.2.19 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.1.0 + - @backstage/config@1.0.8 + - @backstage/plugin-scaffolder-node@0.1.4 + +## 0.2.19-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-node@0.1.4-next.2 + ## 0.2.19-next.1 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-yeoman/package.json b/plugins/scaffolder-backend-module-yeoman/package.json index 736fc9c8da..6e90170dab 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.19-next.1", + "version": "0.2.21-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -12,6 +12,12 @@ "backstage": { "role": "backend-plugin-module" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/scaffolder-backend-module-yeoman" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", diff --git a/plugins/scaffolder-backend/.snyk b/plugins/scaffolder-backend/.snyk new file mode 100644 index 0000000000..ea5abd653d --- /dev/null +++ b/plugins/scaffolder-backend/.snyk @@ -0,0 +1,10 @@ +# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities. +version: v1.22.1 +# ignores vulnerabilities until expiry date; change duration by modifying expiry date +ignore: + SNYK-JS-ISOLATEDVM-3037320: + - '*': + reason: We do not pass any V8 cache data, and are therefore unaffected by this vulnerability + expires: 2033-07-02T16:55:57.077Z + created: 2023-07-02T16:55:57.077Z +patch: {} diff --git a/plugins/scaffolder-backend/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md index 0259a90d64..dc8140c996 100644 --- a/plugins/scaffolder-backend/CHANGELOG.md +++ b/plugins/scaffolder-backend/CHANGELOG.md @@ -1,5 +1,198 @@ # @backstage/plugin-scaffolder-backend +## 1.15.2-next.1 + +### Patch Changes + +- 629cbd194a87: Use `coreServices.rootConfig` instead of `coreService.config` +- d3b31a791eb1: Deprecated `executeShellCommand`, `RunCommandOptions`, and `fetchContents` from `@backstage/plugin-scaffolder-backend`, since they are useful for Scaffolder modules (who should not be importing from the plugin package itself). You should now import these from `@backstage/plugin-scaffolder-backend-node` instead. `RunCommandOptions` was renamed in the Node package as `ExecuteShellCommandOptions`, for consistency. +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/plugin-catalog-backend@1.12.0-next.1 + - @backstage/plugin-scaffolder-node@0.1.6-next.1 + - @backstage/plugin-catalog-node@1.4.1-next.1 + - @backstage/plugin-auth-node@0.2.17-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/backend-tasks@0.5.5-next.1 + - @backstage/plugin-permission-node@0.7.11-next.1 + - @backstage/integration@1.5.1 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + - @backstage/plugin-catalog-common@1.0.15 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-scaffolder-common@1.3.2 + +## 1.15.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.12.0-next.0 + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/backend-tasks@0.5.5-next.0 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/integration@1.5.1 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.17-next.0 + - @backstage/plugin-catalog-common@1.0.15 + - @backstage/plugin-catalog-node@1.4.1-next.0 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-permission-node@0.7.11-next.0 + - @backstage/plugin-scaffolder-common@1.3.2 + - @backstage/plugin-scaffolder-node@0.1.6-next.0 + +## 1.15.1 + +### Patch Changes + +- 600be804927d: Indicate the name of the option that is being deprecated in task deprecation warning. +- ff45cb559e49: Updated dependency `esbuild` to `^0.18.0`. +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-common@0.19.1 + - @backstage/plugin-catalog-backend@1.11.0 + - @backstage/plugin-catalog-node@1.4.0 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/backend-tasks@0.5.4 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.16 + - @backstage/plugin-catalog-common@1.0.15 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-permission-node@0.7.10 + - @backstage/plugin-scaffolder-common@1.3.2 + - @backstage/plugin-scaffolder-node@0.1.5 + +## 1.15.1-next.1 + +### Patch Changes + +- 600be804927d: Indicate the name of the option that is being deprecated in task deprecation warning. +- ff45cb559e49: Updated dependency `esbuild` to `^0.18.0`. +- Updated dependencies + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/backend-tasks@0.5.4-next.0 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1-next.0 + - @backstage/integration@1.5.1-next.0 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.16-next.0 + - @backstage/plugin-catalog-backend@1.11.0-next.0 + - @backstage/plugin-catalog-common@1.0.15-next.0 + - @backstage/plugin-catalog-node@1.4.0-next.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + - @backstage/plugin-permission-node@0.7.10-next.0 + - @backstage/plugin-scaffolder-common@1.3.2-next.0 + - @backstage/plugin-scaffolder-node@0.1.5-next.0 + +## 1.15.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/plugin-catalog-backend@1.11.0-next.0 + - @backstage/plugin-catalog-node@1.4.0-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/backend-tasks@0.5.4-next.0 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1-next.0 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.16-next.0 + - @backstage/plugin-catalog-common@1.0.15-next.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + - @backstage/plugin-permission-node@0.7.10-next.0 + - @backstage/plugin-scaffolder-common@1.3.2-next.0 + - @backstage/plugin-scaffolder-node@0.1.5-next.0 + +## 1.15.0 + +### Minor Changes + +- 84b0e47373db: Add `TargetBranchName` variable and output for the `publish:gitlab:merge-request` and `publish:github:pull-request` s'cascaffolder actions. +- 6a694ce98e32: Add a scaffolder action that pull-requests for bitbucket server +- 1948845861b0: Added `github:deployKey:create` and `github:environment:create` scaffolder actions. You will need to add `read/write` permissions to your GITHUB_TOKEN and/or Github Backstage App for Repository `Administration` (for deploy key functionality) and `Environments` (for Environment functionality) +- df8411779da1: Add support for Repository Variables and Secrets to the `publish:github` and `github:repo:create` scaffolder actions. You will need to add `read/write` permissions to your GITHUB_TOKEN and/or Github Backstage App for Repository `Secrets` and `Variables` + + Upgrade octokit introduces some breaking changes. + +### Patch Changes + +- cc936b529676: Fix handling of `optional` property in `catalog:register` scaffolder action +- b269da39ac2d: Clearer error messages for action `publish:gitlab:merge-request` +- 11e0f625583f: Fix wrong gitlabUrl format in repoUrl input description +- a2c70cdda202: Switch out the sandbox, from `vm2` to `isolated-vm`. + + This is a native dependency, which means that it will need to be compiled with the same version of node on the same OS. This could cause some issues when running in Docker for instance, as you will need to make sure that the dependency is installed and compiled inside the docker container that it will run on. + + This could mean adding in some dependencies to the container like `build-essential` to make sure that this compiles correctly. + + If you're having issues installing this dependency, there's some [install instructions](https://github.com/laverdet/isolated-vm#requirements) over on `isolated-vm`'s repo. + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/catalog-client@1.4.2 + - @backstage/types@1.1.0 + - @backstage/plugin-catalog-backend@1.10.0 + - @backstage/integration@1.5.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + - @backstage/backend-plugin-api@0.5.3 + - @backstage/backend-tasks@0.5.3 + - @backstage/plugin-auth-node@0.2.15 + - @backstage/plugin-catalog-node@1.3.7 + - @backstage/plugin-permission-node@0.7.9 + - @backstage/config@1.0.8 + - @backstage/plugin-catalog-common@1.0.14 + - @backstage/plugin-permission-common@0.7.6 + - @backstage/plugin-scaffolder-common@1.3.1 + - @backstage/plugin-scaffolder-node@0.1.4 + +## 1.15.0-next.3 + +### Minor Changes + +- 84b0e47373db: Add `TargetBranchName` variable and output for the `publish:gitlab:merge-request` and `publish:github:pull-request` s'cascaffolder actions. +- 6a694ce98e32: Add a scaffolder action that pull-requests for bitbucket server +- 1948845861b0: Added `github:deployKey:create` and `github:environment:create` scaffolder actions. You will need to add `read/write` permissions to your GITHUB_TOKEN and/or Github Backstage App for Repository `Administration` (for deploy key functionality) and `Environments` (for Environment functionality) + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/plugin-catalog-backend@1.10.0-next.2 + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/backend-tasks@0.5.3-next.2 + - @backstage/catalog-client@1.4.2-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.2.0-next.0 + - @backstage/integration@1.5.0-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.15-next.2 + - @backstage/plugin-catalog-common@1.0.14-next.1 + - @backstage/plugin-catalog-node@1.3.7-next.2 + - @backstage/plugin-permission-common@0.7.6-next.0 + - @backstage/plugin-permission-node@0.7.9-next.2 + - @backstage/plugin-scaffolder-common@1.3.1-next.1 + - @backstage/plugin-scaffolder-node@0.1.4-next.2 + ## 1.15.0-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend/alpha-api-report.md b/plugins/scaffolder-backend/alpha-api-report.md index 1fe1d4a6ed..363fcafd17 100644 --- a/plugins/scaffolder-backend/alpha-api-report.md +++ b/plugins/scaffolder-backend/alpha-api-report.md @@ -10,6 +10,7 @@ import { JsonObject } from '@backstage/types'; import { PermissionCondition } from '@backstage/plugin-permission-common'; import { PermissionCriteria } from '@backstage/plugin-permission-common'; import { PermissionRule } from '@backstage/plugin-permission-node'; +import { PermissionRuleParams } from '@backstage/plugin-permission-common'; import { ResourcePermission } from '@backstage/plugin-permission-common'; import { TaskBroker } from '@backstage/plugin-scaffolder-backend'; import { TemplateAction } from '@backstage/plugin-scaffolder-node'; @@ -24,13 +25,17 @@ export const catalogModuleTemplateKind: () => BackendFeature; // @alpha (undocumented) export const createScaffolderActionConditionalDecision: ( permission: ResourcePermission<'scaffolder-action'>, - conditions: PermissionCriteria>, + conditions: PermissionCriteria< + PermissionCondition<'scaffolder-action', PermissionRuleParams> + >, ) => ConditionalPolicyDecision; // @alpha export const createScaffolderTemplateConditionalDecision: ( permission: ResourcePermission<'scaffolder-template'>, - conditions: PermissionCriteria>, + conditions: PermissionCriteria< + PermissionCondition<'scaffolder-template', PermissionRuleParams> + >, ) => ConditionalPolicyDecision; // @alpha diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index 5e18ad15bf..4fe961056f 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -3,8 +3,6 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -/// - import { ActionContext as ActionContext_2 } from '@backstage/plugin-scaffolder-node'; import { CatalogApi } from '@backstage/catalog-client'; import { CatalogProcessor } from '@backstage/plugin-catalog-node'; @@ -13,7 +11,10 @@ import { Config } from '@backstage/config'; import { createPullRequest } from 'octokit-plugin-create-pull-request'; import { Duration } from 'luxon'; import { Entity } from '@backstage/catalog-model'; +import { executeShellCommand as executeShellCommand_2 } from '@backstage/plugin-scaffolder-node'; +import { ExecuteShellCommandOptions } from '@backstage/plugin-scaffolder-node'; import express from 'express'; +import { fetchContents as fetchContents_2 } from '@backstage/plugin-scaffolder-node'; import { GithubCredentialsProvider } from '@backstage/integration'; import { HumanDuration } from '@backstage/types'; import { IdentityApi } from '@backstage/plugin-auth-node'; @@ -34,7 +35,6 @@ import { RESOURCE_TYPE_SCAFFOLDER_TEMPLATE } from '@backstage/plugin-scaffolder- import { Schema } from 'jsonschema'; import { ScmIntegrationRegistry } from '@backstage/integration'; import { ScmIntegrations } from '@backstage/integration'; -import { SpawnOptionsWithoutStdio } from 'child_process'; import { TaskSecrets as TaskSecrets_2 } from '@backstage/plugin-scaffolder-node'; import { TaskSpec } from '@backstage/plugin-scaffolder-common'; import { TaskSpecV1beta3 } from '@backstage/plugin-scaffolder-common'; @@ -43,7 +43,6 @@ import { TemplateActionOptions } from '@backstage/plugin-scaffolder-node'; import { TemplateEntityStepV1beta3 } from '@backstage/plugin-scaffolder-common'; import { TemplateParametersV1beta3 } from '@backstage/plugin-scaffolder-common'; import { UrlReader } from '@backstage/backend-common'; -import { Writable } from 'stream'; import { ZodType } from 'zod'; import { ZodTypeDef } from 'zod'; @@ -211,6 +210,50 @@ export function createGithubActionsDispatchAction(options: { JsonObject >; +// @public +export function createGithubDeployKeyAction(options: { + integrations: ScmIntegrationRegistry; +}): TemplateAction_2< + { + repoUrl: string; + publicKey: string; + privateKey: string; + deployKeyName: string; + privateKeySecretName?: string | undefined; + token?: string | undefined; + }, + JsonObject +>; + +// @public +export function createGithubEnvironmentAction(options: { + integrations: ScmIntegrationRegistry; +}): TemplateAction_2< + { + repoUrl: string; + name: string; + deploymentBranchPolicy?: + | { + protected_branches: boolean; + custom_branch_policies: boolean; + } + | undefined; + customBranchPolicyNames?: string[] | undefined; + environmentVariables?: + | { + [key: string]: string; + } + | undefined; + secrets?: + | { + [key: string]: string; + } + | undefined; + token?: string | undefined; + }, + JsonObject +>; + // @public export function createGithubIssuesLabelAction(options: { integrations: ScmIntegrationRegistry; @@ -458,6 +501,22 @@ export function createPublishBitbucketServerAction(options: { JsonObject >; +// @public +export function createPublishBitbucketServerPullRequestAction(options: { + integrations: ScmIntegrationRegistry; + config: Config; +}): TemplateAction_2< + { + repoUrl: string; + title: string; + description?: string | undefined; + targetBranch?: string | undefined; + sourceBranch: string; + token?: string | undefined; + }, + JsonObject +>; + // @public export function createPublishGerritAction(options: { integrations: ScmIntegrationRegistry; @@ -584,6 +643,7 @@ export const createPublishGithubPullRequestAction: ( { title: string; branchName: string; + targetBranchName?: string | undefined; description: string; repoUrl: string; draft?: boolean | undefined; @@ -626,6 +686,7 @@ export const createPublishGitlabMergeRequestAction: (options: { title: string; description: string; branchName: string; + targetBranchName?: string | undefined; sourcePath?: string | undefined; targetPath?: string | undefined; token?: string | undefined; @@ -754,17 +815,11 @@ export type DatabaseTaskStoreOptions = { database: PluginDatabaseManager | Knex; }; -// @public -export const executeShellCommand: (options: RunCommandOptions) => Promise; +// @public @deprecated +export const executeShellCommand: typeof executeShellCommand_2; -// @public -export function fetchContents(options: { - reader: UrlReader; - integrations: ScmIntegrations; - baseUrl?: string; - fetchUrl?: string; - outputPath: string; -}): Promise; +// @public @deprecated +export const fetchContents: typeof fetchContents_2; // @public (undocumented) export type OctokitWithPullRequestPluginClient = Octokit & { @@ -772,6 +827,9 @@ export type OctokitWithPullRequestPluginClient = Octokit & { data: { html_url: string; number: number; + base: { + ref: string; + }; }; } | null>; }; @@ -811,13 +869,8 @@ export interface RouterOptions { taskWorkers?: number; } -// @public (undocumented) -export type RunCommandOptions = { - command: string; - args: string[]; - options?: SpawnOptionsWithoutStdio; - logStream?: Writable; -}; +// @public @deprecated +export type RunCommandOptions = ExecuteShellCommandOptions; // @public (undocumented) export class ScaffolderEntitiesProcessor implements CatalogProcessor { diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index a2cd0a4e00..d1481e2068 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.15.0-next.2", + "version": "1.15.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -78,6 +78,7 @@ "git-url-parse": "^13.0.0", "globby": "^11.0.0", "isbinaryfile": "^5.0.0", + "isolated-vm": "^4.5.0", "isomorphic-git": "^1.23.0", "jsonschema": "^1.2.6", "knex": "^2.0.0", @@ -93,7 +94,6 @@ "p-queue": "^6.6.2", "prom-client": "^14.0.1", "uuid": "^8.2.0", - "vm2": "^3.9.18", "winston": "^3.2.1", "yaml": "^2.0.0", "zen-observable": "^0.10.0", @@ -110,7 +110,7 @@ "@types/nunjucks": "^3.1.4", "@types/supertest": "^2.0.8", "@types/zen-observable": "^0.8.0", - "esbuild": "^0.17.0", + "esbuild": "^0.18.0", "jest-when": "^3.1.0", "mock-fs": "^5.1.0", "msw": "^1.0.0", diff --git a/plugins/scaffolder-backend/src/ScaffolderPlugin.ts b/plugins/scaffolder-backend/src/ScaffolderPlugin.ts index 90dcc868e2..f361bfcdf9 100644 --- a/plugins/scaffolder-backend/src/ScaffolderPlugin.ts +++ b/plugins/scaffolder-backend/src/ScaffolderPlugin.ts @@ -80,7 +80,7 @@ export const scaffolderPlugin = createBackendPlugin( env.registerInit({ deps: { logger: coreServices.logger, - config: coreServices.config, + config: coreServices.rootConfig, reader: coreServices.urlReader, permissions: coreServices.permissions, database: coreServices.database, diff --git a/plugins/scaffolder-backend/src/deprecated.ts b/plugins/scaffolder-backend/src/deprecated.ts index f8358b9071..d1a0f9ad5b 100644 --- a/plugins/scaffolder-backend/src/deprecated.ts +++ b/plugins/scaffolder-backend/src/deprecated.ts @@ -19,6 +19,9 @@ import { createTemplateAction as createTemplateActionNode, TaskSecrets as TaskSecretsNode, TemplateAction as TemplateActionNode, + executeShellCommand as executeShellCommandNode, + ExecuteShellCommandOptions as ExecuteShellCommandOptionsNode, + fetchContents as fetchContentsNode, } from '@backstage/plugin-scaffolder-node'; import { JsonObject } from '@backstage/types'; @@ -47,3 +50,28 @@ export type TaskSecrets = TaskSecretsNode; */ export type TemplateAction = TemplateActionNode; + +/** + * Options for {@link executeShellCommand}. + * + * @public + * @deprecated Use `ExecuteShellCommandOptions` from `@backstage/plugin-scaffolder-node` instead + */ +export type RunCommandOptions = ExecuteShellCommandOptionsNode; + +/** + * Run a command in a sub-process, normally a shell command. + * + * @public + * @deprecated Use `executeShellCommand` from `@backstage/plugin-scaffolder-node` instead + */ +export const executeShellCommand = executeShellCommandNode; + +/** + * A helper function that reads the contents of a directory from the given URL. + * Can be used in your own actions, and also used behind fetch:template and fetch:plain + * + * @public + * @deprecated Use `fetchContents` from `@backstage/plugin-scaffolder-node` instead + */ +export const fetchContents = fetchContentsNode; diff --git a/plugins/scaffolder-backend/src/lib/templating/SecureTemplater.ts b/plugins/scaffolder-backend/src/lib/templating/SecureTemplater.ts index f0ccb6f192..488604e981 100644 --- a/plugins/scaffolder-backend/src/lib/templating/SecureTemplater.ts +++ b/plugins/scaffolder-backend/src/lib/templating/SecureTemplater.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { VM } from 'vm2'; +import { Isolate } from 'isolated-vm'; import { resolvePackagePath } from '@backstage/backend-common'; import fs from 'fs-extra'; import { JsonValue } from '@backstage/types'; @@ -45,20 +45,14 @@ const { render, renderCompat } = (() => { }); compatEnv.addFilter('jsonify', compatEnv.getFilter('dump')); - if (typeof templateFilters !== 'undefined') { - for (const [filterName, filterFn] of Object.entries(templateFilters)) { - env.addFilter(filterName, (...args) => JSON.parse(filterFn(...args))); - } + for (const name of JSON.parse(availableTemplateFilters)) { + env.addFilter(name, (...args) => JSON.parse(callFilter(name, args))); } - - if (typeof templateGlobals !== 'undefined') { - for (const [globalName, global] of Object.entries(templateGlobals)) { - if (typeof global === 'function') { - env.addGlobal(globalName, (...args) => JSON.parse(global(...args))); - } else { - env.addGlobal(globalName, JSON.parse(global)); - } - } + for (const [name, value] of Object.entries(JSON.parse(availableTemplateGlobals))) { + env.addGlobal(name, value); + } + for (const name of JSON.parse(availableTemplateCallbacks)) { + env.addGlobal(name, (...args) => JSON.parse(callGlobal(name, args))); } let uninstallCompat = undefined; @@ -116,35 +110,15 @@ export type SecureTemplateRenderer = ( export class SecureTemplater { static async loadRenderer(options: SecureTemplaterOptions = {}) { - const { cookiecutterCompat, templateFilters, templateGlobals } = options; - const sandbox: Record = {}; + const { + cookiecutterCompat, + templateFilters = {}, + templateGlobals = {}, + } = options; - if (templateFilters) { - sandbox.templateFilters = Object.fromEntries( - Object.entries(templateFilters) - .filter(([_, filterFunction]) => !!filterFunction) - .map(([filterName, filterFunction]) => [ - filterName, - (...args: JsonValue[]) => JSON.stringify(filterFunction(...args)), - ]), - ); - } - if (templateGlobals) { - sandbox.templateGlobals = Object.fromEntries( - Object.entries(templateGlobals) - .filter(([_, global]) => !!global) - .map(([globalName, global]) => { - if (typeof global === 'function') { - return [ - globalName, - (...args: JsonValue[]) => JSON.stringify(global(...args)), - ]; - } - return [globalName, JSON.stringify(global)]; - }), - ); - } - const vm = new VM({ sandbox }); + const isolate = new Isolate({ memoryLimit: 128 }); + const context = await isolate.createContext(); + const contextGlobal = context.global; const nunjucksSource = await fs.readFile( resolvePackagePath( @@ -154,20 +128,75 @@ export class SecureTemplater { 'utf-8', ); - vm.run(mkScript(nunjucksSource)); + const nunjucksScript = await isolate.compileScript( + mkScript(nunjucksSource), + ); + + const availableFilters = Object.keys(templateFilters); + + await contextGlobal.set( + 'availableTemplateFilters', + JSON.stringify(availableFilters), + ); + + const globalCallbacks = []; + const globalValues: Record = {}; + for (const [name, value] of Object.entries(templateGlobals)) { + if (typeof value === 'function') { + globalCallbacks.push(name); + } else { + globalValues[name] = value; + } + } + + await contextGlobal.set( + 'availableTemplateGlobals', + JSON.stringify(globalValues), + ); + await contextGlobal.set( + 'availableTemplateCallbacks', + JSON.stringify(globalCallbacks), + ); + + await contextGlobal.set( + 'callFilter', + (filterName: string, args: JsonValue[]) => { + if (!Object.hasOwn(templateFilters, filterName)) { + return ''; + } + return JSON.stringify(templateFilters[filterName](...args)); + }, + ); + + await contextGlobal.set( + 'callGlobal', + (globalName: string, args: JsonValue[]) => { + if (!Object.hasOwn(templateGlobals, globalName)) { + return ''; + } + const global = templateGlobals[globalName]; + if (typeof global !== 'function') { + return ''; + } + return JSON.stringify(global(...args)); + }, + ); + + await nunjucksScript.run(context); const render: SecureTemplateRenderer = (template, values) => { - if (!vm) { + if (!context) { throw new Error('SecureTemplater has not been initialized'); } - vm.setGlobal('templateStr', template); - vm.setGlobal('templateValues', JSON.stringify(values)); + + contextGlobal.setSync('templateStr', String(template)); + contextGlobal.setSync('templateValues', JSON.stringify(values)); if (cookiecutterCompat) { - return vm.run(`renderCompat(templateStr, templateValues)`); + return context.evalSync(`renderCompat(templateStr, templateValues)`); } - return vm.run(`render(templateStr, templateValues)`); + return context.evalSync(`render(templateStr, templateValues)`); }; return render; } diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts index 747b5cdaed..4dcd2c2a0d 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/createBuiltinActions.ts @@ -42,6 +42,8 @@ import { } from './filesystem'; import { createGithubActionsDispatchAction, + createGithubDeployKeyAction, + createGithubEnvironmentAction, createGithubIssuesLabelAction, createGithubRepoCreateAction, createGithubRepoPushAction, @@ -52,6 +54,7 @@ import { createPublishBitbucketAction, createPublishBitbucketCloudAction, createPublishBitbucketServerAction, + createPublishBitbucketServerPullRequestAction, createPublishGerritAction, createPublishGerritReviewAction, createPublishGithubAction, @@ -162,6 +165,10 @@ export const createBuiltinActions = ( integrations, config, }), + createPublishBitbucketServerPullRequestAction({ + integrations, + config, + }), createPublishAzureAction({ integrations, config, @@ -194,6 +201,12 @@ export const createBuiltinActions = ( config, githubCredentialsProvider, }), + createGithubEnvironmentAction({ + integrations, + }), + createGithubDeployKeyAction({ + integrations, + }), ]; return actions as TemplateAction[]; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/index.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/index.ts index 14a40f53c3..67f1bc360f 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/index.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/index.ts @@ -17,4 +17,3 @@ export { createFetchPlainAction } from './plain'; export { createFetchPlainFileAction } from './plainFile'; export { createFetchTemplateAction } from './template'; -export { fetchContents } from './helpers'; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plain.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plain.test.ts index ed37a39a98..249941096d 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plain.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plain.test.ts @@ -14,16 +14,19 @@ * limitations under the License. */ -jest.mock('./helpers'); +jest.mock('@backstage/plugin-scaffolder-node', () => { + const actual = jest.requireActual('@backstage/plugin-scaffolder-node'); + return { ...actual, fetchContents: jest.fn() }; +}); import os from 'os'; import { resolve as resolvePath } from 'path'; import { getVoidLogger, UrlReader } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import { ScmIntegrations } from '@backstage/integration'; +import { fetchContents } from '@backstage/plugin-scaffolder-node'; import { createFetchPlainAction } from './plain'; import { PassThrough } from 'stream'; -import { fetchContents } from './helpers'; describe('fetch:plain', () => { const integrations = ScmIntegrations.fromConfig( diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plain.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plain.ts index c10f696bb9..e102c5bb74 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plain.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plain.ts @@ -16,8 +16,10 @@ import { UrlReader, resolveSafeChildPath } from '@backstage/backend-common'; import { ScmIntegrations } from '@backstage/integration'; -import { fetchContents } from './helpers'; -import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; +import { + createTemplateAction, + fetchContents, +} from '@backstage/plugin-scaffolder-node'; /** * Downloads content and places it in the workspace, or optionally diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plainFile.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plainFile.test.ts index 5d9e99fc7d..084b08d640 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plainFile.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plainFile.test.ts @@ -14,16 +14,19 @@ * limitations under the License. */ -jest.mock('./helpers'); +jest.mock('@backstage/plugin-scaffolder-node', () => { + const actual = jest.requireActual('@backstage/plugin-scaffolder-node'); + return { ...actual, fetchFile: jest.fn() }; +}); import os from 'os'; import { resolve as resolvePath } from 'path'; import { getVoidLogger, UrlReader } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import { ScmIntegrations } from '@backstage/integration'; +import { fetchFile } from '@backstage/plugin-scaffolder-node'; import { createFetchPlainFileAction } from './plainFile'; import { PassThrough } from 'stream'; -import { fetchFile } from './helpers'; describe('fetch:plain:file', () => { const integrations = ScmIntegrations.fromConfig( diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plainFile.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plainFile.ts index 7b33ad93b4..96abe773fd 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plainFile.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/plainFile.ts @@ -16,8 +16,10 @@ import { UrlReader, resolveSafeChildPath } from '@backstage/backend-common'; import { ScmIntegrations } from '@backstage/integration'; -import { fetchFile } from './helpers'; -import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; +import { + createTemplateAction, + fetchFile, +} from '@backstage/plugin-scaffolder-node'; /** * Downloads content and places it in the workspace, or optionally diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.test.ts index 15548ffea7..95f8c7b954 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.test.ts @@ -14,6 +14,11 @@ * limitations under the License. */ +jest.mock('@backstage/plugin-scaffolder-node', () => { + const actual = jest.requireActual('@backstage/plugin-scaffolder-node'); + return { ...actual, fetchContents: jest.fn() }; +}); + import os from 'os'; import { join as joinPath, sep as pathSep } from 'path'; import fs from 'fs-extra'; @@ -25,17 +30,13 @@ import { } from '@backstage/backend-common'; import { ScmIntegrations } from '@backstage/integration'; import { PassThrough } from 'stream'; -import { fetchContents } from './helpers'; import { createFetchTemplateAction } from './template'; import { + fetchContents, ActionContext, TemplateAction, } from '@backstage/plugin-scaffolder-node'; -jest.mock('./helpers', () => ({ - fetchContents: jest.fn(), -})); - type FetchTemplateInput = ReturnType< typeof createFetchTemplateAction > extends TemplateAction 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 1f80f92334..7f03cb2514 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/template.ts @@ -18,8 +18,10 @@ import { extname } from 'path'; import { resolveSafeChildPath, UrlReader } from '@backstage/backend-common'; import { InputError } from '@backstage/errors'; import { ScmIntegrations } from '@backstage/integration'; -import { fetchContents } from './helpers'; -import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; +import { + createTemplateAction, + fetchContents, +} from '@backstage/plugin-scaffolder-node'; import globby from 'globby'; import fs from 'fs-extra'; import { isBinaryFile } from 'isbinaryfile'; @@ -150,7 +152,7 @@ export function createFetchTemplateAction(options: { let renderFilename: boolean; if (ctx.input.copyWithoutRender) { ctx.logger.warn( - '[Deprecated] Please use copyWithoutTemplating instead.', + '[Deprecated] copyWithoutRender is deprecated Please use copyWithoutTemplating instead.', ); copyOnlyPatterns = ctx.input.copyWithoutRender; renderFilename = false; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubDeployKey.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubDeployKey.test.ts new file mode 100644 index 0000000000..4df9294ff5 --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubDeployKey.test.ts @@ -0,0 +1,112 @@ +/* + * 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 { PassThrough } from 'stream'; +import { createGithubDeployKeyAction } from './githubDeployKey'; +import { getVoidLogger } from '@backstage/backend-common'; +import { TemplateAction } from '@backstage/plugin-scaffolder-node'; +import { ConfigReader } from '@backstage/config'; +import { ScmIntegrations } from '@backstage/integration'; + +const mockOctokit = { + rest: { + actions: { + getRepoPublicKey: jest.fn(), + createOrUpdateRepoSecret: jest.fn(), + }, + repos: { + createDeployKey: jest.fn(), + }, + }, +}; +jest.mock('octokit', () => ({ + Octokit: class { + constructor() { + return mockOctokit; + } + }, +})); + +const publicKey = '2Sg8iYjAxxmI2LvUXpJjkYrMxURPc8r+dB7TJyvvcCU='; + +describe('github:deployKey:create', () => { + const config = new ConfigReader({ + integrations: { + github: [ + { host: 'github.com', token: 'tokenlols' }, + { host: 'ghe.github.com' }, + ], + }, + }); + + const integrations = ScmIntegrations.fromConfig(config); + let action: TemplateAction; + + const mockContext = { + input: { + repoUrl: 'github.com?repo=repository&owner=owner', + publicKey: 'pubkey', + privateKey: 'privkey', + deployKeyName: 'Push Tags', + }, + workspacePath: 'lol', + logger: getVoidLogger(), + logStream: new PassThrough(), + output: jest.fn(), + createTemporaryDirectory: jest.fn(), + }; + + beforeEach(() => { + jest.resetAllMocks(); + + action = createGithubDeployKeyAction({ + integrations, + }); + }); + + it('should work happy path', async () => { + mockOctokit.rest.actions.getRepoPublicKey.mockResolvedValue({ + data: { + key: publicKey, + key_id: 'keyid', + }, + }); + + await action.handler(mockContext); + + expect(mockOctokit.rest.repos.createDeployKey).toHaveBeenCalledWith({ + owner: 'owner', + repo: 'repository', + title: 'Push Tags', + key: 'pubkey', + }); + + expect( + mockOctokit.rest.actions.createOrUpdateRepoSecret, + ).toHaveBeenCalledWith({ + owner: 'owner', + repo: 'repository', + secret_name: 'PUSH_TAGS_PRIVATE_KEY', + key_id: 'keyid', + encrypted_value: expect.any(String), + }); + + expect(mockContext.output).toHaveBeenCalledWith( + 'privateKeySecretName', + 'PUSH_TAGS_PRIVATE_KEY', + ); + }); +}); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubDeployKey.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubDeployKey.ts new file mode 100644 index 0000000000..6ad646a89c --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubDeployKey.ts @@ -0,0 +1,157 @@ +/* + * 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 { InputError } from '@backstage/errors'; +import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; +import { ScmIntegrationRegistry } from '@backstage/integration'; +import { parseRepoUrl } from '../publish/util'; +import { getOctokitOptions } from './helpers'; +import { Octokit } from 'octokit'; +import Sodium from 'libsodium-wrappers'; + +/** + * Creates an `github:deployKey:create` Scaffolder action that creates a Deploy Key + * + * @public + */ +export function createGithubDeployKeyAction(options: { + integrations: ScmIntegrationRegistry; +}) { + const { integrations } = options; + // For more information on how to define custom actions, see + // https://backstage.io/docs/features/software-templates/writing-custom-actions + return createTemplateAction<{ + repoUrl: string; + publicKey: string; + privateKey: string; + deployKeyName: string; + privateKeySecretName?: string; + token?: string; + }>({ + id: 'github:deployKey:create', + description: 'Creates and stores Deploy Keys', + schema: { + input: { + type: 'object', + required: ['repoUrl', 'publicKey', 'privateKey', 'deployKeyName'], + properties: { + repoUrl: { + title: 'Repository Location', + description: `Accepts the format 'github.com?repo=reponame&owner=owner' where 'reponame' is the new repository name and 'owner' is an organization or username`, + type: 'string', + }, + publicKey: { + title: 'SSH Public Key', + description: `Generated from ssh-keygen. Begins with 'ssh-rsa', 'ecdsa-sha2-nistp256', 'ecdsa-sha2-nistp384', 'ecdsa-sha2-nistp521', 'ssh-ed25519', 'sk-ecdsa-sha2-nistp256@openssh.com', or 'sk-ssh-ed25519@openssh.com'.`, + type: 'string', + }, + privateKey: { + title: 'SSH Private Key', + description: `SSH Private Key generated from ssh-keygen`, + type: 'string', + }, + deployKeyName: { + title: 'Deploy Key Name', + description: `Name of the Deploy Key`, + type: 'string', + }, + privateKeySecretName: { + title: 'Private Key GitHub Secret Name', + description: `Name of the GitHub Secret to store the private key related to the Deploy Key. Defaults to: 'KEY_NAME_PRIVATE_KEY' where 'KEY_NAME' is the name of the Deploy Key`, + type: 'string', + }, + token: { + title: 'Authentication Token', + type: 'string', + description: 'The token to use for authorization to GitHub', + }, + }, + }, + output: { + type: 'object', + properties: { + privateKeySecretName: { + title: 'The GitHub Action Repo Secret Name for the Private Key', + type: 'string', + }, + }, + }, + }, + async handler(ctx) { + const { + repoUrl, + publicKey, + privateKey, + deployKeyName, + privateKeySecretName = `${deployKeyName + .split(' ') + .join('_') + .toLocaleUpperCase('en-US')}_PRIVATE_KEY`, + token: providedToken, + } = ctx.input; + + const octokitOptions = await getOctokitOptions({ + integrations, + token: providedToken, + repoUrl: repoUrl, + }); + + const { owner, repo } = parseRepoUrl(repoUrl, integrations); + + if (!owner) { + throw new InputError(`No owner provided for repo ${repoUrl}`); + } + + const client = new Octokit(octokitOptions); + + await client.rest.repos.createDeployKey({ + owner: owner, + repo: repo, + title: deployKeyName, + key: publicKey, + }); + const publicKeyResponse = await client.rest.actions.getRepoPublicKey({ + owner: owner, + repo: repo, + }); + + await Sodium.ready; + const binaryKey = Sodium.from_base64( + publicKeyResponse.data.key, + Sodium.base64_variants.ORIGINAL, + ); + const binarySecret = Sodium.from_string(privateKey); + const encryptedBinarySecret = Sodium.crypto_box_seal( + binarySecret, + binaryKey, + ); + const encryptedBase64Secret = Sodium.to_base64( + encryptedBinarySecret, + Sodium.base64_variants.ORIGINAL, + ); + + await client.rest.actions.createOrUpdateRepoSecret({ + owner: owner, + repo: repo, + secret_name: privateKeySecretName, + encrypted_value: encryptedBase64Secret, + key_id: publicKeyResponse.data.key_id, + }); + + ctx.output('privateKeySecretName', privateKeySecretName); + }, + }); +} diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubEnvironment.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubEnvironment.test.ts new file mode 100644 index 0000000000..d158bc122e --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubEnvironment.test.ts @@ -0,0 +1,258 @@ +/* + * 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 { PassThrough } from 'stream'; +import { createGithubEnvironmentAction } from './githubEnvironment'; +import { getVoidLogger } from '@backstage/backend-common'; +import { TemplateAction } from '@backstage/plugin-scaffolder-node'; +import { ConfigReader } from '@backstage/config'; +import { ScmIntegrations } from '@backstage/integration'; + +const mockOctokit = { + rest: { + actions: { + getRepoPublicKey: jest.fn(), + createEnvironmentVariable: jest.fn(), + createOrUpdateEnvironmentSecret: jest.fn(), + }, + repos: { + createDeploymentBranchPolicy: jest.fn(), + createOrUpdateEnvironment: jest.fn(), + get: jest.fn(), + }, + }, +}; +jest.mock('octokit', () => ({ + Octokit: class { + constructor() { + return mockOctokit; + } + }, +})); + +const publicKey = '2Sg8iYjAxxmI2LvUXpJjkYrMxURPc8r+dB7TJyvvcCU='; + +describe('github:environment:create', () => { + const config = new ConfigReader({ + integrations: { + github: [ + { host: 'github.com', token: 'tokenlols' }, + { host: 'ghe.github.com' }, + ], + }, + }); + + const integrations = ScmIntegrations.fromConfig(config); + let action: TemplateAction; + + const mockContext = { + input: { + repoUrl: 'github.com?repo=repository&owner=owner', + name: 'envname', + }, + workspacePath: 'lol', + logger: getVoidLogger(), + logStream: new PassThrough(), + output: jest.fn(), + createTemporaryDirectory: jest.fn(), + }; + + beforeEach(() => { + mockOctokit.rest.actions.getRepoPublicKey.mockResolvedValue({ + data: { + key: publicKey, + key_id: 'keyid', + }, + }); + mockOctokit.rest.repos.get.mockResolvedValue({ + data: { + id: 'repoid', + }, + }); + + action = createGithubEnvironmentAction({ + integrations, + }); + }); + + afterEach(jest.resetAllMocks); + + it('should work happy path', async () => { + await action.handler(mockContext); + + expect( + mockOctokit.rest.repos.createOrUpdateEnvironment, + ).toHaveBeenCalledWith({ + owner: 'owner', + repo: 'repository', + environment_name: 'envname', + deployment_branch_policy: null, + }); + }); + + it('should work specify deploymentBranchPolicy protected', async () => { + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + deploymentBranchPolicy: { + protected_branches: true, + custom_branch_policies: false, + }, + }, + }); + + expect( + mockOctokit.rest.repos.createOrUpdateEnvironment, + ).toHaveBeenCalledWith({ + owner: 'owner', + repo: 'repository', + environment_name: 'envname', + deployment_branch_policy: { + protected_branches: true, + custom_branch_policies: false, + }, + }); + }); + it('should work specify deploymentBranchPolicy custom', async () => { + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + deploymentBranchPolicy: { + protected_branches: false, + custom_branch_policies: true, + }, + customBranchPolicyNames: ['main', '*.*.*'], + }, + }); + + expect( + mockOctokit.rest.repos.createOrUpdateEnvironment, + ).toHaveBeenCalledWith({ + owner: 'owner', + repo: 'repository', + environment_name: 'envname', + deployment_branch_policy: { + protected_branches: false, + custom_branch_policies: true, + }, + }); + + expect( + mockOctokit.rest.repos.createDeploymentBranchPolicy, + ).toHaveBeenCalledWith({ + owner: 'owner', + repo: 'repository', + environment_name: 'envname', + name: 'main', + }); + expect( + mockOctokit.rest.repos.createDeploymentBranchPolicy, + ).toHaveBeenCalledWith({ + owner: 'owner', + repo: 'repository', + environment_name: 'envname', + name: '*.*.*', + }); + }); + + it('should work specify environment variables', async () => { + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + environmentVariables: { + key1: 'val1', + key2: 'val2', + }, + }, + }); + + expect( + mockOctokit.rest.repos.createOrUpdateEnvironment, + ).toHaveBeenCalledWith({ + owner: 'owner', + repo: 'repository', + environment_name: 'envname', + deployment_branch_policy: null, + }); + + expect( + mockOctokit.rest.actions.createEnvironmentVariable, + ).toHaveBeenCalledTimes(2); + expect( + mockOctokit.rest.actions.createEnvironmentVariable, + ).toHaveBeenCalledWith({ + repository_id: 'repoid', + environment_name: 'envname', + name: 'key1', + value: 'val1', + }); + expect( + mockOctokit.rest.actions.createEnvironmentVariable, + ).toHaveBeenCalledWith({ + repository_id: 'repoid', + environment_name: 'envname', + name: 'key2', + value: 'val2', + }); + }); + + it('should work specify secrets', async () => { + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + secrets: { + key1: 'val1', + key2: 'val2', + }, + }, + }); + + expect( + mockOctokit.rest.repos.createOrUpdateEnvironment, + ).toHaveBeenCalledWith({ + owner: 'owner', + repo: 'repository', + environment_name: 'envname', + deployment_branch_policy: null, + }); + + expect( + mockOctokit.rest.actions.createOrUpdateEnvironmentSecret, + ).toHaveBeenCalledTimes(2); + expect( + mockOctokit.rest.actions.createOrUpdateEnvironmentSecret, + ).toHaveBeenCalledWith({ + repository_id: 'repoid', + environment_name: 'envname', + secret_name: 'key1', + key_id: 'keyid', + encrypted_value: expect.any(String), + }); + expect( + mockOctokit.rest.actions.createOrUpdateEnvironmentSecret, + ).toHaveBeenCalledWith({ + repository_id: 'repoid', + environment_name: 'envname', + secret_name: 'key2', + key_id: 'keyid', + encrypted_value: expect.any(String), + }); + }); +}); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubEnvironment.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubEnvironment.ts new file mode 100644 index 0000000000..04b33ed259 --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubEnvironment.ts @@ -0,0 +1,200 @@ +/* + * 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 { InputError } from '@backstage/errors'; +import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; +import { ScmIntegrationRegistry } from '@backstage/integration'; +import { parseRepoUrl } from '../publish/util'; +import { getOctokitOptions } from './helpers'; +import { Octokit } from 'octokit'; +import Sodium from 'libsodium-wrappers'; + +/** + * Creates an `github:environment:create` Scaffolder action that creates a Github Environment. + * + * @public + */ +export function createGithubEnvironmentAction(options: { + integrations: ScmIntegrationRegistry; +}) { + const { integrations } = options; + // For more information on how to define custom actions, see + // https://backstage.io/docs/features/software-templates/writing-custom-actions + return createTemplateAction<{ + repoUrl: string; + name: string; + deploymentBranchPolicy?: { + protected_branches: boolean; + custom_branch_policies: boolean; + }; + customBranchPolicyNames?: string[]; + environmentVariables?: { [key: string]: string }; + secrets?: { [key: string]: string }; + token?: string; + }>({ + id: 'github:environment:create', + description: 'Creates Deployment Environments', + schema: { + input: { + type: 'object', + required: ['repoUrl', 'name'], + properties: { + repoUrl: { + title: 'Repository Location', + description: `Accepts the format 'github.com?repo=reponame&owner=owner' where 'reponame' is the new repository name and 'owner' is an organization or username`, + type: 'string', + }, + name: { + title: 'Environment Name', + description: `Name of the deployment environment to create`, + type: 'string', + }, + deploymentBranchPolicy: { + title: 'Deployment Branch Policy', + description: `The type of deployment branch policy for this environment. To allow all branches to deploy, set to null.`, + type: 'object', + required: ['protected_branches', 'custom_branch_policies'], + properties: { + protected_branches: { + title: 'Protected Branches', + description: `Whether only branches with branch protection rules can deploy to this environment. If protected_branches is true, custom_branch_policies must be false; if protected_branches is false, custom_branch_policies must be true.`, + type: 'boolean', + }, + custom_branch_policies: { + title: 'Custom Branch Policies', + description: `Whether only branches that match the specified name patterns can deploy to this environment. If custom_branch_policies is true, protected_branches must be false; if custom_branch_policies is false, protected_branches must be true.`, + type: 'boolean', + }, + }, + }, + customBranchPolicyNames: { + title: 'Custom Branch Policy Name', + description: `The name pattern that branches must match in order to deploy to the environment. + + Wildcard characters will not match /. For example, to match branches that begin with release/ and contain an additional single slash, use release/*/*. For more information about pattern matching syntax, see the Ruby File.fnmatch documentation.`, + type: 'array', + items: { + type: 'string', + }, + }, + environmentVariables: { + title: 'Environment Variables', + description: `Environment variables attached to the deployment environment`, + type: 'object', + }, + secrets: { + title: 'Deployment Secrets', + description: `Secrets attached to the deployment environment`, + type: 'object', + }, + token: { + title: 'Authentication Token', + type: 'string', + description: 'The token to use for authorization to GitHub', + }, + }, + }, + }, + async handler(ctx) { + const { + repoUrl, + name, + deploymentBranchPolicy, + customBranchPolicyNames, + environmentVariables, + secrets, + token: providedToken, + } = ctx.input; + + const octokitOptions = await getOctokitOptions({ + integrations, + token: providedToken, + repoUrl: repoUrl, + }); + + const { owner, repo } = parseRepoUrl(repoUrl, integrations); + + if (!owner) { + throw new InputError(`No owner provided for repo ${repoUrl}`); + } + + const client = new Octokit(octokitOptions); + const repository = await client.rest.repos.get({ + owner: owner, + repo: repo, + }); + + await client.rest.repos.createOrUpdateEnvironment({ + owner: owner, + repo: repo, + environment_name: name, + deployment_branch_policy: deploymentBranchPolicy ?? null, + }); + + if (customBranchPolicyNames) { + for (const item of customBranchPolicyNames) { + await client.rest.repos.createDeploymentBranchPolicy({ + owner: owner, + repo: repo, + environment_name: name, + name: item, + }); + } + } + + for (const [key, value] of Object.entries(environmentVariables ?? {})) { + await client.rest.actions.createEnvironmentVariable({ + repository_id: repository.data.id, + environment_name: name, + name: key, + value, + }); + } + + if (secrets) { + const publicKeyResponse = await client.rest.actions.getRepoPublicKey({ + owner: owner, + repo: repo, + }); + + await Sodium.ready; + const binaryKey = Sodium.from_base64( + publicKeyResponse.data.key, + Sodium.base64_variants.ORIGINAL, + ); + for (const [key, value] of Object.entries(secrets)) { + const binarySecret = Sodium.from_string(value); + const encryptedBinarySecret = Sodium.crypto_box_seal( + binarySecret, + binaryKey, + ); + const encryptedBase64Secret = Sodium.to_base64( + encryptedBinarySecret, + Sodium.base64_variants.ORIGINAL, + ); + + await client.rest.actions.createOrUpdateEnvironmentSecret({ + repository_id: repository.data.id, + environment_name: name, + secret_name: key, + encrypted_value: encryptedBase64Secret, + key_id: publicKeyResponse.data.key_id, + }); + } + } + }, + }); +} diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts index dc1b4eb91c..edef7cec5c 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts @@ -98,7 +98,7 @@ export async function createGithubRepoWithCollaboratorsAndTopics( client: Octokit, repo: string, owner: string, - repoVisibility: 'private' | 'internal' | 'public', + repoVisibility: 'private' | 'internal' | 'public' | undefined, description: string | undefined, homepage: string | undefined, deleteBranchOnMerge: boolean, @@ -149,7 +149,7 @@ export async function createGithubRepoWithCollaboratorsAndTopics( name: repo, org: owner, private: repoVisibility === 'private', - // @ts-ignore + // @ts-ignore https://github.com/octokit/types.ts/issues/522 visibility: repoVisibility, description: description, delete_branch_on_merge: deleteBranchOnMerge, diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/index.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/index.ts index 6746aef37e..ecc8ce59f2 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/index.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/index.ts @@ -19,3 +19,5 @@ export { createGithubIssuesLabelAction } from './githubIssuesLabel'; export { createGithubRepoCreateAction } from './githubRepoCreate'; export { createGithubRepoPushAction } from './githubRepoPush'; export { createGithubWebhookAction } from './githubWebhook'; +export { createGithubDeployKeyAction } from './githubDeployKey'; +export { createGithubEnvironmentAction } from './githubEnvironment'; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/helpers.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/helpers.ts index f51ab47f16..5ac92128ca 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/helpers.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/helpers.ts @@ -17,61 +17,9 @@ import { Git } from '@backstage/backend-common'; import { Config } from '@backstage/config'; import { assertError } from '@backstage/errors'; -import { spawn, SpawnOptionsWithoutStdio } from 'child_process'; import { Octokit } from 'octokit'; -import { PassThrough, Writable } from 'stream'; import { Logger } from 'winston'; -/** @public */ -export type RunCommandOptions = { - /** command to run */ - command: string; - /** arguments to pass the command */ - args: string[]; - /** options to pass to spawn */ - options?: SpawnOptionsWithoutStdio; - /** stream to capture stdout and stderr output */ - logStream?: Writable; -}; - -/** - * Run a command in a sub-process, normally a shell command. - * - * @public - */ -export const executeShellCommand = async (options: RunCommandOptions) => { - const { - command, - args, - options: spawnOptions, - logStream = new PassThrough(), - } = options; - await new Promise((resolve, reject) => { - const process = spawn(command, args, spawnOptions); - - process.stdout.on('data', stream => { - logStream.write(stream); - }); - - process.stderr.on('data', stream => { - logStream.write(stream); - }); - - process.on('error', error => { - return reject(error); - }); - - process.on('close', code => { - if (code !== 0) { - return reject( - new Error(`Command ${command} failed, exit code: ${code}`), - ); - } - return resolve(); - }); - }); -}; - export async function initRepoAndPush({ dir, remoteUrl, diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/index.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/index.ts index 7846ff96fc..7ab98482ff 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/index.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/index.ts @@ -21,6 +21,3 @@ export * from './fetch'; export * from './filesystem'; export * from './publish'; export * from './github'; - -export { executeShellCommand } from './helpers'; -export type { RunCommandOptions } from './helpers'; diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/bitbucketServerPullRequest.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/bitbucketServerPullRequest.test.ts new file mode 100644 index 0000000000..af3999097f --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/bitbucketServerPullRequest.test.ts @@ -0,0 +1,389 @@ +/* + * 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. + */ + +jest.mock('../helpers', () => { + return { + initRepoAndPush: jest.fn().mockResolvedValue({ + commitHash: '220f19cc36b551763d157f1b5e4a4b446165dbd6', + }), + commitAndPushRepo: jest.fn().mockResolvedValue({ + commitHash: '220f19cc36b551763d157f1b5e4a4b446165dbd6', + }), + }; +}); + +import { createPublishBitbucketServerPullRequestAction } from './bitbucketServerPullRequest'; +import { rest } from 'msw'; +import { setupServer } from 'msw/node'; +import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; +import { ScmIntegrations } from '@backstage/integration'; +import { ConfigReader } from '@backstage/config'; +import { getVoidLogger } from '@backstage/backend-common'; +import { PassThrough } from 'stream'; + +describe('publish:bitbucketServer:pull-request', () => { + const config = new ConfigReader({ + integrations: { + bitbucketServer: [ + { + host: 'hosted.bitbucket.com', + token: 'thing', + apiBaseUrl: 'https://hosted.bitbucket.com/rest/api/1.0', + }, + { + host: 'basic-auth.bitbucket.com', + username: 'test-user', + password: 'test-password', + apiBaseUrl: 'https://basic-auth.bitbucket.com/rest/api/1.0', + }, + { + host: 'no-credentials.bitbucket.com', + }, + ], + }, + }); + + const integrations = ScmIntegrations.fromConfig(config); + const action = createPublishBitbucketServerPullRequestAction({ + integrations, + config, + }); + const mockContext = { + input: { + repoUrl: 'hosted.bitbucket.com?project=project&repo=repo', + title: 'Add Scaffolder actions for Bitbucket Server', + description: + 'I just made a Pull Request that Add Scaffolder actions for Bitbucket Server', + targetBranch: 'master', + sourceBranch: 'develop', + }, + workspacePath: 'wsp', + logger: getVoidLogger(), + logStream: new PassThrough(), + output: jest.fn(), + createTemporaryDirectory: jest.fn(), + }; + const responseOfBranches = { + size: 3, + limit: 25, + isLastPage: true, + values: [ + { + id: 'refs/heads/master', + displayId: 'master', + type: 'BRANCH', + latestCommit: 'b1041e3f9b071b3d5cacd6826b7549cd624418f1', + latestChangeset: 'b1041e3f9b071b3d5cacd6826b7549cd624418f1', + isDefault: true, + }, + { + id: 'refs/heads/develop', + displayId: 'develop', + type: 'BRANCH', + latestCommit: '98e21148205367aeb11c25a52eaca3c2945253fa', + latestChangeset: '98e21148205367aeb11c25a52eaca3c2945253fa', + isDefault: false, + }, + { + id: 'refs/heads/develop-2', + displayId: 'develop-2', + type: 'BRANCH', + latestCommit: 'b1041e3f9b071b3d5cacd6826b7549cd624418f1', + latestChangeset: 'b1041e3f9b071b3d5cacd6826b7549cd624418f1', + isDefault: false, + }, + ], + start: 0, + }; + const responseOfPullRequests = { + id: 19, + version: 0, + title: 'Test for bitbucket server pull-requests', + description: 'Test for bitbucket server pull-requests', + state: 'OPEN', + open: true, + closed: false, + createdDate: 1684200289521, + updatedDate: 1684200289521, + fromRef: { + id: 'refs/heads/develop', + displayId: 'develop', + latestCommit: '98e21148205367aeb11c25a52eaca3c2945253fa', + type: 'BRANCH', + repository: { + slug: 'repo', + id: 1812, + name: 'repo', + description: 'This is a test repo', + hierarchyId: '1da8822903a9b11a27b8', + scmId: 'git', + state: 'AVAILABLE', + statusMessage: 'Available', + forkable: true, + project: {}, + public: false, + links: {}, + }, + }, + toRef: { + id: 'refs/heads/master', + displayId: 'master', + latestCommit: 'b1041e3f9b071b3d5cacd6826b7549cd624418f1', + type: 'BRANCH', + repository: { + slug: 'repo', + id: 1812, + name: 'repo', + description: 'This is a test repo', + hierarchyId: '1da8822903a9b11a27b8', + scmId: 'git', + state: 'AVAILABLE', + statusMessage: 'Available', + forkable: true, + project: {}, + public: false, + links: {}, + }, + }, + locked: false, + author: { + user: { + name: 'test-user', + emailAddress: 'test-user@sample.com', + id: 2944, + displayName: 'test-user', + active: true, + slug: 'test-user', + type: 'NORMAL', + links: {}, + }, + role: 'AUTHOR', + approved: false, + status: 'UNAPPROVED', + }, + reviewers: [], + participants: [], + links: { + self: [ + { + href: 'https://hosted.bitbucket.com/projects/project/repos/repo/pull-requests/1', + }, + ], + }, + }; + const handlers = [ + rest.get( + 'https://hosted.bitbucket.com/rest/api/1.0/projects/project/repos/repo/branches', + (_, res, ctx) => { + return res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json(responseOfBranches), + ); + }, + ), + rest.post( + 'https://hosted.bitbucket.com/rest/api/1.0/projects/project/repos/repo/pull-requests', + (_, res, ctx) => { + return res( + ctx.status(201), + ctx.set('Content-Type', 'application/json'), + ctx.json(responseOfPullRequests), + ); + }, + ), + ]; + + const server = setupServer(); + setupRequestMockHandlers(server); + + beforeEach(() => { + jest.resetAllMocks(); + }); + + it('should throw an error when the repoUrl is not well formed', async () => { + await expect( + action.handler({ + ...mockContext, + input: { + ...mockContext.input, + repoUrl: 'hosted.bitbucket.com?repo=repo', + }, + }), + ).rejects.toThrow(/missing project/); + + await expect( + action.handler({ + ...mockContext, + input: { + ...mockContext.input, + repoUrl: 'hosted.bitbucket.com?project=project', + }, + }), + ).rejects.toThrow(/missing repo/); + }); + + it('should throw if there is no integration config provided', async () => { + await expect( + action.handler({ + ...mockContext, + input: { + ...mockContext.input, + repoUrl: 'missing.com?project=project&repo=repo', + }, + }), + ).rejects.toThrow(/No matching integration configuration/); + }); + + it('should throw if there no credentials in the integration config that is returned', async () => { + await expect( + action.handler({ + ...mockContext, + input: { + ...mockContext.input, + repoUrl: 'no-credentials.bitbucket.com?project=project&repo=repo', + }, + }), + ).rejects.toThrow( + /Authorization has not been provided for no-credentials.bitbucket.com/, + ); + }); + + it('should call the correct APIs with token', async () => { + expect.assertions(3); + server.use( + rest.get( + 'https://hosted.bitbucket.com/rest/api/1.0/projects/project/repos/repo/branches', + (req, res, ctx) => { + expect(req.headers.get('Authorization')).toBe('Bearer thing'); + return res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json(responseOfBranches), + ); + }, + ), + rest.post( + 'https://hosted.bitbucket.com/rest/api/1.0/projects/project/repos/repo/pull-requests', + (req, res, ctx) => { + expect(req.headers.get('Authorization')).toBe('Bearer thing'); + return res( + ctx.status(201), + ctx.set('Content-Type', 'application/json'), + ctx.json(responseOfPullRequests), + ); + }, + ), + ); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + repoUrl: 'hosted.bitbucket.com?project=project&repo=repo', + }, + }); + }); + + it('should call the correct APIs with basic auth', async () => { + expect.assertions(3); + server.use( + rest.get( + 'https://basic-auth.bitbucket.com/rest/api/1.0/projects/project/repos/repo/branches', + (req, res, ctx) => { + expect(req.headers.get('Authorization')).toBe( + 'Basic dGVzdC11c2VyOnRlc3QtcGFzc3dvcmQ=', + ); + return res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json(responseOfBranches), + ); + }, + ), + rest.post( + 'https://basic-auth.bitbucket.com/rest/api/1.0/projects/project/repos/repo/pull-requests', + (req, res, ctx) => { + expect(req.headers.get('Authorization')).toBe( + 'Basic dGVzdC11c2VyOnRlc3QtcGFzc3dvcmQ=', + ); + return res( + ctx.status(201), + ctx.set('Content-Type', 'application/json'), + ctx.json(responseOfPullRequests), + ); + }, + ), + ); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + repoUrl: 'basic-auth.bitbucket.com?project=project&repo=repo', + }, + }); + }); + + it('should work if the token is provided through ctx.input', async () => { + expect.assertions(3); + const token = 'user-token'; + server.use( + rest.get( + 'https://no-credentials.bitbucket.com/rest/api/1.0/projects/project/repos/repo/branches', + (req, res, ctx) => { + expect(req.headers.get('Authorization')).toBe(`Bearer ${token}`); + return res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json(responseOfBranches), + ); + }, + ), + rest.post( + 'https://no-credentials.bitbucket.com/rest/api/1.0/projects/project/repos/repo/pull-requests', + (req, res, ctx) => { + expect(req.headers.get('Authorization')).toBe(`Bearer ${token}`); + return res( + ctx.status(201), + ctx.set('Content-Type', 'application/json'), + ctx.json(responseOfPullRequests), + ); + }, + ), + ); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + repoUrl: 'no-credentials.bitbucket.com?project=project&repo=repo', + token: token, + }, + }); + }); + + it('should call outputs with the correct urls', async () => { + server.use(...handlers); + + await action.handler(mockContext); + + expect(mockContext.output).toHaveBeenCalledWith( + 'pullRequestUrl', + 'https://hosted.bitbucket.com/projects/project/repos/repo/pull-requests/1', + ); + }); +}); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/bitbucketServerPullRequest.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/bitbucketServerPullRequest.ts new file mode 100644 index 0000000000..79711b9d69 --- /dev/null +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/bitbucketServerPullRequest.ts @@ -0,0 +1,291 @@ +/* + * 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 { InputError } from '@backstage/errors'; +import { + getBitbucketServerRequestOptions, + ScmIntegrationRegistry, +} from '@backstage/integration'; +import { createTemplateAction } from '@backstage/plugin-scaffolder-node'; +import fetch, { RequestInit, Response } from 'node-fetch'; +import { parseRepoUrl } from './util'; +import { Config } from '@backstage/config'; + +const createPullRequest = async (opts: { + project: string; + repo: string; + title: string; + description?: string; + toRef: { + id: string; + displayId: string; + type: string; + latestCommit: string; + latestChangeset: string; + isDefault: boolean; + }; + fromRef: { + id: string; + displayId: string; + type: string; + latestCommit: string; + latestChangeset: string; + isDefault: boolean; + }; + authorization: string; + apiBaseUrl: string; +}) => { + const { + project, + repo, + title, + description, + toRef, + fromRef, + authorization, + apiBaseUrl, + } = opts; + + let response: Response; + const data: RequestInit = { + method: 'POST', + body: JSON.stringify({ + title: title, + description: description, + state: 'OPEN', + open: true, + closed: false, + locked: true, + toRef: toRef, + fromRef: fromRef, + }), + headers: { + Authorization: authorization, + 'Content-Type': 'application/json', + }, + }; + + try { + response = await fetch( + `${apiBaseUrl}/projects/${encodeURIComponent( + project, + )}/repos/${encodeURIComponent(repo)}/pull-requests`, + data, + ); + } catch (e) { + throw new Error(`Unable to create pull-reqeusts, ${e}`); + } + + if (response.status !== 201) { + throw new Error( + `Unable to create pull requests, ${response.status} ${ + response.statusText + }, ${await response.text()}`, + ); + } + + const r = await response.json(); + return `${r.links.self[0].href}`; +}; +const findBranches = async (opts: { + project: string; + repo: string; + branchName: string; + authorization: string; + apiBaseUrl: string; +}) => { + const { project, repo, branchName, authorization, apiBaseUrl } = opts; + + let response: Response; + const options: RequestInit = { + method: 'GET', + headers: { + Authorization: authorization, + 'Content-Type': 'application/json', + }, + }; + + try { + response = await fetch( + `${apiBaseUrl}/projects/${encodeURIComponent( + project, + )}/repos/${encodeURIComponent( + repo, + )}/branches?boostMatches=true&filterText=${encodeURIComponent( + branchName, + )}`, + options, + ); + } catch (e) { + throw new Error(`Unable to get branches, ${e}`); + } + + if (response.status !== 200) { + throw new Error( + `Unable to get branches, ${response.status} ${ + response.statusText + }, ${await response.text()}`, + ); + } + + const r = await response.json(); + for (const object of r.values) { + if (object.displayId === branchName) { + return object; + } + } + + return undefined; +}; + +/** + * Creates a BitbucketServer Pull Request action. + * @public + */ +export function createPublishBitbucketServerPullRequestAction(options: { + integrations: ScmIntegrationRegistry; + config: Config; +}) { + const { integrations } = options; + + return createTemplateAction<{ + repoUrl: string; + title: string; + description?: string; + targetBranch?: string; + sourceBranch: string; + token?: string; + }>({ + id: 'publish:bitbucketServer:pull-request', + schema: { + input: { + type: 'object', + required: ['repoUrl', 'title', 'sourceBranch'], + properties: { + repoUrl: { + title: 'Repository Location', + type: 'string', + }, + title: { + title: 'Pull Request title', + type: 'string', + description: 'The title for the pull request', + }, + description: { + title: 'Pull Request Description', + type: 'string', + description: 'The description of the pull request', + }, + targetBranch: { + title: 'Target Branch', + type: 'string', + description: `Branch of repository to apply changes to. The default value is 'master'`, + }, + sourceBranch: { + title: 'Source Branch', + type: 'string', + description: 'Branch of repository to copy changes from', + }, + token: { + title: 'Authorization Token', + type: 'string', + description: + 'The token to use for authorization to BitBucket Server', + }, + }, + }, + output: { + type: 'object', + properties: { + pullRequestUrl: { + title: 'A URL to the pull request with the provider', + type: 'string', + }, + }, + }, + }, + async handler(ctx) { + const { + repoUrl, + title, + description, + targetBranch = 'master', + sourceBranch, + } = ctx.input; + + const { project, repo, host } = parseRepoUrl(repoUrl, integrations); + + if (!project) { + throw new InputError( + `Invalid URL provider was included in the repo URL to create ${ctx.input.repoUrl}, missing project`, + ); + } + + const integrationConfig = integrations.bitbucketServer.byHost(host); + if (!integrationConfig) { + throw new InputError( + `No matching integration configuration for host ${host}, please check your integrations config`, + ); + } + + const token = ctx.input.token ?? integrationConfig.config.token; + + const authConfig = { + ...integrationConfig.config, + ...{ token }, + }; + + const reqOpts = getBitbucketServerRequestOptions(authConfig); + const authorization = reqOpts.headers.Authorization; + if (!authorization) { + throw new Error( + `Authorization has not been provided for ${integrationConfig.config.host}. Please add either (a) a user login auth token, or (b) a token input from the template or (c) username + password to the integration config.`, + ); + } + + const apiBaseUrl = integrationConfig.config.apiBaseUrl; + + const toRef = await findBranches({ + project, + repo, + branchName: targetBranch, + authorization, + apiBaseUrl, + }); + + const fromRef = await findBranches({ + project, + repo, + branchName: sourceBranch, + authorization, + apiBaseUrl, + }); + + const pullRequestUrl = await createPullRequest({ + project, + repo, + title, + description, + toRef, + fromRef, + authorization, + apiBaseUrl, + }); + + ctx.output('pullRequestUrl', pullRequestUrl); + }, + }); +} diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/githubPullRequest.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/githubPullRequest.test.ts index 7750277728..82f8d22aea 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/githubPullRequest.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/githubPullRequest.test.ts @@ -62,6 +62,9 @@ describe('createPublishGithubPullRequestAction', () => { data: { html_url: 'https://github.com/myorg/myrepo/pull/123', number: 123, + base: { + ref: 'main', + }, }, }; }), @@ -90,6 +93,94 @@ describe('createPublishGithubPullRequestAction', () => { jest.resetAllMocks(); }); + describe('with targetBranchName', () => { + let input: GithubPullRequestActionInput; + let ctx: ActionContext; + + beforeEach(() => { + fakeClient = { + createPullRequest: jest.fn(async (_: any) => { + return { + url: 'https://api.github.com/myorg/myrepo/pull/123', + headers: {}, + status: 201, + data: { + html_url: 'https://github.com/myorg/myrepo/pull/123', + number: 123, + base: { + ref: 'test', + }, + }, + }; + }), + rest: { + pulls: { + requestReviewers: jest.fn(async (_: any) => ({ data: {} })), + }, + }, + }; + + input = { + repoUrl: 'github.com?owner=myorg&repo=myrepo', + title: 'Create my new app', + branchName: 'new-app', + targetBranchName: 'test', + description: 'This PR is really good', + draft: true, + }; + + mockFs({ + [workspacePath]: { 'file.txt': 'Hello there!' }, + }); + + ctx = { + createTemporaryDirectory: jest.fn(), + output: jest.fn(), + logger: getRootLogger(), + logStream: new Writable(), + input, + workspacePath, + }; + }); + + it('creates a pull request', async () => { + await instance.handler(ctx); + + expect(fakeClient.createPullRequest).toHaveBeenCalledWith({ + owner: 'myorg', + repo: 'myrepo', + title: 'Create my new app', + head: 'new-app', + base: 'test', + body: 'This PR is really good', + draft: true, + changes: [ + { + commit: 'Create my new app', + files: { + 'file.txt': { + content: Buffer.from('Hello there!').toString('base64'), + encoding: 'base64', + mode: '100644', + }, + }, + }, + ], + }); + }); + + it('creates outputs for the pull request url and number', async () => { + await instance.handler(ctx); + + expect(ctx.output).toHaveBeenCalledWith('targetBranchName', 'test'); + expect(ctx.output).toHaveBeenCalledWith( + 'remoteUrl', + 'https://github.com/myorg/myrepo/pull/123', + ); + expect(ctx.output).toHaveBeenCalledWith('pullRequestNumber', 123); + }); + }); + describe('with no sourcePath', () => { let input: GithubPullRequestActionInput; let ctx: ActionContext; @@ -145,6 +236,7 @@ describe('createPublishGithubPullRequestAction', () => { it('creates outputs for the pull request url and number', async () => { await instance.handler(ctx); + expect(ctx.output).toHaveBeenCalledWith('targetBranchName', 'main'); expect(ctx.output).toHaveBeenCalledWith( 'remoteUrl', 'https://github.com/myorg/myrepo/pull/123', diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/githubPullRequest.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/githubPullRequest.ts index 6706ad9c06..167fedc88e 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/githubPullRequest.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/githubPullRequest.ts @@ -42,6 +42,9 @@ export type OctokitWithPullRequestPluginClient = Octokit & { data: { html_url: string; number: number; + base: { + ref: string; + }; }; } | null>; }; @@ -128,6 +131,7 @@ export const createPublishGithubPullRequestAction = ( return createTemplateAction<{ title: string; branchName: string; + targetBranchName?: string; description: string; repoUrl: string; draft?: boolean; @@ -154,6 +158,11 @@ export const createPublishGithubPullRequestAction = ( title: 'Branch Name', description: 'The name for the branch', }, + targetBranchName: { + type: 'string', + title: 'Target Branch Name', + description: 'The target branch name of the merge request', + }, title: { type: 'string', title: 'Pull Request Name', @@ -214,6 +223,10 @@ export const createPublishGithubPullRequestAction = ( required: ['remoteUrl'], type: 'object', properties: { + targetBranchName: { + title: 'Target branch name of the merge request', + type: 'string', + }, remoteUrl: { type: 'string', title: 'Pull Request URL', @@ -231,6 +244,7 @@ export const createPublishGithubPullRequestAction = ( const { repoUrl, branchName, + targetBranchName, title, description, draft, @@ -298,7 +312,7 @@ export const createPublishGithubPullRequestAction = ( ); try { - const response = await client.createPullRequest({ + const createOptions: createPullRequest.Options = { owner, repo, title, @@ -311,7 +325,11 @@ export const createPublishGithubPullRequestAction = ( body: description, head: branchName, draft, - }); + }; + if (targetBranchName) { + createOptions.base = targetBranchName; + } + const response = await client.createPullRequest(createOptions); if (!response) { throw new GithubResponseError('null response from Github'); @@ -329,6 +347,8 @@ export const createPublishGithubPullRequestAction = ( ); } + const targetBranch = response.data.base.ref; + ctx.output('targetBranchName', targetBranch); ctx.output('remoteUrl', response.data.html_url); ctx.output('pullRequestNumber', pullRequestNumber); } catch (e) { diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlabMergeRequest.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlabMergeRequest.test.ts index c3d0fe58f1..afb93b348a 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlabMergeRequest.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlabMergeRequest.test.ts @@ -101,6 +101,49 @@ describe('createGitLabMergeRequest', () => { mockFs.restore(); }); + describe('createGitLabMergeRequestWithSpecifiedTargetBranch', () => { + it('removeSourceBranch is false by default when not passed in options', async () => { + const input = { + repoUrl: 'gitlab.com?repo=repo&owner=owner', + title: 'Create my new MR', + branchName: 'new-mr', + targetBranchName: 'test', + description: 'This MR is really good', + targetPath: 'Subdirectory', + }; + mockFs({ + [workspacePath]: { + source: { 'foo.txt': 'Hello there!' }, + irrelevant: { 'bar.txt': 'Nothing to see here' }, + }, + }); + const ctx = { + createTemporaryDirectory: jest.fn(), + output: jest.fn(), + logger: getRootLogger(), + logStream: new Writable(), + input, + workspacePath, + }; + await instance.handler(ctx); + + expect(mockGitlabClient.Projects.show).not.toHaveBeenCalled(); + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'test', + ); + expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'test', + 'Create my new MR', + { description: 'This MR is really good', removeSourceBranch: false }, + ); + expect(ctx.output).toHaveBeenCalledWith('targetBranchName', 'test'); + }); + }); + describe('createGitLabMergeRequestWithoutRemoveBranch', () => { it('removeSourceBranch is false by default when not passed in options', async () => { const input = { @@ -126,6 +169,12 @@ describe('createGitLabMergeRequest', () => { }; await instance.handler(ctx); + expect(mockGitlabClient.Projects.show).toHaveBeenCalledWith('owner/repo'); + expect(mockGitlabClient.Branches.create).toHaveBeenCalledWith( + 'owner/repo', + 'new-mr', + 'main', + ); expect(mockGitlabClient.MergeRequests.create).toHaveBeenCalledWith( 'owner/repo', 'new-mr', @@ -133,6 +182,8 @@ describe('createGitLabMergeRequest', () => { 'Create my new MR', { description: 'This MR is really good', removeSourceBranch: false }, ); + + expect(ctx.output).toHaveBeenCalledWith('targetBranchName', 'main'); }); }); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlabMergeRequest.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlabMergeRequest.ts index 3dfe0cff5c..8abb53288c 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlabMergeRequest.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/gitlabMergeRequest.ts @@ -39,6 +39,7 @@ export const createPublishGitlabMergeRequestAction = (options: { title: string; description: string; branchName: string; + targetBranchName?: string; sourcePath?: string; targetPath?: string; token?: string; @@ -77,8 +78,13 @@ export const createPublishGitlabMergeRequestAction = (options: { }, branchName: { type: 'string', - title: 'Destination Branch name', - description: 'The description of the merge request', + title: 'Source Branch Name', + description: 'The source branch name of the merge request', + }, + targetBranchName: { + type: 'string', + title: 'Target Branch Name', + description: 'The target branch name of the merge request', }, sourcePath: { type: 'string', @@ -119,6 +125,10 @@ export const createPublishGitlabMergeRequestAction = (options: { output: { type: 'object', properties: { + targetBranchName: { + title: 'Target branch name of the merge request', + type: 'string', + }, projectid: { title: 'Gitlab Project id/Name(slug)', type: 'string', @@ -139,6 +149,7 @@ export const createPublishGitlabMergeRequestAction = (options: { const { assignee, branchName, + targetBranchName, description, repoUrl, removeSourceBranch, @@ -211,12 +222,16 @@ export const createPublishGitlabMergeRequestAction = (options: { execute_filemode: file.executable, })); - const projects = await api.Projects.show(repoID); + let targetBranch = targetBranchName; + if (!targetBranch) { + const projects = await api.Projects.show(repoID); - const { default_branch: defaultBranch } = projects; + const { default_branch: defaultBranch } = projects; + targetBranch = defaultBranch!; + } try { - await api.Branches.create(repoID, branchName, String(defaultBranch)); + await api.Branches.create(repoID, branchName, String(targetBranch)); } catch (e) { throw new InputError( `The branch creation failed. Please check that your repo does not already contain a branch named '${branchName}'. ${e}`, @@ -235,7 +250,7 @@ export const createPublishGitlabMergeRequestAction = (options: { const mergeRequestUrl = await api.MergeRequests.create( repoID, branchName, - String(defaultBranch), + String(targetBranch), title, { description, @@ -246,6 +261,7 @@ export const createPublishGitlabMergeRequestAction = (options: { return mergeRequest.web_url; }); ctx.output('projectid', repoID); + ctx.output('targetBranchName', targetBranch); ctx.output('projectPath', repoID); ctx.output('mergeRequestUrl', mergeRequestUrl); } catch (e) { diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/index.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/index.ts index a8a40ab1df..bed3a2316c 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/index.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/publish/index.ts @@ -18,6 +18,7 @@ export { createPublishAzureAction } from './azure'; export { createPublishBitbucketAction } from './bitbucket'; export { createPublishBitbucketCloudAction } from './bitbucketCloud'; export { createPublishBitbucketServerAction } from './bitbucketServer'; +export { createPublishBitbucketServerPullRequestAction } from './bitbucketServerPullRequest'; export { createPublishGerritAction } from './gerrit'; export { createPublishGerritReviewAction } from './gerritReview'; export { createPublishGithubAction } from './github'; diff --git a/plugins/scaffolder-common/CHANGELOG.md b/plugins/scaffolder-common/CHANGELOG.md index b694395956..6fd5948a5c 100644 --- a/plugins/scaffolder-common/CHANGELOG.md +++ b/plugins/scaffolder-common/CHANGELOG.md @@ -1,5 +1,41 @@ # @backstage/plugin-scaffolder-common +## 1.3.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.1 + - @backstage/types@1.1.0 + - @backstage/plugin-permission-common@0.7.7 + +## 1.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/types@1.1.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + +## 1.3.1 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.1.0 + - @backstage/catalog-model@1.4.0 + - @backstage/plugin-permission-common@0.7.6 + +## 1.3.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/types@1.0.2 + - @backstage/plugin-permission-common@0.7.6-next.0 + ## 1.3.1-next.0 ### Patch Changes diff --git a/plugins/scaffolder-common/package.json b/plugins/scaffolder-common/package.json index c3a4017253..a0baa4470f 100644 --- a/plugins/scaffolder-common/package.json +++ b/plugins/scaffolder-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-common", "description": "Common functionalities for the scaffolder, to be shared between scaffolder and scaffolder-backend plugin", - "version": "1.3.1-next.0", + "version": "1.3.2", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-node/CHANGELOG.md b/plugins/scaffolder-node/CHANGELOG.md index 3602a78714..fd1605c2df 100644 --- a/plugins/scaffolder-node/CHANGELOG.md +++ b/plugins/scaffolder-node/CHANGELOG.md @@ -1,5 +1,70 @@ # @backstage/plugin-scaffolder-node +## 0.1.6-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- d3b31a791eb1: Deprecated `executeShellCommand`, `RunCommandOptions`, and `fetchContents` from `@backstage/plugin-scaffolder-backend`, since they are useful for Scaffolder modules (who should not be importing from the plugin package itself). You should now import these from `@backstage/plugin-scaffolder-backend-node` instead. `RunCommandOptions` was renamed in the Node package as `ExecuteShellCommandOptions`, for consistency. +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/integration@1.5.1 + - @backstage/catalog-model@1.4.1 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + - @backstage/plugin-scaffolder-common@1.3.2 + +## 0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/types@1.1.0 + - @backstage/plugin-scaffolder-common@1.3.2 + +## 0.1.5 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.4 + - @backstage/catalog-model@1.4.1 + - @backstage/types@1.1.0 + - @backstage/plugin-scaffolder-common@1.3.2 + +## 0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/types@1.1.0 + - @backstage/plugin-scaffolder-common@1.3.2-next.0 + +## 0.1.4 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.1.0 + - @backstage/catalog-model@1.4.0 + - @backstage/backend-plugin-api@0.5.3 + - @backstage/plugin-scaffolder-common@1.3.1 + +## 0.1.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/types@1.0.2 + - @backstage/plugin-scaffolder-common@1.3.1-next.1 + ## 0.1.4-next.1 ### Patch Changes diff --git a/plugins/scaffolder-node/api-report.md b/plugins/scaffolder-node/api-report.md index 962daca2ad..6d628b091d 100644 --- a/plugins/scaffolder-node/api-report.md +++ b/plugins/scaffolder-node/api-report.md @@ -9,7 +9,10 @@ import { ExtensionPoint } from '@backstage/backend-plugin-api'; import { JsonObject } from '@backstage/types'; import { Logger } from 'winston'; import { Schema } from 'jsonschema'; +import { ScmIntegrations } from '@backstage/integration'; +import { SpawnOptionsWithoutStdio } from 'child_process'; import { TemplateInfo } from '@backstage/plugin-scaffolder-common'; +import { UrlReader } from '@backstage/backend-common'; import { UserEntity } from '@backstage/catalog-model'; import { Writable } from 'stream'; import { z } from 'zod'; @@ -68,6 +71,37 @@ export const createTemplateAction: < >, ) => TemplateAction; +// @public +export function executeShellCommand( + options: ExecuteShellCommandOptions, +): Promise; + +// @public +export type ExecuteShellCommandOptions = { + command: string; + args: string[]; + options?: SpawnOptionsWithoutStdio; + logStream?: Writable; +}; + +// @public +export function fetchContents(options: { + reader: UrlReader; + integrations: ScmIntegrations; + baseUrl?: string; + fetchUrl?: string; + outputPath: string; +}): Promise; + +// @public +export function fetchFile(options: { + reader: UrlReader; + integrations: ScmIntegrations; + baseUrl?: string; + fetchUrl?: string; + outputPath: string; +}): Promise; + // @alpha export interface ScaffolderActionsExtensionPoint { // (undocumented) diff --git a/plugins/scaffolder-node/package.json b/plugins/scaffolder-node/package.json index cdf1a52b40..555a25417d 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.4-next.1", + "version": "0.1.6-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -14,6 +14,12 @@ "backstage": { "role": "node-library" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/scaffolder-node" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build --experimental-type-build", @@ -24,17 +30,22 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { + "@backstage/backend-common": "workspace:^", "@backstage/backend-plugin-api": "workspace:^", "@backstage/catalog-model": "workspace:^", + "@backstage/errors": "workspace:^", + "@backstage/integration": "workspace:^", "@backstage/plugin-scaffolder-common": "workspace:^", "@backstage/types": "workspace:^", + "fs-extra": "10.1.0", "jsonschema": "^1.2.6", "winston": "^3.2.1", "zod": "^3.21.4", "zod-to-json-schema": "^3.20.4" }, "devDependencies": { - "@backstage/cli": "workspace:^" + "@backstage/cli": "workspace:^", + "@backstage/config": "workspace:^" }, "files": [ "alpha", diff --git a/plugins/scaffolder-node/src/actions/executeShellCommand.ts b/plugins/scaffolder-node/src/actions/executeShellCommand.ts new file mode 100644 index 0000000000..ce54989589 --- /dev/null +++ b/plugins/scaffolder-node/src/actions/executeShellCommand.ts @@ -0,0 +1,75 @@ +/* + * 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 { spawn, SpawnOptionsWithoutStdio } from 'child_process'; +import { PassThrough, Writable } from 'stream'; + +/** + * Options for {@link executeShellCommand}. + * + * @public + */ +export type ExecuteShellCommandOptions = { + /** command to run */ + command: string; + /** arguments to pass the command */ + args: string[]; + /** options to pass to spawn */ + options?: SpawnOptionsWithoutStdio; + /** stream to capture stdout and stderr output */ + logStream?: Writable; +}; + +/** + * Run a command in a sub-process, normally a shell command. + * + * @public + */ +export async function executeShellCommand( + options: ExecuteShellCommandOptions, +): Promise { + const { + command, + args, + options: spawnOptions, + logStream = new PassThrough(), + } = options; + + await new Promise((resolve, reject) => { + const process = spawn(command, args, spawnOptions); + + process.stdout.on('data', stream => { + logStream.write(stream); + }); + + process.stderr.on('data', stream => { + logStream.write(stream); + }); + + process.on('error', error => { + return reject(error); + }); + + process.on('close', code => { + if (code !== 0) { + return reject( + new Error(`Command ${command} failed, exit code: ${code}`), + ); + } + return resolve(); + }); + }); +} diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.test.ts b/plugins/scaffolder-node/src/actions/fetch.test.ts similarity index 98% rename from plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.test.ts rename to plugins/scaffolder-node/src/actions/fetch.test.ts index 3c4a677d4d..55b949fca7 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.test.ts +++ b/plugins/scaffolder-node/src/actions/fetch.test.ts @@ -21,10 +21,10 @@ import { resolve as resolvePath } from 'path'; import { UrlReader } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import { ScmIntegrations } from '@backstage/integration'; -import { fetchContents, fetchFile } from './helpers'; +import { fetchContents, fetchFile } from './fetch'; import os from 'os'; -describe('fetchContent helper', () => { +describe('fetchContents helper', () => { beforeEach(() => { jest.clearAllMocks(); }); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.ts b/plugins/scaffolder-node/src/actions/fetch.ts similarity index 99% rename from plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.ts rename to plugins/scaffolder-node/src/actions/fetch.ts index 301c9991c4..66bbc0a842 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/fetch/helpers.ts +++ b/plugins/scaffolder-node/src/actions/fetch.ts @@ -54,6 +54,8 @@ export async function fetchContents(options: { /** * A helper function that reads the content of a single file from the given URL. * Can be used in your own actions, and also used behind `fetch:plain:file` + * + * @public */ export async function fetchFile(options: { reader: UrlReader; diff --git a/plugins/scaffolder-node/src/actions/index.ts b/plugins/scaffolder-node/src/actions/index.ts index e4af098356..751173384b 100644 --- a/plugins/scaffolder-node/src/actions/index.ts +++ b/plugins/scaffolder-node/src/actions/index.ts @@ -18,4 +18,9 @@ export { createTemplateAction, type TemplateActionOptions, } from './createTemplateAction'; +export { + executeShellCommand, + type ExecuteShellCommandOptions, +} from './executeShellCommand'; +export { fetchContents, fetchFile } from './fetch'; export { type ActionContext, type TemplateAction } from './types'; diff --git a/plugins/scaffolder-react/CHANGELOG.md b/plugins/scaffolder-react/CHANGELOG.md index 4115f4e420..e4762983c7 100644 --- a/plugins/scaffolder-react/CHANGELOG.md +++ b/plugins/scaffolder-react/CHANGELOG.md @@ -1,5 +1,129 @@ # @backstage/plugin-scaffolder-react +## 1.5.2-next.0 + +### Patch Changes + +- ba9ee98a37bd: Fixed bug in Workflow component by passing a prop `templateName` down to Stepper component. +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + - @backstage/types@1.1.0 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-scaffolder-common@1.3.2 + +## 1.5.1 + +### Patch Changes + +- f74a27de4d2c: Made markdown description theme-able +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/types@1.1.0 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-scaffolder-common@1.3.2 + +## 1.5.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/errors@1.2.1-next.0 + - @backstage/types@1.1.0 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-scaffolder-common@1.3.2-next.0 + +## 1.5.1-next.1 + +### Patch Changes + +- f74a27de4d2c: Made markdown description theme-able +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + +## 1.5.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/types@1.1.0 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-catalog-react@1.7.1-next.0 + - @backstage/plugin-scaffolder-common@1.3.2-next.0 + +## 1.5.0 + +### Minor Changes + +- 6b571405f806: `scaffolder/next`: Provide some default template components to `rjsf` to allow for standardization and markdown descriptions +- 4505dc3b4598: `scaffolder/next`: Don't render `TemplateGroups` when there's no results in with search query +- a452bda74d7a: Fixed typescript casting bug for useTemplateParameterSchema hook +- 6b571405f806: `scaffolder/next`: provide a `ScaffolderField` component which is meant to replace some of the `FormControl` components from Material UI, making it easier to write `FieldExtensions`. + +### Patch Changes + +- 84a5c7724c7e: fixed refresh problem when backstage backend disconnects without any feedback to user. Now we send a generic message and try to reconnect after 15 seconds +- cf34311cdbe1: Extract `ui:*` fields from conditional `then` and `else` schema branches. +- 2ff94da135a4: bump `rjsf` dependencies to 5.7.3 +- 74b216ee4e50: Add `PropsWithChildren` to usages of `ComponentType`, in preparation for React 18 where the children are no longer implicit. +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/catalog-client@1.4.2 + - @backstage/core-components@0.13.2 + - @backstage/types@1.1.0 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-scaffolder-common@1.3.1 + +## 1.5.0-next.3 + +### Minor Changes + +- a452bda74d7a: Fixed typescript casting bug for useTemplateParameterSchema hook + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/catalog-client@1.4.2-next.2 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-catalog-react@1.7.0-next.3 + - @backstage/plugin-scaffolder-common@1.3.1-next.1 + ## 1.5.0-next.2 ### Patch Changes @@ -18,7 +142,7 @@ - 6b571405f806: `scaffolder/next`: Provide some default template components to `rjsf` to allow for standardization and markdown descriptions - 4505dc3b4598: `scaffolder/next`: Don't render `TemplateGroups` when there's no results in with search query -- 6b571405f806: `scaffolder/next`: provide a `ScaffolderField` component which is meant to replace some of the `FormControl` components from MUI, making it easier to write `FieldExtensions`. +- 6b571405f806: `scaffolder/next`: provide a `ScaffolderField` component which is meant to replace some of the `FormControl` components from Material UI, making it easier to write `FieldExtensions`. ### Patch Changes diff --git a/plugins/scaffolder-react/alpha-api-report.md b/plugins/scaffolder-react/alpha-api-report.md index f988eb0831..58a3c8e208 100644 --- a/plugins/scaffolder-react/alpha-api-report.md +++ b/plugins/scaffolder-react/alpha-api-report.md @@ -289,7 +289,7 @@ export const useFormDataFromQuery: ( // @alpha (undocumented) export const useTemplateParameterSchema: (templateRef: string) => { - manifest: TemplateParameterSchema; + manifest: TemplateParameterSchema | undefined; loading: boolean; error: Error | undefined; }; diff --git a/plugins/scaffolder-react/api-report.md b/plugins/scaffolder-react/api-report.md index 82610a2fc3..c618050810 100644 --- a/plugins/scaffolder-react/api-report.md +++ b/plugins/scaffolder-react/api-report.md @@ -326,7 +326,7 @@ export type TemplateParameterSchema = { // @public export const useCustomFieldExtensions: < - TComponentDataType = FieldExtensionOptions, + TComponentDataType = FieldExtensionOptions, >( outlet: React.ReactNode, ) => TComponentDataType[]; diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json index 53d4adf2d2..ddf27cc83d 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.5.0-next.2", + "version": "1.5.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-react/src/next/components/Form/DescriptionFieldTemplate.tsx b/plugins/scaffolder-react/src/next/components/Form/DescriptionFieldTemplate.tsx index 8debfb3e08..4c86ef0c62 100644 --- a/plugins/scaffolder-react/src/next/components/Form/DescriptionFieldTemplate.tsx +++ b/plugins/scaffolder-react/src/next/components/Form/DescriptionFieldTemplate.tsx @@ -24,17 +24,17 @@ import { StrictRJSFSchema, } from '@rjsf/utils'; -const useStyles = makeStyles({ +const useStyles = makeStyles(theme => ({ markdownDescription: { - fontSize: '0.75rem', + fontSize: theme.typography.caption.fontSize, margin: 0, - marginTop: '5px', - color: 'rgba(0, 0, 0, 0.54)', - '& p:first-child': { + color: theme.palette.text.secondary, + '& :first-child': { margin: 0, + marginTop: '3px', // to keep the standard browser padding }, }, -}); +})); /** The `DescriptionField` is the template to use to render the description of a field * @alpha diff --git a/plugins/scaffolder-react/src/next/components/Workflow/Workflow.tsx b/plugins/scaffolder-react/src/next/components/Workflow/Workflow.tsx index f6ff12e3a3..228f5cefd9 100644 --- a/plugins/scaffolder-react/src/next/components/Workflow/Workflow.tsx +++ b/plugins/scaffolder-react/src/next/components/Workflow/Workflow.tsx @@ -102,7 +102,7 @@ export const Workflow = (workflowProps: WorkflowProps): JSX.Element | null => { noPadding titleTypographyProps={{ component: 'h2' }} > - + )} diff --git a/plugins/scaffolder-react/src/next/hooks/useTemplateParameterSchema.ts b/plugins/scaffolder-react/src/next/hooks/useTemplateParameterSchema.ts index d060b9a09f..73452f1670 100644 --- a/plugins/scaffolder-react/src/next/hooks/useTemplateParameterSchema.ts +++ b/plugins/scaffolder-react/src/next/hooks/useTemplateParameterSchema.ts @@ -29,5 +29,9 @@ export const useTemplateParameterSchema = (templateRef: string) => { [scaffolderApi, templateRef], ); - return { manifest: value as TemplateParameterSchema, loading, error }; + return { + manifest: value as TemplateParameterSchema | undefined, + loading, + error, + }; }; diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md index a8f836fded..414e7acf53 100644 --- a/plugins/scaffolder/CHANGELOG.md +++ b/plugins/scaffolder/CHANGELOG.md @@ -1,5 +1,178 @@ # @backstage/plugin-scaffolder +## 1.14.2-next.1 + +### Patch Changes + +- 8a0490fb669e: Fix the get entities query in the `MyGroupsPicker` to query the `kind=Group` entities. +- Updated dependencies + - @backstage/integration-react@1.1.16-next.1 + - @backstage/integration@1.5.1 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + - @backstage/types@1.1.0 + - @backstage/plugin-catalog-common@1.0.15 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/plugin-permission-react@0.4.14 + - @backstage/plugin-scaffolder-common@1.3.2 + - @backstage/plugin-scaffolder-react@1.5.2-next.0 + +## 1.14.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/plugin-scaffolder-react@1.5.2-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/integration@1.5.1 + - @backstage/integration-react@1.1.16-next.0 + - @backstage/theme@0.4.1 + - @backstage/types@1.1.0 + - @backstage/plugin-catalog-common@1.0.15 + - @backstage/plugin-permission-react@0.4.14 + - @backstage/plugin-scaffolder-common@1.3.2 + +## 1.14.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/plugin-scaffolder-react@1.5.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1 + - @backstage/integration-react@1.1.15 + - @backstage/types@1.1.0 + - @backstage/plugin-catalog-common@1.0.15 + - @backstage/plugin-permission-react@0.4.14 + - @backstage/plugin-scaffolder-common@1.3.2 + +## 1.14.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1-next.0 + - @backstage/integration@1.5.1-next.0 + - @backstage/integration-react@1.1.15-next.2 + - @backstage/types@1.1.0 + - @backstage/plugin-catalog-common@1.0.15-next.0 + - @backstage/plugin-permission-react@0.4.14-next.2 + - @backstage/plugin-scaffolder-common@1.3.2-next.0 + - @backstage/plugin-scaffolder-react@1.5.1-next.2 + +## 1.14.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/plugin-scaffolder-react@1.5.1-next.1 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/integration-react@1.1.15-next.1 + - @backstage/plugin-catalog-react@1.7.1-next.1 + - @backstage/plugin-permission-react@0.4.14-next.1 + - @backstage/config@1.0.8 + +## 1.14.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/core-plugin-api@1.5.2 + - @backstage/integration@1.5.1-next.0 + - @backstage/integration-react@1.1.15-next.0 + - @backstage/theme@0.4.0 + - @backstage/types@1.1.0 + - @backstage/plugin-catalog-common@1.0.15-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + - @backstage/plugin-permission-react@0.4.14-next.0 + - @backstage/plugin-scaffolder-common@1.3.2-next.0 + - @backstage/plugin-scaffolder-react@1.5.1-next.0 + +## 1.14.0 + +### Minor Changes + +- 464125e9b1ba: Added `MyGroupsPicker` field extension that will display a dropdown of groups a user is part of. + +### Patch Changes + +- cda753a797b5: Forward `Authorization` header for `EventSource` when credentials are available. +- 2ff94da135a4: bump `rjsf` dependencies to 5.7.3 +- 74b216ee4e50: Add `PropsWithChildren` to usages of `ComponentType`, in preparation for React 18 where the children are no longer implicit. +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/catalog-client@1.4.2 + - @backstage/plugin-scaffolder-react@1.5.0 + - @backstage/core-components@0.13.2 + - @backstage/types@1.1.0 + - @backstage/theme@0.4.0 + - @backstage/integration@1.5.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + - @backstage/integration-react@1.1.14 + - @backstage/plugin-permission-react@0.4.13 + - @backstage/config@1.0.8 + - @backstage/plugin-catalog-common@1.0.14 + - @backstage/plugin-scaffolder-common@1.3.1 + +## 1.14.0-next.3 + +### Minor Changes + +- 464125e9b1ba: Added `MyGroupsPicker` field extension that will display a dropdown of groups a user is part of. + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/plugin-scaffolder-react@1.5.0-next.3 + - @backstage/catalog-client@1.4.2-next.2 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/integration@1.5.0-next.0 + - @backstage/integration-react@1.1.14-next.3 + - @backstage/theme@0.4.0-next.1 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-common@1.0.14-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + - @backstage/plugin-permission-react@0.4.13-next.0 + - @backstage/plugin-scaffolder-common@1.3.1-next.1 + ## 1.13.2-next.2 ### Patch Changes @@ -2986,7 +3159,7 @@ ### Patch Changes - 12d8f27a6: Move logic for constructing the template form to the backend, using a new `./parameter-schema` endpoint that returns the form schema for a given template. -- bc327dc42: Tweak the template cards to be even more compliant with MUI examples, and a little bit more dense. +- bc327dc42: Tweak the template cards to be even more compliant with Material UI examples, and a little bit more dense. - Updated dependencies [12d8f27a6] - Updated dependencies [40c0fdbaa] - Updated dependencies [2a271d89e] diff --git a/plugins/scaffolder/api-report.md b/plugins/scaffolder/api-report.md index e50395be05..48f24868de 100644 --- a/plugins/scaffolder/api-report.md +++ b/plugins/scaffolder/api-report.md @@ -207,6 +207,31 @@ export function makeFieldSchemaFromZod< : never >; +// @public +export const MyGroupsPickerFieldExtension: FieldExtensionComponent_2< + string, + { + title?: string | undefined; + description?: string | undefined; + } +>; + +// @public +export const MyGroupsPickerFieldSchema: FieldSchema< + string, + { + title?: string | undefined; + description?: string | undefined; + } +>; + +// @public +export const MyGroupsPickerSchema: CustomFieldExtensionSchema_2; + +// @public +export type MyGroupsPickerUiOptions = + typeof MyGroupsPickerFieldSchema.uiOptionsType; + // @public export const OwnedEntityPickerFieldExtension: FieldExtensionComponent_2< string, diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index d7fe15edd9..f010329b14 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder", "description": "The Backstage plugin that helps you create new things", - "version": "1.13.2-next.2", + "version": "1.14.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -108,7 +108,6 @@ "@types/humanize-duration": "^3.18.1", "@types/json-schema": "^7.0.9", "@types/node": "^16.11.26", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/scaffolder/src/components/fields/MyGroupsPicker/MyGroupsPicker.test.tsx b/plugins/scaffolder/src/components/fields/MyGroupsPicker/MyGroupsPicker.test.tsx new file mode 100644 index 0000000000..099d6fa6ed --- /dev/null +++ b/plugins/scaffolder/src/components/fields/MyGroupsPicker/MyGroupsPicker.test.tsx @@ -0,0 +1,277 @@ +/* + * 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, waitFor } from '@testing-library/react'; +import { CatalogApi } from '@backstage/catalog-client'; +import { FieldProps } from '@rjsf/core'; +import { MyGroupsPicker } from './MyGroupsPicker'; +import { TestApiProvider } from '@backstage/test-utils'; +import { catalogApiRef } from '@backstage/plugin-catalog-react'; +import { Entity } from '@backstage/catalog-model'; +import { + ErrorApi, + IdentityApi, + errorApiRef, + identityApiRef, +} from '@backstage/core-plugin-api'; +import userEvent from '@testing-library/user-event'; + +// Create a mock IdentityApi +const mockIdentityApi: IdentityApi = { + getProfileInfo: () => + Promise.resolve({ + displayName: 'Bob', + email: 'bob@example.com', + picture: 'https://example.com/picture.jpg', + }), + getBackstageIdentity: () => + Promise.resolve({ + id: 'Bob', + idToken: 'token', + type: 'user', + userEntityRef: 'user:default/bob', + ownershipEntityRefs: ['group:default/group1', 'group:default/group2'], + }), + getCredentials: () => Promise.resolve({ token: 'token' }), + signOut: () => Promise.resolve(), +}; + +describe('', () => { + let entities: Entity[]; + const onChange = jest.fn(); + const schema = {}; + const required = false; + + const catalogApi: jest.Mocked = { + getEntities: jest.fn(async () => ({ items: entities })), + } as any; + + const mockErrorApi: jest.Mocked = { + post: jest.fn(), + error$: jest.fn(), + }; + + beforeEach(() => { + entities = [ + { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Group', + metadata: { name: 'group1' }, + spec: { members: ['Bob'] }, + }, + { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Group', + metadata: { name: 'group2' }, + spec: { members: ['Bob'] }, + }, + { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Group', + metadata: { name: 'group3' }, + spec: { members: ['Alice'] }, + }, + ]; + + onChange.mockClear(); + catalogApi.getEntities.mockClear(); + }); + + afterEach(() => { + jest.resetAllMocks(); + }); + + it('should only return the groups a user is part of and not the groups a user is not part of', async () => { + const userGroups = entities.filter( + entity => + entity.spec && + Array.isArray(entity.spec.members) && + entity.spec.members.includes('Bob'), + ); + + catalogApi.getEntities.mockResolvedValue({ items: userGroups }); + + const props = { + onChange, + schema, + required, + } as unknown as FieldProps; + + render( + + + , + ); + + await waitFor(() => + expect(catalogApi.getEntities).toHaveBeenCalledTimes(1), + ); + + expect(catalogApi.getEntities).toHaveBeenCalledWith({ + filter: { + kind: 'Group', + 'relations.hasMember': ['user:default/bob'], + }, + }); + + // Check that getEntities was set up to return the correct data + await expect(catalogApi.getEntities.mock.results[0].value).resolves.toEqual( + { + items: [ + { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Group', + metadata: { name: 'group1' }, + spec: { members: ['Bob'] }, + }, + { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Group', + metadata: { name: 'group2' }, + spec: { members: ['Bob'] }, + }, + ], + }, + ); + + await expect( + catalogApi.getEntities.mock.results[0].value, + ).resolves.not.toEqual( + expect.objectContaining({ + items: expect.arrayContaining([ + expect.objectContaining({ + metadata: { name: 'group3' }, + }), + ]), + }), + ); + }); + + it('should display the groups a user is part of and not display the groups a user is not part of', async () => { + const userGroups = entities.filter( + entity => + entity.spec && + Array.isArray(entity.spec.members) && + entity.spec.members.includes('Bob'), + ); + + catalogApi.getEntities.mockResolvedValue({ items: userGroups }); + + const props = { + onChange, + schema, + required, + } as unknown as FieldProps; + + const { queryByText, getByRole } = render( + + + , + ); + + await waitFor(() => + expect(catalogApi.getEntities).toHaveBeenCalledTimes(1), + ); + + // Simulate user input + const inputField = getByRole('combobox'); + await userEvent.click(inputField); + await userEvent.type(inputField, 'group'); + + // Wait for the dropdown elements to appear + await waitFor(() => { + const group1Element = queryByText('group1'); + const group2Element = queryByText('group2'); + expect(group1Element).toBeInTheDocument(); + expect(group2Element).toBeInTheDocument(); + }); + + // Assert that 'group3' is not rendered in the component + expect(queryByText('group3')).not.toBeInTheDocument(); + }); + + it('should call the onChange handler with the correct entityRef and and use a nice display name', async () => { + const userGroups = [ + { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Group', + metadata: { name: 'group1', title: 'My First Group' }, + spec: { members: ['Bob'] }, + }, + { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Group', + metadata: { name: 'group2', title: 'My Second Group' }, + spec: { members: ['Bob'] }, + }, + ]; + + catalogApi.getEntities.mockResolvedValue({ items: userGroups }); + + const props = { + onChange, + schema, + required, + } as unknown as FieldProps; + + const { getByRole } = render( + + + , + ); + + await waitFor(() => + expect(catalogApi.getEntities).toHaveBeenCalledTimes(1), + ); + + const inputField = getByRole('combobox'); + await userEvent.click(inputField); + await userEvent.type(inputField, 'group'); + + await waitFor(() => { + expect( + getByRole('option', { name: 'My First Group' }), + ).toBeInTheDocument(); + }); + + const option = getByRole('option', { name: 'My First Group' }); + await userEvent.click(option); + + await waitFor(() => { + expect(onChange).toHaveBeenCalledTimes(1); + expect(onChange).toHaveBeenCalledWith('group:default/group1'); + }); + }); +}); diff --git a/plugins/scaffolder/src/components/fields/MyGroupsPicker/MyGroupsPicker.tsx b/plugins/scaffolder/src/components/fields/MyGroupsPicker/MyGroupsPicker.tsx new file mode 100644 index 0000000000..fefdd4230c --- /dev/null +++ b/plugins/scaffolder/src/components/fields/MyGroupsPicker/MyGroupsPicker.tsx @@ -0,0 +1,114 @@ +/* + * 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 { + errorApiRef, + identityApiRef, + useApi, +} from '@backstage/core-plugin-api'; +import { TextField, FormControl } from '@material-ui/core'; +import { MyGroupsPickerProps, MyGroupsPickerSchema } from './schema'; +import { Autocomplete } from '@material-ui/lab'; +import { catalogApiRef } from '@backstage/plugin-catalog-react'; +import { NotFoundError } from '@backstage/errors'; +import useAsync from 'react-use/lib/useAsync'; +import { Entity, stringifyEntityRef } from '@backstage/catalog-model'; + +export { MyGroupsPickerSchema }; + +export const MyGroupsPicker = (props: MyGroupsPickerProps) => { + const { + schema: { title, description }, + required, + rawErrors, + onChange, + } = props; + + const identityApi = useApi(identityApiRef); + const catalogApi = useApi(catalogApiRef); + const errorApi = useApi(errorApiRef); + const [groups, setGroups] = useState< + { + label: string; + ref: string; + }[] + >([]); + const [selectedGroup, setSelectedGroup] = useState(null); + + useAsync(async () => { + const { userEntityRef } = await identityApi.getBackstageIdentity(); + + if (!userEntityRef) { + errorApi.post(new NotFoundError('No user entity ref found')); + return; + } + + const { items } = await catalogApi.getEntities({ + filter: { + kind: 'Group', + ['relations.hasMember']: [userEntityRef], + }, + }); + + const groupValues = items + .filter((e): e is Entity => Boolean(e)) + .map(item => ({ + label: item.metadata.title ?? item.metadata.name, + ref: stringifyEntityRef(item), + })); + + setGroups(groupValues); + }); + + const updateChange = ( + _: React.ChangeEvent<{}>, + value: { label: string; ref: string } | null, + ) => { + setSelectedGroup(value); + onChange(value?.ref ?? ''); + }; + + return ( + 0} + > + group.label} + renderInput={params => ( + + )} + /> + + ); +}; diff --git a/plugins/scaffolder/src/components/fields/MyGroupsPicker/index.ts b/plugins/scaffolder/src/components/fields/MyGroupsPicker/index.ts new file mode 100644 index 0000000000..00be19cf96 --- /dev/null +++ b/plugins/scaffolder/src/components/fields/MyGroupsPicker/index.ts @@ -0,0 +1,21 @@ +/* + * 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 { + MyGroupsPickerSchema, + type MyGroupsPickerUiOptions, + MyGroupsPickerFieldSchema, +} from './schema'; diff --git a/plugins/scaffolder/src/components/fields/MyGroupsPicker/schema.ts b/plugins/scaffolder/src/components/fields/MyGroupsPicker/schema.ts new file mode 100644 index 0000000000..d5f8af7c56 --- /dev/null +++ b/plugins/scaffolder/src/components/fields/MyGroupsPicker/schema.ts @@ -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 { z } from 'zod'; +import { makeFieldSchemaFromZod } from '../utils'; + +/** + * Field schema for the MyGroupsPicker. + * @public + */ + +export const MyGroupsPickerFieldSchema = makeFieldSchemaFromZod( + z.string(), + z.object({ + title: z.string().default('Group').describe('Group'), + description: z + .string() + .default('A group you are part of') + .describe('The group to which the entity belongs'), + }), +); + +/** + * UI options for the MyGroupsPicker. + * @public + */ + +export type MyGroupsPickerUiOptions = + typeof MyGroupsPickerFieldSchema.uiOptionsType; +/** + * Props for the MyGroupsPicker. + * @public + */ + +export type MyGroupsPickerProps = typeof MyGroupsPickerFieldSchema.type; + +/** + * Schema for the MyGroupsPicker. + * @public + */ + +export const MyGroupsPickerSchema = MyGroupsPickerFieldSchema.schema; diff --git a/plugins/scaffolder/src/components/fields/index.ts b/plugins/scaffolder/src/components/fields/index.ts index 8d86f601ce..7ee4448f6b 100644 --- a/plugins/scaffolder/src/components/fields/index.ts +++ b/plugins/scaffolder/src/components/fields/index.ts @@ -18,4 +18,5 @@ export * from './OwnerPicker'; export * from './RepoUrlPicker'; export * from './OwnedEntityPicker'; export * from './EntityTagsPicker'; +export * from './MyGroupsPicker'; export { type FieldSchema, makeFieldSchemaFromZod } from './utils'; diff --git a/plugins/scaffolder/src/extensions/default.ts b/plugins/scaffolder/src/extensions/default.ts index c6ab5276d0..013f242a12 100644 --- a/plugins/scaffolder/src/extensions/default.ts +++ b/plugins/scaffolder/src/extensions/default.ts @@ -39,6 +39,10 @@ import { OwnedEntityPicker, OwnedEntityPickerSchema, } from '../components/fields/OwnedEntityPicker/OwnedEntityPicker'; +import { + MyGroupsPicker, + MyGroupsPickerSchema, +} from '../components/fields/MyGroupsPicker/MyGroupsPicker'; export const DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS = [ { @@ -73,4 +77,9 @@ export const DEFAULT_SCAFFOLDER_FIELD_EXTENSIONS = [ name: 'OwnedEntityPicker', schema: OwnedEntityPickerSchema, }, + { + component: MyGroupsPicker, + name: 'MyGroupsPicker', + schema: MyGroupsPickerSchema, + }, ]; diff --git a/plugins/scaffolder/src/index.ts b/plugins/scaffolder/src/index.ts index bc56629a2c..ee91d2988c 100644 --- a/plugins/scaffolder/src/index.ts +++ b/plugins/scaffolder/src/index.ts @@ -27,6 +27,7 @@ export { EntityTagsPickerFieldExtension, OwnerPickerFieldExtension, OwnedEntityPickerFieldExtension, + MyGroupsPickerFieldExtension, RepoUrlPickerFieldExtension, ScaffolderPage, scaffolderPlugin, diff --git a/plugins/scaffolder/src/plugin.tsx b/plugins/scaffolder/src/plugin.tsx index dfe87a3780..ad9e70d843 100644 --- a/plugins/scaffolder/src/plugin.tsx +++ b/plugins/scaffolder/src/plugin.tsx @@ -64,6 +64,10 @@ import { actionsRouteRef, editRouteRef, } from './routes'; +import { + MyGroupsPicker, + MyGroupsPickerSchema, +} from './components/fields/MyGroupsPicker/MyGroupsPicker'; /** * The main plugin export for the scaffolder. @@ -158,6 +162,19 @@ export const OwnerPickerFieldExtension = scaffolderPlugin.provide( }), ); +/** + * A field extension for picking groups a user belongs to out of the catalog. + * + * @public + */ +export const MyGroupsPickerFieldExtension = scaffolderPlugin.provide( + createScaffolderFieldExtension({ + component: MyGroupsPicker, + name: 'MyGroupsPicker', + schema: MyGroupsPickerSchema, + }), +); + /** * The Router and main entrypoint to the Scaffolder plugin. * diff --git a/plugins/scaffolder/src/setupTests.ts b/plugins/scaffolder/src/setupTests.ts index 5499f969dc..8608e5b98e 100644 --- a/plugins/scaffolder/src/setupTests.ts +++ b/plugins/scaffolder/src/setupTests.ts @@ -15,7 +15,6 @@ */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; const { EventSourcePolyfill } = jest.requireMock('event-source-polyfill'); global.EventSource = EventSourcePolyfill; diff --git a/plugins/search-backend-module-catalog/CHANGELOG.md b/plugins/search-backend-module-catalog/CHANGELOG.md index 4b21a824f4..b2a9d07118 100644 --- a/plugins/search-backend-module-catalog/CHANGELOG.md +++ b/plugins/search-backend-module-catalog/CHANGELOG.md @@ -1,5 +1,103 @@ # @backstage/plugin-search-backend-module-catalog +## 0.1.4-next.1 + +### Patch Changes + +- 629cbd194a87: Use `coreServices.rootConfig` instead of `coreService.config` +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/plugin-search-backend-node@1.2.4-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/backend-tasks@0.5.5-next.1 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/plugin-catalog-common@1.0.15 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-search-common@1.2.5 + +## 0.1.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-node@1.2.4-next.0 + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/backend-tasks@0.5.5-next.0 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/plugin-catalog-common@1.0.15 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-search-common@1.2.5 + +## 0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/backend-tasks@0.5.4 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/plugin-catalog-common@1.0.15 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-search-backend-node@1.2.3 + - @backstage/plugin-search-common@1.2.5 + +## 0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/backend-tasks@0.5.4-next.0 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/plugin-catalog-common@1.0.15-next.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + - @backstage/plugin-search-backend-node@1.2.3-next.0 + - @backstage/plugin-search-common@1.2.5-next.0 + +## 0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/catalog-client@1.4.2 + - @backstage/catalog-model@1.4.0 + - @backstage/backend-plugin-api@0.5.3 + - @backstage/backend-tasks@0.5.3 + - @backstage/plugin-search-backend-node@1.2.2 + - @backstage/config@1.0.8 + - @backstage/plugin-catalog-common@1.0.14 + - @backstage/plugin-permission-common@0.7.6 + - @backstage/plugin-search-common@1.2.4 + +## 0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/backend-tasks@0.5.3-next.2 + - @backstage/catalog-client@1.4.2-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.14-next.1 + - @backstage/plugin-permission-common@0.7.6-next.0 + - @backstage/plugin-search-backend-node@1.2.2-next.2 + - @backstage/plugin-search-common@1.2.4-next.0 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-catalog/alpha-api-report.md b/plugins/search-backend-module-catalog/alpha-api-report.md index 70fae9ef93..7c6e91b6a1 100644 --- a/plugins/search-backend-module-catalog/alpha-api-report.md +++ b/plugins/search-backend-module-catalog/alpha-api-report.md @@ -15,7 +15,7 @@ export const searchModuleCatalogCollator: ( // @alpha export type SearchModuleCatalogCollatorOptions = Omit< DefaultCatalogCollatorFactoryOptions, - 'discovery' | 'tokenManager' + 'discovery' | 'tokenManager' | 'catalogClient' > & { schedule?: TaskScheduleDefinition; }; diff --git a/plugins/search-backend-module-catalog/package.json b/plugins/search-backend-module-catalog/package.json index 6f2341e8a8..37473ef04b 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.2-next.1", + "version": "0.1.4-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -26,6 +26,12 @@ "backstage": { "role": "backend-plugin-module" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/search-backend-module-catalog" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", @@ -43,6 +49,7 @@ "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", "@backstage/plugin-catalog-common": "workspace:^", + "@backstage/plugin-catalog-node": "workspace:^", "@backstage/plugin-permission-common": "workspace:^", "@backstage/plugin-search-backend-node": "workspace:^", "@backstage/plugin-search-common": "workspace:^" diff --git a/plugins/search-backend-module-catalog/src/alpha.ts b/plugins/search-backend-module-catalog/src/alpha.ts index c633dc71b2..cfd8c13539 100644 --- a/plugins/search-backend-module-catalog/src/alpha.ts +++ b/plugins/search-backend-module-catalog/src/alpha.ts @@ -30,6 +30,7 @@ import { DefaultCatalogCollatorFactory, DefaultCatalogCollatorFactoryOptions, } from '@backstage/plugin-search-backend-module-catalog'; +import { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha'; /** * @alpha @@ -37,14 +38,15 @@ import { */ export type SearchModuleCatalogCollatorOptions = Omit< DefaultCatalogCollatorFactoryOptions, - 'discovery' | 'tokenManager' + 'discovery' | 'tokenManager' | 'catalogClient' > & { schedule?: TaskScheduleDefinition; }; /** - * @alpha * Search backend module for the Catalog index. + * + * @alpha */ export const searchModuleCatalogCollator = createBackendModule( (options?: SearchModuleCatalogCollatorOptions) => ({ @@ -53,11 +55,12 @@ export const searchModuleCatalogCollator = createBackendModule( register(env) { env.registerInit({ deps: { - config: coreServices.config, + config: coreServices.rootConfig, discovery: coreServices.discovery, tokenManager: coreServices.tokenManager, scheduler: coreServices.scheduler, indexRegistry: searchIndexRegistryExtensionPoint, + catalog: catalogServiceRef, }, async init({ config, @@ -65,6 +68,7 @@ export const searchModuleCatalogCollator = createBackendModule( tokenManager, scheduler, indexRegistry, + catalog, }) { const defaultSchedule = { frequency: { minutes: 10 }, @@ -80,6 +84,7 @@ export const searchModuleCatalogCollator = createBackendModule( ...options, discovery, tokenManager, + catalogClient: catalog, }), }); }, diff --git a/plugins/search-backend-module-elasticsearch/CHANGELOG.md b/plugins/search-backend-module-elasticsearch/CHANGELOG.md index 73c7b136e9..2191fa05ff 100644 --- a/plugins/search-backend-module-elasticsearch/CHANGELOG.md +++ b/plugins/search-backend-module-elasticsearch/CHANGELOG.md @@ -1,5 +1,79 @@ # @backstage/plugin-search-backend-module-elasticsearch +## 1.3.3-next.1 + +### Patch Changes + +- 629cbd194a87: Use `coreServices.rootConfig` instead of `coreService.config` +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/plugin-search-backend-node@1.2.4-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/integration-aws-node@0.1.5 + - @backstage/config@1.0.8 + - @backstage/plugin-search-common@1.2.5 + +## 1.3.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-node@1.2.4-next.0 + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/config@1.0.8 + - @backstage/integration-aws-node@0.1.5 + - @backstage/plugin-search-common@1.2.5 + +## 1.3.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/config@1.0.8 + - @backstage/integration-aws-node@0.1.5 + - @backstage/plugin-search-backend-node@1.2.3 + - @backstage/plugin-search-common@1.2.5 + +## 1.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/config@1.0.8 + - @backstage/integration-aws-node@0.1.5-next.0 + - @backstage/plugin-search-backend-node@1.2.3-next.0 + - @backstage/plugin-search-common@1.2.5-next.0 + +## 1.3.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/integration-aws-node@0.1.4 + - @backstage/backend-plugin-api@0.5.3 + - @backstage/plugin-search-backend-node@1.2.2 + - @backstage/config@1.0.8 + - @backstage/plugin-search-common@1.2.4 + +## 1.3.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-aws-node@0.1.4-next.1 + - @backstage/backend-common@0.19.0-next.2 + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-search-backend-node@1.2.2-next.2 + - @backstage/plugin-search-common@1.2.4-next.0 + ## 1.3.1-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json index b533d6ed71..f119b1b28a 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.3.1-next.1", + "version": "1.3.3-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -26,6 +26,12 @@ "backstage": { "role": "backend-plugin-module" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/search-backend-module-elasticsearch" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", diff --git a/plugins/search-backend-module-elasticsearch/src/alpha.ts b/plugins/search-backend-module-elasticsearch/src/alpha.ts index 538124f004..7e1b95279a 100644 --- a/plugins/search-backend-module-elasticsearch/src/alpha.ts +++ b/plugins/search-backend-module-elasticsearch/src/alpha.ts @@ -48,7 +48,7 @@ export const searchModuleElasticsearchEngine = createBackendModule( deps: { searchEngineRegistry: searchEngineRegistryExtensionPoint, logger: coreServices.logger, - config: coreServices.config, + config: coreServices.rootConfig, }, async init({ searchEngineRegistry, logger, config }) { const searchEngine = await ElasticSearchSearchEngine.fromConfig({ diff --git a/plugins/search-backend-module-explore/CHANGELOG.md b/plugins/search-backend-module-explore/CHANGELOG.md index 4f31f7dcba..fc9fedf290 100644 --- a/plugins/search-backend-module-explore/CHANGELOG.md +++ b/plugins/search-backend-module-explore/CHANGELOG.md @@ -1,5 +1,98 @@ # @backstage/plugin-search-backend-module-explore +## 0.1.4-next.1 + +### Patch Changes + +- 629cbd194a87: Use `coreServices.rootConfig` instead of `coreService.config` +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/plugin-search-backend-node@1.2.4-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/backend-tasks@0.5.5-next.1 + - @backstage/config@1.0.8 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.5 + +## 0.1.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-node@1.2.4-next.0 + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/backend-tasks@0.5.5-next.0 + - @backstage/config@1.0.8 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.5 + +## 0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/backend-tasks@0.5.4 + - @backstage/config@1.0.8 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-backend-node@1.2.3 + - @backstage/plugin-search-common@1.2.5 + +## 0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/backend-tasks@0.5.4-next.0 + - @backstage/config@1.0.8 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-backend-node@1.2.3-next.0 + - @backstage/plugin-search-common@1.2.5-next.0 + +## 0.1.2 + +### Patch Changes + +- a5baeea2cb87: Allows for an optional `tokenManager` to authenticate requests from the collator to the explore backend. For example: + + ```diff + indexBuilder.addCollator({ + schedule: every10MinutesSchedule, + factory: ToolDocumentCollatorFactory.fromConfig(env.config, { + discovery: env.discovery, + logger: env.logger, + + tokenManager: env.tokenManager, + }), + }); + ``` + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/backend-plugin-api@0.5.3 + - @backstage/backend-tasks@0.5.3 + - @backstage/plugin-search-backend-node@1.2.2 + - @backstage/config@1.0.8 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-common@1.2.4 + +## 0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/backend-tasks@0.5.3-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-explore-common@0.0.1 + - @backstage/plugin-search-backend-node@1.2.2-next.2 + - @backstage/plugin-search-common@1.2.4-next.0 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-explore/alpha-api-report.md b/plugins/search-backend-module-explore/alpha-api-report.md index cf32b59dd3..7b0f2658d6 100644 --- a/plugins/search-backend-module-explore/alpha-api-report.md +++ b/plugins/search-backend-module-explore/alpha-api-report.md @@ -5,7 +5,6 @@ ```ts import { BackendFeature } from '@backstage/backend-plugin-api'; import { TaskScheduleDefinition } from '@backstage/backend-tasks'; -import { ToolDocumentCollatorFactoryOptions } from '@backstage/plugin-search-backend-module-explore'; // @alpha export const searchModuleExploreCollator: ( @@ -13,10 +12,7 @@ export const searchModuleExploreCollator: ( ) => BackendFeature; // @alpha -export type SearchModuleExploreCollatorOptions = Omit< - ToolDocumentCollatorFactoryOptions, - 'logger' | 'discovery' -> & { +export type SearchModuleExploreCollatorOptions = { schedule?: TaskScheduleDefinition; }; diff --git a/plugins/search-backend-module-explore/package.json b/plugins/search-backend-module-explore/package.json index 50714230ac..13c6ce474c 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.2-next.1", + "version": "0.1.4-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -26,6 +26,12 @@ "backstage": { "role": "backend-plugin-module" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/search-backend-module-explore" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", diff --git a/plugins/search-backend-module-explore/src/alpha.ts b/plugins/search-backend-module-explore/src/alpha.ts index f13c3c2406..fadbcda3a5 100644 --- a/plugins/search-backend-module-explore/src/alpha.ts +++ b/plugins/search-backend-module-explore/src/alpha.ts @@ -27,25 +27,21 @@ import { TaskScheduleDefinition } from '@backstage/backend-tasks'; import { loggerToWinstonLogger } from '@backstage/backend-common'; import { searchIndexRegistryExtensionPoint } from '@backstage/plugin-search-backend-node/alpha'; -import { - ToolDocumentCollatorFactory, - ToolDocumentCollatorFactoryOptions, -} from '@backstage/plugin-search-backend-module-explore'; +import { ToolDocumentCollatorFactory } from '@backstage/plugin-search-backend-module-explore'; /** - * @alpha * Options for {@link searchModuleExploreCollator}. + * + * @alpha */ -export type SearchModuleExploreCollatorOptions = Omit< - ToolDocumentCollatorFactoryOptions, - 'logger' | 'discovery' -> & { +export type SearchModuleExploreCollatorOptions = { schedule?: TaskScheduleDefinition; }; /** - * @alpha * Search backend module for the Explore index. + * + * @alpha */ export const searchModuleExploreCollator = createBackendModule( (options?: SearchModuleExploreCollatorOptions) => ({ @@ -54,13 +50,21 @@ export const searchModuleExploreCollator = createBackendModule( register(env) { env.registerInit({ deps: { - config: coreServices.config, + config: coreServices.rootConfig, logger: coreServices.logger, discovery: coreServices.discovery, scheduler: coreServices.scheduler, + tokenManager: coreServices.tokenManager, indexRegistry: searchIndexRegistryExtensionPoint, }, - async init({ config, logger, discovery, scheduler, indexRegistry }) { + async init({ + config, + logger, + discovery, + scheduler, + indexRegistry, + tokenManager, + }) { const defaultSchedule = { frequency: { minutes: 10 }, timeout: { minutes: 15 }, @@ -72,9 +76,9 @@ export const searchModuleExploreCollator = createBackendModule( options?.schedule ?? defaultSchedule, ), factory: ToolDocumentCollatorFactory.fromConfig(config, { - ...options, discovery, logger: loggerToWinstonLogger(logger), + tokenManager, }), }); }, diff --git a/plugins/search-backend-module-pg/CHANGELOG.md b/plugins/search-backend-module-pg/CHANGELOG.md index ebc714aa35..3bc95aaa2d 100644 --- a/plugins/search-backend-module-pg/CHANGELOG.md +++ b/plugins/search-backend-module-pg/CHANGELOG.md @@ -1,5 +1,74 @@ # @backstage/plugin-search-backend-module-pg +## 0.5.9-next.1 + +### Patch Changes + +- 629cbd194a87: Use `coreServices.rootConfig` instead of `coreService.config` +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/plugin-search-backend-node@1.2.4-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/config@1.0.8 + - @backstage/plugin-search-common@1.2.5 + +## 0.5.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-node@1.2.4-next.0 + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/config@1.0.8 + - @backstage/plugin-search-common@1.2.5 + +## 0.5.8 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/config@1.0.8 + - @backstage/plugin-search-backend-node@1.2.3 + - @backstage/plugin-search-common@1.2.5 + +## 0.5.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/config@1.0.8 + - @backstage/plugin-search-backend-node@1.2.3-next.0 + - @backstage/plugin-search-common@1.2.5-next.0 + +## 0.5.7 + +### Patch Changes + +- 3c09e8d3cb0c: Updated Postgres search query filter in DatabaseDocumentStore to support field value search in array. +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/backend-plugin-api@0.5.3 + - @backstage/plugin-search-backend-node@1.2.2 + - @backstage/config@1.0.8 + - @backstage/plugin-search-common@1.2.4 + +## 0.5.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-search-backend-node@1.2.2-next.2 + - @backstage/plugin-search-common@1.2.4-next.0 + ## 0.5.7-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json index c208376d46..63c8061fea 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.7-next.1", + "version": "0.5.9-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -26,6 +26,12 @@ "backstage": { "role": "backend-plugin-module" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/search-backend-module-pg" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", diff --git a/plugins/search-backend-module-pg/src/alpha.ts b/plugins/search-backend-module-pg/src/alpha.ts index e3e0087957..71d62e7927 100644 --- a/plugins/search-backend-module-pg/src/alpha.ts +++ b/plugins/search-backend-module-pg/src/alpha.ts @@ -32,7 +32,7 @@ export const searchModulePostgresEngine = createBackendModule({ deps: { searchEngineRegistry: searchEngineRegistryExtensionPoint, database: coreServices.database, - config: coreServices.config, + config: coreServices.rootConfig, }, async init({ searchEngineRegistry, database, config }) { searchEngineRegistry.setSearchEngine( diff --git a/plugins/search-backend-module-techdocs/CHANGELOG.md b/plugins/search-backend-module-techdocs/CHANGELOG.md index f3cd4ee67a..6fc2307106 100644 --- a/plugins/search-backend-module-techdocs/CHANGELOG.md +++ b/plugins/search-backend-module-techdocs/CHANGELOG.md @@ -1,5 +1,109 @@ # @backstage/plugin-search-backend-module-techdocs +## 0.1.4-next.1 + +### Patch Changes + +- 629cbd194a87: Use `coreServices.rootConfig` instead of `coreService.config` +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/plugin-search-backend-node@1.2.4-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/backend-tasks@0.5.5-next.1 + - @backstage/plugin-techdocs-node@1.7.4-next.1 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/plugin-catalog-common@1.0.15 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-search-common@1.2.5 + +## 0.1.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-node@1.2.4-next.0 + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/backend-tasks@0.5.5-next.0 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/plugin-catalog-common@1.0.15 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-search-common@1.2.5 + - @backstage/plugin-techdocs-node@1.7.4-next.0 + +## 0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/backend-tasks@0.5.4 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/plugin-catalog-common@1.0.15 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-search-backend-node@1.2.3 + - @backstage/plugin-search-common@1.2.5 + - @backstage/plugin-techdocs-node@1.7.3 + +## 0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/backend-tasks@0.5.4-next.0 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/plugin-catalog-common@1.0.15-next.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + - @backstage/plugin-search-backend-node@1.2.3-next.0 + - @backstage/plugin-search-common@1.2.5-next.0 + - @backstage/plugin-techdocs-node@1.7.3-next.0 + +## 0.1.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/catalog-client@1.4.2 + - @backstage/plugin-techdocs-node@1.7.2 + - @backstage/catalog-model@1.4.0 + - @backstage/backend-plugin-api@0.5.3 + - @backstage/backend-tasks@0.5.3 + - @backstage/plugin-search-backend-node@1.2.2 + - @backstage/config@1.0.8 + - @backstage/plugin-catalog-common@1.0.14 + - @backstage/plugin-permission-common@0.7.6 + - @backstage/plugin-search-common@1.2.4 + +## 0.1.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/plugin-techdocs-node@1.7.2-next.2 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/backend-tasks@0.5.3-next.2 + - @backstage/catalog-client@1.4.2-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-catalog-common@1.0.14-next.1 + - @backstage/plugin-permission-common@0.7.6-next.0 + - @backstage/plugin-search-backend-node@1.2.2-next.2 + - @backstage/plugin-search-common@1.2.4-next.0 + ## 0.1.2-next.1 ### Patch Changes diff --git a/plugins/search-backend-module-techdocs/alpha-api-report.md b/plugins/search-backend-module-techdocs/alpha-api-report.md index 71ce09b744..0eac010b4c 100644 --- a/plugins/search-backend-module-techdocs/alpha-api-report.md +++ b/plugins/search-backend-module-techdocs/alpha-api-report.md @@ -15,7 +15,7 @@ export const searchModuleTechDocsCollator: ( // @alpha export type SearchModuleTechDocsCollatorOptions = Omit< TechDocsCollatorFactoryOptions, - 'logger' | 'discovery' | 'tokenManager' + 'logger' | 'discovery' | 'tokenManager' | 'catalogClient' > & { schedule?: TaskScheduleDefinition; }; diff --git a/plugins/search-backend-module-techdocs/package.json b/plugins/search-backend-module-techdocs/package.json index da3f28a2a5..ffc9d0ff4f 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.2-next.1", + "version": "0.1.4-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -26,6 +26,12 @@ "backstage": { "role": "backend-plugin-module" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/search-backend-module-techdocs" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", @@ -43,6 +49,7 @@ "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", "@backstage/plugin-catalog-common": "workspace:^", + "@backstage/plugin-catalog-node": "workspace:^", "@backstage/plugin-permission-common": "workspace:^", "@backstage/plugin-search-backend-node": "workspace:^", "@backstage/plugin-search-common": "workspace:^", diff --git a/plugins/search-backend-module-techdocs/src/alpha.ts b/plugins/search-backend-module-techdocs/src/alpha.ts index 1432cc88fb..5d82b6804f 100644 --- a/plugins/search-backend-module-techdocs/src/alpha.ts +++ b/plugins/search-backend-module-techdocs/src/alpha.ts @@ -26,6 +26,7 @@ import { import { TaskScheduleDefinition } from '@backstage/backend-tasks'; import { loggerToWinstonLogger } from '@backstage/backend-common'; import { searchIndexRegistryExtensionPoint } from '@backstage/plugin-search-backend-node/alpha'; +import { catalogServiceRef } from '@backstage/plugin-catalog-node/alpha'; import { DefaultTechDocsCollatorFactory, @@ -38,7 +39,7 @@ import { */ export type SearchModuleTechDocsCollatorOptions = Omit< TechDocsCollatorFactoryOptions, - 'logger' | 'discovery' | 'tokenManager' + 'logger' | 'discovery' | 'tokenManager' | 'catalogClient' > & { schedule?: TaskScheduleDefinition; }; @@ -54,11 +55,12 @@ export const searchModuleTechDocsCollator = createBackendModule( register(env) { env.registerInit({ deps: { - config: coreServices.config, + config: coreServices.rootConfig, logger: coreServices.logger, discovery: coreServices.discovery, tokenManager: coreServices.tokenManager, scheduler: coreServices.scheduler, + catalog: catalogServiceRef, indexRegistry: searchIndexRegistryExtensionPoint, }, async init({ @@ -67,6 +69,7 @@ export const searchModuleTechDocsCollator = createBackendModule( discovery, tokenManager, scheduler, + catalog, indexRegistry, }) { const defaultSchedule = { @@ -84,6 +87,7 @@ export const searchModuleTechDocsCollator = createBackendModule( discovery, tokenManager, logger: loggerToWinstonLogger(logger), + catalogClient: catalog, }), }); }, diff --git a/plugins/search-backend-node/CHANGELOG.md b/plugins/search-backend-node/CHANGELOG.md index 855f3fd471..a8b8b930ee 100644 --- a/plugins/search-backend-node/CHANGELOG.md +++ b/plugins/search-backend-node/CHANGELOG.md @@ -1,5 +1,85 @@ # @backstage/plugin-search-backend-node +## 1.2.4-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/backend-tasks@0.5.5-next.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-search-common@1.2.5 + +## 1.2.4-next.0 + +### Patch Changes + +- e3e9bc10298b: Fix Lunr search engine highlight by ignoring invalid metadata positions. +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/backend-tasks@0.5.5-next.0 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-search-common@1.2.5 + +## 1.2.3 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-common@0.19.1 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/backend-tasks@0.5.4 + - @backstage/config@1.0.8 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-search-common@1.2.5 + +## 1.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/backend-tasks@0.5.4-next.0 + - @backstage/config@1.0.8 + - @backstage/plugin-permission-common@0.7.7-next.0 + - @backstage/plugin-search-common@1.2.5-next.0 + +## 1.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/errors@1.2.0 + - @backstage/backend-plugin-api@0.5.3 + - @backstage/backend-tasks@0.5.3 + - @backstage/config@1.0.8 + - @backstage/plugin-permission-common@0.7.6 + - @backstage/plugin-search-common@1.2.4 + +## 1.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/backend-tasks@0.5.3-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.2.0-next.0 + - @backstage/plugin-permission-common@0.7.6-next.0 + - @backstage/plugin-search-common@1.2.4-next.0 + ## 1.2.2-next.1 ### Patch Changes diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json index 36b029edfb..842c636bba 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.2-next.1", + "version": "1.2.4-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -26,6 +26,12 @@ "backstage": { "role": "node-library" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/search-backend-node" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", diff --git a/plugins/search-backend-node/src/engines/LunrSearchEngine.test.ts b/plugins/search-backend-node/src/engines/LunrSearchEngine.test.ts index 27cd65d63b..55c18cd6fc 100644 --- a/plugins/search-backend-node/src/engines/LunrSearchEngine.test.ts +++ b/plugins/search-backend-node/src/engines/LunrSearchEngine.test.ts @@ -1145,6 +1145,35 @@ describe('parseHighlightFields', () => { bar: 'ghi <>jkl', }); }); + + it('should filter out non array positions', () => { + expect( + parseHighlightFields({ + preTag: '<>', + postTag: '', + doc: { foo: 'abc def', bar: 'ghi jkl' }, + positionMetadata: { + test: { + foo: { + // invalid position item + position: [null as unknown as number[]], + }, + }, + anotherTest: { + foo: { + position: [[4, 3]], + }, + bar: { + position: [[4, 3]], + }, + }, + }, + }), + ).toEqual({ + foo: 'abc <>def', + bar: 'ghi <>jkl', + }); + }); }); describe('stopword testing', () => { diff --git a/plugins/search-backend-node/src/engines/LunrSearchEngine.ts b/plugins/search-backend-node/src/engines/LunrSearchEngine.ts index b69b5ea863..ae5a541e81 100644 --- a/plugins/search-backend-node/src/engines/LunrSearchEngine.ts +++ b/plugins/search-backend-node/src/engines/LunrSearchEngine.ts @@ -309,8 +309,13 @@ export function parseHighlightFields({ const highlightFieldPositions = Object.values(positionMetadata).reduce( (fieldPositions, metadata) => { Object.keys(metadata).map(fieldKey => { - fieldPositions[fieldKey] = fieldPositions[fieldKey] ?? []; - fieldPositions[fieldKey].push(...metadata[fieldKey].position); + const validFieldMetadataPositions = metadata[ + fieldKey + ]?.position?.filter(position => Array.isArray(position)); + if (validFieldMetadataPositions.length) { + fieldPositions[fieldKey] = fieldPositions[fieldKey] ?? []; + fieldPositions[fieldKey].push(...validFieldMetadataPositions); + } }); return fieldPositions; diff --git a/plugins/search-backend/CHANGELOG.md b/plugins/search-backend/CHANGELOG.md index a6d6806159..db52ff9e55 100644 --- a/plugins/search-backend/CHANGELOG.md +++ b/plugins/search-backend/CHANGELOG.md @@ -1,5 +1,111 @@ # @backstage/plugin-search-backend +## 1.4.0-next.1 + +### Patch Changes + +- 629cbd194a87: Use `coreServices.rootConfig` instead of `coreService.config` +- 12a8c94eda8d: Add package repository and homepage metadata +- 951ab6c9db58: Add missing `configSchema` to package.json +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/backend-openapi-utils@0.0.3-next.1 + - @backstage/plugin-search-backend-node@1.2.4-next.1 + - @backstage/plugin-auth-node@0.2.17-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/plugin-permission-node@0.7.11-next.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-search-common@1.2.5 + +## 1.4.0-next.0 + +### Minor Changes + +- ebeb77586975: Now performs request validation based on OpenAPI schema through `@backstage/backend-openapi-utils`. Error responses for invalid input, like `"a"` instead of a number, may have changed. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-openapi-utils@0.0.3-next.0 + - @backstage/plugin-search-backend-node@1.2.4-next.0 + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.17-next.0 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-permission-node@0.7.11-next.0 + - @backstage/plugin-search-common@1.2.5 + +## 1.3.3 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-common@0.19.1 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.16 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-permission-node@0.7.10 + - @backstage/plugin-search-backend-node@1.2.3 + - @backstage/plugin-search-common@1.2.5 + +## 1.3.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.16-next.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + - @backstage/plugin-permission-node@0.7.10-next.0 + - @backstage/plugin-search-backend-node@1.2.3-next.0 + - @backstage/plugin-search-common@1.2.5-next.0 + +## 1.3.2 + +### Patch Changes + +- ee411e7c2623: Update OpenAPI specs to be in line with linting standards. +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/types@1.1.0 + - @backstage/errors@1.2.0 + - @backstage/backend-plugin-api@0.5.3 + - @backstage/plugin-auth-node@0.2.15 + - @backstage/plugin-permission-node@0.7.9 + - @backstage/plugin-search-backend-node@1.2.2 + - @backstage/config@1.0.8 + - @backstage/plugin-permission-common@0.7.6 + - @backstage/plugin-search-common@1.2.4 + +## 1.3.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.2.0-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.15-next.2 + - @backstage/plugin-permission-common@0.7.6-next.0 + - @backstage/plugin-permission-node@0.7.9-next.2 + - @backstage/plugin-search-backend-node@1.2.2-next.2 + - @backstage/plugin-search-common@1.2.4-next.0 + ## 1.3.2-next.1 ### Patch Changes diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json index e416d22aa3..167e4d835a 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.2-next.1", + "version": "1.4.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -26,6 +26,12 @@ "backstage": { "role": "backend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/search-backend" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", @@ -37,6 +43,7 @@ }, "dependencies": { "@backstage/backend-common": "workspace:^", + "@backstage/backend-openapi-utils": "workspace:^", "@backstage/backend-plugin-api": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", @@ -57,7 +64,6 @@ "zod": "^3.21.4" }, "devDependencies": { - "@backstage/backend-openapi-utils": "workspace:^", "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", "@types/supertest": "^2.0.8", @@ -66,5 +72,6 @@ "files": [ "dist", "config.d.ts" - ] + ], + "configSchema": "config.d.ts" } diff --git a/plugins/search-backend/src/alpha.ts b/plugins/search-backend/src/alpha.ts index 0c14852875..59394ab7a6 100644 --- a/plugins/search-backend/src/alpha.ts +++ b/plugins/search-backend/src/alpha.ts @@ -93,7 +93,7 @@ export const searchPlugin = createBackendPlugin({ env.registerInit({ deps: { logger: coreServices.logger, - config: coreServices.config, + config: coreServices.rootConfig, permissions: coreServices.permissions, http: coreServices.httpRouter, searchIndexService: searchIndexServiceRef, diff --git a/plugins/search-backend/src/schema/openapi.generated.ts b/plugins/search-backend/src/schema/openapi.generated.ts index b8f5f5b35e..9bf2e08d3e 100644 --- a/plugins/search-backend/src/schema/openapi.generated.ts +++ b/plugins/search-backend/src/schema/openapi.generated.ts @@ -17,8 +17,9 @@ // ****************************************************************** // * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * // ****************************************************************** +import { createValidatedOpenApiRouter } from '@backstage/backend-openapi-utils'; -export default { +export const spec = { openapi: '3.0.3', info: { title: '@backstage/plugin-search-backend', @@ -61,6 +62,7 @@ export default { '/query': { get: { operationId: 'Query', + description: 'Query documents with a given filter.', responses: { '200': { description: 'Ok', @@ -209,3 +211,6 @@ export default { }, }, } as const; +export const createOpenApiRouter = async ( + options?: Parameters['1'], +) => createValidatedOpenApiRouter(spec, options); diff --git a/plugins/search-backend/src/schema/openapi.yaml b/plugins/search-backend/src/schema/openapi.yaml index e7f44c9f11..4684ca58d8 100644 --- a/plugins/search-backend/src/schema/openapi.yaml +++ b/plugins/search-backend/src/schema/openapi.yaml @@ -33,6 +33,7 @@ paths: /query: get: operationId: Query + description: Query documents with a given filter. responses: '200': description: Ok diff --git a/plugins/search-backend/src/service/router.test.ts b/plugins/search-backend/src/service/router.test.ts index b4772dd62d..7ec8603307 100644 --- a/plugins/search-backend/src/service/router.test.ts +++ b/plugins/search-backend/src/service/router.test.ts @@ -21,7 +21,6 @@ import { IndexBuilder } from '@backstage/plugin-search-backend-node'; import { SearchEngine } from '@backstage/plugin-search-common'; import express from 'express'; import request from 'supertest'; - import { createRouter } from './router'; const mockPermissionEvaluator: PermissionEvaluator = { diff --git a/plugins/search-backend/src/service/router.ts b/plugins/search-backend/src/service/router.ts index 3643eec38a..dca632dfaf 100644 --- a/plugins/search-backend/src/service/router.ts +++ b/plugins/search-backend/src/service/router.ts @@ -15,7 +15,6 @@ */ import express from 'express'; -import Router from 'express-promise-router'; import { Logger } from 'winston'; import { z } from 'zod'; import { errorHandler } from '@backstage/backend-common'; @@ -35,8 +34,7 @@ import { } from '@backstage/plugin-search-common'; import { SearchEngine } from '@backstage/plugin-search-common'; import { AuthorizedSearchEngine } from './AuthorizedSearchEngine'; -import type { ApiRouter } from '@backstage/backend-openapi-utils'; -import spec from '../schema/openapi.generated'; +import { createOpenApiRouter } from '../schema/openapi.generated'; const jsonObjectSchema: z.ZodSchema = z.lazy(() => { const jsonValueSchema: z.ZodSchema = z.lazy(() => @@ -73,6 +71,7 @@ const allowedLocationProtocols = ['http:', 'https:']; export async function createRouter( options: RouterOptions, ): Promise { + const router = await createOpenApiRouter(); const { engine: inputEngine, types, permissions, config, logger } = options; const maxPageLimit = @@ -86,14 +85,7 @@ export async function createRouter( .optional(), pageCursor: z.string().optional(), pageLimit: z - .string() - .transform(pageLimit => parseInt(pageLimit, 10)) - .refine( - pageLimit => !isNaN(pageLimit), - pageLimit => ({ - message: `The page limit "${pageLimit}" is not a number`, - }), - ) + .number() .refine( pageLimit => pageLimit <= maxPageLimit, pageLimit => ({ @@ -148,7 +140,6 @@ export async function createRouter( })), }); - const router = Router() as ApiRouter; router.get('/query', async (req, res) => { const parseResult = requestSchema.passthrough().safeParse(req.query); diff --git a/plugins/search-common/CHANGELOG.md b/plugins/search-common/CHANGELOG.md index 8233e22e40..f4f007ca57 100644 --- a/plugins/search-common/CHANGELOG.md +++ b/plugins/search-common/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-search-common +## 1.2.5 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.1.0 + - @backstage/plugin-permission-common@0.7.7 + +## 1.2.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.1.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + +## 1.2.4 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.1.0 + - @backstage/plugin-permission-common@0.7.6 + ## 1.2.4-next.0 ### Patch Changes diff --git a/plugins/search-common/package.json b/plugins/search-common/package.json index 3b35995edb..d8b7e7bef9 100644 --- a/plugins/search-common/package.json +++ b/plugins/search-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-common", "description": "Common functionalities for Search, to be shared between various search-enabled plugins", - "version": "1.2.4-next.0", + "version": "1.2.5", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/plugins/search-react/CHANGELOG.md b/plugins/search-react/CHANGELOG.md index b1d11dd30c..136a7ad4a4 100644 --- a/plugins/search-react/CHANGELOG.md +++ b/plugins/search-react/CHANGELOG.md @@ -1,5 +1,89 @@ # @backstage/plugin-search-react +## 1.6.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/theme@0.4.1 + - @backstage/types@1.1.0 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-search-common@1.2.5 + +## 1.6.3 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/types@1.1.0 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-search-common@1.2.5 + +## 1.6.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/types@1.1.0 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-search-common@1.2.5-next.0 + +## 1.6.3-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + +## 1.6.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.3-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/types@1.1.0 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-search-common@1.2.5-next.0 + +## 1.6.2 + +### Patch Changes + +- 0134c1aa4f36: Fix accessibility issue in `SearchCheckbox` component, making it possible to use the field via keyboard. +- 2f660eb573cc: Fix SearchBar styles & update StoryBook stories for custom styles for `notchedOutline` class. +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/types@1.1.0 + - @backstage/theme@0.4.0 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-search-common@1.2.4 + +## 1.6.2-next.3 + +### Patch Changes + +- 0134c1aa4f36: Fix accessibility issue in `SearchCheckbox` component, making it possible to use the field via keyboard. +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/types@1.0.2 + - @backstage/version-bridge@1.0.4 + - @backstage/plugin-search-common@1.2.4-next.0 + ## 1.6.1-next.2 ### Patch Changes @@ -40,7 +124,7 @@ - 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. + Material UI'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. @@ -86,7 +170,7 @@ - 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. + Material UI'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/plugins/search-react/package.json b/plugins/search-react/package.json index 3f8ea61f02..787d24bc2a 100644 --- a/plugins/search-react/package.json +++ b/plugins/search-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-react", - "version": "1.6.1-next.2", + "version": "1.6.4-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-react/src/components/SearchBar/SearchBar.test.tsx b/plugins/search-react/src/components/SearchBar/SearchBar.test.tsx index e4859861d9..9b4664aceb 100644 --- a/plugins/search-react/src/components/SearchBar/SearchBar.test.tsx +++ b/plugins/search-react/src/components/SearchBar/SearchBar.test.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { screen, render, waitFor, act } from '@testing-library/react'; +import { screen, waitFor, act } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { configApiRef, analyticsApiRef } from '@backstage/core-plugin-api'; import { ConfigReader } from '@backstage/core-app-api'; @@ -41,16 +41,23 @@ const createInitialState = ({ }); describe('SearchBar', () => { + const user = userEvent.setup({ delay: null }); + const query = jest.fn().mockResolvedValue({ results: [] }); - const analyticsApiMock = new MockAnalyticsApi(); + const searchApiMock = { query }; const configApiMock = new ConfigReader({ - app: { title: 'Mock title' }, + app: { + title: 'Mock title', + analytics: { + ga: { + trackingId: 'xyz123', + }, + }, + }, }); - const searchApiMock = { query }; - beforeEach(() => { jest.clearAllMocks(); }); @@ -64,20 +71,20 @@ describe('SearchBar', () => { ]} > - + , ); - await waitFor(() => { - expect(screen.getByLabelText('Search')).toBeInTheDocument(); - }); + await waitFor(() => + expect(screen.getByLabelText('Search')).toBeInTheDocument(), + ); }); it('Renders with custom label', async () => { const label = 'label'; - const result = await renderWithEffects( + await renderWithEffects( { ]} > - + , ); - await waitFor(() => { - expect(result.getByLabelText(label)).toBeInTheDocument(); - }); + await waitFor(() => + expect(screen.getByLabelText(label)).toBeInTheDocument(), + ); }); it('Renders with custom placeholder', async () => { @@ -106,20 +113,20 @@ describe('SearchBar', () => { ]} > - + , ); - await waitFor(() => { - expect(screen.getByPlaceholderText(placeholder)).toBeInTheDocument(); - }); + await waitFor(() => + expect(screen.getByPlaceholderText(placeholder)).toBeInTheDocument(), + ); }); it('Renders based on initial search', async () => { const term = 'term'; - render( + await renderWithEffects( { ]} > - + , ); - await waitFor(() => { - expect(screen.getByRole('textbox', { name: 'Search' })).toHaveValue(term); - }); + await waitFor(() => + expect(screen.getByLabelText('Search')).toHaveValue(term), + ); }); it('Updates term state when text is entered', async () => { jest.useFakeTimers(); - const user = userEvent.setup({ delay: null }); await renderWithEffects( { , ); - const textbox = screen.getByRole('textbox', { name: 'Search' }); + const textbox = screen.getByLabelText('Search'); const value = 'value'; @@ -164,14 +170,13 @@ describe('SearchBar', () => { jest.advanceTimersByTime(200); }); - await waitFor(() => { - expect(textbox).toHaveValue(value); - }); + await waitFor(() => expect(textbox).toHaveValue(value)); expect(query).toHaveBeenLastCalledWith( expect.objectContaining({ term: value }), ); + jest.runAllTimers(); jest.useRealTimers(); }); @@ -186,22 +191,18 @@ describe('SearchBar', () => { ]} > - + , ); - const textbox = screen.getByRole('textbox', { name: 'Search' }); + const textbox = screen.getByLabelText('Search'); - await waitFor(() => { - expect(textbox).toHaveValue(term); - }); + await waitFor(() => expect(textbox).toHaveValue(term)); - await userEvent.click(screen.getByRole('button', { name: 'Clear' })); + await user.click(screen.getByLabelText('Clear')); - await waitFor(() => { - expect(textbox).toHaveValue(''); - }); + await waitFor(() => expect(textbox).toHaveValue('')); expect(query).toHaveBeenLastCalledWith( expect.objectContaining({ term: '' }), @@ -219,22 +220,20 @@ describe('SearchBar', () => { ]} > - + , ); - await waitFor(() => { - expect( - screen.queryByRole('button', { name: 'Clear' }), - ).not.toBeInTheDocument(); - }); + await waitFor(() => + expect(screen.queryByLabelText('Clear')).not.toBeInTheDocument(), + ); }); it('Adheres to provided debounceTime', async () => { jest.useFakeTimers(); - const user = userEvent.setup({ delay: null }); - const debounceTime = 600; + + const debounceTime = 100; await renderWithEffects( { , ); - const textbox = await screen.findByRole('textbox', { name: 'Search' }); + const textbox = screen.getByLabelText('Search'); const value = 'value'; await user.type(textbox, value); - await waitFor(() => { + await waitFor(() => expect(query).not.toHaveBeenLastCalledWith( expect.objectContaining({ term: value }), - ); - }); + ), + ); act(() => { jest.advanceTimersByTime(debounceTime); }); - await waitFor(() => { - expect(textbox).toHaveValue(value); - }); + await waitFor(() => expect(textbox).toHaveValue(value)); expect(query).toHaveBeenLastCalledWith( expect.objectContaining({ term: value }), ); + jest.runAllTimers(); jest.useRealTimers(); }); - it('does not capture analytics event if not enabled in app', async () => { - jest.useFakeTimers(); - const user = userEvent.setup({ delay: null }); + it('Does not capture analytics event if not enabled in app', async () => { + const analyticsApiMock = new MockAnalyticsApi(); await renderWithEffects( { ]} > - + , ); - const textbox = await screen.findByRole('textbox', { name: 'Search' }); + const textbox = screen.getByLabelText('Search'); const value = 'value'; await user.type(textbox, value); - act(() => { - jest.advanceTimersByTime(200); - }); - - await waitFor(() => { - expect(textbox).toHaveValue(value); - }); + await waitFor(() => expect(textbox).toHaveValue(value)); expect(analyticsApiMock.getEvents()).toHaveLength(0); - - jest.useRealTimers(); }); - it('captures analytics events if enabled in app', async () => { - jest.useFakeTimers(); - const user = userEvent.setup({ delay: null }); + it('Captures analytics events if enabled in app', async () => { + const analyticsApiMock = new MockAnalyticsApi(); + const types = ['techdocs', 'software-catalog']; await renderWithEffects( - + , ); - const textbox = await screen.findByRole('textbox', { name: 'Search' }); + const textbox = screen.getByLabelText('Search'); let value = 'value'; - await user.type(textbox, value); - - expect(analyticsApiMock.getEvents()).toHaveLength(0); - - act(() => { - jest.advanceTimersByTime(200); + await waitFor(() => { + expect(analyticsApiMock.getEvents()).toHaveLength(1); + expect(textbox).toHaveValue(value); + expect(analyticsApiMock.getEvents()[0]).toEqual({ + action: 'search', + context: { + extension: 'SearchBar', + pluginId: 'search', + routeRef: 'unknown', + searchTypes: types.toString(), + }, + subject: value, + }); }); - await waitFor(() => expect(textbox).toHaveValue(value)); - - expect(analyticsApiMock.getEvents()).toHaveLength(1); - expect(analyticsApiMock.getEvents()[0]).toEqual({ - action: 'search', - context: { - extension: 'SearchBar', - pluginId: 'search', - routeRef: 'unknown', - searchTypes: types.toString(), - }, - subject: value, - }); - - await user.clear(textbox); - value = 'new value'; - + await user.clear(textbox); // make sure new term is captured await user.type(textbox, value); - - act(() => { - jest.advanceTimersByTime(200); + await waitFor(() => { + expect(analyticsApiMock.getEvents()).toHaveLength(2); + expect(textbox).toHaveValue(value); + expect(analyticsApiMock.getEvents()[1]).toEqual({ + action: 'search', + context: { + extension: 'SearchBar', + pluginId: 'search', + routeRef: 'unknown', + searchTypes: types.toString(), + }, + subject: value, + }); }); - - await waitFor(() => expect(textbox).toHaveValue(value)); - - expect(analyticsApiMock.getEvents()).toHaveLength(2); - expect(analyticsApiMock.getEvents()[1]).toEqual({ - action: 'search', - context: { - extension: 'SearchBar', - pluginId: 'search', - routeRef: 'unknown', - searchTypes: types.toString(), - }, - subject: value, - }); - - jest.useRealTimers(); }); }); diff --git a/plugins/search-react/src/components/SearchFilter/SearchFilter.tsx b/plugins/search-react/src/components/SearchFilter/SearchFilter.tsx index 6194ab8387..8579f01caa 100644 --- a/plugins/search-react/src/components/SearchFilter/SearchFilter.tsx +++ b/plugins/search-react/src/components/SearchFilter/SearchFilter.tsx @@ -138,7 +138,6 @@ export const CheckboxFilter = (props: SearchFilterComponentProps) => { control={ ({ + ...jest.requireActual('react-router-dom'), + useNavigate: () => navigate, +})); + +describe('', () => { + const searchApiMock = { query: jest.fn().mockResolvedValue({ results: [] }) }; + + it("Don't wait query debounce time when enter is pressed", async () => { + await renderInTestApp( + + + , + { + mountedRoutes: { + '/search': rootRouteRef, + }, + }, + ); + + expect(searchApiMock.query).toHaveBeenCalledWith( + expect.objectContaining({ term: '' }), + ); + + await userEvent.type(screen.getByLabelText('Search'), 'term{enter}'); + + expect(navigate).toHaveBeenCalledWith('/search?query=term'); + }); +}); diff --git a/plugins/search/src/components/HomePageComponent/HomePageSearchBar.tsx b/plugins/search/src/components/HomePageComponent/HomePageSearchBar.tsx index b829bf8ac2..47ee15c7f3 100644 --- a/plugins/search/src/components/HomePageComponent/HomePageSearchBar.tsx +++ b/plugins/search/src/components/HomePageComponent/HomePageSearchBar.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import React, { useCallback, useState } from 'react'; +import React, { useCallback, useRef, useState } from 'react'; import { makeStyles } from '@material-ui/core/styles'; import { SearchBarBase, @@ -47,11 +47,15 @@ export type HomePageSearchBarProps = Partial< export const HomePageSearchBar = (props: HomePageSearchBarProps) => { const classes = useStyles(props); const [query, setQuery] = useState(''); + const ref = useRef(null); + const handleSearch = useNavigateToQuery(); - const handleSubmit = () => { - handleSearch({ query }); - }; + // This handler is called when "enter" is pressed + const handleSubmit = useCallback(() => { + // Using ref to get the current field value without waiting for a query debounce + handleSearch({ query: ref.current?.value ?? '' }); + }, [handleSearch]); const handleChange = useCallback( value => { @@ -65,6 +69,7 @@ export const HomePageSearchBar = (props: HomePageSearchBarProps) => { value={query} onSubmit={handleSubmit} onChange={handleChange} + inputProps={{ ref }} InputProps={{ ...props.InputProps, classes: { diff --git a/plugins/search/src/components/SearchModal/SearchModal.test.tsx b/plugins/search/src/components/SearchModal/SearchModal.test.tsx index d24764f5d4..33c2df9ab8 100644 --- a/plugins/search/src/components/SearchModal/SearchModal.test.tsx +++ b/plugins/search/src/components/SearchModal/SearchModal.test.tsx @@ -28,6 +28,13 @@ import { import { SearchModal } from './SearchModal'; +const navigate = jest.fn(); + +jest.mock('react-router-dom', () => ({ + ...jest.requireActual('react-router-dom'), + useNavigate: () => navigate, +})); + describe('SearchModal', () => { const query = jest.fn().mockResolvedValue({ results: [] }); @@ -38,6 +45,7 @@ describe('SearchModal', () => { beforeEach(() => { query.mockClear(); + navigate.mockClear(); }); const toggleModal = jest.fn(); @@ -168,4 +176,69 @@ describe('SearchModal', () => { expect(screen.getByLabelText('Search')).toHaveFocus(); }); + + it("Don't wait query debounce time when enter is pressed", async () => { + const initialState = { + term: 'term', + filters: {}, + types: [], + pageCursor: '', + }; + + await renderInTestApp( + + + + , + { + mountedRoutes: { + '/search': rootRouteRef, + }, + }, + ); + + expect(query).toHaveBeenCalledWith( + expect.objectContaining({ term: 'term' }), + ); + + const input = screen.getByLabelText('Search'); + await userEvent.clear(input); + await userEvent.type(input, 'new term{enter}'); + + expect(navigate).toHaveBeenCalledWith('/search?query=new term'); + }); + + it('should navigate with correct search terms to full results', async () => { + const initialState = { + term: 'term', + filters: {}, + types: [], + pageCursor: '', + }; + + await renderInTestApp( + + + + , + { + mountedRoutes: { + '/search': rootRouteRef, + }, + }, + ); + + expect(query).toHaveBeenCalledWith( + expect.objectContaining({ term: 'term' }), + ); + + const fullResultsBtn = screen.getByRole('button', { + name: /view full results/i, + }); + await userEvent.click(fullResultsBtn); + + expect(navigate).toHaveBeenCalledWith('/search?query=term'); + }); }); diff --git a/plugins/search/src/components/SearchModal/SearchModal.tsx b/plugins/search/src/components/SearchModal/SearchModal.tsx index cfeabf3358..dec0f9f482 100644 --- a/plugins/search/src/components/SearchModal/SearchModal.tsx +++ b/plugins/search/src/components/SearchModal/SearchModal.tsx @@ -13,14 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { Link, useContent } from '@backstage/core-components'; +import { 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, @@ -37,7 +36,7 @@ import IconButton from '@material-ui/core/IconButton'; import { makeStyles } from '@material-ui/core/styles'; import ArrowForwardIcon from '@material-ui/icons/ArrowForward'; import CloseIcon from '@material-ui/icons/Close'; -import React, { KeyboardEvent, useCallback, useEffect, useRef } from 'react'; +import React, { useCallback, useEffect, useRef } from 'react'; import { useNavigate } from 'react-router-dom'; import { rootRouteRef } from '../../plugin'; @@ -92,6 +91,11 @@ const useStyles = makeStyles(theme => ({ input: { flex: 1, }, + button: { + '&:hover': { + background: 'none', + }, + }, // Reduces default height of the modal, keeping a gap of 128px between the top and bottom of the page. paperFullWidth: { height: 'calc(100% - 128px)' }, dialogActionsContainer: { padding: theme.spacing(1, 3) }, @@ -104,9 +108,8 @@ export const Modal = ({ toggleModal }: SearchModalChildrenProps) => { const { transitions } = useTheme(); const { focusContent } = useContent(); - const { term } = useSearch(); + const searchRootRoute = useRouteRef(rootRouteRef)(); const searchBarRef = useRef(null); - const searchPagePath = `${useRouteRef(rootRouteRef)()}?query=${term}`; useEffect(() => { searchBarRef?.current?.focus(); @@ -116,15 +119,13 @@ export const Modal = ({ toggleModal }: SearchModalChildrenProps) => { setTimeout(focusContent, transitions.duration.leavingScreen); }, [focusContent, transitions]); - const handleSearchBarKeyDown = useCallback( - (e: KeyboardEvent) => { - if (e.key === 'Enter') { - navigate(searchPagePath); - handleSearchResultClick(); - } - }, - [navigate, handleSearchResultClick, searchPagePath], - ); + // This handler is called when "enter" is pressed + const handleSearchBarSubmit = useCallback(() => { + // Using ref to get the current field value without waiting for a query debounce + const query = searchBarRef.current?.value ?? ''; + navigate(`${searchRootRoute}?query=${query}`); + handleSearchResultClick(); + }, [navigate, handleSearchResultClick, searchRootRoute]); return ( <> @@ -133,7 +134,7 @@ export const Modal = ({ toggleModal }: SearchModalChildrenProps) => { @@ -150,11 +151,11 @@ export const Modal = ({ toggleModal }: SearchModalChildrenProps) => { > diff --git a/plugins/search/src/setupTests.ts b/plugins/search/src/setupTests.ts index b201a9c83e..28a35d2b06 100644 --- a/plugins/search/src/setupTests.ts +++ b/plugins/search/src/setupTests.ts @@ -14,4 +14,3 @@ * limitations under the License. */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/sentry/CHANGELOG.md b/plugins/sentry/CHANGELOG.md index 0039671785..f4bac35016 100644 --- a/plugins/sentry/CHANGELOG.md +++ b/plugins/sentry/CHANGELOG.md @@ -1,5 +1,81 @@ # @backstage/plugin-sentry +## 0.5.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/theme@0.4.1 + +## 0.5.5 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + +## 0.5.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + +## 0.5.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + +## 0.5.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + +## 0.5.4 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + +## 0.5.4-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + ## 0.5.4-next.2 ### Patch Changes diff --git a/plugins/sentry/package.json b/plugins/sentry/package.json index 448c65a4dc..c0bc4c1246 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.4-next.2", + "version": "0.5.6-next.0", "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 f9cf5b6539..af94df1ac4 100644 --- a/plugins/shortcuts/CHANGELOG.md +++ b/plugins/shortcuts/CHANGELOG.md @@ -1,5 +1,86 @@ # @backstage/plugin-shortcuts +## 0.3.13-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/theme@0.4.1 + - @backstage/types@1.1.0 + +## 0.3.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/theme@0.4.1 + - @backstage/types@1.1.0 + +## 0.3.12 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/types@1.1.0 + +## 0.3.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/types@1.1.0 + +## 0.3.12-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + +## 0.3.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.3-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/types@1.1.0 + +## 0.3.11 + +### Patch Changes + +- 2e036369d83b: Updated `alertApi` usages with severity of `info` or `success` to use `display: transient` +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/types@1.1.0 + - @backstage/theme@0.4.0 + +## 0.3.11-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/types@1.0.2 + ## 0.3.11-next.2 ### Patch Changes diff --git a/plugins/shortcuts/package.json b/plugins/shortcuts/package.json index bcbefa439a..dfd05422ac 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.11-next.2", + "version": "0.3.13-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -13,6 +13,12 @@ "backstage": { "role": "frontend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/shortcuts" + }, "scripts": { "build": "backstage-cli package build", "start": "backstage-cli package start", @@ -52,7 +58,6 @@ "@types/node": "^16.11.26", "@types/react": "^16.13.1 || ^17.0.0", "@types/zen-observable": "^0.8.2", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/shortcuts/src/AddShortcut.tsx b/plugins/shortcuts/src/AddShortcut.tsx index 6cca26d250..15850ab389 100644 --- a/plugins/shortcuts/src/AddShortcut.tsx +++ b/plugins/shortcuts/src/AddShortcut.tsx @@ -71,6 +71,7 @@ export const AddShortcut = ({ alertApi.post({ message: `Added shortcut '${title}' to your sidebar`, severity: 'success', + display: 'transient', }); } catch (error) { alertApi.post({ diff --git a/plugins/shortcuts/src/EditShortcut.tsx b/plugins/shortcuts/src/EditShortcut.tsx index a5f801604f..9f2ffe10be 100644 --- a/plugins/shortcuts/src/EditShortcut.tsx +++ b/plugins/shortcuts/src/EditShortcut.tsx @@ -74,6 +74,7 @@ export const EditShortcut = ({ alertApi.post({ message: `Updated shortcut '${title}'`, severity: 'success', + display: 'transient', }); } catch (error) { alertApi.post({ @@ -91,6 +92,7 @@ export const EditShortcut = ({ alertApi.post({ message: `Removed shortcut '${shortcut.title}' from your sidebar`, severity: 'success', + display: 'transient', }); } catch (error) { alertApi.post({ diff --git a/plugins/shortcuts/src/setupTests.ts b/plugins/shortcuts/src/setupTests.ts index 427556fe26..992b60d3a4 100644 --- a/plugins/shortcuts/src/setupTests.ts +++ b/plugins/shortcuts/src/setupTests.ts @@ -15,4 +15,3 @@ */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/sonarqube-backend/CHANGELOG.md b/plugins/sonarqube-backend/CHANGELOG.md index 0945ae9231..3ef87ad9d1 100644 --- a/plugins/sonarqube-backend/CHANGELOG.md +++ b/plugins/sonarqube-backend/CHANGELOG.md @@ -1,5 +1,74 @@ # @backstage/plugin-sonarqube-backend +## 0.2.2-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + +## 0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + +## 0.2.1 + +### Patch Changes + +- fcaf4cfc70ee: Made default config optional +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-common@0.19.1 + - @backstage/config@1.0.8 + +## 0.2.1-next.1 + +### Patch Changes + +- fcaf4cfc70ee: Made default config optional +- Updated dependencies + - @backstage/config@1.0.8 + +## 0.2.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/config@1.0.8 + +## 0.2.0 + +### Minor Changes + +- ce9bc94c15e1: fix sonarqube case in config schema definition + +### Patch Changes + +- 0bb0b19b0da2: Provide full schema definition for sonarqube plugin, especially to protect api keys. +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/errors@1.2.0 + - @backstage/config@1.0.8 + +## 0.1.11-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.2.0-next.0 + ## 0.1.11-next.1 ### Patch Changes diff --git a/plugins/sonarqube-backend/config.d.ts b/plugins/sonarqube-backend/config.d.ts index 9e612b6984..7e93f61eb4 100644 --- a/plugins/sonarqube-backend/config.d.ts +++ b/plugins/sonarqube-backend/config.d.ts @@ -16,18 +16,18 @@ export interface Config { /** Optional configurations for the SonarQube plugin */ - sonarQube?: { + sonarqube?: { /** * The base url of the sonarqube installation. Defaults to https://sonarcloud.io. * @visibility frontend */ - baseUrl: string; + baseUrl?: string; /** * The api key to access the sonarqube instance under baseUrl. * @visibility secret */ - apiKey: string; + apiKey?: string; /** * The optional sonarqube instances. diff --git a/plugins/sonarqube-backend/package.json b/plugins/sonarqube-backend/package.json index c9d7311f8c..2df0d1fd71 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.11-next.1", + "version": "0.2.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -12,6 +12,12 @@ "backstage": { "role": "backend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/sonarqube-backend" + }, "scripts": { "start": "backstage-cli package start", "build": "backstage-cli package build", diff --git a/plugins/sonarqube-react/CHANGELOG.md b/plugins/sonarqube-react/CHANGELOG.md index 4694a42540..6d7feafaae 100644 --- a/plugins/sonarqube-react/CHANGELOG.md +++ b/plugins/sonarqube-react/CHANGELOG.md @@ -1,5 +1,52 @@ # @backstage/plugin-sonarqube-react +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + +## 0.1.7-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/catalog-model@1.4.1-next.0 + +## 0.1.7-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.3-next.0 + +## 0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + +## 0.1.6 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/catalog-model@1.4.0 + +## 0.1.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + ## 0.1.6-next.0 ### Patch Changes diff --git a/plugins/sonarqube-react/package.json b/plugins/sonarqube-react/package.json index 897a24d628..34b457d5be 100644 --- a/plugins/sonarqube-react/package.json +++ b/plugins/sonarqube-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-sonarqube-react", - "version": "0.1.6-next.0", + "version": "0.1.7", "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 f9ad7e9f55..59b6e51883 100644 --- a/plugins/sonarqube/CHANGELOG.md +++ b/plugins/sonarqube/CHANGELOG.md @@ -1,5 +1,110 @@ # @backstage/plugin-sonarqube +## 0.7.2-next.1 + +### Patch Changes + +- b2ccddefbdc6: Remove sonarQube card disable class +- Updated dependencies + - @backstage/catalog-model@1.4.1 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/plugin-sonarqube-react@0.1.7 + +## 0.7.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/theme@0.4.1 + - @backstage/plugin-sonarqube-react@0.1.7 + +## 0.7.1 + +### Patch Changes + +- fcaf4cfc70ee: Made default config optional +- 015439b5b6ca: Updated dependency `rc-progress` to `3.4.2`. +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + - @backstage/plugin-sonarqube-react@0.1.7 + +## 0.7.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/plugin-sonarqube-react@0.1.7-next.2 + +## 0.7.1-next.1 + +### Patch Changes + +- fcaf4cfc70ee: Made default config optional +- 015439b5b6ca: Updated dependency `rc-progress` to `3.4.2`. +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + - @backstage/plugin-sonarqube-react@0.1.7-next.1 + +## 0.7.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + - @backstage/plugin-sonarqube-react@0.1.7-next.0 + +## 0.7.0 + +### Minor Changes + +- ce9bc94c15e1: fix sonarqube case in config schema definition + +### Patch Changes + +- 1108f1c65d31: fixed issued related #18259 now using luxon as adr102 asked +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + - @backstage/plugin-sonarqube-react@0.1.6 + +## 0.6.8-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + - @backstage/plugin-sonarqube-react@0.1.6-next.1 + ## 0.6.8-next.2 ### Patch Changes diff --git a/plugins/sonarqube/config.d.ts b/plugins/sonarqube/config.d.ts index 874562043c..8ba989b02c 100644 --- a/plugins/sonarqube/config.d.ts +++ b/plugins/sonarqube/config.d.ts @@ -16,11 +16,11 @@ export interface Config { /** Optional configurations for the SonarQube plugin */ - sonarQube?: { + sonarqube?: { /** * The base url of the sonarqube installation. Defaults to https://sonarcloud.io. * @visibility frontend */ - baseUrl: string; + baseUrl?: string; }; } diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json index a2568617b0..ed3bc6142e 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sonarqube", "description": "", - "version": "0.6.8-next.2", + "version": "0.7.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -46,7 +46,8 @@ "@material-ui/lab": "4.0.0-alpha.61", "@material-ui/styles": "^4.10.0", "cross-fetch": "^3.1.5", - "rc-progress": "3.4.1", + "luxon": "^3.0.0", + "rc-progress": "3.4.2", "react-use": "^17.2.4" }, "peerDependencies": { diff --git a/plugins/sonarqube/src/components/SonarQubeCard/SonarQubeCard.tsx b/plugins/sonarqube/src/components/SonarQubeCard/SonarQubeCard.tsx index 932641e48d..46a22b9284 100644 --- a/plugins/sonarqube/src/components/SonarQubeCard/SonarQubeCard.tsx +++ b/plugins/sonarqube/src/components/SonarQubeCard/SonarQubeCard.tsx @@ -42,6 +42,7 @@ import { Progress, } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; +import { DateTime } from 'luxon'; const useStyles = makeStyles(theme => ({ badgeLabel: { @@ -67,9 +68,6 @@ const useStyles = makeStyles(theme => ({ lastAnalyzed: { color: theme.palette.text.secondary, }, - disabled: { - backgroundColor: theme.palette.background.default, - }, })); /** @public */ @@ -162,9 +160,6 @@ export const SonarQubeCard = (props: { action: classes.action, }, }} - className={ - !loading && (!projectTitle || !value) ? classes.disabled : undefined - } > {loading && } @@ -272,15 +267,9 @@ export const SonarQubeCard = (props: { Last analyzed on{' '} - {new Date(value.lastAnalysis).toLocaleString('en-US', { - timeZone: 'UTC', - day: 'numeric', - month: 'short', - year: 'numeric', - hour: '2-digit', - minute: '2-digit', - hour12: false, - })} + {DateTime.fromISO(value.lastAnalysis).toLocaleString( + DateTime.DATETIME_MED, + )} diff --git a/plugins/splunk-on-call/CHANGELOG.md b/plugins/splunk-on-call/CHANGELOG.md index 33f2f931a5..3d6ec3088f 100644 --- a/plugins/splunk-on-call/CHANGELOG.md +++ b/plugins/splunk-on-call/CHANGELOG.md @@ -1,5 +1,82 @@ # @backstage/plugin-splunk-on-call +## 0.4.10-next.0 + +### Patch Changes + +- 3d86be999fdf: Prefer simple `theme.spacing` without string interpolation +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/theme@0.4.1 + +## 0.4.9 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + +## 0.4.9-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + +## 0.4.9-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + +## 0.4.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + +## 0.4.8 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + +## 0.4.8-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + ## 0.4.8-next.2 ### Patch Changes diff --git a/plugins/splunk-on-call/package.json b/plugins/splunk-on-call/package.json index d2dcf1972a..fb39c0da1a 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.8-next.2", + "version": "0.4.10-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -62,7 +62,6 @@ "@types/luxon": "^3.0.0", "@types/node": "^16.11.26", "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "configSchema": "config.d.ts", diff --git a/plugins/splunk-on-call/src/components/Escalation/EscalationPolicy.tsx b/plugins/splunk-on-call/src/components/Escalation/EscalationPolicy.tsx index 9718aeacb7..7902453490 100644 --- a/plugins/splunk-on-call/src/components/Escalation/EscalationPolicy.tsx +++ b/plugins/splunk-on-call/src/components/Escalation/EscalationPolicy.tsx @@ -42,7 +42,7 @@ const useStyles = makeStyles((theme: Theme) => backgroundColor: theme.palette.background.paper, }, progress: { - margin: `0 ${theme.spacing(2)}px`, + margin: theme.spacing(0, 2), }, }), ); diff --git a/plugins/splunk-on-call/src/components/Incident/Incidents.tsx b/plugins/splunk-on-call/src/components/Incident/Incidents.tsx index e2ec9609bd..6dcb4f9989 100644 --- a/plugins/splunk-on-call/src/components/Incident/Incidents.tsx +++ b/plugins/splunk-on-call/src/components/Incident/Incidents.tsx @@ -41,7 +41,7 @@ const useStyles = makeStyles((theme: Theme) => backgroundColor: theme.palette.background.paper, }, progress: { - margin: `0 ${theme.spacing(2)}px`, + margin: theme.spacing(0, 2), }, }), ); diff --git a/plugins/splunk-on-call/src/setupTests.ts b/plugins/splunk-on-call/src/setupTests.ts index c1d649f2ad..963c0f188b 100644 --- a/plugins/splunk-on-call/src/setupTests.ts +++ b/plugins/splunk-on-call/src/setupTests.ts @@ -15,4 +15,3 @@ */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/stack-overflow-backend/CHANGELOG.md b/plugins/stack-overflow-backend/CHANGELOG.md index 9372e57d38..aa16d5b8d4 100644 --- a/plugins/stack-overflow-backend/CHANGELOG.md +++ b/plugins/stack-overflow-backend/CHANGELOG.md @@ -1,5 +1,59 @@ # @backstage/plugin-stack-overflow-backend +## 0.2.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/config@1.0.8 + - @backstage/plugin-search-common@1.2.5 + +## 0.2.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/config@1.0.8 + - @backstage/plugin-search-common@1.2.5 + +## 0.2.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1 + - @backstage/config@1.0.8 + - @backstage/plugin-search-common@1.2.5 + +## 0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1-next.0 + - @backstage/config@1.0.8 + - @backstage/plugin-search-common@1.2.5-next.0 + +## 0.2.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/config@1.0.8 + - @backstage/plugin-search-common@1.2.4 + +## 0.2.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/config@1.0.7 + - @backstage/plugin-search-common@1.2.4-next.0 + ## 0.2.2-next.1 ### Patch Changes diff --git a/plugins/stack-overflow-backend/package.json b/plugins/stack-overflow-backend/package.json index 66ee75bb6f..c2fbc85def 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.2-next.1", + "version": "0.2.4-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 8042bc2d18..c6fc25e2b9 100644 --- a/plugins/stack-overflow/CHANGELOG.md +++ b/plugins/stack-overflow/CHANGELOG.md @@ -1,5 +1,110 @@ # @backstage/plugin-stack-overflow +## 0.1.19-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/config@1.0.8 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/theme@0.4.1 + - @backstage/plugin-home-react@0.1.2-next.0 + - @backstage/plugin-search-common@1.2.5 + - @backstage/plugin-search-react@1.6.4-next.0 + +## 0.1.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-home-react@0.1.2-next.0 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-search-react@1.6.4-next.0 + - @backstage/config@1.0.8 + - @backstage/theme@0.4.1 + - @backstage/plugin-search-common@1.2.5 + +## 0.1.18 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/core-components@0.13.3 + - @backstage/plugin-home-react@0.1.1 + - @backstage/core-plugin-api@1.5.3 + - @backstage/config@1.0.8 + - @backstage/plugin-search-common@1.2.5 + - @backstage/plugin-search-react@1.6.3 + +## 0.1.18-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-home-react@0.1.1-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/config@1.0.8 + - @backstage/plugin-search-common@1.2.5-next.0 + - @backstage/plugin-search-react@1.6.3-next.2 + +## 0.1.18-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-search-react@1.6.3-next.1 + - @backstage/plugin-home-react@0.1.1-next.1 + - @backstage/config@1.0.8 + +## 0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.3-next.0 + - @backstage/config@1.0.8 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-home-react@0.1.1-next.0 + - @backstage/plugin-search-common@1.2.5-next.0 + - @backstage/plugin-search-react@1.6.3-next.0 + +## 0.1.17 + +### Patch Changes + +- 41e8037a8a6d: Extract new plugin-home-react package and deprecate createCardExtension in plugin-home +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/plugin-search-react@1.6.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-home-react@0.1.0 + - @backstage/config@1.0.8 + - @backstage/plugin-search-common@1.2.4 + +## 0.1.17-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-react@1.6.2-next.3 + - @backstage/core-components@0.13.2-next.3 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-home-react@0.1.0-next.3 + - @backstage/plugin-search-common@1.2.4-next.0 + ## 0.1.16-next.2 ### Patch Changes diff --git a/plugins/stack-overflow/package.json b/plugins/stack-overflow/package.json index f3a12363e7..3a6efe8d99 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.16-next.2", + "version": "0.1.19-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -12,6 +12,12 @@ "backstage": { "role": "frontend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/stack-overflow" + }, "scripts": { "build": "backstage-cli package build", "start": "backstage-cli package start", diff --git a/plugins/stack-overflow/src/setupTests.ts b/plugins/stack-overflow/src/setupTests.ts index 9bb3e72355..326d2ed212 100644 --- a/plugins/stack-overflow/src/setupTests.ts +++ b/plugins/stack-overflow/src/setupTests.ts @@ -14,4 +14,3 @@ * limitations under the License. */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/stackstorm/CHANGELOG.md b/plugins/stackstorm/CHANGELOG.md index 6b4f25ce26..52e6615586 100644 --- a/plugins/stackstorm/CHANGELOG.md +++ b/plugins/stackstorm/CHANGELOG.md @@ -1,5 +1,76 @@ # @backstage/plugin-stackstorm +## 0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + +## 0.1.4 + +### Patch Changes + +- 1745959daf98: Add props to StackstormHome for Header Customization +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + +## 0.1.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/errors@1.2.1-next.0 + +## 0.1.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + +## 0.1.4-next.0 + +### Patch Changes + +- 1745959daf98: Add props to StackstormHome for Header Customization +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + +## 0.1.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/errors@1.2.0 + +## 0.1.3-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/theme@0.4.0-next.1 + ## 0.1.3-next.2 ### Patch Changes diff --git a/plugins/stackstorm/api-report.md b/plugins/stackstorm/api-report.md index 3e3d79fe27..7a307847cd 100644 --- a/plugins/stackstorm/api-report.md +++ b/plugins/stackstorm/api-report.md @@ -6,10 +6,18 @@ /// import { BackstagePlugin } from '@backstage/core-plugin-api'; +import { default as React_2 } from 'react'; import { RouteRef } from '@backstage/core-plugin-api'; +// @public (undocumented) +export type StackstormHomeProps = { + title?: string; + subtitle?: string; + headerButtons?: React_2.ReactNode[]; +}; + // @public -export const StackstormPage: () => JSX.Element; +export const StackstormPage: (props: StackstormHomeProps) => JSX.Element; // @public export const stackstormPlugin: BackstagePlugin< diff --git a/plugins/stackstorm/package.json b/plugins/stackstorm/package.json index b71a8c8c66..800fbc5ffe 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.3-next.2", + "version": "0.1.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -40,6 +40,7 @@ "@backstage/theme": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", + "@types/react": "^16.13.1 || ^17.0.0", "react-use": "^17.2.4" }, "peerDependencies": { @@ -57,8 +58,6 @@ "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", "@types/node": "*", - "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/stackstorm/src/components/StackstormHome/StackstormHome.test.tsx b/plugins/stackstorm/src/components/StackstormHome/StackstormHome.test.tsx index 897cec61c1..e3db4c0cac 100644 --- a/plugins/stackstorm/src/components/StackstormHome/StackstormHome.test.tsx +++ b/plugins/stackstorm/src/components/StackstormHome/StackstormHome.test.tsx @@ -35,4 +35,19 @@ describe('StackstormHome', () => { ); expect(screen.getByText('Welcome to StackStorm!')).toBeInTheDocument(); }); + + it('should render props', async () => { + await renderInTestApp( + + Test Header Button]} + /> + , + ); + expect(screen.getByText('Test Title')).toBeInTheDocument(); + expect(screen.getByText('Test Subtitle')).toBeInTheDocument(); + expect(screen.getByText('Test Header Button')).toBeInTheDocument(); + }); }); diff --git a/plugins/stackstorm/src/components/StackstormHome/StackstormHome.tsx b/plugins/stackstorm/src/components/StackstormHome/StackstormHome.tsx index d96d45e82d..1bb9031815 100644 --- a/plugins/stackstorm/src/components/StackstormHome/StackstormHome.tsx +++ b/plugins/stackstorm/src/components/StackstormHome/StackstormHome.tsx @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import React from 'react'; +import React, { Fragment } from 'react'; import { IconButton } from '@material-ui/core'; import { Header, @@ -27,12 +27,30 @@ import { ExecutionsTable } from '../ExecutionsTable'; import { PacksTable } from '../PacksTable/PacksTable'; import { ActionsList } from '../ActionsList'; -export const StackstormHome = () => ( +/** + * @public + */ +export type StackstormHomeProps = { + title?: string; + subtitle?: string; + headerButtons?: React.ReactNode[]; +}; + +export const StackstormHome = (props: StackstormHomeProps) => ( -
- - - +
+ {props.headerButtons ? ( + props.headerButtons.map((headerButton, idx) => ( + {headerButton} + )) + ) : ( + + + + )}
diff --git a/plugins/stackstorm/src/components/StackstormHome/index.ts b/plugins/stackstorm/src/components/StackstormHome/index.ts index 2063d21f34..7809223ede 100644 --- a/plugins/stackstorm/src/components/StackstormHome/index.ts +++ b/plugins/stackstorm/src/components/StackstormHome/index.ts @@ -13,4 +13,4 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export { StackstormHome } from './StackstormHome'; +export { StackstormHome, type StackstormHomeProps } from './StackstormHome'; diff --git a/plugins/stackstorm/src/index.ts b/plugins/stackstorm/src/index.ts index b64ae207e4..6775a000fa 100644 --- a/plugins/stackstorm/src/index.ts +++ b/plugins/stackstorm/src/index.ts @@ -21,3 +21,4 @@ */ export { stackstormPlugin, StackstormPage } from './plugin'; +export { type StackstormHomeProps } from './components/StackstormHome'; diff --git a/plugins/stackstorm/src/setupTests.ts b/plugins/stackstorm/src/setupTests.ts index 73dd8dce47..865308e634 100644 --- a/plugins/stackstorm/src/setupTests.ts +++ b/plugins/stackstorm/src/setupTests.ts @@ -14,4 +14,3 @@ * limitations under the License. */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md index 9050ebe828..a678af8513 100644 --- a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md +++ b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md @@ -1,5 +1,71 @@ # @backstage/plugin-tech-insights-backend-module-jsonfc +## 0.1.32-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/plugin-tech-insights-node@0.4.6-next.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/plugin-tech-insights-common@0.2.11 + +## 0.1.32-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/plugin-tech-insights-common@0.2.11 + - @backstage/plugin-tech-insights-node@0.4.6-next.0 + +## 0.1.31 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-common@0.19.1 + - @backstage/config@1.0.8 + - @backstage/plugin-tech-insights-common@0.2.11 + - @backstage/plugin-tech-insights-node@0.4.5 + +## 0.1.31-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/config@1.0.8 + - @backstage/plugin-tech-insights-common@0.2.11 + - @backstage/plugin-tech-insights-node@0.4.5-next.0 + +## 0.1.30 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/errors@1.2.0 + - @backstage/plugin-tech-insights-node@0.4.4 + - @backstage/config@1.0.8 + - @backstage/plugin-tech-insights-common@0.2.11 + +## 0.1.30-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.2.0-next.0 + - @backstage/plugin-tech-insights-common@0.2.10 + - @backstage/plugin-tech-insights-node@0.4.4-next.2 + ## 0.1.30-next.1 ### Patch Changes diff --git a/plugins/tech-insights-backend-module-jsonfc/package.json b/plugins/tech-insights-backend-module-jsonfc/package.json index af02a77c79..021fed330c 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.30-next.1", + "version": "0.1.32-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 6f3d58c198..f652b66b77 100644 --- a/plugins/tech-insights-backend/CHANGELOG.md +++ b/plugins/tech-insights-backend/CHANGELOG.md @@ -1,5 +1,112 @@ # @backstage/plugin-tech-insights-backend +## 0.5.14-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/backend-tasks@0.5.5-next.1 + - @backstage/plugin-tech-insights-node@0.4.6-next.1 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + - @backstage/plugin-tech-insights-common@0.2.11 + +## 0.5.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-tasks@0.5.5-next.0 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + - @backstage/plugin-tech-insights-common@0.2.11 + - @backstage/plugin-tech-insights-node@0.4.6-next.0 + +## 0.5.13 + +### Patch Changes + +- 4edd1ef71453: semver upgrade to 7.5.3 +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-common@0.19.1 + - @backstage/backend-tasks@0.5.4 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-tech-insights-common@0.2.11 + - @backstage/plugin-tech-insights-node@0.4.5 + +## 0.5.13-next.1 + +### Patch Changes + +- 4edd1ef71453: semver upgrade to 7.5.3 +- Updated dependencies + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-tasks@0.5.4-next.0 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1-next.0 + - @backstage/types@1.1.0 + - @backstage/plugin-tech-insights-common@0.2.11 + - @backstage/plugin-tech-insights-node@0.4.5-next.0 + +## 0.5.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-tasks@0.5.4-next.0 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-tech-insights-common@0.2.11 + - @backstage/plugin-tech-insights-node@0.4.5-next.0 + +## 0.5.12 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/catalog-client@1.4.2 + - @backstage/types@1.1.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + - @backstage/backend-tasks@0.5.3 + - @backstage/plugin-tech-insights-node@0.4.4 + - @backstage/config@1.0.8 + - @backstage/plugin-tech-insights-common@0.2.11 + +## 0.5.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/backend-tasks@0.5.3-next.2 + - @backstage/catalog-client@1.4.2-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.2.0-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + - @backstage/plugin-tech-insights-node@0.4.4-next.2 + ## 0.5.12-next.1 ### Patch Changes diff --git a/plugins/tech-insights-backend/package.json b/plugins/tech-insights-backend/package.json index f054a415fc..c5dfc94afb 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.12-next.1", + "version": "0.5.14-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -49,7 +49,7 @@ "knex": "^2.0.0", "lodash": "^4.17.21", "luxon": "^3.0.0", - "semver": "^7.3.5", + "semver": "^7.5.3", "uuid": "^8.3.2", "winston": "^3.2.1", "yn": "^4.0.0" diff --git a/plugins/tech-insights-common/CHANGELOG.md b/plugins/tech-insights-common/CHANGELOG.md index bf0f8f62ba..b0d1bc7573 100644 --- a/plugins/tech-insights-common/CHANGELOG.md +++ b/plugins/tech-insights-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-tech-insights-common +## 0.2.11 + +### Patch Changes + +- Updated dependencies + - @backstage/types@1.1.0 + ## 0.2.10 ### Patch Changes diff --git a/plugins/tech-insights-common/package.json b/plugins/tech-insights-common/package.json index bb6b6e9a57..3831073e87 100644 --- a/plugins/tech-insights-common/package.json +++ b/plugins/tech-insights-common/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-common", - "version": "0.2.10", + "version": "0.2.11", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-node/CHANGELOG.md b/plugins/tech-insights-node/CHANGELOG.md index 947ca421f1..57ab233cfd 100644 --- a/plugins/tech-insights-node/CHANGELOG.md +++ b/plugins/tech-insights-node/CHANGELOG.md @@ -1,5 +1,71 @@ # @backstage/plugin-tech-insights-node +## 0.4.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/backend-tasks@0.5.5-next.1 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-tech-insights-common@0.2.11 + +## 0.4.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-tasks@0.5.5-next.0 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-tech-insights-common@0.2.11 + +## 0.4.5 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1 + - @backstage/backend-tasks@0.5.4 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-tech-insights-common@0.2.11 + +## 0.4.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-tasks@0.5.4-next.0 + - @backstage/config@1.0.8 + - @backstage/types@1.1.0 + - @backstage/plugin-tech-insights-common@0.2.11 + +## 0.4.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/types@1.1.0 + - @backstage/backend-tasks@0.5.3 + - @backstage/config@1.0.8 + - @backstage/plugin-tech-insights-common@0.2.11 + +## 0.4.4-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/backend-tasks@0.5.3-next.2 + - @backstage/config@1.0.7 + - @backstage/types@1.0.2 + - @backstage/plugin-tech-insights-common@0.2.10 + ## 0.4.4-next.1 ### Patch Changes diff --git a/plugins/tech-insights-node/package.json b/plugins/tech-insights-node/package.json index 599f83adb8..f89bb41748 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.4-next.1", + "version": "0.4.6-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 fcfbbaef6d..c415a5a5af 100644 --- a/plugins/tech-insights/CHANGELOG.md +++ b/plugins/tech-insights/CHANGELOG.md @@ -1,5 +1,115 @@ # @backstage/plugin-tech-insights +## 0.3.13-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/catalog-model@1.4.1 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + - @backstage/types@1.1.0 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/plugin-tech-insights-common@0.2.11 + +## 0.3.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + - @backstage/types@1.1.0 + - @backstage/plugin-tech-insights-common@0.2.11 + +## 0.3.12 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + - @backstage/types@1.1.0 + - @backstage/plugin-tech-insights-common@0.2.11 + +## 0.3.12-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/errors@1.2.1-next.0 + - @backstage/types@1.1.0 + - @backstage/plugin-tech-insights-common@0.2.11 + +## 0.3.12-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + +## 0.3.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/types@1.1.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + - @backstage/plugin-tech-insights-common@0.2.11 + +## 0.3.11 + +### Patch Changes + +- c03307ded3e6: The check description is now rendered with markdown. +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/types@1.1.0 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + - @backstage/plugin-tech-insights-common@0.2.11 + +## 0.3.11-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-react@1.7.0-next.3 + - @backstage/plugin-tech-insights-common@0.2.10 + ## 0.3.11-next.2 ### Patch Changes diff --git a/plugins/tech-insights/package.json b/plugins/tech-insights/package.json index 85207bd3f6..21f65edd6b 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.11-next.2", + "version": "0.3.13-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -12,6 +12,7 @@ "backstage": { "role": "frontend-plugin" }, + "homepage": "https://backstage.io", "repository": { "type": "git", "url": "https://github.com/backstage/backstage", @@ -57,7 +58,6 @@ "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", "@types/node": "^16.11.26", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/tech-insights/src/setupTests.ts b/plugins/tech-insights/src/setupTests.ts index fc6dbd98f8..7435872609 100644 --- a/plugins/tech-insights/src/setupTests.ts +++ b/plugins/tech-insights/src/setupTests.ts @@ -14,4 +14,3 @@ * limitations under the License. */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/tech-radar/CHANGELOG.md b/plugins/tech-radar/CHANGELOG.md index 9f4be1348e..b14e7c34f7 100644 --- a/plugins/tech-radar/CHANGELOG.md +++ b/plugins/tech-radar/CHANGELOG.md @@ -1,5 +1,68 @@ # @backstage/plugin-tech-radar +## 0.6.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/theme@0.4.1 + +## 0.6.6 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + +## 0.6.6-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + +## 0.6.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + +## 0.6.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.3-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + +## 0.6.5 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + +## 0.6.5-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/theme@0.4.0-next.1 + ## 0.6.5-next.2 ### Patch Changes diff --git a/plugins/tech-radar/package.json b/plugins/tech-radar/package.json index cabe0b2c74..e376c05baf 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.5-next.2", + "version": "0.6.7-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-addons-test-utils/CHANGELOG.md b/plugins/techdocs-addons-test-utils/CHANGELOG.md index 9f4fca0be6..ffa103dd67 100644 --- a/plugins/techdocs-addons-test-utils/CHANGELOG.md +++ b/plugins/techdocs-addons-test-utils/CHANGELOG.md @@ -1,5 +1,134 @@ # @backstage/plugin-techdocs-addons-test-utils +## 1.0.17-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-react@1.1.16-next.1 + - @backstage/plugin-catalog@1.12.1-next.1 + - @backstage/plugin-techdocs@1.6.6-next.1 + - @backstage/core-app-api@1.9.1-next.0 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/test-utils@1.4.2-next.0 + - @backstage/theme@0.4.1 + - @backstage/plugin-search-react@1.6.4-next.0 + - @backstage/plugin-techdocs-react@1.1.9-next.0 + +## 1.0.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.9.1-next.0 + - @backstage/core-components@0.13.4-next.0 + - @backstage/plugin-catalog@1.12.1-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/test-utils@1.4.2-next.0 + - @backstage/plugin-search-react@1.6.4-next.0 + - @backstage/plugin-techdocs@1.6.6-next.0 + - @backstage/integration-react@1.1.16-next.0 + - @backstage/theme@0.4.1 + - @backstage/plugin-techdocs-react@1.1.9-next.0 + +## 1.0.16 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog@1.12.0 + - @backstage/core-components@0.13.3 + - @backstage/core-app-api@1.9.0 + - @backstage/test-utils@1.4.1 + - @backstage/core-plugin-api@1.5.3 + - @backstage/integration-react@1.1.15 + - @backstage/plugin-search-react@1.6.3 + - @backstage/plugin-techdocs@1.6.5 + - @backstage/plugin-techdocs-react@1.1.8 + +## 1.0.16-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.12.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/test-utils@1.4.1-next.2 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/core-app-api@1.8.2-next.1 + - @backstage/integration-react@1.1.15-next.2 + - @backstage/plugin-search-react@1.6.3-next.2 + - @backstage/plugin-techdocs@1.6.5-next.2 + - @backstage/plugin-techdocs-react@1.1.8-next.2 + +## 1.0.16-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/plugin-catalog@1.11.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/integration-react@1.1.15-next.1 + - @backstage/test-utils@1.4.1-next.1 + - @backstage/plugin-search-react@1.6.3-next.1 + - @backstage/plugin-techdocs@1.6.5-next.1 + - @backstage/plugin-techdocs-react@1.1.8-next.1 + - @backstage/core-app-api@1.8.2-next.0 + +## 1.0.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.3-next.0 + - @backstage/core-app-api@1.8.1 + - @backstage/core-plugin-api@1.5.2 + - @backstage/integration-react@1.1.15-next.0 + - @backstage/test-utils@1.4.1-next.0 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog@1.11.3-next.0 + - @backstage/plugin-search-react@1.6.3-next.0 + - @backstage/plugin-techdocs@1.6.5-next.0 + - @backstage/plugin-techdocs-react@1.1.8-next.0 + +## 1.0.15 + +### Patch Changes + +- 1fd38bc4141a: Avoiding re-running tests on cleanup. +- Updated dependencies + - @backstage/core-app-api@1.8.1 + - @backstage/core-plugin-api@1.5.2 + - @backstage/plugin-catalog@1.11.2 + - @backstage/plugin-search-react@1.6.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-techdocs@1.6.4 + - @backstage/test-utils@1.4.0 + - @backstage/plugin-techdocs-react@1.1.7 + - @backstage/integration-react@1.1.14 + +## 1.0.15-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-react@1.6.2-next.3 + - @backstage/core-components@0.13.2-next.3 + - @backstage/plugin-techdocs@1.6.4-next.3 + - @backstage/plugin-catalog@1.11.2-next.3 + - @backstage/core-app-api@1.8.1-next.0 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/integration-react@1.1.14-next.3 + - @backstage/test-utils@1.4.0-next.2 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-techdocs-react@1.1.7-next.3 + ## 1.0.14-next.2 ### Patch Changes diff --git a/plugins/techdocs-addons-test-utils/package.json b/plugins/techdocs-addons-test-utils/package.json index 1080fbe200..a718d5a842 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.14-next.2", + "version": "1.0.17-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -63,7 +63,6 @@ "@testing-library/react": "^12.1.3", "@testing-library/user-event": "^14.0.0", "@types/node": "^16.11.26", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/techdocs-addons-test-utils/src/setupTests.ts b/plugins/techdocs-addons-test-utils/src/setupTests.ts index 9bb3e72355..326d2ed212 100644 --- a/plugins/techdocs-addons-test-utils/src/setupTests.ts +++ b/plugins/techdocs-addons-test-utils/src/setupTests.ts @@ -14,4 +14,3 @@ * limitations under the License. */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/techdocs-backend/CHANGELOG.md b/plugins/techdocs-backend/CHANGELOG.md index 2101098aeb..ebb0e6c2ed 100644 --- a/plugins/techdocs-backend/CHANGELOG.md +++ b/plugins/techdocs-backend/CHANGELOG.md @@ -1,5 +1,114 @@ # @backstage/plugin-techdocs-backend +## 1.6.5-next.1 + +### Patch Changes + +- 629cbd194a87: Use `coreServices.rootConfig` instead of `coreService.config` +- Updated dependencies + - @backstage/plugin-search-backend-module-techdocs@0.1.4-next.1 + - @backstage/backend-common@0.19.2-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/plugin-techdocs-node@1.7.4-next.1 + - @backstage/integration@1.5.1 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/plugin-catalog-common@1.0.15 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-search-common@1.2.5 + +## 1.6.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/integration@1.5.1 + - @backstage/plugin-catalog-common@1.0.15 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-search-backend-module-techdocs@0.1.4-next.0 + - @backstage/plugin-search-common@1.2.5 + - @backstage/plugin-techdocs-node@1.7.4-next.0 + +## 1.6.4 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-common@0.19.1 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1 + - @backstage/plugin-catalog-common@1.0.15 + - @backstage/plugin-permission-common@0.7.7 + - @backstage/plugin-search-backend-module-techdocs@0.1.3 + - @backstage/plugin-search-common@1.2.5 + - @backstage/plugin-techdocs-node@1.7.3 + +## 1.6.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1-next.0 + - @backstage/plugin-catalog-common@1.0.15-next.0 + - @backstage/plugin-permission-common@0.7.7-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.3-next.0 + - @backstage/plugin-search-common@1.2.5-next.0 + - @backstage/plugin-techdocs-node@1.7.3-next.0 + +## 1.6.3 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/catalog-client@1.4.2 + - @backstage/plugin-techdocs-node@1.7.2 + - @backstage/integration@1.5.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + - @backstage/backend-plugin-api@0.5.3 + - @backstage/plugin-search-backend-module-techdocs@0.1.2 + - @backstage/config@1.0.8 + - @backstage/plugin-catalog-common@1.0.14 + - @backstage/plugin-permission-common@0.7.6 + - @backstage/plugin-search-common@1.2.4 + +## 1.6.3-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/plugin-techdocs-node@1.7.2-next.2 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/catalog-client@1.4.2-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.2.0-next.0 + - @backstage/integration@1.5.0-next.0 + - @backstage/plugin-catalog-common@1.0.14-next.1 + - @backstage/plugin-permission-common@0.7.6-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.2-next.2 + - @backstage/plugin-search-common@1.2.4-next.0 + ## 1.6.3-next.1 ### Patch Changes diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index e4e1e7f9be..87d10c91ae 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.3-next.1", + "version": "1.6.5-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-backend/src/plugin.ts b/plugins/techdocs-backend/src/plugin.ts index 134de2bba6..745370b67a 100644 --- a/plugins/techdocs-backend/src/plugin.ts +++ b/plugins/techdocs-backend/src/plugin.ts @@ -41,7 +41,7 @@ export const techdocsPlugin = createBackendPlugin({ register(env) { env.registerInit({ deps: { - config: coreServices.config, + config: coreServices.rootConfig, logger: coreServices.logger, urlReader: coreServices.urlReader, http: coreServices.httpRouter, diff --git a/plugins/techdocs-module-addons-contrib/CHANGELOG.md b/plugins/techdocs-module-addons-contrib/CHANGELOG.md index 4f12fb9372..8af1e616bc 100644 --- a/plugins/techdocs-module-addons-contrib/CHANGELOG.md +++ b/plugins/techdocs-module-addons-contrib/CHANGELOG.md @@ -1,5 +1,100 @@ # @backstage/plugin-techdocs-module-addons-contrib +## 1.0.16-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-react@1.1.16-next.1 + - @backstage/integration@1.5.1 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/theme@0.4.1 + - @backstage/plugin-techdocs-react@1.1.9-next.0 + +## 1.0.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/integration@1.5.1 + - @backstage/integration-react@1.1.16-next.0 + - @backstage/theme@0.4.1 + - @backstage/plugin-techdocs-react@1.1.9-next.0 + +## 1.0.15 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/integration@1.5.1 + - @backstage/integration-react@1.1.15 + - @backstage/plugin-techdocs-react@1.1.8 + +## 1.0.15-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/integration@1.5.1-next.0 + - @backstage/integration-react@1.1.15-next.2 + - @backstage/plugin-techdocs-react@1.1.8-next.2 + +## 1.0.15-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/integration-react@1.1.15-next.1 + - @backstage/plugin-techdocs-react@1.1.8-next.1 + +## 1.0.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.3-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/integration@1.5.1-next.0 + - @backstage/integration-react@1.1.15-next.0 + - @backstage/theme@0.4.0 + - @backstage/plugin-techdocs-react@1.1.8-next.0 + +## 1.0.14 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/integration@1.5.0 + - @backstage/plugin-techdocs-react@1.1.7 + - @backstage/integration-react@1.1.14 + +## 1.0.14-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/integration@1.5.0-next.0 + - @backstage/integration-react@1.1.14-next.3 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-techdocs-react@1.1.7-next.3 + ## 1.0.14-next.2 ### Patch Changes diff --git a/plugins/techdocs-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json index 3db0a218e9..da388e9044 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.14-next.2", + "version": "1.0.16-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -64,7 +64,6 @@ "@testing-library/user-event": "^14.0.0", "@types/node": "^16.11.26", "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/techdocs-module-addons-contrib/src/setupTests.ts b/plugins/techdocs-module-addons-contrib/src/setupTests.ts index 9bb3e72355..326d2ed212 100644 --- a/plugins/techdocs-module-addons-contrib/src/setupTests.ts +++ b/plugins/techdocs-module-addons-contrib/src/setupTests.ts @@ -14,4 +14,3 @@ * limitations under the License. */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/techdocs-node/CHANGELOG.md b/plugins/techdocs-node/CHANGELOG.md index 0626b7f8cd..4f3b73146d 100644 --- a/plugins/techdocs-node/CHANGELOG.md +++ b/plugins/techdocs-node/CHANGELOG.md @@ -1,5 +1,87 @@ # @backstage/plugin-techdocs-node +## 1.7.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/integration@1.5.1 + - @backstage/integration-aws-node@0.1.5 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/plugin-search-common@1.2.5 + +## 1.7.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/integration@1.5.1 + - @backstage/integration-aws-node@0.1.5 + - @backstage/plugin-search-common@1.2.5 + +## 1.7.3 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-common@0.19.1 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1 + - @backstage/integration-aws-node@0.1.5 + - @backstage/plugin-search-common@1.2.5 + +## 1.7.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1-next.0 + - @backstage/integration-aws-node@0.1.5-next.0 + - @backstage/plugin-search-common@1.2.5-next.0 + +## 1.7.2 + +### Patch Changes + +- b43e030911f2: Upgrade `@azure/identity` to support using Workload Identity to authenticate against Azure. +- 7d4a09304f67: Use latest techdocs docker image by default. The latest image contains security updates. +- 5f2c38c70f5b: Fix SNYK-JS-FASTXMLPARSER-5668858 (`fast-xml-parser`) by upgrading aws-sdk to at least the current latest version. +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/integration-aws-node@0.1.4 + - @backstage/integration@1.5.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + - @backstage/config@1.0.8 + - @backstage/plugin-search-common@1.2.4 + +## 1.7.2-next.2 + +### Patch Changes + +- 5f2c38c70f5b: Fix SNYK-JS-FASTXMLPARSER-5668858 (`fast-xml-parser`) by upgrading aws-sdk to at least the current latest version. +- Updated dependencies + - @backstage/integration-aws-node@0.1.4-next.1 + - @backstage/backend-common@0.19.0-next.2 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/config@1.0.7 + - @backstage/errors@1.2.0-next.0 + - @backstage/integration@1.5.0-next.0 + - @backstage/plugin-search-common@1.2.4-next.0 + ## 1.7.2-next.1 ### Patch Changes diff --git a/plugins/techdocs-node/package.json b/plugins/techdocs-node/package.json index faaff43fd5..5f0f3d69d7 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.2-next.1", + "version": "1.7.4-next.1", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { @@ -39,12 +39,12 @@ "url": "https://github.com/backstage/backstage/issues" }, "dependencies": { - "@aws-sdk/client-s3": "^3.310.0", - "@aws-sdk/credential-providers": "^3.310.0", - "@aws-sdk/lib-storage": "^3.310.0", - "@aws-sdk/node-http-handler": "^3.310.0", - "@aws-sdk/types": "^3.310.0", - "@azure/identity": "^2.1.0", + "@aws-sdk/client-s3": "^3.350.0", + "@aws-sdk/credential-providers": "^3.350.0", + "@aws-sdk/lib-storage": "^3.350.0", + "@aws-sdk/node-http-handler": "^3.350.0", + "@aws-sdk/types": "^3.347.0", + "@azure/identity": "^3.2.1", "@azure/storage-blob": "^12.5.0", "@backstage/backend-common": "workspace:^", "@backstage/catalog-model": "workspace:^", diff --git a/plugins/techdocs-react/CHANGELOG.md b/plugins/techdocs-react/CHANGELOG.md index c1d02ae39e..8aa94ebbe5 100644 --- a/plugins/techdocs-react/CHANGELOG.md +++ b/plugins/techdocs-react/CHANGELOG.md @@ -1,5 +1,81 @@ # @backstage/plugin-techdocs-react +## 1.1.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/version-bridge@1.0.4 + +## 1.1.8 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/version-bridge@1.0.4 + +## 1.1.8-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/version-bridge@1.0.4 + +## 1.1.8-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/config@1.0.8 + +## 1.1.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/core-plugin-api@1.5.2 + - @backstage/version-bridge@1.0.4 + +## 1.1.7 + +### Patch Changes + +- 3d11596a72b5: Update plugin installation docs to be more consistent across documentations +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/catalog-model@1.4.0 + - @backstage/config@1.0.8 + - @backstage/version-bridge@1.0.4 + +## 1.1.7-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/version-bridge@1.0.4 + ## 1.1.7-next.2 ### Patch Changes diff --git a/plugins/techdocs-react/package.json b/plugins/techdocs-react/package.json index b09bf29aaa..42df70d181 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.7-next.2", + "version": "1.1.9-next.0", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md index 804c60a28d..fe0813b36a 100644 --- a/plugins/techdocs/CHANGELOG.md +++ b/plugins/techdocs/CHANGELOG.md @@ -1,5 +1,149 @@ # @backstage/plugin-techdocs +## 1.6.6-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/integration-react@1.1.16-next.1 + - @backstage/integration@1.5.1 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/plugin-search-common@1.2.5 + - @backstage/plugin-search-react@1.6.4-next.0 + - @backstage/plugin-techdocs-react@1.1.9-next.0 + +## 1.6.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/plugin-search-react@1.6.4-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/integration@1.5.1 + - @backstage/integration-react@1.1.16-next.0 + - @backstage/theme@0.4.1 + - @backstage/plugin-search-common@1.2.5 + - @backstage/plugin-techdocs-react@1.1.9-next.0 + +## 1.6.5 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1 + - @backstage/integration-react@1.1.15 + - @backstage/plugin-search-common@1.2.5 + - @backstage/plugin-search-react@1.6.3 + - @backstage/plugin-techdocs-react@1.1.8 + +## 1.6.5-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1-next.0 + - @backstage/integration@1.5.1-next.0 + - @backstage/integration-react@1.1.15-next.2 + - @backstage/plugin-search-common@1.2.5-next.0 + - @backstage/plugin-search-react@1.6.3-next.2 + - @backstage/plugin-techdocs-react@1.1.8-next.2 + +## 1.6.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/integration-react@1.1.15-next.1 + - @backstage/plugin-catalog-react@1.7.1-next.1 + - @backstage/plugin-search-react@1.6.3-next.1 + - @backstage/plugin-techdocs-react@1.1.8-next.1 + - @backstage/config@1.0.8 + +## 1.6.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/core-plugin-api@1.5.2 + - @backstage/integration@1.5.1-next.0 + - @backstage/integration-react@1.1.15-next.0 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + - @backstage/plugin-search-common@1.2.5-next.0 + - @backstage/plugin-search-react@1.6.3-next.0 + - @backstage/plugin-techdocs-react@1.1.8-next.0 + +## 1.6.4 + +### Patch Changes + +- 2f660eb573cc: Fix SearchBar styles & update StoryBook stories for custom styles for `notchedOutline` class. +- 956d09e8ea68: Change deprecated local references to import from shared `plugin-techdocs-react` plugin +- e33beb1f2a8e: Make the documentation pages printable (also handy for exporting to PDF) +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/plugin-search-react@1.6.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/integration@1.5.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + - @backstage/plugin-techdocs-react@1.1.7 + - @backstage/integration-react@1.1.14 + - @backstage/config@1.0.8 + - @backstage/plugin-search-common@1.2.4 + +## 1.6.4-next.3 + +### Patch Changes + +- e33beb1f2a8e: Make the documentation pages printable (also handy for exporting to PDF) +- Updated dependencies + - @backstage/plugin-search-react@1.6.2-next.3 + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/config@1.0.7 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/integration@1.5.0-next.0 + - @backstage/integration-react@1.1.14-next.3 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + - @backstage/plugin-search-common@1.2.4-next.0 + - @backstage/plugin-techdocs-react@1.1.7-next.3 + ## 1.6.3-next.2 ### Patch Changes @@ -529,7 +673,7 @@ - d3fea4ae0a: Internal fixes to avoid implicit usage of globals - 2e701b3796: Internal refactor to use `react-router-dom` rather than `react-router`. - a19cffbeed: Update search links to only have header as linkable text -- 5d3058355d: Add `react/forbid-elements` linter rule for button, suggest MUI `Button` +- 5d3058355d: Add `react/forbid-elements` linter rule for button, suggest Material UI `Button` - 3280711113: Updated dependency `msw` to `^0.49.0`. - 786f1b1419: Support older versions of react-router - Updated dependencies diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index 8064005d66..080401b9f6 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.3-next.2", + "version": "1.6.6-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs/src/home/components/DefaultTechDocsHome.test.tsx b/plugins/techdocs/src/home/components/DefaultTechDocsHome.test.tsx index 9ac2ac4ef4..1f073e184d 100644 --- a/plugins/techdocs/src/home/components/DefaultTechDocsHome.test.tsx +++ b/plugins/techdocs/src/home/components/DefaultTechDocsHome.test.tsx @@ -36,8 +36,8 @@ import React from 'react'; import { rootDocsRouteRef } from '../../routes'; import { DefaultTechDocsHome } from './DefaultTechDocsHome'; -const mockCatalogApi = { - getEntityByRef: () => Promise.resolve(), +const mockCatalogApi: Partial = { + getEntityFacets: async () => ({ facets: { 'relations.ownedBy': [] } }), getEntitiesByRefs: () => Promise.resolve({ items: [] }), getEntities: async () => ({ items: [ @@ -51,7 +51,7 @@ const mockCatalogApi = { }, ], }), -} as Partial; +}; describe('TechDocs Home', () => { const configApi: ConfigApi = new ConfigReader({ diff --git a/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/TechDocsReaderPageContent.tsx b/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/TechDocsReaderPageContent.tsx index 000a1ba275..1e5459fc9d 100644 --- a/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/TechDocsReaderPageContent.tsx +++ b/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/TechDocsReaderPageContent.tsx @@ -39,6 +39,9 @@ const useStyles = makeStyles({ width: 'calc(100% - 34.4rem)', margin: '0 auto', }, + '@media print': { + display: 'none', + }, }, }); diff --git a/plugins/techdocs/src/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx b/plugins/techdocs/src/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx index f3612aa46e..85f04655fd 100644 --- a/plugins/techdocs/src/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx +++ b/plugins/techdocs/src/reader/components/TechDocsReaderPageSubheader/TechDocsReaderPageSubheader.tsx @@ -39,6 +39,9 @@ const useStyles = makeStyles(theme => ({ flexDirection: 'column', minHeight: 'auto', padding: theme.spacing(3, 3, 0), + '@media print': { + display: 'none', + }, }, })); diff --git a/plugins/techdocs/src/reader/transformers/styles/rules/layout.ts b/plugins/techdocs/src/reader/transformers/styles/rules/layout.ts index c5e69e6084..cce6af7d6f 100644 --- a/plugins/techdocs/src/reader/transformers/styles/rules/layout.ts +++ b/plugins/techdocs/src/reader/transformers/styles/rules/layout.ts @@ -227,4 +227,18 @@ export default ({ theme, sidebar }: RuleOptions) => ` width: 12.1rem; } } + + +@media print { + .md-sidebar, + #toggle-sidebar { + display: none; + } + + .md-content { + margin: 0; + width: 100%; + max-width: 100%; + } +} `; diff --git a/plugins/todo-backend/CHANGELOG.md b/plugins/todo-backend/CHANGELOG.md index a800dd1065..ab059adbff 100644 --- a/plugins/todo-backend/CHANGELOG.md +++ b/plugins/todo-backend/CHANGELOG.md @@ -1,5 +1,96 @@ # @backstage/plugin-todo-backend +## 0.2.0-next.1 + +### Patch Changes + +- 629cbd194a87: Use `coreServices.rootConfig` instead of `coreService.config` +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/backend-openapi-utils@0.0.3-next.1 + - @backstage/plugin-catalog-node@1.4.1-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/integration@1.5.1 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + +## 0.2.0-next.0 + +### Minor Changes + +- ebeb77586975: Now performs request validation based on OpenAPI schema through `@backstage/backend-openapi-utils`. Error responses for invalid input, like `"a"` instead of a number, may have changed. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-openapi-utils@0.0.3-next.0 + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + - @backstage/integration@1.5.1 + - @backstage/plugin-catalog-node@1.4.1-next.0 + +## 0.1.44 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-common@0.19.1 + - @backstage/plugin-catalog-node@1.4.0 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/catalog-client@1.4.3 + - @backstage/catalog-model@1.4.1 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1 + +## 0.1.44-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/plugin-catalog-node@1.4.0-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/catalog-client@1.4.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/config@1.0.8 + - @backstage/integration@1.5.1-next.0 + +## 0.1.43 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/catalog-client@1.4.2 + - @backstage/integration@1.5.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + - @backstage/backend-plugin-api@0.5.3 + - @backstage/plugin-catalog-node@1.3.7 + - @backstage/config@1.0.8 + +## 0.1.43-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/catalog-client@1.4.2-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.2.0-next.0 + - @backstage/integration@1.5.0-next.0 + - @backstage/plugin-catalog-node@1.3.7-next.2 + ## 0.1.43-next.1 ### Patch Changes diff --git a/plugins/todo-backend/README.md b/plugins/todo-backend/README.md index 4686c2d39f..0aec607b93 100644 --- a/plugins/todo-backend/README.md +++ b/plugins/todo-backend/README.md @@ -25,7 +25,7 @@ export default async function createPlugin( }); const catalogClient = new CatalogClient({ - discoveryApi: discovery, + discoveryApi: env.discovery, }); const todoService = new TodoReaderService({ diff --git a/plugins/todo-backend/package.json b/plugins/todo-backend/package.json index 6612d38300..520fac0215 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.43-next.1", + "version": "0.2.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -30,6 +30,7 @@ }, "dependencies": { "@backstage/backend-common": "workspace:^", + "@backstage/backend-openapi-utils": "workspace:^", "@backstage/backend-plugin-api": "workspace:^", "@backstage/catalog-client": "workspace:^", "@backstage/catalog-model": "workspace:^", @@ -45,7 +46,6 @@ "yn": "^4.0.0" }, "devDependencies": { - "@backstage/backend-openapi-utils": "workspace:^", "@backstage/cli": "workspace:^", "@types/supertest": "^2.0.8", "msw": "^1.0.0", diff --git a/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts b/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts index 276d176efb..2ce1771ecb 100644 --- a/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts +++ b/plugins/todo-backend/src/lib/TodoReader/TodoScmReader.ts @@ -183,7 +183,7 @@ export const todoReaderServiceRef = createServiceRef({ service, deps: { reader: coreServices.urlReader, - config: coreServices.config, + config: coreServices.rootConfig, logger: coreServices.logger, }, factory: async ({ reader, config, logger }) => { diff --git a/plugins/todo-backend/src/lib/utils.ts b/plugins/todo-backend/src/lib/utils.ts index cf0c2e4ea6..63bf754f01 100644 --- a/plugins/todo-backend/src/lib/utils.ts +++ b/plugins/todo-backend/src/lib/utils.ts @@ -16,23 +16,6 @@ import { InputError } from '@backstage/errors'; -export const parseIntegerParam = ( - str: unknown, - ctx: string, -): number | undefined => { - if (str === undefined) { - return undefined; - } - if (typeof str !== 'string') { - throw new InputError(`invalid ${ctx}, must be a string`); - } - const parsed = parseInt(str, 10); - if (!Number.isInteger(parsed) || String(parsed) !== str) { - throw new InputError(`invalid ${ctx}, not an integer`); - } - return parsed; -}; - export const parseOrderByParam = ( str: unknown, allowedFields: T, diff --git a/plugins/todo-backend/src/schema/openapi.generated.ts b/plugins/todo-backend/src/schema/openapi.generated.ts index 54486a5615..a58a96ddb8 100644 --- a/plugins/todo-backend/src/schema/openapi.generated.ts +++ b/plugins/todo-backend/src/schema/openapi.generated.ts @@ -17,8 +17,9 @@ // ****************************************************************** // * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. * // ****************************************************************** +import { createValidatedOpenApiRouter } from '@backstage/backend-openapi-utils'; -export default { +export const spec = { openapi: '3.0.3', info: { title: '@backstage/plugin-todo-backend', @@ -149,7 +150,8 @@ export default { { name: 'entity', in: 'query', - required: true, + required: false, + allowReserved: true, schema: { type: 'string', minLength: 1, @@ -206,3 +208,6 @@ export default { }, }, } as const; +export const createOpenApiRouter = async ( + options?: Parameters['1'], +) => createValidatedOpenApiRouter(spec, options); diff --git a/plugins/todo-backend/src/schema/openapi.yaml b/plugins/todo-backend/src/schema/openapi.yaml index 3fba129644..0e6203e002 100644 --- a/plugins/todo-backend/src/schema/openapi.yaml +++ b/plugins/todo-backend/src/schema/openapi.yaml @@ -95,7 +95,8 @@ paths: parameters: - name: entity in: query - required: true + required: false + allowReserved: true schema: type: string minLength: 1 diff --git a/plugins/todo-backend/src/service/router.test.ts b/plugins/todo-backend/src/service/router.test.ts index f2d9f2c7a3..0bf591316c 100644 --- a/plugins/todo-backend/src/service/router.test.ts +++ b/plugins/todo-backend/src/service/router.test.ts @@ -19,11 +19,7 @@ import request from 'supertest'; import { errorHandler } from '@backstage/backend-common'; import { createRouter } from './router'; -import { - parseFilterParam, - parseIntegerParam, - parseOrderByParam, -} from '../lib/utils'; +import { parseFilterParam, parseOrderByParam } from '../lib/utils'; import { TodoService } from './types'; const mockListBody = { @@ -136,58 +132,44 @@ describe('createRouter', () => { }); it('rejects invalid queries', async () => { - await expect( - request(app).get('/v1/todos?entity=k:n&entity=k:n'), - ).resolves.toMatchObject( - matchErrorResponse(400, 'InputError', 'entity query must be a string'), - ); + request(app) + .get('/v1/todos?entity=k:n&entity=k:n') + .expect(400) + .expect( + matchErrorResponse( + 400, + 'InputError', + 'entity query must be a string', + ), + ); - await expect( - request(app).get('/v1/todos?entity=:n'), - ).resolves.toMatchObject( - matchErrorResponse( - 400, - 'InputError', - 'Invalid entity ref, TypeError: Entity reference ":n" was not on the form [:][/]', - ), - ); + request(app) + .get('/v1/todos?entity=:n') + .expect(400) + .expect( + matchErrorResponse( + 400, + 'InputError', + 'Invalid entity ref, TypeError: Entity reference ":n" was not on the form [:][/]', + ), + ); - await expect( - request(app).get('/v1/todos?offset=1.5'), - ).resolves.toMatchObject( - matchErrorResponse( - 400, - 'InputError', - 'invalid offset query, not an integer', - ), - ); + request(app) + .get('/v1/todos?offset=1.5') + .expect(400) + .expect( + matchErrorResponse( + 400, + 'InputError', + 'invalid offset query, not an integer', + ), + ); expect(mockService.listTodos).not.toHaveBeenCalled(); }); }); }); -describe('parseIntegerParam', () => { - it('should parse a param', () => { - expect(parseIntegerParam('1', 'ctx')).toBe(1); - }); - - it('should reject invalid params', () => { - expect(() => parseIntegerParam(['1'], 'ctx')).toThrow( - 'invalid ctx, must be a string', - ); - expect(() => parseIntegerParam('1.5', 'ctx')).toThrow( - 'invalid ctx, not an integer', - ); - expect(() => parseIntegerParam('foo', 'ctx')).toThrow( - 'invalid ctx, not an integer', - ); - expect(() => parseIntegerParam('1foo', 'ctx')).toThrow( - 'invalid ctx, not an integer', - ); - }); -}); - describe('parseOrderByParam', () => { it('should parse a param', () => { expect(parseOrderByParam('a=asc', ['a'])).toEqual({ diff --git a/plugins/todo-backend/src/service/router.ts b/plugins/todo-backend/src/service/router.ts index 364cbef6b0..53b0a02668 100644 --- a/plugins/todo-backend/src/service/router.ts +++ b/plugins/todo-backend/src/service/router.ts @@ -17,16 +17,13 @@ import { CompoundEntityRef, parseEntityRef } from '@backstage/catalog-model'; import { InputError } from '@backstage/errors'; import express from 'express'; -import Router from 'express-promise-router'; import { type TodoService, TODO_FIELDS } from './types'; import { getBearerToken, parseFilterParam, - parseIntegerParam, parseOrderByParam, } from '../lib/utils'; -import spec from '../schema/openapi.generated'; -import type { ApiRouter } from '@backstage/backend-openapi-utils'; +import { createOpenApiRouter } from '../schema/openapi.generated'; /** @public */ export interface RouterOptions { @@ -37,14 +34,12 @@ export interface RouterOptions { export async function createRouter( options: RouterOptions, ): Promise { + const router = await createOpenApiRouter(); + router.use(express.json()); const { todoService } = options; - const router = Router() as ApiRouter; - router.use(express.json()); - router.get('/v1/todos', async (req, res) => { - const offset = parseIntegerParam(req.query.offset, 'offset query'); - const limit = parseIntegerParam(req.query.limit, 'limit query'); + const { offset, limit } = req.query; const orderBy = parseOrderByParam(req.query.orderBy, TODO_FIELDS); const filters = parseFilterParam(req.query.filter, TODO_FIELDS); diff --git a/plugins/todo/CHANGELOG.md b/plugins/todo/CHANGELOG.md index 84d3b3b072..9a7758da72 100644 --- a/plugins/todo/CHANGELOG.md +++ b/plugins/todo/CHANGELOG.md @@ -1,5 +1,87 @@ # @backstage/plugin-todo +## 0.2.23-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + +## 0.2.22 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + +## 0.2.22-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/errors@1.2.1-next.0 + +## 0.2.22-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + +## 0.2.22-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + +## 0.2.21 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + +## 0.2.21-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + ## 0.2.21-next.2 ### Patch Changes diff --git a/plugins/todo/package.json b/plugins/todo/package.json index 530c8db36d..fa18bf94bb 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.21-next.2", + "version": "0.2.23-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -57,7 +57,6 @@ "@testing-library/user-event": "^14.0.0", "@types/node": "^16.11.26", "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/todo/src/setupTests.ts b/plugins/todo/src/setupTests.ts index fc6dbd98f8..7435872609 100644 --- a/plugins/todo/src/setupTests.ts +++ b/plugins/todo/src/setupTests.ts @@ -14,4 +14,3 @@ * limitations under the License. */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/user-settings-backend/CHANGELOG.md b/plugins/user-settings-backend/CHANGELOG.md index b28d4360c4..c33eab6b77 100644 --- a/plugins/user-settings-backend/CHANGELOG.md +++ b/plugins/user-settings-backend/CHANGELOG.md @@ -1,5 +1,78 @@ # @backstage/plugin-user-settings-backend +## 0.1.12-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/plugin-auth-node@0.2.17-next.1 + - @backstage/backend-plugin-api@0.6.0-next.1 + - @backstage/catalog-model@1.4.1 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + +## 0.1.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-plugin-api@0.5.5-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/errors@1.2.1 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.17-next.0 + +## 0.1.11 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-common@0.19.1 + - @backstage/backend-plugin-api@0.5.4 + - @backstage/catalog-model@1.4.1 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.16 + +## 0.1.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-plugin-api@0.5.4-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/types@1.1.0 + - @backstage/plugin-auth-node@0.2.16-next.0 + +## 0.1.10 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/types@1.1.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + - @backstage/backend-plugin-api@0.5.3 + - @backstage/plugin-auth-node@0.2.15 + +## 0.1.10-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/backend-plugin-api@0.5.3-next.2 + - @backstage/errors@1.2.0-next.0 + - @backstage/types@1.0.2 + - @backstage/plugin-auth-node@0.2.15-next.2 + ## 0.1.10-next.1 ### Patch Changes diff --git a/plugins/user-settings-backend/package.json b/plugins/user-settings-backend/package.json index cfbdf935a3..b472754b2b 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.10-next.1", + "version": "0.1.12-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -14,6 +14,7 @@ "types": "dist/index.d.ts", "alphaTypes": "dist/index.alpha.d.ts" }, + "homepage": "https://backstage.io", "repository": { "type": "git", "url": "https://github.com/backstage/backstage", diff --git a/plugins/user-settings/CHANGELOG.md b/plugins/user-settings/CHANGELOG.md index abb471a776..026ea410f9 100644 --- a/plugins/user-settings/CHANGELOG.md +++ b/plugins/user-settings/CHANGELOG.md @@ -1,5 +1,98 @@ # @backstage/plugin-user-settings +## 0.7.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-app-api@1.9.1-next.0 + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + - @backstage/types@1.1.0 + +## 0.7.5 + +### Patch Changes + +- 8174cf4c0edf: Fixing MUI / Material UI references +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-app-api@1.9.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/types@1.1.0 + +## 0.7.5-next.2 + +### Patch Changes + +- 8174cf4c0edf: Fixing MUI / Material UI references +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/core-app-api@1.8.2-next.1 + - @backstage/errors@1.2.1-next.0 + - @backstage/types@1.1.0 + +## 0.7.5-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + - @backstage/core-app-api@1.8.2-next.0 + +## 0.7.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/core-app-api@1.8.1 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/types@1.1.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + +## 0.7.4 + +### Patch Changes + +- 7a8441b9a323: Reflect the updated sign on status for a provider after signing out. +- 5362a7c58eaa: Improved the user experience of the feature flags list. It now sorts the enabled flags to the top of the list to increase the visibilities of the toggled flags. +- Updated dependencies + - @backstage/core-app-api@1.8.1 + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/types@1.1.0 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/errors@1.2.0 + +## 0.7.4-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/core-app-api@1.8.1-next.0 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/types@1.0.2 + - @backstage/plugin-catalog-react@1.7.0-next.3 + ## 0.7.4-next.2 ### Patch Changes diff --git a/plugins/user-settings/README.md b/plugins/user-settings/README.md index 9a99a69b36..1ecaaeb536 100644 --- a/plugins/user-settings/README.md +++ b/plugins/user-settings/README.md @@ -64,7 +64,7 @@ const AppRoutes = () => ( ); ``` -> **Note that the list of providers expects to be rendered within a MUI [``](https://material-ui.com/components/lists/)** +> **Note that the list of providers expects to be rendered within a Material UI [``](https://v4.mui.com/components/lists/)** **Tabs** diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index 3291816e8e..57a6d89be0 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.4-next.2", + "version": "0.7.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/vault-backend/CHANGELOG.md b/plugins/vault-backend/CHANGELOG.md index f7367ce2d9..cac3188526 100644 --- a/plugins/vault-backend/CHANGELOG.md +++ b/plugins/vault-backend/CHANGELOG.md @@ -1,5 +1,65 @@ # @backstage/plugin-vault-backend +## 0.3.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.1 + - @backstage/backend-tasks@0.5.5-next.1 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + +## 0.3.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.2-next.0 + - @backstage/backend-tasks@0.5.5-next.0 + - @backstage/config@1.0.8 + - @backstage/errors@1.2.1 + +## 0.3.3 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1 + - @backstage/backend-common@0.19.1 + - @backstage/backend-tasks@0.5.4 + - @backstage/config@1.0.8 + +## 0.3.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/backend-common@0.19.1-next.0 + - @backstage/backend-tasks@0.5.4-next.0 + - @backstage/config@1.0.8 + +## 0.3.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0 + - @backstage/errors@1.2.0 + - @backstage/backend-tasks@0.5.3 + - @backstage/config@1.0.8 + +## 0.3.2-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.0-next.2 + - @backstage/backend-tasks@0.5.3-next.2 + - @backstage/config@1.0.7 + - @backstage/errors@1.2.0-next.0 + ## 0.3.2-next.1 ### Patch Changes diff --git a/plugins/vault-backend/package.json b/plugins/vault-backend/package.json index 47ade317b2..44d01c576b 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.2-next.1", + "version": "0.3.4-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 5200a202bb..d6ba597c0d 100644 --- a/plugins/vault/CHANGELOG.md +++ b/plugins/vault/CHANGELOG.md @@ -1,5 +1,87 @@ # @backstage/plugin-vault +## 0.1.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/plugin-catalog-react@1.8.1-next.0 + - @backstage/catalog-model@1.4.1 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + +## 0.1.14 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/plugin-catalog-react@1.8.0 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + - @backstage/catalog-model@1.4.1 + +## 0.1.14-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-react@1.8.0-next.2 + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/errors@1.2.1-next.0 + +## 0.1.14-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + - @backstage/plugin-catalog-react@1.7.1-next.1 + +## 0.1.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/catalog-model@1.4.1-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.1-next.0 + +## 0.1.13 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/plugin-catalog-react@1.7.0 + - @backstage/catalog-model@1.4.0 + - @backstage/errors@1.2.0 + +## 0.1.13-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/catalog-model@1.4.0-next.1 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/theme@0.4.0-next.1 + - @backstage/plugin-catalog-react@1.7.0-next.3 + ## 0.1.13-next.2 ### Patch Changes diff --git a/plugins/vault/package.json b/plugins/vault/package.json index 2b2ffae17c..7d77495527 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.13-next.2", + "version": "0.1.15-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -60,7 +60,6 @@ "@testing-library/user-event": "^14.0.0", "@types/node": "*", "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/vault/src/setupTests.ts b/plugins/vault/src/setupTests.ts index b201a9c83e..28a35d2b06 100644 --- a/plugins/vault/src/setupTests.ts +++ b/plugins/vault/src/setupTests.ts @@ -14,4 +14,3 @@ * limitations under the License. */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/xcmetrics/CHANGELOG.md b/plugins/xcmetrics/CHANGELOG.md index ababe4b855..5fafa11c11 100644 --- a/plugins/xcmetrics/CHANGELOG.md +++ b/plugins/xcmetrics/CHANGELOG.md @@ -1,5 +1,86 @@ # @backstage/plugin-xcmetrics +## 0.2.41-next.1 + +### Patch Changes + +- 12a8c94eda8d: Add package repository and homepage metadata +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + +## 0.2.41-next.0 + +### Patch Changes + +- 3d86be999fdf: Prefer simple `theme.spacing` without string interpolation +- Updated dependencies + - @backstage/core-components@0.13.4-next.0 + - @backstage/core-plugin-api@1.5.3 + - @backstage/errors@1.2.1 + - @backstage/theme@0.4.1 + +## 0.2.40 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1 + - @backstage/errors@1.2.1 + - @backstage/core-components@0.13.3 + - @backstage/core-plugin-api@1.5.3 + +## 0.2.40-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.1 + - @backstage/core-plugin-api@1.5.3-next.1 + - @backstage/core-components@0.13.3-next.2 + - @backstage/errors@1.2.1-next.0 + +## 0.2.40-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/theme@0.4.1-next.0 + - @backstage/core-components@0.13.3-next.1 + - @backstage/core-plugin-api@1.5.3-next.0 + +## 0.2.40-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/errors@1.2.1-next.0 + - @backstage/core-components@0.13.3-next.0 + - @backstage/core-plugin-api@1.5.2 + - @backstage/theme@0.4.0 + +## 0.2.39 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.5.2 + - @backstage/core-components@0.13.2 + - @backstage/theme@0.4.0 + - @backstage/errors@1.2.0 + +## 0.2.39-next.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.2-next.3 + - @backstage/core-plugin-api@1.5.2-next.0 + - @backstage/errors@1.2.0-next.0 + - @backstage/theme@0.4.0-next.1 + ## 0.2.39-next.2 ### Patch Changes diff --git a/plugins/xcmetrics/package.json b/plugins/xcmetrics/package.json index 6d40083187..54320e6f7f 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.39-next.2", + "version": "0.2.41-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -13,6 +13,12 @@ "backstage": { "role": "frontend-plugin" }, + "homepage": "https://backstage.io", + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/xcmetrics" + }, "scripts": { "build": "backstage-cli package build", "start": "backstage-cli package start", @@ -52,7 +58,6 @@ "@types/luxon": "^3.0.0", "@types/node": "^16.11.26", "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/xcmetrics/src/components/DatePicker/DatePicker.tsx b/plugins/xcmetrics/src/components/DatePicker/DatePicker.tsx index b524243ff7..e247f05cb6 100644 --- a/plugins/xcmetrics/src/components/DatePicker/DatePicker.tsx +++ b/plugins/xcmetrics/src/components/DatePicker/DatePicker.tsx @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import React from 'react'; import { createStyles, @@ -27,7 +28,7 @@ import { const BootstrapInput = withStyles((theme: Theme) => createStyles({ root: { - margin: `${theme.spacing(1)} 0px`, + margin: theme.spacing(1, 0), maxWidth: 300, 'label + &': { marginTop: theme.spacing(3), diff --git a/plugins/xcmetrics/src/setupTests.ts b/plugins/xcmetrics/src/setupTests.ts index fc6dbd98f8..7435872609 100644 --- a/plugins/xcmetrics/src/setupTests.ts +++ b/plugins/xcmetrics/src/setupTests.ts @@ -14,4 +14,3 @@ * limitations under the License. */ import '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/storybook/package.json b/storybook/package.json index 6f2161b64c..0f88ae634c 100644 --- a/storybook/package.json +++ b/storybook/package.json @@ -25,7 +25,7 @@ "@storybook/manager-webpack5": "^6.5.9", "@storybook/node-logger": "^6.5.9", "@storybook/react": "^6.5.9", - "@storybook/testing-library": "^0.1.0", + "@storybook/testing-library": "^0.2.0", "storybook-dark-mode": "^1.1.0", "typescript": "~4.7.0" }, diff --git a/storybook/yarn.lock b/storybook/yarn.lock index 4143a2fa67..61718c7a2f 100644 --- a/storybook/yarn.lock +++ b/storybook/yarn.lock @@ -386,7 +386,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.12.11, @babel/parser@npm:^7.12.7, @babel/parser@npm:^7.18.10, @babel/parser@npm:^7.18.11, @babel/parser@npm:^7.20.7": +"@babel/parser@npm:^7.12.11, @babel/parser@npm:^7.12.7, @babel/parser@npm:^7.18.10, @babel/parser@npm:^7.18.11": version: 7.21.4 resolution: "@babel/parser@npm:7.21.4" bin: @@ -1528,7 +1528,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.12.11, @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.2.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.3.0, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": +"@babel/types@npm:^7.12.11, @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.2.0, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": version: 7.21.4 resolution: "@babel/types@npm:7.21.4" dependencies: @@ -2130,20 +2130,6 @@ __metadata: languageName: node linkType: hard -"@storybook/channel-postmessage@npm:7.0.2": - version: 7.0.2 - resolution: "@storybook/channel-postmessage@npm:7.0.2" - dependencies: - "@storybook/channels": 7.0.2 - "@storybook/client-logger": 7.0.2 - "@storybook/core-events": 7.0.2 - "@storybook/global": ^5.0.0 - qs: ^6.10.0 - telejson: ^7.0.3 - checksum: ef175027b4b5794af263c6ec40f6caab02deb3c189598493f5612cd5745d9cada1427914dbf39aef01dbf3e71f4299d35cfcaaaad727c06da47850b56044032c - languageName: node - linkType: hard - "@storybook/channel-websocket@npm:6.5.16": version: 6.5.16 resolution: "@storybook/channel-websocket@npm:6.5.16" @@ -2168,13 +2154,6 @@ __metadata: languageName: node linkType: hard -"@storybook/channels@npm:7.0.2": - version: 7.0.2 - resolution: "@storybook/channels@npm:7.0.2" - checksum: 34ff0481a7f8bf613a9b1c9ffc3db4e48e8c80fea29d66b68a9c3b74d52040d87a5ed002d0e3e287813f33ad607440d46078e5e96367bf98713c72efb587d4a3 - languageName: node - linkType: hard - "@storybook/client-api@npm:6.5.16": version: 6.5.16 resolution: "@storybook/client-api@npm:6.5.16" @@ -2216,15 +2195,6 @@ __metadata: languageName: node linkType: hard -"@storybook/client-logger@npm:7.0.2, @storybook/client-logger@npm:^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0": - version: 7.0.2 - resolution: "@storybook/client-logger@npm:7.0.2" - dependencies: - "@storybook/global": ^5.0.0 - checksum: 3deb50e8cde7777025753938e21318ee34c10237e29664cfb2dfd08f70d84b073961e1b546629e536ef53f26a91a9aed2c83223d7cfe1680787ecee7e39ce8a8 - languageName: node - linkType: hard - "@storybook/components@npm:6.5.16, @storybook/components@npm:^6.0.0": version: 6.5.16 resolution: "@storybook/components@npm:6.5.16" @@ -2352,13 +2322,6 @@ __metadata: languageName: node linkType: hard -"@storybook/core-events@npm:7.0.2": - version: 7.0.2 - resolution: "@storybook/core-events@npm:7.0.2" - checksum: 5bca4db82f582b939ba1aaba26aee3e8f9aa0a2d36728934b4d26dbe858b6f455a46ddcf4e8e6c7b3f5fa5b517716c503626febca08e53712d516f2ca105bf11 - languageName: node - linkType: hard - "@storybook/core-server@npm:6.5.16": version: 6.5.16 resolution: "@storybook/core-server@npm:6.5.16" @@ -2479,15 +2442,6 @@ __metadata: languageName: node linkType: hard -"@storybook/csf@npm:^0.1.0": - version: 0.1.0 - resolution: "@storybook/csf@npm:0.1.0" - dependencies: - type-fest: ^2.19.0 - checksum: f1784f2aff27d5c27ab897878b08e3b04a64e7f62da1ea95fd11bfe9f558300e55f0d483d58282e8254a4b4e8935201178e70c264ccc96104c67403215d651f0 - languageName: node - linkType: hard - "@storybook/docs-tools@npm:6.5.16": version: 6.5.16 resolution: "@storybook/docs-tools@npm:6.5.16" @@ -2503,26 +2457,6 @@ __metadata: languageName: node linkType: hard -"@storybook/global@npm:^5.0.0": - version: 5.0.0 - resolution: "@storybook/global@npm:5.0.0" - checksum: ede0ad35ec411fe31c61150dbd118fef344d1d0e72bf5d3502368e35cf68126f6b7ae4a0ab5e2ffe2f0baa3b4286f03ad069ba3e098e1725449ef08b7e154ba8 - languageName: node - linkType: hard - -"@storybook/instrumenter@npm:^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0": - version: 7.0.2 - resolution: "@storybook/instrumenter@npm:7.0.2" - dependencies: - "@storybook/channels": 7.0.2 - "@storybook/client-logger": 7.0.2 - "@storybook/core-events": 7.0.2 - "@storybook/global": ^5.0.0 - "@storybook/preview-api": 7.0.2 - checksum: 1f0fcd2fd6561030897558ee6fb363da23bbbc67f08d12204f885da9ffc90f180703b3fbd85f01758e0f7a066437ebd6af415d4eefcb9ddb1e8ad16fd37e3eae - languageName: node - linkType: hard - "@storybook/manager-webpack4@npm:6.5.16": version: 6.5.16 resolution: "@storybook/manager-webpack4@npm:6.5.16" @@ -2650,29 +2584,6 @@ __metadata: languageName: node linkType: hard -"@storybook/preview-api@npm:7.0.2": - version: 7.0.2 - resolution: "@storybook/preview-api@npm:7.0.2" - dependencies: - "@storybook/channel-postmessage": 7.0.2 - "@storybook/channels": 7.0.2 - "@storybook/client-logger": 7.0.2 - "@storybook/core-events": 7.0.2 - "@storybook/csf": ^0.1.0 - "@storybook/global": ^5.0.0 - "@storybook/types": 7.0.2 - "@types/qs": ^6.9.5 - dequal: ^2.0.2 - lodash: ^4.17.21 - memoizerific: ^1.11.3 - qs: ^6.10.0 - synchronous-promise: ^2.0.15 - ts-dedent: ^2.0.0 - util-deprecate: ^1.0.2 - checksum: 350811420c996c9616b59615fe2fe7785ec6590301ed3a6a54b07ca4b2bb45614f47b4cacf037c72ed1d7dd04a8647d0e99a4e2e0f23f91a0dc5d1e8f3486ee2 - languageName: node - linkType: hard - "@storybook/preview-web@npm:6.5.16": version: 6.5.16 resolution: "@storybook/preview-web@npm:6.5.16" @@ -2878,16 +2789,14 @@ __metadata: languageName: node linkType: hard -"@storybook/testing-library@npm:^0.1.0": - version: 0.1.0 - resolution: "@storybook/testing-library@npm:0.1.0" +"@storybook/testing-library@npm:^0.2.0": + version: 0.2.0 + resolution: "@storybook/testing-library@npm:0.2.0" dependencies: - "@storybook/client-logger": ^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0 - "@storybook/instrumenter": ^7.0.0-beta.0 || ^7.0.0-rc.0 || ^7.0.0 - "@testing-library/dom": ^8.3.0 - "@testing-library/user-event": ^13.2.1 + "@testing-library/dom": ^9.0.0 + "@testing-library/user-event": ^14.0.0 ts-dedent: ^2.2.0 - checksum: a413110dafe80f8fe64da912fddb653bc3c695c94bd023b8cb918e519e9f94119bae559909bfb8ad229041a4f17a12b33425c61572270702c116d0b727b4d4ba + checksum: 1c1c16aea6f961de344f5d43bdfd2847bc5f44df1037c2e1383312bb6b842e2c17a805670fc9cfe1a8425f9e48e240fe5d025ab3d4802a198cfe9eb6ed8e7636 languageName: node linkType: hard @@ -2906,18 +2815,6 @@ __metadata: languageName: node linkType: hard -"@storybook/types@npm:7.0.2": - version: 7.0.2 - resolution: "@storybook/types@npm:7.0.2" - dependencies: - "@storybook/channels": 7.0.2 - "@types/babel__core": ^7.0.0 - "@types/express": ^4.7.0 - file-system-cache: ^2.0.0 - checksum: 329e271af5621619a8d17fff222e4170b62ca4b451bcb48b5a899d63bb8df211c5d3d8dafa2266ac3c9801bf64c4ac1aed73950a2f21da82333b19c448ea32e0 - languageName: node - linkType: hard - "@storybook/ui@npm:6.5.16": version: 6.5.16 resolution: "@storybook/ui@npm:6.5.16" @@ -2943,90 +2840,90 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.62": - version: 1.3.62 - resolution: "@swc/core-darwin-arm64@npm:1.3.62" +"@swc/core-darwin-arm64@npm:1.3.68": + version: 1.3.68 + resolution: "@swc/core-darwin-arm64@npm:1.3.68" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.62": - version: 1.3.62 - resolution: "@swc/core-darwin-x64@npm:1.3.62" +"@swc/core-darwin-x64@npm:1.3.68": + version: 1.3.68 + resolution: "@swc/core-darwin-x64@npm:1.3.68" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.62": - version: 1.3.62 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.62" +"@swc/core-linux-arm-gnueabihf@npm:1.3.68": + version: 1.3.68 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.68" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.62": - version: 1.3.62 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.62" +"@swc/core-linux-arm64-gnu@npm:1.3.68": + version: 1.3.68 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.68" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.62": - version: 1.3.62 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.62" +"@swc/core-linux-arm64-musl@npm:1.3.68": + version: 1.3.68 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.68" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.62": - version: 1.3.62 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.62" +"@swc/core-linux-x64-gnu@npm:1.3.68": + version: 1.3.68 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.68" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.62": - version: 1.3.62 - resolution: "@swc/core-linux-x64-musl@npm:1.3.62" +"@swc/core-linux-x64-musl@npm:1.3.68": + version: 1.3.68 + resolution: "@swc/core-linux-x64-musl@npm:1.3.68" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.62": - version: 1.3.62 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.62" +"@swc/core-win32-arm64-msvc@npm:1.3.68": + version: 1.3.68 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.68" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.62": - version: 1.3.62 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.62" +"@swc/core-win32-ia32-msvc@npm:1.3.68": + version: 1.3.68 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.68" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.62": - version: 1.3.62 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.62" +"@swc/core-win32-x64-msvc@npm:1.3.68": + version: 1.3.68 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.68" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.46": - version: 1.3.62 - resolution: "@swc/core@npm:1.3.62" + version: 1.3.68 + resolution: "@swc/core@npm:1.3.68" dependencies: - "@swc/core-darwin-arm64": 1.3.62 - "@swc/core-darwin-x64": 1.3.62 - "@swc/core-linux-arm-gnueabihf": 1.3.62 - "@swc/core-linux-arm64-gnu": 1.3.62 - "@swc/core-linux-arm64-musl": 1.3.62 - "@swc/core-linux-x64-gnu": 1.3.62 - "@swc/core-linux-x64-musl": 1.3.62 - "@swc/core-win32-arm64-msvc": 1.3.62 - "@swc/core-win32-ia32-msvc": 1.3.62 - "@swc/core-win32-x64-msvc": 1.3.62 + "@swc/core-darwin-arm64": 1.3.68 + "@swc/core-darwin-x64": 1.3.68 + "@swc/core-linux-arm-gnueabihf": 1.3.68 + "@swc/core-linux-arm64-gnu": 1.3.68 + "@swc/core-linux-arm64-musl": 1.3.68 + "@swc/core-linux-x64-gnu": 1.3.68 + "@swc/core-linux-x64-musl": 1.3.68 + "@swc/core-win32-arm64-msvc": 1.3.68 + "@swc/core-win32-ia32-msvc": 1.3.68 + "@swc/core-win32-x64-msvc": 1.3.68 peerDependencies: "@swc/helpers": ^0.5.0 dependenciesMeta: @@ -3053,34 +2950,32 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: a7a0d9ffdb8a2b0050e0ff89fdb86fe189d9bcb7f91cb6847f1bfe3e2b520a87ea2e83692dfd80b6d541fb5addb2194769484516b8ca6d3c62ad80f1c79a9368 + checksum: f56ad1d4cb91f7cc1cb5d4b9894bbb528da0b2eabc98984581f5b3f3187cf2c0d512003880f6ff7a3f6d215b7a3dcbf5a9c45e8a428ac2d711941027c0151d89 languageName: node linkType: hard -"@testing-library/dom@npm:^8.3.0": - version: 8.17.1 - resolution: "@testing-library/dom@npm:8.17.1" +"@testing-library/dom@npm:^9.0.0": + version: 9.3.1 + resolution: "@testing-library/dom@npm:9.3.1" dependencies: "@babel/code-frame": ^7.10.4 "@babel/runtime": ^7.12.5 - "@types/aria-query": ^4.2.0 - aria-query: ^5.0.0 + "@types/aria-query": ^5.0.1 + aria-query: 5.1.3 chalk: ^4.1.0 dom-accessibility-api: ^0.5.9 - lz-string: ^1.4.4 + lz-string: ^1.5.0 pretty-format: ^27.0.2 - checksum: e4df091fcf84c9eac4a6ee4c76674c1d562bf98732f0ac8820972d7718ab10397b672b9f082aace3cacd1f610fc77de6e1b6094e67afe1df0443bf22eb9deab2 + checksum: 8ee3136451644e39990edea93709c38cf1e8ce5306f3c66273ca00935963faa51ca74e8d92b02eb442ccb842cfa28ca62833e393e075eb269cf9bef6f5600663 languageName: node linkType: hard -"@testing-library/user-event@npm:^13.2.1": - version: 13.5.0 - resolution: "@testing-library/user-event@npm:13.5.0" - dependencies: - "@babel/runtime": ^7.12.5 +"@testing-library/user-event@npm:^14.0.0": + version: 14.4.3 + resolution: "@testing-library/user-event@npm:14.4.3" peerDependencies: "@testing-library/dom": ">=7.21.4" - checksum: 16319de685fbb7008f1ba667928f458b2d08196918002daca56996de80ef35e6d9de26e9e1ece7d00a004692b95a597cf9142fff0dc53f2f51606a776584f549 + checksum: 852c48ea6db1c9471b18276617c84fec4320771e466cd58339a732ca3fd73ad35e5a43ae14f51af51a8d0a150dcf60fcaab049ef367871207bea8f92c4b8195e languageName: node linkType: hard @@ -3091,70 +2986,10 @@ __metadata: languageName: node linkType: hard -"@types/aria-query@npm:^4.2.0": - version: 4.2.2 - resolution: "@types/aria-query@npm:4.2.2" - checksum: 6f2ce11d91e2d665f3873258db19da752d91d85d3679eb5efcdf9c711d14492287e1e4eb52613b28e60375841a9e428594e745b68436c963d8bad4bf72188df3 - languageName: node - linkType: hard - -"@types/babel__core@npm:^7.0.0": - version: 7.20.0 - resolution: "@types/babel__core@npm:7.20.0" - dependencies: - "@babel/parser": ^7.20.7 - "@babel/types": ^7.20.7 - "@types/babel__generator": "*" - "@types/babel__template": "*" - "@types/babel__traverse": "*" - checksum: 49b601a0a7637f1f387442c8156bd086cfd10ff4b82b0e1994e73a6396643b5435366fb33d6b604eade8467cca594ef97adcbc412aede90bb112ebe88d0ad6df - languageName: node - linkType: hard - -"@types/babel__generator@npm:*": - version: 7.6.4 - resolution: "@types/babel__generator@npm:7.6.4" - dependencies: - "@babel/types": ^7.0.0 - checksum: 20effbbb5f8a3a0211e95959d06ae70c097fb6191011b73b38fe86deebefad8e09ee014605e0fd3cdaedc73d158be555866810e9166e1f09e4cfd880b874dcb0 - languageName: node - linkType: hard - -"@types/babel__template@npm:*": - version: 7.4.1 - resolution: "@types/babel__template@npm:7.4.1" - dependencies: - "@babel/parser": ^7.1.0 - "@babel/types": ^7.0.0 - checksum: 649fe8b42c2876be1fd28c6ed9b276f78152d5904ec290b6c861d9ef324206e0a5c242e8305c421ac52ecf6358fa7e32ab7a692f55370484825c1df29b1596ee - languageName: node - linkType: hard - -"@types/babel__traverse@npm:*": - version: 7.18.3 - resolution: "@types/babel__traverse@npm:7.18.3" - dependencies: - "@babel/types": ^7.3.0 - checksum: d20953338b2f012ab7750932ece0a78e7d1645b0a6ff42d49be90f55e9998085da1374a9786a7da252df89555c6586695ba4d1d4b4e88ab2b9f306bcd35e00d3 - languageName: node - linkType: hard - -"@types/body-parser@npm:*": - version: 1.19.2 - resolution: "@types/body-parser@npm:1.19.2" - dependencies: - "@types/connect": "*" - "@types/node": "*" - checksum: e17840c7d747a549f00aebe72c89313d09fbc4b632b949b2470c5cb3b1cb73863901ae84d9335b567a79ec5efcfb8a28ff8e3f36bc8748a9686756b6d5681f40 - languageName: node - linkType: hard - -"@types/connect@npm:*": - version: 3.4.35 - resolution: "@types/connect@npm:3.4.35" - dependencies: - "@types/node": "*" - checksum: fe81351470f2d3165e8b12ce33542eef89ea893e36dd62e8f7d72566dfb7e448376ae962f9f3ea888547ce8b55a40020ca0e01d637fab5d99567673084542641 +"@types/aria-query@npm:^5.0.1": + version: 5.0.1 + resolution: "@types/aria-query@npm:5.0.1" + checksum: 69fd7cceb6113ed370591aef04b3fd0742e9a1b06dd045c43531448847b85de181495e4566f98e776b37c422a12fd71866e0a1dfd904c5ec3f84d271682901de languageName: node linkType: hard @@ -3192,29 +3027,6 @@ __metadata: languageName: node linkType: hard -"@types/express-serve-static-core@npm:^4.17.33": - version: 4.17.33 - resolution: "@types/express-serve-static-core@npm:4.17.33" - dependencies: - "@types/node": "*" - "@types/qs": "*" - "@types/range-parser": "*" - checksum: dce580d16b85f207445af9d4053d66942b27d0c72e86153089fa00feee3e96ae336b7bedb31ed4eea9e553c99d6dd356ed6e0928f135375d9f862a1a8015adf2 - languageName: node - linkType: hard - -"@types/express@npm:^4.7.0": - version: 4.17.17 - resolution: "@types/express@npm:4.17.17" - dependencies: - "@types/body-parser": "*" - "@types/express-serve-static-core": ^4.17.33 - "@types/qs": "*" - "@types/serve-static": "*" - checksum: 0196dacc275ac3ce89d7364885cb08e7fb61f53ca101f65886dbf1daf9b7eb05c0943e2e4bbd01b0cc5e50f37e0eea7e4cbe97d0304094411ac73e1b7998f4da - languageName: node - linkType: hard - "@types/glob@npm:*, @types/glob@npm:^7.1.1": version: 7.2.0 resolution: "@types/glob@npm:7.2.0" @@ -3285,13 +3097,6 @@ __metadata: languageName: node linkType: hard -"@types/mime@npm:*": - version: 3.0.1 - resolution: "@types/mime@npm:3.0.1" - checksum: 4040fac73fd0cea2460e29b348c1a6173da747f3a87da0dbce80dd7a9355a3d0e51d6d9a401654f3e5550620e3718b5a899b2ec1debf18424e298a2c605346e7 - languageName: node - linkType: hard - "@types/minimatch@npm:*": version: 3.0.5 resolution: "@types/minimatch@npm:3.0.5" @@ -3358,30 +3163,13 @@ __metadata: languageName: node linkType: hard -"@types/qs@npm:*, @types/qs@npm:^6.9.5": +"@types/qs@npm:^6.9.5": version: 6.9.7 resolution: "@types/qs@npm:6.9.7" checksum: 7fd6f9c25053e9b5bb6bc9f9f76c1d89e6c04f7707a7ba0e44cc01f17ef5284adb82f230f542c2d5557d69407c9a40f0f3515e8319afd14e1e16b5543ac6cdba languageName: node linkType: hard -"@types/range-parser@npm:*": - version: 1.2.4 - resolution: "@types/range-parser@npm:1.2.4" - checksum: b7c0dfd5080a989d6c8bb0b6750fc0933d9acabeb476da6fe71d8bdf1ab65e37c136169d84148034802f48378ab94e3c37bb4ef7656b2bec2cb9c0f8d4146a95 - languageName: node - linkType: hard - -"@types/serve-static@npm:*": - version: 1.15.1 - resolution: "@types/serve-static@npm:1.15.1" - dependencies: - "@types/mime": "*" - "@types/node": "*" - checksum: 2e078bdc1e458c7dfe69e9faa83cc69194b8896cce57cb745016580543c7ab5af07fdaa8ac1765eb79524208c81017546f66056f44d1204f812d72810613de36 - languageName: node - linkType: hard - "@types/source-list-map@npm:*": version: 0.1.2 resolution: "@types/source-list-map@npm:0.1.2" @@ -3871,10 +3659,12 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:^5.0.0": - version: 5.0.0 - resolution: "aria-query@npm:5.0.0" - checksum: c41f98866c5a304561ee8cae55856711cddad6f3f85d8cb43cc5f79667078d9b8979ce32d244c1ff364e6463a4d0b6865804a33ccc717fed701b281cf7dc6296 +"aria-query@npm:5.1.3": + version: 5.1.3 + resolution: "aria-query@npm:5.1.3" + dependencies: + deep-equal: ^2.0.5 + checksum: 929ff95f02857b650fb4cbcd2f41072eee2f46159a6605ea03bf63aa572e35ffdff43d69e815ddc462e16e07de8faba3978afc2813650b4448ee18c9895d982b languageName: node linkType: hard @@ -3899,6 +3689,16 @@ __metadata: languageName: node linkType: hard +"array-buffer-byte-length@npm:^1.0.0": + version: 1.0.0 + resolution: "array-buffer-byte-length@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + is-array-buffer: ^3.0.1 + checksum: 044e101ce150f4804ad19c51d6c4d4cfa505c5b2577bd179256e4aa3f3f6a0a5e9874c78cd428ee566ac574c8a04d7ce21af9fe52e844abfdccb82b33035a7c3 + languageName: node + linkType: hard + "array-find-index@npm:^1.0.1": version: 1.0.2 resolution: "array-find-index@npm:1.0.2" @@ -4069,6 +3869,13 @@ __metadata: languageName: node linkType: hard +"available-typed-arrays@npm:^1.0.5": + version: 1.0.5 + resolution: "available-typed-arrays@npm:1.0.5" + checksum: 20eb47b3cefd7db027b9bbb993c658abd36d4edd3fe1060e83699a03ee275b0c9b216cc076ff3f2db29073225fb70e7613987af14269ac1fe2a19803ccc97f1a + languageName: node + linkType: hard + "axe-core@npm:^4.2.0": version: 4.4.3 resolution: "axe-core@npm:4.4.3" @@ -5192,6 +4999,32 @@ __metadata: languageName: node linkType: hard +"deep-equal@npm:^2.0.5": + version: 2.2.1 + resolution: "deep-equal@npm:2.2.1" + dependencies: + array-buffer-byte-length: ^1.0.0 + call-bind: ^1.0.2 + es-get-iterator: ^1.1.3 + get-intrinsic: ^1.2.0 + is-arguments: ^1.1.1 + is-array-buffer: ^3.0.2 + is-date-object: ^1.0.5 + is-regex: ^1.1.4 + is-shared-array-buffer: ^1.0.2 + isarray: ^2.0.5 + object-is: ^1.1.5 + object-keys: ^1.1.1 + object.assign: ^4.1.4 + regexp.prototype.flags: ^1.5.0 + side-channel: ^1.0.4 + which-boxed-primitive: ^1.0.2 + which-collection: ^1.0.1 + which-typed-array: ^1.1.9 + checksum: 561f0e001a07b2f1b80ff914d0b3d76964bbfc102f34c2128bc8039c0050e63b1a504a8911910e011d8cd1cd4b600a9686c049e327f4ef94420008efc42d25f4 + languageName: node + linkType: hard + "deep-is@npm:~0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" @@ -5226,13 +5059,13 @@ __metadata: languageName: node linkType: hard -"define-properties@npm:^1.1.2, define-properties@npm:^1.1.3, define-properties@npm:^1.1.4": - version: 1.1.4 - resolution: "define-properties@npm:1.1.4" +"define-properties@npm:^1.1.2, define-properties@npm:^1.1.3, define-properties@npm:^1.1.4, define-properties@npm:^1.2.0": + version: 1.2.0 + resolution: "define-properties@npm:1.2.0" dependencies: has-property-descriptors: ^1.0.0 object-keys: ^1.1.1 - checksum: ce0aef3f9eb193562b5cfb79b2d2c86b6a109dfc9fdcb5f45d680631a1a908c06824ddcdb72b7573b54e26ace07f0a23420aaba0d5c627b34d2c1de8ef527e2b + checksum: e60aee6a19b102df4e2b1f301816804e81ab48bb91f00d0d935f269bf4b3f79c88b39e4f89eaa132890d23267335fd1140dfcd8d5ccd61031a0a2c41a54e33a6 languageName: node linkType: hard @@ -5292,13 +5125,6 @@ __metadata: languageName: node linkType: hard -"dequal@npm:^2.0.2": - 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" @@ -5513,13 +5339,13 @@ __metadata: languageName: node linkType: hard -"enhanced-resolve@npm:^5.14.1": - version: 5.14.1 - resolution: "enhanced-resolve@npm:5.14.1" +"enhanced-resolve@npm:^5.15.0": + version: 5.15.0 + resolution: "enhanced-resolve@npm:5.15.0" dependencies: graceful-fs: ^4.2.4 tapable: ^2.2.0 - checksum: ad2a31928b6649eed40d364838449587f731baa63863e83d2629bebaa8be1eabac18b90f89c1784bc805b0818363e99b22547159edd485d7e5ccf18cdc640642 + checksum: fbd8cdc9263be71cc737aa8a7d6c57b43d6aa38f6cc75dde6fcd3598a130cc465f979d2f4d01bb3bf475acb43817749c79f8eef9be048683602ca91ab52e4f11 languageName: node linkType: hard @@ -5611,19 +5437,20 @@ __metadata: languageName: node linkType: hard -"es-get-iterator@npm:^1.0.2": - version: 1.1.2 - resolution: "es-get-iterator@npm:1.1.2" +"es-get-iterator@npm:^1.0.2, es-get-iterator@npm:^1.1.3": + version: 1.1.3 + resolution: "es-get-iterator@npm:1.1.3" dependencies: call-bind: ^1.0.2 - get-intrinsic: ^1.1.0 - has-symbols: ^1.0.1 - is-arguments: ^1.1.0 + get-intrinsic: ^1.1.3 + has-symbols: ^1.0.3 + is-arguments: ^1.1.1 is-map: ^2.0.2 is-set: ^2.0.2 - is-string: ^1.0.5 + is-string: ^1.0.7 isarray: ^2.0.5 - checksum: f75e66acb6a45686fa08b3ade9c9421a70d36a0c43ed4363e67f4d7aab2226cb73dd977cb48abbaf75721b946d3cd810682fcf310c7ad0867802fbf929b17dcf + stop-iteration-iterator: ^1.0.0 + checksum: 8fa118da42667a01a7c7529f8a8cca514feeff243feec1ce0bb73baaa3514560bd09d2b3438873cf8a5aaec5d52da248131de153b28e2638a061b6e4df13267d languageName: node linkType: hard @@ -5998,16 +5825,6 @@ __metadata: languageName: node linkType: hard -"file-system-cache@npm:^2.0.0": - version: 2.0.2 - resolution: "file-system-cache@npm:2.0.2" - dependencies: - fs-extra: ^11.1.0 - ramda: ^0.28.0 - checksum: ac4f9065132ac4593dbfb7c8fc4683cccc0f58823279763690fb3fca859cc5e6b4446c846af718354059695fa90db316be4ce19e16578bbb0feab4a9159e9fbc - languageName: node - linkType: hard - "fill-range@npm:^4.0.0": version: 4.0.0 resolution: "fill-range@npm:4.0.0" @@ -6122,6 +5939,15 @@ __metadata: languageName: node linkType: hard +"for-each@npm:^0.3.3": + version: 0.3.3 + resolution: "for-each@npm:0.3.3" + dependencies: + is-callable: ^1.1.3 + checksum: 6c48ff2bc63362319c65e2edca4a8e1e3483a2fabc72fbe7feaf8c73db94fc7861bd53bc02c8a66a0c1dd709da6b04eec42e0abdd6b40ce47305ae92a25e5d28 + languageName: node + linkType: hard + "for-in@npm:^1.0.2": version: 1.0.2 resolution: "for-in@npm:1.0.2" @@ -6237,17 +6063,6 @@ __metadata: languageName: node linkType: hard -"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: fb883c68245b2d777fbc1f2082c9efb084eaa2bbf9fddaa366130d196c03608eebef7fb490541276429ee1ca99f317e2d73e96f5ca0999eefedf5a624ae1edfd - languageName: node - linkType: hard - "fs-extra@npm:^9.0.0, fs-extra@npm:^9.0.1": version: 9.1.0 resolution: "fs-extra@npm:9.1.0" @@ -6321,7 +6136,7 @@ __metadata: languageName: node linkType: hard -"functions-have-names@npm:^1.2.2": +"functions-have-names@npm:^1.2.2, functions-have-names@npm:^1.2.3": version: 1.2.3 resolution: "functions-have-names@npm:1.2.3" checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 @@ -6375,14 +6190,15 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1": - version: 1.1.2 - resolution: "get-intrinsic@npm:1.1.2" +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0": + version: 1.2.1 + resolution: "get-intrinsic@npm:1.2.1" dependencies: function-bind: ^1.1.1 has: ^1.0.3 + has-proto: ^1.0.1 has-symbols: ^1.0.3 - checksum: 252f45491f2ba88ebf5b38018020c7cc3279de54b1d67ffb70c0cdf1dfa8ab31cd56467b5d117a8b4275b7a4dde91f86766b163a17a850f036528a7b2faafb2b + checksum: 5b61d88552c24b0cf6fa2d1b3bc5459d7306f699de060d76442cce49a4721f52b8c560a33ab392cf5575b7810277d54ded9d4d39a1ea61855619ebc005aa7e5f languageName: node linkType: hard @@ -6544,6 +6360,15 @@ __metadata: languageName: node linkType: hard +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: ^1.1.3 + checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 + 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": version: 4.2.10 resolution: "graceful-fs@npm:4.2.10" @@ -6608,7 +6433,14 @@ __metadata: languageName: node linkType: hard -"has-symbols@npm:^1.0.1, has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": +"has-proto@npm:^1.0.1": + version: 1.0.1 + resolution: "has-proto@npm:1.0.1" + checksum: febc5b5b531de8022806ad7407935e2135f1cc9e64636c3916c6842bd7995994ca3b29871ecd7954bd35f9e2986c17b3b227880484d22259e2f8e6ce63fd383e + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": version: 1.0.3 resolution: "has-symbols@npm:1.0.3" checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 @@ -7070,14 +6902,14 @@ __metadata: languageName: node linkType: hard -"internal-slot@npm:^1.0.3": - version: 1.0.3 - resolution: "internal-slot@npm:1.0.3" +"internal-slot@npm:^1.0.3, internal-slot@npm:^1.0.4": + version: 1.0.5 + resolution: "internal-slot@npm:1.0.5" dependencies: - get-intrinsic: ^1.1.0 + get-intrinsic: ^1.2.0 has: ^1.0.3 side-channel: ^1.0.4 - checksum: 1944f92e981e47aebc98a88ff0db579fd90543d937806104d0b96557b10c1f170c51fb777b97740a8b6ddeec585fca8c39ae99fd08a8e058dfc8ab70937238bf + checksum: 97e84046bf9e7574d0956bd98d7162313ce7057883b6db6c5c7b5e5f05688864b0978ba07610c726d15d66544ffe4b1050107d93f8a39ebc59b15d8b429b497a languageName: node linkType: hard @@ -7146,7 +6978,7 @@ __metadata: languageName: node linkType: hard -"is-arguments@npm:^1.1.0": +"is-arguments@npm:^1.1.1": version: 1.1.1 resolution: "is-arguments@npm:1.1.1" dependencies: @@ -7156,6 +6988,17 @@ __metadata: languageName: node linkType: hard +"is-array-buffer@npm:^3.0.1, is-array-buffer@npm:^3.0.2": + version: 3.0.2 + resolution: "is-array-buffer@npm:3.0.2" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.2.0 + is-typed-array: ^1.1.10 + checksum: dcac9dda66ff17df9cabdc58214172bf41082f956eab30bb0d86bc0fab1e44b690fc8e1f855cf2481245caf4e8a5a006a982a71ddccec84032ed41f9d8da8c14 + languageName: node + linkType: hard + "is-arrayish@npm:^0.2.1": version: 0.2.1 resolution: "is-arrayish@npm:0.2.1" @@ -7205,10 +7048,10 @@ __metadata: languageName: node linkType: hard -"is-callable@npm:^1.1.4, is-callable@npm:^1.2.4": - version: 1.2.4 - resolution: "is-callable@npm:1.2.4" - checksum: 1a28d57dc435797dae04b173b65d6d1e77d4f16276e9eff973f994eadcfdc30a017e6a597f092752a083c1103cceb56c91e3dadc6692fedb9898dfaba701575f +"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.4": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac languageName: node linkType: hard @@ -7239,7 +7082,7 @@ __metadata: languageName: node linkType: hard -"is-date-object@npm:^1.0.1": +"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": version: 1.0.5 resolution: "is-date-object@npm:1.0.5" dependencies: @@ -7372,7 +7215,7 @@ __metadata: languageName: node linkType: hard -"is-map@npm:^2.0.2": +"is-map@npm:^2.0.1, is-map@npm:^2.0.2": version: 2.0.2 resolution: "is-map@npm:2.0.2" checksum: ace3d0ecd667bbdefdb1852de601268f67f2db725624b1958f279316e13fecb8fa7df91fd60f690d7417b4ec180712f5a7ee967008e27c65cfd475cc84337728 @@ -7451,7 +7294,7 @@ __metadata: languageName: node linkType: hard -"is-set@npm:^2.0.2": +"is-set@npm:^2.0.1, is-set@npm:^2.0.2": version: 2.0.2 resolution: "is-set@npm:2.0.2" checksum: b64343faf45e9387b97a6fd32be632ee7b269bd8183701f3b3f5b71a7cf00d04450ed8669d0bd08753e08b968beda96fca73a10fd0ff56a32603f64deba55a57 @@ -7492,6 +7335,19 @@ __metadata: languageName: node linkType: hard +"is-typed-array@npm:^1.1.10": + version: 1.1.10 + resolution: "is-typed-array@npm:1.1.10" + dependencies: + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-tostringtag: ^1.0.0 + checksum: aac6ecb59d4c56a1cdeb69b1f129154ef462bbffe434cb8a8235ca89b42f258b7ae94073c41b3cb7bce37f6a1733ad4499f07882d5d5093a7ba84dfc4ebb8017 + languageName: node + linkType: hard + "is-utf8@npm:^0.2.0": version: 0.2.1 resolution: "is-utf8@npm:0.2.1" @@ -7499,6 +7355,13 @@ __metadata: languageName: node linkType: hard +"is-weakmap@npm:^2.0.1": + version: 2.0.1 + resolution: "is-weakmap@npm:2.0.1" + checksum: 1222bb7e90c32bdb949226e66d26cb7bce12e1e28e3e1b40bfa6b390ba3e08192a8664a703dff2a00a84825f4e022f9cd58c4599ff9981ab72b1d69479f4f7f6 + languageName: node + linkType: hard + "is-weakref@npm:^1.0.2": version: 1.0.2 resolution: "is-weakref@npm:1.0.2" @@ -7508,6 +7371,16 @@ __metadata: languageName: node linkType: hard +"is-weakset@npm:^2.0.1": + version: 2.0.2 + resolution: "is-weakset@npm:2.0.2" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.1 + checksum: 5d8698d1fa599a0635d7ca85be9c26d547b317ed8fd83fc75f03efbe75d50001b5eececb1e9971de85fcde84f69ae6f8346bc92d20d55d46201d328e4c74a367 + languageName: node + linkType: hard + "is-whitespace-character@npm:^1.0.0": version: 1.0.4 resolution: "is-whitespace-character@npm:1.0.4" @@ -7975,12 +7848,12 @@ __metadata: languageName: node linkType: hard -"lz-string@npm:^1.4.4": - version: 1.4.4 - resolution: "lz-string@npm:1.4.4" +"lz-string@npm:^1.5.0": + version: 1.5.0 + resolution: "lz-string@npm:1.5.0" bin: lz-string: bin/bin.js - checksum: 54e31238a61a84d8f664d9860a9fba7310c5b97a52c444f80543069bc084815eff40b8d4474ae1d93992fdf6c252dca37cf27f6adbeb4dbc3df2f3ac773d0e61 + checksum: 1ee98b4580246fd90dd54da6e346fb1caefcf05f677c686d9af237a157fdea3fd7c83a4bc58f858cd5b10a34d27afe0fdcbd0505a47e0590726a873dc8b8f65d languageName: node linkType: hard @@ -8680,6 +8553,16 @@ __metadata: languageName: node linkType: hard +"object-is@npm:^1.1.5": + version: 1.1.5 + resolution: "object-is@npm:1.1.5" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + checksum: 989b18c4cba258a6b74dc1d74a41805c1a1425bce29f6cabb50dcb1a6a651ea9104a1b07046739a49a5bb1bc49727bcb00efd5c55f932f6ea04ec8927a7901fe + languageName: node + linkType: hard + "object-keys@npm:^1.1.1": version: 1.1.1 resolution: "object-keys@npm:1.1.1" @@ -8696,7 +8579,7 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.1.0, object.assign@npm:^4.1.2": +"object.assign@npm:^4.1.0, object.assign@npm:^4.1.2, object.assign@npm:^4.1.4": version: 4.1.4 resolution: "object.assign@npm:4.1.4" dependencies: @@ -9963,14 +9846,14 @@ __metadata: languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.4.1, regexp.prototype.flags@npm:^1.4.3": - version: 1.4.3 - resolution: "regexp.prototype.flags@npm:1.4.3" +"regexp.prototype.flags@npm:^1.4.1, regexp.prototype.flags@npm:^1.4.3, regexp.prototype.flags@npm:^1.5.0": + version: 1.5.0 + resolution: "regexp.prototype.flags@npm:1.5.0" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - functions-have-names: ^1.2.2 - checksum: 51228bae732592adb3ededd5e15426be25f289e9c4ef15212f4da73f4ec3919b6140806374b8894036a86020d054a8d2657d3fee6bb9b4d35d8939c20030b7a6 + define-properties: ^1.2.0 + functions-have-names: ^1.2.3 + checksum: c541687cdbdfff1b9a07f6e44879f82c66bbf07665f9a7544c5fd16acdb3ec8d1436caab01662d2fbcad403f3499d49ab0b77fbc7ef29ef961d98cc4bc9755b4 languageName: node linkType: hard @@ -10282,23 +10165,23 @@ __metadata: languageName: node linkType: hard -"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" +"schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.1, schema-utils@npm:^3.2.0": + version: 3.3.0 + resolution: "schema-utils@npm:3.3.0" dependencies: "@types/json-schema": ^7.0.8 ajv: ^6.12.5 ajv-keywords: ^3.5.2 - checksum: 39683edfe3beff018cdb1ae4fa296fc55cea13a080aa2b4d9351895cd64b22ba4d87e2e548c2a2ac1bc76e60980670adb0f413a58104479f1a0c12e5663cb8ca + checksum: ea56971926fac2487f0757da939a871388891bc87c6a82220d125d587b388f1704788f3706e7f63a7b70e49fc2db974c41343528caea60444afd5ce0fe4b85c0 languageName: node linkType: hard "semver@npm:2 || 3 || 4 || 5, semver@npm:^5.4.1, semver@npm:^5.6.0": - version: 5.7.1 - resolution: "semver@npm:5.7.1" + version: 5.7.2 + resolution: "semver@npm:5.7.2" bin: - semver: ./bin/semver - checksum: 57fd0acfd0bac382ee87cd52cd0aaa5af086a7dc8d60379dfe65fea491fb2489b6016400813930ecd61fd0952dae75c115287a1b16c234b1550887117744dfaf + semver: bin/semver + checksum: fb4ab5e0dd1c22ce0c937ea390b4a822147a9c53dbd2a9a0132f12fe382902beef4fbf12cf51bb955248d8d15874ce8cd89532569756384f994309825f10b686 languageName: node linkType: hard @@ -10727,6 +10610,15 @@ __metadata: languageName: node linkType: hard +"stop-iteration-iterator@npm:^1.0.0": + version: 1.0.0 + resolution: "stop-iteration-iterator@npm:1.0.0" + dependencies: + internal-slot: ^1.0.4 + checksum: d04173690b2efa40e24ab70e5e51a3ff31d56d699550cfad084104ab3381390daccb36652b25755e420245f3b0737de66c1879eaa2a8d4fc0a78f9bf892fcb42 + languageName: node + linkType: hard + "store2@npm:^2.12.0": version: 2.14.2 resolution: "store2@npm:2.14.2" @@ -10772,7 +10664,7 @@ __metadata: "@storybook/manager-webpack5": ^6.5.9 "@storybook/node-logger": ^6.5.9 "@storybook/react": ^6.5.9 - "@storybook/testing-library": ^0.1.0 + "@storybook/testing-library": ^0.2.0 "@swc/core": ^1.3.46 react: ^17.0.2 react-dom: ^17.0.2 @@ -11071,15 +10963,6 @@ __metadata: languageName: node linkType: hard -"telejson@npm:^7.0.3": - version: 7.1.0 - resolution: "telejson@npm:7.1.0" - dependencies: - memoizerific: ^1.11.3 - checksum: 8000e43dc862a87ab1ca342a2635641923d55c2585f85ea8c7c60293681d6f920e8b9570cc12d90ecef286f065c176da5f769f42f4828ba18a626627bed1ac07 - languageName: node - linkType: hard - "terser-webpack-plugin@npm:^4.2.3": version: 4.2.3 resolution: "terser-webpack-plugin@npm:4.2.3" @@ -11309,13 +11192,6 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^2.19.0": - version: 2.19.0 - resolution: "type-fest@npm:2.19.0" - checksum: a4ef07ece297c9fba78fc1bd6d85dff4472fe043ede98bd4710d2615d15776902b595abf62bd78339ed6278f021235fb28a96361f8be86ed754f778973a0d278 - languageName: node - linkType: hard - "type-is@npm:~1.6.18": version: 1.6.18 resolution: "type-is@npm:1.6.18" @@ -11863,8 +11739,8 @@ __metadata: linkType: hard "webpack@npm:^5.73.0": - version: 5.85.0 - resolution: "webpack@npm:5.85.0" + version: 5.88.1 + resolution: "webpack@npm:5.88.1" dependencies: "@types/eslint-scope": ^3.7.3 "@types/estree": ^1.0.0 @@ -11875,7 +11751,7 @@ __metadata: acorn-import-assertions: ^1.9.0 browserslist: ^4.14.5 chrome-trace-event: ^1.0.2 - enhanced-resolve: ^5.14.1 + enhanced-resolve: ^5.15.0 es-module-lexer: ^1.2.1 eslint-scope: 5.1.1 events: ^3.2.0 @@ -11885,7 +11761,7 @@ __metadata: loader-runner: ^4.2.0 mime-types: ^2.1.27 neo-async: ^2.6.2 - schema-utils: ^3.1.2 + schema-utils: ^3.2.0 tapable: ^2.1.1 terser-webpack-plugin: ^5.3.7 watchpack: ^2.4.0 @@ -11895,7 +11771,7 @@ __metadata: optional: true bin: webpack: bin/webpack.js - checksum: b013be9fbc7f6810d1f229f570c70710ddbc7290f817411acffe4214b2b6c783a041ab1f2005d9e1109f4ab21c136f0f8d8c067a5fb64f20a82dcbc1ee0d3f42 + checksum: 726e7e05ab2e7c142609a673dd6aa1a711ed97f349418a2a393d650c5ddad172d191257f60e1e37f6b2a77261571c202aabd5ce9240791a686774f0801cf5ec2 languageName: node linkType: hard @@ -11922,6 +11798,32 @@ __metadata: languageName: node linkType: hard +"which-collection@npm:^1.0.1": + version: 1.0.1 + resolution: "which-collection@npm:1.0.1" + dependencies: + is-map: ^2.0.1 + is-set: ^2.0.1 + is-weakmap: ^2.0.1 + is-weakset: ^2.0.1 + checksum: c815bbd163107ef9cb84f135e6f34453eaf4cca994e7ba85ddb0d27cea724c623fae2a473ceccfd5549c53cc65a5d82692de418166df3f858e1e5dc60818581c + languageName: node + linkType: hard + +"which-typed-array@npm:^1.1.9": + version: 1.1.9 + resolution: "which-typed-array@npm:1.1.9" + dependencies: + available-typed-arrays: ^1.0.5 + call-bind: ^1.0.2 + for-each: ^0.3.3 + gopd: ^1.0.1 + has-tostringtag: ^1.0.0 + is-typed-array: ^1.1.10 + checksum: fe0178ca44c57699ca2c0e657b64eaa8d2db2372a4e2851184f568f98c478ae3dc3fdb5f7e46c384487046b0cf9e23241423242b277e03e8ba3dabc7c84c98ef + languageName: node + linkType: hard + "which@npm:^2.0.1, which@npm:^2.0.2": version: 2.0.2 resolution: "which@npm:2.0.2" @@ -11952,9 +11854,9 @@ __metadata: linkType: hard "word-wrap@npm:~1.2.3": - version: 1.2.3 - resolution: "word-wrap@npm:1.2.3" - checksum: 30b48f91fcf12106ed3186ae4fa86a6a1842416df425be7b60485de14bec665a54a68e4b5156647dec3a70f25e84d270ca8bc8cd23182ed095f5c7206a938c1f + version: 1.2.4 + resolution: "word-wrap@npm:1.2.4" + checksum: 8f1f2e0a397c0e074ca225ba9f67baa23f99293bc064e31355d426ae91b8b3f6b5f6c1fc9ae5e9141178bb362d563f55e62fd8d5c31f2a77e3ade56cb3e35bd1 languageName: node linkType: hard diff --git a/yarn.lock b/yarn.lock index 7f430b63bf..f628161240 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,6 +5,13 @@ __metadata: version: 6 cacheKey: 8 +"@aashutoshrathi/word-wrap@npm:^1.2.3": + version: 1.2.6 + resolution: "@aashutoshrathi/word-wrap@npm:1.2.6" + checksum: ada901b9e7c680d190f1d012c84217ce0063d8f5c5a7725bb91ec3c5ed99bb7572680eb2d2938a531ccbaec39a95422fcd8a6b4a13110c7d98dd75402f66a0cd + languageName: node + linkType: hard + "@adobe/css-tools@npm:^4.0.1": version: 4.0.1 resolution: "@adobe/css-tools@npm:4.0.1" @@ -32,7 +39,7 @@ __metadata: languageName: node linkType: hard -"@apidevtools/json-schema-ref-parser@npm:^9.0.6": +"@apidevtools/json-schema-ref-parser@npm:^9.0.6, @apidevtools/json-schema-ref-parser@npm:^9.1.2": version: 9.1.2 resolution: "@apidevtools/json-schema-ref-parser@npm:9.1.2" dependencies: @@ -75,18 +82,28 @@ __metadata: languageName: node linkType: hard -"@apollo/cache-control-types@npm:^1.0.2": - version: 1.0.2 - resolution: "@apollo/cache-control-types@npm:1.0.2" +"@apisyouwonthate/style-guide@npm:^1.4.0": + version: 1.5.0 + resolution: "@apisyouwonthate/style-guide@npm:1.5.0" + dependencies: + "@stoplight/spectral-formats": ^1.2.0 + "@stoplight/spectral-functions": ^1.6.1 + checksum: e19c7a758342e9e5abba27c3a589375cde997a6f2f6ec7fc599e0abe0de52481554e1676776ec93ba7141f4a2ad365ca99e7e007fbcf4bbe3c40fbc4f7ea53e2 + languageName: node + linkType: hard + +"@apollo/cache-control-types@npm:^1.0.3": + version: 1.0.3 + resolution: "@apollo/cache-control-types@npm:1.0.3" peerDependencies: graphql: 14.x || 15.x || 16.x - checksum: 1e00c57b45fbd8656c96cdcd254658f332c1955bd8db9274c665e1c6ef8ac881a6b6a3f953b60638ae5f59fdfce6b005adb9a5b945b694903579a9665499e823 + checksum: 1c2791f3c7fa0fc609bd42cebcb6a0d1ccfcee9b22e54c4aa5af918944ae9dbdd45d7b84670afc6de34444e9226e9e82523bc3969805b506b86fd28dc9abc9fa languageName: node linkType: hard "@apollo/client@npm:^3.0.0": - version: 3.7.15 - resolution: "@apollo/client@npm:3.7.15" + version: 3.7.17 + resolution: "@apollo/client@npm:3.7.17" dependencies: "@graphql-typed-document-node/core": ^3.1.1 "@wry/context": ^0.7.0 @@ -116,7 +133,7 @@ __metadata: optional: true subscriptions-transport-ws: optional: true - checksum: a33e56847dfb7d6176ffb3cd4d3ff2c548826ce51280a6c8f70e3d75daf9d3a287e79bf3d86ea0b16e39218c90d8a7b4f528eb340055387cf9137705970c0f59 + checksum: d25e955f3c409885185405ca5876cb74538becafa202257a27483c07d7faa9ce83b34d4cab4b7fd9ad217f80d768e651881292c406dbbca221c91013917890d7 languageName: node linkType: hard @@ -167,33 +184,33 @@ __metadata: languageName: node linkType: hard -"@apollo/server-gateway-interface@npm:^1.1.0": - version: 1.1.0 - resolution: "@apollo/server-gateway-interface@npm:1.1.0" +"@apollo/server-gateway-interface@npm:^1.1.1": + version: 1.1.1 + resolution: "@apollo/server-gateway-interface@npm:1.1.1" dependencies: - "@apollo/usage-reporting-protobuf": ^4.0.0 + "@apollo/usage-reporting-protobuf": ^4.1.1 "@apollo/utils.fetcher": ^2.0.0 "@apollo/utils.keyvaluecache": ^2.1.0 "@apollo/utils.logger": ^2.0.0 peerDependencies: graphql: 14.x || 15.x || 16.x - checksum: 0ad0b3b9dfb53cc664245acac638b3a3db0d56c496c8bf6c56928a92c21e9b3062bec47bd42c2c0f85a4469443467b245c772bb558c2733c1c0dde194722c82b + checksum: b85ca1682258f6d022b49acf4b6cb8147a4cc38fcc0e68fa3ca6a00843bee5b84f8317af26cbe3e6a41ede6990eb7eb733c50a123441a1efab56572b7d0fd6dc languageName: node linkType: hard "@apollo/server@npm:^4.0.0": - version: 4.7.1 - resolution: "@apollo/server@npm:4.7.1" + version: 4.8.1 + resolution: "@apollo/server@npm:4.8.1" dependencies: - "@apollo/cache-control-types": ^1.0.2 - "@apollo/server-gateway-interface": ^1.1.0 - "@apollo/usage-reporting-protobuf": ^4.1.0 + "@apollo/cache-control-types": ^1.0.3 + "@apollo/server-gateway-interface": ^1.1.1 + "@apollo/usage-reporting-protobuf": ^4.1.1 "@apollo/utils.createhash": ^2.0.0 "@apollo/utils.fetcher": ^2.0.0 "@apollo/utils.isnodelike": ^2.0.0 "@apollo/utils.keyvaluecache": ^2.1.0 "@apollo/utils.logger": ^2.0.0 - "@apollo/utils.usagereporting": ^2.0.0 + "@apollo/utils.usagereporting": ^2.1.0 "@apollo/utils.withrequired": ^2.0.0 "@graphql-tools/schema": ^9.0.0 "@josephg/resolvable": ^1.0.0 @@ -213,16 +230,16 @@ __metadata: whatwg-mimetype: ^3.0.0 peerDependencies: graphql: ^16.6.0 - checksum: 6c8bdd240a4c688641bfec0520375db0eb78d2495286f30f962d7b6e97d7db70f105c09364e56103e1b93543e5760621666655eaa8ae7218312ac54ca7200d4b + checksum: b59c60b23b90aed9e2f74de1d16f4ac7582f16e2f98d830c85e1339525867786ab17a9295aadf53cdcfdfd0540f81273706e013aae9148ebc3e55e86c820b21c languageName: node linkType: hard -"@apollo/usage-reporting-protobuf@npm:^4.0.0, @apollo/usage-reporting-protobuf@npm:^4.1.0": - version: 4.1.0 - resolution: "@apollo/usage-reporting-protobuf@npm:4.1.0" +"@apollo/usage-reporting-protobuf@npm:^4.1.0, @apollo/usage-reporting-protobuf@npm:^4.1.1": + version: 4.1.1 + resolution: "@apollo/usage-reporting-protobuf@npm:4.1.1" dependencies: "@apollo/protobufjs": 1.2.7 - checksum: 442532d7077a728a499de6c2c2340d106b26f14695446361f947a14d3092e4109239a86cfb99e4bb795d913523c1f61a05bb799b45fc72615560693bbd62e645 + checksum: 899f13cfb57cfe4320e50fff84254604c25538620aa5a56bad06fb4fc929a8842237b376a5ab6d82800d9aceacc8e79ccae01a1c11e85456d4a9ed50a6fe40ee languageName: node linkType: hard @@ -236,12 +253,12 @@ __metadata: languageName: node linkType: hard -"@apollo/utils.dropunuseddefinitions@npm:^2.0.0": - version: 2.0.0 - resolution: "@apollo/utils.dropunuseddefinitions@npm:2.0.0" +"@apollo/utils.dropunuseddefinitions@npm:^2.0.1": + version: 2.0.1 + resolution: "@apollo/utils.dropunuseddefinitions@npm:2.0.1" peerDependencies: graphql: 14.x || 15.x || 16.x - checksum: aaabd487ce25b56488f6bbf6606aecdc2b1f57805ec1b7fa16e21510947d4d5b4b1d557ebaa499dfecb8dfaef4058b696812feed6896bac5d7fb52e9bb1e1b2c + checksum: c12166f2551fb44045a8210317b7776abc263136bd07bfe3c6eecdb050468590fc73e524efc437cad21cc4cfcd1efc3e110285025150c2073a4b303934898ac1 languageName: node linkType: hard @@ -276,57 +293,57 @@ __metadata: languageName: node linkType: hard -"@apollo/utils.printwithreducedwhitespace@npm:^2.0.0": - version: 2.0.0 - resolution: "@apollo/utils.printwithreducedwhitespace@npm:2.0.0" +"@apollo/utils.printwithreducedwhitespace@npm:^2.0.1": + version: 2.0.1 + resolution: "@apollo/utils.printwithreducedwhitespace@npm:2.0.1" peerDependencies: graphql: 14.x || 15.x || 16.x - checksum: 0e1d374f2e0afd2d0fd31ff1c6717476b4ddeb642981d8f731a44420137f4991a28c1f9e278abf4229bb3174ae68037736e8cd8e13de5e316bf384dc32246518 + checksum: 16cd191e66f3801b15deb581426cd1f55066bb824c32d63fe9de9c255bea2e2b6ee1ffc88873607830d2df0f3b4d9a14c707b709f205062e21a502f08f40d513 languageName: node linkType: hard -"@apollo/utils.removealiases@npm:2.0.0": - version: 2.0.0 - resolution: "@apollo/utils.removealiases@npm:2.0.0" +"@apollo/utils.removealiases@npm:2.0.1": + version: 2.0.1 + resolution: "@apollo/utils.removealiases@npm:2.0.1" peerDependencies: graphql: 14.x || 15.x || 16.x - checksum: 4f97e5864353386b8326eb62dd923be19c7e1f6b7ddc0935ceac1e34462aa471908d015f223f47a9cdd819e2d844f9dbdd27800bb451f5ffb4f376c4da8d2c41 + checksum: 2f3f925b239bce49fe9d80bb9fbb551992c8d9180af160e780faf1c88971a30ef16b842e82e1f27a0e1f8c649af0a442ef95f6838d4cde6148939ec73d9464f6 languageName: node linkType: hard -"@apollo/utils.sortast@npm:^2.0.0": - version: 2.0.0 - resolution: "@apollo/utils.sortast@npm:2.0.0" +"@apollo/utils.sortast@npm:^2.0.1": + version: 2.0.1 + resolution: "@apollo/utils.sortast@npm:2.0.1" dependencies: lodash.sortby: ^4.7.0 peerDependencies: graphql: 14.x || 15.x || 16.x - checksum: 50cfbdb6b8af735e9786af225edd6d4350e7530f5109bc330ae7f32edf38f15eed7711184d133a0801c5673fbc9a988a6521c7f69f3dc27910f2bd9fb6fbbb22 + checksum: b71245558ebd64bf93b98aec933d4b5f5758e0fecf7915728d94725ed4201fb2515e2af92fe01a595638147e5e0ef50a27ab5323d9b76eeb126769fb1e58f051 languageName: node linkType: hard -"@apollo/utils.stripsensitiveliterals@npm:^2.0.0": - version: 2.0.0 - resolution: "@apollo/utils.stripsensitiveliterals@npm:2.0.0" +"@apollo/utils.stripsensitiveliterals@npm:^2.0.1": + version: 2.0.1 + resolution: "@apollo/utils.stripsensitiveliterals@npm:2.0.1" peerDependencies: graphql: 14.x || 15.x || 16.x - checksum: d0a740a6d1e525b72c7d7066fa87a4ee273b3ce7401f3578542278121819bf90c97d32227270e07c923ab205afee2b52afb03261865175ba0040666a8988d479 + checksum: a3f74af0626f89d61f7ed1d25194f6b77006a06653399eecaea0b246cf685a85465091f2dc70280b127871b5c1eda7ded799ce176271c2612946acdc9453d388 languageName: node linkType: hard -"@apollo/utils.usagereporting@npm:^2.0.0": - version: 2.0.0 - resolution: "@apollo/utils.usagereporting@npm:2.0.0" +"@apollo/utils.usagereporting@npm:^2.1.0": + version: 2.1.0 + resolution: "@apollo/utils.usagereporting@npm:2.1.0" dependencies: - "@apollo/usage-reporting-protobuf": ^4.0.0 - "@apollo/utils.dropunuseddefinitions": ^2.0.0 - "@apollo/utils.printwithreducedwhitespace": ^2.0.0 - "@apollo/utils.removealiases": 2.0.0 - "@apollo/utils.sortast": ^2.0.0 - "@apollo/utils.stripsensitiveliterals": ^2.0.0 + "@apollo/usage-reporting-protobuf": ^4.1.0 + "@apollo/utils.dropunuseddefinitions": ^2.0.1 + "@apollo/utils.printwithreducedwhitespace": ^2.0.1 + "@apollo/utils.removealiases": 2.0.1 + "@apollo/utils.sortast": ^2.0.1 + "@apollo/utils.stripsensitiveliterals": ^2.0.1 peerDependencies: graphql: 14.x || 15.x || 16.x - checksum: 599e44d236728d6e57953c6fb9372cc35bc5e8e0d572b951907c94683228c134662efef4e97e456e7655d2871215319b912cabc3662c799111b5265de7873880 + checksum: 7a676f9b519563955d105264a93668e3897108d937115063c4cd3df310f32be29b8d7bdfe12eeca8d5966558d8c7f07742bcfd9ebb844c48b6ad1acee620183f languageName: node linkType: hard @@ -410,13 +427,24 @@ __metadata: languageName: node linkType: hard -"@asyncapi/react-component@npm:1.0.0-next.47": - version: 1.0.0-next.47 - resolution: "@asyncapi/react-component@npm:1.0.0-next.47" +"@asyncapi/protobuf-schema-parser@npm:^1.0.0": + version: 1.0.0 + resolution: "@asyncapi/protobuf-schema-parser@npm:1.0.0" + dependencies: + conventional-changelog-conventionalcommits: ^5.0.0 + protocol-buffers-schema: ^3.6.0 + checksum: 0d7dfdf79bb698618701f2ace8f369d3d3b38d26015b6b4a01cab47f9587f88dd9f5042d6f796fa59044b114d801075d47d7216f28bba3c96823364ab5790b7d + languageName: node + linkType: hard + +"@asyncapi/react-component@npm:1.0.0-next.48": + version: 1.0.0-next.48 + resolution: "@asyncapi/react-component@npm:1.0.0-next.48" dependencies: "@asyncapi/avro-schema-parser": ^1.1.0 "@asyncapi/openapi-schema-parser": ^2.0.1 "@asyncapi/parser": ^1.18.0 + "@asyncapi/protobuf-schema-parser": ^1.0.0 highlight.js: ^10.7.2 isomorphic-dompurify: ^0.13.0 marked: ^4.0.14 @@ -425,7 +453,7 @@ __metadata: peerDependencies: react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 837b6378f1188945a0e92d93efe71691a8dad120fad5624b58b325ec86c51435b874464ec0c47308ffacda9ee4d77ad8217881584bd74081f6db2211f09cc60c + checksum: e01c5ca294d708e6557b3e3ccbc83e46a0cb1ca36cc022aec26ff8c7372756df390993ba21f993cdba3b4a95aea644005d9f3531cd5ce066e4376ebf624b21f2 languageName: node linkType: hard @@ -531,13 +559,23 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/abort-controller@npm:3.342.0, @aws-sdk/abort-controller@npm:^3.310.0": - version: 3.342.0 - resolution: "@aws-sdk/abort-controller@npm:3.342.0" +"@aws-sdk/abort-controller@npm:3.370.0, @aws-sdk/abort-controller@npm:^3.347.0": + version: 3.370.0 + resolution: "@aws-sdk/abort-controller@npm:3.370.0" dependencies: - "@aws-sdk/types": 3.342.0 + "@aws-sdk/types": 3.370.0 tslib: ^2.5.0 - checksum: 5681ba5f943c1843b841a16290f9a093d01a75f16fc2348ae140a1b83ecdae983696f5f59936cd91f33eb8f76701b9f4dae11ad68f6d29c785327767a6564057 + checksum: 0095e83186de9ce150826d5afc59ae02de0a05508595226edec187c96ff6b46687a4b3ba9a9051a25b85a6051c7d7aeba347e8a7a0632edbe116ee3c60376842 + languageName: node + linkType: hard + +"@aws-sdk/chunked-blob-reader-native@npm:3.310.0": + version: 3.310.0 + resolution: "@aws-sdk/chunked-blob-reader-native@npm:3.310.0" + dependencies: + "@aws-sdk/util-base64": 3.310.0 + tslib: ^2.5.0 + checksum: 8b9b88edcaa28b58277a06e95c1b01f1eb2bfba3d994031664957340ae2bc857f1575ec999e8dbd085242b52719228ebff05af1cc0228b1f9296646f4b2095cb languageName: node linkType: hard @@ -550,628 +588,533 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/client-cognito-identity@npm:3.345.0": - version: 3.345.0 - resolution: "@aws-sdk/client-cognito-identity@npm:3.345.0" +"@aws-sdk/client-cognito-identity@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/client-cognito-identity@npm:3.370.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.345.0 - "@aws-sdk/config-resolver": 3.342.0 - "@aws-sdk/credential-provider-node": 3.345.0 - "@aws-sdk/fetch-http-handler": 3.342.0 - "@aws-sdk/hash-node": 3.344.0 - "@aws-sdk/invalid-dependency": 3.342.0 - "@aws-sdk/middleware-content-length": 3.342.0 - "@aws-sdk/middleware-endpoint": 3.344.0 - "@aws-sdk/middleware-host-header": 3.342.0 - "@aws-sdk/middleware-logger": 3.342.0 - "@aws-sdk/middleware-recursion-detection": 3.342.0 - "@aws-sdk/middleware-retry": 3.342.0 - "@aws-sdk/middleware-serde": 3.342.0 - "@aws-sdk/middleware-signing": 3.342.0 - "@aws-sdk/middleware-stack": 3.342.0 - "@aws-sdk/middleware-user-agent": 3.345.0 - "@aws-sdk/node-config-provider": 3.342.0 - "@aws-sdk/node-http-handler": 3.344.0 - "@aws-sdk/smithy-client": 3.342.0 - "@aws-sdk/types": 3.342.0 - "@aws-sdk/url-parser": 3.342.0 - "@aws-sdk/util-base64": 3.310.0 - "@aws-sdk/util-body-length-browser": 3.310.0 - "@aws-sdk/util-body-length-node": 3.310.0 - "@aws-sdk/util-defaults-mode-browser": 3.342.0 - "@aws-sdk/util-defaults-mode-node": 3.342.0 - "@aws-sdk/util-endpoints": 3.342.0 - "@aws-sdk/util-retry": 3.342.0 - "@aws-sdk/util-user-agent-browser": 3.345.0 - "@aws-sdk/util-user-agent-node": 3.345.0 - "@aws-sdk/util-utf8": 3.310.0 - "@smithy/protocol-http": ^1.0.1 - "@smithy/types": ^1.0.0 + "@aws-sdk/client-sts": 3.370.0 + "@aws-sdk/credential-provider-node": 3.370.0 + "@aws-sdk/middleware-host-header": 3.370.0 + "@aws-sdk/middleware-logger": 3.370.0 + "@aws-sdk/middleware-recursion-detection": 3.370.0 + "@aws-sdk/middleware-signing": 3.370.0 + "@aws-sdk/middleware-user-agent": 3.370.0 + "@aws-sdk/types": 3.370.0 + "@aws-sdk/util-endpoints": 3.370.0 + "@aws-sdk/util-user-agent-browser": 3.370.0 + "@aws-sdk/util-user-agent-node": 3.370.0 + "@smithy/config-resolver": ^1.0.1 + "@smithy/fetch-http-handler": ^1.0.1 + "@smithy/hash-node": ^1.0.1 + "@smithy/invalid-dependency": ^1.0.1 + "@smithy/middleware-content-length": ^1.0.1 + "@smithy/middleware-endpoint": ^1.0.2 + "@smithy/middleware-retry": ^1.0.3 + "@smithy/middleware-serde": ^1.0.1 + "@smithy/middleware-stack": ^1.0.1 + "@smithy/node-config-provider": ^1.0.1 + "@smithy/node-http-handler": ^1.0.2 + "@smithy/protocol-http": ^1.1.0 + "@smithy/smithy-client": ^1.0.3 + "@smithy/types": ^1.1.0 + "@smithy/url-parser": ^1.0.1 + "@smithy/util-base64": ^1.0.1 + "@smithy/util-body-length-browser": ^1.0.1 + "@smithy/util-body-length-node": ^1.0.1 + "@smithy/util-defaults-mode-browser": ^1.0.1 + "@smithy/util-defaults-mode-node": ^1.0.1 + "@smithy/util-retry": ^1.0.3 + "@smithy/util-utf8": ^1.0.1 tslib: ^2.5.0 - checksum: 7dead889b689a3e4bd0c911008cafc8f362bf09377b0590f1d467a47819ca8f3185b4fe786f6b81cd0df68a5010a4ca092e4e8edc18491f71460745d0b9604d7 + checksum: e13eb18f70ce89ea1d2a111ad74892bbf5ca57a926d97a8787e6fa71e502eed94660cc2e364223151a4c6d019a4d30fd7f21da093f39893e6719ee481fdaf47a languageName: node linkType: hard -"@aws-sdk/client-eks@npm:^3.310.0": - version: 3.345.0 - resolution: "@aws-sdk/client-eks@npm:3.345.0" +"@aws-sdk/client-eks@npm:^3.350.0": + version: 3.370.0 + resolution: "@aws-sdk/client-eks@npm:3.370.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.345.0 - "@aws-sdk/config-resolver": 3.342.0 - "@aws-sdk/credential-provider-node": 3.345.0 - "@aws-sdk/fetch-http-handler": 3.342.0 - "@aws-sdk/hash-node": 3.344.0 - "@aws-sdk/invalid-dependency": 3.342.0 - "@aws-sdk/middleware-content-length": 3.342.0 - "@aws-sdk/middleware-endpoint": 3.344.0 - "@aws-sdk/middleware-host-header": 3.342.0 - "@aws-sdk/middleware-logger": 3.342.0 - "@aws-sdk/middleware-recursion-detection": 3.342.0 - "@aws-sdk/middleware-retry": 3.342.0 - "@aws-sdk/middleware-serde": 3.342.0 - "@aws-sdk/middleware-signing": 3.342.0 - "@aws-sdk/middleware-stack": 3.342.0 - "@aws-sdk/middleware-user-agent": 3.345.0 - "@aws-sdk/node-config-provider": 3.342.0 - "@aws-sdk/node-http-handler": 3.344.0 - "@aws-sdk/smithy-client": 3.342.0 - "@aws-sdk/types": 3.342.0 - "@aws-sdk/url-parser": 3.342.0 - "@aws-sdk/util-base64": 3.310.0 - "@aws-sdk/util-body-length-browser": 3.310.0 - "@aws-sdk/util-body-length-node": 3.310.0 - "@aws-sdk/util-defaults-mode-browser": 3.342.0 - "@aws-sdk/util-defaults-mode-node": 3.342.0 - "@aws-sdk/util-endpoints": 3.342.0 - "@aws-sdk/util-retry": 3.342.0 - "@aws-sdk/util-user-agent-browser": 3.345.0 - "@aws-sdk/util-user-agent-node": 3.345.0 - "@aws-sdk/util-utf8": 3.310.0 - "@aws-sdk/util-waiter": 3.342.0 - "@smithy/protocol-http": ^1.0.1 - "@smithy/types": ^1.0.0 + "@aws-sdk/client-sts": 3.370.0 + "@aws-sdk/credential-provider-node": 3.370.0 + "@aws-sdk/middleware-host-header": 3.370.0 + "@aws-sdk/middleware-logger": 3.370.0 + "@aws-sdk/middleware-recursion-detection": 3.370.0 + "@aws-sdk/middleware-signing": 3.370.0 + "@aws-sdk/middleware-user-agent": 3.370.0 + "@aws-sdk/types": 3.370.0 + "@aws-sdk/util-endpoints": 3.370.0 + "@aws-sdk/util-user-agent-browser": 3.370.0 + "@aws-sdk/util-user-agent-node": 3.370.0 + "@smithy/config-resolver": ^1.0.1 + "@smithy/fetch-http-handler": ^1.0.1 + "@smithy/hash-node": ^1.0.1 + "@smithy/invalid-dependency": ^1.0.1 + "@smithy/middleware-content-length": ^1.0.1 + "@smithy/middleware-endpoint": ^1.0.2 + "@smithy/middleware-retry": ^1.0.3 + "@smithy/middleware-serde": ^1.0.1 + "@smithy/middleware-stack": ^1.0.1 + "@smithy/node-config-provider": ^1.0.1 + "@smithy/node-http-handler": ^1.0.2 + "@smithy/protocol-http": ^1.1.0 + "@smithy/smithy-client": ^1.0.3 + "@smithy/types": ^1.1.0 + "@smithy/url-parser": ^1.0.1 + "@smithy/util-base64": ^1.0.1 + "@smithy/util-body-length-browser": ^1.0.1 + "@smithy/util-body-length-node": ^1.0.1 + "@smithy/util-defaults-mode-browser": ^1.0.1 + "@smithy/util-defaults-mode-node": ^1.0.1 + "@smithy/util-retry": ^1.0.3 + "@smithy/util-utf8": ^1.0.1 + "@smithy/util-waiter": ^1.0.1 tslib: ^2.5.0 uuid: ^8.3.2 - checksum: 5d3488054155e05afe3cc700cd8156cfaa17098b869a240f596e12b64f0b3714f95ae41f4a8f19c91951eaa7ba1a5e7ab47d8eb7f69c982728f3cff594cc1417 + checksum: 4b34fe5155161da1b0102e49d62720e8ad067effe188af8aeb9a755d05eae55f52edb8279c19ad18851513d526050f08c239d4a609ea482c5352223b71785e54 languageName: node linkType: hard -"@aws-sdk/client-organizations@npm:^3.310.0": - version: 3.345.0 - resolution: "@aws-sdk/client-organizations@npm:3.345.0" +"@aws-sdk/client-organizations@npm:^3.350.0": + version: 3.370.0 + resolution: "@aws-sdk/client-organizations@npm:3.370.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.345.0 - "@aws-sdk/config-resolver": 3.342.0 - "@aws-sdk/credential-provider-node": 3.345.0 - "@aws-sdk/fetch-http-handler": 3.342.0 - "@aws-sdk/hash-node": 3.344.0 - "@aws-sdk/invalid-dependency": 3.342.0 - "@aws-sdk/middleware-content-length": 3.342.0 - "@aws-sdk/middleware-endpoint": 3.344.0 - "@aws-sdk/middleware-host-header": 3.342.0 - "@aws-sdk/middleware-logger": 3.342.0 - "@aws-sdk/middleware-recursion-detection": 3.342.0 - "@aws-sdk/middleware-retry": 3.342.0 - "@aws-sdk/middleware-serde": 3.342.0 - "@aws-sdk/middleware-signing": 3.342.0 - "@aws-sdk/middleware-stack": 3.342.0 - "@aws-sdk/middleware-user-agent": 3.345.0 - "@aws-sdk/node-config-provider": 3.342.0 - "@aws-sdk/node-http-handler": 3.344.0 - "@aws-sdk/smithy-client": 3.342.0 - "@aws-sdk/types": 3.342.0 - "@aws-sdk/url-parser": 3.342.0 - "@aws-sdk/util-base64": 3.310.0 - "@aws-sdk/util-body-length-browser": 3.310.0 - "@aws-sdk/util-body-length-node": 3.310.0 - "@aws-sdk/util-defaults-mode-browser": 3.342.0 - "@aws-sdk/util-defaults-mode-node": 3.342.0 - "@aws-sdk/util-endpoints": 3.342.0 - "@aws-sdk/util-retry": 3.342.0 - "@aws-sdk/util-user-agent-browser": 3.345.0 - "@aws-sdk/util-user-agent-node": 3.345.0 - "@aws-sdk/util-utf8": 3.310.0 - "@smithy/protocol-http": ^1.0.1 - "@smithy/types": ^1.0.0 + "@aws-sdk/client-sts": 3.370.0 + "@aws-sdk/credential-provider-node": 3.370.0 + "@aws-sdk/middleware-host-header": 3.370.0 + "@aws-sdk/middleware-logger": 3.370.0 + "@aws-sdk/middleware-recursion-detection": 3.370.0 + "@aws-sdk/middleware-signing": 3.370.0 + "@aws-sdk/middleware-user-agent": 3.370.0 + "@aws-sdk/types": 3.370.0 + "@aws-sdk/util-endpoints": 3.370.0 + "@aws-sdk/util-user-agent-browser": 3.370.0 + "@aws-sdk/util-user-agent-node": 3.370.0 + "@smithy/config-resolver": ^1.0.1 + "@smithy/fetch-http-handler": ^1.0.1 + "@smithy/hash-node": ^1.0.1 + "@smithy/invalid-dependency": ^1.0.1 + "@smithy/middleware-content-length": ^1.0.1 + "@smithy/middleware-endpoint": ^1.0.2 + "@smithy/middleware-retry": ^1.0.3 + "@smithy/middleware-serde": ^1.0.1 + "@smithy/middleware-stack": ^1.0.1 + "@smithy/node-config-provider": ^1.0.1 + "@smithy/node-http-handler": ^1.0.2 + "@smithy/protocol-http": ^1.1.0 + "@smithy/smithy-client": ^1.0.3 + "@smithy/types": ^1.1.0 + "@smithy/url-parser": ^1.0.1 + "@smithy/util-base64": ^1.0.1 + "@smithy/util-body-length-browser": ^1.0.1 + "@smithy/util-body-length-node": ^1.0.1 + "@smithy/util-defaults-mode-browser": ^1.0.1 + "@smithy/util-defaults-mode-node": ^1.0.1 + "@smithy/util-retry": ^1.0.3 + "@smithy/util-utf8": ^1.0.1 tslib: ^2.5.0 - checksum: 2a50e58cdcac75cd6b4bc5ca8b985feadc8de100db9a12e1820189a22098b983695dbba7927f7ab8dc48bbb1d6210d33006cf9712f275d1afa10b61a4923e7f7 + checksum: 738b259771e83c52abdcc2b2511521f91777262b7e14b1aceb78d8dae7179e2a17648733fe7a40358ad6040ee03f1f251a977a54197b09d4d9f0b6b40052e8d7 languageName: node linkType: hard -"@aws-sdk/client-s3@npm:^3.310.0": - version: 3.345.0 - resolution: "@aws-sdk/client-s3@npm:3.345.0" +"@aws-sdk/client-s3@npm:^3.350.0": + version: 3.370.0 + resolution: "@aws-sdk/client-s3@npm:3.370.0" dependencies: "@aws-crypto/sha1-browser": 3.0.0 "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.345.0 - "@aws-sdk/config-resolver": 3.342.0 - "@aws-sdk/credential-provider-node": 3.345.0 - "@aws-sdk/eventstream-serde-browser": 3.342.0 - "@aws-sdk/eventstream-serde-config-resolver": 3.342.0 - "@aws-sdk/eventstream-serde-node": 3.342.0 - "@aws-sdk/fetch-http-handler": 3.342.0 - "@aws-sdk/hash-blob-browser": 3.342.0 - "@aws-sdk/hash-node": 3.344.0 - "@aws-sdk/hash-stream-node": 3.342.0 - "@aws-sdk/invalid-dependency": 3.342.0 - "@aws-sdk/md5-js": 3.342.0 - "@aws-sdk/middleware-bucket-endpoint": 3.342.0 - "@aws-sdk/middleware-content-length": 3.342.0 - "@aws-sdk/middleware-endpoint": 3.344.0 - "@aws-sdk/middleware-expect-continue": 3.342.0 - "@aws-sdk/middleware-flexible-checksums": 3.342.0 - "@aws-sdk/middleware-host-header": 3.342.0 - "@aws-sdk/middleware-location-constraint": 3.342.0 - "@aws-sdk/middleware-logger": 3.342.0 - "@aws-sdk/middleware-recursion-detection": 3.342.0 - "@aws-sdk/middleware-retry": 3.342.0 - "@aws-sdk/middleware-sdk-s3": 3.342.0 - "@aws-sdk/middleware-serde": 3.342.0 - "@aws-sdk/middleware-signing": 3.342.0 - "@aws-sdk/middleware-ssec": 3.342.0 - "@aws-sdk/middleware-stack": 3.342.0 - "@aws-sdk/middleware-user-agent": 3.345.0 - "@aws-sdk/node-config-provider": 3.342.0 - "@aws-sdk/node-http-handler": 3.344.0 - "@aws-sdk/signature-v4-multi-region": 3.344.0 - "@aws-sdk/smithy-client": 3.342.0 - "@aws-sdk/types": 3.342.0 - "@aws-sdk/url-parser": 3.342.0 - "@aws-sdk/util-base64": 3.310.0 - "@aws-sdk/util-body-length-browser": 3.310.0 - "@aws-sdk/util-body-length-node": 3.310.0 - "@aws-sdk/util-defaults-mode-browser": 3.342.0 - "@aws-sdk/util-defaults-mode-node": 3.342.0 - "@aws-sdk/util-endpoints": 3.342.0 - "@aws-sdk/util-retry": 3.342.0 - "@aws-sdk/util-stream-browser": 3.342.0 - "@aws-sdk/util-stream-node": 3.344.0 - "@aws-sdk/util-user-agent-browser": 3.345.0 - "@aws-sdk/util-user-agent-node": 3.345.0 - "@aws-sdk/util-utf8": 3.310.0 - "@aws-sdk/util-waiter": 3.342.0 + "@aws-sdk/client-sts": 3.370.0 + "@aws-sdk/credential-provider-node": 3.370.0 + "@aws-sdk/hash-blob-browser": 3.370.0 + "@aws-sdk/hash-stream-node": 3.370.0 + "@aws-sdk/md5-js": 3.370.0 + "@aws-sdk/middleware-bucket-endpoint": 3.370.0 + "@aws-sdk/middleware-expect-continue": 3.370.0 + "@aws-sdk/middleware-flexible-checksums": 3.370.0 + "@aws-sdk/middleware-host-header": 3.370.0 + "@aws-sdk/middleware-location-constraint": 3.370.0 + "@aws-sdk/middleware-logger": 3.370.0 + "@aws-sdk/middleware-recursion-detection": 3.370.0 + "@aws-sdk/middleware-sdk-s3": 3.370.0 + "@aws-sdk/middleware-signing": 3.370.0 + "@aws-sdk/middleware-ssec": 3.370.0 + "@aws-sdk/middleware-user-agent": 3.370.0 + "@aws-sdk/signature-v4-multi-region": 3.370.0 + "@aws-sdk/types": 3.370.0 + "@aws-sdk/util-endpoints": 3.370.0 + "@aws-sdk/util-user-agent-browser": 3.370.0 + "@aws-sdk/util-user-agent-node": 3.370.0 "@aws-sdk/xml-builder": 3.310.0 - "@smithy/protocol-http": ^1.0.1 - "@smithy/types": ^1.0.0 - fast-xml-parser: 4.1.2 + "@smithy/config-resolver": ^1.0.1 + "@smithy/eventstream-serde-browser": ^1.0.1 + "@smithy/eventstream-serde-config-resolver": ^1.0.1 + "@smithy/eventstream-serde-node": ^1.0.1 + "@smithy/fetch-http-handler": ^1.0.1 + "@smithy/hash-node": ^1.0.1 + "@smithy/invalid-dependency": ^1.0.1 + "@smithy/middleware-content-length": ^1.0.1 + "@smithy/middleware-endpoint": ^1.0.2 + "@smithy/middleware-retry": ^1.0.3 + "@smithy/middleware-serde": ^1.0.1 + "@smithy/middleware-stack": ^1.0.1 + "@smithy/node-config-provider": ^1.0.1 + "@smithy/node-http-handler": ^1.0.2 + "@smithy/protocol-http": ^1.1.0 + "@smithy/smithy-client": ^1.0.3 + "@smithy/types": ^1.1.0 + "@smithy/url-parser": ^1.0.1 + "@smithy/util-base64": ^1.0.1 + "@smithy/util-body-length-browser": ^1.0.1 + "@smithy/util-body-length-node": ^1.0.1 + "@smithy/util-defaults-mode-browser": ^1.0.1 + "@smithy/util-defaults-mode-node": ^1.0.1 + "@smithy/util-retry": ^1.0.3 + "@smithy/util-stream": ^1.0.1 + "@smithy/util-utf8": ^1.0.1 + "@smithy/util-waiter": ^1.0.1 + fast-xml-parser: 4.2.5 tslib: ^2.5.0 - checksum: 586a4067378e3e8a276608d247b7d0d2a74039ab1f7990750f8fb961689e1bb07a6faf1b4f7ae57e63195bf15a497f8dacd50a388367825de52cdbecefd420ca + checksum: 6e395a519a46c1351597b7104e510c8a6f17b7d531eb9a1bf0a706ba69c6c383a9f02b2309d9eb712ead8454e6c1a3906ce65202b7cf353c0385879162875c7b languageName: node linkType: hard -"@aws-sdk/client-sqs@npm:^3.310.0": - version: 3.345.0 - resolution: "@aws-sdk/client-sqs@npm:3.345.0" +"@aws-sdk/client-sqs@npm:^3.350.0": + version: 3.370.0 + resolution: "@aws-sdk/client-sqs@npm:3.370.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.345.0 - "@aws-sdk/config-resolver": 3.342.0 - "@aws-sdk/credential-provider-node": 3.345.0 - "@aws-sdk/fetch-http-handler": 3.342.0 - "@aws-sdk/hash-node": 3.344.0 - "@aws-sdk/invalid-dependency": 3.342.0 - "@aws-sdk/md5-js": 3.342.0 - "@aws-sdk/middleware-content-length": 3.342.0 - "@aws-sdk/middleware-endpoint": 3.344.0 - "@aws-sdk/middleware-host-header": 3.342.0 - "@aws-sdk/middleware-logger": 3.342.0 - "@aws-sdk/middleware-recursion-detection": 3.342.0 - "@aws-sdk/middleware-retry": 3.342.0 - "@aws-sdk/middleware-sdk-sqs": 3.342.0 - "@aws-sdk/middleware-serde": 3.342.0 - "@aws-sdk/middleware-signing": 3.342.0 - "@aws-sdk/middleware-stack": 3.342.0 - "@aws-sdk/middleware-user-agent": 3.345.0 - "@aws-sdk/node-config-provider": 3.342.0 - "@aws-sdk/node-http-handler": 3.344.0 - "@aws-sdk/smithy-client": 3.342.0 - "@aws-sdk/types": 3.342.0 - "@aws-sdk/url-parser": 3.342.0 - "@aws-sdk/util-base64": 3.310.0 - "@aws-sdk/util-body-length-browser": 3.310.0 - "@aws-sdk/util-body-length-node": 3.310.0 - "@aws-sdk/util-defaults-mode-browser": 3.342.0 - "@aws-sdk/util-defaults-mode-node": 3.342.0 - "@aws-sdk/util-endpoints": 3.342.0 - "@aws-sdk/util-retry": 3.342.0 - "@aws-sdk/util-user-agent-browser": 3.345.0 - "@aws-sdk/util-user-agent-node": 3.345.0 - "@aws-sdk/util-utf8": 3.310.0 - "@smithy/protocol-http": ^1.0.1 - "@smithy/types": ^1.0.0 - fast-xml-parser: 4.1.2 + "@aws-sdk/client-sts": 3.370.0 + "@aws-sdk/credential-provider-node": 3.370.0 + "@aws-sdk/middleware-host-header": 3.370.0 + "@aws-sdk/middleware-logger": 3.370.0 + "@aws-sdk/middleware-recursion-detection": 3.370.0 + "@aws-sdk/middleware-sdk-sqs": 3.370.0 + "@aws-sdk/middleware-signing": 3.370.0 + "@aws-sdk/middleware-user-agent": 3.370.0 + "@aws-sdk/types": 3.370.0 + "@aws-sdk/util-endpoints": 3.370.0 + "@aws-sdk/util-user-agent-browser": 3.370.0 + "@aws-sdk/util-user-agent-node": 3.370.0 + "@smithy/config-resolver": ^1.0.1 + "@smithy/fetch-http-handler": ^1.0.1 + "@smithy/hash-node": ^1.0.1 + "@smithy/invalid-dependency": ^1.0.1 + "@smithy/md5-js": ^1.0.1 + "@smithy/middleware-content-length": ^1.0.1 + "@smithy/middleware-endpoint": ^1.0.2 + "@smithy/middleware-retry": ^1.0.3 + "@smithy/middleware-serde": ^1.0.1 + "@smithy/middleware-stack": ^1.0.1 + "@smithy/node-config-provider": ^1.0.1 + "@smithy/node-http-handler": ^1.0.2 + "@smithy/protocol-http": ^1.1.0 + "@smithy/smithy-client": ^1.0.3 + "@smithy/types": ^1.1.0 + "@smithy/url-parser": ^1.0.1 + "@smithy/util-base64": ^1.0.1 + "@smithy/util-body-length-browser": ^1.0.1 + "@smithy/util-body-length-node": ^1.0.1 + "@smithy/util-defaults-mode-browser": ^1.0.1 + "@smithy/util-defaults-mode-node": ^1.0.1 + "@smithy/util-retry": ^1.0.3 + "@smithy/util-utf8": ^1.0.1 + fast-xml-parser: 4.2.5 tslib: ^2.5.0 - checksum: f6a8cd2a1437d43596c4b1a2e63bedb7215bdda96ccf1820f8ae18a42b9ceaade239b0a335a4fb34c65f635a6d65b827907085aebb1ae7f18702f944659840f8 + checksum: 3029a13464fcf3d7a913e9bbe5e98733f733489a1a7d69256b3189e07ce016cbf350b06368636e75426f10f60b8e14aac29678fed6ca77e378954f3cd0c24b4a languageName: node linkType: hard -"@aws-sdk/client-sso-oidc@npm:3.345.0": - version: 3.345.0 - resolution: "@aws-sdk/client-sso-oidc@npm:3.345.0" +"@aws-sdk/client-sso-oidc@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/client-sso-oidc@npm:3.370.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.342.0 - "@aws-sdk/fetch-http-handler": 3.342.0 - "@aws-sdk/hash-node": 3.344.0 - "@aws-sdk/invalid-dependency": 3.342.0 - "@aws-sdk/middleware-content-length": 3.342.0 - "@aws-sdk/middleware-endpoint": 3.344.0 - "@aws-sdk/middleware-host-header": 3.342.0 - "@aws-sdk/middleware-logger": 3.342.0 - "@aws-sdk/middleware-recursion-detection": 3.342.0 - "@aws-sdk/middleware-retry": 3.342.0 - "@aws-sdk/middleware-serde": 3.342.0 - "@aws-sdk/middleware-stack": 3.342.0 - "@aws-sdk/middleware-user-agent": 3.345.0 - "@aws-sdk/node-config-provider": 3.342.0 - "@aws-sdk/node-http-handler": 3.344.0 - "@aws-sdk/smithy-client": 3.342.0 - "@aws-sdk/types": 3.342.0 - "@aws-sdk/url-parser": 3.342.0 - "@aws-sdk/util-base64": 3.310.0 - "@aws-sdk/util-body-length-browser": 3.310.0 - "@aws-sdk/util-body-length-node": 3.310.0 - "@aws-sdk/util-defaults-mode-browser": 3.342.0 - "@aws-sdk/util-defaults-mode-node": 3.342.0 - "@aws-sdk/util-endpoints": 3.342.0 - "@aws-sdk/util-retry": 3.342.0 - "@aws-sdk/util-user-agent-browser": 3.345.0 - "@aws-sdk/util-user-agent-node": 3.345.0 - "@aws-sdk/util-utf8": 3.310.0 - "@smithy/protocol-http": ^1.0.1 - "@smithy/types": ^1.0.0 + "@aws-sdk/middleware-host-header": 3.370.0 + "@aws-sdk/middleware-logger": 3.370.0 + "@aws-sdk/middleware-recursion-detection": 3.370.0 + "@aws-sdk/middleware-user-agent": 3.370.0 + "@aws-sdk/types": 3.370.0 + "@aws-sdk/util-endpoints": 3.370.0 + "@aws-sdk/util-user-agent-browser": 3.370.0 + "@aws-sdk/util-user-agent-node": 3.370.0 + "@smithy/config-resolver": ^1.0.1 + "@smithy/fetch-http-handler": ^1.0.1 + "@smithy/hash-node": ^1.0.1 + "@smithy/invalid-dependency": ^1.0.1 + "@smithy/middleware-content-length": ^1.0.1 + "@smithy/middleware-endpoint": ^1.0.2 + "@smithy/middleware-retry": ^1.0.3 + "@smithy/middleware-serde": ^1.0.1 + "@smithy/middleware-stack": ^1.0.1 + "@smithy/node-config-provider": ^1.0.1 + "@smithy/node-http-handler": ^1.0.2 + "@smithy/protocol-http": ^1.1.0 + "@smithy/smithy-client": ^1.0.3 + "@smithy/types": ^1.1.0 + "@smithy/url-parser": ^1.0.1 + "@smithy/util-base64": ^1.0.1 + "@smithy/util-body-length-browser": ^1.0.1 + "@smithy/util-body-length-node": ^1.0.1 + "@smithy/util-defaults-mode-browser": ^1.0.1 + "@smithy/util-defaults-mode-node": ^1.0.1 + "@smithy/util-retry": ^1.0.3 + "@smithy/util-utf8": ^1.0.1 tslib: ^2.5.0 - checksum: 6241236088ad895f87cb1c0c5bcb176cfa20613097d99308dc513cea8f0b10efcab05b4a2d4f22819ca2c4ec8aee384c566e72e4177eb65cdd87136a650f1062 + checksum: a94d58fdef83615fa63ecde638a3ece82c2eaf05d7309a4ab336e0c6bebf8501aad123efbbf0714db4710208897594e13bfe1e450a657aa4bd82fbea338c0946 languageName: node linkType: hard -"@aws-sdk/client-sso@npm:3.345.0": - version: 3.345.0 - resolution: "@aws-sdk/client-sso@npm:3.345.0" +"@aws-sdk/client-sso@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/client-sso@npm:3.370.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.342.0 - "@aws-sdk/fetch-http-handler": 3.342.0 - "@aws-sdk/hash-node": 3.344.0 - "@aws-sdk/invalid-dependency": 3.342.0 - "@aws-sdk/middleware-content-length": 3.342.0 - "@aws-sdk/middleware-endpoint": 3.344.0 - "@aws-sdk/middleware-host-header": 3.342.0 - "@aws-sdk/middleware-logger": 3.342.0 - "@aws-sdk/middleware-recursion-detection": 3.342.0 - "@aws-sdk/middleware-retry": 3.342.0 - "@aws-sdk/middleware-serde": 3.342.0 - "@aws-sdk/middleware-stack": 3.342.0 - "@aws-sdk/middleware-user-agent": 3.345.0 - "@aws-sdk/node-config-provider": 3.342.0 - "@aws-sdk/node-http-handler": 3.344.0 - "@aws-sdk/smithy-client": 3.342.0 - "@aws-sdk/types": 3.342.0 - "@aws-sdk/url-parser": 3.342.0 - "@aws-sdk/util-base64": 3.310.0 - "@aws-sdk/util-body-length-browser": 3.310.0 - "@aws-sdk/util-body-length-node": 3.310.0 - "@aws-sdk/util-defaults-mode-browser": 3.342.0 - "@aws-sdk/util-defaults-mode-node": 3.342.0 - "@aws-sdk/util-endpoints": 3.342.0 - "@aws-sdk/util-retry": 3.342.0 - "@aws-sdk/util-user-agent-browser": 3.345.0 - "@aws-sdk/util-user-agent-node": 3.345.0 - "@aws-sdk/util-utf8": 3.310.0 - "@smithy/protocol-http": ^1.0.1 - "@smithy/types": ^1.0.0 + "@aws-sdk/middleware-host-header": 3.370.0 + "@aws-sdk/middleware-logger": 3.370.0 + "@aws-sdk/middleware-recursion-detection": 3.370.0 + "@aws-sdk/middleware-user-agent": 3.370.0 + "@aws-sdk/types": 3.370.0 + "@aws-sdk/util-endpoints": 3.370.0 + "@aws-sdk/util-user-agent-browser": 3.370.0 + "@aws-sdk/util-user-agent-node": 3.370.0 + "@smithy/config-resolver": ^1.0.1 + "@smithy/fetch-http-handler": ^1.0.1 + "@smithy/hash-node": ^1.0.1 + "@smithy/invalid-dependency": ^1.0.1 + "@smithy/middleware-content-length": ^1.0.1 + "@smithy/middleware-endpoint": ^1.0.2 + "@smithy/middleware-retry": ^1.0.3 + "@smithy/middleware-serde": ^1.0.1 + "@smithy/middleware-stack": ^1.0.1 + "@smithy/node-config-provider": ^1.0.1 + "@smithy/node-http-handler": ^1.0.2 + "@smithy/protocol-http": ^1.1.0 + "@smithy/smithy-client": ^1.0.3 + "@smithy/types": ^1.1.0 + "@smithy/url-parser": ^1.0.1 + "@smithy/util-base64": ^1.0.1 + "@smithy/util-body-length-browser": ^1.0.1 + "@smithy/util-body-length-node": ^1.0.1 + "@smithy/util-defaults-mode-browser": ^1.0.1 + "@smithy/util-defaults-mode-node": ^1.0.1 + "@smithy/util-retry": ^1.0.3 + "@smithy/util-utf8": ^1.0.1 tslib: ^2.5.0 - checksum: 6ecbb35aeaa928ca1c4a57e72d677eeba40bdbd97131e9b860ef658886840f07335593841117287fa62551ad9d2c655bb5abdb05909a46ff81ed8a2c6441f421 + checksum: e6797cac371b7da2b01885f0a4bcb81033af2246bb45ca6454d76b223ab23a824667479e9e7a77fe3d99164fb009a970ff6498d9d13ef57587ef1652f0f7f036 languageName: node linkType: hard -"@aws-sdk/client-sts@npm:3.345.0, @aws-sdk/client-sts@npm:^3.310.0": - version: 3.345.0 - resolution: "@aws-sdk/client-sts@npm:3.345.0" +"@aws-sdk/client-sts@npm:3.370.0, @aws-sdk/client-sts@npm:^3.350.0": + version: 3.370.0 + resolution: "@aws-sdk/client-sts@npm:3.370.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/config-resolver": 3.342.0 - "@aws-sdk/credential-provider-node": 3.345.0 - "@aws-sdk/fetch-http-handler": 3.342.0 - "@aws-sdk/hash-node": 3.344.0 - "@aws-sdk/invalid-dependency": 3.342.0 - "@aws-sdk/middleware-content-length": 3.342.0 - "@aws-sdk/middleware-endpoint": 3.344.0 - "@aws-sdk/middleware-host-header": 3.342.0 - "@aws-sdk/middleware-logger": 3.342.0 - "@aws-sdk/middleware-recursion-detection": 3.342.0 - "@aws-sdk/middleware-retry": 3.342.0 - "@aws-sdk/middleware-sdk-sts": 3.342.0 - "@aws-sdk/middleware-serde": 3.342.0 - "@aws-sdk/middleware-signing": 3.342.0 - "@aws-sdk/middleware-stack": 3.342.0 - "@aws-sdk/middleware-user-agent": 3.345.0 - "@aws-sdk/node-config-provider": 3.342.0 - "@aws-sdk/node-http-handler": 3.344.0 - "@aws-sdk/smithy-client": 3.342.0 - "@aws-sdk/types": 3.342.0 - "@aws-sdk/url-parser": 3.342.0 - "@aws-sdk/util-base64": 3.310.0 - "@aws-sdk/util-body-length-browser": 3.310.0 - "@aws-sdk/util-body-length-node": 3.310.0 - "@aws-sdk/util-defaults-mode-browser": 3.342.0 - "@aws-sdk/util-defaults-mode-node": 3.342.0 - "@aws-sdk/util-endpoints": 3.342.0 - "@aws-sdk/util-retry": 3.342.0 - "@aws-sdk/util-user-agent-browser": 3.345.0 - "@aws-sdk/util-user-agent-node": 3.345.0 - "@aws-sdk/util-utf8": 3.310.0 - "@smithy/protocol-http": ^1.0.1 - "@smithy/types": ^1.0.0 - fast-xml-parser: 4.1.2 + "@aws-sdk/credential-provider-node": 3.370.0 + "@aws-sdk/middleware-host-header": 3.370.0 + "@aws-sdk/middleware-logger": 3.370.0 + "@aws-sdk/middleware-recursion-detection": 3.370.0 + "@aws-sdk/middleware-sdk-sts": 3.370.0 + "@aws-sdk/middleware-signing": 3.370.0 + "@aws-sdk/middleware-user-agent": 3.370.0 + "@aws-sdk/types": 3.370.0 + "@aws-sdk/util-endpoints": 3.370.0 + "@aws-sdk/util-user-agent-browser": 3.370.0 + "@aws-sdk/util-user-agent-node": 3.370.0 + "@smithy/config-resolver": ^1.0.1 + "@smithy/fetch-http-handler": ^1.0.1 + "@smithy/hash-node": ^1.0.1 + "@smithy/invalid-dependency": ^1.0.1 + "@smithy/middleware-content-length": ^1.0.1 + "@smithy/middleware-endpoint": ^1.0.2 + "@smithy/middleware-retry": ^1.0.3 + "@smithy/middleware-serde": ^1.0.1 + "@smithy/middleware-stack": ^1.0.1 + "@smithy/node-config-provider": ^1.0.1 + "@smithy/node-http-handler": ^1.0.2 + "@smithy/protocol-http": ^1.1.0 + "@smithy/smithy-client": ^1.0.3 + "@smithy/types": ^1.1.0 + "@smithy/url-parser": ^1.0.1 + "@smithy/util-base64": ^1.0.1 + "@smithy/util-body-length-browser": ^1.0.1 + "@smithy/util-body-length-node": ^1.0.1 + "@smithy/util-defaults-mode-browser": ^1.0.1 + "@smithy/util-defaults-mode-node": ^1.0.1 + "@smithy/util-retry": ^1.0.3 + "@smithy/util-utf8": ^1.0.1 + fast-xml-parser: 4.2.5 tslib: ^2.5.0 - checksum: 46dd7929a56e6126f750cde095569375aa12fe321ce1d71ea9749e0de6878e45f983e6db141dc3d804745324b810ddc8a512ff1afa4d3c8cd6d00823bc9dd857 + checksum: 55ce8a7a8a8a44cffdbfca10ac2e4d389a4a13e81a4558ef401c3174727296c47375cec5898023e082285aaf5804d62f5d887da53e343f24aec8d8b5bc4ea29b languageName: node linkType: hard -"@aws-sdk/config-resolver@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/config-resolver@npm:3.342.0" +"@aws-sdk/credential-provider-cognito-identity@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.370.0" dependencies: - "@aws-sdk/types": 3.342.0 - "@aws-sdk/util-config-provider": 3.310.0 - "@aws-sdk/util-middleware": 3.342.0 + "@aws-sdk/client-cognito-identity": 3.370.0 + "@aws-sdk/types": 3.370.0 + "@smithy/property-provider": ^1.0.1 + "@smithy/types": ^1.1.0 tslib: ^2.5.0 - checksum: 61ac05c7e1999151b883280055655d59377675a1174c59c08d137f44d481facc0d7a2c612224f329b4fb97b8ff89636376ff03ab4d53b0cc44e0310134991e00 + checksum: 3ee862b115b3549bebeff65b6d02e26154f22dc2f9efde8e805c7305537a9cd4b9af7f3a8cb3f7f325c2ae211cb687ca4a9e345990c13319e4e3fad0b33f0503 languageName: node linkType: hard -"@aws-sdk/credential-provider-cognito-identity@npm:3.345.0": - version: 3.345.0 - resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.345.0" +"@aws-sdk/credential-provider-env@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/credential-provider-env@npm:3.370.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.345.0 - "@aws-sdk/property-provider": 3.342.0 - "@aws-sdk/types": 3.342.0 + "@aws-sdk/types": 3.370.0 + "@smithy/property-provider": ^1.0.1 + "@smithy/types": ^1.1.0 tslib: ^2.5.0 - checksum: 11ba057d43d1e36d0da8ca4281c381b5059e8c21a309ef4fb910ac44fa02cd8cdcde32a189b07aff7ddaaff1820be0c539010bd5a8644b339e3eda16e14f5a2f + checksum: 0295278ca333b8548c417d164569df737a5c587d7d39c35e9d0c9b55022a3d8caa3de04dd242135069cb3570cd9f52a2c1012fcaef4a13f49e91cec6aa0ed9b6 languageName: node linkType: hard -"@aws-sdk/credential-provider-env@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/credential-provider-env@npm:3.342.0" +"@aws-sdk/credential-provider-ini@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/credential-provider-ini@npm:3.370.0" dependencies: - "@aws-sdk/property-provider": 3.342.0 - "@aws-sdk/types": 3.342.0 + "@aws-sdk/credential-provider-env": 3.370.0 + "@aws-sdk/credential-provider-process": 3.370.0 + "@aws-sdk/credential-provider-sso": 3.370.0 + "@aws-sdk/credential-provider-web-identity": 3.370.0 + "@aws-sdk/types": 3.370.0 + "@smithy/credential-provider-imds": ^1.0.1 + "@smithy/property-provider": ^1.0.1 + "@smithy/shared-ini-file-loader": ^1.0.1 + "@smithy/types": ^1.1.0 tslib: ^2.5.0 - checksum: 086bde1f5388877e029ba381d44b342dccac2751e1de8a89db301d09f5e36c29bf7bffcb1e2cf66f3935077e22e061eeb35c0c62b587d1763cfdfebfe39e2392 + checksum: 8d8d0d386eb521047ac515fe8bb99faad0b5613dfd1e1824ebc0b427f68d420a68c97ba5b1b5e64a16e3edda3633d76d2f632acdf2c8b37ff39148c8e50c7200 languageName: node linkType: hard -"@aws-sdk/credential-provider-imds@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/credential-provider-imds@npm:3.342.0" +"@aws-sdk/credential-provider-node@npm:3.370.0, @aws-sdk/credential-provider-node@npm:^3.350.0": + version: 3.370.0 + resolution: "@aws-sdk/credential-provider-node@npm:3.370.0" dependencies: - "@aws-sdk/node-config-provider": 3.342.0 - "@aws-sdk/property-provider": 3.342.0 - "@aws-sdk/types": 3.342.0 - "@aws-sdk/url-parser": 3.342.0 + "@aws-sdk/credential-provider-env": 3.370.0 + "@aws-sdk/credential-provider-ini": 3.370.0 + "@aws-sdk/credential-provider-process": 3.370.0 + "@aws-sdk/credential-provider-sso": 3.370.0 + "@aws-sdk/credential-provider-web-identity": 3.370.0 + "@aws-sdk/types": 3.370.0 + "@smithy/credential-provider-imds": ^1.0.1 + "@smithy/property-provider": ^1.0.1 + "@smithy/shared-ini-file-loader": ^1.0.1 + "@smithy/types": ^1.1.0 tslib: ^2.5.0 - checksum: ea6341c9c1c98d164d1cf5f1643c701ef76fa0353659079046045e808964f7f0dfe911c827932ec72182b57781c3cfaaa970a2759657444c0a877b609e93c047 + checksum: 564422e77d791fcc307f2954ebf2e7a17273dff63812ed8528196f3f38163db726a71cc1c22d2e6de287727d3506764dab8c9c99de7fe3426d6cec0bf4d4f0ab languageName: node linkType: hard -"@aws-sdk/credential-provider-ini@npm:3.345.0": - version: 3.345.0 - resolution: "@aws-sdk/credential-provider-ini@npm:3.345.0" +"@aws-sdk/credential-provider-process@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/credential-provider-process@npm:3.370.0" dependencies: - "@aws-sdk/credential-provider-env": 3.342.0 - "@aws-sdk/credential-provider-imds": 3.342.0 - "@aws-sdk/credential-provider-process": 3.342.0 - "@aws-sdk/credential-provider-sso": 3.345.0 - "@aws-sdk/credential-provider-web-identity": 3.342.0 - "@aws-sdk/property-provider": 3.342.0 - "@aws-sdk/shared-ini-file-loader": 3.342.0 - "@aws-sdk/types": 3.342.0 + "@aws-sdk/types": 3.370.0 + "@smithy/property-provider": ^1.0.1 + "@smithy/shared-ini-file-loader": ^1.0.1 + "@smithy/types": ^1.1.0 tslib: ^2.5.0 - checksum: 126aa2ea79b3079802a5ce3b97b2ba24351c662fe0bf66c8f07f47463c88be27a63a76d79f95ab60e04eb74fab07fa11ecc7f3826085612ad663ef809bcbcfbf + checksum: 286080cfdb0a433a619cafb29316cc4259022de5369a5a2eefd638a8b025626eb730a6d676bdff4ef0fb905c44fe4a1d4c856f62318553f62b425eea406229de languageName: node linkType: hard -"@aws-sdk/credential-provider-node@npm:3.345.0, @aws-sdk/credential-provider-node@npm:^3.310.0": - version: 3.345.0 - resolution: "@aws-sdk/credential-provider-node@npm:3.345.0" +"@aws-sdk/credential-provider-sso@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/credential-provider-sso@npm:3.370.0" dependencies: - "@aws-sdk/credential-provider-env": 3.342.0 - "@aws-sdk/credential-provider-imds": 3.342.0 - "@aws-sdk/credential-provider-ini": 3.345.0 - "@aws-sdk/credential-provider-process": 3.342.0 - "@aws-sdk/credential-provider-sso": 3.345.0 - "@aws-sdk/credential-provider-web-identity": 3.342.0 - "@aws-sdk/property-provider": 3.342.0 - "@aws-sdk/shared-ini-file-loader": 3.342.0 - "@aws-sdk/types": 3.342.0 + "@aws-sdk/client-sso": 3.370.0 + "@aws-sdk/token-providers": 3.370.0 + "@aws-sdk/types": 3.370.0 + "@smithy/property-provider": ^1.0.1 + "@smithy/shared-ini-file-loader": ^1.0.1 + "@smithy/types": ^1.1.0 tslib: ^2.5.0 - checksum: b869e25f8559eb6476841aeb6d297fb6be360029bcbabc594edc2573b2afc1293dd1895d2f61a6995ee96fea5cd9770297d4bd40f7af252e7e277358116b431b + checksum: a5ef52fd213f567ba7aaa243bf4494a4df272522de4db952f0f9a0b1c148920fc49aff43321ec11b08ddd62e34c2686b0d50ae3a20c229e680d392b3c194b0f5 languageName: node linkType: hard -"@aws-sdk/credential-provider-process@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/credential-provider-process@npm:3.342.0" +"@aws-sdk/credential-provider-web-identity@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/credential-provider-web-identity@npm:3.370.0" dependencies: - "@aws-sdk/property-provider": 3.342.0 - "@aws-sdk/shared-ini-file-loader": 3.342.0 - "@aws-sdk/types": 3.342.0 + "@aws-sdk/types": 3.370.0 + "@smithy/property-provider": ^1.0.1 + "@smithy/types": ^1.1.0 tslib: ^2.5.0 - checksum: 87936656e9a838971b610ed811fc658ba0b8359f9a87b2d8a4a1f1d8efb47f46c6a5d44f57f282473c6eea3db36f24ce28fb862c6680f96987dfb8792347f7a7 + checksum: 3e9ce1c7749e60302f966a64635a11dece3da47ece8da6e4eae0c784bdf481bee48a0b1085014b11b812ee608fe99fb20548203bfa8d2f43f709b39b1a484f9b languageName: node linkType: hard -"@aws-sdk/credential-provider-sso@npm:3.345.0": - version: 3.345.0 - resolution: "@aws-sdk/credential-provider-sso@npm:3.345.0" +"@aws-sdk/credential-providers@npm:^3.350.0": + version: 3.370.0 + resolution: "@aws-sdk/credential-providers@npm:3.370.0" dependencies: - "@aws-sdk/client-sso": 3.345.0 - "@aws-sdk/property-provider": 3.342.0 - "@aws-sdk/shared-ini-file-loader": 3.342.0 - "@aws-sdk/token-providers": 3.345.0 - "@aws-sdk/types": 3.342.0 + "@aws-sdk/client-cognito-identity": 3.370.0 + "@aws-sdk/client-sso": 3.370.0 + "@aws-sdk/client-sts": 3.370.0 + "@aws-sdk/credential-provider-cognito-identity": 3.370.0 + "@aws-sdk/credential-provider-env": 3.370.0 + "@aws-sdk/credential-provider-ini": 3.370.0 + "@aws-sdk/credential-provider-node": 3.370.0 + "@aws-sdk/credential-provider-process": 3.370.0 + "@aws-sdk/credential-provider-sso": 3.370.0 + "@aws-sdk/credential-provider-web-identity": 3.370.0 + "@aws-sdk/types": 3.370.0 + "@smithy/credential-provider-imds": ^1.0.1 + "@smithy/property-provider": ^1.0.1 + "@smithy/types": ^1.1.0 tslib: ^2.5.0 - checksum: 0a7e42c44cb3b5da25c70c17ffbe532aa3edf0995692c137f1072c6cb247efa6557fac64913617a201b518fc57ac6a896240e1af9fa1aee1a63459c5ec5fafce + checksum: 7eb60bda6bb4fe22c487aa19469858ba593c49fdad9cc8c2447307cdfdd883fd87743a398007f62ddf7e354eff8dfa716ef614adaaee2712f1a9866f478c32de languageName: node linkType: hard -"@aws-sdk/credential-provider-web-identity@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/credential-provider-web-identity@npm:3.342.0" - dependencies: - "@aws-sdk/property-provider": 3.342.0 - "@aws-sdk/types": 3.342.0 - tslib: ^2.5.0 - checksum: 19de3af2ee63e9bf9ff88d60c7add38d65b91df043e92281b4ea3caf91184ae9e94d2c890c8a2e38650cfec2d9976d3b03b750e6b3003ea510ae8965e2701452 - languageName: node - linkType: hard - -"@aws-sdk/credential-providers@npm:^3.310.0": - version: 3.345.0 - resolution: "@aws-sdk/credential-providers@npm:3.345.0" - dependencies: - "@aws-sdk/client-cognito-identity": 3.345.0 - "@aws-sdk/client-sso": 3.345.0 - "@aws-sdk/client-sts": 3.345.0 - "@aws-sdk/credential-provider-cognito-identity": 3.345.0 - "@aws-sdk/credential-provider-env": 3.342.0 - "@aws-sdk/credential-provider-imds": 3.342.0 - "@aws-sdk/credential-provider-ini": 3.345.0 - "@aws-sdk/credential-provider-node": 3.345.0 - "@aws-sdk/credential-provider-process": 3.342.0 - "@aws-sdk/credential-provider-sso": 3.345.0 - "@aws-sdk/credential-provider-web-identity": 3.342.0 - "@aws-sdk/property-provider": 3.342.0 - "@aws-sdk/types": 3.342.0 - tslib: ^2.5.0 - checksum: 7b9860d2a374216601e1195db3ae51c44f17c9d1329afb84d2090e3180c61c4f2fe5d56e21168357cd10b48b410ab48441d8fac97b9a899b043715d652f47cf6 - languageName: node - linkType: hard - -"@aws-sdk/eventstream-codec@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/eventstream-codec@npm:3.342.0" +"@aws-sdk/eventstream-codec@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/eventstream-codec@npm:3.370.0" dependencies: "@aws-crypto/crc32": 3.0.0 - "@aws-sdk/types": 3.342.0 + "@aws-sdk/types": 3.370.0 "@aws-sdk/util-hex-encoding": 3.310.0 tslib: ^2.5.0 - checksum: 2922d430c6de801e584ff86bc8ee96eb055dbd2509b786c695c8e2f6029e5969d23ab6f815526a81460cbef9b8bf83ed70977855bbfba374e8daaf3043c88431 + checksum: 0366991b92e3801798b0145021e185ac87b559aaef447e086f0964164ff71983afa6575ddc2e94ca7d7ceb307e2f16ec376f97fdccfdbc29a93330fffa43e386 languageName: node linkType: hard -"@aws-sdk/eventstream-serde-browser@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/eventstream-serde-browser@npm:3.342.0" - dependencies: - "@aws-sdk/eventstream-serde-universal": 3.342.0 - "@aws-sdk/types": 3.342.0 - tslib: ^2.5.0 - checksum: 47ded9d3674207946a611ee3f12f7173386ede8d1e60537b1a4782a491ac782e3251fed0096465d307ed0e9597c9d6ace3a7a709b485cd1af8b47abaadfa8006 - languageName: node - linkType: hard - -"@aws-sdk/eventstream-serde-config-resolver@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/eventstream-serde-config-resolver@npm:3.342.0" - dependencies: - "@aws-sdk/types": 3.342.0 - tslib: ^2.5.0 - checksum: c7bac1de5aeedae2393d43d63b87865b9b25b25f56bdd0aeb081490da01b4aa8caecc36a1ded6205b811a8986d7b5a3dd9858eab808c4ccf0f37552d32fffb83 - languageName: node - linkType: hard - -"@aws-sdk/eventstream-serde-node@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/eventstream-serde-node@npm:3.342.0" - dependencies: - "@aws-sdk/eventstream-serde-universal": 3.342.0 - "@aws-sdk/types": 3.342.0 - tslib: ^2.5.0 - checksum: 32683ca9a1aaf531bcd27d94f4d5e80d4955dfe426c9d71d60f0a03fdd5ffebd07c44bb4eb5bf1c4302b270abe37c0e8f361aadf77c67ff50b9eac4eef020f70 - languageName: node - linkType: hard - -"@aws-sdk/eventstream-serde-universal@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/eventstream-serde-universal@npm:3.342.0" - dependencies: - "@aws-sdk/eventstream-codec": 3.342.0 - "@aws-sdk/types": 3.342.0 - tslib: ^2.5.0 - checksum: c7a53aacf39596a98882488d547eb65fd7e40ac56b68f5a2eb0db8a08437c44ad98c75929a2c477b0a26e5ac4ebf3d1bfd712cf31f9d6f379dc00ef2738afe74 - languageName: node - linkType: hard - -"@aws-sdk/fetch-http-handler@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/fetch-http-handler@npm:3.342.0" - dependencies: - "@aws-sdk/protocol-http": 3.342.0 - "@aws-sdk/querystring-builder": 3.342.0 - "@aws-sdk/types": 3.342.0 - "@aws-sdk/util-base64": 3.310.0 - tslib: ^2.5.0 - checksum: da02fd9ff17e5fefaee3f2a070e13ad105b7bdd194a9e591299b04af556da01024dc8da2c41ef84be0435b68e8f32d88dd67b175c322983d3ed6b1ee5a2b8231 - languageName: node - linkType: hard - -"@aws-sdk/hash-blob-browser@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/hash-blob-browser@npm:3.342.0" +"@aws-sdk/hash-blob-browser@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/hash-blob-browser@npm:3.370.0" dependencies: "@aws-sdk/chunked-blob-reader": 3.310.0 - "@aws-sdk/types": 3.342.0 + "@aws-sdk/chunked-blob-reader-native": 3.310.0 + "@aws-sdk/types": 3.370.0 tslib: ^2.5.0 - checksum: ebc4e8773e90a8fcf23e04661c91bdcb32b8c05a570ec8572858b9540d8898490401f20b9611a6e8a1c6e520bea499c212874f31810b494b4c348883c93be2cb + checksum: 51d24225d299c238032aa6e29cf2c13b876231cf8fef40dcf9ef1ea05b1fb873cf7de76eba13ce63b2324e156c85e2795ba0e66abc2570745b9ec92586185f4b languageName: node linkType: hard -"@aws-sdk/hash-node@npm:3.344.0": - version: 3.344.0 - resolution: "@aws-sdk/hash-node@npm:3.344.0" +"@aws-sdk/hash-stream-node@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/hash-stream-node@npm:3.370.0" dependencies: - "@aws-sdk/types": 3.342.0 - "@aws-sdk/util-buffer-from": 3.310.0 + "@aws-sdk/types": 3.370.0 "@aws-sdk/util-utf8": 3.310.0 tslib: ^2.5.0 - checksum: 361d96625d39c43a5c1873e4a549014eaeed56a2c1d3c4fa46047610cba9542252f4df5760f802ac268f29fbe1c863d70dbd298b5d0c0ed2dff26073adff9b8f - languageName: node - linkType: hard - -"@aws-sdk/hash-stream-node@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/hash-stream-node@npm:3.342.0" - dependencies: - "@aws-sdk/types": 3.342.0 - "@aws-sdk/util-utf8": 3.310.0 - tslib: ^2.5.0 - checksum: 812a1c3987219af25073e8cc6bd304b85ea84e170e14b3dcc63c04b2b0b9c35c4b15c6c1194b67872cf113b3307a691d1c27583d0b457717c3abcb22e3c29c5d - languageName: node - linkType: hard - -"@aws-sdk/invalid-dependency@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/invalid-dependency@npm:3.342.0" - dependencies: - "@aws-sdk/types": 3.342.0 - tslib: ^2.5.0 - checksum: 58694fa950beae12bc780687d4dc43bf93bf5764f89c02935fb143d47532ebf8102da854f27aae767399fe507ca76513c625c05cb181935e0579fb35641e2f65 + checksum: 97add2caadb15f5b6cbc551801dc672ba6e3664667c9be53c794cca9a1be827df932ac40148bae0e7586b6f7bebb2483257501d3c9e946dd1ba7fbb31a29de33 languageName: node linkType: hard @@ -1184,401 +1127,332 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/lib-storage@npm:^3.310.0": - version: 3.345.0 - resolution: "@aws-sdk/lib-storage@npm:3.345.0" +"@aws-sdk/lib-storage@npm:^3.350.0": + version: 3.370.0 + resolution: "@aws-sdk/lib-storage@npm:3.370.0" dependencies: - "@aws-sdk/middleware-endpoint": 3.344.0 - "@aws-sdk/smithy-client": 3.342.0 + "@smithy/abort-controller": ^1.0.1 + "@smithy/middleware-endpoint": ^1.0.2 + "@smithy/smithy-client": ^1.0.3 buffer: 5.6.0 events: 3.3.0 stream-browserify: 3.0.0 tslib: ^2.5.0 peerDependencies: - "@aws-sdk/abort-controller": ^3.0.0 "@aws-sdk/client-s3": ^3.0.0 - checksum: 1bece781ac04a3f7e12a0b1831d645f9077416f526dea47f93ca3997d997d154c79951392d2e56006823dd70e99b6d996548a51153d4d506ac33d6937b088791 + checksum: a45fc04b33ad462b8d9ca8f0233c10b49eb91ace24cf8a53a359d96b6266a4eef2bc713bbbacb4799703c339756a9d39cb17bfaa44f607aa99df22c688c0748b languageName: node linkType: hard -"@aws-sdk/md5-js@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/md5-js@npm:3.342.0" +"@aws-sdk/md5-js@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/md5-js@npm:3.370.0" dependencies: - "@aws-sdk/types": 3.342.0 + "@aws-sdk/types": 3.370.0 "@aws-sdk/util-utf8": 3.310.0 tslib: ^2.5.0 - checksum: 750dcbac2ce6cb4ec0dc05bf6ee5827b79fea14e64f2826cd20421c1b9460e7d9afe7bf7c7ac48e7b9478d2be00138f5e9127a5f1e9fba398e488318efcd4e10 + checksum: 1a0ae6590d3b860ea380e1299dc6debc533ab39a055aa204c1be08cbdead0e5eaac8ac8deb1b9332f00d7177d874b73ba03de5dcf012b2b4cd5ad96ae36bd7b5 languageName: node linkType: hard -"@aws-sdk/middleware-bucket-endpoint@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/middleware-bucket-endpoint@npm:3.342.0" +"@aws-sdk/middleware-bucket-endpoint@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/middleware-bucket-endpoint@npm:3.370.0" dependencies: - "@aws-sdk/protocol-http": 3.342.0 - "@aws-sdk/types": 3.342.0 + "@aws-sdk/types": 3.370.0 "@aws-sdk/util-arn-parser": 3.310.0 - "@aws-sdk/util-config-provider": 3.310.0 + "@smithy/protocol-http": ^1.1.0 + "@smithy/types": ^1.1.0 + "@smithy/util-config-provider": ^1.0.1 tslib: ^2.5.0 - checksum: b3d436234049b38af9e0215354787e5262cd5337ef6e4dccd4363fe040b7be82720717270f0803ff3832b0af24abba547df1c1c83e572e8ac82270561d09527a + checksum: b8ed893397dec1dc5373b9920d70ddb30ba8a3651aa45805b9a47cafacff98d65927dfe754e9f5fcdc0c8d8d4ef7f171bc9fa4968d248d71429d61c2d822e493 languageName: node linkType: hard -"@aws-sdk/middleware-content-length@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/middleware-content-length@npm:3.342.0" +"@aws-sdk/middleware-endpoint@npm:^3.347.0": + version: 3.370.0 + resolution: "@aws-sdk/middleware-endpoint@npm:3.370.0" dependencies: - "@aws-sdk/protocol-http": 3.342.0 - "@aws-sdk/types": 3.342.0 + "@aws-sdk/middleware-serde": 3.370.0 + "@aws-sdk/types": 3.370.0 + "@aws-sdk/url-parser": 3.370.0 + "@aws-sdk/util-middleware": 3.370.0 tslib: ^2.5.0 - checksum: 397d211c6497b104457702581b3c8b29afd8dfbc6b07ca49f6c6d57375cb389cfa2c0675af447e635b81843f51382aa550882175d07a8c8c0bf707be7c125b59 + checksum: 32fd90f9874bf19b2c57753d41134a1394cec4c956b878256070902d195db4273d157fe51ca9429f3c77a621789c43e51a4e27a01bbe6dce2b8fdfbf2ea91b43 languageName: node linkType: hard -"@aws-sdk/middleware-endpoint@npm:3.344.0, @aws-sdk/middleware-endpoint@npm:^3.310.0": - version: 3.344.0 - resolution: "@aws-sdk/middleware-endpoint@npm:3.344.0" +"@aws-sdk/middleware-expect-continue@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/middleware-expect-continue@npm:3.370.0" dependencies: - "@aws-sdk/middleware-serde": 3.342.0 - "@aws-sdk/types": 3.342.0 - "@aws-sdk/url-parser": 3.342.0 - "@aws-sdk/util-middleware": 3.342.0 + "@aws-sdk/types": 3.370.0 + "@smithy/protocol-http": ^1.1.0 + "@smithy/types": ^1.1.0 tslib: ^2.5.0 - checksum: 74c8b14104ce6283214d7bb5ce83dc95ccf3e9aec627cb13ee58237d85717d3ed84bffb1d97ba8510e9b154486007cde14a18b0b04592b29ffe4ca19bbcbb46f + checksum: 5524c43c62a371875eff73304600213dbf296ad18879f5d9462b7199e4cd01cdbb87b8d2cf0c4f412ef3cfd95a51cc722c9b87f58ff91fd6daeb5ffc1d0082e4 languageName: node linkType: hard -"@aws-sdk/middleware-expect-continue@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/middleware-expect-continue@npm:3.342.0" - dependencies: - "@aws-sdk/protocol-http": 3.342.0 - "@aws-sdk/types": 3.342.0 - tslib: ^2.5.0 - checksum: aaca4517e61c87775079f7eb673c9474ecd426ca0cbcb8bf891a560518f363de91d0f9ede352d59ec1b1644a789db7a13d79c9ace6e848fc7fc365456dc53309 - languageName: node - linkType: hard - -"@aws-sdk/middleware-flexible-checksums@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/middleware-flexible-checksums@npm:3.342.0" +"@aws-sdk/middleware-flexible-checksums@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/middleware-flexible-checksums@npm:3.370.0" dependencies: "@aws-crypto/crc32": 3.0.0 "@aws-crypto/crc32c": 3.0.0 - "@aws-sdk/is-array-buffer": 3.310.0 - "@aws-sdk/protocol-http": 3.342.0 - "@aws-sdk/types": 3.342.0 - "@aws-sdk/util-utf8": 3.310.0 + "@aws-sdk/types": 3.370.0 + "@smithy/is-array-buffer": ^1.0.1 + "@smithy/protocol-http": ^1.1.0 + "@smithy/types": ^1.1.0 + "@smithy/util-utf8": ^1.0.1 tslib: ^2.5.0 - checksum: 31c6a3a01a64420765af3bb5b94f7b096412ad01b746a77b2391dafe9482e2d0b88d01d10be9f4103449c872ddf7411c29434956970112641b0c9fe0227087bc + checksum: b8af3c7beda3baa8290735f98f97476108304fb96d522fb27a0d449d4e82262c0cc66d59f36688067ad073714653cf88050a73acfa5d6ba5f3e90f645778bced languageName: node linkType: hard -"@aws-sdk/middleware-host-header@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/middleware-host-header@npm:3.342.0" +"@aws-sdk/middleware-host-header@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/middleware-host-header@npm:3.370.0" dependencies: - "@aws-sdk/protocol-http": 3.342.0 - "@aws-sdk/types": 3.342.0 + "@aws-sdk/types": 3.370.0 + "@smithy/protocol-http": ^1.1.0 + "@smithy/types": ^1.1.0 tslib: ^2.5.0 - checksum: eb26b492a2674baabedd96b5ce8152f5f0dab901931b5ae4ef15ad53e59d6967f58c68afe7e7ac53b183d818cc1b5640fd27e7b74b5ecbf7377783d18a35317b + checksum: 2a7d3f3a0ab75d3c09a9cecc3e545706df2ba561851cde0992a41d00bad2695e5d5f29ff388037a11fb52770b3b9b2a98166cab5c4d1a2fa438ecea32e14604b languageName: node linkType: hard -"@aws-sdk/middleware-location-constraint@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/middleware-location-constraint@npm:3.342.0" +"@aws-sdk/middleware-location-constraint@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/middleware-location-constraint@npm:3.370.0" dependencies: - "@aws-sdk/types": 3.342.0 + "@aws-sdk/types": 3.370.0 + "@smithy/types": ^1.1.0 tslib: ^2.5.0 - checksum: 7fea65c01b47c7c4b971a6446a1d439d0d914aa160b61ca8aba1ff7ad244d487056a7fd022b9d9a06722d225ef69f08b1994f9ddf9d5eb20f7f66515db5ca040 + checksum: d3156144dd2bdba620a164d139e6466f79261ec2ad93c7014200d1e7fea21d0aedfcec83e69cf31ce806c42aca4ae07155245901e71d8273ec02f1fd6b75032a languageName: node linkType: hard -"@aws-sdk/middleware-logger@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/middleware-logger@npm:3.342.0" +"@aws-sdk/middleware-logger@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/middleware-logger@npm:3.370.0" dependencies: - "@aws-sdk/types": 3.342.0 + "@aws-sdk/types": 3.370.0 + "@smithy/types": ^1.1.0 tslib: ^2.5.0 - checksum: bada09358137c161d781021336ea988d423f8db067c1eea2942ed7664fdb9ce852a9ee17d3da63a4f3678ff27e789996110848e7043963b771e78505f5cb693e + checksum: f3c4062247d2a0064f82e412f027c2cd950d512d9e4a14d603a925ae97cd527e304439e854fb0b2de1f84b429ace317edaa09a8ee9319efec8df47aa3abbb65b languageName: node linkType: hard -"@aws-sdk/middleware-recursion-detection@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/middleware-recursion-detection@npm:3.342.0" +"@aws-sdk/middleware-recursion-detection@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/middleware-recursion-detection@npm:3.370.0" dependencies: - "@aws-sdk/protocol-http": 3.342.0 - "@aws-sdk/types": 3.342.0 + "@aws-sdk/types": 3.370.0 + "@smithy/protocol-http": ^1.1.0 + "@smithy/types": ^1.1.0 tslib: ^2.5.0 - checksum: 4871056c3a8e3c9de17f59f946bfdcad85a5ee9f16cf96914fc0dfe6e2aa9e850e688dc4cfcb908eee0afe9591b6092b3dfb7d3bc3c1fac25f6cd4c6c83ac4d3 + checksum: ee259519548171ef3381f9bd48568d8052a7980cfe1a8070d72b44af0522a55baa0e440db5c1460123dc48fb217251a31aea236beda7220af60ebbe2375c96a0 languageName: node linkType: hard -"@aws-sdk/middleware-retry@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/middleware-retry@npm:3.342.0" +"@aws-sdk/middleware-sdk-s3@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/middleware-sdk-s3@npm:3.370.0" dependencies: - "@aws-sdk/protocol-http": 3.342.0 - "@aws-sdk/service-error-classification": 3.342.0 - "@aws-sdk/types": 3.342.0 - "@aws-sdk/util-middleware": 3.342.0 - "@aws-sdk/util-retry": 3.342.0 - tslib: ^2.5.0 - uuid: ^8.3.2 - checksum: 066268ccab655680b75865c8c47beb19f269d5b3bc14d85c4f6c53af9a4fac50f9b7c2f7bc0ca93fcb4b3f9bbb5d14b89c21bf855504e90b9a86cd370d4f8e0b - languageName: node - linkType: hard - -"@aws-sdk/middleware-sdk-s3@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/middleware-sdk-s3@npm:3.342.0" - dependencies: - "@aws-sdk/protocol-http": 3.342.0 - "@aws-sdk/types": 3.342.0 + "@aws-sdk/types": 3.370.0 "@aws-sdk/util-arn-parser": 3.310.0 + "@smithy/protocol-http": ^1.1.0 + "@smithy/types": ^1.1.0 tslib: ^2.5.0 - checksum: 5bf9789bc3e745ac754829d1e0dc6bb6fef7659cacfa38d41bd97df2b5357dbc5429defdb32e6b7fe0e27bc75ed9f04ebb1e42045b5a77e7f132f923d8287ccb + checksum: 23da26ca2df37b33c8201aec5cfa86f888abe9b14a23a6815d648d964efa5d99e38b036ecf8adac818ad1db8097da2f345c78d7c7fe6dcc323e5043e38d8cd24 languageName: node linkType: hard -"@aws-sdk/middleware-sdk-sqs@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/middleware-sdk-sqs@npm:3.342.0" +"@aws-sdk/middleware-sdk-sqs@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/middleware-sdk-sqs@npm:3.370.0" dependencies: - "@aws-sdk/types": 3.342.0 - "@aws-sdk/util-hex-encoding": 3.310.0 - "@aws-sdk/util-utf8": 3.310.0 + "@aws-sdk/types": 3.370.0 + "@smithy/types": ^1.1.0 + "@smithy/util-hex-encoding": ^1.0.1 + "@smithy/util-utf8": ^1.0.1 tslib: ^2.5.0 - checksum: 450d44dd0b66da4137a7c2cf96c0a5de88c40b0dd8281cddc90d7ea42ee54c8690243ae95584273de1c5d591149ca0f34c4da575467b01c85479395c3f7fa9cd + checksum: 980c38781355f4481251bf88692926d1c819c4cf59cf76bca8ea6d4dbea4677034c8c6c84f0435f218ae5c289a2450aa048cc6861b4552a2a0e0ae1f81f806bc languageName: node linkType: hard -"@aws-sdk/middleware-sdk-sts@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/middleware-sdk-sts@npm:3.342.0" +"@aws-sdk/middleware-sdk-sts@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/middleware-sdk-sts@npm:3.370.0" dependencies: - "@aws-sdk/middleware-signing": 3.342.0 - "@aws-sdk/types": 3.342.0 + "@aws-sdk/middleware-signing": 3.370.0 + "@aws-sdk/types": 3.370.0 + "@smithy/types": ^1.1.0 tslib: ^2.5.0 - checksum: 404e122a0d2d9ed6530a57fbd576f9085781bf57476cafd57ef048a49120cb7bcc24849d5337c5b7578f3bf1ba1825cb6282bdf13545e12dac26611b841f67a0 + checksum: 14877966d56518895d55b30af45ff695b835ced56e46986b3aea12b3f8df953741a18ad24fcd567eae7a4b0c4c501fe4c0a20c01d6604d0e67c2be6435b15037 languageName: node linkType: hard -"@aws-sdk/middleware-serde@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/middleware-serde@npm:3.342.0" +"@aws-sdk/middleware-serde@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/middleware-serde@npm:3.370.0" dependencies: - "@aws-sdk/types": 3.342.0 + "@aws-sdk/types": 3.370.0 tslib: ^2.5.0 - checksum: 10bff04ba1e31b9a7da311bd509459ad6a45f78aca817c0c436f9b2cde1f5f439a1f089d29cb741141815b9a0bee8a680efa25d5a9e900a079a415acf3cd8602 + checksum: 2552c9967d249bf79a16aa95d4465ac32121defc0a5d24abdc06acc71503a633976378c3b6dfedf2dd31ce5afe00536902c6c1b476f3187b5404a057b67741f7 languageName: node linkType: hard -"@aws-sdk/middleware-signing@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/middleware-signing@npm:3.342.0" +"@aws-sdk/middleware-signing@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/middleware-signing@npm:3.370.0" dependencies: - "@aws-sdk/property-provider": 3.342.0 - "@aws-sdk/protocol-http": 3.342.0 - "@aws-sdk/signature-v4": 3.342.0 - "@aws-sdk/types": 3.342.0 - "@aws-sdk/util-middleware": 3.342.0 + "@aws-sdk/types": 3.370.0 + "@smithy/property-provider": ^1.0.1 + "@smithy/protocol-http": ^1.1.0 + "@smithy/signature-v4": ^1.0.1 + "@smithy/types": ^1.1.0 + "@smithy/util-middleware": ^1.0.1 tslib: ^2.5.0 - checksum: d07d718331d63732a4ad55bf580eb20375622f86fe05db3eecc874936e754c16a681951c00d206c30e9a4af84dd31805a72de55d0c67fe80b859c91d192342d5 + checksum: f8581ad377a8eea2345b2881adfe0c4fc35a9825ca0b55facbac5f89e088acd8e231d87ae632dd249df71f8b0113046b7cdd8a0b82c69195faf799813da14e91 languageName: node linkType: hard -"@aws-sdk/middleware-ssec@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/middleware-ssec@npm:3.342.0" +"@aws-sdk/middleware-ssec@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/middleware-ssec@npm:3.370.0" dependencies: - "@aws-sdk/types": 3.342.0 + "@aws-sdk/types": 3.370.0 + "@smithy/types": ^1.1.0 tslib: ^2.5.0 - checksum: 4c85be245737ee4f36b609bb9ba6add5d0c53238694e1772a4a05abebe3f6db5b853230021d8ce592c824c1dc23b84c06d2dd70b32d1ebf9cb17dbc059f5b368 + checksum: a5714a7b1d0d54976dc507a30f872a50d7eb0dfa11fc8f37dec16f4e69ea8ae53d4eb9722a05cfb5b8a34c6f5ac26c4e30555349122a60f67ac2d4f95b711aea languageName: node linkType: hard -"@aws-sdk/middleware-stack@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/middleware-stack@npm:3.342.0" +"@aws-sdk/middleware-user-agent@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/middleware-user-agent@npm:3.370.0" dependencies: + "@aws-sdk/types": 3.370.0 + "@aws-sdk/util-endpoints": 3.370.0 + "@smithy/protocol-http": ^1.1.0 + "@smithy/types": ^1.1.0 tslib: ^2.5.0 - checksum: 8cd077f7e60f9ceb57eba0f0766e5784ced7bb959dfeebb4491a948006052da1d1a99a98795146a80424b00f3f6874f85bdb94419a1e1d510227f739886f90a2 + checksum: c4366db10a7eece54c9f5429352329e7ea31c91a2c05b5b484304fb2e69f07d297e04c387c22ddc11759945e2adc97e6541302391ad8faa5a3aae8e6a1605589 languageName: node linkType: hard -"@aws-sdk/middleware-user-agent@npm:3.345.0": - version: 3.345.0 - resolution: "@aws-sdk/middleware-user-agent@npm:3.345.0" +"@aws-sdk/node-http-handler@npm:3.370.0, @aws-sdk/node-http-handler@npm:^3.350.0": + version: 3.370.0 + resolution: "@aws-sdk/node-http-handler@npm:3.370.0" dependencies: - "@aws-sdk/protocol-http": 3.342.0 - "@aws-sdk/types": 3.342.0 - "@aws-sdk/util-endpoints": 3.342.0 + "@aws-sdk/abort-controller": 3.370.0 + "@aws-sdk/protocol-http": 3.370.0 + "@aws-sdk/querystring-builder": 3.370.0 + "@aws-sdk/types": 3.370.0 tslib: ^2.5.0 - checksum: c2e057bbf31e6365d351dbfb007dbaebda8fc5fb5194e1314b32e474c103b09756eb5fdcbd15f5eb6a9e6e80a19a16136ad4111d63685430f93039ff6edab76a + checksum: 1f2cf7fcb6201233549fbf174dfdb9b6aaeba27c8195bb587a6be33b8f5ed35ad371a432548de67800c3d8679d50655c78af54612d83676e6b38c216bd5946a7 languageName: node linkType: hard -"@aws-sdk/node-config-provider@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/node-config-provider@npm:3.342.0" +"@aws-sdk/protocol-http@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/protocol-http@npm:3.370.0" dependencies: - "@aws-sdk/property-provider": 3.342.0 - "@aws-sdk/shared-ini-file-loader": 3.342.0 - "@aws-sdk/types": 3.342.0 + "@aws-sdk/types": 3.370.0 tslib: ^2.5.0 - checksum: b52f42d898e42683493fbda9a50437529bbfbc46d0b12deddbdd0976f05a278a9303de2abe01573c86cf423d37b88881097c7c543c695ab5495e58be99119bfa + checksum: e93601c45a81d636ae9aee31daab46b7211e11fce9d90d1a821d32e37f19392a72d13c25846f4d619449822ac1721c7fd69c07cbc3cd5a83997163d1fff349f6 languageName: node linkType: hard -"@aws-sdk/node-http-handler@npm:3.344.0, @aws-sdk/node-http-handler@npm:^3.310.0": - version: 3.344.0 - resolution: "@aws-sdk/node-http-handler@npm:3.344.0" +"@aws-sdk/querystring-builder@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/querystring-builder@npm:3.370.0" dependencies: - "@aws-sdk/abort-controller": 3.342.0 - "@aws-sdk/protocol-http": 3.342.0 - "@aws-sdk/querystring-builder": 3.342.0 - "@aws-sdk/types": 3.342.0 - tslib: ^2.5.0 - checksum: 268ad90f1adfd20a33b61542b1c7c03528dee4dd9eaa07e42120c5c6e2e165c8e9b05e2356410600d5ef62d1e316885d13de81b0c257eb5500a82903abe05a69 - languageName: node - linkType: hard - -"@aws-sdk/property-provider@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/property-provider@npm:3.342.0" - dependencies: - "@aws-sdk/types": 3.342.0 - tslib: ^2.5.0 - checksum: 22a1d5f1883627e431e0523650877447ad8ebe57e39d1e798ee7870f7dcc0fe8013b958621b30373b5362326e3eafc00716eefe4f42b0d8f435968698d1694d6 - languageName: node - linkType: hard - -"@aws-sdk/protocol-http@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/protocol-http@npm:3.342.0" - dependencies: - "@aws-sdk/types": 3.342.0 - tslib: ^2.5.0 - checksum: f6910fa4880780d224cb5f78eb501cbc900a51b33be4727e734f2ea63e3bbdc7d581bf53e77ba3fa3a569055ba261750d0623e5c95b5ad510d11b4959166b00d - languageName: node - linkType: hard - -"@aws-sdk/querystring-builder@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/querystring-builder@npm:3.342.0" - dependencies: - "@aws-sdk/types": 3.342.0 + "@aws-sdk/types": 3.370.0 "@aws-sdk/util-uri-escape": 3.310.0 tslib: ^2.5.0 - checksum: 801e5b4230024fa08244b78b96a96df62f1bbe681b3e3eb4694d4fa21bf59e732547d63a1636cc14cc5feb5e8d854497acea15cd826cbe68ea89abc6933f84fa + checksum: 0e107fb06d9f9f69c184805a8f74f29105ba2112b7374d7b9309c6c510edba928d3f5559944b7fd5a842422e1911c9e570e65012122ec36b4ef4fba47d34a655 languageName: node linkType: hard -"@aws-sdk/querystring-parser@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/querystring-parser@npm:3.342.0" +"@aws-sdk/querystring-parser@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/querystring-parser@npm:3.370.0" dependencies: - "@aws-sdk/types": 3.342.0 + "@aws-sdk/types": 3.370.0 tslib: ^2.5.0 - checksum: 248b5b855eed52957cf3d2113ce57205723ecf1f378d211c79eb6209e68d8c4994c537bc4ff40695496f69b5337359d8de63825978e7570aa2e9cc76222c9e95 + checksum: 73c2bc5da7eb670ea693e6d0475efc926c7997ce7f3da035c7f77539d1d4dc3129c64122345d781ed0ffd3b0458a9034288fbb84e478182d1f1be2011417d4f9 languageName: node linkType: hard -"@aws-sdk/service-error-classification@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/service-error-classification@npm:3.342.0" - checksum: c7cf32ac7eb745db8e54ce1cd66618b10e321f814e406944b46692ea3b76778e43a90c9c9febfaed05049a426526e0820385d71d9868f227e23cb1dc5c719b48 - languageName: node - linkType: hard - -"@aws-sdk/shared-ini-file-loader@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/shared-ini-file-loader@npm:3.342.0" +"@aws-sdk/signature-v4-multi-region@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/signature-v4-multi-region@npm:3.370.0" dependencies: - "@aws-sdk/types": 3.342.0 - tslib: ^2.5.0 - checksum: 252c1f2f75a7bc2c135e8a1da5d6cf27353a5fdc5d57b9440b0546cece3b27d498621d07a100e741ff2037df9423e8cd9225f65bb89537da9cb01bb4711a4cb9 - languageName: node - linkType: hard - -"@aws-sdk/signature-v4-multi-region@npm:3.344.0": - version: 3.344.0 - resolution: "@aws-sdk/signature-v4-multi-region@npm:3.344.0" - dependencies: - "@aws-sdk/protocol-http": 3.342.0 - "@aws-sdk/signature-v4": 3.342.0 - "@aws-sdk/types": 3.342.0 + "@aws-sdk/types": 3.370.0 + "@smithy/protocol-http": ^1.1.0 + "@smithy/signature-v4": ^1.0.1 + "@smithy/types": ^1.1.0 tslib: ^2.5.0 peerDependencies: "@aws-sdk/signature-v4-crt": ^3.118.0 peerDependenciesMeta: "@aws-sdk/signature-v4-crt": optional: true - checksum: d8adf704643bd50a99f6f812e989677152b6d8ae4f39ecae959b0cd9446fdb06f10911ea8fd30793743af4c3f642f3986b122c206ff016de2a009da8c3b466fd + checksum: 0c8ce6a70edbe8fac38e613b8e2df84baf7bfa17c9f585b9434cbdad1d7132e538a4127ea27be5071ccec7ca2ad056962e346f390e58cf349271087fa960939c languageName: node linkType: hard -"@aws-sdk/signature-v4@npm:3.342.0, @aws-sdk/signature-v4@npm:^3.310.0": - version: 3.342.0 - resolution: "@aws-sdk/signature-v4@npm:3.342.0" +"@aws-sdk/signature-v4@npm:^3.347.0": + version: 3.370.0 + resolution: "@aws-sdk/signature-v4@npm:3.370.0" dependencies: - "@aws-sdk/eventstream-codec": 3.342.0 + "@aws-sdk/eventstream-codec": 3.370.0 "@aws-sdk/is-array-buffer": 3.310.0 - "@aws-sdk/types": 3.342.0 + "@aws-sdk/types": 3.370.0 "@aws-sdk/util-hex-encoding": 3.310.0 - "@aws-sdk/util-middleware": 3.342.0 + "@aws-sdk/util-middleware": 3.370.0 "@aws-sdk/util-uri-escape": 3.310.0 "@aws-sdk/util-utf8": 3.310.0 tslib: ^2.5.0 - checksum: ab251dc6ad546beb1129abbd9dfdf8637da82cf54e14dd7cff9e026d62a428d511065a36604609963a028c2a04140d4c96746e3d3da50a441f0baf5d431a7fa8 + checksum: 3652cca13da1c60b80d98274a49feaf30feee0f85908b4a89e0d262532904286fafa6f515a455348e20f6f9a2efbcdcd20ee3a704b892eb01d2fcfd784af8bc7 languageName: node linkType: hard -"@aws-sdk/smithy-client@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/smithy-client@npm:3.342.0" +"@aws-sdk/token-providers@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/token-providers@npm:3.370.0" dependencies: - "@aws-sdk/middleware-stack": 3.342.0 - "@aws-sdk/types": 3.342.0 + "@aws-sdk/client-sso-oidc": 3.370.0 + "@aws-sdk/types": 3.370.0 + "@smithy/property-provider": ^1.0.1 + "@smithy/shared-ini-file-loader": ^1.0.1 + "@smithy/types": ^1.1.0 tslib: ^2.5.0 - checksum: af79f4ec9bce5cda76154839f5f2ce24268cc4ec8f496aa5b9a8ff632f88675dc7015363cd57b397691df4de417cc05d706cf7b0c6ae02c686d42e95f204133d + checksum: 7126c5bdc86d8a0cefbf92649927747928fd1af76ca943ec8e9c558d99c7550535b694149601c16b096ff429178e7bea51ac2ffc121a24637ddc8b03976759ed languageName: node linkType: hard -"@aws-sdk/token-providers@npm:3.345.0": - version: 3.345.0 - resolution: "@aws-sdk/token-providers@npm:3.345.0" +"@aws-sdk/types@npm:3.370.0, @aws-sdk/types@npm:^3.222.0, @aws-sdk/types@npm:^3.347.0": + version: 3.370.0 + resolution: "@aws-sdk/types@npm:3.370.0" dependencies: - "@aws-sdk/client-sso-oidc": 3.345.0 - "@aws-sdk/property-provider": 3.342.0 - "@aws-sdk/shared-ini-file-loader": 3.342.0 - "@aws-sdk/types": 3.342.0 + "@smithy/types": ^1.1.0 tslib: ^2.5.0 - checksum: d9d7d446cdec152e60087e1bac5f123ccb8555b1f4802ed10a522f60eaa716785882fa650fe67ac24bcb153eba2c104a19784b2b4408541ba6e9cfe5e68a5d83 + checksum: 105a5768f20075035c2250de69f782ea4219c9ed8cd426c9ab57605616c8b1d534764d3c5b29e9715eb68a0e3f99b27ed463c410a3d728abf3c4ad59347e9f4e languageName: node linkType: hard -"@aws-sdk/types@npm:3.342.0, @aws-sdk/types@npm:^3.222.0, @aws-sdk/types@npm:^3.310.0": - version: 3.342.0 - resolution: "@aws-sdk/types@npm:3.342.0" +"@aws-sdk/url-parser@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/url-parser@npm:3.370.0" dependencies: + "@aws-sdk/querystring-parser": 3.370.0 + "@aws-sdk/types": 3.370.0 tslib: ^2.5.0 - checksum: c9ec0873304548696deb604fcc4fcdacb726c9e03a65cdb4e9d8643a24ddf83ea32aa9d85b801406670526ca210131d5a8842d3674c73757c03ca5329ed2d13a - languageName: node - linkType: hard - -"@aws-sdk/url-parser@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/url-parser@npm:3.342.0" - dependencies: - "@aws-sdk/querystring-parser": 3.342.0 - "@aws-sdk/types": 3.342.0 - tslib: ^2.5.0 - checksum: d5c1b23cc3f110ac2acc47c7777911d362bf674ba5226b82b8f8c73c25e45bc56ad5060169821af88890d8d9cc02963d0af0e7574f9a283fc6987f7f8672f7bf + checksum: 99f6e34bca913f579fa93b048a7eb8db2ad33b61457577901f6725c04e2147a0daeb754d824e334021efc3fabcd0677d11a091cd26b339b092e9d8b91bdbf450 languageName: node linkType: hard @@ -1601,24 +1475,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-body-length-browser@npm:3.310.0": - version: 3.310.0 - resolution: "@aws-sdk/util-body-length-browser@npm:3.310.0" - dependencies: - tslib: ^2.5.0 - checksum: c26136521ccbb59ba83ff29d6e52cb0e4b443b68e830c9dab578556539973573e6892093e5dea39101b1517c28b5d53c80ee38b9a01f9fa9fcd75f3aa5689857 - languageName: node - linkType: hard - -"@aws-sdk/util-body-length-node@npm:3.310.0": - version: 3.310.0 - resolution: "@aws-sdk/util-body-length-node@npm:3.310.0" - dependencies: - tslib: ^2.5.0 - checksum: 202417ece7078f09f63c4119cb3ab5f321688ea893125f7d97985e8bf7fc61419d8d990f870d9ead3281dc51334975196ef98c50592eca1f9785472bd39b870d - languageName: node - linkType: hard - "@aws-sdk/util-buffer-from@npm:3.310.0": version: 3.310.0 resolution: "@aws-sdk/util-buffer-from@npm:3.310.0" @@ -1629,48 +1485,13 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-config-provider@npm:3.310.0": - version: 3.310.0 - resolution: "@aws-sdk/util-config-provider@npm:3.310.0" +"@aws-sdk/util-endpoints@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/util-endpoints@npm:3.370.0" dependencies: + "@aws-sdk/types": 3.370.0 tslib: ^2.5.0 - checksum: 958efc58ee492111ad746fe6224b25286da415f8aca1197c742bca063672b858d437d2d6b4df5f90ba770e1af9339b3fb1ffa9cc87f2fa993a7177057eb22caf - languageName: node - linkType: hard - -"@aws-sdk/util-defaults-mode-browser@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/util-defaults-mode-browser@npm:3.342.0" - dependencies: - "@aws-sdk/property-provider": 3.342.0 - "@aws-sdk/types": 3.342.0 - bowser: ^2.11.0 - tslib: ^2.5.0 - checksum: 96ff9723313dd331679e311f2e534914e4348b9729c19dce666c766e19a847eaea293d55bfbbda00c42eef127a5816aa6501cc4882be49c24470ab0285e3bff1 - languageName: node - linkType: hard - -"@aws-sdk/util-defaults-mode-node@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/util-defaults-mode-node@npm:3.342.0" - dependencies: - "@aws-sdk/config-resolver": 3.342.0 - "@aws-sdk/credential-provider-imds": 3.342.0 - "@aws-sdk/node-config-provider": 3.342.0 - "@aws-sdk/property-provider": 3.342.0 - "@aws-sdk/types": 3.342.0 - tslib: ^2.5.0 - checksum: b255d8039e56b6ad4264bc2615a995804e3cf565ee36876f05491fbd795f5e0c3c4af3bd7e42c00d08cc68311694e60942a363fa2db6a4228447827d9f36455a - languageName: node - linkType: hard - -"@aws-sdk/util-endpoints@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/util-endpoints@npm:3.342.0" - dependencies: - "@aws-sdk/types": 3.342.0 - tslib: ^2.5.0 - checksum: eb9443651d620ff6fd13b2e2cd7cf85f9e40672d385e12d63502bc903e5cd1e6887142d6ca4e2f9fd56cc07cbf1777bf0a356a0dc62143104bbe35352add7003 + checksum: d351ad2fdc92bec16d0d925dbcfc3f38baed12a7984d70bf02ee2dfe4c3fd1a85f53e515f9751f31d1345fe0bdebd62be7cd08e405a31354db92312f0cc6282c languageName: node linkType: hard @@ -1692,48 +1513,24 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-middleware@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/util-middleware@npm:3.342.0" +"@aws-sdk/util-middleware@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/util-middleware@npm:3.370.0" dependencies: tslib: ^2.5.0 - checksum: b668e04eff6e54b3d2e1f410d1b18244fc1aecb9c6d231f95971c6798393c5a00e139cbd30da08f82226af9ea96addb3a8d96a2612e2e338975495d03c100426 + checksum: a39565cf6e99e7d5ee883af75dd01168822acb8679ec0b1fea5ac99301b1c9a2dc8bde9da11a6780dd3a7681a15e408166b4407e8c6617706d9c53bc191783f2 languageName: node linkType: hard -"@aws-sdk/util-retry@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/util-retry@npm:3.342.0" +"@aws-sdk/util-stream-node@npm:^3.350.0": + version: 3.370.0 + resolution: "@aws-sdk/util-stream-node@npm:3.370.0" dependencies: - "@aws-sdk/service-error-classification": 3.342.0 - tslib: ^2.5.0 - checksum: 89f730fcf8dce43e6d426fd2d00b48eca1d8935ecc2ee7f07cc93d18cff82bc50a29f6ff536b2f570ed604f4df3044e53e82d84a5cdf37f08ccc0e43e4c9ff87 - languageName: node - linkType: hard - -"@aws-sdk/util-stream-browser@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/util-stream-browser@npm:3.342.0" - dependencies: - "@aws-sdk/fetch-http-handler": 3.342.0 - "@aws-sdk/types": 3.342.0 - "@aws-sdk/util-base64": 3.310.0 - "@aws-sdk/util-hex-encoding": 3.310.0 - "@aws-sdk/util-utf8": 3.310.0 - tslib: ^2.5.0 - checksum: 5d6e6cda660001c82abcddc002a164db79ae69da92d6d7b94ad57a09a2147c32d21deb59973e4bad787a2faca831fd0e2f58f4f619e4e953a591ee7c02dafe44 - languageName: node - linkType: hard - -"@aws-sdk/util-stream-node@npm:3.344.0, @aws-sdk/util-stream-node@npm:^3.310.0": - version: 3.344.0 - resolution: "@aws-sdk/util-stream-node@npm:3.344.0" - dependencies: - "@aws-sdk/node-http-handler": 3.344.0 - "@aws-sdk/types": 3.342.0 + "@aws-sdk/node-http-handler": 3.370.0 + "@aws-sdk/types": 3.370.0 "@aws-sdk/util-buffer-from": 3.310.0 tslib: ^2.5.0 - checksum: 9cdfcf50742078d22c7ba52e09e6ce4d1b41610be5658a1154dcf04ca020583596d5a6525025d639a08e83531580e54ad9de3a0e4b03d3eb43aca6fc18a1d440 + checksum: a9e709f06d9de662c42bf4743f9eb2dd1519e934f137c975efcc93ecb32d0e9f1221e55eccc9d3aa90f67a31c0a84ef3ea1393c6a86b5048de61ba439700d2a1 languageName: node linkType: hard @@ -1746,30 +1543,32 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-user-agent-browser@npm:3.345.0": - version: 3.345.0 - resolution: "@aws-sdk/util-user-agent-browser@npm:3.345.0" +"@aws-sdk/util-user-agent-browser@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/util-user-agent-browser@npm:3.370.0" dependencies: - "@aws-sdk/types": 3.342.0 + "@aws-sdk/types": 3.370.0 + "@smithy/types": ^1.1.0 bowser: ^2.11.0 tslib: ^2.5.0 - checksum: fcab0d5789aea04ec6f5d2ecdb09ab976de7404e3ed9c0fc553caf098bb823c1c969b1215e15f65f8ad545722334b9e5b172670d817e412e053d96d7a0859cb7 + checksum: 3a549b1337490aaeacc21c3bff0e7459f51e764c6c9a69aafeb7950f54e118d2eeb64b652afb97e2f0aa6777df1e65fced2b96bfcdd98aacc753acfce7847b59 languageName: node linkType: hard -"@aws-sdk/util-user-agent-node@npm:3.345.0": - version: 3.345.0 - resolution: "@aws-sdk/util-user-agent-node@npm:3.345.0" +"@aws-sdk/util-user-agent-node@npm:3.370.0": + version: 3.370.0 + resolution: "@aws-sdk/util-user-agent-node@npm:3.370.0" dependencies: - "@aws-sdk/node-config-provider": 3.342.0 - "@aws-sdk/types": 3.342.0 + "@aws-sdk/types": 3.370.0 + "@smithy/node-config-provider": ^1.0.1 + "@smithy/types": ^1.1.0 tslib: ^2.5.0 peerDependencies: aws-crt: ">=1.0.0" peerDependenciesMeta: aws-crt: optional: true - checksum: d4b24bed46b40a92a54b48d5b67f55e3573d4dcaf1908c99fd26c72515a910f45259dd4811605a45733b78a7eba49b950766622a3407cc40bba31ba2817319d2 + checksum: 83b1f2c7f25f44b6bd3aed8e7b9fe3a68e077f3b8b3832648a38eb5985b95d0e5ac469242e1d21aa37e29a6c8b4f9cb2a1d60ea1b6e4a76c32225e58f98da504 languageName: node linkType: hard @@ -1792,17 +1591,6 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-waiter@npm:3.342.0": - version: 3.342.0 - resolution: "@aws-sdk/util-waiter@npm:3.342.0" - dependencies: - "@aws-sdk/abort-controller": 3.342.0 - "@aws-sdk/types": 3.342.0 - tslib: ^2.5.0 - checksum: b3f5f3747ffb8bd8323cf57043ec8ed8a2633257deb8113ff9da1cd882a61770ef1d7066e14cfd577c6e83d9de3f24188ab7eb140be951c76260cba05d5bbe70 - languageName: node - linkType: hard - "@aws-sdk/xml-builder@npm:3.310.0": version: 3.310.0 resolution: "@aws-sdk/xml-builder@npm:3.310.0" @@ -1963,33 +1751,9 @@ __metadata: languageName: node linkType: hard -"@azure/identity@npm:^2.0.4, @azure/identity@npm:^2.1.0": - version: 2.1.0 - resolution: "@azure/identity@npm:2.1.0" - dependencies: - "@azure/abort-controller": ^1.0.0 - "@azure/core-auth": ^1.3.0 - "@azure/core-client": ^1.4.0 - "@azure/core-rest-pipeline": ^1.1.0 - "@azure/core-tracing": ^1.0.0 - "@azure/core-util": ^1.0.0 - "@azure/logger": ^1.0.0 - "@azure/msal-browser": ^2.26.0 - "@azure/msal-common": ^7.0.0 - "@azure/msal-node": ^1.10.0 - events: ^3.0.0 - jws: ^4.0.0 - open: ^8.0.0 - stoppable: ^1.1.0 - tslib: ^2.2.0 - uuid: ^8.3.0 - checksum: 1f29f1fd46c51f226da06e6e70f113d50f5ef0dd163e2ba1b8bc35cadcf98ccd829bff3d2bf4d90641c369e5d6b74b344f17abec10f2ae9469a74aeb9415d6d4 - languageName: node - linkType: hard - "@azure/identity@npm:^3.2.1": - version: 3.2.2 - resolution: "@azure/identity@npm:3.2.2" + version: 3.2.3 + resolution: "@azure/identity@npm:3.2.3" dependencies: "@azure/abort-controller": ^1.0.0 "@azure/core-auth": ^1.3.0 @@ -1998,16 +1762,16 @@ __metadata: "@azure/core-tracing": ^1.0.0 "@azure/core-util": ^1.0.0 "@azure/logger": ^1.0.0 - "@azure/msal-browser": ^2.32.2 - "@azure/msal-common": ^9.0.2 - "@azure/msal-node": ^1.14.6 + "@azure/msal-browser": ^2.37.1 + "@azure/msal-common": ^13.1.0 + "@azure/msal-node": ^1.17.3 events: ^3.0.0 jws: ^4.0.0 open: ^8.0.0 stoppable: ^1.1.0 tslib: ^2.2.0 uuid: ^8.3.0 - checksum: cbedd293ed6360d98c87148686a1be3a38aad3eaeadcaa7d73e79469904aac2f949a1be67e868d3fd295e749a24ad91bc389ddb82d8574dd173c0583767ec6bf + checksum: 8f74831a358f41490056fb1978d9214542f5e7a788cc607ded3c475e1e61784da2cb6409434cb736c66291c24b755dbab42ec7b93b218ca535dce3363183c64b languageName: node linkType: hard @@ -2048,44 +1812,30 @@ __metadata: languageName: node linkType: hard -"@azure/msal-browser@npm:^2.26.0, @azure/msal-browser@npm:^2.32.2": - version: 2.37.0 - resolution: "@azure/msal-browser@npm:2.37.0" +"@azure/msal-browser@npm:^2.37.1": + version: 2.37.1 + resolution: "@azure/msal-browser@npm:2.37.1" dependencies: - "@azure/msal-common": 13.0.0 - checksum: e57d04517d51db4b608da6ca127c89e5c134b42743b00e95d8f1aae011d1cc6d5c02fb4f72cd0f96636e500a3eeee7c4884cd537ac8796bbd50f0ff9ac983b4e + "@azure/msal-common": 13.1.0 + checksum: 920b892bcdbc10f5e736e87363cb5964e48e8dcaf20f777f634308a5bc25550a7b02f62e826c1e3b50212e47e14435f9c3a4f72befc955392f0c4327e62518d0 languageName: node linkType: hard -"@azure/msal-common@npm:13.0.0": - version: 13.0.0 - resolution: "@azure/msal-common@npm:13.0.0" - checksum: 89f56f9fbf0edffa6023d46c6970dd37a9ad571b7d2952fdef41950ec2f3b4b3fd22d9841e2caaf52619ad97ab415ed22c30797cdb896f459eb665d3d97f778a +"@azure/msal-common@npm:13.1.0, @azure/msal-common@npm:^13.1.0": + version: 13.1.0 + resolution: "@azure/msal-common@npm:13.1.0" + checksum: db21145f824f02f63a10fa7e1a356445e0c9e945bb1685a964416f1788a89fca165302d990cdfffb7e794b92dac1c90e4934ed018e92056682f863b0eec82587 languageName: node linkType: hard -"@azure/msal-common@npm:^7.0.0": - version: 7.1.0 - resolution: "@azure/msal-common@npm:7.1.0" - checksum: 761a8b9363c7b620d831aba7d7e7a66e341685e306034b027b57dc31dae11abdf86c3187c08fc8008448c845ffdcbbc42c767c75355625cf87aba25ba7e2832e - languageName: node - linkType: hard - -"@azure/msal-common@npm:^9.0.2": - version: 9.0.2 - resolution: "@azure/msal-common@npm:9.0.2" - checksum: 5a44d23b1d0f80d3e2221d157c1bd48bdfd19f5a4ac2fc58c73c52ffd25868c1760ea27ad0408931e07f552adc19764757bf91f7bec59258d9d931274df15657 - languageName: node - linkType: hard - -"@azure/msal-node@npm:^1.10.0, @azure/msal-node@npm:^1.14.6": - version: 1.17.2 - resolution: "@azure/msal-node@npm:1.17.2" +"@azure/msal-node@npm:^1.17.3": + version: 1.17.3 + resolution: "@azure/msal-node@npm:1.17.3" dependencies: - "@azure/msal-common": 13.0.0 + "@azure/msal-common": 13.1.0 jsonwebtoken: ^9.0.0 uuid: ^8.3.0 - checksum: 5ac809dae6b02ab7de2aafb85733501ba6c3268f1d9371bc857215dad9d47e4f6e10b3e58ebda49504b375c96934761e9734acc241d3bc34d3b4cdeaabdf102e + checksum: 6afc815116196e481dd7f2c142b9935dce1fa2b225c87c5e3615d83ecc00e4ff65295f512a9b03349a71c8cf19d6c25e0551dd33a55a4550f77dfa98ccbbc0fd languageName: node linkType: hard @@ -3502,13 +3252,13 @@ __metadata: languageName: node linkType: hard -"@babel/runtime-corejs3@npm:^7.18.9, @babel/runtime-corejs3@npm:^7.20.13, @babel/runtime-corejs3@npm:^7.20.7": - version: 7.21.0 - resolution: "@babel/runtime-corejs3@npm:7.21.0" +"@babel/runtime-corejs3@npm:^7.20.13, @babel/runtime-corejs3@npm:^7.20.7, @babel/runtime-corejs3@npm:^7.22.5": + version: 7.22.5 + resolution: "@babel/runtime-corejs3@npm:7.22.5" dependencies: - core-js-pure: ^3.25.1 + core-js-pure: ^3.30.2 regenerator-runtime: ^0.13.11 - checksum: a47927671672b1e1644771458f804e03802303eeffcafd55f85cb121d3d3ca33032cc2fe68e086e3de6923049343d0aa599fc3eb3ad5749e30646e2a2ef6f11d + checksum: cdeabaa6858cedb0ec47c1245195a09a8fd2de06f4545614acb574d150a81d0e27eb9c08d69787b2c1ad4a1fc57919a3f0599f60d14914227c200563cd595503 languageName: node linkType: hard @@ -3636,11 +3386,11 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/backend-common@workspace:packages/backend-common" dependencies: - "@aws-sdk/abort-controller": ^3.310.0 - "@aws-sdk/client-s3": ^3.310.0 - "@aws-sdk/credential-providers": ^3.310.0 - "@aws-sdk/types": ^3.310.0 - "@aws-sdk/util-stream-node": ^3.310.0 + "@aws-sdk/abort-controller": ^3.347.0 + "@aws-sdk/client-s3": ^3.350.0 + "@aws-sdk/credential-providers": ^3.350.0 + "@aws-sdk/types": ^3.347.0 + "@aws-sdk/util-stream-node": ^3.350.0 "@backstage/backend-app-api": "workspace:^" "@backstage/backend-dev-utils": "workspace:^" "@backstage/backend-plugin-api": "workspace:^" @@ -3682,7 +3432,6 @@ __metadata: "@types/yauzl": ^2.10.0 archiver: ^5.0.2 aws-sdk-client-mock: ^2.0.0 - aws-sdk-mock: ^5.2.1 base64-stream: ^1.0.0 better-sqlite3: ^8.0.0 compression: ^1.7.4 @@ -3755,12 +3504,16 @@ __metadata: resolution: "@backstage/backend-openapi-utils@workspace:packages/backend-openapi-utils" dependencies: "@backstage/cli": "workspace:^" + "@backstage/errors": "workspace:^" "@types/express": ^4.17.6 "@types/express-serve-static-core": ^4.17.5 express: ^4.17.1 + express-openapi-validator: ^5.0.4 express-promise-router: ^4.1.0 json-schema-to-ts: ^2.6.2 + lodash: ^4.17.21 openapi3-ts: ^3.1.2 + supertest: ^6.1.3 languageName: unknown linkType: soft @@ -3827,18 +3580,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/catalog-client@npm:^1.4.1": - version: 1.4.1 - resolution: "@backstage/catalog-client@npm:1.4.1" - dependencies: - "@backstage/catalog-model": ^1.3.0 - "@backstage/errors": ^1.1.5 - cross-fetch: ^3.1.5 - checksum: 21d6ae8191f97c80b8f75b0a8b9b1d7a0255c865f0c8e08b5bb72492a1cca4769bb1d9766d0c6307910cc1dd41c14abd02307f626772de14e4ebda23b5773465 - languageName: node - linkType: hard - -"@backstage/catalog-client@workspace:^, @backstage/catalog-client@workspace:packages/catalog-client": +"@backstage/catalog-client@^1.4.3, @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: @@ -3850,22 +3592,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/catalog-model@npm:^1.1.5, @backstage/catalog-model@npm:^1.3.0": - version: 1.3.0 - resolution: "@backstage/catalog-model@npm:1.3.0" - dependencies: - "@backstage/config": ^1.0.7 - "@backstage/errors": ^1.1.5 - "@backstage/types": ^1.0.2 - ajv: ^8.10.0 - json-schema: ^0.4.0 - lodash: ^4.17.21 - uuid: ^8.0.0 - checksum: 728cc73f0e68453eba15db7fb54c6a3c44cb4a511fb65542302b285e5e8d6385332d27c681af5352bb31659e08b7f0899635ea9800a49c288707fc03031c7234 - languageName: node - linkType: hard - -"@backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model": +"@backstage/catalog-model@^1.1.5, @backstage/catalog-model@^1.4.0, @backstage/catalog-model@^1.4.1, @backstage/catalog-model@workspace:^, @backstage/catalog-model@workspace:packages/catalog-model": version: 0.0.0-use.local resolution: "@backstage/catalog-model@workspace:packages/catalog-model" dependencies: @@ -3904,7 +3631,7 @@ __metadata: "@yarnpkg/parsers": ^3.0.0-rc.4 fs-extra: 10.1.0 mock-fs: ^5.2.0 - semver: ^7.3.2 + semver: ^7.5.3 zod: ^3.21.4 languageName: unknown linkType: soft @@ -3981,11 +3708,12 @@ __metadata: chalk: ^4.0.0 chokidar: ^3.3.1 commander: ^9.1.0 + cross-fetch: ^3.1.5 cross-spawn: ^7.0.3 css-loader: ^6.5.1 del: ^7.0.0 diff: ^5.0.0 - esbuild: ^0.17.0 + esbuild: ^0.18.0 esbuild-loader: ^2.18.0 eslint: ^8.6.0 eslint-config-prettier: ^8.3.0 @@ -4033,7 +3761,7 @@ __metadata: rollup-plugin-postcss: ^4.0.0 rollup-pluginutils: ^2.8.2 run-script-webpack-plugin: ^0.1.0 - semver: ^7.3.2 + semver: ^7.5.3 style-loader: ^3.3.1 sucrase: ^3.20.2 swc-loader: ^0.2.3 @@ -4069,7 +3797,7 @@ __metadata: "@types/node": ^16.11.26 chalk: ^4.0.0 commander: ^9.1.0 - jscodeshift: ^0.14.0 + jscodeshift: ^0.15.0 jscodeshift-add-imports: ^1.0.10 ts-node: ^10.0.0 bin: @@ -4110,7 +3838,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/config@^1.0.6, @backstage/config@^1.0.7, @backstage/config@workspace:^, @backstage/config@workspace:packages/config": +"@backstage/config@^1.0.6, @backstage/config@^1.0.7, @backstage/config@^1.0.8, @backstage/config@workspace:^, @backstage/config@workspace:packages/config": version: 0.0.0-use.local resolution: "@backstage/config@workspace:packages/config" dependencies: @@ -4141,7 +3869,6 @@ __metadata: "@types/prop-types": ^15.7.3 "@types/react": ^16.13.1 || ^17.0.0 "@types/zen-observable": ^0.8.0 - cross-fetch: ^3.1.5 history: ^5.0.0 msw: ^1.0.0 prop-types: ^15.7.2 @@ -4209,14 +3936,14 @@ __metadata: languageName: node linkType: hard -"@backstage/core-components@npm:^0.13.0, @backstage/core-components@npm:^0.13.1": - version: 0.13.1 - resolution: "@backstage/core-components@npm:0.13.1" +"@backstage/core-components@npm:^0.13.2, @backstage/core-components@npm:^0.13.3": + version: 0.13.3 + resolution: "@backstage/core-components@npm:0.13.3" dependencies: - "@backstage/config": ^1.0.7 - "@backstage/core-plugin-api": ^1.5.1 - "@backstage/errors": ^1.1.5 - "@backstage/theme": ^0.3.0 + "@backstage/config": ^1.0.8 + "@backstage/core-plugin-api": ^1.5.3 + "@backstage/errors": ^1.2.1 + "@backstage/theme": ^0.4.1 "@backstage/version-bridge": ^1.0.4 "@date-io/core": ^1.3.13 "@material-table/core": ^3.1.0 @@ -4241,7 +3968,7 @@ __metadata: pluralize: ^8.0.0 prop-types: ^15.7.2 qs: ^6.9.4 - rc-progress: 3.4.1 + rc-progress: 3.4.2 react-helmet: 6.1.0 react-hook-form: ^7.12.2 react-markdown: ^8.0.0 @@ -4258,7 +3985,7 @@ __metadata: 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: 9b1b40edb51ab4de6018d0fe063386b0e3f1b56b0427c98421cd5ccaffa790ccd9a5f70d36f6ebf5ce381a1b34ae4df5ffeef38c9074800fe38c352bd173003a + checksum: ef1010b048697c051654d52a88f0e22d2a82bad33bb14c0ee5e11e86930ccfca71dc0cf0946440cc92e439d4b3a97281fbe6e1c1f78553dbd03f1118e2c2ad6a languageName: node linkType: hard @@ -4303,7 +4030,6 @@ __metadata: "@types/zen-observable": ^0.8.0 ansi-regex: ^6.0.1 classnames: ^2.2.6 - cross-fetch: ^3.1.5 d3-selection: ^3.0.0 d3-shape: ^3.0.0 d3-zoom: ^3.0.0 @@ -4317,7 +4043,7 @@ __metadata: pluralize: ^8.0.0 prop-types: ^15.7.2 qs: ^6.9.4 - rc-progress: 3.4.1 + rc-progress: 3.4.2 react-helmet: 6.1.0 react-hook-form: ^7.12.2 react-markdown: ^8.0.0 @@ -4337,26 +4063,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-plugin-api@npm:^1.3.0, @backstage/core-plugin-api@npm:^1.5.0, @backstage/core-plugin-api@npm:^1.5.1": - version: 1.5.1 - resolution: "@backstage/core-plugin-api@npm:1.5.1" - dependencies: - "@backstage/config": ^1.0.7 - "@backstage/types": ^1.0.2 - "@backstage/version-bridge": ^1.0.4 - "@types/react": ^16.13.1 || ^17.0.0 - history: ^5.0.0 - prop-types: ^15.7.2 - 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: 59d75c906040ddd436135ab8a281792aec5cf5432f573b1273dba9c0b8b6f35861a899e17cc62417fe596d46903fc5807e632e49c5a8e43d866c639d71c0b86c - languageName: node - linkType: hard - -"@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.2, @backstage/core-plugin-api@^1.5.3, @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: @@ -4375,7 +4082,6 @@ __metadata: "@types/prop-types": ^15.7.3 "@types/react": ^16.13.1 || ^17.0.0 "@types/zen-observable": ^0.8.0 - cross-fetch: ^3.1.5 history: ^5.0.0 msw: ^1.0.0 prop-types: ^15.7.2 @@ -4444,18 +4150,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/errors@npm:^1.1.5": - version: 1.1.5 - resolution: "@backstage/errors@npm:1.1.5" - dependencies: - "@backstage/types": ^1.0.2 - cross-fetch: ^3.1.5 - serialize-error: ^8.0.1 - checksum: fb8cc933345511454f31d899fed113cb28ab90ad0fbfaf5fd12d1e1204a0c52cd45bdc897feae70cc90ce0fa6cd331542036f2a4cb82ee0c935c3d0a687d6ee0 - languageName: node - linkType: hard - -"@backstage/errors@workspace:^, @backstage/errors@workspace:packages/errors": +"@backstage/errors@^1.1.5, @backstage/errors@^1.2.1, @backstage/errors@workspace:^, @backstage/errors@workspace:packages/errors": version: 0.0.0-use.local resolution: "@backstage/errors@workspace:packages/errors" dependencies: @@ -4481,10 +4176,10 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/integration-aws-node@workspace:packages/integration-aws-node" dependencies: - "@aws-sdk/client-sts": ^3.310.0 - "@aws-sdk/credential-provider-node": ^3.310.0 - "@aws-sdk/credential-providers": ^3.310.0 - "@aws-sdk/types": ^3.310.0 + "@aws-sdk/client-sts": ^3.350.0 + "@aws-sdk/credential-provider-node": ^3.350.0 + "@aws-sdk/credential-providers": ^3.350.0 + "@aws-sdk/types": ^3.347.0 "@aws-sdk/util-arn-parser": ^3.310.0 "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" @@ -4496,15 +4191,15 @@ __metadata: languageName: unknown linkType: soft -"@backstage/integration-react@npm:^1.1.12": - version: 1.1.13 - resolution: "@backstage/integration-react@npm:1.1.13" +"@backstage/integration-react@npm:^1.1.15": + version: 1.1.15 + resolution: "@backstage/integration-react@npm:1.1.15" dependencies: - "@backstage/config": ^1.0.7 - "@backstage/core-components": ^0.13.1 - "@backstage/core-plugin-api": ^1.5.1 - "@backstage/integration": ^1.4.5 - "@backstage/theme": ^0.3.0 + "@backstage/config": ^1.0.8 + "@backstage/core-components": ^0.13.3 + "@backstage/core-plugin-api": ^1.5.3 + "@backstage/integration": ^1.5.1 + "@backstage/theme": ^0.4.1 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 @@ -4513,7 +4208,7 @@ __metadata: 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: 72cf0a87699a3a47a518eba0f86ea7980caa946498814ceb71dfed4c5f67ab47dd763289ab3090c1c50b427e368522c9495c4c6d3ffca9296ea4f48d59d40bdb + checksum: 3fed97a63e3bc4c5faf128373def1b31d62952f088ae19feb7ee1c68aa5092215ab047b66cb4b38caa022a26370eac244fb2b6ddb47ba896e2c3fce06873f575 languageName: node linkType: hard @@ -4538,7 +4233,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 msw: ^1.0.0 react-use: ^17.2.4 peerDependencies: @@ -4548,23 +4242,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/integration@npm:^1.4.5": - version: 1.4.5 - resolution: "@backstage/integration@npm:1.4.5" - 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: 71e7c5d884ae36a7dc8592dea7dd2e8140f3761ff1c499da2b97a8fbee39ff25012021f0097bbedb728b34b4339a0719086f13f0afd6c5992042081f7733d22c - languageName: node - linkType: hard - -"@backstage/integration@workspace:^, @backstage/integration@workspace:packages/integration": +"@backstage/integration@^1.5.1, @backstage/integration@workspace:^, @backstage/integration@workspace:packages/integration": version: 0.0.0-use.local resolution: "@backstage/integration@workspace:packages/integration" dependencies: @@ -4589,6 +4267,7 @@ __metadata: resolution: "@backstage/plugin-adr-backend@workspace:plugins/adr-backend" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/catalog-client": "workspace:^" "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" @@ -4621,6 +4300,7 @@ __metadata: "@backstage/integration": "workspace:^" "@backstage/plugin-search-common": "workspace:^" front-matter: ^4.0.2 + luxon: ^3.0.0 languageName: unknown linkType: soft @@ -4669,6 +4349,7 @@ __metadata: resolution: "@backstage/plugin-airbrake-backend@workspace:plugins/airbrake-backend" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@types/express": "*" @@ -4706,7 +4387,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 msw: ^1.0.0 react-use: ^17.2.4 peerDependencies: @@ -4738,7 +4418,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 msw: ^1.0.0 react-use: ^17.2.4 peerDependencies: @@ -4767,7 +4446,6 @@ __metadata: "@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 @@ -4799,7 +4477,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 msw: ^1.0.0 prop-types: ^15.7.2 react-ga: ^3.3.0 @@ -4811,6 +4488,29 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-analytics-module-newrelic-browser@workspace:plugins/analytics-module-newrelic-browser": + version: 0.0.0-use.local + resolution: "@backstage/plugin-analytics-module-newrelic-browser@workspace:plugins/analytics-module-newrelic-browser" + 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:^" + "@newrelic/browser-agent": ^1.236.0 + "@testing-library/jest-dom": ^5.10.1 + "@testing-library/react": ^12.1.3 + "@testing-library/user-event": ^14.0.0 + "@types/node": "*" + msw: ^1.0.0 + react-use: ^17.2.4 + peerDependencies: + react: ^16.13.1 || ^17.0.0 + languageName: unknown + linkType: soft + "@backstage/plugin-apache-airflow@workspace:^, @backstage/plugin-apache-airflow@workspace:plugins/apache-airflow": version: 0.0.0-use.local resolution: "@backstage/plugin-apache-airflow@workspace:plugins/apache-airflow" @@ -4860,7 +4560,7 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-api-docs@workspace:plugins/api-docs" dependencies: - "@asyncapi/react-component": 1.0.0-next.47 + "@asyncapi/react-component": 1.0.0-next.48 "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/core-app-api": "workspace:^" @@ -4880,7 +4580,7 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 - "@types/swagger-ui-react": ^4.1.1 + "@types/swagger-ui-react": ^4.18.0 cross-fetch: ^3.1.5 graphiql: ^1.8.8 graphql: ^16.0.0 @@ -4888,7 +4588,7 @@ __metadata: isomorphic-form-data: ^2.0.0 msw: ^1.0.0 react-use: ^17.2.4 - swagger-ui-react: ^4.11.1 + swagger-ui-react: ^5.0.0 peerDependencies: react: ^16.13.1 || ^17.0.0 react-dom: ^16.13.1 || ^17.0.0 @@ -4916,7 +4616,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": "*" "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 msw: ^1.0.0 react-use: ^17.2.4 use-deep-compare-effect: ^1.8.1 @@ -5048,6 +4747,7 @@ __metadata: resolution: "@backstage/plugin-azure-devops-backend@workspace:plugins/azure-devops-backend" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/plugin-azure-devops-common": "workspace:^" @@ -5097,7 +4797,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 humanize-duration: ^3.27.0 luxon: ^3.0.0 msw: ^1.0.0 @@ -5115,7 +4814,7 @@ __metadata: dependencies: "@azure/arm-appservice": ^13.0.1 "@azure/arm-resourcegraph": ^4.2.1 - "@azure/identity": ^2.1.0 + "@azure/identity": ^3.2.1 "@backstage/backend-common": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" @@ -5162,7 +4861,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 luxon: ^3.0.0 msw: ^1.0.0 react-use: ^17.2.4 @@ -5178,6 +4876,7 @@ __metadata: resolution: "@backstage/plugin-badges-backend@workspace:plugins/badges-backend" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-test-utils": "workspace:^" "@backstage/catalog-client": "workspace:^" "@backstage/catalog-model": "workspace:^" @@ -5220,7 +4919,6 @@ __metadata: "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.16.5 "@types/node": ^16.11.26 - cross-fetch: ^3.1.5 react-use: ^17.2.4 peerDependencies: react: ^16.13.1 || ^17.0.0 @@ -5270,7 +4968,6 @@ __metadata: "@material-ui/pickers": ^3.3.10 "@testing-library/jest-dom": ^5.10.1 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 luxon: ^3.0.0 material-ui-search-bar: ^1.0.0 react-hook-form: ^7.13.0 @@ -5318,7 +5015,6 @@ __metadata: "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 "@types/recharts": ^1.8.15 - cross-fetch: ^3.1.5 lodash: ^4.17.21 luxon: ^3.0.0 msw: ^1.0.0 @@ -5336,13 +5032,13 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-backend-module-aws@workspace:plugins/catalog-backend-module-aws" dependencies: - "@aws-sdk/client-eks": ^3.310.0 - "@aws-sdk/client-organizations": ^3.310.0 - "@aws-sdk/client-s3": ^3.310.0 - "@aws-sdk/credential-providers": ^3.310.0 - "@aws-sdk/middleware-endpoint": ^3.310.0 - "@aws-sdk/types": ^3.310.0 - "@aws-sdk/util-stream-node": ^3.310.0 + "@aws-sdk/client-eks": ^3.350.0 + "@aws-sdk/client-organizations": ^3.350.0 + "@aws-sdk/client-s3": ^3.350.0 + "@aws-sdk/credential-providers": ^3.350.0 + "@aws-sdk/middleware-endpoint": ^3.347.0 + "@aws-sdk/types": ^3.347.0 + "@aws-sdk/util-stream-node": ^3.350.0 "@backstage/backend-common": "workspace:^" "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-tasks": "workspace:^" @@ -5464,6 +5160,23 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-catalog-backend-module-gcp@workspace:plugins/catalog-backend-module-gcp": + version: 0.0.0-use.local + resolution: "@backstage/plugin-catalog-backend-module-gcp@workspace:plugins/catalog-backend-module-gcp" + dependencies: + "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" + "@backstage/backend-tasks": "workspace:^" + "@backstage/backend-test-utils": "workspace:^" + "@backstage/cli": "workspace:^" + "@backstage/config": "workspace:^" + "@backstage/plugin-catalog-node": "workspace:^" + "@backstage/plugin-kubernetes-common": "workspace:^" + "@google-cloud/container": ^4.15.0 + winston: ^3.2.1 + languageName: unknown + linkType: soft + "@backstage/plugin-catalog-backend-module-gerrit@workspace:plugins/catalog-backend-module-gerrit": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-backend-module-gerrit@workspace:plugins/catalog-backend-module-gerrit" @@ -5602,7 +5315,7 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-backend-module-msgraph@workspace:plugins/catalog-backend-module-msgraph" dependencies: - "@azure/identity": ^2.1.0 + "@azure/identity": ^3.2.1 "@backstage/backend-common": "workspace:^" "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-tasks": "workspace:^" @@ -5702,6 +5415,7 @@ __metadata: "@backstage/plugin-auth-node": "workspace:^" "@backstage/plugin-catalog-common": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" + "@backstage/plugin-events-node": "workspace:^" "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-permission-node": "workspace:^" "@backstage/plugin-scaffolder-common": "workspace:^" @@ -5743,18 +5457,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-common@npm:^1.0.10, @backstage/plugin-catalog-common@npm:^1.0.13": - version: 1.0.13 - resolution: "@backstage/plugin-catalog-common@npm:1.0.13" - dependencies: - "@backstage/catalog-model": ^1.3.0 - "@backstage/plugin-permission-common": ^0.7.5 - "@backstage/plugin-search-common": ^1.2.3 - checksum: 2e7de3a1be8ac4ac823bf200d8f1f10a3353ed873caa4534cdb5f0e328716f79d431aee39b8d7dbe67554c302b1252e6c14ea1aa35d1dca6a4c5e5db27baafa4 - languageName: node - linkType: hard - -"@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.15, @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: @@ -5861,7 +5564,6 @@ __metadata: "@testing-library/react-hooks": ^8.0.0 "@testing-library/user-event": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 git-url-parse: ^13.0.0 js-base64: ^3.6.0 lodash: ^4.17.21 @@ -5892,25 +5594,26 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-react@npm:^1.2.4, @backstage/plugin-catalog-react@npm:^1.5.0, @backstage/plugin-catalog-react@npm:^1.6.0": - version: 1.6.0 - resolution: "@backstage/plugin-catalog-react@npm:1.6.0" +"@backstage/plugin-catalog-react@npm:^1.2.4, @backstage/plugin-catalog-react@npm:^1.7.0, @backstage/plugin-catalog-react@npm:^1.8.0": + version: 1.8.0 + resolution: "@backstage/plugin-catalog-react@npm:1.8.0" dependencies: - "@backstage/catalog-client": ^1.4.1 - "@backstage/catalog-model": ^1.3.0 - "@backstage/core-components": ^0.13.1 - "@backstage/core-plugin-api": ^1.5.1 - "@backstage/errors": ^1.1.5 - "@backstage/integration": ^1.4.5 - "@backstage/plugin-catalog-common": ^1.0.13 - "@backstage/plugin-permission-common": ^0.7.5 - "@backstage/plugin-permission-react": ^0.4.12 - "@backstage/theme": ^0.3.0 - "@backstage/types": ^1.0.2 + "@backstage/catalog-client": ^1.4.3 + "@backstage/catalog-model": ^1.4.1 + "@backstage/core-components": ^0.13.3 + "@backstage/core-plugin-api": ^1.5.3 + "@backstage/errors": ^1.2.1 + "@backstage/integration": ^1.5.1 + "@backstage/plugin-catalog-common": ^1.0.15 + "@backstage/plugin-permission-common": ^0.7.7 + "@backstage/plugin-permission-react": ^0.4.14 + "@backstage/theme": ^0.4.1 + "@backstage/types": ^1.1.0 "@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 + "@react-hookz/web": ^23.0.0 "@types/react": ^16.13.1 || ^17.0.0 classnames: ^2.2.6 jwt-decode: ^3.1.0 @@ -5924,7 +5627,7 @@ __metadata: 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: 17e7a05b2e26511a27ce4ff8b09a40b15adf2e09e4cc57937d3479d83972aeb2be0ef74840c7d5a7c433dd03b9773a6864ae87a638d53f75881ac0007f135cf2 + checksum: 01dff91076bcc7829b10866975599a05991dd12b9c8f5978383a58dbbb2a4a0ef3b4558b6f8cc468260dc9eef594f8ebdba3cf9cbf776529ca1fd24b6460bb8e languageName: node linkType: hard @@ -5961,7 +5664,6 @@ __metadata: "@types/react": ^16.13.1 || ^17.0.0 "@types/zen-observable": ^0.8.0 classnames: ^2.2.6 - cross-fetch: ^3.1.5 jwt-decode: ^3.1.0 lodash: ^4.17.21 material-ui-popup-state: ^1.9.3 @@ -5997,11 +5699,12 @@ __metadata: "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 "@types/node": "*" - cross-fetch: ^3.1.5 msw: ^1.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 @@ -6035,7 +5738,6 @@ __metadata: "@testing-library/react": ^12.1.3 "@testing-library/user-event": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 history: ^5.0.0 lodash: ^4.17.21 pluralize: ^8.0.0 @@ -6192,7 +5894,6 @@ __metadata: "@types/luxon": ^3.0.0 "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 humanize-duration: ^3.27.1 luxon: ^3.0.0 msw: ^1.0.0 @@ -6258,7 +5959,6 @@ __metadata: "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 "@types/recharts": ^1.8.15 - cross-fetch: ^3.1.5 highlight.js: ^10.6.0 luxon: ^3.0.0 msw: ^1.0.0 @@ -6293,9 +5993,8 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": "*" "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 msw: ^1.0.0 - rc-progress: 3.4.1 + rc-progress: 3.4.2 react-use: ^17.2.4 peerDependencies: react: ^16.13.1 || ^17.0.0 @@ -6327,7 +6026,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 jsonschema: ^1.2.6 msw: ^1.0.0 react-use: ^17.2.4 @@ -6400,6 +6098,7 @@ __metadata: resolution: "@backstage/plugin-devtools-backend@workspace:plugins/devtools-backend" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/cli-common": "workspace:^" "@backstage/config": "workspace:^" @@ -6425,7 +6124,7 @@ __metadata: msw: ^1.0.0 node-fetch: ^2.6.7 ping: ^0.4.1 - semver: ^7.3.2 + semver: ^7.5.3 supertest: ^6.2.4 winston: ^3.2.1 yn: ^4.0.0 @@ -6471,6 +6170,7 @@ __metadata: peerDependencies: "@types/react": ^16.13.1 || ^17.0.0 react: ^16.13.1 || ^17.0.0 + react-dom: ^16.13.1 || ^17.0.0 react-router-dom: 6.0.0-beta.0 || ^6.3.0 languageName: unknown linkType: soft @@ -6512,6 +6212,7 @@ __metadata: resolution: "@backstage/plugin-entity-feedback-backend@workspace:plugins/entity-feedback-backend" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-test-utils": "workspace:^" "@backstage/catalog-client": "workspace:^" "@backstage/catalog-model": "workspace:^" @@ -6565,7 +6266,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": "*" "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 msw: ^1.0.0 react-use: ^17.2.4 peerDependencies: @@ -6605,7 +6305,6 @@ __metadata: "@types/node": "*" "@types/react": ^16.13.1 || ^17.0.0 "@uiw/react-codemirror": ^4.9.3 - cross-fetch: ^3.1.5 lodash: ^4.17.21 msw: ^1.0.0 react-use: ^17.2.4 @@ -6621,8 +6320,8 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-events-backend-module-aws-sqs@workspace:plugins/events-backend-module-aws-sqs" dependencies: - "@aws-sdk/client-sqs": ^3.310.0 - "@aws-sdk/types": ^3.310.0 + "@aws-sdk/client-sqs": ^3.350.0 + "@aws-sdk/types": ^3.347.0 "@backstage/backend-common": "workspace:^" "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-tasks": "workspace:^" @@ -6758,6 +6457,7 @@ __metadata: "@backstage/plugin-explore-common": "workspace:^" "@backstage/plugin-search-backend-module-explore": "workspace:^" "@backstage/plugin-search-common": "workspace:^" + "@backstage/types": "workspace:^" "@types/express": "*" "@types/supertest": ^2.0.8 express: ^4.18.1 @@ -6865,7 +6565,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 luxon: ^3.0.0 msw: ^1.0.0 react-use: ^17.2.4 @@ -7005,7 +6704,6 @@ __metadata: "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 "@types/recharts": ^1.8.15 - cross-fetch: ^3.1.5 luxon: ^3.0.0 msw: ^1.0.0 qs: ^6.10.1 @@ -7081,7 +6779,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 luxon: ^3.0.0 msw: ^1.0.0 react-use: ^17.2.4 @@ -7116,7 +6813,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": "*" "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 luxon: ^3.0.0 msw: ^1.0.0 octokit: ^2.0.4 @@ -7151,7 +6847,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 luxon: ^3.0.0 msw: ^1.0.0 p-limit: ^4.0.0 @@ -7219,7 +6914,6 @@ __metadata: "@types/luxon": ^3.0.0 "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 lodash: ^4.17.21 luxon: ^3.0.0 msw: ^1.0.0 @@ -7311,7 +7005,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": "*" "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 graphql-voyager: ^1.0.0-rc.31 msw: ^1.0.0 react-use: ^17.2.4 @@ -7322,6 +7015,23 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-home-react@npm:^0.1.1": + version: 0.1.1 + resolution: "@backstage/plugin-home-react@npm:0.1.1" + dependencies: + "@backstage/core-components": ^0.13.3 + "@backstage/core-plugin-api": ^1.5.3 + "@material-ui/core": ^4.12.2 + "@material-ui/icons": ^4.9.1 + "@rjsf/utils": 5.7.3 + 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: cc9741b1a3b3e1943d849d5437d0254b3fbfebf3a700ba1c282ccb158aa1f23761ba021330318c79fe0fd153c2ca088e04d8355a2fd4bdaa8731e667496dd33c + languageName: node + linkType: hard + "@backstage/plugin-home-react@workspace:^, @backstage/plugin-home-react@workspace:plugins/home-react": version: 0.0.0-use.local resolution: "@backstage/plugin-home-react@workspace:plugins/home-react" @@ -7351,23 +7061,24 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-home@npm:^0.5.1": - version: 0.5.2 - resolution: "@backstage/plugin-home@npm:0.5.2" +"@backstage/plugin-home@npm:^0.5.3": + version: 0.5.4 + resolution: "@backstage/plugin-home@npm:0.5.4" dependencies: - "@backstage/catalog-model": ^1.3.0 - "@backstage/config": ^1.0.7 - "@backstage/core-components": ^0.13.1 - "@backstage/core-plugin-api": ^1.5.1 - "@backstage/plugin-catalog-react": ^1.6.0 - "@backstage/theme": ^0.3.0 + "@backstage/catalog-model": ^1.4.1 + "@backstage/config": ^1.0.8 + "@backstage/core-components": ^0.13.3 + "@backstage/core-plugin-api": ^1.5.3 + "@backstage/plugin-catalog-react": ^1.8.0 + "@backstage/plugin-home-react": ^0.1.1 + "@backstage/theme": ^0.4.1 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@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 + "@rjsf/core-v5": "npm:@rjsf/core@5.7.3" + "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@5.7.3" + "@rjsf/utils": 5.7.3 + "@rjsf/validator-ajv8": 5.7.3 "@types/react": ^16.13.1 || ^17.0.0 lodash: ^4.17.21 react-grid-layout: ^1.3.4 @@ -7378,7 +7089,7 @@ __metadata: 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: d12e2cfe771a916cfb6e7ee5da26e50071042289b9be8d4a6aa501267ed3e3b2ec88ed6330d3801c9a241c341f62fd2ab871f20e4a368ee042023e3e930b0db9 + checksum: cf27862ba80f166691880b46c942726515695537ecb61eb4996109fdf32d2797ae47e25a0342f4cf1e4f1403262456dc5b6e190cd0ef28c80f188fd34aaa7196 languageName: node linkType: hard @@ -7401,7 +7112,7 @@ __metadata: "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 "@rjsf/core-v5": "npm:@rjsf/core@5.7.3" - "@rjsf/material-ui": 5.7.3 + "@rjsf/material-ui-v5": "npm:@rjsf/material-ui@5.7.3" "@rjsf/utils": 5.7.3 "@rjsf/validator-ajv8": 5.7.3 "@testing-library/dom": ^8.0.0 @@ -7411,7 +7122,6 @@ __metadata: "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 "@types/react-grid-layout": ^1.3.2 - cross-fetch: ^3.1.5 lodash: ^4.17.21 msw: ^1.0.0 react-grid-layout: ^1.3.4 @@ -7450,7 +7160,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 humanize-duration: ^3.26.0 luxon: ^3.0.0 msw: ^1.0.0 @@ -7584,7 +7293,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 jest-when: ^3.1.0 msw: ^1.0.0 react-use: ^17.2.4 @@ -7600,9 +7308,9 @@ __metadata: resolution: "@backstage/plugin-kubernetes-backend@workspace:plugins/kubernetes-backend" dependencies: "@aws-crypto/sha256-js": ^3.0.0 - "@aws-sdk/credential-providers": ^3.310.0 - "@aws-sdk/signature-v4": ^3.310.0 - "@azure/identity": ^2.0.4 + "@aws-sdk/credential-providers": ^3.350.0 + "@aws-sdk/signature-v4": ^3.347.0 + "@azure/identity": ^3.2.1 "@backstage/backend-common": "workspace:^" "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-test-utils": "workspace:^" @@ -7626,6 +7334,7 @@ __metadata: "@types/luxon": ^3.0.0 compression: ^1.7.4 cors: ^2.8.5 + cross-fetch: ^3.1.5 express: ^4.17.1 express-promise-router: ^4.1.0 fs-extra: 10.1.0 @@ -7640,6 +7349,7 @@ __metadata: stream-buffers: ^3.0.2 supertest: ^6.1.3 winston: ^3.2.1 + ws: ^8.13.0 yn: ^4.0.0 languageName: unknown linkType: soft @@ -7685,7 +7395,6 @@ __metadata: "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 cronstrue: ^2.2.0 - cross-fetch: ^3.1.5 js-yaml: ^4.0.0 kubernetes-models: ^4.1.0 lodash: ^4.17.21 @@ -7704,11 +7413,13 @@ __metadata: resolution: "@backstage/plugin-lighthouse-backend@workspace:plugins/lighthouse-backend" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-tasks": "workspace:^" "@backstage/catalog-client": "workspace:^" "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" + "@backstage/plugin-catalog-node": "workspace:^" "@backstage/plugin-lighthouse-common": "workspace:^" "@backstage/types": "workspace:^" winston: ^3.2.1 @@ -7749,7 +7460,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 msw: ^1.0.0 react-use: ^17.2.4 peerDependencies: @@ -7764,6 +7474,7 @@ __metadata: resolution: "@backstage/plugin-linguist-backend@workspace:plugins/linguist-backend" dependencies: "@backstage/backend-common": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-tasks": "workspace:^" "@backstage/backend-test-utils": "workspace:^" "@backstage/catalog-client": "workspace:^" @@ -7823,7 +7534,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": "*" "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 luxon: ^2.0.2 msw: ^1.0.0 react-use: ^17.2.4 @@ -7858,7 +7568,6 @@ __metadata: "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 classnames: ^2.3.1 - cross-fetch: ^3.1.5 dompurify: ^2.3.6 lodash: ^4.17.21 luxon: ^3.0.0 @@ -7888,7 +7597,6 @@ __metadata: "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/jest-dom": ^5.10.1 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 react-use: ^17.2.4 peerDependencies: react: ^16.13.1 || ^17.0.0 @@ -7927,6 +7635,58 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-nomad-backend@workspace:^, @backstage/plugin-nomad-backend@workspace:plugins/nomad-backend": + version: 0.0.0-use.local + resolution: "@backstage/plugin-nomad-backend@workspace:plugins/nomad-backend" + dependencies: + "@backstage/backend-common": "workspace:^" + "@backstage/cli": "workspace:^" + "@backstage/config": "workspace:^" + "@backstage/errors": "workspace:^" + "@types/express": "*" + "@types/supertest": ^2.0.8 + express: ^4.17.1 + express-promise-router: ^4.1.0 + msw: ^1.0.0 + node-fetch: ^2.6.7 + supertest: ^6.2.4 + winston: ^3.2.1 + yn: ^4.0.0 + languageName: unknown + linkType: soft + +"@backstage/plugin-nomad@workspace:^, @backstage/plugin-nomad@workspace:plugins/nomad": + version: 0.0.0-use.local + resolution: "@backstage/plugin-nomad@workspace:plugins/nomad" + dependencies: + "@backstage/catalog-model": "workspace:^" + "@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/plugin-catalog-react": "workspace:^" + "@backstage/test-utils": "workspace:^" + "@backstage/theme": "workspace:^" + "@material-ui/core": ^4.9.13 + "@material-ui/icons": ^4.9.1 + "@material-ui/lab": ^4.0.0-alpha.60 + "@testing-library/jest-dom": ^5.10.1 + "@testing-library/react": ^12.1.3 + "@testing-library/user-event": ^14.0.0 + "@types/node": "*" + cross-fetch: ^3.1.5 + luxon: ^3.3.0 + msw: ^1.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-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" @@ -7949,7 +7709,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": "*" "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 msw: ^1.0.0 react-use: ^17.2.4 peerDependencies: @@ -7982,7 +7741,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": "*" "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 msw: ^1.0.0 react-use: ^17.2.4 peerDependencies: @@ -8018,7 +7776,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 msw: ^1.0.0 p-limit: ^3.1.0 pluralize: ^8.0.0 @@ -8056,7 +7813,6 @@ __metadata: "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 classnames: ^2.2.6 - cross-fetch: ^3.1.5 luxon: ^3.0.0 msw: ^1.0.0 react-use: ^17.2.4 @@ -8111,7 +7867,6 @@ __metadata: "@types/luxon": ^3.0.0 "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 luxon: ^3.0.0 msw: ^1.0.0 react-use: ^17.2.4 @@ -8150,21 +7905,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-permission-common@npm:^0.7.5": - version: 0.7.5 - resolution: "@backstage/plugin-permission-common@npm:0.7.5" - dependencies: - "@backstage/config": ^1.0.7 - "@backstage/errors": ^1.1.5 - "@backstage/types": ^1.0.2 - cross-fetch: ^3.1.5 - uuid: ^8.0.0 - zod: ^3.21.4 - checksum: 24bfdc412e987be1d6bfa9e8dc82e19b7046ac60b426db2d7d81cf8389078e3703bd028a9331d4b9f695bf20126db5b17f648d14c70505eba7618c3c1c3f2e87 - languageName: node - linkType: hard - -"@backstage/plugin-permission-common@workspace:^, @backstage/plugin-permission-common@workspace:plugins/permission-common": +"@backstage/plugin-permission-common@^0.7.7, @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: @@ -8202,26 +7943,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-permission-react@npm:^0.4.12": - version: 0.4.12 - resolution: "@backstage/plugin-permission-react@npm:0.4.12" - dependencies: - "@backstage/config": ^1.0.7 - "@backstage/core-plugin-api": ^1.5.1 - "@backstage/plugin-permission-common": ^0.7.5 - "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 - react-use: ^17.2.4 - swr: ^2.0.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: c431772c887c52302ad640233fea16fab44dcc16436cf234e337602dcb47fd9e4afbc9eb89223199016e71f7f4a45276e3095bdc2ef1bf49e5c368cccfc87d06 - languageName: node - linkType: hard - -"@backstage/plugin-permission-react@workspace:^, @backstage/plugin-permission-react@workspace:plugins/permission-react": +"@backstage/plugin-permission-react@^0.4.14, @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: @@ -8311,7 +8033,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": "*" "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 lodash: ^4.17.21 msw: ^1.0.0 pluralize: ^8.0.0 @@ -8375,11 +8096,11 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": "*" "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 msw: ^1.0.1 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 @@ -8454,7 +8175,6 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" - "@backstage/plugin-scaffolder-backend": "workspace:^" "@backstage/plugin-scaffolder-node": "workspace:^" "@backstage/types": "workspace:^" fs-extra: 10.1.0 @@ -8476,7 +8196,6 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" - "@backstage/plugin-scaffolder-backend": "workspace:^" "@backstage/plugin-scaffolder-node": "workspace:^" "@backstage/types": "workspace:^" "@types/command-exists": ^1.2.0 @@ -8516,7 +8235,6 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/integration": "workspace:^" - "@backstage/plugin-scaffolder-backend": "workspace:^" "@backstage/plugin-scaffolder-node": "workspace:^" "@backstage/types": "workspace:^" "@types/command-exists": ^1.2.0 @@ -8595,13 +8313,14 @@ __metadata: command-exists: ^1.2.9 compression: ^1.7.4 cors: ^2.8.5 - esbuild: ^0.17.0 + esbuild: ^0.18.0 express: ^4.17.1 express-promise-router: ^4.1.0 fs-extra: 10.1.0 git-url-parse: ^13.0.0 globby: ^11.0.0 isbinaryfile: ^5.0.0 + isolated-vm: ^4.5.0 isomorphic-git: ^1.23.0 jest-when: ^3.1.0 jsonschema: ^1.2.6 @@ -8621,7 +8340,6 @@ __metadata: prom-client: ^14.0.1 supertest: ^6.1.3 uuid: ^8.2.0 - vm2: ^3.9.18 wait-for-expect: ^3.0.2 winston: ^3.2.1 yaml: ^2.0.0 @@ -8645,11 +8363,16 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-scaffolder-node@workspace:plugins/scaffolder-node" dependencies: + "@backstage/backend-common": "workspace:^" "@backstage/backend-plugin-api": "workspace:^" "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" + "@backstage/config": "workspace:^" + "@backstage/errors": "workspace:^" + "@backstage/integration": "workspace:^" "@backstage/plugin-scaffolder-common": "workspace:^" "@backstage/types": "workspace:^" + fs-extra: 10.1.0 jsonschema: ^1.2.6 winston: ^3.2.1 zod: ^3.21.4 @@ -8761,7 +8484,6 @@ __metadata: "@types/react": ^16.13.1 || ^17.0.0 "@uiw/react-codemirror": ^4.9.3 classnames: ^2.2.6 - cross-fetch: ^3.1.5 event-source-polyfill: ^1.0.31 git-url-parse: ^13.0.0 humanize-duration: ^3.25.1 @@ -8797,6 +8519,7 @@ __metadata: "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/plugin-catalog-common": "workspace:^" + "@backstage/plugin-catalog-node": "workspace:^" "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-search-backend-node": "workspace:^" "@backstage/plugin-search-common": "workspace:^" @@ -8877,6 +8600,7 @@ __metadata: "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/plugin-catalog-common": "workspace:^" + "@backstage/plugin-catalog-node": "workspace:^" "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-search-backend-node": "workspace:^" "@backstage/plugin-search-common": "workspace:^" @@ -8942,16 +8666,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-search-common@npm:^1.2.3": - version: 1.2.3 - resolution: "@backstage/plugin-search-common@npm:1.2.3" - dependencies: - "@backstage/plugin-permission-common": ^0.7.5 - "@backstage/types": ^1.0.2 - checksum: 79f5808c1d3c6bdcd659e4d9228efc6ddf5a5c3135ad87581070243cdcfdfd704136ff997c01fc736af2aa6bdd6ecdec467b6dcec7e4897600d6225491ed9410 - languageName: node - linkType: hard - "@backstage/plugin-search-common@workspace:^, @backstage/plugin-search-common@workspace:plugins/search-common": version: 0.0.0-use.local resolution: "@backstage/plugin-search-common@workspace:plugins/search-common" @@ -9023,7 +8737,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 history: ^5.0.0 msw: ^1.0.0 qs: ^6.9.4 @@ -9094,7 +8807,6 @@ __metadata: "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 "@types/zen-observable": ^0.8.2 - cross-fetch: ^3.1.5 msw: ^1.0.0 react-hook-form: ^7.12.2 react-use: ^17.2.4 @@ -9168,8 +8880,9 @@ __metadata: "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 cross-fetch: ^3.1.5 + luxon: ^3.0.0 msw: ^1.0.0 - rc-progress: 3.4.1 + rc-progress: 3.4.2 react-use: ^17.2.4 peerDependencies: react: ^16.13.1 || ^17.0.0 @@ -9202,7 +8915,6 @@ __metadata: "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 classnames: ^2.2.6 - cross-fetch: ^3.1.5 luxon: ^3.0.0 msw: ^1.0.0 react-use: ^17.2.4 @@ -9285,7 +8997,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": "*" "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 msw: ^1.0.0 react-use: ^17.2.4 peerDependencies: @@ -9337,7 +9048,7 @@ __metadata: knex: ^2.0.0 lodash: ^4.17.21 luxon: ^3.0.0 - semver: ^7.3.5 + semver: ^7.5.3 supertest: ^6.1.3 uuid: ^8.3.2 wait-for-expect: ^3.0.2 @@ -9398,7 +9109,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 msw: ^1.0.0 qs: ^6.9.4 react-use: ^17.2.4 @@ -9469,7 +9179,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 msw: ^1.0.0 react-use: ^17.2.4 testing-library__dom: ^7.29.4-beta.1 @@ -9540,7 +9249,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 git-url-parse: ^13.0.0 msw: ^1.0.0 photoswipe: ^5.3.7 @@ -9556,12 +9264,12 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-techdocs-node@workspace:plugins/techdocs-node" dependencies: - "@aws-sdk/client-s3": ^3.310.0 - "@aws-sdk/credential-providers": ^3.310.0 - "@aws-sdk/lib-storage": ^3.310.0 - "@aws-sdk/node-http-handler": ^3.310.0 - "@aws-sdk/types": ^3.310.0 - "@azure/identity": ^2.1.0 + "@aws-sdk/client-s3": ^3.350.0 + "@aws-sdk/credential-providers": ^3.350.0 + "@aws-sdk/lib-storage": ^3.350.0 + "@aws-sdk/node-http-handler": ^3.350.0 + "@aws-sdk/types": ^3.347.0 + "@azure/identity": ^3.2.1 "@azure/storage-blob": ^12.5.0 "@backstage/backend-common": "workspace:^" "@backstage/catalog-model": "workspace:^" @@ -9726,7 +9434,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 msw: ^1.0.0 react-use: ^17.2.4 peerDependencies: @@ -9843,7 +9550,6 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/node": "*" "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 msw: ^1.0.0 react-use: ^17.2.4 peerDependencies: @@ -9875,7 +9581,6 @@ __metadata: "@types/luxon": ^3.0.0 "@types/node": ^16.11.26 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 lodash: ^4.17.21 luxon: ^3.0.0 msw: ^1.0.0 @@ -9905,6 +9610,7 @@ __metadata: resolution: "@backstage/repo-tools@workspace:packages/repo-tools" dependencies: "@apidevtools/swagger-parser": ^10.1.0 + "@apisyouwonthate/style-guide": ^1.4.0 "@backstage/cli": "workspace:^" "@backstage/cli-common": "workspace:^" "@backstage/cli-node": "workspace:^" @@ -9913,6 +9619,13 @@ __metadata: "@manypkg/get-packages": ^1.1.3 "@microsoft/api-documenter": ^7.19.27 "@microsoft/api-extractor": ^7.33.7 + "@stoplight/spectral-core": ^1.18.0 + "@stoplight/spectral-formatters": ^1.1.0 + "@stoplight/spectral-functions": ^1.7.2 + "@stoplight/spectral-parsers": ^1.0.2 + "@stoplight/spectral-rulesets": ^1.16.0 + "@stoplight/spectral-runtime": ^1.1.2 + "@stoplight/types": ^13.14.0 "@types/is-glob": ^4.0.2 "@types/mock-fs": ^4.13.0 "@types/node": ^16.11.26 @@ -9971,31 +9684,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/theme@npm:^0.2.16, @backstage/theme@npm:^0.2.18, @backstage/theme@npm:^0.2.19": - version: 0.2.19 - resolution: "@backstage/theme@npm:0.2.19" - dependencies: - "@material-ui/core": ^4.12.2 - peerDependencies: - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 - checksum: 93ca110a3f953d6d98b4a5f2163beaa1bd1f95adb66a593e85eb523a7012acf654b6148db54008a6434805a4bd9016d67e5c6a317bc56940ee6800aecbb97d6f - languageName: node - linkType: hard - -"@backstage/theme@npm:^0.3.0": - version: 0.3.0 - resolution: "@backstage/theme@npm:0.3.0" - dependencies: - "@material-ui/core": ^4.12.2 - peerDependencies: - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 - checksum: 3f9c9452a88d214c13c0136302641ee87424649bdc943c993e98fc7eb08904adf14719a7f5b7d863368d68b08276f18f4e5352c9661fcec78688fb52bd34a22f - languageName: node - linkType: hard - -"@backstage/theme@workspace:^, @backstage/theme@workspace:packages/theme": +"@backstage/theme@^0.4.1, @backstage/theme@workspace:^, @backstage/theme@workspace:packages/theme": version: 0.0.0-use.local resolution: "@backstage/theme@workspace:packages/theme" dependencies: @@ -10012,7 +9701,19 @@ __metadata: languageName: unknown linkType: soft -"@backstage/types@^1.0.2, @backstage/types@workspace:^, @backstage/types@workspace:packages/types": +"@backstage/theme@npm:^0.2.16, @backstage/theme@npm:^0.2.18": + version: 0.2.19 + resolution: "@backstage/theme@npm:0.2.19" + dependencies: + "@material-ui/core": ^4.12.2 + peerDependencies: + react: ^16.13.1 || ^17.0.0 + react-dom: ^16.13.1 || ^17.0.0 + checksum: 93ca110a3f953d6d98b4a5f2163beaa1bd1f95adb66a593e85eb523a7012acf654b6148db54008a6434805a4bd9016d67e5c6a317bc56940ee6800aecbb97d6f + languageName: node + linkType: hard + +"@backstage/types@^1.0.2, @backstage/types@^1.1.0, @backstage/types@workspace:^, @backstage/types@workspace:packages/types": version: 0.0.0-use.local resolution: "@backstage/types@workspace:packages/types" dependencies: @@ -10060,12 +9761,12 @@ __metadata: languageName: node linkType: hard -"@changesets/apply-release-plan@npm:^6.1.3": - version: 6.1.3 - resolution: "@changesets/apply-release-plan@npm:6.1.3" +"@changesets/apply-release-plan@npm:^6.1.4": + version: 6.1.4 + resolution: "@changesets/apply-release-plan@npm:6.1.4" dependencies: "@babel/runtime": ^7.20.1 - "@changesets/config": ^2.3.0 + "@changesets/config": ^2.3.1 "@changesets/get-version-range-type": ^0.3.2 "@changesets/git": ^2.0.0 "@changesets/types": ^5.2.1 @@ -10076,22 +9777,22 @@ __metadata: outdent: ^0.5.0 prettier: ^2.7.1 resolve-from: ^5.0.0 - semver: ^5.4.1 - checksum: 3772a6e0ede33abdac6fcc52359307f770d5fafa53295c83e0a11b81e5802b2fe5e74e4d672c0a082f5d73dc1a9ef56509870b81824111396f74de99ada9526b + semver: ^7.5.3 + checksum: d386aee70c5483c97d964c6fa1191878005b7050d34b2e1e4a1ad66d9ad44f8f20d1c884e01e770b954bd2d4364f935510e53ae896212669f67e5c37b2a610c7 languageName: node linkType: hard -"@changesets/assemble-release-plan@npm:^5.2.3": - version: 5.2.3 - resolution: "@changesets/assemble-release-plan@npm:5.2.3" +"@changesets/assemble-release-plan@npm:^5.2.4": + version: 5.2.4 + resolution: "@changesets/assemble-release-plan@npm:5.2.4" dependencies: "@babel/runtime": ^7.20.1 "@changesets/errors": ^0.1.4 - "@changesets/get-dependents-graph": ^1.3.5 + "@changesets/get-dependents-graph": ^1.3.6 "@changesets/types": ^5.2.1 "@manypkg/get-packages": ^1.1.3 - semver: ^5.4.1 - checksum: 2c61894414736b12e9a26903d73c387b65f4caba398e280488b885f4d0f4bb307aaa6bae140dfd754c85de6557bd07645accda2af6b8794837ab43823ba6215c + semver: ^7.5.3 + checksum: 32f443a0afec3d5a4afc68c8de32e8ff88531ea24976b50583b1d6870d71cec2729f27952af82854eb54e2ad0a619872d211d654c596ee0eb42c83ab54ad15ae languageName: node linkType: hard @@ -10105,17 +9806,17 @@ __metadata: linkType: hard "@changesets/cli@npm:^2.14.0": - version: 2.26.1 - resolution: "@changesets/cli@npm:2.26.1" + version: 2.26.2 + resolution: "@changesets/cli@npm:2.26.2" dependencies: "@babel/runtime": ^7.20.1 - "@changesets/apply-release-plan": ^6.1.3 - "@changesets/assemble-release-plan": ^5.2.3 + "@changesets/apply-release-plan": ^6.1.4 + "@changesets/assemble-release-plan": ^5.2.4 "@changesets/changelog-git": ^0.1.14 - "@changesets/config": ^2.3.0 + "@changesets/config": ^2.3.1 "@changesets/errors": ^0.1.4 - "@changesets/get-dependents-graph": ^1.3.5 - "@changesets/get-release-plan": ^3.0.16 + "@changesets/get-dependents-graph": ^1.3.6 + "@changesets/get-release-plan": ^3.0.17 "@changesets/git": ^2.0.0 "@changesets/logger": ^0.0.5 "@changesets/pre": ^1.0.14 @@ -10124,7 +9825,7 @@ __metadata: "@changesets/write": ^0.2.3 "@manypkg/get-packages": ^1.1.3 "@types/is-ci": ^3.0.0 - "@types/semver": ^6.0.0 + "@types/semver": ^7.5.0 ansi-colors: ^4.1.3 chalk: ^2.1.0 enquirer: ^2.3.0 @@ -10137,28 +9838,28 @@ __metadata: p-limit: ^2.2.0 preferred-pm: ^3.0.0 resolve-from: ^5.0.0 - semver: ^5.4.1 + semver: ^7.5.3 spawndamnit: ^2.0.0 term-size: ^2.1.0 tty-table: ^4.1.5 bin: changeset: bin.js - checksum: d7d6445ebbc1b2718d97852a2275f59af32020e8a1e1efe666767819dd862c7794ce50627ad52f1f97ba4bc57c81bfc4750e92265757cc94ab2d44198d2afb10 + checksum: fc7b5bf319b19abed7a8d33a9fbd9ce49108af61c9c51920f609a49cb0c557f0b998711250d0cac149d0bed8a522f3109c4d8b0dda65b96ff2f823d16ca2f972 languageName: node linkType: hard -"@changesets/config@npm:^2.3.0": - version: 2.3.0 - resolution: "@changesets/config@npm:2.3.0" +"@changesets/config@npm:^2.3.1": + version: 2.3.1 + resolution: "@changesets/config@npm:2.3.1" dependencies: "@changesets/errors": ^0.1.4 - "@changesets/get-dependents-graph": ^1.3.5 + "@changesets/get-dependents-graph": ^1.3.6 "@changesets/logger": ^0.0.5 "@changesets/types": ^5.2.1 "@manypkg/get-packages": ^1.1.3 fs-extra: ^7.0.1 micromatch: ^4.0.2 - checksum: 68a61437ffeda219f22f6d4d32bf8d428e6f284d7e0e191c0629f64f035a051b4068222b1ea3ff1866e5944a153004735dab82205404919f6806c97c546700b1 + checksum: 8af58e3add4751ac8ce2c01f026ac8843b8d1c07c9a3df6518496eaef67f56458a84cad310763c588f7eccbf6831afbf280df7e05e78b294027b6b847be3d0cc languageName: node linkType: hard @@ -10171,31 +9872,31 @@ __metadata: languageName: node linkType: hard -"@changesets/get-dependents-graph@npm:^1.3.5": - version: 1.3.5 - resolution: "@changesets/get-dependents-graph@npm:1.3.5" +"@changesets/get-dependents-graph@npm:^1.3.6": + version: 1.3.6 + resolution: "@changesets/get-dependents-graph@npm:1.3.6" dependencies: "@changesets/types": ^5.2.1 "@manypkg/get-packages": ^1.1.3 chalk: ^2.1.0 fs-extra: ^7.0.1 - semver: ^5.4.1 - checksum: d7abb1da21804fd66b1458e46be2f2aec741145a43500b0463a5acfbb420ac5ce776a7328fa660ad4e6e811f933bd6f36e7bbaf00fb3f591d46f0b8e7108fdcd + semver: ^7.5.3 + checksum: d2cbbc5041063b939899502d1b264a0d9edb655acefd7f6197883229156bb7cfd1ace642ae4a1f7f7b432f2c51429f5dc9851ff5a9ed47f1c0159916e66627a9 languageName: node linkType: hard -"@changesets/get-release-plan@npm:^3.0.16": - version: 3.0.16 - resolution: "@changesets/get-release-plan@npm:3.0.16" +"@changesets/get-release-plan@npm:^3.0.17": + version: 3.0.17 + resolution: "@changesets/get-release-plan@npm:3.0.17" dependencies: "@babel/runtime": ^7.20.1 - "@changesets/assemble-release-plan": ^5.2.3 - "@changesets/config": ^2.3.0 + "@changesets/assemble-release-plan": ^5.2.4 + "@changesets/config": ^2.3.1 "@changesets/pre": ^1.0.14 "@changesets/read": ^0.5.9 "@changesets/types": ^5.2.1 "@manypkg/get-packages": ^1.1.3 - checksum: ab8360c17f69437ad51edfd8910a2609ab8dc1e8cf006994b3938b2551b1eb08b7ab8043b8bf1e94916cbadd89e357a0c1148e20eab8bb5e3ae284384d239942 + checksum: 8a0e3794d0f1e6220d173dbec96352ad69b585d013c3183888ca598dfdfcaa8a5ac3f7f36d5c511575cdc3559c2ad6f8cecfaa16ba9c24380899a81daa7af924 languageName: node linkType: hard @@ -10326,8 +10027,8 @@ __metadata: linkType: hard "@codemirror/language@npm:^6.0.0": - version: 6.7.0 - resolution: "@codemirror/language@npm:6.7.0" + version: 6.8.0 + resolution: "@codemirror/language@npm:6.8.0" dependencies: "@codemirror/state": ^6.0.0 "@codemirror/view": ^6.0.0 @@ -10335,16 +10036,16 @@ __metadata: "@lezer/highlight": ^1.0.0 "@lezer/lr": ^1.0.0 style-mod: ^4.0.0 - checksum: 673905e9eb80f039a5e6c59a8aeca217e124a9a03734848043192aeff9e5b3a82f150559f7bd637ee197c4b2171eb5b04e757d717922128ea4fecca1ac6ecac4 + checksum: 64408d996641931fa4c6b892e17ee1fdaee0f63d3d84c019a6ea7b1e6d1c774f92357b95c2ebaed60545062b795b72d0a058c03578b2bf4023c87726e97b5d2f languageName: node linkType: hard "@codemirror/legacy-modes@npm:^6.1.0": - version: 6.3.2 - resolution: "@codemirror/legacy-modes@npm:6.3.2" + version: 6.3.3 + resolution: "@codemirror/legacy-modes@npm:6.3.3" dependencies: "@codemirror/language": ^6.0.0 - checksum: fa5f5477fb9e19267251e2ecd3de8c1a4c2512813555bb60111dce3951f2c3f6080a2985a573b7542534ba1d2c34115f7e39ee23fdf8f6f81db6f8ce447c1efc + checksum: 3cd32b0f011b0a193e0948e5901b625f38aa6d9a8b24344531d6e142eb6fbb3e6cb5969429102044f3d04fbe53c4deaebd9f659c05067a0b18d17766290c9e05 languageName: node linkType: hard @@ -10390,13 +10091,13 @@ __metadata: linkType: hard "@codemirror/view@npm:^6.0.0": - version: 6.13.0 - resolution: "@codemirror/view@npm:6.13.0" + version: 6.15.3 + resolution: "@codemirror/view@npm:6.15.3" dependencies: "@codemirror/state": ^6.1.4 style-mod: ^4.0.0 w3c-keyname: ^2.2.4 - checksum: 3c4713eba5cf54afd9cf92f42295f7a9b42f4041ad9c17fc3dbbeebeb94f95fe3b2bd5377265ceed71a070d5b2472bae2fbb5013254c7e85fe5e1e3b5c807d79 + checksum: 048949b1b493a962904a7f77661a939f7c1893a7381022756a135f5dd8daf667f498be1b81da9c37c0e8de85b078ad987c2f75318385c520ed83c95da6313e95 languageName: node linkType: hard @@ -10737,9 +10438,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/android-arm64@npm:0.17.19" +"@esbuild/android-arm64@npm:0.18.17": + version: 0.18.17 + resolution: "@esbuild/android-arm64@npm:0.18.17" conditions: os=android & cpu=arm64 languageName: node linkType: hard @@ -10758,9 +10459,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/android-arm@npm:0.17.19" +"@esbuild/android-arm@npm:0.18.17": + version: 0.18.17 + resolution: "@esbuild/android-arm@npm:0.18.17" conditions: os=android & cpu=arm languageName: node linkType: hard @@ -10772,9 +10473,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-x64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/android-x64@npm:0.17.19" +"@esbuild/android-x64@npm:0.18.17": + version: 0.18.17 + resolution: "@esbuild/android-x64@npm:0.18.17" conditions: os=android & cpu=x64 languageName: node linkType: hard @@ -10786,9 +10487,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/darwin-arm64@npm:0.17.19" +"@esbuild/darwin-arm64@npm:0.18.17": + version: 0.18.17 + resolution: "@esbuild/darwin-arm64@npm:0.18.17" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -10800,9 +10501,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/darwin-x64@npm:0.17.19" +"@esbuild/darwin-x64@npm:0.18.17": + version: 0.18.17 + resolution: "@esbuild/darwin-x64@npm:0.18.17" conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -10814,9 +10515,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/freebsd-arm64@npm:0.17.19" +"@esbuild/freebsd-arm64@npm:0.18.17": + version: 0.18.17 + resolution: "@esbuild/freebsd-arm64@npm:0.18.17" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard @@ -10828,9 +10529,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/freebsd-x64@npm:0.17.19" +"@esbuild/freebsd-x64@npm:0.18.17": + version: 0.18.17 + resolution: "@esbuild/freebsd-x64@npm:0.18.17" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard @@ -10842,9 +10543,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/linux-arm64@npm:0.17.19" +"@esbuild/linux-arm64@npm:0.18.17": + version: 0.18.17 + resolution: "@esbuild/linux-arm64@npm:0.18.17" conditions: os=linux & cpu=arm64 languageName: node linkType: hard @@ -10856,9 +10557,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/linux-arm@npm:0.17.19" +"@esbuild/linux-arm@npm:0.18.17": + version: 0.18.17 + resolution: "@esbuild/linux-arm@npm:0.18.17" conditions: os=linux & cpu=arm languageName: node linkType: hard @@ -10870,9 +10571,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/linux-ia32@npm:0.17.19" +"@esbuild/linux-ia32@npm:0.18.17": + version: 0.18.17 + resolution: "@esbuild/linux-ia32@npm:0.18.17" conditions: os=linux & cpu=ia32 languageName: node linkType: hard @@ -10891,9 +10592,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/linux-loong64@npm:0.17.19" +"@esbuild/linux-loong64@npm:0.18.17": + version: 0.18.17 + resolution: "@esbuild/linux-loong64@npm:0.18.17" conditions: os=linux & cpu=loong64 languageName: node linkType: hard @@ -10905,9 +10606,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/linux-mips64el@npm:0.17.19" +"@esbuild/linux-mips64el@npm:0.18.17": + version: 0.18.17 + resolution: "@esbuild/linux-mips64el@npm:0.18.17" conditions: os=linux & cpu=mips64el languageName: node linkType: hard @@ -10919,9 +10620,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/linux-ppc64@npm:0.17.19" +"@esbuild/linux-ppc64@npm:0.18.17": + version: 0.18.17 + resolution: "@esbuild/linux-ppc64@npm:0.18.17" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard @@ -10933,9 +10634,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/linux-riscv64@npm:0.17.19" +"@esbuild/linux-riscv64@npm:0.18.17": + version: 0.18.17 + resolution: "@esbuild/linux-riscv64@npm:0.18.17" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard @@ -10947,9 +10648,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/linux-s390x@npm:0.17.19" +"@esbuild/linux-s390x@npm:0.18.17": + version: 0.18.17 + resolution: "@esbuild/linux-s390x@npm:0.18.17" conditions: os=linux & cpu=s390x languageName: node linkType: hard @@ -10961,9 +10662,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/linux-x64@npm:0.17.19" +"@esbuild/linux-x64@npm:0.18.17": + version: 0.18.17 + resolution: "@esbuild/linux-x64@npm:0.18.17" conditions: os=linux & cpu=x64 languageName: node linkType: hard @@ -10975,9 +10676,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/netbsd-x64@npm:0.17.19" +"@esbuild/netbsd-x64@npm:0.18.17": + version: 0.18.17 + resolution: "@esbuild/netbsd-x64@npm:0.18.17" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard @@ -10989,9 +10690,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/openbsd-x64@npm:0.17.19" +"@esbuild/openbsd-x64@npm:0.18.17": + version: 0.18.17 + resolution: "@esbuild/openbsd-x64@npm:0.18.17" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard @@ -11003,9 +10704,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/sunos-x64@npm:0.17.19" +"@esbuild/sunos-x64@npm:0.18.17": + version: 0.18.17 + resolution: "@esbuild/sunos-x64@npm:0.18.17" conditions: os=sunos & cpu=x64 languageName: node linkType: hard @@ -11017,9 +10718,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/win32-arm64@npm:0.17.19" +"@esbuild/win32-arm64@npm:0.18.17": + version: 0.18.17 + resolution: "@esbuild/win32-arm64@npm:0.18.17" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -11031,9 +10732,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/win32-ia32@npm:0.17.19" +"@esbuild/win32-ia32@npm:0.18.17": + version: 0.18.17 + resolution: "@esbuild/win32-ia32@npm:0.18.17" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard @@ -11045,9 +10746,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.17.19": - version: 0.17.19 - resolution: "@esbuild/win32-x64@npm:0.17.19" +"@esbuild/win32-x64@npm:0.18.17": + version: 0.18.17 + resolution: "@esbuild/win32-x64@npm:0.18.17" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -11070,27 +10771,27 @@ __metadata: languageName: node linkType: hard -"@eslint/eslintrc@npm:^2.0.3": - version: 2.0.3 - resolution: "@eslint/eslintrc@npm:2.0.3" +"@eslint/eslintrc@npm:^2.1.0": + version: 2.1.0 + resolution: "@eslint/eslintrc@npm:2.1.0" dependencies: ajv: ^6.12.4 debug: ^4.3.2 - espree: ^9.5.2 + espree: ^9.6.0 globals: ^13.19.0 ignore: ^5.2.0 import-fresh: ^3.2.1 js-yaml: ^4.1.0 minimatch: ^3.1.2 strip-json-comments: ^3.1.1 - checksum: ddc51f25f8524d8231db9c9bf03177e503d941a332e8d5ce3b10b09241be4d5584a378a529a27a527586bfbccf3031ae539eb891352033c340b012b4d0c81d92 + checksum: d5ed0adbe23f6571d8c9bb0ca6edf7618dc6aed4046aa56df7139f65ae7b578874e0d9c796df784c25bda648ceb754b6320277d828c8b004876d7443b8dc018c languageName: node linkType: hard -"@eslint/js@npm:8.42.0": - version: 8.42.0 - resolution: "@eslint/js@npm:8.42.0" - checksum: 750558843ac458f7da666122083ee05306fc087ecc1e5b21e7e14e23885775af6c55bcc92283dff1862b7b0d8863ec676c0f18c7faf1219c722fe91a8ece56b6 +"@eslint/js@npm:8.44.0": + version: 8.44.0 + resolution: "@eslint/js@npm:8.44.0" + checksum: fc539583226a28f5677356e9f00d2789c34253f076643d2e32888250e509a4e13aafe0880cb2425139051de0f3a48d25bfc5afa96b7304f203b706c17340e3cf languageName: node linkType: hard @@ -11153,27 +10854,27 @@ __metadata: languageName: node linkType: hard -"@frsource/base64@npm:1.0.14": - version: 1.0.14 - resolution: "@frsource/base64@npm:1.0.14" - checksum: 9a5b718e4ac12fd1b5bfdefcdf669fb0a125599fb6cd55564da3beeccd7a5707f58bc41f572268a8120af15ccca32355e8384341561f738397521020e0c2564c +"@frsource/base64@npm:1.0.17": + version: 1.0.17 + resolution: "@frsource/base64@npm:1.0.17" + checksum: a01689ef785516ff0b7460f55792685fc782f8507518768396acb9283270d50a8149774f3acd5fa690ccd5a48b5ec4ace90a491458ffdd9e9f591c6b23eb5da5 languageName: node linkType: hard "@frsource/cypress-plugin-visual-regression-diff@npm:^3.2.8": - version: 3.3.8 - resolution: "@frsource/cypress-plugin-visual-regression-diff@npm:3.3.8" + version: 3.3.10 + resolution: "@frsource/cypress-plugin-visual-regression-diff@npm:3.3.10" dependencies: - "@frsource/base64": 1.0.14 - glob: 8.0.3 + "@frsource/base64": 1.0.17 + glob: 8.1.0 meta-png: 1.0.6 move-file: 2.1.0 pixelmatch: 5.3.0 pngjs: 7.0.0 - sharp: 0.31.2 + sharp: 0.32.1 peerDependencies: cypress: ">=4.5.0" - checksum: 657cd8f4343da939677ae8db611445846eed21176fd2494617050ac267aed7665ce1b084aba0ce774170f7113a7bd79af41b3207e457af28a212e46b07f4783d + checksum: 879954ecba8829fd870379a1f4150a511fceab4c5a5c3df8abbab54e655e6560d52d925109364ea7f2d3484467ed5e9c3e4cfaf0058c12bbfbfc21d76ed79b40 languageName: node linkType: hard @@ -11234,12 +10935,12 @@ __metadata: languageName: node linkType: hard -"@google-cloud/container@npm:^4.0.0": - version: 4.11.0 - resolution: "@google-cloud/container@npm:4.11.0" +"@google-cloud/container@npm:^4.0.0, @google-cloud/container@npm:^4.15.0": + version: 4.15.0 + resolution: "@google-cloud/container@npm:4.15.0" dependencies: google-gax: ^3.5.8 - checksum: c5257d86ff73a1770ef6004965cca4d2107a3814257a97b4bace14a75be19455d8598db29b43cd66173b847a494cb10b35c9bbdcf8c262726afb4c7a521a8120 + checksum: e81f1b708ab44c55b8e998d34c442baed10a113828ef51b4a84b806a2b04a10a0dc40ee0aa202386ac6158b34b9d3f03467d7008da9e4f709fdb1f021e725b8c languageName: node linkType: hard @@ -12258,6 +11959,20 @@ __metadata: languageName: node linkType: hard +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: ^5.1.2 + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: ^7.0.1 + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: ^8.1.0 + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 4a473b9b32a7d4d3cfb7a614226e555091ff0c5a29a1734c28c72a182c2f6699b26fc6b5c2131dfd841e86b185aea714c72201d7c98c2fba5f17709333a67aeb + languageName: node + linkType: hard + "@isaacs/string-locale-compare@npm:^1.1.0": version: 1.1.0 resolution: "@isaacs/string-locale-compare@npm:1.1.0" @@ -12285,11 +12000,11 @@ __metadata: linkType: hard "@jest-mock/express@npm:^2.0.1": - version: 2.0.1 - resolution: "@jest-mock/express@npm:2.0.1" + version: 2.0.2 + resolution: "@jest-mock/express@npm:2.0.2" dependencies: - "@types/express": ^4.17.13 - checksum: 999ea0a953b3e911d0b8ecc4cb3b78ac252b3354832db9659be6754094410b10508f1688f3e623ab13fe40c28d89fd5a81699e6acd148dd8128abec4e81f3f14 + "@types/express": ^4.17.17 + checksum: 558feb47e7e9620a5e53b83c51b3802782ecf7ab32b8d81077b16f641b7e1a6dc6fffa652d2ab48b28ba0f0634fa6387bd21b08f62b92bd730dfca167a4c2795 languageName: node linkType: hard @@ -12646,7 +12361,7 @@ __metadata: languageName: node linkType: hard -"@jsdevtools/ono@npm:^7.1.3": +"@jsdevtools/ono@npm:7.1.3, @jsdevtools/ono@npm:^7.1.3": version: 7.1.3 resolution: "@jsdevtools/ono@npm:7.1.3" checksum: 2297fcd472ba810bffe8519d2249171132844c7174f3a16634f9260761c8c78bc0428a4190b5b6d72d45673c13918ab9844d706c3ed4ef8f62ab11a2627a08ad @@ -12662,6 +12377,24 @@ __metadata: languageName: node linkType: hard +"@jsep-plugin/regex@npm:^1.0.1": + version: 1.0.3 + resolution: "@jsep-plugin/regex@npm:1.0.3" + peerDependencies: + jsep: ^0.4.0||^1.0.0 + checksum: a57718ae5c86bd10ff5de51843a771b96a10a9c6b5c5f4e02aa5318257c3d5fdec96f8b389fcbe129c7a6ad6b0746d9a0fd934c949b80882230fbc14b548c922 + languageName: node + linkType: hard + +"@jsep-plugin/ternary@npm:^1.0.2": + version: 1.1.3 + resolution: "@jsep-plugin/ternary@npm:1.1.3" + peerDependencies: + jsep: ^0.4.0||^1.0.0 + checksum: c05408b0302844723f98b90787425beb4e8ad14029df3d98e88b9d61343d81201a7f0bf3db5806dcf0378c7be69f5b4c9fcd04f055bda282c73f4d1b425e502a + languageName: node + linkType: hard + "@juggle/resize-observer@npm:^3.3.1": version: 3.3.1 resolution: "@juggle/resize-observer@npm:3.3.1" @@ -12680,45 +12413,45 @@ __metadata: linkType: hard "@keyv/redis@npm:^2.5.3": - version: 2.6.1 - resolution: "@keyv/redis@npm:2.6.1" + version: 2.7.0 + resolution: "@keyv/redis@npm:2.7.0" dependencies: ioredis: ^5.3.2 - checksum: c0c0aa7d0b449ef295ab65bcc38d42a2f6f606f49bf1d9bc95cd0276d60854c4d579d6dfce9e070f350a07987dfde9d452884ee05e8f87215c49c304b27a68ab + checksum: 2bf16d99f54fa5177c375eb170f46076715e6a17fd65840d10638e441af8a4dd065927a18b45abb9531746ddab54f865884347c80f7e188c981a40f8245269ab languageName: node linkType: hard -"@kubernetes-models/apimachinery@npm:^1.1.0": - version: 1.2.0 - resolution: "@kubernetes-models/apimachinery@npm:1.2.0" +"@kubernetes-models/apimachinery@npm:^1.1.0, @kubernetes-models/apimachinery@npm:^1.2.1": + version: 1.2.1 + resolution: "@kubernetes-models/apimachinery@npm:1.2.1" dependencies: - "@kubernetes-models/base": ^4.0.2 - "@kubernetes-models/validate": ^3.1.0 + "@kubernetes-models/base": ^4.0.3 + "@kubernetes-models/validate": ^3.1.1 tslib: ^2.4.0 - checksum: ac93980b732239517af47e0cb512e28fc320ed8348eaa8a68f65b16adc98cf90b6b36d9a9752d825e6e1ac84ae0c0d37e2dc8c8de140011506753a058c89bcf2 + checksum: 69145452a2f1b9314aa33326d236e1829905bbdc48727927d065570e2fe95c3895e7117e54f394823c06f5811c7de689f7df1f8010f49d6b89d59241c8704a02 languageName: node linkType: hard -"@kubernetes-models/base@npm:^4.0.0, @kubernetes-models/base@npm:^4.0.1, @kubernetes-models/base@npm:^4.0.2": - version: 4.0.2 - resolution: "@kubernetes-models/base@npm:4.0.2" +"@kubernetes-models/base@npm:^4.0.1, @kubernetes-models/base@npm:^4.0.3": + version: 4.0.3 + resolution: "@kubernetes-models/base@npm:4.0.3" dependencies: - "@kubernetes-models/validate": ^3.1.0 + "@kubernetes-models/validate": ^3.1.1 is-plain-object: ^5.0.0 tslib: ^2.4.0 - checksum: ab6bae58faca3ee0939746b40e1cea30684d6219877de7ba9953aa06adfd7788c14b3696ba092b3b7583ffb137973715704c68c8035905d610fbf88d9e821f67 + checksum: 0f1f333d7e70ba87c322c0bfc9497c4d51e7c7063f0530106daac2e7eac328477df1bf48e255ddf595fb1b49ae0d5214e4f9b5df91d7f67892a0db047d05995f languageName: node linkType: hard -"@kubernetes-models/validate@npm:^3.0.0, @kubernetes-models/validate@npm:^3.1.0": - version: 3.1.0 - resolution: "@kubernetes-models/validate@npm:3.1.0" +"@kubernetes-models/validate@npm:^3.1.1": + version: 3.1.1 + resolution: "@kubernetes-models/validate@npm:3.1.1" dependencies: - ajv: ^8.11.0 + ajv: ^8.12.0 ajv-formats: ^2.1.1 ajv-formats-draft2019: ^1.6.1 tslib: ^2.4.0 - checksum: 774cc4a617ebb14271c471bc1443c74380413d7439d40892e7f1b2ea50d4e88483748c2d59de97a530f76cb3cfcf1c220844b102ebf3f4b386ed7883a920116e + checksum: cb5be259a0b5cead73b98648a69785a5e04c2fa3ce199033604c4551b6c4786435c9e5f926cff2d63f50a6fbd2c0ad1199550cb0cbea781e64673b29c4d85345 languageName: node linkType: hard @@ -13200,9 +12933,9 @@ __metadata: linkType: hard "@microsoft/microsoft-graph-types@npm:^2.25.0, @microsoft/microsoft-graph-types@npm:^2.6.0": - version: 2.33.0 - resolution: "@microsoft/microsoft-graph-types@npm:2.33.0" - checksum: 9a07e258750cfdedebdc05670c9951fe507ba0868839a411ff36592015660a547d1e4fd9abec1533da979238ef674ce2bf4c363ab0ae2082818313fba0978ecb + version: 2.35.0 + resolution: "@microsoft/microsoft-graph-types@npm:2.35.0" + checksum: d2053799a8b78f5743a64853727e3887101cbb6b26558b8a6e8501b561b04d4bca1dac6c74534229b9e40daa489f47188ae5837ada42108a50d4062cfb60f57e languageName: node linkType: hard @@ -13414,16 +13147,16 @@ __metadata: languageName: node linkType: hard -"@nestjs/axios@npm:0.0.8": - version: 0.0.8 - resolution: "@nestjs/axios@npm:0.0.8" +"@nestjs/axios@npm:0.1.0": + version: 0.1.0 + resolution: "@nestjs/axios@npm:0.1.0" dependencies: axios: 0.27.2 peerDependencies: - "@nestjs/common": ^7.0.0 || ^8.0.0 + "@nestjs/common": ^7.0.0 || ^8.0.0 || ^9.0.0 reflect-metadata: ^0.1.12 rxjs: ^6.0.0 || ^7.0.0 - checksum: bc6b18c6e8bcfab1e8e9371a089cbba293a7b1df6d5de7fa15bb80db1966e6f62ba62d2b30c7378674f7d2272a1a1d0c694e1192c767c269c0aae04b7bdfea9b + checksum: 72929b25caacb85517bae962b13d865a31aa3984aa9e55305e0a2306e54338fe51a7eb38ca38cab0fe8b4116fb35219bd02c8b0c4cac70e7b5aeb84d03a1db3f languageName: node linkType: hard @@ -13479,6 +13212,18 @@ __metadata: languageName: node linkType: hard +"@newrelic/browser-agent@npm:^1.236.0": + version: 1.236.0 + resolution: "@newrelic/browser-agent@npm:1.236.0" + dependencies: + core-js: ^3.26.0 + fflate: ^0.7.4 + rrweb: ^2.0.0-alpha.8 + web-vitals: ^3.1.0 + checksum: 79a96c8f8421bed13e0e9eaf08c9bb8ac2785da3199e2304366c5cf98eb976713e393bd26a7efe998837eba5facfe7a54a6d58ba5c948c7ecc8de49e477b5836 + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -13568,6 +13313,15 @@ __metadata: languageName: node linkType: hard +"@npmcli/fs@npm:^3.1.0": + version: 3.1.0 + resolution: "@npmcli/fs@npm:3.1.0" + dependencies: + semver: ^7.3.5 + checksum: a50a6818de5fc557d0b0e6f50ec780a7a02ab8ad07e5ac8b16bf519e0ad60a144ac64f97d05c443c3367235d337182e1d012bbac0eb8dbae8dc7b40b193efd0e + languageName: node + linkType: hard + "@npmcli/git@npm:^2.1.0": version: 2.1.0 resolution: "@npmcli/git@npm:2.1.0" @@ -13860,8 +13614,8 @@ __metadata: linkType: hard "@octokit/oauth-app@npm:^4.0.7, @octokit/oauth-app@npm:^4.2.0, @octokit/oauth-app@npm:^4.2.1": - version: 4.2.2 - resolution: "@octokit/oauth-app@npm:4.2.2" + version: 4.2.4 + resolution: "@octokit/oauth-app@npm:4.2.4" dependencies: "@octokit/auth-oauth-app": ^5.0.0 "@octokit/auth-oauth-user": ^2.0.0 @@ -13872,7 +13626,7 @@ __metadata: "@types/aws-lambda": ^8.10.83 fromentries: ^1.3.1 universal-user-agent: ^6.0.0 - checksum: a15a849fce7c9b95d3d28583ee20a3a6b4df3d972bf65506204e05ef36998b8bc3359f918524b090157153fb3461e222b7094894bd85374159e84ad774f06ccd + checksum: 6d9798c9e63e84f3cb3031ac3f06f45c6ea053fd201be9a07a508786fd400479d7d9f6f85707d0fff7f094a265c7e966a2fa4c884001b99f02ddd927bf499d06 languageName: node linkType: hard @@ -14005,14 +13759,14 @@ __metadata: languageName: node linkType: hard -"@octokit/request-error@npm:^3.0.0": - version: 3.0.1 - resolution: "@octokit/request-error@npm:3.0.1" +"@octokit/request-error@npm:^3.0.0, @octokit/request-error@npm:^v3.0.3": + version: 3.0.3 + resolution: "@octokit/request-error@npm:3.0.3" dependencies: - "@octokit/types": ^7.0.0 + "@octokit/types": ^9.0.0 deprecation: ^2.0.0 once: ^1.4.0 - checksum: ae386b5181b3cb66b844047a21d062b683cd7ec4daf70cb9868406c1a51608a72d683955e692c7cc6237d66a09b12c6bcf102a712985da68bcedcc3820117e75 + checksum: 5db0b514732686b627e6ed9ef1ccdbc10501f1b271a9b31f784783f01beee70083d7edcfeb35fbd7e569fa31fdd6762b1ff6b46101700d2d97e7e48e749520d0 languageName: node linkType: hard @@ -14031,8 +13785,8 @@ __metadata: linkType: hard "@octokit/request@npm:^6.0.0": - version: 6.2.5 - resolution: "@octokit/request@npm:6.2.5" + version: 6.2.8 + resolution: "@octokit/request@npm:6.2.8" dependencies: "@octokit/endpoint": ^7.0.0 "@octokit/request-error": ^3.0.0 @@ -14040,19 +13794,19 @@ __metadata: is-plain-object: ^5.0.0 node-fetch: ^2.6.7 universal-user-agent: ^6.0.0 - checksum: 856451ea8cc6b1dd0f6e350a141e65c318b5e3a25b8dea373d3afd115f9a3077535a0330f5d90e9db81dc3234dba1dd64edd31e68f639553baa10b4d02b99498 + checksum: 3747106f50d7c462131ff995b13defdd78024b7becc40283f4ac9ea0af2391ff33a0bb476a05aa710346fe766d20254979079a1d6f626112015ba271fe38f3e2 languageName: node linkType: hard "@octokit/rest@npm:^19.0.3": - version: 19.0.11 - resolution: "@octokit/rest@npm:19.0.11" + version: 19.0.13 + resolution: "@octokit/rest@npm:19.0.13" dependencies: "@octokit/core": ^4.2.1 "@octokit/plugin-paginate-rest": ^6.1.2 "@octokit/plugin-request-log": ^1.0.4 "@octokit/plugin-rest-endpoint-methods": ^7.1.2 - checksum: 147518ad51d214ead88adc717b5fdc4f33317949d58c124f4069bdf07d2e6b49fa66861036b9e233aed71fcb88ff367a6da0357653484e466175ab4fb7183b3b + checksum: ca1553e3fe46efabffef60e68e4a228d4cc0f0d545daf7f019560f666d3e934c6f3a6402a42bbd786af4f3c0a6e69380776312f01b7d52998fe1bbdd1b068f69 languageName: node linkType: hard @@ -14091,9 +13845,9 @@ __metadata: linkType: hard "@octokit/webhooks-methods@npm:^3.0.0": - version: 3.0.2 - resolution: "@octokit/webhooks-methods@npm:3.0.2" - checksum: 4608d6a394bd94846301b709f44adc2bde0f43517840c49d235e3cb355986e2e9736d60b4a39c3492b31c06d10401f32cab878ec83e83b890606f58619cad5ef + version: 3.0.3 + resolution: "@octokit/webhooks-methods@npm:3.0.3" + checksum: 1caccc8b27ad53bbb8e39cf3db98a3ef5abcec9f919024d7f89618a5156044c6585871cc97176ec63fb2503bfe6b6ca8e4a18313e1eaed1c0163b194a4dada09 languageName: node linkType: hard @@ -14134,10 +13888,10 @@ __metadata: linkType: hard "@openapitools/openapi-generator-cli@npm:^2.4.26": - version: 2.6.0 - resolution: "@openapitools/openapi-generator-cli@npm:2.6.0" + version: 2.7.0 + resolution: "@openapitools/openapi-generator-cli@npm:2.7.0" dependencies: - "@nestjs/axios": 0.0.8 + "@nestjs/axios": 0.1.0 "@nestjs/common": 9.3.11 "@nestjs/core": 9.3.11 "@nuxtjs/opencollective": 0.3.2 @@ -14155,7 +13909,7 @@ __metadata: tslib: 2.0.3 bin: openapi-generator-cli: main.js - checksum: d60711b0fc018f4834faa28be8990a6d019d87be9cd8c8f7f1a2f5dfb863044b1f80bc0841caceffa76f6eec3e756291e3b8e81a00d42ca883974703b616097f + checksum: 92ca36779b43fe1e4868cd89bde4cb96918868aa62c8a69a9e199711d8e7093bab67f484d266fcbf37ca4ad87e4e91ea5759fb322c7999a299f5bfdc179065b8 languageName: node linkType: hard @@ -14305,6 +14059,13 @@ __metadata: languageName: node linkType: hard +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 6ad6a00fc4f2f2cfc6bff76fb1d88b8ee20bc0601e18ebb01b6d4be583733a860239a521a7fbca73b612e66705078809483549d2b18f370eb346c5155c8e4a0f + languageName: node + linkType: hard + "@pmmmwh/react-refresh-webpack-plugin@npm:^0.5.7": version: 0.5.10 resolution: "@pmmmwh/react-refresh-webpack-plugin@npm:0.5.10" @@ -14448,8 +14209,8 @@ __metadata: linkType: hard "@react-hookz/web@npm:^23.0.0": - version: 23.0.1 - resolution: "@react-hookz/web@npm:23.0.1" + version: 23.1.0 + resolution: "@react-hookz/web@npm:23.1.0" dependencies: "@react-hookz/deep-equal": ^1.0.4 peerDependencies: @@ -14459,7 +14220,7 @@ __metadata: peerDependenciesMeta: js-cookie: optional: true - checksum: 321770570c947321ba44de6ecee17337e4bb0c2a0c9d0dff5cf29e999faa2b7c1132c72a15aface46da9a709b715042ab48a30085d2a8feefba91aac96e82037 + checksum: bf28241ccbf0c139d4cc843ebe04a963c74935abf9846ae1d64964ecc96b7c214441835a6ad82d9b00ebbd36c7f74a8b193f8035dfc9f2ab49055ff3d035d8b8 languageName: node linkType: hard @@ -14484,22 +14245,6 @@ __metadata: languageName: node linkType: hard -"@rjsf/core-v5@npm:@rjsf/core@5.6.0": - version: 5.6.0 - resolution: "@rjsf/core@npm:5.6.0" - dependencies: - lodash: ^4.17.15 - lodash-es: ^4.17.15 - markdown-to-jsx: ^7.2.0 - nanoid: ^3.3.4 - prop-types: ^15.7.2 - peerDependencies: - "@rjsf/utils": ^5.0.0 - react: ^16.14.0 || >=17 - checksum: c42c540dff24b961d3ecec992251041c9642b7f9f604335396b7f44dbf33387517ef93ca39522c2ccdb94600b4fa7eb13685260eb91c0855f1e353c68cb41c47 - languageName: node - linkType: hard - "@rjsf/core-v5@npm:@rjsf/core@5.7.3": version: 5.7.3 resolution: "@rjsf/core@npm:5.7.3" @@ -14535,7 +14280,7 @@ __metadata: languageName: node linkType: hard -"@rjsf/material-ui-v5@npm:@rjsf/material-ui@5.7.3, @rjsf/material-ui@npm:5.7.3": +"@rjsf/material-ui-v5@npm:@rjsf/material-ui@5.7.3": version: 5.7.3 resolution: "@rjsf/material-ui@npm:5.7.3" peerDependencies: @@ -14548,19 +14293,6 @@ __metadata: languageName: node linkType: hard -"@rjsf/material-ui@npm:5.6.0": - version: 5.6.0 - resolution: "@rjsf/material-ui@npm:5.6.0" - peerDependencies: - "@material-ui/core": ^4.12.3 - "@material-ui/icons": ^4.11.2 - "@rjsf/core": ^5.0.0 - "@rjsf/utils": ^5.0.0 - react: ^16.14.0 || >=17 - checksum: 1287ca975b569a8afa19127b3934e5d775b2aa7ae55d6a310b505712810df13c6dac80171e1668c72a53f9f6ab940cef83b5ecbbf0c3503475b0ea42ce9973b3 - languageName: node - linkType: hard - "@rjsf/material-ui@npm:^3.2.1": version: 3.2.1 resolution: "@rjsf/material-ui@npm:3.2.1" @@ -14573,21 +14305,6 @@ __metadata: languageName: node linkType: hard -"@rjsf/utils@npm:5.6.0": - version: 5.6.0 - resolution: "@rjsf/utils@npm:5.6.0" - dependencies: - json-schema-merge-allof: ^0.8.1 - jsonpointer: ^5.0.1 - lodash: ^4.17.15 - lodash-es: ^4.17.15 - react-is: ^18.2.0 - peerDependencies: - react: ^16.14.0 || >=17 - checksum: f8888693318d6838e492f80d537fbb904f4a345876fc126b3c77699ca08f8dc7ae4d6a2fe855f34bf3f8ad6b79c22989b4da4754144b2f113babf0a0612c7458 - languageName: node - linkType: hard - "@rjsf/utils@npm:5.7.3": version: 5.7.3 resolution: "@rjsf/utils@npm:5.7.3" @@ -14603,20 +14320,6 @@ __metadata: languageName: node linkType: hard -"@rjsf/validator-ajv8@npm:5.6.0": - version: 5.6.0 - resolution: "@rjsf/validator-ajv8@npm:5.6.0" - dependencies: - ajv: ^8.12.0 - ajv-formats: ^2.1.1 - lodash: ^4.17.15 - lodash-es: ^4.17.15 - peerDependencies: - "@rjsf/utils": ^5.0.0 - checksum: 0b7ff0375565ec40c6f564d7c9b333b6d3f22c84c2ac6cda97bba40147705b954435d5cd73b1eaf10a6a300209e394c7647ec7412b557d1bb1d5e7b6834bc7af - languageName: node - linkType: hard - "@rjsf/validator-ajv8@npm:5.7.3": version: 5.7.3 resolution: "@rjsf/validator-ajv8@npm:5.7.3" @@ -14632,14 +14335,14 @@ __metadata: linkType: hard "@roadiehq/backstage-plugin-buildkite@npm:^2.0.8": - version: 2.1.9 - resolution: "@roadiehq/backstage-plugin-buildkite@npm:2.1.9" + version: 2.1.13 + resolution: "@roadiehq/backstage-plugin-buildkite@npm:2.1.13" dependencies: - "@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 + "@backstage/catalog-model": ^1.4.1 + "@backstage/core-components": ^0.13.3 + "@backstage/core-plugin-api": ^1.5.3 + "@backstage/plugin-catalog-react": ^1.8.0 + "@backstage/theme": ^0.4.1 "@material-ui/core": ^4.12.1 "@material-ui/icons": ^4.11.2 "@material-ui/lab": 4.0.0-alpha.57 @@ -14651,20 +14354,20 @@ __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: e7218a5c1abe34eac99840da194159ba9b779f9a447050f6e793dd38c104e502fc8d67e4986dd4d14fbe847d841c124e2029c86735411c25842de072d16b2033 + checksum: 03945723ee9f71717f7ea1ac0a240fb516b33740b86a11c0be0f22021bb0cfa5eec541b3cadc5e77efa9ef432c4e978885cd0124b8eabc74f410b6fbc7d55f91 languageName: node linkType: hard "@roadiehq/backstage-plugin-github-insights@npm:^2.0.5": - version: 2.3.12 - resolution: "@roadiehq/backstage-plugin-github-insights@npm:2.3.12" + version: 2.3.16 + resolution: "@roadiehq/backstage-plugin-github-insights@npm:2.3.16" dependencies: - "@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 + "@backstage/catalog-model": ^1.4.1 + "@backstage/core-components": ^0.13.3 + "@backstage/core-plugin-api": ^1.5.3 + "@backstage/integration-react": ^1.1.15 + "@backstage/plugin-catalog-react": ^1.8.0 + "@backstage/theme": ^0.4.1 "@date-io/core": 2.10.7 "@material-ui/core": ^4.11.0 "@material-ui/icons": ^4.9.1 @@ -14679,19 +14382,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: 4c2b14b43e0daa6aa17aef44b51c74c74a3aa41d48d50644cae58e5e9ae5fdf656d2b71aa7175a3c9c8269ac9cdacfa64c1339f212273849e83020342298ed8c + checksum: 31f857ea5992910a0ef94c53adbe14992aba53021a377123a2cd217a0537c9b310028626f27c97692ea2265ce1b95ea8c5f33605eac54dada3684c2c90333f3f languageName: node linkType: hard "@roadiehq/backstage-plugin-github-pull-requests@npm:^2.2.7": - version: 2.5.10 - resolution: "@roadiehq/backstage-plugin-github-pull-requests@npm:2.5.10" + version: 2.5.13 + resolution: "@roadiehq/backstage-plugin-github-pull-requests@npm:2.5.13" dependencies: - "@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 + "@backstage/catalog-model": ^1.4.0 + "@backstage/core-components": ^0.13.2 + "@backstage/core-plugin-api": ^1.5.2 + "@backstage/plugin-catalog-react": ^1.7.0 + "@backstage/plugin-home": ^0.5.3 "@material-ui/core": ^4.11.0 "@material-ui/icons": ^4.9.1 "@material-ui/lab": ^4.0.0-alpha.60 @@ -14708,19 +14411,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: 0f273ede63024635f850fc9df662941589f5f8848307507e3f6e376ea0bd9b7e17026e1182808d5c193be90ee9a2725c83a0850475547b364cd3d7cf35bf7b74 + checksum: 1af9997d26ee9dba046d71aa5415bde7e207c4118ca77e6e3e9623920ce7f6e314d8365fe2d1ef3eb1c279ac113653df903f1286005aba681faf75381a387189 languageName: node linkType: hard "@roadiehq/backstage-plugin-travis-ci@npm:^2.0.5": - version: 2.1.9 - resolution: "@roadiehq/backstage-plugin-travis-ci@npm:2.1.9" + version: 2.1.13 + resolution: "@roadiehq/backstage-plugin-travis-ci@npm:2.1.13" dependencies: - "@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 + "@backstage/catalog-model": ^1.4.1 + "@backstage/core-components": ^0.13.3 + "@backstage/core-plugin-api": ^1.5.3 + "@backstage/plugin-catalog-react": ^1.8.0 + "@backstage/theme": ^0.4.1 "@material-ui/core": ^4.11.3 "@material-ui/icons": ^4.11.2 "@material-ui/lab": 4.0.0-alpha.57 @@ -14734,7 +14437,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: 94b2f7ec47e026ac0e97fb00291b592826c0a3ef6444ea427b4d2e10eab4dfdb2d8f0e9461526bbad5351459ded6ac6e814aca5a0947d4b628f1344f4d3646a4 + checksum: c8ddeadcc5edec0b25276b65ddf7971943939eb2c82d363919c748b8a740ed53c2642bda6cb509d7fc8c02f002166abf8fc4cb7a2cfa83577e1139c5ba31841b languageName: node linkType: hard @@ -14788,8 +14491,8 @@ __metadata: linkType: hard "@rollup/plugin-yaml@npm:^4.0.0": - version: 4.1.0 - resolution: "@rollup/plugin-yaml@npm:4.1.0" + version: 4.1.1 + resolution: "@rollup/plugin-yaml@npm:4.1.1" dependencies: "@rollup/pluginutils": ^5.0.1 js-yaml: ^4.1.0 @@ -14799,7 +14502,7 @@ __metadata: peerDependenciesMeta: rollup: optional: true - checksum: e8dcfbb6032ebd493e3cf1f3fcc7ee7e50509e3848a283ab21c743ec59b65b587d3755f744c7135f49db97aee1fc7eee818375519f293e7227e278ccf9d8b3dc + checksum: 99c8f9d4a354056bec8a9398786777203d87db32db0cad681f65ee896cbbbb8a61ace0b1c3d801622782ccf28e56eac6cdde950541fb1f7b3e651ad9c705d5c3 languageName: node linkType: hard @@ -14842,6 +14545,15 @@ __metadata: languageName: node linkType: hard +"@rrweb/types@npm:^2.0.0-alpha.9": + version: 2.0.0-alpha.9 + resolution: "@rrweb/types@npm:2.0.0-alpha.9" + dependencies: + rrweb-snapshot: ^2.0.0-alpha.9 + checksum: adc6bc7a6e45294ae7b85a137ae6774a822f103f0a29ecf8d59b72c88b6ddfaedc5a16d71971c08a2ab25e3e3af89f9582d8508bcf6b33d97fc326cdf91a09b2 + languageName: node + linkType: hard + "@rushstack/node-core-library@npm:3.53.3": version: 3.53.3 resolution: "@rushstack/node-core-library@npm:3.53.3" @@ -14880,20 +14592,20 @@ __metadata: languageName: node linkType: hard -"@sagold/json-pointer@npm:^5.0.0": - version: 5.0.0 - resolution: "@sagold/json-pointer@npm:5.0.0" - checksum: 0a087ff25e28d0c49b56566a14d6186ae0ce9fe538569eb7756c1a70989f2794dbc6f0834b5d2f2a0a79b6f0e3096eb05558664d5ff038daba5a46cb5e752e1a +"@sagold/json-pointer@npm:^5.1.1": + version: 5.1.1 + resolution: "@sagold/json-pointer@npm:5.1.1" + checksum: d0aa16330997d479b8035f22cab3e2f63f3ae8d9e5ab1137746056581606baba47a7b15116a751c9ea430e1aba9ee7a5459a3ee352509a4afca109cce1dcd9e1 languageName: node linkType: hard -"@sagold/json-query@npm:^6.0.0": - version: 6.0.0 - resolution: "@sagold/json-query@npm:6.0.0" +"@sagold/json-query@npm:^6.1.0": + version: 6.1.1 + resolution: "@sagold/json-query@npm:6.1.1" dependencies: - "@sagold/json-pointer": ^5.0.0 - ebnf: ^1.9.0 - checksum: 56bb6151e6e6b1ef26bb03133b440e90d47c013529899e26cedb4c96f8a51f0115717ebab1355a8c3e6ea0c70e5ddaefc54c44330686ae3b2f8cb7d162011d73 + "@sagold/json-pointer": ^5.1.1 + ebnf: ^1.9.1 + checksum: bc9697ae45efce92600185491679379e44d494ed13fdb927984aaade40939e6ab2e6f982cf8b1b8b29ec80df560bab0052a86b349cc0071e0e5feb40c465ba54 languageName: node linkType: hard @@ -15015,22 +14727,484 @@ __metadata: languageName: node linkType: hard -"@smithy/protocol-http@npm:^1.0.1": - version: 1.0.1 - resolution: "@smithy/protocol-http@npm:1.0.1" +"@smithy/abort-controller@npm:^1.0.1, @smithy/abort-controller@npm:^1.0.2": + version: 1.0.2 + resolution: "@smithy/abort-controller@npm:1.0.2" dependencies: - "@smithy/types": ^1.0.0 + "@smithy/types": ^1.1.1 tslib: ^2.5.0 - checksum: ba9ac4880fed48eeea0813663c94c765fe5b900f2fdac4f5de6524306bbc6645829f48bc175d202076b83acaccf008ed77f4b5546a4c180315f253e22fe6c89f + checksum: 5d0c5b04636c1e27c812b3ac0f780602ff28ed60dbd5b9d39e9caa6f2e982b340efd3fea4d7e7b282451d1469ef6f9d5086e79a0945a078db2db7672dd174f49 languageName: node linkType: hard -"@smithy/types@npm:^1.0.0": - version: 1.0.0 - resolution: "@smithy/types@npm:1.0.0" +"@smithy/config-resolver@npm:^1.0.1, @smithy/config-resolver@npm:^1.0.2": + version: 1.0.2 + resolution: "@smithy/config-resolver@npm:1.0.2" + dependencies: + "@smithy/types": ^1.1.1 + "@smithy/util-config-provider": ^1.0.2 + "@smithy/util-middleware": ^1.0.2 + tslib: ^2.5.0 + checksum: 23efcb59d682b7ab05ec920c92d9e7fcecc58b9ab204a4de504da18ef0687c051b27acf9bcfc91969a160ea137d6f2f2091b4f3e31c659327784f95240ec0d13 + languageName: node + linkType: hard + +"@smithy/credential-provider-imds@npm:^1.0.1, @smithy/credential-provider-imds@npm:^1.0.2": + version: 1.0.2 + resolution: "@smithy/credential-provider-imds@npm:1.0.2" + dependencies: + "@smithy/node-config-provider": ^1.0.2 + "@smithy/property-provider": ^1.0.2 + "@smithy/types": ^1.1.1 + "@smithy/url-parser": ^1.0.2 + tslib: ^2.5.0 + checksum: 91b57891b68fd1e83b40d8bde72cbc38247982ba6eaaf32a80bdcccb1e30b42799ac7d8b50da55796ae873a95891b567298d5da41e1059150e240d075a82ee03 + languageName: node + linkType: hard + +"@smithy/eventstream-codec@npm:^1.0.2": + version: 1.0.2 + resolution: "@smithy/eventstream-codec@npm:1.0.2" + dependencies: + "@aws-crypto/crc32": 3.0.0 + "@smithy/types": ^1.1.1 + "@smithy/util-hex-encoding": ^1.0.2 + tslib: ^2.5.0 + checksum: 64e2f6e5b03595815a2b968938459db3df31498b2befa657b5acc55242c57da56825431465bac271344cecf68d1f31a54ed3477ebd7d775ad3791d7e48a2bc62 + languageName: node + linkType: hard + +"@smithy/eventstream-serde-browser@npm:^1.0.1": + version: 1.0.2 + resolution: "@smithy/eventstream-serde-browser@npm:1.0.2" + dependencies: + "@smithy/eventstream-serde-universal": ^1.0.2 + "@smithy/types": ^1.1.1 + tslib: ^2.5.0 + checksum: d2ece075bcd5ba64788f74078217504b31cddabbb84e7dd5ed17b358f9f184e5ae840d36460251f06d84da7c8be4d70b87e1386418857466a7d0600145e2012d + languageName: node + linkType: hard + +"@smithy/eventstream-serde-config-resolver@npm:^1.0.1": + version: 1.0.2 + resolution: "@smithy/eventstream-serde-config-resolver@npm:1.0.2" + dependencies: + "@smithy/types": ^1.1.1 + tslib: ^2.5.0 + checksum: ff6eeec4439eafe8fb4d1ded405b14a67f79b74af18091bd218392f8450f7b9565c419b82291a0032e1da067a28b74551995b18110422169dc86e01e0581d2dc + languageName: node + linkType: hard + +"@smithy/eventstream-serde-node@npm:^1.0.1": + version: 1.0.2 + resolution: "@smithy/eventstream-serde-node@npm:1.0.2" + dependencies: + "@smithy/eventstream-serde-universal": ^1.0.2 + "@smithy/types": ^1.1.1 + tslib: ^2.5.0 + checksum: 32b562735eaa59e7000d71887f9f6fc6c9986c595477619eae58830e8d720f4bdb8496d91f939bba6e933dda03ba2dde4fc03c67d090025c4b289c5851d7e8c1 + languageName: node + linkType: hard + +"@smithy/eventstream-serde-universal@npm:^1.0.2": + version: 1.0.2 + resolution: "@smithy/eventstream-serde-universal@npm:1.0.2" + dependencies: + "@smithy/eventstream-codec": ^1.0.2 + "@smithy/types": ^1.1.1 + tslib: ^2.5.0 + checksum: 24a40513b9384ecadb78618d672cc013d06d43c743e60cf7e397fa4e0ad7ce19e34281ddcf9527a3343409f21659f8a3bab26963cb47fc3557726cd40580973c + languageName: node + linkType: hard + +"@smithy/fetch-http-handler@npm:^1.0.1, @smithy/fetch-http-handler@npm:^1.0.2": + version: 1.0.2 + resolution: "@smithy/fetch-http-handler@npm:1.0.2" + dependencies: + "@smithy/protocol-http": ^1.1.1 + "@smithy/querystring-builder": ^1.0.2 + "@smithy/types": ^1.1.1 + "@smithy/util-base64": ^1.0.2 + tslib: ^2.5.0 + checksum: 62965f69ebcb7a7a67576d4ac909873080d0da33796f15ecf7b265e7f35e0d43e6d3cdf5edb53b9a51f97a88ee90777dd8a7a84ac8dd914cd3d4bcb1c6611506 + languageName: node + linkType: hard + +"@smithy/hash-node@npm:^1.0.1": + version: 1.0.2 + resolution: "@smithy/hash-node@npm:1.0.2" + dependencies: + "@smithy/types": ^1.1.1 + "@smithy/util-buffer-from": ^1.0.2 + "@smithy/util-utf8": ^1.0.2 + tslib: ^2.5.0 + checksum: 018ef3271c60e7c8df07c4b5f77b52010a8a6be53e9da3f7e361cda48a6df6f5a52870a7721110338725e83b88d5ef120c2312334b6618f3dfdf80d4e0725cab + languageName: node + linkType: hard + +"@smithy/invalid-dependency@npm:^1.0.1": + version: 1.0.2 + resolution: "@smithy/invalid-dependency@npm:1.0.2" + dependencies: + "@smithy/types": ^1.1.1 + tslib: ^2.5.0 + checksum: 51d4bfc25854789a312d87c9bfe1a919e8d7a96052d4010f411c0cb532673a8a3fff92f2d0cf18ccbd05f618f36bfc7fab61159878559ffdd7096de2bd749916 + languageName: node + linkType: hard + +"@smithy/is-array-buffer@npm:^1.0.1, @smithy/is-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "@smithy/is-array-buffer@npm:1.0.2" dependencies: tslib: ^2.5.0 - checksum: ec05163564af050088f3c21cb047640ca842bea645c2a73624475b486d5df8ad9c494bf683a498f4b467b84fab2817cc199893dfb5cee30dce1e0172ab38db00 + checksum: 811b100b809bc1730ed33231ae22afbce5ccc8d2d5db5c8e86b52db718d738283337a43f777397d1308c24243d0be3e3d862684e9be1dbdfb547a8d8399f0911 + languageName: node + linkType: hard + +"@smithy/md5-js@npm:^1.0.1": + version: 1.0.2 + resolution: "@smithy/md5-js@npm:1.0.2" + dependencies: + "@smithy/types": ^1.1.1 + "@smithy/util-utf8": ^1.0.2 + tslib: ^2.5.0 + checksum: 61913e2a6db50eeba87b1fc23a977d8266c4d19d4c52193ac4b2263eab4fed58c25b23baab514cab104aabdbe6437518f2e2f68146e400c7a760a881552f2da5 + languageName: node + linkType: hard + +"@smithy/middleware-content-length@npm:^1.0.1": + version: 1.0.2 + resolution: "@smithy/middleware-content-length@npm:1.0.2" + dependencies: + "@smithy/protocol-http": ^1.1.1 + "@smithy/types": ^1.1.1 + tslib: ^2.5.0 + checksum: 4b00aa741179152cbdc2aa1229077d0a39196f7ce916a11d121cfa160af380651e031f6a8e59193061bbca0baf5fff5f6010b1a998a6c0b03f228fa862625a8a + languageName: node + linkType: hard + +"@smithy/middleware-endpoint@npm:^1.0.2": + version: 1.0.3 + resolution: "@smithy/middleware-endpoint@npm:1.0.3" + dependencies: + "@smithy/middleware-serde": ^1.0.2 + "@smithy/types": ^1.1.1 + "@smithy/url-parser": ^1.0.2 + "@smithy/util-middleware": ^1.0.2 + tslib: ^2.5.0 + checksum: 8081b515955632828cdf6955368e46b5288f996fd6697dacf1d44eced488033f8f9d7a10e036fcebabc7f4e72dfcd69ab8ac76b4c17082b9b8326431441ef1a7 + languageName: node + linkType: hard + +"@smithy/middleware-retry@npm:^1.0.3": + version: 1.0.4 + resolution: "@smithy/middleware-retry@npm:1.0.4" + dependencies: + "@smithy/protocol-http": ^1.1.1 + "@smithy/service-error-classification": ^1.0.3 + "@smithy/types": ^1.1.1 + "@smithy/util-middleware": ^1.0.2 + "@smithy/util-retry": ^1.0.4 + tslib: ^2.5.0 + uuid: ^8.3.2 + checksum: 3ca5c4abe3cbfba1201a7777c0f41ae9df0985a1f155bab647cd88d86c8101f4de0bc118164a14d4ac8bd41d120d0c0f1b327b3512c341aeb06f60b0a32dc89d + languageName: node + linkType: hard + +"@smithy/middleware-serde@npm:^1.0.1, @smithy/middleware-serde@npm:^1.0.2": + version: 1.0.2 + resolution: "@smithy/middleware-serde@npm:1.0.2" + dependencies: + "@smithy/types": ^1.1.1 + tslib: ^2.5.0 + checksum: 563045c0ad6fd37548197a3844716e61bf969f4a7b3fbb6c6f0129d4745a0c373029acf069d142a59f1d22778e90f86869cd4ef3f9b297b04a23ef042c6c9c55 + languageName: node + linkType: hard + +"@smithy/middleware-stack@npm:^1.0.1, @smithy/middleware-stack@npm:^1.0.2": + version: 1.0.2 + resolution: "@smithy/middleware-stack@npm:1.0.2" + dependencies: + tslib: ^2.5.0 + checksum: 34794d1e6d8b5fd9be70d5d0137f09d8ec88942d054575e35dbf6407f2040c3d0d667d26ff01132c4c42933785127d12b6406a1802af65a779e44cbf38fc9fe2 + languageName: node + linkType: hard + +"@smithy/node-config-provider@npm:^1.0.1, @smithy/node-config-provider@npm:^1.0.2": + version: 1.0.2 + resolution: "@smithy/node-config-provider@npm:1.0.2" + dependencies: + "@smithy/property-provider": ^1.0.2 + "@smithy/shared-ini-file-loader": ^1.0.2 + "@smithy/types": ^1.1.1 + tslib: ^2.5.0 + checksum: 593bd5adf0177851a191849e68760f7ebde943db2613898ecda468b31c47442e5fd380fdd95fe95f912bd15fe48a28dbde3f352b49a8108fc34c630d7eb50843 + languageName: node + linkType: hard + +"@smithy/node-http-handler@npm:^1.0.2, @smithy/node-http-handler@npm:^1.0.3": + version: 1.0.3 + resolution: "@smithy/node-http-handler@npm:1.0.3" + dependencies: + "@smithy/abort-controller": ^1.0.2 + "@smithy/protocol-http": ^1.1.1 + "@smithy/querystring-builder": ^1.0.2 + "@smithy/types": ^1.1.1 + tslib: ^2.5.0 + checksum: 727e1391ccc409b3ed7d7a697bfcd29e4e9fbc81404665719c47c8143832ef8f65ea9f8f5d783ea1930fd56a0d45eaaa6a7a8db76da785ba73f0fd29276fbe11 + languageName: node + linkType: hard + +"@smithy/property-provider@npm:^1.0.1, @smithy/property-provider@npm:^1.0.2": + version: 1.0.2 + resolution: "@smithy/property-provider@npm:1.0.2" + dependencies: + "@smithy/types": ^1.1.1 + tslib: ^2.5.0 + checksum: 55d09de3dab2e5858b45f981c67ec1cf4e8fc28a758b9830fd0c5e04ca6e9d69f31e92c80fa4fba5d8eed4a60b4f95528d41f9a6c63e2ff0aad726d3c3b83636 + languageName: node + linkType: hard + +"@smithy/protocol-http@npm:^1.1.0, @smithy/protocol-http@npm:^1.1.1": + version: 1.1.1 + resolution: "@smithy/protocol-http@npm:1.1.1" + dependencies: + "@smithy/types": ^1.1.1 + tslib: ^2.5.0 + checksum: 6320e8b010d05a123efef19401b3e2fc0d03efa99082ad0d5fd41a3209a05332acb4b5ee21dcfd4764b6576019884602bd09ede0f7508540baf7ddb1f7eb49f5 + languageName: node + linkType: hard + +"@smithy/querystring-builder@npm:^1.0.2": + version: 1.0.2 + resolution: "@smithy/querystring-builder@npm:1.0.2" + dependencies: + "@smithy/types": ^1.1.1 + "@smithy/util-uri-escape": ^1.0.2 + tslib: ^2.5.0 + checksum: c0e6807a5b6c8438295ff8ebc11d9e2a28fe1434405688055a9dd4f4d354e49e14a4e459419af23f74aab0a281d58b70d29ae6777a42504a89d6f089b110ee52 + languageName: node + linkType: hard + +"@smithy/querystring-parser@npm:^1.0.2": + version: 1.0.2 + resolution: "@smithy/querystring-parser@npm:1.0.2" + dependencies: + "@smithy/types": ^1.1.1 + tslib: ^2.5.0 + checksum: 348672b1bc4193de23055421756c47619de5a2dea496dcf85a7744e9a8d5b26a4573dd731f9be936f7b1ba564676ecdf6d166638f9961bff497a2c554c97f01c + languageName: node + linkType: hard + +"@smithy/service-error-classification@npm:^1.0.3": + version: 1.0.3 + resolution: "@smithy/service-error-classification@npm:1.0.3" + checksum: adf840de7865606946a68f55ae4f35e03d96422be4df886309300944243510baf1bd84ef0786bcd8184094e97fafdff66a52b8ba669267391a8d8856093edde0 + languageName: node + linkType: hard + +"@smithy/shared-ini-file-loader@npm:^1.0.1, @smithy/shared-ini-file-loader@npm:^1.0.2": + version: 1.0.2 + resolution: "@smithy/shared-ini-file-loader@npm:1.0.2" + dependencies: + "@smithy/types": ^1.1.1 + tslib: ^2.5.0 + checksum: c9ba908a48c12a06bcbb872e2e0581805507efc9beffcdbad39baa09b22da63bbcbf538a95d099666869e080ad5556bfe2fab6d4e977a71163595f3f9c1d7edc + languageName: node + linkType: hard + +"@smithy/signature-v4@npm:^1.0.1": + version: 1.0.2 + resolution: "@smithy/signature-v4@npm:1.0.2" + dependencies: + "@smithy/eventstream-codec": ^1.0.2 + "@smithy/is-array-buffer": ^1.0.2 + "@smithy/types": ^1.1.1 + "@smithy/util-hex-encoding": ^1.0.2 + "@smithy/util-middleware": ^1.0.2 + "@smithy/util-uri-escape": ^1.0.2 + "@smithy/util-utf8": ^1.0.2 + tslib: ^2.5.0 + checksum: 3e3072ef956adbb9fe633f2e7c28fc9aaeddb7551c25a1af94214fd5e93617c2b0ede440c1cb61ee6268c502ce0418cf124fb21cb654605292a956ec3061d54a + languageName: node + linkType: hard + +"@smithy/smithy-client@npm:^1.0.3": + version: 1.0.4 + resolution: "@smithy/smithy-client@npm:1.0.4" + dependencies: + "@smithy/middleware-stack": ^1.0.2 + "@smithy/types": ^1.1.1 + "@smithy/util-stream": ^1.0.2 + tslib: ^2.5.0 + checksum: 468aa2f28b6addb82861a543a2c1639dcfd40e49d3344237bd56c2d061af5e2bc88972297a2b86de7bf31d7ee49589a4e5a577518ef747e2c7458ae20f7c3322 + languageName: node + linkType: hard + +"@smithy/types@npm:^1.1.0, @smithy/types@npm:^1.1.1": + version: 1.1.1 + resolution: "@smithy/types@npm:1.1.1" + dependencies: + tslib: ^2.5.0 + checksum: bf4b632eb7d668d8b99e99facf514d506868121e24c0adfaaa52f7da4056644fda5cb4324355f1dba16fc43a4c9af9ef7853db2a4895c3fca11ac98cf6d12234 + languageName: node + linkType: hard + +"@smithy/url-parser@npm:^1.0.1, @smithy/url-parser@npm:^1.0.2": + version: 1.0.2 + resolution: "@smithy/url-parser@npm:1.0.2" + dependencies: + "@smithy/querystring-parser": ^1.0.2 + "@smithy/types": ^1.1.1 + tslib: ^2.5.0 + checksum: 1844b23a30afb689bc9ec21238d9e6cc428e152201f8f30f252f6211ee8b74760d6568e42125b75bc4d110b15476eac22c204c7e36f6970d04e8afa5bc83ec1d + languageName: node + linkType: hard + +"@smithy/util-base64@npm:^1.0.1, @smithy/util-base64@npm:^1.0.2": + version: 1.0.2 + resolution: "@smithy/util-base64@npm:1.0.2" + dependencies: + "@smithy/util-buffer-from": ^1.0.2 + tslib: ^2.5.0 + checksum: 618d2952fbbc2cabcc6234c9aad612417a2a6f2fcac556a81b75f59d651e5daea7b2c1b44894b30611a425f32045a2dbe0623ebf57654e2068486d0d5a4b6ac7 + languageName: node + linkType: hard + +"@smithy/util-body-length-browser@npm:^1.0.1": + version: 1.0.2 + resolution: "@smithy/util-body-length-browser@npm:1.0.2" + dependencies: + tslib: ^2.5.0 + checksum: 3b0eacc3761625aaf5c384da8487a38663325385826ca9ac0fee17b7dff879a2cb3564a03d146e0b66ba6c503e1a07f159a9cccd4d7711b7063516acbfadb496 + languageName: node + linkType: hard + +"@smithy/util-body-length-node@npm:^1.0.1": + version: 1.0.2 + resolution: "@smithy/util-body-length-node@npm:1.0.2" + dependencies: + tslib: ^2.5.0 + checksum: 472371dc0a44a72333111758b8e60428cdca088cfe8a87c98413c81c4083e8988ae9d27f20fa2b0a8aed7fc26c0fec8e13c271494772c619f65f1a9f4e665eb3 + languageName: node + linkType: hard + +"@smithy/util-buffer-from@npm:^1.0.2": + version: 1.0.2 + resolution: "@smithy/util-buffer-from@npm:1.0.2" + dependencies: + "@smithy/is-array-buffer": ^1.0.2 + tslib: ^2.5.0 + checksum: ca4308ebc54f372777fc53b2782c752ebfdfe3934b1c4da935c78bb2f4f921d2071056edc644704ba894d363f85cc52fc07095d93eb6cbba510ba19a767be265 + languageName: node + linkType: hard + +"@smithy/util-config-provider@npm:^1.0.1, @smithy/util-config-provider@npm:^1.0.2": + version: 1.0.2 + resolution: "@smithy/util-config-provider@npm:1.0.2" + dependencies: + tslib: ^2.5.0 + checksum: 625c100b8af62cb08c167ebd23f77250e62b012e085ec8db8f06e3539fc516c340e14b480a09012192595121a58276dfc4370529237a58393185f3782ed0244a + languageName: node + linkType: hard + +"@smithy/util-defaults-mode-browser@npm:^1.0.1": + version: 1.0.2 + resolution: "@smithy/util-defaults-mode-browser@npm:1.0.2" + dependencies: + "@smithy/property-provider": ^1.0.2 + "@smithy/types": ^1.1.1 + bowser: ^2.11.0 + tslib: ^2.5.0 + checksum: ca03c9f596f9a26d392c289de7af7c7e7bdb12648b0339074bcbaddd762e58cb0cf127b8ed24e269bff004465702986b90d5151c502b418a615449171432024b + languageName: node + linkType: hard + +"@smithy/util-defaults-mode-node@npm:^1.0.1": + version: 1.0.2 + resolution: "@smithy/util-defaults-mode-node@npm:1.0.2" + dependencies: + "@smithy/config-resolver": ^1.0.2 + "@smithy/credential-provider-imds": ^1.0.2 + "@smithy/node-config-provider": ^1.0.2 + "@smithy/property-provider": ^1.0.2 + "@smithy/types": ^1.1.1 + tslib: ^2.5.0 + checksum: 805977758a5cabe3b8a4ee69f29cf6861356096239a60269eac6b83a4d11eddba030b0a5bcdb64add3d1301f611b21ed7d773e354cac8ff08b9d85ba47960252 + languageName: node + linkType: hard + +"@smithy/util-hex-encoding@npm:^1.0.1, @smithy/util-hex-encoding@npm:^1.0.2": + version: 1.0.2 + resolution: "@smithy/util-hex-encoding@npm:1.0.2" + dependencies: + tslib: ^2.5.0 + checksum: c70bfccb41ac702b514a2bc3d6f897a616efa5aba880a6c7a7501ea874bea3c2213868cb2c494c19f6a5190f3f9e4f7d73d9ab87addbd243435e287dc892dc30 + languageName: node + linkType: hard + +"@smithy/util-middleware@npm:^1.0.1, @smithy/util-middleware@npm:^1.0.2": + version: 1.0.2 + resolution: "@smithy/util-middleware@npm:1.0.2" + dependencies: + tslib: ^2.5.0 + checksum: 899aca62efab92ac1b55e801b2bb1a3e5eb1b74f52387abe40f902ec2e5f3afd36e2942f392ff1a562e69dd0de901b9aa20c55e4af2ff0e37e20c14b20940852 + languageName: node + linkType: hard + +"@smithy/util-retry@npm:^1.0.3, @smithy/util-retry@npm:^1.0.4": + version: 1.0.4 + resolution: "@smithy/util-retry@npm:1.0.4" + dependencies: + "@smithy/service-error-classification": ^1.0.3 + tslib: ^2.5.0 + checksum: b9a7e464d67b141a175f126b2a0fc5c91de387eb483b432db4769cee43bbbb546e4142711f293c3a04c82b6d56b676b7a2f7f7150e2c736a10d8e5df1ed63c04 + languageName: node + linkType: hard + +"@smithy/util-stream@npm:^1.0.1, @smithy/util-stream@npm:^1.0.2": + version: 1.0.2 + resolution: "@smithy/util-stream@npm:1.0.2" + dependencies: + "@smithy/fetch-http-handler": ^1.0.2 + "@smithy/node-http-handler": ^1.0.3 + "@smithy/types": ^1.1.1 + "@smithy/util-base64": ^1.0.2 + "@smithy/util-buffer-from": ^1.0.2 + "@smithy/util-hex-encoding": ^1.0.2 + "@smithy/util-utf8": ^1.0.2 + tslib: ^2.5.0 + checksum: ebea6886766da812434d4ca39ee201302096451441d577eb5efeb44ce3437f3828df435676a5e453f8eb535e19224bc3d21c2d3e6632a5eef68d932a37343476 + languageName: node + linkType: hard + +"@smithy/util-uri-escape@npm:^1.0.2": + version: 1.0.2 + resolution: "@smithy/util-uri-escape@npm:1.0.2" + dependencies: + tslib: ^2.5.0 + checksum: 6df9fb3aed8fc386c1b7ccb2b52268c2e67f3620a85fa42d35f964ae2c492b6395841a751a0ab4068825c7fd54a84933014571d6fbc12e9e1a711d0be3f2c747 + languageName: node + linkType: hard + +"@smithy/util-utf8@npm:^1.0.1, @smithy/util-utf8@npm:^1.0.2": + version: 1.0.2 + resolution: "@smithy/util-utf8@npm:1.0.2" + dependencies: + "@smithy/util-buffer-from": ^1.0.2 + tslib: ^2.5.0 + checksum: 64add10ac1bbeb0c96a1ba8b05886ae86cee589fd4cccb25276849748fed7035c54e64d40107f22a57ca9b4f9324afe4baf0007c67536d520c1b8378e1e6ec55 + languageName: node + linkType: hard + +"@smithy/util-waiter@npm:^1.0.1": + version: 1.0.2 + resolution: "@smithy/util-waiter@npm:1.0.2" + dependencies: + "@smithy/abort-controller": ^1.0.2 + "@smithy/types": ^1.1.1 + tslib: ^2.5.0 + checksum: 07b5284b2d10c4ddcfd61ce7bc2585f3ba401cf42dffa799317eb1895e9b061c54efd328e204c8e1881888018cd198889bccc86c6a707485fdec3738ed5b4aeb languageName: node linkType: hard @@ -15085,6 +15259,263 @@ __metadata: languageName: node linkType: hard +"@stoplight/better-ajv-errors@npm:1.0.3": + version: 1.0.3 + resolution: "@stoplight/better-ajv-errors@npm:1.0.3" + dependencies: + jsonpointer: ^5.0.0 + leven: ^3.1.0 + peerDependencies: + ajv: ">=8" + checksum: 642fe5636a72a86de72e4ffc7bbf07499fc09d8446b386f31d3667b07dd1849d921c38a74c109a9e2554d405b6e90dc150728a0c455bf93f158ff139e0538ddd + languageName: node + linkType: hard + +"@stoplight/json-ref-readers@npm:1.2.2": + version: 1.2.2 + resolution: "@stoplight/json-ref-readers@npm:1.2.2" + dependencies: + node-fetch: ^2.6.0 + tslib: ^1.14.1 + checksum: 31b0e78b119f7afd7dd84a4fbb0c4aaceeb6e889179e785ddb9880ee548d4d161dce5743451ef6dad4b7a902d9f0711909c87b63ad794bede234a144bcf2b2b4 + languageName: node + linkType: hard + +"@stoplight/json-ref-resolver@npm:~3.1.5": + version: 3.1.5 + resolution: "@stoplight/json-ref-resolver@npm:3.1.5" + dependencies: + "@stoplight/json": ^3.17.0 + "@stoplight/path": ^1.3.2 + "@stoplight/types": ^12.3.0 || ^13.0.0 + "@types/urijs": ^1.19.19 + dependency-graph: ~0.11.0 + fast-memoize: ^2.5.2 + immer: ^9.0.6 + lodash: ^4.17.21 + tslib: ^2.3.1 + urijs: ^1.19.11 + checksum: b2df82e899717ffa7bab9ec4c380f206511b3971d242724afd34e8b964e5aa7be2a52e32ba48d435548a9ac13a63a2271ca69182abec8506fc3bb3cc129f6380 + languageName: node + linkType: hard + +"@stoplight/json@npm:^3.17.0, @stoplight/json@npm:^3.17.1, @stoplight/json@npm:~3.21.0": + version: 3.21.0 + resolution: "@stoplight/json@npm:3.21.0" + dependencies: + "@stoplight/ordered-object-literal": ^1.0.3 + "@stoplight/path": ^1.3.2 + "@stoplight/types": ^13.6.0 + jsonc-parser: ~2.2.1 + lodash: ^4.17.21 + safe-stable-stringify: ^1.1 + checksum: 16fe56a6804cd47837bd82d85a8500c4226669558f3feda55d8fb0cd615ca2261622963700f04f049cf30a3a9764eb3c861516003d948743b6ae85dbbabf8a59 + languageName: node + linkType: hard + +"@stoplight/ordered-object-literal@npm:^1.0.1, @stoplight/ordered-object-literal@npm:^1.0.3": + version: 1.0.4 + resolution: "@stoplight/ordered-object-literal@npm:1.0.4" + checksum: 81afa24943880b0a213af3728a9fe0a28bd01d4840b9583d448f7823ced5b6e673628698b59d201cef50afebcbd89256e133714a174968d11b624d943e0c2c2f + languageName: node + linkType: hard + +"@stoplight/path@npm:1.3.2, @stoplight/path@npm:^1.3.2": + version: 1.3.2 + resolution: "@stoplight/path@npm:1.3.2" + checksum: 8a1143cef9edcf9fd8cb24ca3f250693d475ce1f635f0dc95e5b045aad303fbf4d702c939f0c4ed8d28a04208d1aa4471fb10912ef1e3a94a9e6810878a7cfbb + languageName: node + linkType: hard + +"@stoplight/spectral-core@npm:^1.15.1, @stoplight/spectral-core@npm:^1.18.0, @stoplight/spectral-core@npm:^1.7.0, @stoplight/spectral-core@npm:^1.8.0, @stoplight/spectral-core@npm:^1.8.1": + version: 1.18.3 + resolution: "@stoplight/spectral-core@npm:1.18.3" + dependencies: + "@stoplight/better-ajv-errors": 1.0.3 + "@stoplight/json": ~3.21.0 + "@stoplight/path": 1.3.2 + "@stoplight/spectral-parsers": ^1.0.0 + "@stoplight/spectral-ref-resolver": ^1.0.0 + "@stoplight/spectral-runtime": ^1.0.0 + "@stoplight/types": ~13.6.0 + "@types/es-aggregate-error": ^1.0.2 + "@types/json-schema": ^7.0.11 + ajv: ^8.6.0 + ajv-errors: ~3.0.0 + ajv-formats: ~2.1.0 + es-aggregate-error: ^1.0.7 + jsonpath-plus: 7.1.0 + lodash: ~4.17.21 + lodash.topath: ^4.5.2 + minimatch: 3.1.2 + nimma: 0.2.2 + pony-cause: ^1.0.0 + simple-eval: 1.0.0 + tslib: ^2.3.0 + checksum: 321d868a6c1e3d5f009d87d02651b423b5b6f5ef75a2ad1937b52b8ddc6e83dc3fe9618b00d7d92407e2eb3380b8409dc6ce98a8628d50ebd60d15dc8c15a7b8 + languageName: node + linkType: hard + +"@stoplight/spectral-formats@npm:^1.0.0, @stoplight/spectral-formats@npm:^1.2.0, @stoplight/spectral-formats@npm:^1.5.0": + version: 1.5.0 + resolution: "@stoplight/spectral-formats@npm:1.5.0" + dependencies: + "@stoplight/json": ^3.17.0 + "@stoplight/spectral-core": ^1.8.0 + "@types/json-schema": ^7.0.7 + tslib: ^2.3.1 + checksum: dc80c0ee37ff5708b2078aa588d3c8c895ba36b18e52f5813cd7f91d1a476629aa36f1ceaf62e8bd96987c0f7c51537bdb6780a08d32be982db230be5634c93e + languageName: node + linkType: hard + +"@stoplight/spectral-formatters@npm:^1.1.0": + version: 1.1.0 + resolution: "@stoplight/spectral-formatters@npm:1.1.0" + dependencies: + "@stoplight/path": ^1.3.2 + "@stoplight/spectral-core": ^1.15.1 + "@stoplight/spectral-runtime": ^1.1.0 + "@stoplight/types": ^13.15.0 + chalk: 4.1.2 + cliui: 7.0.4 + lodash: ^4.17.21 + strip-ansi: 6.0 + text-table: ^0.2.0 + tslib: ^2.5.0 + checksum: a72d9ecb423af1f911b654f48ae04c19f0707e8eb8542de57090299dbff19e58a1dff8f229614056fbf2b2f44636423cd9c980189c4cceb58961d84925d9ae7b + languageName: node + linkType: hard + +"@stoplight/spectral-functions@npm:^1.5.1, @stoplight/spectral-functions@npm:^1.6.1, @stoplight/spectral-functions@npm:^1.7.2": + version: 1.7.2 + resolution: "@stoplight/spectral-functions@npm:1.7.2" + dependencies: + "@stoplight/better-ajv-errors": 1.0.3 + "@stoplight/json": ^3.17.1 + "@stoplight/spectral-core": ^1.7.0 + "@stoplight/spectral-formats": ^1.0.0 + "@stoplight/spectral-runtime": ^1.1.0 + ajv: ^8.6.3 + ajv-draft-04: ~1.0.0 + ajv-errors: ~3.0.0 + ajv-formats: ~2.1.0 + lodash: ~4.17.21 + tslib: ^2.3.0 + checksum: f89d966d33dd484e5ea63a7971478d176c94215b4ffd2ef24eb8e507a2b60ed3bcfa391b9137793e939f3a10443914db6da62d081055fb8ba49d2d397f0d5907 + languageName: node + linkType: hard + +"@stoplight/spectral-parsers@npm:^1.0.0, @stoplight/spectral-parsers@npm:^1.0.2": + version: 1.0.3 + resolution: "@stoplight/spectral-parsers@npm:1.0.3" + dependencies: + "@stoplight/json": ~3.21.0 + "@stoplight/types": ^13.6.0 + "@stoplight/yaml": ~4.2.3 + tslib: ^2.3.1 + checksum: e1120e9ffc3db7f50573db08768c1206f5adc5fc503e77d3696e86e0765ce247c3c513ed12e53318b6aef0de33fc730aa78ccd542142d17d6bae01e23cba5879 + languageName: node + linkType: hard + +"@stoplight/spectral-ref-resolver@npm:^1.0.0": + version: 1.0.3 + resolution: "@stoplight/spectral-ref-resolver@npm:1.0.3" + dependencies: + "@stoplight/json-ref-readers": 1.2.2 + "@stoplight/json-ref-resolver": ~3.1.5 + "@stoplight/spectral-runtime": ^1.1.2 + dependency-graph: 0.11.0 + tslib: ^2.3.1 + checksum: efe93b1d1d32647b675c221530ecb20c55303dfcd1009efd8e036f6415eb1255fff19781358a74046160516a7b7088b6329885bb507a444c14db32fa23392bc9 + languageName: node + linkType: hard + +"@stoplight/spectral-rulesets@npm:^1.16.0": + version: 1.16.0 + resolution: "@stoplight/spectral-rulesets@npm:1.16.0" + dependencies: + "@asyncapi/specs": ^4.1.0 + "@stoplight/better-ajv-errors": 1.0.3 + "@stoplight/json": ^3.17.0 + "@stoplight/spectral-core": ^1.8.1 + "@stoplight/spectral-formats": ^1.5.0 + "@stoplight/spectral-functions": ^1.5.1 + "@stoplight/spectral-runtime": ^1.1.1 + "@stoplight/types": ^13.6.0 + "@types/json-schema": ^7.0.7 + ajv: ^8.8.2 + ajv-formats: ~2.1.0 + json-schema-traverse: ^1.0.0 + lodash: ~4.17.21 + tslib: ^2.3.0 + checksum: d6e47d4cb96c30d10571dcdbc24ed6bf53f09bdbccbd59bc9538ceb716d82eca68595780dd489f4ca5fcd4398c9adbd5dc931894f26040dcff33fd45b67463eb + languageName: node + linkType: hard + +"@stoplight/spectral-runtime@npm:^1.0.0, @stoplight/spectral-runtime@npm:^1.1.0, @stoplight/spectral-runtime@npm:^1.1.1, @stoplight/spectral-runtime@npm:^1.1.2": + version: 1.1.2 + resolution: "@stoplight/spectral-runtime@npm:1.1.2" + dependencies: + "@stoplight/json": ^3.17.0 + "@stoplight/path": ^1.3.2 + "@stoplight/types": ^12.3.0 + abort-controller: ^3.0.0 + lodash: ^4.17.21 + node-fetch: ^2.6.7 + tslib: ^2.3.1 + checksum: 35964a38f82384e6e0158988173a50ab7f473a2ed6e942073de023bd28fb696b5b913336a84d016b046346294be9cfa3a88c6a908c2622c0ceb36f16ca76e084 + languageName: node + linkType: hard + +"@stoplight/types@npm:^12.3.0": + version: 12.5.0 + resolution: "@stoplight/types@npm:12.5.0" + dependencies: + "@types/json-schema": ^7.0.4 + utility-types: ^3.10.0 + checksum: fe4a09df6e1c2f0cdb53f474b180cc7b8184e814e1ac4427d199642f10958335f597060530a908c0e5800ba2569d077afe124a51deaee466255ce942e1e03941 + languageName: node + linkType: hard + +"@stoplight/types@npm:^12.3.0 || ^13.0.0, @stoplight/types@npm:^13.0.0, @stoplight/types@npm:^13.14.0, @stoplight/types@npm:^13.15.0, @stoplight/types@npm:^13.6.0": + version: 13.15.0 + resolution: "@stoplight/types@npm:13.15.0" + dependencies: + "@types/json-schema": ^7.0.4 + utility-types: ^3.10.0 + checksum: 839f0bbedb791bd6792ef22b6a821ca504b14b705927f7c510c4cdcc591eddc8818c82b8857129501aa809d6f369b82e4487bfe18dfc5ce00e28317ecad2df9a + languageName: node + linkType: hard + +"@stoplight/types@npm:~13.6.0": + version: 13.6.0 + resolution: "@stoplight/types@npm:13.6.0" + dependencies: + "@types/json-schema": ^7.0.4 + utility-types: ^3.10.0 + checksum: 4cc81cf29decc0392f15c71b21fd11cd806bcf99168ae4509ed41c2b7dbcfbd5a83c7f9f320edb5a518cc483fd18dd8794c54b232fb6a6f2a7b6e9fb6ca20269 + languageName: node + linkType: hard + +"@stoplight/yaml-ast-parser@npm:0.0.48": + version: 0.0.48 + resolution: "@stoplight/yaml-ast-parser@npm:0.0.48" + checksum: 4e252a874636d4015ff78a638075c438ccf7b8b4b38e3df12f7b8381da2da0411dfff7a6de38354b8093a36a8911a9dd656264fb0d34453cb7bcf78a3627dfa0 + languageName: node + linkType: hard + +"@stoplight/yaml@npm:~4.2.3": + version: 4.2.3 + resolution: "@stoplight/yaml@npm:4.2.3" + dependencies: + "@stoplight/ordered-object-literal": ^1.0.1 + "@stoplight/types": ^13.0.0 + "@stoplight/yaml-ast-parser": 0.0.48 + tslib: ^2.2.0 + checksum: 8e61c4499c0849dafecf487e51e10d4d3e99192834dd87eba4b27c20c42d3fe1b5b022f9c3eb63b96249b46d7277ffb4ce37447d84d01d4768b88d142e3d0e15 + languageName: node + linkType: hard + "@sucrase/webpack-loader@npm:^2.0.0": version: 2.0.0 resolution: "@sucrase/webpack-loader@npm:2.0.0" @@ -15269,338 +15700,338 @@ __metadata: languageName: node linkType: hard -"@swagger-api/apidom-ast@npm:^0.69.3": - version: 0.69.3 - resolution: "@swagger-api/apidom-ast@npm:0.69.3" +"@swagger-api/apidom-ast@npm:^0.70.0": + version: 0.70.0 + resolution: "@swagger-api/apidom-ast@npm:0.70.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@types/ramda": =0.29.0 - ramda: =0.29.0 - ramda-adjunct: =4.0.0 - stampit: =4.3.2 - unraw: =2.0.1 - checksum: 5ca1609598694ccd295f3c80316bf54fa73ade3d38c5db8c3d00a5d6300c98d9a585f3f8c12c6935ec32fc70d08d53cdee4db59896a3874119d8cb85d43cc662 + "@types/ramda": ~0.29.1 + ramda: ~0.29.0 + ramda-adjunct: ^4.0.0 + stampit: ^4.3.2 + unraw: ^2.0.1 + checksum: f1dfd5eae236ee42880dd474943d4a6deb04c7c1bd72f7bc7c30b8d348455b8cbd1c56a07d4417714b5221d3473469a1edcfcab869838987cc91332157561fd3 languageName: node linkType: hard -"@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" +"@swagger-api/apidom-core@npm:>=0.70.0 <1.0.0, @swagger-api/apidom-core@npm:^0.70.0": + version: 0.70.0 + resolution: "@swagger-api/apidom-core@npm:0.70.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-ast": ^0.69.3 - "@types/ramda": =0.29.0 - minim: =0.23.8 - ramda: =0.29.0 - ramda-adjunct: =4.0.0 - short-unique-id: =4.4.4 - stampit: =4.3.2 - checksum: 2063c7822abb57176c379c3797c7dddeab673deaf0cddf5138ce308893eec2cb7121a45eb16c615e359b6585f0d2166d6345754654a8771b78326eb96d4ccd97 + "@swagger-api/apidom-ast": ^0.70.0 + "@types/ramda": ~0.29.1 + minim: ~0.23.8 + ramda: ~0.29.0 + ramda-adjunct: ^4.0.0 + short-unique-id: ^4.4.4 + stampit: ^4.3.2 + checksum: 1db75c4e62ecaef9e788919c808dbd6f1c38781e4529639e4b10a2a8325677c335f4f1f650b9e581a6736dbccb6c0035c664145d6f6a39e954f8eb699d51553a languageName: node linkType: hard -"@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" +"@swagger-api/apidom-json-pointer@npm:>=0.70.0 <1.0.0, @swagger-api/apidom-json-pointer@npm:^0.70.0": + version: 0.70.0 + resolution: "@swagger-api/apidom-json-pointer@npm:0.70.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-core": ^0.69.3 - "@types/ramda": =0.29.0 - ramda: =0.29.0 - ramda-adjunct: =4.0.0 - checksum: 2d826944a2a9c9368a4c7723a246dea2a0a8178a19a9e234c762efa5495f9cade14f39fd9fb5e03ba00b7c8d3042ba6c5462c7c56aba511913b79e42e6315172 + "@swagger-api/apidom-core": ^0.70.0 + "@types/ramda": ~0.29.1 + ramda: ~0.29.0 + ramda-adjunct: ^4.0.0 + checksum: dfa3b49e454d78d7ec5281c59537bfc2e99ba9b5fa1875cd5d600c2499298742c6a9e41e415937c2de99661f6cd27b7dc5b9900b75dc042e96e506266f409860 languageName: node linkType: hard -"@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" +"@swagger-api/apidom-ns-api-design-systems@npm:^0.70.0": + version: 0.70.0 + resolution: "@swagger-api/apidom-ns-api-design-systems@npm:0.70.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@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: a84458484698817302257664615f45984878fa1845f6861c0ee045166afcf1e573697ae1d10452b98e4fd4ae183b07a3808388acfa9780c06ff42f1ae7494c01 + "@swagger-api/apidom-core": ^0.70.0 + "@swagger-api/apidom-ns-openapi-3-1": ^0.70.0 + "@types/ramda": ~0.29.1 + ramda: ~0.29.0 + ramda-adjunct: ^4.0.0 + stampit: ^4.3.2 + checksum: 8b08d5d99a0ff6497a5e3e093daaa9e47d79c2c216ce5397992348438b8ab4a53b789b31caf11a71855496bdb379c5d159cbc3c05e269ba97a086f3fddaa390c languageName: node linkType: hard -"@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" +"@swagger-api/apidom-ns-asyncapi-2@npm:^0.70.0": + version: 0.70.0 + resolution: "@swagger-api/apidom-ns-asyncapi-2@npm:0.70.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@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: 179a1b031141e958f56e468125a620fc57212939aa38464b775a922183fbaafbda9aaad1a45b38589db5857c6ec41ebc02eb261fe305963030e69dbf18fdb26c + "@swagger-api/apidom-core": ^0.70.0 + "@swagger-api/apidom-ns-json-schema-draft-7": ^0.70.0 + "@types/ramda": ~0.29.1 + ramda: ~0.29.0 + ramda-adjunct: ^4.0.0 + stampit: ^4.3.2 + checksum: d2d38354132b7894427222b5dbc924c9a36966795710cede1010496b2a3649362c110b57730e8ebea93a662d442fe29c2adc174e27b91f9056189604c2953e8b languageName: node linkType: hard -"@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" +"@swagger-api/apidom-ns-json-schema-draft-4@npm:^0.70.0": + version: 0.70.0 + resolution: "@swagger-api/apidom-ns-json-schema-draft-4@npm:0.70.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@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: baffa7620cdf3758223c0d23ec9b6adcbf71a3cd1c52a9be89c4508428ed07a237091e45d92d5e32dad677133e989dcc9bf9e14ac31bae39eebb1402051ecc25 + "@swagger-api/apidom-core": ^0.70.0 + "@types/ramda": ~0.29.1 + ramda: ~0.29.0 + ramda-adjunct: ^4.0.0 + stampit: ^4.3.2 + checksum: b7289bba4712ea601f6874d052172218b853a14868b603414018860a203bdcd7b12944920e790db04720d7b6117d0a8859d583e6f0ec66bf525475b91ac5691c languageName: node linkType: hard -"@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" +"@swagger-api/apidom-ns-json-schema-draft-6@npm:^0.70.0": + version: 0.70.0 + resolution: "@swagger-api/apidom-ns-json-schema-draft-6@npm:0.70.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@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: 08b2ddc052cffd96a3bdd55aa013bb660faa164e8796773ca49af7003f31f160dcb3942ff2e2bc78b592c34cbdce4980f0f4cb52d5ef8d4b0cbc7547f15fa181 + "@swagger-api/apidom-core": ^0.70.0 + "@swagger-api/apidom-ns-json-schema-draft-4": ^0.70.0 + "@types/ramda": ~0.29.1 + ramda: ~0.29.0 + ramda-adjunct: ^4.0.0 + stampit: ^4.3.2 + checksum: 1368fe2906aca8766265f95f8847b7f49b17ecd973ef8126ad7f24636f76cec8a2961cdac846548dbccef8202a94354b8ce5358e3b76dedc625bb23b63169fd0 languageName: node linkType: hard -"@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" +"@swagger-api/apidom-ns-json-schema-draft-7@npm:^0.70.0": + version: 0.70.0 + resolution: "@swagger-api/apidom-ns-json-schema-draft-7@npm:0.70.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@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: f1f83fc5530847f971cccb7c1295474e6e85c3e089563616b71f13dd0782fbdf9ee36f4a2b72bd661ac027003bdfed970cd5662183e313ce46e7b82881f27131 + "@swagger-api/apidom-core": ^0.70.0 + "@swagger-api/apidom-ns-json-schema-draft-6": ^0.70.0 + "@types/ramda": ~0.29.1 + ramda: ~0.29.0 + ramda-adjunct: ^4.0.0 + stampit: ^4.3.2 + checksum: 0c54517aad52db2661dc083fc9593f15f57bc99f36ed601c5a1162b71010397c8d6065650959a7fb72ec4b5a06f052140c642d126e01a2061dd0d08972c68af4 languageName: node linkType: hard -"@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" +"@swagger-api/apidom-ns-openapi-3-0@npm:^0.70.0": + version: 0.70.0 + resolution: "@swagger-api/apidom-ns-openapi-3-0@npm:0.70.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@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: e8f054f1b881a084298768db0b9302656782e94ed93a40345e7bfd994bf080c9f04ba9df7f42f70d1ea1127b34e7d212fddb21e8d47fe9932749895293df0ab1 + "@swagger-api/apidom-core": ^0.70.0 + "@swagger-api/apidom-ns-json-schema-draft-4": ^0.70.0 + "@types/ramda": ~0.29.1 + ramda: ~0.29.0 + ramda-adjunct: ^4.0.0 + stampit: ^4.3.2 + checksum: 89140a077fc90612f0bd89106d9828e65ac9637d303d142388ac566e7d5b1496be0480257a268bdc3005ab603eb7af40a3368cd6c6bbb824fba112c665b1f58c languageName: node linkType: hard -"@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" +"@swagger-api/apidom-ns-openapi-3-1@npm:>=0.70.0 <1.0.0, @swagger-api/apidom-ns-openapi-3-1@npm:^0.70.0": + version: 0.70.0 + resolution: "@swagger-api/apidom-ns-openapi-3-1@npm:0.70.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@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: ea781604f6ca11c1e58e7db1f060c334e9402e52e3bb410b30b1d22a08d524a23681b999e9a27e89365c6f4f12a70ee73fc3d113b23c5b0ce78a1900b35caa37 + "@swagger-api/apidom-core": ^0.70.0 + "@swagger-api/apidom-ns-openapi-3-0": ^0.70.0 + "@types/ramda": ~0.29.1 + ramda: ~0.29.0 + ramda-adjunct: ^4.0.0 + stampit: ^4.3.2 + checksum: e4fd4a24fc92f753e435ef179899d27732f10065cb5c2a89b66149778bd3fa6132c2456da04a14d5441bcf4b1bb41ed86233ac981a6ae5e9f79094ca19f1598c languageName: node linkType: hard -"@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" +"@swagger-api/apidom-parser-adapter-api-design-systems-json@npm:^0.70.0": + version: 0.70.0 + resolution: "@swagger-api/apidom-parser-adapter-api-design-systems-json@npm:0.70.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@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 + "@swagger-api/apidom-core": ^0.70.0 + "@swagger-api/apidom-ns-api-design-systems": ^0.70.0 + "@swagger-api/apidom-parser-adapter-json": ^0.70.0 + "@types/ramda": ~0.29.1 + ramda: ~0.29.0 + ramda-adjunct: ^4.0.0 + checksum: 3bcaefa2f890f5f0783ccaff3c88da0c9eeff549182a34d74dcc4e91a14c0a36f11eafd7950141d9525295856ea68f44dded7b7d758114a9a9fa66e3f6d86984 languageName: node linkType: hard -"@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" +"@swagger-api/apidom-parser-adapter-api-design-systems-yaml@npm:^0.70.0": + version: 0.70.0 + resolution: "@swagger-api/apidom-parser-adapter-api-design-systems-yaml@npm:0.70.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@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 + "@swagger-api/apidom-core": ^0.70.0 + "@swagger-api/apidom-ns-api-design-systems": ^0.70.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.70.0 + "@types/ramda": ~0.29.1 + ramda: ~0.29.0 + ramda-adjunct: ^4.0.0 + checksum: c4b06f70be760f7e840d20032a582abe55a9d06ba810ab2b5d0f71bdfd39c46fe1ac2691155731821fbc7ffd1c2fa135331151c5bfdaa73850ab2fe352c00f13 languageName: node linkType: hard -"@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" +"@swagger-api/apidom-parser-adapter-asyncapi-json-2@npm:^0.70.0": + version: 0.70.0 + resolution: "@swagger-api/apidom-parser-adapter-asyncapi-json-2@npm:0.70.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@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 + "@swagger-api/apidom-core": ^0.70.0 + "@swagger-api/apidom-ns-asyncapi-2": ^0.70.0 + "@swagger-api/apidom-parser-adapter-json": ^0.70.0 + "@types/ramda": ~0.29.1 + ramda: ~0.29.0 + ramda-adjunct: ^4.0.0 + checksum: 06c1c3bc9d29644476b082652021e1d81b448a516a826e867c13b55b229b503d618ad2cc63bfb9a544656e1b098197e1cda89025a6c0f63c3617ffc04bc51c40 languageName: node linkType: hard -"@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" +"@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@npm:^0.70.0": + version: 0.70.0 + resolution: "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2@npm:0.70.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@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 + "@swagger-api/apidom-core": ^0.70.0 + "@swagger-api/apidom-ns-asyncapi-2": ^0.70.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.70.0 + "@types/ramda": ~0.29.1 + ramda: ~0.29.0 + ramda-adjunct: ^4.0.0 + checksum: ec71cdbc0701d62b6a15c6ab9278dfc1bf1e40ef4cbf22acc0a9fb9c3b624a8b80fe0670f61e6729989c4a2e5ca5a65c03cb9cee318494eb0f1eaa6b84ce3fbe languageName: node linkType: hard -"@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" +"@swagger-api/apidom-parser-adapter-json@npm:^0.70.0": + version: 0.70.0 + resolution: "@swagger-api/apidom-parser-adapter-json@npm:0.70.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-ast": ^0.69.3 - "@swagger-api/apidom-core": ^0.69.3 - "@types/ramda": =0.29.0 + "@swagger-api/apidom-ast": ^0.70.0 + "@swagger-api/apidom-core": ^0.70.0 + "@types/ramda": ~0.29.1 node-gyp: latest - ramda: =0.29.0 - ramda-adjunct: =4.0.0 - stampit: =4.3.2 + 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: 50515c2de8cd7a2a34c38410e42d6de68ff872104cd4729efd7ccb1bdd2d0bb452bf7c419e57ee968c32cdf4a9fb29b8a4baa188e986f8032807fc3bce9d6511 + checksum: ca256e274eeded6c64985d8b3c12ebeb94849440b58513b4e0fb20a66a1b51961b76b343f3e71b2e0e9f91fedf1c62542f52a3fa9674b62b86fdd5584f18f254 languageName: node linkType: hard -"@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" +"@swagger-api/apidom-parser-adapter-openapi-json-3-0@npm:^0.70.0": + version: 0.70.0 + resolution: "@swagger-api/apidom-parser-adapter-openapi-json-3-0@npm:0.70.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@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 + "@swagger-api/apidom-core": ^0.70.0 + "@swagger-api/apidom-ns-openapi-3-0": ^0.70.0 + "@swagger-api/apidom-parser-adapter-json": ^0.70.0 + "@types/ramda": ~0.29.1 + ramda: ~0.29.0 + ramda-adjunct: ^4.0.0 + checksum: 6c97390eda94565545cee33d6f39b2131c3ffd7331a37b5a5164bd6417bc2bcf5e52345d335c025ea3cbcb8d76b6c5f95cb49520291f9c54fd6c3e4b979307ec languageName: node linkType: hard -"@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" +"@swagger-api/apidom-parser-adapter-openapi-json-3-1@npm:^0.70.0": + version: 0.70.0 + resolution: "@swagger-api/apidom-parser-adapter-openapi-json-3-1@npm:0.70.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@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 + "@swagger-api/apidom-core": ^0.70.0 + "@swagger-api/apidom-ns-openapi-3-1": ^0.70.0 + "@swagger-api/apidom-parser-adapter-json": ^0.70.0 + "@types/ramda": ~0.29.1 + ramda: ~0.29.0 + ramda-adjunct: ^4.0.0 + checksum: b3051e10683fa89c34f4cb415f01b16c0dbc9fb1d855bcb5d0737b2a46f7b3b4f9799597c69a4fec8b547bfb2802348f38675c658d35fee4b3016ea6e73c2b95 languageName: node linkType: hard -"@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" +"@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@npm:^0.70.0": + version: 0.70.0 + resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0@npm:0.70.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@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 + "@swagger-api/apidom-core": ^0.70.0 + "@swagger-api/apidom-ns-openapi-3-0": ^0.70.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.70.0 + "@types/ramda": ~0.29.1 + ramda: ~0.29.0 + ramda-adjunct: ^4.0.0 + checksum: 1cd68a65e21eb1df397093d56ff39344cb6d1812b9c498f7142719efb5f2e7446e3288ea7f255b3c33cddec4b4ad75f04b1b9333e9816f492af5e9d96b771561 languageName: node linkType: hard -"@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" +"@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@npm:^0.70.0": + version: 0.70.0 + resolution: "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1@npm:0.70.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@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 + "@swagger-api/apidom-core": ^0.70.0 + "@swagger-api/apidom-ns-openapi-3-1": ^0.70.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.70.0 + "@types/ramda": ~0.29.1 + ramda: ~0.29.0 + ramda-adjunct: ^4.0.0 + checksum: 15ff89007ada9b38d88321aa4fddd5741d88095888e37bacb1feb31ecd1a112878e73027f3d158b9ba2a77279751dcf1a64dc8f8d56fb45c0f6c58196ef9c64a languageName: node linkType: hard -"@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" +"@swagger-api/apidom-parser-adapter-yaml-1-2@npm:^0.70.0": + version: 0.70.0 + resolution: "@swagger-api/apidom-parser-adapter-yaml-1-2@npm:0.70.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@swagger-api/apidom-ast": ^0.69.3 - "@swagger-api/apidom-core": ^0.69.3 - "@types/ramda": =0.29.0 + "@swagger-api/apidom-ast": ^0.70.0 + "@swagger-api/apidom-core": ^0.70.0 + "@types/ramda": ~0.29.1 node-gyp: latest - ramda: =0.29.0 - ramda-adjunct: =4.0.0 - stampit: =4.3.2 + 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: 4693c8b429bb1ef102286a7c567c5945e03bb81cde98ed37973a80d577c1b50f23f9029b5d0046ab1eabacd2efb7f680aeb920eed324f802bff1fd0e09631051 + checksum: 9f63b3053d1853fb742847171bd1eb69163f665bcd080018c283bbd8355058eb96f5ed0b2216d3c9c934e14c9dcd5202f921d033d6d240d37edaade13c1008cd languageName: node linkType: hard -"@swagger-api/apidom-reference@npm:>=0.69.3 <1.0.0": - version: 0.69.3 - resolution: "@swagger-api/apidom-reference@npm:0.69.3" +"@swagger-api/apidom-reference@npm:>=0.70.0 <1.0.0": + version: 0.70.0 + resolution: "@swagger-api/apidom-reference@npm:0.70.0" dependencies: "@babel/runtime-corejs3": ^7.20.7 - "@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.29.0 - ramda-adjunct: =4.0.0 - stampit: =4.3.2 + "@swagger-api/apidom-core": ^0.70.0 + "@swagger-api/apidom-json-pointer": ^0.70.0 + "@swagger-api/apidom-ns-asyncapi-2": ^0.70.0 + "@swagger-api/apidom-ns-openapi-3-0": ^0.70.0 + "@swagger-api/apidom-ns-openapi-3-1": ^0.70.0 + "@swagger-api/apidom-parser-adapter-api-design-systems-json": ^0.70.0 + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": ^0.70.0 + "@swagger-api/apidom-parser-adapter-asyncapi-json-2": ^0.70.0 + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": ^0.70.0 + "@swagger-api/apidom-parser-adapter-json": ^0.70.0 + "@swagger-api/apidom-parser-adapter-openapi-json-3-0": ^0.70.0 + "@swagger-api/apidom-parser-adapter-openapi-json-3-1": ^0.70.0 + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": ^0.70.0 + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": ^0.70.0 + "@swagger-api/apidom-parser-adapter-yaml-1-2": ^0.70.0 + "@types/ramda": ~0.29.1 + axios: ^1.4.0 + minimatch: ^7.4.3 + process: ^0.11.10 + ramda: ~0.29.0 + ramda-adjunct: ^4.0.0 + stampit: ^4.3.2 dependenciesMeta: "@swagger-api/apidom-json-pointer": optional: true @@ -15630,94 +16061,94 @@ __metadata: optional: true "@swagger-api/apidom-parser-adapter-yaml-1-2": optional: true - checksum: 7fcc0a2dba562f8c937e4895f2f0337346ce71147622388fff34480fede4cf04448de94c9ace5be536cb19f6741a52047a9da18ab1ce3abfb3229cebe49f3417 + checksum: ea8de1fa634f4f6092da5a19c015e64a7ffe45097e580dedfe1941b931a7352b3cb07410b5c83396ab10ff22fef4ad6a631a42517677e68824dc883270218ed7 languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.62": - version: 1.3.62 - resolution: "@swc/core-darwin-arm64@npm:1.3.62" +"@swc/core-darwin-arm64@npm:1.3.68": + version: 1.3.68 + resolution: "@swc/core-darwin-arm64@npm:1.3.68" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.62": - version: 1.3.62 - resolution: "@swc/core-darwin-x64@npm:1.3.62" +"@swc/core-darwin-x64@npm:1.3.68": + version: 1.3.68 + resolution: "@swc/core-darwin-x64@npm:1.3.68" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.62": - version: 1.3.62 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.62" +"@swc/core-linux-arm-gnueabihf@npm:1.3.68": + version: 1.3.68 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.68" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.62": - version: 1.3.62 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.62" +"@swc/core-linux-arm64-gnu@npm:1.3.68": + version: 1.3.68 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.68" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.62": - version: 1.3.62 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.62" +"@swc/core-linux-arm64-musl@npm:1.3.68": + version: 1.3.68 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.68" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.62": - version: 1.3.62 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.62" +"@swc/core-linux-x64-gnu@npm:1.3.68": + version: 1.3.68 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.68" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.62": - version: 1.3.62 - resolution: "@swc/core-linux-x64-musl@npm:1.3.62" +"@swc/core-linux-x64-musl@npm:1.3.68": + version: 1.3.68 + resolution: "@swc/core-linux-x64-musl@npm:1.3.68" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.62": - version: 1.3.62 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.62" +"@swc/core-win32-arm64-msvc@npm:1.3.68": + version: 1.3.68 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.68" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.62": - version: 1.3.62 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.62" +"@swc/core-win32-ia32-msvc@npm:1.3.68": + version: 1.3.68 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.68" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.62": - version: 1.3.62 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.62" +"@swc/core-win32-x64-msvc@npm:1.3.68": + version: 1.3.68 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.68" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.46": - version: 1.3.62 - resolution: "@swc/core@npm:1.3.62" + version: 1.3.68 + resolution: "@swc/core@npm:1.3.68" dependencies: - "@swc/core-darwin-arm64": 1.3.62 - "@swc/core-darwin-x64": 1.3.62 - "@swc/core-linux-arm-gnueabihf": 1.3.62 - "@swc/core-linux-arm64-gnu": 1.3.62 - "@swc/core-linux-arm64-musl": 1.3.62 - "@swc/core-linux-x64-gnu": 1.3.62 - "@swc/core-linux-x64-musl": 1.3.62 - "@swc/core-win32-arm64-msvc": 1.3.62 - "@swc/core-win32-ia32-msvc": 1.3.62 - "@swc/core-win32-x64-msvc": 1.3.62 + "@swc/core-darwin-arm64": 1.3.68 + "@swc/core-darwin-x64": 1.3.68 + "@swc/core-linux-arm-gnueabihf": 1.3.68 + "@swc/core-linux-arm64-gnu": 1.3.68 + "@swc/core-linux-arm64-musl": 1.3.68 + "@swc/core-linux-x64-gnu": 1.3.68 + "@swc/core-linux-x64-musl": 1.3.68 + "@swc/core-win32-arm64-msvc": 1.3.68 + "@swc/core-win32-ia32-msvc": 1.3.68 + "@swc/core-win32-x64-msvc": 1.3.68 peerDependencies: "@swc/helpers": ^0.5.0 dependenciesMeta: @@ -15744,7 +16175,7 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: a7a0d9ffdb8a2b0050e0ff89fdb86fe189d9bcb7f91cb6847f1bfe3e2b520a87ea2e83692dfd80b6d541fb5addb2194769484516b8ca6d3c62ad80f1c79a9368 + checksum: f56ad1d4cb91f7cc1cb5d4b9894bbb528da0b2eabc98984581f5b3f3187cf2c0d512003880f6ff7a3f6d215b7a3dcbf5a9c45e8a428ac2d711941027c0151d89 languageName: node linkType: hard @@ -15778,18 +16209,18 @@ __metadata: languageName: node linkType: hard -"@tanstack/query-core@npm:4.29.11": - version: 4.29.11 - resolution: "@tanstack/query-core@npm:4.29.11" - checksum: 2a17223f34e99e17d564a15206668eb79324da72e630a47cf41690f92fb091a8669bdc89e9ab1b0d8f0e3e8f579529cfb0aa6f10b4fc58ea81cc7e5caede9229 +"@tanstack/query-core@npm:4.29.19": + version: 4.29.19 + resolution: "@tanstack/query-core@npm:4.29.19" + checksum: 91a79dbebebc139d118542a5fe83fb54a6f6448bbe1563db1a0bed0c6d44e1d023613efde3c4ac747c72d067110013ac56f90611bf8affc390eda1ac3f99066e languageName: node linkType: hard "@tanstack/react-query@npm:^4.1.3": - version: 4.29.12 - resolution: "@tanstack/react-query@npm:4.29.12" + version: 4.29.19 + resolution: "@tanstack/react-query@npm:4.29.19" dependencies: - "@tanstack/query-core": 4.29.11 + "@tanstack/query-core": 4.29.19 use-sync-external-store: ^1.2.0 peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -15800,7 +16231,7 @@ __metadata: optional: true react-native: optional: true - checksum: aea231af648688c5eafdbbda0667034221cca8b77e00690ab54950b7cc0296d14646931aee44fc5f18d5ce4d683b5d234b053eed5c0a5c340bbbacdab873a70b + checksum: 2780ac35b4d1dabcd3e708b95891376e7e609109270d40442b33f4747c508c23e46bcadc692f997f81d38f62b5ab31f8e42bc9a785dfa4afe0c390adb6f37e52 languageName: node linkType: hard @@ -15853,24 +16284,24 @@ __metadata: linkType: hard "@testing-library/dom@npm:^8.0.0, @testing-library/dom@npm:^8.1.0": - version: 8.20.0 - resolution: "@testing-library/dom@npm:8.20.0" + version: 8.20.1 + resolution: "@testing-library/dom@npm:8.20.1" dependencies: "@babel/code-frame": ^7.10.4 "@babel/runtime": ^7.12.5 "@types/aria-query": ^5.0.1 - aria-query: ^5.0.0 + aria-query: 5.1.3 chalk: ^4.1.0 dom-accessibility-api: ^0.5.9 - lz-string: ^1.4.4 + lz-string: ^1.5.0 pretty-format: ^27.0.2 - checksum: 1e599129a2fe91959ce80900a0a4897232b89e2a8e22c1f5950c36d39c97629ea86b4986b60b173b5525a05de33fde1e35836ea597b03de78cc51b122835c6f0 + checksum: 06fc8dc67849aadb726cbbad0e7546afdf8923bd39acb64c576d706249bd7d0d05f08e08a31913fb621162e3b9c2bd0dce15964437f030f9fa4476326fdd3007 languageName: node linkType: hard "@testing-library/jest-dom@npm:^5.10.1, @testing-library/jest-dom@npm:^5.16.4, @testing-library/jest-dom@npm:^5.16.5": - version: 5.16.5 - resolution: "@testing-library/jest-dom@npm:5.16.5" + version: 5.17.0 + resolution: "@testing-library/jest-dom@npm:5.17.0" dependencies: "@adobe/css-tools": ^4.0.1 "@babel/runtime": ^7.9.2 @@ -15881,7 +16312,7 @@ __metadata: dom-accessibility-api: ^0.5.6 lodash: ^4.17.15 redent: ^3.0.0 - checksum: 94911f901a8031f3e489d04ac057cb5373621230f5d92bed80e514e24b069fb58a3166d1dd86963e55f078a1bd999da595e2ab96ed95f452d477e272937d792a + checksum: 9f28dbca8b50d7c306aae40c3aa8e06f0e115f740360004bd87d57f95acf7ab4b4f4122a7399a76dbf2bdaaafb15c99cc137fdcb0ae457a92e2de0f3fbf9b03b languageName: node linkType: hard @@ -16050,11 +16481,11 @@ __metadata: linkType: hard "@types/aws4@npm:^1.5.1": - version: 1.11.2 - resolution: "@types/aws4@npm:1.11.2" + version: 1.11.3 + resolution: "@types/aws4@npm:1.11.3" dependencies: "@types/node": "*" - checksum: dd2c33b59e91af171f211458fb128e296ff25d8be43a67c2110253d52c583f63d32c0216eb813cb74c0423a0587ce069a15576223d63860978c235669023f92c + checksum: 4c10ca4d7de26e031e81fd67387df51323ebea81c441330a5a733f4bace854d61b8e880ea8fbe3678f2e6e081d510cbc6b623864646519fbb4ab130a8b138a46 languageName: node linkType: hard @@ -16163,11 +16594,11 @@ __metadata: linkType: hard "@types/codemirror@npm:^5.0.0": - version: 5.60.7 - resolution: "@types/codemirror@npm:5.60.7" + version: 5.60.8 + resolution: "@types/codemirror@npm:5.60.8" dependencies: "@types/tern": "*" - checksum: 0312ce032eb139b408588a7e7cf3b392a510a2cfa6f477f2dd20d8bca1990e5e6e5540e708f9a69d1a58e68ea7fd234b789c801aa7ef4f3b3dc32a1478b04a91 + checksum: bc3a63eab0308b3ef5ed2ca22afb7f1c0b8acde6477e1d569df7e93f3fe4f78754d28a3e081c72931259fe1bf906a319b54bcdeba74600b989e5558d32478496 languageName: node linkType: hard @@ -16307,6 +16738,13 @@ __metadata: languageName: node linkType: hard +"@types/css-font-loading-module@npm:0.0.7": + version: 0.0.7 + resolution: "@types/css-font-loading-module@npm:0.0.7" + checksum: a074d3b824b2232160f2353daf1cc62937e4a24154d13607f14f93feaaac6abcf069c8ae02c1396840950fa02c1b3f19ce0f119321f9735905bfb3cd4b9b2021 + languageName: node + linkType: hard + "@types/d3-array@npm:^3.0.3": version: 3.0.4 resolution: "@types/d3-array@npm:3.0.4" @@ -16417,9 +16855,9 @@ __metadata: linkType: hard "@types/dagre@npm:^0.7.44": - version: 0.7.48 - resolution: "@types/dagre@npm:0.7.48" - checksum: 9d06fc08219056db7c55041bf2099cea24fe824d8c8741ae11c365c7464502d8c65273153446a5546b4a92bc0833802ac1c6bddb708bfcaa75af3963e7fc84aa + version: 0.7.49 + resolution: "@types/dagre@npm:0.7.49" + checksum: cb27683074f8c89c073d0b7b549692b67ddae7225a2b6f9586d75c11598f7bd32d9246ecb184017a55592e7daaf63e4d33dcbc56ca4c3999cf34352460ddf772 languageName: node linkType: hard @@ -16450,12 +16888,12 @@ __metadata: linkType: hard "@types/dockerode@npm:^3.3.0, @types/dockerode@npm:^3.3.8": - version: 3.3.18 - resolution: "@types/dockerode@npm:3.3.18" + version: 3.3.19 + resolution: "@types/dockerode@npm:3.3.19" dependencies: "@types/docker-modem": "*" "@types/node": "*" - checksum: 7ad51a0d6db9343637760a86e3d2ffd2c706db545630806ebfda428f5e8f5e458d4c6cb46657832b0638df7caee7c6922fcfbdc9271f88084e236adddaba7fa2 + checksum: 96d6cd3811a778d12382432413c3b0a935912c175ca939c77aaa0db2630c205daf14d5fa52e458a6fd44355c444f4fa1bd821e0364d4d0b6388061b5fe889431 languageName: node linkType: hard @@ -16468,6 +16906,15 @@ __metadata: languageName: node linkType: hard +"@types/es-aggregate-error@npm:^1.0.2": + version: 1.0.2 + resolution: "@types/es-aggregate-error@npm:1.0.2" + dependencies: + "@types/node": "*" + checksum: 076fd59b595f33c8c7e7eb68ec55bd43cf8b2cf7bbc6778e25d7ae1a5fa0538a0a56f149015f403d7bbcefe59f1d8182351685b59c1fe719fd46d0dd8a9737fa + languageName: node + linkType: hard + "@types/eslint-scope@npm:^3.7.3": version: 3.7.3 resolution: "@types/eslint-scope@npm:3.7.3" @@ -16547,7 +16994,7 @@ __metadata: languageName: node linkType: hard -"@types/express@npm:*, @types/express@npm:^4.17.13, @types/express@npm:^4.17.6": +"@types/express@npm:*, @types/express@npm:^4.17.13, @types/express@npm:^4.17.17, @types/express@npm:^4.17.6": version: 4.17.17 resolution: "@types/express@npm:4.17.17" dependencies: @@ -16924,9 +17371,9 @@ __metadata: linkType: hard "@types/lodash@npm:^4.14.151, @types/lodash@npm:^4.14.173, @types/lodash@npm:^4.14.175": - version: 4.14.195 - resolution: "@types/lodash@npm:4.14.195" - checksum: 39b75ca635b3fa943d17d3d3aabc750babe4c8212485a4df166fe0516e39288e14b0c60afc6e21913cc0e5a84734633c71e617e2bd14eaa1cf51b8d7799c432e + version: 4.14.196 + resolution: "@types/lodash@npm:4.14.196" + checksum: 201d17c3e62ae02a93c99ec78e024b2be9bd75564dd8fd8c26f6ac51a985ab280d28ce2688c3bcdfe785b0991cd9814edff19ee000234c7b45d9a697f09feb6a languageName: node linkType: hard @@ -17044,6 +17491,15 @@ __metadata: languageName: node linkType: hard +"@types/multer@npm:^1.4.7": + version: 1.4.7 + resolution: "@types/multer@npm:1.4.7" + dependencies: + "@types/express": "*" + checksum: 680cb0710aa25264d20cdcdaf34c212b636b55ea141310f06c25354ab1401193c7aa6839f9d22abf64a223fab1f2b8287f2512b0bef7e1628c4e9ffe54b4aeb2 + languageName: node + linkType: hard + "@types/ndjson@npm:^2.0.1": version: 2.0.1 resolution: "@types/ndjson@npm:2.0.1" @@ -17065,18 +17521,18 @@ __metadata: linkType: hard "@types/node-forge@npm:^1.3.0": - version: 1.3.2 - resolution: "@types/node-forge@npm:1.3.2" + version: 1.3.4 + resolution: "@types/node-forge@npm:1.3.4" dependencies: "@types/node": "*" - checksum: f532326a616e946e5f6733d1461e7b8d31911bbdfbc480a6337c422053d79c1e22a0776d114a325439e26ae382a640f939d0abf156e24a3c3ca5079d04aa73f6 + checksum: c3c53ee5039a10d724bfc64fe859106baf0e39c4cac90a5d0ddd3480bf044de6ce145f104d4fa0184c365dff59df7ab4b754172c9d87800f751d10ccd7dcd1ad languageName: node linkType: hard "@types/node@npm:*, @types/node@npm:>=12.12.47, @types/node@npm:>=13.7.0": - version: 20.2.5 - resolution: "@types/node@npm:20.2.5" - checksum: 38ce7c7e9d76880dc632f71d71e0d5914fcda9d5e9a7095d6c339abda55ca4affb0f2a882aeb29398f8e09d2c5151f0b6586c81c8ccdfe529c34b1ea3337425e + version: 20.4.5 + resolution: "@types/node@npm:20.4.5" + checksum: 36a0304a8dc346a1b2d2edac4c4633eecf70875793d61a5274d0df052d7a7af7a8e34f29884eac4fbd094c4f0201477dcb39c0ecd3307ca141688806538d1138 languageName: node linkType: hard @@ -17095,9 +17551,9 @@ __metadata: linkType: hard "@types/node@npm:^14.14.31": - version: 14.18.48 - resolution: "@types/node@npm:14.18.48" - checksum: bc410153cd12b5f5218c2c2a5ab4a65e8dc99ebffe98261a30e9d4beb8f9a0e4ee48c41b850f8cb80da6ed1024e42bba8dee1592869aa5b1826ddb7c29ad6899 + version: 14.18.54 + resolution: "@types/node@npm:14.18.54" + checksum: 9fd66f91fcd8e9b25067f784a9c60bd710ef86a89c838c131ab2b1921398adc53b1c70d741bceed48bb2403b75c434b1bbbb255240773819cde36295c4b6abf1 languageName: node linkType: hard @@ -17109,16 +17565,16 @@ __metadata: linkType: hard "@types/node@npm:^16.0.0, @types/node@npm:^16.11.26, @types/node@npm:^16.9.2": - version: 16.18.34 - resolution: "@types/node@npm:16.18.34" - checksum: 35c0ffe09687578d002ceb7e706d0ba450546aeb3d2716f28691f2af0063bd274dbde0f741d087ea217f2a8db413eb700d22dfb4f08a67986ff801423bd7be8d + version: 16.18.39 + resolution: "@types/node@npm:16.18.39" + checksum: eac9b202b76013256cb517ca8d3e3f61df206edb1615ca8d8df4c80616e92879fe4d3f8570a11d60f4216a82724a3265d5888b24c6994c80b057a0423c9ff1d2 languageName: node linkType: hard "@types/node@npm:^18.11.17": - version: 18.16.16 - resolution: "@types/node@npm:18.16.16" - checksum: 0efad726dd1e0bef71c392c708fc5d78c5b39c46b0ac5186fee74de4ccb1b2e847b3fa468da67d62812f56569da721b15bf31bdc795e6c69b56c73a45079ed2d + version: 18.17.1 + resolution: "@types/node@npm:18.17.1" + checksum: 56201bda9a2d05d68602df63b4e67b0545ac8c6d0280bd5fb31701350a978a577a027501fbf49db99bf177f2242ebd1244896bfd35e89042d5bd7dfebff28d4e languageName: node linkType: hard @@ -17137,9 +17593,9 @@ __metadata: linkType: hard "@types/nunjucks@npm:^3.1.4": - version: 3.2.2 - resolution: "@types/nunjucks@npm:3.2.2" - checksum: e0fdc68f01635b34ea6f5e8845ed6d2e8d11be6347b2f28c8093636454e2401f02c26a2ad6aa459da56f2459f2d59bf72914b6e4774bcd058fa12e2ae5f0f6ef + version: 3.2.3 + resolution: "@types/nunjucks@npm:3.2.3" + checksum: f4263a39f0bafb701fe75a088cf2100f0fe717ab29c53d13eb60fea77e945f8cfdabfb84bd6ce85fd11586f90aa36539cf5bd489166edcf56a189a0407d481a2 languageName: node linkType: hard @@ -17241,13 +17697,13 @@ __metadata: linkType: hard "@types/pg@npm:^8.6.6": - version: 8.6.6 - resolution: "@types/pg@npm:8.6.6" + version: 8.10.2 + resolution: "@types/pg@npm:8.10.2" dependencies: "@types/node": "*" pg-protocol: "*" - pg-types: ^2.2.0 - checksum: ac145553a8ad2f357feacad1bceaf5d6ce904eb9d66233b84c469a2b4fa3738d4ebdf29b7ea45387be2d07f915fd873a229f90a2f766d7c377afa7c41fbcf8d1 + pg-types: ^4.0.1 + checksum: 49da89f64cec1bd12a3fbc0c72b17d685c2fee579726a529f62fcab395dbc5696d80455073409947a577164b3c53a90181a331e4a5d9357679f724d4ce37f4b9 languageName: node linkType: hard @@ -17295,12 +17751,12 @@ __metadata: languageName: node linkType: hard -"@types/ramda@npm:=0.29.0": - version: 0.29.0 - resolution: "@types/ramda@npm:0.29.0" +"@types/ramda@npm:~0.29.1": + version: 0.29.2 + resolution: "@types/ramda@npm:0.29.2" dependencies: - types-ramda: ^0.29.1 - checksum: f133675d7cf0df801de3d9790bc04af76e489179c31f21f6bbd8939dd659cefd878cce77f7abba41b04c6986c25008e3dd55c3250315e5232b5bccac213e5da9 + types-ramda: ^0.29.3 + checksum: 152151848a02aca8b7eb7e95e247a10c8e0f12e07d096a25c4c230cc3bd704009670c735737d3f843373a4598869c2b2d6f81e425fa17c762e4b57808400d968 languageName: node linkType: hard @@ -17550,17 +18006,10 @@ __metadata: languageName: node linkType: hard -"@types/semver@npm:^6.0.0": - version: 6.2.3 - resolution: "@types/semver@npm:6.2.3" - checksum: 83c86d7005b229df9c4c0d6d13825b839a01932895504596140aea19e2b88f63ac27ab1575347451b50eedb63f72309e845ce1a0ca78360c4f719bbb38371594 - languageName: node - linkType: hard - -"@types/semver@npm:^7.3.12, @types/semver@npm:^7.3.8": - version: 7.3.13 - resolution: "@types/semver@npm:7.3.13" - checksum: 00c0724d54757c2f4bc60b5032fe91cda6410e48689633d5f35ece8a0a66445e3e57fa1d6e07eb780f792e82ac542948ec4d0b76eb3484297b79bd18b8cf1cb0 +"@types/semver@npm:^7.3.12, @types/semver@npm:^7.3.8, @types/semver@npm:^7.5.0": + version: 7.5.0 + resolution: "@types/semver@npm:7.5.0" + checksum: 0a64b9b9c7424d9a467658b18dd70d1d781c2d6f033096a6e05762d20ebbad23c1b69b0083b0484722aabf35640b78ccc3de26368bcae1129c87e9df028a22e2 languageName: node linkType: hard @@ -17722,7 +18171,7 @@ __metadata: languageName: node linkType: hard -"@types/swagger-ui-react@npm:^4.1.1": +"@types/swagger-ui-react@npm:^4.18.0": version: 4.18.0 resolution: "@types/swagger-ui-react@npm:4.18.0" dependencies: @@ -17760,11 +18209,11 @@ __metadata: linkType: hard "@types/testing-library__jest-dom@npm:^5.9.1": - version: 5.14.6 - resolution: "@types/testing-library__jest-dom@npm:5.14.6" + version: 5.14.9 + resolution: "@types/testing-library__jest-dom@npm:5.14.9" dependencies: "@types/jest": "*" - checksum: 92f81cefeacba3b5c06d4b3fbea0341fe2bcaa6e425c026ae262de39f1148c2588cf3003112aa4ac0880c3972ffb77641a863f3be71518d1d8080402c944e326 + checksum: d364494fc2545316292e88861146146af1e3818792ca63b62a63758b2f737669b687f4aaddfcfbcb7d0e1ed7890a9bd05de23ff97f277d5e68de574497a9ee72 languageName: node linkType: hard @@ -17814,6 +18263,13 @@ __metadata: languageName: node linkType: hard +"@types/urijs@npm:^1.19.19": + version: 1.19.19 + resolution: "@types/urijs@npm:1.19.19" + checksum: 2c08d41782149a243b374b28be009ca461f541c440d8d47c9d75b1d3255ff7169b34bb721cf2dd6266c2c44be6b70fc6d67a1abad50c4dae369774042b1facd8 + languageName: node + linkType: hard + "@types/use-sync-external-store@npm:^0.0.3": version: 0.0.3 resolution: "@types/use-sync-external-store@npm:0.0.3" @@ -18120,9 +18576,9 @@ __metadata: languageName: node linkType: hard -"@uiw/codemirror-extensions-basic-setup@npm:4.21.1": - version: 4.21.1 - resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.21.1" +"@uiw/codemirror-extensions-basic-setup@npm:4.21.9": + version: 4.21.9 + resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.21.9" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/commands": ^6.0.0 @@ -18139,19 +18595,19 @@ __metadata: "@codemirror/search": ">=6.0.0" "@codemirror/state": ">=6.0.0" "@codemirror/view": ">=6.0.0" - checksum: ac1f90f9396b5542bd30222c513354e6756972c455931e4a48327ceaadb4c0c9fa0763a87c6d166ee3cfe45941cb348661f6ee4672f71fd67e8708e73231095b + checksum: e7f2a78dd26a919b00247ad85211a09b8242d57585c7689cc44ea9de99e02e8fd8dd281ebf48e61c4126704b031babb5a596307299015bb0aa8e561a0ad2d9b1 languageName: node linkType: hard "@uiw/react-codemirror@npm:^4.9.3": - version: 4.21.1 - resolution: "@uiw/react-codemirror@npm:4.21.1" + version: 4.21.9 + resolution: "@uiw/react-codemirror@npm:4.21.9" 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.21.1 + "@uiw/codemirror-extensions-basic-setup": 4.21.9 codemirror: ^6.0.0 peerDependencies: "@babel/runtime": ">=7.11.0" @@ -18161,7 +18617,7 @@ __metadata: codemirror: ">=6.0.0" react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 359848cad18ae9a70d9767e07f9f520459b0794f32b9558ec442db92ea83f392a5f0b0fcab56804328e18bf4d1371a18ef2eaa5847c5e94603ff9a2dc1123a26 + checksum: c09a121e0c37f0dfb720e05f080b5f420eaec9bf1502cad38a100f2cefc731f50e854d682898163ad23aaefefcb505b57f4621b9724eca39d334258e0f25fddb languageName: node linkType: hard @@ -18434,6 +18890,13 @@ __metadata: languageName: node linkType: hard +"@xstate/fsm@npm:^1.4.0": + version: 1.6.5 + resolution: "@xstate/fsm@npm:1.6.5" + checksum: da24fa4f40479223da34714640cea64ec894bbfeb2281a0a870af68882ae1d6fb6d724d6e5c0d4e6929728c699b92858f7389ef7d6a5d00ac66ba8cde3934eed + languageName: node + linkType: hard + "@xtuc/ieee754@npm:^1.2.0": version: 1.2.0 resolution: "@xtuc/ieee754@npm:1.2.0" @@ -18554,7 +19017,7 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.2.0": +"acorn-walk@npm:^8.1.1": version: 8.2.0 resolution: "acorn-walk@npm:8.2.0" checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 @@ -18570,12 +19033,12 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.7.0, acorn@npm:^8.7.1, acorn@npm:^8.8.0": - version: 8.8.0 - resolution: "acorn@npm:8.8.0" +"acorn@npm:^8.2.4, acorn@npm:^8.4.1, acorn@npm:^8.5.0, acorn@npm:^8.7.1, acorn@npm:^8.9.0": + version: 8.9.0 + resolution: "acorn@npm:8.9.0" bin: acorn: bin/acorn - checksum: 7270ca82b242eafe5687a11fea6e088c960af712683756abf0791b68855ea9cace3057bd5e998ffcef50c944810c1e0ca1da526d02b32110e13c722aa959afdc + checksum: 25dfb94952386ecfb847e61934de04a4e7c2dc21c2e700fc4e2ef27ce78cb717700c4c4f279cd630bb4774948633c3859fc16063ec8573bda4568e0a312e6744 languageName: node linkType: hard @@ -18626,7 +19089,7 @@ __metadata: languageName: node linkType: hard -"ajv-draft-04@npm:^1.0.0": +"ajv-draft-04@npm:^1.0.0, ajv-draft-04@npm:~1.0.0": version: 1.0.0 resolution: "ajv-draft-04@npm:1.0.0" peerDependencies: @@ -18638,6 +19101,15 @@ __metadata: languageName: node linkType: hard +"ajv-errors@npm:~3.0.0": + version: 3.0.0 + resolution: "ajv-errors@npm:3.0.0" + peerDependencies: + ajv: ^8.0.1 + checksum: f3d1610a104fa776c2f90534acbe2113842a40d5ee446062da9e956ae6de6959afc997da1e3948c47316faa225255fc2d9d97aacd0803f47998fb38156d3d03c + languageName: node + linkType: hard + "ajv-formats-draft2019@npm:^1.6.1": version: 1.6.1 resolution: "ajv-formats-draft2019@npm:1.6.1" @@ -18652,7 +19124,7 @@ __metadata: languageName: node linkType: hard -"ajv-formats@npm:^2.1.1": +"ajv-formats@npm:^2.1.1, ajv-formats@npm:~2.1.0": version: 2.1.1 resolution: "ajv-formats@npm:2.1.1" dependencies: @@ -18698,7 +19170,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^8.0.0, ajv@npm:^8.10.0, ajv@npm:^8.11.0, ajv@npm:^8.12.0, ajv@npm:^8.6.3, ajv@npm:^8.8.0": +"ajv@npm:^8.0.0, ajv@npm:^8.10.0, ajv@npm:^8.11.2, ajv@npm:^8.12.0, ajv@npm:^8.6.0, ajv@npm:^8.6.3, ajv@npm:^8.8.0, ajv@npm:^8.8.2": version: 8.12.0 resolution: "ajv@npm:8.12.0" dependencies: @@ -18811,10 +19283,10 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^6.0.0": - version: 6.1.0 - resolution: "ansi-styles@npm:6.1.0" - checksum: 7a7f8528c07a9d20c3a92bccd2b6bc3bb4d26e5cb775c02826921477377bd495d615d61f710d56216344b6238d1d11ef2b0348e146c5b128715578bfb3217229 +"ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.1.0": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: ef940f2f0ced1a6347398da88a91da7930c33ecac3c77b72c5905f8b8fe402c52e6fde304ff5347f616e27a742da3f1dc76de98f6866c69251ad0b07a66776d9 languageName: node linkType: hard @@ -18835,6 +19307,13 @@ __metadata: languageName: node linkType: hard +"append-field@npm:^1.0.0": + version: 1.0.0 + resolution: "append-field@npm:1.0.0" + checksum: 482ba08acc0ecef00fe7da6bf2f8e48359a9905ee1af525f3120c9260c02e91eedf0579b59d898e8d8455b6c199e340bc0a2fd4b9e02adaa29a8a86c722b37f9 + languageName: node + linkType: hard + "aproba@npm:^1.0.3": version: 1.2.0 resolution: "aproba@npm:1.2.0" @@ -18961,7 +19440,7 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:^5.0.0, aria-query@npm:^5.1.3": +"aria-query@npm:5.1.3, aria-query@npm:^5.0.0, aria-query@npm:^5.1.3": version: 5.1.3 resolution: "aria-query@npm:5.1.3" dependencies: @@ -18991,6 +19470,13 @@ __metadata: languageName: node linkType: hard +"array-ify@npm:^1.0.0": + version: 1.0.0 + resolution: "array-ify@npm:1.0.0" + checksum: c0502015b319c93dd4484f18036bcc4b654eb76a4aa1f04afbcef11ac918859bb1f5d71ba1f0f1141770db9eef1a4f40f1761753650873068010bbf7bcdae4a4 + languageName: node + linkType: hard + "array-includes@npm:^3.1.5, array-includes@npm:^3.1.6": version: 3.1.6 resolution: "array-includes@npm:3.1.6" @@ -19117,6 +19603,18 @@ __metadata: languageName: node linkType: hard +"assert@npm:^2.0.0": + version: 2.0.0 + resolution: "assert@npm:2.0.0" + dependencies: + es6-object-assign: ^1.1.0 + is-nan: ^1.2.1 + object-is: ^1.0.1 + util: ^0.12.0 + checksum: bb91f181a86d10588ee16c5e09c280f9811373974c29974cbe401987ea34e966699d7989a812b0e19377b511ea0bc627f5905647ce569311824848ede382cae8 + languageName: node + linkType: hard + "ast-types-flow@npm:^0.0.7": version: 0.0.7 resolution: "ast-types-flow@npm:0.0.7" @@ -19133,12 +19631,12 @@ __metadata: languageName: node linkType: hard -"ast-types@npm:0.15.2": - version: 0.15.2 - resolution: "ast-types@npm:0.15.2" +"ast-types@npm:^0.16.1": + version: 0.16.1 + resolution: "ast-types@npm:0.16.1" dependencies: tslib: ^2.0.1 - checksum: 24f0d86bf9e4c8dae16fa24b13c1776f2c2677040bcfbd4eb4f27911db49020be4876885e45e6cfcc548ed4dfea3a0742d77e3346b84fae47379cb0b89e9daa0 + checksum: 21c186da9fdb1d8087b1b7dabbc4059f91aa5a1e593a9776b4393cc1eaa857e741b2dda678d20e34b16727b78fef3ab59cf8f0c75ed1ba649c78fe194e5c114b languageName: node linkType: hard @@ -19149,6 +19647,15 @@ __metadata: languageName: node linkType: hard +"astring@npm:^1.8.1": + version: 1.8.6 + resolution: "astring@npm:1.8.6" + bin: + astring: bin/astring + checksum: 6f034d2acef1dac8bb231e7cc26c573d3c14e1975ea6e04f20312b43d4f462f963209bc64187d25d477a182dc3c33277959a0156ab7a3617aa79b1eac4d88e1f + languageName: node + linkType: hard + "async-lock@npm:^1.1.0": version: 1.2.4 resolution: "async-lock@npm:1.2.4" @@ -19201,11 +19708,11 @@ __metadata: linkType: hard "autolinker@npm:^3.11.0": - version: 3.14.1 - resolution: "autolinker@npm:3.14.1" + version: 3.16.2 + resolution: "autolinker@npm:3.16.2" dependencies: - tslib: ^1.9.3 - checksum: e8c0b07053a6d1557953325e500d6e59f4c7c5bb2ae97d0ace9229019133fc0f058ef41636bfc74b6581d98bc4a5e15631dc00cfe0993d0c41b525e2e0652e37 + tslib: ^2.3.0 + checksum: 1d5d20ef23586629ec3c341052e6bb6250399cf5e66db21540c17b2f5b1137066435fb274a2115b57464d05e75b85afad61ef7cdf6ea693ef2920a3748b7249d languageName: node linkType: hard @@ -19224,54 +19731,25 @@ __metadata: linkType: hard "aws-sdk-client-mock-jest@npm:^2.0.0": - version: 2.1.1 - resolution: "aws-sdk-client-mock-jest@npm:2.1.1" + version: 2.2.0 + resolution: "aws-sdk-client-mock-jest@npm:2.2.0" dependencies: "@types/jest": ^28.1.3 tslib: ^2.1.0 peerDependencies: - aws-sdk-client-mock: 2.1.1 - checksum: 4b5ca96bbcaa60ea3ea947821c7ff1f073c1342a12ce5c778b70832bdcc6106e10591e98e09b22c5b0d83dfc6fe554e8a08d5df5cf067a7eaadb804087b891ed + aws-sdk-client-mock: 2.2.0 + checksum: 2b9367077b745df34da049e2c90f4d743e38369d2d0f0469582ad27a8db52c2f1d5a711ec93b398bd54b732e1454e0028ef161eaea29a0309094ca24ef51a926 languageName: node linkType: hard "aws-sdk-client-mock@npm:^2.0.0": - version: 2.1.1 - resolution: "aws-sdk-client-mock@npm:2.1.1" + version: 2.2.0 + resolution: "aws-sdk-client-mock@npm:2.2.0" dependencies: "@types/sinon": ^10.0.10 sinon: ^14.0.2 tslib: ^2.1.0 - checksum: 8330b88cdaeae401390ece094344ed727db0b007369d862a88afc0a29249828b95cce809faa0c2289c1af99528af0e765b4aba8156b948d01a12299390195cea - languageName: node - linkType: hard - -"aws-sdk-mock@npm:^5.2.1": - version: 5.8.0 - resolution: "aws-sdk-mock@npm:5.8.0" - dependencies: - aws-sdk: ^2.1231.0 - sinon: ^14.0.1 - traverse: ^0.6.6 - checksum: c0b06d63d375a6f6664a5860815bdcc21cbe752f227f3617db8bd9042e48604e5cc26834876909c8fc1e68ac937166f4cb0637b3cb565d05c9a64aa025fe3407 - languageName: node - linkType: hard - -"aws-sdk@npm:^2.1231.0": - version: 2.1279.0 - resolution: "aws-sdk@npm:2.1279.0" - dependencies: - buffer: 4.9.2 - events: 1.1.1 - ieee754: 1.1.13 - jmespath: 0.16.0 - querystring: 0.2.0 - sax: 1.2.1 - url: 0.10.3 - util: ^0.12.4 - uuid: 8.0.0 - xml2js: 0.4.19 - checksum: ee8e8ee7baea9abaa0e1d08294be8ff00795b9db606101ef69a45d1465dac936187e43079fbe7a28ff4a463c8f9cd728d9bfee3e3974b0b5b88eb437dc81295b + checksum: 25232d56cd0401bc1212730a4a0192efc5154a211a648fe0cb4d71bd693216f63c8f13776ef04b4b36fb8eb70b9a7d19d87a3979816b9fd153450d44515d5598 languageName: node linkType: hard @@ -19320,17 +19798,6 @@ __metadata: languageName: node linkType: hard -"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: c90497ebf738723654a6e80147dc294186ad9d7b08f95f5a22fd48f826c7e06a576229b8dff3137195ca627349a4312e00fa78e4f1c499250b9860596adef44a - languageName: node - linkType: hard - "axios@npm:^0.21.1": version: 0.21.4 resolution: "axios@npm:0.21.4" @@ -19340,6 +19807,17 @@ __metadata: languageName: node linkType: hard +"axios@npm:^1.4.0": + version: 1.4.0 + resolution: "axios@npm:1.4.0" + dependencies: + follow-redirects: ^1.15.0 + form-data: ^4.0.0 + proxy-from-env: ^1.1.0 + checksum: 7fb6a4313bae7f45e89d62c70a800913c303df653f19eafec88e56cea2e3821066b8409bc68be1930ecca80e861c52aa787659df0ffec6ad4d451c7816b9386b + languageName: node + linkType: hard + "axobject-query@npm:^3.1.1": version: 3.1.1 resolution: "axobject-query@npm:3.1.1" @@ -19636,6 +20114,13 @@ __metadata: languageName: node linkType: hard +"base64-arraybuffer@npm:^1.0.1": + version: 1.0.2 + resolution: "base64-arraybuffer@npm:1.0.2" + checksum: 15e6400d2d028bf18be4ed97702b11418f8f8779fb8c743251c863b726638d52f69571d4cc1843224da7838abef0949c670bde46936663c45ad078e89fee5c62 + languageName: node + linkType: hard + "base64-js@npm:^1.0.2, base64-js@npm:^1.3.0, base64-js@npm:^1.3.1, base64-js@npm:^1.5.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" @@ -20106,17 +20591,6 @@ __metadata: languageName: node linkType: hard -"buffer@npm:4.9.2, buffer@npm:^4.3.0": - version: 4.9.2 - resolution: "buffer@npm:4.9.2" - dependencies: - base64-js: ^1.0.2 - ieee754: ^1.1.4 - isarray: ^1.0.0 - checksum: 8801bc1ba08539f3be70eee307a8b9db3d40f6afbfd3cf623ab7ef41dffff1d0a31de0addbe1e66e0ca5f7193eeb667bfb1ecad3647f8f1b0750de07c13295c3 - languageName: node - linkType: hard - "buffer@npm:5.6.0": version: 5.6.0 resolution: "buffer@npm:5.6.0" @@ -20127,6 +20601,17 @@ __metadata: languageName: node linkType: hard +"buffer@npm:^4.3.0": + version: 4.9.2 + resolution: "buffer@npm:4.9.2" + dependencies: + base64-js: ^1.0.2 + ieee754: ^1.1.4 + isarray: ^1.0.0 + checksum: 8801bc1ba08539f3be70eee307a8b9db3d40f6afbfd3cf623ab7ef41dffff1d0a31de0addbe1e66e0ca5f7193eeb667bfb1ecad3647f8f1b0750de07c13295c3 + languageName: node + linkType: hard + "buffer@npm:^5.2.1, buffer@npm:^5.5.0, buffer@npm:^5.6.0": version: 5.7.1 resolution: "buffer@npm:5.7.1" @@ -20168,7 +20653,7 @@ __metadata: languageName: node linkType: hard -"busboy@npm:^1.6.0": +"busboy@npm:^1.0.0, busboy@npm:^1.6.0": version: 1.6.0 resolution: "busboy@npm:1.6.0" dependencies: @@ -20250,6 +20735,26 @@ __metadata: languageName: node linkType: hard +"cacache@npm:^17.0.0": + version: 17.1.3 + resolution: "cacache@npm:17.1.3" + dependencies: + "@npmcli/fs": ^3.1.0 + fs-minipass: ^3.0.0 + glob: ^10.2.2 + lru-cache: ^7.7.1 + minipass: ^5.0.0 + minipass-collect: ^1.0.2 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + p-map: ^4.0.0 + ssri: ^10.0.0 + tar: ^6.1.11 + unique-filename: ^3.0.0 + checksum: 385756781e1e21af089160d89d7462b7ed9883c978e848c7075b90b73cb823680e66092d61513050164588387d2ca87dd6d910e28d64bc13a9ac82cd8580c796 + languageName: node + linkType: hard + "cacheable-lookup@npm:^5.0.3": version: 5.0.3 resolution: "cacheable-lookup@npm:5.0.3" @@ -20793,6 +21298,17 @@ __metadata: languageName: node linkType: hard +"cliui@npm:7.0.4, cliui@npm:^7.0.2": + version: 7.0.4 + resolution: "cliui@npm:7.0.4" + dependencies: + string-width: ^4.2.0 + strip-ansi: ^6.0.0 + wrap-ansi: ^7.0.0 + checksum: ce2e8f578a4813806788ac399b9e866297740eecd4ad1823c27fd344d78b22c5f8597d548adbcc46f0573e43e21e751f39446c5a5e804a12aace402b7a315d7f + languageName: node + linkType: hard + "cliui@npm:^3.2.0": version: 3.2.0 resolution: "cliui@npm:3.2.0" @@ -20815,17 +21331,6 @@ __metadata: languageName: node linkType: hard -"cliui@npm:^7.0.2": - version: 7.0.4 - resolution: "cliui@npm:7.0.4" - dependencies: - string-width: ^4.2.0 - strip-ansi: ^6.0.0 - wrap-ansi: ^7.0.0 - checksum: ce2e8f578a4813806788ac399b9e866297740eecd4ad1823c27fd344d78b22c5f8597d548adbcc46f0573e43e21e751f39446c5a5e804a12aace402b7a315d7f - languageName: node - linkType: hard - "clone-buffer@npm:^1.0.0": version: 1.0.0 resolution: "clone-buffer@npm:1.0.0" @@ -21192,7 +21697,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^9.1.0, commander@npm:^9.5.0": +"commander@npm:^9.1.0, commander@npm:^9.5.0 <10": version: 9.5.0 resolution: "commander@npm:9.5.0" checksum: c7a3e27aa59e913b54a1bafd366b88650bc41d6651f0cbe258d4ff09d43d6a7394232a4dadd0bf518b3e696fdf595db1028a0d82c785b88bd61f8a440cecfade @@ -21241,6 +21746,16 @@ __metadata: languageName: node linkType: hard +"compare-func@npm:^2.0.0": + version: 2.0.0 + resolution: "compare-func@npm:2.0.0" + dependencies: + array-ify: ^1.0.0 + dot-prop: ^5.1.0 + checksum: fb71d70632baa1e93283cf9d80f30ac97f003aabee026e0b4426c9716678079ef5fea7519b84d012cbed938c476493866a38a79760564a9e21ae9433e40e6f0d + languageName: node + linkType: hard + "compare-versions@npm:4.1.4": version: 4.1.4 resolution: "compare-versions@npm:4.1.4" @@ -21321,6 +21836,18 @@ __metadata: languageName: node linkType: hard +"concat-stream@npm:^1.5.2": + version: 1.6.2 + resolution: "concat-stream@npm:1.6.2" + dependencies: + buffer-from: ^1.0.0 + inherits: ^2.0.3 + readable-stream: ^2.2.2 + typedarray: ^0.0.6 + checksum: 1ef77032cb4459dcd5187bd710d6fc962b067b64ec6a505810de3d2b8cc0605638551b42f8ec91edf6fcd26141b32ef19ad749239b58fae3aba99187adc32285 + languageName: node + linkType: hard + "concat-stream@npm:^2.0.0": version: 2.0.0 resolution: "concat-stream@npm:2.0.0" @@ -21461,13 +21988,24 @@ __metadata: languageName: node linkType: hard -"content-type@npm:~1.0.4, content-type@npm:~1.0.5": +"content-type@npm:^1.0.5, content-type@npm:~1.0.4, content-type@npm:~1.0.5": version: 1.0.5 resolution: "content-type@npm:1.0.5" checksum: 566271e0a251642254cde0f845f9dd4f9856e52d988f4eb0d0dcffbb7a1f8ec98de7a5215fc628f3bce30fe2fb6fd2bc064b562d721658c59b544e2d34ea2766 languageName: node linkType: hard +"conventional-changelog-conventionalcommits@npm:^5.0.0": + version: 5.0.0 + resolution: "conventional-changelog-conventionalcommits@npm:5.0.0" + dependencies: + compare-func: ^2.0.0 + lodash: ^4.17.15 + q: ^1.5.1 + checksum: b67d12e4e0fdde5baa32c3d77af472de38646a18657b26f5543eecce041a318103092fbfcef247e2319a16957c9ac78c6ea78acc11a5db6acf74be79a28c561f + languageName: node + linkType: hard + "convert-source-map@npm:^1.5.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": version: 1.9.0 resolution: "convert-source-map@npm:1.9.0" @@ -21546,10 +22084,10 @@ __metadata: languageName: node linkType: hard -"core-js-pure@npm:^3.23.3, core-js-pure@npm:^3.25.1, core-js-pure@npm:^3.6.5": - version: 3.29.1 - resolution: "core-js-pure@npm:3.29.1" - checksum: 2ed91f79c13f23c1b70c31edf4224aca99a9ac3db38c79127798c294a36faac0ea0b21070218621741057cf84b3dadff595475580c1fac3a43e02cae575dc27b +"core-js-pure@npm:^3.23.3, core-js-pure@npm:^3.30.2, core-js-pure@npm:^3.6.5": + version: 3.31.0 + resolution: "core-js-pure@npm:3.31.0" + checksum: 2bc5d2f6c3c9732fd5c066529b8d41fae9c746206ddf7614712dc4120a9efd47bf894df4fc600fde8c04324171c1999869798b48b23fca128eff5f09f58cd2f6 languageName: node linkType: hard @@ -21567,10 +22105,10 @@ __metadata: languageName: node linkType: hard -"core-js@npm:^3.6.5": - version: 3.30.2 - resolution: "core-js@npm:3.30.2" - checksum: 73d47e2b9d9f502800973982d08e995bbf04832e20b04e04be31dd7607247158271315e9328788a2408190e291c7ffbefad141167b1e57dea9f983e1e723541e +"core-js@npm:^3.26.0, core-js@npm:^3.6.5": + version: 3.31.0 + resolution: "core-js@npm:3.31.0" + checksum: f7cf9b3010f7ca99c026d95b61743baca1a85512742ed2b67e8f65a72ac4f4fe0b90b00057783e886bdd39d3a295f42f845d33e7cba3973ed263df978343ab79 languageName: node linkType: hard @@ -21751,12 +22289,12 @@ __metadata: languageName: node linkType: hard -"cross-fetch@npm:^3.1.3, cross-fetch@npm:^3.1.5": - version: 3.1.6 - resolution: "cross-fetch@npm:3.1.6" +"cross-fetch@npm:^3.1.3, cross-fetch@npm:^3.1.5, cross-fetch@npm:^3.1.8 <4": + version: 3.1.8 + resolution: "cross-fetch@npm:3.1.8" dependencies: - node-fetch: ^2.6.11 - checksum: 704b3519ab7de488328cc49a52cf1aa14132ec748382be5b9557b22398c33ffa7f8c2530e8a97ed8cb55da52b0a9740a9791d361271c4591910501682d981d9c + node-fetch: ^2.6.12 + checksum: 78f993fa099eaaa041122ab037fe9503ecbbcb9daef234d1d2e0b9230a983f64d645d088c464e21a247b825a08dc444a6e7064adfa93536d3a9454b4745b3632 languageName: node linkType: hard @@ -22712,7 +23250,7 @@ __metadata: languageName: node linkType: hard -"dependency-graph@npm:^0.11.0": +"dependency-graph@npm:0.11.0, dependency-graph@npm:^0.11.0, dependency-graph@npm:~0.11.0": version: 0.11.0 resolution: "dependency-graph@npm:0.11.0" checksum: 477204beaa9be69e642bc31ffe7a8c383d0cf48fa27acbc91c5df01431ab913e65c154213d2ef83d034c98d77280743ec85e5da018a97a18dd43d3c0b78b28cd @@ -23060,9 +23598,9 @@ __metadata: linkType: hard "dompurify@npm:^2.2.7, dompurify@npm:^2.2.9, dompurify@npm:^2.3.6": - version: 2.4.5 - resolution: "dompurify@npm:2.4.5" - checksum: d6d3c3b320f15cdb5b26aa1902c3275a3ab2c3705a9df4420bb94691d7c4df67959ec7b91e486c308320791b0ee000456f042734c45d76721e61c2768eac706e + version: 2.4.7 + resolution: "dompurify@npm:2.4.7" + checksum: 13c047e772a1998348191554dda403950d45ef2ec75fa0b9915cc179ccea0a39ef780d283109bd72cf83a2a085af6c77664281d4d0106a737bc5f39906364efe languageName: node linkType: hard @@ -23098,6 +23636,15 @@ __metadata: languageName: node linkType: hard +"dot-prop@npm:^5.1.0": + version: 5.3.0 + resolution: "dot-prop@npm:5.3.0" + dependencies: + is-obj: ^2.0.0 + checksum: d5775790093c234ef4bfd5fbe40884ff7e6c87573e5339432870616331189f7f5d86575c5b5af2dcf0f61172990f4f734d07844b1f23482fff09e3c4bead05ea + languageName: node + linkType: hard + "dotenv@npm:^16.0.0": version: 16.0.0 resolution: "dotenv@npm:16.0.0" @@ -23183,12 +23730,12 @@ __metadata: languageName: node linkType: hard -"ebnf@npm:^1.9.0": - version: 1.9.0 - resolution: "ebnf@npm:1.9.0" +"ebnf@npm:^1.9.1": + version: 1.9.1 + resolution: "ebnf@npm:1.9.1" bin: ebnf: dist/bin.js - checksum: a18e616f5f52ad28dcc7ae2749bd4bf81ebe12ad6e98b51ad20077eb066286d4efb5562bd3cd9861965203dde59c392428061e89b4b4df59e96ff92db8f5ceeb + checksum: a361ac739a4981a75e15cd16e0dd0ee944977caa680e689240d5d8cda0cae75d869e5889b7457c0c201687206d6ee47bae3b247a20f851c3a2db457ed480cb87 languageName: node linkType: hard @@ -23230,8 +23777,8 @@ __metadata: linkType: hard "elastic-builder@npm:^2.16.0": - version: 2.19.0 - resolution: "elastic-builder@npm:2.19.0" + version: 2.21.0 + resolution: "elastic-builder@npm:2.21.0" dependencies: lodash.has: ^4.5.2 lodash.hasin: ^4.5.2 @@ -23241,7 +23788,7 @@ __metadata: lodash.isobject: ^3.0.2 lodash.isstring: ^4.0.1 lodash.omit: ^4.5.0 - checksum: 14c3a2e2a76f44425dfff4c57e16f077553845976422cb35c35d235e1ea59942b86c379e516828e8390e3c53360a564ff94ee3aa961a5f2fb791da7e5e97012c + checksum: c612efc567c48835c97b1156ac8e6bcf826d83b8606e42bfde108410d3b1279bf7ead1eac58ff45808c2780668db78d5801aebc75f02b588d4f6de1fa0e0cded languageName: node linkType: hard @@ -23327,13 +23874,13 @@ __metadata: languageName: node linkType: hard -"enhanced-resolve@npm:^5.14.1": - version: 5.14.1 - resolution: "enhanced-resolve@npm:5.14.1" +"enhanced-resolve@npm:^5.15.0": + version: 5.15.0 + resolution: "enhanced-resolve@npm:5.15.0" dependencies: graceful-fs: ^4.2.4 tapable: ^2.2.0 - checksum: ad2a31928b6649eed40d364838449587f731baa63863e83d2629bebaa8be1eabac18b90f89c1784bc805b0818363e99b22547159edd485d7e5ccf18cdc640642 + checksum: fbd8cdc9263be71cc737aa8a7d6c57b43d6aa38f6cc75dde6fcd3598a130cc465f979d2f4d01bb3bf475acb43817749c79f8eef9be048683602ca91ab52e4f11 languageName: node linkType: hard @@ -23459,6 +24006,21 @@ __metadata: languageName: node linkType: hard +"es-aggregate-error@npm:^1.0.7": + version: 1.0.9 + resolution: "es-aggregate-error@npm:1.0.9" + dependencies: + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + function-bind: ^1.1.1 + functions-have-names: ^1.2.3 + get-intrinsic: ^1.1.3 + globalthis: ^1.0.3 + has-property-descriptors: ^1.0.0 + checksum: bef86c4fcd3b924929e8d89d288dc0a577b31bb17d6a3f0a7676f22c5d7ffa4e1ff08bb393f06b15e1baad132ae725a8c8692728a5f73cd2b78a1c49ce664605 + languageName: node + linkType: hard + "es-get-iterator@npm:^1.1.2": version: 1.1.2 resolution: "es-get-iterator@npm:1.1.2" @@ -23516,6 +24078,13 @@ __metadata: languageName: node linkType: hard +"es6-object-assign@npm:^1.1.0": + version: 1.1.0 + resolution: "es6-object-assign@npm:1.1.0" + checksum: 8d4fdf63484d78b5c64cacc2c2e1165bc7b6a64b739d2a9db6a4dc8641d99cc9efb433cdd4dc3d3d6b00bfa6ce959694e4665e3255190339945c5f33b692b5d8 + languageName: node + linkType: hard + "esbuild-android-64@npm:0.15.18": version: 0.15.18 resolution: "esbuild-android-64@npm:0.15.18" @@ -23749,32 +24318,32 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.17.0": - version: 0.17.19 - resolution: "esbuild@npm:0.17.19" +"esbuild@npm:^0.18.0": + version: 0.18.17 + resolution: "esbuild@npm:0.18.17" dependencies: - "@esbuild/android-arm": 0.17.19 - "@esbuild/android-arm64": 0.17.19 - "@esbuild/android-x64": 0.17.19 - "@esbuild/darwin-arm64": 0.17.19 - "@esbuild/darwin-x64": 0.17.19 - "@esbuild/freebsd-arm64": 0.17.19 - "@esbuild/freebsd-x64": 0.17.19 - "@esbuild/linux-arm": 0.17.19 - "@esbuild/linux-arm64": 0.17.19 - "@esbuild/linux-ia32": 0.17.19 - "@esbuild/linux-loong64": 0.17.19 - "@esbuild/linux-mips64el": 0.17.19 - "@esbuild/linux-ppc64": 0.17.19 - "@esbuild/linux-riscv64": 0.17.19 - "@esbuild/linux-s390x": 0.17.19 - "@esbuild/linux-x64": 0.17.19 - "@esbuild/netbsd-x64": 0.17.19 - "@esbuild/openbsd-x64": 0.17.19 - "@esbuild/sunos-x64": 0.17.19 - "@esbuild/win32-arm64": 0.17.19 - "@esbuild/win32-ia32": 0.17.19 - "@esbuild/win32-x64": 0.17.19 + "@esbuild/android-arm": 0.18.17 + "@esbuild/android-arm64": 0.18.17 + "@esbuild/android-x64": 0.18.17 + "@esbuild/darwin-arm64": 0.18.17 + "@esbuild/darwin-x64": 0.18.17 + "@esbuild/freebsd-arm64": 0.18.17 + "@esbuild/freebsd-x64": 0.18.17 + "@esbuild/linux-arm": 0.18.17 + "@esbuild/linux-arm64": 0.18.17 + "@esbuild/linux-ia32": 0.18.17 + "@esbuild/linux-loong64": 0.18.17 + "@esbuild/linux-mips64el": 0.18.17 + "@esbuild/linux-ppc64": 0.18.17 + "@esbuild/linux-riscv64": 0.18.17 + "@esbuild/linux-s390x": 0.18.17 + "@esbuild/linux-x64": 0.18.17 + "@esbuild/netbsd-x64": 0.18.17 + "@esbuild/openbsd-x64": 0.18.17 + "@esbuild/sunos-x64": 0.18.17 + "@esbuild/win32-arm64": 0.18.17 + "@esbuild/win32-ia32": 0.18.17 + "@esbuild/win32-x64": 0.18.17 dependenciesMeta: "@esbuild/android-arm": optional: true @@ -23822,7 +24391,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: ac11b1a5a6008e4e37ccffbd6c2c054746fc58d0ed4a2f9ee643bd030cfcea9a33a235087bc777def8420f2eaafb3486e76adb7bdb7241a9143b43a69a10afd8 + checksum: c6e1ffa776978a45697763a07ec9b16411db3d3b3997b2c4a0165a211727fce8b63b87165a28d8ef60d3a28b98197bbbc2833e51b89888a4437e0a483dffc8ff languageName: node linkType: hard @@ -24081,19 +24650,20 @@ __metadata: linkType: hard "eslint-plugin-jest@npm:^27.0.0": - version: 27.2.1 - resolution: "eslint-plugin-jest@npm:27.2.1" + version: 27.2.3 + resolution: "eslint-plugin-jest@npm:27.2.3" dependencies: "@typescript-eslint/utils": ^5.10.0 peerDependencies: - "@typescript-eslint/eslint-plugin": ^5.0.0 + "@typescript-eslint/eslint-plugin": ^5.0.0 || ^6.0.0 eslint: ^7.0.0 || ^8.0.0 + jest: "*" peerDependenciesMeta: "@typescript-eslint/eslint-plugin": optional: true jest: optional: true - checksum: 579a4d26304cc6748b2e6dff6c965ea7a21b618d8b051eb02727d25cf5c7767f6db8ef5237531635ff77e242b983b973e7cb8c820a4d20d5bda73358c452a8ab + checksum: 4c7e07f52f17749ac6fd0ff5fcd5ce30b88983ba31eeee322e4d48859f55eaa112f06172e586ad2031c00ff28bb2dfdc3d35c83895251b9c0e860fa47dfc5ff4 languageName: node linkType: hard @@ -24243,13 +24813,13 @@ __metadata: linkType: hard "eslint@npm:^8.33.0, eslint@npm:^8.6.0": - version: 8.42.0 - resolution: "eslint@npm:8.42.0" + version: 8.44.0 + resolution: "eslint@npm:8.44.0" dependencies: "@eslint-community/eslint-utils": ^4.2.0 "@eslint-community/regexpp": ^4.4.0 - "@eslint/eslintrc": ^2.0.3 - "@eslint/js": 8.42.0 + "@eslint/eslintrc": ^2.1.0 + "@eslint/js": 8.44.0 "@humanwhocodes/config-array": ^0.11.10 "@humanwhocodes/module-importer": ^1.0.1 "@nodelib/fs.walk": ^1.2.8 @@ -24261,7 +24831,7 @@ __metadata: escape-string-regexp: ^4.0.0 eslint-scope: ^7.2.0 eslint-visitor-keys: ^3.4.1 - espree: ^9.5.2 + espree: ^9.6.0 esquery: ^1.4.2 esutils: ^2.0.2 fast-deep-equal: ^3.1.3 @@ -24281,13 +24851,13 @@ __metadata: lodash.merge: ^4.6.2 minimatch: ^3.1.2 natural-compare: ^1.4.0 - optionator: ^0.9.1 + optionator: ^0.9.3 strip-ansi: ^6.0.1 strip-json-comments: ^3.1.0 text-table: ^0.2.0 bin: eslint: bin/eslint.js - checksum: 07105397b5f2ff4064b983b8971e8c379ec04b1dfcc9d918976b3e00377189000161dac991d82ba14f8759e466091b8c71146f602930ca810c290ee3fcb3faf0 + checksum: d06309ce4aafb9d27d558c8e5e5aa5cba3bbec3ce8ceccbc7d4b7a35f2b67fd40189159155553270e2e6febeb69bd8a3b60d6241c8f5ddc2ef1702ccbd328501 languageName: node linkType: hard @@ -24298,14 +24868,14 @@ __metadata: languageName: node linkType: hard -"espree@npm:^9.0.0, espree@npm:^9.5.2": - version: 9.5.2 - resolution: "espree@npm:9.5.2" +"espree@npm:^9.0.0, espree@npm:^9.6.0": + version: 9.6.0 + resolution: "espree@npm:9.6.0" dependencies: - acorn: ^8.8.0 + acorn: ^8.9.0 acorn-jsx: ^5.3.2 eslint-visitor-keys: ^3.4.1 - checksum: 6506289d6eb26471c0b383ee24fee5c8ae9d61ad540be956b3127be5ce3bf687d2ba6538ee5a86769812c7c552a9d8239e8c4d150f9ea056c6d5cbe8399c03c1 + checksum: 1287979510efb052a6a97c73067ea5d0a40701b29adde87bbe2d3eb1667e39ca55e8129e20e2517fed3da570150e7ef470585228459a8f3e3755f45007a1c662 languageName: node linkType: hard @@ -24450,13 +25020,6 @@ __metadata: languageName: node linkType: hard -"events@npm:1.1.1": - version: 1.1.1 - resolution: "events@npm:1.1.1" - checksum: 40431eb005cc4c57861b93d44c2981a49e7feb99df84cf551baed299ceea4444edf7744733f6a6667e942af687359b1f4a87ec1ec4f21d5127dac48a782039b9 - languageName: node - linkType: hard - "events@npm:3.3.0, events@npm:^3.0.0, events@npm:^3.2.0, events@npm:^3.3.0": version: 3.3.0 resolution: "events@npm:3.3.0" @@ -24528,6 +25091,7 @@ __metadata: "@backstage/plugin-microsoft-calendar": "workspace:^" "@backstage/plugin-newrelic": "workspace:^" "@backstage/plugin-newrelic-dashboard": "workspace:^" + "@backstage/plugin-nomad": "workspace:^" "@backstage/plugin-octopus-deploy": "workspace:^" "@backstage/plugin-org": "workspace:^" "@backstage/plugin-pagerduty": "workspace:^" @@ -24593,12 +25157,20 @@ __metadata: resolution: "example-backend-next@workspace:packages/backend-next" dependencies: "@backstage/backend-defaults": "workspace:^" + "@backstage/backend-tasks": "workspace:^" "@backstage/cli": "workspace:^" + "@backstage/plugin-adr-backend": "workspace:^" "@backstage/plugin-app-backend": "workspace:^" "@backstage/plugin-auth-node": "workspace:^" + "@backstage/plugin-azure-devops-backend": "workspace:^" + "@backstage/plugin-badges-backend": "workspace:^" "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^" + "@backstage/plugin-devtools-backend": "workspace:^" + "@backstage/plugin-entity-feedback-backend": "workspace:^" "@backstage/plugin-kubernetes-backend": "workspace:^" + "@backstage/plugin-lighthouse-backend": "workspace:^" + "@backstage/plugin-linguist-backend": "workspace:^" "@backstage/plugin-permission-backend": "workspace:^" "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-permission-node": "workspace:^" @@ -24646,6 +25218,7 @@ __metadata: "@backstage/plugin-kubernetes-backend": "workspace:^" "@backstage/plugin-lighthouse-backend": "workspace:^" "@backstage/plugin-linguist-backend": "workspace:^" + "@backstage/plugin-nomad-backend": "workspace:^" "@backstage/plugin-permission-backend": "workspace:^" "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-permission-node": "workspace:^" @@ -24796,6 +25369,35 @@ __metadata: languageName: node linkType: hard +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 3d21519a4f8207c99f7457287291316306255a328770d320b401114ec8481986e4e467e854cb9914dd965e0a1ca810a23ccb559c642c88f4c7f55c55778a9b48 + languageName: node + linkType: hard + +"express-openapi-validator@npm:^5.0.4": + version: 5.0.4 + resolution: "express-openapi-validator@npm:5.0.4" + dependencies: + "@apidevtools/json-schema-ref-parser": ^9.1.2 + "@types/multer": ^1.4.7 + ajv: ^8.11.2 + ajv-draft-04: ^1.0.0 + ajv-formats: ^2.1.1 + content-type: ^1.0.5 + lodash.clonedeep: ^4.5.0 + lodash.get: ^4.4.2 + lodash.uniq: ^4.5.0 + lodash.zipobject: ^4.1.3 + media-typer: ^1.1.0 + multer: ^1.4.5-lts.1 + ono: ^7.1.3 + path-to-regexp: ^6.2.0 + checksum: 5f41d632324fd4217ca74353cb9c9bf50ada6f6ecd5396e9a059f6ce05e66c4698706bb14b7a4ea5a88a4190b82327e37d899dd9a22301dfd6717e24930c81b6 + languageName: node + linkType: hard + "express-prom-bundle@npm:^6.3.6": version: 6.6.0 resolution: "express-prom-bundle@npm:6.6.0" @@ -25021,6 +25623,13 @@ __metadata: languageName: node linkType: hard +"fast-memoize@npm:^2.5.2": + version: 2.5.2 + resolution: "fast-memoize@npm:2.5.2" + checksum: 79fa759719ba4eac7e8c22fb3b0eb3f18f4a31e218c00b1eb4a5b53c5781921133a6b84472d59ec5a6ea8f26ad57b43cd99a350c0547ccce51489bc9a5f0b28d + languageName: node + linkType: hard + "fast-querystring@npm:^1.1.1": version: 1.1.1 resolution: "fast-querystring@npm:1.1.1" @@ -25067,14 +25676,14 @@ __metadata: languageName: node linkType: hard -"fast-xml-parser@npm:4.1.2": - version: 4.1.2 - resolution: "fast-xml-parser@npm:4.1.2" +"fast-xml-parser@npm:4.2.5": + version: 4.2.5 + resolution: "fast-xml-parser@npm:4.2.5" dependencies: strnum: ^1.0.5 bin: fxparser: src/cli/cli.js - checksum: 6a7d1b17057f8470e70603eddfa75f990625735d068d57ece861d0154ad8d27fda63c2831d07e1ecd7e68e993738b2448925cb9277d8c0ed68009623bbcd63c6 + checksum: d32b22005504eeb207249bf40dc82d0994b5bb9ca9dcc731d335a1f425e47fe085b3cace3cf9d32172dd1a5544193c49e8615ca95b4bf95a4a4920a226b06d80 languageName: node linkType: hard @@ -25183,6 +25792,20 @@ __metadata: languageName: node linkType: hard +"fflate@npm:^0.4.4": + version: 0.4.8 + resolution: "fflate@npm:0.4.8" + checksum: 29d8cbe44d5e7f53e7f5a160ac7f9cc025480c7b3bfd85c5f898cbe20dfa2dad4732daa534982664bf30b35896a90af44ea33ede5d94c5ffd1b8b0c0a0a56ca2 + languageName: node + linkType: hard + +"fflate@npm:^0.7.4": + version: 0.7.4 + resolution: "fflate@npm:0.7.4" + checksum: b812ab26047432db70ff4c73eb45ad53bd0774575b4818b9c61c2921e89ec65d1259f06ec1618f2ac55e6a2f2e29b6dc09173d213b46580bc69efae5344bf8f1 + languageName: node + linkType: hard + "figures@npm:^3.0.0, figures@npm:^3.2.0": version: 3.2.0 resolution: "figures@npm:3.2.0" @@ -25452,6 +26075,16 @@ __metadata: languageName: node linkType: hard +"foreground-child@npm:^3.1.0": + version: 3.1.1 + resolution: "foreground-child@npm:3.1.1" + dependencies: + cross-spawn: ^7.0.0 + signal-exit: ^4.0.1 + checksum: 139d270bc82dc9e6f8bc045fe2aae4001dc2472157044fdfad376d0a3457f77857fa883c1c8b21b491c6caade9a926a4bed3d3d2e8d3c9202b151a4cbbd0bcd5 + languageName: node + linkType: hard + "forever-agent@npm:~0.6.1": version: 0.6.1 resolution: "forever-agent@npm:0.6.1" @@ -25705,6 +26338,15 @@ __metadata: languageName: node linkType: hard +"fs-minipass@npm:^3.0.0": + version: 3.0.2 + resolution: "fs-minipass@npm:3.0.2" + dependencies: + minipass: ^5.0.0 + checksum: e9cc0e1f2d01c6f6f62f567aee59530aba65c6c7b2ae88c5027bc34c711ebcfcfaefd0caf254afa6adfe7d1fba16bc2537508a6235196bac7276747d078aef0a + languageName: node + linkType: hard + "fs-monkey@npm:1.0.3": version: 1.0.3 resolution: "fs-monkey@npm:1.0.3" @@ -25764,7 +26406,7 @@ __metadata: languageName: node linkType: hard -"functions-have-names@npm:^1.2.2": +"functions-have-names@npm:^1.2.2, functions-have-names@npm:^1.2.3": version: 1.2.3 resolution: "functions-have-names@npm:1.2.3" checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 @@ -25833,13 +26475,13 @@ __metadata: languageName: node linkType: hard -"gcp-metadata@npm:^5.0.0": - version: 5.0.0 - resolution: "gcp-metadata@npm:5.0.0" +"gcp-metadata@npm:^5.3.0": + version: 5.3.0 + resolution: "gcp-metadata@npm:5.3.0" dependencies: gaxios: ^5.0.0 json-bigint: ^1.0.0 - checksum: b75635e564a39ef0a6ebbff0daa97cea37382c3d6f0d7a6a0406e03a275de804a74e3f3d410d5313a6c9dd3496023e96bc81474917fa8369974398eb069d9645 + checksum: 891ea0b902a17f33d7bae753830d23962b63af94ed071092c30496e7d26f8128ba9af43c3d38474bea29cb32a884b4bcb5720ce8b9de4a7e1108475d3d7ae219 languageName: node linkType: hard @@ -26047,16 +26689,31 @@ __metadata: languageName: node linkType: hard -"glob@npm:8.0.3": - version: 8.0.3 - resolution: "glob@npm:8.0.3" +"glob@npm:8.1.0, glob@npm:^8.0.0, glob@npm:^8.0.1, glob@npm:^8.0.3": + version: 8.1.0 + resolution: "glob@npm:8.1.0" dependencies: fs.realpath: ^1.0.0 inflight: ^1.0.4 inherits: 2 minimatch: ^5.0.1 once: ^1.3.0 - checksum: 50bcdea19d8e79d8de5f460b1939ffc2b3299eac28deb502093fdca22a78efebc03e66bf54f0abc3d3d07d8134d19a32850288b7440d77e072aa55f9d33b18c5 + checksum: 92fbea3221a7d12075f26f0227abac435de868dd0736a17170663783296d0dd8d3d532a5672b4488a439bf5d7fb85cdd07c11185d6cd39184f0385cbdfb86a47 + languageName: node + linkType: hard + +"glob@npm:^10.2.2": + version: 10.2.7 + resolution: "glob@npm:10.2.7" + dependencies: + foreground-child: ^3.1.0 + jackspeak: ^2.0.3 + minimatch: ^9.0.1 + minipass: ^5.0.0 || ^6.0.2 + path-scurry: ^1.7.0 + bin: + glob: dist/cjs/src/bin.js + checksum: 555205a74607d6f8d9874ba888924b305b5ea1abfaa2e9ccb11ac713d040aac7edbf7d8702a2f4a1cd81b2d7666412170ce7ef061d33cddde189dae8c1a1a054 languageName: node linkType: hard @@ -26074,19 +26731,6 @@ __metadata: languageName: node linkType: hard -"glob@npm:^8.0.0, glob@npm:^8.0.1, glob@npm:^8.0.3": - version: 8.1.0 - resolution: "glob@npm:8.1.0" - dependencies: - fs.realpath: ^1.0.0 - inflight: ^1.0.4 - inherits: 2 - minimatch: ^5.0.1 - once: ^1.3.0 - checksum: 92fbea3221a7d12075f26f0227abac435de868dd0736a17170663783296d0dd8d3d532a5672b4488a439bf5d7fb85cdd07c11185d6cd39184f0385cbdfb86a47 - languageName: node - linkType: hard - "global-agent@npm:^3.0.0": version: 3.0.0 resolution: "global-agent@npm:3.0.0" @@ -26146,12 +26790,12 @@ __metadata: languageName: node linkType: hard -"globalthis@npm:^1.0.1": - version: 1.0.2 - resolution: "globalthis@npm:1.0.2" +"globalthis@npm:^1.0.1, globalthis@npm:^1.0.3": + version: 1.0.3 + resolution: "globalthis@npm:1.0.3" dependencies: define-properties: ^1.1.3 - checksum: 5a5f3c7ab94708260a98106b35946b74bb57f6b2013e39668dc9e8770b80a3418103b63a2b4aa01c31af15fdf6a2940398ffc0a408573c34c2304f928895adff + checksum: fbd7d760dc464c886d0196166d92e5ffb4c84d0730846d6621a39fbbc068aeeb9c8d1421ad330e94b7bca4bb4ea092f5f21f3d36077812af5d098b4dc006c998 languageName: node linkType: hard @@ -26192,19 +26836,19 @@ __metadata: linkType: hard "google-auth-library@npm:^8.0.0, google-auth-library@npm:^8.0.1, google-auth-library@npm:^8.0.2": - version: 8.7.0 - resolution: "google-auth-library@npm:8.7.0" + version: 8.9.0 + resolution: "google-auth-library@npm:8.9.0" dependencies: arrify: ^2.0.0 base64-js: ^1.3.0 ecdsa-sig-formatter: ^1.0.11 fast-text-encoding: ^1.0.0 gaxios: ^5.0.0 - gcp-metadata: ^5.0.0 + gcp-metadata: ^5.3.0 gtoken: ^6.1.0 jws: ^4.0.0 lru-cache: ^6.0.0 - checksum: 978d1c5f763aceddbc0218cd76fa578c8ba54a0653cefffaf61847bb8d246ebf26e7fcd276d8885b8a3354c17eef0a11cfae9e60e4df62c01cae4378d4eb78e4 + checksum: 8e0bc5f1e91804523786413bf4358e4c5ad94b1e873c725ddd03d0f1c242e2b38e26352c0f375334fbc1d94110f761b304aa0429de49b4a27ebc3875a5b56644 languageName: node linkType: hard @@ -26445,18 +27089,18 @@ __metadata: linkType: hard "graphql-ws@npm:^5.4.1, graphql-ws@npm:^5.9.0": - version: 5.12.1 - resolution: "graphql-ws@npm:5.12.1" + version: 5.14.0 + resolution: "graphql-ws@npm:5.14.0" peerDependencies: graphql: ">=0.11 <=16" - checksum: 88d587c431feba681957faecd96101bb3860e1a4765f34b8cae1c514e7f98754b5f31c6b3127775e4732f26883b0802fe426bf9f7031c16cd0b25a27ad90ec9c + checksum: 7b622944823fa12a77ea490656121a77e1a1daf08114a6a0b027922113f4481d95f4fe380a5de369a51657ef777d35757dc31f63e41071c21f3e97ca47e4205a languageName: node linkType: hard "graphql@npm:^15.0.0 || ^16.0.0, graphql@npm:^16.0.0": - version: 16.6.0 - resolution: "graphql@npm:16.6.0" - checksum: bf1d9e3c1938ce3c1a81e909bd3ead1ae4707c577f91cff1ca2eca474bfbc7873d5d7b942e1e9777ff5a8304421dba57a4b76d7a29eb19de8711cb70e3c2415e + version: 16.7.1 + resolution: "graphql@npm:16.7.1" + checksum: c924d8428daf0e96a5ea43e9bc3cd1b6802899907d284478ac8f705c8fd233a0a51eef915f7569fb5de8acb2e85b802ccc6c85c2b157ad805c1e9adba5a299bd languageName: node linkType: hard @@ -26865,8 +27509,8 @@ __metadata: linkType: hard "html-webpack-plugin@npm:^5.3.1": - version: 5.5.1 - resolution: "html-webpack-plugin@npm:5.5.1" + version: 5.5.3 + resolution: "html-webpack-plugin@npm:5.5.3" dependencies: "@types/html-minifier-terser": ^6.0.0 html-minifier-terser: ^6.0.2 @@ -26875,7 +27519,7 @@ __metadata: tapable: ^2.0.0 peerDependencies: webpack: ^5.20.0 - checksum: f4b43271171e6374b10a49b5231bbab94610a344d58f4f7d95cd130520feb474f98006e1ab71ea102c57fe5a107b273ff7c19e7e1bc2314d611dbb791fcc0a98 + checksum: ccf685195739c372ad641bbd0c9100a847904f34eedc7aff3ece7856cd6c78fd3746d2d615af1bb71e5727993fe711b89e9b744f033ed3fde646540bf5d5e954 languageName: node linkType: hard @@ -26903,7 +27547,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.0.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 @@ -27152,13 +27796,6 @@ __metadata: languageName: node linkType: hard -"ieee754@npm:1.1.13": - version: 1.1.13 - resolution: "ieee754@npm:1.1.13" - checksum: 102df1ba662e316e6160f7ce29c7c7fa3e04f2014c288336c5a9ff40bbcc2a27d209fa2a81ebfb33f28b1941021343d30e9ad8ee85a2d61f79f5936c35edc33d - languageName: node - linkType: hard - "ieee754@npm:^1.1.13, ieee754@npm:^1.1.4, ieee754@npm:^1.2.1": version: 1.2.1 resolution: "ieee754@npm:1.2.1" @@ -27205,7 +27842,7 @@ __metadata: languageName: node linkType: hard -"immer@npm:^9.0.1, immer@npm:^9.0.7": +"immer@npm:^9.0.1, immer@npm:^9.0.6, immer@npm:^9.0.7": version: 9.0.21 resolution: "immer@npm:9.0.21" checksum: 70e3c274165995352f6936695f0ef4723c52c92c92dd0e9afdfe008175af39fa28e76aafb3a2ca9d57d1fb8f796efc4dd1e1cc36f18d33fa5b74f3dfb0375432 @@ -27825,6 +28462,16 @@ __metadata: languageName: node linkType: hard +"is-nan@npm:^1.2.1": + version: 1.3.2 + resolution: "is-nan@npm:1.3.2" + dependencies: + call-bind: ^1.0.0 + define-properties: ^1.1.3 + checksum: 5dfadcef6ad12d3029d43643d9800adbba21cf3ce2ec849f734b0e14ee8da4070d82b15fdb35138716d02587c6578225b9a22779cab34888a139cc43e4e3610a + languageName: node + linkType: hard + "is-negative-zero@npm:^2.0.2": version: 2.0.2 resolution: "is-negative-zero@npm:2.0.2" @@ -27855,6 +28502,13 @@ __metadata: languageName: node linkType: hard +"is-obj@npm:^2.0.0": + version: 2.0.0 + resolution: "is-obj@npm:2.0.0" + checksum: c9916ac8f4621962a42f5e80e7ffdb1d79a3fab7456ceaeea394cd9e0858d04f985a9ace45be44433bf605673c8be8810540fe4cc7f4266fc7526ced95af5a08 + languageName: node + linkType: hard + "is-path-cwd@npm:^3.0.0": version: 3.0.0 resolution: "is-path-cwd@npm:3.0.0" @@ -28194,7 +28848,7 @@ __metadata: languageName: node linkType: hard -"isbinaryfile@npm:^4.0.10, isbinaryfile@npm:^4.0.8, isbinaryfile@npm:^4.0.8 <5": +"isbinaryfile@npm:^4.0.10, isbinaryfile@npm:^4.0.10 <5, isbinaryfile@npm:^4.0.8": version: 4.0.10 resolution: "isbinaryfile@npm:4.0.10" checksum: a6b28db7e23ac7a77d3707567cac81356ea18bd602a4f21f424f862a31d0e7ab4f250759c98a559ece35ffe4d99f0d339f1ab884ffa9795172f632ab8f88e686 @@ -28222,6 +28876,15 @@ __metadata: languageName: node linkType: hard +"isolated-vm@npm:^4.5.0": + version: 4.5.0 + resolution: "isolated-vm@npm:4.5.0" + dependencies: + node-gyp: latest + checksum: 86626a72d35ed0ee731e00ad19bc6e8a0433c4f34a5dd5b1d415d425f1f0f6b0d04c6d10e7a588025b2956d562fcf7a69e9e20f96746978d3a4e7862374a3806 + languageName: node + linkType: hard + "isomorphic-dompurify@npm:^0.13.0": version: 0.13.0 resolution: "isomorphic-dompurify@npm:0.13.0" @@ -28263,8 +28926,8 @@ __metadata: linkType: hard "isomorphic-git@npm:^1.23.0": - version: 1.23.0 - resolution: "isomorphic-git@npm:1.23.0" + version: 1.24.5 + resolution: "isomorphic-git@npm:1.24.5" dependencies: async-lock: ^1.1.0 clean-git-ref: ^2.0.1 @@ -28279,7 +28942,7 @@ __metadata: simple-get: ^4.0.1 bin: isogit: cli.cjs - checksum: a733c1183855a90edd6d82cfdccd467886045fa98af211a50df7cbb2d3088e122542b9eef0f79ebe9d5e127a81c62dfa0ff561d906f0c9d4e5eb7a0c1f13f56f + checksum: d9d13d76ec3a7d7cc8afd70d07ea920f07806b74810fe414559d460cbef8d49c7e0f6dfba0e1773c7856b1d3dd1bf98e17a09ae6aa4a8fd2d759a2f54989491a languageName: node linkType: hard @@ -28365,6 +29028,19 @@ __metadata: languageName: node linkType: hard +"jackspeak@npm:^2.0.3": + version: 2.2.1 + resolution: "jackspeak@npm:2.2.1" + dependencies: + "@isaacs/cliui": ^8.0.2 + "@pkgjs/parseargs": ^0.11.0 + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: e29291c0d0f280a063fa18fbd1e891ab8c2d7519fd34052c0ebde38538a15c603140d60c2c7f432375ff7ee4c5f1c10daa8b2ae19a97c3d4affe308c8360c1df + languageName: node + linkType: hard + "jake@npm:^10.8.5": version: 10.8.5 resolution: "jake@npm:10.8.5" @@ -28380,11 +29056,11 @@ __metadata: linkType: hard "jenkins@npm:^1.0.0": - version: 1.0.1 - resolution: "jenkins@npm:1.0.1" + version: 1.0.2 + resolution: "jenkins@npm:1.0.2" dependencies: papi: ^1.1.0 - checksum: b57eab2e9bed834849bc5acf32cc3b1d5c1ed78c568a17db94f3081a72bb279a6ed889a2837688b380de0d8e6a78a537c0c3f90cdc132a721adc5892a8090d12 + checksum: b400698ccbfee44ce5d69fdd264d8c0f24c8b9fbfa89e882b77e224ef22816d21af7c1abf7297a8922044e852c8cdfdf9850e138d938383d2c3b734d4dc76ef9 languageName: node linkType: hard @@ -28978,13 +29654,6 @@ __metadata: languageName: node linkType: hard -"jmespath@npm:0.16.0": - version: 0.16.0 - resolution: "jmespath@npm:0.16.0" - checksum: 2d602493a1e4addfd1350ac8c9d54b1b03ed09e305fd863bab84a4ee1f52868cf939dd1a08c5cdea29ce9ba8f86875ebb458b6ed45dab3e1c3f2694503fb2fd9 - languageName: node - linkType: hard - "jmespath@npm:^0.15.0": version: 0.15.0 resolution: "jmespath@npm:0.15.0" @@ -29005,10 +29674,10 @@ __metadata: languageName: node linkType: hard -"jose@npm:^4.14.1, jose@npm:^4.6.0": - version: 4.14.3 - resolution: "jose@npm:4.14.3" - checksum: b766d65a60c0407f891003aae053fb500be0edb7e0745e6702bce39199d9f06fda5eb74a90df10611cb7bd7daf2636cbe3726341fef388b51cb4e43b64200f4f +"jose@npm:^4.14.4, jose@npm:^4.6.0": + version: 4.14.4 + resolution: "jose@npm:4.14.4" + checksum: 2d820a91a8fd97c05d8bc8eedc373b944a0cd7f5fe41063086da233d0473c73fb523912a9f026ea870782bd221f4a515f441a2d3af4de48c6f2c76dac5082377 languageName: node linkType: hard @@ -29126,9 +29795,9 @@ __metadata: languageName: node linkType: hard -"jscodeshift@npm:^0.14.0": - version: 0.14.0 - resolution: "jscodeshift@npm:0.14.0" +"jscodeshift@npm:^0.15.0": + version: 0.15.0 + resolution: "jscodeshift@npm:0.15.0" dependencies: "@babel/core": ^7.13.16 "@babel/parser": ^7.13.16 @@ -29146,14 +29815,17 @@ __metadata: micromatch: ^4.0.4 neo-async: ^2.5.0 node-dir: ^0.1.17 - recast: ^0.21.0 + recast: ^0.23.1 temp: ^0.8.4 write-file-atomic: ^2.3.0 peerDependencies: "@babel/preset-env": ^7.1.6 + peerDependenciesMeta: + "@babel/preset-env": + optional: true bin: jscodeshift: bin/jscodeshift.js - checksum: 54ea6d639455883336f80b38a70648821c88b7942315dc0fbab01bc34a9ad0f0f78e3bd69304b5ab167e4262d6ed7e6284c6d32525ab01c89d9118df89b3e2a0 + checksum: 2ab7e7fe0fdaaeeeb6a26a570b19f60ccd42a779ad918372c3f7bf3ea534727cdd80d02161ebef952a9869fcb5adfb4accb66b386633fa5279e8018a47e7500f languageName: node linkType: hard @@ -29262,6 +29934,13 @@ __metadata: languageName: node linkType: hard +"jsep@npm:^1.1.2, jsep@npm:^1.2.0": + version: 1.3.8 + resolution: "jsep@npm:1.3.8" + checksum: d6de7f3bc3aa93e71b6a8fd5436db87efd11d7081230bf072c3359c5f9ff1e36dd01e4e09b09f10cacf35d5dbaf2f32ea5cf98ffe41717ea7bd489d580bbab83 + languageName: node + linkType: hard + "jsesc@npm:^2.5.1": version: 2.5.2 resolution: "jsesc@npm:2.5.2" @@ -29335,15 +30014,15 @@ __metadata: linkType: hard "json-schema-library@npm:^7.3.9": - version: 7.4.8 - resolution: "json-schema-library@npm:7.4.8" + version: 7.4.9 + resolution: "json-schema-library@npm:7.4.9" dependencies: - "@sagold/json-pointer": ^5.0.0 - "@sagold/json-query": ^6.0.0 + "@sagold/json-pointer": ^5.1.1 + "@sagold/json-query": ^6.1.0 deepmerge: ^4.2.2 fast-deep-equal: ^3.1.3 valid-url: ^1.0.9 - checksum: bb7b3d13567f72e3c003300e66cd48bf0b8c02e107aa83d11110bf017ae522f63b702faf2f4e854397655b3a12970431df46f8b9e48642ef0de51ce17532912f + checksum: 178a388bb7baf917a71ad369cfffa2952472e2bbffcdbc4711ed8b53b5d2b07aa882317c1479abc33c950667791047312fa1baa213502f128c38287cd726ff79 languageName: node linkType: hard @@ -29370,13 +30049,13 @@ __metadata: linkType: hard "json-schema-to-ts@npm:^2.6.2": - version: 2.7.2 - resolution: "json-schema-to-ts@npm:2.7.2" + version: 2.9.1 + resolution: "json-schema-to-ts@npm:2.9.1" dependencies: "@babel/runtime": ^7.18.3 "@types/json-schema": ^7.0.9 ts-algebra: ^1.2.0 - checksum: cc359d3b2aed035b550582e85989a6fdd4d54bbfd5a2933c9a1e242709a04a7babdba53f5c22280e11b4bd9730b08a933d060fc69810814310908cce76f9e152 + checksum: c2471993484f69452eb4f1c732a3b4d73842430f8c9a1486d72fda9fc9ca6ae4761164817edddd8463204caec2d3169a95d5e9e4d9d39f1e94f7377bdafb740b languageName: node linkType: hard @@ -29485,6 +30164,13 @@ __metadata: languageName: node linkType: hard +"jsonc-parser@npm:~2.2.1": + version: 2.2.1 + resolution: "jsonc-parser@npm:2.2.1" + checksum: c113878b5edd4232ba0742c7e0ddefb22a2a8ef1aafa1674c0eb4c5df0be11ed02bc8288f52ebe44b1696de336e1bc06e7bbc1458d0f910540d72b57ee7c8084 + languageName: node + linkType: hard + "jsonfile@npm:^4.0.0": version: 4.0.0 resolution: "jsonfile@npm:4.0.0" @@ -29524,6 +30210,13 @@ __metadata: languageName: node linkType: hard +"jsonpath-plus@npm:7.1.0": + version: 7.1.0 + resolution: "jsonpath-plus@npm:7.1.0" + checksum: a4005dc860c6b7e339229842537ceb6eb839d87a3447f989792b9c64f2564bbbd40663515f9481fb5a1b6cb0f988afba5b0b150e0285c463b794a45ed1aaf555 + languageName: node + linkType: hard + "jsonpath-plus@npm:^5.0.7": version: 5.1.0 resolution: "jsonpath-plus@npm:5.1.0" @@ -29531,6 +30224,13 @@ __metadata: languageName: node linkType: hard +"jsonpath-plus@npm:^6.0.1": + version: 6.0.1 + resolution: "jsonpath-plus@npm:6.0.1" + checksum: bddec34b742249c5b38077dfcd8eb479fab4e077943253017326503ce4f527ef66938288c728712fd923907493d6eaba69a43015dc3dd9fdf48d89028ae7f466 + languageName: node + linkType: hard + "jsonpath-plus@npm:^7.2.0": version: 7.2.0 resolution: "jsonpath-plus@npm:7.2.0" @@ -29845,11 +30545,11 @@ __metadata: linkType: hard "keyv@npm:^4.0.0, keyv@npm:^4.5.2": - version: 4.5.2 - resolution: "keyv@npm:4.5.2" + version: 4.5.3 + resolution: "keyv@npm:4.5.3" dependencies: json-buffer: 3.0.1 - checksum: 13ad58303acd2261c0d4831b4658451603fd159e61daea2121fcb15feb623e75ee328cded0572da9ca76b7b3ceaf8e614f1806c6b3af5db73c9c35a345259651 + checksum: 3ffb4d5b72b6b4b4af443bbb75ca2526b23c750fccb5ac4c267c6116888b4b65681015c2833cb20d26cf3e6e32dac6b988c77f7f022e1a571b7d90f1442257da languageName: node linkType: hard @@ -29932,14 +30632,14 @@ __metadata: linkType: hard "kubernetes-models@npm:^4.1.0": - version: 4.1.0 - resolution: "kubernetes-models@npm:4.1.0" + version: 4.3.1 + resolution: "kubernetes-models@npm:4.3.1" dependencies: - "@kubernetes-models/apimachinery": ^1.1.0 - "@kubernetes-models/base": ^4.0.0 - "@kubernetes-models/validate": ^3.0.0 + "@kubernetes-models/apimachinery": ^1.2.1 + "@kubernetes-models/base": ^4.0.3 + "@kubernetes-models/validate": ^3.1.1 tslib: ^2.4.0 - checksum: 1c3195a78ca422a6436f9c4143288a4d29f53b75ff597d72f44cc7f274714daab40a5bb99dd13e02edf3ce11a41f1df34d3d0bb1930b6401cc21c44666ad2b6b + checksum: cf0b8ac25b1583f237b08e5554893b38e9f67d25e5acb095cb1d9001dd3c1102e746fb69165b04627499af125ca2e2376e8ae14a69d1de0ab8ac32ab8f9f83e2 languageName: node linkType: hard @@ -30127,21 +30827,21 @@ __metadata: linkType: hard "linguist-js@npm:^2.5.3": - version: 2.5.4 - resolution: "linguist-js@npm:2.5.4" + version: 2.6.1 + resolution: "linguist-js@npm:2.6.1" dependencies: binary-extensions: ^2.2.0 - commander: ^9.5.0 + commander: ^9.5.0 <10 common-path-prefix: ^3.0.0 - cross-fetch: ^3.1.5 + cross-fetch: ^3.1.8 <4 ignore: ^5.2.4 - isbinaryfile: ^4.0.8 <5 + isbinaryfile: ^4.0.10 <5 js-yaml: ^4.1.0 node-cache: ^5.1.2 bin: linguist: bin/index.js linguist-js: bin/index.js - checksum: 92ebfc45f0f17a056153068f7e939a3e6755307d3696673597e824011d83b698063241aa7d082a7f9059416efce85a49056f0a31b3158c25f79e273e2f51e309 + checksum: 5eea5a0562e4a8958703833eef0377235fd34da1f12b7b8b8208934b877c9f36b7c140b25c66ab563ff229203cd8c224e84d840edbc4ee285ad051b8b8fdb5ae languageName: node linkType: hard @@ -30172,8 +30872,8 @@ __metadata: linkType: hard "lint-staged@npm:^13.0.0": - version: 13.2.2 - resolution: "lint-staged@npm:13.2.2" + version: 13.2.3 + resolution: "lint-staged@npm:13.2.3" dependencies: chalk: 5.2.0 cli-truncate: ^3.1.0 @@ -30190,7 +30890,7 @@ __metadata: yaml: ^2.2.2 bin: lint-staged: bin/lint-staged.js - checksum: f34f6e2e85e827364658ab8717bf8b35239473c2d4959d746b053a4cf158ac657348444c755820a8ef3eac2d4753a37c52e9db3e201ee20b085f26d2f2fbc9ed + checksum: ff51a1e33072f488b28b938ed47323816a1ff278ef6d0e5cbe1704b292773a6c8ce945b504eae3a9b5702917a979523a741f17023e16077bd5fa35be687cc067 languageName: node linkType: hard @@ -30346,7 +31046,7 @@ __metadata: languageName: node linkType: hard -"lodash-es@npm:^4.17.15, lodash-es@npm:^4.17.21": +"lodash-es@npm:^4.17.21": version: 4.17.21 resolution: "lodash-es@npm:4.17.21" checksum: 05cbffad6e2adbb331a4e16fbd826e7faee403a1a04873b82b42c0f22090f280839f85b95393f487c1303c8a3d2a010048bf06151a6cbe03eee4d388fb0a12d2 @@ -30549,6 +31249,13 @@ __metadata: languageName: node linkType: hard +"lodash.topath@npm:^4.5.2": + version: 4.5.2 + resolution: "lodash.topath@npm:4.5.2" + checksum: 04583e220f4bb1c4ac0008ff8f46d9cb4ddce0ea1090085790da30a41f4cb1b904d885cb73257fca619fa825cd96f9bb97c67d039635cb76056e18f5e08bfdee + languageName: node + linkType: hard + "lodash.union@npm:^4.6.0": version: 4.6.0 resolution: "lodash.union@npm:4.6.0" @@ -30563,7 +31270,14 @@ __metadata: languageName: node linkType: hard -"lodash@npm:4.17.21, lodash@npm:^4.15.0, lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.7.0, lodash@npm:~4.17.0, lodash@npm:~4.17.15": +"lodash.zipobject@npm:^4.1.3": + version: 4.1.3 + resolution: "lodash.zipobject@npm:4.1.3" + checksum: 1ab635b665c0488a905779705a6683e9024115176e9e947d75d2a6b1e8673230fdb11c417788fbaf26d71e1cac5ad8e59a558924612cbf7d6615780836048883 + languageName: node + linkType: hard + +"lodash@npm:4.17.21, lodash@npm:^4.15.0, lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.7.0, lodash@npm:~4.17.0, lodash@npm:~4.17.15, lodash@npm:~4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 @@ -30715,10 +31429,10 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^9.0.0": - version: 9.1.1 - resolution: "lru-cache@npm:9.1.1" - checksum: 4d703bb9b66216bbee55ead82a9682820a2b6acbdfca491b235390b1ef1056000a032d56dfb373fdf9ad4492f1fa9d04cc9a05a77f25bd7ce6901d21ad9b68b7 +"lru-cache@npm:^9.0.0, lru-cache@npm:^9.1.1": + version: 9.1.2 + resolution: "lru-cache@npm:9.1.2" + checksum: d3415634be3908909081fc4c56371a8d562d9081eba70543d86871b978702fffd0e9e362b83921b27a29ae2b37b90f55675aad770a54ac83bb3e4de5049d4b15 languageName: node linkType: hard @@ -30743,12 +31457,12 @@ __metadata: languageName: node linkType: hard -"lz-string@npm:^1.4.4": - version: 1.4.4 - resolution: "lz-string@npm:1.4.4" +"lz-string@npm:^1.5.0": + version: 1.5.0 + resolution: "lz-string@npm:1.5.0" bin: lz-string: bin/bin.js - checksum: 54e31238a61a84d8f664d9860a9fba7310c5b97a52c444f80543069bc084815eff40b8d4474ae1d93992fdf6c252dca37cf27f6adbeb4dbc3df2f3ac773d0e61 + checksum: 1ee98b4580246fd90dd54da6e346fb1caefcf05f677c686d9af237a157fdea3fd7c83a4bc58f858cd5b10a34d27afe0fdcbd0505a47e0590726a873dc8b8f65d languageName: node linkType: hard @@ -30805,7 +31519,7 @@ __metadata: languageName: node linkType: hard -"make-fetch-happen@npm:^10.0.1, make-fetch-happen@npm:^10.0.3": +"make-fetch-happen@npm:^10.0.1": version: 10.2.1 resolution: "make-fetch-happen@npm:10.2.1" dependencies: @@ -30829,6 +31543,29 @@ __metadata: languageName: node linkType: hard +"make-fetch-happen@npm:^11.0.3": + version: 11.1.1 + resolution: "make-fetch-happen@npm:11.1.1" + dependencies: + agentkeepalive: ^4.2.1 + cacache: ^17.0.0 + http-cache-semantics: ^4.1.1 + http-proxy-agent: ^5.0.0 + https-proxy-agent: ^5.0.0 + is-lambda: ^1.0.1 + lru-cache: ^7.7.1 + minipass: ^5.0.0 + minipass-fetch: ^3.0.0 + minipass-flush: ^1.0.5 + minipass-pipeline: ^1.2.4 + negotiator: ^0.6.3 + promise-retry: ^2.0.1 + socks-proxy-agent: ^7.0.0 + ssri: ^10.0.0 + checksum: 7268bf274a0f6dcf0343829489a4506603ff34bd0649c12058753900b0eb29191dce5dba12680719a5d0a983d3e57810f594a12f3c18494e93a1fbc6348a4540 + languageName: node + linkType: hard + "make-fetch-happen@npm:^9.1.0": version: 9.1.0 resolution: "make-fetch-happen@npm:9.1.0" @@ -31158,6 +31895,13 @@ __metadata: languageName: node linkType: hard +"media-typer@npm:^1.1.0": + version: 1.1.0 + resolution: "media-typer@npm:1.1.0" + checksum: a58dd60804df73c672942a7253ccc06815612326dc1c0827984b1a21704466d7cde351394f47649e56cf7415e6ee2e26e000e81b51b3eebb5a93540e8bf93cbd + languageName: node + linkType: hard + "mem-fs-editor@npm:^8.1.2 || ^9.0.0": version: 9.3.0 resolution: "mem-fs-editor@npm:9.3.0" @@ -31744,7 +32488,7 @@ __metadata: languageName: node linkType: hard -"minim@npm:=0.23.8": +"minim@npm:~0.23.8": version: 0.23.8 resolution: "minim@npm:0.23.8" dependencies: @@ -31785,15 +32529,6 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:=7.4.3": - version: 7.4.3 - resolution: "minimatch@npm:7.4.3" - dependencies: - brace-expansion: ^2.0.1 - checksum: daa954231b6859e3ba0e5fbd2486986d3cae283bb69acb7ed3833c84a293f8d7edb8514360ea62c01426ba791446b2a1e1cc0d718bed15c0212cef35c59a6b95 - languageName: node - linkType: hard - "minimatch@npm:^5.0.0, minimatch@npm:^5.0.1, minimatch@npm:^5.1.0, minimatch@npm:^5.1.1, minimatch@npm:^5.1.2": version: 5.1.6 resolution: "minimatch@npm:5.1.6" @@ -31803,6 +32538,24 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^7.4.3": + version: 7.4.6 + resolution: "minimatch@npm:7.4.6" + dependencies: + brace-expansion: ^2.0.1 + checksum: 1a6c8d22618df9d2a88aabeef1de5622eb7b558e9f8010be791cb6b0fa6e102d39b11c28d75b855a1e377b12edc7db8ff12a99c20353441caa6a05e78deb5da9 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.1": + version: 9.0.1 + resolution: "minimatch@npm:9.0.1" + dependencies: + brace-expansion: ^2.0.1 + checksum: 97f5f5284bb57dc65b9415dec7f17a0f6531a33572193991c60ff18450dcfad5c2dad24ffeaf60b5261dccd63aae58cc3306e2209d57e7f88c51295a532d8ec3 + languageName: node + linkType: hard + "minimist-options@npm:^4.0.2": version: 4.1.0 resolution: "minimist-options@npm:4.1.0" @@ -31869,6 +32622,21 @@ __metadata: languageName: node linkType: hard +"minipass-fetch@npm:^3.0.0": + version: 3.0.3 + resolution: "minipass-fetch@npm:3.0.3" + dependencies: + encoding: ^0.1.13 + minipass: ^5.0.0 + minipass-sized: ^1.0.3 + minizlib: ^2.1.2 + dependenciesMeta: + encoding: + optional: true + checksum: af5ab2552a16fcf505d35fd7ffb84b57f4a0eeb269e6e1d9a2a75824dda48b36e527083250b7cca4a4def21d9544e2ade441e4730e233c0bc2133f6abda31e18 + languageName: node + linkType: hard + "minipass-flush@npm:^1.0.5": version: 1.0.5 resolution: "minipass-flush@npm:1.0.5" @@ -31931,6 +32699,13 @@ __metadata: languageName: node linkType: hard +"minipass@npm:^5.0.0 || ^6.0.2": + version: 6.0.2 + resolution: "minipass@npm:6.0.2" + checksum: d140b91f4ab2e5ce5a9b6c468c0e82223504acc89114c1a120d4495188b81fedf8cade72a9f4793642b4e66672f990f1e0d902dd858485216a07cd3c8a62fac9 + languageName: node + linkType: hard + "minizlib@npm:^2.0.0, minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": version: 2.1.2 resolution: "minizlib@npm:2.1.2" @@ -31941,6 +32716,13 @@ __metadata: languageName: node linkType: hard +"mitt@npm:^3.0.0": + version: 3.0.0 + resolution: "mitt@npm:3.0.0" + checksum: f7be5049d27d18b1dbe9408452d66376fa60ae4a79fe9319869d1b90ae8cbaedadc7e9dab30b32d781411256d468be5538996bb7368941c09009ef6bbfa6bfc7 + languageName: node + linkType: hard + "mixme@npm:^0.5.1": version: 0.5.4 resolution: "mixme@npm:0.5.4" @@ -31966,6 +32748,17 @@ __metadata: languageName: node linkType: hard +"mkdirp@npm:^0.5.4": + version: 0.5.6 + resolution: "mkdirp@npm:0.5.6" + dependencies: + minimist: ^1.2.6 + bin: + mkdirp: bin/cmd.js + checksum: 0c91b721bb12c3f9af4b77ebf73604baf350e64d80df91754dc509491ae93bf238581e59c7188360cec7cb62fc4100959245a42cfe01834efedc5e9d068376c2 + languageName: node + linkType: hard + "mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": version: 1.0.4 resolution: "mkdirp@npm:1.0.4" @@ -32054,8 +32847,8 @@ __metadata: linkType: hard "msw@npm:^1.0.0, msw@npm:^1.0.1, msw@npm:^1.2.1": - version: 1.2.1 - resolution: "msw@npm:1.2.1" + version: 1.2.2 + resolution: "msw@npm:1.2.2" dependencies: "@mswjs/cookies": ^0.2.2 "@mswjs/interceptors": ^0.17.5 @@ -32077,13 +32870,28 @@ __metadata: type-fest: ^2.19.0 yargs: ^17.3.1 peerDependencies: - typescript: ">= 4.4.x <= 5.0.x" + typescript: ">= 4.4.x <= 5.1.x" peerDependenciesMeta: typescript: optional: true bin: msw: cli/index.js - checksum: 97b9c5ffc81b4380dd24ff40ac52ca02f406c88f86d8209ba991da19aad0bcfc37e807794aa1b9bf29f89cd86fd31e492bf4418c5ff02559b4f80d6ce4fb417b + checksum: e42cec8f5523663020bdecf6a7977a10aa86a4718d1920def3fbde0ff3734391873668cc6e3996d6790add3c74dac95a952f8560ce2543697280125eb55138e8 + languageName: node + linkType: hard + +"multer@npm:^1.4.5-lts.1": + version: 1.4.5-lts.1 + resolution: "multer@npm:1.4.5-lts.1" + dependencies: + append-field: ^1.0.0 + busboy: ^1.0.0 + concat-stream: ^1.5.2 + mkdirp: ^0.5.4 + object-assign: ^4.1.1 + type-is: ^1.6.4 + xtend: ^4.0.0 + checksum: d6dfa78a6ec592b74890412f8962da8a87a3dcfe20f612e039b735b8e0faa72c735516c447f7de694ee0d981eb0a1b892fb9e2402a0348dc6091d18c38d89ecc languageName: node linkType: hard @@ -32190,7 +32998,7 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.1.23, nanoid@npm:^3.3.4, nanoid@npm:^3.3.6": +"nanoid@npm:^3.1.23, nanoid@npm:^3.3.6": version: 3.3.6 resolution: "nanoid@npm:3.3.6" bin: @@ -32273,6 +33081,25 @@ __metadata: languageName: node linkType: hard +"nimma@npm:0.2.2": + version: 0.2.2 + resolution: "nimma@npm:0.2.2" + dependencies: + "@jsep-plugin/regex": ^1.0.1 + "@jsep-plugin/ternary": ^1.0.2 + astring: ^1.8.1 + jsep: ^1.2.0 + jsonpath-plus: ^6.0.1 + lodash.topath: ^4.5.2 + dependenciesMeta: + jsonpath-plus: + optional: true + lodash.topath: + optional: true + checksum: 09369253a962e6cdddd37c4994d414a5fa00abc955c4d91946140b45b57465749a9f05663a64812ad5ac70caacb7ca22a8fc7c8db002032d0768c83dbba7b3ad + languageName: node + linkType: hard + "nise@npm:^5.1.2": version: 5.1.2 resolution: "nise@npm:5.1.2" @@ -32330,12 +33157,12 @@ __metadata: languageName: node linkType: hard -"node-addon-api@npm:^5.0.0": - version: 5.1.0 - resolution: "node-addon-api@npm:5.1.0" +"node-addon-api@npm:^6.1.0": + version: 6.1.0 + resolution: "node-addon-api@npm:6.1.0" dependencies: node-gyp: latest - checksum: 2508bd2d2981945406243a7bd31362fc7af8b70b8b4d65f869c61731800058fb818cc2fd36c8eac714ddd0e568cc85becf5e165cebbdf7b5024d5151bbc75ea1 + checksum: 3a539510e677cfa3a833aca5397300e36141aca064cdc487554f2017110709a03a95da937e98c2a14ec3c626af7b2d1b6dabe629a481f9883143d0d5bff07bf2 languageName: node linkType: hard @@ -32388,9 +33215,9 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.11, node-fetch@npm:^2.6.5, node-fetch@npm:^2.6.7": - version: 2.6.11 - resolution: "node-fetch@npm:2.6.11" +"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.5, node-fetch@npm:^2.6.7": + version: 2.6.12 + resolution: "node-fetch@npm:2.6.12" dependencies: whatwg-url: ^5.0.0 peerDependencies: @@ -32398,7 +33225,7 @@ __metadata: peerDependenciesMeta: encoding: optional: true - checksum: 249d0666a9497553384d46b5ab296ba223521ac88fed4d8a17d6ee6c2efb0fc890f3e8091cafe7f9fba8151a5b8d925db2671543b3409a56c3cd522b468b47b3 + checksum: 3bc1655203d47ee8e313c0d96664b9673a3d4dd8002740318e9d27d14ef306693a4b2ef8d6525775056fd912a19e23f3ac0d7111ad8925877b7567b29a625592 languageName: node linkType: hard @@ -32440,14 +33267,15 @@ __metadata: languageName: node linkType: hard -"node-gyp@npm:^9.1.0": - version: 9.3.1 - resolution: "node-gyp@npm:9.3.1" +"node-gyp@npm:^9.4.0, node-gyp@npm:latest": + version: 9.4.0 + resolution: "node-gyp@npm:9.4.0" dependencies: env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 glob: ^7.1.4 graceful-fs: ^4.2.6 - make-fetch-happen: ^10.0.3 + make-fetch-happen: ^11.0.3 nopt: ^6.0.0 npmlog: ^6.0.0 rimraf: ^3.0.2 @@ -32456,27 +33284,7 @@ __metadata: which: ^2.0.2 bin: node-gyp: bin/node-gyp.js - checksum: b860e9976fa645ca0789c69e25387401b4396b93c8375489b5151a6c55cf2640a3b6183c212b38625ef7c508994930b72198338e3d09b9d7ade5acc4aaf51ea7 - languageName: node - linkType: hard - -"node-gyp@npm:latest": - version: 9.1.0 - resolution: "node-gyp@npm:9.1.0" - dependencies: - env-paths: ^2.2.0 - glob: ^7.1.4 - graceful-fs: ^4.2.6 - make-fetch-happen: ^10.0.3 - nopt: ^5.0.0 - npmlog: ^6.0.0 - rimraf: ^3.0.2 - semver: ^7.3.5 - tar: ^6.1.2 - which: ^2.0.2 - bin: - node-gyp: bin/node-gyp.js - checksum: 1437fa4a879b5b9010604128e8da8609b57c66034262087539ee04a8b764b8436af2be01bab66f8fc729a3adba2dcc21b10a32b9f552696c3fa8cd657d134fc4 + checksum: 78b404e2e0639d64e145845f7f5a3cb20c0520cdaf6dda2f6e025e9b644077202ea7de1232396ba5bde3fee84cdc79604feebe6ba3ec84d464c85d407bb5da99 languageName: node linkType: hard @@ -32889,7 +33697,7 @@ __metadata: languageName: node linkType: hard -"object-is@npm:^1.1.5": +"object-is@npm:^1.0.1, object-is@npm:^1.1.5": version: 1.1.5 resolution: "object-is@npm:1.1.5" dependencies: @@ -32961,7 +33769,7 @@ __metadata: languageName: node linkType: hard -"obuf@npm:^1.0.0, obuf@npm:^1.1.2": +"obuf@npm:^1.0.0, obuf@npm:^1.1.2, obuf@npm:~1.1.2": version: 1.1.2 resolution: "obuf@npm:1.1.2" checksum: 41a2ba310e7b6f6c3b905af82c275bf8854896e2e4c5752966d64cbcd2f599cfffd5932006bcf3b8b419dfdacebb3a3912d5d94e10f1d0acab59876c8757f27f @@ -32978,8 +33786,8 @@ __metadata: linkType: hard "octokit@npm:^2.0.0, octokit@npm:^2.0.4": - version: 2.0.19 - resolution: "octokit@npm:2.0.19" + version: 2.1.0 + resolution: "octokit@npm:2.1.0" dependencies: "@octokit/app": ^13.1.5 "@octokit/core": ^4.2.1 @@ -32988,8 +33796,9 @@ __metadata: "@octokit/plugin-rest-endpoint-methods": ^7.1.1 "@octokit/plugin-retry": ^4.1.3 "@octokit/plugin-throttling": ^5.2.2 + "@octokit/request-error": ^v3.0.3 "@octokit/types": ^9.2.2 - checksum: cc0acd5427a3dc25f70ca0ffd2e828cc7bcd51c7e4586caf06e40353f87084addd4ed6df59d441b087b9cf597540069d21bc75c27b2836e78a59e5f9f3fbec38 + checksum: 612f3c40c0d8d330793476066fcf2a6ed77ad52690201d7c2df11044c4b3dfbefefbe13443ac4037a2128c6f13d59a2f481bc0b315b1bc650e5ff6da9a811e61 languageName: node linkType: hard @@ -33061,6 +33870,15 @@ __metadata: languageName: node linkType: hard +"ono@npm:^7.1.3": + version: 7.1.3 + resolution: "ono@npm:7.1.3" + dependencies: + "@jsdevtools/ono": 7.1.3 + checksum: d341681f1bdd08071760a8d92d37e0e5fb483c6f5c510543a17896c8ee7bdd399a375c632d39f9c78bd2aeab4e5e2eaae9ae0ab71c9738276ba8459c18ce41c4 + languageName: node + linkType: hard + "open@npm:^7.4.2": version: 7.4.2 resolution: "open@npm:7.4.2" @@ -33109,14 +33927,14 @@ __metadata: linkType: hard "openid-client@npm:^5.2.1, openid-client@npm:^5.3.0": - version: 5.4.2 - resolution: "openid-client@npm:5.4.2" + version: 5.4.3 + resolution: "openid-client@npm:5.4.3" dependencies: - jose: ^4.14.1 + jose: ^4.14.4 lru-cache: ^6.0.0 object-hash: ^2.2.0 oidc-token-hash: ^5.0.3 - checksum: 0f3570990a4979aff8581de35078c82d21d45baed9805e0e385dfc62c24fa295ee82d86386846a33bc33ed3b524a5406d8564f9f927420027719f84bf1d8b741 + checksum: 0e5a126b77dad0320e8f7023ac7ad7f5f1f82ad5f985f7ab0b42a7cf36700dfb78f0bef9b59c1fae915dce0148ef191b49921cd0a01443b64c04f862d9dc03e0 languageName: node linkType: hard @@ -33144,17 +33962,17 @@ __metadata: languageName: node linkType: hard -"optionator@npm:^0.9.1": - version: 0.9.1 - resolution: "optionator@npm:0.9.1" +"optionator@npm:^0.9.3": + version: 0.9.3 + resolution: "optionator@npm:0.9.3" dependencies: + "@aashutoshrathi/word-wrap": ^1.2.3 deep-is: ^0.1.3 fast-levenshtein: ^2.0.6 levn: ^0.4.1 prelude-ls: ^1.2.1 type-check: ^0.4.0 - word-wrap: ^1.2.3 - checksum: dbc6fa065604b24ea57d734261914e697bd73b69eff7f18e967e8912aa2a40a19a9f599a507fa805be6c13c24c4eae8c71306c239d517d42d4c041c942f508a0 + checksum: 09281999441f2fe9c33a5eeab76700795365a061563d66b098923eb719251a42bdbe432790d35064d0816ead9296dbeb1ad51a733edf4167c96bd5d0882e428a languageName: node linkType: hard @@ -33728,15 +34546,15 @@ __metadata: languageName: node linkType: hard -"patch-package@npm:^6.5.0": - version: 6.5.0 - resolution: "patch-package@npm:6.5.0" +"patch-package@npm:^6.5.1": + version: 6.5.1 + resolution: "patch-package@npm:6.5.1" dependencies: "@yarnpkg/lockfile": ^1.1.0 chalk: ^4.1.2 cross-spawn: ^6.0.5 find-yarn-workspace-root: ^2.0.0 - fs-extra: ^7.0.1 + fs-extra: ^9.0.0 is-ci: ^2.0.0 klaw-sync: ^6.0.0 minimist: ^1.2.6 @@ -33748,7 +34566,7 @@ __metadata: yaml: ^1.10.2 bin: patch-package: index.js - checksum: d300e87617e3fb990d1f78fd5be205b5a5e65dfdf197b1e7f76f3b3dfe1551a03d276cb5ee6b82ab4d57e78f54ddc22bde803eec1b0896560262b276d0b2c4ab + checksum: 8530ffa30f11136b527c6eddf6da48fa12856ee510a47edb1f9cdf8a025636adb82968f5fae778b5e04ce8c87915ebdf5911422b54add59a5a42e372a8f30eb2 languageName: node linkType: hard @@ -33864,6 +34682,16 @@ __metadata: languageName: node linkType: hard +"path-scurry@npm:^1.7.0": + version: 1.9.2 + resolution: "path-scurry@npm:1.9.2" + dependencies: + lru-cache: ^9.1.1 + minipass: ^5.0.0 || ^6.0.2 + checksum: 92888dfb68e285043c6d3291c8e971d5d2bc2f5082f4d7b5392896f34be47024c9d0a8b688dd7ae6d125acc424699195474927cb4f00049a9b1ec7c4256fa8e0 + languageName: node + linkType: hard + "path-to-regexp@npm:0.1.7": version: 0.1.7 resolution: "path-to-regexp@npm:0.1.7" @@ -33969,13 +34797,27 @@ __metadata: languageName: node linkType: hard -"pg-connection-string@npm:2.5.0, pg-connection-string@npm:^2.3.0, pg-connection-string@npm:^2.4.0, pg-connection-string@npm:^2.5.0": +"pg-cloudflare@npm:^1.1.1": + version: 1.1.1 + resolution: "pg-cloudflare@npm:1.1.1" + checksum: 32aac06b5dc4588bbf78801b6267781bc7e13be672009df949d08e9627ba9fdc26924916665d4de99d47f9b0495301930547488dad889d826856976c7b3f3731 + languageName: node + linkType: hard + +"pg-connection-string@npm:2.5.0": version: 2.5.0 resolution: "pg-connection-string@npm:2.5.0" checksum: a6f3a068f7c9416a5b33a326811caf0dfaaee045c225b7c628b4c9b4e9a2b25bdd12a21e4c48940e1000ea223a4e608ca122d2ff3dd08c8b1db0fc9f5705133a languageName: node linkType: hard +"pg-connection-string@npm:^2.3.0, pg-connection-string@npm:^2.4.0, pg-connection-string@npm:^2.6.1": + version: 2.6.1 + resolution: "pg-connection-string@npm:2.6.1" + checksum: 882344a47e1ecf3a91383e0809bf2ac48facea97fcec0358d6e060e1cbcb8737acde419b4c86f05da4ce4a16634ee50fff1d2bb787d73b52ccbfde697243ad8a + languageName: node + linkType: hard + "pg-int8@npm:1.0.1": version: 1.0.1 resolution: "pg-int8@npm:1.0.1" @@ -33983,12 +34825,19 @@ __metadata: languageName: node linkType: hard -"pg-pool@npm:^3.6.0": - version: 3.6.0 - resolution: "pg-pool@npm:3.6.0" +"pg-numeric@npm:1.0.2": + version: 1.0.2 + resolution: "pg-numeric@npm:1.0.2" + checksum: 8899f8200caa1744439a8778a9eb3ceefb599d893e40a09eef84ee0d4c151319fd416634a6c0fc7b7db4ac268710042da5be700b80ef0de716fe089b8652c84f + languageName: node + linkType: hard + +"pg-pool@npm:^3.6.1": + version: 3.6.1 + resolution: "pg-pool@npm:3.6.1" peerDependencies: pg: ">=8.0" - checksum: f3fe050fbfe27406369340c4c26efcbe21a388ace085a876453de0ea496a315c38b2dc739ac97d4767a359e911da2ec4810467f72601eeec8ad540e58b27987c + checksum: 8a6513e6f74a794708c9dd16d2ccda0debadc56435ec2582de2b2e35b01315550c5dab8a0a9a2a16f4adce45523228f5739940fb7687ec7e9c300f284eb08fd1 languageName: node linkType: hard @@ -33999,7 +34848,7 @@ __metadata: languageName: node linkType: hard -"pg-types@npm:^2.1.0, pg-types@npm:^2.2.0": +"pg-types@npm:^2.1.0": version: 2.2.0 resolution: "pg-types@npm:2.2.0" dependencies: @@ -34012,23 +34861,42 @@ __metadata: languageName: node linkType: hard +"pg-types@npm:^4.0.1": + version: 4.0.1 + resolution: "pg-types@npm:4.0.1" + dependencies: + pg-int8: 1.0.1 + pg-numeric: 1.0.2 + postgres-array: ~3.0.1 + postgres-bytea: ~3.0.0 + postgres-date: ~2.0.1 + postgres-interval: ^3.0.0 + postgres-range: ^1.1.1 + checksum: 05258ef2f27a75f1bf4e243f36bb749f85148339d3be818147bcc4aebe019ad7589a6869150713140250d81e5a46ec25dc6e0a031ea77e23db5ca232a0d7a3dc + languageName: node + linkType: hard + "pg@npm:^8.3.0, pg@npm:^8.4.0": - version: 8.10.0 - resolution: "pg@npm:8.10.0" + version: 8.11.1 + resolution: "pg@npm:8.11.1" dependencies: buffer-writer: 2.0.0 packet-reader: 1.0.0 - pg-connection-string: ^2.5.0 - pg-pool: ^3.6.0 + pg-cloudflare: ^1.1.1 + pg-connection-string: ^2.6.1 + pg-pool: ^3.6.1 pg-protocol: ^1.6.0 pg-types: ^2.1.0 pgpass: 1.x peerDependencies: pg-native: ">=3.0.1" + dependenciesMeta: + pg-cloudflare: + optional: true peerDependenciesMeta: pg-native: optional: true - checksum: c6be78f2e823f2ae3c618c8e54a6622592dd71b556fb665d7eaedcbcc2fa5d210a8bcf519401e72526a65b9d797f19b772f48f29b9d9f31e98dd526fd27d61e0 + checksum: e608fe1c52725e1c0c4cbdf97e29df8f41b9fd21aed821866e3488b3a0622be1c19801d8d8eb31f0de35f040c4f69163c211358e7df8c48d15ee8f660d2bd4cc languageName: node linkType: hard @@ -34057,9 +34925,9 @@ __metadata: linkType: hard "photoswipe@npm:^5.3.7": - version: 5.3.7 - resolution: "photoswipe@npm:5.3.7" - checksum: adfbd76316b7aa140302ff2961fd128dfb23ad02ae1c0691b99a0c6a247f638218f1e6de77ae4d5191d0b5a6d4a1f3561ff1472166f2a636bc4525addee31a47 + version: 5.3.8 + resolution: "photoswipe@npm:5.3.8" + checksum: c33fd86e1a7bb4710d2c971c6e0983a4c41f55b61bf62466d3a7fc1ae3acff3431292cf0b668a52e103092e7ea21ac548fdd90cec7286cd148c6640e915e3184 languageName: node linkType: hard @@ -34252,6 +35120,13 @@ __metadata: languageName: node linkType: hard +"pony-cause@npm:^1.0.0": + version: 1.1.1 + resolution: "pony-cause@npm:1.1.1" + checksum: 5ff8878b808be48db801d52246a99d7e4789e52d20575ba504ede30c818fd85d38a033915e02c15fa9b6dce72448836dc1a47094acf8f1c21c4f04a4603b0cfb + languageName: node + linkType: hard + "popper.js@npm:1.16.1-lts": version: 1.16.1-lts resolution: "popper.js@npm:1.16.1-lts" @@ -34675,13 +35550,13 @@ __metadata: linkType: hard "postcss@npm:^8.1.0, postcss@npm:^8.4.21": - version: 8.4.24 - resolution: "postcss@npm:8.4.24" + version: 8.4.27 + resolution: "postcss@npm:8.4.27" dependencies: nanoid: ^3.3.6 picocolors: ^1.0.0 source-map-js: ^1.0.2 - checksum: 814e2126dacfea313588eda09cc99a9b4c26ec55c059188aa7a916d20d26d483483106dc5ff9e560731b59f45c5bb91b945dfadc670aed875cc90ddbbf4e787d + checksum: 1cdd0c298849df6cd65f7e646a3ba36870a37b65f55fd59d1a165539c263e9b4872a402bf4ed1ca1bc31f58b68b2835545e33ea1a23b161a1f8aa6d5ded81e78 languageName: node linkType: hard @@ -34692,6 +35567,13 @@ __metadata: languageName: node linkType: hard +"postgres-array@npm:~3.0.1": + version: 3.0.2 + resolution: "postgres-array@npm:3.0.2" + checksum: 5955f9dffeb6fa960c1a0b04fd4b2ba16813ddb636934ad26f902e4d76a91c0b743dcc6edc4cffc52deba7d547505e0020adea027c1d50a774f989cf955420d1 + languageName: node + linkType: hard + "postgres-bytea@npm:~1.0.0": version: 1.0.0 resolution: "postgres-bytea@npm:1.0.0" @@ -34699,6 +35581,15 @@ __metadata: languageName: node linkType: hard +"postgres-bytea@npm:~3.0.0": + version: 3.0.0 + resolution: "postgres-bytea@npm:3.0.0" + dependencies: + obuf: ~1.1.2 + checksum: 5f917a003fcaa0df7f285e1c37108ad474ce91193466b9bd4bcaecef2cdea98ca069c00aa6a8dbe6d2e7192336cadc3c9b36ae48d1555a299521918e00e2936b + languageName: node + linkType: hard + "postgres-date@npm:~1.0.4": version: 1.0.5 resolution: "postgres-date@npm:1.0.5" @@ -34706,6 +35597,13 @@ __metadata: languageName: node linkType: hard +"postgres-date@npm:~2.0.1": + version: 2.0.1 + resolution: "postgres-date@npm:2.0.1" + checksum: 0304bf8641a01412e4f5c3a374604e2e3dbc9dbee71d30df12fe60b32560c5674f887c2d15bafa2996f3b618b617398e7605f0e3669db43f31e614dfe69f8de7 + languageName: node + linkType: hard + "postgres-interval@npm:^1.1.0": version: 1.2.0 resolution: "postgres-interval@npm:1.2.0" @@ -34715,6 +35613,20 @@ __metadata: languageName: node linkType: hard +"postgres-interval@npm:^3.0.0": + version: 3.0.0 + resolution: "postgres-interval@npm:3.0.0" + checksum: c7a1cf006de97de663b6b8c4d2b167aa9909a238c4866a94b15d303762f5ac884ff4796cd6e2111b7f0a91302b83c570453aa8506fd005b5a5d5dfa87441bebc + languageName: node + linkType: hard + +"postgres-range@npm:^1.1.1": + version: 1.1.3 + resolution: "postgres-range@npm:1.1.3" + checksum: bf7e194a18c490d02bda0bd02035a8da454d8fd2b22c55d3d03f185c038b2a6f52d0804417d8090864afefc2b7ed664b2d12c2454a4a0f545dcbbb86488fbdf1 + languageName: node + linkType: hard + "prebuild-install@npm:^6.0.1": version: 6.1.4 resolution: "prebuild-install@npm:6.1.4" @@ -34883,7 +35795,7 @@ __metadata: languageName: node linkType: hard -"process@npm:=0.11.10, process@npm:^0.11.10": +"process@npm:^0.11.10": version: 0.11.10 resolution: "process@npm:0.11.10" checksum: bfcce49814f7d172a6e6a14d5fa3ac92cc3d0c3b9feb1279774708a719e19acd673995226351a082a9ae99978254e320ccda4240ddc474ba31a76c79491ca7c3 @@ -35082,6 +35994,13 @@ __metadata: languageName: node linkType: hard +"protocol-buffers-schema@npm:^3.6.0": + version: 3.6.0 + resolution: "protocol-buffers-schema@npm:3.6.0" + checksum: 8713b5770f6745ddbcdf3bbd03ee020624d506233bb567927a6615a6f69a5bd620a5f49597f34f4115792b853a4c9cb9e2d5d6b930a1c04bf198023e45c1c349 + languageName: node + linkType: hard + "protocols@npm:^2.0.0, protocols@npm:^2.0.1": version: 2.0.1 resolution: "protocols@npm:2.0.1" @@ -35232,6 +36151,13 @@ __metadata: languageName: node linkType: hard +"q@npm:^1.5.1": + version: 1.5.1 + resolution: "q@npm:1.5.1" + checksum: 147baa93c805bc1200ed698bdf9c72e9e42c05f96d007e33a558b5fdfd63e5ea130e99313f28efc1783e90e6bdb4e48b67a36fcc026b7b09202437ae88a1fb12 + languageName: node + linkType: hard + "qs@npm:6.11.0": version: 6.11.0 resolution: "qs@npm:6.11.0" @@ -35325,7 +36251,7 @@ __metadata: languageName: node linkType: hard -"ramda-adjunct@npm:=4.0.0": +"ramda-adjunct@npm:^4.0.0": version: 4.0.0 resolution: "ramda-adjunct@npm:4.0.0" peerDependencies: @@ -35334,13 +36260,6 @@ __metadata: languageName: node linkType: hard -"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" @@ -35348,6 +36267,13 @@ __metadata: languageName: node linkType: hard +"ramda@npm:~0.29.0": + version: 0.29.0 + resolution: "ramda@npm:0.29.0" + checksum: 9ab26c06eb7545cbb7eebcf75526d6ee2fcaae19e338f165b2bf32772121e7b28192d6664d1ba222ff76188ba26ab307342d66e805dbb02c860560adc4d5dd57 + languageName: node + linkType: hard + "randexp@npm:0.4.6": version: 0.4.6 resolution: "randexp@npm:0.4.6" @@ -35446,6 +36372,20 @@ __metadata: languageName: node linkType: hard +"rc-progress@npm:3.4.2": + version: 3.4.2 + resolution: "rc-progress@npm:3.4.2" + dependencies: + "@babel/runtime": ^7.10.1 + classnames: ^2.2.6 + rc-util: ^5.16.1 + peerDependencies: + react: ">=16.9.0" + react-dom: ">=16.9.0" + checksum: 738aa7a7d00c1a550884bcfa55e0a55bad799f97207889bc9b43c17d2c1b66b6a42e75d635a1c6cdb1696d01f8dddcf8d7d0656356b5871b46b63343db96777b + languageName: node + linkType: hard + "rc-util@npm:^5.16.1": version: 5.16.1 resolution: "rc-util@npm:5.16.1" @@ -36232,9 +37172,9 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.2, readable-stream@npm:^2.0.5, readable-stream@npm:^2.0.6, readable-stream@npm:^2.3.3, readable-stream@npm:^2.3.5, readable-stream@npm:^2.3.6": - version: 2.3.7 - resolution: "readable-stream@npm:2.3.7" +"readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.2, readable-stream@npm:^2.0.5, readable-stream@npm:^2.0.6, readable-stream@npm:^2.2.2, readable-stream@npm:^2.3.3, readable-stream@npm:^2.3.5, readable-stream@npm:^2.3.6": + version: 2.3.8 + resolution: "readable-stream@npm:2.3.8" dependencies: core-util-is: ~1.0.0 inherits: ~2.0.3 @@ -36243,7 +37183,7 @@ __metadata: safe-buffer: ~5.1.1 string_decoder: ~1.1.1 util-deprecate: ~1.0.1 - checksum: e4920cf7549a60f8aaf694d483a0e61b2a878b969d224f89b3bc788b8d920075132c4b55a7494ee944c7b6a9a0eada28a7f6220d80b0312ece70bbf08eeca755 + checksum: 65645467038704f0c8aaf026a72fbb588a9e2ef7a75cd57a01702ee9db1c4a1e4b03aaad36861a6a0926546a74d174149c8c207527963e0c2d3eee2f37678a42 languageName: node linkType: hard @@ -36298,15 +37238,16 @@ __metadata: languageName: node linkType: hard -"recast@npm:^0.21.0": - version: 0.21.5 - resolution: "recast@npm:0.21.5" +"recast@npm:^0.23.1": + version: 0.23.2 + resolution: "recast@npm:0.23.2" dependencies: - ast-types: 0.15.2 + assert: ^2.0.0 + ast-types: ^0.16.1 esprima: ~4.0.0 source-map: ~0.6.1 tslib: ^2.0.1 - checksum: 03cc7f57562238ba258d468be67bf7446ce7a707bc87a087891dad15afead46c36e9aaeedf2130e2ab5a465244a9c62bfd4127849761cf8f4085abe2f3e5f485 + checksum: 04c2617cb04c4d02a5c9e1bb75b8e7afc21d1ba7babce25303732f035c3d4b2f945d727f34c3976223d800592ea31e6641cfd33700a8699c02025040174af0b6 languageName: node linkType: hard @@ -37205,15 +38146,47 @@ __metadata: husky: ^8.0.0 lint-staged: ^13.0.0 minimist: ^1.2.5 - node-gyp: ^9.1.0 + node-gyp: ^9.4.0 prettier: ^2.2.1 - semver: ^7.3.2 + semver: ^7.5.3 shx: ^0.3.2 ts-node: ^10.4.0 - typescript: ~5.0.0 + typescript: ~4.9.0 languageName: unknown linkType: soft +"rrdom@npm:^2.0.0-alpha.9": + version: 2.0.0-alpha.9 + resolution: "rrdom@npm:2.0.0-alpha.9" + dependencies: + rrweb-snapshot: ^2.0.0-alpha.9 + checksum: d56df9acc0348f4226a2d195692a422a431498c889a40046242f5643437d3388840de90078fb26488378fc250049a9d25ee5394a089f435e2f88668276bf17d4 + languageName: node + linkType: hard + +"rrweb-snapshot@npm:^2.0.0-alpha.9": + version: 2.0.0-alpha.9 + resolution: "rrweb-snapshot@npm:2.0.0-alpha.9" + checksum: 987f3ce493178dcc6782e959adef3e3f39e711bc8d5ac7dba5dfaf2fd01477aa2d3cd959598fa4e54cf15f2c397e95cf8323180a420857ca2a4d76abaec0a552 + languageName: node + linkType: hard + +"rrweb@npm:^2.0.0-alpha.8": + version: 2.0.0-alpha.9 + resolution: "rrweb@npm:2.0.0-alpha.9" + dependencies: + "@rrweb/types": ^2.0.0-alpha.9 + "@types/css-font-loading-module": 0.0.7 + "@xstate/fsm": ^1.4.0 + base64-arraybuffer: ^1.0.1 + fflate: ^0.4.4 + mitt: ^3.0.0 + rrdom: ^2.0.0-alpha.9 + rrweb-snapshot: ^2.0.0-alpha.9 + checksum: b87ec509dff99eef90496bc5685c57f6ec7868fb12c6b49a8d824a41e1a812aaa6b4aa792b50cdfdd68ec49287d51bba48ea764dfce149f3d9ce2363327328ff + languageName: node + linkType: hard + "rtl-css-js@npm:^1.14.0": version: 1.14.0 resolution: "rtl-css-js@npm:1.14.0" @@ -37314,6 +38287,13 @@ __metadata: languageName: node linkType: hard +"safe-stable-stringify@npm:^1.1": + version: 1.1.1 + resolution: "safe-stable-stringify@npm:1.1.1" + checksum: e32a30720e8a2e3043b8b96733f015c1aa7a21a5a328074ce917b8afe4d26b4308c186c74fa92131e5f794b1efc63caa32defafceaa2981accaaedbc8b2c861c + languageName: node + linkType: hard + "safe-stable-stringify@npm:^2.2.0, safe-stable-stringify@npm:^2.3.1": version: 2.3.1 resolution: "safe-stable-stringify@npm:2.3.1" @@ -37328,13 +38308,6 @@ __metadata: languageName: node linkType: hard -"sax@npm:1.2.1": - version: 1.2.1 - resolution: "sax@npm:1.2.1" - checksum: 8dca7d5e1cd7d612f98ac50bdf0b9f63fbc964b85f0c4e2eb271f8b9b47fd3bf344c4d6a592e69ecf726d1485ca62cd8a52e603bbc332d18a66af25a9a1045ad - languageName: node - linkType: hard - "sax@npm:>=0.6.0": version: 1.2.4 resolution: "sax@npm:1.2.4" @@ -37391,14 +38364,14 @@ __metadata: languageName: node linkType: hard -"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" +"schema-utils@npm:^3.0.0, schema-utils@npm:^3.1.1, schema-utils@npm:^3.2.0": + version: 3.3.0 + resolution: "schema-utils@npm:3.3.0" dependencies: "@types/json-schema": ^7.0.8 ajv: ^6.12.5 ajv-keywords: ^3.5.2 - checksum: 39683edfe3beff018cdb1ae4fa296fc55cea13a080aa2b4d9351895cd64b22ba4d87e2e548c2a2ac1bc76e60980670adb0f413a58104479f1a0c12e5663cb8ca + checksum: ea56971926fac2487f0757da939a871388891bc87c6a82220d125d587b388f1704788f3706e7f63a7b70e49fc2db974c41343528caea60444afd5ce0fe4b85c0 languageName: node linkType: hard @@ -37489,11 +38462,11 @@ __metadata: linkType: hard "semver@npm:2 || 3 || 4 || 5, semver@npm:^5.4.1, semver@npm:^5.5.0, semver@npm:^5.6.0, semver@npm:^5.7.1": - version: 5.7.1 - resolution: "semver@npm:5.7.1" + version: 5.7.2 + resolution: "semver@npm:5.7.2" bin: - semver: ./bin/semver - checksum: 57fd0acfd0bac382ee87cd52cd0aaa5af086a7dc8d60379dfe65fea491fb2489b6016400813930ecd61fd0952dae75c115287a1b16c234b1550887117744dfaf + semver: bin/semver + checksum: fb4ab5e0dd1c22ce0c937ea390b4a822147a9c53dbd2a9a0132f12fe382902beef4fbf12cf51bb955248d8d15874ce8cd89532569756384f994309825f10b686 languageName: node linkType: hard @@ -37507,15 +38480,26 @@ __metadata: linkType: hard "semver@npm:^6.0.0, semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0": - version: 6.3.0 - resolution: "semver@npm:6.3.0" + version: 6.3.1 + resolution: "semver@npm:6.3.1" bin: - semver: ./bin/semver.js - checksum: 1b26ecf6db9e8292dd90df4e781d91875c0dcc1b1909e70f5d12959a23c7eebb8f01ea581c00783bbee72ceeaad9505797c381756326073850dc36ed284b21b9 + semver: bin/semver.js + checksum: ae47d06de28836adb9d3e25f22a92943477371292d9b665fb023fae278d345d508ca1958232af086d85e0155aee22e313e100971898bbb8d5d89b8b1d4054ca2 languageName: node linkType: hard -"semver@npm:^7.1.1, semver@npm:^7.1.2, semver@npm:^7.1.3, 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.0": +"semver@npm:^7.1.1, semver@npm:^7.1.2, semver@npm:^7.1.3, 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.5.0, semver@npm:^7.5.3": + version: 7.5.4 + resolution: "semver@npm:7.5.4" + dependencies: + lru-cache: ^6.0.0 + bin: + semver: bin/semver.js + checksum: 12d8ad952fa353b0995bf180cdac205a4068b759a140e5d3c608317098b3575ac2f1e09182206bf2eb26120e1c0ed8fb92c48c592f6099680de56bb071423ca3 + languageName: node + linkType: hard + +"semver@npm:~7.3.0": version: 7.3.8 resolution: "semver@npm:7.3.8" dependencies: @@ -37715,20 +38699,20 @@ __metadata: languageName: node linkType: hard -"sharp@npm:0.31.2": - version: 0.31.2 - resolution: "sharp@npm:0.31.2" +"sharp@npm:0.32.1": + version: 0.32.1 + resolution: "sharp@npm:0.32.1" dependencies: color: ^4.2.3 detect-libc: ^2.0.1 - node-addon-api: ^5.0.0 + node-addon-api: ^6.1.0 node-gyp: latest prebuild-install: ^7.1.1 - semver: ^7.3.8 + semver: ^7.5.0 simple-get: ^4.0.1 tar-fs: ^2.1.1 tunnel-agent: ^0.6.0 - checksum: 076717b7a073ea47bb522ff2931b74b6608daeb6f7ae334e4848d47fdf4d23bcb18cd49044fd5fb27ef27a1a4aa87d141894d67d1c4bb15a6e2e63cf4dbe329e + checksum: 99f50df380442aa8f3f952dd6f2e27634f9cab249cce47aa7f1a97c468334979ea94d71555f782aae5f5016e44b7832799f1c5ea1cb3ca975c089acd00e62e2e languageName: node linkType: hard @@ -37784,7 +38768,7 @@ __metadata: languageName: node linkType: hard -"short-unique-id@npm:=4.4.4": +"short-unique-id@npm:^4.4.4": version: 4.4.4 resolution: "short-unique-id@npm:4.4.4" bin: @@ -37824,6 +38808,13 @@ __metadata: languageName: node linkType: hard +"signal-exit@npm:^4.0.1": + version: 4.0.2 + resolution: "signal-exit@npm:4.0.2" + checksum: 41f5928431cc6e91087bf0343db786a6313dd7c6fd7e551dbc141c95bb5fb26663444fd9df8ea47c5d7fc202f60aa7468c3162a9365cbb0615fc5e1b1328fe31 + languageName: node + linkType: hard + "signedsource@npm:^1.0.0": version: 1.0.0 resolution: "signedsource@npm:1.0.0" @@ -37838,6 +38829,15 @@ __metadata: languageName: node linkType: hard +"simple-eval@npm:1.0.0": + version: 1.0.0 + resolution: "simple-eval@npm:1.0.0" + dependencies: + jsep: ^1.1.2 + checksum: 0f0719ae3a84d4b9c19366dc03065b1fe9638c982ed3e9d44ba541d25e3454e99419e3239034974fd6c5074b79c119419168b8f343fef4da6d7e35227cfd1f87 + languageName: node + linkType: hard + "simple-get@npm:^3.0.3": version: 3.1.1 resolution: "simple-get@npm:3.1.1" @@ -37878,7 +38878,7 @@ __metadata: languageName: node linkType: hard -"sinon@npm:^14.0.1, sinon@npm:^14.0.2": +"sinon@npm:^14.0.2": version: 14.0.2 resolution: "sinon@npm:14.0.2" dependencies: @@ -38334,6 +39334,15 @@ __metadata: languageName: node linkType: hard +"ssri@npm:^10.0.0": + version: 10.0.4 + resolution: "ssri@npm:10.0.4" + dependencies: + minipass: ^5.0.0 + checksum: fb14da9f8a72b04eab163eb13a9dda11d5962cd2317f85457c4e0b575e9a6e0e3a6a87b5bf122c75cb36565830cd5f263fb457571bf6f1587eb5f95d095d6165 + languageName: node + linkType: hard + "ssri@npm:^8.0.0, ssri@npm:^8.0.1": version: 8.0.1 resolution: "ssri@npm:8.0.1" @@ -38412,7 +39421,7 @@ __metadata: languageName: node linkType: hard -"stampit@npm:=4.3.2": +"stampit@npm:^4.3.2": version: 4.3.2 resolution: "stampit@npm:4.3.2" checksum: 731dfe564b98371293bb5e7cb76bb195336dd3589af4e448d1478ac6c99091fd302fd7f41a255daa4b0ec2c1f14ea4f0cc0a2f05cd3d786b29ba531850ad7f62 @@ -38602,6 +39611,17 @@ __metadata: languageName: node linkType: hard +"string-width-cjs@npm:string-width@^4.2.0, 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: + emoji-regex: ^8.0.0 + is-fullwidth-code-point: ^3.0.0 + strip-ansi: ^6.0.1 + checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb + languageName: node + linkType: hard + "string-width@npm:^1.0.1, string-width@npm:^1.0.2": version: 1.0.2 resolution: "string-width@npm:1.0.2" @@ -38613,18 +39633,7 @@ __metadata: languageName: node linkType: hard -"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: - emoji-regex: ^8.0.0 - is-fullwidth-code-point: ^3.0.0 - strip-ansi: ^6.0.1 - checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb - languageName: node - linkType: hard - -"string-width@npm:^5.0.0": +"string-width@npm:^5.0.0, string-width@npm:^5.0.1, string-width@npm:^5.1.2": version: 5.1.2 resolution: "string-width@npm:5.1.2" dependencies: @@ -38698,6 +39707,15 @@ __metadata: languageName: node linkType: hard +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:6.0, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: ^5.0.1 + checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c + languageName: node + linkType: hard + "strip-ansi@npm:5.2.0": version: 5.2.0 resolution: "strip-ansi@npm:5.2.0" @@ -38716,15 +39734,6 @@ __metadata: languageName: node linkType: hard -"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: ^5.0.1 - checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c - languageName: node - linkType: hard - "strip-ansi@npm:^7.0.1": version: 7.0.1 resolution: "strip-ansi@npm:7.0.1" @@ -38870,8 +39879,8 @@ __metadata: linkType: hard "styled-components@npm:^5.3.3": - version: 5.3.5 - resolution: "styled-components@npm:5.3.5" + version: 5.3.11 + resolution: "styled-components@npm:5.3.11" dependencies: "@babel/helper-module-imports": ^7.0.0 "@babel/traverse": ^7.4.5 @@ -38887,7 +39896,7 @@ __metadata: react: ">= 16.8.0" react-dom: ">= 16.8.0" react-is: ">= 16.8.0" - checksum: 05a664dfe423c2906959a0f3f47f9b1ad630e493eb2e06deea0dc0906af33ba5ca17277b98948a6c9642e73894d6533391aebf45576489f5afe920c974e9f8eb + checksum: 10edd4dae3b0231ec02d86bdd09c88e894eedfa7e9d4f8e562b09fb69c67a27d586cbcf35c785002d59b3bf11e6c0940b0efce40d13ae9ed148b26b1dc8f3284 languageName: node linkType: hard @@ -39035,15 +40044,15 @@ __metadata: languageName: node linkType: hard -"swagger-client@npm:^3.19.6": - version: 3.19.7 - resolution: "swagger-client@npm:3.19.7" +"swagger-client@npm:^3.19.8": + version: 3.19.8 + resolution: "swagger-client@npm:3.19.8" dependencies: "@babel/runtime-corejs3": ^7.20.13 - "@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" + "@swagger-api/apidom-core": ">=0.70.0 <1.0.0" + "@swagger-api/apidom-json-pointer": ">=0.70.0 <1.0.0" + "@swagger-api/apidom-ns-openapi-3-1": ">=0.70.0 <1.0.0" + "@swagger-api/apidom-reference": ">=0.70.0 <1.0.0" cookie: ~0.5.0 cross-fetch: ^3.1.5 deepmerge: ~4.3.0 @@ -39056,15 +40065,15 @@ __metadata: qs: ^6.10.2 traverse: ~0.6.6 url: ~0.11.0 - checksum: ddd96eac36004e37a459c42a06f66b7a76389f909f95dbd041a104c6733cdd20843607679ee46ce3854ce35f68ed9964e535b5aff662291ed4064883339b710b + checksum: 6acb65fe70a24a5c9aace54193b085a594198b1edd3a4533ef86b2ee733a0fcaad8abd7ab0d77d5f14468bccaec88b4b39793a6bc9fa07ff7a925101a106bed4 languageName: node linkType: hard -"swagger-ui-react@npm:^4.11.1": - version: 4.18.3 - resolution: "swagger-ui-react@npm:4.18.3" +"swagger-ui-react@npm:^5.0.0": + version: 5.0.0 + resolution: "swagger-ui-react@npm:5.0.0" dependencies: - "@babel/runtime-corejs3": ^7.18.9 + "@babel/runtime-corejs3": ^7.22.5 "@braintree/sanitize-url": =6.0.2 base64-js: ^1.5.1 classnames: ^2.3.1 @@ -39076,7 +40085,7 @@ __metadata: js-file-download: ^0.4.12 js-yaml: =4.1.0 lodash: ^4.17.21 - patch-package: ^6.5.0 + patch-package: ^6.5.1 prop-types: ^15.8.1 randexp: ^0.5.3 randombytes: ^2.1.0 @@ -39093,15 +40102,15 @@ __metadata: reselect: ^4.1.8 serialize-error: ^8.1.0 sha.js: ^2.4.11 - swagger-client: ^3.19.6 - url-parse: ^1.5.8 + swagger-client: ^3.19.8 + url-parse: ^1.5.10 xml: =1.0.1 xml-but-prettier: ^1.0.1 zenscroll: ^4.0.2 peerDependencies: react: ">=17.0.0" react-dom: ">=17.0.0" - checksum: c42521a72ca1336a7952d6fbdf9259d4bc7a6d107cd5befdc52352500cbfc917418f0516ab2b71e7ad0d32b08c9ade0c02bf6908a412997f4dc303a0212b0a21 + checksum: 88c6232027ee0ec515bd21d183567b672821410df29281a7996e98f82392c41e9eb8955f463d8e835f93ba21201651fa46cd465cb1639c90501475a9757247f4 languageName: node linkType: hard @@ -39125,13 +40134,13 @@ __metadata: linkType: hard "swr@npm:^2.0.0": - version: 2.1.5 - resolution: "swr@npm:2.1.5" + version: 2.2.0 + resolution: "swr@npm:2.2.0" dependencies: use-sync-external-store: ^1.2.0 peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 - checksum: f2ef9b83ec4b2ebf4d520578ab847307700db01ffcab64b3aec6ea94feaf96ca10e38e8b08bc8adfab8eaa6ec1bdfd64f82b6f5c14cc4cb5cf11e6fd22b405a4 + checksum: 1f04795ff9dff54987cbf8a544afc9e42d1350a99e899be8a7cdc4885f561e3ee464f78245ee2ebc8ced262b04023d134f731e276227319dc2d6e1843389ddd8 languageName: node linkType: hard @@ -39683,7 +40692,7 @@ __metadata: languageName: node linkType: hard -"traverse@npm:^0.6.6, traverse@npm:~0.6.6": +"traverse@npm:~0.6.6": version: 0.6.6 resolution: "traverse@npm:0.6.6" checksum: e2afa72f11efa9ba31ed763d2d9d2aa244612f22015d16c0ea3ba5f6ca8bf071de87f8108b721885cce06ea4a36ef4605d9228c67e431d9015ea4685cb364420 @@ -39796,9 +40805,9 @@ __metadata: linkType: hard "ts-log@npm:^2.2.3": - version: 2.2.3 - resolution: "ts-log@npm:2.2.3" - checksum: 8aa34a2724d7915ddc6de8d0c27eb48f67206b52c42656f1ea2a7ffb080fa664db5fb22b42bd3c72b5b95cc6eb4612196b7d1e28f4bc146191ebc2a9683af548 + version: 2.2.5 + resolution: "ts-log@npm:2.2.5" + checksum: 28f78ab15b8555d56c089dbc243327d8ce4331219956242a29fc4cb3bad6bb0cb8234dd17a292381a1b1dba99a7e4849a2181b2e1a303e8247e9f4ca4e284f2d languageName: node linkType: hard @@ -39883,7 +40892,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^1.10.0, tslib@npm:^1.11.1, tslib@npm:^1.8.1, tslib@npm:^1.9.0, tslib@npm:^1.9.3": +"tslib@npm:^1.10.0, tslib@npm:^1.11.1, tslib@npm:^1.14.1, tslib@npm:^1.8.1, tslib@npm:^1.9.0": version: 1.14.1 resolution: "tslib@npm:1.14.1" checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd @@ -40022,7 +41031,7 @@ __metadata: languageName: node linkType: hard -"type-is@npm:~1.6.18": +"type-is@npm:^1.6.4, type-is@npm:~1.6.18": version: 1.6.18 resolution: "type-is@npm:1.6.18" dependencies: @@ -40050,12 +41059,12 @@ __metadata: languageName: node linkType: hard -"types-ramda@npm:^0.29.1": - version: 0.29.2 - resolution: "types-ramda@npm:0.29.2" +"types-ramda@npm:^0.29.3": + version: 0.29.3 + resolution: "types-ramda@npm:0.29.3" dependencies: ts-toolbelt: ^9.6.0 - checksum: 0b394d4be7d7f110eff2b3c13fe1a648dc14ac22da2acb5575f6621230d43e6bb1067d5a61b9793ba122efe46cda85b9e5eff7bb23d82ffa436e1f24140fff79 + checksum: 2efb5182a02b9b11b0fd960c501c8a3c595f7fe82922526872020868a6a98c788b544c6beccb48360f1af9401d0c7f5e0be9b2ca484987f0339a71f48cec6199 languageName: node linkType: hard @@ -40087,13 +41096,13 @@ __metadata: languageName: node linkType: hard -"typescript@npm:~5.0.0": - version: 5.0.4 - resolution: "typescript@npm:5.0.4" +"typescript@npm:~4.9.0": + version: 4.9.5 + resolution: "typescript@npm:4.9.5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 82b94da3f4604a8946da585f7d6c3025fff8410779e5bde2855ab130d05e4fd08938b9e593b6ebed165bda6ad9292b230984f10952cf82f0a0ca07bbeaa08172 + checksum: ee000bc26848147ad423b581bd250075662a354d84f0e06eb76d3b892328d8d4440b7487b5a83e851b12b255f55d71835b008a66cbf8f255a11e4400159237db languageName: node linkType: hard @@ -40107,13 +41116,13 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@~5.0.0#~builtin": - version: 5.0.4 - resolution: "typescript@patch:typescript@npm%3A5.0.4#~builtin::version=5.0.4&hash=a1c5e5" +"typescript@patch:typescript@~4.9.0#~builtin": + version: 4.9.5 + resolution: "typescript@patch:typescript@npm%3A4.9.5#~builtin::version=4.9.5&hash=a1c5e5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 6a1fe9a77bb9c5176ead919cc4a1499ee63e46b4e05bf667079f11bf3a8f7887f135aa72460a4c3b016e6e6bb65a822cb8689a6d86cbfe92d22cc9f501f09213 + checksum: 2eee5c37cad4390385db5db5a8e81470e42e8f1401b0358d7390095d6f681b410f2c4a0c496c6ff9ebd775423c7785cdace7bcdad76c7bee283df3d9718c0f20 languageName: node linkType: hard @@ -40216,11 +41225,11 @@ __metadata: linkType: hard "undici@npm:^5.12.0, undici@npm:^5.8.0": - version: 5.19.1 - resolution: "undici@npm:5.19.1" + version: 5.22.1 + resolution: "undici@npm:5.22.1" dependencies: busboy: ^1.6.0 - checksum: 57ee94ee74d944faa41dbcb2faf4e0c90069708d3aaae860185884e51376b5d457728352a8396d69a3c9cb752b62ff99a19a664c5aacb7ee61cc488af499a01c + checksum: 048a3365f622be44fb319316cedfaa241c59cf7f3368ae7667a12323447e1822e8cc3d00f6956c852d1478a6fde1cbbe753f49e05f2fdaed229693e716ebaf35 languageName: node linkType: hard @@ -40279,6 +41288,15 @@ __metadata: languageName: node linkType: hard +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: ^4.0.0 + checksum: 8e2f59b356cb2e54aab14ff98a51ac6c45781d15ceaab6d4f1c2228b780193dc70fae4463ce9e1df4479cb9d3304d7c2043a3fb905bdeca71cc7e8ce27e063df + languageName: node + linkType: hard + "unique-slug@npm:^2.0.0": version: 2.0.2 resolution: "unique-slug@npm:2.0.2" @@ -40288,6 +41306,15 @@ __metadata: languageName: node linkType: hard +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: ^0.1.4 + checksum: 0884b58365af59f89739e6f71e3feacb5b1b41f2df2d842d0757933620e6de08eff347d27e9d499b43c40476cbaf7988638d3acb2ffbcb9d35fd035591adfd15 + languageName: node + linkType: hard + "unist-builder@npm:^3.0.0": version: 3.0.0 resolution: "unist-builder@npm:3.0.0" @@ -40416,7 +41443,7 @@ __metadata: languageName: node linkType: hard -"unraw@npm:=2.0.1": +"unraw@npm:^2.0.1": version: 2.0.1 resolution: "unraw@npm:2.0.1" checksum: af9a9d2f6e420cb4f52fe2f1f5982e6b0be95da640d6ae8d6d9ff631d864771793cb9fe7e2a16ef1ce631b94065f4438e7bd7f1701076fc69296edc4e704d42f @@ -40471,7 +41498,14 @@ __metadata: languageName: node linkType: hard -"url-parse@npm:^1.5.8": +"urijs@npm:^1.19.11": + version: 1.19.11 + resolution: "urijs@npm:1.19.11" + checksum: f9b95004560754d30fd7dbee44b47414d662dc9863f1cf5632a7c7983648df11d23c0be73b9b4f9554463b61d5b0a520b70df9e1ee963ebb4af02e6da2cc80f3 + languageName: node + linkType: hard + +"url-parse@npm:^1.5.10": version: 1.5.10 resolution: "url-parse@npm:1.5.10" dependencies: @@ -40488,16 +41522,6 @@ __metadata: languageName: node linkType: hard -"url@npm:0.10.3": - version: 0.10.3 - resolution: "url@npm:0.10.3" - dependencies: - punycode: 1.3.2 - querystring: 0.2.0 - checksum: 7b83ddb106c27bf9bde8629ccbe8d26e9db789c8cda5aa7db72ca2c6f9b8a88a5adf206f3e10db78e6e2d042b327c45db34c7010c1bf0d9908936a17a2b57d05 - languageName: node - linkType: hard - "url@npm:^0.11.0, url@npm:~0.11.0": version: 0.11.0 resolution: "url@npm:0.11.0" @@ -40629,7 +41653,7 @@ __metadata: languageName: node linkType: hard -"util@npm:^0.12.3, util@npm:^0.12.4": +"util@npm:^0.12.0, util@npm:^0.12.3": version: 0.12.5 resolution: "util@npm:0.12.5" dependencies: @@ -40649,6 +41673,13 @@ __metadata: languageName: node linkType: hard +"utility-types@npm:^3.10.0": + version: 3.10.0 + resolution: "utility-types@npm:3.10.0" + checksum: 8f274415c6196ab62883b8bd98c9d2f8829b58016e4269aaa1ebd84184ac5dda7dc2ca45800c0d5e0e0650966ba063bf9a412aaeaea6850ca4440a391283d5c8 + languageName: node + linkType: hard + "utils-merge@npm:1.0.1, utils-merge@npm:1.x.x, utils-merge@npm:^1.0.1": version: 1.0.1 resolution: "utils-merge@npm:1.0.1" @@ -40656,15 +41687,6 @@ __metadata: languageName: node linkType: hard -"uuid@npm:8.0.0": - version: 8.0.0 - resolution: "uuid@npm:8.0.0" - bin: - uuid: dist/bin/uuid - checksum: 56d4e23aa7ac26fa2db6bd1778db34cb8c9f5a10df1770a27167874bf6705fc8f14a4ac414af58a0d96c7653b2bd4848510b29d1c2ef8c91ccb17429c1872b5e - languageName: node - linkType: hard - "uuid@npm:^3.3.2": version: 3.4.0 resolution: "uuid@npm:3.4.0" @@ -40923,18 +41945,6 @@ __metadata: languageName: node linkType: hard -"vm2@npm:^3.9.18": - version: 3.9.19 - resolution: "vm2@npm:3.9.19" - dependencies: - acorn: ^8.7.0 - acorn-walk: ^8.2.0 - bin: - vm2: bin/vm2 - checksum: fc6cf553134145cd7bb5246985bf242b056e3fb5ea71e2eef6710b2a5d6c6119cc6bc960435ff62480ee82efb43369be8f4db07b6690916ae7d3b2e714f395d8 - languageName: node - linkType: hard - "vscode-languageserver-types@npm:^3.15.1": version: 3.15.1 resolution: "vscode-languageserver-types@npm:3.15.1" @@ -41094,6 +42104,13 @@ __metadata: languageName: node linkType: hard +"web-vitals@npm:^3.1.0": + version: 3.3.2 + resolution: "web-vitals@npm:3.3.2" + checksum: 76e832341d213d5de6f6767fef7f8c02163ab94326912a6355bbf6e194d930196ca5094b0d0d493b4c194acaaabcc96f0adc87870b913a7b9a51b225807abccf + languageName: node + linkType: hard + "webcrypto-core@npm:^1.7.4": version: 1.7.5 resolution: "webcrypto-core@npm:1.7.5" @@ -41222,8 +42239,8 @@ __metadata: linkType: hard "webpack@npm:^5, webpack@npm:^5.70.0": - version: 5.85.0 - resolution: "webpack@npm:5.85.0" + version: 5.88.1 + resolution: "webpack@npm:5.88.1" dependencies: "@types/eslint-scope": ^3.7.3 "@types/estree": ^1.0.0 @@ -41234,7 +42251,7 @@ __metadata: acorn-import-assertions: ^1.9.0 browserslist: ^4.14.5 chrome-trace-event: ^1.0.2 - enhanced-resolve: ^5.14.1 + enhanced-resolve: ^5.15.0 es-module-lexer: ^1.2.1 eslint-scope: 5.1.1 events: ^3.2.0 @@ -41244,7 +42261,7 @@ __metadata: loader-runner: ^4.2.0 mime-types: ^2.1.27 neo-async: ^2.6.2 - schema-utils: ^3.1.2 + schema-utils: ^3.2.0 tapable: ^2.1.1 terser-webpack-plugin: ^5.3.7 watchpack: ^2.4.0 @@ -41254,7 +42271,7 @@ __metadata: optional: true bin: webpack: bin/webpack.js - checksum: b013be9fbc7f6810d1f229f570c70710ddbc7290f817411acffe4214b2b6c783a041ab1f2005d9e1109f4ab21c136f0f8d8c067a5fb64f20a82dcbc1ee0d3f42 + checksum: 726e7e05ab2e7c142609a673dd6aa1a711ed97f349418a2a393d650c5ddad172d191257f60e1e37f6b2a77261571c202aabd5ce9240791a686774f0801cf5ec2 languageName: node linkType: hard @@ -41479,10 +42496,10 @@ __metadata: languageName: node linkType: hard -"word-wrap@npm:^1.2.3, word-wrap@npm:~1.2.3": - version: 1.2.3 - resolution: "word-wrap@npm:1.2.3" - checksum: 30b48f91fcf12106ed3186ae4fa86a6a1842416df425be7b60485de14bec665a54a68e4b5156647dec3a70f25e84d270ca8bc8cd23182ed095f5c7206a938c1f +"word-wrap@npm:~1.2.3": + version: 1.2.4 + resolution: "word-wrap@npm:1.2.4" + checksum: 8f1f2e0a397c0e074ca225ba9f67baa23f99293bc064e31355d426ae91b8b3f6b5f6c1fc9ae5e9141178bb362d563f55e62fd8d5c31f2a77e3ade56cb3e35bd1 languageName: node linkType: hard @@ -41493,6 +42510,17 @@ __metadata: languageName: node linkType: hard +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, 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:^2.0.0": version: 2.1.0 resolution: "wrap-ansi@npm:2.1.0" @@ -41514,14 +42542,14 @@ __metadata: languageName: node linkType: hard -"wrap-ansi@npm:^7.0.0": - version: 7.0.0 - resolution: "wrap-ansi@npm:7.0.0" +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" dependencies: - ansi-styles: ^4.0.0 - string-width: ^4.1.0 - strip-ansi: ^6.0.0 - checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b + ansi-styles: ^6.1.0 + string-width: ^5.0.1 + strip-ansi: ^7.0.1 + checksum: 371733296dc2d616900ce15a0049dca0ef67597d6394c57347ba334393599e800bab03c41d4d45221b6bc967b8c453ec3ae4749eff3894202d16800fdfe0e238 languageName: node linkType: hard @@ -41664,16 +42692,6 @@ __metadata: languageName: node linkType: hard -"xml2js@npm:0.4.19": - version: 0.4.19 - resolution: "xml2js@npm:0.4.19" - dependencies: - sax: ">=0.6.0" - xmlbuilder: ~9.0.1 - checksum: ca8b2fee430d450a18947786bfd7cd1a353ee00fc6fd550acbc8a8e65f1b4df5e9786fcb2990c1a5514ecd554d445fb74e1d716b3a4fcfffc10554aeb5db482b - languageName: node - linkType: hard - "xml2js@npm:^0.4.11, xml2js@npm:^0.4.19, xml2js@npm:^0.4.23": version: 0.4.23 resolution: "xml2js@npm:0.4.23" @@ -41685,12 +42703,12 @@ __metadata: linkType: hard "xml2js@npm:^0.6.0": - version: 0.6.0 - resolution: "xml2js@npm:0.6.0" + version: 0.6.2 + resolution: "xml2js@npm:0.6.2" dependencies: sax: ">=0.6.0" xmlbuilder: ~11.0.0 - checksum: 437f353fd66d367bf158e9555a0625df9965d944e499728a5c6bc92a54a2763179b144f14b7e1c725040f56bbd22b0fa6cfcb09ec4faf39c45ce01efe631f40b + checksum: 458a83806193008edff44562c0bdb982801d61ee7867ae58fd35fab781e69e17f40dfeb8fc05391a4648c9c54012066d3955fe5d993ffbe4dc63399023f32ac2 languageName: node linkType: hard @@ -41715,13 +42733,6 @@ __metadata: languageName: node linkType: hard -"xmlbuilder@npm:~9.0.1": - version: 9.0.7 - resolution: "xmlbuilder@npm:9.0.7" - checksum: 8193bb323806a002764f013bea0c6e9ff2dc26fd29109408761b16b59a8ad2214c2abe8e691755fd8b525586e3a0e1efeb92335947d7b0899032b779f1705a53 - languageName: node - linkType: hard - "xmlchars@npm:^2.2.0": version: 2.2.0 resolution: "xmlchars@npm:2.2.0"