diff --git a/packages/app-next/package.json b/packages/app-next/package.json index d98cc91a57..5c93e16311 100644 --- a/packages/app-next/package.json +++ b/packages/app-next/package.json @@ -15,90 +15,51 @@ "@backstage/app-defaults": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/cli": "workspace:^", + "@backstage/config": "workspace:^", "@backstage/core-app-api": "workspace:^", - "@backstage/core-compat-api": "workspace:^", "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", "@backstage/frontend-app-api": "workspace:^", - "@backstage/frontend-plugin-api": "workspace:^", "@backstage/integration-react": "workspace:^", - "@backstage/plugin-adr": "workspace:^", - "@backstage/plugin-airbrake": "workspace:^", - "@backstage/plugin-apache-airflow": "workspace:^", "@backstage/plugin-api-docs": "workspace:^", - "@backstage/plugin-app-visualizer": "workspace:^", - "@backstage/plugin-azure-devops": "workspace:^", - "@backstage/plugin-azure-sites": "workspace:^", - "@backstage/plugin-badges": "workspace:^", + "@backstage/plugin-auth-react": "workspace:^", "@backstage/plugin-catalog": "workspace:^", "@backstage/plugin-catalog-common": "workspace:^", "@backstage/plugin-catalog-graph": "workspace:^", "@backstage/plugin-catalog-import": "workspace:^", "@backstage/plugin-catalog-react": "workspace:^", "@backstage/plugin-catalog-unprocessed-entities": "workspace:^", - "@backstage/plugin-cloudbuild": "workspace:^", - "@backstage/plugin-code-coverage": "workspace:^", - "@backstage/plugin-cost-insights": "workspace:^", - "@backstage/plugin-devtools": "workspace:^", - "@backstage/plugin-dynatrace": "workspace:^", - "@backstage/plugin-entity-feedback": "workspace:^", - "@backstage/plugin-explore": "workspace:^", - "@backstage/plugin-gcalendar": "workspace:^", - "@backstage/plugin-gcp-projects": "workspace:^", - "@backstage/plugin-github-actions": "workspace:^", - "@backstage/plugin-gocd": "workspace:^", - "@backstage/plugin-graphiql": "workspace:^", "@backstage/plugin-home": "workspace:^", - "@backstage/plugin-jenkins": "workspace:^", - "@backstage/plugin-kafka": "workspace:^", "@backstage/plugin-kubernetes": "workspace:^", - "@backstage/plugin-lighthouse": "workspace:^", - "@backstage/plugin-linguist": "workspace:^", - "@backstage/plugin-linguist-common": "workspace:^", - "@backstage/plugin-microsoft-calendar": "workspace:^", - "@backstage/plugin-newrelic": "workspace:^", - "@backstage/plugin-newrelic-dashboard": "workspace:^", - "@backstage/plugin-octopus-deploy": "workspace:^", + "@backstage/plugin-kubernetes-cluster": "workspace:^", + "@backstage/plugin-notifications": "workspace:^", "@backstage/plugin-org": "workspace:^", - "@backstage/plugin-pagerduty": "workspace:^", "@backstage/plugin-permission-react": "workspace:^", - "@backstage/plugin-playlist": "workspace:^", - "@backstage/plugin-puppetdb": "workspace:^", - "@backstage/plugin-rollbar": "workspace:^", "@backstage/plugin-scaffolder": "workspace:^", "@backstage/plugin-scaffolder-react": "workspace:^", "@backstage/plugin-search": "workspace:^", "@backstage/plugin-search-common": "workspace:^", "@backstage/plugin-search-react": "workspace:^", - "@backstage/plugin-sentry": "workspace:^", - "@backstage/plugin-shortcuts": "workspace:^", - "@backstage/plugin-stackstorm": "workspace:^", - "@backstage/plugin-tech-insights": "workspace:^", - "@backstage/plugin-tech-radar": "workspace:^", + "@backstage/plugin-signals": "workspace:^", "@backstage/plugin-techdocs": "workspace:^", "@backstage/plugin-techdocs-module-addons-contrib": "workspace:^", "@backstage/plugin-techdocs-react": "workspace:^", - "@backstage/plugin-todo": "workspace:^", "@backstage/plugin-user-settings": "workspace:^", "@backstage/theme": "workspace:^", - "@circleci/backstage-plugin": "^0.1.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.61", "@octokit/rest": "^19.0.3", - "@oriflame/backstage-plugin-score-card": "^0.8.0", - "@roadiehq/backstage-plugin-buildkite": "^2.0.8", - "@roadiehq/backstage-plugin-github-insights": "^2.0.5", - "@roadiehq/backstage-plugin-github-pull-requests": "^2.2.7", - "@roadiehq/backstage-plugin-travis-ci": "^2.0.5", - "app-next-example-plugin": "workspace:^", + "@vitejs/plugin-react": "^4.0.4", "history": "^5.0.0", - "lodash": "^4.17.21", "react": "^18.0.2", "react-dom": "^18.0.2", "react-router": "^6.3.0", "react-router-dom": "^6.3.0", "react-use": "^17.2.4", + "vite": "^4.4.9", + "vite-plugin-html": "^3.2.0", + "vite-plugin-node-polyfills": "^0.21.0", "zen-observable": "^0.10.0" }, "devDependencies": { diff --git a/packages/app/package.json b/packages/app/package.json index f1911474e4..037bbc6295 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -44,81 +44,35 @@ "@backstage/core-plugin-api": "workspace:^", "@backstage/frontend-app-api": "workspace:^", "@backstage/integration-react": "workspace:^", - "@backstage/plugin-adr": "workspace:^", - "@backstage/plugin-airbrake": "workspace:^", - "@backstage/plugin-apache-airflow": "workspace:^", "@backstage/plugin-api-docs": "workspace:^", "@backstage/plugin-auth-react": "workspace:^", - "@backstage/plugin-azure-devops": "workspace:^", - "@backstage/plugin-azure-sites": "workspace:^", - "@backstage/plugin-badges": "workspace:^", "@backstage/plugin-catalog": "workspace:^", "@backstage/plugin-catalog-common": "workspace:^", "@backstage/plugin-catalog-graph": "workspace:^", "@backstage/plugin-catalog-import": "workspace:^", "@backstage/plugin-catalog-react": "workspace:^", "@backstage/plugin-catalog-unprocessed-entities": "workspace:^", - "@backstage/plugin-cloudbuild": "workspace:^", - "@backstage/plugin-code-coverage": "workspace:^", - "@backstage/plugin-cost-insights": "workspace:^", - "@backstage/plugin-devtools": "workspace:^", - "@backstage/plugin-dynatrace": "workspace:^", - "@backstage/plugin-entity-feedback": "workspace:^", - "@backstage/plugin-explore": "workspace:^", - "@backstage/plugin-gcalendar": "workspace:^", - "@backstage/plugin-gcp-projects": "workspace:^", - "@backstage/plugin-github-actions": "workspace:^", - "@backstage/plugin-github-pull-requests-board": "workspace:^", - "@backstage/plugin-gocd": "workspace:^", - "@backstage/plugin-graphiql": "workspace:^", "@backstage/plugin-home": "workspace:^", - "@backstage/plugin-jenkins": "workspace:^", - "@backstage/plugin-kafka": "workspace:^", "@backstage/plugin-kubernetes": "workspace:^", "@backstage/plugin-kubernetes-cluster": "workspace:^", - "@backstage/plugin-lighthouse": "workspace:^", - "@backstage/plugin-linguist": "workspace:^", - "@backstage/plugin-linguist-common": "workspace:^", - "@backstage/plugin-microsoft-calendar": "workspace:^", - "@backstage/plugin-newrelic": "workspace:^", - "@backstage/plugin-newrelic-dashboard": "workspace:^", - "@backstage/plugin-nomad": "workspace:^", "@backstage/plugin-notifications": "workspace:^", - "@backstage/plugin-octopus-deploy": "workspace:^", "@backstage/plugin-org": "workspace:^", - "@backstage/plugin-pagerduty": "workspace:^", "@backstage/plugin-permission-react": "workspace:^", - "@backstage/plugin-playlist": "workspace:^", - "@backstage/plugin-puppetdb": "workspace:^", - "@backstage/plugin-rollbar": "workspace:^", "@backstage/plugin-scaffolder": "workspace:^", "@backstage/plugin-scaffolder-react": "workspace:^", "@backstage/plugin-search": "workspace:^", "@backstage/plugin-search-common": "workspace:^", "@backstage/plugin-search-react": "workspace:^", - "@backstage/plugin-sentry": "workspace:^", - "@backstage/plugin-shortcuts": "workspace:^", "@backstage/plugin-signals": "workspace:^", - "@backstage/plugin-stack-overflow": "workspace:^", - "@backstage/plugin-stackstorm": "workspace:^", - "@backstage/plugin-tech-insights": "workspace:^", - "@backstage/plugin-tech-radar": "workspace:^", "@backstage/plugin-techdocs": "workspace:^", "@backstage/plugin-techdocs-module-addons-contrib": "workspace:^", "@backstage/plugin-techdocs-react": "workspace:^", - "@backstage/plugin-todo": "workspace:^", "@backstage/plugin-user-settings": "workspace:^", "@backstage/theme": "workspace:^", - "@circleci/backstage-plugin": "^0.1.1", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.61", "@octokit/rest": "^19.0.3", - "@oriflame/backstage-plugin-score-card": "^0.8.0", - "@roadiehq/backstage-plugin-buildkite": "^2.0.8", - "@roadiehq/backstage-plugin-github-insights": "^2.0.5", - "@roadiehq/backstage-plugin-github-pull-requests": "^2.2.7", - "@roadiehq/backstage-plugin-travis-ci": "^2.0.5", "@vitejs/plugin-react": "^4.0.4", "history": "^5.0.0", "react": "^18.0.2", diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json index 757e4b269f..9de8bb1788 100644 --- a/packages/backend-next/package.json +++ b/packages/backend-next/package.json @@ -29,32 +29,23 @@ "@backstage/backend-plugin-api": "workspace:^", "@backstage/backend-tasks": "workspace:^", "@backstage/catalog-model": "workspace:^", - "@backstage/plugin-adr-backend": "workspace:^", "@backstage/plugin-app-backend": "workspace:^", "@backstage/plugin-auth-backend": "workspace:^", "@backstage/plugin-auth-backend-module-github-provider": "workspace:^", "@backstage/plugin-auth-backend-module-guest-provider": "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-backstage-openapi": "workspace:^", "@backstage/plugin-catalog-backend-module-openapi": "workspace:^", "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^", "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^", "@backstage/plugin-devtools-backend": "workspace:^", - "@backstage/plugin-entity-feedback-backend": "workspace:^", - "@backstage/plugin-jenkins-backend": "workspace:^", "@backstage/plugin-kubernetes-backend": "workspace:^", - "@backstage/plugin-lighthouse-backend": "workspace:^", - "@backstage/plugin-linguist-backend": "workspace:^", - "@backstage/plugin-nomad-backend": "workspace:^", "@backstage/plugin-notifications-backend": "workspace:^", "@backstage/plugin-permission-backend": "workspace:^", "@backstage/plugin-permission-backend-module-allow-all-policy": "workspace:^", "@backstage/plugin-permission-common": "workspace:^", "@backstage/plugin-permission-node": "workspace:^", - "@backstage/plugin-playlist-backend": "workspace:^", "@backstage/plugin-proxy-backend": "workspace:^", "@backstage/plugin-scaffolder-backend": "workspace:^", "@backstage/plugin-scaffolder-backend-module-github": "workspace:^", @@ -64,9 +55,7 @@ "@backstage/plugin-search-backend-module-techdocs": "workspace:^", "@backstage/plugin-search-backend-node": "workspace:^", "@backstage/plugin-signals-backend": "workspace:^", - "@backstage/plugin-sonarqube-backend": "workspace:^", - "@backstage/plugin-techdocs-backend": "workspace:^", - "@backstage/plugin-todo-backend": "workspace:^" + "@backstage/plugin-techdocs-backend": "workspace:^" }, "devDependencies": { "@backstage/cli": "workspace:^" diff --git a/packages/backend/package.json b/packages/backend/package.json index aa128febbb..ee2d70a09a 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -32,35 +32,21 @@ "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", "@backstage/integration": "workspace:^", - "@backstage/plugin-adr-backend": "workspace:^", "@backstage/plugin-app-backend": "workspace:^", "@backstage/plugin-auth-backend": "workspace:^", "@backstage/plugin-auth-node": "workspace:^", - "@backstage/plugin-azure-devops-backend": "workspace:^", - "@backstage/plugin-azure-sites-common": "workspace:^", - "@backstage/plugin-badges-backend": "workspace:^", "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^", "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", - "@backstage/plugin-code-coverage-backend": "workspace:^", "@backstage/plugin-devtools-backend": "workspace:^", - "@backstage/plugin-entity-feedback-backend": "workspace:^", "@backstage/plugin-events-backend": "workspace:^", "@backstage/plugin-events-node": "workspace:^", - "@backstage/plugin-explore-backend": "workspace:^", - "@backstage/plugin-jenkins-backend": "workspace:^", - "@backstage/plugin-kafka-backend": "workspace:^", "@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:^", - "@backstage/plugin-playlist-backend": "workspace:^", "@backstage/plugin-proxy-backend": "workspace:^", - "@backstage/plugin-rollbar-backend": "workspace:^", "@backstage/plugin-scaffolder-backend": "workspace:^", "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "workspace:^", "@backstage/plugin-scaffolder-backend-module-gitlab": "workspace:^", @@ -74,11 +60,7 @@ "@backstage/plugin-search-backend-node": "workspace:^", "@backstage/plugin-signals-backend": "workspace:^", "@backstage/plugin-signals-node": "workspace:^", - "@backstage/plugin-tech-insights-backend": "workspace:^", - "@backstage/plugin-tech-insights-backend-module-jsonfc": "workspace:^", - "@backstage/plugin-tech-insights-node": "workspace:^", "@backstage/plugin-techdocs-backend": "workspace:^", - "@backstage/plugin-todo-backend": "workspace:^", "@gitbeaker/node": "^35.1.0", "@octokit/rest": "^19.0.3", "@opentelemetry/api": "^1.4.1", diff --git a/packages/core-compat-api/package.json b/packages/core-compat-api/package.json index 8edbf6a506..6dd2115b9c 100644 --- a/packages/core-compat-api/package.json +++ b/packages/core-compat-api/package.json @@ -37,13 +37,13 @@ "@types/react": "^16.13.1 || ^17.0.0" }, "devDependencies": { + "@backstage-community/plugin-puppetdb": "^0.1.18", + "@backstage-community/plugin-stackstorm": "^0.1.16", "@backstage/cli": "workspace:^", "@backstage/core-app-api": "workspace:^", "@backstage/frontend-app-api": "workspace:^", "@backstage/frontend-test-utils": "workspace:^", "@backstage/plugin-catalog": "workspace:^", - "@backstage/plugin-puppetdb": "workspace:^", - "@backstage/plugin-stackstorm": "workspace:^", "@oriflame/backstage-plugin-score-card": "^0.8.0", "@testing-library/jest-dom": "^6.0.0", "@testing-library/react": "^15.0.0" diff --git a/plugins/linguist-backend/CHANGELOG.md b/plugins/linguist-backend/CHANGELOG.md deleted file mode 100644 index 6ab8a6dd4c..0000000000 --- a/plugins/linguist-backend/CHANGELOG.md +++ /dev/null @@ -1,1085 +0,0 @@ -# @backstage/plugin-linguist-backend - -## 0.5.15 - -### Patch Changes - -- d5a1fe1: Replaced winston logger with `LoggerService` -- Updated dependencies - - @backstage/backend-common@0.21.7 - - @backstage/backend-plugin-api@0.6.17 - - @backstage/backend-tasks@0.5.22 - - @backstage/catalog-client@1.6.4 - - @backstage/plugin-catalog-node@1.11.1 - - @backstage/catalog-model@1.4.5 - - @backstage/config@1.2.0 - - @backstage/errors@1.2.4 - - @backstage/types@1.1.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.15-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.21.7-next.1 - - @backstage/backend-plugin-api@0.6.17-next.1 - - @backstage/catalog-client@1.6.4-next.0 - - @backstage/backend-tasks@0.5.22-next.1 - - @backstage/catalog-model@1.4.5 - - @backstage/config@1.2.0 - - @backstage/errors@1.2.4 - - @backstage/types@1.1.1 - - @backstage/plugin-catalog-node@1.11.1-next.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.15-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.21.7-next.0 - - @backstage/backend-plugin-api@0.6.17-next.0 - - @backstage/backend-tasks@0.5.22-next.0 - - @backstage/catalog-client@1.6.3 - - @backstage/catalog-model@1.4.5 - - @backstage/config@1.2.0 - - @backstage/errors@1.2.4 - - @backstage/types@1.1.1 - - @backstage/plugin-catalog-node@1.11.1-next.0 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.14 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-node@1.11.0 - - @backstage/catalog-client@1.6.3 - - @backstage/backend-common@0.21.6 - - @backstage/backend-plugin-api@0.6.16 - - @backstage/backend-tasks@0.5.21 - - @backstage/catalog-model@1.4.5 - - @backstage/config@1.2.0 - - @backstage/errors@1.2.4 - - @backstage/types@1.1.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.13 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-node@1.10.0 - - @backstage/catalog-client@1.6.2 - - @backstage/backend-common@0.21.5 - - @backstage/backend-tasks@0.5.20 - - @backstage/backend-plugin-api@0.6.15 - - @backstage/catalog-model@1.4.5 - - @backstage/config@1.2.0 - - @backstage/errors@1.2.4 - - @backstage/types@1.1.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.12 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-node@1.9.0 - -## 0.5.11 - -### Patch Changes - -- 61ff58f: Migrated to support new auth services. -- 4467036: Allow unauthenticated access to health check endpoint. -- 786c9c4: Updated dependency `luxon` to `^3.0.0`. -- 0fb419b: Updated dependency `uuid` to `^9.0.0`. - Updated dependency `@types/uuid` to `^9.0.0`. -- 051fda1: Removed unused `dependencies` and `devDependencies` identified in Knip Report -- Updated dependencies - - @backstage/backend-common@0.21.4 - - @backstage/config@1.2.0 - - @backstage/errors@1.2.4 - - @backstage/backend-plugin-api@0.6.14 - - @backstage/plugin-catalog-node@1.8.0 - - @backstage/catalog-client@1.6.1 - - @backstage/backend-tasks@0.5.19 - - @backstage/catalog-model@1.4.5 - - @backstage/types@1.1.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.11-next.2 - -### Patch Changes - -- 051fda1: Removed unused `dependencies` and `devDependencies` identified in Knip Report -- Updated dependencies - - @backstage/catalog-client@1.6.1-next.1 - - @backstage/backend-common@0.21.4-next.2 - - @backstage/plugin-catalog-node@1.8.0-next.2 - - @backstage/backend-plugin-api@0.6.14-next.2 - - @backstage/backend-tasks@0.5.19-next.2 - - @backstage/catalog-model@1.4.5-next.0 - - @backstage/config@1.2.0-next.1 - - @backstage/errors@1.2.4-next.0 - - @backstage/types@1.1.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.11-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/config@1.2.0-next.1 - - @backstage/backend-common@0.21.4-next.1 - - @backstage/backend-plugin-api@0.6.14-next.1 - - @backstage/backend-tasks@0.5.19-next.1 - - @backstage/plugin-auth-node@0.4.9-next.1 - - @backstage/catalog-client@1.6.1-next.0 - - @backstage/catalog-model@1.4.5-next.0 - - @backstage/errors@1.2.4-next.0 - - @backstage/types@1.1.1 - - @backstage/plugin-catalog-node@1.8.0-next.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.10-next.0 - -### Patch Changes - -- 61ff58f: Migrated to support new auth services. -- 786c9c4: Updated dependency `luxon` to `^3.0.0`. -- 0fb419b: Updated dependency `uuid` to `^9.0.0`. - Updated dependency `@types/uuid` to `^9.0.0`. -- Updated dependencies - - @backstage/backend-common@0.21.3-next.0 - - @backstage/plugin-auth-node@0.4.8-next.0 - - @backstage/errors@1.2.4-next.0 - - @backstage/backend-plugin-api@0.6.13-next.0 - - @backstage/plugin-catalog-node@1.8.0-next.0 - - @backstage/backend-tasks@0.5.18-next.0 - - @backstage/catalog-client@1.6.1-next.0 - - @backstage/catalog-model@1.4.5-next.0 - - @backstage/config@1.1.2-next.0 - - @backstage/types@1.1.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.7 - -### Patch Changes - -- b64ce5a: Updated New Backend System instructions to use default import -- 9aac2b0: Use `--cwd` as the first `yarn` argument -- 6bb6f3e: Updated dependency `fs-extra` to `^11.2.0`. - Updated dependency `@types/fs-extra` to `^11.0.0`. -- Updated dependencies - - @backstage/backend-common@0.21.0 - - @backstage/plugin-auth-node@0.4.4 - - @backstage/backend-plugin-api@0.6.10 - - @backstage/backend-tasks@0.5.15 - - @backstage/catalog-model@1.4.4 - - @backstage/catalog-client@1.6.0 - - @backstage/plugin-catalog-node@1.7.0 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - - @backstage/types@1.1.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.7-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.21.0-next.3 - - @backstage/backend-tasks@0.5.15-next.3 - - @backstage/plugin-catalog-node@1.6.2-next.3 - - @backstage/plugin-auth-node@0.4.4-next.3 - - @backstage/backend-plugin-api@0.6.10-next.3 - - @backstage/catalog-client@1.6.0-next.1 - - @backstage/catalog-model@1.4.4-next.0 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - - @backstage/types@1.1.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.7-next.2 - -### Patch Changes - -- 9aac2b0: Use `--cwd` as the first `yarn` argument -- Updated dependencies - - @backstage/backend-common@0.21.0-next.2 - - @backstage/backend-plugin-api@0.6.10-next.2 - - @backstage/backend-tasks@0.5.15-next.2 - - @backstage/plugin-auth-node@0.4.4-next.2 - - @backstage/plugin-catalog-node@1.6.2-next.2 - - @backstage/config@1.1.1 - - @backstage/catalog-client@1.6.0-next.1 - - @backstage/catalog-model@1.4.4-next.0 - - @backstage/errors@1.2.3 - - @backstage/types@1.1.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.7-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.4.4-next.0 - - @backstage/catalog-client@1.6.0-next.1 - - @backstage/backend-plugin-api@0.6.10-next.1 - - @backstage/backend-common@0.21.0-next.1 - - @backstage/backend-tasks@0.5.15-next.1 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - - @backstage/types@1.1.1 - - @backstage/plugin-auth-node@0.4.4-next.1 - - @backstage/plugin-catalog-node@1.6.2-next.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.7-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.21.0-next.0 - - @backstage/catalog-client@1.6.0-next.0 - - @backstage/backend-tasks@0.5.15-next.0 - - @backstage/plugin-auth-node@0.4.4-next.0 - - @backstage/plugin-catalog-node@1.6.2-next.0 - - @backstage/backend-plugin-api@0.6.10-next.0 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - - @backstage/types@1.1.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.6 - -### Patch Changes - -- 4016f21: Remove some unused dependencies -- Updated dependencies - - @backstage/backend-common@0.20.1 - - @backstage/catalog-client@1.5.2 - - @backstage/backend-plugin-api@0.6.9 - - @backstage/plugin-catalog-node@1.6.1 - - @backstage/backend-tasks@0.5.14 - - @backstage/plugin-auth-node@0.4.3 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - - @backstage/types@1.1.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.6-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-plugin-api@0.6.9-next.2 - - @backstage/backend-common@0.20.1-next.2 - - @backstage/plugin-auth-node@0.4.3-next.2 - - @backstage/plugin-catalog-node@1.6.1-next.2 - - @backstage/backend-tasks@0.5.14-next.2 - -## 0.5.6-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.20.1-next.1 - - @backstage/config@1.1.1 - - @backstage/backend-tasks@0.5.14-next.1 - - @backstage/plugin-auth-node@0.4.3-next.1 - - @backstage/backend-plugin-api@0.6.9-next.1 - - @backstage/catalog-client@1.5.2-next.0 - - @backstage/catalog-model@1.4.3 - - @backstage/errors@1.2.3 - - @backstage/types@1.1.1 - - @backstage/plugin-catalog-node@1.6.1-next.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.6-next.0 - -### Patch Changes - -- 4016f21: Remove some unused dependencies -- Updated dependencies - - @backstage/backend-common@0.20.1-next.0 - - @backstage/catalog-client@1.5.2-next.0 - - @backstage/plugin-catalog-node@1.6.1-next.0 - - @backstage/backend-plugin-api@0.6.9-next.0 - - @backstage/backend-tasks@0.5.14-next.0 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - - @backstage/types@1.1.1 - - @backstage/plugin-auth-node@0.4.3-next.0 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.5 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.20.0 - - @backstage/plugin-catalog-node@1.6.0 - - @backstage/catalog-client@1.5.0 - - @backstage/backend-tasks@0.5.13 - - @backstage/plugin-auth-node@0.4.2 - - @backstage/backend-plugin-api@0.6.8 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - - @backstage/types@1.1.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.5-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.20.0-next.3 - - @backstage/backend-plugin-api@0.6.8-next.3 - - @backstage/backend-tasks@0.5.13-next.3 - - @backstage/catalog-client@1.5.0-next.1 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - - @backstage/types@1.1.1 - - @backstage/plugin-auth-node@0.4.2-next.3 - - @backstage/plugin-catalog-node@1.6.0-next.3 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.5-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-node@1.6.0-next.2 - - @backstage/backend-common@0.20.0-next.2 - - @backstage/plugin-auth-node@0.4.2-next.2 - - @backstage/catalog-client@1.5.0-next.1 - - @backstage/backend-plugin-api@0.6.8-next.2 - - @backstage/backend-tasks@0.5.13-next.2 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - - @backstage/types@1.1.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.5-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-client@1.5.0-next.0 - - @backstage/backend-common@0.20.0-next.1 - - @backstage/backend-plugin-api@0.6.8-next.1 - - @backstage/backend-tasks@0.5.13-next.1 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - - @backstage/types@1.1.1 - - @backstage/plugin-auth-node@0.4.2-next.1 - - @backstage/plugin-catalog-node@1.5.1-next.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.5-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.20.0-next.0 - - @backstage/backend-tasks@0.5.13-next.0 - - @backstage/plugin-auth-node@0.4.2-next.0 - - @backstage/plugin-catalog-node@1.5.1-next.0 - - @backstage/backend-plugin-api@0.6.8-next.0 - - @backstage/catalog-client@1.4.6 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - - @backstage/types@1.1.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.4 - -### Patch Changes - -- 013611b42e: `knex` has been bumped to major version 3 and `better-sqlite3` to major version 9, which deprecate node 16 support. -- Updated dependencies - - @backstage/plugin-catalog-node@1.5.0 - - @backstage/backend-common@0.19.9 - - @backstage/backend-plugin-api@0.6.7 - - @backstage/backend-tasks@0.5.12 - - @backstage/catalog-client@1.4.6 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - - @backstage/types@1.1.1 - - @backstage/plugin-auth-node@0.4.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.4-next.2 - -### Patch Changes - -- [#20570](https://github.com/backstage/backstage/pull/20570) [`013611b42e`](https://github.com/backstage/backstage/commit/013611b42ed457fefa9bb85fddf416cf5e0c1f76) Thanks [@freben](https://github.com/freben)! - `knex` has been bumped to major version 3 and `better-sqlite3` to major version 9, which deprecate node 16 support. - -- Updated dependencies - - @backstage/backend-plugin-api@0.6.7-next.2 - - @backstage/backend-common@0.19.9-next.2 - - @backstage/backend-tasks@0.5.12-next.2 - - @backstage/plugin-auth-node@0.4.1-next.2 - - @backstage/plugin-catalog-node@1.5.0-next.2 - -## 0.5.4-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-node@1.5.0-next.1 - - @backstage/backend-common@0.19.9-next.1 - - @backstage/backend-tasks@0.5.12-next.1 - - @backstage/plugin-auth-node@0.4.1-next.1 - - @backstage/backend-plugin-api@0.6.7-next.1 - - @backstage/catalog-client@1.4.5 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - - @backstage/types@1.1.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.4-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.9-next.0 - - @backstage/backend-plugin-api@0.6.7-next.0 - - @backstage/backend-tasks@0.5.12-next.0 - - @backstage/catalog-client@1.4.5 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - - @backstage/types@1.1.1 - - @backstage/plugin-auth-node@0.4.1-next.0 - - @backstage/plugin-catalog-node@1.4.8-next.0 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.3 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-tasks@0.5.11 - - @backstage/backend-common@0.19.8 - - @backstage/plugin-catalog-node@1.4.7 - - @backstage/plugin-auth-node@0.4.0 - - @backstage/catalog-model@1.4.3 - - @backstage/errors@1.2.3 - - @backstage/backend-plugin-api@0.6.6 - - @backstage/catalog-client@1.4.5 - - @backstage/config@1.1.1 - - @backstage/types@1.1.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.3-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.8-next.2 - - @backstage/plugin-auth-node@0.4.0-next.2 - - @backstage/catalog-model@1.4.3-next.0 - - @backstage/errors@1.2.3-next.0 - - @backstage/backend-tasks@0.5.11-next.2 - - @backstage/plugin-catalog-node@1.4.7-next.2 - - @backstage/backend-plugin-api@0.6.6-next.2 - - @backstage/catalog-client@1.4.5-next.0 - - @backstage/config@1.1.1-next.0 - - @backstage/types@1.1.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.2-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-tasks@0.5.10-next.1 - - @backstage/plugin-catalog-node@1.4.6-next.1 - - @backstage/backend-common@0.19.7-next.1 - - @backstage/backend-plugin-api@0.6.5-next.1 - - @backstage/plugin-auth-node@0.3.2-next.1 - - @backstage/config@1.1.0 - - @backstage/catalog-client@1.4.4 - - @backstage/catalog-model@1.4.2 - - @backstage/errors@1.2.2 - - @backstage/types@1.1.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.2-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-auth-node@0.3.2-next.0 - - @backstage/backend-common@0.19.7-next.0 - - @backstage/config@1.1.0 - - @backstage/backend-plugin-api@0.6.5-next.0 - - @backstage/backend-tasks@0.5.10-next.0 - - @backstage/catalog-client@1.4.4 - - @backstage/catalog-model@1.4.2 - - @backstage/errors@1.2.2 - - @backstage/types@1.1.1 - - @backstage/plugin-catalog-node@1.4.6-next.0 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.5.0 - -### Minor Changes - -- 71114ac50e02: **BREAKING**: The export for the new backend system has been moved to be the `default` export. - - For example, if you are currently importing the plugin using the following pattern: - - ```ts - import { examplePlugin } from '@backstage/plugin-example-backend'; - - backend.add(examplePlugin); - ``` - - It should be migrated to this: - - ```ts - backend.add(import('@backstage/plugin-example-backend')); - ``` - -### Patch Changes - -- b2de501bda31: When creating the router using `createRouterFromConfig` or using the plugin for the new backend system the `linguist.useSourceLocation` configuration is now optional. -- cfc3ca6ce060: Changes needed to support MySQL -- Updated dependencies - - @backstage/backend-tasks@0.5.8 - - @backstage/backend-common@0.19.5 - - @backstage/plugin-auth-node@0.3.0 - - @backstage/config@1.1.0 - - @backstage/catalog-client@1.4.4 - - @backstage/catalog-model@1.4.2 - - @backstage/errors@1.2.2 - - @backstage/plugin-linguist-common@0.1.2 - - @backstage/types@1.1.1 - - @backstage/backend-plugin-api@0.6.3 - - @backstage/plugin-catalog-node@1.4.4 - -## 0.5.0-next.3 - -### Minor Changes - -- 71114ac50e02: **BREAKING**: The export for the new backend system has been moved to be the `default` export. - - For example, if you are currently importing the plugin using the following pattern: - - ```ts - import { examplePlugin } from '@backstage/plugin-example-backend'; - - backend.add(examplePlugin); - ``` - - It should be migrated to this: - - ```ts - backend.add(import('@backstage/plugin-example-backend')); - ``` - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-client@1.4.4-next.2 - - @backstage/catalog-model@1.4.2-next.2 - - @backstage/config@1.1.0-next.2 - - @backstage/errors@1.2.2-next.0 - - @backstage/plugin-linguist-common@0.1.2-next.0 - - @backstage/types@1.1.1-next.0 - - @backstage/backend-plugin-api@0.6.3-next.3 - - @backstage/backend-common@0.19.5-next.3 - - @backstage/backend-tasks@0.5.8-next.3 - - @backstage/plugin-auth-node@0.3.0-next.3 - - @backstage/plugin-catalog-node@1.4.4-next.3 - -## 0.4.3-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/config@1.1.0-next.1 - - @backstage/backend-tasks@0.5.8-next.2 - - @backstage/backend-common@0.19.5-next.2 - - @backstage/plugin-auth-node@0.3.0-next.2 - - @backstage/plugin-catalog-node@1.4.4-next.2 - - @backstage/backend-plugin-api@0.6.3-next.2 - - @backstage/catalog-model@1.4.2-next.1 - - @backstage/catalog-client@1.4.4-next.1 - - @backstage/errors@1.2.1 - - @backstage/types@1.1.0 - - @backstage/plugin-linguist-common@0.1.1 - -## 0.4.3-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/config@1.1.0-next.0 - - @backstage/backend-tasks@0.5.8-next.1 - - @backstage/backend-common@0.19.5-next.1 - - @backstage/backend-plugin-api@0.6.3-next.1 - - @backstage/catalog-model@1.4.2-next.0 - - @backstage/plugin-auth-node@0.3.0-next.1 - - @backstage/plugin-catalog-node@1.4.4-next.1 - - @backstage/catalog-client@1.4.4-next.0 - - @backstage/errors@1.2.1 - - @backstage/types@1.1.0 - - @backstage/plugin-linguist-common@0.1.1 - -## 0.4.2-next.0 - -### Patch Changes - -- b2de501bda31: When creating the router using `createRouterFromConfig` or using the plugin for the new backend system the `linguist.useSourceLocation` configuration is now optional. -- cfc3ca6ce060: Changes needed to support MySQL -- Updated dependencies - - @backstage/plugin-auth-node@0.3.0-next.0 - - @backstage/backend-common@0.19.4-next.0 - - @backstage/backend-tasks@0.5.7-next.0 - - @backstage/backend-plugin-api@0.6.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/types@1.1.0 - - @backstage/plugin-catalog-node@1.4.3-next.0 - - @backstage/plugin-linguist-common@0.1.1 - -## 0.4.0 - -### Minor Changes - -- d440f1dd0e72: Adds a processor to the linguist backend which can automatically add language tags to entities -- 0896d85d5ab5: **BREAKING**: Removed the alpha export plugin options from exported `linguistPlugin()` (used by the new backend system) in favour of static config. - -### Patch Changes - -- 12a8c94eda8d: Add package repository and homepage metadata -- 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 - - @backstage/backend-plugin-api@0.6.0 - - @backstage/plugin-linguist-common@0.1.1 - - @backstage/plugin-catalog-node@1.4.1 - - @backstage/plugin-auth-node@0.2.17 - - @backstage/backend-tasks@0.5.5 - - @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.4.0-next.2 - -### Minor Changes - -- d440f1dd0e72: Adds a processor to the linguist backend which can automatically add language tags to entities - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-linguist-common@0.1.1-next.1 - - @backstage/backend-plugin-api@0.6.0-next.2 - - @backstage/backend-tasks@0.5.5-next.2 - - @backstage/backend-common@0.19.2-next.2 - - @backstage/plugin-catalog-node@1.4.1-next.2 - - @backstage/plugin-auth-node@0.2.17-next.2 - -## 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 - -- Updated dependencies - - @backstage/backend-common@0.19.0-next.1 - - @backstage/errors@1.2.0-next.0 - - @backstage/catalog-model@1.4.0-next.0 - - @backstage/backend-tasks@0.5.3-next.1 - - @backstage/plugin-auth-node@0.2.15-next.1 - - @backstage/catalog-client@1.4.2-next.1 - - @backstage/config@1.0.7 - - @backstage/types@1.0.2 - - @backstage/plugin-linguist-common@0.1.0 - -## 0.3.0-next.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 - -- 3d11596a72b5: Update plugin installation docs to be more consistent across documentations -- Updated dependencies - - @backstage/catalog-client@1.4.2-next.0 - - @backstage/backend-common@0.18.6-next.0 - - @backstage/config@1.0.7 - - @backstage/backend-tasks@0.5.3-next.0 - - @backstage/catalog-model@1.3.0 - - @backstage/errors@1.1.5 - - @backstage/types@1.0.2 - - @backstage/plugin-auth-node@0.2.15-next.0 - - @backstage/plugin-linguist-common@0.1.0 - -## 0.2.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.18.5 - - @backstage/backend-tasks@0.5.2 - - @backstage/plugin-auth-node@0.2.14 - - @backstage/catalog-client@1.4.1 - - @backstage/catalog-model@1.3.0 - - @backstage/config@1.0.7 - - @backstage/errors@1.1.5 - - @backstage/types@1.0.2 - - @backstage/plugin-linguist-common@0.1.0 - -## 0.2.2-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.18.5-next.1 - - @backstage/backend-tasks@0.5.2-next.1 - - @backstage/plugin-auth-node@0.2.14-next.1 - - @backstage/config@1.0.7 - -## 0.2.2-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.18.5-next.0 - - @backstage/backend-tasks@0.5.2-next.0 - - @backstage/plugin-auth-node@0.2.14-next.0 - - @backstage/catalog-client@1.4.1 - - @backstage/catalog-model@1.3.0 - - @backstage/config@1.0.7 - - @backstage/errors@1.1.5 - - @backstage/types@1.0.2 - - @backstage/plugin-linguist-common@0.1.0 - -## 0.2.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.18.4 - - @backstage/catalog-client@1.4.1 - - @backstage/backend-tasks@0.5.1 - - @backstage/catalog-model@1.3.0 - - @backstage/plugin-auth-node@0.2.13 - - @backstage/config@1.0.7 - - @backstage/errors@1.1.5 - - @backstage/types@1.0.2 - - @backstage/plugin-linguist-common@0.1.0 - -## 0.2.1-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.3.0-next.0 - - @backstage/backend-common@0.18.4-next.2 - - @backstage/backend-tasks@0.5.1-next.2 - - @backstage/catalog-client@1.4.1-next.1 - - @backstage/config@1.0.7 - - @backstage/errors@1.1.5 - - @backstage/types@1.0.2 - - @backstage/plugin-auth-node@0.2.13-next.2 - - @backstage/plugin-linguist-common@0.1.0 - -## 0.2.1-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.18.4-next.2 - - @backstage/catalog-client@1.4.1-next.0 - - @backstage/backend-tasks@0.5.1-next.2 - - @backstage/catalog-model@1.2.1 - - @backstage/config@1.0.7 - - @backstage/errors@1.1.5 - - @backstage/types@1.0.2 - - @backstage/plugin-auth-node@0.2.13-next.2 - - @backstage/plugin-linguist-common@0.1.0 - -## 0.2.1-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-tasks@0.5.1-next.1 - - @backstage/backend-common@0.18.4-next.1 - - @backstage/catalog-client@1.4.0 - - @backstage/catalog-model@1.2.1 - - @backstage/config@1.0.7 - - @backstage/errors@1.1.5 - - @backstage/types@1.0.2 - - @backstage/plugin-auth-node@0.2.13-next.1 - - @backstage/plugin-linguist-common@0.1.0 - -## 0.2.1-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.18.4-next.0 - - @backstage/config@1.0.7 - - @backstage/backend-tasks@0.5.1-next.0 - - @backstage/catalog-client@1.4.0 - - @backstage/catalog-model@1.2.1 - - @backstage/errors@1.1.5 - - @backstage/types@1.0.2 - - @backstage/plugin-auth-node@0.2.13-next.0 - - @backstage/plugin-linguist-common@0.1.0 - -## 0.2.0 - -### Minor Changes - -- 4a1c318853d: **BREAKING** The linguist-backend `createRouter` now requires that the `tokenManger` is passed to the router. - -### Patch Changes - -- 8a298b47240: Added support for linguist-js options using the linguistJSOptions in the plugin, the available config can be found [here](https://www.npmjs.com/package/linguist-js#API). -- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. -- 2ea57821629: Fixed bug in LinguistBackendApi that caused initial batch of entities to be skipped. -- b271d5ca052: Allow kind to be configurable - - ```ts - return createRouter({ schedule: schedule, kind: ['Component'] }, { ...env }); - ``` - -- Updated dependencies - - @backstage/catalog-client@1.4.0 - - @backstage/plugin-auth-node@0.2.12 - - @backstage/backend-tasks@0.5.0 - - @backstage/backend-common@0.18.3 - - @backstage/errors@1.1.5 - - @backstage/catalog-model@1.2.1 - - @backstage/config@1.0.7 - - @backstage/types@1.0.2 - - @backstage/plugin-linguist-common@0.1.0 - -## 0.2.0-next.2 - -### Patch Changes - -- 8a298b47240: Added support for linguist-js options using the linguistJSOptions in the plugin, the available config can be found [here](https://www.npmjs.com/package/linguist-js#API). -- Updated dependencies - - @backstage/plugin-auth-node@0.2.12-next.2 - - @backstage/backend-tasks@0.5.0-next.2 - - @backstage/backend-common@0.18.3-next.2 - - @backstage/config@1.0.7-next.0 - -## 0.2.0-next.1 - -### Patch Changes - -- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. -- b271d5ca052: Allow kind to be configurable - - ```ts - return createRouter({ schedule: schedule, kind: ['Component'] }, { ...env }); - ``` - -- Updated dependencies - - @backstage/errors@1.1.5-next.0 - - @backstage/backend-common@0.18.3-next.1 - - @backstage/catalog-client@1.4.0-next.1 - - @backstage/plugin-auth-node@0.2.12-next.1 - - @backstage/backend-tasks@0.4.4-next.1 - - @backstage/config@1.0.7-next.0 - - @backstage/catalog-model@1.2.1-next.1 - - @backstage/types@1.0.2 - - @backstage/plugin-linguist-common@0.1.0 - -## 0.2.0-next.0 - -### Minor Changes - -- 4a1c318853: **BREAKING** The linguist-backend `createRouter` now requires that the `tokenManger` is passed to the router. - -### Patch Changes - -- 2ea5782162: Fixed bug in LinguistBackendApi that caused initial batch of entities to be skipped. -- Updated dependencies - - @backstage/catalog-client@1.4.0-next.0 - - @backstage/backend-tasks@0.4.4-next.0 - - @backstage/backend-common@0.18.3-next.0 - - @backstage/catalog-model@1.2.1-next.0 - - @backstage/config@1.0.6 - - @backstage/errors@1.1.4 - - @backstage/types@1.0.2 - - @backstage/plugin-auth-node@0.2.12-next.0 - - @backstage/plugin-linguist-common@0.1.0 - -## 0.1.0 - -### Minor Changes - -- 75cfee5688: Introduced the Linguist plugin, checkout the plugin's `README.md` for more details! - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.18.2 - - @backstage/catalog-model@1.2.0 - - @backstage/plugin-linguist-common@0.1.0 - - @backstage/backend-tasks@0.4.3 - - @backstage/catalog-client@1.3.1 - - @backstage/config@1.0.6 - - @backstage/errors@1.1.4 - - @backstage/types@1.0.2 - - @backstage/plugin-auth-node@0.2.11 diff --git a/plugins/linguist-backend/README.md b/plugins/linguist-backend/README.md deleted file mode 100644 index a303374a39..0000000000 --- a/plugins/linguist-backend/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Deprecated - -This package has been moved to the [backstage-community/plugins](https://github.com/backstage/community-plugins) repository. Migrate to using `@backstage-community/plugin-linguist-backend` instead. diff --git a/plugins/linguist-backend/api-report.md b/plugins/linguist-backend/api-report.md deleted file mode 100644 index e59b1229f7..0000000000 --- a/plugins/linguist-backend/api-report.md +++ /dev/null @@ -1,123 +0,0 @@ -## API Report File for "@backstage/plugin-linguist-backend" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts -import { AuthService } from '@backstage/backend-plugin-api'; -import { BackendFeature } from '@backstage/backend-plugin-api'; -import { CatalogProcessor } from '@backstage/plugin-catalog-node'; -import { CatalogProcessorCache } from '@backstage/plugin-catalog-node'; -import { Config } from '@backstage/config'; -import { DiscoveryService } from '@backstage/backend-plugin-api'; -import { Entity } from '@backstage/catalog-model'; -import express from 'express'; -import { HttpAuthService } from '@backstage/backend-plugin-api'; -import { HumanDuration } from '@backstage/types'; -import { Languages } from '@backstage/plugin-linguist-common'; -import { LanguageType } from '@backstage/plugin-linguist-common'; -import { LoggerService } from '@backstage/backend-plugin-api'; -import { PluginDatabaseManager } from '@backstage/backend-common'; -import { PluginEndpointDiscovery } from '@backstage/backend-common'; -import { PluginTaskScheduler } from '@backstage/backend-tasks'; -import { TaskScheduleDefinition } from '@backstage/backend-tasks'; -import { TokenManager } from '@backstage/backend-common'; -import { UrlReader } from '@backstage/backend-common'; - -// @public (undocumented) -export function createRouter( - pluginOptions: PluginOptions, - routerOptions: RouterOptions, -): Promise; - -// @public (undocumented) -export function createRouterFromConfig( - routerOptions: RouterOptions, -): Promise; - -// @public (undocumented) -export interface LinguistBackendApi { - // (undocumented) - getEntityLanguages(entityRef: string): Promise; - // (undocumented) - processEntities(): Promise; -} - -// @public -const linguistPlugin: () => BackendFeature; -export default linguistPlugin; - -// @public -export class LinguistTagsProcessor implements CatalogProcessor { - constructor(options: LinguistTagsProcessorOptions); - // (undocumented) - static fromConfig( - config: Config, - options: LinguistTagsProcessorOptions, - ): LinguistTagsProcessor; - // (undocumented) - getProcessorName(): string; - preProcessEntity( - entity: Entity, - _: any, - __: any, - ___: any, - cache: CatalogProcessorCache, - ): Promise; -} - -// @public -export interface LinguistTagsProcessorOptions { - bytesThreshold?: number; - cacheTTL?: HumanDuration; - // (undocumented) - discovery: DiscoveryService; - languageMap?: Record; - languageTypes?: LanguageType[]; - // (undocumented) - logger: LoggerService; - shouldProcessEntity?: ShouldProcessEntity; -} - -// @public (undocumented) -export interface PluginOptions { - // (undocumented) - age?: HumanDuration; - // (undocumented) - batchSize?: number; - // (undocumented) - kind?: string[]; - // (undocumented) - linguistJsOptions?: Record; - // (undocumented) - schedule?: TaskScheduleDefinition; - // (undocumented) - useSourceLocation?: boolean; -} - -// @public (undocumented) -export interface RouterOptions { - // (undocumented) - auth?: AuthService; - // (undocumented) - config?: Config; - // (undocumented) - database: PluginDatabaseManager; - // (undocumented) - discovery: PluginEndpointDiscovery; - // (undocumented) - httpAuth?: HttpAuthService; - // (undocumented) - linguistBackendApi?: LinguistBackendApi; - // (undocumented) - logger: LoggerService; - // (undocumented) - reader: UrlReader; - // (undocumented) - scheduler?: PluginTaskScheduler; - // (undocumented) - tokenManager: TokenManager; -} - -// @public -export type ShouldProcessEntity = (entity: Entity) => boolean; -``` diff --git a/plugins/linguist-backend/catalog-info.yaml b/plugins/linguist-backend/catalog-info.yaml deleted file mode 100644 index de7545d39b..0000000000 --- a/plugins/linguist-backend/catalog-info.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: backstage.io/v1alpha1 -kind: Component -metadata: - name: backstage-plugin-linguist-backend - title: '@backstage/plugin-linguist-backend' -spec: - lifecycle: experimental - type: backstage-backend-plugin - owner: awanlin diff --git a/plugins/linguist-backend/config.d.ts b/plugins/linguist-backend/config.d.ts deleted file mode 100644 index 758210feb7..0000000000 --- a/plugins/linguist-backend/config.d.ts +++ /dev/null @@ -1,72 +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 { TaskScheduleDefinition } from '@backstage/backend-tasks'; -import { HumanDuration } from '@backstage/types'; -import { Options as LinguistJsOptions } from 'linguist-js/dist/types'; - -export interface Config { - /** Configuration options for the linguist plugin */ - linguist?: { - schedule?: TaskScheduleDefinition; - /** - * @default 20 - */ - batchSize?: number; - /** - * @default false - */ - useSourceLocation?: boolean; - /** - * Refresh generated language breakdown - */ - age?: HumanDuration; - /** - * @default ['API', 'Component', 'Template'] - */ - kind?: string[]; - /** - * [linguist-js](https://www.npmjs.com/package/linguist-js) options - */ - linguistJsOptions?: LinguistJsOptions; - - /** Options for the tags processor */ - tagsProcessor?: { - /** - * Determines how many bytes of a language should be in a repo - * for it to be added as an entity tag. Defaults to 0. - */ - bytesThreshold?: number; - /** - * The types of linguist languages that should be processed. Can be - * any of "programming", "data", "markup", "prose". Defaults to ["programming"]. - */ - languageTypes?: string[]; - /** - * A custom mapping of linguist languages to how they should be rendered as entity tags. - * If a language is mapped to '' it will not be included as a tag. - */ - languageMap?: { - [language: string]: string | undefined; - }; - /** - * How long to cache entity languages for in memory. Used to avoid constant db hits during - * processing. Defaults to 30 minutes. - */ - cacheTTL?: HumanDuration; - }; - }; -} diff --git a/plugins/linguist-backend/knip-report.md b/plugins/linguist-backend/knip-report.md deleted file mode 100644 index 2661c35327..0000000000 --- a/plugins/linguist-backend/knip-report.md +++ /dev/null @@ -1,2 +0,0 @@ -# Knip report - diff --git a/plugins/linguist-backend/migrations/20221115_init.js b/plugins/linguist-backend/migrations/20221115_init.js deleted file mode 100644 index 359f7c8359..0000000000 --- a/plugins/linguist-backend/migrations/20221115_init.js +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @param {import('knex').Knex} knex - */ -exports.up = async function up(knex) { - // Note for the reader: the knex increments types automatically make it a - // primary column, whether you like it or not. That's why the id column is - // not marked as primary as one might have expected; it's only used for - // lookups by ID. Because, SQLite and MySQL don't return RETURNING on - // inserts ... so we want a manually generated key for lookups (an uuid), - // and also an index for ordering guarantees :) - await knex.schema.createTable('entity_result', table => { - table.comment('Table containing results from running Linguist'); - table - .bigIncrements('index') - .notNullable() - .comment('An insert counter to ensure ordering'); - table.uuid('id').notNullable().comment('The ID of the Linguist result'); - table - .string('entity_ref') - .unique() - .notNullable() - .comment('The entity ref that this Linguist result applies to'); - table.text('languages').comment('The results json as a string'); - table - .dateTime('created_at') - .defaultTo(knex.fn.now()) - .notNullable() - .comment('The timestamp when this entry was created'); - table - .dateTime('processed_date') - .defaultTo(knex.fn.now()) - .comment('The timestamp when this entity was processed'); - table.index('index', 'entity_result_index_idx'); - table.index('entity_ref', 'entity_result_entity_ref_idx'); - }); -}; - -/** - * @param {import('knex').Knex} knex - */ -exports.down = async function down(knex) { - await knex.schema.alterTable('entity_result', table => { - table.dropIndex([], 'entity_result_index_idx'); - table.dropIndex([], 'entity_result_entity_ref_idx'); - }); - await knex.schema.dropTable('entity_result'); -}; diff --git a/plugins/linguist-backend/migrations/20230216_remove_processed_date_default.js b/plugins/linguist-backend/migrations/20230216_remove_processed_date_default.js deleted file mode 100644 index 5aaf02216e..0000000000 --- a/plugins/linguist-backend/migrations/20230216_remove_processed_date_default.js +++ /dev/null @@ -1,39 +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. - */ - -/** - * @param {import('knex').Knex} knex - */ -exports.up = async function up(knex) { - // Sqlite does not support this raw SQL - if (!knex.client.config.client.includes('sqlite3')) { - await knex.raw( - 'ALTER TABLE entity_result ALTER COLUMN processed_date DROP DEFAULT;', - ); - } -}; - -/** - * @param {import('knex').Knex} knex - */ -exports.down = async function down(knex) { - // Sqlite does not support this raw SQL - if (!knex.client.config.client.includes('sqlite3')) { - await knex.raw( - 'ALTER TABLE entity_result ALTER COLUMN processed_date SET DEFAULT now();', - ); - } -}; diff --git a/plugins/linguist-backend/package.json b/plugins/linguist-backend/package.json deleted file mode 100644 index f70ef88fd0..0000000000 --- a/plugins/linguist-backend/package.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "name": "@backstage/plugin-linguist-backend", - "version": "0.5.15", - "backstage": { - "role": "backend-plugin", - "moved": "@backstage-community/plugin-linguist-backend" - }, - "publishConfig": { - "access": "public", - "main": "dist/index.cjs.js", - "types": "dist/index.d.ts" - }, - "homepage": "https://backstage.io", - "repository": { - "type": "git", - "url": "https://github.com/backstage/backstage", - "directory": "plugins/linguist-backend" - }, - "license": "Apache-2.0", - "main": "src/index.ts", - "types": "src/index.ts", - "files": [ - "dist", - "config.d.ts", - "migrations/**/*.{js,d.ts}" - ], - "scripts": { - "build": "backstage-cli package build", - "clean": "backstage-cli package clean", - "lint": "backstage-cli package lint", - "prepack": "backstage-cli package prepack", - "postpack": "backstage-cli package postpack", - "start": "backstage-cli package start", - "test": "backstage-cli package test" - }, - "dependencies": { - "@backstage/backend-common": "workspace:^", - "@backstage/backend-plugin-api": "workspace:^", - "@backstage/backend-tasks": "workspace:^", - "@backstage/catalog-client": "workspace:^", - "@backstage/catalog-model": "workspace:^", - "@backstage/config": "workspace:^", - "@backstage/errors": "workspace:^", - "@backstage/plugin-catalog-node": "workspace:^", - "@backstage/plugin-linguist-common": "workspace:^", - "@backstage/types": "workspace:^", - "@types/express": "*", - "express": "^4.18.1", - "express-promise-router": "^4.1.0", - "fs-extra": "^11.0.0", - "knex": "^3.0.0", - "linguist-js": "^2.5.3", - "luxon": "^3.0.0", - "node-fetch": "^2.6.7", - "uuid": "^9.0.0", - "yn": "^4.0.0" - }, - "devDependencies": { - "@backstage/backend-test-utils": "workspace:^", - "@backstage/cli": "workspace:^", - "@types/supertest": "^2.0.8", - "js-yaml": "^4.1.0", - "supertest": "^6.2.4" - }, - "configSchema": "config.d.ts", - "deprecated": "This package has been moved to the backstage/community-plugins repository. You should migrate to using @backstage-community/plugin-linguist-backend instead." -} diff --git a/plugins/linguist-backend/src/api/LinguistBackendClient.test.ts b/plugins/linguist-backend/src/api/LinguistBackendClient.test.ts deleted file mode 100644 index be25fa9821..0000000000 --- a/plugins/linguist-backend/src/api/LinguistBackendClient.test.ts +++ /dev/null @@ -1,417 +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 { - getVoidLogger, - ReadTreeResponse, - UrlReader, -} from '@backstage/backend-common'; -import { CatalogApi, GetEntitiesResponse } from '@backstage/catalog-client'; -import { Results } from 'linguist-js/dist/types'; -import { DateTime } from 'luxon'; -import { LinguistBackendStore } from '../db'; -import { kindOrDefault, LinguistBackendClient } from './LinguistBackendClient'; -import fs from 'fs-extra'; -import { LINGUIST_ANNOTATION } from '@backstage/plugin-linguist-common'; -import { mockServices } from '@backstage/backend-test-utils'; - -const linguistResultMock = Promise.resolve({ - files: { - count: 4, - bytes: 6010, - results: { - '/src/index.ts': 'TypeScript', - '/src/cli.js': 'JavaScript', - '/readme.md': 'Markdown', - '/no-lang': null, - }, - alternatives: { - '~/alternatives.asc': ['AsciiDoc', 'Public Key'], - }, - }, - languages: { - count: 3, - bytes: 6000, - results: { - JavaScript: { type: 'programming', bytes: 1000, color: '#f1e05a' }, - TypeScript: { type: 'programming', bytes: 2000, color: '#2b7489' }, - Markdown: { type: 'prose', bytes: 3000, color: '#083fa1' }, - }, - }, - unknown: { - count: 1, - bytes: 10, - filenames: { - 'no-lang': 10, - }, - extensions: {}, - }, -} as Results); - -describe('kindOrDefault', () => { - it('should return default kind when undefined', () => { - expect(kindOrDefault()).toEqual(['API', 'Component', 'Template']); - }); - it('should return the default kind when empty', () => { - expect(kindOrDefault([])).toEqual(['API', 'Component', 'Template']); - }); - it('should return provided kind when not empty', () => { - expect(kindOrDefault(['API'])).toEqual(['API']); - }); -}); - -describe('Linguist backend API', () => { - const logger = getVoidLogger(); - - const store: jest.Mocked = { - insertEntityResults: jest.fn(), - insertNewEntity: jest.fn(), - getEntityResults: jest.fn(), - getProcessedEntities: jest.fn(), - getUnprocessedEntities: jest.fn(), - getAllEntities: jest.fn(), - deleteEntity: jest.fn(), - }; - - const urlReader: jest.Mocked = { - readTree: jest.fn(), - search: jest.fn(), - readUrl: jest.fn(), - }; - - const catalogApi: jest.Mocked = { - getEntities: jest.fn(), - getEntityByRef: jest.fn(), - } as any; - - const api = new LinguistBackendClient( - logger, - store, - urlReader, - mockServices.auth(), - catalogApi, - ); - - beforeEach(() => { - jest.resetAllMocks(); - }); - - it('should get languages for an entity', async () => { - store.getEntityResults.mockResolvedValue({ - languageCount: 1, - totalBytes: 2205, - processedDate: '2023-02-15T20:10:21.378Z', - breakdown: [ - { - name: 'YAML', - percentage: 100, - bytes: 2205, - type: 'data', - color: '#cb171e', - }, - ], - }); - - const entityRef = 'template:default/create-react-app-template'; - const languages = await api.getEntityLanguages(entityRef); - expect(languages).toEqual({ - languageCount: 1, - totalBytes: 2205, - processedDate: '2023-02-15T20:10:21.378Z', - breakdown: [ - { - name: 'YAML', - percentage: 100, - bytes: 2205, - type: 'data', - color: '#cb171e', - }, - ], - }); - }); - - it('should insert new entities', async () => { - const testEntityListResponse: GetEntitiesResponse = { - items: [ - { - apiVersion: 'backstage.io/v1beta1', - metadata: { - name: 'service-one', - }, - kind: 'Component', - }, - { - apiVersion: 'backstage.io/v1beta1', - metadata: { - name: 'service-two', - }, - kind: 'Component', - }, - { - apiVersion: 'backstage.io/v1beta1', - metadata: { - name: 'service-three', - }, - kind: 'Component', - }, - ], - }; - catalogApi.getEntities.mockResolvedValue(testEntityListResponse); - - await api.addNewEntities(); - expect(store.insertNewEntity).toHaveBeenCalledTimes(3); - }); - - it('should delete entities not in Catalog', async () => { - store.getAllEntities.mockResolvedValue([ - 'component:default/service-one', - 'component:default/stale-service-two', - ]); - - catalogApi.getEntityByRef.mockResolvedValueOnce({ - apiVersion: 'backstage.io/v1beta1', - metadata: { - name: 'service-one', - }, - kind: 'Component', - }); - - await api.cleanEntities(); - expect(store.deleteEntity).toHaveBeenCalledTimes(1); - }); - - it('should get default entity overview', async () => { - store.getProcessedEntities.mockResolvedValue([ - { - entityRef: 'component:default/service-one', - processedDate: DateTime.now().toJSDate(), - }, - { - entityRef: 'component:default/stale-service-two', - processedDate: DateTime.now().minus({ days: 45 }).toJSDate(), - }, - ]); - - store.getUnprocessedEntities.mockResolvedValue([ - 'component:default/service-three', - 'component:default/service-four', - 'component:default/service-five', - ]); - - const overview = await api.getEntitiesOverview(); - expect(overview.entityCount).toEqual(5); - expect(overview.processedCount).toEqual(2); - expect(overview.staleCount).toEqual(0); - expect(overview.pendingCount).toEqual(3); - expect(overview.filteredEntities).toEqual([ - 'component:default/service-three', - 'component:default/service-four', - 'component:default/service-five', - ]); - }); - - it('should get entity overview with stale items', async () => { - const apiWithAge = new LinguistBackendClient( - logger, - store, - urlReader, - mockServices.auth(), - catalogApi, - { days: 5 }, - ); - store.getProcessedEntities.mockResolvedValue([ - { - entityRef: 'component:default/service-one', - processedDate: DateTime.now().toJSDate(), - }, - { - entityRef: 'component:default/stale-service-two', - processedDate: DateTime.now().minus({ days: 45 }).toJSDate(), - }, - ]); - - store.getUnprocessedEntities.mockResolvedValue([ - 'component:default/service-three', - 'component:default/service-four', - 'component:default/service-five', - ]); - - const overview = await apiWithAge.getEntitiesOverview(); - expect(overview.entityCount).toEqual(5); - expect(overview.processedCount).toEqual(2); - expect(overview.staleCount).toEqual(1); - expect(overview.pendingCount).toEqual(4); - expect(overview.filteredEntities).toEqual([ - 'component:default/service-three', - 'component:default/service-four', - 'component:default/service-five', - 'component:default/stale-service-two', - ]); - }); - - it('should generate and save languages for an entity', async () => { - const spy = jest - .spyOn(api, 'getLinguistResults') - .mockImplementation(() => linguistResultMock); - - urlReader.readTree.mockResolvedValueOnce({ - files: async () => [ - { - content: async () => Buffer.from('-- XXX: code-data', 'utf8'), - path: 'my-file.js', - }, - ], - dir: async () => '/temp/my-code', - } as ReadTreeResponse); - - const fsSpy = jest.spyOn(fs, 'remove'); - - await api.generateEntityLanguages( - 'component:default/fake-service', - 'https://some.fake/service/', - ); - expect(api.getLinguistResults).toHaveBeenCalled(); - expect(store.insertEntityResults).toHaveBeenCalled(); - expect(fs.remove).toHaveBeenCalled(); - spy.mockClear(); - fsSpy.mockClear(); - }); - - it('should generate languages for entities using default', async () => { - store.getProcessedEntities.mockResolvedValue([ - { - entityRef: 'component:default/service-one', - processedDate: DateTime.now().toJSDate(), - }, - { - entityRef: 'component:default/stale-service-two', - processedDate: DateTime.now().minus({ days: 45 }).toJSDate(), - }, - ]); - - store.getUnprocessedEntities.mockResolvedValue([ - 'component:default/service-three', - 'component:default/service-four', - 'component:default/service-five', - ]); - - const entity = { - apiVersion: 'backstage.io/v1beta1', - metadata: { - name: 'service-one', - annotations: { - [LINGUIST_ANNOTATION]: 'https://some.fake/service/', - }, - }, - kind: 'Component', - }; - - catalogApi.getEntityByRef.mockResolvedValue(entity); - - const resultsSpy = jest - .spyOn(api, 'getLinguistResults') - .mockImplementation(() => linguistResultMock); - - urlReader.readTree.mockResolvedValue({ - files: async () => [ - { - content: async () => Buffer.from('-- XXX: code-data', 'utf8'), - path: 'my-file.js', - }, - ], - dir: async () => '/temp/my-code', - } as ReadTreeResponse); - - const fsSpy = jest.spyOn(fs, 'remove'); - - const generateEntityLanguages = jest.spyOn(api, 'generateEntityLanguages'); - await api.generateEntitiesLanguages(); - expect(generateEntityLanguages).toHaveBeenCalledTimes(3); - - generateEntityLanguages.mockClear(); - resultsSpy.mockClear(); - fsSpy.mockClear(); - }); - - it('should generate languages for entities using defined batch size', async () => { - const apiWithBatchSize = new LinguistBackendClient( - logger, - store, - urlReader, - mockServices.auth(), - catalogApi, - undefined, - 2, - ); - - store.getProcessedEntities.mockResolvedValue([ - { - entityRef: 'component:default/service-one', - processedDate: DateTime.now().toJSDate(), - }, - { - entityRef: 'component:default/stale-service-two', - processedDate: DateTime.now().minus({ days: 45 }).toJSDate(), - }, - ]); - - store.getUnprocessedEntities.mockResolvedValue([ - 'component:default/service-three', - 'component:default/service-four', - 'component:default/service-five', - ]); - - const entity = { - apiVersion: 'backstage.io/v1beta1', - metadata: { - name: 'service-one', - annotations: { - [LINGUIST_ANNOTATION]: 'https://some.fake/service/', - }, - }, - kind: 'Component', - }; - - catalogApi.getEntityByRef.mockResolvedValue(entity); - - const resultsSpy = jest - .spyOn(apiWithBatchSize, 'getLinguistResults') - .mockImplementation(() => linguistResultMock); - - urlReader.readTree.mockResolvedValue({ - files: async () => [ - { - content: async () => Buffer.from('-- XXX: code-data', 'utf8'), - path: 'my-file.js', - }, - ], - dir: async () => '/temp/my-code', - } as ReadTreeResponse); - - const fsSpy = jest.spyOn(fs, 'remove'); - - const generateEntityLanguages = jest.spyOn( - apiWithBatchSize, - 'generateEntityLanguages', - ); - await apiWithBatchSize.generateEntitiesLanguages(); - expect(generateEntityLanguages).toHaveBeenCalledTimes(2); - - generateEntityLanguages.mockClear(); - resultsSpy.mockClear(); - fsSpy.mockClear(); - }); -}); diff --git a/plugins/linguist-backend/src/api/LinguistBackendClient.ts b/plugins/linguist-backend/src/api/LinguistBackendClient.ts deleted file mode 100644 index 23236f5f85..0000000000 --- a/plugins/linguist-backend/src/api/LinguistBackendClient.ts +++ /dev/null @@ -1,283 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - EntitiesOverview, - EntityResults, - Language, - Languages, - LINGUIST_ANNOTATION, -} from '@backstage/plugin-linguist-common'; -import { - CATALOG_FILTER_EXISTS, - CatalogApi, - GetEntitiesRequest, -} from '@backstage/catalog-client'; -import { UrlReader } from '@backstage/backend-common'; - -import { DateTime } from 'luxon'; -import { LinguistBackendStore } from '../db'; -import fs from 'fs-extra'; -import linguist from 'linguist-js'; -import { - ANNOTATION_SOURCE_LOCATION, - stringifyEntityRef, -} from '@backstage/catalog-model'; -import { assertError } from '@backstage/errors'; -import { HumanDuration } from '@backstage/types'; -import { Results } from 'linguist-js/dist/types'; -import { type AuthService, LoggerService } from '@backstage/backend-plugin-api'; - -/** @public */ -export interface LinguistBackendApi { - getEntityLanguages(entityRef: string): Promise; - processEntities(): Promise; -} - -/** @public */ -export class LinguistBackendClient implements LinguistBackendApi { - private readonly logger: LoggerService; - private readonly store: LinguistBackendStore; - private readonly urlReader: UrlReader; - private readonly auth: AuthService; - - private readonly catalogApi: CatalogApi; - private readonly age?: HumanDuration; - private readonly batchSize?: number; - private readonly useSourceLocation?: boolean; - private readonly kind: string[]; - private readonly linguistJsOptions?: Record; - public constructor( - logger: LoggerService, - store: LinguistBackendStore, - urlReader: UrlReader, - auth: AuthService, - catalogApi: CatalogApi, - age?: HumanDuration, - batchSize?: number, - useSourceLocation?: boolean, - kind?: string[], - linguistJsOptions?: Record, - ) { - this.logger = logger; - this.store = store; - this.urlReader = urlReader; - this.auth = auth; - this.catalogApi = catalogApi; - this.batchSize = batchSize; - this.age = age; - this.useSourceLocation = useSourceLocation; - this.kind = kindOrDefault(kind); - this.linguistJsOptions = linguistJsOptions; - } - - async getEntityLanguages(entityRef: string): Promise { - this.logger?.debug(`Getting languages for entity "${entityRef}"`); - - return this.store.getEntityResults(entityRef); - } - - async processEntities(): Promise { - this.logger?.info('Updating list of entities'); - await this.addNewEntities(); - - this.logger?.info('Cleaning list of entities'); - await this.cleanEntities(); - - this.logger?.info('Processing applicable entities through Linguist'); - await this.generateEntitiesLanguages(); - } - - /** @internal */ - async addNewEntities(): Promise { - const annotationKey = this.useSourceLocation - ? ANNOTATION_SOURCE_LOCATION - : LINGUIST_ANNOTATION; - const request: GetEntitiesRequest = { - filter: { - kind: this.kind, - [`metadata.annotations.${annotationKey}`]: CATALOG_FILTER_EXISTS, - }, - fields: ['kind', 'metadata'], - }; - - const { token } = await this.auth.getPluginRequestToken({ - onBehalfOf: await this.auth.getOwnServiceCredentials(), - targetPluginId: 'catalog', - }); - const response = await this.catalogApi.getEntities(request, { token }); - const entities = response.items; - - entities.forEach(entity => { - const entityRef = stringifyEntityRef(entity); - this.store.insertNewEntity(entityRef); - }); - } - - /** @internal */ - async cleanEntities(): Promise { - this.logger?.info('Cleaning entities in Linguist queue'); - const allEntities = await this.store.getAllEntities(); - - for (const entityRef of allEntities) { - const { token } = await this.auth.getPluginRequestToken({ - onBehalfOf: await this.auth.getOwnServiceCredentials(), - targetPluginId: 'catalog', - }); - const result = await this.catalogApi.getEntityByRef(entityRef, { token }); - - if (!result) { - this.logger?.info( - `Entity ${entityRef} was not found in the Catalog, it will be deleted`, - ); - await this.store.deleteEntity(entityRef); - } - } - } - - /** @internal */ - async generateEntitiesLanguages(): Promise { - const entitiesOverview = await this.getEntitiesOverview(); - this.logger?.info( - `Entities overview: Entity: ${entitiesOverview.entityCount}, Processed: ${entitiesOverview.processedCount}, Pending: ${entitiesOverview.pendingCount}, Stale ${entitiesOverview.staleCount}`, - ); - - const entities = entitiesOverview.filteredEntities.slice( - 0, - this.batchSize ?? 20, - ); - - for (const entityRef of entities) { - const { token } = await this.auth.getPluginRequestToken({ - onBehalfOf: await this.auth.getOwnServiceCredentials(), - targetPluginId: 'catalog', - }); - const entity = await this.catalogApi.getEntityByRef(entityRef, { - token, - }); - const annotationKey = this.useSourceLocation - ? ANNOTATION_SOURCE_LOCATION - : LINGUIST_ANNOTATION; - - let url = entity?.metadata.annotations?.[annotationKey] ?? ''; - if (url.startsWith('url:')) { - url = url.slice(4); - } - - try { - await this.generateEntityLanguages(entityRef, url); - } catch (error) { - assertError(error); - this.logger.error( - `Unable to process "${entityRef}" using "${url}", message: ${error.message}, stack: ${error.stack}`, - ); - } - } - } - - /** @internal */ - async getEntitiesOverview(): Promise { - this.logger?.debug('Getting pending entities'); - - const processedEntities = await this.store.getProcessedEntities(); - const staleEntities = processedEntities - .filter(pe => { - if (this.age === undefined) return false; - const staleDate = DateTime.now().minus(this.age as HumanDuration); - return DateTime.fromJSDate(pe.processedDate) <= staleDate; - }) - .map(pe => pe.entityRef); - - const unprocessedEntities = await this.store.getUnprocessedEntities(); - const filteredEntities = unprocessedEntities.concat(staleEntities); - - const entitiesOverview: EntitiesOverview = { - entityCount: unprocessedEntities.length + processedEntities.length, - processedCount: processedEntities.length, - staleCount: staleEntities.length, - pendingCount: filteredEntities.length, - filteredEntities: filteredEntities, - }; - - return entitiesOverview; - } - - /** @internal */ - async generateEntityLanguages( - entityRef: string, - url: string, - ): Promise { - this.logger?.info( - `Processing languages for entity ${entityRef} from ${url}`, - ); - - const readTreeResponse = await this.urlReader.readTree(url); - const dir = await readTreeResponse.dir(); - - const results = await this.getLinguistResults(dir); - - try { - const totalBytes = results.languages.bytes; - const langResults = results.languages.results; - - const breakdown: Language[] = []; - for (const key in langResults) { - if (Object.prototype.hasOwnProperty.call(langResults, key)) { - const lang: Language = { - name: key, - percentage: +((langResults[key].bytes / totalBytes) * 100).toFixed( - 2, - ), - bytes: langResults[key].bytes, - type: langResults[key].type, - color: langResults[key].color, - }; - breakdown.push(lang); - } - } - - const languages: Languages = { - languageCount: results.languages.count, - totalBytes: totalBytes, - processedDate: new Date().toISOString(), - breakdown: breakdown, - }; - - const entityResults: EntityResults = { - entityRef: entityRef, - results: languages, - }; - - return await this.store.insertEntityResults(entityResults); - } finally { - this.logger?.info(`Cleaning up files from ${dir}`); - await fs.remove(dir); - } - } - - /** @internal */ - async getLinguistResults(dir: string): Promise { - const results = await linguist(dir, { ...this.linguistJsOptions }); - return results; - } -} - -export function kindOrDefault(kind?: string[]): string[] { - if (!kind || kind.length === 0) { - return ['API', 'Component', 'Template']; - } - return kind; -} diff --git a/plugins/linguist-backend/src/api/index.ts b/plugins/linguist-backend/src/api/index.ts deleted file mode 100644 index b3f73587e7..0000000000 --- a/plugins/linguist-backend/src/api/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export type { LinguistBackendApi } from './LinguistBackendClient'; diff --git a/plugins/linguist-backend/src/db/LinguistBackendDatabase.test.ts b/plugins/linguist-backend/src/db/LinguistBackendDatabase.test.ts deleted file mode 100644 index 5998ddfc1e..0000000000 --- a/plugins/linguist-backend/src/db/LinguistBackendDatabase.test.ts +++ /dev/null @@ -1,200 +0,0 @@ -/* - * Copyright 2021 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Knex as KnexType, Knex } from 'knex'; -import { TestDatabases } from '@backstage/backend-test-utils'; -import { - LinguistBackendDatabase, - LinguistBackendStore, -} from './LinguistBackendDatabase'; -import { Languages, ProcessedEntity } from '@backstage/plugin-linguist-common'; - -function createDatabaseManager( - client: KnexType, - skipMigrations: boolean = false, -) { - return { - getClient: async () => client, - migrations: { - skip: skipMigrations, - }, - }; -} - -const rawDbEntityResultRows = [ - { - id: '14b32439-848a-49b2-92a4-98753f932606', - entity_ref: 'template:default/create-react-app-template', - languages: undefined, - processed_date: undefined, - }, - { - id: '8c85d3ec-ccea-4b29-9de9-ccdd7e5ba452', - entity_ref: 'template:default/docs-template', - languages: undefined, - processed_date: undefined, - }, - { - id: 'b922c87b-37bc-4505-b4af-70a1438decda', - entity_ref: 'template:default/pull-request', - languages: - '{"languageCount":1,"totalBytes":2205,"processedDate":"2023-02-15T20:10:21.378Z","breakdown":[{"name":"YAML","percentage":100,"bytes":2205,"type":"data","color":"#cb171e"}]}', - processed_date: new Date('2023-02-15 20:10:21.378Z'), - }, - { - id: 'bd555e6d-a3d0-4b48-a930-194db8f80db7', - entity_ref: 'template:default/react-ssr-template', - languages: - '{"languageCount":8,"totalBytes":8988,"processedDate":"2023-02-15T20:10:21.388Z","breakdown":[{"name":"INI","percentage":2.26,"bytes":203,"type":"data","color":"#d1dbe0"},{"name":"JavaScript","percentage":5.94,"bytes":534,"type":"programming","color":"#f1e05a"},{"name":"YAML","percentage":31.09,"bytes":2794,"type":"data","color":"#cb171e"},{"name":"Markdown","percentage":11.79,"bytes":1060,"type":"prose","color":"#083fa1"},{"name":"JSON","percentage":21.09,"bytes":1896,"type":"data","color":"#292929"},{"name":"CSS","percentage":0,"bytes":0,"type":"markup","color":"#563d7c"},{"name":"TSX","percentage":26.01,"bytes":2338,"type":"programming","color":"#3178c6"},{"name":"TypeScript","percentage":1.81,"bytes":163,"type":"programming","color":"#3178c6"}]}', - processed_date: new Date('2023-02-15 20:10:21.388Z'), - }, - { - id: '4145c0cf-44e9-4e95-9d57-781af4685b28', - entity_ref: 'template:default/springboot-template', - languages: - '{"languageCount":9,"totalBytes":80986,"processedDate":"2023-02-15T20:10:21.419Z","breakdown":[{"name":"Shell","percentage":0.16,"bytes":130,"type":"programming","color":"#89e051"},{"name":"INI","percentage":0.35,"bytes":286,"type":"data","color":"#d1dbe0"},{"name":"Dockerfile","percentage":0.3,"bytes":246,"type":"programming","color":"#384d54"},{"name":"YAML","percentage":3.92,"bytes":3171,"type":"data","color":"#cb171e"},{"name":"Markdown","percentage":1.31,"bytes":1059,"type":"prose","color":"#083fa1"},{"name":"XML","percentage":10.48,"bytes":8491,"type":"data","color":"#0060ac"},{"name":"Java","percentage":1.8,"bytes":1455,"type":"programming","color":"#b07219"},{"name":"Text","percentage":81.22,"bytes":65780,"type":"prose"},{"name":"Protocol Buffer","percentage":0.45,"bytes":368,"type":"data"}]}', - processed_date: new Date('2023-02-15 20:10:21.419Z'), - }, -]; - -describe('Linguist database', () => { - const databases = TestDatabases.create(); - let store: LinguistBackendStore; - let testDbClient: Knex; - beforeAll(async () => { - testDbClient = await databases.init('SQLITE_3'); - const database = createDatabaseManager(testDbClient); - - store = await LinguistBackendDatabase.create(await database.getClient()); - }); - beforeEach(async () => { - await testDbClient.batchInsert('entity_result', rawDbEntityResultRows); - }); - afterEach(async () => { - await testDbClient('entity_result').delete(); - }); - - it('should be able to return entity results', async () => { - const validLanguagesResult: Languages = { - languageCount: 1, - totalBytes: 2205, - processedDate: '2023-02-15T20:10:21.378Z', - breakdown: [ - { - name: 'YAML', - percentage: 100, - bytes: 2205, - type: 'data', - color: '#cb171e', - }, - ], - }; - - const entityResult = await store.getEntityResults( - 'template:default/pull-request', - ); - expect(entityResult).toMatchObject(validLanguagesResult); - }); - - it('should return empty entity results when not found', async () => { - const validEmptyLanguagesResult: Languages = { - languageCount: 0, - totalBytes: 0, - processedDate: 'undefined', - breakdown: [], - }; - - const entityResult = await store.getEntityResults( - 'template:default/create-react-app-template', - ); - expect(entityResult).toMatchObject(validEmptyLanguagesResult); - }); - - it('should be able to return unprocessed entities', async () => { - const validUnprocessedEntities: string[] = [ - 'template:default/create-react-app-template', - 'template:default/docs-template', - ]; - - const unprocessedEntities = await store.getUnprocessedEntities(); - - expect(unprocessedEntities).toMatchObject(validUnprocessedEntities); - }); - - it('should return string[] when there is no unprocessed entities', async () => { - await testDbClient('entity_result').delete(); - const unprocessedEntities = await store.getUnprocessedEntities(); - - expect(unprocessedEntities).toMatchObject([]); - }); - - it('should be able to return processed entities', async () => { - const validProcessedEntities: ProcessedEntity[] = [ - { - entityRef: 'template:default/pull-request', - processedDate: new Date('2023-02-15 20:10:21.378Z'), - }, - { - entityRef: 'template:default/react-ssr-template', - processedDate: new Date('2023-02-15 20:10:21.388Z'), - }, - { - entityRef: 'template:default/springboot-template', - processedDate: new Date('2023-02-15 20:10:21.419Z'), - }, - ]; - - const processedEntities = await store.getProcessedEntities(); - - expect(processedEntities).toMatchObject(validProcessedEntities); - }); - - it('should return string[] when there is no processed entities', async () => { - await testDbClient('entity_result').delete(); - const unprocessedEntities = await store.getProcessedEntities(); - - expect(unprocessedEntities).toMatchObject([]); - }); - - it('should insert new entities and ignore duplicates', async () => { - const before = testDbClient.from('entity_result').count(); - - await store.insertNewEntity('component:/default/new-entity-one'); - await store.insertNewEntity('component:/default/new-entity-two'); - await store.insertNewEntity('template:default/pull-request'); - - const after = testDbClient.from('entity_result').count(); - - expect(before).toEqual(after); - }); - - it('should get all entities', async () => { - const allEntities = await store.getAllEntities(); - - expect(allEntities.length).toEqual(5); - }); - - it('should delete entity by its entityRef', async () => { - const before = await testDbClient.from('entity_result').count(); - - await store.deleteEntity('template:default/create-react-app-template'); - - const after = await testDbClient.from('entity_result').count(); - - expect(before).toEqual([{ 'count(*)': 5 }]); - expect(after).toEqual([{ 'count(*)': 4 }]); - }); -}); diff --git a/plugins/linguist-backend/src/db/LinguistBackendDatabase.ts b/plugins/linguist-backend/src/db/LinguistBackendDatabase.ts deleted file mode 100644 index 5a59d18e90..0000000000 --- a/plugins/linguist-backend/src/db/LinguistBackendDatabase.ts +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { resolvePackagePath } from '@backstage/backend-common'; -import { Knex } from 'knex'; -import { v4 as uuid } from 'uuid'; -import { - EntityResults, - Languages, - ProcessedEntity, -} from '@backstage/plugin-linguist-common'; - -export type RawDbEntityResultRow = { - id: string; - entity_ref: string; - languages?: string; - processed_date?: Date; -}; - -/** @public */ -export interface LinguistBackendStore { - insertEntityResults(entityLanguages: EntityResults): Promise; - insertNewEntity(entityRef: string): Promise; - getEntityResults(entityRef: string): Promise; - getProcessedEntities(): Promise; - getUnprocessedEntities(): Promise; - getAllEntities(): Promise; - deleteEntity(entityRef: string): Promise; -} - -const migrationsDir = resolvePackagePath( - '@backstage/plugin-linguist-backend', - 'migrations', -); - -/** @public */ -export class LinguistBackendDatabase implements LinguistBackendStore { - static async create(knex: Knex): Promise { - await knex.migrate.latest({ - directory: migrationsDir, - }); - return new LinguistBackendDatabase(knex); - } - - constructor(private readonly db: Knex) {} - - async insertEntityResults(entityLanguages: EntityResults): Promise { - const entityLanguageId = uuid(); - const entityRef = entityLanguages.entityRef; - - const [result] = await this.db('entity_result') - .insert({ - id: entityLanguageId, - entity_ref: entityRef, - languages: JSON.stringify(entityLanguages.results), - processed_date: new Date(entityLanguages.results.processedDate), - }) - .onConflict('entity_ref') - .merge(['languages', 'processed_date']) - .returning('id'); - - return result.id; - } - - async insertNewEntity(entityRef: string): Promise { - const entityLanguageId = uuid(); - - await this.db('entity_result') - .insert({ - id: entityLanguageId, - entity_ref: entityRef, - }) - .onConflict('entity_ref') - .ignore(); // If the entity_ref is in the table already then we don't want to add it again - } - - async getEntityResults(entityRef: string): Promise { - const entityResults = await this.db('entity_result') - .whereNotNull('languages') - .where({ entity_ref: entityRef }) - .first(); - - if (!entityResults || !entityResults.languages) { - const emptyResults: Languages = { - languageCount: 0, - totalBytes: 0, - processedDate: 'undefined', - breakdown: [], - }; - return emptyResults; - } - - try { - return JSON.parse(entityResults.languages); - } catch (error) { - throw new Error(`Failed to parse languages for '${entityRef}', ${error}`); - } - } - - async getProcessedEntities(): Promise { - const rawEntities = await this.db('entity_result') - .whereNotNull('processed_date') - .whereNotNull('languages'); - - if (!rawEntities) { - return []; - } - - const processedEntities = rawEntities.map(rawEntity => { - // Note: processed_date should never be null, this is handled by the DB query above - let processedDate = new Date(); - if (rawEntity.processed_date) { - // SQLite will return a Timestamp whereas Postgres will return a proper Date - // This tests to see if we are getting a timestamp and convert if needed - processedDate = new Date(+rawEntity.processed_date.toString()); - if (isNaN(+rawEntity.processed_date.toString())) { - processedDate = rawEntity.processed_date; - } - } - - const processEntity = { - entityRef: rawEntity.entity_ref, - processedDate, - }; - - return processEntity; - }); - - return processedEntities; - } - - async getUnprocessedEntities(): Promise { - const rawEntities = await this.db('entity_result') - // TODO(ahhhndre) processed_date should always be null as well but it had a default to the current date - // once the default has been removed and released, we can then come back an enable this check - // .whereNull('processed_date') - .whereNull('languages') - .orderBy('created_at', 'asc'); - - if (!rawEntities) { - return []; - } - - const unprocessedEntities = rawEntities.map(rawEntity => { - return rawEntity.entity_ref; - }); - - return unprocessedEntities; - } - - async getAllEntities(): Promise { - const rawEntities = await this.db('entity_result'); - - if (!rawEntities) { - return []; - } - - const allEntities = rawEntities.map(rawEntity => { - return rawEntity.entity_ref; - }); - - return allEntities; - } - - async deleteEntity(entityRef: string): Promise { - await this.db('entity_result') - .where('entity_ref', entityRef) - .delete(); - } -} diff --git a/plugins/linguist-backend/src/db/index.ts b/plugins/linguist-backend/src/db/index.ts deleted file mode 100644 index c8ec15da68..0000000000 --- a/plugins/linguist-backend/src/db/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export { LinguistBackendDatabase } from './LinguistBackendDatabase'; -export type { LinguistBackendStore } from './LinguistBackendDatabase'; diff --git a/plugins/linguist-backend/src/index.ts b/plugins/linguist-backend/src/index.ts deleted file mode 100644 index df4703bed3..0000000000 --- a/plugins/linguist-backend/src/index.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Linguist backend plugin that contains the API for generating and retrieving language breakdown which is used by the Linguist frontend plugin. - * - * @packageDocumentation - */ - -export * from './processor'; -export * from './service/router'; -export type { LinguistBackendApi } from './api'; -export { linguistPlugin as default } from './plugin'; diff --git a/plugins/linguist-backend/src/plugin.ts b/plugins/linguist-backend/src/plugin.ts deleted file mode 100644 index 1a64a10773..0000000000 --- a/plugins/linguist-backend/src/plugin.ts +++ /dev/null @@ -1,77 +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 { - coreServices, - createBackendPlugin, -} from '@backstage/backend-plugin-api'; - -import { createRouterFromConfig } from './service/router'; - -/** - * Linguist backend plugin - * - * @public - */ -export const linguistPlugin = createBackendPlugin({ - pluginId: 'linguist', - register(env) { - env.registerInit({ - deps: { - auth: coreServices.auth, - httpAuth: coreServices.httpAuth, - logger: coreServices.logger, - config: coreServices.rootConfig, - reader: coreServices.urlReader, - database: coreServices.database, - discovery: coreServices.discovery, - scheduler: coreServices.scheduler, - tokenManager: coreServices.tokenManager, - httpRouter: coreServices.httpRouter, - }, - async init({ - auth, - httpAuth, - logger, - config, - reader, - database, - discovery, - scheduler, - tokenManager, - httpRouter, - }) { - httpRouter.use( - await createRouterFromConfig({ - auth, - httpAuth, - logger, - config, - reader, - database, - discovery, - scheduler, - tokenManager, - }), - ); - httpRouter.addAuthPolicy({ - path: '/health', - allow: 'unauthenticated', - }); - }, - }); - }, -}); diff --git a/plugins/linguist-backend/src/processor/LinguistTagsProcessor.test.ts b/plugins/linguist-backend/src/processor/LinguistTagsProcessor.test.ts deleted file mode 100644 index 4954820792..0000000000 --- a/plugins/linguist-backend/src/processor/LinguistTagsProcessor.test.ts +++ /dev/null @@ -1,343 +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 { - LinguistTagsProcessor, - LinguistTagsProcessorOptions, - sanitizeTag, -} from './LinguistTagsProcessor'; -import { ConfigReader } from '@backstage/config'; -import { getVoidLogger } from '@backstage/backend-common'; -import { CatalogProcessorCache } from '@backstage/plugin-catalog-node'; -import { Entity, makeValidator } from '@backstage/catalog-model'; -import { DiscoveryService } from '@backstage/backend-plugin-api'; -import fetch, { Response } from 'node-fetch'; -import * as path from 'path'; -import yaml from 'js-yaml'; -import * as fs from 'fs'; - -const { isValidTag } = makeValidator(); - -jest.mock('node-fetch', () => jest.fn()); -const mockedFetch: jest.MockedFunction = - fetch as jest.MockedFunction; - -const discovery: DiscoveryService = { - getBaseUrl: jest.fn().mockResolvedValue('http://example.com/api/linguist'), - getExternalBaseUrl: jest.fn(), -}; - -let state: Record = {}; -const mockCacheGet = jest - .fn() - .mockImplementation(async (key: string) => state[key]); -const mockCacheSet = jest.fn().mockImplementation((key: string, value: any) => { - state[key] = value; -}); -const cache: CatalogProcessorCache = { - get: mockCacheGet, - set: mockCacheSet, -}; - -describe('sanitizeTag', () => { - const linguistDataSet = yaml.load( - fs.readFileSync( - path.resolve(require.resolve('linguist-js'), '../../ext/languages.yml'), - 'utf-8', - ), - ) as Object; - const languages = Object.keys(linguistDataSet); - test('Should clean up all linguist languages', () => { - const invalid = languages - .map(sanitizeTag) - .filter(lang => !isValidTag(lang)); - expect(invalid).toStrictEqual([]); - // Keep a snapshot here so that as new languages are added to linguist, - // we can spot check them to make sure the transformer for them makes sense. - expect(languages.map(sanitizeTag)).toMatchSnapshot(); - }); -}); - -describe('LinguistTagsProcessor', () => { - afterEach(() => { - mockedFetch.mockReset(); - mockCacheGet.mockClear(); - mockCacheSet.mockClear(); - state = {}; - }); - - test('Should construct fromConfig', () => { - const config = new ConfigReader({ - linguist: {}, - }); - expect(() => { - return LinguistTagsProcessor.fromConfig(config, { - logger: getVoidLogger(), - discovery, - }); - }).not.toThrow(); - }); - - test('Should assign valid language tags', async () => { - const processor = buildProcessor({}); - - mockFetchImplementation(); - const entity = baseEntity(); - await processor.preProcessEntity(entity, null, null, null, cache); - expect(mockedFetch).toHaveBeenCalledTimes(1); - expect(entity.metadata.tags).toStrictEqual([ - 'c++', - 'asp-dot-net', - 'java', - 'common-lisp', - ]); - - entity.metadata.tags?.forEach(tag => { - expect(isValidTag(tag)).toBeTruthy(); - }); - }); - - test('Should not duplicate existing tags', async () => { - const processor = buildProcessor({}); - - mockFetchImplementation(); - const entity = baseEntity(); - entity.metadata.tags = ['existing', 'tags', 'java']; - - await processor.preProcessEntity(entity, null, null, null, cache); - expect(mockedFetch).toHaveBeenCalledTimes(1); - expect(entity.metadata.tags).toStrictEqual([ - 'existing', - 'tags', - 'java', - 'c++', - 'asp-dot-net', - 'common-lisp', - ]); - }); - - test('Should not process Resource entities by default', async () => { - const processor = buildProcessor({}); - - mockFetchImplementation(); - const entity = baseEntity(); - entity.kind = 'Resource'; - - await processor.preProcessEntity(entity, null, null, null, cache); - expect(mockedFetch).toHaveBeenCalledTimes(0); - expect(entity.metadata.tags).toStrictEqual(undefined); - }); - - test('Can process Resource entities by overriding shouldProcessEntity', async () => { - const processor = buildProcessor({ - shouldProcessEntity: (entity: Entity) => { - return entity.kind === 'Resource'; - }, - }); - - mockFetchImplementation(); - const entity = baseEntity(); - entity.kind = 'Resource'; - - await processor.preProcessEntity(entity, null, null, null, cache); - expect(mockedFetch).toHaveBeenCalledTimes(1); - expect(entity.metadata.tags).toStrictEqual([ - 'c++', - 'asp-dot-net', - 'java', - 'common-lisp', - ]); - }); - - test('Can omit languages using languageMap', async () => { - const processor = buildProcessor({ - languageMap: { - Java: '', - 'ASP.net': '', - }, - }); - - mockFetchImplementation(); - const entity = baseEntity(); - await processor.preProcessEntity(entity, null, null, null, cache); - expect(mockedFetch).toHaveBeenCalledTimes(1); - expect(entity.metadata.tags).toStrictEqual(['c++', 'common-lisp']); - }); - - test('Can rewrite langs using languageMap', async () => { - const processor = buildProcessor({ - languageMap: { - Java: 'notjava', - }, - }); - - mockFetchImplementation(); - const entity = baseEntity(); - await processor.preProcessEntity(entity, null, null, null, cache); - expect(mockedFetch).toHaveBeenCalledTimes(1); - expect(entity.metadata.tags).toStrictEqual([ - 'c++', - 'asp-dot-net', - 'notjava', - 'common-lisp', - ]); - }); - - test('Can omit languages less than bytesThreshold', async () => { - const processor = buildProcessor({ - bytesThreshold: 5000, - }); - - mockFetchImplementation(); - const entity = baseEntity(); - await processor.preProcessEntity(entity, null, null, null, cache); - expect(mockedFetch).toHaveBeenCalledTimes(1); - expect(entity.metadata.tags).toStrictEqual(['java', 'common-lisp']); - }); - - test('Can include languages that arent programming', async () => { - const processor = buildProcessor({ - languageTypes: ['data'], - }); - - mockFetchImplementation(); - const entity = baseEntity(); - await processor.preProcessEntity(entity, null, null, null, cache); - expect(mockedFetch).toHaveBeenCalledTimes(1); - expect(entity.metadata.tags).toStrictEqual(['yaml', 'json']); - }); - - test('Refetches from API when cache disabled', async () => { - const processor = buildProcessor({ - cacheTTL: { minutes: 0 }, - }); - - mockFetchImplementation(); - const entity = baseEntity(); - await processor.preProcessEntity(entity, null, null, null, cache); - expect(mockedFetch).toHaveBeenCalledTimes(1); - expect(mockCacheGet).toHaveBeenCalledTimes(0); - expect(mockCacheSet).toHaveBeenCalledTimes(0); - mockedFetch.mockClear(); - await processor.preProcessEntity(entity, null, null, null, cache); - expect(mockedFetch).toHaveBeenCalledTimes(1); - expect(mockCacheGet).toHaveBeenCalledTimes(0); - expect(mockCacheSet).toHaveBeenCalledTimes(0); - }); - - test('Caches across runs with cache enabled', async () => { - const processor = buildProcessor({ - cacheTTL: { minutes: 5 }, - }); - - mockFetchImplementation(); - const entity = baseEntity(); - await processor.preProcessEntity(entity, null, null, null, cache); - expect(mockedFetch).toHaveBeenCalledTimes(1); - expect(mockCacheGet).toHaveBeenCalledTimes(1); - expect(mockCacheSet).toHaveBeenCalledTimes(1); - - mockedFetch.mockClear(); - mockCacheGet.mockClear(); - mockCacheSet.mockClear(); - await processor.preProcessEntity(entity, null, null, null, cache); - expect(mockedFetch).toHaveBeenCalledTimes(0); - expect(mockCacheGet).toHaveBeenCalledTimes(1); - expect(mockCacheSet).toHaveBeenCalledTimes(0); - }); -}); - -function mockFetchImplementation(): void { - mockedFetch.mockResolvedValue({ - json: jest.fn().mockResolvedValue({ - languageCount: 6, - totalBytes: 43823, - processedDate: '2023-06-20T21:37:48.337Z', - breakdown: [ - { - name: 'YAML', - percentage: 2.23, - bytes: 979, - type: 'data', - color: '#cb171e', - }, - { - name: 'JSON', - percentage: 1.31, - bytes: 574, - type: 'data', - color: '#292929', - }, - { - name: 'C++', - percentage: 5.25, - bytes: 2300, - type: 'programming', - color: '#f34b7d', - }, - { - name: 'ASP.net', - percentage: 6.97, - bytes: 3053, - type: 'programming', - color: '#178600', - }, - { - name: 'Java', - percentage: 12.79, - bytes: 5603, - type: 'programming', - color: '#b07219', - }, - { - name: 'Common Lisp', - percentage: 71.46, - bytes: 31314, - type: 'programming', - color: '#3fb68b', - }, - ], - }), - } as unknown as Response); -} - -function baseEntity(): Entity { - return { - apiVersion: 'backstage.io/v1alpha1', - kind: 'Component', - metadata: { - name: 'foo', - }, - }; -} - -function buildProcessor(options: Partial) { - const config = new ConfigReader({ - linguist: { - tagsProcessor: { - bytesThreshold: options.bytesThreshold, - languageTypes: options.languageTypes, - languageMap: options.languageMap, - cacheTTL: options.cacheTTL, - }, - }, - }); - return LinguistTagsProcessor.fromConfig(config, { - logger: getVoidLogger(), - discovery, - shouldProcessEntity: options.shouldProcessEntity, - }); -} diff --git a/plugins/linguist-backend/src/processor/LinguistTagsProcessor.ts b/plugins/linguist-backend/src/processor/LinguistTagsProcessor.ts deleted file mode 100644 index 456de3809f..0000000000 --- a/plugins/linguist-backend/src/processor/LinguistTagsProcessor.ts +++ /dev/null @@ -1,268 +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 { Entity, stringifyEntityRef } from '@backstage/catalog-model'; -import { - CatalogProcessor, - CatalogProcessorCache, -} from '@backstage/plugin-catalog-node'; -import { DiscoveryService, LoggerService } from '@backstage/backend-plugin-api'; -import { Languages, LanguageType } from '@backstage/plugin-linguist-common'; -import fetch from 'node-fetch'; -import { durationToMilliseconds, HumanDuration } from '@backstage/types'; -import { Config } from '@backstage/config'; - -/** - * A function which given an entity, determines if it should be processed for linguist tags. - * @public - */ -export type ShouldProcessEntity = (entity: Entity) => boolean; - -interface CachedData { - [key: string]: number | string[]; - languages: string[]; - cachedTime: number; -} - -/** - * The constructor options for building the LinguistTagsProcessor - * @public - */ -export interface LinguistTagsProcessorOptions { - logger: LoggerService; - discovery: DiscoveryService; - /** - * Optional map that gives full control over which linguist languages should be included as tags and - * how they should be represented. The keys should be exact matches to languages in the linguist - * and the values should be how they render as backstage tags. Keep in mind that backstage has character - * requirements for tags. If you map a key to a falsey value, it will not be emitted as a tag. - */ - languageMap?: Record; - /** - * A function which determines which entities should be processed by the LinguistTagProcessor. - * - * The default is to process all entities of kind=Component - */ - shouldProcessEntity?: ShouldProcessEntity; - /** - * Determines how long to cache language breakdowns for entities in the processor. Considering - * how often this processor runs, caching can help move some read traffic off of the linguist DB. - * - * If this caching is using up too much memory, you can disable it by setting cacheTTL to 0. - */ - cacheTTL?: HumanDuration; - /** - * How many bytes must exist of a language in a repo before we consider it for adding a tag to - * the entity. This can be used if some repos have short utility scripts that may not be the primary - * language for the repo. - */ - bytesThreshold?: number; - /** - * Which linguist file types to process tags for. - */ - languageTypes?: LanguageType[]; -} - -/** - * This processor will fetch the language breakdown from the linguist API and - * add the languages to the entity as searchable tags. - * - * @public - * */ -export class LinguistTagsProcessor implements CatalogProcessor { - private logger: LoggerService; - private discovery: DiscoveryService; - private loggerMeta = { plugin: 'LinguistTagsProcessor' }; - private languageMap: Record = {}; - private shouldProcessEntity: ShouldProcessEntity = (entity: Entity) => { - return entity.kind === 'Component'; - }; - private cacheTTLMilliseconds: number; - private bytesThreshold = 0; - private languageTypes: LanguageType[] = ['programming']; - - getProcessorName(): string { - return 'LinguistTagsProcessor'; - } - - constructor(options: LinguistTagsProcessorOptions) { - this.logger = options.logger; - this.discovery = options.discovery; - if (options.shouldProcessEntity) { - this.shouldProcessEntity = options.shouldProcessEntity; - } - this.cacheTTLMilliseconds = durationToMilliseconds( - options.cacheTTL || { minutes: 30 }, - ); - if (options.bytesThreshold) { - this.bytesThreshold = options.bytesThreshold; - } - if (options.languageTypes) { - this.languageTypes = options.languageTypes; - } - if (options.languageMap) { - this.languageMap = options.languageMap; - } - } - - static fromConfig( - config: Config, - options: LinguistTagsProcessorOptions, - ): LinguistTagsProcessor { - const c = config.getOptionalConfig('linguist.tagsProcessor'); - if (c) { - options.bytesThreshold ??= c.getOptionalNumber('bytesThreshold'); - options.languageTypes ??= c.getOptionalStringArray( - 'languageTypes', - ) as LanguageType[]; - options.languageMap ??= c.getOptional('languageMap'); - options.cacheTTL ??= c.getOptional('cacheTTL'); - } - - return new LinguistTagsProcessor(options); - } - - /** - * Given an entity ref, fetches the language breakdown from the Linguist backend HTTP API. - * @param entityRef - stringified entity ref - * @returns The language breakdown - */ - private async getLanguagesFromLinguistAPI( - entityRef: string, - ): Promise { - this.logger.debug(`Fetching languages from linguist API`, { - ...this.loggerMeta, - entityRef, - }); - - const baseUrl = await this.discovery.getBaseUrl('linguist'); - const linguistApi = new URL(`${baseUrl}/entity-languages`); - linguistApi.searchParams.append('entityRef', entityRef); - const linguistData = await fetch(linguistApi).then( - res => res.json() as Promise, - ); - if (!linguistData || !linguistData.processedDate) { - return []; - } - - return linguistData.breakdown - .filter( - b => - this.languageTypes.includes(b.type) && b.bytes > this.bytesThreshold, - ) - .map(b => b.name); - } - - /** - * Cached wrapper around getLanguagesFromLinguistAPI - * @param cache - The CatalogProcessorCache - * @param entityRef - Stringified entity references - * - * @returns List of languages - */ - private async getCachedLanguages( - cache: CatalogProcessorCache, - entityRef: string, - ): Promise { - let cachedData = (await cache.get(entityRef)) as CachedData | undefined; - if (!cachedData || this.isExpired(cachedData)) { - const languages = await this.getLanguagesFromLinguistAPI(entityRef); - cachedData = { languages, cachedTime: Date.now() }; - await cache.set(entityRef, cachedData); - } - this.logger.debug(`Fetched cached languages ${cachedData.languages}`, { - ...this.loggerMeta, - entityRef, - }); - return cachedData.languages; - } - - /** - * Determines if cached data is expired based on TTL - * - * @param cachedData - The cached data for this entity - * @returns True if data is expired - */ - private isExpired(cachedData: CachedData): boolean { - const elapsed = Date.now() - (cachedData.cachedTime || 0); - return elapsed > this.cacheTTLMilliseconds; - } - - /** - * This pre-processor will fetch linguist data for a Component and convert the language breakdown - * into entity tags which will be appended to the entity. - * - * @public - */ - async preProcessEntity( - entity: Entity, - _: any, - __: any, - ___: any, - cache: CatalogProcessorCache, - ): Promise { - if (!this.shouldProcessEntity(entity)) { - return entity; - } - const entityRef = stringifyEntityRef(entity); - this.logger.debug(`Processing ${entityRef}`, { - ...this.loggerMeta, - entityRef, - }); - - const languages = - this.cacheTTLMilliseconds > 0 - ? await this.getCachedLanguages(cache, entityRef) - : await this.getLanguagesFromLinguistAPI(entityRef); - - const tags = (entity.metadata.tags ||= []); - const originalTagCount = tags.length; - - languages.forEach(lang => { - const cleanedUpLangTag = - lang in this.languageMap ? this.languageMap[lang] : sanitizeTag(lang); - if (cleanedUpLangTag && !tags.includes(cleanedUpLangTag)) { - tags.push(cleanedUpLangTag); - } - }); - - const addedCount = tags.length - originalTagCount; - - this.logger.debug(`Added ${addedCount} language tags from linguist`, { - ...this.loggerMeta, - entityRef, - }); - - return entity; - } -} - -/** - * Converts language tags from linguist to something acceptable by - * the tag requirements for backstage - * - * @param tag - A language tag from linguist - * @returns Cleaned up language tag - * @internal - */ -export function sanitizeTag(tag: string): string { - return tag - .toLowerCase() - .replace(/\.net/g, '-dot-net') - .replace(/[^a-z0-9:+#-]+/g, '-') - .replace(/-{2,}/g, '-') - .replace(/^-+|-+$/g, ''); -} diff --git a/plugins/linguist-backend/src/processor/__snapshots__/LinguistTagsProcessor.test.ts.snap b/plugins/linguist-backend/src/processor/__snapshots__/LinguistTagsProcessor.test.ts.snap deleted file mode 100644 index 4eb428f61a..0000000000 --- a/plugins/linguist-backend/src/processor/__snapshots__/LinguistTagsProcessor.test.ts.snap +++ /dev/null @@ -1,707 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`sanitizeTag Should clean up all linguist languages 1`] = ` -[ - "1c-enterprise", - "2-dimensional-array", - "4d", - "abap", - "abap-cds", - "abnf", - "ags-script", - "aidl", - "al", - "ampl", - "antlr", - "api-blueprint", - "apl", - "asl", - "asn-1", - "asp-dot-net", - "ats", - "actionscript", - "ada", - "adblock-filter-list", - "adobe-font-metrics", - "agda", - "alloy", - "alpine-abuild", - "altium-designer", - "angelscript", - "ant-build-system", - "antlers", - "apacheconf", - "apex", - "apollo-guidance-computer", - "applescript", - "arc", - "asciidoc", - "aspectj", - "assembly", - "astro", - "asymptote", - "augeas", - "autohotkey", - "autoit", - "avro-idl", - "awk", - "basic", - "ballerina", - "batchfile", - "beef", - "befunge", - "berry", - "bibtex", - "bicep", - "bikeshed", - "bison", - "bitbake", - "blade", - "blitzbasic", - "blitzmax", - "bluespec", - "boo", - "boogie", - "brainfuck", - "brighterscript", - "brightscript", - "browserslist", - "c", - "c#", - "c++", - "c-objdump", - "c2hs-haskell", - "cap-cds", - "cil", - "clips", - "cmake", - "cobol", - "codeowners", - "collada", - "cson", - "css", - "csv", - "cue", - "cweb", - "cabal-config", - "cadence", - "cairo", - "cameligo", - "cap-n-proto", - "cartocss", - "ceylon", - "chapel", - "charity", - "checksums", - "chuck", - "circom", - "cirru", - "clarion", - "clarity", - "classic-asp", - "clean", - "click", - "clojure", - "closure-templates", - "cloud-firestore-security-rules", - "conll-u", - "codeql", - "coffeescript", - "coldfusion", - "coldfusion-cfc", - "common-lisp", - "common-workflow-language", - "component-pascal", - "cool", - "coq", - "cpp-objdump", - "creole", - "crystal", - "csound", - "csound-document", - "csound-score", - "cuda", - "cue-sheet", - "curry", - "cycript", - "cypher", - "cython", - "d", - "d-objdump", - "d2", - "digital-command-language", - "dm", - "dns-zone", - "dtrace", - "dafny", - "darcs-patch", - "dart", - "dataweave", - "debian-package-control-file", - "denizenscript", - "dhall", - "diff", - "directx-3d-file", - "dockerfile", - "dogescript", - "dotenv", - "dylan", - "e", - "e-mail", - "ebnf", - "ecl", - "eclipse", - "ejs", - "eq", - "eagle", - "earthly", - "easybuild", - "ecere-projects", - "ecmarkup", - "editorconfig", - "edje-data-collection", - "eiffel", - "elixir", - "elm", - "elvish", - "elvish-transcript", - "emacs-lisp", - "emberscript", - "erlang", - "euphoria", - "f#", - "f", - "figlet-font", - "flux", - "factor", - "fancy", - "fantom", - "faust", - "fennel", - "filebench-wml", - "filterscript", - "fluent", - "formatted", - "forth", - "fortran", - "fortran-free-form", - "freebasic", - "freemarker", - "frege", - "futhark", - "g-code", - "gaml", - "gams", - "gap", - "gcc-machine-description", - "gdb", - "gdscript", - "gedcom", - "glsl", - "gn", - "gsc", - "game-maker-language", - "gemfile-lock", - "gemini", - "genero", - "genero-forms", - "genie", - "genshi", - "gentoo-ebuild", - "gentoo-eclass", - "gerber-image", - "gettext-catalog", - "gherkin", - "git-attributes", - "git-config", - "git-revision-list", - "gleam", - "glyph", - "glyph-bitmap-distribution-format", - "gnuplot", - "go", - "go-checksums", - "go-module", - "go-workspace", - "godot-resource", - "golo", - "gosu", - "grace", - "gradle", - "grammatical-framework", - "graph-modeling-language", - "graphql", - "graphviz-dot", - "groovy", - "groovy-server-pages", - "haproxy", - "hcl", - "hlsl", - "hocon", - "html", - "html+ecr", - "html+eex", - "html+erb", - "html+php", - "html+razor", - "http", - "hxml", - "hack", - "haml", - "handlebars", - "harbour", - "haskell", - "haxe", - "hiveql", - "holyc", - "hosts-file", - "hy", - "hyphy", - "idl", - "igor-pro", - "ini", - "irc-log", - "idris", - "ignore-list", - "imagej-macro", - "imba", - "inform-7", - "ink", - "inno-setup", - "io", - "ioke", - "isabelle", - "isabelle-root", - "j", - "jar-manifest", - "jcl", - "jflex", - "json", - "json-with-comments", - "json5", - "jsonld", - "jsoniq", - "janet", - "jasmin", - "java", - "java-properties", - "java-server-pages", - "javascript", - "javascript+erb", - "jest-snapshot", - "jetbrains-mps", - "jinja", - "jison", - "jison-lex", - "jolie", - "jsonnet", - "julia", - "jupyter-notebook", - "just", - "krl", - "kaitai-struct", - "kakounescript", - "kerboscript", - "kicad-layout", - "kicad-legacy-layout", - "kicad-schematic", - "kickstart", - "kit", - "kotlin", - "kusto", - "lfe", - "llvm", - "lolcode", - "lsl", - "ltspice-symbol", - "labview", - "lark", - "lasso", - "latte", - "lean", - "less", - "lex", - "ligolang", - "lilypond", - "limbo", - "linker-script", - "linux-kernel-module", - "liquid", - "literate-agda", - "literate-coffeescript", - "literate-haskell", - "livescript", - "logos", - "logtalk", - "lookml", - "loomscript", - "lua", - "m", - "m4", - "m4sugar", - "matlab", - "maxscript", - "mdx", - "mlir", - "mql4", - "mql5", - "mtml", - "muf", - "macaulay2", - "makefile", - "mako", - "markdown", - "marko", - "mask", - "mathematica", - "maven-pom", - "max", - "mercury", - "mermaid", - "meson", - "metal", - "microsoft-developer-studio-project", - "microsoft-visual-studio-solution", - "minid", - "miniyaml", - "mint", - "mirah", - "modelica", - "modula-2", - "modula-3", - "module-management-system", - "monkey", - "monkey-c", - "moocode", - "moonscript", - "motoko", - "motorola-68k-assembly", - "move", - "muse", - "mustache", - "myghty", - "nasl", - "ncl", - "neon", - "nl", - "npm-config", - "nsis", - "nwscript", - "nasal", - "nearley", - "nemerle", - "netlinx", - "netlinx+erb", - "netlogo", - "newlisp", - "nextflow", - "nginx", - "nim", - "ninja", - "nit", - "nix", - "nu", - "numpy", - "nunjucks", - "nushell", - "oasv2-json", - "oasv2-yaml", - "oasv3-json", - "oasv3-yaml", - "ocaml", - "objdump", - "object-data-instance-notation", - "objectscript", - "objective-c", - "objective-c++", - "objective-j", - "odin", - "omgrofl", - "opa", - "opal", - "open-policy-agent", - "openapi-specification-v2", - "openapi-specification-v3", - "opencl", - "openedge-abl", - "openqasm", - "openrc-runscript", - "openscad", - "openstep-property-list", - "opentype-feature-file", - "option-list", - "org", - "ox", - "oxygene", - "oz", - "p4", - "pddl", - "peg-js", - "php", - "plsql", - "plpgsql", - "pov-ray-sdl", - "pact", - "pan", - "papyrus", - "parrot", - "parrot-assembly", - "parrot-internal-representation", - "pascal", - "pawn", - "pep8", - "perl", - "pic", - "pickle", - "picolisp", - "piglatin", - "pike", - "plantuml", - "pod", - "pod-6", - "pogoscript", - "polar", - "pony", - "portugol", - "postcss", - "postscript", - "powerbuilder", - "powershell", - "prisma", - "processing", - "procfile", - "proguard", - "prolog", - "promela", - "propeller-spin", - "protocol-buffer", - "protocol-buffer-text-format", - "public-key", - "pug", - "puppet", - "pure-data", - "purebasic", - "purescript", - "pyret", - "python", - "python-console", - "python-traceback", - "q#", - "qml", - "qmake", - "qt-script", - "quake", - "r", - "raml", - "rbs", - "rdoc", - "realbasic", - "rexx", - "rmarkdown", - "rpc", - "rpgle", - "rpm-spec", - "runoff", - "racket", - "ragel", - "raku", - "rascal", - "raw-token-data", - "rescript", - "readline-config", - "reason", - "reasonligo", - "rebol", - "record-jar", - "red", - "redcode", - "redirect-rules", - "regular-expression", - "ren-py", - "renderscript", - "rich-text-format", - "ring", - "riot", - "robotframework", - "roff", - "roff-manpage", - "rouge", - "routeros-script", - "ruby", - "rust", - "sas", - "scss", - "selinux-policy", - "smt", - "sparql", - "sqf", - "sql", - "sqlpl", - "srecode-template", - "ssh-config", - "star", - "stl", - "ston", - "svg", - "swig", - "sage", - "saltstack", - "sass", - "scala", - "scaml", - "scenic", - "scheme", - "scilab", - "self", - "shaderlab", - "shell", - "shellcheck-config", - "shellsession", - "shen", - "sieve", - "simple-file-verification", - "singularity", - "slash", - "slice", - "slim", - "smpl", - "smali", - "smalltalk", - "smarty", - "smithy", - "snakemake", - "solidity", - "soong", - "sourcepawn", - "spline-font-database", - "squirrel", - "stan", - "standard-ml", - "starlark", - "stata", - "stringtemplate", - "stylus", - "subrip-text", - "sugarss", - "supercollider", - "svelte", - "sway", - "swift", - "systemverilog", - "ti-program", - "tl-verilog", - "tla", - "toml", - "tsql", - "tsv", - "tsx", - "txl", - "talon", - "tcl", - "tcsh", - "tex", - "tea", - "terra", - "texinfo", - "text", - "textmate-properties", - "textile", - "thrift", - "turing", - "turtle", - "twig", - "type-language", - "typescript", - "unified-parallel-c", - "unity3d-asset", - "unix-assembly", - "uno", - "unrealscript", - "urweb", - "v", - "vba", - "vbscript", - "vcl", - "vhdl", - "vala", - "valve-data-format", - "velocity-template-language", - "verilog", - "vim-help-file", - "vim-script", - "vim-snippet", - "visual-basic-dot-net", - "visual-basic-6-0", - "volt", - "vue", - "vyper", - "wdl", - "wgsl", - "wavefront-material", - "wavefront-object", - "web-ontology-language", - "webassembly", - "webassembly-interface-type", - "webidl", - "webvtt", - "wget-config", - "whiley", - "wikitext", - "win32-message-file", - "windows-registry-entries", - "witcher-script", - "wollok", - "world-of-warcraft-addon-data", - "wren", - "x-bitmap", - "x-font-directory-index", - "x-pixmap", - "x10", - "xc", - "xcompose", - "xml", - "xml-property-list", - "xpages", - "xproc", - "xquery", - "xs", - "xslt", - "xojo", - "xonsh", - "xtend", - "yaml", - "yang", - "yara", - "yasnippet", - "yacc", - "yul", - "zap", - "zil", - "zeek", - "zenscript", - "zephir", - "zig", - "zimpl", - "curl-config", - "desktop", - "dircolors", - "ec", - "edn", - "fish", - "hoon", - "jq", - "kvlang", - "mirc-script", - "mcfunction", - "mupad", - "nanorc", - "nesc", - "ooc", - "q", - "restructuredtext", - "robots-txt", - "sed", - "wisp", - "xbase", -] -`; diff --git a/plugins/linguist-backend/src/run.ts b/plugins/linguist-backend/src/run.ts deleted file mode 100644 index d945aa13f0..0000000000 --- a/plugins/linguist-backend/src/run.ts +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { getRootLogger } from '@backstage/backend-common'; -import yn from 'yn'; -import { startStandaloneServer } from './service/standaloneServer'; - -const port = process.env.PLUGIN_PORT ? Number(process.env.PLUGIN_PORT) : 7007; -const enableCors = yn(process.env.PLUGIN_CORS, { default: false }); -const logger = getRootLogger(); - -startStandaloneServer({ port, enableCors, logger }).catch(err => { - logger.error(err); - process.exit(1); -}); - -process.on('SIGINT', () => { - logger.info('CTRL+C pressed; exiting.'); - process.exit(0); -}); diff --git a/plugins/linguist-backend/src/service/router.test.ts b/plugins/linguist-backend/src/service/router.test.ts deleted file mode 100644 index 4048e1213b..0000000000 --- a/plugins/linguist-backend/src/service/router.test.ts +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - DatabaseManager, - getVoidLogger, - PluginDatabaseManager, - PluginEndpointDiscovery, - TokenManager, - UrlReaders, -} from '@backstage/backend-common'; -import express from 'express'; -import request from 'supertest'; -import { ConfigReader } from '@backstage/config'; -import { createRouter, createRouterFromConfig } from './router'; -import { LinguistBackendApi } from '../api'; -import { TaskScheduleDefinition } from '@backstage/backend-tasks'; - -function createDatabase(): PluginDatabaseManager { - return DatabaseManager.fromConfig( - new ConfigReader({ - backend: { - database: { - client: 'better-sqlite3', - connection: ':memory:', - }, - }, - }), - ).forPlugin('code-coverage'); -} - -const testDiscovery: jest.Mocked = { - getBaseUrl: jest - .fn() - .mockResolvedValue('http://localhost:7007/api/code-coverage'), - getExternalBaseUrl: jest.fn(), -}; - -const mockedTokenManager: jest.Mocked = { - getToken: jest.fn(), - authenticate: jest.fn(), -}; - -const mockUrlReader = UrlReaders.default({ - logger: getVoidLogger(), - config: new ConfigReader({}), -}); - -const schedule: TaskScheduleDefinition = { - frequency: { minutes: 2 }, - timeout: { minutes: 15 }, - initialDelay: { seconds: 15 }, -}; - -describe('createRouter', () => { - let linguistBackendApi: jest.Mocked; - let app: express.Express; - - beforeEach(() => { - jest.resetAllMocks(); - }); - - describe('GET /health', () => { - beforeAll(async () => { - const router = await createRouter( - { schedule: schedule, age: { days: 30 }, useSourceLocation: false }, - { - linguistBackendApi: linguistBackendApi, - discovery: testDiscovery, - database: createDatabase(), - reader: mockUrlReader, - logger: getVoidLogger(), - tokenManager: mockedTokenManager, - }, - ); - app = express().use(router); - }); - it('returns ok', async () => { - const response = await request(app).get('/health'); - - expect(response.status).toEqual(200); - expect(response.body).toEqual({ status: 'ok' }); - }); - }); - - describe('GET /health from config', () => { - beforeAll(async () => { - const config = new ConfigReader({ - linguist: { - schedule: { - frequency: { minutes: 2 }, - timeout: { minutes: 15 }, - initialDelay: { seconds: 15 }, - }, - age: { days: 30 }, - useSourceLocation: false, - }, - }); - const router = await createRouterFromConfig({ - linguistBackendApi: linguistBackendApi, - discovery: testDiscovery, - database: createDatabase(), - reader: mockUrlReader, - logger: getVoidLogger(), - config, - tokenManager: mockedTokenManager, - }); - app = express().use(router); - }); - 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/linguist-backend/src/service/router.ts b/plugins/linguist-backend/src/service/router.ts deleted file mode 100644 index ec2494b166..0000000000 --- a/plugins/linguist-backend/src/service/router.ts +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - createLegacyAuthAdapters, - errorHandler, - PluginDatabaseManager, - PluginEndpointDiscovery, - TokenManager, - UrlReader, -} from '@backstage/backend-common'; -import express from 'express'; -import Router from 'express-promise-router'; -import { LinguistBackendApi } from '../api'; -import { LinguistBackendDatabase } from '../db'; -import { - PluginTaskScheduler, - readTaskScheduleDefinitionFromConfig, - TaskScheduleDefinition, -} from '@backstage/backend-tasks'; -import { HumanDuration } from '@backstage/types'; -import { CatalogClient } from '@backstage/catalog-client'; -import { LinguistBackendClient } from '../api/LinguistBackendClient'; -import { Config } from '@backstage/config'; -import { - AuthService, - HttpAuthService, - LoggerService, -} from '@backstage/backend-plugin-api'; - -/** @public */ -export interface PluginOptions { - schedule?: TaskScheduleDefinition; - age?: HumanDuration; - batchSize?: number; - useSourceLocation?: boolean; - linguistJsOptions?: Record; - kind?: string[]; -} - -/** @public */ -export interface RouterOptions { - linguistBackendApi?: LinguistBackendApi; - logger: LoggerService; - reader: UrlReader; - tokenManager: TokenManager; - database: PluginDatabaseManager; - discovery: PluginEndpointDiscovery; - scheduler?: PluginTaskScheduler; - config?: Config; - auth?: AuthService; - httpAuth?: HttpAuthService; -} - -/** @public */ -export async function createRouter( - pluginOptions: PluginOptions, - routerOptions: RouterOptions, -): Promise { - const { logger, reader, database, discovery, scheduler, tokenManager, auth } = - routerOptions; - - const { - schedule, - age, - batchSize, - useSourceLocation, - kind, - linguistJsOptions, - } = pluginOptions; - - const linguistBackendStore = await LinguistBackendDatabase.create( - await database.getClient(), - ); - - const catalogClient = new CatalogClient({ discoveryApi: discovery }); - - const { auth: adaptedAuth } = createLegacyAuthAdapters({ - auth, - tokenManager: tokenManager, - discovery: discovery, - }); - - const linguistBackendClient = - routerOptions.linguistBackendApi || - new LinguistBackendClient( - logger, - linguistBackendStore, - reader, - adaptedAuth, - catalogClient, - age, - batchSize, - useSourceLocation, - kind, - linguistJsOptions, - ); - - if (scheduler && schedule) { - logger.info( - `Scheduling processing of entities with: ${JSON.stringify(schedule)}`, - ); - await scheduler.scheduleTask({ - id: 'linguist_process_entities', - frequency: schedule.frequency, - timeout: schedule.timeout, - initialDelay: schedule.initialDelay, - scope: schedule.scope, - fn: async () => { - await linguistBackendClient.processEntities(); - }, - }); - } - - const router = Router(); - router.use(express.json()); - - router.get('/health', (_, response) => { - response.send({ status: 'ok' }); - }); - - /** - * /entity-languages?entity=component:default/my-component - */ - router.get('/entity-languages', async (req, res) => { - const { entityRef: entityRef } = req.query; - - if (!entityRef) { - throw new Error('No entityRef was provided'); - } - - const entityLanguages = await linguistBackendClient.getEntityLanguages( - entityRef as string, - ); - res.status(200).json(entityLanguages); - }); - - router.use(errorHandler()); - return router; -} - -/** @public */ -export async function createRouterFromConfig(routerOptions: RouterOptions) { - const { config } = routerOptions; - const pluginOptions: PluginOptions = {}; - if (config) { - if (config.has('linguist.schedule')) { - pluginOptions.schedule = readTaskScheduleDefinitionFromConfig( - config.getConfig('linguist.schedule'), - ); - } - pluginOptions.batchSize = config.getOptionalNumber('linguist.batchSize'); - pluginOptions.useSourceLocation = - config.getOptionalBoolean('linguist.useSourceLocation') ?? false; - pluginOptions.age = config.getOptionalConfig('linguist.age') as - | HumanDuration - | undefined; - pluginOptions.kind = config.getOptionalStringArray('linguist.kind'); - pluginOptions.linguistJsOptions = config.getOptionalConfig( - 'linguist.linguistJsOptions', - ); - } - return createRouter(pluginOptions, routerOptions); -} diff --git a/plugins/linguist-backend/src/service/standaloneServer.ts b/plugins/linguist-backend/src/service/standaloneServer.ts deleted file mode 100644 index d7e02967a4..0000000000 --- a/plugins/linguist-backend/src/service/standaloneServer.ts +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - createServiceBuilder, - DatabaseManager, - HostDiscovery, - loadBackendConfig, - ServerTokenManager, - UrlReaders, -} from '@backstage/backend-common'; -import { Server } from 'http'; -import { createRouter } from './router'; -import { TaskScheduleDefinition } from '@backstage/backend-tasks'; -import { ConfigReader } from '@backstage/config'; -import { LoggerService } from '@backstage/backend-plugin-api'; - -export interface ServerOptions { - port: number; - enableCors: boolean; - logger: LoggerService; -} - -export async function startStandaloneServer( - options: ServerOptions, -): Promise { - const logger = options.logger.child({ service: 'linguist-backend' }); - const config = await loadBackendConfig({ logger, argv: process.argv }); - const manager = DatabaseManager.fromConfig( - new ConfigReader({ - backend: { - database: { client: 'better-sqlite3', connection: ':memory:' }, - }, - }), - ); - const database = manager.forPlugin('linguist'); - - const schedule: TaskScheduleDefinition = { - frequency: { minutes: 2 }, - timeout: { minutes: 15 }, - initialDelay: { seconds: 15 }, - }; - - logger.debug('Starting application server...'); - const router = await createRouter( - { schedule: schedule, age: { days: 30 }, useSourceLocation: false }, - { - database, - discovery: HostDiscovery.fromConfig(config), - reader: UrlReaders.default({ logger, config }), - logger, - tokenManager: ServerTokenManager.noop(), - }, - ); - - let service = createServiceBuilder(module) - .setPort(options.port) - .addRouter('/linguist', 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/linguist-backend/src/setupTests.ts b/plugins/linguist-backend/src/setupTests.ts deleted file mode 100644 index 813cdeaae3..0000000000 --- a/plugins/linguist-backend/src/setupTests.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export {}; diff --git a/plugins/linguist-common/.eslintrc.js b/plugins/linguist-common/.eslintrc.js deleted file mode 100644 index e2a53a6ad2..0000000000 --- a/plugins/linguist-common/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/linguist-common/CHANGELOG.md b/plugins/linguist-common/CHANGELOG.md deleted file mode 100644 index c9eb3c0c28..0000000000 --- a/plugins/linguist-common/CHANGELOG.md +++ /dev/null @@ -1,38 +0,0 @@ -# @backstage/plugin-linguist-common - -## 0.1.2 - -### Patch Changes - -- 406b786a2a2c: Mark package as being free of side effects, allowing more optimized Webpack builds. - -## 0.1.2-next.0 - -### Patch Changes - -- 406b786a2a2c: Mark package as being free of side effects, allowing more optimized Webpack builds. - -## 0.1.1 - -### Patch Changes - -- 12a8c94eda8d: Add package repository and homepage metadata -- d440f1dd0e72: Exported new LanguageType type alias - -## 0.1.1-next.1 - -### Patch Changes - -- d440f1dd0e72: Exported new LanguageType type alias - -## 0.1.1-next.0 - -### Patch Changes - -- 12a8c94eda8d: Add package repository and homepage metadata - -## 0.1.0 - -### Minor Changes - -- 75cfee5688: Introduced the Linguist plugin, checkout the plugin's `README.md` for more details! diff --git a/plugins/linguist-common/README.md b/plugins/linguist-common/README.md deleted file mode 100644 index 4e31966953..0000000000 --- a/plugins/linguist-common/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Deprecated - -This package has been moved to the [backstage-community/plugins](https://github.com/backstage/community-plugins) repository. Migrate to using `@backstage-community/plugin-linguist-common` instead. diff --git a/plugins/linguist-common/api-report.md b/plugins/linguist-common/api-report.md deleted file mode 100644 index 9ab81fd41d..0000000000 --- a/plugins/linguist-common/api-report.md +++ /dev/null @@ -1,51 +0,0 @@ -## API Report File for "@backstage/plugin-linguist-common" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts -// @public (undocumented) -export type EntitiesOverview = { - entityCount: number; - processedCount: number; - pendingCount: number; - staleCount: number; - filteredEntities: string[]; -}; - -// @public (undocumented) -export type EntityResults = { - entityRef: string; - results: Languages; -}; - -// @public (undocumented) -export type Language = { - name: string; - percentage: number; - bytes: number; - type: LanguageType; - color?: `#${string}`; -}; - -// @public (undocumented) -export type Languages = { - languageCount: number; - totalBytes: number; - processedDate: string; - breakdown: Language[]; -}; - -// @public (undocumented) -export type LanguageType = 'programming' | 'data' | 'markup' | 'prose'; - -// @public (undocumented) -export const LINGUIST_ANNOTATION = 'backstage.io/linguist'; - -// @public (undocumented) -export type ProcessedEntity = { - entityRef: string; - processedDate: Date; -}; - -// (No @packageDocumentation comment for this package) -``` diff --git a/plugins/linguist-common/catalog-info.yaml b/plugins/linguist-common/catalog-info.yaml deleted file mode 100644 index 266daa4a75..0000000000 --- a/plugins/linguist-common/catalog-info.yaml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: backstage.io/v1alpha1 -kind: Component -metadata: - name: backstage-plugin-linguist-common - title: '@backstage/plugin-linguist-common' - description: Common functionalities for the linguist plugin -spec: - lifecycle: experimental - type: backstage-common-library - owner: awanlin diff --git a/plugins/linguist-common/knip-report.md b/plugins/linguist-common/knip-report.md deleted file mode 100644 index 2661c35327..0000000000 --- a/plugins/linguist-common/knip-report.md +++ /dev/null @@ -1,2 +0,0 @@ -# Knip report - diff --git a/plugins/linguist-common/package.json b/plugins/linguist-common/package.json deleted file mode 100644 index 99668a0752..0000000000 --- a/plugins/linguist-common/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "@backstage/plugin-linguist-common", - "version": "0.1.2", - "description": "Common functionalities for the linguist plugin", - "backstage": { - "role": "common-library", - "moved": "@backstage-community/plugin-linguist-common" - }, - "publishConfig": { - "access": "public", - "main": "dist/index.cjs.js", - "module": "dist/index.esm.js", - "types": "dist/index.d.ts" - }, - "homepage": "https://backstage.io", - "repository": { - "type": "git", - "url": "https://github.com/backstage/backstage", - "directory": "plugins/linguist-common" - }, - "license": "Apache-2.0", - "sideEffects": false, - "main": "src/index.ts", - "types": "src/index.ts", - "files": [ - "dist" - ], - "scripts": { - "build": "backstage-cli package build", - "clean": "backstage-cli package clean", - "lint": "backstage-cli package lint", - "prepack": "backstage-cli package prepack", - "postpack": "backstage-cli package postpack", - "test": "backstage-cli package test" - }, - "devDependencies": { - "@backstage/cli": "workspace:^" - }, - "deprecated": "This package has been moved to the backstage/community-plugins repository. You should migrate to using @backstage-community/plugin-linguist-common instead." -} diff --git a/plugins/linguist-common/src/constants.ts b/plugins/linguist-common/src/constants.ts deleted file mode 100644 index 55b3d21d02..0000000000 --- a/plugins/linguist-common/src/constants.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** @public */ -export const LINGUIST_ANNOTATION = 'backstage.io/linguist'; diff --git a/plugins/linguist-common/src/index.ts b/plugins/linguist-common/src/index.ts deleted file mode 100644 index 88fe08c714..0000000000 --- a/plugins/linguist-common/src/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export * from './types'; -export * from './constants'; diff --git a/plugins/linguist-common/src/setupTests.ts b/plugins/linguist-common/src/setupTests.ts deleted file mode 100644 index 8b9b6bd586..0000000000 --- a/plugins/linguist-common/src/setupTests.ts +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -export {}; diff --git a/plugins/linguist-common/src/types.ts b/plugins/linguist-common/src/types.ts deleted file mode 100644 index 515ca45f9c..0000000000 --- a/plugins/linguist-common/src/types.ts +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** @public */ -export type EntityResults = { - entityRef: string; - results: Languages; -}; - -/** @public */ -export type Languages = { - languageCount: number; - totalBytes: number; - processedDate: string; - breakdown: Language[]; -}; - -/** @public */ -export type LanguageType = 'programming' | 'data' | 'markup' | 'prose'; - -/** @public */ -export type Language = { - name: string; - percentage: number; - bytes: number; - type: LanguageType; - color?: `#${string}`; -}; - -/** @public */ -export type ProcessedEntity = { - entityRef: string; - processedDate: Date; -}; - -/** @public */ -export type EntitiesOverview = { - entityCount: number; - processedCount: number; - pendingCount: number; - staleCount: number; - filteredEntities: string[]; -}; diff --git a/plugins/linguist/.eslintrc.js b/plugins/linguist/.eslintrc.js deleted file mode 100644 index e487f765b2..0000000000 --- a/plugins/linguist/.eslintrc.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { - rules: { - '@backstage/no-top-level-material-ui-4-imports': 'error', - }, -}); diff --git a/plugins/linguist/CHANGELOG.md b/plugins/linguist/CHANGELOG.md deleted file mode 100644 index c6c03ac26a..0000000000 --- a/plugins/linguist/CHANGELOG.md +++ /dev/null @@ -1,844 +0,0 @@ -# @backstage/plugin-linguist - -## 0.1.19 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.11.3 - - @backstage/core-compat-api@0.2.4 - - @backstage/core-components@0.14.4 - - @backstage/core-plugin-api@1.9.2 - - @backstage/frontend-plugin-api@0.6.4 - - @backstage/catalog-model@1.4.5 - - @backstage/errors@1.2.4 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.19-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/frontend-plugin-api@0.6.4-next.1 - - @backstage/core-compat-api@0.2.4-next.1 - - @backstage/catalog-model@1.4.5 - - @backstage/core-components@0.14.4-next.0 - - @backstage/core-plugin-api@1.9.1 - - @backstage/errors@1.2.4 - - @backstage/plugin-catalog-react@1.11.3-next.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.19-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.14.4-next.0 - - @backstage/catalog-model@1.4.5 - - @backstage/core-compat-api@0.2.4-next.0 - - @backstage/core-plugin-api@1.9.1 - - @backstage/errors@1.2.4 - - @backstage/frontend-plugin-api@0.6.4-next.0 - - @backstage/plugin-catalog-react@1.11.3-next.0 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.18 - -### Patch Changes - -- e8f026a: Use ESM exports of react-use library -- Updated dependencies - - @backstage/core-components@0.14.3 - - @backstage/plugin-catalog-react@1.11.2 - - @backstage/frontend-plugin-api@0.6.3 - - @backstage/core-compat-api@0.2.3 - - @backstage/core-plugin-api@1.9.1 - - @backstage/catalog-model@1.4.5 - - @backstage/errors@1.2.4 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.17 - -### Patch Changes - -- e8f026a: Use ESM exports of react-use library -- Updated dependencies - - @backstage/core-components@0.14.2 - - @backstage/plugin-catalog-react@1.11.1 - - @backstage/frontend-plugin-api@0.6.2 - - @backstage/core-compat-api@0.2.2 - - @backstage/core-plugin-api@1.9.1 - - @backstage/catalog-model@1.4.5 - - @backstage/errors@1.2.4 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.16 - -### Patch Changes - -- 4fb9600: Get component's title from translation file. See: https://backstage.io/docs/plugins/internationalization#for-an-application-developer-overwrite-plugin-messages -- a0e3393: Updated to use `fetchApi` as per [ADR013](https://backstage.io/docs/architecture-decisions/adrs-adr013) -- 786c9c4: Updated dependency `luxon` to `^3.0.0`. -- 051fda1: Removed unused `dependencies` and `devDependencies` identified in Knip Report -- Updated dependencies - - @backstage/core-components@0.14.1 - - @backstage/errors@1.2.4 - - @backstage/plugin-catalog-react@1.11.0 - - @backstage/catalog-model@1.4.5 - - @backstage/core-compat-api@0.2.1 - - @backstage/core-plugin-api@1.9.1 - - @backstage/frontend-plugin-api@0.6.1 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.16-next.2 - -### Patch Changes - -- 051fda1: Removed unused `dependencies` and `devDependencies` identified in Knip Report -- Updated dependencies - - @backstage/core-components@0.14.1-next.2 - - @backstage/plugin-catalog-react@1.11.0-next.2 - - @backstage/frontend-plugin-api@0.6.1-next.2 - - @backstage/core-compat-api@0.2.1-next.2 - - @backstage/catalog-model@1.4.5-next.0 - - @backstage/core-plugin-api@1.9.1-next.1 - - @backstage/errors@1.2.4-next.0 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.16-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.14.1-next.1 - - @backstage/plugin-catalog-react@1.10.1-next.1 - - @backstage/core-plugin-api@1.9.1-next.1 - - @backstage/frontend-plugin-api@0.6.1-next.1 - - @backstage/catalog-model@1.4.5-next.0 - - @backstage/core-compat-api@0.2.1-next.1 - - @backstage/errors@1.2.4-next.0 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.16-next.0 - -### Patch Changes - -- 4fb9600: Get component's title from translation file. See: https://backstage.io/docs/plugins/internationalization#for-an-application-developer-overwrite-plugin-messages -- a0e3393: Updated to use `fetchApi` as per [ADR013](https://backstage.io/docs/architecture-decisions/adrs-adr013) -- 786c9c4: Updated dependency `luxon` to `^3.0.0`. -- Updated dependencies - - @backstage/errors@1.2.4-next.0 - - @backstage/core-components@0.14.1-next.0 - - @backstage/plugin-catalog-react@1.10.1-next.0 - - @backstage/catalog-model@1.4.5-next.0 - - @backstage/core-plugin-api@1.9.1-next.0 - - @backstage/frontend-plugin-api@0.6.1-next.0 - - @backstage/core-compat-api@0.2.1-next.0 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.15 - -### Patch Changes - -- 9aac2b0: Use `--cwd` as the first `yarn` argument -- 8fe56a8: Widen `@types/react` dependency range to include version 18. -- 995d280: Updated imports from named to default imports to help with the Material UI v4 to v5 migration -- Updated dependencies - - @backstage/frontend-plugin-api@0.6.0 - - @backstage/core-compat-api@0.2.0 - - @backstage/plugin-catalog-react@1.10.0 - - @backstage/core-components@0.14.0 - - @backstage/catalog-model@1.4.4 - - @backstage/core-plugin-api@1.9.0 - - @backstage/errors@1.2.3 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.15-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.14.0-next.2 - - @backstage/plugin-catalog-react@1.10.0-next.3 - - @backstage/catalog-model@1.4.4-next.0 - - @backstage/core-compat-api@0.2.0-next.3 - - @backstage/core-plugin-api@1.9.0-next.1 - - @backstage/errors@1.2.3 - - @backstage/frontend-plugin-api@0.6.0-next.3 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.15-next.2 - -### Patch Changes - -- 9aac2b0: Use `--cwd` as the first `yarn` argument -- 8fe56a8: Widen `@types/react` dependency range to include version 18. -- Updated dependencies - - @backstage/core-components@0.14.0-next.1 - - @backstage/core-plugin-api@1.9.0-next.1 - - @backstage/frontend-plugin-api@0.6.0-next.2 - - @backstage/plugin-catalog-react@1.10.0-next.2 - - @backstage/core-compat-api@0.2.0-next.2 - - @backstage/catalog-model@1.4.4-next.0 - - @backstage/errors@1.2.3 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.15-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/frontend-plugin-api@0.6.0-next.1 - - @backstage/core-compat-api@0.2.0-next.1 - - @backstage/core-components@0.14.0-next.0 - - @backstage/catalog-model@1.4.4-next.0 - - @backstage/core-plugin-api@1.8.3-next.0 - - @backstage/plugin-catalog-react@1.9.4-next.1 - - @backstage/errors@1.2.3 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.15-next.0 - -### Patch Changes - -- 995d280: Updated imports from named to default imports to help with the Material UI v4 to v5 migration -- Updated dependencies - - @backstage/core-compat-api@0.1.2-next.0 - - @backstage/plugin-catalog-react@1.9.4-next.0 - - @backstage/frontend-plugin-api@0.5.1-next.0 - - @backstage/core-components@0.13.10 - - @backstage/catalog-model@1.4.3 - - @backstage/core-plugin-api@1.8.2 - - @backstage/errors@1.2.3 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.14 - -### Patch Changes - -- 4016f21: Remove some unused dependencies -- 4f42918: Added alpha support for the New Frontend System (Declarative Integration) -- Updated dependencies - - @backstage/core-compat-api@0.1.1 - - @backstage/frontend-plugin-api@0.5.0 - - @backstage/core-components@0.13.10 - - @backstage/core-plugin-api@1.8.2 - - @backstage/plugin-catalog-react@1.9.3 - - @backstage/catalog-model@1.4.3 - - @backstage/errors@1.2.3 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.14-next.2 - -### Patch Changes - -- 4f42918: Added alpha support for the New Frontend System (Declarative Integration) -- Updated dependencies - - @backstage/core-compat-api@0.1.1-next.2 - - @backstage/frontend-plugin-api@0.4.1-next.2 - - @backstage/plugin-catalog-react@1.9.3-next.2 - -## 0.1.14-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/core-plugin-api@1.8.2-next.0 - - @backstage/core-components@0.13.10-next.1 - - @backstage/plugin-catalog-react@1.9.3-next.1 - - @backstage/catalog-model@1.4.3 - - @backstage/errors@1.2.3 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.14-next.0 - -### Patch Changes - -- 4016f21: Remove some unused dependencies -- Updated dependencies - - @backstage/core-components@0.13.10-next.0 - - @backstage/plugin-catalog-react@1.9.3-next.0 - - @backstage/catalog-model@1.4.3 - - @backstage/core-plugin-api@1.8.1 - - @backstage/errors@1.2.3 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.13 - -### Patch Changes - -- Updated dependencies - - @backstage/core-plugin-api@1.8.1 - - @backstage/plugin-catalog-react@1.9.2 - - @backstage/core-components@0.13.9 - - @backstage/theme@0.5.0 - - @backstage/catalog-model@1.4.3 - - @backstage/errors@1.2.3 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.13-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.13.9-next.3 - - @backstage/catalog-model@1.4.3 - - @backstage/core-plugin-api@1.8.1-next.1 - - @backstage/errors@1.2.3 - - @backstage/theme@0.5.0-next.1 - - @backstage/plugin-catalog-react@1.9.2-next.3 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.13-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/theme@0.5.0-next.1 - - @backstage/plugin-catalog-react@1.9.2-next.2 - - @backstage/catalog-model@1.4.3 - - @backstage/core-components@0.13.9-next.2 - - @backstage/core-plugin-api@1.8.1-next.1 - - @backstage/errors@1.2.3 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.13-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.13.9-next.1 - - @backstage/core-plugin-api@1.8.1-next.1 - - @backstage/plugin-catalog-react@1.9.2-next.1 - - @backstage/catalog-model@1.4.3 - - @backstage/errors@1.2.3 - - @backstage/theme@0.5.0-next.0 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.13-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/core-plugin-api@1.8.1-next.0 - - @backstage/plugin-catalog-react@1.9.2-next.0 - - @backstage/core-components@0.13.9-next.0 - - @backstage/theme@0.5.0-next.0 - - @backstage/catalog-model@1.4.3 - - @backstage/errors@1.2.3 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.11 - -### Patch Changes - -- 6c2b872153: Add official support for React 18. -- Updated dependencies - - @backstage/plugin-catalog-react@1.9.0 - - @backstage/core-components@0.13.8 - - @backstage/core-plugin-api@1.8.0 - - @backstage/theme@0.4.4 - - @backstage/catalog-model@1.4.3 - - @backstage/errors@1.2.3 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.11-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.13.8-next.2 - - @backstage/plugin-catalog-react@1.9.0-next.2 - -## 0.1.11-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.9.0-next.1 - - @backstage/core-components@0.13.8-next.1 - - @backstage/catalog-model@1.4.3 - - @backstage/core-plugin-api@1.8.0-next.0 - - @backstage/errors@1.2.3 - - @backstage/theme@0.4.4-next.0 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.11-next.0 - -### Patch Changes - -- 6c2b872153: Add official support for React 18. -- Updated dependencies - - @backstage/core-components@0.13.7-next.0 - - @backstage/plugin-catalog-react@1.9.0-next.0 - - @backstage/core-plugin-api@1.8.0-next.0 - - @backstage/theme@0.4.4-next.0 - - @backstage/catalog-model@1.4.3 - - @backstage/errors@1.2.3 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.10 - -### Patch Changes - -- 9a1fce352e: Updated dependency `@testing-library/jest-dom` to `^6.0.0`. -- f95af4e540: Updated dependency `@testing-library/dom` to `^9.0.0`. -- Updated dependencies - - @backstage/plugin-catalog-react@1.8.5 - - @backstage/core-plugin-api@1.7.0 - - @backstage/core-components@0.13.6 - - @backstage/catalog-model@1.4.3 - - @backstage/errors@1.2.3 - - @backstage/theme@0.4.3 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.10-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.13.6-next.2 - - @backstage/core-plugin-api@1.7.0-next.1 - - @backstage/catalog-model@1.4.3-next.0 - - @backstage/plugin-catalog-react@1.8.5-next.2 - - @backstage/errors@1.2.3-next.0 - - @backstage/theme@0.4.3-next.0 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.10-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.13.6-next.1 - - @backstage/plugin-catalog-react@1.8.5-next.1 - - @backstage/core-plugin-api@1.7.0-next.0 - - @backstage/catalog-model@1.4.2 - - @backstage/errors@1.2.2 - - @backstage/theme@0.4.2 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.10-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.8.5-next.0 - - @backstage/core-plugin-api@1.7.0-next.0 - - @backstage/core-components@0.13.6-next.0 - - @backstage/catalog-model@1.4.2 - - @backstage/errors@1.2.2 - - @backstage/theme@0.4.2 - - @backstage/plugin-linguist-common@0.1.2 - -## 0.1.9 - -### Patch Changes - -- 482bb5c0bbf8: Moved `@types/react` to be a regular dependency -- 406b786a2a2c: Mark package as being free of side effects, allowing more optimized Webpack builds. -- 8cec7664e146: Removed `@types/node` dependency -- Updated dependencies - - @backstage/plugin-catalog-react@1.8.4 - - @backstage/core-components@0.13.5 - - @backstage/catalog-model@1.4.2 - - @backstage/core-plugin-api@1.6.0 - - @backstage/errors@1.2.2 - - @backstage/plugin-linguist-common@0.1.2 - - @backstage/theme@0.4.2 - -## 0.1.9-next.3 - -### Patch Changes - -- 406b786a2a2c: Mark package as being free of side effects, allowing more optimized Webpack builds. -- Updated dependencies - - @backstage/catalog-model@1.4.2-next.2 - - @backstage/core-components@0.13.5-next.3 - - @backstage/core-plugin-api@1.6.0-next.3 - - @backstage/errors@1.2.2-next.0 - - @backstage/plugin-catalog-react@1.8.4-next.3 - - @backstage/plugin-linguist-common@0.1.2-next.0 - - @backstage/theme@0.4.2-next.0 - -## 0.1.9-next.2 - -### Patch Changes - -- 8cec7664e146: Removed `@types/node` dependency -- Updated dependencies - - @backstage/core-components@0.13.5-next.2 - - @backstage/core-plugin-api@1.6.0-next.2 - - @backstage/plugin-catalog-react@1.8.4-next.2 - - @backstage/catalog-model@1.4.2-next.1 - - @backstage/errors@1.2.1 - - @backstage/theme@0.4.1 - - @backstage/plugin-linguist-common@0.1.1 - -## 0.1.9-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.8.4-next.1 - - @backstage/core-components@0.13.5-next.1 - - @backstage/catalog-model@1.4.2-next.0 - - @backstage/core-plugin-api@1.6.0-next.1 - - @backstage/errors@1.2.1 - - @backstage/theme@0.4.1 - - @backstage/plugin-linguist-common@0.1.1 - -## 0.1.8-next.0 - -### Patch Changes - -- 482bb5c0bbf8: Moved `@types/react` to be a regular dependency -- Updated dependencies - - @backstage/core-plugin-api@1.6.0-next.0 - - @backstage/core-components@0.13.5-next.0 - - @backstage/catalog-model@1.4.1 - - @backstage/errors@1.2.1 - - @backstage/theme@0.4.1 - - @backstage/plugin-catalog-react@1.8.3-next.0 - - @backstage/plugin-linguist-common@0.1.1 - -## 0.1.6 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-linguist-common@0.1.1 - - @backstage/core-components@0.13.4 - - @backstage/plugin-catalog-react@1.8.1 - - @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.6-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-linguist-common@0.1.1-next.1 - - @backstage/plugin-catalog-react@1.8.1-next.1 - -## 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 - -- Updated dependencies - - @backstage/theme@0.4.0-next.1 - - @backstage/plugin-catalog-react@1.7.0-next.2 - - @backstage/core-components@0.13.2-next.2 - - @backstage/core-plugin-api@1.5.2-next.0 - -## 0.1.4-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/errors@1.2.0-next.0 - - @backstage/core-components@0.13.2-next.1 - - @backstage/plugin-catalog-react@1.7.0-next.1 - - @backstage/catalog-model@1.4.0-next.0 - - @backstage/core-plugin-api@1.5.2-next.0 - - @backstage/theme@0.4.0-next.0 - - @backstage/plugin-linguist-common@0.1.0 - -## 0.1.4-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.7.0-next.0 - - @backstage/theme@0.4.0-next.0 - - @backstage/core-components@0.13.2-next.0 - - @backstage/core-plugin-api@1.5.1 - - @backstage/catalog-model@1.3.0 - - @backstage/errors@1.1.5 - - @backstage/plugin-linguist-common@0.1.0 - -## 0.1.3 - -### Patch Changes - -- Updated dependencies - - @backstage/theme@0.3.0 - - @backstage/plugin-catalog-react@1.6.0 - - @backstage/core-components@0.13.1 - - @backstage/catalog-model@1.3.0 - - @backstage/core-plugin-api@1.5.1 - - @backstage/errors@1.1.5 - - @backstage/plugin-linguist-common@0.1.0 - -## 0.1.3-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/theme@0.3.0-next.0 - - @backstage/core-components@0.13.1-next.1 - - @backstage/plugin-catalog-react@1.6.0-next.2 - - @backstage/core-plugin-api@1.5.1 - -## 0.1.3-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.13.1-next.0 - - @backstage/core-plugin-api@1.5.1 - - @backstage/plugin-catalog-react@1.6.0-next.1 - -## 0.1.3-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.6.0-next.0 - - @backstage/core-components@0.13.0 - - @backstage/core-plugin-api@1.5.1 - - @backstage/catalog-model@1.3.0 - - @backstage/errors@1.1.5 - - @backstage/theme@0.2.19 - - @backstage/plugin-linguist-common@0.1.0 - -## 0.1.2 - -### Patch Changes - -- 29ba8267d69: Updated dependency `@material-ui/lab` to `4.0.0-alpha.61`. -- e0c6e8b9c3c: Update peer dependencies -- Updated dependencies - - @backstage/core-components@0.13.0 - - @backstage/plugin-catalog-react@1.5.0 - - @backstage/theme@0.2.19 - - @backstage/core-plugin-api@1.5.1 - - @backstage/catalog-model@1.3.0 - - @backstage/errors@1.1.5 - - @backstage/plugin-linguist-common@0.1.0 - -## 0.1.2-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.5.0-next.3 - - @backstage/catalog-model@1.3.0-next.0 - - @backstage/core-components@0.13.0-next.3 - - @backstage/core-plugin-api@1.5.1-next.1 - - @backstage/errors@1.1.5 - - @backstage/theme@0.2.19-next.0 - - @backstage/plugin-linguist-common@0.1.0 - -## 0.1.2-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.12.6-next.2 - - @backstage/plugin-catalog-react@1.4.1-next.2 - - @backstage/core-plugin-api@1.5.1-next.1 - - @backstage/catalog-model@1.2.1 - - @backstage/errors@1.1.5 - - @backstage/theme@0.2.19-next.0 - - @backstage/plugin-linguist-common@0.1.0 - -## 0.1.2-next.1 - -### Patch Changes - -- 29ba8267d69: Updated dependency `@material-ui/lab` to `4.0.0-alpha.61`. -- e0c6e8b9c3c: Update peer dependencies -- Updated dependencies - - @backstage/core-components@0.12.6-next.1 - - @backstage/core-plugin-api@1.5.1-next.0 - - @backstage/plugin-catalog-react@1.4.1-next.1 - - @backstage/theme@0.2.19-next.0 - - @backstage/catalog-model@1.2.1 - - @backstage/errors@1.1.5 - - @backstage/plugin-linguist-common@0.1.0 - -## 0.1.2-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.12.6-next.0 - - @backstage/plugin-catalog-react@1.4.1-next.0 - - @backstage/core-plugin-api@1.5.0 - - @backstage/catalog-model@1.2.1 - - @backstage/errors@1.1.5 - - @backstage/theme@0.2.18 - - @backstage/plugin-linguist-common@0.1.0 - -## 0.1.1 - -### Patch Changes - -- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. -- ab997ce243f: Updated `README.md` to removed images with refresh button as this feature was not implemented in the current version -- Updated dependencies - - @backstage/core-components@0.12.5 - - @backstage/plugin-catalog-react@1.4.0 - - @backstage/errors@1.1.5 - - @backstage/core-plugin-api@1.5.0 - - @backstage/catalog-model@1.2.1 - - @backstage/theme@0.2.18 - - @backstage/plugin-linguist-common@0.1.0 - -## 0.1.1-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.12.5-next.2 - - @backstage/plugin-catalog-react@1.4.0-next.2 - - @backstage/core-plugin-api@1.5.0-next.2 - -## 0.1.1-next.1 - -### Patch Changes - -- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. -- ab997ce243f: Updated `README.md` to removed images with refresh button as this feature was not implemented in the current version -- Updated dependencies - - @backstage/core-components@0.12.5-next.1 - - @backstage/errors@1.1.5-next.0 - - @backstage/core-plugin-api@1.4.1-next.1 - - @backstage/theme@0.2.18-next.0 - - @backstage/plugin-catalog-react@1.4.0-next.1 - - @backstage/catalog-model@1.2.1-next.1 - - @backstage/plugin-linguist-common@0.1.0 - -## 0.1.1-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.4.0-next.0 - - @backstage/core-plugin-api@1.4.1-next.0 - - @backstage/catalog-model@1.2.1-next.0 - - @backstage/core-components@0.12.5-next.0 - - @backstage/errors@1.1.4 - - @backstage/theme@0.2.17 - - @backstage/plugin-linguist-common@0.1.0 - -## 0.1.0 - -### Minor Changes - -- 75cfee5688: Introduced the Linguist plugin, checkout the plugin's `README.md` for more details! - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.12.4 - - @backstage/catalog-model@1.2.0 - - @backstage/theme@0.2.17 - - @backstage/core-plugin-api@1.4.0 - - @backstage/plugin-catalog-react@1.3.0 - - @backstage/plugin-linguist-common@0.1.0 - - @backstage/errors@1.1.4 diff --git a/plugins/linguist/README.md b/plugins/linguist/README.md deleted file mode 100644 index 86ef14e988..0000000000 --- a/plugins/linguist/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Deprecated - -This package has been moved to the [backstage-community/plugins](https://github.com/backstage/community-plugins) repository. Migrate to using `@backstage-community/plugin-linguist` instead. diff --git a/plugins/linguist/api-report-alpha.md b/plugins/linguist/api-report-alpha.md deleted file mode 100644 index 07d2244e30..0000000000 --- a/plugins/linguist/api-report-alpha.md +++ /dev/null @@ -1,23 +0,0 @@ -## API Report File for "@backstage/plugin-linguist" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts -import { BackstagePlugin } from '@backstage/frontend-plugin-api'; -import { TranslationRef } from '@backstage/core-plugin-api/alpha'; - -// @alpha (undocumented) -const _default: BackstagePlugin<{}, {}>; -export default _default; - -// @alpha (undocumented) -export const linguistTranslationRef: TranslationRef< - 'linguist', - { - readonly 'entityCard.title': 'Languages'; - readonly 'entityCard.noData': 'There is currently no language data for this entity.'; - } ->; - -// (No @packageDocumentation comment for this package) -``` diff --git a/plugins/linguist/api-report.md b/plugins/linguist/api-report.md deleted file mode 100644 index 71e2460088..0000000000 --- a/plugins/linguist/api-report.md +++ /dev/null @@ -1,22 +0,0 @@ -## API Report File for "@backstage/plugin-linguist" - -> 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 { JSX as JSX_2 } from 'react'; - -// @public (undocumented) -export const EntityLinguistCard: () => JSX_2.Element; - -// @public (undocumented) -export const isLinguistAvailable: (entity: Entity) => boolean; - -// @public (undocumented) -export const linguistPlugin: BackstagePlugin<{}, {}>; - -// (No @packageDocumentation comment for this package) -``` diff --git a/plugins/linguist/catalog-info.yaml b/plugins/linguist/catalog-info.yaml deleted file mode 100644 index aca70b7570..0000000000 --- a/plugins/linguist/catalog-info.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: backstage.io/v1alpha1 -kind: Component -metadata: - name: backstage-plugin-linguist - title: '@backstage/plugin-linguist' -spec: - lifecycle: experimental - type: backstage-frontend-plugin - owner: awanlin diff --git a/plugins/linguist/dev/index.tsx b/plugins/linguist/dev/index.tsx deleted file mode 100644 index bb6fb64b52..0000000000 --- a/plugins/linguist/dev/index.tsx +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import React from 'react'; -import { createDevApp } from '@backstage/dev-utils'; -import { linguistPlugin, EntityLinguistCard } from '../src/plugin'; - -createDevApp() - .registerPlugin(linguistPlugin) - .addPage({ - element: , - title: 'Root Page', - path: '/linguist', - }) - .render(); diff --git a/plugins/linguist/docs/linguist-no-data.png b/plugins/linguist/docs/linguist-no-data.png deleted file mode 100644 index 07661fe02d..0000000000 Binary files a/plugins/linguist/docs/linguist-no-data.png and /dev/null differ diff --git a/plugins/linguist/docs/linguist-with-data.png b/plugins/linguist/docs/linguist-with-data.png deleted file mode 100644 index a3b4e4fde7..0000000000 Binary files a/plugins/linguist/docs/linguist-with-data.png and /dev/null differ diff --git a/plugins/linguist/knip-report.md b/plugins/linguist/knip-report.md deleted file mode 100644 index 2661c35327..0000000000 --- a/plugins/linguist/knip-report.md +++ /dev/null @@ -1,2 +0,0 @@ -# Knip report - diff --git a/plugins/linguist/package.json b/plugins/linguist/package.json deleted file mode 100644 index 50bd185aff..0000000000 --- a/plugins/linguist/package.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "name": "@backstage/plugin-linguist", - "version": "0.1.19", - "backstage": { - "role": "frontend-plugin", - "moved": "@backstage-community/plugin-linguist" - }, - "publishConfig": { - "access": "public" - }, - "homepage": "https://backstage.io", - "repository": { - "type": "git", - "url": "https://github.com/backstage/backstage", - "directory": "plugins/linguist" - }, - "license": "Apache-2.0", - "sideEffects": false, - "exports": { - ".": "./src/index.ts", - "./alpha": "./src/alpha.ts", - "./package.json": "./package.json" - }, - "main": "src/index.ts", - "types": "src/index.ts", - "typesVersions": { - "*": { - "alpha": [ - "src/alpha.ts" - ], - "package.json": [ - "package.json" - ] - } - }, - "files": [ - "dist" - ], - "scripts": { - "build": "backstage-cli package build", - "clean": "backstage-cli package clean", - "lint": "backstage-cli package lint", - "prepack": "backstage-cli package prepack", - "postpack": "backstage-cli package postpack", - "start": "backstage-cli package start", - "test": "backstage-cli package test" - }, - "dependencies": { - "@backstage/catalog-model": "workspace:^", - "@backstage/core-compat-api": "workspace:^", - "@backstage/core-components": "workspace:^", - "@backstage/core-plugin-api": "workspace:^", - "@backstage/errors": "workspace:^", - "@backstage/frontend-plugin-api": "workspace:^", - "@backstage/plugin-catalog-react": "workspace:^", - "@backstage/plugin-linguist-common": "workspace:^", - "@material-ui/core": "^4.9.13", - "@material-ui/lab": "4.0.0-alpha.61", - "@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0", - "luxon": "^3.0.0", - "react-use": "^17.2.4", - "slugify": "^1.6.4" - }, - "devDependencies": { - "@backstage/cli": "workspace:^", - "@backstage/dev-utils": "workspace:^", - "@testing-library/jest-dom": "^6.0.0" - }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0", - "react-router-dom": "6.0.0-beta.0 || ^6.3.0" - }, - "deprecated": "This package has been moved to the backstage/community-plugins repository. You should migrate to using @backstage-community/plugin-linguist instead." -} diff --git a/plugins/linguist/src/alpha.ts b/plugins/linguist/src/alpha.ts deleted file mode 100644 index 287775ade0..0000000000 --- a/plugins/linguist/src/alpha.ts +++ /dev/null @@ -1,19 +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. - */ - -export * from './alpha/index'; -export { default } from './alpha/index'; -export * from './translation'; diff --git a/plugins/linguist/src/alpha/index.ts b/plugins/linguist/src/alpha/index.ts deleted file mode 100644 index 2f137f09ee..0000000000 --- a/plugins/linguist/src/alpha/index.ts +++ /dev/null @@ -1,17 +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. - */ - -export { default } from './plugin'; diff --git a/plugins/linguist/src/alpha/plugin.tsx b/plugins/linguist/src/alpha/plugin.tsx deleted file mode 100644 index 2c47346538..0000000000 --- a/plugins/linguist/src/alpha/plugin.tsx +++ /dev/null @@ -1,56 +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 React from 'react'; -import { - createApiExtension, - createApiFactory, - createPlugin, - discoveryApiRef, - fetchApiRef, -} from '@backstage/frontend-plugin-api'; - -import { LinguistClient, linguistApiRef } from '../api'; -import { compatWrapper } from '@backstage/core-compat-api'; -import { createEntityCardExtension } from '@backstage/plugin-catalog-react/alpha'; - -/** @alpha */ -export const entityLinguistCard = createEntityCardExtension({ - name: 'languages', - loader: async () => - import('../components/LinguistCard').then(m => - compatWrapper(), - ), -}); - -/** @alpha */ -export const linguistApi = createApiExtension({ - factory: createApiFactory({ - api: linguistApiRef, - deps: { - discoveryApi: discoveryApiRef, - fetchApi: fetchApiRef, - }, - factory: ({ discoveryApi, fetchApi }) => - new LinguistClient({ discoveryApi, fetchApi }), - }), -}); - -/** @alpha */ -export default createPlugin({ - id: 'linguist', - extensions: [linguistApi, entityLinguistCard], -}); diff --git a/plugins/linguist/src/api/LinguistApi.ts b/plugins/linguist/src/api/LinguistApi.ts deleted file mode 100644 index 6593453f31..0000000000 --- a/plugins/linguist/src/api/LinguistApi.ts +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { createApiRef } from '@backstage/core-plugin-api'; -import { Languages } from '@backstage/plugin-linguist-common'; - -export const linguistApiRef = createApiRef({ - id: 'plugin.linguist.service', -}); - -export interface LinguistApi { - getLanguages(entityRef: string): Promise; -} diff --git a/plugins/linguist/src/api/LinguistClient.ts b/plugins/linguist/src/api/LinguistClient.ts deleted file mode 100644 index 5e687a039b..0000000000 --- a/plugins/linguist/src/api/LinguistClient.ts +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { DiscoveryApi, FetchApi } from '@backstage/core-plugin-api'; -import { ResponseError } from '@backstage/errors'; -import { Languages } from '@backstage/plugin-linguist-common'; -import { LinguistApi } from './LinguistApi'; - -export class LinguistClient implements LinguistApi { - private readonly discoveryApi: DiscoveryApi; - private readonly fetchApi: FetchApi; - - public constructor(options: { - discoveryApi: DiscoveryApi; - fetchApi: FetchApi; - }) { - this.discoveryApi = options.discoveryApi; - this.fetchApi = options.fetchApi; - } - - public async getLanguages(entityRef: string): Promise { - const queryString = new URLSearchParams(); - queryString.append('entityRef', entityRef); - - const urlSegment = `entity-languages?${queryString}`; - - const items = await this.get(urlSegment); - return items; - } - - private async get(path: string): Promise { - const baseUrl = `${await this.discoveryApi.getBaseUrl('linguist')}/`; - const url = new URL(path, baseUrl); - - const response = await this.fetchApi.fetch(url.toString()); - - if (!response.ok) { - throw await ResponseError.fromResponse(response); - } - - return response.json() as Promise; - } -} diff --git a/plugins/linguist/src/api/index.ts b/plugins/linguist/src/api/index.ts deleted file mode 100644 index ca60b60d53..0000000000 --- a/plugins/linguist/src/api/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export * from './LinguistApi'; -export * from './LinguistClient'; diff --git a/plugins/linguist/src/components/LinguistCard/LinguistCard.tsx b/plugins/linguist/src/components/LinguistCard/LinguistCard.tsx deleted file mode 100644 index 213ca316ca..0000000000 --- a/plugins/linguist/src/components/LinguistCard/LinguistCard.tsx +++ /dev/null @@ -1,151 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import Box from '@material-ui/core/Box'; -import Chip from '@material-ui/core/Chip'; -import Tooltip from '@material-ui/core/Tooltip'; -import Typography from '@material-ui/core/Typography'; -import Grid from '@material-ui/core/Grid'; -import { makeStyles, useTheme } from '@material-ui/core/styles'; -import { InfoCard, Progress } from '@backstage/core-components'; -import Alert from '@material-ui/lab/Alert'; -import { DateTime } from 'luxon'; -import React from 'react'; -import slugify from 'slugify'; -import { useEntity } from '@backstage/plugin-catalog-react'; -import { useLanguages } from '../../hooks'; -import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; -import { linguistTranslationRef } from '../../translation'; - -const useStyles = makeStyles(theme => ({ - infoCard: { - marginBottom: theme.spacing(3), - }, - barContainer: { - height: theme.spacing(2), - marginBottom: theme.spacing(3), - borderRadius: '4px', - backgroundColor: 'transparent', - overflow: 'hidden', - }, - bar: { - height: '100%', - position: 'relative', - }, - languageDot: { - width: '10px', - height: '10px', - borderRadius: '50%', - marginRight: theme.spacing(1), - display: 'inline-block', - }, - label: { - color: 'inherit', - }, -})); - -export const LinguistCard = () => { - const { t } = useTranslationRef(linguistTranslationRef); - const classes = useStyles(); - const theme = useTheme(); - const { entity } = useEntity(); - const { items, loading, error } = useLanguages(entity); - let barWidth = 0; - - if (loading) { - return ; - } else if (error) { - return {error.message}; - } - - if (items && items.languageCount === 0 && items.totalBytes === 0) { - return ( - - - - {t('entityCard.noData')} - - - - ); - } - - const breakdown = items?.breakdown.sort((a, b) => - a.percentage < b.percentage ? 1 : -1, - ); - const processedDate = items?.processedDate; - - return breakdown && processedDate ? ( - - - {breakdown.map((language, index: number) => { - barWidth = barWidth + language.percentage; - return ( - - - - ); - })} - - - - {breakdown.map(languages => ( - - - {languages.name} - {languages.percentage}% - - } - variant="outlined" - key={slugify(languages.name, { lower: true })} - /> - ))} - - - - ) : ( - <> - ); -}; diff --git a/plugins/linguist/src/components/LinguistCard/index.ts b/plugins/linguist/src/components/LinguistCard/index.ts deleted file mode 100644 index aefae143fd..0000000000 --- a/plugins/linguist/src/components/LinguistCard/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export { LinguistCard } from './LinguistCard'; diff --git a/plugins/linguist/src/hooks/index.ts b/plugins/linguist/src/hooks/index.ts deleted file mode 100644 index 6f8913cf35..0000000000 --- a/plugins/linguist/src/hooks/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export * from './useLanguages'; diff --git a/plugins/linguist/src/hooks/useLanguages.ts b/plugins/linguist/src/hooks/useLanguages.ts deleted file mode 100644 index f233d183bb..0000000000 --- a/plugins/linguist/src/hooks/useLanguages.ts +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Entity, stringifyEntityRef } from '@backstage/catalog-model'; -import { linguistApiRef } from '../api'; -import { useApi } from '@backstage/core-plugin-api'; -import useAsync from 'react-use/esm/useAsync'; - -import { Languages } from '@backstage/plugin-linguist-common'; - -export function useLanguages(entity: Entity): { - items?: Languages; - loading: boolean; - error?: Error; -} { - const entityRef = stringifyEntityRef(entity); - - const api = useApi(linguistApiRef); - const { value, loading, error } = useAsync(() => { - return api.getLanguages(entityRef); - }, [api, entityRef]); - - return { - items: value, - loading, - error, - }; -} diff --git a/plugins/linguist/src/index.ts b/plugins/linguist/src/index.ts deleted file mode 100644 index ce9cd98cbd..0000000000 --- a/plugins/linguist/src/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -export { - linguistPlugin, - isLinguistAvailable, - EntityLinguistCard, -} from './plugin'; diff --git a/plugins/linguist/src/plugin.test.ts b/plugins/linguist/src/plugin.test.ts deleted file mode 100644 index d2a1016a22..0000000000 --- a/plugins/linguist/src/plugin.test.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { linguistPlugin } from './plugin'; - -describe('linguist', () => { - it('should export plugin', () => { - expect(linguistPlugin).toBeDefined(); - }); -}); diff --git a/plugins/linguist/src/plugin.ts b/plugins/linguist/src/plugin.ts deleted file mode 100644 index 11f74a381c..0000000000 --- a/plugins/linguist/src/plugin.ts +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - createApiFactory, - createComponentExtension, - createPlugin, - discoveryApiRef, - fetchApiRef, -} from '@backstage/core-plugin-api'; -import { linguistApiRef, LinguistClient } from './api'; -import { LINGUIST_ANNOTATION } from '@backstage/plugin-linguist-common'; -import { Entity } from '@backstage/catalog-model'; - -/** @public */ -export const isLinguistAvailable = (entity: Entity) => - Boolean(entity.metadata.annotations?.[LINGUIST_ANNOTATION]); - -/** @public */ -export const linguistPlugin = createPlugin({ - id: 'linguist', - apis: [ - createApiFactory({ - api: linguistApiRef, - deps: { - discoveryApi: discoveryApiRef, - fetchApi: fetchApiRef, - }, - factory: ({ discoveryApi, fetchApi }) => - new LinguistClient({ discoveryApi, fetchApi }), - }), - ], -}); - -/** @public */ -export const EntityLinguistCard = linguistPlugin.provide( - createComponentExtension({ - name: 'EntityLinguistCard', - component: { - lazy: () => import('./components/LinguistCard').then(m => m.LinguistCard), - }, - }), -); diff --git a/plugins/linguist/src/setupTests.ts b/plugins/linguist/src/setupTests.ts deleted file mode 100644 index 7a459ed24e..0000000000 --- a/plugins/linguist/src/setupTests.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2022 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import '@testing-library/jest-dom'; diff --git a/plugins/linguist/src/translation.ts b/plugins/linguist/src/translation.ts deleted file mode 100644 index 7055d3dfe8..0000000000 --- a/plugins/linguist/src/translation.ts +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright 2024 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 { createTranslationRef } from '@backstage/core-plugin-api/alpha'; - -/** @alpha */ -export const linguistTranslationRef = createTranslationRef({ - id: 'linguist', - messages: { - entityCard: { - title: 'Languages', - noData: 'There is currently no language data for this entity.', - }, - }, -}); diff --git a/plugins/nomad-backend/.eslintrc.js b/plugins/nomad-backend/.eslintrc.js deleted file mode 100644 index e2a53a6ad2..0000000000 --- a/plugins/nomad-backend/.eslintrc.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/nomad-backend/CHANGELOG.md b/plugins/nomad-backend/CHANGELOG.md deleted file mode 100644 index 2581a26504..0000000000 --- a/plugins/nomad-backend/CHANGELOG.md +++ /dev/null @@ -1,425 +0,0 @@ -# @backstage/plugin-nomad-backend - -## 0.1.19 - -### Patch Changes - -- d5a1fe1: Replaced winston logger with `LoggerService` -- Updated dependencies - - @backstage/backend-common@0.21.7 - - @backstage/backend-plugin-api@0.6.17 - - @backstage/config@1.2.0 - - @backstage/errors@1.2.4 - -## 0.1.19-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.21.7-next.1 - - @backstage/backend-plugin-api@0.6.17-next.1 - - @backstage/config@1.2.0 - - @backstage/errors@1.2.4 - -## 0.1.19-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.21.7-next.0 - - @backstage/backend-plugin-api@0.6.17-next.0 - - @backstage/config@1.2.0 - - @backstage/errors@1.2.4 - -## 0.1.18 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.21.6 - - @backstage/backend-plugin-api@0.6.16 - - @backstage/config@1.2.0 - - @backstage/errors@1.2.4 - -## 0.1.17 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.21.5 - - @backstage/backend-plugin-api@0.6.15 - - @backstage/config@1.2.0 - - @backstage/errors@1.2.4 - -## 0.1.16 - -### Patch Changes - -- 4467036: Allow unauthenticated access to health check endpoint. -- Updated dependencies - - @backstage/backend-common@0.21.4 - - @backstage/config@1.2.0 - - @backstage/errors@1.2.4 - - @backstage/backend-plugin-api@0.6.14 - -## 0.1.16-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.21.4-next.2 - - @backstage/backend-plugin-api@0.6.14-next.2 - - @backstage/config@1.2.0-next.1 - - @backstage/errors@1.2.4-next.0 - -## 0.1.16-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/config@1.2.0-next.1 - - @backstage/backend-common@0.21.4-next.1 - - @backstage/backend-plugin-api@0.6.14-next.1 - - @backstage/errors@1.2.4-next.0 - -## 0.1.15-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.21.3-next.0 - - @backstage/errors@1.2.4-next.0 - - @backstage/backend-plugin-api@0.6.13-next.0 - - @backstage/config@1.1.2-next.0 - -## 0.1.12 - -### Patch Changes - -- 9aac2b0: Use `--cwd` as the first `yarn` argument -- Updated dependencies - - @backstage/backend-common@0.21.0 - - @backstage/backend-plugin-api@0.6.10 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - -## 0.1.12-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.21.0-next.3 - - @backstage/backend-plugin-api@0.6.10-next.3 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - -## 0.1.12-next.2 - -### Patch Changes - -- 9aac2b0: Use `--cwd` as the first `yarn` argument -- Updated dependencies - - @backstage/backend-common@0.21.0-next.2 - - @backstage/backend-plugin-api@0.6.10-next.2 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - -## 0.1.12-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-plugin-api@0.6.10-next.1 - - @backstage/backend-common@0.21.0-next.1 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - -## 0.1.12-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.21.0-next.0 - - @backstage/backend-plugin-api@0.6.10-next.0 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - -## 0.1.11 - -### Patch Changes - -- 4016f21: Remove some unused dependencies -- Updated dependencies - - @backstage/backend-common@0.20.1 - - @backstage/backend-plugin-api@0.6.9 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - -## 0.1.11-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-plugin-api@0.6.9-next.2 - - @backstage/backend-common@0.20.1-next.2 - -## 0.1.11-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.20.1-next.1 - - @backstage/config@1.1.1 - - @backstage/backend-plugin-api@0.6.9-next.1 - - @backstage/errors@1.2.3 - -## 0.1.11-next.0 - -### Patch Changes - -- 4016f21: Remove some unused dependencies -- Updated dependencies - - @backstage/backend-common@0.20.1-next.0 - - @backstage/backend-plugin-api@0.6.9-next.0 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - -## 0.1.10 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.20.0 - - @backstage/backend-plugin-api@0.6.8 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - -## 0.1.10-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.20.0-next.3 - - @backstage/backend-plugin-api@0.6.8-next.3 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - -## 0.1.10-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.20.0-next.2 - - @backstage/backend-plugin-api@0.6.8-next.2 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - -## 0.1.10-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.20.0-next.1 - - @backstage/backend-plugin-api@0.6.8-next.1 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - -## 0.1.10-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.20.0-next.0 - - @backstage/backend-plugin-api@0.6.8-next.0 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - -## 0.1.9 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.9 - - @backstage/backend-plugin-api@0.6.7 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - -## 0.1.9-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-plugin-api@0.6.7-next.2 - - @backstage/backend-common@0.19.9-next.2 - -## 0.1.9-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.9-next.1 - - @backstage/backend-plugin-api@0.6.7-next.1 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - -## 0.1.9-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.9-next.0 - - @backstage/backend-plugin-api@0.6.7-next.0 - - @backstage/config@1.1.1 - - @backstage/errors@1.2.3 - -## 0.1.8 - -### Patch Changes - -- 6822918c50: Added support for the [new backend system](https://backstage.io/docs/backend-system/) -- Updated dependencies - - @backstage/backend-common@0.19.8 - - @backstage/errors@1.2.3 - - @backstage/backend-plugin-api@0.6.6 - - @backstage/config@1.1.1 - -## 0.1.8-next.2 - -### Patch Changes - -- 6822918c50: Added support for the [new backend system](https://backstage.io/docs/backend-system/) -- Updated dependencies - - @backstage/backend-common@0.19.8-next.2 - - @backstage/errors@1.2.3-next.0 - - @backstage/backend-plugin-api@0.6.6-next.2 - - @backstage/config@1.1.1-next.0 - -## 0.1.7-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.7-next.1 - - @backstage/config@1.1.0 - - @backstage/errors@1.2.2 - -## 0.1.7-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.7-next.0 - - @backstage/config@1.1.0 - - @backstage/errors@1.2.2 - -## 0.1.5 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.5 - - @backstage/config@1.1.0 - - @backstage/errors@1.2.2 - -## 0.1.5-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/config@1.1.0-next.2 - - @backstage/errors@1.2.2-next.0 - - @backstage/backend-common@0.19.5-next.3 - -## 0.1.5-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/config@1.1.0-next.1 - - @backstage/backend-common@0.19.5-next.2 - - @backstage/errors@1.2.1 - -## 0.1.5-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/config@1.1.0-next.0 - - @backstage/backend-common@0.19.5-next.1 - - @backstage/errors@1.2.1 - -## 0.1.4-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.4-next.0 - - @backstage/config@1.0.8 - - @backstage/errors@1.2.1 - -## 0.1.2 - -### Patch Changes - -- 12a8c94eda8d: Add package repository and homepage metadata -- Updated dependencies - - @backstage/backend-common@0.19.2 - - @backstage/config@1.0.8 - - @backstage/errors@1.2.1 - -## 0.1.2-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.2-next.2 - -## 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 deleted file mode 100644 index b51608591a..0000000000 --- a/plugins/nomad-backend/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Deprecated - -This package has been moved to the [backstage-community/plugins](https://github.com/backstage/community-plugins) repository. Migrate to using `@backstage-community/plugin-nomad-backend` instead. diff --git a/plugins/nomad-backend/api-report.md b/plugins/nomad-backend/api-report.md deleted file mode 100644 index 7476fde961..0000000000 --- a/plugins/nomad-backend/api-report.md +++ /dev/null @@ -1,27 +0,0 @@ -## 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 { BackendFeature } from '@backstage/backend-plugin-api'; -import { Config } from '@backstage/config'; -import express from 'express'; -import { LoggerService } from '@backstage/backend-plugin-api'; - -// @public (undocumented) -export function createRouter(options: RouterOptions): Promise; - -// @public -const nomadPlugin: () => BackendFeature; -export default nomadPlugin; - -// @public (undocumented) -export interface RouterOptions { - // (undocumented) - config: Config; - // (undocumented) - logger: LoggerService; -} - -// (No @packageDocumentation comment for this package) -``` diff --git a/plugins/nomad-backend/catalog-info.yaml b/plugins/nomad-backend/catalog-info.yaml deleted file mode 100644 index 7364d1920e..0000000000 --- a/plugins/nomad-backend/catalog-info.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: backstage.io/v1alpha1 -kind: Component -metadata: - name: backstage-plugin-nomad-backend - title: '@backstage/plugin-nomad-backend' -spec: - lifecycle: experimental - type: backstage-backend-plugin - owner: maintainers diff --git a/plugins/nomad-backend/knip-report.md b/plugins/nomad-backend/knip-report.md deleted file mode 100644 index 2661c35327..0000000000 --- a/plugins/nomad-backend/knip-report.md +++ /dev/null @@ -1,2 +0,0 @@ -# Knip report - diff --git a/plugins/nomad-backend/package.json b/plugins/nomad-backend/package.json deleted file mode 100644 index 833fd51909..0000000000 --- a/plugins/nomad-backend/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "@backstage/plugin-nomad-backend", - "version": "0.1.19", - "backstage": { - "role": "backend-plugin", - "moved": "@backstage-community/plugin-nomad-backend" - }, - "publishConfig": { - "access": "public", - "main": "dist/index.cjs.js", - "types": "dist/index.d.ts" - }, - "homepage": "https://backstage.io", - "repository": { - "type": "git", - "url": "https://github.com/backstage/backstage", - "directory": "plugins/nomad-backend" - }, - "license": "Apache-2.0", - "main": "src/index.ts", - "types": "src/index.ts", - "files": [ - "dist" - ], - "scripts": { - "build": "backstage-cli package build", - "clean": "backstage-cli package clean", - "lint": "backstage-cli package lint", - "prepack": "backstage-cli package prepack", - "postpack": "backstage-cli package postpack", - "start": "backstage-cli package start", - "test": "backstage-cli package test" - }, - "dependencies": { - "@backstage/backend-common": "workspace:^", - "@backstage/backend-plugin-api": "workspace:^", - "@backstage/config": "workspace:^", - "@backstage/errors": "workspace:^", - "@types/express": "*", - "express": "^4.17.1", - "express-promise-router": "^4.1.0", - "node-fetch": "^2.6.7", - "yn": "^4.0.0" - }, - "devDependencies": { - "@backstage/cli": "workspace:^", - "@types/supertest": "^2.0.8", - "supertest": "^6.2.4" - }, - "deprecated": "This package has been moved to the backstage/community-plugins repository. You should migrate to using @backstage-community/plugin-nomad-backend instead." -} diff --git a/plugins/nomad-backend/src/index.ts b/plugins/nomad-backend/src/index.ts deleted file mode 100644 index 21aa299d6d..0000000000 --- a/plugins/nomad-backend/src/index.ts +++ /dev/null @@ -1,17 +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. - */ -export * from './service/router'; -export { nomadPlugin as default } from './plugin'; diff --git a/plugins/nomad-backend/src/plugin.test.ts b/plugins/nomad-backend/src/plugin.test.ts deleted file mode 100644 index 6ed8d2b194..0000000000 --- a/plugins/nomad-backend/src/plugin.test.ts +++ /dev/null @@ -1,22 +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 { nomadPlugin } from './plugin'; - -describe('nomad', () => { - it('should export the nomad plugin', () => { - expect(nomadPlugin).toBeDefined(); - }); -}); diff --git a/plugins/nomad-backend/src/plugin.ts b/plugins/nomad-backend/src/plugin.ts deleted file mode 100644 index 551f42cdc7..0000000000 --- a/plugins/nomad-backend/src/plugin.ts +++ /dev/null @@ -1,54 +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 { - coreServices, - createBackendPlugin, -} from '@backstage/backend-plugin-api'; -import { createRouter } from './service/router'; - -/** - * Nomad backend plugin - * - * @public - */ -export const nomadPlugin = createBackendPlugin({ - pluginId: 'nomad', - register(env) { - env.registerInit({ - deps: { - logger: coreServices.logger, - config: coreServices.rootConfig, - httpRouter: coreServices.httpRouter, - }, - async init({ logger, config, httpRouter }) { - httpRouter.use( - await createRouter({ - /** - * Logger for logging purposes - */ - logger, - config, - }), - ); - httpRouter.addAuthPolicy({ - path: '/health', - allow: 'unauthenticated', - }); - }, - }); - }, -}); diff --git a/plugins/nomad-backend/src/run.ts b/plugins/nomad-backend/src/run.ts deleted file mode 100644 index 711bdcc46c..0000000000 --- a/plugins/nomad-backend/src/run.ts +++ /dev/null @@ -1,34 +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 { 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 deleted file mode 100644 index 11c3834ed6..0000000000 --- a/plugins/nomad-backend/src/service/router.test.ts +++ /dev/null @@ -1,51 +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 { 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 deleted file mode 100644 index 10dd4a4128..0000000000 --- a/plugins/nomad-backend/src/service/router.ts +++ /dev/null @@ -1,126 +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 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 { LoggerService } from '@backstage/backend-plugin-api'; - -/** @public */ -export interface RouterOptions { - logger: LoggerService; - 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 deleted file mode 100644 index 3d952ec294..0000000000 --- a/plugins/nomad-backend/src/service/standaloneServer.ts +++ /dev/null @@ -1,52 +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 { createServiceBuilder } from '@backstage/backend-common'; -import { Server } from 'http'; -import { createRouter } from './router'; -import { Config } from '@backstage/config'; -import { LoggerService } from '@backstage/backend-plugin-api'; - -export interface ServerOptions { - config: Config; - enableCors: boolean; - logger: LoggerService; - 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 deleted file mode 100644 index 4b9026cde5..0000000000 --- a/plugins/nomad-backend/src/setupTests.ts +++ /dev/null @@ -1,16 +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. - */ -export {}; diff --git a/plugins/nomad/.eslintrc.js b/plugins/nomad/.eslintrc.js deleted file mode 100644 index c69a8f6aff..0000000000 --- a/plugins/nomad/.eslintrc.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { - rules: { - '@backstage/no-top-level-material-ui-4-imports': 'error', - }, - }); diff --git a/plugins/nomad/CHANGELOG.md b/plugins/nomad/CHANGELOG.md deleted file mode 100644 index 74859bba34..0000000000 --- a/plugins/nomad/CHANGELOG.md +++ /dev/null @@ -1,525 +0,0 @@ -# @backstage/plugin-nomad - -## 0.1.15 - -### Patch Changes - -- abfbcfc: Updated dependency `@testing-library/react` to `^15.0.0`. -- Updated dependencies - - @backstage/plugin-catalog-react@1.11.3 - - @backstage/core-components@0.14.4 - - @backstage/core-plugin-api@1.9.2 - - @backstage/catalog-model@1.4.5 - -## 0.1.15-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.4.5 - - @backstage/core-components@0.14.4-next.0 - - @backstage/core-plugin-api@1.9.1 - - @backstage/plugin-catalog-react@1.11.3-next.1 - -## 0.1.15-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.14.4-next.0 - - @backstage/catalog-model@1.4.5 - - @backstage/core-plugin-api@1.9.1 - - @backstage/plugin-catalog-react@1.11.3-next.0 - -## 0.1.14 - -### Patch Changes - -- c116096: Added an optional ESLint rule - no-top-level-material-ui-4-imports -in nomad plugin which has an auto fix function to migrate the imports and used it to migrate the Material UI imports for plugins/nomad. -- e8f026a: Use ESM exports of react-use library -- Updated dependencies - - @backstage/core-components@0.14.3 - - @backstage/plugin-catalog-react@1.11.2 - - @backstage/core-plugin-api@1.9.1 - - @backstage/catalog-model@1.4.5 - -## 0.1.13 - -### Patch Changes - -- c116096: Added an optional ESLint rule - no-top-level-material-ui-4-imports -in nomad plugin which has an auto fix function to migrate the imports and used it to migrate the Material UI imports for plugins/nomad. -- e8f026a: Use ESM exports of react-use library -- Updated dependencies - - @backstage/core-components@0.14.2 - - @backstage/plugin-catalog-react@1.11.1 - - @backstage/core-plugin-api@1.9.1 - - @backstage/catalog-model@1.4.5 - -## 0.1.12 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.14.1 - - @backstage/plugin-catalog-react@1.11.0 - - @backstage/catalog-model@1.4.5 - - @backstage/core-plugin-api@1.9.1 - -## 0.1.12-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.14.1-next.2 - - @backstage/plugin-catalog-react@1.11.0-next.2 - - @backstage/catalog-model@1.4.5-next.0 - - @backstage/core-plugin-api@1.9.1-next.1 - -## 0.1.12-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.14.1-next.1 - - @backstage/plugin-catalog-react@1.10.1-next.1 - - @backstage/core-plugin-api@1.9.1-next.1 - - @backstage/catalog-model@1.4.5-next.0 - -## 0.1.12-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.14.1-next.0 - - @backstage/plugin-catalog-react@1.10.1-next.0 - - @backstage/catalog-model@1.4.5-next.0 - - @backstage/core-plugin-api@1.9.1-next.0 - -## 0.1.11 - -### Patch Changes - -- 9aac2b0: Use `--cwd` as the first `yarn` argument -- 8fe56a8: Widen `@types/react` dependency range to include version 18. -- Updated dependencies - - @backstage/plugin-catalog-react@1.10.0 - - @backstage/core-components@0.14.0 - - @backstage/catalog-model@1.4.4 - - @backstage/core-plugin-api@1.9.0 - -## 0.1.11-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.14.0-next.2 - - @backstage/plugin-catalog-react@1.10.0-next.3 - - @backstage/catalog-model@1.4.4-next.0 - - @backstage/core-plugin-api@1.9.0-next.1 - -## 0.1.11-next.2 - -### Patch Changes - -- 9aac2b0: Use `--cwd` as the first `yarn` argument -- 8fe56a8: Widen `@types/react` dependency range to include version 18. -- Updated dependencies - - @backstage/core-components@0.14.0-next.1 - - @backstage/core-plugin-api@1.9.0-next.1 - - @backstage/plugin-catalog-react@1.10.0-next.2 - - @backstage/catalog-model@1.4.4-next.0 - -## 0.1.11-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.14.0-next.0 - - @backstage/catalog-model@1.4.4-next.0 - - @backstage/core-plugin-api@1.8.3-next.0 - - @backstage/plugin-catalog-react@1.9.4-next.1 - -## 0.1.11-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.9.4-next.0 - - @backstage/core-components@0.13.10 - - @backstage/catalog-model@1.4.3 - - @backstage/core-plugin-api@1.8.2 - -## 0.1.10 - -### Patch Changes - -- 4016f21: Remove some unused dependencies -- Updated dependencies - - @backstage/core-components@0.13.10 - - @backstage/core-plugin-api@1.8.2 - - @backstage/plugin-catalog-react@1.9.3 - - @backstage/catalog-model@1.4.3 - -## 0.1.10-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.9.3-next.2 - -## 0.1.10-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/core-plugin-api@1.8.2-next.0 - - @backstage/core-components@0.13.10-next.1 - - @backstage/plugin-catalog-react@1.9.3-next.1 - - @backstage/catalog-model@1.4.3 - -## 0.1.10-next.0 - -### Patch Changes - -- 4016f21: Remove some unused dependencies -- Updated dependencies - - @backstage/core-components@0.13.10-next.0 - - @backstage/plugin-catalog-react@1.9.3-next.0 - - @backstage/catalog-model@1.4.3 - - @backstage/core-plugin-api@1.8.1 - -## 0.1.9 - -### Patch Changes - -- Updated dependencies - - @backstage/core-plugin-api@1.8.1 - - @backstage/plugin-catalog-react@1.9.2 - - @backstage/core-components@0.13.9 - - @backstage/theme@0.5.0 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - -## 0.1.9-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.13.9-next.3 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/core-plugin-api@1.8.1-next.1 - - @backstage/theme@0.5.0-next.1 - - @backstage/plugin-catalog-react@1.9.2-next.3 - -## 0.1.9-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/theme@0.5.0-next.1 - - @backstage/plugin-catalog-react@1.9.2-next.2 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/core-components@0.13.9-next.2 - - @backstage/core-plugin-api@1.8.1-next.1 - -## 0.1.9-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.13.9-next.1 - - @backstage/core-plugin-api@1.8.1-next.1 - - @backstage/plugin-catalog-react@1.9.2-next.1 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/theme@0.5.0-next.0 - -## 0.1.9-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/core-plugin-api@1.8.1-next.0 - - @backstage/plugin-catalog-react@1.9.2-next.0 - - @backstage/core-components@0.13.9-next.0 - - @backstage/theme@0.5.0-next.0 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - -## 0.1.7 - -### Patch Changes - -- 6c2b872153: Add official support for React 18. -- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. -- fdb5e23602: Import `MissingAnnotationEmptyState` from `@backstage/plugin-catalog-react` to remove the cyclical dependency -- Updated dependencies - - @backstage/plugin-catalog-react@1.9.0 - - @backstage/core-components@0.13.8 - - @backstage/core-plugin-api@1.8.0 - - @backstage/theme@0.4.4 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - -## 0.1.7-next.2 - -### Patch Changes - -- [#20842](https://github.com/backstage/backstage/pull/20842) [`fdb5e23602`](https://github.com/backstage/backstage/commit/fdb5e2360299c5faa30f4d4236fc548b94d37446) Thanks [@benjdlambert](https://github.com/benjdlambert)! - Import `MissingAnnotationEmptyState` from `@backstage/plugin-catalog-react` to remove the cyclical dependency - -- Updated dependencies - - @backstage/core-components@0.13.8-next.2 - - @backstage/plugin-catalog-react@1.9.0-next.2 - -## 0.1.7-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.9.0-next.1 - - @backstage/core-components@0.13.8-next.1 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/core-plugin-api@1.8.0-next.0 - - @backstage/theme@0.4.4-next.0 - -## 0.1.7-next.0 - -### Patch Changes - -- 6c2b872153: Add official support for React 18. -- Updated dependencies - - @backstage/core-components@0.13.7-next.0 - - @backstage/plugin-catalog-react@1.9.0-next.0 - - @backstage/core-plugin-api@1.8.0-next.0 - - @backstage/theme@0.4.4-next.0 - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - -## 0.1.6 - -### Patch Changes - -- 9a1fce352e: Updated dependency `@testing-library/jest-dom` to `^6.0.0`. -- Updated dependencies - - @backstage/plugin-catalog-react@1.8.5 - - @backstage/core-plugin-api@1.7.0 - - @backstage/core-components@0.13.6 - - @backstage/catalog-model@1.4.3 - - @backstage/theme@0.4.3 - - @backstage/config@1.1.1 - -## 0.1.6-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.13.6-next.2 - - @backstage/core-plugin-api@1.7.0-next.1 - - @backstage/catalog-model@1.4.3-next.0 - - @backstage/plugin-catalog-react@1.8.5-next.2 - - @backstage/theme@0.4.3-next.0 - - @backstage/config@1.1.1-next.0 - -## 0.1.6-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.13.6-next.1 - - @backstage/plugin-catalog-react@1.8.5-next.1 - - @backstage/core-plugin-api@1.7.0-next.0 - - @backstage/config@1.1.0 - - @backstage/catalog-model@1.4.2 - - @backstage/theme@0.4.2 - -## 0.1.6-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.8.5-next.0 - - @backstage/core-plugin-api@1.7.0-next.0 - - @backstage/core-components@0.13.6-next.0 - - @backstage/config@1.1.0 - - @backstage/catalog-model@1.4.2 - - @backstage/theme@0.4.2 - -## 0.1.5 - -### Patch Changes - -- 482bb5c0bbf8: Moved `@types/react` to be a regular dependency -- 406b786a2a2c: Mark package as being free of side effects, allowing more optimized Webpack builds. -- 8cec7664e146: Removed `@types/node` dependency -- Updated dependencies - - @backstage/plugin-catalog-react@1.8.4 - - @backstage/core-components@0.13.5 - - @backstage/config@1.1.0 - - @backstage/catalog-model@1.4.2 - - @backstage/core-plugin-api@1.6.0 - - @backstage/theme@0.4.2 - -## 0.1.5-next.3 - -### Patch Changes - -- 406b786a2a2c: Mark package as being free of side effects, allowing more optimized Webpack builds. -- Updated dependencies - - @backstage/catalog-model@1.4.2-next.2 - - @backstage/config@1.1.0-next.2 - - @backstage/core-components@0.13.5-next.3 - - @backstage/core-plugin-api@1.6.0-next.3 - - @backstage/plugin-catalog-react@1.8.4-next.3 - - @backstage/theme@0.4.2-next.0 - -## 0.1.5-next.2 - -### Patch Changes - -- 8cec7664e146: Removed `@types/node` dependency -- Updated dependencies - - @backstage/core-components@0.13.5-next.2 - - @backstage/core-plugin-api@1.6.0-next.2 - - @backstage/config@1.1.0-next.1 - - @backstage/plugin-catalog-react@1.8.4-next.2 - - @backstage/catalog-model@1.4.2-next.1 - - @backstage/theme@0.4.1 - -## 0.1.5-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.8.4-next.1 - - @backstage/core-components@0.13.5-next.1 - - @backstage/config@1.1.0-next.0 - - @backstage/catalog-model@1.4.2-next.0 - - @backstage/core-plugin-api@1.6.0-next.1 - - @backstage/theme@0.4.1 - -## 0.1.4-next.0 - -### Patch Changes - -- 482bb5c0bbf8: Moved `@types/react` to be a regular dependency -- Updated dependencies - - @backstage/core-plugin-api@1.6.0-next.0 - - @backstage/core-components@0.13.5-next.0 - - @backstage/catalog-model@1.4.1 - - @backstage/config@1.0.8 - - @backstage/theme@0.4.1 - - @backstage/plugin-catalog-react@1.8.3-next.0 - -## 0.1.2 - -### Patch Changes - -- 12a8c94eda8d: Add package repository and homepage metadata -- Updated dependencies - - @backstage/core-components@0.13.4 - - @backstage/plugin-catalog-react@1.8.1 - - @backstage/core-plugin-api@1.5.3 - - @backstage/catalog-model@1.4.1 - - @backstage/config@1.0.8 - - @backstage/theme@0.4.1 - -## 0.1.2-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.8.1-next.1 - -## 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 deleted file mode 100644 index a5ec802195..0000000000 --- a/plugins/nomad/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Deprecated - -This package has been moved to the [backstage-community/plugins](https://github.com/backstage/community-plugins) repository. Migrate to using `@backstage-community/plugin-nomad` instead. diff --git a/plugins/nomad/api-report.md b/plugins/nomad/api-report.md deleted file mode 100644 index 68cc47c33d..0000000000 --- a/plugins/nomad/api-report.md +++ /dev/null @@ -1,35 +0,0 @@ -## 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 { JSX as JSX_2 } from 'react'; -import { RouteRef } from '@backstage/core-plugin-api'; - -// @public -export const EntityNomadAllocationListTable: () => JSX_2.Element; - -// @public -export const EntityNomadJobVersionListCard: () => JSX_2.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/catalog-info.yaml b/plugins/nomad/catalog-info.yaml deleted file mode 100644 index d704846059..0000000000 --- a/plugins/nomad/catalog-info.yaml +++ /dev/null @@ -1,9 +0,0 @@ -apiVersion: backstage.io/v1alpha1 -kind: Component -metadata: - name: backstage-plugin-nomad - title: '@backstage/plugin-nomad' -spec: - lifecycle: experimental - type: backstage-frontend-plugin - owner: maintainers diff --git a/plugins/nomad/dev/index.tsx b/plugins/nomad/dev/index.tsx deleted file mode 100644 index 73eaffb8e0..0000000000 --- a/plugins/nomad/dev/index.tsx +++ /dev/null @@ -1,19 +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 { 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 deleted file mode 100644 index fb1e9768af..0000000000 Binary files a/plugins/nomad/img/allocations-component.png and /dev/null differ diff --git a/plugins/nomad/img/job-versions-component.png b/plugins/nomad/img/job-versions-component.png deleted file mode 100644 index d6c9746bcb..0000000000 Binary files a/plugins/nomad/img/job-versions-component.png and /dev/null differ diff --git a/plugins/nomad/knip-report.md b/plugins/nomad/knip-report.md deleted file mode 100644 index ccda99cbfb..0000000000 --- a/plugins/nomad/knip-report.md +++ /dev/null @@ -1,8 +0,0 @@ -# Knip report - -## Unused devDependencies (1) - -| Name | Location | Severity | -| :--------------------- | :----------- | :------- | -| @testing-library/react | package.json | error | - diff --git a/plugins/nomad/package.json b/plugins/nomad/package.json deleted file mode 100644 index 74af9b96ec..0000000000 --- a/plugins/nomad/package.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "name": "@backstage/plugin-nomad", - "version": "0.1.15", - "backstage": { - "role": "frontend-plugin", - "moved": "@backstage-community/plugin-nomad" - }, - "publishConfig": { - "access": "public", - "main": "dist/index.esm.js", - "types": "dist/index.d.ts" - }, - "homepage": "https://backstage.io", - "repository": { - "type": "git", - "url": "https://github.com/backstage/backstage", - "directory": "plugins/nomad" - }, - "license": "Apache-2.0", - "sideEffects": false, - "main": "src/index.ts", - "types": "src/index.ts", - "files": [ - "dist" - ], - "scripts": { - "build": "backstage-cli package build", - "clean": "backstage-cli package clean", - "lint": "backstage-cli package lint", - "prepack": "backstage-cli package prepack", - "postpack": "backstage-cli package postpack", - "start": "backstage-cli package start", - "test": "backstage-cli package test" - }, - "dependencies": { - "@backstage/catalog-model": "workspace:^", - "@backstage/core-components": "workspace:^", - "@backstage/core-plugin-api": "workspace:^", - "@backstage/plugin-catalog-react": "workspace:^", - "@material-ui/core": "^4.9.13", - "@material-ui/icons": "^4.9.1", - "@types/react": "^16.13.1 || ^17.0.0 || ^18.0.0", - "luxon": "^3.3.0", - "react-use": "^17.2.4" - }, - "devDependencies": { - "@backstage/cli": "workspace:^", - "@backstage/dev-utils": "workspace:^", - "@testing-library/jest-dom": "^6.0.0", - "@testing-library/react": "^15.0.0", - "cross-fetch": "^4.0.0" - }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.13.1 || ^17.0.0 || ^18.0.0", - "react-router-dom": "6.0.0-beta.0 || ^6.3.0" - }, - "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" - ] - } - } - }, - "deprecated": "This package has been moved to the backstage/community-plugins repository. You should migrate to using @backstage-community/plugin-nomad instead." -} diff --git a/plugins/nomad/src/Router.tsx b/plugins/nomad/src/Router.tsx deleted file mode 100644 index aa872bae70..0000000000 --- a/plugins/nomad/src/Router.tsx +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import React from 'react'; -import { - useEntity, - MissingAnnotationEmptyState, -} from '@backstage/plugin-catalog-react'; -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 deleted file mode 100644 index 9854288e5d..0000000000 --- a/plugins/nomad/src/annotations.ts +++ /dev/null @@ -1,35 +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 { 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 deleted file mode 100644 index 44aa5d48d2..0000000000 --- a/plugins/nomad/src/api.ts +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { - 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 deleted file mode 100644 index a664d408ab..0000000000 --- a/plugins/nomad/src/components/EntityNomadAllocationListTable/EntityNomadAllocationListTable.tsx +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { DateTime } from 'luxon'; -import { - Link, - ResponseErrorPanel, - StatusError, - StatusOK, - StatusPending, - StatusRunning, - Table, - TableColumn, -} from '@backstage/core-components'; -import { - useEntity, - MissingAnnotationEmptyState, -} 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/esm/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 deleted file mode 100644 index 73d44acb3b..0000000000 --- a/plugins/nomad/src/components/EntityNomadJobVersionListCard/EntityNomadJobVersionListCard.tsx +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { DateTime } from 'luxon'; -import { - InfoCard, - ResponseErrorPanel, - Table, - TableColumn, -} from '@backstage/core-components'; -import { - useEntity, - MissingAnnotationEmptyState, -} 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/Chip'; - -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 deleted file mode 100644 index dcdae8cc99..0000000000 --- a/plugins/nomad/src/components/index.ts +++ /dev/null @@ -1,18 +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. - */ - -export { EntityNomadJobVersionListCard } from './EntityNomadJobVersionListCard/EntityNomadJobVersionListCard'; -export { EntityNomadAllocationListTable } from './EntityNomadAllocationListTable/EntityNomadAllocationListTable'; diff --git a/plugins/nomad/src/index.ts b/plugins/nomad/src/index.ts deleted file mode 100644 index d139935f1f..0000000000 --- a/plugins/nomad/src/index.ts +++ /dev/null @@ -1,24 +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. - */ -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 deleted file mode 100644 index def0f8ab89..0000000000 --- a/plugins/nomad/src/plugin.test.ts +++ /dev/null @@ -1,34 +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 { - 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 deleted file mode 100644 index df89785941..0000000000 --- a/plugins/nomad/src/plugin.ts +++ /dev/null @@ -1,87 +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 { - 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 deleted file mode 100644 index 12e8caf4eb..0000000000 --- a/plugins/nomad/src/routes.ts +++ /dev/null @@ -1,20 +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 { 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 deleted file mode 100644 index 73dd8dce47..0000000000 --- a/plugins/nomad/src/setupTests.ts +++ /dev/null @@ -1,17 +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 '@testing-library/jest-dom'; -import 'cross-fetch/polyfill'; diff --git a/plugins/pagerduty/.eslintrc.js b/plugins/pagerduty/.eslintrc.js deleted file mode 100644 index a2d8179106..0000000000 --- a/plugins/pagerduty/.eslintrc.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = require('@backstage/cli/config/eslint-factory')(__dirname, { - rules: { - '@backstage/no-top-level-material-ui-4-imports': 'error', - }, -}); diff --git a/plugins/pagerduty/CHANGELOG.md b/plugins/pagerduty/CHANGELOG.md deleted file mode 100644 index b2e1bd39e5..0000000000 --- a/plugins/pagerduty/CHANGELOG.md +++ /dev/null @@ -1,1861 +0,0 @@ -# @backstage/plugin-pagerduty - -## 0.7.6 - -### Patch Changes - -- abfbcfc: Updated dependency `@testing-library/react` to `^15.0.0`. -- cb1e3b0: Updated dependency `@testing-library/dom` to `^10.0.0`. -- Updated dependencies - - @backstage/plugin-catalog-react@1.11.3 - - @backstage/plugin-home-react@0.1.12 - - @backstage/core-components@0.14.4 - - @backstage/core-plugin-api@1.9.2 - - @backstage/catalog-model@1.4.5 - - @backstage/errors@1.2.4 - -## 0.7.6-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.4.5 - - @backstage/core-components@0.14.4-next.0 - - @backstage/core-plugin-api@1.9.1 - - @backstage/errors@1.2.4 - - @backstage/plugin-catalog-react@1.11.3-next.1 - - @backstage/plugin-home-react@0.1.12-next.0 - -## 0.7.6-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.14.4-next.0 - - @backstage/catalog-model@1.4.5 - - @backstage/core-plugin-api@1.9.1 - - @backstage/errors@1.2.4 - - @backstage/plugin-catalog-react@1.11.3-next.0 - - @backstage/plugin-home-react@0.1.12-next.0 - -## 0.7.5 - -### Patch Changes - -- 2b43144: Added ESLint rule `no-top-level-material-ui-4-imports` in the `pagerduty` plugin to migrate the Material UI imports. -- e8f026a: Use ESM exports of react-use library -- Updated dependencies - - @backstage/core-components@0.14.3 - - @backstage/plugin-catalog-react@1.11.2 - - @backstage/plugin-home-react@0.1.11 - - @backstage/core-plugin-api@1.9.1 - - @backstage/catalog-model@1.4.5 - - @backstage/errors@1.2.4 - -## 0.7.4 - -### Patch Changes - -- 2b43144: Added ESLint rule `no-top-level-material-ui-4-imports` in the `pagerduty` plugin to migrate the Material UI imports. -- e8f026a: Use ESM exports of react-use library -- Updated dependencies - - @backstage/core-components@0.14.2 - - @backstage/plugin-catalog-react@1.11.1 - - @backstage/plugin-home-react@0.1.10 - - @backstage/core-plugin-api@1.9.1 - - @backstage/catalog-model@1.4.5 - - @backstage/errors@1.2.4 - -## 0.7.3 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.14.1 - - @backstage/errors@1.2.4 - - @backstage/plugin-catalog-react@1.11.0 - - @backstage/plugin-home-react@0.1.9 - - @backstage/catalog-model@1.4.5 - - @backstage/core-plugin-api@1.9.1 - -## 0.7.3-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.14.1-next.2 - - @backstage/plugin-catalog-react@1.11.0-next.2 - - @backstage/plugin-home-react@0.1.9-next.2 - - @backstage/catalog-model@1.4.5-next.0 - - @backstage/core-plugin-api@1.9.1-next.1 - - @backstage/errors@1.2.4-next.0 - -## 0.7.3-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.14.1-next.1 - - @backstage/plugin-catalog-react@1.10.1-next.1 - - @backstage/core-plugin-api@1.9.1-next.1 - - @backstage/plugin-home-react@0.1.9-next.1 - - @backstage/catalog-model@1.4.5-next.0 - - @backstage/errors@1.2.4-next.0 - -## 0.7.3-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/errors@1.2.4-next.0 - - @backstage/core-components@0.14.1-next.0 - - @backstage/plugin-catalog-react@1.10.1-next.0 - - @backstage/plugin-home-react@0.1.9-next.0 - - @backstage/catalog-model@1.4.5-next.0 - - @backstage/core-plugin-api@1.9.1-next.0 - -## 0.7.2 - -### Patch Changes - -- 8fe56a8: Widen `@types/react` dependency range to include version 18. -- Updated dependencies - - @backstage/plugin-catalog-react@1.10.0 - - @backstage/core-components@0.14.0 - - @backstage/catalog-model@1.4.4 - - @backstage/core-plugin-api@1.9.0 - - @backstage/plugin-home-react@0.1.8 - - @backstage/errors@1.2.3 - -## 0.7.2-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.14.0-next.2 - - @backstage/plugin-catalog-react@1.10.0-next.3 - - @backstage/plugin-home-react@0.1.8-next.3 - - @backstage/catalog-model@1.4.4-next.0 - - @backstage/core-plugin-api@1.9.0-next.1 - - @backstage/errors@1.2.3 - -## 0.7.2-next.2 - -### Patch Changes - -- 8fe56a8: Widen `@types/react` dependency range to include version 18. -- Updated dependencies - - @backstage/core-components@0.14.0-next.1 - - @backstage/core-plugin-api@1.9.0-next.1 - - @backstage/plugin-catalog-react@1.10.0-next.2 - - @backstage/plugin-home-react@0.1.8-next.2 - - @backstage/catalog-model@1.4.4-next.0 - - @backstage/errors@1.2.3 - -## 0.7.2-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.14.0-next.0 - - @backstage/catalog-model@1.4.4-next.0 - - @backstage/core-plugin-api@1.8.3-next.0 - - @backstage/plugin-catalog-react@1.9.4-next.1 - - @backstage/plugin-home-react@0.1.8-next.1 - - @backstage/errors@1.2.3 - -## 0.7.2-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.9.4-next.0 - - @backstage/plugin-home-react@0.1.8-next.0 - - @backstage/core-components@0.13.10 - - @backstage/catalog-model@1.4.3 - - @backstage/core-plugin-api@1.8.2 - - @backstage/errors@1.2.3 - -## 0.7.1 - -### Patch Changes - -- 4016f21: Remove some unused dependencies -- Updated dependencies - - @backstage/core-components@0.13.10 - - @backstage/core-plugin-api@1.8.2 - - @backstage/plugin-home-react@0.1.7 - - @backstage/plugin-catalog-react@1.9.3 - - @backstage/catalog-model@1.4.3 - - @backstage/errors@1.2.3 - -## 0.7.1-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-home-react@0.1.7-next.2 - - @backstage/plugin-catalog-react@1.9.3-next.2 - -## 0.7.1-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/core-plugin-api@1.8.2-next.0 - - @backstage/core-components@0.13.10-next.1 - - @backstage/plugin-catalog-react@1.9.3-next.1 - - @backstage/plugin-home-react@0.1.7-next.1 - - @backstage/catalog-model@1.4.3 - - @backstage/errors@1.2.3 - -## 0.7.1-next.0 - -### Patch Changes - -- 4016f21: Remove some unused dependencies -- Updated dependencies - - @backstage/core-components@0.13.10-next.0 - - @backstage/plugin-catalog-react@1.9.3-next.0 - - @backstage/plugin-home-react@0.1.7-next.0 - - @backstage/catalog-model@1.4.3 - - @backstage/core-plugin-api@1.8.1 - - @backstage/errors@1.2.3 - -## 0.7.0 - -### Minor Changes - -- 5fca16f: This package has been deprecated, consider using [@pagerduty/backstage-plugin](https://github.com/pagerduty/backstage-plugin) instead. - -### Patch Changes - -- Updated dependencies - - @backstage/core-plugin-api@1.8.1 - - @backstage/plugin-catalog-react@1.9.2 - - @backstage/core-components@0.13.9 - - @backstage/theme@0.5.0 - - @backstage/plugin-home-react@0.1.6 - - @backstage/catalog-model@1.4.3 - - @backstage/errors@1.2.3 - -## 0.7.0-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-home-react@0.1.6-next.3 - - @backstage/core-components@0.13.9-next.3 - - @backstage/catalog-model@1.4.3 - - @backstage/core-plugin-api@1.8.1-next.1 - - @backstage/errors@1.2.3 - - @backstage/theme@0.5.0-next.1 - - @backstage/plugin-catalog-react@1.9.2-next.3 - -## 0.7.0-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/theme@0.5.0-next.1 - - @backstage/plugin-catalog-react@1.9.2-next.2 - - @backstage/catalog-model@1.4.3 - - @backstage/core-components@0.13.9-next.2 - - @backstage/core-plugin-api@1.8.1-next.1 - - @backstage/errors@1.2.3 - - @backstage/plugin-home-react@0.1.6-next.2 - -## 0.7.0-next.1 - -### Minor Changes - -- 5fca16fdf6: This package has been deprecated, consider using [@pagerduty/backstage-plugin](https://github.com/pagerduty/backstage-plugin) instead. - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.13.9-next.1 - - @backstage/core-plugin-api@1.8.1-next.1 - - @backstage/plugin-catalog-react@1.9.2-next.1 - - @backstage/plugin-home-react@0.1.6-next.1 - - @backstage/catalog-model@1.4.3 - - @backstage/errors@1.2.3 - - @backstage/theme@0.5.0-next.0 - -## 0.6.9-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/core-plugin-api@1.8.1-next.0 - - @backstage/plugin-catalog-react@1.9.2-next.0 - - @backstage/core-components@0.13.9-next.0 - - @backstage/plugin-home-react@0.1.6-next.0 - - @backstage/theme@0.5.0-next.0 - - @backstage/catalog-model@1.4.3 - - @backstage/errors@1.2.3 - -## 0.6.7 - -### Patch Changes - -- 6c2b872153: Add official support for React 18. -- Updated dependencies - - @backstage/plugin-catalog-react@1.9.0 - - @backstage/core-components@0.13.8 - - @backstage/core-plugin-api@1.8.0 - - @backstage/plugin-home-react@0.1.5 - - @backstage/theme@0.4.4 - - @backstage/catalog-model@1.4.3 - - @backstage/errors@1.2.3 - -## 0.6.7-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.13.8-next.2 - - @backstage/plugin-catalog-react@1.9.0-next.2 - - @backstage/plugin-home-react@0.1.5-next.2 - -## 0.6.7-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.9.0-next.1 - - @backstage/core-components@0.13.8-next.1 - - @backstage/catalog-model@1.4.3 - - @backstage/core-plugin-api@1.8.0-next.0 - - @backstage/errors@1.2.3 - - @backstage/theme@0.4.4-next.0 - - @backstage/plugin-home-react@0.1.5-next.1 - -## 0.6.7-next.0 - -### Patch Changes - -- 6c2b872153: Add official support for React 18. -- Updated dependencies - - @backstage/core-components@0.13.7-next.0 - - @backstage/plugin-catalog-react@1.9.0-next.0 - - @backstage/core-plugin-api@1.8.0-next.0 - - @backstage/plugin-home-react@0.1.5-next.0 - - @backstage/theme@0.4.4-next.0 - - @backstage/catalog-model@1.4.3 - - @backstage/errors@1.2.3 - -## 0.6.6 - -### Patch Changes - -- b9ce306814: Minor fix to avoid usage of deprecated prop -- 9a1fce352e: Updated dependency `@testing-library/jest-dom` to `^6.0.0`. -- f95af4e540: Updated dependency `@testing-library/dom` to `^9.0.0`. -- Updated dependencies - - @backstage/plugin-catalog-react@1.8.5 - - @backstage/core-plugin-api@1.7.0 - - @backstage/core-components@0.13.6 - - @backstage/catalog-model@1.4.3 - - @backstage/errors@1.2.3 - - @backstage/plugin-home-react@0.1.4 - - @backstage/theme@0.4.3 - -## 0.6.6-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.13.6-next.2 - - @backstage/core-plugin-api@1.7.0-next.1 - - @backstage/catalog-model@1.4.3-next.0 - - @backstage/plugin-catalog-react@1.8.5-next.2 - - @backstage/errors@1.2.3-next.0 - - @backstage/theme@0.4.3-next.0 - - @backstage/plugin-home-react@0.1.4-next.2 - -## 0.6.6-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.13.6-next.1 - - @backstage/plugin-catalog-react@1.8.5-next.1 - - @backstage/plugin-home-react@0.1.4-next.1 - - @backstage/core-plugin-api@1.7.0-next.0 - - @backstage/catalog-model@1.4.2 - - @backstage/errors@1.2.2 - - @backstage/theme@0.4.2 - -## 0.6.6-next.0 - -### Patch Changes - -- b9ce306814: Minor fix to avoid usage of deprecated prop -- Updated dependencies - - @backstage/plugin-catalog-react@1.8.5-next.0 - - @backstage/core-plugin-api@1.7.0-next.0 - - @backstage/core-components@0.13.6-next.0 - - @backstage/plugin-home-react@0.1.4-next.0 - - @backstage/catalog-model@1.4.2 - - @backstage/errors@1.2.2 - - @backstage/theme@0.4.2 - -## 0.6.5 - -### Patch Changes - -- 3b41afed4d0c: Minor internal tweaks to improve tests -- 406b786a2a2c: Mark package as being free of side effects, allowing more optimized Webpack builds. -- 8cec7664e146: Removed `@types/node` dependency -- Updated dependencies - - @backstage/plugin-home-react@0.1.3 - - @backstage/plugin-catalog-react@1.8.4 - - @backstage/core-components@0.13.5 - - @backstage/catalog-model@1.4.2 - - @backstage/core-plugin-api@1.6.0 - - @backstage/errors@1.2.2 - - @backstage/theme@0.4.2 - -## 0.6.5-next.3 - -### Patch Changes - -- 406b786a2a2c: Mark package as being free of side effects, allowing more optimized Webpack builds. -- Updated dependencies - - @backstage/catalog-model@1.4.2-next.2 - - @backstage/core-components@0.13.5-next.3 - - @backstage/core-plugin-api@1.6.0-next.3 - - @backstage/errors@1.2.2-next.0 - - @backstage/plugin-catalog-react@1.8.4-next.3 - - @backstage/plugin-home-react@0.1.3-next.3 - - @backstage/theme@0.4.2-next.0 - -## 0.6.5-next.2 - -### Patch Changes - -- 8cec7664e146: Removed `@types/node` dependency -- Updated dependencies - - @backstage/core-components@0.13.5-next.2 - - @backstage/core-plugin-api@1.6.0-next.2 - - @backstage/plugin-home-react@0.1.3-next.2 - - @backstage/plugin-catalog-react@1.8.4-next.2 - - @backstage/catalog-model@1.4.2-next.1 - - @backstage/errors@1.2.1 - - @backstage/theme@0.4.1 - -## 0.6.5-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.8.4-next.1 - - @backstage/core-components@0.13.5-next.1 - - @backstage/plugin-home-react@0.1.3-next.1 - - @backstage/catalog-model@1.4.2-next.0 - - @backstage/core-plugin-api@1.6.0-next.1 - - @backstage/errors@1.2.1 - - @backstage/theme@0.4.1 - -## 0.6.4-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-home-react@0.1.3-next.0 - - @backstage/core-plugin-api@1.6.0-next.0 - - @backstage/core-components@0.13.5-next.0 - - @backstage/catalog-model@1.4.1 - - @backstage/errors@1.2.1 - - @backstage/theme@0.4.1 - - @backstage/plugin-catalog-react@1.8.3-next.0 - -## 0.6.2 - -### Patch Changes - -- 5003fc966741: Add new `disableChangeEvents` prop to `EntityPagerDutyCard` to hide the Change Events tab and disable fetching of change events for the PagerDuty service. -- Updated dependencies - - @backstage/plugin-home-react@0.1.2 - - @backstage/core-components@0.13.4 - - @backstage/plugin-catalog-react@1.8.1 - - @backstage/core-plugin-api@1.5.3 - - @backstage/catalog-model@1.4.1 - - @backstage/errors@1.2.1 - - @backstage/theme@0.4.1 - -## 0.6.2-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.8.1-next.1 - - @backstage/plugin-home-react@0.1.2-next.0 - -## 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 - -- Updated dependencies - - @backstage/theme@0.4.0-next.1 - - @backstage/plugin-catalog-react@1.7.0-next.2 - - @backstage/core-components@0.13.2-next.2 - - @backstage/plugin-home-react@0.1.0-next.2 - - @backstage/core-plugin-api@1.5.2-next.0 - -## 0.5.12-next.1 - -### Patch Changes - -- 9512f13eb3af: Add a homepage widget for the `Pagerduty` component. -- Updated dependencies - - @backstage/errors@1.2.0-next.0 - - @backstage/core-components@0.13.2-next.1 - - @backstage/plugin-catalog-react@1.7.0-next.1 - - @backstage/catalog-model@1.4.0-next.0 - - @backstage/core-plugin-api@1.5.2-next.0 - - @backstage/plugin-home-react@0.1.0-next.1 - - @backstage/theme@0.4.0-next.0 - -## 0.5.12-next.0 - -### Patch Changes - -- 3d11596a72b5: Update plugin installation docs to be more consistent across documentations -- Updated dependencies - - @backstage/plugin-catalog-react@1.7.0-next.0 - - @backstage/theme@0.4.0-next.0 - - @backstage/core-components@0.13.2-next.0 - - @backstage/core-plugin-api@1.5.1 - - @backstage/catalog-model@1.3.0 - - @backstage/errors@1.1.5 - -## 0.5.11 - -### Patch Changes - -- Updated dependencies - - @backstage/theme@0.3.0 - - @backstage/plugin-catalog-react@1.6.0 - - @backstage/core-components@0.13.1 - - @backstage/catalog-model@1.3.0 - - @backstage/core-plugin-api@1.5.1 - - @backstage/errors@1.1.5 - -## 0.5.11-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/theme@0.3.0-next.0 - - @backstage/core-components@0.13.1-next.1 - - @backstage/plugin-catalog-react@1.6.0-next.2 - - @backstage/core-plugin-api@1.5.1 - -## 0.5.11-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.13.1-next.0 - - @backstage/core-plugin-api@1.5.1 - - @backstage/plugin-catalog-react@1.6.0-next.1 - -## 0.5.11-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.6.0-next.0 - - @backstage/core-components@0.13.0 - - @backstage/core-plugin-api@1.5.1 - - @backstage/catalog-model@1.3.0 - - @backstage/errors@1.1.5 - - @backstage/theme@0.2.19 - -## 0.5.10 - -### Patch Changes - -- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) -- e0c6e8b9c3c: Update peer dependencies -- Updated dependencies - - @backstage/core-components@0.13.0 - - @backstage/plugin-catalog-react@1.5.0 - - @backstage/theme@0.2.19 - - @backstage/core-plugin-api@1.5.1 - - @backstage/catalog-model@1.3.0 - - @backstage/errors@1.1.5 - -## 0.5.10-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.5.0-next.3 - - @backstage/catalog-model@1.3.0-next.0 - - @backstage/core-components@0.13.0-next.3 - - @backstage/core-plugin-api@1.5.1-next.1 - - @backstage/errors@1.1.5 - - @backstage/theme@0.2.19-next.0 - -## 0.5.10-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.12.6-next.2 - - @backstage/plugin-catalog-react@1.4.1-next.2 - - @backstage/core-plugin-api@1.5.1-next.1 - - @backstage/catalog-model@1.2.1 - - @backstage/errors@1.1.5 - - @backstage/theme@0.2.19-next.0 - -## 0.5.10-next.1 - -### Patch Changes - -- e0c6e8b9c3c: Update peer dependencies -- Updated dependencies - - @backstage/core-components@0.12.6-next.1 - - @backstage/core-plugin-api@1.5.1-next.0 - - @backstage/plugin-catalog-react@1.4.1-next.1 - - @backstage/theme@0.2.19-next.0 - - @backstage/catalog-model@1.2.1 - - @backstage/errors@1.1.5 - -## 0.5.10-next.0 - -### Patch Changes - -- 8e00acb28db: Small tweaks to remove warnings in the console during development (mainly focusing on techdocs) -- Updated dependencies - - @backstage/core-components@0.12.6-next.0 - - @backstage/plugin-catalog-react@1.4.1-next.0 - - @backstage/core-plugin-api@1.5.0 - - @backstage/catalog-model@1.2.1 - - @backstage/errors@1.1.5 - - @backstage/theme@0.2.18 - -## 0.5.9 - -### Patch Changes - -- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. -- 9c08ecbaa4b: Update readme link for discord channel -- Updated dependencies - - @backstage/core-components@0.12.5 - - @backstage/plugin-catalog-react@1.4.0 - - @backstage/errors@1.1.5 - - @backstage/core-plugin-api@1.5.0 - - @backstage/catalog-model@1.2.1 - - @backstage/theme@0.2.18 - -## 0.5.9-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.12.5-next.2 - - @backstage/plugin-catalog-react@1.4.0-next.2 - - @backstage/core-plugin-api@1.5.0-next.2 - -## 0.5.9-next.1 - -### Patch Changes - -- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. -- 9c08ecbaa4b: Update readme link for discord channel -- Updated dependencies - - @backstage/core-components@0.12.5-next.1 - - @backstage/errors@1.1.5-next.0 - - @backstage/core-plugin-api@1.4.1-next.1 - - @backstage/theme@0.2.18-next.0 - - @backstage/plugin-catalog-react@1.4.0-next.1 - - @backstage/catalog-model@1.2.1-next.1 - -## 0.5.9-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.4.0-next.0 - - @backstage/core-plugin-api@1.4.1-next.0 - - @backstage/catalog-model@1.2.1-next.0 - - @backstage/core-components@0.12.5-next.0 - - @backstage/errors@1.1.4 - - @backstage/theme@0.2.17 - -## 0.5.8 - -### Patch Changes - -- 804746dd58: The PagerDutyCard now supports an optional `readOnly` property (``) for suppressing the rendering of the "Create Incident" button from the Backstage UI. -- Updated dependencies - - @backstage/core-components@0.12.4 - - @backstage/catalog-model@1.2.0 - - @backstage/theme@0.2.17 - - @backstage/core-plugin-api@1.4.0 - - @backstage/plugin-catalog-react@1.3.0 - - @backstage/errors@1.1.4 - -## 0.5.8-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.2.0-next.1 - - @backstage/core-components@0.12.4-next.1 - - @backstage/core-plugin-api@1.3.0 - - @backstage/errors@1.1.4 - - @backstage/theme@0.2.16 - - @backstage/plugin-catalog-react@1.3.0-next.2 - -## 0.5.8-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.12.4-next.0 - - @backstage/plugin-catalog-react@1.3.0-next.1 - - @backstage/catalog-model@1.1.6-next.0 - - @backstage/core-plugin-api@1.3.0 - - @backstage/errors@1.1.4 - - @backstage/theme@0.2.16 - -## 0.5.8-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.3.0-next.0 - - @backstage/catalog-model@1.1.6-next.0 - -## 0.5.7 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.1.5 - - @backstage/plugin-catalog-react@1.2.4 - - @backstage/core-components@0.12.3 - - @backstage/core-plugin-api@1.3.0 - - @backstage/errors@1.1.4 - - @backstage/theme@0.2.16 - -## 0.5.7-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/core-plugin-api@1.3.0-next.1 - - @backstage/plugin-catalog-react@1.2.4-next.2 - - @backstage/catalog-model@1.1.5-next.1 - - @backstage/core-components@0.12.3-next.2 - - @backstage/errors@1.1.4 - - @backstage/theme@0.2.16 - -## 0.5.7-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.1.5-next.1 - - @backstage/core-components@0.12.3-next.1 - - @backstage/core-plugin-api@1.2.1-next.0 - - @backstage/errors@1.1.4 - - @backstage/theme@0.2.16 - - @backstage/plugin-catalog-react@1.2.4-next.1 - -## 0.5.7-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.1.5-next.0 - - @backstage/plugin-catalog-react@1.2.4-next.0 - - @backstage/core-components@0.12.3-next.0 - - @backstage/core-plugin-api@1.2.0 - - @backstage/errors@1.1.4 - - @backstage/theme@0.2.16 - -## 0.5.6 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.12.2 - - @backstage/plugin-catalog-react@1.2.3 - -## 0.5.5 - -### Patch Changes - -- cb716004ef: Internal refactor to improve tests -- 3280711113: Updated dependency `msw` to `^0.49.0`. -- Updated dependencies - - @backstage/core-plugin-api@1.2.0 - - @backstage/core-components@0.12.1 - - @backstage/errors@1.1.4 - - @backstage/plugin-catalog-react@1.2.2 - - @backstage/catalog-model@1.1.4 - - @backstage/theme@0.2.16 - -## 0.5.5-next.4 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.12.1-next.4 - - @backstage/plugin-catalog-react@1.2.2-next.4 - - @backstage/catalog-model@1.1.4-next.1 - - @backstage/core-plugin-api@1.2.0-next.2 - - @backstage/errors@1.1.4-next.1 - - @backstage/theme@0.2.16 - -## 0.5.5-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.12.1-next.3 - - @backstage/catalog-model@1.1.4-next.1 - - @backstage/core-plugin-api@1.2.0-next.2 - - @backstage/errors@1.1.4-next.1 - - @backstage/theme@0.2.16 - - @backstage/plugin-catalog-react@1.2.2-next.3 - -## 0.5.5-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/core-plugin-api@1.2.0-next.2 - - @backstage/core-components@0.12.1-next.2 - - @backstage/plugin-catalog-react@1.2.2-next.2 - - @backstage/catalog-model@1.1.4-next.1 - - @backstage/errors@1.1.4-next.1 - - @backstage/theme@0.2.16 - -## 0.5.5-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.12.1-next.1 - - @backstage/core-plugin-api@1.1.1-next.1 - - @backstage/plugin-catalog-react@1.2.2-next.1 - - @backstage/catalog-model@1.1.4-next.1 - - @backstage/errors@1.1.4-next.1 - - @backstage/theme@0.2.16 - -## 0.5.5-next.0 - -### Patch Changes - -- cb716004ef: Internal refactor to improve tests -- 3280711113: Updated dependency `msw` to `^0.49.0`. -- Updated dependencies - - @backstage/core-components@0.12.1-next.0 - - @backstage/core-plugin-api@1.1.1-next.0 - - @backstage/plugin-catalog-react@1.2.2-next.0 - - @backstage/catalog-model@1.1.4-next.0 - - @backstage/errors@1.1.4-next.0 - - @backstage/theme@0.2.16 - -## 0.5.4 - -### Patch Changes - -- f905853ad6: Prefer using `Link` from `@backstage/core-components` rather than material-UI. -- Updated dependencies - - @backstage/plugin-catalog-react@1.2.1 - - @backstage/core-components@0.12.0 - - @backstage/core-plugin-api@1.1.0 - - @backstage/catalog-model@1.1.3 - - @backstage/errors@1.1.3 - - @backstage/theme@0.2.16 - -## 0.5.4-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.12.0-next.1 - - @backstage/catalog-model@1.1.3-next.0 - - @backstage/core-plugin-api@1.1.0-next.0 - - @backstage/errors@1.1.3-next.0 - - @backstage/theme@0.2.16 - - @backstage/plugin-catalog-react@1.2.1-next.1 - -## 0.5.4-next.0 - -### Patch Changes - -- f905853ad6: Prefer using `Link` from `@backstage/core-components` rather than material-UI. -- Updated dependencies - - @backstage/plugin-catalog-react@1.2.1-next.0 - - @backstage/core-components@0.12.0-next.0 - - @backstage/core-plugin-api@1.1.0-next.0 - - @backstage/catalog-model@1.1.3-next.0 - - @backstage/errors@1.1.3-next.0 - - @backstage/theme@0.2.16 - -## 0.5.3 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.1.2 - - @backstage/plugin-catalog-react@1.2.0 - - @backstage/core-components@0.11.2 - - @backstage/core-plugin-api@1.0.7 - - @backstage/errors@1.1.2 - - @backstage/theme@0.2.16 - -## 0.5.3-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.2.0-next.2 - - @backstage/catalog-model@1.1.2-next.2 - - @backstage/core-components@0.11.2-next.2 - - @backstage/core-plugin-api@1.0.7-next.2 - - @backstage/errors@1.1.2-next.2 - - @backstage/theme@0.2.16 - -## 0.5.3-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.2.0-next.1 - - @backstage/core-components@0.11.2-next.1 - - @backstage/core-plugin-api@1.0.7-next.1 - - @backstage/catalog-model@1.1.2-next.1 - - @backstage/errors@1.1.2-next.1 - - @backstage/theme@0.2.16 - -## 0.5.3-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.1.2-next.0 - - @backstage/core-components@0.11.2-next.0 - - @backstage/plugin-catalog-react@1.1.5-next.0 - - @backstage/core-plugin-api@1.0.7-next.0 - - @backstage/errors@1.1.2-next.0 - - @backstage/theme@0.2.16 - -## 0.5.2 - -### Patch Changes - -- 817f3196f6: Updated React Router dependencies to be peer dependencies. -- 3f739be9d9: Minor API signatures cleanup -- 7d47def9c4: Removed dependency on `@types/jest`. -- d669d89206: Minor API signatures cleanup -- 667d917488: Updated dependency `msw` to `^0.47.0`. -- 87ec2ba4d6: Updated dependency `msw` to `^0.46.0`. -- bf5e9030eb: Updated dependency `msw` to `^0.45.0`. -- Updated dependencies - - @backstage/core-components@0.11.1 - - @backstage/core-plugin-api@1.0.6 - - @backstage/plugin-catalog-react@1.1.4 - - @backstage/catalog-model@1.1.1 - - @backstage/errors@1.1.1 - -## 0.5.2-next.3 - -### Patch Changes - -- 7d47def9c4: Removed dependency on `@types/jest`. -- Updated dependencies - - @backstage/plugin-catalog-react@1.1.4-next.2 - - @backstage/catalog-model@1.1.1-next.0 - - @backstage/core-components@0.11.1-next.3 - - @backstage/core-plugin-api@1.0.6-next.3 - - @backstage/errors@1.1.1-next.0 - -## 0.5.2-next.2 - -### Patch Changes - -- 667d917488: Updated dependency `msw` to `^0.47.0`. -- 87ec2ba4d6: Updated dependency `msw` to `^0.46.0`. -- Updated dependencies - - @backstage/core-components@0.11.1-next.2 - - @backstage/core-plugin-api@1.0.6-next.2 - -## 0.5.2-next.1 - -### Patch Changes - -- 817f3196f6: Updated React Router dependencies to be peer dependencies. -- d669d89206: Minor API signatures cleanup -- Updated dependencies - - @backstage/core-components@0.11.1-next.1 - - @backstage/core-plugin-api@1.0.6-next.1 - - @backstage/plugin-catalog-react@1.1.4-next.1 - -## 0.5.2-next.0 - -### Patch Changes - -- 3f739be9d9: Minor API signatures cleanup -- bf5e9030eb: Updated dependency `msw` to `^0.45.0`. -- Updated dependencies - - @backstage/core-plugin-api@1.0.6-next.0 - - @backstage/core-components@0.11.1-next.0 - - @backstage/plugin-catalog-react@1.1.4-next.0 - -## 0.5.1 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.11.0 - - @backstage/core-plugin-api@1.0.5 - - @backstage/plugin-catalog-react@1.1.3 - -## 0.5.1-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.1.3-next.2 - - @backstage/core-components@0.11.0-next.2 - -## 0.5.1-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/core-plugin-api@1.0.5-next.0 - - @backstage/plugin-catalog-react@1.1.3-next.0 - - @backstage/core-components@0.10.1-next.0 - -## 0.5.0 - -### Minor Changes - -- 8798f8d93f: Introduces a new annotation `pagerduty.com/service-id` that can be used instead of the `pagerduty.com/integration-key` annotation. - _Note: If both annotations are specified on a given Entity, then the `pagerduty.com/integration-key` annotation will be prefered_ - - **BREAKING** The `PagerDutyClient.fromConfig` static method now expects a `FetchApi` compatible object and has been refactored to - accept 2 arguments: config and ClientApiDependencies - The `PagerDutyClient` now relies on a `fetchApi` being available to execute `fetch` requests. - - **BREAKING** A new query method `getServiceByEntity` that is used to query for Services by either the `integrationKey` or `serviceId` - annotation values if they are defined. The `integrationKey` value is preferred currently over `serviceId`. As such, the previous - `getServiceByIntegrationKey` method has been removed. - - **BREAKING** The return values for each Client query method has been changed to return an object instead of raw values. - For example, the `getIncidentsByServiceId` query method now returns an object in the shape of `{ incidents: Incident[] }` - instead of just `Incident[]`. - This same pattern goes for `getChangeEventsByServiceId` and `getOnCallByPolicyId` functions. - - **BREAKING** All public exported types that relate to entities within PagerDuty have been prefixed with `PagerDuty` (e.g. `ServicesResponse` is now `PagerDutyServicesResponse` and `User` is now `PagerDutyUser`) - - In addition, various enhancements/bug fixes were introduced: - - - The `PagerDutyCard` component now wraps error and loading messages with an `InfoCard` to contain errors/messages. This enforces a consistent experience on the EntityPage - - If no service can be found for the provided integration key, a new Error Message Empty State component will be shown instead of an error alert - - Introduces the `fetchApi` to replace standard `window.fetch` - - ensures that Identity Authorization is respected and provided in API requests - -### Patch Changes - -- a70869e775: Updated dependency `msw` to `^0.43.0`. -- 4e9a90e307: Updated dependency `luxon` to `^3.0.0`. -- 8006d0f9bf: Updated dependency `msw` to `^0.44.0`. -- Updated dependencies - - @backstage/core-components@0.10.0 - - @backstage/catalog-model@1.1.0 - - @backstage/core-plugin-api@1.0.4 - - @backstage/plugin-catalog-react@1.1.2 - - @backstage/theme@0.2.16 - - @backstage/errors@1.1.0 - -## 0.5.0-next.3 - -### Patch Changes - -- a70869e775: Updated dependency `msw` to `^0.43.0`. -- 4e9a90e307: Updated dependency `luxon` to `^3.0.0`. -- Updated dependencies - - @backstage/core-plugin-api@1.0.4-next.0 - - @backstage/core-components@0.10.0-next.3 - - @backstage/catalog-model@1.1.0-next.3 - - @backstage/plugin-catalog-react@1.1.2-next.3 - -## 0.5.0-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.10.0-next.2 - - @backstage/catalog-model@1.1.0-next.2 - - @backstage/theme@0.2.16-next.1 - - @backstage/plugin-catalog-react@1.1.2-next.2 - -## 0.5.0-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.9.6-next.1 - - @backstage/catalog-model@1.1.0-next.1 - - @backstage/errors@1.1.0-next.0 - - @backstage/theme@0.2.16-next.0 - - @backstage/plugin-catalog-react@1.1.2-next.1 - -## 0.5.0-next.0 - -### Minor Changes - -- 8798f8d93f: Introduces a new annotation `pagerduty.com/service-id` that can be used instead of the `pagerduty.com/integration-key` annotation. - _Note: If both annotations are specified on a given Entity, then the `pagerduty.com/integration-key` annotation will be prefered_ - - **BREAKING** The `PagerDutyClient.fromConfig` static method now expects a `FetchApi` compatible object and has been refactored to - accept 2 arguments: config and ClientApiDependencies - The `PagerDutyClient` now relies on a `fetchApi` being available to execute `fetch` requests. - - **BREAKING** A new query method `getServiceByEntity` that is used to query for Services by either the `integrationKey` or `serviceId` - annotation values if they are defined. The `integrationKey` value is preferred currently over `serviceId`. As such, the previous - `getServiceByIntegrationKey` method has been removed. - - **BREAKING** The return values for each Client query method has been changed to return an object instead of raw values. - For example, the `getIncidentsByServiceId` query method now returns an object in the shape of `{ incidents: Incident[] }` - instead of just `Incident[]`. - This same pattern goes for `getChangeEventsByServiceId` and `getOnCallByPolicyId` functions. - - **BREAKING** All public exported types that relate to entities within PagerDuty have been prefixed with `PagerDuty` (e.g. `ServicesResponse` is now `PagerDutyServicesResponse` and `User` is now `PagerDutyUser`) - - In addition, various enhancements/bug fixes were introduced: - - - The `PagerDutyCard` component now wraps error and loading messages with an `InfoCard` to contain errors/messages. This enforces a consistent experience on the EntityPage - - If no service can be found for the provided integration key, a new Error Message Empty State component will be shown instead of an error alert - - Introduces the `fetchApi` to replace standard `window.fetch` - - ensures that Identity Authorization is respected and provided in API requests - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.1.0-next.0 - - @backstage/core-components@0.9.6-next.0 - - @backstage/plugin-catalog-react@1.1.2-next.0 - -## 0.4.0 - -### Minor Changes - -- b157c2eb1c: **Breaking**: Use identityApi to provide auth token for pagerduty API calls. - -### Patch Changes - -- 76bf6400fe: Fix alert that was not showing after creating an incident. -- 8f7b1835df: Updated dependency `msw` to `^0.41.0`. -- Updated dependencies - - @backstage/plugin-catalog-react@1.1.1 - - @backstage/core-components@0.9.5 - - @backstage/core-plugin-api@1.0.3 - - @backstage/catalog-model@1.0.3 - -## 0.4.0-next.2 - -### Minor Changes - -- b157c2eb1c: **Breaking**: Use identityApi to provide auth token for pagerduty API calls. - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.9.5-next.2 - -## 0.3.33-next.1 - -### Patch Changes - -- 8f7b1835df: Updated dependency `msw` to `^0.41.0`. -- Updated dependencies - - @backstage/core-components@0.9.5-next.1 - - @backstage/core-plugin-api@1.0.3-next.0 - - @backstage/catalog-model@1.0.3-next.0 - - @backstage/plugin-catalog-react@1.1.1-next.1 - -## 0.3.33-next.0 - -### Patch Changes - -- 76bf6400fe: Fix alert that was not showing after creating an incident. -- Updated dependencies - - @backstage/plugin-catalog-react@1.1.1-next.0 - - @backstage/core-components@0.9.5-next.0 - -## 0.3.32 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.9.4 - - @backstage/core-plugin-api@1.0.2 - - @backstage/plugin-catalog-react@1.1.0 - - @backstage/catalog-model@1.0.2 - -## 0.3.32-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.9.4-next.1 - - @backstage/plugin-catalog-react@1.1.0-next.2 - - @backstage/catalog-model@1.0.2-next.0 - - @backstage/core-plugin-api@1.0.2-next.1 - -## 0.3.32-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.9.4-next.0 - - @backstage/core-plugin-api@1.0.2-next.0 - - @backstage/plugin-catalog-react@1.1.0-next.1 - -## 0.3.32-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@1.1.0-next.0 - -## 0.3.31 - -### Patch Changes - -- 24254fd433: build(deps): bump `@testing-library/user-event` from 13.5.0 to 14.0.0 -- 230ad0826f: Bump to using `@types/node` v16 -- Updated dependencies - - @backstage/plugin-catalog-react@1.0.1 - - @backstage/catalog-model@1.0.1 - - @backstage/core-components@0.9.3 - - @backstage/core-plugin-api@1.0.1 - -## 0.3.31-next.1 - -### Patch Changes - -- 24254fd433: build(deps): bump `@testing-library/user-event` from 13.5.0 to 14.0.0 -- 230ad0826f: Bump to using `@types/node` v16 -- Updated dependencies - - @backstage/core-components@0.9.3-next.2 - - @backstage/core-plugin-api@1.0.1-next.0 - - @backstage/plugin-catalog-react@1.0.1-next.3 - -## 0.3.31-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.0.1-next.0 - - @backstage/plugin-catalog-react@1.0.1-next.0 - - @backstage/core-components@0.9.3-next.0 - -## 0.3.30 - -### Patch Changes - -- a422d7ce5e: chore(deps): bump `@testing-library/react` from 11.2.6 to 12.1.3 -- Updated dependencies - - @backstage/core-components@0.9.2 - - @backstage/core-plugin-api@1.0.0 - - @backstage/plugin-catalog-react@1.0.0 - - @backstage/catalog-model@1.0.0 - -## 0.3.29 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@0.9.0 - - @backstage/core-components@0.9.1 - - @backstage/catalog-model@0.13.0 - -## 0.3.29-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@0.9.0-next.0 - - @backstage/core-components@0.9.1-next.0 - - @backstage/catalog-model@0.13.0-next.0 - -## 0.3.28 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@0.12.0 - - @backstage/core-components@0.9.0 - - @backstage/plugin-catalog-react@0.8.0 - - @backstage/core-plugin-api@0.8.0 - -## 0.3.27 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.8.10 - - @backstage/plugin-catalog-react@0.7.0 - - @backstage/catalog-model@0.11.0 - - @backstage/core-plugin-api@0.7.0 - -## 0.3.26 - -### Patch Changes - -- 1ed305728b: Bump `node-fetch` to version 2.6.7 and `cross-fetch` to version 3.1.5 -- c77c5c7eb6: Added `backstage.role` to `package.json` -- edeeac7e9d: Switch `luxon` dependency range to be `^2.0.2` rather than `2.0.2`. -- 7aeb491394: Replace use of deprecated `ENTITY_DEFAULT_NAMESPACE` constant with `DEFAULT_NAMESPACE`. -- Updated dependencies - - @backstage/core-components@0.8.9 - - @backstage/core-plugin-api@0.6.1 - - @backstage/plugin-catalog-react@0.6.15 - - @backstage/catalog-model@0.10.0 - - @backstage/theme@0.2.15 - -## 0.3.25 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.8.8 - - @backstage/plugin-catalog-react@0.6.14 - -## 0.3.25-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.8.8-next.0 - - @backstage/plugin-catalog-react@0.6.14-next.0 - -## 0.3.24 - -### Patch Changes - -- 5a459626bc: Fix change events tab error when change events exist -- Updated dependencies - - @backstage/core-components@0.8.7 - - @backstage/plugin-catalog-react@0.6.13 - -## 0.3.24-next.0 - -### Patch Changes - -- 5a459626bc: Fix change events tab error when change events exist -- Updated dependencies - - @backstage/core-components@0.8.7-next.0 - - @backstage/plugin-catalog-react@0.6.13-next.0 - -## 0.3.23 - -### Patch Changes - -- 51fbedc445: Migrated usage of deprecated `IdentityApi` methods. -- 013301e07b: Remove redundant `node-fetch` dependency -- Updated dependencies - - @backstage/core-components@0.8.5 - - @backstage/core-plugin-api@0.6.0 - - @backstage/plugin-catalog-react@0.6.12 - - @backstage/catalog-model@0.9.10 - -## 0.3.23-next.0 - -### Patch Changes - -- 51fbedc445: Migrated usage of deprecated `IdentityApi` methods. -- 013301e07b: Remove redundant `node-fetch` dependency -- Updated dependencies - - @backstage/core-components@0.8.5-next.0 - - @backstage/core-plugin-api@0.6.0-next.0 - - @backstage/plugin-catalog-react@0.6.12-next.0 - - @backstage/catalog-model@0.9.10-next.0 - -## 0.3.22 - -### Patch Changes - -- 7612e2856b: Clean up emptystate.svg image, removing wrong white artifact from the background -- Updated dependencies - - @backstage/core-components@0.8.4 - - @backstage/core-plugin-api@0.5.0 - - @backstage/plugin-catalog-react@0.6.11 - - @backstage/catalog-model@0.9.9 - -## 0.3.21 - -### Patch Changes - -- 4ce51ab0f1: Internal refactor of the `react-use` imports to use `react-use/lib/*` instead. -- Updated dependencies - - @backstage/core-plugin-api@0.4.1 - - @backstage/plugin-catalog-react@0.6.10 - - @backstage/core-components@0.8.3 - -## 0.3.20 - -### Patch Changes - -- Updated dependencies - - @backstage/core-plugin-api@0.4.0 - - @backstage/plugin-catalog-react@0.6.8 - - @backstage/core-components@0.8.2 - -## 0.3.19 - -### Patch Changes - -- cd450844f6: Moved React dependencies to `peerDependencies` and allow both React v16 and v17 to be used. -- dcd1a0c3f4: Minor improvement to the API reports, by not unpacking arguments directly -- Updated dependencies - - @backstage/core-components@0.8.0 - - @backstage/core-plugin-api@0.3.0 - - @backstage/plugin-catalog-react@0.6.5 - -## 0.3.18 - -### Patch Changes - -- a125278b81: Refactor out the deprecated path and icon from RouteRefs -- Updated dependencies - - @backstage/catalog-model@0.9.7 - - @backstage/plugin-catalog-react@0.6.4 - - @backstage/core-components@0.7.4 - - @backstage/core-plugin-api@0.2.0 - -## 0.3.17 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@0.6.0 - - @backstage/core-components@0.7.0 - - @backstage/theme@0.2.11 - -## 0.3.16 - -### Patch Changes - -- 81a41ec249: Added a `name` key to all extensions in order to improve Analytics API metadata. -- Updated dependencies - - @backstage/core-components@0.6.1 - - @backstage/core-plugin-api@0.1.10 - - @backstage/plugin-catalog-react@0.5.2 - - @backstage/catalog-model@0.9.4 - -## 0.3.15 - -### Patch Changes - -- Updated dependencies - - @backstage/core-plugin-api@0.1.9 - - @backstage/core-components@0.6.0 - - @backstage/plugin-catalog-react@0.5.1 - -## 0.3.14 - -### Patch Changes - -- Updated dependencies - - @backstage/core-components@0.5.0 - - @backstage/plugin-catalog-react@0.5.0 - - @backstage/catalog-model@0.9.3 - -## 0.3.13 - -### Patch Changes - -- 9f1362dcc1: Upgrade `@material-ui/lab` to `4.0.0-alpha.57`. -- Updated dependencies - - @backstage/core-components@0.4.2 - - @backstage/plugin-catalog-react@0.4.6 - - @backstage/core-plugin-api@0.1.8 - -## 0.3.12 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@0.4.5 - - @backstage/core-components@0.4.0 - - @backstage/catalog-model@0.9.1 - -## 0.3.11 - -### Patch Changes - -- 8bedb75ae: Update Luxon dependency to 2.x -- 56c773909: Switched `@types/react` dependency to request `*` rather than a specific version. -- Updated dependencies - - @backstage/core-components@0.3.1 - - @backstage/core-plugin-api@0.1.6 - - @backstage/plugin-catalog-react@0.4.2 - -## 0.3.10 - -### Patch Changes - -- 260c053b9: Fix All Material UI Warnings -- Updated dependencies - - @backstage/core-components@0.3.0 - - @backstage/core-plugin-api@0.1.5 - - @backstage/plugin-catalog-react@0.4.1 - -## 0.3.9 - -### Patch Changes - -- 9d40fcb1e: - Bumping `material-ui/core` version to at least `4.12.2` as they made some breaking changes in later versions which broke `Pagination` of the `Table`. - - Switching out `material-table` to `@material-table/core` for support for the later versions of `material-ui/core` - - This causes a minor API change to `@backstage/core-components` as the interface for `Table` re-exports the `prop` from the underlying `Table` components. - - `onChangeRowsPerPage` has been renamed to `onRowsPerPageChange` - - `onChangePage` has been renamed to `onPageChange` - - Migration guide is here: https://material-table-core.com/docs/breaking-changes -- Updated dependencies - - @backstage/core-components@0.2.0 - - @backstage/plugin-catalog-react@0.4.0 - - @backstage/core-plugin-api@0.1.4 - - @backstage/theme@0.2.9 - -## 0.3.8 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-react@0.3.0 - -## 0.3.7 - -### Patch Changes - -- d1bd7bb82: Update README -- Updated dependencies - - @backstage/core-components@0.1.5 - - @backstage/catalog-model@0.9.0 - - @backstage/plugin-catalog-react@0.2.6 - -## 0.3.6 - -### Patch Changes - -- 48c9fcd33: Migrated to use the new `@backstage/core-*` packages rather than `@backstage/core`. -- Updated dependencies - - @backstage/core-plugin-api@0.1.3 - - @backstage/catalog-model@0.8.4 - - @backstage/plugin-catalog-react@0.2.4 - -## 0.3.5 - -### Patch Changes - -- Updated dependencies [add62a455] -- Updated dependencies [cc592248b] -- Updated dependencies [17c497b81] -- Updated dependencies [704875e26] - - @backstage/catalog-model@0.8.0 - - @backstage/core@0.7.11 - - @backstage/plugin-catalog-react@0.2.0 - -## 0.3.4 - -### Patch Changes - -- 062bbf90f: chore: bump `@testing-library/user-event` from 12.8.3 to 13.1.8 -- 675a569a9: chore: bump `react-use` dependency in all packages -- Updated dependencies [062bbf90f] -- Updated dependencies [10c008a3a] -- Updated dependencies [889d89b6e] -- Updated dependencies [16be1d093] -- Updated dependencies [3f988cb63] -- Updated dependencies [675a569a9] - - @backstage/core@0.7.9 - - @backstage/plugin-catalog-react@0.1.6 - - @backstage/catalog-model@0.7.9 - -## 0.3.3 - -### Patch Changes - -- c614ede9a: Updated README to have up-to-date install instructions. -- Updated dependencies [9afcac5af] -- Updated dependencies [e0c9ed759] -- Updated dependencies [6eaecbd81] - - @backstage/core@0.7.7 - -## 0.3.2 - -### Patch Changes - -- 4c049a1a1: - Adds onClick and other props to IconLinkVertical; - - - Allows TriggerButton component to render when pager duty key is missing; - - Refactors TriggerButton and PagerDutyCard not to have shared state; - - Removes the `action` prop of the IconLinkVertical component while adding `onClick`. - - Instead of having an action including a button with onClick, now the whole component can be clickable making it easier to implement and having a better UX. - - Before: - - ```ts - const myLink: IconLinkVerticalProps = { - label: 'Click me', - action: - } - /> -); diff --git a/plugins/pagerduty/src/components/Errors/ServiceNotFoundError.tsx b/plugins/pagerduty/src/components/Errors/ServiceNotFoundError.tsx deleted file mode 100644 index ba53e6d219..0000000000 --- a/plugins/pagerduty/src/components/Errors/ServiceNotFoundError.tsx +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import React from 'react'; -import Button from '@material-ui/core/Button'; -import { EmptyState } from '@backstage/core-components'; - -export const ServiceNotFoundError = () => ( - - Read More - - } - /> -); diff --git a/plugins/pagerduty/src/components/Errors/index.ts b/plugins/pagerduty/src/components/Errors/index.ts deleted file mode 100644 index 6c35e0bfd1..0000000000 --- a/plugins/pagerduty/src/components/Errors/index.ts +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export { MissingTokenError } from './MissingTokenError'; -export { ServiceNotFoundError } from './ServiceNotFoundError'; diff --git a/plugins/pagerduty/src/components/Escalation/Escalation.test.tsx b/plugins/pagerduty/src/components/Escalation/Escalation.test.tsx deleted file mode 100644 index 5e780f3fa0..0000000000 --- a/plugins/pagerduty/src/components/Escalation/Escalation.test.tsx +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import React from 'react'; -import { screen, waitFor } from '@testing-library/react'; -import { EscalationPolicy } from './EscalationPolicy'; -import { TestApiRegistry, renderInTestApp } from '@backstage/test-utils'; -import { PagerDutyUser } from '../types'; -import { pagerDutyApiRef } from '../../api'; -import { ApiProvider } from '@backstage/core-app-api'; - -const mockPagerDutyApi = { - getOnCallByPolicyId: jest.fn(), -}; -const apis = TestApiRegistry.from([pagerDutyApiRef, mockPagerDutyApi]); - -describe('Escalation', () => { - it('Handles an empty response', async () => { - mockPagerDutyApi.getOnCallByPolicyId = jest - .fn() - .mockImplementationOnce(async () => ({ oncalls: [] })); - - await renderInTestApp( - - - , - ); - await waitFor(() => !screen.queryByTestId('progress')); - - expect(screen.getByText('Empty escalation policy')).toBeInTheDocument(); - expect(mockPagerDutyApi.getOnCallByPolicyId).toHaveBeenCalledWith('456'); - }); - - it('Render a list of users', async () => { - mockPagerDutyApi.getOnCallByPolicyId = jest - .fn() - .mockImplementationOnce(async () => ({ - oncalls: [ - { - user: { - name: 'person1', - id: 'p1', - summary: 'person1', - email: 'person1@example.com', - html_url: 'http://a.com/id1', - } as PagerDutyUser, - }, - ], - })); - - await renderInTestApp( - - - , - ); - await waitFor(() => !screen.queryByTestId('progress')); - - expect(screen.getByText('person1')).toBeInTheDocument(); - expect(screen.getByText('person1@example.com')).toBeInTheDocument(); - expect(mockPagerDutyApi.getOnCallByPolicyId).toHaveBeenCalledWith('abc'); - }); - - it('Handles errors', async () => { - mockPagerDutyApi.getOnCallByPolicyId = jest - .fn() - .mockRejectedValueOnce(new Error('Error message')); - - await renderInTestApp( - - - , - ); - await waitFor(() => !screen.queryByTestId('progress')); - - expect( - screen.getByText( - 'Error encountered while fetching information. Error message', - ), - ).toBeInTheDocument(); - }); -}); diff --git a/plugins/pagerduty/src/components/Escalation/EscalationPolicy.tsx b/plugins/pagerduty/src/components/Escalation/EscalationPolicy.tsx deleted file mode 100644 index 4b4f1fc99d..0000000000 --- a/plugins/pagerduty/src/components/Escalation/EscalationPolicy.tsx +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import React from 'react'; -import List from '@material-ui/core/List'; -import ListSubheader from '@material-ui/core/ListSubheader'; -import { EscalationUsersEmptyState } from './EscalationUsersEmptyState'; -import { EscalationUser } from './EscalationUser'; -import useAsync from 'react-use/esm/useAsync'; -import { pagerDutyApiRef } from '../../api'; -import Alert from '@material-ui/lab/Alert'; - -import { useApi } from '@backstage/core-plugin-api'; -import { Progress } from '@backstage/core-components'; - -type Props = { - policyId: string; -}; - -export const EscalationPolicy = ({ policyId }: Props) => { - const api = useApi(pagerDutyApiRef); - - const { - value: users, - loading, - error, - } = useAsync(async () => { - const { oncalls } = await api.getOnCallByPolicyId(policyId); - const usersItem = oncalls - .sort((a, b) => a.escalation_level - b.escalation_level) - .map(oncall => oncall.user); - - return usersItem; - }); - - if (error) { - return ( - - Error encountered while fetching information. {error.message} - - ); - } - - if (loading) { - return ; - } - - if (!users?.length) { - return ; - } - - return ( - ON CALL}> - {users!.map((user, index) => ( - - ))} - - ); -}; diff --git a/plugins/pagerduty/src/components/Escalation/EscalationUser.tsx b/plugins/pagerduty/src/components/Escalation/EscalationUser.tsx deleted file mode 100644 index 41d507b1d4..0000000000 --- a/plugins/pagerduty/src/components/Escalation/EscalationUser.tsx +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import React from 'react'; -import ListItem from '@material-ui/core/ListItem'; -import ListItemIcon from '@material-ui/core/ListItemIcon'; -import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; -import Tooltip from '@material-ui/core/Tooltip'; -import ListItemText from '@material-ui/core/ListItemText'; -import IconButton from '@material-ui/core/IconButton'; -import Typography from '@material-ui/core/Typography'; -import { makeStyles } from '@material-ui/core/styles'; -import Avatar from '@material-ui/core/Avatar'; -import EmailIcon from '@material-ui/icons/Email'; -import OpenInBrowserIcon from '@material-ui/icons/OpenInBrowser'; -import { PagerDutyUser } from '../types'; - -const useStyles = makeStyles({ - listItemPrimary: { - fontWeight: 'bold', - }, -}); - -type Props = { - user: PagerDutyUser; -}; - -export const EscalationUser = ({ user }: Props) => { - const classes = useStyles(); - - return ( - - - - - - {user.name} - - } - secondary={user.email} - /> - - - - - - - - - - - - - - ); -}; diff --git a/plugins/pagerduty/src/components/Escalation/EscalationUsersEmptyState.tsx b/plugins/pagerduty/src/components/Escalation/EscalationUsersEmptyState.tsx deleted file mode 100644 index 8a32069a50..0000000000 --- a/plugins/pagerduty/src/components/Escalation/EscalationUsersEmptyState.tsx +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import React from 'react'; -import ListItem from '@material-ui/core/ListItem'; -import ListItemIcon from '@material-ui/core/ListItemIcon'; -import ListItemText from '@material-ui/core/ListItemText'; -import { makeStyles } from '@material-ui/core/styles'; -import { StatusWarning } from '@backstage/core-components'; - -const useStyles = makeStyles({ - denseListIcon: { - marginRight: 0, - display: 'flex', - flexDirection: 'column', - alignItems: 'center', - justifyContent: 'center', - }, -}); - -export const EscalationUsersEmptyState = () => { - const classes = useStyles(); - return ( - - -
- -
-
- -
- ); -}; diff --git a/plugins/pagerduty/src/components/Escalation/index.ts b/plugins/pagerduty/src/components/Escalation/index.ts deleted file mode 100644 index 165ec6690b..0000000000 --- a/plugins/pagerduty/src/components/Escalation/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export { EscalationPolicy } from './EscalationPolicy'; diff --git a/plugins/pagerduty/src/components/HomePagePagerDutyCard/Content.tsx b/plugins/pagerduty/src/components/HomePagePagerDutyCard/Content.tsx deleted file mode 100644 index b665a6c294..0000000000 --- a/plugins/pagerduty/src/components/HomePagePagerDutyCard/Content.tsx +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import React from 'react'; - -import { PagerDutyEntity } from '../../types'; -import { PagerDutyCard } from '../PagerDutyCard'; - -/** @public */ -export type HomePagePagerDutyCardProps = PagerDutyEntity & { - readOnly?: boolean; -}; - -/** @public */ -export const Content = (props: HomePagePagerDutyCardProps) => { - return ; -}; diff --git a/plugins/pagerduty/src/components/HomePagePagerDutyCard/index.ts b/plugins/pagerduty/src/components/HomePagePagerDutyCard/index.ts deleted file mode 100644 index e9038852a6..0000000000 --- a/plugins/pagerduty/src/components/HomePagePagerDutyCard/index.ts +++ /dev/null @@ -1,17 +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. - */ -export { Content } from './Content'; -export type { HomePagePagerDutyCardProps } from './Content'; diff --git a/plugins/pagerduty/src/components/Incident/IncidentEmptyState.tsx b/plugins/pagerduty/src/components/Incident/IncidentEmptyState.tsx deleted file mode 100644 index 181ff6ad84..0000000000 --- a/plugins/pagerduty/src/components/Incident/IncidentEmptyState.tsx +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import React from 'react'; -import Grid from '@material-ui/core/Grid'; -import Typography from '@material-ui/core/Typography'; -import EmptyStateImage from '../../assets/emptystate.svg'; - -export const IncidentsEmptyState = () => { - return ( - - - Nice! No incidents found! - - - EmptyState - - - ); -}; diff --git a/plugins/pagerduty/src/components/Incident/IncidentListItem.tsx b/plugins/pagerduty/src/components/Incident/IncidentListItem.tsx deleted file mode 100644 index 9c524dd266..0000000000 --- a/plugins/pagerduty/src/components/Incident/IncidentListItem.tsx +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import React from 'react'; -import ListItem from '@material-ui/core/ListItem'; -import ListItemSecondaryAction from '@material-ui/core/ListItemSecondaryAction'; -import Tooltip from '@material-ui/core/Tooltip'; -import ListItemText from '@material-ui/core/ListItemText'; -import IconButton from '@material-ui/core/IconButton'; -import Typography from '@material-ui/core/Typography'; -import Chip from '@material-ui/core/Chip'; -import { makeStyles } from '@material-ui/core/styles'; -import Done from '@material-ui/icons/Done'; -import Warning from '@material-ui/icons/Warning'; -import { DateTime, Duration } from 'luxon'; -import { PagerDutyIncident } from '../types'; -import OpenInBrowserIcon from '@material-ui/icons/OpenInBrowser'; -import { Link } from '@backstage/core-components'; - -const useStyles = makeStyles(theme => ({ - denseListIcon: { - marginRight: 0, - display: 'flex', - flexDirection: 'column', - alignItems: 'center', - justifyContent: 'center', - }, - listItemPrimary: { - fontWeight: 'bold', - }, - warning: { - borderColor: theme.palette.status.warning, - color: theme.palette.status.warning, - '& *': { - color: theme.palette.status.warning, - }, - }, - error: { - borderColor: theme.palette.status.error, - color: theme.palette.status.error, - '& *': { - color: theme.palette.status.error, - }, - }, -})); - -type Props = { - incident: PagerDutyIncident; -}; - -export const IncidentListItem = ({ incident }: Props) => { - const classes = useStyles(); - const duration = - new Date().getTime() - new Date(incident.created_at).getTime(); - const createdAt = DateTime.local() - .minus(Duration.fromMillis(duration)) - .toRelative({ locale: 'en' }); - const user = incident.assignments[0]?.assignee; - - return ( - - - : } - className={ - incident.status === 'triggered' - ? classes.error - : classes.warning - } - /> - {incident.title} - - } - primaryTypographyProps={{ - variant: 'body1', - className: classes.listItemPrimary, - }} - secondary={ - - Created {createdAt} and assigned to{' '} - {user?.summary ?? 'nobody'} - - } - /> - - - - - - - - - ); -}; diff --git a/plugins/pagerduty/src/components/Incident/Incidents.test.tsx b/plugins/pagerduty/src/components/Incident/Incidents.test.tsx deleted file mode 100644 index f10f48e059..0000000000 --- a/plugins/pagerduty/src/components/Incident/Incidents.test.tsx +++ /dev/null @@ -1,123 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import React from 'react'; -import { screen, waitFor } from '@testing-library/react'; -import { Incidents } from './Incidents'; -import { TestApiRegistry, renderInTestApp } from '@backstage/test-utils'; -import { pagerDutyApiRef } from '../../api'; -import { PagerDutyIncident } from '../types'; -import { ApiProvider } from '@backstage/core-app-api'; - -const mockPagerDutyApi = { - getIncidentsByServiceId: jest.fn(), -}; -const apis = TestApiRegistry.from([pagerDutyApiRef, mockPagerDutyApi]); - -describe('Incidents', () => { - it('Renders an empty state when there are no incidents', async () => { - mockPagerDutyApi.getIncidentsByServiceId = jest - .fn() - .mockImplementationOnce(async () => ({ incidents: [] })); - - await renderInTestApp( - - - , - ); - await waitFor(() => !screen.queryByTestId('progress')); - expect(screen.getByText('Nice! No incidents found!')).toBeInTheDocument(); - }); - - it('Renders all incidents', async () => { - mockPagerDutyApi.getIncidentsByServiceId = jest - .fn() - .mockImplementationOnce(async () => ({ - incidents: [ - { - id: 'id1', - status: 'triggered', - title: 'title1', - created_at: '2020-11-06T00:00:00Z', - assignments: [ - { - assignee: { - id: 'p1', - summary: 'person1', - html_url: 'http://a.com/id1', - }, - }, - ], - html_url: 'http://a.com/id1', - serviceId: 'sId1', - }, - { - id: 'id2', - status: 'acknowledged', - title: 'title2', - created_at: '2020-11-07T00:00:00Z', - assignments: [ - { - assignee: { - id: 'p2', - summary: 'person2', - - html_url: 'http://a.com/id2', - }, - }, - ], - html_url: 'http://a.com/id2', - serviceId: 'sId2', - }, - ] as PagerDutyIncident[], - })); - await renderInTestApp( - - - , - ); - await waitFor(() => !screen.queryByTestId('progress')); - expect(screen.getByText('title1')).toBeInTheDocument(); - expect(screen.getByText('title2')).toBeInTheDocument(); - expect(screen.getByText('person1')).toBeInTheDocument(); - expect(screen.getByText('person2')).toBeInTheDocument(); - expect(screen.getByText('triggered')).toBeInTheDocument(); - expect(screen.getByText('acknowledged')).toBeInTheDocument(); - expect(screen.getByTestId('chip-triggered')).toBeInTheDocument(); - expect(screen.getByTestId('chip-acknowledged')).toBeInTheDocument(); - - // assert links, mailto and hrefs, date calculation - expect(screen.getAllByTitle('View in PagerDuty').length).toEqual(2); - }); - - it('Handle errors', async () => { - mockPagerDutyApi.getIncidentsByServiceId = jest - .fn() - .mockRejectedValueOnce(new Error('Error occurred')); - - await renderInTestApp( - - - , - ); - await waitFor(() => !screen.queryByTestId('progress')); - expect( - screen.getByText( - 'Error encountered while fetching information. Error occurred', - ), - ).toBeInTheDocument(); - }); -}); diff --git a/plugins/pagerduty/src/components/Incident/Incidents.tsx b/plugins/pagerduty/src/components/Incident/Incidents.tsx deleted file mode 100644 index 3a9cfeb443..0000000000 --- a/plugins/pagerduty/src/components/Incident/Incidents.tsx +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import React, { useEffect } from 'react'; -import List from '@material-ui/core/List'; -import ListSubheader from '@material-ui/core/ListSubheader'; -import { IncidentListItem } from './IncidentListItem'; -import { IncidentsEmptyState } from './IncidentEmptyState'; -import useAsyncFn from 'react-use/esm/useAsyncFn'; -import { pagerDutyApiRef } from '../../api'; -import Alert from '@material-ui/lab/Alert'; - -import { useApi } from '@backstage/core-plugin-api'; -import { Progress } from '@backstage/core-components'; - -type Props = { - serviceId: string; - refreshIncidents: boolean; -}; - -export const Incidents = ({ serviceId, refreshIncidents }: Props) => { - const api = useApi(pagerDutyApiRef); - - const [{ value: incidents, loading, error }, getIncidents] = useAsyncFn( - async () => { - const { incidents: foundIncidents } = await api.getIncidentsByServiceId( - serviceId, - ); - return foundIncidents; - }, - ); - - useEffect(() => { - getIncidents(); - }, [refreshIncidents, getIncidents]); - - if (error) { - return ( - - Error encountered while fetching information. {error.message} - - ); - } - - if (loading) { - return ; - } - - if (!incidents?.length) { - return ; - } - - return ( - INCIDENTS}> - {incidents!.map((incident, index) => ( - - ))} - - ); -}; diff --git a/plugins/pagerduty/src/components/Incident/index.ts b/plugins/pagerduty/src/components/Incident/index.ts deleted file mode 100644 index 3729de6e01..0000000000 --- a/plugins/pagerduty/src/components/Incident/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export { Incidents } from './Incidents'; diff --git a/plugins/pagerduty/src/components/PagerDutyCard/PagerDutyCard.test.tsx b/plugins/pagerduty/src/components/PagerDutyCard/PagerDutyCard.test.tsx deleted file mode 100644 index b1f525bcfa..0000000000 --- a/plugins/pagerduty/src/components/PagerDutyCard/PagerDutyCard.test.tsx +++ /dev/null @@ -1,289 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import React from 'react'; -import { screen, waitFor, fireEvent, act } from '@testing-library/react'; -import { PagerDutyCard } from './PagerDutyCard'; -import { NotFoundError } from '@backstage/errors'; -import { TestApiRegistry, renderInTestApp } from '@backstage/test-utils'; -import { pagerDutyApiRef, UnauthorizedError, PagerDutyClient } from '../../api'; -import { PagerDutyService, PagerDutyUser } from '../types'; - -import { alertApiRef } from '@backstage/core-plugin-api'; -import { ApiProvider } from '@backstage/core-app-api'; - -const user: PagerDutyUser = { - name: 'person1', - id: 'p1', - summary: 'person1', - email: 'person1@example.com', - html_url: 'http://a.com/id1', -}; - -const service: PagerDutyService = { - id: 'def456', - name: 'pagerduty-name', - html_url: 'www.example.com', - escalation_policy: { - id: 'def', - user: user, - html_url: 'http://a.com/id1', - }, - integrationKey: 'abc123', -}; - -const mockPagerDutyApi: Partial = { - getServiceByEntity: async () => ({ service }), - getOnCallByPolicyId: async () => ({ oncalls: [] }), - getIncidentsByServiceId: async () => ({ incidents: [] }), -}; - -const apis = TestApiRegistry.from( - [pagerDutyApiRef, mockPagerDutyApi], - [alertApiRef, {}], -); - -describe('PagerDutyCard', () => { - it('Render pagerduty', async () => { - mockPagerDutyApi.getServiceByPagerDutyEntity = jest - .fn() - .mockImplementationOnce(async () => ({ service })); - - await renderInTestApp( - - - , - ); - await waitFor(() => !screen.queryByTestId('progress')); - expect(screen.getByText('Service Directory')).toBeInTheDocument(); - expect(screen.getByText('Create Incident')).toBeInTheDocument(); - expect(screen.getByText('Nice! No incidents found!')).toBeInTheDocument(); - expect(screen.getByText('Empty escalation policy')).toBeInTheDocument(); - }); - - it('Handles custom error for missing token', async () => { - mockPagerDutyApi.getServiceByPagerDutyEntity = jest - .fn() - .mockRejectedValueOnce(new UnauthorizedError()); - - await renderInTestApp( - - - , - ); - await waitFor(() => !screen.queryByTestId('progress')); - expect( - screen.getByText('Missing or invalid PagerDuty Token'), - ).toBeInTheDocument(); - }); - - it('Handles custom NotFoundError', async () => { - mockPagerDutyApi.getServiceByPagerDutyEntity = jest - .fn() - .mockRejectedValueOnce(new NotFoundError()); - - await renderInTestApp( - - - , - ); - await waitFor(() => !screen.queryByTestId('progress')); - expect(screen.getByText('PagerDuty Service Not Found')).toBeInTheDocument(); - }); - - it('handles general error', async () => { - mockPagerDutyApi.getServiceByPagerDutyEntity = jest - .fn() - .mockRejectedValueOnce(new Error('An error occurred')); - await renderInTestApp( - - - , - ); - await waitFor(() => !screen.queryByTestId('progress')); - - expect( - screen.getByText( - 'Error encountered while fetching information. An error occurred', - ), - ).toBeInTheDocument(); - }); - - it('opens the dialog when trigger button is clicked', async () => { - mockPagerDutyApi.getServiceByPagerDutyEntity = jest - .fn() - .mockImplementationOnce(async () => ({ service })); - - await renderInTestApp( - - - , - ); - await waitFor(() => !screen.queryByTestId('progress')); - expect(screen.getByText('Service Directory')).toBeInTheDocument(); - - const triggerLink = screen.getByText('Create Incident'); - await act(async () => { - fireEvent.click(triggerLink); - }); - expect(screen.getByRole('dialog')).toBeInTheDocument(); - }); - - describe('when entity has the pagerduty.com/service-id annotation', () => { - it('Renders PagerDuty service information', async () => { - mockPagerDutyApi.getServiceByPagerDutyEntity = jest - .fn() - .mockImplementationOnce(async () => ({ service })); - - await renderInTestApp( - - - , - ); - await waitFor(() => !screen.queryByTestId('progress')); - expect(screen.getByText('Service Directory')).toBeInTheDocument(); - expect(screen.getByText('Create Incident')).toBeInTheDocument(); - expect(screen.getByText('Nice! No incidents found!')).toBeInTheDocument(); - expect(screen.getByText('Empty escalation policy')).toBeInTheDocument(); - }); - - it('Handles custom error for missing token', async () => { - mockPagerDutyApi.getServiceByPagerDutyEntity = jest - .fn() - .mockRejectedValueOnce(new UnauthorizedError()); - - await renderInTestApp( - - - , - ); - await waitFor(() => !screen.queryByTestId('progress')); - expect( - screen.getByText('Missing or invalid PagerDuty Token'), - ).toBeInTheDocument(); - }); - - it('Handles custom NotFoundError', async () => { - mockPagerDutyApi.getServiceByPagerDutyEntity = jest - .fn() - .mockRejectedValueOnce(new NotFoundError()); - - await renderInTestApp( - - - , - ); - await waitFor(() => !screen.queryByTestId('progress')); - expect( - screen.getByText('PagerDuty Service Not Found'), - ).toBeInTheDocument(); - }); - - it('handles general error', async () => { - mockPagerDutyApi.getServiceByPagerDutyEntity = jest - .fn() - .mockRejectedValueOnce(new Error('An error occurred')); - await renderInTestApp( - - - , - ); - await waitFor(() => !screen.queryByTestId('progress')); - - expect( - screen.getByText( - 'Error encountered while fetching information. An error occurred', - ), - ).toBeInTheDocument(); - }); - - it('disables the Create Incident button', async () => { - mockPagerDutyApi.getServiceByPagerDutyEntity = jest - .fn() - .mockImplementationOnce(async () => ({ service })); - - await renderInTestApp( - - - , - ); - await waitFor(() => !screen.queryByTestId('progress')); - expect( - screen.getByTitle('Must provide an integration-key to create incidents') - .className, - ).toMatch('disabled'); - }); - }); - - describe('when entity has all annotations', () => { - it('queries by integration key', async () => { - mockPagerDutyApi.getServiceByPagerDutyEntity = jest - .fn() - .mockImplementationOnce(async () => ({ service })); - - await renderInTestApp( - - - , - ); - await waitFor(() => !screen.queryByTestId('progress')); - expect(screen.getByText('Service Directory')).toBeInTheDocument(); - expect(screen.getByText('Create Incident')).toBeInTheDocument(); - expect(screen.getByText('Nice! No incidents found!')).toBeInTheDocument(); - expect(screen.getByText('Empty escalation policy')).toBeInTheDocument(); - }); - }); - - describe('when entity has all annotations but the plugin has been configured to be "read only"', () => { - it('queries by integration key but does not render the "Create Incident" button', async () => { - mockPagerDutyApi.getServiceByPagerDutyEntity = jest - .fn() - .mockImplementationOnce(async () => ({ service })); - - await renderInTestApp( - - - , - ); - await waitFor(() => !screen.queryByTestId('progress')); - expect(screen.getByText('Service Directory')).toBeInTheDocument(); - expect(screen.getByText('Nice! No incidents found!')).toBeInTheDocument(); - expect(screen.getByText('Empty escalation policy')).toBeInTheDocument(); - expect(() => screen.getByText('Create Incident')).toThrow(); - }); - }); -}); diff --git a/plugins/pagerduty/src/components/PagerDutyCard/PagerDutyCard.tsx b/plugins/pagerduty/src/components/PagerDutyCard/PagerDutyCard.tsx deleted file mode 100644 index 3e0f0c8793..0000000000 --- a/plugins/pagerduty/src/components/PagerDutyCard/PagerDutyCard.tsx +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import React, { ReactNode, useState, useCallback } from 'react'; -import Card from '@material-ui/core/Card'; -import { TabProps } from '@material-ui/core/Tab'; -import CardHeader from '@material-ui/core/CardHeader'; -import Divider from '@material-ui/core/Divider'; -import CardContent from '@material-ui/core/CardContent'; -import { Incidents } from '../Incident'; -import { EscalationPolicy } from '../Escalation'; -import useAsync from 'react-use/esm/useAsync'; -import Alert from '@material-ui/lab/Alert'; -import { pagerDutyApiRef, UnauthorizedError } from '../../api'; -import AlarmAddIcon from '@material-ui/icons/AlarmAdd'; -import { MissingTokenError, ServiceNotFoundError } from '../Errors'; -import WebIcon from '@material-ui/icons/Web'; -import DateRangeIcon from '@material-ui/icons/DateRange'; -import { TriggerDialog } from '../TriggerDialog'; -import { ChangeEvents } from '../ChangeEvents'; - -import { useApi } from '@backstage/core-plugin-api'; -import { NotFoundError } from '@backstage/errors'; -import { - Progress, - HeaderIconLinkRow, - IconLinkVerticalProps, - TabbedCard, - CardTab, - InfoCard, -} from '@backstage/core-components'; -import { PagerDutyEntity } from '../../types'; - -const BasicCard = ({ children }: { children: ReactNode }) => ( - {children} -); - -/** @public */ -export type PagerDutyCardProps = PagerDutyEntity & { - readOnly?: boolean; - disableChangeEvents?: boolean; -}; - -/** @public */ -export const PagerDutyCard = (props: PagerDutyCardProps) => { - const { readOnly, disableChangeEvents, integrationKey, name } = props; - const api = useApi(pagerDutyApiRef); - const [refreshIncidents, setRefreshIncidents] = useState(false); - const [refreshChangeEvents, setRefreshChangeEvents] = - useState(false); - const [dialogShown, setDialogShown] = useState(false); - - const showDialog = useCallback(() => { - setDialogShown(true); - }, [setDialogShown]); - const hideDialog = useCallback(() => { - setDialogShown(false); - }, [setDialogShown]); - - const handleRefresh = useCallback(() => { - setRefreshIncidents(x => !x); - setRefreshChangeEvents(x => !x); - }, []); - - const { - value: service, - loading, - error, - } = useAsync(async () => { - const { service: foundService } = await api.getServiceByPagerDutyEntity( - props, - ); - - return { - id: foundService.id, - name: foundService.name, - url: foundService.html_url, - policyId: foundService.escalation_policy.id, - policyLink: foundService.escalation_policy.html_url, - }; - }); - - if (error) { - let errorNode: ReactNode; - - switch (error.constructor) { - case UnauthorizedError: - errorNode = ; - break; - case NotFoundError: - errorNode = ; - break; - default: - errorNode = ( - - Error encountered while fetching information. {error.message} - - ); - } - - return {errorNode}; - } - - if (loading) { - return ( - - - - ); - } - - const serviceLink: IconLinkVerticalProps = { - label: 'Service Directory', - href: service!.url, - icon: , - }; - - /** - * In order to create incidents using the REST API, a valid user email address must be present. - * There is no guarantee the current user entity has a valid email association, so instead just - * only allow triggering incidents when an integration key is present. - */ - const createIncidentDisabled = !integrationKey; - const triggerLink: IconLinkVerticalProps = { - label: 'Create Incident', - onClick: showDialog, - icon: , - color: 'secondary', - disabled: createIncidentDisabled, - title: createIncidentDisabled - ? 'Must provide an integration-key to create incidents' - : '', - }; - - const escalationPolicyLink: IconLinkVerticalProps = { - label: 'Escalation Policy', - href: service!.policyLink, - icon: , - }; - - const tabs: React.ReactElement[] = [ - - - , - ]; - - if (disableChangeEvents !== true) { - tabs.push( - - - , - ); - } - - return ( - <> - - - } - /> - - - {...tabs} - - - - {!createIncidentDisabled && ( - - )} - - ); -}; diff --git a/plugins/pagerduty/src/components/PagerDutyCard/index.ts b/plugins/pagerduty/src/components/PagerDutyCard/index.ts deleted file mode 100644 index 4944a9a13d..0000000000 --- a/plugins/pagerduty/src/components/PagerDutyCard/index.ts +++ /dev/null @@ -1,17 +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. - */ - -export { PagerDutyCard, type PagerDutyCardProps } from './PagerDutyCard'; diff --git a/plugins/pagerduty/src/components/TriggerButton/index.test.tsx b/plugins/pagerduty/src/components/TriggerButton/index.test.tsx deleted file mode 100644 index 409f11ec04..0000000000 --- a/plugins/pagerduty/src/components/TriggerButton/index.test.tsx +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import React from 'react'; -import { act, fireEvent, screen, waitFor } from '@testing-library/react'; -import { renderInTestApp, TestApiRegistry } from '@backstage/test-utils'; -import { pagerDutyApiRef } from '../../api'; -import { Entity } from '@backstage/catalog-model'; -import { EntityProvider } from '@backstage/plugin-catalog-react'; -import { TriggerButton } from './'; - -import { ApiProvider } from '@backstage/core-app-api'; -import { alertApiRef } from '@backstage/core-plugin-api'; - -describe('TriggerButton', () => { - const mockTriggerAlarmFn = jest.fn(); - const mockPagerDutyApi = { - triggerAlarm: mockTriggerAlarmFn, - }; - - const apis = TestApiRegistry.from( - [alertApiRef, {}], - [pagerDutyApiRef, mockPagerDutyApi], - ); - - it('renders the trigger button, opens and closes dialog', async () => { - const entity: Entity = { - apiVersion: 'backstage.io/v1alpha1', - kind: 'Component', - metadata: { - name: 'pagerduty-test', - annotations: { - 'pagerduty.com/integration-key': 'abc123', - }, - }, - }; - - await renderInTestApp( - - - - - , - ); - - const triggerButton = screen.getByText('Create Incident'); - expect(screen.queryByRole('dialog')).not.toBeInTheDocument(); - - await act(async () => { - fireEvent.click(triggerButton); - }); - await waitFor(() => { - expect(screen.getByRole('dialog')).toBeInTheDocument(); - }); - - const closeButton = screen.getByText('Close'); - await act(async () => { - fireEvent.click(closeButton); - }); - await waitFor(() => { - expect(screen.queryByRole('dialog')).not.toBeInTheDocument(); - }); - }); - - it('renders the trigger button with children', async () => { - const entity: Entity = { - apiVersion: 'backstage.io/v1alpha1', - kind: 'Component', - metadata: { - name: 'pagerduty-test', - annotations: { - 'pagerduty.com/integration-key': 'abc123', - }, - }, - }; - - await renderInTestApp( - - - Send an alert - - , - ); - - expect(screen.getByText('Send an alert')).toBeInTheDocument(); - }); - - it('renders a disabled trigger button if entity does not include key', async () => { - const entity: Entity = { - apiVersion: 'backstage.io/v1alpha1', - kind: 'Component', - metadata: { - name: 'pagerduty-test', - }, - }; - - await renderInTestApp( - - - - - , - ); - - const triggerButton = screen.getByText('Missing integration key'); - - await act(async () => { - fireEvent.click(triggerButton); - }); - await waitFor(() => { - expect(screen.queryByRole('dialog')).not.toBeInTheDocument(); - }); - }); -}); diff --git a/plugins/pagerduty/src/components/TriggerButton/index.tsx b/plugins/pagerduty/src/components/TriggerButton/index.tsx deleted file mode 100644 index 978489f77c..0000000000 --- a/plugins/pagerduty/src/components/TriggerButton/index.tsx +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2021 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import React, { useCallback, ReactNode, useState } from 'react'; -import Button from '@material-ui/core/Button'; -import { makeStyles } from '@material-ui/core/styles'; -import { usePagerdutyEntity } from '../../hooks'; -import { TriggerDialog } from '../TriggerDialog'; - -const useStyles = makeStyles(theme => ({ - buttonStyle: { - backgroundColor: theme.palette.error.main, - color: theme.palette.error.contrastText, - '&:hover': { - backgroundColor: theme.palette.error.dark, - }, - }, -})); - -/** @public */ -export function TriggerButton(props: { children?: ReactNode }) { - const { buttonStyle } = useStyles(); - const { integrationKey, name } = usePagerdutyEntity(); - const [dialogShown, setDialogShown] = useState(false); - - const showDialog = useCallback(() => { - setDialogShown(true); - }, [setDialogShown]); - const hideDialog = useCallback(() => { - setDialogShown(false); - }, [setDialogShown]); - - const disabled = !integrationKey; - return ( - <> - - {integrationKey && ( - - )} - - ); -} diff --git a/plugins/pagerduty/src/components/TriggerDialog/TriggerDialog.test.tsx b/plugins/pagerduty/src/components/TriggerDialog/TriggerDialog.test.tsx deleted file mode 100644 index 74cd5100fa..0000000000 --- a/plugins/pagerduty/src/components/TriggerDialog/TriggerDialog.test.tsx +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import React from 'react'; -import { fireEvent, act } from '@testing-library/react'; -import { renderInTestApp, TestApiRegistry } from '@backstage/test-utils'; -import { pagerDutyApiRef } from '../../api'; -import { TriggerDialog } from './TriggerDialog'; - -import { ApiProvider } from '@backstage/core-app-api'; -import { - alertApiRef, - IdentityApi, - identityApiRef, -} from '@backstage/core-plugin-api'; - -describe('TriggerDialog', () => { - const mockIdentityApi: Partial = { - getBackstageIdentity: async () => ({ - type: 'user', - userEntityRef: 'user:default/guest', - ownershipEntityRefs: [], - }), - }; - - const mockTriggerAlarmFn = jest.fn(); - const mockPagerDutyApi = { - triggerAlarm: mockTriggerAlarmFn, - }; - - const apis = TestApiRegistry.from( - [alertApiRef, {}], - [identityApiRef, mockIdentityApi], - [pagerDutyApiRef, mockPagerDutyApi], - ); - - it('open the dialog and trigger an alarm', async () => { - const { getByText, getByRole, getByTestId } = await renderInTestApp( - - {}} - onIncidentCreated={() => {}} - /> - , - ); - - expect(getByRole('dialog')).toBeInTheDocument(); - expect( - getByText('This action will trigger an incident for ', { - exact: false, - }), - ).toBeInTheDocument(); - const input = getByTestId('trigger-input'); - const description = 'Test Trigger Alarm'; - await act(async () => { - fireEvent.change(input, { target: { value: description } }); - }); - const triggerButton = getByTestId('trigger-button'); - await act(async () => { - fireEvent.click(triggerButton); - }); - expect(mockTriggerAlarmFn).toHaveBeenCalled(); - expect(mockTriggerAlarmFn).toHaveBeenCalledWith({ - integrationKey: 'abc123', - source: window.location.toString(), - description, - userName: 'guest', - }); - }); -}); diff --git a/plugins/pagerduty/src/components/TriggerDialog/TriggerDialog.tsx b/plugins/pagerduty/src/components/TriggerDialog/TriggerDialog.tsx deleted file mode 100644 index dc74f34d76..0000000000 --- a/plugins/pagerduty/src/components/TriggerDialog/TriggerDialog.tsx +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import React, { useState, useEffect } from 'react'; -import Dialog from '@material-ui/core/Dialog'; -import DialogTitle from '@material-ui/core/DialogTitle'; -import TextField from '@material-ui/core/TextField'; -import DialogActions from '@material-ui/core/DialogActions'; -import Button from '@material-ui/core/Button'; -import DialogContent from '@material-ui/core/DialogContent'; -import Typography from '@material-ui/core/Typography'; -import CircularProgress from '@material-ui/core/CircularProgress'; -import useAsyncFn from 'react-use/esm/useAsyncFn'; -import { pagerDutyApiRef } from '../../api'; -import Alert from '@material-ui/lab/Alert'; -import { - useApi, - alertApiRef, - identityApiRef, -} from '@backstage/core-plugin-api'; -import { DEFAULT_NAMESPACE, parseEntityRef } from '@backstage/catalog-model'; - -type Props = { - showDialog: boolean; - handleDialog: () => void; - onIncidentCreated?: () => void; - name: string; - integrationKey: string; -}; - -export const TriggerDialog = ({ - showDialog, - handleDialog, - onIncidentCreated: onIncidentCreated, - name, - integrationKey, -}: Props) => { - const alertApi = useApi(alertApiRef); - const identityApi = useApi(identityApiRef); - const api = useApi(pagerDutyApiRef); - const [description, setDescription] = useState(''); - - const [{ value, loading, error }, handleTriggerAlarm] = useAsyncFn( - async (descriptions: string) => { - const { userEntityRef } = await identityApi.getBackstageIdentity(); - const { name: userName } = parseEntityRef(userEntityRef, { - defaultKind: 'User', - defaultNamespace: DEFAULT_NAMESPACE, - }); - return await api.triggerAlarm({ - integrationKey: integrationKey as string, - source: window.location.toString(), - description: descriptions, - userName, - }); - }, - ); - - const descriptionChanged = ( - event: React.ChangeEvent, - ) => { - setDescription(event.target.value); - }; - - useEffect(() => { - if (value) { - (async () => { - alertApi.post({ - message: `Alarm successfully triggered`, - }); - - handleDialog(); - - // The pager duty API isn't always returning the newly created alarm immediately - await new Promise(resolve => setTimeout(resolve, 1000)); - onIncidentCreated?.(); - })(); - } - }, [value, alertApi, handleDialog, onIncidentCreated]); - - if (error) { - alertApi.post({ - message: `Failed to trigger alarm. ${error.message}`, - severity: 'error', - }); - } - - return ( - - - This action will trigger an incident for "{name}". - - - - - If the issue you are seeing does not need urgent attention, please - get in touch with the responsible team using their preferred - communications channel. You can find information about the owner of - this entity in the "About" card. If the issue is urgent, please - don't hesitate to trigger the alert. - - - - Please describe the problem you want to report. Be as descriptive as - possible. Your signed in user and a reference to the current page will - automatically be amended to the alarm so that the receiver can reach - out to you if necessary. - - - - - - - - - ); -}; diff --git a/plugins/pagerduty/src/components/TriggerDialog/index.ts b/plugins/pagerduty/src/components/TriggerDialog/index.ts deleted file mode 100644 index 5c48cce7ed..0000000000 --- a/plugins/pagerduty/src/components/TriggerDialog/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export { TriggerDialog } from './TriggerDialog'; diff --git a/plugins/pagerduty/src/components/constants.ts b/plugins/pagerduty/src/components/constants.ts deleted file mode 100644 index 01308590f1..0000000000 --- a/plugins/pagerduty/src/components/constants.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2021 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -export const PAGERDUTY_INTEGRATION_KEY = 'pagerduty.com/integration-key'; -export const PAGERDUTY_SERVICE_ID = 'pagerduty.com/service-id'; diff --git a/plugins/pagerduty/src/components/index.ts b/plugins/pagerduty/src/components/index.ts deleted file mode 100644 index 264d7195e9..0000000000 --- a/plugins/pagerduty/src/components/index.ts +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -export type { - PagerDutyChangeEvent, - PagerDutyIncident, - PagerDutyService, - PagerDutyOnCall, - PagerDutyAssignee, - PagerDutyUser, -} from './types'; - -export type { EntityPagerDutyCardProps } from './EntityPagerDutyCard'; -export type { HomePagePagerDutyCardProps } from './HomePagePagerDutyCard'; - -export { - isPluginApplicableToEntity, - isPluginApplicableToEntity as isPagerDutyAvailable, - EntityPagerDutyCard, -} from './EntityPagerDutyCard'; - -export { TriggerButton } from './TriggerButton'; diff --git a/plugins/pagerduty/src/components/pagerDutyEntity.test.ts b/plugins/pagerduty/src/components/pagerDutyEntity.test.ts deleted file mode 100644 index cf551d3d6e..0000000000 --- a/plugins/pagerduty/src/components/pagerDutyEntity.test.ts +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { Entity } from '@backstage/catalog-model'; -import { getPagerDutyEntity } from './pagerDutyEntity'; - -const entity: Entity = { - apiVersion: 'backstage.io/v1alpha1', - kind: 'Component', - metadata: { - name: 'pagerduty-test', - annotations: { - 'pagerduty.com/integration-key': 'abc123', - }, - }, -}; - -const entityWithoutAnnotations: Entity = { - apiVersion: 'backstage.io/v1alpha1', - kind: 'Component', - metadata: { - name: 'pagerduty-test', - annotations: {}, - }, -}; - -const entityWithServiceId: Entity = { - apiVersion: 'backstage.io/v1alpha1', - kind: 'Component', - metadata: { - name: 'pagerduty-test', - annotations: { - 'pagerduty.com/service-id': 'def456', - }, - }, -}; - -const entityWithAllAnnotations: Entity = { - apiVersion: 'backstage.io/v1alpha1', - kind: 'Component', - metadata: { - name: 'pagerduty-test', - annotations: { - 'pagerduty.com/integration-key': 'abc123', - 'pagerduty.com/service-id': 'def456', - }, - }, -}; - -describe('getPagerDutyEntity', () => { - describe('when entity has no annotations', () => { - it('returns a PagerDutyEntity', () => { - expect(getPagerDutyEntity(entityWithoutAnnotations)).toEqual({ - name: 'pagerduty-test', - }); - }); - }); - - describe('when entity has integration key annotation', () => { - it('returns a PagerDutyEntity', () => { - expect(getPagerDutyEntity(entity)).toEqual({ - name: 'pagerduty-test', - integrationKey: 'abc123', - }); - }); - }); - - describe('when entity has service id annotation', () => { - it('returns a PagerDutyEntity', () => { - expect(getPagerDutyEntity(entityWithServiceId)).toEqual({ - name: 'pagerduty-test', - serviceId: 'def456', - }); - }); - }); - - describe('when entity has all annotations', () => { - it('returns a PagerDutyEntity', () => { - expect(getPagerDutyEntity(entityWithAllAnnotations)).toEqual({ - name: 'pagerduty-test', - integrationKey: 'abc123', - serviceId: 'def456', - }); - }); - }); -}); diff --git a/plugins/pagerduty/src/components/pagerDutyEntity.ts b/plugins/pagerduty/src/components/pagerDutyEntity.ts deleted file mode 100644 index 950525881e..0000000000 --- a/plugins/pagerduty/src/components/pagerDutyEntity.ts +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { Entity } from '@backstage/catalog-model'; -import { PagerDutyEntity } from '../types'; -import { PAGERDUTY_INTEGRATION_KEY, PAGERDUTY_SERVICE_ID } from './constants'; - -export function getPagerDutyEntity(entity: Entity): PagerDutyEntity { - const { - [PAGERDUTY_INTEGRATION_KEY]: integrationKey, - [PAGERDUTY_SERVICE_ID]: serviceId, - } = entity.metadata.annotations || ({} as Record); - const name = entity.metadata.name; - - return { integrationKey, serviceId, name }; -} diff --git a/plugins/pagerduty/src/components/types.ts b/plugins/pagerduty/src/components/types.ts deleted file mode 100644 index 156b5c9b9d..0000000000 --- a/plugins/pagerduty/src/components/types.ts +++ /dev/null @@ -1,93 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** @public */ -export type PagerDutyChangeEvent = { - id: string; - integration: [ - { - service: PagerDutyService; - }, - ]; - source: string; - html_url: string; - links: [ - { - href: string; - text: string; - }, - ]; - summary: string; - timestamp: string; -}; - -/** @public */ -export type PagerDutyIncident = { - id: string; - title: string; - status: string; - html_url: string; - assignments: [ - { - assignee: PagerDutyAssignee; - }, - ]; - serviceId: string; - created_at: string; -}; - -/** @public */ -export type PagerDutyService = { - id: string; - name: string; - html_url: string; - integrationKey: string; - escalation_policy: { - id: string; - user: PagerDutyUser; - html_url: string; - }; -}; - -/** @public */ -export type PagerDutyOnCall = { - user: PagerDutyUser; - escalation_level: number; -}; - -/** @public */ -export type PagerDutyAssignee = { - id: string; - summary: string; - html_url: string; -}; - -/** @public */ -export type PagerDutyUser = { - id: string; - summary: string; - email: string; - html_url: string; - name: string; -}; - -/** @public */ -export type SubHeaderLink = { - title: string; - href?: string; - icon: React.ReactNode; - action?: React.ReactNode; -}; diff --git a/plugins/pagerduty/src/deprecated.ts b/plugins/pagerduty/src/deprecated.ts deleted file mode 100644 index e9f60f6894..0000000000 --- a/plugins/pagerduty/src/deprecated.ts +++ /dev/null @@ -1,29 +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 { EntityPagerDutyCardProps, EntityPagerDutyCard } from './components'; - -/** - * @public - * @deprecated Please use EntityPagerDutyCard - */ -export const PagerDutyCard = EntityPagerDutyCard; - -/** - * @public - * @deprecated Please use EntityPagerDutyCardProps - */ -export type PagerDutyCardProps = EntityPagerDutyCardProps; diff --git a/plugins/pagerduty/src/hooks/index.ts b/plugins/pagerduty/src/hooks/index.ts deleted file mode 100644 index 8950e443e2..0000000000 --- a/plugins/pagerduty/src/hooks/index.ts +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import { useEntity } from '@backstage/plugin-catalog-react'; -import { PagerDutyEntity } from '../types'; -import { getPagerDutyEntity } from '../components/pagerDutyEntity'; - -export function usePagerdutyEntity(): PagerDutyEntity { - const { entity } = useEntity(); - - return getPagerDutyEntity(entity); -} diff --git a/plugins/pagerduty/src/index.ts b/plugins/pagerduty/src/index.ts deleted file mode 100644 index c6f7aef89a..0000000000 --- a/plugins/pagerduty/src/index.ts +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * A Backstage plugin that integrates towards PagerDuty - * - * @packageDocumentation - */ - -export { - pagerDutyPlugin, - pagerDutyPlugin as plugin, - EntityPagerDutyCard, - HomePagePagerDutyCard, -} from './plugin'; - -export * from './components'; - -export * from './api'; -export * from './deprecated'; - -export type { PagerDutyEntity } from './types'; diff --git a/plugins/pagerduty/src/plugin.test.ts b/plugins/pagerduty/src/plugin.test.ts deleted file mode 100644 index c9fe003abd..0000000000 --- a/plugins/pagerduty/src/plugin.test.ts +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { pagerDutyPlugin } from './plugin'; - -describe('pagerduty', () => { - it('should export plugin', () => { - expect(pagerDutyPlugin).toBeDefined(); - }); -}); diff --git a/plugins/pagerduty/src/plugin.ts b/plugins/pagerduty/src/plugin.ts deleted file mode 100644 index 4144eb5878..0000000000 --- a/plugins/pagerduty/src/plugin.ts +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { pagerDutyApiRef, PagerDutyClient } from './api'; -import { - createApiFactory, - createPlugin, - createRouteRef, - discoveryApiRef, - fetchApiRef, - configApiRef, - createComponentExtension, -} from '@backstage/core-plugin-api'; -import { createCardExtension } from '@backstage/plugin-home-react'; -import { HomePagePagerDutyCardProps } from './components/HomePagePagerDutyCard/Content'; - -export const rootRouteRef = createRouteRef({ - id: 'pagerduty', -}); - -/** - * @public - * @deprecated This plugin will be removed in a future release. Please use \@pagerduty/backstage-plugin plugin instead (https://www.npmjs.com/package/\@pagerduty/backstage-plugin). - */ -export const pagerDutyPlugin = createPlugin({ - id: 'pagerduty', - apis: [ - createApiFactory({ - api: pagerDutyApiRef, - deps: { - discoveryApi: discoveryApiRef, - configApi: configApiRef, - fetchApi: fetchApiRef, - }, - factory: ({ configApi, discoveryApi, fetchApi }) => - PagerDutyClient.fromConfig(configApi, { discoveryApi, fetchApi }), - }), - ], -}); - -/** - * @public - * @deprecated This plugin and it's cards will be removed in a future release. Please use \@pagerduty/backstage-plugin plugin instead (https://www.npmjs.com/package/\@pagerduty/backstage-plugin). - */ -export const EntityPagerDutyCard = pagerDutyPlugin.provide( - createComponentExtension({ - name: 'EntityPagerDutyCard', - component: { - lazy: () => - import('./components/EntityPagerDutyCard').then( - m => m.EntityPagerDutyCard, - ), - }, - }), -); - -/** - * @public - * @deprecated This plugin and it's cards will be removed in a future release. Please use \@pagerduty/backstage-plugin plugin instead (https://www.npmjs.com/package/\@pagerduty/backstage-plugin). - */ -export const HomePagePagerDutyCard = pagerDutyPlugin.provide( - createCardExtension({ - name: 'HomePagePagerDutyCard', - title: 'PagerDuty Homepage Card', - components: () => import('./components/HomePagePagerDutyCard'), - settings: { - schema: { - title: 'PagerDuty', - type: 'object', - properties: { - integrationKey: { - title: 'PagerDuty integration key', - type: 'string', - }, - serviceId: { - title: 'PagerDuty service id', - type: 'string', - }, - name: { - title: 'PagerDuty service name', - type: 'string', - }, - }, - }, - }, - }), -); diff --git a/plugins/pagerduty/src/setupTests.ts b/plugins/pagerduty/src/setupTests.ts deleted file mode 100644 index 963c0f188b..0000000000 --- a/plugins/pagerduty/src/setupTests.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import '@testing-library/jest-dom'; diff --git a/plugins/pagerduty/src/types.ts b/plugins/pagerduty/src/types.ts deleted file mode 100644 index e026a6ffbe..0000000000 --- a/plugins/pagerduty/src/types.ts +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright 2020 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @public - * @deprecated This plugin and it's types will be removed in a future release. Please use \@pagerduty/backstage-plugin plugin instead (https://www.npmjs.com/package/\@pagerduty/backstage-plugin). - */ -export type PagerDutyEntity = { - integrationKey?: string; - serviceId?: string; - name: string; -}; diff --git a/plugins/linguist-backend/.eslintrc.js b/plugins/scaffolder-backend-module-bitbucket/.eslintrc.js similarity index 100% rename from plugins/linguist-backend/.eslintrc.js rename to plugins/scaffolder-backend-module-bitbucket/.eslintrc.js diff --git a/plugins/scaffolder-backend-module-bitbucket/CHANGELOG.md b/plugins/scaffolder-backend-module-bitbucket/CHANGELOG.md new file mode 100644 index 0000000000..be4e753d60 --- /dev/null +++ b/plugins/scaffolder-backend-module-bitbucket/CHANGELOG.md @@ -0,0 +1,310 @@ +# @backstage/plugin-scaffolder-backend-module-bitbucket + +## 0.2.7 + +### Patch Changes + +- 33f958a: Improve examples to ensure consistency across all publish actions +- Updated dependencies + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.7 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.7 + - @backstage/backend-plugin-api@0.6.17 + - @backstage/integration@1.10.0 + - @backstage/plugin-scaffolder-node@0.4.3 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + +## 0.2.7-next.1 + +### Patch Changes + +- 33f958a: Improve examples to ensure consistency across all publish actions +- Updated dependencies + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.7-next.1 + - @backstage/backend-plugin-api@0.6.17-next.1 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.7-next.1 + - @backstage/plugin-scaffolder-node@0.4.3-next.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.10.0-next.0 + +## 0.2.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.7-next.0 + - @backstage/integration@1.10.0-next.0 + - @backstage/backend-plugin-api@0.6.17-next.0 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.7-next.0 + - @backstage/plugin-scaffolder-node@0.4.3-next.0 + +## 0.2.6 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.16 + - @backstage/plugin-scaffolder-node@0.4.2 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.9.1 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.6 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.6 + +## 0.2.5 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.4.1 + - @backstage/backend-plugin-api@0.6.15 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/integration@1.9.1 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.5 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.5 + +## 0.2.4 + +### Patch Changes + +- 2bd1410: Removed unused dependencies +- f44589d: Introduced `createMockActionContext` to unify the way of creating scaffolder mock context. + + It will help to maintain tests in a long run during structural changes of action context. + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.4.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.4 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.4 + - @backstage/integration@1.9.1 + - @backstage/config@1.2.0 + - @backstage/errors@1.2.4 + - @backstage/backend-plugin-api@0.6.14 + +## 0.2.4-next.2 + +### Patch Changes + +- 2bd1410: Removed unused dependencies +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.4.0-next.2 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.4-next.2 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.4-next.2 + - @backstage/integration@1.9.1-next.2 + - @backstage/backend-plugin-api@0.6.14-next.2 + - @backstage/config@1.2.0-next.1 + - @backstage/errors@1.2.4-next.0 + +## 0.2.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.2.0-next.1 + - @backstage/plugin-scaffolder-node@0.4.0-next.1 + - @backstage/backend-common@0.21.4-next.1 + - @backstage/backend-plugin-api@0.6.14-next.1 + - @backstage/integration@1.9.1-next.1 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.4-next.1 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.4-next.1 + - @backstage/errors@1.2.4-next.0 + +## 0.2.3-next.0 + +### Patch Changes + +- f44589d: Introduced `createMockActionContext` to unify the way of creating scaffolder mock context. + + It will help to maintain tests in a long run during structural changes of action context. + +- Updated dependencies + - @backstage/backend-common@0.21.3-next.0 + - @backstage/errors@1.2.4-next.0 + - @backstage/plugin-scaffolder-node@0.3.3-next.0 + - @backstage/backend-plugin-api@0.6.13-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.3-next.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.3-next.0 + - @backstage/config@1.1.2-next.0 + - @backstage/integration@1.9.1-next.0 + +## 0.2.0 + +### Minor Changes + +- 5eb6882: Split `@backstage/plugin-scaffolder-backend-module-bitbucket` into + `@backstage/plugin-scaffolder-backend-module-bitbucket-cloud` and + `@backstage/plugin-scaffolder-backend-module-bitbucket-server`. + + `@backstage/plugin-scaffolder-backend-module-bitbucket` was **deprecated** in favor of these two replacements. + + Please use any of the two replacements depending on your needs. + + ```diff + - backend.add(import('@backstage/plugin-scaffolder-backend-module-bitbucket')); + + backend.add(import('@backstage/plugin-scaffolder-backend-module-bitbucket-cloud')); + + backend.add(import('@backstage/plugin-scaffolder-backend-module-bitbucket-server')); + ``` + +### Patch Changes + +- e9a5228: Exporting a default module for the new Backend System +- 8472188: Added or fixed the `repository` field in `package.json`. +- 6bb6f3e: Updated dependency `fs-extra` to `^11.2.0`. + Updated dependency `@types/fs-extra` to `^11.0.0`. +- fc98bb6: Enhanced the pull request action to allow for adding new content to the PR as described in this issue #21762 +- Updated dependencies + - @backstage/backend-common@0.21.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.0 + - @backstage/backend-plugin-api@0.6.10 + - @backstage/integration@1.9.0 + - @backstage/plugin-scaffolder-node@0.3.0 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## 0.2.0-next.3 + +### Patch Changes + +- 8472188: Added or fixed the `repository` field in `package.json`. +- Updated dependencies + - @backstage/backend-common@0.21.0-next.3 + - @backstage/integration@1.9.0-next.1 + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.0-next.1 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.0-next.1 + - @backstage/plugin-scaffolder-node@0.3.0-next.3 + - @backstage/backend-plugin-api@0.6.10-next.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## 0.2.0-next.2 + +### Minor Changes + +- 5eb6882: Split `@backstage/plugin-scaffolder-backend-module-bitbucket` into + `@backstage/plugin-scaffolder-backend-module-bitbucket-cloud` and + `@backstage/plugin-scaffolder-backend-module-bitbucket-server`. + + `@backstage/plugin-scaffolder-backend-module-bitbucket` was **deprecated** in favor of these two replacements. + + Please use any of the two replacements depending on your needs. + + ```diff + - backend.add(import('@backstage/plugin-scaffolder-backend-module-bitbucket')); + + backend.add(import('@backstage/plugin-scaffolder-backend-module-bitbucket-cloud')); + + backend.add(import('@backstage/plugin-scaffolder-backend-module-bitbucket-server')); + ``` + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-backend-module-bitbucket-server@0.1.0-next.0 + - @backstage/backend-common@0.21.0-next.2 + - @backstage/backend-plugin-api@0.6.10-next.2 + - @backstage/plugin-scaffolder-backend-module-bitbucket-cloud@0.1.0-next.0 + - @backstage/plugin-scaffolder-node@0.3.0-next.2 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/integration@1.9.0-next.0 + +## 0.1.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.10-next.1 + - @backstage/backend-common@0.21.0-next.1 + - @backstage/integration@1.9.0-next.0 + - @backstage/plugin-scaffolder-node@0.3.0-next.1 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## 0.1.2-next.0 + +### Patch Changes + +- e9a5228: Exporting a default module for the new Backend System +- fc98bb6: Enhanced the pull request action to allow for adding new content to the PR as described in this issue #21762 +- Updated dependencies + - @backstage/backend-common@0.21.0-next.0 + - @backstage/plugin-scaffolder-node@0.3.0-next.0 + - @backstage/backend-plugin-api@0.6.10-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/integration@1.8.0 + +## 0.1.1 + +### Patch Changes + +- a694f71: The Scaffolder builtin actions now contains an action for running pipelines from Bitbucket Cloud Rest API +- Updated dependencies + - @backstage/backend-common@0.20.1 + - @backstage/plugin-scaffolder-node@0.2.10 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/integration@1.8.0 + +## 0.1.1-next.2 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.1-next.2 + - @backstage/plugin-scaffolder-node@0.2.10-next.2 + +## 0.1.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.1-next.1 + - @backstage/integration@1.8.0 + - @backstage/config@1.1.1 + - @backstage/plugin-scaffolder-node@0.2.10-next.1 + - @backstage/errors@1.2.3 + +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.1-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/integration@1.8.0 + - @backstage/plugin-scaffolder-node@0.2.10-next.0 + +## 0.1.0 + +### Minor Changes + +- 219d7f0: Create new scaffolder module for external integrations + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0 + - @backstage/plugin-scaffolder-node@0.2.9 + - @backstage/integration@1.8.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## 0.1.0-next.0 + +### Minor Changes + +- 219d7f0: Create new scaffolder module for external integrations + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.2.9-next.3 + - @backstage/backend-common@0.20.0-next.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/integration@1.8.0-next.1 diff --git a/plugins/scaffolder-backend-module-bitbucket/README.md b/plugins/scaffolder-backend-module-bitbucket/README.md new file mode 100644 index 0000000000..dde4207c0a --- /dev/null +++ b/plugins/scaffolder-backend-module-bitbucket/README.md @@ -0,0 +1,8 @@ +# @backstage/plugin-scaffolder-backend-module-bitbucket + +**Deprecated!** + +Please use one of the following modules instead: + +- [@backstage/plugin-scaffolder-backend-module-bitbucket-cloud](https://www.npmjs.com/package/@backstage/plugin-scaffolder-backend-module-bitbucket-cloud) +- [@backstage/plugin-scaffolder-backend-module-bitbucket-server](https://www.npmjs.com/package/@backstage/plugin-scaffolder-backend-module-bitbucket-server). diff --git a/plugins/scaffolder-backend-module-bitbucket/api-report.md b/plugins/scaffolder-backend-module-bitbucket/api-report.md new file mode 100644 index 0000000000..ce16b0038f --- /dev/null +++ b/plugins/scaffolder-backend-module-bitbucket/api-report.md @@ -0,0 +1,59 @@ +## API Report File for "@backstage/plugin-scaffolder-backend-module-bitbucket" + +> 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 * as bitbucketCloud from '@backstage/plugin-scaffolder-backend-module-bitbucket-cloud'; +import * as bitbucketServer from '@backstage/plugin-scaffolder-backend-module-bitbucket-server'; +import { Config } from '@backstage/config'; +import { JsonObject } from '@backstage/types'; +import { ScmIntegrationRegistry } from '@backstage/integration'; +import { TemplateAction } from '@backstage/plugin-scaffolder-node'; + +// @public @deprecated +const bitbucketModule: () => BackendFeature; +export default bitbucketModule; + +// @public @deprecated (undocumented) +export const createBitbucketPipelinesRunAction: (options: { + integrations: ScmIntegrationRegistry; +}) => TemplateAction< + { + workspace: string; + repo_slug: string; + body?: object | undefined; + token?: string | undefined; + }, + JsonObject +>; + +// @public @deprecated +export function createPublishBitbucketAction(options: { + integrations: ScmIntegrationRegistry; + config: Config; +}): TemplateAction< + { + repoUrl: string; + description?: string | undefined; + defaultBranch?: string | undefined; + repoVisibility?: 'private' | 'public' | undefined; + sourcePath?: string | undefined; + enableLFS?: boolean | undefined; + token?: string | undefined; + gitCommitMessage?: string | undefined; + gitAuthorName?: string | undefined; + gitAuthorEmail?: string | undefined; + }, + JsonObject +>; + +// @public @deprecated (undocumented) +export const createPublishBitbucketCloudAction: typeof bitbucketCloud.createPublishBitbucketCloudAction; + +// @public @deprecated (undocumented) +export const createPublishBitbucketServerAction: typeof bitbucketServer.createPublishBitbucketServerAction; + +// @public @deprecated (undocumented) +export const createPublishBitbucketServerPullRequestAction: typeof bitbucketServer.createPublishBitbucketServerPullRequestAction; +``` diff --git a/plugins/scaffolder-backend-module-bitbucket/catalog-info.yaml b/plugins/scaffolder-backend-module-bitbucket/catalog-info.yaml new file mode 100644 index 0000000000..b0a94d1c13 --- /dev/null +++ b/plugins/scaffolder-backend-module-bitbucket/catalog-info.yaml @@ -0,0 +1,10 @@ +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: backstage-plugin-scaffolder-backend-module-bitbucket + title: '@backstage/plugin-scaffolder-backend-module-bitbucket' + description: The bitbucket module for @backstage/plugin-scaffolder-backend +spec: + lifecycle: experimental + type: backstage-backend-plugin-module + owner: maintainers diff --git a/plugins/scaffolder-backend-module-bitbucket/knip-report.md b/plugins/scaffolder-backend-module-bitbucket/knip-report.md new file mode 100644 index 0000000000..8c142397d7 --- /dev/null +++ b/plugins/scaffolder-backend-module-bitbucket/knip-report.md @@ -0,0 +1,8 @@ +# Knip report + +## Unused dependencies (1) + +| Name | Location | Severity | +| :------- | :----------- | :------- | +| fs-extra | package.json | error | + diff --git a/plugins/scaffolder-backend-module-bitbucket/package.json b/plugins/scaffolder-backend-module-bitbucket/package.json new file mode 100644 index 0000000000..4a1cfb0ee8 --- /dev/null +++ b/plugins/scaffolder-backend-module-bitbucket/package.json @@ -0,0 +1,61 @@ +{ + "name": "@backstage/plugin-scaffolder-backend-module-bitbucket", + "version": "0.2.7", + "description": "The bitbucket module for @backstage/plugin-scaffolder-backend", + "backstage": { + "role": "backend-plugin-module" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/backstage/backstage", + "directory": "plugins/scaffolder-backend-module-bitbucket" + }, + "license": "Apache-2.0", + "exports": { + ".": "./src/index.ts", + "./package.json": "./package.json" + }, + "main": "src/index.ts", + "types": "src/index.ts", + "typesVersions": { + "*": { + "package.json": [ + "package.json" + ] + } + }, + "files": [ + "dist" + ], + "scripts": { + "build": "backstage-cli package build", + "clean": "backstage-cli package clean", + "lint": "backstage-cli package lint", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack", + "start": "backstage-cli package start", + "test": "backstage-cli package test" + }, + "dependencies": { + "@backstage/backend-plugin-api": "workspace:^", + "@backstage/config": "workspace:^", + "@backstage/errors": "workspace:^", + "@backstage/integration": "workspace:^", + "@backstage/plugin-scaffolder-backend-module-bitbucket-cloud": "workspace:^", + "@backstage/plugin-scaffolder-backend-module-bitbucket-server": "workspace:^", + "@backstage/plugin-scaffolder-node": "workspace:^", + "fs-extra": "^11.2.0", + "node-fetch": "^2.6.7", + "yaml": "^2.0.0" + }, + "devDependencies": { + "@backstage/backend-test-utils": "workspace:^", + "@backstage/cli": "workspace:^", + "@backstage/plugin-scaffolder-node-test-utils": "workspace:^", + "msw": "^1.0.0" + }, + "deprecated": true +} diff --git a/plugins/scaffolder-backend-module-bitbucket/src/actions/bitbucket.examples.test.ts b/plugins/scaffolder-backend-module-bitbucket/src/actions/bitbucket.examples.test.ts new file mode 100644 index 0000000000..6633246d70 --- /dev/null +++ b/plugins/scaffolder-backend-module-bitbucket/src/actions/bitbucket.examples.test.ts @@ -0,0 +1,368 @@ +/* + * 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. + */ + +jest.mock('@backstage/plugin-scaffolder-node', () => { + return { + ...jest.requireActual('@backstage/plugin-scaffolder-node'), + initRepoAndPush: jest.fn().mockResolvedValue({ + commitHash: '220f19cc36b551763d157f1b5e4a4b446165dbd6', + }), + commitAndPushRepo: jest.fn().mockResolvedValue({ + commitHash: '220f19cc36b551763d157f1b5e4a4b446165dbd6', + }), + }; +}); + +import { createPublishBitbucketAction } from './bitbucket'; +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 { initRepoAndPush } from '@backstage/plugin-scaffolder-node'; +import yaml from 'yaml'; +import { sep } from 'path'; +import { examples } from './bitbucket.examples'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; + +describe('publish:bitbucket', () => { + const config = new ConfigReader({ + integrations: { + bitbucket: [ + { + host: 'bitbucket.org', + token: 'tokenlols', + }, + { + host: 'hosted.bitbucket.com', + token: 'thing', + apiBaseUrl: 'https://hosted.bitbucket.com/rest/api/1.0', + }, + { + host: 'notoken.bitbucket.com', + }, + ], + }, + }); + + const integrations = ScmIntegrations.fromConfig(config); + const action = createPublishBitbucketAction({ integrations, config }); + const mockContext = createMockActionContext({ + input: { + repoUrl: 'bitbucket.org?workspace=workspace&project=project&repo=repo', + repoVisibility: 'private' as const, + }, + }); + const server = setupServer(); + setupRequestMockHandlers(server); + + beforeEach(() => { + jest.resetAllMocks(); + }); + + it('should call initAndPush with the correct values', async () => { + server.use( + rest.post( + 'https://api.bitbucket.org/2.0/repositories/workspace/repo', + (_, res, ctx) => + res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json({ + links: { + html: { + href: 'https://bitbucket.org/workspace/repo', + }, + clone: [ + { + name: 'https', + href: 'https://bitbucket.org/workspace/cloneurl', + }, + ], + }, + }), + ), + ), + ); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[0].example).steps[0].input, + }); + + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + remoteUrl: 'https://bitbucket.org/workspace/cloneurl', + defaultBranch: 'master', + auth: { username: 'x-token-auth', password: 'tokenlols' }, + logger: mockContext.logger, + commitMessage: 'initial commit', + gitAuthorInfo: { email: undefined, name: undefined }, + }); + }); + + it('should call initAndPush with the correct default branch', async () => { + server.use( + rest.post( + 'https://api.bitbucket.org/2.0/repositories/workspace/repo', + (_, res, ctx) => + res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json({ + links: { + html: { + href: 'https://bitbucket.org/workspace/repo', + }, + clone: [ + { + name: 'https', + href: 'https://bitbucket.org/workspace/cloneurl', + }, + ], + }, + }), + ), + ), + ); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[3].example).steps[0].input, + }); + + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + remoteUrl: 'https://bitbucket.org/workspace/cloneurl', + defaultBranch: 'main', + auth: { username: 'x-token-auth', password: 'tokenlols' }, + logger: mockContext.logger, + commitMessage: 'initial commit', + gitAuthorInfo: { email: undefined, name: undefined }, + }); + }); + + it('should call initAndPush with the specified source path', async () => { + server.use( + rest.post( + 'https://api.bitbucket.org/2.0/repositories/workspace/repo', + (_, res, ctx) => + res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json({ + links: { + html: { + href: 'https://bitbucket.org/workspace/repo', + }, + clone: [ + { + name: 'https', + href: 'https://bitbucket.org/workspace/cloneurl', + }, + ], + }, + }), + ), + ), + ); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[4].example).steps[0].input, + }); + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: `${mockContext.workspacePath}${sep}repoRoot`, + remoteUrl: 'https://bitbucket.org/workspace/cloneurl', + auth: { username: 'x-token-auth', password: 'tokenlols' }, + logger: mockContext.logger, + defaultBranch: 'master', + commitMessage: 'initial commit', + gitAuthorInfo: { email: undefined, name: undefined }, + }); + }); + + it('should call initAndPush with the authentication token', async () => { + server.use( + rest.post( + 'https://api.bitbucket.org/2.0/repositories/workspace/repo', + (_, res, ctx) => + res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json({ + links: { + html: { + href: 'https://bitbucket.org/workspace/repo', + }, + clone: [ + { + name: 'https', + href: 'https://bitbucket.org/workspace/cloneurl', + }, + ], + }, + }), + ), + ), + ); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[6].example).steps[0].input, + }); + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + remoteUrl: 'https://bitbucket.org/workspace/cloneurl', + auth: { username: 'x-token-auth', password: 'your-auth-token' }, + logger: mockContext.logger, + defaultBranch: 'master', + commitMessage: 'initial commit', + gitAuthorInfo: { + email: undefined, + name: undefined, + }, + }); + }); + + it('should call initAndPush with the custom commit message', async () => { + server.use( + rest.post( + 'https://api.bitbucket.org/2.0/repositories/workspace/repo', + (_, res, ctx) => + res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json({ + links: { + html: { + href: 'https://bitbucket.org/workspace/repo', + }, + clone: [ + { + name: 'https', + href: 'https://bitbucket.org/workspace/cloneurl', + }, + ], + }, + }), + ), + ), + ); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[7].example).steps[0].input, + }); + + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + remoteUrl: 'https://bitbucket.org/workspace/cloneurl', + auth: { username: 'x-token-auth', password: 'tokenlols' }, + logger: mockContext.logger, + defaultBranch: 'master', + commitMessage: 'Initial commit with custom message', + gitAuthorInfo: { email: undefined, name: undefined }, + }); + }); + + it('should call initAndPush with the custom author name and email for the commit.', async () => { + server.use( + rest.post( + 'https://api.bitbucket.org/2.0/repositories/workspace/repo', + (_, res, ctx) => + res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json({ + links: { + html: { + href: 'https://bitbucket.org/workspace/repo', + }, + clone: [ + { + name: 'https', + href: 'https://bitbucket.org/workspace/cloneurl', + }, + ], + }, + }), + ), + ), + ); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[8].example).steps[0].input, + }); + + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + remoteUrl: 'https://bitbucket.org/workspace/cloneurl', + auth: { username: 'x-token-auth', password: 'tokenlols' }, + logger: mockContext.logger, + defaultBranch: 'master', + commitMessage: 'initial commit', + gitAuthorInfo: { email: 'your.email@example.com', name: 'Your Name' }, + }); + }); + + describe('LFS for hosted bitbucket', () => { + const repoCreationResponse = { + links: { + self: [ + { + href: 'https://bitbucket.mycompany.com/projects/project/repos/repo', + }, + ], + clone: [ + { + name: 'http', + href: 'https://bitbucket.mycompany.com/scm/project/repo', + }, + ], + }, + }; + + it('should call the correct APIs to enable LFS if requested and the host is hosted bitbucket', async () => { + expect.assertions(1); + server.use( + rest.post( + 'https://hosted.bitbucket.com/rest/api/1.0/projects/project/repos', + (_, res, ctx) => { + return res( + ctx.status(201), + ctx.set('Content-Type', 'application/json'), + ctx.json(repoCreationResponse), + ); + }, + ), + rest.put( + 'https://hosted.bitbucket.com/rest/git-lfs/admin/projects/project/repos/repo/enabled', + (req, res, ctx) => { + expect(req.headers.get('Authorization')).toBe('Bearer thing'); + return res(ctx.status(204)); + }, + ), + ); + + await action.handler({ + ...mockContext, + input: yaml.parse(examples[5].example).steps[0].input, + }); + }); + }); +}); diff --git a/plugins/scaffolder-backend-module-bitbucket/src/actions/bitbucket.examples.ts b/plugins/scaffolder-backend-module-bitbucket/src/actions/bitbucket.examples.ts new file mode 100644 index 0000000000..12f9472398 --- /dev/null +++ b/plugins/scaffolder-backend-module-bitbucket/src/actions/bitbucket.examples.ts @@ -0,0 +1,203 @@ +/* + * 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 { TemplateExample } from '@backstage/plugin-scaffolder-node'; +import yaml from 'yaml'; + +export const examples: TemplateExample[] = [ + { + description: + 'Initializes a git repository with the content in the workspace, and publishes it to Bitbucket with the default configuration.', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:bitbucket', + name: 'Publish to Bitbucket', + input: { + repoUrl: + 'bitbucket.org?repo=repo&workspace=workspace&project=project', + }, + }, + ], + }), + }, + { + description: 'Initializes a Bitbucket repository with a description.', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:bitbucket', + name: 'Publish to Bitbucket', + input: { + repoUrl: + 'bitbucket.org?repo=repo&workspace=workspace&project=project', + description: 'Initialize a git repository', + }, + }, + ], + }), + }, + { + description: + 'Initializes a Bitbucket repository with public repo visibility, if not set defaults to private', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:bitbucket', + name: 'Publish to Bitbucket', + input: { + repoUrl: + 'bitbucket.org?repo=repo&workspace=workspace&project=project', + repoVisibility: 'public', + }, + }, + ], + }), + }, + { + description: + 'Initializes a Bitbucket repository with a default branch, if not set defaults to master', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:bitbucket', + name: 'Publish to Bitbucket', + input: { + repoUrl: + 'bitbucket.org?repo=repo&workspace=workspace&project=project', + defaultBranch: 'main', + }, + }, + ], + }), + }, + { + description: + 'Path within the workspace that will be used as the repository root. If omitted, the entire workspace will be published as the repository', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:bitbucket', + name: 'Publish to Bitbucket', + input: { + repoUrl: + 'bitbucket.org?repo=repo&workspace=workspace&project=project', + sourcePath: './repoRoot', + }, + }, + ], + }), + }, + { + description: 'Initializes a Bitbucket repository with LFS enabled', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:bitbucket', + name: 'Publish to Bitbucket', + input: { + repoUrl: 'hosted.bitbucket.com?project=project&repo=repo', + enableLFS: true, + }, + }, + ], + }), + }, + { + description: + 'Initializes a Bitbucket repository with a custom authentication token', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:bitbucket', + name: 'Publish to Bitbucket', + input: { + repoUrl: + 'bitbucket.org?repo=repo&workspace=workspace&project=project', + token: 'your-auth-token', + }, + }, + ], + }), + }, + { + description: + 'Initializes a Bitbucket repository with an initial commit message, if not set defaults to `initial commit`', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:bitbucket', + name: 'Publish to Bitbucket', + input: { + repoUrl: + 'bitbucket.org?repo=repo&workspace=workspace&project=project', + gitCommitMessage: 'Initial commit with custom message', + }, + }, + ], + }), + }, + { + description: 'Initializes a Bitbucket repository with a custom author', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:bitbucket', + name: 'Publish to Bitbucket', + input: { + repoUrl: + 'bitbucket.org?repo=repo&workspace=workspace&project=project', + gitAuthorName: 'Your Name', + gitAuthorEmail: 'your.email@example.com', + }, + }, + ], + }), + }, + { + description: + 'Initializes a Bitbucket repository with all proporties being set', + example: yaml.stringify({ + steps: [ + { + id: 'publish', + action: 'publish:bitbucket', + name: 'Publish to Bitbucket', + input: { + repoUrl: + 'bitbucket.org?repo=repo&workspace=workspace&project=project', + description: 'Initialize a git repository', + repoVisibility: 'public', + defaultBranch: 'main', + token: 'your-auth-token', + gitCommitMessage: 'Initial commit with custom message', + gitAuthorName: 'Your Name', + gitAuthorEmail: 'your.email@example.com', + }, + }, + ], + }), + }, +]; diff --git a/plugins/scaffolder-backend-module-bitbucket/src/actions/bitbucket.test.ts b/plugins/scaffolder-backend-module-bitbucket/src/actions/bitbucket.test.ts new file mode 100644 index 0000000000..a63d657904 --- /dev/null +++ b/plugins/scaffolder-backend-module-bitbucket/src/actions/bitbucket.test.ts @@ -0,0 +1,619 @@ +/* + * 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('@backstage/plugin-scaffolder-node', () => { + return { + ...jest.requireActual('@backstage/plugin-scaffolder-node'), + initRepoAndPush: jest.fn().mockResolvedValue({ + commitHash: '220f19cc36b551763d157f1b5e4a4b446165dbd6', + }), + commitAndPushRepo: jest.fn().mockResolvedValue({ + commitHash: '220f19cc36b551763d157f1b5e4a4b446165dbd6', + }), + }; +}); +import { createPublishBitbucketAction } from './bitbucket'; +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 { initRepoAndPush } from '@backstage/plugin-scaffolder-node'; +import { createMockActionContext } from '@backstage/plugin-scaffolder-node-test-utils'; + +describe('publish:bitbucket', () => { + const config = new ConfigReader({ + integrations: { + bitbucket: [ + { + host: 'bitbucket.org', + token: 'tokenlols', + }, + { + host: 'hosted.bitbucket.com', + token: 'thing', + apiBaseUrl: 'https://hosted.bitbucket.com/rest/api/1.0', + }, + { + host: 'notoken.bitbucket.com', + }, + ], + }, + }); + + const integrations = ScmIntegrations.fromConfig(config); + const action = createPublishBitbucketAction({ integrations, config }); + const mockContext = createMockActionContext({ + input: { + repoUrl: 'bitbucket.org?workspace=workspace&project=project&repo=repo', + repoVisibility: 'private' as const, + }, + }); + 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: { repoUrl: 'bitbucket.org?project=project&repo=repo' }, + }), + ).rejects.toThrow(/missing workspace/); + + await expect( + action.handler({ + ...mockContext, + input: { repoUrl: 'bitbucket.org?workspace=workspace&repo=repo' }, + }), + ).rejects.toThrow(/missing project/); + + await expect( + action.handler({ + ...mockContext, + input: { repoUrl: 'bitbucket.org?workspace=workspace&project=project' }, + }), + ).rejects.toThrow(/missing repo/); + }); + + it('should throw if there is no integration config provided', async () => { + await expect( + action.handler({ + ...mockContext, + input: { + repoUrl: 'missing.com?workspace=workspace&project=project&repo=repo', + }, + }), + ).rejects.toThrow(/No matching integration configuration/); + }); + + it('should throw if there is no token in the integration config that is returned', async () => { + await expect( + action.handler({ + ...mockContext, + input: { + repoUrl: + 'notoken.bitbucket.com?workspace=workspace&project=project&repo=repo', + }, + }), + ).rejects.toThrow(/Authorization has not been provided for Bitbucket/); + }); + + it('should call the correct APIs when the host is bitbucket cloud', async () => { + expect.assertions(2); + server.use( + rest.post( + 'https://api.bitbucket.org/2.0/repositories/workspace/repo', + (req, res, ctx) => { + expect(req.headers.get('Authorization')).toBe('Bearer tokenlols'); + expect(req.body).toEqual({ + is_private: true, + scm: 'git', + project: { key: 'project' }, + }); + return res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json({ + links: { + html: { + href: 'https://bitbucket.org/workspace/repo', + }, + clone: [ + { + name: 'https', + href: 'https://bitbucket.org/workspace/repo', + }, + ], + }, + }), + ); + }, + ), + ); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + repoUrl: 'bitbucket.org?workspace=workspace&project=project&repo=repo', + }, + }); + }); + + it('should call the correct APIs when the host is hosted bitbucket', async () => { + expect.assertions(2); + server.use( + rest.post( + 'https://hosted.bitbucket.com/rest/api/1.0/projects/project/repos', + (req, res, ctx) => { + expect(req.headers.get('Authorization')).toBe('Bearer thing'); + expect(req.body).toEqual({ public: false, name: 'repo' }); + return res( + ctx.status(201), + ctx.set('Content-Type', 'application/json'), + ctx.json({ + links: { + self: [ + { + href: 'https://bitbucket.mycompany.com/projects/project/repos/repo', + }, + ], + clone: [ + { + name: 'http', + href: 'https://bitbucket.mycompany.com/scm/project/repo', + }, + ], + }, + }), + ); + }, + ), + ); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + repoUrl: 'hosted.bitbucket.com?project=project&repo=repo', + }, + }); + }); + + it('should work if the token is provided through ctx.input', async () => { + expect.assertions(2); + server.use( + rest.post( + 'https://notoken.bitbucket.com/rest/api/1.0/projects/project/repos', + (req, res, ctx) => { + expect(req.headers.get('Authorization')).toBe('Bearer lols'); + expect(req.body).toEqual({ public: false, name: 'repo' }); + return res( + ctx.status(201), + ctx.set('Content-Type', 'application/json'), + ctx.json({ + links: { + self: [ + { + href: 'https://bitbucket.mycompany.com/projects/project/repos/repo', + }, + ], + clone: [ + { + name: 'http', + href: 'https://bitbucket.mycompany.com/scm/project/repo', + }, + ], + }, + }), + ); + }, + ), + ); + await action.handler({ + ...mockContext, + input: { + repoUrl: 'notoken.bitbucket.com?project=project&repo=repo', + token: 'lols', + }, + }); + }); + + describe('LFS for hosted bitbucket', () => { + const repoCreationResponse = { + links: { + self: [ + { + href: 'https://bitbucket.mycompany.com/projects/project/repos/repo', + }, + ], + clone: [ + { + name: 'http', + href: 'https://bitbucket.mycompany.com/scm/project/repo', + }, + ], + }, + }; + + it('should call the correct APIs to enable LFS if requested and the host is hosted bitbucket', async () => { + expect.assertions(1); + server.use( + rest.post( + 'https://hosted.bitbucket.com/rest/api/1.0/projects/project/repos', + (_, res, ctx) => { + return res( + ctx.status(201), + ctx.set('Content-Type', 'application/json'), + ctx.json(repoCreationResponse), + ); + }, + ), + rest.put( + 'https://hosted.bitbucket.com/rest/git-lfs/admin/projects/project/repos/repo/enabled', + (req, res, ctx) => { + expect(req.headers.get('Authorization')).toBe('Bearer thing'); + return res(ctx.status(204)); + }, + ), + ); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + repoUrl: 'hosted.bitbucket.com?project=project&repo=repo', + enableLFS: true, + }, + }); + }); + + it('should report an error if enabling LFS fails', async () => { + server.use( + rest.post( + 'https://hosted.bitbucket.com/rest/api/1.0/projects/project/repos', + (_, res, ctx) => { + return res( + ctx.status(201), + ctx.set('Content-Type', 'application/json'), + ctx.json(repoCreationResponse), + ); + }, + ), + rest.put( + 'https://hosted.bitbucket.com/rest/git-lfs/admin/projects/project/repos/repo/enabled', + (_, res, ctx) => { + return res(ctx.status(500)); + }, + ), + ); + + await expect( + action.handler({ + ...mockContext, + input: { + ...mockContext.input, + repoUrl: 'hosted.bitbucket.com?project=project&repo=repo', + enableLFS: true, + }, + }), + ).rejects.toThrow(/Failed to enable LFS/); + }); + }); + + it('should call initAndPush with the correct values', async () => { + server.use( + rest.post( + 'https://api.bitbucket.org/2.0/repositories/workspace/repo', + (_, res, ctx) => + res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json({ + links: { + html: { + href: 'https://bitbucket.org/workspace/repo', + }, + clone: [ + { + name: 'https', + href: 'https://bitbucket.org/workspace/cloneurl', + }, + ], + }, + }), + ), + ), + ); + + await action.handler(mockContext); + + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + remoteUrl: 'https://bitbucket.org/workspace/cloneurl', + defaultBranch: 'master', + auth: { username: 'x-token-auth', password: 'tokenlols' }, + logger: mockContext.logger, + commitMessage: 'initial commit', + gitAuthorInfo: {}, + }); + }); + + it('should call initAndPush with the correct default branch', async () => { + server.use( + rest.post( + 'https://api.bitbucket.org/2.0/repositories/workspace/repo', + (_, res, ctx) => + res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json({ + links: { + html: { + href: 'https://bitbucket.org/workspace/repo', + }, + clone: [ + { + name: 'https', + href: 'https://bitbucket.org/workspace/cloneurl', + }, + ], + }, + }), + ), + ), + ); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + defaultBranch: 'main', + }, + }); + + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + remoteUrl: 'https://bitbucket.org/workspace/cloneurl', + defaultBranch: 'main', + auth: { username: 'x-token-auth', password: 'tokenlols' }, + logger: mockContext.logger, + commitMessage: 'initial commit', + gitAuthorInfo: {}, + }); + }); + + it('should call initAndPush with the configured defaultAuthor', async () => { + const customAuthorConfig = new ConfigReader({ + integrations: { + bitbucket: [ + { + host: 'bitbucket.org', + token: 'tokenlols', + }, + { + host: 'hosted.bitbucket.com', + token: 'thing', + apiBaseUrl: 'https://hosted.bitbucket.com/rest/api/1.0', + }, + { + host: 'notoken.bitbucket.com', + }, + ], + }, + scaffolder: { + defaultAuthor: { + name: 'Test', + email: 'example@example.com', + }, + }, + }); + + const customAuthorIntegrations = + ScmIntegrations.fromConfig(customAuthorConfig); + const customAuthorAction = createPublishBitbucketAction({ + integrations: customAuthorIntegrations, + config: customAuthorConfig, + }); + + server.use( + rest.post( + 'https://api.bitbucket.org/2.0/repositories/workspace/repo', + (_, res, ctx) => + res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json({ + links: { + html: { + href: 'https://bitbucket.org/workspace/repo', + }, + clone: [ + { + name: 'https', + href: 'https://bitbucket.org/workspace/cloneurl', + }, + ], + }, + }), + ), + ), + ); + + await customAuthorAction.handler(mockContext); + + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + remoteUrl: 'https://bitbucket.org/workspace/cloneurl', + auth: { username: 'x-token-auth', password: 'tokenlols' }, + logger: mockContext.logger, + defaultBranch: 'master', + commitMessage: 'initial commit', + gitAuthorInfo: { name: 'Test', email: 'example@example.com' }, + }); + }); + + it('should call initAndPush with the configured defaultCommitMessage', async () => { + const customAuthorConfig = new ConfigReader({ + integrations: { + bitbucket: [ + { + host: 'bitbucket.org', + token: 'tokenlols', + }, + { + host: 'hosted.bitbucket.com', + token: 'thing', + apiBaseUrl: 'https://hosted.bitbucket.com/rest/api/1.0', + }, + { + host: 'notoken.bitbucket.com', + }, + ], + }, + scaffolder: { + defaultCommitMessage: 'Test commit message', + }, + }); + + const customAuthorIntegrations = + ScmIntegrations.fromConfig(customAuthorConfig); + const customAuthorAction = createPublishBitbucketAction({ + integrations: customAuthorIntegrations, + config: customAuthorConfig, + }); + + server.use( + rest.post( + 'https://api.bitbucket.org/2.0/repositories/workspace/repo', + (_, res, ctx) => + res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json({ + links: { + html: { + href: 'https://bitbucket.org/workspace/repo', + }, + clone: [ + { + name: 'https', + href: 'https://bitbucket.org/workspace/cloneurl', + }, + ], + }, + }), + ), + ), + ); + + await customAuthorAction.handler(mockContext); + + expect(initRepoAndPush).toHaveBeenCalledWith({ + dir: mockContext.workspacePath, + remoteUrl: 'https://bitbucket.org/workspace/cloneurl', + auth: { username: 'x-token-auth', password: 'tokenlols' }, + logger: mockContext.logger, + defaultBranch: 'master', + commitMessage: 'initial commit', + gitAuthorInfo: { email: undefined, name: undefined }, + }); + }); + + it('should call outputs with the correct urls', async () => { + server.use( + rest.post( + 'https://api.bitbucket.org/2.0/repositories/workspace/repo', + (_, res, ctx) => + res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json({ + links: { + html: { + href: 'https://bitbucket.org/workspace/repo', + }, + clone: [ + { + name: 'https', + href: 'https://bitbucket.org/workspace/cloneurl', + }, + ], + }, + }), + ), + ), + ); + + await action.handler(mockContext); + + expect(mockContext.output).toHaveBeenCalledWith( + 'remoteUrl', + 'https://bitbucket.org/workspace/cloneurl', + ); + expect(mockContext.output).toHaveBeenCalledWith( + 'repoContentsUrl', + 'https://bitbucket.org/workspace/repo/src/master', + ); + }); + + it('should call outputs with the correct urls with correct default branch', async () => { + server.use( + rest.post( + 'https://api.bitbucket.org/2.0/repositories/workspace/repo', + (_, res, ctx) => + res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json({ + links: { + html: { + href: 'https://bitbucket.org/workspace/repo', + }, + clone: [ + { + name: 'https', + href: 'https://bitbucket.org/workspace/cloneurl', + }, + ], + }, + }), + ), + ), + ); + + await action.handler({ + ...mockContext, + input: { + ...mockContext.input, + defaultBranch: 'main', + }, + }); + + expect(mockContext.output).toHaveBeenCalledWith( + 'remoteUrl', + 'https://bitbucket.org/workspace/cloneurl', + ); + expect(mockContext.output).toHaveBeenCalledWith( + 'repoContentsUrl', + 'https://bitbucket.org/workspace/repo/src/main', + ); + }); +}); diff --git a/plugins/scaffolder-backend-module-bitbucket/src/actions/bitbucket.ts b/plugins/scaffolder-backend-module-bitbucket/src/actions/bitbucket.ts new file mode 100644 index 0000000000..f1b45111b4 --- /dev/null +++ b/plugins/scaffolder-backend-module-bitbucket/src/actions/bitbucket.ts @@ -0,0 +1,424 @@ +/* + * 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 { + BitbucketIntegrationConfig, + ScmIntegrationRegistry, +} from '@backstage/integration'; +import { + createTemplateAction, + initRepoAndPush, + getRepoSourceDirectory, + parseRepoUrl, +} from '@backstage/plugin-scaffolder-node'; +import fetch, { Response, RequestInit } from 'node-fetch'; +import { Config } from '@backstage/config'; +import { examples } from './bitbucket.examples'; + +const createBitbucketCloudRepository = async (opts: { + workspace: string; + project: string; + repo: string; + description?: string; + repoVisibility: 'private' | 'public'; + mainBranch: string; + authorization: string; + apiBaseUrl: string; +}) => { + const { + workspace, + project, + repo, + description, + repoVisibility, + mainBranch, + authorization, + apiBaseUrl, + } = opts; + + const options: RequestInit = { + method: 'POST', + body: JSON.stringify({ + scm: 'git', + description: description, + is_private: repoVisibility === 'private', + project: { key: project }, + }), + headers: { + Authorization: authorization, + 'Content-Type': 'application/json', + }, + }; + + let response: Response; + try { + response = await fetch( + `${apiBaseUrl}/repositories/${workspace}/${repo}`, + options, + ); + } catch (e) { + throw new Error(`Unable to create repository, ${e}`); + } + + if (response.status !== 200) { + throw new Error( + `Unable to create repository, ${response.status} ${ + response.statusText + }, ${await response.text()}`, + ); + } + + const r = await response.json(); + let remoteUrl = ''; + for (const link of r.links.clone) { + if (link.name === 'https') { + remoteUrl = link.href; + } + } + + // "mainbranch.name" cannot be set neither at create nor update of the repo + // the first pushed branch will be set as "main branch" then + const repoContentsUrl = `${r.links.html.href}/src/${mainBranch}`; + return { remoteUrl, repoContentsUrl }; +}; + +const createBitbucketServerRepository = async (opts: { + project: string; + repo: string; + description?: string; + repoVisibility: 'private' | 'public'; + authorization: string; + apiBaseUrl: string; +}) => { + const { + project, + repo, + description, + authorization, + repoVisibility, + apiBaseUrl, + } = opts; + + let response: Response; + const options: RequestInit = { + method: 'POST', + body: JSON.stringify({ + name: repo, + description: description, + public: repoVisibility === 'public', + }), + headers: { + Authorization: authorization, + 'Content-Type': 'application/json', + }, + }; + + try { + response = await fetch(`${apiBaseUrl}/projects/${project}/repos`, options); + } catch (e) { + throw new Error(`Unable to create repository, ${e}`); + } + + if (response.status !== 201) { + throw new Error( + `Unable to create repository, ${response.status} ${ + response.statusText + }, ${await response.text()}`, + ); + } + + const r = await response.json(); + let remoteUrl = ''; + for (const link of r.links.clone) { + if (link.name === 'http') { + remoteUrl = link.href; + } + } + + const repoContentsUrl = `${r.links.self[0].href}`; + return { remoteUrl, repoContentsUrl }; +}; + +const getAuthorizationHeader = (config: BitbucketIntegrationConfig) => { + if (config.username && config.appPassword) { + const buffer = Buffer.from( + `${config.username}:${config.appPassword}`, + 'utf8', + ); + + return `Basic ${buffer.toString('base64')}`; + } + + if (config.token) { + return `Bearer ${config.token}`; + } + + throw new Error( + `Authorization has not been provided for Bitbucket. Please add either username + appPassword or token to the Integrations config`, + ); +}; + +const performEnableLFS = async (opts: { + authorization: string; + host: string; + project: string; + repo: string; +}) => { + const { authorization, host, project, repo } = opts; + + const options: RequestInit = { + method: 'PUT', + headers: { + Authorization: authorization, + }, + }; + + const { ok, status, statusText } = await fetch( + `https://${host}/rest/git-lfs/admin/projects/${project}/repos/${repo}/enabled`, + options, + ); + + if (!ok) + throw new Error( + `Failed to enable LFS in the repository, ${status}: ${statusText}`, + ); +}; + +/** + * Creates a new action that initializes a git repository of the content in the workspace + * and publishes it to Bitbucket. + * @public + * @deprecated in favor of "createPublishBitbucketCloudAction" by \@backstage/plugin-scaffolder-backend-module-bitbucket-cloud and "createPublishBitbucketServerAction" by \@backstage/plugin-scaffolder-backend-module-bitbucket-server + */ +export function createPublishBitbucketAction(options: { + integrations: ScmIntegrationRegistry; + config: Config; +}) { + const { integrations, config } = options; + + return createTemplateAction<{ + repoUrl: string; + description?: string; + defaultBranch?: string; + repoVisibility?: 'private' | 'public'; + sourcePath?: string; + enableLFS?: boolean; + token?: string; + gitCommitMessage?: string; + gitAuthorName?: string; + gitAuthorEmail?: string; + }>({ + id: 'publish:bitbucket', + description: + 'Initializes a git repository of the content in the workspace, and publishes it to Bitbucket.', + examples, + schema: { + input: { + type: 'object', + required: ['repoUrl'], + properties: { + repoUrl: { + title: 'Repository Location', + type: 'string', + }, + description: { + title: 'Repository Description', + type: 'string', + }, + repoVisibility: { + title: 'Repository Visibility', + type: 'string', + enum: ['private', 'public'], + }, + defaultBranch: { + title: 'Default Branch', + type: 'string', + description: `Sets the default branch on the repository. The default value is 'master'`, + }, + sourcePath: { + title: 'Source Path', + description: + 'Path within the workspace that will be used as the repository root. If omitted, the entire workspace will be published as the repository.', + type: 'string', + }, + enableLFS: { + title: 'Enable LFS?', + description: + 'Enable LFS for the repository. Only available for hosted Bitbucket.', + type: 'boolean', + }, + token: { + title: 'Authentication Token', + type: 'string', + description: 'The token to use for authorization to BitBucket', + }, + gitCommitMessage: { + title: 'Git Commit Message', + type: 'string', + description: `Sets the commit message on the repository. The default value is 'initial commit'`, + }, + gitAuthorName: { + title: 'Default Author Name', + type: 'string', + description: `Sets the default author name for the commit. The default value is 'Scaffolder'`, + }, + gitAuthorEmail: { + title: 'Default Author Email', + type: 'string', + description: `Sets the default author email for the commit.`, + }, + }, + }, + output: { + type: 'object', + properties: { + remoteUrl: { + title: 'A URL to the repository with the provider', + type: 'string', + }, + repoContentsUrl: { + title: 'A URL to the root of the repository', + type: 'string', + }, + commitHash: { + title: 'The git commit hash of the initial commit', + type: 'string', + }, + }, + }, + }, + async handler(ctx) { + ctx.logger.warn( + `[Deprecated] Please migrate the use of action "publish:bitbucket" to "publish:bitbucketCloud" or "publish:bitbucketServer".`, + ); + const { + repoUrl, + description, + defaultBranch = 'master', + repoVisibility = 'private', + enableLFS = false, + gitCommitMessage = 'initial commit', + gitAuthorName, + gitAuthorEmail, + } = ctx.input; + + const { workspace, project, repo, host } = parseRepoUrl( + repoUrl, + integrations, + ); + + // Workspace is only required for bitbucket cloud + if (host === 'bitbucket.org') { + if (!workspace) { + throw new InputError( + `Invalid URL provider was included in the repo URL to create ${ctx.input.repoUrl}, missing workspace`, + ); + } + } + + // Project is required for both bitbucket cloud and bitbucket server + if (!project) { + throw new InputError( + `Invalid URL provider was included in the repo URL to create ${ctx.input.repoUrl}, missing project`, + ); + } + + const integrationConfig = integrations.bitbucket.byHost(host); + + if (!integrationConfig) { + throw new InputError( + `No matching integration configuration for host ${host}, please check your integrations config`, + ); + } + + const authorization = getAuthorizationHeader( + ctx.input.token + ? { + host: integrationConfig.config.host, + apiBaseUrl: integrationConfig.config.apiBaseUrl, + token: ctx.input.token, + } + : integrationConfig.config, + ); + + const apiBaseUrl = integrationConfig.config.apiBaseUrl; + + const createMethod = + host === 'bitbucket.org' + ? createBitbucketCloudRepository + : createBitbucketServerRepository; + + const { remoteUrl, repoContentsUrl } = await createMethod({ + authorization, + workspace: workspace || '', + project, + repo, + repoVisibility, + mainBranch: defaultBranch, + description, + apiBaseUrl, + }); + + const gitAuthorInfo = { + name: gitAuthorName + ? gitAuthorName + : config.getOptionalString('scaffolder.defaultAuthor.name'), + email: gitAuthorEmail + ? gitAuthorEmail + : config.getOptionalString('scaffolder.defaultAuthor.email'), + }; + + let auth; + + if (ctx.input.token) { + auth = { + username: 'x-token-auth', + password: ctx.input.token, + }; + } else { + auth = { + username: integrationConfig.config.username + ? integrationConfig.config.username + : 'x-token-auth', + password: integrationConfig.config.appPassword + ? integrationConfig.config.appPassword + : integrationConfig.config.token ?? '', + }; + } + + const commitResult = await initRepoAndPush({ + dir: getRepoSourceDirectory(ctx.workspacePath, ctx.input.sourcePath), + remoteUrl, + auth, + defaultBranch, + logger: ctx.logger, + commitMessage: gitCommitMessage + ? gitCommitMessage + : config.getOptionalString('scaffolder.defaultCommitMessage'), + gitAuthorInfo, + }); + + if (enableLFS && host !== 'bitbucket.org') { + await performEnableLFS({ authorization, host, project, repo }); + } + + ctx.output('commitHash', commitResult?.commitHash); + ctx.output('remoteUrl', remoteUrl); + ctx.output('repoContentsUrl', repoContentsUrl); + }, + }); +} diff --git a/plugins/scaffolder-backend-module-bitbucket/src/deprecated.ts b/plugins/scaffolder-backend-module-bitbucket/src/deprecated.ts new file mode 100644 index 0000000000..a17c88c3a4 --- /dev/null +++ b/plugins/scaffolder-backend-module-bitbucket/src/deprecated.ts @@ -0,0 +1,43 @@ +/* + * Copyright 2024 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 * as bitbucketCloud from '@backstage/plugin-scaffolder-backend-module-bitbucket-cloud'; +import * as bitbucketServer from '@backstage/plugin-scaffolder-backend-module-bitbucket-server'; + +export { createPublishBitbucketAction } from './actions/bitbucket'; + +/** + * @public @deprecated use import from \@backstage/plugin-scaffolder-backend-module-bitbucket-cloud instead + */ +export const createPublishBitbucketCloudAction = + bitbucketCloud.createPublishBitbucketCloudAction; + +/** + * @public @deprecated use import from \@backstage/plugin-scaffolder-backend-module-bitbucket-cloud instead + */ +export const createBitbucketPipelinesRunAction = + bitbucketCloud.createBitbucketPipelinesRunAction; + +/** + * @public @deprecated use import from \@backstage/plugin-scaffolder-backend-module-bitbucket-server instead + */ +export const createPublishBitbucketServerAction = + bitbucketServer.createPublishBitbucketServerAction; + +/** + * @public @deprecated use import from \@backstage/plugin-scaffolder-backend-module-bitbucket-server instead + */ +export const createPublishBitbucketServerPullRequestAction = + bitbucketServer.createPublishBitbucketServerPullRequestAction; diff --git a/plugins/linguist-backend/src/processor/index.ts b/plugins/scaffolder-backend-module-bitbucket/src/index.ts similarity index 75% rename from plugins/linguist-backend/src/processor/index.ts rename to plugins/scaffolder-backend-module-bitbucket/src/index.ts index b56618b203..7f68a3f395 100644 --- a/plugins/linguist-backend/src/processor/index.ts +++ b/plugins/scaffolder-backend-module-bitbucket/src/index.ts @@ -13,8 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export type { - LinguistTagsProcessorOptions, - ShouldProcessEntity, -} from './LinguistTagsProcessor'; -export { LinguistTagsProcessor } from './LinguistTagsProcessor'; + +/** + * A module for the scaffolder backend that lets you interact with bitbucket + * + * @packageDocumentation + */ + +export * from './deprecated'; +export { bitbucketModule as default } from './module'; diff --git a/plugins/scaffolder-backend-module-bitbucket/src/module.ts b/plugins/scaffolder-backend-module-bitbucket/src/module.ts new file mode 100644 index 0000000000..db27d0b7b9 --- /dev/null +++ b/plugins/scaffolder-backend-module-bitbucket/src/module.ts @@ -0,0 +1,58 @@ +/* + * Copyright 2024 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 { + coreServices, + createBackendModule, +} from '@backstage/backend-plugin-api'; +import { scaffolderActionsExtensionPoint } from '@backstage/plugin-scaffolder-node/alpha'; +import { + createBitbucketPipelinesRunAction, + createPublishBitbucketCloudAction, + createPublishBitbucketServerAction, + createPublishBitbucketServerPullRequestAction, +} from './deprecated'; +import { ScmIntegrations } from '@backstage/integration'; + +/** + * The Bitbucket Module for the Scaffolder Backend + * @public + * @deprecated use module by \@backstage/plugin-scaffolder-backend-module-bitbucket-cloud or \@backstage/plugin-scaffolder-backend-module-bitbucket-server instead + */ +export const bitbucketModule = createBackendModule({ + moduleId: 'bitbucket', + pluginId: 'scaffolder', + register({ registerInit }) { + registerInit({ + deps: { + scaffolder: scaffolderActionsExtensionPoint, + config: coreServices.rootConfig, + }, + async init({ scaffolder, config }) { + const integrations = ScmIntegrations.fromConfig(config); + + scaffolder.addActions( + createPublishBitbucketCloudAction({ integrations, config }), + createPublishBitbucketServerAction({ integrations, config }), + createPublishBitbucketServerPullRequestAction({ + integrations, + config, + }), + createBitbucketPipelinesRunAction({ integrations }), + ); + }, + }); + }, +}); diff --git a/plugins/search-backend-module-explore/package.json b/plugins/search-backend-module-explore/package.json index d5f6e907e7..4741e2fde2 100644 --- a/plugins/search-backend-module-explore/package.json +++ b/plugins/search-backend-module-explore/package.json @@ -46,11 +46,11 @@ "test": "backstage-cli package test" }, "dependencies": { + "@backstage-community/plugin-explore-common": "^0.0.3", "@backstage/backend-common": "workspace:^", "@backstage/backend-plugin-api": "workspace:^", "@backstage/backend-tasks": "workspace:^", "@backstage/config": "workspace:^", - "@backstage/plugin-explore-common": "workspace:^", "@backstage/plugin-search-backend-node": "workspace:^", "@backstage/plugin-search-common": "workspace:^", "node-fetch": "^2.6.7" diff --git a/yarn.lock b/yarn.lock index 0a27eecdea..5961036a6b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -105,30 +105,6 @@ __metadata: languageName: node linkType: hard -"@apollo/explorer@npm:^3.0.0": - version: 3.6.0 - resolution: "@apollo/explorer@npm:3.6.0" - dependencies: - "@types/whatwg-mimetype": ^3.0.0 - graphql-ws: ^5.9.0 - subscriptions-transport-ws: ^0.11.0 - whatwg-mimetype: ^3.0.0 - zen-observable-ts: ^1.1.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - use-deep-compare-effect: ^1.8.1 - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - use-deep-compare-effect: - optional: true - checksum: 0617cd1995cb8a63e25ee93204e09f6210a9031ca7942a7c74b9ac74677072fd6242d1479110d9a756c013589626706766380788e9b07dc63a18b494f581406c - languageName: node - linkType: hard - "@ardatan/sync-fetch@npm:^0.0.1": version: 0.0.1 resolution: "@ardatan/sync-fetch@npm:0.0.1" @@ -1476,34 +1452,7 @@ __metadata: languageName: node linkType: hard -"@azure/arm-appservice@npm:^14.0.0": - version: 14.1.0 - resolution: "@azure/arm-appservice@npm:14.1.0" - dependencies: - "@azure/abort-controller": ^1.0.0 - "@azure/core-auth": ^1.3.0 - "@azure/core-client": ^1.7.0 - "@azure/core-lro": ^2.5.4 - "@azure/core-paging": ^1.2.0 - "@azure/core-rest-pipeline": ^1.12.0 - tslib: ^2.2.0 - checksum: b989bc26d94056e0f02d2ede9981ebbf90ebefdc8b35c8f66531d3220c4ce52484d49c0a15b7056b79898a76533b0de0edf141b7736aadfabf2c33305804b884 - languageName: node - linkType: hard - -"@azure/arm-resourcegraph@npm:^4.2.1": - version: 4.2.1 - resolution: "@azure/arm-resourcegraph@npm:4.2.1" - dependencies: - "@azure/core-auth": ^1.1.4 - "@azure/ms-rest-azure-js": ^2.1.0 - "@azure/ms-rest-js": ^2.2.0 - tslib: ^1.10.0 - checksum: a5afea9faef84ed4576fda430301039524aefe6976a54204fe4453e672aa3d13edc7ef5c996ad6293e9afa3a0833549174aaac18ce236c4ec1242698e2c22bd2 - languageName: node - linkType: hard - -"@azure/core-auth@npm:^1.1.4, @azure/core-auth@npm:^1.3.0, @azure/core-auth@npm:^1.4.0, @azure/core-auth@npm:^1.5.0": +"@azure/core-auth@npm:^1.3.0, @azure/core-auth@npm:^1.4.0, @azure/core-auth@npm:^1.5.0": version: 1.5.0 resolution: "@azure/core-auth@npm:1.5.0" dependencies: @@ -1514,7 +1463,7 @@ __metadata: languageName: node linkType: hard -"@azure/core-client@npm:^1.4.0, @azure/core-client@npm:^1.7.0": +"@azure/core-client@npm:^1.4.0": version: 1.7.3 resolution: "@azure/core-client@npm:1.7.3" dependencies: @@ -1551,7 +1500,7 @@ __metadata: languageName: node linkType: hard -"@azure/core-lro@npm:^2.2.0, @azure/core-lro@npm:^2.5.4": +"@azure/core-lro@npm:^2.2.0": version: 2.5.4 resolution: "@azure/core-lro@npm:2.5.4" dependencies: @@ -1563,7 +1512,7 @@ __metadata: languageName: node linkType: hard -"@azure/core-paging@npm:^1.1.1, @azure/core-paging@npm:^1.2.0": +"@azure/core-paging@npm:^1.1.1": version: 1.3.0 resolution: "@azure/core-paging@npm:1.3.0" dependencies: @@ -1572,7 +1521,7 @@ __metadata: languageName: node linkType: hard -"@azure/core-rest-pipeline@npm:^1.1.0, @azure/core-rest-pipeline@npm:^1.12.0, @azure/core-rest-pipeline@npm:^1.9.1": +"@azure/core-rest-pipeline@npm:^1.1.0, @azure/core-rest-pipeline@npm:^1.9.1": version: 1.12.2 resolution: "@azure/core-rest-pipeline@npm:1.12.2" dependencies: @@ -1649,33 +1598,6 @@ __metadata: languageName: node linkType: hard -"@azure/ms-rest-azure-js@npm:^2.1.0": - version: 2.1.0 - resolution: "@azure/ms-rest-azure-js@npm:2.1.0" - dependencies: - "@azure/core-auth": ^1.1.4 - "@azure/ms-rest-js": ^2.2.0 - tslib: ^1.10.0 - checksum: 0e6d6700f4ee0ad14383642b02fe86b33f4034aaff38499374ed5be59154e869ee231790d20b7557622ebcdfa9eed45dc2559391a79dee51c849a8ced0c86fed - languageName: node - linkType: hard - -"@azure/ms-rest-js@npm:^2.2.0": - version: 2.7.0 - resolution: "@azure/ms-rest-js@npm:2.7.0" - dependencies: - "@azure/core-auth": ^1.1.4 - abort-controller: ^3.0.0 - form-data: ^2.5.0 - node-fetch: ^2.6.7 - tslib: ^1.10.0 - tunnel: 0.0.6 - uuid: ^8.3.2 - xml2js: ^0.5.0 - checksum: 38434010f3fc54a625f637a7758358d7ce0ad3e55ce9a6c7490bf05bbec8ea75ae95fe80041d2376beb3ef78ee6e55858bd0541477d7a88703246e368cfd59c1 - languageName: node - linkType: hard - "@azure/msal-browser@npm:^3.11.1": version: 3.11.1 resolution: "@azure/msal-browser@npm:3.11.1" @@ -3192,7 +3114,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.20.6, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.1, @babel/runtime@npm:^7.12.1, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.6, @babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.20.6, @babel/runtime@npm:^7.21.0, @babel/runtime@npm:^7.23.2, @babel/runtime@npm:^7.23.9, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.0, @babel/runtime@npm:^7.7.6, @babel/runtime@npm:^7.8.3, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": version: 7.24.4 resolution: "@babel/runtime@npm:7.24.4" dependencies: @@ -3241,6 +3163,52 @@ __metadata: languageName: node linkType: hard +"@backstage-community/plugin-explore-common@npm:^0.0.3": + version: 0.0.3 + resolution: "@backstage-community/plugin-explore-common@npm:0.0.3" + checksum: 54b81496122c11bd16cbb71c4fcc92e6bf16b5e4f580fc8043dbea35955447d67b463a40065e629ed81ef3aeeb36d1f41d445b7fa4d8ab7e0036a296b361e398 + languageName: node + linkType: hard + +"@backstage-community/plugin-puppetdb@npm:^0.1.18": + version: 0.1.18 + resolution: "@backstage-community/plugin-puppetdb@npm:0.1.18" + dependencies: + "@backstage/catalog-model": ^1.4.5 + "@backstage/core-components": ^0.14.4 + "@backstage/core-plugin-api": ^1.9.2 + "@backstage/errors": ^1.2.4 + "@backstage/plugin-catalog-react": ^1.11.3 + "@material-ui/core": ^4.12.2 + "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 + react-use: ^17.2.4 + peerDependencies: + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: d0e4fe3f818aa05c527d773d558291b97f3a4fee1b1a765e0e6f5a2f36ca1897e3933e92abdeffeb8b33701c21314eb3565900ff78624fe1d5eff3ee2781cfff + languageName: node + linkType: hard + +"@backstage-community/plugin-stackstorm@npm:^0.1.16": + version: 0.1.16 + resolution: "@backstage-community/plugin-stackstorm@npm:0.1.16" + dependencies: + "@backstage/core-components": ^0.14.4 + "@backstage/core-plugin-api": ^1.9.2 + "@backstage/errors": ^1.2.4 + "@material-ui/core": ^4.12.2 + "@material-ui/icons": ^4.9.1 + "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 + react-use: ^17.2.4 + peerDependencies: + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: 2fd7d290cd98ad09b16862a5dee3302796942e85818abf9c4a9102038a4fb83e86ceee39d901e59bb7fb7c60df7797524f8c6a5cfee1a4a0ea59edcbb4de5a0a + languageName: node + linkType: hard + "@backstage/app-defaults@workspace:^, @backstage/app-defaults@workspace:packages/app-defaults": version: 0.0.0-use.local resolution: "@backstage/app-defaults@workspace:packages/app-defaults" @@ -3869,6 +3837,8 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/core-compat-api@workspace:packages/core-compat-api" dependencies: + "@backstage-community/plugin-puppetdb": ^0.1.18 + "@backstage-community/plugin-stackstorm": ^0.1.16 "@backstage/cli": "workspace:^" "@backstage/core-app-api": "workspace:^" "@backstage/core-plugin-api": "workspace:^" @@ -3876,8 +3846,6 @@ __metadata: "@backstage/frontend-plugin-api": "workspace:^" "@backstage/frontend-test-utils": "workspace:^" "@backstage/plugin-catalog": "workspace:^" - "@backstage/plugin-puppetdb": "workspace:^" - "@backstage/plugin-stackstorm": "workspace:^" "@backstage/version-bridge": "workspace:^" "@oriflame/backstage-plugin-score-card": ^0.8.0 "@testing-library/jest-dom": ^6.0.0 @@ -3889,7 +3857,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-components@^0.14.3, @backstage/core-components@workspace:^, @backstage/core-components@workspace:packages/core-components": +"@backstage/core-components@^0.14.4, @backstage/core-components@workspace:^, @backstage/core-components@workspace:packages/core-components": version: 0.0.0-use.local resolution: "@backstage/core-components@workspace:packages/core-components" dependencies: @@ -4013,7 +3981,7 @@ __metadata: languageName: node linkType: hard -"@backstage/core-plugin-api@^1.8.2, @backstage/core-plugin-api@^1.9.1, @backstage/core-plugin-api@workspace:^, @backstage/core-plugin-api@workspace:packages/core-plugin-api": +"@backstage/core-plugin-api@^1.8.2, @backstage/core-plugin-api@^1.9.2, @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: @@ -4111,7 +4079,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/errors@^1.2.3, @backstage/errors@workspace:^, @backstage/errors@workspace:packages/errors": +"@backstage/errors@^1.2.3, @backstage/errors@^1.2.4, @backstage/errors@workspace:^, @backstage/errors@workspace:packages/errors": version: 0.0.0-use.local resolution: "@backstage/errors@workspace:packages/errors" dependencies: @@ -4223,7 +4191,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/integration-react@^1.1.25, @backstage/integration-react@workspace:^, @backstage/integration-react@workspace:packages/integration-react": +"@backstage/integration-react@workspace:^, @backstage/integration-react@workspace:packages/integration-react": version: 0.0.0-use.local resolution: "@backstage/integration-react@workspace:packages/integration-react" dependencies: @@ -4267,236 +4235,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-adr-backend@workspace:^, @backstage/plugin-adr-backend@workspace:plugins/adr-backend": - version: 0.0.0-use.local - 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:^" - "@backstage/config": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/integration": "workspace:^" - "@backstage/plugin-adr-common": "workspace:^" - "@backstage/plugin-search-common": "workspace:^" - "@types/express": ^4.17.6 - "@types/supertest": ^2.0.8 - express: ^4.17.1 - express-promise-router: ^4.1.0 - luxon: ^3.0.0 - marked: ^12.0.0 - node-fetch: ^2.6.5 - supertest: ^6.1.3 - yn: ^4.0.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-adr-common@workspace:^, @backstage/plugin-adr-common@workspace:plugins/adr-common": - version: 0.0.0-use.local - resolution: "@backstage/plugin-adr-common@workspace:plugins/adr-common" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/integration": "workspace:^" - "@backstage/plugin-search-common": "workspace:^" - front-matter: ^4.0.2 - luxon: ^3.0.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-adr@workspace:^, @backstage/plugin-adr@workspace:plugins/adr": - version: 0.0.0-use.local - resolution: "@backstage/plugin-adr@workspace:plugins/adr" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/frontend-plugin-api": "workspace:^" - "@backstage/integration-react": "workspace:^" - "@backstage/plugin-adr-common": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/plugin-search-common": "workspace:^" - "@backstage/plugin-search-react": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - lodash: ^4.17.21 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-airbrake-backend@workspace:plugins/airbrake-backend": - version: 0.0.0-use.local - resolution: "@backstage/plugin-airbrake-backend@workspace:plugins/airbrake-backend" - dependencies: - "@backstage/backend-common": "workspace:^" - "@backstage/backend-plugin-api": "workspace:^" - "@backstage/backend-test-utils": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - "@types/express": "*" - "@types/http-proxy-middleware": ^1.0.0 - "@types/supertest": ^2.0.8 - express: ^4.17.1 - express-promise-router: ^4.1.0 - http-proxy-middleware: ^2.0.0 - supertest: ^6.1.6 - yn: ^4.0.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-airbrake@workspace:^, @backstage/plugin-airbrake@workspace:plugins/airbrake": - version: 0.0.0-use.local - resolution: "@backstage/plugin-airbrake@workspace:plugins/airbrake" - dependencies: - "@backstage/app-defaults": "workspace:^" - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - msw: ^1.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-allure@workspace:plugins/allure": - version: 0.0.0-use.local - resolution: "@backstage/plugin-allure@workspace:plugins/allure" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - msw: ^1.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-analytics-module-ga4@workspace:plugins/analytics-module-ga4": - version: 0.0.0-use.local - resolution: "@backstage/plugin-analytics-module-ga4@workspace:plugins/analytics-module-ga4" - dependencies: - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/frontend-plugin-api": "workspace:^" - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/jest": ^29.0.0 - "@types/react": ^16.13.1 || ^17.0.0 - react-ga4: ^2.0.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-analytics-module-ga@workspace:plugins/analytics-module-ga": - version: 0.0.0-use.local - resolution: "@backstage/plugin-analytics-module-ga@workspace:plugins/analytics-module-ga" - dependencies: - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/frontend-plugin-api": "workspace:^" - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 - react-ga: ^3.3.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - 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-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/frontend-plugin-api": "workspace:^" - "@newrelic/browser-agent": ^1.236.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.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" - dependencies: - "@backstage/cli": "workspace:^" - "@backstage/core-app-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - cross-fetch: ^4.0.0 - msw: ^1.0.0 - qs: ^6.10.1 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - "@backstage/plugin-api-docs-module-protoc-gen-doc@workspace:plugins/api-docs-module-protoc-gen-doc": version: 0.0.0-use.local resolution: "@backstage/plugin-api-docs-module-protoc-gen-doc@workspace:plugins/api-docs-module-protoc-gen-doc" @@ -4553,30 +4291,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-apollo-explorer@workspace:plugins/apollo-explorer": - version: 0.0.0-use.local - resolution: "@backstage/plugin-apollo-explorer@workspace:plugins/apollo-explorer" - dependencies: - "@apollo/explorer": ^3.0.0 - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/lab": ^4.0.0-alpha.61 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - react-use: ^17.5.0 - use-deep-compare-effect: ^1.8.1 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - "@backstage/plugin-app-backend@workspace:^, @backstage/plugin-app-backend@workspace:plugins/app-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-app-backend@workspace:plugins/app-backend" @@ -4621,7 +4335,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-app-visualizer@workspace:^, @backstage/plugin-app-visualizer@workspace:plugins/app-visualizer": +"@backstage/plugin-app-visualizer@workspace:plugins/app-visualizer": version: 0.0.0-use.local resolution: "@backstage/plugin-app-visualizer@workspace:plugins/app-visualizer" dependencies: @@ -5079,244 +4793,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-azure-devops-backend@workspace:^, @backstage/plugin-azure-devops-backend@workspace:plugins/azure-devops-backend": - version: 0.0.0-use.local - resolution: "@backstage/plugin-azure-devops-backend@workspace:plugins/azure-devops-backend" - 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-auth-node": "workspace:^" - "@backstage/plugin-azure-devops-common": "workspace:^" - "@backstage/plugin-catalog-common": "workspace:^" - "@backstage/plugin-catalog-node": "workspace:^" - "@backstage/plugin-permission-common": "workspace:^" - "@backstage/plugin-permission-node": "workspace:^" - "@types/express": ^4.17.6 - "@types/supertest": ^2.0.8 - azure-devops-node-api: ^12.0.0 - express: ^4.17.1 - express-promise-router: ^4.1.0 - lodash: ^4.17.21 - mime-types: ^2.1.27 - p-limit: ^3.1.0 - supertest: ^6.1.6 - yn: ^4.0.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-azure-devops-common@workspace:^, @backstage/plugin-azure-devops-common@workspace:plugins/azure-devops-common": - version: 0.0.0-use.local - resolution: "@backstage/plugin-azure-devops-common@workspace:plugins/azure-devops-common" - dependencies: - "@backstage/cli": "workspace:^" - "@backstage/plugin-catalog-common": "workspace:^" - "@backstage/plugin-permission-common": "workspace:^" - languageName: unknown - linkType: soft - -"@backstage/plugin-azure-devops@workspace:^, @backstage/plugin-azure-devops@workspace:plugins/azure-devops": - version: 0.0.0-use.local - resolution: "@backstage/plugin-azure-devops@workspace:plugins/azure-devops" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-compat-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/frontend-plugin-api": "workspace:^" - "@backstage/plugin-azure-devops-common": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/plugin-permission-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - humanize-duration: ^3.27.0 - luxon: ^3.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-azure-sites-backend@workspace:plugins/azure-sites-backend": - version: 0.0.0-use.local - resolution: "@backstage/plugin-azure-sites-backend@workspace:plugins/azure-sites-backend" - dependencies: - "@azure/arm-appservice": ^14.0.0 - "@azure/arm-resourcegraph": ^4.2.1 - "@azure/identity": ^4.0.0 - "@backstage/backend-common": "workspace:^" - "@backstage/backend-plugin-api": "workspace:^" - "@backstage/catalog-client": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-azure-sites-common": "workspace:^" - "@backstage/plugin-catalog-node": "workspace:^" - "@backstage/plugin-permission-common": "workspace:^" - "@backstage/plugin-permission-node": "workspace:^" - "@types/express": ^4.17.6 - "@types/supertest": ^2.0.8 - express: ^4.17.1 - express-promise-router: ^4.1.0 - yn: ^4.0.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-azure-sites-common@workspace:^, @backstage/plugin-azure-sites-common@workspace:plugins/azure-sites-common": - version: 0.0.0-use.local - resolution: "@backstage/plugin-azure-sites-common@workspace:plugins/azure-sites-common" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/plugin-catalog-common": "workspace:^" - "@backstage/plugin-permission-common": "workspace:^" - languageName: unknown - linkType: soft - -"@backstage/plugin-azure-sites@workspace:^, @backstage/plugin-azure-sites@workspace:plugins/azure-sites": - version: 0.0.0-use.local - resolution: "@backstage/plugin-azure-sites@workspace:plugins/azure-sites" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/plugin-azure-sites-common": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/plugin-permission-common": "workspace:^" - "@backstage/plugin-permission-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@backstage/theme": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - luxon: ^3.0.0 - msw: ^1.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-badges-backend@workspace:^, @backstage/plugin-badges-backend@workspace:plugins/badges-backend": - version: 0.0.0-use.local - 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:^" - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-auth-node": "workspace:^" - "@types/express": ^4.17.6 - badge-maker: ^3.3.0 - cors: ^2.8.5 - express: ^4.17.1 - express-promise-router: ^4.1.0 - knex: ^3.0.0 - lodash: ^4.17.21 - supertest: ^6.3.3 - uuid: ^9.0.0 - winston: ^3.2.1 - yn: ^4.0.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-badges@workspace:^, @backstage/plugin-badges@workspace:plugins/badges": - version: 0.0.0-use.local - resolution: "@backstage/plugin-badges@workspace:plugins/badges" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@testing-library/jest-dom": ^6.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-bazaar-backend@workspace:plugins/bazaar-backend": - version: 0.0.0-use.local - resolution: "@backstage/plugin-bazaar-backend@workspace:plugins/bazaar-backend" - dependencies: - "@backstage/backend-common": "workspace:^" - "@backstage/backend-plugin-api": "workspace:^" - "@backstage/backend-test-utils": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - "@backstage/plugin-auth-node": "workspace:^" - "@types/express": ^4.17.6 - express: ^4.17.1 - express-promise-router: ^4.1.0 - knex: ^3.0.0 - yn: ^4.0.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-bazaar@workspace:plugins/bazaar": - version: 0.0.0-use.local - resolution: "@backstage/plugin-bazaar@workspace:plugins/bazaar" - dependencies: - "@backstage/catalog-client": "workspace:^" - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@date-io/luxon": 1.x - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@material-ui/pickers": ^3.3.10 - "@testing-library/jest-dom": ^6.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - luxon: ^3.0.0 - material-ui-search-bar: ^1.0.0 - react-hook-form: ^7.13.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - "@backstage/plugin-bitbucket-cloud-common@workspace:^, @backstage/plugin-bitbucket-cloud-common@workspace:plugins/bitbucket-cloud-common": version: 0.0.0-use.local resolution: "@backstage/plugin-bitbucket-cloud-common@workspace:plugins/bitbucket-cloud-common" @@ -5330,40 +4806,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-bitrise@workspace:plugins/bitrise": - version: 0.0.0-use.local - resolution: "@backstage/plugin-bitrise@workspace:plugins/bitrise" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-app-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@testing-library/user-event": ^14.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - "@types/recharts": ^1.8.15 - lodash: ^4.17.21 - luxon: ^3.0.0 - msw: ^1.0.0 - qs: ^6.9.6 - react-use: ^17.2.4 - recharts: ^2.5.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - "@backstage/plugin-catalog-backend-module-aws@workspace:plugins/catalog-backend-module-aws": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-backend-module-aws@workspace:plugins/catalog-backend-module-aws" @@ -5911,7 +5353,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-react@^1.11.2, @backstage/plugin-catalog-react@^1.9.3, @backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": +"@backstage/plugin-catalog-react@^1.11.3, @backstage/plugin-catalog-react@^1.9.3, @backstage/plugin-catalog-react@workspace:^, @backstage/plugin-catalog-react@workspace:plugins/catalog-react": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-react@workspace:plugins/catalog-react" dependencies: @@ -6036,227 +5478,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-cicd-statistics-module-gitlab@workspace:plugins/cicd-statistics-module-gitlab": - version: 0.0.0-use.local - resolution: "@backstage/plugin-cicd-statistics-module-gitlab@workspace:plugins/cicd-statistics-module-gitlab" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/plugin-cicd-statistics": "workspace:^" - "@gitbeaker/browser": ^35.6.0 - "@gitbeaker/core": ^35.6.0 - "@types/react": ^16.13.1 || ^17.0.0 - luxon: ^3.0.0 - p-limit: ^3.1.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-cicd-statistics@workspace:^, @backstage/plugin-cicd-statistics@workspace:plugins/cicd-statistics": - version: 0.0.0-use.local - resolution: "@backstage/plugin-cicd-statistics@workspace:plugins/cicd-statistics" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@date-io/luxon": ^1.3.13 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@material-ui/pickers": ^3.3.10 - "@types/luxon": ^3.0.0 - "@types/react": ^16.13.1 || ^17.0.0 - already: ^3.2.0 - humanize-duration: ^3.27.0 - lodash: ^4.17.21 - luxon: ^3.0.0 - react-use: ^17.3.1 - recharts: ^2.5.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-circleci@workspace:plugins/circleci": - version: 0.0.0-use.local - resolution: "@backstage/plugin-circleci@workspace:plugins/circleci" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@types/humanize-duration": ^3.25.1 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - circleci-api: ^4.0.0 - humanize-duration: ^3.27.0 - lodash: ^4.17.21 - luxon: ^3.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-cloudbuild@workspace:^, @backstage/plugin-cloudbuild@workspace:plugins/cloudbuild": - version: 0.0.0-use.local - resolution: "@backstage/plugin-cloudbuild@workspace:plugins/cloudbuild" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - luxon: ^3.0.0 - qs: ^6.9.4 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-code-climate@workspace:plugins/code-climate": - version: 0.0.0-use.local - resolution: "@backstage/plugin-code-climate@workspace:plugins/code-climate" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/humanize-duration": ^3.27.1 - "@types/luxon": ^3.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - humanize-duration: ^3.27.1 - luxon: ^3.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-code-coverage-backend@workspace:^, @backstage/plugin-code-coverage-backend@workspace:plugins/code-coverage-backend": - version: 0.0.0-use.local - resolution: "@backstage/plugin-code-coverage-backend@workspace:plugins/code-coverage-backend" - dependencies: - "@backstage/backend-common": "workspace:^" - "@backstage/backend-plugin-api": "workspace:^" - "@backstage/backend-test-utils": "workspace:^" - "@backstage/catalog-client": "workspace:^" - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/integration": "workspace:^" - "@types/body-parser-xml": ^2.0.2 - "@types/express": ^4.17.6 - "@types/supertest": ^2.0.8 - body-parser: ^1.20.0 - body-parser-xml: ^2.0.5 - express: ^4.17.1 - express-promise-router: ^4.1.0 - knex: ^3.0.0 - supertest: ^6.1.6 - uuid: ^9.0.0 - xml2js: ^0.6.0 - yn: ^4.0.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-code-coverage@workspace:^, @backstage/plugin-code-coverage@workspace:plugins/code-coverage": - version: 0.0.0-use.local - resolution: "@backstage/plugin-code-coverage@workspace:plugins/code-coverage" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@material-ui/styles": ^4.11.0 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/highlightjs": ^10.1.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - "@types/recharts": ^1.8.15 - highlight.js: ^10.6.0 - luxon: ^3.0.0 - react-use: ^17.2.4 - recharts: ^2.5.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-codescene@workspace:plugins/codescene": - version: 0.0.0-use.local - resolution: "@backstage/plugin-codescene@workspace:plugins/codescene" - 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/errors": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@backstage/theme": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - luxon: ^3.4.4 - msw: ^1.0.0 - rc-progress: 3.5.1 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - "@backstage/plugin-config-schema@workspace:plugins/config-schema": version: 0.0.0-use.local resolution: "@backstage/plugin-config-schema@workspace:plugins/config-schema" @@ -6284,59 +5505,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-cost-insights-common@workspace:^, @backstage/plugin-cost-insights-common@workspace:plugins/cost-insights-common": - version: 0.0.0-use.local - resolution: "@backstage/plugin-cost-insights-common@workspace:plugins/cost-insights-common" - dependencies: - "@backstage/cli": "workspace:^" - languageName: unknown - linkType: soft - -"@backstage/plugin-cost-insights@workspace:^, @backstage/plugin-cost-insights@workspace:plugins/cost-insights": - version: 0.0.0-use.local - resolution: "@backstage/plugin-cost-insights@workspace:plugins/cost-insights" - 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/plugin-cost-insights-common": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@backstage/theme": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@material-ui/styles": ^4.9.6 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@testing-library/user-event": ^14.0.0 - "@types/pluralize": ^0.0.33 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - "@types/recharts": ^1.8.14 - "@types/regression": ^2.0.0 - "@types/yup": ^0.32.0 - canvas: ^2.10.2 - classnames: ^2.2.6 - history: ^5.0.0 - luxon: ^3.0.0 - pluralize: ^8.0.0 - qs: ^6.9.4 - react-use: ^17.2.4 - recharts: ^2.5.0 - regression: ^2.0.1 - yup: ^1.0.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - "@backstage/plugin-devtools-backend@workspace:^, @backstage/plugin-devtools-backend@workspace:plugins/devtools-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-devtools-backend@workspace:plugins/devtools-backend" @@ -6382,7 +5550,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-devtools@workspace:^, @backstage/plugin-devtools@workspace:plugins/devtools": +"@backstage/plugin-devtools@workspace:plugins/devtools": version: 0.0.0-use.local resolution: "@backstage/plugin-devtools@workspace:plugins/devtools" dependencies: @@ -6409,128 +5577,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-dynatrace@workspace:^, @backstage/plugin-dynatrace@workspace:plugins/dynatrace": - version: 0.0.0-use.local - resolution: "@backstage/plugin-dynatrace@workspace:plugins/dynatrace" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-app-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - react-use: ^17.2.4 - peerDependencies: - "@backstage/plugin-catalog-react": "workspace:^" - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-entity-feedback-backend@workspace:^, @backstage/plugin-entity-feedback-backend@workspace:plugins/entity-feedback-backend": - version: 0.0.0-use.local - 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:^" - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-auth-node": "workspace:^" - "@backstage/plugin-entity-feedback-common": "workspace:^" - "@types/express": "*" - "@types/supertest": ^2.0.12 - express: ^4.18.1 - express-promise-router: ^4.1.0 - knex: ^3.0.0 - node-fetch: ^2.6.7 - supertest: ^6.2.4 - yn: ^4.0.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-entity-feedback-common@workspace:^, @backstage/plugin-entity-feedback-common@workspace:plugins/entity-feedback-common": - version: 0.0.0-use.local - resolution: "@backstage/plugin-entity-feedback-common@workspace:plugins/entity-feedback-common" - dependencies: - "@backstage/cli": "workspace:^" - languageName: unknown - linkType: soft - -"@backstage/plugin-entity-feedback@workspace:^, @backstage/plugin-entity-feedback@workspace:plugins/entity-feedback": - version: 0.0.0-use.local - resolution: "@backstage/plugin-entity-feedback@workspace:plugins/entity-feedback" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/plugin-entity-feedback-common": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.9.13 - "@material-ui/icons": ^4.9.1 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@testing-library/user-event": ^14.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - msw: ^1.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-entity-validation@workspace:plugins/entity-validation": - version: 0.0.0-use.local - resolution: "@backstage/plugin-entity-validation@workspace:plugins/entity-validation" - dependencies: - "@backstage/catalog-client": "workspace:^" - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog-common": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@codemirror/language": ^6.0.0 - "@codemirror/legacy-modes": ^6.1.0 - "@codemirror/view": ^6.0.0 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@react-hookz/web": ^24.0.0 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - "@uiw/react-codemirror": ^4.9.3 - lodash: ^4.17.21 - react-use: ^17.2.4 - yaml: ^2.0.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - "@backstage/plugin-events-backend-module-aws-sqs@workspace:plugins/events-backend-module-aws-sqs": version: 0.0.0-use.local resolution: "@backstage/plugin-events-backend-module-aws-sqs@workspace:plugins/events-backend-module-aws-sqs" @@ -6652,466 +5698,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-explore-backend@workspace:^, @backstage/plugin-explore-backend@workspace:plugins/explore-backend": - version: 0.0.0-use.local - resolution: "@backstage/plugin-explore-backend@workspace:plugins/explore-backend" - dependencies: - "@backstage/backend-common": "workspace:^" - "@backstage/backend-plugin-api": "workspace:^" - "@backstage/backend-test-utils": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - "@backstage/plugin-explore-common": "workspace:^" - "@backstage/plugin-search-backend-module-explore": "workspace:^" - "@backstage/types": "workspace:^" - "@types/express": "*" - "@types/supertest": ^2.0.8 - express: ^4.18.1 - express-promise-router: ^4.1.0 - lodash: ^4.17.21 - node-fetch: ^2.6.7 - supertest: ^6.2.4 - yn: ^4.0.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-explore-common@workspace:^, @backstage/plugin-explore-common@workspace:plugins/explore-common": - version: 0.0.0-use.local - resolution: "@backstage/plugin-explore-common@workspace:plugins/explore-common" - dependencies: - "@backstage/cli": "workspace:^" - languageName: unknown - linkType: soft - -"@backstage/plugin-explore-react@workspace:^, @backstage/plugin-explore-react@workspace:plugins/explore-react": - version: 0.0.0-use.local - resolution: "@backstage/plugin-explore-react@workspace:plugins/explore-react" - dependencies: - "@backstage/cli": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/plugin-explore-common": "workspace:^" - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-explore@workspace:^, @backstage/plugin-explore@workspace:plugins/explore": - version: 0.0.0-use.local - resolution: "@backstage/plugin-explore@workspace:plugins/explore" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-app-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/frontend-plugin-api": "workspace:^" - "@backstage/plugin-catalog": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/plugin-explore-common": "workspace:^" - "@backstage/plugin-explore-react": "workspace:^" - "@backstage/plugin-search-common": "workspace:^" - "@backstage/plugin-search-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - classnames: ^2.2.6 - msw: ^1.0.0 - pluralize: ^8.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-firehydrant@workspace:plugins/firehydrant": - version: 0.0.0-use.local - resolution: "@backstage/plugin-firehydrant@workspace:plugins/firehydrant" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-app-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - luxon: ^3.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-fossa@workspace:plugins/fossa": - version: 0.0.0-use.local - resolution: "@backstage/plugin-fossa@workspace:plugins/fossa" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-app-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - cross-fetch: ^4.0.0 - luxon: ^3.0.0 - msw: ^1.0.0 - p-limit: ^3.0.2 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-gcalendar@workspace:^, @backstage/plugin-gcalendar@workspace:plugins/gcalendar": - version: 0.0.0-use.local - resolution: "@backstage/plugin-gcalendar@workspace:plugins/gcalendar" - dependencies: - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@maxim_mazurok/gapi.client.calendar": ^3.0.20220408 - "@tanstack/react-query": ^4.1.3 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/dompurify": ^3.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - "@types/sanitize-html": ^2.6.2 - classnames: ^2.3.1 - dompurify: ^3.0.0 - lodash: ^4.17.21 - luxon: ^3.0.0 - material-ui-popup-state: ^1.9.3 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-gcp-projects@workspace:^, @backstage/plugin-gcp-projects@workspace:plugins/gcp-projects": - version: 0.0.0-use.local - resolution: "@backstage/plugin-gcp-projects@workspace:plugins/gcp-projects" - dependencies: - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@react-hookz/web": ^24.0.0 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-git-release-manager@workspace:plugins/git-release-manager": - version: 0.0.0-use.local - resolution: "@backstage/plugin-git-release-manager@workspace:plugins/git-release-manager" - dependencies: - "@backstage/cli": "workspace:^" - "@backstage/core-app-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/integration": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@octokit/rest": ^19.0.3 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - "@types/recharts": ^1.8.15 - luxon: ^3.0.0 - qs: ^6.10.1 - react-use: ^17.2.4 - recharts: ^2.5.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-github-actions@workspace:^, @backstage/plugin-github-actions@workspace:plugins/github-actions": - version: 0.0.0-use.local - resolution: "@backstage/plugin-github-actions@workspace:plugins/github-actions" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-app-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/integration": "workspace:^" - "@backstage/integration-react": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@octokit/rest": ^19.0.3 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - git-url-parse: ^14.0.0 - luxon: ^3.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-github-deployments@workspace:plugins/github-deployments": - version: 0.0.0-use.local - resolution: "@backstage/plugin-github-deployments@workspace:plugins/github-deployments" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-app-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/integration": "workspace:^" - "@backstage/integration-react": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@octokit/graphql": ^5.0.0 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - luxon: ^3.0.0 - msw: ^1.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-github-issues@workspace:plugins/github-issues": - version: 0.0.0-use.local - resolution: "@backstage/plugin-github-issues@workspace:plugins/github-issues" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/integration": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.4 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - luxon: ^3.0.0 - octokit: ^3.0.0 - react-use: ^17.4.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-github-pull-requests-board@workspace:^, @backstage/plugin-github-pull-requests-board@workspace:plugins/github-pull-requests-board": - version: 0.0.0-use.local - resolution: "@backstage/plugin-github-pull-requests-board@workspace:plugins/github-pull-requests-board" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/integration": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@octokit/rest": ^19.0.3 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - luxon: ^3.0.0 - p-limit: ^3.1.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-gitops-profiles@workspace:plugins/gitops-profiles": - version: 0.0.0-use.local - resolution: "@backstage/plugin-gitops-profiles@workspace:plugins/gitops-profiles" - dependencies: - "@backstage/cli": "workspace:^" - "@backstage/core-app-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-gocd@workspace:^, @backstage/plugin-gocd@workspace:plugins/gocd": - version: 0.0.0-use.local - resolution: "@backstage/plugin-gocd@workspace:plugins/gocd" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-app-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@testing-library/user-event": ^14.0.0 - "@types/lodash": ^4.14.173 - "@types/luxon": ^3.0.0 - "@types/react": ^16.13.1 || ^17.0.0 - lodash: ^4.17.21 - luxon: ^3.0.0 - qs: ^6.10.1 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-graphiql@workspace:^, @backstage/plugin-graphiql@workspace:plugins/graphiql": - version: 0.0.0-use.local - resolution: "@backstage/plugin-graphiql@workspace:plugins/graphiql" - dependencies: - "@backstage/cli": "workspace:^" - "@backstage/core-compat-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/frontend-plugin-api": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/codemirror": ^5.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - graphiql: ^3.0.6 - graphql: ^16.0.0 - graphql-ws: ^5.4.1 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-graphql-voyager@workspace:plugins/graphql-voyager": - version: 0.0.0-use.local - resolution: "@backstage/plugin-graphql-voyager@workspace:plugins/graphql-voyager" - dependencies: - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - graphql-voyager: ^1.0.0-rc.31 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-home-react@^0.1.11, @backstage/plugin-home-react@workspace:^, @backstage/plugin-home-react@workspace:plugins/home-react": +"@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" dependencies: @@ -7174,149 +5761,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-ilert@workspace:plugins/ilert": - version: 0.0.0-use.local - resolution: "@backstage/plugin-ilert@workspace:plugins/ilert" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@date-io/luxon": 1.x - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@material-ui/pickers": ^3.3.10 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - humanize-duration: ^3.26.0 - luxon: ^3.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-jenkins-backend@workspace:^, @backstage/plugin-jenkins-backend@workspace:plugins/jenkins-backend": - version: 0.0.0-use.local - resolution: "@backstage/plugin-jenkins-backend@workspace:plugins/jenkins-backend" - dependencies: - "@backstage/backend-common": "workspace:^" - "@backstage/backend-plugin-api": "workspace:^" - "@backstage/backend-test-utils": "workspace:^" - "@backstage/catalog-client": "workspace:^" - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog-node": "workspace:^" - "@backstage/plugin-jenkins-common": "workspace:^" - "@backstage/plugin-permission-common": "workspace:^" - "@backstage/plugin-permission-node": "workspace:^" - "@types/express": ^4.17.6 - "@types/jenkins": ^1.0.0 - "@types/supertest": ^2.0.8 - express: ^4.17.1 - express-promise-router: ^4.1.0 - jenkins: ^1.0.0 - node-fetch: ^2.6.7 - yn: ^4.0.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-jenkins-common@workspace:^, @backstage/plugin-jenkins-common@workspace:plugins/jenkins-common": - version: 0.0.0-use.local - resolution: "@backstage/plugin-jenkins-common@workspace:plugins/jenkins-common" - dependencies: - "@backstage/cli": "workspace:^" - "@backstage/plugin-catalog-common": "workspace:^" - "@backstage/plugin-permission-common": "workspace:^" - languageName: unknown - linkType: soft - -"@backstage/plugin-jenkins@workspace:^, @backstage/plugin-jenkins@workspace:plugins/jenkins": - version: 0.0.0-use.local - resolution: "@backstage/plugin-jenkins@workspace:plugins/jenkins" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/plugin-jenkins-common": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - "@types/testing-library__jest-dom": ^6.0.0 - luxon: ^3.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-kafka-backend@workspace:^, @backstage/plugin-kafka-backend@workspace:plugins/kafka-backend": - version: 0.0.0-use.local - resolution: "@backstage/plugin-kafka-backend@workspace:plugins/kafka-backend" - dependencies: - "@backstage/backend-common": "workspace:^" - "@backstage/backend-plugin-api": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - "@backstage/errors": "workspace:^" - "@types/express": ^4.17.6 - "@types/jest-when": ^3.5.0 - "@types/lodash": ^4.14.151 - express: ^4.17.1 - express-promise-router: ^4.1.0 - jest-when: ^3.1.0 - kafkajs: ^2.0.0 - lodash: ^4.17.21 - supertest: ^6.1.3 - languageName: unknown - linkType: soft - -"@backstage/plugin-kafka@workspace:^, @backstage/plugin-kafka@workspace:plugins/kafka": - version: 0.0.0-use.local - resolution: "@backstage/plugin-kafka@workspace:plugins/kafka" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - jest-when: ^3.1.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - "@backstage/plugin-kubernetes-backend@workspace:^, @backstage/plugin-kubernetes-backend@workspace:plugins/kubernetes-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-kubernetes-backend@workspace:plugins/kubernetes-backend" @@ -7515,254 +5959,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-lighthouse-backend@workspace:^, @backstage/plugin-lighthouse-backend@workspace:plugins/lighthouse-backend": - version: 0.0.0-use.local - 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 - languageName: unknown - linkType: soft - -"@backstage/plugin-lighthouse-common@workspace:^, @backstage/plugin-lighthouse-common@workspace:plugins/lighthouse-common": - version: 0.0.0-use.local - resolution: "@backstage/plugin-lighthouse-common@workspace:plugins/lighthouse-common" - dependencies: - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - languageName: unknown - linkType: soft - -"@backstage/plugin-lighthouse@workspace:^, @backstage/plugin-lighthouse@workspace:plugins/lighthouse": - version: 0.0.0-use.local - resolution: "@backstage/plugin-lighthouse@workspace:plugins/lighthouse" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-app-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/plugin-lighthouse-common": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - msw: ^1.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-linguist-backend@workspace:^, @backstage/plugin-linguist-backend@workspace:plugins/linguist-backend": - version: 0.0.0-use.local - 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:^" - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog-node": "workspace:^" - "@backstage/plugin-linguist-common": "workspace:^" - "@backstage/types": "workspace:^" - "@types/express": "*" - "@types/supertest": ^2.0.8 - express: ^4.18.1 - express-promise-router: ^4.1.0 - fs-extra: ^11.0.0 - js-yaml: ^4.1.0 - knex: ^3.0.0 - linguist-js: ^2.5.3 - luxon: ^3.0.0 - node-fetch: ^2.6.7 - supertest: ^6.2.4 - uuid: ^9.0.0 - yn: ^4.0.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-linguist-common@workspace:^, @backstage/plugin-linguist-common@workspace:plugins/linguist-common": - version: 0.0.0-use.local - resolution: "@backstage/plugin-linguist-common@workspace:plugins/linguist-common" - dependencies: - "@backstage/cli": "workspace:^" - languageName: unknown - linkType: soft - -"@backstage/plugin-linguist@workspace:^, @backstage/plugin-linguist@workspace:plugins/linguist": - version: 0.0.0-use.local - resolution: "@backstage/plugin-linguist@workspace:plugins/linguist" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-compat-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/frontend-plugin-api": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/plugin-linguist-common": "workspace:^" - "@material-ui/core": ^4.9.13 - "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/jest-dom": ^6.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - luxon: ^3.0.0 - react-use: ^17.2.4 - slugify: ^1.6.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-microsoft-calendar@workspace:^, @backstage/plugin-microsoft-calendar@workspace:plugins/microsoft-calendar": - version: 0.0.0-use.local - resolution: "@backstage/plugin-microsoft-calendar@workspace:plugins/microsoft-calendar" - dependencies: - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@microsoft/microsoft-graph-types": ^2.25.0 - "@tanstack/react-query": ^4.1.3 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - classnames: ^2.3.1 - dompurify: ^3.0.0 - lodash: ^4.17.21 - luxon: ^3.0.0 - material-ui-popup-state: ^1.9.3 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-newrelic-dashboard@workspace:^, @backstage/plugin-newrelic-dashboard@workspace:plugins/newrelic-dashboard": - version: 0.0.0-use.local - resolution: "@backstage/plugin-newrelic-dashboard@workspace:plugins/newrelic-dashboard" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@testing-library/jest-dom": ^6.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-newrelic@workspace:^, @backstage/plugin-newrelic@workspace:plugins/newrelic": - version: 0.0.0-use.local - resolution: "@backstage/plugin-newrelic@workspace:plugins/newrelic" - dependencies: - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/parse-link-header": ^2.0.1 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - msw: ^1.2.3 - parse-link-header: ^2.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - 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/backend-plugin-api": "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 - node-fetch: ^2.6.7 - supertest: ^6.2.4 - 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/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@material-ui/core": ^4.9.13 - "@material-ui/icons": ^4.9.1 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - cross-fetch: ^4.0.0 - luxon: ^3.3.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - "@backstage/plugin-notifications-backend@workspace:^, @backstage/plugin-notifications-backend@workspace:plugins/notifications-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-notifications-backend@workspace:plugins/notifications-backend" @@ -7859,55 +6055,6 @@ __metadata: 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" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/plugin-scaffolder-react": "workspace:^" - "@material-ui/core": ^4.9.13 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-opencost@workspace:plugins/opencost": - version: 0.0.0-use.local - resolution: "@backstage/plugin-opencost@workspace:plugins/opencost" - dependencies: - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@date-io/luxon": 1.x - "@material-ui/core": ^4.9.13 - "@material-ui/icons": ^4.9.1 - "@material-ui/pickers": ^3.3.10 - "@material-ui/styles": ^4.11.5 - "@testing-library/jest-dom": ^6.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - axios: ^1.4.0 - date-fns: ^3.0.0 - lodash: ^4.17.21 - recharts: ^2.5.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: "*" - languageName: unknown - linkType: soft - "@backstage/plugin-org-react@workspace:plugins/org-react": version: 0.0.0-use.local resolution: "@backstage/plugin-org-react@workspace:plugins/org-react" @@ -7976,79 +6123,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-pagerduty@workspace:^, @backstage/plugin-pagerduty@workspace:plugins/pagerduty": - version: 0.0.0-use.local - resolution: "@backstage/plugin-pagerduty@workspace:plugins/pagerduty" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-app-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/plugin-home-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - luxon: ^3.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-periskop-backend@workspace:plugins/periskop-backend": - version: 0.0.0-use.local - resolution: "@backstage/plugin-periskop-backend@workspace:plugins/periskop-backend" - dependencies: - "@backstage/backend-common": "workspace:^" - "@backstage/backend-plugin-api": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - "@types/express": "*" - "@types/supertest": ^2.0.8 - express: ^4.17.1 - express-promise-router: ^4.1.0 - node-fetch: ^2.6.7 - supertest: ^6.1.6 - yn: ^4.0.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-periskop@workspace:plugins/periskop": - version: 0.0.0-use.local - resolution: "@backstage/plugin-periskop@workspace:plugins/periskop" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/luxon": ^3.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - luxon: ^3.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - "@backstage/plugin-permission-backend-module-allow-all-policy@workspace:^, @backstage/plugin-permission-backend-module-allow-all-policy@workspace:plugins/permission-backend-module-policy-allow-all": version: 0.0.0-use.local resolution: "@backstage/plugin-permission-backend-module-allow-all-policy@workspace:plugins/permission-backend-module-policy-allow-all" @@ -8148,84 +6222,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-playlist-backend@workspace:^, @backstage/plugin-playlist-backend@workspace:plugins/playlist-backend": - version: 0.0.0-use.local - resolution: "@backstage/plugin-playlist-backend@workspace:plugins/playlist-backend" - dependencies: - "@backstage/backend-common": "workspace:^" - "@backstage/backend-plugin-api": "workspace:^" - "@backstage/backend-test-utils": "workspace:^" - "@backstage/catalog-client": "workspace:^" - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-auth-node": "workspace:^" - "@backstage/plugin-permission-common": "workspace:^" - "@backstage/plugin-permission-node": "workspace:^" - "@backstage/plugin-playlist-common": "workspace:^" - "@types/express": "*" - "@types/supertest": ^2.0.8 - express: ^4.17.1 - express-promise-router: ^4.1.0 - knex: ^3.0.0 - node-fetch: ^2.6.7 - supertest: ^6.1.3 - uuid: ^9.0.0 - yn: ^4.0.0 - zod: ^3.22.4 - languageName: unknown - linkType: soft - -"@backstage/plugin-playlist-common@workspace:^, @backstage/plugin-playlist-common@workspace:plugins/playlist-common": - version: 0.0.0-use.local - resolution: "@backstage/plugin-playlist-common@workspace:plugins/playlist-common" - dependencies: - "@backstage/cli": "workspace:^" - "@backstage/plugin-permission-common": "workspace:^" - languageName: unknown - linkType: soft - -"@backstage/plugin-playlist@workspace:^, @backstage/plugin-playlist@workspace:plugins/playlist": - version: 0.0.0-use.local - resolution: "@backstage/plugin-playlist@workspace:plugins/playlist" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-app-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog-common": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/plugin-permission-common": "workspace:^" - "@backstage/plugin-permission-react": "workspace:^" - "@backstage/plugin-playlist-common": "workspace:^" - "@backstage/plugin-search-common": "workspace:^" - "@backstage/plugin-search-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - lodash: ^4.17.21 - msw: ^1.0.0 - pluralize: ^8.0.0 - qs: ^6.9.4 - react-hook-form: ^7.13.0 - react-use: ^17.2.4 - swr: ^2.0.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - "@backstage/plugin-proxy-backend@workspace:^, @backstage/plugin-proxy-backend@workspace:plugins/proxy-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-proxy-backend@workspace:plugins/proxy-backend" @@ -8255,84 +6251,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-puppetdb@workspace:^, @backstage/plugin-puppetdb@workspace:plugins/puppetdb": - version: 0.0.0-use.local - resolution: "@backstage/plugin-puppetdb@workspace:plugins/puppetdb" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-app-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - msw: ^1.0.1 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-rollbar-backend@workspace:^, @backstage/plugin-rollbar-backend@workspace:plugins/rollbar-backend": - version: 0.0.0-use.local - resolution: "@backstage/plugin-rollbar-backend@workspace:plugins/rollbar-backend" - dependencies: - "@backstage/backend-common": "workspace:^" - "@backstage/backend-test-utils": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - "@types/express": ^4.17.6 - "@types/supertest": ^2.0.8 - compression: ^1.7.4 - cors: ^2.8.5 - express: ^4.17.1 - express-promise-router: ^4.1.0 - fs-extra: ^11.2.0 - lodash: ^4.17.21 - morgan: ^1.10.0 - msw: ^1.0.0 - node-fetch: ^2.6.7 - supertest: ^6.1.3 - winston: ^3.2.1 - yn: ^4.0.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-rollbar@workspace:^, @backstage/plugin-rollbar@workspace:plugins/rollbar": - version: 0.0.0-use.local - resolution: "@backstage/plugin-rollbar@workspace:plugins/rollbar" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - lodash: ^4.17.21 - react-sparklines: ^1.7.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - "@backstage/plugin-scaffolder-backend-module-azure@workspace:^, @backstage/plugin-scaffolder-backend-module-azure@workspace:plugins/scaffolder-backend-module-azure": version: 0.0.0-use.local resolution: "@backstage/plugin-scaffolder-backend-module-azure@workspace:plugins/scaffolder-backend-module-azure" @@ -8874,13 +6792,13 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-search-backend-module-explore@workspace:plugins/search-backend-module-explore" dependencies: + "@backstage-community/plugin-explore-common": ^0.0.3 "@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-explore-common": "workspace:^" "@backstage/plugin-search-backend-node": "workspace:^" "@backstage/plugin-search-common": "workspace:^" msw: ^1.2.1 @@ -8906,7 +6824,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-search-backend-module-stack-overflow-collator@workspace:^, @backstage/plugin-search-backend-module-stack-overflow-collator@workspace:plugins/search-backend-module-stack-overflow-collator": +"@backstage/plugin-search-backend-module-stack-overflow-collator@workspace:plugins/search-backend-module-stack-overflow-collator": version: 0.0.0-use.local resolution: "@backstage/plugin-search-backend-module-stack-overflow-collator@workspace:plugins/search-backend-module-stack-overflow-collator" dependencies: @@ -9079,64 +6997,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-sentry@workspace:^, @backstage/plugin-sentry@workspace:plugins/sentry": - version: 0.0.0-use.local - resolution: "@backstage/plugin-sentry@workspace:plugins/sentry" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@date-io/core": ^1.3.13 - "@material-table/core": ^3.1.0 - "@material-ui/core": ^4.12.2 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/luxon": ^3.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - luxon: ^3.0.0 - react-sparklines: ^1.7.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-shortcuts@workspace:^, @backstage/plugin-shortcuts@workspace:plugins/shortcuts": - version: 0.0.0-use.local - resolution: "@backstage/plugin-shortcuts@workspace:plugins/shortcuts" - dependencies: - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@backstage/theme": "workspace:^" - "@backstage/types": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - "@types/zen-observable": ^0.8.2 - react-hook-form: ^7.12.2 - react-use: ^17.2.4 - uuid: ^9.0.0 - zen-observable: ^0.10.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - "@backstage/plugin-signals-backend@workspace:^, @backstage/plugin-signals-backend@workspace:plugins/signals-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-signals-backend@workspace:plugins/signals-backend" @@ -9230,313 +7090,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-sonarqube-backend@workspace:^, @backstage/plugin-sonarqube-backend@workspace:plugins/sonarqube-backend": - version: 0.0.0-use.local - resolution: "@backstage/plugin-sonarqube-backend@workspace:plugins/sonarqube-backend" - dependencies: - "@backstage/backend-common": "workspace:^" - "@backstage/backend-plugin-api": "workspace:^" - "@backstage/backend-test-utils": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - "@backstage/errors": "workspace:^" - "@types/express": "*" - "@types/supertest": ^2.0.12 - express: ^4.18.1 - express-promise-router: ^4.1.0 - msw: ^1.0.0 - node-fetch: ^2.6.7 - supertest: ^6.2.4 - yn: ^5.0.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-sonarqube-react@workspace:^, @backstage/plugin-sonarqube-react@workspace:plugins/sonarqube-react": - version: 0.0.0-use.local - resolution: "@backstage/plugin-sonarqube-react@workspace:plugins/sonarqube-react" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@types/react": ^16.13.1 || ^17.0.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-sonarqube@workspace:plugins/sonarqube": - version: 0.0.0-use.local - resolution: "@backstage/plugin-sonarqube@workspace:plugins/sonarqube" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-app-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/plugin-sonarqube-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/styles": ^4.10.0 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - cross-fetch: ^4.0.0 - luxon: ^3.0.0 - msw: ^1.0.0 - rc-progress: 3.5.1 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-splunk-on-call@workspace:plugins/splunk-on-call": - version: 0.0.0-use.local - resolution: "@backstage/plugin-splunk-on-call@workspace:plugins/splunk-on-call" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-app-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/luxon": ^3.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - luxon: ^3.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-stack-overflow-backend@workspace:plugins/stack-overflow-backend": - version: 0.0.0-use.local - resolution: "@backstage/plugin-stack-overflow-backend@workspace:plugins/stack-overflow-backend" - dependencies: - "@backstage/backend-test-utils": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/plugin-search-backend-module-stack-overflow-collator": "workspace:^" - node-fetch: ^2.6.7 - qs: ^6.9.4 - winston: ^3.2.1 - languageName: unknown - linkType: soft - -"@backstage/plugin-stack-overflow@workspace:^, @backstage/plugin-stack-overflow@workspace:plugins/stack-overflow": - version: 0.0.0-use.local - resolution: "@backstage/plugin-stack-overflow@workspace:plugins/stack-overflow" - dependencies: - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/frontend-plugin-api": "workspace:^" - "@backstage/plugin-home-react": "workspace:^" - "@backstage/plugin-search-common": "workspace:^" - "@backstage/plugin-search-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@testing-library/user-event": ^14.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - cross-fetch: ^4.0.0 - lodash: ^4.17.21 - msw: ^1.0.0 - qs: ^6.9.4 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-stackstorm@workspace:^, @backstage/plugin-stackstorm@workspace:plugins/stackstorm": - version: 0.0.0-use.local - resolution: "@backstage/plugin-stackstorm@workspace:plugins/stackstorm" - dependencies: - "@backstage/cli": "workspace:^" - "@backstage/core-app-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - msw: ^1.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-tech-insights-backend-module-jsonfc@workspace:^, @backstage/plugin-tech-insights-backend-module-jsonfc@workspace:plugins/tech-insights-backend-module-jsonfc": - version: 0.0.0-use.local - resolution: "@backstage/plugin-tech-insights-backend-module-jsonfc@workspace:plugins/tech-insights-backend-module-jsonfc" - dependencies: - "@backstage/backend-common": "workspace:^" - "@backstage/backend-plugin-api": "workspace:^" - "@backstage/backend-test-utils": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-tech-insights-common": "workspace:^" - "@backstage/plugin-tech-insights-node": "workspace:^" - "@backstage/types": "workspace:^" - ajv: ^8.10.0 - json-rules-engine: ^6.1.2 - lodash: ^4.17.21 - luxon: ^3.0.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-tech-insights-backend@workspace:^, @backstage/plugin-tech-insights-backend@workspace:plugins/tech-insights-backend": - version: 0.0.0-use.local - resolution: "@backstage/plugin-tech-insights-backend@workspace:plugins/tech-insights-backend" - dependencies: - "@backstage/backend-common": "workspace:^" - "@backstage/backend-plugin-api": "workspace:^" - "@backstage/backend-tasks": "workspace:^" - "@backstage/backend-test-utils": "workspace:^" - "@backstage/catalog-client": "workspace:^" - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-tech-insights-common": "workspace:^" - "@backstage/plugin-tech-insights-node": "workspace:^" - "@backstage/types": "workspace:^" - "@types/express": ^4.17.6 - "@types/luxon": ^3.0.0 - "@types/semver": ^7.3.8 - "@types/supertest": ^2.0.8 - express: ^4.17.1 - express-promise-router: ^4.1.0 - knex: ^3.0.0 - lodash: ^4.17.21 - luxon: ^3.0.0 - semver: ^7.5.3 - supertest: ^6.1.3 - uuid: ^9.0.0 - wait-for-expect: ^3.0.2 - yn: ^4.0.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-tech-insights-common@workspace:^, @backstage/plugin-tech-insights-common@workspace:plugins/tech-insights-common": - version: 0.0.0-use.local - resolution: "@backstage/plugin-tech-insights-common@workspace:plugins/tech-insights-common" - dependencies: - "@backstage/cli": "workspace:^" - "@backstage/types": "workspace:^" - "@types/luxon": ^3.0.0 - luxon: ^3.0.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-tech-insights-node@workspace:^, @backstage/plugin-tech-insights-node@workspace:plugins/tech-insights-node": - version: 0.0.0-use.local - resolution: "@backstage/plugin-tech-insights-node@workspace:plugins/tech-insights-node" - dependencies: - "@backstage/backend-common": "workspace:^" - "@backstage/backend-plugin-api": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - "@backstage/plugin-tech-insights-common": "workspace:^" - "@backstage/types": "workspace:^" - "@types/luxon": ^3.0.0 - luxon: ^3.0.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-tech-insights@workspace:^, @backstage/plugin-tech-insights@workspace:plugins/tech-insights": - version: 0.0.0-use.local - resolution: "@backstage/plugin-tech-insights@workspace:plugins/tech-insights" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/plugin-tech-insights-common": "workspace:^" - "@backstage/types": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - qs: ^6.9.4 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-tech-radar@workspace:^, @backstage/plugin-tech-radar@workspace:plugins/tech-radar": - version: 0.0.0-use.local - resolution: "@backstage/plugin-tech-radar@workspace:plugins/tech-radar" - dependencies: - "@backstage/cli": "workspace:^" - "@backstage/core-compat-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/frontend-plugin-api": "workspace:^" - "@backstage/frontend-test-utils": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@testing-library/user-event": ^14.0.0 - "@types/color": ^3.0.1 - "@types/d3-force": ^3.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - color: ^4.0.1 - d3-force: ^3.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - "@backstage/plugin-techdocs-addons-test-utils@workspace:^, @backstage/plugin-techdocs-addons-test-utils@workspace:plugins/techdocs-addons-test-utils": version: 0.0.0-use.local resolution: "@backstage/plugin-techdocs-addons-test-utils@workspace:plugins/techdocs-addons-test-utils" @@ -9746,54 +7299,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-todo-backend@workspace:^, @backstage/plugin-todo-backend@workspace:plugins/todo-backend": - version: 0.0.0-use.local - resolution: "@backstage/plugin-todo-backend@workspace:plugins/todo-backend" - dependencies: - "@backstage/backend-common": "workspace:^" - "@backstage/backend-openapi-utils": "workspace:^" - "@backstage/backend-plugin-api": "workspace:^" - "@backstage/catalog-client": "workspace:^" - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/integration": "workspace:^" - "@backstage/plugin-catalog-node": "workspace:^" - "@backstage/repo-tools": "workspace:^" - "@types/express": ^4.17.6 - "@types/supertest": ^2.0.8 - express: ^4.17.1 - leasot: ^12.0.0 - supertest: ^6.1.3 - yn: ^4.0.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-todo@workspace:^, @backstage/plugin-todo@workspace:plugins/todo": - version: 0.0.0-use.local - resolution: "@backstage/plugin-todo@workspace:plugins/todo" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/icons": ^4.9.1 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - "@backstage/plugin-user-settings-backend@workspace:plugins/user-settings-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-user-settings-backend@workspace:plugins/user-settings-backend" @@ -9852,103 +7357,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-vault-backend@workspace:plugins/vault-backend": - version: 0.0.0-use.local - resolution: "@backstage/plugin-vault-backend@workspace:plugins/vault-backend" - 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/errors": "workspace:^" - "@backstage/plugin-vault-node": "workspace:^" - "@types/compression": ^1.7.2 - "@types/express": "*" - "@types/supertest": ^2.0.8 - compression: ^1.7.4 - cors: ^2.8.5 - express: ^4.17.1 - express-promise-router: ^4.1.0 - helmet: ^6.0.0 - msw: ^1.0.0 - node-fetch: ^2.6.7 - p-limit: ^3.1.0 - supertest: ^6.1.6 - winston: ^3.2.1 - yn: ^5.0.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-vault-node@workspace:^, @backstage/plugin-vault-node@workspace:plugins/vault-node": - version: 0.0.0-use.local - resolution: "@backstage/plugin-vault-node@workspace:plugins/vault-node" - dependencies: - "@backstage/backend-plugin-api": "workspace:^" - "@backstage/cli": "workspace:^" - languageName: unknown - linkType: soft - -"@backstage/plugin-vault@workspace:plugins/vault": - version: 0.0.0-use.local - resolution: "@backstage/plugin-vault@workspace:plugins/vault" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/core-app-api": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - msw: ^1.0.0 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - -"@backstage/plugin-xcmetrics@workspace:plugins/xcmetrics": - version: 0.0.0-use.local - resolution: "@backstage/plugin-xcmetrics@workspace:plugins/xcmetrics" - dependencies: - "@backstage/cli": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/dev-utils": "workspace:^" - "@backstage/errors": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@testing-library/dom": ^10.0.0 - "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^15.0.0 - "@testing-library/user-event": ^14.0.0 - "@types/luxon": ^3.0.0 - "@types/react": ^16.13.1 || ^17.0.0 || ^18.0.0 - lodash: ^4.17.21 - luxon: ^3.0.0 - react-use: ^17.2.4 - recharts: ^2.5.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - languageName: unknown - linkType: soft - "@backstage/release-manifests@workspace:^, @backstage/release-manifests@workspace:packages/release-manifests": version: 0.0.0-use.local resolution: "@backstage/release-manifests@workspace:packages/release-manifests" @@ -10045,7 +7453,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/theme@^0.5.0, @backstage/theme@^0.5.2, @backstage/theme@workspace:^, @backstage/theme@workspace:packages/theme": +"@backstage/theme@^0.5.0, @backstage/theme@workspace:^, @backstage/theme@workspace:packages/theme": version: 0.0.0-use.local resolution: "@backstage/theme@workspace:packages/theme" dependencies: @@ -10365,32 +7773,6 @@ __metadata: languageName: node linkType: hard -"@circleci/backstage-plugin@npm:^0.1.1": - version: 0.1.1 - resolution: "@circleci/backstage-plugin@npm:0.1.1" - dependencies: - "@backstage/catalog-model": "workspace:^" - "@backstage/core-components": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" - "@backstage/plugin-catalog-react": "workspace:^" - "@backstage/theme": "workspace:^" - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.61 - "@types/react": ^16.13.1 || ^17.0.0 - circleci-api: ^4.0.0 - humanize-duration: ^3.27.0 - lodash: ^4.17.21 - luxon: ^3.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 - checksum: ded80e2eef1cec3f83f76e62b1362499c1662ae6307bdc829b78aed02101af6fd85134d94716fbbb60e8a0d5b3d2a4653df81fbdfcab576a47f7b59a332e580f - languageName: node - linkType: hard - "@codemirror/autocomplete@npm:^6.0.0": version: 6.3.0 resolution: "@codemirror/autocomplete@npm:6.3.0" @@ -10529,13 +7911,6 @@ __metadata: languageName: node linkType: hard -"@date-io/core@npm:2.10.7": - version: 2.10.7 - resolution: "@date-io/core@npm:2.10.7" - checksum: 0d8b047e600296ffe31f83a6785d8a80ffbc2de1b536ce0349275c383b4cc30f62316e88ee6da21d39b8081a1d8fe2f698e7ec78927458603fdc47ec2fc64e25 - languageName: node - linkType: hard - "@date-io/date-fns@npm:^1.3.13": version: 1.3.13 resolution: "@date-io/date-fns@npm:1.3.13" @@ -10547,17 +7922,6 @@ __metadata: languageName: node linkType: hard -"@date-io/luxon@npm:1.x, @date-io/luxon@npm:^1.3.13": - version: 1.3.13 - resolution: "@date-io/luxon@npm:1.3.13" - dependencies: - "@date-io/core": ^1.3.13 - peerDependencies: - luxon: ^1.21.3 - checksum: 7dd18ef11ea14111595d8836247ffe756889bd31309796fd98f3bf05b5aaf25f63e8574280d35ae1f511ba11ba6903accc4a584b7103b8affd626b79ab69b056 - languageName: node - linkType: hard - "@davidzemon/passport-okta-oauth@npm:^0.0.5": version: 0.0.5 resolution: "@davidzemon/passport-okta-oauth@npm:0.0.5" @@ -10593,7 +7957,7 @@ __metadata: languageName: node linkType: hard -"@emotion/babel-plugin@npm:^11.10.5, @emotion/babel-plugin@npm:^11.11.0": +"@emotion/babel-plugin@npm:^11.11.0": version: 11.11.0 resolution: "@emotion/babel-plugin@npm:11.11.0" dependencies: @@ -10612,7 +7976,7 @@ __metadata: languageName: node linkType: hard -"@emotion/cache@npm:^11.10.5, @emotion/cache@npm:^11.11.0": +"@emotion/cache@npm:^11.11.0": version: 11.11.0 resolution: "@emotion/cache@npm:11.11.0" dependencies: @@ -10648,7 +8012,7 @@ __metadata: languageName: node linkType: hard -"@emotion/is-prop-valid@npm:^1.1.0, @emotion/is-prop-valid@npm:^1.2.0, @emotion/is-prop-valid@npm:^1.2.2": +"@emotion/is-prop-valid@npm:^1.1.0, @emotion/is-prop-valid@npm:^1.2.2": version: 1.2.2 resolution: "@emotion/is-prop-valid@npm:1.2.2" dependencies: @@ -10671,30 +8035,6 @@ __metadata: languageName: node linkType: hard -"@emotion/react@npm:11.10.5": - version: 11.10.5 - resolution: "@emotion/react@npm:11.10.5" - dependencies: - "@babel/runtime": ^7.18.3 - "@emotion/babel-plugin": ^11.10.5 - "@emotion/cache": ^11.10.5 - "@emotion/serialize": ^1.1.1 - "@emotion/use-insertion-effect-with-fallbacks": ^1.0.0 - "@emotion/utils": ^1.2.0 - "@emotion/weak-memoize": ^0.3.0 - hoist-non-react-statics: ^3.3.1 - peerDependencies: - "@babel/core": ^7.0.0 - react: ">=16.8.0" - peerDependenciesMeta: - "@babel/core": - optional: true - "@types/react": - optional: true - checksum: 32b67b28e9b6d6c53b970072680697f04c2521441050bdeb19a1a7f0164af549b4dad39ff375eda1b6a3cf1cc86ba2c6fa55460ec040e6ebbca3e9ec58353cf7 - languageName: node - linkType: hard - "@emotion/react@npm:^11.10.5": version: 11.11.4 resolution: "@emotion/react@npm:11.11.4" @@ -10716,7 +8056,7 @@ __metadata: languageName: node linkType: hard -"@emotion/serialize@npm:^1.1.1, @emotion/serialize@npm:^1.1.2, @emotion/serialize@npm:^1.1.3, @emotion/serialize@npm:^1.1.4": +"@emotion/serialize@npm:^1.1.2, @emotion/serialize@npm:^1.1.3, @emotion/serialize@npm:^1.1.4": version: 1.1.4 resolution: "@emotion/serialize@npm:1.1.4" dependencies: @@ -10736,29 +8076,6 @@ __metadata: languageName: node linkType: hard -"@emotion/styled@npm:11.10.5": - version: 11.10.5 - resolution: "@emotion/styled@npm:11.10.5" - dependencies: - "@babel/runtime": ^7.18.3 - "@emotion/babel-plugin": ^11.10.5 - "@emotion/is-prop-valid": ^1.2.0 - "@emotion/serialize": ^1.1.1 - "@emotion/use-insertion-effect-with-fallbacks": ^1.0.0 - "@emotion/utils": ^1.2.0 - peerDependencies: - "@babel/core": ^7.0.0 - "@emotion/react": ^11.0.0-rc.0 - react: ">=16.8.0" - peerDependenciesMeta: - "@babel/core": - optional: true - "@types/react": - optional: true - checksum: 1cec5f6aeb227a7255141031e8594f38ad83902413472aae0a46c27e5f9769c01e23c1ad39adee408d8a2168a697464314d1a0c4f50b31a5d25ea506b2d7bbc8 - languageName: node - linkType: hard - "@emotion/styled@npm:^11.10.5": version: 11.11.5 resolution: "@emotion/styled@npm:11.11.5" @@ -10800,7 +8117,7 @@ __metadata: languageName: node linkType: hard -"@emotion/use-insertion-effect-with-fallbacks@npm:^1.0.0, @emotion/use-insertion-effect-with-fallbacks@npm:^1.0.1": +"@emotion/use-insertion-effect-with-fallbacks@npm:^1.0.1": version: 1.0.1 resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.0.1" peerDependencies: @@ -10809,14 +8126,14 @@ __metadata: languageName: node linkType: hard -"@emotion/utils@npm:^1.2.0, @emotion/utils@npm:^1.2.1": +"@emotion/utils@npm:^1.2.1": version: 1.2.1 resolution: "@emotion/utils@npm:1.2.1" checksum: e0b44be0705b56b079c55faff93952150be69e79b660ae70ddd5b6e09fc40eb1319654315a9f34bb479d7f4ec94be6068c061abbb9e18b9778ae180ad5d97c73 languageName: node linkType: hard -"@emotion/weak-memoize@npm:^0.3.0, @emotion/weak-memoize@npm:^0.3.1": +"@emotion/weak-memoize@npm:^0.3.1": version: 0.3.1 resolution: "@emotion/weak-memoize@npm:0.3.1" checksum: b2be47caa24a8122622ea18cd2d650dbb4f8ad37b636dc41ed420c2e082f7f1e564ecdea68122b546df7f305b159bf5ab9ffee872abd0f052e687428459af594 @@ -11259,19 +8576,7 @@ __metadata: languageName: node linkType: hard -"@gitbeaker/browser@npm:^35.6.0": - version: 35.8.1 - resolution: "@gitbeaker/browser@npm:35.8.1" - dependencies: - "@gitbeaker/core": ^35.8.1 - "@gitbeaker/requester-utils": ^35.8.1 - delay: ^5.0.0 - ky: 0.28.7 - checksum: 8a76322cfd19da3d691fb08c7ebc79971da02cfb950841578523f20de02cb5e2dcf9741eca048dfa17d6a9620eb4884c9a29d84a230ba9c8d18fc528deb830cd - languageName: node - linkType: hard - -"@gitbeaker/core@npm:^35.6.0, @gitbeaker/core@npm:^35.8.0, @gitbeaker/core@npm:^35.8.1": +"@gitbeaker/core@npm:^35.8.0, @gitbeaker/core@npm:^35.8.1": version: 35.8.1 resolution: "@gitbeaker/core@npm:35.8.1" dependencies: @@ -11437,33 +8742,6 @@ __metadata: languageName: node linkType: hard -"@graphiql/react@npm:^0.21.0": - version: 0.21.0 - resolution: "@graphiql/react@npm:0.21.0" - dependencies: - "@graphiql/toolkit": ^0.9.1 - "@headlessui/react": ^1.7.15 - "@radix-ui/react-dialog": ^1.0.4 - "@radix-ui/react-dropdown-menu": ^2.0.5 - "@radix-ui/react-tooltip": ^1.0.6 - "@radix-ui/react-visually-hidden": ^1.0.3 - "@types/codemirror": ^5.60.8 - clsx: ^1.2.1 - codemirror: ^5.65.3 - codemirror-graphql: ^2.0.11 - copy-to-clipboard: ^3.2.0 - framer-motion: ^6.5.1 - graphql-language-service: ^5.2.0 - markdown-it: ^14.1.0 - set-value: ^4.1.0 - peerDependencies: - graphql: ^15.5.0 || ^16.0.0 - react: ^16.8.0 || ^17 || ^18 - react-dom: ^16.8.0 || ^17 || ^18 - checksum: a0515477b06afdbfa032475456ac08133e10d85d58f332048e38a54c7c4d02e62354996abad7f42d194c6e1dc7fb8365e3ac739f4ae51bf4a8f80403abb81be3 - languageName: node - linkType: hard - "@graphiql/toolkit@npm:^0.9.1": version: 0.9.1 resolution: "@graphiql/toolkit@npm:0.9.1" @@ -12597,48 +9875,6 @@ __metadata: languageName: node linkType: hard -"@material-ui/lab@npm:4.0.0-alpha.45": - version: 4.0.0-alpha.45 - resolution: "@material-ui/lab@npm:4.0.0-alpha.45" - dependencies: - "@babel/runtime": ^7.4.4 - "@material-ui/utils": ^4.7.1 - clsx: ^1.0.4 - prop-types: ^15.7.2 - react-is: ^16.8.0 - peerDependencies: - "@material-ui/core": ^4.9.0 - "@types/react": ^16.8.6 - react: ^16.8.0 - react-dom: ^16.8.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: fa9edb1c6351df6b5d69faa32f94a98fe4ab1b54da02c2287f8448041f9bbb7df940deb1c9dce169c00c0e46d3553175b16a56129a549320ece39094c8836eba - languageName: node - linkType: hard - -"@material-ui/lab@npm:4.0.0-alpha.57": - version: 4.0.0-alpha.57 - resolution: "@material-ui/lab@npm:4.0.0-alpha.57" - dependencies: - "@babel/runtime": ^7.4.4 - "@material-ui/utils": ^4.11.2 - clsx: ^1.0.4 - prop-types: ^15.7.2 - react-is: ^16.8.0 || ^17.0.0 - peerDependencies: - "@material-ui/core": ^4.9.10 - "@types/react": ^16.8.6 || ^17.0.0 - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 0bc8b35e4a96ea04fa3fd43a64ff9685bdea2ad6ed8baf4c8f5cbe1524101a87f33229f6d23638074a3626fc3c55ba15a38d2ab984777dda896e117d0cea5c0e - languageName: node - linkType: hard - "@material-ui/lab@npm:4.0.0-alpha.61, @material-ui/lab@npm:^4.0.0-alpha.57, @material-ui/lab@npm:^4.0.0-alpha.60, @material-ui/lab@npm:^4.0.0-alpha.61": version: 4.0.0-alpha.61 resolution: "@material-ui/lab@npm:4.0.0-alpha.61" @@ -12700,7 +9936,7 @@ __metadata: languageName: node linkType: hard -"@material-ui/styles@npm:^4.10.0, @material-ui/styles@npm:^4.11.0, @material-ui/styles@npm:^4.11.4, @material-ui/styles@npm:^4.11.5, @material-ui/styles@npm:^4.9.6": +"@material-ui/styles@npm:^4.10.0, @material-ui/styles@npm:^4.11.0, @material-ui/styles@npm:^4.11.4, @material-ui/styles@npm:^4.11.5": version: 4.11.5 resolution: "@material-ui/styles@npm:4.11.5" dependencies: @@ -12774,7 +10010,7 @@ __metadata: languageName: node linkType: hard -"@material-ui/utils@npm:^4.11.2, @material-ui/utils@npm:^4.11.3, @material-ui/utils@npm:^4.7.1": +"@material-ui/utils@npm:^4.11.3": version: 4.11.3 resolution: "@material-ui/utils@npm:4.11.3" dependencies: @@ -12788,15 +10024,6 @@ __metadata: languageName: node linkType: hard -"@maxim_mazurok/gapi.client.calendar@npm:^3.0.20220408": - version: 3.0.20220805 - resolution: "@maxim_mazurok/gapi.client.calendar@npm:3.0.20220805" - dependencies: - "@types/gapi.client": "*" - checksum: 981560f83b310a9a8ab1641befac02b732ce92e803b20dabd2cb6fc701d4df97aa265820762455385ce9691850ce31f4323778c60de11f144060800cf10c6ef5 - languageName: node - linkType: hard - "@microsoft/api-documenter@npm:^7.22.33": version: 7.22.33 resolution: "@microsoft/api-documenter@npm:7.22.33" @@ -12847,7 +10074,7 @@ __metadata: languageName: node linkType: hard -"@microsoft/microsoft-graph-types@npm:^2.25.0, @microsoft/microsoft-graph-types@npm:^2.6.0": +"@microsoft/microsoft-graph-types@npm:^2.6.0": version: 2.40.0 resolution: "@microsoft/microsoft-graph-types@npm:2.40.0" checksum: 3892e910baf4fcf2d1bcee4c71683e3707818be6ff1b4b9dbc29b9e2eab942ea0b171b3023d4620213f10d93d03611e6615706a3d1af4ca44028491a0544ccaf @@ -12985,29 +10212,6 @@ __metadata: languageName: node linkType: hard -"@mui/base@npm:5.0.0-alpha.112": - version: 5.0.0-alpha.112 - resolution: "@mui/base@npm:5.0.0-alpha.112" - dependencies: - "@babel/runtime": ^7.20.7 - "@emotion/is-prop-valid": ^1.2.0 - "@mui/types": ^7.2.3 - "@mui/utils": ^5.11.2 - "@popperjs/core": ^2.11.6 - clsx: ^1.2.1 - prop-types: ^15.8.1 - react-is: ^18.2.0 - peerDependencies: - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: fd19240ac16859d62f057fd80261fc4e0dbc960a648b601bd7beaeb44b88c059f654b0989f33cea655ad61106832bffa0cd8446730c1be7671b6cde383dbce80 - languageName: node - linkType: hard - "@mui/base@npm:5.0.0-beta.40": version: 5.0.0-beta.40 resolution: "@mui/base@npm:5.0.0-beta.40" @@ -13030,92 +10234,13 @@ __metadata: languageName: node linkType: hard -"@mui/core-downloads-tracker@npm:^5.11.2, @mui/core-downloads-tracker@npm:^5.15.15": +"@mui/core-downloads-tracker@npm:^5.15.15": version: 5.15.15 resolution: "@mui/core-downloads-tracker@npm:5.15.15" checksum: 3e99a04e03f66d5fa5f0c23cdce0f9fa2331ba08c99a75dc2347ccaa1c6ed520153e04aaeb0d613c9dca099a3e6242558a6284c33d93f95cc65e3243b17860bc languageName: node linkType: hard -"@mui/icons-material@npm:5.11.0": - version: 5.11.0 - resolution: "@mui/icons-material@npm:5.11.0" - dependencies: - "@babel/runtime": ^7.20.6 - peerDependencies: - "@mui/material": ^5.0.0 - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 764c1185b3432f0228f3c5217b0e218b10f106fa96d305dfc62c0ef5afd2a7a087b0d664fd0a8171282e195c18d3ee073d5f037901a2bed1a1519a70fbb0501c - languageName: node - linkType: hard - -"@mui/lab@npm:5.0.0-alpha.114": - version: 5.0.0-alpha.114 - resolution: "@mui/lab@npm:5.0.0-alpha.114" - dependencies: - "@babel/runtime": ^7.20.7 - "@mui/base": 5.0.0-alpha.112 - "@mui/system": ^5.11.2 - "@mui/types": ^7.2.3 - "@mui/utils": ^5.11.2 - clsx: ^1.2.1 - prop-types: ^15.8.1 - react-is: ^18.2.0 - peerDependencies: - "@emotion/react": ^11.5.0 - "@emotion/styled": ^11.3.0 - "@mui/material": ^5.0.0 - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@emotion/react": - optional: true - "@emotion/styled": - optional: true - "@types/react": - optional: true - checksum: 0b6441e7f7a69e2a6910f044ef2a222462a219f61e3a05c023484508e7f14a5fe6baeddf08b37bceab357c7cb0eed90324ac42ecd8e59a6eb6e1c801ea01504a - languageName: node - linkType: hard - -"@mui/material@npm:5.11.2": - version: 5.11.2 - resolution: "@mui/material@npm:5.11.2" - dependencies: - "@babel/runtime": ^7.20.7 - "@mui/base": 5.0.0-alpha.112 - "@mui/core-downloads-tracker": ^5.11.2 - "@mui/system": ^5.11.2 - "@mui/types": ^7.2.3 - "@mui/utils": ^5.11.2 - "@types/react-transition-group": ^4.4.5 - clsx: ^1.2.1 - csstype: ^3.1.1 - prop-types: ^15.8.1 - react-is: ^18.2.0 - react-transition-group: ^4.4.5 - peerDependencies: - "@emotion/react": ^11.5.0 - "@emotion/styled": ^11.3.0 - "@types/react": ^17.0.0 || ^18.0.0 - react: ^17.0.0 || ^18.0.0 - react-dom: ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@emotion/react": - optional: true - "@emotion/styled": - optional: true - "@types/react": - optional: true - checksum: 4f2baa4b4d8f7842b081e9e919172020f7055e33c24af36c5a458eac1a76ff3e896651fdf21daa523a68ac0bfb3670864c1b4dec9fae6d8fadf2b602f14f95ea - languageName: node - linkType: hard - "@mui/material@npm:^5.12.2": version: 5.15.15 resolution: "@mui/material@npm:5.15.15" @@ -13218,7 +10343,7 @@ __metadata: languageName: node linkType: hard -"@mui/system@npm:^5.11.2, @mui/system@npm:^5.15.15": +"@mui/system@npm:^5.15.15": version: 5.15.15 resolution: "@mui/system@npm:5.15.15" dependencies: @@ -13246,7 +10371,7 @@ __metadata: languageName: node linkType: hard -"@mui/types@npm:^7.2.14, @mui/types@npm:^7.2.3": +"@mui/types@npm:^7.2.14": version: 7.2.14 resolution: "@mui/types@npm:7.2.14" peerDependencies: @@ -13258,7 +10383,7 @@ __metadata: languageName: node linkType: hard -"@mui/utils@npm:^5.11.2, @mui/utils@npm:^5.14.15, @mui/utils@npm:^5.15.14": +"@mui/utils@npm:^5.14.15, @mui/utils@npm:^5.15.14": version: 5.15.14 resolution: "@mui/utils@npm:5.15.14" dependencies: @@ -13344,18 +10469,6 @@ __metadata: languageName: node linkType: hard -"@newrelic/browser-agent@npm:^1.236.0": - version: 1.252.1 - resolution: "@newrelic/browser-agent@npm:1.252.1" - dependencies: - core-js: ^3.26.0 - fflate: ^0.7.4 - rrweb: 2.0.0-alpha.11 - web-vitals: ^3.1.0 - checksum: 19570311115a926fd99dd24036f71fc304834c6cc379ebcbef874288d6d9a0e3abd77c81df99110bbc395a2d68c4ceb926940913aac7ae4c6bfa9d5e7dfec875 - languageName: node - linkType: hard - "@node-saml/node-saml@npm:^4.0.4": version: 4.0.5 resolution: "@node-saml/node-saml@npm:4.0.5" @@ -14756,7 +11869,7 @@ __metadata: languageName: node linkType: hard -"@popperjs/core@npm:^2.11.6, @popperjs/core@npm:^2.11.8": +"@popperjs/core@npm:^2.11.8": version: 2.11.8 resolution: "@popperjs/core@npm:2.11.8" checksum: e5c69fdebf52a4012f6a1f14817ca8e9599cb1be73dd1387e1785e2ed5e5f0862ff817f420a87c7fc532add1f88a12e25aeb010ffcbdc98eace3d55ce2139cf0 @@ -15530,113 +12643,6 @@ __metadata: languageName: node linkType: hard -"@roadiehq/backstage-plugin-buildkite@npm:^2.0.8": - version: 2.1.22 - resolution: "@roadiehq/backstage-plugin-buildkite@npm:2.1.22" - dependencies: - "@backstage/catalog-model": ^1.4.5 - "@backstage/core-components": ^0.14.3 - "@backstage/core-plugin-api": ^1.9.1 - "@backstage/plugin-catalog-react": ^1.11.2 - "@backstage/theme": ^0.5.2 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.11.2 - "@material-ui/lab": 4.0.0-alpha.57 - history: ^5.0.0 - moment: ^2.29.1 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router: 6.0.0-beta.0 || ^6.3.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: dfc24af432311725dcede466cc0b8fd070ab3f52cca66d6ca73094096cce42dc79e4bdd32eceb9a749bd0f1c3e707f5113fa7a06031ce5e6c6de00d5aa25e582 - languageName: node - linkType: hard - -"@roadiehq/backstage-plugin-github-insights@npm:^2.0.5": - version: 2.3.28 - resolution: "@roadiehq/backstage-plugin-github-insights@npm:2.3.28" - dependencies: - "@backstage/catalog-model": ^1.4.5 - "@backstage/core-components": ^0.14.3 - "@backstage/core-plugin-api": ^1.9.1 - "@backstage/integration-react": ^1.1.25 - "@backstage/plugin-catalog-react": ^1.11.2 - "@backstage/theme": ^0.5.2 - "@date-io/core": 2.10.7 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": 4.0.0-alpha.45 - "@octokit/rest": ^19.0.3 - "@octokit/types": ^9.0.0 - history: ^5.0.0 - immer: 9.0.7 - react-use: ^17.2.4 - zustand: 3.6.9 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router: 6.0.0-beta.0 || ^6.3.0 - checksum: a7955de4d5af049c8af3216b394c157d90e3890f8c31ab47042ab8cd423b3fb98808eb8c9997b66cdd0868ee6bea067e71b110909302841c686559e83ca4dfd1 - languageName: node - linkType: hard - -"@roadiehq/backstage-plugin-github-pull-requests@npm:^2.2.7": - version: 2.5.25 - resolution: "@roadiehq/backstage-plugin-github-pull-requests@npm:2.5.25" - dependencies: - "@backstage/catalog-model": ^1.4.5 - "@backstage/core-components": ^0.14.3 - "@backstage/core-plugin-api": ^1.9.1 - "@backstage/plugin-catalog-react": ^1.11.2 - "@backstage/plugin-home-react": ^0.1.11 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.9.1 - "@material-ui/lab": ^4.0.0-alpha.60 - "@octokit/rest": ^19.0.3 - "@octokit/types": ^9.0.0 - "@types/node-fetch": ^2.5.7 - history: ^5.0.0 - lodash: ^4.17.21 - luxon: ^3.0.0 - msw: ^1.0.1 - node-fetch: ^2.6.1 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router: 6.0.0-beta.0 || ^6.3.0 - checksum: 009322d338dd5fae958bd1f660cedab0d00e447d1e15468ce0bf04a51822914f00424012091874fadba4689006d5f1bb0c662cf248397d3e631984047ad156c1 - languageName: node - linkType: hard - -"@roadiehq/backstage-plugin-travis-ci@npm:^2.0.5": - version: 2.1.22 - resolution: "@roadiehq/backstage-plugin-travis-ci@npm:2.1.22" - dependencies: - "@backstage/catalog-model": ^1.4.5 - "@backstage/core-components": ^0.14.3 - "@backstage/core-plugin-api": ^1.9.1 - "@backstage/plugin-catalog-react": ^1.11.2 - "@backstage/theme": ^0.5.2 - "@material-ui/core": ^4.12.2 - "@material-ui/icons": ^4.11.2 - "@material-ui/lab": 4.0.0-alpha.57 - cross-fetch: ^3.1.3 - date-fns: ^2.18.0 - history: ^5.0.0 - moment: ^2.29.1 - react-use: ^17.2.4 - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 - react-router: 6.0.0-beta.0 || ^6.3.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: 7c9537c7e277ffc430daac1afdd53765c27d2c12af73860e249ab859c096c732d1ad0166ddbe9a5bff9ff749908da3199b49da1e4028a7cee1c1cf1fbc9c50b5 - languageName: node - linkType: hard - "@rollup/plugin-commonjs@npm:^25.0.0": version: 25.0.7 resolution: "@rollup/plugin-commonjs@npm:25.0.7" @@ -15859,15 +12865,6 @@ __metadata: languageName: node linkType: hard -"@rrweb/types@npm:^2.0.0-alpha.11": - version: 2.0.0-alpha.11 - resolution: "@rrweb/types@npm:2.0.0-alpha.11" - dependencies: - rrweb-snapshot: ^2.0.0-alpha.11 - checksum: 63c815597daacb7f6978c973c53e6e8f10301c0224ce675792c2c8a2cdf059845aefef92b2ee259837813081796398e3432195fdd8cb72c437ab77a20c50b2c7 - languageName: node - linkType: hard - "@rushstack/node-core-library@npm:3.59.7": version: 3.59.7 resolution: "@rushstack/node-core-library@npm:3.59.7" @@ -17830,32 +14827,6 @@ __metadata: languageName: node linkType: hard -"@tanstack/query-core@npm:4.36.1": - version: 4.36.1 - resolution: "@tanstack/query-core@npm:4.36.1" - checksum: 47672094da20d89402d9fe03bb7b0462be73a76ff9ca715169738bc600a719d064d106d083a8eedae22a2c22de22f87d5eb5d31ef447aba771d9190f2117ed10 - languageName: node - linkType: hard - -"@tanstack/react-query@npm:^4.1.3": - version: 4.36.1 - resolution: "@tanstack/react-query@npm:4.36.1" - dependencies: - "@tanstack/query-core": 4.36.1 - use-sync-external-store: ^1.2.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-native: "*" - peerDependenciesMeta: - react-dom: - optional: true - react-native: - optional: true - checksum: 1aff0a476859386f8d32253fa0d0bde7b81769a6d4d4d9cbd78778f0f955459a3bdb7ee27a0d2ee7373090f12998b45df80db0b5b313bd0a7a39d36c6e8e51c5 - languageName: node - linkType: hard - "@techdocs/cli@workspace:*, @techdocs/cli@workspace:packages/techdocs-cli": version: 0.0.0-use.local resolution: "@techdocs/cli@workspace:packages/techdocs-cli" @@ -17905,7 +14876,7 @@ __metadata: languageName: node linkType: hard -"@testing-library/jest-dom@npm:*, @testing-library/jest-dom@npm:^6.0.0": +"@testing-library/jest-dom@npm:^6.0.0": version: 6.4.2 resolution: "@testing-library/jest-dom@npm:6.4.2" dependencies: @@ -18168,19 +15139,6 @@ __metadata: languageName: node linkType: hard -"@types/body-parser-xml@npm:^2.0.2": - version: 2.0.5 - resolution: "@types/body-parser-xml@npm:2.0.5" - dependencies: - "@types/body-parser": "*" - "@types/connect": "*" - "@types/express-serve-static-core": "*" - "@types/node": "*" - "@types/xml2js": "*" - checksum: 97def7a9c60fe72d78a29b14c05bee5cd3f9afb365db919d139d72691ec0435d9df0b2c2f208edcc375c8a78e5dce75bd142c8f2fd5377c101f1c80405df6506 - languageName: node - linkType: hard - "@types/body-parser@npm:*, @types/body-parser@npm:^1.19.0": version: 1.19.5 resolution: "@types/body-parser@npm:1.19.5" @@ -18244,7 +15202,7 @@ __metadata: languageName: node linkType: hard -"@types/codemirror@npm:^5.0.0, @types/codemirror@npm:^5.60.8": +"@types/codemirror@npm:^5.60.8": version: 5.60.15 resolution: "@types/codemirror@npm:5.60.15" dependencies: @@ -18253,31 +15211,6 @@ __metadata: languageName: node linkType: hard -"@types/color-convert@npm:*": - version: 2.0.0 - resolution: "@types/color-convert@npm:2.0.0" - dependencies: - "@types/color-name": "*" - checksum: 027b68665dc2278cc2d83e796ada0a05a08aa5a11297e227c48c7f9f6eac518dec98578ab0072bd211963d3e4b431da70b20ea28d6c3136d0badfd3f9913baee - languageName: node - linkType: hard - -"@types/color-name@npm:*": - version: 1.1.1 - resolution: "@types/color-name@npm:1.1.1" - checksum: b71fcad728cc68abcba1d405742134410c8f8eb3c2ef18113b047afca158ad23a4f2c229bcf71a38f4a818dead375c45b20db121d0e69259c2d81e97a740daa6 - languageName: node - linkType: hard - -"@types/color@npm:^3.0.1": - version: 3.0.6 - resolution: "@types/color@npm:3.0.6" - dependencies: - "@types/color-convert": "*" - checksum: 0f16dcf4e202896d5425019c44a1f99713fca998052ab2fd836cdd38048398a0caf5b79a2efe560e41fca4b9401e8d8f6f02ed541cfea30cca3a8cb1b50b80f7 - languageName: node - linkType: hard - "@types/command-exists@npm:^1.2.0": version: 1.2.3 resolution: "@types/command-exists@npm:1.2.3" @@ -18294,7 +15227,7 @@ __metadata: languageName: node linkType: hard -"@types/compression@npm:^1.7.0, @types/compression@npm:^1.7.2": +"@types/compression@npm:^1.7.0": version: 1.7.5 resolution: "@types/compression@npm:1.7.5" dependencies: @@ -18386,20 +15319,6 @@ __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" - checksum: b0e398365fc1f638d48442e865e036d671c731b2b18f7a92e5172db1f60f5a38d4cd992693a29ad64b38e7ba981eb8c63a2aef95fbdcfbc4bf8926a9cb9ca978 - languageName: node - linkType: hard - "@types/d3-color@npm:*": version: 3.0.2 resolution: "@types/d3-color@npm:3.0.2" @@ -18407,21 +15326,7 @@ __metadata: languageName: node linkType: hard -"@types/d3-ease@npm:^3.0.0": - version: 3.0.0 - resolution: "@types/d3-ease@npm:3.0.0" - checksum: 1be7c993643b5a08332e0ee146375a3845545d8deb423db5d152e0b061524385d2345ceccf968f75f605247b940dd3f9a144335fee2e7d935cddaf187afb7095 - languageName: node - linkType: hard - -"@types/d3-force@npm:^3.0.0": - version: 3.0.9 - resolution: "@types/d3-force@npm:3.0.9" - checksum: 6ec16109b5048cda0877931b5e60565436fee697ccbc223eae1562c4a8401dddacb25b0137da2babca2a810ad0471114444e08c8e395ce90758d768a05a23b4f - languageName: node - linkType: hard - -"@types/d3-interpolate@npm:*, @types/d3-interpolate@npm:^3.0.1": +"@types/d3-interpolate@npm:*": version: 3.0.1 resolution: "@types/d3-interpolate@npm:3.0.1" dependencies: @@ -18437,22 +15342,6 @@ __metadata: languageName: node linkType: hard -"@types/d3-path@npm:^1": - version: 1.0.9 - resolution: "@types/d3-path@npm:1.0.9" - checksum: acbf7376fd7bef61701bce915bf5a9cb5eaa9741b7919d3e644f841a65faf1aea3cf63ba949c21ddda8c9849221394856a2054805aa698d3bb5ac3fe7d029817 - languageName: node - linkType: hard - -"@types/d3-scale@npm:^4.0.2": - version: 4.0.3 - resolution: "@types/d3-scale@npm:4.0.3" - dependencies: - "@types/d3-time": "*" - checksum: 76684da8519ab5f2210e647f74f96ece9c6816dea4ad5d76131121703a5268cc65687a8bc9ebbf4a44039482247336d98811ecc3fbfeb7f0122fdce4bb295547 - languageName: node - linkType: hard - "@types/d3-selection@npm:*, @types/d3-selection@npm:^3.0.1": version: 3.0.10 resolution: "@types/d3-selection@npm:3.0.10" @@ -18460,16 +15349,7 @@ __metadata: languageName: node linkType: hard -"@types/d3-shape@npm:^1": - version: 1.3.12 - resolution: "@types/d3-shape@npm:1.3.12" - dependencies: - "@types/d3-path": ^1 - checksum: 3a62a0a20ef3f767ecd396b2331b836aeaba43a87926a33bb257e3bbe9c70013a2be60718dd94539e287d628da2c5b6f80675c12c0c3a086a3f4129b04ac2285 - languageName: node - linkType: hard - -"@types/d3-shape@npm:^3.0.1, @types/d3-shape@npm:^3.1.0": +"@types/d3-shape@npm:^3.0.1": version: 3.1.6 resolution: "@types/d3-shape@npm:3.1.6" dependencies: @@ -18478,20 +15358,6 @@ __metadata: languageName: node linkType: hard -"@types/d3-time@npm:*, @types/d3-time@npm:^3.0.0": - version: 3.0.0 - resolution: "@types/d3-time@npm:3.0.0" - checksum: e76adb056daccf80107f4db190ac6deb77e8774f00362bb6c76f178e67f2f217422fe502b654edbc9ac6451f6619045b9f6f5fe0db1ec5520e2ada377af7c72e - languageName: node - linkType: hard - -"@types/d3-timer@npm:^3.0.0": - version: 3.0.0 - resolution: "@types/d3-timer@npm:3.0.0" - checksum: 1ec86b3808de6ecfa93cfdf34254761069658af0cc1d9540e8353dbcba161cdf1296a0724187bd17433b2ff16563115fd20b85fc89d5e809ff28f9b1ab134b42 - languageName: node - linkType: hard - "@types/d3-zoom@npm:^3.0.1": version: 3.0.8 resolution: "@types/d3-zoom@npm:3.0.8" @@ -18671,13 +15537,6 @@ __metadata: languageName: node linkType: hard -"@types/gapi.client@npm:*": - version: 1.0.5 - resolution: "@types/gapi.client@npm:1.0.5" - checksum: 2e85b381b45e290de13052e108e4281c0966065db085c3b4294cd801c9425f8ad37b38f76f6a1f404a963fa326564bed953db3352c933c4f417fa209ff4d3c0c - languageName: node - linkType: hard - "@types/git-url-parse@npm:^9.0.0": version: 9.0.3 resolution: "@types/git-url-parse@npm:9.0.3" @@ -18720,15 +15579,6 @@ __metadata: languageName: node linkType: hard -"@types/highlightjs@npm:^10.1.0": - version: 10.1.0 - resolution: "@types/highlightjs@npm:10.1.0" - dependencies: - highlight.js: ^10.1.0 - checksum: 454606bd5ba7425a845abce0bc3aa5fa0575e1047c97a4b7930d76dfced4fcc1985270ec88632cf45cdb0e266f589c362bb1591573bea730eacd08d3cf169747 - languageName: node - linkType: hard - "@types/hoist-non-react-statics@npm:^3.3.0": version: 3.3.1 resolution: "@types/hoist-non-react-statics@npm:3.3.1" @@ -18778,7 +15628,7 @@ __metadata: languageName: node linkType: hard -"@types/humanize-duration@npm:^3.18.1, @types/humanize-duration@npm:^3.25.1, @types/humanize-duration@npm:^3.27.1": +"@types/humanize-duration@npm:^3.18.1": version: 3.27.4 resolution: "@types/humanize-duration@npm:3.27.4" checksum: aa7fa41af839021c846a1728d2f097b7885f80acbc5050623a9804d23fd8fee19d2654eaae331f000a4e551b88d99cd0b5f6cc97aa99f869b9205f6248066827 @@ -18827,26 +15677,7 @@ __metadata: languageName: node linkType: hard -"@types/jenkins@npm:^1.0.0": - version: 1.0.2 - resolution: "@types/jenkins@npm:1.0.2" - dependencies: - "@types/node": "*" - form-data: ^4.0.0 - checksum: c02895642c81a74cb40740117b5fce0af768ac7985028b6fd0c68d88b350261473db8c05681fc1de0c612579f905f283f0de33efe683ea9a716ae5264287bfba - languageName: node - linkType: hard - -"@types/jest-when@npm:^3.5.0": - version: 3.5.5 - resolution: "@types/jest-when@npm:3.5.5" - dependencies: - "@types/jest": "*" - checksum: 816c1ed5554182c43261d23c2902506c316bc0368f2ea1e632a0a93d05d8f6f2918afa6a406c2f5fdd4d277e042b8d2ba797993dc3c2fd2d5f53cda946696772 - languageName: node - linkType: hard - -"@types/jest@npm:*, @types/jest@npm:^29.0.0, @types/jest@npm:^29.5.11": +"@types/jest@npm:^29.5.11": version: 29.5.12 resolution: "@types/jest@npm:29.5.12" dependencies: @@ -18973,7 +15804,7 @@ __metadata: languageName: node linkType: hard -"@types/lodash@npm:^4.14.151, @types/lodash@npm:^4.14.173": +"@types/lodash@npm:^4.14.151": version: 4.17.0 resolution: "@types/lodash@npm:4.17.0" checksum: 3f98c0b67a93994cbc3403d4fa9dbaf52b0b6bb7f07a764d73875c2dcd5ef91222621bd5bcf8eee7b417a74d175c2f7191b9f595f8603956fd06f0674c0cba93 @@ -19103,7 +15934,7 @@ __metadata: languageName: node linkType: hard -"@types/node-fetch@npm:^2.5.0, @types/node-fetch@npm:^2.5.12, @types/node-fetch@npm:^2.5.7": +"@types/node-fetch@npm:^2.5.0, @types/node-fetch@npm:^2.5.12": version: 2.6.11 resolution: "@types/node-fetch@npm:2.6.11" dependencies: @@ -19205,13 +16036,6 @@ __metadata: languageName: node linkType: hard -"@types/parse-link-header@npm:^2.0.1": - version: 2.0.3 - resolution: "@types/parse-link-header@npm:2.0.3" - checksum: 600093cd66fcc3841e799837581ba9d33ae49c299c00ad3d55791a90f5baa876511cf39aecbf06bc07c60eb7ccd6766ecc8feff52ecae241621f7b1e6c6cdcbc - languageName: node - linkType: hard - "@types/passport-auth0@npm:^1.0.5": version: 1.0.9 resolution: "@types/passport-auth0@npm:1.0.9" @@ -19318,13 +16142,6 @@ __metadata: languageName: node linkType: hard -"@types/pluralize@npm:^0.0.33": - version: 0.0.33 - resolution: "@types/pluralize@npm:0.0.33" - checksum: 282d42dc0187e5e0912f9f36ee0f5615bfd273a08d40afe5bf5881cb28daf1977abe10564543032aa0f42352ebba739ff3d86bf5562ac4691c6d1761fcc7cf39 - languageName: node - linkType: hard - "@types/prettier@npm:^2.0.0": version: 2.7.3 resolution: "@types/prettier@npm:2.7.3" @@ -19446,7 +16263,7 @@ __metadata: languageName: node linkType: hard -"@types/react-transition-group@npm:^4.2.0, @types/react-transition-group@npm:^4.4.10, @types/react-transition-group@npm:^4.4.5": +"@types/react-transition-group@npm:^4.2.0, @types/react-transition-group@npm:^4.4.10": version: 4.4.10 resolution: "@types/react-transition-group@npm:4.4.10" dependencies: @@ -19493,16 +16310,6 @@ __metadata: languageName: node linkType: hard -"@types/recharts@npm:^1.8.14, @types/recharts@npm:^1.8.15": - version: 1.8.29 - resolution: "@types/recharts@npm:1.8.29" - dependencies: - "@types/d3-shape": ^1 - "@types/react": "*" - checksum: 091d018298d9c5e22b1a937e1229e721e2f6ac030fb73024717f6d20f3ff18575557560afd2247987f102f5981402b1fa1bf13362147aa0e89656ecc51ac3e2b - languageName: node - linkType: hard - "@types/recursive-readdir@npm:^2.2.0": version: 2.2.4 resolution: "@types/recursive-readdir@npm:2.2.4" @@ -19512,13 +16319,6 @@ __metadata: languageName: node linkType: hard -"@types/regression@npm:^2.0.0": - version: 2.0.6 - resolution: "@types/regression@npm:2.0.6" - checksum: c412ddd924efd53395f0011b38a6b1dbc94fc71adfa80efcb6657f0f1b6123fb27c101798dda8d0aa638c925900b4b4a9c5c03504a0d1255edd160e3090a5ce9 - languageName: node - linkType: hard - "@types/request@npm:^2.47.1, @types/request@npm:^2.48.8": version: 2.48.12 resolution: "@types/request@npm:2.48.12" @@ -19572,15 +16372,6 @@ __metadata: languageName: node linkType: hard -"@types/sanitize-html@npm:^2.6.2": - version: 2.11.0 - resolution: "@types/sanitize-html@npm:2.11.0" - dependencies: - htmlparser2: ^8.0.0 - checksum: a901d55d31cd946a7fce0130cc7cf6bcf56602af9c87291be77d8149c60e7afc47c83ca74c67c2d84e6ba029fe9bbd6f14f89a8cb30fbd185766eebc5722c251 - languageName: node - linkType: hard - "@types/sarif@npm:^2.1.4": version: 2.1.5 resolution: "@types/sarif@npm:2.1.5" @@ -19595,7 +16386,7 @@ __metadata: languageName: node linkType: hard -"@types/semver@npm:^7.3.12, @types/semver@npm:^7.3.8, @types/semver@npm:^7.5.0": +"@types/semver@npm:^7.3.12, @types/semver@npm:^7.5.0": version: 7.5.8 resolution: "@types/semver@npm:7.5.8" checksum: ea6f5276f5b84c55921785a3a27a3cd37afee0111dfe2bcb3e03c31819c197c782598f17f0b150a69d453c9584cd14c4c4d7b9a55d2c5e6cacd4d66fdb3b3663 @@ -19743,7 +16534,7 @@ __metadata: languageName: node linkType: hard -"@types/supertest@npm:^2.0.12, @types/supertest@npm:^2.0.8": +"@types/supertest@npm:^2.0.8": version: 2.0.16 resolution: "@types/supertest@npm:2.0.16" dependencies: @@ -19798,15 +16589,6 @@ __metadata: languageName: node linkType: hard -"@types/testing-library__jest-dom@npm:^6.0.0": - version: 6.0.0 - resolution: "@types/testing-library__jest-dom@npm:6.0.0" - dependencies: - "@testing-library/jest-dom": "*" - checksum: 1b4db1aa3c4225524203b4d1c3b36c7129e9d1e0547e46d2e5283c3ece226a3c16f5f20387cc71b33ab0eecd99d0cf91111bb327e8adb240388d99fb94af7a4d - languageName: node - linkType: hard - "@types/through@npm:*": version: 0.0.30 resolution: "@types/through@npm:0.0.30" @@ -19902,13 +16684,6 @@ __metadata: languageName: node linkType: hard -"@types/whatwg-mimetype@npm:^3.0.0": - version: 3.0.0 - resolution: "@types/whatwg-mimetype@npm:3.0.0" - checksum: 98254edcddb5b9580aa41c19e6c96d2bfb178285d5c2560e3a1f321f14da70192adc82950baecd2cad5876098b0677fbe813db1edf9ab9ba0a9996f0bf2bb703 - languageName: node - linkType: hard - "@types/wrap-ansi@npm:^3.0.0": version: 3.0.0 resolution: "@types/wrap-ansi@npm:3.0.0" @@ -19944,7 +16719,7 @@ __metadata: languageName: node linkType: hard -"@types/xml2js@npm:*, @types/xml2js@npm:^0.4.11, @types/xml2js@npm:^0.4.7": +"@types/xml2js@npm:^0.4.11, @types/xml2js@npm:^0.4.7": version: 0.4.14 resolution: "@types/xml2js@npm:0.4.14" dependencies: @@ -19994,7 +16769,7 @@ __metadata: languageName: node linkType: hard -"@types/zen-observable@npm:^0.8.0, @types/zen-observable@npm:^0.8.2": +"@types/zen-observable@npm:^0.8.0": version: 0.8.7 resolution: "@types/zen-observable@npm:0.8.7" checksum: 6d4cdccded97f8e21b18224a70524e559abe2568863ed21ea000580aa3446c6d583253e83e8ecc0c93b4060ef3fb7f9d14739a57ee18925cc30e0e7d79713a15 @@ -20620,13 +17395,6 @@ __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" @@ -20951,22 +17719,6 @@ __metadata: languageName: node linkType: hard -"already@npm:^3.2.0": - version: 3.4.1 - resolution: "already@npm:3.4.1" - checksum: 4bc145ca4d3c0b92d8cdbd9c47590f5b1e52f7cb112d16961aeab35496cf4639b6f49c5c7bb9056cfdcf47f2c26ac9c9c09a86d11a5108d605e79628d9f64d93 - languageName: node - linkType: hard - -"anafanafo@npm:2.0.0": - version: 2.0.0 - resolution: "anafanafo@npm:2.0.0" - dependencies: - char-width-table-consumer: ^1.0.0 - checksum: c166fc5920ca83c321ecfecdaf7b8b6e09553ad8c6214da39cd82e77decb4b06da440bdcb978ba567c4ed34746e048d61901ff9ddedf52555aeba82642115ac8 - languageName: node - linkType: hard - "analytics-node@npm:^6.2.0": version: 6.2.0 resolution: "analytics-node@npm:6.2.0" @@ -21096,7 +17848,7 @@ __metadata: languageName: node linkType: hard -"app-next-example-plugin@workspace:^, app-next-example-plugin@workspace:packages/app-next-example-plugin": +"app-next-example-plugin@workspace:packages/app-next-example-plugin": version: 0.0.0-use.local resolution: "app-next-example-plugin@workspace:packages/app-next-example-plugin" dependencies: @@ -21573,7 +18325,7 @@ __metadata: languageName: node linkType: hard -"async@npm:^3.2.0, async@npm:^3.2.3, async@npm:^3.2.4": +"async@npm:^3.2.3, async@npm:^3.2.4": version: 3.2.4 resolution: "async@npm:3.2.4" checksum: 43d07459a4e1d09b84a20772414aa684ff4de085cbcaec6eea3c7a8f8150e8c62aa6cd4e699fe8ee93c3a5b324e777d34642531875a0817a35697522c1b02e89 @@ -21728,15 +18480,6 @@ __metadata: languageName: node linkType: hard -"axios@npm:^0.21.1": - version: 0.21.4 - resolution: "axios@npm:0.21.4" - dependencies: - follow-redirects: ^1.14.0 - checksum: 44245f24ac971e7458f3120c92f9d66d1fc695e8b97019139de5b0cc65d9b8104647db01e5f46917728edfc0cfd88eb30fc4c55e6053eef4ace76768ce95ff3c - languageName: node - linkType: hard - "axios@npm:^0.27.2": version: 0.27.2 resolution: "axios@npm:0.27.2" @@ -21984,18 +18727,6 @@ __metadata: languageName: node linkType: hard -"badge-maker@npm:^3.3.0": - version: 3.3.1 - resolution: "badge-maker@npm:3.3.1" - dependencies: - anafanafo: 2.0.0 - css-color-converter: ^2.0.0 - bin: - badge: lib/badge-cli.js - checksum: 17ddd409da395a5a58a4b984aa3224a26fec80a580f7b2f011cbfcf3d1ecc4b8daae879d0ff21b7bb78081eb03c703fd161bebc846018456edfa7e3544932e10 - languageName: node - linkType: hard - "bail@npm:^2.0.0": version: 2.0.1 resolution: "bail@npm:2.0.1" @@ -22059,13 +18790,6 @@ __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" @@ -22194,20 +18918,13 @@ __metadata: languageName: node linkType: hard -"binary-extensions@npm:^2.0.0, binary-extensions@npm:^2.2.0": +"binary-extensions@npm:^2.0.0": version: 2.2.0 resolution: "binary-extensions@npm:2.2.0" checksum: ccd267956c58d2315f5d3ea6757cf09863c5fc703e50fbeb13a7dc849b812ef76e3cf9ca8f35a0c48498776a7478d7b4a0418e1e2b8cb9cb9731f2922aaad7f8 languageName: node linkType: hard -"binary-search@npm:^1.3.5": - version: 1.3.6 - resolution: "binary-search@npm:1.3.6" - checksum: 2e6b3459a9c1ba1bd674a6a855a5ef7505f70707422244430e3510e989c0df6074a49fe60784a98b93b51545c9bcace1db1defee06ff861b124c036a2f2836bf - languageName: node - linkType: hard - "binaryextensions@npm:^4.15.0, binaryextensions@npm:^4.16.0": version: 4.18.0 resolution: "binaryextensions@npm:4.18.0" @@ -22263,16 +18980,7 @@ __metadata: languageName: node linkType: hard -"body-parser-xml@npm:^2.0.5": - version: 2.0.5 - resolution: "body-parser-xml@npm:2.0.5" - dependencies: - xml2js: ^0.5.0 - checksum: 57133dbe6439f74f2ffb814b54ab806596a31c51e0d93e045b3068402ae184d4fcb799b2966414d1f393f8dcc8342529d4d3ce4cdeaa219c3af140d961c56dfd - languageName: node - linkType: hard - -"body-parser@npm:1.20.2, body-parser@npm:^1.15.2, body-parser@npm:^1.20.0": +"body-parser@npm:1.20.2, body-parser@npm:^1.15.2": version: 1.20.2 resolution: "body-parser@npm:1.20.2" dependencies: @@ -22960,15 +19668,6 @@ __metadata: languageName: node linkType: hard -"char-width-table-consumer@npm:^1.0.0": - version: 1.0.0 - resolution: "char-width-table-consumer@npm:1.0.0" - dependencies: - binary-search: ^1.3.5 - checksum: daffca7cf4201f55acb75c6f98967be6d8a7cbb5783f3e58d90930d83cadc367e63e62fcfa893ea3985c05d8c32557a1bfa2ea7e2f39b845cb2dea966cfbeccd - languageName: node - linkType: hard - "character-entities-legacy@npm:^1.0.0": version: 1.1.4 resolution: "character-entities-legacy@npm:1.1.4" @@ -23118,15 +19817,6 @@ __metadata: languageName: node linkType: hard -"circleci-api@npm:^4.0.0": - version: 4.1.4 - resolution: "circleci-api@npm:4.1.4" - dependencies: - axios: ^0.21.1 - checksum: b01df7a3361df93f447957abcefbf9d99041076de7c8a27da8c9ae27514ae3a9527c4d3677a6a13131cecb882efe18077e0665b6b34619a3c0678664ed94b4ed - languageName: node - linkType: hard - "cjs-module-lexer@npm:^1.0.0": version: 1.2.2 resolution: "cjs-module-lexer@npm:1.2.2" @@ -23134,7 +19824,7 @@ __metadata: languageName: node linkType: hard -"classnames@npm:*, classnames@npm:^2.2.5, classnames@npm:^2.2.6, classnames@npm:^2.3.1, classnames@npm:^2.5.1": +"classnames@npm:*, classnames@npm:^2.2.6, classnames@npm:^2.3.1, classnames@npm:^2.5.1": version: 2.5.1 resolution: "classnames@npm:2.5.1" checksum: da424a8a6f3a96a2e87d01a432ba19315503294ac7e025f9fece656db6b6a0f7b5003bb1fbb51cbb0d9624d964f1b9bb35a51c73af9b2434c7b292c42231c1e5 @@ -23337,7 +20027,7 @@ __metadata: languageName: node linkType: hard -"clone@npm:2.x, clone@npm:^2.1.1, clone@npm:^2.1.2": +"clone@npm:2.x, clone@npm:^2.1.1": version: 2.1.2 resolution: "clone@npm:2.1.2" checksum: aaf106e9bc025b21333e2f4c12da539b568db4925c0501a1bf4070836c9e848c892fa22c35548ce0d1132b08bbbfa17a00144fe58fccdab6fa900fec4250f67d @@ -23369,7 +20059,7 @@ __metadata: languageName: node linkType: hard -"clsx@npm:^2.0.0, clsx@npm:^2.1.0": +"clsx@npm:^2.1.0": version: 2.1.0 resolution: "clsx@npm:2.1.0" checksum: 43fefc29b6b49c9476fbce4f8b1cc75c27b67747738e598e6651dd40d63692135dc60b18fa1c5b78a2a9ba8ae6fd2055a068924b94e20b42039bd53b78b98e1d @@ -23406,7 +20096,7 @@ __metadata: languageName: node linkType: hard -"codemirror-graphql@npm:^2.0.10, codemirror-graphql@npm:^2.0.11": +"codemirror-graphql@npm:^2.0.10": version: 2.0.11 resolution: "codemirror-graphql@npm:2.0.11" dependencies: @@ -23461,13 +20151,6 @@ __metadata: languageName: node linkType: hard -"color-convert@npm:^0.5.2": - version: 0.5.3 - resolution: "color-convert@npm:0.5.3" - checksum: 1074989a2c216d0171a397b870a0d698ef802ab3f9ece72b35bd92c4d20aeab31f222ea525dd5d3fad175a3f256a750eadd14ab882caed0089efc1cb7ba74086 - languageName: node - linkType: hard - "color-convert@npm:^1.9.0, color-convert@npm:^1.9.1": version: 1.9.3 resolution: "color-convert@npm:1.9.3" @@ -23493,14 +20176,14 @@ __metadata: languageName: node linkType: hard -"color-name@npm:^1.0.0, color-name@npm:^1.1.4, color-name@npm:~1.1.4": +"color-name@npm:^1.0.0, color-name@npm:~1.1.4": version: 1.1.4 resolution: "color-name@npm:1.1.4" checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 languageName: node linkType: hard -"color-string@npm:^1.5.2, color-string@npm:^1.9.0": +"color-string@npm:^1.5.2": version: 1.9.0 resolution: "color-string@npm:1.9.0" dependencies: @@ -23529,16 +20212,6 @@ __metadata: languageName: node linkType: hard -"color@npm:^4.0.1": - version: 4.2.3 - resolution: "color@npm:4.2.3" - dependencies: - color-convert: ^2.0.1 - color-string: ^1.9.0 - checksum: 0579629c02c631b426780038da929cca8e8d80a40158b09811a0112a107c62e10e4aad719843b791b1e658ab4e800558f2e87ca4522c8b32349d497ecb6adeb4 - languageName: node - linkType: hard - "colord@npm:^2.9.1": version: 2.9.1 resolution: "colord@npm:2.9.1" @@ -23677,13 +20350,6 @@ __metadata: languageName: node linkType: hard -"commander@npm:^9.5.0 <10": - version: 9.5.0 - resolution: "commander@npm:9.5.0" - checksum: c7a3e27aa59e913b54a1bafd366b88650bc41d6651f0cbe258d4ff09d43d6a7394232a4dadd0bf518b3e696fdf595db1028a0d82c785b88bd61f8a440cecfade - languageName: node - linkType: hard - "common-ancestor-path@npm:^1.0.1": version: 1.0.1 resolution: "common-ancestor-path@npm:1.0.1" @@ -23712,20 +20378,6 @@ __metadata: languageName: node linkType: hard -"commonmark@npm:0.30.0": - version: 0.30.0 - resolution: "commonmark@npm:0.30.0" - dependencies: - entities: ~2.0 - mdurl: ~1.0.1 - minimist: ">=1.2.2" - string.prototype.repeat: ^0.2.0 - bin: - commonmark: bin/commonmark - checksum: 39f05d6d0f471aa345487d45199809233f29f857630780fde23661356f1f31970f67328934895d3062e01524674785981837c3b6f4303b63d8c9bff8fa99ec83 - languageName: node - linkType: hard - "compare-versions@npm:4.1.4": version: 4.1.4 resolution: "compare-versions@npm:4.1.4" @@ -24118,7 +20770,7 @@ __metadata: languageName: node linkType: hard -"core-js@npm:^3.26.0, core-js@npm:^3.6.5": +"core-js@npm:^3.6.5": version: 3.37.0 resolution: "core-js@npm:3.37.0" checksum: 212c3e9b3fc277dbb63739ef58a61c5709ccd0b36f09c3ce6946aa91fa180c60f57f976d4a5fdb9cda0c6cb55417379ba5a008fc3a1384ec94ec8ec61826469d @@ -24351,7 +21003,7 @@ __metadata: languageName: node linkType: hard -"cross-fetch@npm:^3.1.3, cross-fetch@npm:^3.1.5, cross-fetch@npm:^3.1.8 <4": +"cross-fetch@npm:^3.1.5": version: 3.1.8 resolution: "cross-fetch@npm:3.1.8" dependencies: @@ -24464,17 +21116,6 @@ __metadata: languageName: node linkType: hard -"css-color-converter@npm:^2.0.0": - version: 2.0.0 - resolution: "css-color-converter@npm:2.0.0" - dependencies: - color-convert: ^0.5.2 - color-name: ^1.1.4 - css-unit-converter: ^1.1.2 - checksum: 87819fb3648bb433de49e534c5597d8021642f3199f8985f27b41dc5170c522f775db804fc4533ea78723f8cc70747c545c8f010f4a3ca0ba7bc4dd8f3eea532 - languageName: node - linkType: hard - "css-color-keywords@npm:^1.0.0": version: 1.0.0 resolution: "css-color-keywords@npm:1.0.0" @@ -24573,13 +21214,6 @@ __metadata: languageName: node linkType: hard -"css-unit-converter@npm:^1.1.2": - version: 1.1.2 - resolution: "css-unit-converter@npm:1.1.2" - checksum: 07888033346a5128f34dbe2f72884c966d24e9f29db24416dcde92860242490617ef9a178ac193a92f730834bbeea026cdc7027701d92ba9bbbe59db7a37eb2a - languageName: node - linkType: hard - "css-vendor@npm:^2.0.8": version: 2.0.8 resolution: "css-vendor@npm:2.0.8" @@ -24721,7 +21355,7 @@ __metadata: languageName: node linkType: hard -"csstype@npm:^3.0.2, csstype@npm:^3.1.1, csstype@npm:^3.1.2, csstype@npm:^3.1.3": +"csstype@npm:^3.0.2, csstype@npm:^3.1.2, csstype@npm:^3.1.3": version: 3.0.9 resolution: "csstype@npm:3.0.9" checksum: 199f9af7e673f9f188525c3102a329d637ff46c52f6385a4427ff5cb17adcb736189150170a7af7c5701d18d7704bdad130273f4aa7e44c6c4f9967e6115dc93 @@ -24768,15 +21402,6 @@ __metadata: languageName: node linkType: hard -"d3-array@npm:2 - 3, d3-array@npm:2.10.0 - 3, d3-array@npm:^3.1.6": - version: 3.2.3 - resolution: "d3-array@npm:3.2.3" - dependencies: - internmap: 1 - 2 - checksum: 41d6a4989b73e0d2649a880b2f29a7e7cc059db0eba36cd29a79e0118ebdf6b78922a84cde0733cd54cb4072f3442ec44f3563902e00ea42892442d60e99f961 - languageName: node - linkType: hard - "d3-color@npm:1 - 3": version: 3.1.0 resolution: "d3-color@npm:3.1.0" @@ -24801,32 +21426,14 @@ __metadata: languageName: node linkType: hard -"d3-ease@npm:1 - 3, d3-ease@npm:^3.0.1": +"d3-ease@npm:1 - 3": version: 3.0.1 resolution: "d3-ease@npm:3.0.1" checksum: 06e2ee5326d1e3545eab4e2c0f84046a123dcd3b612e68858219aa034da1160333d9ce3da20a1d3486d98cb5c2a06f7d233eee1bc19ce42d1533458bd85dedcd languageName: node linkType: hard -"d3-force@npm:^3.0.0": - version: 3.0.0 - resolution: "d3-force@npm:3.0.0" - dependencies: - d3-dispatch: 1 - 3 - d3-quadtree: 1 - 3 - d3-timer: 1 - 3 - checksum: 6c7e96438cab62fa32aeadb0ade3297b62b51f81b1b38b0a60a5ec9fd627d74090c1189654d92df2250775f31b06812342f089f1d5947de9960a635ee3581def - languageName: node - linkType: hard - -"d3-format@npm:1 - 3": - version: 3.1.0 - resolution: "d3-format@npm:3.1.0" - checksum: f345ec3b8ad3cab19bff5dead395bd9f5590628eb97a389b1dd89f0b204c7c4fc1d9520f13231c2c7cf14b7c9a8cf10f8ef15bde2befbab41454a569bd706ca2 - languageName: node - linkType: hard - -"d3-interpolate@npm:1 - 3, d3-interpolate@npm:1.2.0 - 3, d3-interpolate@npm:^3.0.1": +"d3-interpolate@npm:1 - 3": version: 3.0.1 resolution: "d3-interpolate@npm:3.0.1" dependencies: @@ -24842,26 +21449,6 @@ __metadata: languageName: node linkType: hard -"d3-quadtree@npm:1 - 3": - version: 3.0.1 - resolution: "d3-quadtree@npm:3.0.1" - checksum: 5469d462763811475f34a7294d984f3eb100515b0585ca5b249656f6b1a6e99b20056a2d2e463cc9944b888896d2b1d07859c50f9c0cf23438df9cd2e3146066 - languageName: node - linkType: hard - -"d3-scale@npm:^4.0.2": - version: 4.0.2 - resolution: "d3-scale@npm:4.0.2" - dependencies: - d3-array: 2.10.0 - 3 - d3-format: 1 - 3 - d3-interpolate: 1.2.0 - 3 - d3-time: 2.1.1 - 3 - d3-time-format: 2 - 4 - checksum: a9c770d283162c3bd11477c3d9d485d07f8db2071665f1a4ad23eec3e515e2cefbd369059ec677c9ac849877d1a765494e90e92051d4f21111aa56791c98729e - languageName: node - linkType: hard - "d3-selection@npm:2 - 3, d3-selection@npm:3, d3-selection@npm:^3.0.0": version: 3.0.0 resolution: "d3-selection@npm:3.0.0" @@ -24869,7 +21456,7 @@ __metadata: languageName: node linkType: hard -"d3-shape@npm:^3.0.0, d3-shape@npm:^3.1.0": +"d3-shape@npm:^3.0.0": version: 3.2.0 resolution: "d3-shape@npm:3.2.0" dependencies: @@ -24878,25 +21465,7 @@ __metadata: languageName: node linkType: hard -"d3-time-format@npm:2 - 4": - version: 4.1.0 - resolution: "d3-time-format@npm:4.1.0" - dependencies: - d3-time: 1 - 3 - checksum: 7342bce28355378152bbd4db4e275405439cabba082d9cd01946d40581140481c8328456d91740b0fe513c51ec4a467f4471ffa390c7e0e30ea30e9ec98fcdf4 - languageName: node - linkType: hard - -"d3-time@npm:1 - 3, d3-time@npm:2.1.1 - 3, d3-time@npm:^3.0.0": - version: 3.1.0 - resolution: "d3-time@npm:3.1.0" - dependencies: - d3-array: 2 - 3 - checksum: 613b435352a78d9f31b7f68540788186d8c331b63feca60ad21c88e9db1989fe888f97f242322ebd6365e45ec3fb206a4324cd4ca0dfffa1d9b5feb856ba00a7 - languageName: node - linkType: hard - -"d3-timer@npm:1 - 3, d3-timer@npm:^3.0.1": +"d3-timer@npm:1 - 3": version: 3.0.1 resolution: "d3-timer@npm:3.0.1" checksum: 1cfddf86d7bca22f73f2c427f52dfa35c49f50d64e187eb788dcad6e927625c636aa18ae4edd44d084eb9d1f81d8ca4ec305dae7f733c15846a824575b789d73 @@ -25043,7 +21612,7 @@ __metadata: languageName: node linkType: hard -"date-fns@npm:^2.16.1, date-fns@npm:^2.18.0": +"date-fns@npm:^2.16.1": version: 2.30.0 resolution: "date-fns@npm:2.30.0" dependencies: @@ -25052,13 +21621,6 @@ __metadata: languageName: node linkType: hard -"date-fns@npm:^3.0.0": - version: 3.6.0 - resolution: "date-fns@npm:3.6.0" - checksum: 0daa1e9a436cf99f9f2ae9232b55e11f3dd46132bee10987164f3eebd29f245b2e066d7d7db40782627411ecf18551d8f4c9fcdf2226e48bb66545407d448ab7 - languageName: node - linkType: hard - "dateformat@npm:^3.0.3": version: 3.0.3 resolution: "dateformat@npm:3.0.3" @@ -25143,13 +21705,6 @@ __metadata: languageName: node linkType: hard -"decimal.js-light@npm:^2.4.1": - version: 2.5.0 - resolution: "decimal.js-light@npm:2.5.0" - checksum: 89d4d301f72728b10ac5def610b9ccb072cd5fa1bf80c607236bbdd28a9ec9f806faad3159c5a0a82a80a81d84e39ae470f90b6bacecae2617525c8e58f7e201 - languageName: node - linkType: hard - "decimal.js@npm:^10.2.1, decimal.js@npm:^10.3.1": version: 10.4.1 resolution: "decimal.js@npm:10.4.1" @@ -25408,7 +21963,7 @@ __metadata: languageName: node linkType: hard -"dequal@npm:^2.0.0, dequal@npm:^2.0.2, dequal@npm:^2.0.3": +"dequal@npm:^2.0.0, dequal@npm:^2.0.3": version: 2.0.3 resolution: "dequal@npm:2.0.3" checksum: 8679b850e1a3d0ebbc46ee780d5df7b478c23f335887464023a631d1b9af051ad4a6595a44220f9ff8ff95a8ddccf019b5ad778a976fd7bbf77383d36f412f90 @@ -25760,7 +22315,7 @@ __metadata: languageName: node linkType: hard -"domhandler@npm:^5.0.1, domhandler@npm:^5.0.2, domhandler@npm:^5.0.3": +"domhandler@npm:^5.0.1, domhandler@npm:^5.0.2": version: 5.0.3 resolution: "domhandler@npm:5.0.3" dependencies: @@ -26166,13 +22721,6 @@ __metadata: languageName: node linkType: hard -"entities@npm:~2.0": - version: 2.0.3 - resolution: "entities@npm:2.0.3" - checksum: 5a7899fcc622e0d76afdeafe4c58a6b40ae3a8ee4772e5825a648c11a2ca324a9a02515386f512e466baac4aeb551f3d3b79eaece5cd98369b9f8601be336b1a - languageName: node - linkType: hard - "entities@npm:~2.1.0": version: 2.1.0 resolution: "entities@npm:2.1.0" @@ -26187,13 +22735,6 @@ __metadata: languageName: node linkType: hard -"eol@npm:^0.9.1": - version: 0.9.1 - resolution: "eol@npm:0.9.1" - checksum: ba9fa998bc8148b935dcf85585eacf049eeaf18d2ab6196710d4d1f59e7dfd0e87b18508dc67144ff8ba12f835a4a4989aeea64c98b13cca77b74b9d4b33bce5 - languageName: node - linkType: hard - "err-code@npm:^2.0.2": version: 2.0.3 resolution: "err-code@npm:2.0.3" @@ -27143,13 +23684,6 @@ __metadata: languageName: node linkType: hard -"eventemitter2@npm:^6.4.4": - version: 6.4.7 - resolution: "eventemitter2@npm:6.4.7" - checksum: 1b36a77e139d6965ebf3a36c01fa00c089ae6b80faa1911e52888f40b3a7057b36a2cc45dcd1ad87cda3798fe7b97a0aabcbb8175a8b96092a23bb7d0f039e66 - languageName: node - linkType: hard - "eventemitter3@npm:^3.1.0": version: 3.1.2 resolution: "eventemitter3@npm:3.1.2" @@ -27157,7 +23691,7 @@ __metadata: languageName: node linkType: hard -"eventemitter3@npm:^4.0.0, eventemitter3@npm:^4.0.1, eventemitter3@npm:^4.0.4": +"eventemitter3@npm:^4.0.0, eventemitter3@npm:^4.0.4": version: 4.0.7 resolution: "eventemitter3@npm:4.0.7" checksum: 1875311c42fcfe9c707b2712c32664a245629b42bb0a5a84439762dd0fd637fc54d078155ea83c2af9e0323c9ac13687e03cfba79b03af9f40c89b4960099374 @@ -27196,83 +23730,42 @@ __metadata: "@backstage/app-defaults": "workspace:^" "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" + "@backstage/config": "workspace:^" "@backstage/core-app-api": "workspace:^" - "@backstage/core-compat-api": "workspace:^" "@backstage/core-components": "workspace:^" "@backstage/core-plugin-api": "workspace:^" "@backstage/frontend-app-api": "workspace:^" - "@backstage/frontend-plugin-api": "workspace:^" "@backstage/integration-react": "workspace:^" - "@backstage/plugin-adr": "workspace:^" - "@backstage/plugin-airbrake": "workspace:^" - "@backstage/plugin-apache-airflow": "workspace:^" "@backstage/plugin-api-docs": "workspace:^" - "@backstage/plugin-app-visualizer": "workspace:^" - "@backstage/plugin-azure-devops": "workspace:^" - "@backstage/plugin-azure-sites": "workspace:^" - "@backstage/plugin-badges": "workspace:^" + "@backstage/plugin-auth-react": "workspace:^" "@backstage/plugin-catalog": "workspace:^" "@backstage/plugin-catalog-common": "workspace:^" "@backstage/plugin-catalog-graph": "workspace:^" "@backstage/plugin-catalog-import": "workspace:^" "@backstage/plugin-catalog-react": "workspace:^" "@backstage/plugin-catalog-unprocessed-entities": "workspace:^" - "@backstage/plugin-cloudbuild": "workspace:^" - "@backstage/plugin-code-coverage": "workspace:^" - "@backstage/plugin-cost-insights": "workspace:^" - "@backstage/plugin-devtools": "workspace:^" - "@backstage/plugin-dynatrace": "workspace:^" - "@backstage/plugin-entity-feedback": "workspace:^" - "@backstage/plugin-explore": "workspace:^" - "@backstage/plugin-gcalendar": "workspace:^" - "@backstage/plugin-gcp-projects": "workspace:^" - "@backstage/plugin-github-actions": "workspace:^" - "@backstage/plugin-gocd": "workspace:^" - "@backstage/plugin-graphiql": "workspace:^" "@backstage/plugin-home": "workspace:^" - "@backstage/plugin-jenkins": "workspace:^" - "@backstage/plugin-kafka": "workspace:^" "@backstage/plugin-kubernetes": "workspace:^" - "@backstage/plugin-lighthouse": "workspace:^" - "@backstage/plugin-linguist": "workspace:^" - "@backstage/plugin-linguist-common": "workspace:^" - "@backstage/plugin-microsoft-calendar": "workspace:^" - "@backstage/plugin-newrelic": "workspace:^" - "@backstage/plugin-newrelic-dashboard": "workspace:^" - "@backstage/plugin-octopus-deploy": "workspace:^" + "@backstage/plugin-kubernetes-cluster": "workspace:^" + "@backstage/plugin-notifications": "workspace:^" "@backstage/plugin-org": "workspace:^" - "@backstage/plugin-pagerduty": "workspace:^" "@backstage/plugin-permission-react": "workspace:^" - "@backstage/plugin-playlist": "workspace:^" - "@backstage/plugin-puppetdb": "workspace:^" - "@backstage/plugin-rollbar": "workspace:^" "@backstage/plugin-scaffolder": "workspace:^" "@backstage/plugin-scaffolder-react": "workspace:^" "@backstage/plugin-search": "workspace:^" "@backstage/plugin-search-common": "workspace:^" "@backstage/plugin-search-react": "workspace:^" - "@backstage/plugin-sentry": "workspace:^" - "@backstage/plugin-shortcuts": "workspace:^" - "@backstage/plugin-stackstorm": "workspace:^" - "@backstage/plugin-tech-insights": "workspace:^" - "@backstage/plugin-tech-radar": "workspace:^" + "@backstage/plugin-signals": "workspace:^" "@backstage/plugin-techdocs": "workspace:^" "@backstage/plugin-techdocs-module-addons-contrib": "workspace:^" "@backstage/plugin-techdocs-react": "workspace:^" - "@backstage/plugin-todo": "workspace:^" "@backstage/plugin-user-settings": "workspace:^" "@backstage/test-utils": "workspace:^" "@backstage/theme": "workspace:^" - "@circleci/backstage-plugin": ^0.1.1 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 "@octokit/rest": ^19.0.3 - "@oriflame/backstage-plugin-score-card": ^0.8.0 - "@roadiehq/backstage-plugin-buildkite": ^2.0.8 - "@roadiehq/backstage-plugin-github-insights": ^2.0.5 - "@roadiehq/backstage-plugin-github-pull-requests": ^2.2.7 - "@roadiehq/backstage-plugin-travis-ci": ^2.0.5 "@testing-library/dom": ^10.0.0 "@testing-library/jest-dom": ^6.0.0 "@testing-library/react": ^15.0.0 @@ -27281,15 +23774,17 @@ __metadata: "@types/react": "*" "@types/react-dom": "*" "@types/zen-observable": ^0.8.0 - app-next-example-plugin: "workspace:^" + "@vitejs/plugin-react": ^4.0.4 cross-env: ^7.0.0 history: ^5.0.0 - lodash: ^4.17.21 react: ^18.0.2 react-dom: ^18.0.2 react-router: ^6.3.0 react-router-dom: ^6.3.0 react-use: ^17.2.4 + vite: ^4.4.9 + vite-plugin-html: ^3.2.0 + vite-plugin-node-polyfills: ^0.21.0 zen-observable: ^0.10.0 languageName: unknown linkType: soft @@ -27313,83 +23808,37 @@ __metadata: "@backstage/core-plugin-api": "workspace:^" "@backstage/frontend-app-api": "workspace:^" "@backstage/integration-react": "workspace:^" - "@backstage/plugin-adr": "workspace:^" - "@backstage/plugin-airbrake": "workspace:^" - "@backstage/plugin-apache-airflow": "workspace:^" "@backstage/plugin-api-docs": "workspace:^" "@backstage/plugin-auth-react": "workspace:^" - "@backstage/plugin-azure-devops": "workspace:^" - "@backstage/plugin-azure-sites": "workspace:^" - "@backstage/plugin-badges": "workspace:^" "@backstage/plugin-catalog": "workspace:^" "@backstage/plugin-catalog-common": "workspace:^" "@backstage/plugin-catalog-graph": "workspace:^" "@backstage/plugin-catalog-import": "workspace:^" "@backstage/plugin-catalog-react": "workspace:^" "@backstage/plugin-catalog-unprocessed-entities": "workspace:^" - "@backstage/plugin-cloudbuild": "workspace:^" - "@backstage/plugin-code-coverage": "workspace:^" - "@backstage/plugin-cost-insights": "workspace:^" - "@backstage/plugin-devtools": "workspace:^" - "@backstage/plugin-dynatrace": "workspace:^" - "@backstage/plugin-entity-feedback": "workspace:^" - "@backstage/plugin-explore": "workspace:^" - "@backstage/plugin-gcalendar": "workspace:^" - "@backstage/plugin-gcp-projects": "workspace:^" - "@backstage/plugin-github-actions": "workspace:^" - "@backstage/plugin-github-pull-requests-board": "workspace:^" - "@backstage/plugin-gocd": "workspace:^" - "@backstage/plugin-graphiql": "workspace:^" "@backstage/plugin-home": "workspace:^" - "@backstage/plugin-jenkins": "workspace:^" - "@backstage/plugin-kafka": "workspace:^" "@backstage/plugin-kubernetes": "workspace:^" "@backstage/plugin-kubernetes-cluster": "workspace:^" - "@backstage/plugin-lighthouse": "workspace:^" - "@backstage/plugin-linguist": "workspace:^" - "@backstage/plugin-linguist-common": "workspace:^" - "@backstage/plugin-microsoft-calendar": "workspace:^" - "@backstage/plugin-newrelic": "workspace:^" - "@backstage/plugin-newrelic-dashboard": "workspace:^" - "@backstage/plugin-nomad": "workspace:^" "@backstage/plugin-notifications": "workspace:^" - "@backstage/plugin-octopus-deploy": "workspace:^" "@backstage/plugin-org": "workspace:^" - "@backstage/plugin-pagerduty": "workspace:^" "@backstage/plugin-permission-react": "workspace:^" - "@backstage/plugin-playlist": "workspace:^" - "@backstage/plugin-puppetdb": "workspace:^" - "@backstage/plugin-rollbar": "workspace:^" "@backstage/plugin-scaffolder": "workspace:^" "@backstage/plugin-scaffolder-react": "workspace:^" "@backstage/plugin-search": "workspace:^" "@backstage/plugin-search-common": "workspace:^" "@backstage/plugin-search-react": "workspace:^" - "@backstage/plugin-sentry": "workspace:^" - "@backstage/plugin-shortcuts": "workspace:^" "@backstage/plugin-signals": "workspace:^" - "@backstage/plugin-stack-overflow": "workspace:^" - "@backstage/plugin-stackstorm": "workspace:^" - "@backstage/plugin-tech-insights": "workspace:^" - "@backstage/plugin-tech-radar": "workspace:^" "@backstage/plugin-techdocs": "workspace:^" "@backstage/plugin-techdocs-module-addons-contrib": "workspace:^" "@backstage/plugin-techdocs-react": "workspace:^" - "@backstage/plugin-todo": "workspace:^" "@backstage/plugin-user-settings": "workspace:^" "@backstage/test-utils": "workspace:^" "@backstage/theme": "workspace:^" - "@circleci/backstage-plugin": ^0.1.1 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 "@octokit/rest": ^19.0.3 - "@oriflame/backstage-plugin-score-card": ^0.8.0 "@playwright/test": ^1.32.3 - "@roadiehq/backstage-plugin-buildkite": ^2.0.8 - "@roadiehq/backstage-plugin-github-insights": ^2.0.5 - "@roadiehq/backstage-plugin-github-pull-requests": ^2.2.7 - "@roadiehq/backstage-plugin-travis-ci": ^2.0.5 "@testing-library/dom": ^10.0.0 "@testing-library/jest-dom": ^6.0.0 "@testing-library/react": ^15.0.0 @@ -27422,32 +23871,23 @@ __metadata: "@backstage/backend-tasks": "workspace:^" "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" - "@backstage/plugin-adr-backend": "workspace:^" "@backstage/plugin-app-backend": "workspace:^" "@backstage/plugin-auth-backend": "workspace:^" "@backstage/plugin-auth-backend-module-github-provider": "workspace:^" "@backstage/plugin-auth-backend-module-guest-provider": "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-backstage-openapi": "workspace:^" "@backstage/plugin-catalog-backend-module-openapi": "workspace:^" "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^" "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^" "@backstage/plugin-devtools-backend": "workspace:^" - "@backstage/plugin-entity-feedback-backend": "workspace:^" - "@backstage/plugin-jenkins-backend": "workspace:^" "@backstage/plugin-kubernetes-backend": "workspace:^" - "@backstage/plugin-lighthouse-backend": "workspace:^" - "@backstage/plugin-linguist-backend": "workspace:^" - "@backstage/plugin-nomad-backend": "workspace:^" "@backstage/plugin-notifications-backend": "workspace:^" "@backstage/plugin-permission-backend": "workspace:^" "@backstage/plugin-permission-backend-module-allow-all-policy": "workspace:^" "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-permission-node": "workspace:^" - "@backstage/plugin-playlist-backend": "workspace:^" "@backstage/plugin-proxy-backend": "workspace:^" "@backstage/plugin-scaffolder-backend": "workspace:^" "@backstage/plugin-scaffolder-backend-module-github": "workspace:^" @@ -27457,9 +23897,7 @@ __metadata: "@backstage/plugin-search-backend-module-techdocs": "workspace:^" "@backstage/plugin-search-backend-node": "workspace:^" "@backstage/plugin-signals-backend": "workspace:^" - "@backstage/plugin-sonarqube-backend": "workspace:^" "@backstage/plugin-techdocs-backend": "workspace:^" - "@backstage/plugin-todo-backend": "workspace:^" languageName: unknown linkType: soft @@ -27474,35 +23912,21 @@ __metadata: "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/integration": "workspace:^" - "@backstage/plugin-adr-backend": "workspace:^" "@backstage/plugin-app-backend": "workspace:^" "@backstage/plugin-auth-backend": "workspace:^" "@backstage/plugin-auth-node": "workspace:^" - "@backstage/plugin-azure-devops-backend": "workspace:^" - "@backstage/plugin-azure-sites-common": "workspace:^" - "@backstage/plugin-badges-backend": "workspace:^" "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "workspace:^" "@backstage/plugin-catalog-backend-module-unprocessed": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" - "@backstage/plugin-code-coverage-backend": "workspace:^" "@backstage/plugin-devtools-backend": "workspace:^" - "@backstage/plugin-entity-feedback-backend": "workspace:^" "@backstage/plugin-events-backend": "workspace:^" "@backstage/plugin-events-node": "workspace:^" - "@backstage/plugin-explore-backend": "workspace:^" - "@backstage/plugin-jenkins-backend": "workspace:^" - "@backstage/plugin-kafka-backend": "workspace:^" "@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:^" - "@backstage/plugin-playlist-backend": "workspace:^" "@backstage/plugin-proxy-backend": "workspace:^" - "@backstage/plugin-rollbar-backend": "workspace:^" "@backstage/plugin-scaffolder-backend": "workspace:^" "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "workspace:^" "@backstage/plugin-scaffolder-backend-module-gitlab": "workspace:^" @@ -27516,11 +23940,7 @@ __metadata: "@backstage/plugin-search-backend-node": "workspace:^" "@backstage/plugin-signals-backend": "workspace:^" "@backstage/plugin-signals-node": "workspace:^" - "@backstage/plugin-tech-insights-backend": "workspace:^" - "@backstage/plugin-tech-insights-backend-module-jsonfc": "workspace:^" - "@backstage/plugin-tech-insights-node": "workspace:^" "@backstage/plugin-techdocs-backend": "workspace:^" - "@backstage/plugin-todo-backend": "workspace:^" "@gitbeaker/node": ^35.1.0 "@octokit/rest": ^19.0.3 "@opentelemetry/api": ^1.4.1 @@ -27852,13 +24272,6 @@ __metadata: languageName: node linkType: hard -"fast-equals@npm:^5.0.1": - version: 5.0.1 - resolution: "fast-equals@npm:5.0.1" - checksum: fbb3b6a74f3a0fa930afac151ff7d01639159b4fddd2678b5d50708e0ba38e9ec14602222d10dadb8398187342692c04fbef5a62b1cfcc7942fe03e754e064bc - languageName: node - linkType: hard - "fast-fifo@npm:^1.1.0, fast-fifo@npm:^1.2.0": version: 1.3.2 resolution: "fast-fifo@npm:1.3.2" @@ -28082,20 +24495,6 @@ __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" @@ -28358,7 +24757,7 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.0, follow-redirects@npm:^1.14.9, follow-redirects@npm:^1.15.4, follow-redirects@npm:^1.15.6": +"follow-redirects@npm:^1.0.0, follow-redirects@npm:^1.14.9, follow-redirects@npm:^1.15.4, follow-redirects@npm:^1.15.6": version: 1.15.6 resolution: "follow-redirects@npm:1.15.6" peerDependenciesMeta: @@ -28579,15 +24978,6 @@ __metadata: languageName: node linkType: hard -"front-matter@npm:^4.0.2": - version: 4.0.2 - resolution: "front-matter@npm:4.0.2" - dependencies: - js-yaml: ^3.13.1 - checksum: a5b4c36d75a820301ebf31db0f677332d189c4561903ab6853eaa0504b43634f98557dbf87752e09043dbd2c9dcc14b4bcf9151cb319c8ad7e26edb203c0cd23 - languageName: node - linkType: hard - "fs-constants@npm:^1.0.0": version: 1.0.0 resolution: "fs-constants@npm:1.0.0" @@ -28893,13 +25283,6 @@ __metadata: languageName: node linkType: hard -"get-stdin@npm:^8.0.0": - version: 8.0.0 - resolution: "get-stdin@npm:8.0.0" - checksum: 40128b6cd25781ddbd233344f1a1e4006d4284906191ed0a7d55ec2c1a3e44d650f280b2c9eeab79c03ac3037da80257476c0e4e5af38ddfb902d6ff06282d77 - languageName: node - linkType: hard - "get-stdin@npm:^9.0.0": version: 9.0.0 resolution: "get-stdin@npm:9.0.0" @@ -29315,22 +25698,6 @@ __metadata: languageName: node linkType: hard -"graphiql@npm:^3.0.6": - version: 3.2.0 - resolution: "graphiql@npm:3.2.0" - dependencies: - "@graphiql/react": ^0.21.0 - "@graphiql/toolkit": ^0.9.1 - graphql-language-service: ^5.2.0 - markdown-it: ^14.1.0 - peerDependencies: - graphql: ^15.5.0 || ^16.0.0 - react: ^16.8.0 || ^17 || ^18 - react-dom: ^16.8.0 || ^17 || ^18 - checksum: 7e49324b97c21312cb7e646d90ef6cc69824c0caf9bc957d5dd42b88d8992472c82301664454cfa3327b3bdf331b524bfa1c6ee5cc02f0917e6a5daa79114dff - languageName: node - linkType: hard - "graphlib@npm:^2.1.8": version: 2.1.8 resolution: "graphlib@npm:2.1.8" @@ -29410,27 +25777,7 @@ __metadata: languageName: node linkType: hard -"graphql-voyager@npm:^1.0.0-rc.31": - version: 1.3.0 - resolution: "graphql-voyager@npm:1.3.0" - dependencies: - "@emotion/react": 11.10.5 - "@emotion/styled": 11.10.5 - "@mui/icons-material": 5.11.0 - "@mui/lab": 5.0.0-alpha.114 - "@mui/material": 5.11.2 - commonmark: 0.30.0 - lodash: 4.17.21 - svg-pan-zoom: 3.6.1 - peerDependencies: - graphql: ">=16.5.0" - react: ">=18.0.0" - react-dom: ">=18.0.0" - checksum: 664d8adb932e3d72189e24dfb09fe364cc0e2852ab615eddeac250d9b4a0e6130a5ea363aec87c516b3c134c070c4c15999ccedec89f57afd554e600c6d4ca34 - languageName: node - linkType: hard - -"graphql-ws@npm:^5.14.0, graphql-ws@npm:^5.4.1, graphql-ws@npm:^5.9.0": +"graphql-ws@npm:^5.14.0, graphql-ws@npm:^5.4.1": version: 5.16.0 resolution: "graphql-ws@npm:5.16.0" peerDependencies: @@ -29643,13 +25990,6 @@ __metadata: languageName: node linkType: hard -"hash-it@npm:^6.0.0": - version: 6.0.0 - resolution: "hash-it@npm:6.0.0" - checksum: 10ca948ff7902a752344c3975c1a5c76ba9e4aa0363032f347a7235cce98473dce60fe4399b05979596aedf649adaf5b3f792a55b9b64ad59ae686e43300c2d1 - languageName: node - linkType: hard - "hash.js@npm:^1.0.0, hash.js@npm:^1.0.3": version: 1.1.7 resolution: "hash.js@npm:1.1.7" @@ -29740,7 +26080,7 @@ __metadata: languageName: node linkType: hard -"highlight.js@npm:^10.1.0, highlight.js@npm:^10.4.1, highlight.js@npm:^10.6.0, highlight.js@npm:^10.7.2, highlight.js@npm:~10.7.0": +"highlight.js@npm:^10.4.1, highlight.js@npm:^10.7.2, highlight.js@npm:~10.7.0": version: 10.7.3 resolution: "highlight.js@npm:10.7.3" checksum: defeafcd546b535d710d8efb8e650af9e3b369ef53e28c3dc7893eacfe263200bba4c5fcf43524ae66d5c0c296b1af0870523ceae3e3104d24b7abf6374a4fea @@ -29916,18 +26256,6 @@ __metadata: languageName: node linkType: hard -"htmlparser2@npm:^8.0.0": - version: 8.0.2 - resolution: "htmlparser2@npm:8.0.2" - dependencies: - domelementtype: ^2.3.0 - domhandler: ^5.0.3 - domutils: ^3.0.1 - entities: ^4.4.0 - checksum: 29167a0f9282f181da8a6d0311b76820c8a59bc9e3c87009e21968264c2987d2723d6fde5a964d4b7b6cba663fca96ffb373c06d8223a85f52a6089ced942700 - languageName: node - linkType: hard - "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" @@ -30146,7 +26474,7 @@ __metadata: languageName: node linkType: hard -"humanize-duration@npm:^3.25.1, humanize-duration@npm:^3.26.0, humanize-duration@npm:^3.27.0, humanize-duration@npm:^3.27.1": +"humanize-duration@npm:^3.25.1": version: 3.32.0 resolution: "humanize-duration@npm:3.32.0" checksum: fd12af03045278c24542d2222d46831f74d21a2132bba053d4847ff8c8f6799840db6ff8a14ce24cc920f69633970fbde4f83d7cbcfed26806ed21804e72a03a @@ -30283,13 +26611,6 @@ __metadata: languageName: node linkType: hard -"immer@npm:9.0.7": - version: 9.0.7 - resolution: "immer@npm:9.0.7" - checksum: 3655ad64bf5ab5adf2854f7d2a9ad543f2cd995fcd169b6f10294f41fdb2cbcbd44d8beaa3e01b3c0b6149001190e57f6ab2cd735e6a929780b7462f2e973c9b - languageName: node - linkType: hard - "immer@npm:^9.0.6, immer@npm:^9.0.7": version: 9.0.21 resolution: "immer@npm:9.0.21" @@ -30489,13 +26810,6 @@ __metadata: languageName: node linkType: hard -"internmap@npm:1 - 2": - version: 2.0.3 - resolution: "internmap@npm:2.0.3" - checksum: 7ca41ec6aba8f0072fc32fa8a023450a9f44503e2d8e403583c55714b25efd6390c38a87161ec456bf42d7bc83aab62eb28f5aef34876b1ac4e60693d5e1d241 - languageName: node - linkType: hard - "interpret@npm:^1.0.0": version: 1.4.0 resolution: "interpret@npm:1.4.0" @@ -31345,7 +27659,7 @@ __metadata: languageName: node linkType: hard -"isbinaryfile@npm:^4.0.10, isbinaryfile@npm:^4.0.10 <5, isbinaryfile@npm:^4.0.8": +"isbinaryfile@npm:^4.0.10, isbinaryfile@npm:^4.0.8": version: 4.0.10 resolution: "isbinaryfile@npm:4.0.10" checksum: a6b28db7e23ac7a77d3707567cac81356ea18bd602a4f21f424f862a31d0e7ab4f250759c98a559ece35ffe4d99f0d339f1ab884ffa9795172f632ab8f88e686 @@ -31589,15 +27903,6 @@ __metadata: languageName: node linkType: hard -"jenkins@npm:^1.0.0": - version: 1.1.0 - resolution: "jenkins@npm:1.1.0" - dependencies: - papi: ^1.1.0 - checksum: 3aada79e2e081926f2d335320e3993a39605124a22c0429c2acd6d4dd3bd5ccded9c6e03fb84f120ebb0755f9e70d931a7ffb36aaa18bc73d7ca3b7f2a5391e6 - languageName: node - linkType: hard - "jest-changed-files@npm:^29.7.0": version: 29.7.0 resolution: "jest-changed-files@npm:29.7.0" @@ -32448,19 +28753,6 @@ __metadata: languageName: node linkType: hard -"json-rules-engine@npm:^6.1.2": - version: 6.5.0 - resolution: "json-rules-engine@npm:6.5.0" - dependencies: - clone: ^2.1.2 - eventemitter2: ^6.4.4 - hash-it: ^6.0.0 - jsonpath-plus: ^7.2.0 - lodash.isobjectlike: ^4.0.0 - checksum: c1a6fa2bb65743397c838c4e4a9157f184e0c24423031fa4bab6b83b5edbb64341f9197ccad9fdd44fcd6c58ac329c0c77882a64acf0d90ee1d856768a4154e3 - languageName: node - linkType: hard - "json-schema-compare@npm:^0.2.2": version: 0.2.2 resolution: "json-schema-compare@npm:0.2.2" @@ -32564,13 +28856,6 @@ __metadata: languageName: node linkType: hard -"json2xml@npm:^0.1.3": - version: 0.1.3 - resolution: "json2xml@npm:0.1.3" - checksum: 88954de67d88c5c1ea7ea99267da712aa5b78886df6db98ebbb63e3caa8310eb7c1c94fe72ba3a575f06813fd344725ddcb9cf1547e1223d1c141d3e24ad3cf9 - languageName: node - linkType: hard - "json5@npm:^1.0.1, json5@npm:^1.0.2": version: 1.0.2 resolution: "json5@npm:1.0.2" @@ -32887,13 +29172,6 @@ __metadata: languageName: node linkType: hard -"kafkajs@npm:^2.0.0": - version: 2.2.4 - resolution: "kafkajs@npm:2.2.4" - checksum: 83e9e8bc50a09b142f4ff79f6a2bd88ecc21b83bcefe6621ab1716118d624886befb7371731274f67812ce35dd50b53140ff3b49a06e5d9169fe6b164d72fea5 - languageName: node - linkType: hard - "keyv@npm:^3.0.0": version: 3.1.0 resolution: "keyv@npm:3.1.0" @@ -33036,13 +29314,6 @@ __metadata: languageName: node linkType: hard -"ky@npm:0.28.7": - version: 0.28.7 - resolution: "ky@npm:0.28.7" - checksum: ff38c9c5a5b9c0354b9db167662cdb1fc48c91803a580807a1d18a1fccc024953cba3708e7bcbd9c7a27670c68631d4806e2c5a169ebc586e573a7c5802a6086 - languageName: node - linkType: hard - "language-subtag-registry@npm:^0.3.20": version: 0.3.22 resolution: "language-subtag-registry@npm:0.3.22" @@ -33112,28 +29383,6 @@ __metadata: languageName: node linkType: hard -"leasot@npm:^12.0.0": - version: 12.5.0 - resolution: "leasot@npm:12.5.0" - dependencies: - async: ^3.2.0 - chalk: ^4.1.0 - commander: ^7.2.0 - eol: ^0.9.1 - get-stdin: ^8.0.0 - globby: ^11.0.3 - json2xml: ^0.1.3 - lodash: ^4.17.21 - log-symbols: ^4.1.0 - strip-ansi: ^6.0.0 - text-table: ^0.2.0 - bin: - leasot: bin/leasot - leasot-reporter: bin/leasot-reporter - checksum: 1f27381bafc226f4242ec4bd907229d68a45be79463f26a8b7b41179212841668f49b1ee8b675b48f9452f6222c91fafe6e4eccb01b5004ec1a806d75d372b7c - languageName: node - linkType: hard - "leven@npm:2.1.0": version: 2.1.0 resolution: "leven@npm:2.1.0" @@ -33221,25 +29470,6 @@ __metadata: languageName: node linkType: hard -"linguist-js@npm:^2.5.3": - version: 2.6.1 - resolution: "linguist-js@npm:2.6.1" - dependencies: - binary-extensions: ^2.2.0 - commander: ^9.5.0 <10 - common-path-prefix: ^3.0.0 - cross-fetch: ^3.1.8 <4 - ignore: ^5.2.4 - 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: 5eea5a0562e4a8958703833eef0377235fd34da1f12b7b8b8208934b877c9f36b7c140b25c66ab563ff229203cd8c224e84d840edbc4ee285ad051b8b8fdb5ae - languageName: node - linkType: hard - "linkify-it@npm:^3.0.1": version: 3.0.2 resolution: "linkify-it@npm:3.0.2" @@ -33249,15 +29479,6 @@ __metadata: languageName: node linkType: hard -"linkify-it@npm:^5.0.0": - version: 5.0.0 - resolution: "linkify-it@npm:5.0.0" - dependencies: - uc.micro: ^2.0.0 - checksum: b0b86cadaf816b64c947a83994ceaad1c15f9fe7e079776ab88699fb71afd7b8fc3fd3d0ae5ebec8c92c1d347be9ba257b8aef338c0ebf81b0d27dcf429a765a - languageName: node - linkType: hard - "linkify-react@npm:4.1.3": version: 4.1.3 resolution: "linkify-react@npm:4.1.3" @@ -33551,13 +29772,6 @@ __metadata: languageName: node linkType: hard -"lodash.isobjectlike@npm:^4.0.0": - version: 4.0.0 - resolution: "lodash.isobjectlike@npm:4.0.0" - checksum: eabcd968b1bd11208a90b27f9b167bd5ce30165a5b20d7886b94df95acfbc929dbe00cf16f2ce7a7779bdaf3f0ef4ee705e671782599ab73097307d2b8b488c5 - languageName: node - linkType: hard - "lodash.isplainobject@npm:^4.0.6": version: 4.0.6 resolution: "lodash.isplainobject@npm:4.0.6" @@ -33856,7 +30070,7 @@ __metadata: languageName: node linkType: hard -"luxon@npm:^3.0.0, luxon@npm:^3.3.0, luxon@npm:^3.4.3, luxon@npm:^3.4.4, luxon@npm:~3.4.0": +"luxon@npm:^3.0.0, luxon@npm:^3.4.3, luxon@npm:~3.4.0": version: 3.4.4 resolution: "luxon@npm:3.4.4" checksum: 36c1f99c4796ee4bfddf7dc94fa87815add43ebc44c8934c924946260a58512f0fd2743a629302885df7f35ccbd2d13f178c15df046d0e3b6eb71db178f1c60c @@ -34055,22 +30269,6 @@ __metadata: languageName: node linkType: hard -"markdown-it@npm:^14.1.0": - version: 14.1.0 - resolution: "markdown-it@npm:14.1.0" - dependencies: - argparse: ^2.0.1 - entities: ^4.4.0 - linkify-it: ^5.0.0 - mdurl: ^2.0.0 - punycode.js: ^2.3.1 - uc.micro: ^2.1.0 - bin: - markdown-it: bin/markdown-it.mjs - checksum: 07296b45ebd0b13a55611a24d1b1ad002c6729ec54f558f597846994b0b7b1de79d13cd99ff3e7b6e9e027f36b63125cdcf69174da294ecabdd4e6b9fff39e5d - languageName: node - linkType: hard - "markdown-table@npm:^3.0.0": version: 3.0.1 resolution: "markdown-table@npm:3.0.1" @@ -34087,15 +30285,6 @@ __metadata: languageName: node linkType: hard -"marked@npm:^12.0.0": - version: 12.0.1 - resolution: "marked@npm:12.0.1" - bin: - marked: bin/marked.js - checksum: 35ebc6c4612fcc028a1cd6419321e336be5b29d3feb68dfd5aaa7fcddb399c7873cd3291d60daf342db3eede747757e4e18515f349f0ee7b84ec24254f3a4190 - languageName: node - linkType: hard - "marked@npm:^4.0.14": version: 4.3.0 resolution: "marked@npm:4.3.0" @@ -34129,20 +30318,6 @@ __metadata: languageName: node linkType: hard -"material-ui-search-bar@npm:^1.0.0": - version: 1.0.1 - resolution: "material-ui-search-bar@npm:1.0.1" - dependencies: - classnames: ^2.2.5 - prop-types: ^15.5.8 - peerDependencies: - "@material-ui/core": ^4.0.0 - "@material-ui/icons": ^4.0.0 - react: ">=16.8.0" - checksum: f2bbc90471bdf3734d704b164857eb2b5c7f30dbe5ee362b448d8362fbfe152f1d1d5280fe4bf44624dc6135782ef58f63cf488ecb82f3392e0090757a767175 - languageName: node - linkType: hard - "md5.js@npm:^1.3.4": version: 1.3.5 resolution: "md5.js@npm:1.3.5" @@ -34320,20 +30495,13 @@ __metadata: languageName: node linkType: hard -"mdurl@npm:^1.0.0, mdurl@npm:^1.0.1, mdurl@npm:~1.0.1": +"mdurl@npm:^1.0.0, mdurl@npm:^1.0.1": version: 1.0.1 resolution: "mdurl@npm:1.0.1" checksum: 71731ecba943926bfbf9f9b51e28b5945f9411c4eda80894221b47cc105afa43ba2da820732b436f0798fd3edbbffcd1fc1415843c41a87fea08a41cc1e3d02b languageName: node linkType: hard -"mdurl@npm:^2.0.0": - version: 2.0.0 - resolution: "mdurl@npm:2.0.0" - checksum: 880bc289ef668df0bb34c5b2b5aaa7b6ea755052108cdaf4a5e5968ad01cf27e74927334acc9ebcc50a8628b65272ae6b1fd51fae1330c130e261c0466e1a3b2 - languageName: node - linkType: hard - "media-typer@npm:0.3.0": version: 0.3.0 resolution: "media-typer@npm:0.3.0" @@ -35084,7 +31252,7 @@ __metadata: languageName: node linkType: hard -"minimist@npm:1.2.8, minimist@npm:>=1.2.2, minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5, minimist@npm:^1.2.6": +"minimist@npm:1.2.8, minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5, minimist@npm:^1.2.6": version: 1.2.8 resolution: "minimist@npm:1.2.8" checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 @@ -35233,7 +31401,7 @@ __metadata: languageName: node linkType: hard -"mitt@npm:3.0.1, mitt@npm:^3.0.0": +"mitt@npm:3.0.1": version: 3.0.1 resolution: "mitt@npm:3.0.1" checksum: b55a489ac9c2949ab166b7f060601d3b6d893a852515ae9eca4e11df01c013876df777ea109317622b5c1c60e8aae252558e33c8c94e14124db38f64a39614b1 @@ -35350,13 +31518,6 @@ __metadata: languageName: node linkType: hard -"moment@npm:^2.29.1": - version: 2.29.4 - resolution: "moment@npm:2.29.4" - checksum: 0ec3f9c2bcba38dc2451b1daed5daded747f17610b92427bebe1d08d48d8b7bdd8d9197500b072d14e326dd0ccf3e326b9e3d07c5895d3d49e39b6803b76e80e - languageName: node - linkType: hard - "moo@npm:^0.5.0": version: 0.5.2 resolution: "moo@npm:0.5.2" @@ -35412,7 +31573,7 @@ __metadata: languageName: node linkType: hard -"msw@npm:^1.0.0, msw@npm:^1.0.1, msw@npm:^1.2.1, msw@npm:^1.2.3, msw@npm:^1.3.0, msw@npm:^1.3.1": +"msw@npm:^1.0.0, msw@npm:^1.2.1, msw@npm:^1.3.0, msw@npm:^1.3.1": version: 1.3.3 resolution: "msw@npm:1.3.3" dependencies: @@ -35810,7 +31971,7 @@ __metadata: languageName: node linkType: hard -"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, node-fetch@npm:^2.6.9, node-fetch@npm:^2.7.0": +"node-fetch@npm:^2.6.0, node-fetch@npm:^2.6.1, node-fetch@npm:^2.6.12, node-fetch@npm:^2.6.7, node-fetch@npm:^2.6.9, node-fetch@npm:^2.7.0": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" dependencies: @@ -37030,13 +33191,6 @@ __metadata: languageName: node linkType: hard -"papi@npm:^1.1.0": - version: 1.1.0 - resolution: "papi@npm:1.1.0" - checksum: f7c566fa10c27ff1820e76bf83035dab7db4f62a84e4ed1bdd1117bd6a1d796a2b4340fa8df34d19997e33be9306de0147065eeaafc1622964aa94b3073d50c4 - languageName: node - linkType: hard - "param-case@npm:^3.0.4": version: 3.0.4 resolution: "param-case@npm:3.0.4" @@ -37120,15 +33274,6 @@ __metadata: languageName: node linkType: hard -"parse-link-header@npm:^2.0.0": - version: 2.0.0 - resolution: "parse-link-header@npm:2.0.0" - dependencies: - xtend: ~4.0.1 - checksum: 0e96c6af9910e8f92084b49b8dc6a10dd58db470847d1499f562576180c1ac5e49d18007697f0d538e5f3efdc8ce1d8777641f3ae225302b74af0dd0578b628e - languageName: node - linkType: hard - "parse-ms@npm:^4.0.0": version: 4.0.0 resolution: "parse-ms@npm:4.0.0" @@ -38688,7 +34833,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:15.x, prop-types@npm:^15.0.0, prop-types@npm:^15.5.10, prop-types@npm:^15.5.7, prop-types@npm:^15.5.8, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": +"prop-types@npm:15.x, prop-types@npm:^15.0.0, prop-types@npm:^15.5.10, prop-types@npm:^15.5.7, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -38876,13 +35021,6 @@ __metadata: languageName: node linkType: hard -"punycode.js@npm:^2.3.1": - version: 2.3.1 - resolution: "punycode.js@npm:2.3.1" - checksum: 13466d7ed5e8dacdab8c4cc03837e7dd14218a59a40eb14a837f1f53ca396e18ef2c4ee6d7766b8ed2fc391d6a3ac489eebf2de83b3596f5a54e86df4a251b72 - languageName: node - linkType: hard - "punycode@npm:1.3.2": version: 1.3.2 resolution: "punycode@npm:1.3.2" @@ -38963,7 +35101,7 @@ __metadata: languageName: node linkType: hard -"qs@npm:^6.10.1, qs@npm:^6.10.2, qs@npm:^6.11.0, qs@npm:^6.11.2, qs@npm:^6.9.1, qs@npm:^6.9.4, qs@npm:^6.9.6": +"qs@npm:^6.10.1, qs@npm:^6.10.2, qs@npm:^6.11.0, qs@npm:^6.11.2, qs@npm:^6.9.1, qs@npm:^6.9.4": version: 6.12.1 resolution: "qs@npm:6.12.1" dependencies: @@ -39364,23 +35502,6 @@ __metadata: languageName: node linkType: hard -"react-ga4@npm:^2.0.0": - version: 2.1.0 - resolution: "react-ga4@npm:2.1.0" - checksum: f7fb41141418d4ad14756f1126a1e9958db37d4d84ae6cd798043dc03a390b6dba74d69311af0349f0b9580a43bda8930138194ccc29c4100efe446e2d6eb057 - languageName: node - linkType: hard - -"react-ga@npm:^3.3.0": - version: 3.3.1 - resolution: "react-ga@npm:3.3.1" - peerDependencies: - prop-types: ^15.6.0 - react: ^15.6.2 || ^16.0 || ^17 || ^18 - checksum: 3026976d0249fbf80e7b5dad7707964198064d7ac460f3397de40524e76dd6c29dead0900f850e2bd3135a86a9b083af8cda9cfa087f195852bf8d2b17c1fcfb - languageName: node - linkType: hard - "react-grid-layout@npm:1.3.4": version: 1.3.4 resolution: "react-grid-layout@npm:1.3.4" @@ -39411,7 +35532,7 @@ __metadata: languageName: node linkType: hard -"react-hook-form@npm:^7.12.2, react-hook-form@npm:^7.13.0": +"react-hook-form@npm:^7.12.2": version: 7.51.3 resolution: "react-hook-form@npm:7.51.3" peerDependencies: @@ -39471,7 +35592,7 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.10.2, react-is@npm:^16.12.0, react-is@npm:^16.13.1, react-is@npm:^16.7.0, react-is@npm:^16.8.0, react-is@npm:^16.8.6": +"react-is@npm:^16.12.0, react-is@npm:^16.13.1, react-is@npm:^16.7.0, react-is@npm:^16.8.0, react-is@npm:^16.8.6": version: 16.13.1 resolution: "react-is@npm:16.13.1" checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f @@ -39729,20 +35850,6 @@ __metadata: languageName: node linkType: hard -"react-smooth@npm:^4.0.0": - version: 4.0.0 - resolution: "react-smooth@npm:4.0.0" - dependencies: - fast-equals: ^5.0.1 - prop-types: ^15.8.1 - react-transition-group: ^4.4.5 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 0b4859593d4e24c500aab3a6660b23ca458a3cb7f3e74a00864fbdceafbdef93c8962d606bd97fff13f6075f4f5429b3826276b261e54577f7326511e3cb812b - languageName: node - linkType: hard - "react-sparklines@npm:^1.7.0": version: 1.7.0 resolution: "react-sparklines@npm:1.7.0" @@ -39851,7 +35958,7 @@ __metadata: languageName: node linkType: hard -"react-use@npm:^17.2.4, react-use@npm:^17.3.1, react-use@npm:^17.3.2, react-use@npm:^17.4.0, react-use@npm:^17.5.0": +"react-use@npm:^17.2.4, react-use@npm:^17.3.2, react-use@npm:^17.4.0": version: 17.5.0 resolution: "react-use@npm:17.5.0" dependencies: @@ -40082,34 +36189,6 @@ __metadata: languageName: node linkType: hard -"recharts-scale@npm:^0.4.4": - version: 0.4.5 - resolution: "recharts-scale@npm:0.4.5" - dependencies: - decimal.js-light: ^2.4.1 - checksum: e970377190a610e684a32c7461c7684ac3603c2e0ac0020bbba1eea9d099b38138143a8e80bf769bb49c0b7cecf22a2f5c6854885efed2d56f4540d4aa7052bd - languageName: node - linkType: hard - -"recharts@npm:^2.5.0": - version: 2.12.5 - resolution: "recharts@npm:2.12.5" - dependencies: - clsx: ^2.0.0 - eventemitter3: ^4.0.1 - lodash: ^4.17.21 - react-is: ^16.10.2 - react-smooth: ^4.0.0 - recharts-scale: ^0.4.4 - tiny-invariant: ^1.3.1 - victory-vendor: ^36.6.8 - peerDependencies: - react: ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 - checksum: b6fda724ed514e6901c8d620cf984483ec7809d7aa018ce50f5ec316673c26c5bdea1e2fa6f54a9f9a78947c50c8e7771dbc53bc4936d83d4da81c43ff9a5a38 - languageName: node - linkType: hard - "rechoir@npm:^0.6.2": version: 0.6.2 resolution: "rechoir@npm:0.6.2" @@ -40321,13 +36400,6 @@ __metadata: languageName: node linkType: hard -"regression@npm:^2.0.1": - version: 2.0.1 - resolution: "regression@npm:2.0.1" - checksum: 2afb76ed65c87f22ef25dffb19fa95d70cded586ee9fcd5239f61d40993f5904bab0aae8fece73a8dddd35e19956a027004e727385ee4b4e7f800229a50edfb5 - languageName: node - linkType: hard - "relateurl@npm:^0.2.7": version: 0.2.7 resolution: "relateurl@npm:0.2.7" @@ -41039,38 +37111,6 @@ __metadata: languageName: unknown linkType: soft -"rrdom@npm:^2.0.0-alpha.11": - version: 2.0.0-alpha.11 - resolution: "rrdom@npm:2.0.0-alpha.11" - dependencies: - rrweb-snapshot: ^2.0.0-alpha.11 - checksum: cfc8f18698902224bd4b666586497b2682d3d11e30946c2b9fe374b8209d977c0d6c4157231a2a4bfed12761a79db1cbc9a139741a9b3d7c943536cd9eb3bb50 - languageName: node - linkType: hard - -"rrweb-snapshot@npm:^2.0.0-alpha.11": - version: 2.0.0-alpha.11 - resolution: "rrweb-snapshot@npm:2.0.0-alpha.11" - checksum: 8b5e40ebe17d61546f9c93b4cc266156be0fc28b7452e4fea6ea4c24a35a857c021e15503d218f10d3fc8c478c793450f1f2ebf9c751c1d7a24e25322b9d1677 - languageName: node - linkType: hard - -"rrweb@npm:2.0.0-alpha.11": - version: 2.0.0-alpha.11 - resolution: "rrweb@npm:2.0.0-alpha.11" - dependencies: - "@rrweb/types": ^2.0.0-alpha.11 - "@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.11 - rrweb-snapshot: ^2.0.0-alpha.11 - checksum: f601d1b96f3a3622551b5f12f08d53cee272ebc23a61ed722a8687b2b8cb89ff6f7813a44eaa905afcaadd3e37e6055201474de0bd010720f45ecaaf2a0b4d01 - languageName: node - linkType: hard - "rtl-css-js@npm:^1.16.1": version: 1.16.1 resolution: "rtl-css-js@npm:1.16.1" @@ -41861,13 +37901,6 @@ __metadata: languageName: node linkType: hard -"slugify@npm:^1.6.4": - version: 1.6.6 - resolution: "slugify@npm:1.6.6" - checksum: 04773c2d3b7aea8d2a61fa47cc7e5d29ce04e1a96cbaec409da57139df906acb3a449fac30b167d203212c806e73690abd4ff94fbad0a9a7b7ea109a2a638ae9 - languageName: node - linkType: hard - "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -42630,13 +38663,6 @@ __metadata: languageName: node linkType: hard -"string.prototype.repeat@npm:^0.2.0": - version: 0.2.0 - resolution: "string.prototype.repeat@npm:0.2.0" - checksum: 5127ce1b5bce45258905877048ac28bae71be18f1c3421011bd3979cfbcacf9c16f6b7f42daa3b999c9d90f5da39bd7136982c8e64439f02666dd6c0778ed262 - languageName: node - linkType: hard - "string.prototype.trim@npm:^1.2.8": version: 1.2.8 resolution: "string.prototype.trim@npm:1.2.8" @@ -42922,21 +38948,6 @@ __metadata: languageName: node linkType: hard -"subscriptions-transport-ws@npm:^0.11.0": - version: 0.11.0 - resolution: "subscriptions-transport-ws@npm:0.11.0" - dependencies: - backo2: ^1.0.2 - eventemitter3: ^3.1.0 - iterall: ^1.2.1 - symbol-observable: ^1.0.4 - ws: ^5.2.0 || ^6.0.0 || ^7.0.0 - peerDependencies: - graphql: ^15.7.2 || ^16.0.0 - checksum: cc2e98d5c9d89c44d2e15eca188781c6ebae13d1661c42a99cee9d2897aebe2a22bc118eefff83244a79c88ee4ea24d46973ebf26ae7cb47ac1857fb8ee2c947 - languageName: node - linkType: hard - "sucrase@npm:^3.20.2": version: 3.35.0 resolution: "sucrase@npm:3.35.0" @@ -43033,13 +39044,6 @@ __metadata: languageName: node linkType: hard -"svg-pan-zoom@npm:3.6.1": - version: 3.6.1 - resolution: "svg-pan-zoom@npm:3.6.1" - checksum: 500b99378d321315e1668067ef6a73af3f61f9adfab75a575b21d2d216cb446def61d60ad12265203463cca9bef56b090f00e48118fa9b7f0ffa1c691e4c1621 - languageName: node - linkType: hard - "svg-parser@npm:^2.0.4": version: 2.0.4 resolution: "svg-parser@npm:2.0.4" @@ -43534,7 +39538,7 @@ __metadata: languageName: node linkType: hard -"tiny-invariant@npm:^1.0.6, tiny-invariant@npm:^1.3.1": +"tiny-invariant@npm:^1.0.6": version: 1.3.1 resolution: "tiny-invariant@npm:1.3.1" checksum: 872dbd1ff20a21303a2fd20ce3a15602cfa7fcf9b228bd694a52e2938224313b5385a1078cb667ed7375d1612194feaca81c4ecbe93121ca1baebe344de4f84c @@ -43940,7 +39944,7 @@ __metadata: languageName: node linkType: hard -"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": +"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 @@ -44284,13 +40288,6 @@ __metadata: languageName: node linkType: hard -"uc.micro@npm:^2.0.0, uc.micro@npm:^2.1.0": - version: 2.1.0 - resolution: "uc.micro@npm:2.1.0" - checksum: 37197358242eb9afe367502d4638ac8c5838b78792ab218eafe48287b0ed28aaca268ec0392cc5729f6c90266744de32c06ae938549aee041fc93b0f9672d6b2 - languageName: node - linkType: hard - "uglify-js@npm:^3.1.4": version: 3.17.0 resolution: "uglify-js@npm:3.17.0" @@ -44789,18 +40786,6 @@ __metadata: languageName: node linkType: hard -"use-deep-compare-effect@npm:^1.8.1": - version: 1.8.1 - resolution: "use-deep-compare-effect@npm:1.8.1" - dependencies: - "@babel/runtime": ^7.12.5 - dequal: ^2.0.2 - peerDependencies: - react: ">=16.13" - checksum: 2b9b6291df3f772f44d259b352e5d998963ccee0db2efeb76bb05525d928064aeeb69bb0dee5a5e428fea7cf3db67c097a770ebd30caa080662b565f6ef02b2e - languageName: node - linkType: hard - "use-immer@npm:^0.9.0": version: 0.9.0 resolution: "use-immer@npm:0.9.0" @@ -45164,28 +41149,6 @@ __metadata: languageName: node linkType: hard -"victory-vendor@npm:^36.6.8": - version: 36.6.8 - resolution: "victory-vendor@npm:36.6.8" - dependencies: - "@types/d3-array": ^3.0.3 - "@types/d3-ease": ^3.0.0 - "@types/d3-interpolate": ^3.0.1 - "@types/d3-scale": ^4.0.2 - "@types/d3-shape": ^3.1.0 - "@types/d3-time": ^3.0.0 - "@types/d3-timer": ^3.0.0 - d3-array: ^3.1.6 - d3-ease: ^3.0.1 - d3-interpolate: ^3.0.1 - d3-scale: ^4.0.2 - d3-shape: ^3.1.0 - d3-time: ^3.0.0 - d3-timer: ^3.0.1 - checksum: 6411f7c19a776cef3919946d429293cfe33c93a6e4dcfdfa2ba1edecad3a28ed2cd6b0d117169b8917ab6a7679e2bade5e7bfc1fed3fc8b464b842f21dac5f49 - languageName: node - linkType: hard - "vinyl-file@npm:^3.0.0": version: 3.0.0 resolution: "vinyl-file@npm:3.0.0" @@ -45420,13 +41383,6 @@ __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 - "webidl-conversions@npm:^3.0.0": version: 3.0.1 resolution: "webidl-conversions@npm:3.0.1" @@ -45947,7 +41903,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:^5.2.0 || ^6.0.0 || ^7.0.0, ws@npm:^7.4.6": +"ws@npm:^7.4.6": version: 7.5.9 resolution: "ws@npm:7.5.9" peerDependencies: @@ -46030,16 +41986,6 @@ __metadata: languageName: node linkType: hard -"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: 458a83806193008edff44562c0bdb982801d61ee7867ae58fd35fab781e69e17f40dfeb8fc05391a4648c9c54012066d3955fe5d993ffbe4dc63399023f32ac2 - languageName: node - linkType: hard - "xml@npm:=1.0.1": version: 1.0.1 resolution: "xml@npm:1.0.1" @@ -46082,7 +42028,7 @@ __metadata: languageName: node linkType: hard -"xtend@npm:^4.0.0, xtend@npm:^4.0.2, xtend@npm:~4.0.1": +"xtend@npm:^4.0.0, xtend@npm:^4.0.2": version: 4.0.2 resolution: "xtend@npm:4.0.2" checksum: ac5dfa738b21f6e7f0dd6e65e1b3155036d68104e67e5d5d1bde74892e327d7e5636a076f625599dc394330a731861e87343ff184b0047fef1360a7ec0a5a36a @@ -46358,13 +42304,6 @@ __metadata: languageName: node linkType: hard -"yn@npm:^5.0.0": - version: 5.0.0 - resolution: "yn@npm:5.0.0" - checksum: f0ec7710d3d697e88a67a46e8072542448f04677a7e6580c56b1b78da202fa5cd73fabba94957d58ee306e4ce6366c5c38c1a9fb7fd76d07ad77a4d1908b66b0 - languageName: node - linkType: hard - "yocto-queue@npm:^0.1.0": version: 0.1.0 resolution: "yocto-queue@npm:0.1.0" @@ -46401,22 +42340,6 @@ __metadata: languageName: node linkType: hard -"zen-observable-ts@npm:^1.1.0": - version: 1.2.5 - resolution: "zen-observable-ts@npm:1.2.5" - dependencies: - zen-observable: 0.8.15 - checksum: 3b707b7a0239a9bc40f73ba71b27733a689a957c1f364fabb9fa9cbd7d04b7c2faf0d517bf17004e3ed3f4330ac613e84c0d32313e450ddaa046f3350af44541 - languageName: node - linkType: hard - -"zen-observable@npm:0.8.15": - version: 0.8.15 - resolution: "zen-observable@npm:0.8.15" - checksum: b7289084bc1fc74a559b7259faa23d3214b14b538a8843d2b001a35e27147833f4107590b1b44bf5bc7f6dfe6f488660d3a3725f268e09b3925b3476153b7821 - languageName: node - linkType: hard - "zen-observable@npm:^0.10.0": version: 0.10.0 resolution: "zen-observable@npm:0.10.0" @@ -46485,18 +42408,6 @@ __metadata: languageName: node linkType: hard -"zustand@npm:3.6.9": - version: 3.6.9 - resolution: "zustand@npm:3.6.9" - peerDependencies: - react: ">=16.8" - peerDependenciesMeta: - react: - optional: true - checksum: a553cca3d96450fbc3433df8c562d737d00e7183516c1b7538bfd575055b3b9cfb141041505f211d1ee5975d60789bdfd45cdc7d6efe6dfde1fa718279cf5568 - languageName: node - linkType: hard - "zwitch@npm:^2.0.0": version: 2.0.2 resolution: "zwitch@npm:2.0.2"