diff --git a/.changeset/angry-eagles-end.md b/.changeset/angry-eagles-end.md new file mode 100644 index 0000000000..eec1e7b710 --- /dev/null +++ b/.changeset/angry-eagles-end.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-test-utils': patch +--- + +Added `createExtensionTester` for rendering extensions in tests. diff --git a/.changeset/angry-gorillas-unite.md b/.changeset/angry-gorillas-unite.md new file mode 100644 index 0000000000..73d5a6c88b --- /dev/null +++ b/.changeset/angry-gorillas-unite.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend-module-atlassian-provider': minor +--- + +New module for `@backstage/plugin-auth-backend` that adds an atlassian auth provider diff --git a/.changeset/angry-walls-despacito.md b/.changeset/angry-walls-despacito.md new file mode 100644 index 0000000000..f380b6df77 --- /dev/null +++ b/.changeset/angry-walls-despacito.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-compat-api': patch +--- + +Added `convertLegacyRouteRef` utility to convert existing route refs to be used with the new experimental packages. diff --git a/.changeset/angry-walls-juggle.md b/.changeset/angry-walls-juggle.md new file mode 100644 index 0000000000..3df4a80b28 --- /dev/null +++ b/.changeset/angry-walls-juggle.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-plugin-api': patch +--- + +Removed the alpha `convertLegacyRouteRef` utility, which as been moved to `@backstage/core-compat-api` diff --git a/.changeset/backstage-changelog.js b/.changeset/backstage-changelog.js index 45ed53afe4..22038b348b 100644 --- a/.changeset/backstage-changelog.js +++ b/.changeset/backstage-changelog.js @@ -16,7 +16,7 @@ const { default: defaultChangelogFunctions, -} = require('@changesets/changelog-github'); +} = require('@changesets/cli/changelog'); // Custom CHANGELOG generation for changesets, stolen from here with one minor change: // https://github.com/atlassian/changesets/blob/main/packages/cli/src/changelog/index.ts @@ -32,34 +32,7 @@ async function getDependencyReleaseLine(changesets, dependenciesUpdated) { return ['- Updated dependencies', ...updatedDependenciesList].join('\n'); } -async function getReleaseLine(changeset, type, options) { - const { ignoreUserThanks = [], ...rest } = options ?? {}; - const releaseLine = await defaultChangelogFunctions.getReleaseLine( - changeset, - type, - rest, - ); - - const ignoredUsers = new Set(ignoreUserThanks); - return releaseLine.replace(/Thanks\s(.*)!\s/g, (_, text) => { - // extracts user name and profile url from the markdown link - const regex = /\[@(\w+)\]\((https:\/\/github\.com\/[^\)]+)\)/g; - - let matches; - const links = []; - - while ((matches = regex.exec(text)) !== null) { - const [, user, url] = matches; - if (!ignoredUsers.has(user)) { - links.push(`[@${user}](${url})`); - } - } - - return links.length ? `Thanks ${links.join(', ')}! ` : ''; - }); -} - module.exports = { - getReleaseLine, + getReleaseLine: defaultChangelogFunctions.getReleaseLine, getDependencyReleaseLine, }; diff --git a/.changeset/beige-stingrays-tap.md b/.changeset/beige-stingrays-tap.md deleted file mode 100644 index ae7f2f709e..0000000000 --- a/.changeset/beige-stingrays-tap.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-api-docs': minor ---- - -Replace GraphiQL playground with DocExplorer diff --git a/.changeset/big-roses-stare.md b/.changeset/big-roses-stare.md deleted file mode 100644 index 442e53522e..0000000000 --- a/.changeset/big-roses-stare.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-msgraph': patch ---- - -export the function to read ms graph provider config diff --git a/.changeset/big-swans-guess.md b/.changeset/big-swans-guess.md new file mode 100644 index 0000000000..c2ea795b21 --- /dev/null +++ b/.changeset/big-swans-guess.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-backstage-openapi': patch +--- + +Support authenticated backends diff --git a/.changeset/blue-bags-warn.md b/.changeset/blue-bags-warn.md deleted file mode 100644 index 17fa5e89d6..0000000000 --- a/.changeset/blue-bags-warn.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': minor -'@backstage/plugin-catalog-node': minor ---- - -Support adding location analyzers in new catalog analysis extension point and move `AnalyzeOptions` and `ScmLocationAnalyzer` types to `@backstage/plugin-catalog-node` diff --git a/.changeset/brave-parents-stare.md b/.changeset/brave-parents-stare.md new file mode 100644 index 0000000000..bb98799456 --- /dev/null +++ b/.changeset/brave-parents-stare.md @@ -0,0 +1,6 @@ +--- +'@backstage/frontend-plugin-api': patch +'@backstage/frontend-app-api': patch +--- + +Added the nav logo extension for customization of sidebar logo diff --git a/.changeset/brave-socks-raise.md b/.changeset/brave-socks-raise.md new file mode 100644 index 0000000000..e8df72f4f5 --- /dev/null +++ b/.changeset/brave-socks-raise.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-techdocs-addons-test-utils': patch +--- + +Move `@testing-library/react` to be a `peerDependency` diff --git a/.changeset/breezy-dogs-serve.md b/.changeset/breezy-dogs-serve.md deleted file mode 100644 index a92e5cdb0c..0000000000 --- a/.changeset/breezy-dogs-serve.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Cleaned up cases where deprecated code was being used but had a new location they should be imported from diff --git a/.changeset/breezy-pans-glow.md b/.changeset/breezy-pans-glow.md new file mode 100644 index 0000000000..026465aef7 --- /dev/null +++ b/.changeset/breezy-pans-glow.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-react': patch +--- + +Added pagination support to `EntityListProvider`. diff --git a/.changeset/bright-eyes-film.md b/.changeset/bright-eyes-film.md new file mode 100644 index 0000000000..503079ad00 --- /dev/null +++ b/.changeset/bright-eyes-film.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-test-utils': minor +--- + +New testing utility library for `@backstage/frontend-app-api` and `@backstage/frontend-plugin-api`. diff --git a/.changeset/brown-poets-join.md b/.changeset/brown-poets-join.md deleted file mode 100644 index bc6ccbaa70..0000000000 --- a/.changeset/brown-poets-join.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -`knex` has been bumped to major version 3 and `better-sqlite3` to major version 9, which deprecate node 16 support. - -You can do the same in your own Backstage repository to ensure that you get future node 18+ relevant updates, by having the following lines in your `packages/backend/package.json`: - -``` -"dependencies": { - // ... - "knex": "^3.0.0" -}, -"devDependencies": { - // ... - "better-sqlite3": "^9.0.0", -``` diff --git a/.changeset/chatty-actors-live.md b/.changeset/chatty-actors-live.md new file mode 100644 index 0000000000..dcf308edec --- /dev/null +++ b/.changeset/chatty-actors-live.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-api-docs': patch +--- + +Add dependency on `graphql-config` to compensate for `graphql-language-service` needing it but not shipping the dep properly diff --git a/.changeset/chatty-cobras-cheer.md b/.changeset/chatty-cobras-cheer.md deleted file mode 100644 index c8203e58c0..0000000000 --- a/.changeset/chatty-cobras-cheer.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/config-loader': patch ---- - -Correctly resolve config targets into absolute paths diff --git a/.changeset/chatty-countries-refuse.md b/.changeset/chatty-countries-refuse.md deleted file mode 100644 index d29d1a453b..0000000000 --- a/.changeset/chatty-countries-refuse.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-bazaar': patch ---- - -Updated Readme document in bazaar plugin diff --git a/.changeset/chilled-buses-love.md b/.changeset/chilled-buses-love.md new file mode 100644 index 0000000000..6c67d3cc63 --- /dev/null +++ b/.changeset/chilled-buses-love.md @@ -0,0 +1,5 @@ +--- +'@backstage/eslint-plugin': patch +--- + +The `no-undeclared-imports` rule will now prefer using version queries that already exist en the repo for the same dependency type when installing new packages. diff --git a/.changeset/chilled-knives-rule.md b/.changeset/chilled-knives-rule.md deleted file mode 100644 index f246beabbd..0000000000 --- a/.changeset/chilled-knives-rule.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-import': patch ---- - -Create an experimental plugin that is compatible with the declarative integration system, it is exported from the `/alpha` subpath. diff --git a/.changeset/chilled-terms-breathe.md b/.changeset/chilled-terms-breathe.md new file mode 100644 index 0000000000..654185492a --- /dev/null +++ b/.changeset/chilled-terms-breathe.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +Allow a default cache TTL to be set through the app config diff --git a/.changeset/chilly-books-sneeze.md b/.changeset/chilly-books-sneeze.md deleted file mode 100644 index a2d3ca1e04..0000000000 --- a/.changeset/chilly-books-sneeze.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/cli-node': minor -'@backstage/cli': minor ---- - -Removed support for the `publishConfig.alphaTypes` and `.betaTypes` fields that were used together with `--experimental-type-build` to generate `/alpha` and `/beta` entry points. Use the `exports` field to achieve this instead. diff --git a/.changeset/chilly-terms-behave.md b/.changeset/chilly-terms-behave.md deleted file mode 100644 index 8ee1ad8375..0000000000 --- a/.changeset/chilly-terms-behave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-backend-module-stack-overflow-collator': minor ---- - -Extract a package for the Stack Overflow new backend system plugin. diff --git a/.changeset/clever-houses-scream.md b/.changeset/clever-houses-scream.md deleted file mode 100644 index 14a2427dea..0000000000 --- a/.changeset/clever-houses-scream.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs-node': patch ---- - -Switch to `@smithy/node-http-handler` instead of the `@aws-sdk/node-http-handler` diff --git a/.changeset/cold-pans-crash.md b/.changeset/cold-pans-crash.md new file mode 100644 index 0000000000..85858fd270 --- /dev/null +++ b/.changeset/cold-pans-crash.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend': patch +--- + +Migrate the atlassian auth provider to be implemented using the new `@backstage/plugin-auth-backend-module-atlassian-provider` module diff --git a/.changeset/config.json b/.changeset/config.json index 94e435bd93..283caa6ac4 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -1,19 +1,6 @@ { "$schema": "https://unpkg.com/@changesets/config@1.3.0/schema.json", - "changelog": [ - "./backstage-changelog.js", - { - "repo": "backstage/backstage", - "ignoreUserThanks": [ - "benjdlambert", - "freben", - "jhaals", - "Rugvip", - "renovate", - "dependabot" - ] - } - ], + "changelog": "./backstage-changelog.js", "commit": false, "linked": [], "access": "public", diff --git a/.changeset/create-app-1698763033.md b/.changeset/create-app-1700579510.md similarity index 100% rename from .changeset/create-app-1698763033.md rename to .changeset/create-app-1700579510.md diff --git a/.changeset/create-app-1700607979.md b/.changeset/create-app-1700607979.md new file mode 100644 index 0000000000..b50d431d4b --- /dev/null +++ b/.changeset/create-app-1700607979.md @@ -0,0 +1,5 @@ +--- +'@backstage/create-app': patch +--- + +Bumped create-app version. diff --git a/.changeset/renovate-1fce036.md b/.changeset/curly-walls-relate.md similarity index 51% rename from .changeset/renovate-1fce036.md rename to .changeset/curly-walls-relate.md index 6cb8980aea..40cacca907 100644 --- a/.changeset/renovate-1fce036.md +++ b/.changeset/curly-walls-relate.md @@ -2,4 +2,4 @@ '@backstage/core-components': patch --- -Updated dependency `linkifyjs` to `4.1.2`. +Add missing export for IconLinkVertical diff --git a/.changeset/curvy-carpets-kneel.md b/.changeset/curvy-carpets-kneel.md deleted file mode 100644 index e6b0019edb..0000000000 --- a/.changeset/curvy-carpets-kneel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-shortcuts': patch ---- - -Ensure that shortcuts aren't duplicate-checked against themselves diff --git a/.changeset/curvy-carrots-thank.md b/.changeset/curvy-carrots-thank.md deleted file mode 100644 index 6303125314..0000000000 --- a/.changeset/curvy-carrots-thank.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-home': patch ---- - -Fix bug where `retrieveAll` method wasn't fetching visits diff --git a/.changeset/dirty-ducks-behave.md b/.changeset/dirty-ducks-behave.md deleted file mode 100644 index c7bea8ea0a..0000000000 --- a/.changeset/dirty-ducks-behave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-components': patch ---- - -Fix `RoutedTabs` so that it does not explode without tabs. diff --git a/.changeset/dry-days-invite.md b/.changeset/dry-days-invite.md deleted file mode 100644 index dcf052acd2..0000000000 --- a/.changeset/dry-days-invite.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Switch from using deprecated `@esbuild-kit/*` packages to using `tsx`. This also switches to using the new module loader `register` API when available, avoiding the experimental warning when starting backends. diff --git a/.changeset/dry-readers-raise.md b/.changeset/dry-readers-raise.md new file mode 100644 index 0000000000..c13e830062 --- /dev/null +++ b/.changeset/dry-readers-raise.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-scaffolder': patch +--- + +Added `headerOptions` to `TemplateListPage` to optionally override default values. +Changed `themeId` of TemplateListPage from `website` to `home`. diff --git a/.changeset/eighty-chairs-camp.md b/.changeset/eighty-chairs-camp.md deleted file mode 100644 index 6a240609d4..0000000000 --- a/.changeset/eighty-chairs-camp.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-plugin-api': minor ---- - -Added `RouteRef`, `SubRouteRef`, `ExternalRouteRef`, and related types. All exports from this package that previously relied on the types with the same name from `@backstage/core-plugin-api` now use the new types instead. To convert and existing legacy route ref to be compatible with the APIs from this package, use the `convertLegacyRouteRef` utility from `@backstage/core-plugin-api/alpha`. diff --git a/.changeset/eighty-chairs-care.md b/.changeset/eighty-chairs-care.md deleted file mode 100644 index 6d14bb0f18..0000000000 --- a/.changeset/eighty-chairs-care.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-backend-module-pg': patch ---- - -Optimize outdated documents deletion logic in PgSearchEngine DatabaseDocumentStore which significantly reduces cost on large tables diff --git a/.changeset/eleven-ants-pretend.md b/.changeset/eleven-ants-pretend.md new file mode 100644 index 0000000000..6b188117ba --- /dev/null +++ b/.changeset/eleven-ants-pretend.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Minor improvements to `Table` component. diff --git a/.changeset/eleven-students-brake.md b/.changeset/eleven-students-brake.md deleted file mode 100644 index b2cad0bfd6..0000000000 --- a/.changeset/eleven-students-brake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-gcp': patch ---- - -Allow integration with kubernetes dashboard diff --git a/.changeset/empty-dingos-grow.md b/.changeset/empty-dingos-grow.md new file mode 100644 index 0000000000..8a43cd210f --- /dev/null +++ b/.changeset/empty-dingos-grow.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog': patch +--- + +Fix copy entity url function in http contexts. diff --git a/.changeset/empty-fireants-study.md b/.changeset/empty-fireants-study.md new file mode 100644 index 0000000000..4f5508ac9b --- /dev/null +++ b/.changeset/empty-fireants-study.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend-module-vmware-cloud-provider': minor +--- + +Add VMware Cloud auth backend module provider diff --git a/.changeset/fair-parrots-lick.md b/.changeset/fair-parrots-lick.md deleted file mode 100644 index dffe6be1e2..0000000000 --- a/.changeset/fair-parrots-lick.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-home': patch ---- - -Remove the duplicate versions of `@rjsf/*` as they're no longer needed diff --git a/.changeset/fair-tools-bake.md b/.changeset/fair-tools-bake.md deleted file mode 100644 index fd7b21bbc8..0000000000 --- a/.changeset/fair-tools-bake.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-kubernetes-backend': patch -'@backstage/plugin-kubernetes-common': patch ---- - -Allow storing dashboard parameters for kubernetes in catalog diff --git a/.changeset/famous-plums-sit.md b/.changeset/famous-plums-sit.md deleted file mode 100644 index b85e26b87e..0000000000 --- a/.changeset/famous-plums-sit.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/core-components': patch -'@backstage/plugin-catalog': patch ---- - -Fix spacing inconsistency with links and labels in headers diff --git a/.changeset/fast-bears-lick.md b/.changeset/fast-bears-lick.md deleted file mode 100644 index 8e0dc8e60b..0000000000 --- a/.changeset/fast-bears-lick.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog': patch ---- - -Migrate catalog entity cards to new frontend system extension format. diff --git a/.changeset/fifty-seas-grab.md b/.changeset/fifty-seas-grab.md new file mode 100644 index 0000000000..587ac5606d --- /dev/null +++ b/.changeset/fifty-seas-grab.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-app-api': minor +--- + +Updated core extension structure to make space for the sign-in page by adding `core.router`. diff --git a/.changeset/fifty-taxis-allow.md b/.changeset/fifty-taxis-allow.md deleted file mode 100644 index 1b818f45e7..0000000000 --- a/.changeset/fifty-taxis-allow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-common': patch ---- - -Add missing required property `type` in `Template.v1beta3.schema.json` schema diff --git a/.changeset/flat-ducks-buy.md b/.changeset/flat-ducks-buy.md deleted file mode 100644 index 5c952faaf1..0000000000 --- a/.changeset/flat-ducks-buy.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-backend-node': patch ---- - -Fix highlighting for non-string fields on the `Lunr` search engine implementation. diff --git a/.changeset/fluffy-years-shake.md b/.changeset/fluffy-years-shake.md deleted file mode 100644 index 9612690d62..0000000000 --- a/.changeset/fluffy-years-shake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog': patch ---- - -Use default extensions boundary and suspense on the alpha declarative `createCatalogFilterExtension` extension factory. diff --git a/.changeset/forty-monkeys-lay.md b/.changeset/forty-monkeys-lay.md deleted file mode 100644 index b5fda56bf4..0000000000 --- a/.changeset/forty-monkeys-lay.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-auth-backend-module-microsoft-provider': patch -'@backstage/plugin-auth-backend-module-gitlab-provider': patch ---- - -Fix link to the repository in `README.md`. diff --git a/.changeset/four-files-behave.md b/.changeset/four-files-behave.md deleted file mode 100644 index 0430bd98d8..0000000000 --- a/.changeset/four-files-behave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-graphiql': minor ---- - -Upgrade to GraphiQL to 3.0.6 diff --git a/.changeset/four-needles-watch.md b/.changeset/four-needles-watch.md new file mode 100644 index 0000000000..9c74bce5ad --- /dev/null +++ b/.changeset/four-needles-watch.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-bazaar': patch +--- + +Internalize 'AboutField' to break catalog dependency diff --git a/.changeset/four-pears-swim.md b/.changeset/four-pears-swim.md deleted file mode 100644 index b091dad598..0000000000 --- a/.changeset/four-pears-swim.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-vault-node': minor ---- - -Initial version of the `plugin-vault-node`` package. It contains the extension point definitions -for the vault backend, as well as some types that will be deprecated in the backend plugin. diff --git a/.changeset/fresh-camels-give.md b/.changeset/fresh-camels-give.md deleted file mode 100644 index 723733e45e..0000000000 --- a/.changeset/fresh-camels-give.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-msgraph': patch -'@backstage/integration': patch -'@backstage/plugin-auth-backend': patch ---- - -JSDoc and Error message updates to handle `Azure Active Directory` re-brand to `Entra ID` diff --git a/.changeset/fresh-crews-promise.md b/.changeset/fresh-crews-promise.md deleted file mode 100644 index fc9859086a..0000000000 --- a/.changeset/fresh-crews-promise.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-techdocs-module-addons-contrib': patch -'@backstage/plugin-techdocs': patch ---- - -Fixed navigation bug that caused users to not be scrolled to the top of a new page. Fixed navigation bug where using backwards and forwards browser navigation did not scroll users to the correct place on the TechDoc page. diff --git a/.changeset/fresh-penguins-cry.md b/.changeset/fresh-penguins-cry.md deleted file mode 100644 index 457025a518..0000000000 --- a/.changeset/fresh-penguins-cry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-common': patch ---- - -Limit the database creation concurrency to one, defensively diff --git a/.changeset/fresh-schools-thank.md b/.changeset/fresh-schools-thank.md deleted file mode 100644 index 1e32f82051..0000000000 --- a/.changeset/fresh-schools-thank.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-gitlab': patch ---- - -Added try catch around fetching gitlab group users to prevent refresh from failing completely while only a select number of groups might not be able to load correctly. diff --git a/.changeset/gentle-elephants-look.md b/.changeset/gentle-elephants-look.md deleted file mode 100644 index 44263fb8a9..0000000000 --- a/.changeset/gentle-elephants-look.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/core-components': patch -'@backstage/plugin-scaffolder': minor ---- - -Add a possibility to use a formatter on a warning panel. Applied it for a scaffolder template diff --git a/.changeset/gentle-lies-greet.md b/.changeset/gentle-lies-greet.md new file mode 100644 index 0000000000..293f0ef064 --- /dev/null +++ b/.changeset/gentle-lies-greet.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-app-api': patch +--- + +Removed `@backstage/plugin-graphiql` dependency. diff --git a/.changeset/gentle-pears-camp.md b/.changeset/gentle-pears-camp.md deleted file mode 100644 index 6d96958a76..0000000000 --- a/.changeset/gentle-pears-camp.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-backstage-openapi': minor ---- - -Adds a new catalog module for ingesting Backstage plugin OpenAPI specs into the catalog for display as an API entity. diff --git a/.changeset/gentle-pumpkins-carry.md b/.changeset/gentle-pumpkins-carry.md deleted file mode 100644 index 721fbe8195..0000000000 --- a/.changeset/gentle-pumpkins-carry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-auth-backend-module-microsoft-provider': patch ---- - -Added support for specifying a domain hint on the Microsoft authentication provider configuration. diff --git a/.changeset/giant-cars-walk.md b/.changeset/giant-cars-walk.md deleted file mode 100644 index 5e313faa3b..0000000000 --- a/.changeset/giant-cars-walk.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs': patch ---- - -Export alpha routes and nav item extension, only available for applications that uses the new Frontend system. diff --git a/.changeset/giant-cycles-end.md b/.changeset/giant-cycles-end.md deleted file mode 100644 index f69938ea25..0000000000 --- a/.changeset/giant-cycles-end.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-stack-overflow-backend': patch ---- - -Deprecate package in favor of the new `@backstage/plugin-search-backend-module-stack-overflow-collator` module. - -The search collator `requestParams` option is optional now, so its default value is `{ order: 'desc', sort: 'activity', site: 'stackoverflow' }` as defined in the `Try It` section on the [official Stack Overflow API documentation](https://api.stackexchange.com/docs/questions). diff --git a/.changeset/giant-files-fry.md b/.changeset/giant-files-fry.md new file mode 100644 index 0000000000..b01cfbc980 --- /dev/null +++ b/.changeset/giant-files-fry.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-techdocs-addons-test-utils': patch +--- + +Remove unnecessary catalog dependency diff --git a/.changeset/gold-shirts-yell.md b/.changeset/gold-shirts-yell.md new file mode 100644 index 0000000000..ac03ce3362 --- /dev/null +++ b/.changeset/gold-shirts-yell.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-org': patch +--- + +Support member list scrollable when parent has specified height diff --git a/.changeset/good-plums-confess.md b/.changeset/good-plums-confess.md deleted file mode 100644 index 941adec8b3..0000000000 --- a/.changeset/good-plums-confess.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-app-api': patch ---- - -Refactor internal extension instance system into an app graph. diff --git a/.changeset/great-baboons-allow.md b/.changeset/great-baboons-allow.md deleted file mode 100644 index 47e410d8a4..0000000000 --- a/.changeset/great-baboons-allow.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -'@backstage/plugin-vault-backend': minor ---- - -Added support for the [new backend system](https://backstage.io/docs/backend-system/). - -In your `packages/backend/src/index.ts` make the following changes: - -```diff - import { createBackend } from '@backstage/backend-defaults'; - const backend = createBackend(); - // ... other feature additions -+ backend.add(import('@backstage/plugin-vault-backend'); - backend.start(); -``` - -If you use the new backend system, the token renewal task can be defined via configuration file: - -```diff -vault: - baseUrl: - token: - schedule: -+ frequency: ... -+ timeout: ... -+ # Other schedule options, such as scope or initialDelay -``` - -If the `schedule` is omitted or set to `false` no token renewal task will be scheduled. -If the value of `schedule` is set to `true` the renew will be scheduled hourly (the default). -In other cases (like in the diff above), the defined schedule will be used. - -**DEPRECATIONS**: The interface `VaultApi` and the type `VaultSecret` are now deprecated. Import them from `@backstage/plugin-vault-node`. diff --git a/.changeset/great-rings-type.md b/.changeset/great-rings-type.md new file mode 100644 index 0000000000..0b10c51651 --- /dev/null +++ b/.changeset/great-rings-type.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +Use `Readable.from` to fix some of the stream issues diff --git a/.changeset/green-experts-happen.md b/.changeset/green-experts-happen.md deleted file mode 100644 index 6c892a2038..0000000000 --- a/.changeset/green-experts-happen.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-bazaar': patch ---- - -Added alert popup for link and unlink entity in bazaar project diff --git a/.changeset/healthy-dancers-dream.md b/.changeset/healthy-dancers-dream.md deleted file mode 100644 index 6a9869f03a..0000000000 --- a/.changeset/healthy-dancers-dream.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-app-api': patch ---- - -The options parameter of `createApp` is now optional. diff --git a/.changeset/cool-bulldogs-itch.md b/.changeset/healthy-poets-search.md similarity index 57% rename from .changeset/cool-bulldogs-itch.md rename to .changeset/healthy-poets-search.md index 8f48befee2..dfd223b379 100644 --- a/.changeset/cool-bulldogs-itch.md +++ b/.changeset/healthy-poets-search.md @@ -2,4 +2,4 @@ '@backstage/plugin-catalog-react': patch --- -Add EntityRef to Entity Inspector UI +Add default icon for kind resource. diff --git a/.changeset/healthy-shirts-fold.md b/.changeset/healthy-shirts-fold.md deleted file mode 100644 index f2ac0a9e83..0000000000 --- a/.changeset/healthy-shirts-fold.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-catalog': patch -'@backstage/plugin-techdocs': patch ---- - -The `spec.lifecycle' field in entities will now always be rendered as a string. diff --git a/.changeset/heavy-experts-accept.md b/.changeset/heavy-experts-accept.md deleted file mode 100644 index e6f2f435b8..0000000000 --- a/.changeset/heavy-experts-accept.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'@backstage/plugin-catalog-react': minor ---- - -Added an `EntityPresentationApi` and associated `entityPresentationApiRef`. This -API lets you control how references to entities (e.g. in links, headings, -iconography etc) are represented in the user interface. - -Usage of this API is initially added to the `EntityRefLink` and `EntityRefLinks` -components, so that they can render richer, more correct representation of -entity refs. There's also a new `EntityDisplayName` component, which works just like -the `EntityRefLink` but without the link. - -Along with that change, the `fetchEntities` and `getTitle` props of -`EntityRefLinksProps` are deprecated and no longer used, since the same need -instead is fulfilled (and by default always enabled) by the -`entityPresentationApiRef`. diff --git a/.changeset/heavy-rings-play.md b/.changeset/heavy-rings-play.md deleted file mode 100644 index bbed4c3fa3..0000000000 --- a/.changeset/heavy-rings-play.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-bazaar': patch ---- - -Adding descending sort in a bazaar plugin diff --git a/.changeset/hip-berries-begin.md b/.changeset/hip-berries-begin.md new file mode 100644 index 0000000000..43d176cbcf --- /dev/null +++ b/.changeset/hip-berries-begin.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-test-utils': patch +--- + +Updates for `core.router` addition. diff --git a/.changeset/hip-moose-boil.md b/.changeset/hip-moose-boil.md deleted file mode 100644 index e14c557c62..0000000000 --- a/.changeset/hip-moose-boil.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-kubernetes-react': patch ---- - -Internal refactor to avoid a null pointer problem diff --git a/.changeset/hip-mugs-camp.md b/.changeset/hip-mugs-camp.md deleted file mode 100644 index 3413b5ac0a..0000000000 --- a/.changeset/hip-mugs-camp.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs-backend': patch ---- - -Add info about the entity when tech docs fail to build diff --git a/.changeset/hot-wolves-flash.md b/.changeset/hot-wolves-flash.md new file mode 100644 index 0000000000..84c4d34f37 --- /dev/null +++ b/.changeset/hot-wolves-flash.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-react': patch +--- + +Step titles in the Stepper are now clickable and redirect the user to the corresponding step, as an alternative to using the back buttons. diff --git a/.changeset/hungry-radios-play.md b/.changeset/hungry-radios-play.md deleted file mode 100644 index ce7f524f4a..0000000000 --- a/.changeset/hungry-radios-play.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-user-settings-backend': patch ---- - -Added dependency on `@backstage/config` diff --git a/.changeset/kind-badgers-rush.md b/.changeset/kind-badgers-rush.md new file mode 100644 index 0000000000..4ec19bd17b --- /dev/null +++ b/.changeset/kind-badgers-rush.md @@ -0,0 +1,8 @@ +--- +'@backstage/backend-openapi-utils': patch +'@backstage/plugin-scaffolder-react': patch +'@backstage/plugin-catalog-react': patch +'@backstage/plugin-scaffolder': patch +--- + +Minor updates for TypeScript 5.2.2+ compatibility diff --git a/.changeset/kind-beers-chew.md b/.changeset/kind-beers-chew.md deleted file mode 100644 index 5fb939ea6b..0000000000 --- a/.changeset/kind-beers-chew.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-api-docs': minor ---- - -Define a default for oauth2RedirectUrl option of swagger-ui-react to match documentation diff --git a/.changeset/kind-cycles-happen.md b/.changeset/kind-cycles-happen.md new file mode 100644 index 0000000000..7ebe870d46 --- /dev/null +++ b/.changeset/kind-cycles-happen.md @@ -0,0 +1,6 @@ +--- +'@backstage/core-app-api': patch +'@backstage/cli': patch +--- + +Added deprecation warning for React Router v6 beta, please make sure you have migrated your apps to use React Router v6 stable as support for the beta version will be removed. See the [migration tutorial](https://backstage.io/docs/tutorials/react-router-stable-migration) for more information. diff --git a/.changeset/large-forks-arrive.md b/.changeset/large-forks-arrive.md deleted file mode 100644 index 3490a87128..0000000000 --- a/.changeset/large-forks-arrive.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-code-coverage-backend': patch ---- - -Added support for new backend system diff --git a/.changeset/large-weeks-accept.md b/.changeset/large-weeks-accept.md new file mode 100644 index 0000000000..b640c44d42 --- /dev/null +++ b/.changeset/large-weeks-accept.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kubernetes-react': patch +--- + +Add ID property to the table displaying kubernetes pods to avoid closing the info sidebar when the data reloads and needs to rerender. diff --git a/.changeset/late-forks-fetch.md b/.changeset/late-forks-fetch.md deleted file mode 100644 index 3ba15885e2..0000000000 --- a/.changeset/late-forks-fetch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs-backend': patch ---- - -Fix potential memory leak by not creating a build log transport if not given via `RouterOptions`. diff --git a/.changeset/lazy-hotels-wait.md b/.changeset/lazy-hotels-wait.md deleted file mode 100644 index 85879880f5..0000000000 --- a/.changeset/lazy-hotels-wait.md +++ /dev/null @@ -1,109 +0,0 @@ ---- -'@backstage/plugin-analytics-module-newrelic-browser': patch -'@backstage/plugin-api-docs-module-protoc-gen-doc': patch -'@backstage/plugin-techdocs-module-addons-contrib': patch -'@backstage/plugin-cicd-statistics-module-gitlab': patch -'@backstage/plugin-catalog-unprocessed-entities': patch -'@backstage/plugin-github-pull-requests-board': patch -'@backstage/plugin-techdocs-addons-test-utils': patch -'@backstage/frontend-plugin-api': patch -'@backstage/plugin-analytics-module-ga4': patch -'@backstage/plugin-analytics-module-ga': patch -'@backstage/plugin-git-release-manager': patch -'@backstage/integration-react': patch -'@backstage/plugin-github-deployments': patch -'@backstage/plugin-kubernetes-cluster': patch -'@backstage/plugin-microsoft-calendar': patch -'@backstage/plugin-newrelic-dashboard': patch -'@backstage/frontend-app-api': patch -'@backstage/plugin-entity-validation': patch -'@backstage/core-components': patch -'@backstage/core-plugin-api': patch -'@backstage/plugin-kubernetes-react': patch -'@backstage/plugin-permission-react': patch -'@backstage/plugin-scaffolder-react': patch -'@backstage/version-bridge': patch -'@backstage/plugin-apollo-explorer': patch -'@backstage/plugin-catalog-graphql': patch -'@backstage/plugin-cicd-statistics': patch -'@backstage/plugin-entity-feedback': patch -'@backstage/plugin-gitops-profiles': patch -'@backstage/plugin-graphql-voyager': patch -'@backstage/plugin-sonarqube-react': patch -'@backstage/plugin-apache-airflow': patch -'@backstage/plugin-catalog-import': patch -'@backstage/plugin-github-actions': patch -'@backstage/plugin-octopus-deploy': patch -'@backstage/plugin-splunk-on-call': patch -'@backstage/plugin-stack-overflow': patch -'@backstage/plugin-techdocs-react': patch -'@backstage/app-defaults': patch -'@backstage/core-app-api': patch -'@backstage/plugin-catalog-graph': patch -'@backstage/plugin-catalog-react': patch -'@backstage/plugin-code-coverage': patch -'@backstage/plugin-config-schema': patch -'@backstage/plugin-cost-insights': patch -'@backstage/plugin-explore-react': patch -'@backstage/plugin-github-issues': patch -'@backstage/plugin-tech-insights': patch -'@backstage/plugin-user-settings': patch -'@backstage/plugin-azure-devops': patch -'@backstage/plugin-code-climate': patch -'@backstage/plugin-gcp-projects': patch -'@backstage/plugin-search-react': patch -'@backstage/create-app': patch -'@backstage/test-utils': patch -'@backstage/plugin-azure-sites': patch -'@backstage/plugin-firehydrant': patch -'@backstage/plugin-cloudbuild': patch -'@backstage/plugin-home-react': patch -'@backstage/plugin-kubernetes': patch -'@backstage/plugin-lighthouse': patch -'@backstage/plugin-scaffolder': patch -'@backstage/plugin-stackstorm': patch -'@backstage/plugin-tech-radar': patch -'@backstage/plugin-codescene': patch -'@backstage/plugin-dynatrace': patch -'@backstage/plugin-gcalendar': patch -'@backstage/plugin-org-react': patch -'@backstage/plugin-pagerduty': patch -'@backstage/plugin-shortcuts': patch -'@backstage/plugin-sonarqube': patch -'@backstage/plugin-xcmetrics': patch -'@backstage/plugin-airbrake': patch -'@backstage/plugin-api-docs': patch -'@backstage/plugin-circleci': patch -'@backstage/plugin-devtools': patch -'@backstage/plugin-graphiql': patch -'@backstage/plugin-linguist': patch -'@backstage/plugin-newrelic': patch -'@backstage/plugin-opencost': patch -'@backstage/plugin-periskop': patch -'@backstage/plugin-playlist': patch -'@backstage/plugin-puppetdb': patch -'@backstage/plugin-techdocs': patch -'@backstage/plugin-bitrise': patch -'@backstage/plugin-catalog': patch -'@backstage/plugin-explore': patch -'@backstage/plugin-jenkins': patch -'@backstage/plugin-rollbar': patch -'@backstage/theme': patch -'@backstage/plugin-allure': patch -'@backstage/plugin-badges': patch -'@backstage/plugin-bazaar': patch -'@backstage/plugin-search': patch -'@backstage/plugin-sentry': patch -'@backstage/plugin-fossa': patch -'@backstage/plugin-ilert': patch -'@backstage/plugin-kafka': patch -'@backstage/plugin-nomad': patch -'@backstage/plugin-vault': patch -'@backstage/plugin-gocd': patch -'@backstage/plugin-home': patch -'@backstage/plugin-todo': patch -'@backstage/plugin-adr': patch -'@backstage/plugin-org': patch ---- - -Add official support for React 18. diff --git a/.changeset/long-sheep-exercise.md b/.changeset/long-sheep-exercise.md deleted file mode 100644 index f5e692f55e..0000000000 --- a/.changeset/long-sheep-exercise.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -'@backstage/plugin-catalog-graph': minor ---- - -Add the entire `Entity` to `EntityNodeData` and deprecate `name`, `kind`, `title`, `namespace` and `spec`. - -To get the deprecated properties in your custom component you can use: - -```typescript -import { DEFAULT_NAMESPACE } from '@backstage/catalog-model'; - -const { - kind, - metadata: { name, namespace = DEFAULT_NAMESPACE, title }, -} = entity; -``` diff --git a/.changeset/long-turkeys-argue.md b/.changeset/long-turkeys-argue.md deleted file mode 100644 index f051d42478..0000000000 --- a/.changeset/long-turkeys-argue.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -Add examples for `github:environment:create` scaffolder action & improve related tests diff --git a/.changeset/orange-jokes-tap.md b/.changeset/long-wolves-return.md similarity index 53% rename from .changeset/orange-jokes-tap.md rename to .changeset/long-wolves-return.md index 0fd9e14a46..8d4d78792f 100644 --- a/.changeset/orange-jokes-tap.md +++ b/.changeset/long-wolves-return.md @@ -2,4 +2,4 @@ '@backstage/frontend-app-api': patch --- -Implement new `AppTreeApi` +Bringing over apis from core-plugin-api diff --git a/.changeset/loud-ghosts-deny.md b/.changeset/loud-ghosts-deny.md deleted file mode 100644 index e66b052c4e..0000000000 --- a/.changeset/loud-ghosts-deny.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': minor ---- - -Introduce a new optional config parameter `catalog.stitchingStrategy.mode`, -which can have the values `'immediate'` (default) and `'deferred'`. The default -is for stitching to work as it did before this change, which means that it -happens "in-band" (blocking) immediately when each processing task finishes. -When set to `'deferred'`, stitching is instead deferred to happen on a separate -asynchronous worker queue just like processing. - -Deferred stitching should make performance smoother when ingesting large amounts -of entities, and reduce p99 processing times and repeated over-stitching of -hot spot entities when fan-out/fan-in in terms of relations is very large. It -does however also come with some performance cost due to the queuing with how -much wall-clock time some types of task take. diff --git a/.changeset/lovely-terms-search.md b/.changeset/lovely-terms-search.md new file mode 100644 index 0000000000..7590a0d5a6 --- /dev/null +++ b/.changeset/lovely-terms-search.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-tasks': patch +--- + +Allow tasks to run more often that the default work check interval, which is 5 seconds. diff --git a/.changeset/lovely-turtles-remain.md b/.changeset/lovely-turtles-remain.md deleted file mode 100644 index 711a397baa..0000000000 --- a/.changeset/lovely-turtles-remain.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -Added description for publish:gerrit scaffolder actions diff --git a/.changeset/lucky-kids-cough.md b/.changeset/lucky-kids-cough.md new file mode 100644 index 0000000000..5ab1856e35 --- /dev/null +++ b/.changeset/lucky-kids-cough.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-catalog': patch +--- + +- Fixes bug where after unregistering an entity you are redirected to `/`. +- Adds an optional external route `unregisterRedirect` to override this behaviour to another route. diff --git a/.changeset/many-masks-smoke.md b/.changeset/many-masks-smoke.md deleted file mode 100644 index 6d249eeb15..0000000000 --- a/.changeset/many-masks-smoke.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/repo-tools': minor -'@backstage/cli': minor ---- - -Remove support for the deprecated `--experimental-type-build` option for `package build`. diff --git a/.changeset/metal-eggs-smile.md b/.changeset/metal-eggs-smile.md new file mode 100644 index 0000000000..1a7e86d6f0 --- /dev/null +++ b/.changeset/metal-eggs-smile.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend-module-okta-provider': patch +--- + +Adds okta-provider backend module for the auth plugin diff --git a/.changeset/hungry-paws-dress.md b/.changeset/mighty-beans-wink.md similarity index 50% rename from .changeset/hungry-paws-dress.md rename to .changeset/mighty-beans-wink.md index b227a77e72..e0623643e1 100644 --- a/.changeset/hungry-paws-dress.md +++ b/.changeset/mighty-beans-wink.md @@ -1,9 +1,11 @@ --- +'@backstage/plugin-catalog-import': patch '@backstage/plugin-user-settings': patch -'@backstage/plugin-techdocs': patch '@backstage/plugin-tech-radar': patch '@backstage/plugin-graphiql': patch +'@backstage/plugin-techdocs': patch +'@backstage/plugin-catalog': patch '@backstage/plugin-search': patch --- -Updated alpha exports according to routing changes in `@backstage/frontend-plugin-api`. +The `convertLegacyRouteRef` utility used by the alpha exports is now imported from `@backstage/core-compat-api`. diff --git a/.changeset/mighty-crews-attack.md b/.changeset/mighty-crews-attack.md deleted file mode 100644 index c0b8587fe0..0000000000 --- a/.changeset/mighty-crews-attack.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog': patch ---- - -Initial entity page implementation for new frontend system at `/alpha`, with an overview page enabled by default and the about card available as an optional card. diff --git a/.changeset/mighty-humans-shave.md b/.changeset/mighty-humans-shave.md deleted file mode 100644 index 7a4971e021..0000000000 --- a/.changeset/mighty-humans-shave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-backend-module-elasticsearch': patch ---- - -Support AWS OpenSearch Serverless search backend. Does not support `_refresh` endpoint. diff --git a/.changeset/modern-ducks-battle.md b/.changeset/modern-ducks-battle.md deleted file mode 100644 index e8359cf4ac..0000000000 --- a/.changeset/modern-ducks-battle.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-app-api': minor ---- - -Added the ability to configure bound routes through `app.routes.bindings`. The routing system used by `createApp` has been replaced by one that only supports route refs of the new format from `@backstage/frontend-plugin-api`. The requirement for route refs to have the same ID as their associated extension has been removed. diff --git a/.changeset/nasty-colts-tickle.md b/.changeset/nasty-colts-tickle.md deleted file mode 100644 index 5a6194c14d..0000000000 --- a/.changeset/nasty-colts-tickle.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-catalog-backend': patch -'@backstage/plugin-search-backend': patch ---- - -Update the OpenAPI spec with more complete error responses and request bodies using Optic. Also, updates the test cases to use the new `supertest` pass through from `@backstage/backend-openapi-utils`. diff --git a/.changeset/nasty-tips-exercise.md b/.changeset/nasty-tips-exercise.md new file mode 100644 index 0000000000..5dd38368d4 --- /dev/null +++ b/.changeset/nasty-tips-exercise.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +--- + +Fix issue with Circular JSON dependencies in templating diff --git a/.changeset/shiny-goats-flash.md b/.changeset/nervous-dancers-wait.md similarity index 58% rename from .changeset/shiny-goats-flash.md rename to .changeset/nervous-dancers-wait.md index 35a7ce0697..388d995487 100644 --- a/.changeset/shiny-goats-flash.md +++ b/.changeset/nervous-dancers-wait.md @@ -2,4 +2,4 @@ '@backstage/frontend-plugin-api': patch --- -Add new `AppTreeApi`. +Added `createSignInPageExtension`. diff --git a/.changeset/nervous-penguins-sort.md b/.changeset/nervous-penguins-sort.md new file mode 100644 index 0000000000..0c3ae4fcbe --- /dev/null +++ b/.changeset/nervous-penguins-sort.md @@ -0,0 +1,7 @@ +--- +'@backstage/plugin-catalog-react': patch +'@backstage/plugin-search-react': patch +'@backstage/plugin-catalog': patch +--- + +Internal refactor of alpha exports due to a change in how extension factories are defined. diff --git a/.changeset/new-beers-drive.md b/.changeset/new-beers-drive.md deleted file mode 100644 index 370734b7c5..0000000000 --- a/.changeset/new-beers-drive.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-catalog': patch ---- - -Create declarative extensions for the `Catalog` plugin; this initial plugin preset contains sidebar item, index page and filter extensions, all distributed via `/alpha` subpath. - -The `EntityPage` will be migrated in a follow-up patch. diff --git a/.changeset/new-kangaroos-train.md b/.changeset/new-kangaroos-train.md deleted file mode 100644 index 2e7a14f127..0000000000 --- a/.changeset/new-kangaroos-train.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-unprocessed-entities': patch ---- - -Added filtering and sorting to unprocessed entities tables. diff --git a/.changeset/nice-apes-kneel.md b/.changeset/nice-apes-kneel.md deleted file mode 100644 index 1ecff9d223..0000000000 --- a/.changeset/nice-apes-kneel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs': patch ---- - -Added entity page content for the new plugin exported via `/alpha`. diff --git a/.changeset/nice-pillows-poke.md b/.changeset/nice-pillows-poke.md deleted file mode 100644 index 64034c39d2..0000000000 --- a/.changeset/nice-pillows-poke.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-stack-overflow': patch ---- - -Migrate package to the new Frontend system, the new module is distributed with a `/alpha` subpath. diff --git a/.changeset/ninety-numbers-study.md b/.changeset/ninety-numbers-study.md deleted file mode 100644 index e77131fab9..0000000000 --- a/.changeset/ninety-numbers-study.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/core-components': patch ---- - -Fixed compatibility with Safari <16.3 by eliminating RegEx lookbehind in `extractInitials`. - -This PR also changed how initials are generated resulting in _John Jonathan Doe_ => _JD_ instead of _JJ_. diff --git a/.changeset/old-apricots-taste.md b/.changeset/old-apricots-taste.md deleted file mode 100644 index 544ba11536..0000000000 --- a/.changeset/old-apricots-taste.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-react': patch ---- - -Added new APIs at the `/alpha` subpath for creating entity page cards and content for the new frontend system. diff --git a/.changeset/old-chairs-switch.md b/.changeset/old-chairs-switch.md deleted file mode 100644 index 2e9251e06f..0000000000 --- a/.changeset/old-chairs-switch.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/repo-tools': minor ---- - -Adds a new command `schema openapi test` that performs runtime validation of your OpenAPI specs using your test data. Under the hood, we're using Optic to perform this check, really cool work by them! - -To use this new command, you will have to run `yarn add @useoptic/optic` in the root of your repo. diff --git a/.changeset/old-coats-doubt.md b/.changeset/old-coats-doubt.md deleted file mode 100644 index 2b98acbd87..0000000000 --- a/.changeset/old-coats-doubt.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'@backstage/plugin-kubernetes-react': patch ---- - -Make sure types exported by other `kubernetes` plugins in the past are exported again after the creation -of the react package. - -Some types have been moved to this new package but the export was missing, so they were not available anymore for developers. diff --git a/.changeset/old-cows-buy.md b/.changeset/old-cows-buy.md deleted file mode 100644 index 14c9cf6eda..0000000000 --- a/.changeset/old-cows-buy.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-react': patch ---- - -Emit search analytics in the search hook instead of in a dedicated component diff --git a/.changeset/olive-doors-begin.md b/.changeset/olive-doors-begin.md deleted file mode 100644 index 5d8978964c..0000000000 --- a/.changeset/olive-doors-begin.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-incremental-ingestion': patch -'@backstage/plugin-catalog-backend-module-unprocessed': patch -'@backstage/plugin-search-backend-module-pg': patch -'@backstage/plugin-entity-feedback-backend': patch -'@backstage/plugin-code-coverage-backend': patch -'@backstage/plugin-tech-insights-backend': patch -'@backstage/plugin-user-settings-backend': patch -'@backstage/backend-plugin-api': patch -'@backstage/backend-test-utils': patch -'@backstage/plugin-scaffolder-backend': patch -'@backstage/plugin-linguist-backend': patch -'@backstage/plugin-playlist-backend': patch -'@backstage/plugin-techdocs-backend': patch -'@backstage/backend-common': patch -'@backstage/plugin-catalog-backend': patch -'@backstage/backend-tasks': patch -'@backstage/plugin-badges-backend': patch -'@backstage/plugin-bazaar-backend': patch -'@backstage/plugin-auth-backend': patch -'@backstage/plugin-app-backend': patch ---- - -`knex` has been bumped to major version 3 and `better-sqlite3` to major version 9, which deprecate node 16 support. diff --git a/.changeset/olive-paws-divide.md b/.changeset/olive-paws-divide.md deleted file mode 100644 index 688b6025bf..0000000000 --- a/.changeset/olive-paws-divide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-app-api': patch ---- - -Updated `app.extensions` configuration schema. diff --git a/.changeset/orange-ears-kiss.md b/.changeset/orange-ears-kiss.md deleted file mode 100644 index 1620127c20..0000000000 --- a/.changeset/orange-ears-kiss.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@backstage/plugin-auth-backend-module-microsoft-provider': patch ---- - -Re-add the missing profile photo -as well as access token retrieval for foreign scopes. - -Additionally, we switch from previously 48x48 to 96x96 -which is the size used at the profile card. diff --git a/.changeset/orange-planes-crash.md b/.changeset/orange-planes-crash.md deleted file mode 100644 index a8e828e912..0000000000 --- a/.changeset/orange-planes-crash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-bazaar': patch ---- - -Added alert popup in the bazaar plugin diff --git a/.changeset/perfect-apes-sing.md b/.changeset/perfect-apes-sing.md new file mode 100644 index 0000000000..fede777057 --- /dev/null +++ b/.changeset/perfect-apes-sing.md @@ -0,0 +1,7 @@ +--- +'@backstage/core-components': patch +'@backstage/plugin-catalog-react': patch +'@backstage/plugin-catalog': patch +--- + +Register component overrides in the global `OverrideComponentNameToClassKeys` provided by `@backstage/theme`. This will in turn will provide component style override types for `createUnifiedTheme`. diff --git a/.changeset/pink-dryers-repair.md b/.changeset/pink-dryers-repair.md new file mode 100644 index 0000000000..42720c635a --- /dev/null +++ b/.changeset/pink-dryers-repair.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend': patch +--- + +The Okta provider implementation is moved to the new module diff --git a/.changeset/plenty-buckets-float.md b/.changeset/plenty-buckets-float.md deleted file mode 100644 index c1dbb54e87..0000000000 --- a/.changeset/plenty-buckets-float.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-bazaar': patch ---- - -Removed unnecessary dependency on `@backstage/cli`. diff --git a/.changeset/plenty-numbers-enjoy.md b/.changeset/plenty-numbers-enjoy.md new file mode 100644 index 0000000000..5e5acbabf1 --- /dev/null +++ b/.changeset/plenty-numbers-enjoy.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-search-react': patch +--- + +Removed `@backstage/frontend-app-api` dependency. diff --git a/.changeset/plenty-tigers-argue.md b/.changeset/plenty-tigers-argue.md deleted file mode 100644 index ef9e58d63b..0000000000 --- a/.changeset/plenty-tigers-argue.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-tech-insights-backend': patch ---- - -Add `factRetrieverId` to the fact retriever's logger metadata. diff --git a/.changeset/polite-knives-build.md b/.changeset/polite-knives-build.md new file mode 100644 index 0000000000..66ecbf0645 --- /dev/null +++ b/.changeset/polite-knives-build.md @@ -0,0 +1,19 @@ +--- +'@backstage/plugin-kubernetes-backend': minor +--- + +You can now select `single` kubernetes cluster that the entity is part-of from all your defined kubernetes clusters, by passing `backstage.io/kubernetes-cluster` annotation with the defined cluster name. + +If you do not specify the annotation by `default it fetches all` defined kubernetes cluster. + +To apply + +catalog-info.yaml + +```diff +annotations: + 'backstage.io/kubernetes-id': dice-roller + 'backstage.io/kubernetes-namespace': dice-space ++ 'backstage.io/kubernetes-cluster': dice-cluster + 'backstage.io/kubernetes-label-selector': 'app=my-app,component=front-end' +``` diff --git a/.changeset/poor-pandas-dream.md b/.changeset/poor-pandas-dream.md new file mode 100644 index 0000000000..2804fa6926 --- /dev/null +++ b/.changeset/poor-pandas-dream.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Tweaked Node.js version check for when to use the new module register API with the new backend `package start` command. diff --git a/.changeset/poor-roses-hang.md b/.changeset/poor-roses-hang.md deleted file mode 100644 index 028df6a7c6..0000000000 --- a/.changeset/poor-roses-hang.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/core-components': patch ---- - -Make the `options.titleFormat` prop of `` apply to all keys including nested ones. Previously, this option would only apply to the root keys of the `metadata` prop. - -Document and improve the props of ``. Previously, the `options` prop was `any`. diff --git a/.changeset/poor-seahorses-rush.md b/.changeset/poor-seahorses-rush.md deleted file mode 100644 index 55313f706d..0000000000 --- a/.changeset/poor-seahorses-rush.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-azure-devops': patch ---- - -Consolidated getting the annotation values into a single function to help with future changes diff --git a/.changeset/popular-bikes-do.md b/.changeset/popular-bikes-do.md deleted file mode 100644 index b1cc5c2cdd..0000000000 --- a/.changeset/popular-bikes-do.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-code-coverage': patch ---- - -The warning for missing code coverage will now render the entity as a reference. diff --git a/.changeset/pre.json b/.changeset/pre.json index 6f0b647f63..5a151bfc2f 100644 --- a/.changeset/pre.json +++ b/.changeset/pre.json @@ -2,398 +2,314 @@ "mode": "pre", "tag": "next", "initialVersions": { - "example-app": "0.2.88", - "@backstage/app-defaults": "1.4.4", - "example-app-next": "0.0.2", - "app-next-example-plugin": "0.0.2", - "example-backend": "0.2.88", - "@backstage/backend-app-api": "0.5.6", - "@backstage/backend-common": "0.19.8", - "@backstage/backend-defaults": "0.2.6", + "example-app": "0.2.89", + "@backstage/app-defaults": "1.4.5", + "example-app-next": "0.0.3", + "app-next-example-plugin": "0.0.3", + "example-backend": "0.2.89", + "@backstage/backend-app-api": "0.5.8", + "@backstage/backend-common": "0.19.9", + "@backstage/backend-defaults": "0.2.7", "@backstage/backend-dev-utils": "0.1.2", - "example-backend-next": "0.0.16", - "@backstage/backend-openapi-utils": "0.0.5", - "@backstage/backend-plugin-api": "0.6.6", - "@backstage/backend-plugin-manager": "0.0.2", - "@backstage/backend-tasks": "0.5.11", - "@backstage/backend-test-utils": "0.2.7", - "@backstage/catalog-client": "1.4.5", + "example-backend-next": "0.0.17", + "@backstage/backend-openapi-utils": "0.1.0", + "@backstage/backend-plugin-api": "0.6.7", + "@backstage/backend-plugin-manager": "0.0.3", + "@backstage/backend-tasks": "0.5.12", + "@backstage/backend-test-utils": "0.2.8", + "@backstage/catalog-client": "1.4.6", "@backstage/catalog-model": "1.4.3", - "@backstage/cli": "0.23.0", + "@backstage/cli": "0.24.0", "@backstage/cli-common": "0.1.13", - "@backstage/cli-node": "0.1.5", + "@backstage/cli-node": "0.2.0", "@backstage/codemods": "0.1.46", "@backstage/config": "1.1.1", - "@backstage/config-loader": "1.5.1", - "@backstage/core-app-api": "1.11.0", - "@backstage/core-components": "0.13.6", - "@backstage/core-plugin-api": "1.7.0", - "@backstage/create-app": "0.5.6", - "@backstage/dev-utils": "1.0.22", - "e2e-test": "0.2.8", + "@backstage/config-loader": "1.5.3", + "@backstage/core-app-api": "1.11.1", + "@backstage/core-compat-api": "0.0.1", + "@backstage/core-components": "0.13.8", + "@backstage/core-plugin-api": "1.8.0", + "@backstage/create-app": "0.5.7", + "@backstage/dev-utils": "1.0.23", + "e2e-test": "0.2.9", "@backstage/e2e-test-utils": "0.1.0", "@backstage/errors": "1.2.3", "@backstage/eslint-plugin": "0.1.3", - "@backstage/frontend-app-api": "0.2.0", - "@backstage/frontend-plugin-api": "0.2.0", - "@backstage/integration": "1.7.1", - "@backstage/integration-aws-node": "0.1.7", - "@backstage/integration-react": "1.1.20", - "@backstage/release-manifests": "0.0.10", - "@backstage/repo-tools": "0.3.5", - "@techdocs/cli": "1.6.0", - "techdocs-cli-embedded-app": "0.2.87", - "@backstage/test-utils": "1.4.4", - "@backstage/theme": "0.4.3", + "@backstage/frontend-app-api": "0.3.0", + "@backstage/frontend-plugin-api": "0.3.0", + "@backstage/integration": "1.7.2", + "@backstage/integration-aws-node": "0.1.8", + "@backstage/integration-react": "1.1.21", + "@backstage/release-manifests": "0.0.11", + "@backstage/repo-tools": "0.4.0", + "@techdocs/cli": "1.7.0", + "techdocs-cli-embedded-app": "0.2.88", + "@backstage/test-utils": "1.4.5", + "@backstage/theme": "0.4.4", "@backstage/types": "1.1.1", - "@backstage/version-bridge": "1.0.6", - "@backstage/plugin-adr": "0.6.8", - "@backstage/plugin-adr-backend": "0.4.3", - "@backstage/plugin-adr-common": "0.2.16", - "@backstage/plugin-airbrake": "0.3.25", - "@backstage/plugin-airbrake-backend": "0.3.3", - "@backstage/plugin-allure": "0.1.41", - "@backstage/plugin-analytics-module-ga": "0.1.34", - "@backstage/plugin-analytics-module-ga4": "0.1.5", - "@backstage/plugin-analytics-module-newrelic-browser": "0.0.3", - "@backstage/plugin-apache-airflow": "0.2.16", - "@backstage/plugin-api-docs": "0.9.12", - "@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.4", - "@backstage/plugin-apollo-explorer": "0.1.16", - "@backstage/plugin-app-backend": "0.3.54", - "@backstage/plugin-app-node": "0.1.6", - "@backstage/plugin-auth-backend": "0.19.3", - "@backstage/plugin-auth-backend-module-gcp-iap-provider": "0.2.0", - "@backstage/plugin-auth-backend-module-github-provider": "0.1.3", - "@backstage/plugin-auth-backend-module-gitlab-provider": "0.1.3", - "@backstage/plugin-auth-backend-module-google-provider": "0.1.3", - "@backstage/plugin-auth-backend-module-microsoft-provider": "0.1.0", - "@backstage/plugin-auth-backend-module-oauth2-provider": "0.1.3", - "@backstage/plugin-auth-backend-module-pinniped-provider": "0.1.0", - "@backstage/plugin-auth-node": "0.4.0", - "@backstage/plugin-azure-devops": "0.3.7", - "@backstage/plugin-azure-devops-backend": "0.4.3", + "@backstage/version-bridge": "1.0.7", + "@backstage/plugin-adr": "0.6.9", + "@backstage/plugin-adr-backend": "0.4.4", + "@backstage/plugin-adr-common": "0.2.17", + "@backstage/plugin-airbrake": "0.3.26", + "@backstage/plugin-airbrake-backend": "0.3.4", + "@backstage/plugin-allure": "0.1.42", + "@backstage/plugin-analytics-module-ga": "0.1.35", + "@backstage/plugin-analytics-module-ga4": "0.1.6", + "@backstage/plugin-analytics-module-newrelic-browser": "0.0.4", + "@backstage/plugin-apache-airflow": "0.2.17", + "@backstage/plugin-api-docs": "0.10.0", + "@backstage/plugin-api-docs-module-protoc-gen-doc": "0.1.5", + "@backstage/plugin-apollo-explorer": "0.1.17", + "@backstage/plugin-app-backend": "0.3.55", + "@backstage/plugin-app-node": "0.1.7", + "@backstage/plugin-auth-backend": "0.20.0", + "@backstage/plugin-auth-backend-module-gcp-iap-provider": "0.2.1", + "@backstage/plugin-auth-backend-module-github-provider": "0.1.4", + "@backstage/plugin-auth-backend-module-gitlab-provider": "0.1.4", + "@backstage/plugin-auth-backend-module-google-provider": "0.1.4", + "@backstage/plugin-auth-backend-module-microsoft-provider": "0.1.2", + "@backstage/plugin-auth-backend-module-oauth2-provider": "0.1.4", + "@backstage/plugin-auth-backend-module-pinniped-provider": "0.1.1", + "@backstage/plugin-auth-node": "0.4.1", + "@backstage/plugin-azure-devops": "0.3.8", + "@backstage/plugin-azure-devops-backend": "0.4.4", "@backstage/plugin-azure-devops-common": "0.3.1", - "@backstage/plugin-azure-sites": "0.1.14", - "@backstage/plugin-azure-sites-backend": "0.1.16", + "@backstage/plugin-azure-sites": "0.1.15", + "@backstage/plugin-azure-sites-backend": "0.1.17", "@backstage/plugin-azure-sites-common": "0.1.1", - "@backstage/plugin-badges": "0.2.49", - "@backstage/plugin-badges-backend": "0.3.3", - "@backstage/plugin-bazaar": "0.2.17", - "@backstage/plugin-bazaar-backend": "0.3.3", - "@backstage/plugin-bitbucket-cloud-common": "0.2.13", - "@backstage/plugin-bitrise": "0.1.52", - "@backstage/plugin-catalog": "1.14.0", - "@backstage/plugin-catalog-backend": "1.14.0", - "@backstage/plugin-catalog-backend-module-aws": "0.3.0", - "@backstage/plugin-catalog-backend-module-azure": "0.1.25", - "@backstage/plugin-catalog-backend-module-bitbucket": "0.2.21", - "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.1.21", - "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.1.19", - "@backstage/plugin-catalog-backend-module-gcp": "0.1.6", - "@backstage/plugin-catalog-backend-module-gerrit": "0.1.22", - "@backstage/plugin-catalog-backend-module-github": "0.4.4", - "@backstage/plugin-catalog-backend-module-github-org": "0.1.0", - "@backstage/plugin-catalog-backend-module-gitlab": "0.3.3", - "@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.4.10", - "@backstage/plugin-catalog-backend-module-ldap": "0.5.21", - "@backstage/plugin-catalog-backend-module-msgraph": "0.5.13", - "@backstage/plugin-catalog-backend-module-openapi": "0.1.23", - "@backstage/plugin-catalog-backend-module-puppetdb": "0.1.11", - "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "0.1.3", - "@backstage/plugin-catalog-backend-module-unprocessed": "0.3.3", - "@backstage/plugin-catalog-common": "1.0.17", - "@backstage/plugin-catalog-graph": "0.2.37", - "@backstage/plugin-catalog-graphql": "0.4.0", - "@backstage/plugin-catalog-import": "0.10.1", - "@backstage/plugin-catalog-node": "1.4.7", - "@backstage/plugin-catalog-react": "1.8.5", - "@backstage/plugin-catalog-unprocessed-entities": "0.1.4", - "@backstage/plugin-cicd-statistics": "0.1.27", - "@backstage/plugin-cicd-statistics-module-gitlab": "0.1.21", - "@backstage/plugin-circleci": "0.3.25", - "@backstage/plugin-cloudbuild": "0.3.25", - "@backstage/plugin-code-climate": "0.1.25", - "@backstage/plugin-code-coverage": "0.2.18", - "@backstage/plugin-code-coverage-backend": "0.2.20", - "@backstage/plugin-codescene": "0.1.18", - "@backstage/plugin-config-schema": "0.1.46", - "@backstage/plugin-cost-insights": "0.12.14", + "@backstage/plugin-badges": "0.2.50", + "@backstage/plugin-badges-backend": "0.3.4", + "@backstage/plugin-bazaar": "0.2.18", + "@backstage/plugin-bazaar-backend": "0.3.5", + "@backstage/plugin-bitbucket-cloud-common": "0.2.14", + "@backstage/plugin-bitrise": "0.1.53", + "@backstage/plugin-catalog": "1.15.0", + "@backstage/plugin-catalog-backend": "1.15.0", + "@backstage/plugin-catalog-backend-module-aws": "0.3.1", + "@backstage/plugin-catalog-backend-module-azure": "0.1.26", + "@backstage/plugin-catalog-backend-module-backstage-openapi": "0.1.0", + "@backstage/plugin-catalog-backend-module-bitbucket": "0.2.22", + "@backstage/plugin-catalog-backend-module-bitbucket-cloud": "0.1.22", + "@backstage/plugin-catalog-backend-module-bitbucket-server": "0.1.20", + "@backstage/plugin-catalog-backend-module-gcp": "0.1.7", + "@backstage/plugin-catalog-backend-module-gerrit": "0.1.23", + "@backstage/plugin-catalog-backend-module-github": "0.4.5", + "@backstage/plugin-catalog-backend-module-github-org": "0.1.1", + "@backstage/plugin-catalog-backend-module-gitlab": "0.3.4", + "@backstage/plugin-catalog-backend-module-incremental-ingestion": "0.4.11", + "@backstage/plugin-catalog-backend-module-ldap": "0.5.22", + "@backstage/plugin-catalog-backend-module-msgraph": "0.5.14", + "@backstage/plugin-catalog-backend-module-openapi": "0.1.24", + "@backstage/plugin-catalog-backend-module-puppetdb": "0.1.12", + "@backstage/plugin-catalog-backend-module-scaffolder-entity-model": "0.1.4", + "@backstage/plugin-catalog-backend-module-unprocessed": "0.3.4", + "@backstage/plugin-catalog-common": "1.0.18", + "@backstage/plugin-catalog-graph": "0.3.0", + "@backstage/plugin-catalog-import": "0.10.2", + "@backstage/plugin-catalog-node": "1.5.0", + "@backstage/plugin-catalog-react": "1.9.0", + "@backstage/plugin-catalog-unprocessed-entities": "0.1.5", + "@backstage/plugin-cicd-statistics": "0.1.28", + "@backstage/plugin-cicd-statistics-module-gitlab": "0.1.22", + "@backstage/plugin-circleci": "0.3.26", + "@backstage/plugin-cloudbuild": "0.3.26", + "@backstage/plugin-code-climate": "0.1.26", + "@backstage/plugin-code-coverage": "0.2.19", + "@backstage/plugin-code-coverage-backend": "0.2.21", + "@backstage/plugin-codescene": "0.1.19", + "@backstage/plugin-config-schema": "0.1.47", + "@backstage/plugin-cost-insights": "0.12.15", "@backstage/plugin-cost-insights-common": "0.1.2", - "@backstage/plugin-devtools": "0.1.5", - "@backstage/plugin-devtools-backend": "0.2.3", - "@backstage/plugin-devtools-common": "0.1.5", - "@backstage/plugin-dynatrace": "7.0.5", - "@backstage/plugin-entity-feedback": "0.2.8", - "@backstage/plugin-entity-feedback-backend": "0.2.3", + "@backstage/plugin-devtools": "0.1.6", + "@backstage/plugin-devtools-backend": "0.2.4", + "@backstage/plugin-devtools-common": "0.1.6", + "@backstage/plugin-dynatrace": "8.0.0", + "@backstage/plugin-entity-feedback": "0.2.9", + "@backstage/plugin-entity-feedback-backend": "0.2.4", "@backstage/plugin-entity-feedback-common": "0.1.3", - "@backstage/plugin-entity-validation": "0.1.10", - "@backstage/plugin-events-backend": "0.2.15", - "@backstage/plugin-events-backend-module-aws-sqs": "0.2.9", - "@backstage/plugin-events-backend-module-azure": "0.1.16", - "@backstage/plugin-events-backend-module-bitbucket-cloud": "0.1.16", - "@backstage/plugin-events-backend-module-gerrit": "0.1.16", - "@backstage/plugin-events-backend-module-github": "0.1.16", - "@backstage/plugin-events-backend-module-gitlab": "0.1.16", - "@backstage/plugin-events-backend-test-utils": "0.1.16", - "@backstage/plugin-events-node": "0.2.15", - "@internal/plugin-todo-list": "1.0.18", - "@internal/plugin-todo-list-backend": "1.0.18", - "@internal/plugin-todo-list-common": "1.0.14", - "@backstage/plugin-explore": "0.4.11", - "@backstage/plugin-explore-backend": "0.0.16", + "@backstage/plugin-entity-validation": "0.1.11", + "@backstage/plugin-events-backend": "0.2.16", + "@backstage/plugin-events-backend-module-aws-sqs": "0.2.10", + "@backstage/plugin-events-backend-module-azure": "0.1.17", + "@backstage/plugin-events-backend-module-bitbucket-cloud": "0.1.17", + "@backstage/plugin-events-backend-module-gerrit": "0.1.17", + "@backstage/plugin-events-backend-module-github": "0.1.17", + "@backstage/plugin-events-backend-module-gitlab": "0.1.17", + "@backstage/plugin-events-backend-test-utils": "0.1.17", + "@backstage/plugin-events-node": "0.2.16", + "@internal/plugin-todo-list": "1.0.19", + "@internal/plugin-todo-list-backend": "1.0.19", + "@internal/plugin-todo-list-common": "1.0.15", + "@backstage/plugin-explore": "0.4.12", + "@backstage/plugin-explore-backend": "0.0.17", "@backstage/plugin-explore-common": "0.0.2", - "@backstage/plugin-explore-react": "0.0.32", - "@backstage/plugin-firehydrant": "0.2.9", - "@backstage/plugin-fossa": "0.2.57", - "@backstage/plugin-gcalendar": "0.3.19", - "@backstage/plugin-gcp-projects": "0.3.42", - "@backstage/plugin-git-release-manager": "0.3.38", - "@backstage/plugin-github-actions": "0.6.6", - "@backstage/plugin-github-deployments": "0.1.56", - "@backstage/plugin-github-issues": "0.2.14", - "@backstage/plugin-github-pull-requests-board": "0.1.19", - "@backstage/plugin-gitops-profiles": "0.3.41", - "@backstage/plugin-gocd": "0.1.31", - "@backstage/plugin-graphiql": "0.2.55", - "@backstage/plugin-graphql-backend": "0.2.0", - "@backstage/plugin-graphql-voyager": "0.1.8", - "@backstage/plugin-home": "0.5.9", - "@backstage/plugin-home-react": "0.1.4", - "@backstage/plugin-ilert": "0.2.14", - "@backstage/plugin-jenkins": "0.9.0", - "@backstage/plugin-jenkins-backend": "0.3.0", - "@backstage/plugin-jenkins-common": "0.1.20", - "@backstage/plugin-kafka": "0.3.25", - "@backstage/plugin-kafka-backend": "0.3.3", - "@backstage/plugin-kubernetes": "0.11.0", - "@backstage/plugin-kubernetes-backend": "0.13.0", - "@backstage/plugin-kubernetes-cluster": "0.0.1", - "@backstage/plugin-kubernetes-common": "0.7.0", - "@backstage/plugin-kubernetes-node": "0.1.0", - "@backstage/plugin-kubernetes-react": "0.1.0", - "@backstage/plugin-lighthouse": "0.4.10", - "@backstage/plugin-lighthouse-backend": "0.3.3", + "@backstage/plugin-explore-react": "0.0.33", + "@backstage/plugin-firehydrant": "0.2.10", + "@backstage/plugin-fossa": "0.2.58", + "@backstage/plugin-gcalendar": "0.3.20", + "@backstage/plugin-gcp-projects": "0.3.43", + "@backstage/plugin-git-release-manager": "0.3.39", + "@backstage/plugin-github-actions": "0.6.7", + "@backstage/plugin-github-deployments": "0.1.57", + "@backstage/plugin-github-issues": "0.2.15", + "@backstage/plugin-github-pull-requests-board": "0.1.20", + "@backstage/plugin-gitops-profiles": "0.3.42", + "@backstage/plugin-gocd": "0.1.32", + "@backstage/plugin-graphiql": "0.3.0", + "@backstage/plugin-graphql-voyager": "0.1.9", + "@backstage/plugin-home": "0.5.10", + "@backstage/plugin-home-react": "0.1.5", + "@backstage/plugin-ilert": "0.2.15", + "@backstage/plugin-jenkins": "0.9.1", + "@backstage/plugin-jenkins-backend": "0.3.1", + "@backstage/plugin-jenkins-common": "0.1.21", + "@backstage/plugin-kafka": "0.3.26", + "@backstage/plugin-kafka-backend": "0.3.5", + "@backstage/plugin-kubernetes": "0.11.1", + "@backstage/plugin-kubernetes-backend": "0.13.1", + "@backstage/plugin-kubernetes-cluster": "0.0.2", + "@backstage/plugin-kubernetes-common": "0.7.1", + "@backstage/plugin-kubernetes-node": "0.1.1", + "@backstage/plugin-kubernetes-react": "0.1.1", + "@backstage/plugin-lighthouse": "0.4.11", + "@backstage/plugin-lighthouse-backend": "0.3.4", "@backstage/plugin-lighthouse-common": "0.1.4", - "@backstage/plugin-linguist": "0.1.10", - "@backstage/plugin-linguist-backend": "0.5.3", + "@backstage/plugin-linguist": "0.1.11", + "@backstage/plugin-linguist-backend": "0.5.4", "@backstage/plugin-linguist-common": "0.1.2", - "@backstage/plugin-microsoft-calendar": "0.1.8", - "@backstage/plugin-newrelic": "0.3.41", - "@backstage/plugin-newrelic-dashboard": "0.3.0", - "@backstage/plugin-nomad": "0.1.6", - "@backstage/plugin-nomad-backend": "0.1.8", - "@backstage/plugin-octopus-deploy": "0.2.7", - "@backstage/plugin-opencost": "0.2.1", - "@backstage/plugin-org": "0.6.15", - "@backstage/plugin-org-react": "0.1.14", - "@backstage/plugin-pagerduty": "0.6.6", - "@backstage/plugin-periskop": "0.1.23", - "@backstage/plugin-periskop-backend": "0.2.3", - "@backstage/plugin-permission-backend": "0.5.29", - "@backstage/plugin-permission-backend-module-allow-all-policy": "0.1.3", - "@backstage/plugin-permission-common": "0.7.9", - "@backstage/plugin-permission-node": "0.7.17", - "@backstage/plugin-permission-react": "0.4.16", - "@backstage/plugin-playlist": "0.1.17", - "@backstage/plugin-playlist-backend": "0.3.10", - "@backstage/plugin-playlist-common": "0.1.11", - "@backstage/plugin-proxy-backend": "0.4.3", - "@backstage/plugin-puppetdb": "0.1.8", - "@backstage/plugin-rollbar": "0.4.25", - "@backstage/plugin-rollbar-backend": "0.1.51", - "@backstage/plugin-scaffolder": "1.15.1", - "@backstage/plugin-scaffolder-backend": "1.18.0", - "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.2.7", - "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.2.30", - "@backstage/plugin-scaffolder-backend-module-gitlab": "0.2.9", - "@backstage/plugin-scaffolder-backend-module-rails": "0.4.23", - "@backstage/plugin-scaffolder-backend-module-sentry": "0.1.14", - "@backstage/plugin-scaffolder-backend-module-yeoman": "0.2.27", - "@backstage/plugin-scaffolder-common": "1.4.2", - "@backstage/plugin-scaffolder-node": "0.2.6", - "@backstage/plugin-scaffolder-react": "1.5.6", - "@backstage/plugin-search": "1.4.1", - "@backstage/plugin-search-backend": "1.4.6", - "@backstage/plugin-search-backend-module-catalog": "0.1.10", - "@backstage/plugin-search-backend-module-elasticsearch": "1.3.9", - "@backstage/plugin-search-backend-module-explore": "0.1.10", - "@backstage/plugin-search-backend-module-pg": "0.5.15", - "@backstage/plugin-search-backend-module-techdocs": "0.1.10", - "@backstage/plugin-search-backend-node": "1.2.10", - "@backstage/plugin-search-common": "1.2.7", - "@backstage/plugin-search-react": "1.7.1", - "@backstage/plugin-sentry": "0.5.10", - "@backstage/plugin-shortcuts": "0.3.15", - "@backstage/plugin-sonarqube": "0.7.6", - "@backstage/plugin-sonarqube-backend": "0.2.8", - "@backstage/plugin-sonarqube-react": "0.1.9", - "@backstage/plugin-splunk-on-call": "0.4.14", - "@backstage/plugin-stack-overflow": "0.1.21", - "@backstage/plugin-stack-overflow-backend": "0.2.10", - "@backstage/plugin-stackstorm": "0.1.7", - "@backstage/plugin-tech-insights": "0.3.17", - "@backstage/plugin-tech-insights-backend": "0.5.20", - "@backstage/plugin-tech-insights-backend-module-jsonfc": "0.1.38", + "@backstage/plugin-microsoft-calendar": "0.1.9", + "@backstage/plugin-newrelic": "0.3.42", + "@backstage/plugin-newrelic-dashboard": "0.3.1", + "@backstage/plugin-nomad": "0.1.7", + "@backstage/plugin-nomad-backend": "0.1.9", + "@backstage/plugin-octopus-deploy": "0.2.8", + "@backstage/plugin-opencost": "0.2.2", + "@backstage/plugin-org": "0.6.16", + "@backstage/plugin-org-react": "0.1.15", + "@backstage/plugin-pagerduty": "0.6.7", + "@backstage/plugin-periskop": "0.1.24", + "@backstage/plugin-periskop-backend": "0.2.5", + "@backstage/plugin-permission-backend": "0.5.30", + "@backstage/plugin-permission-backend-module-allow-all-policy": "0.1.4", + "@backstage/plugin-permission-common": "0.7.10", + "@backstage/plugin-permission-node": "0.7.18", + "@backstage/plugin-permission-react": "0.4.17", + "@backstage/plugin-playlist": "0.2.0", + "@backstage/plugin-playlist-backend": "0.3.11", + "@backstage/plugin-playlist-common": "0.1.12", + "@backstage/plugin-proxy-backend": "0.4.5", + "@backstage/plugin-puppetdb": "0.1.9", + "@backstage/plugin-rollbar": "0.4.26", + "@backstage/plugin-rollbar-backend": "0.1.52", + "@backstage/plugin-scaffolder": "1.16.0", + "@backstage/plugin-scaffolder-backend": "1.19.0", + "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown": "0.2.8", + "@backstage/plugin-scaffolder-backend-module-cookiecutter": "0.2.31", + "@backstage/plugin-scaffolder-backend-module-gitlab": "0.2.10", + "@backstage/plugin-scaffolder-backend-module-rails": "0.4.24", + "@backstage/plugin-scaffolder-backend-module-sentry": "0.1.15", + "@backstage/plugin-scaffolder-backend-module-yeoman": "0.2.28", + "@backstage/plugin-scaffolder-common": "1.4.3", + "@backstage/plugin-scaffolder-node": "0.2.8", + "@backstage/plugin-scaffolder-react": "1.6.0", + "@backstage/plugin-search": "1.4.2", + "@backstage/plugin-search-backend": "1.4.7", + "@backstage/plugin-search-backend-module-catalog": "0.1.11", + "@backstage/plugin-search-backend-module-elasticsearch": "1.3.10", + "@backstage/plugin-search-backend-module-explore": "0.1.11", + "@backstage/plugin-search-backend-module-pg": "0.5.16", + "@backstage/plugin-search-backend-module-stack-overflow-collator": "0.1.0", + "@backstage/plugin-search-backend-module-techdocs": "0.1.11", + "@backstage/plugin-search-backend-node": "1.2.11", + "@backstage/plugin-search-common": "1.2.8", + "@backstage/plugin-search-react": "1.7.2", + "@backstage/plugin-sentry": "0.5.11", + "@backstage/plugin-shortcuts": "0.3.16", + "@backstage/plugin-sonarqube": "0.7.8", + "@backstage/plugin-sonarqube-backend": "0.2.9", + "@backstage/plugin-sonarqube-react": "0.1.10", + "@backstage/plugin-splunk-on-call": "0.4.15", + "@backstage/plugin-stack-overflow": "0.1.22", + "@backstage/plugin-stack-overflow-backend": "0.2.11", + "@backstage/plugin-stackstorm": "0.1.8", + "@backstage/plugin-tech-insights": "0.3.18", + "@backstage/plugin-tech-insights-backend": "0.5.21", + "@backstage/plugin-tech-insights-backend-module-jsonfc": "0.1.39", "@backstage/plugin-tech-insights-common": "0.2.12", - "@backstage/plugin-tech-insights-node": "0.4.12", - "@backstage/plugin-tech-radar": "0.6.9", - "@backstage/plugin-techdocs": "1.8.0", - "@backstage/plugin-techdocs-addons-test-utils": "1.0.22", - "@backstage/plugin-techdocs-backend": "1.8.0", - "@backstage/plugin-techdocs-module-addons-contrib": "1.1.1", - "@backstage/plugin-techdocs-node": "1.9.0", - "@backstage/plugin-techdocs-react": "1.1.12", - "@backstage/plugin-todo": "0.2.28", - "@backstage/plugin-todo-backend": "0.3.4", - "@backstage/plugin-user-settings": "0.7.11", - "@backstage/plugin-user-settings-backend": "0.2.4", - "@backstage/plugin-vault": "0.1.20", - "@backstage/plugin-vault-backend": "0.3.11", - "@backstage/plugin-xcmetrics": "0.2.44", - "@backstage/core-compat-api": "0.0.0", - "@backstage/plugin-catalog-backend-module-backstage-openapi": "0.0.0", - "@backstage/plugin-search-backend-module-stack-overflow-collator": "0.0.0", - "@backstage/plugin-vault-node": "0.0.0" + "@backstage/plugin-tech-insights-node": "0.4.13", + "@backstage/plugin-tech-radar": "0.6.10", + "@backstage/plugin-techdocs": "1.9.0", + "@backstage/plugin-techdocs-addons-test-utils": "1.0.23", + "@backstage/plugin-techdocs-backend": "1.9.0", + "@backstage/plugin-techdocs-module-addons-contrib": "1.1.2", + "@backstage/plugin-techdocs-node": "1.10.0", + "@backstage/plugin-techdocs-react": "1.1.13", + "@backstage/plugin-todo": "0.2.30", + "@backstage/plugin-todo-backend": "0.3.5", + "@backstage/plugin-user-settings": "0.7.12", + "@backstage/plugin-user-settings-backend": "0.2.6", + "@backstage/plugin-vault": "0.1.21", + "@backstage/plugin-vault-backend": "0.4.0", + "@backstage/plugin-vault-node": "0.1.0", + "@backstage/plugin-xcmetrics": "0.2.45", + "@backstage/frontend-test-utils": "0.0.0", + "@backstage/plugin-auth-backend-module-atlassian-provider": "0.0.0", + "@backstage/plugin-auth-backend-module-okta-provider": "0.0.0" }, "changesets": [ - "beige-stingrays-tap", - "big-roses-stare", - "blue-bags-warn", - "breezy-dogs-serve", - "brown-poets-join", - "chatty-cobras-cheer", - "chatty-countries-refuse", - "chilled-knives-rule", - "chilly-books-sneeze", - "chilly-terms-behave", - "clever-houses-scream", - "create-app-1698763033", - "curvy-carpets-kneel", - "curvy-carrots-thank", - "dirty-ducks-behave", - "dry-days-invite", - "eighty-chairs-camp", - "eleven-students-brake", - "fair-parrots-lick", - "fair-tools-bake", - "famous-plums-sit", - "fast-bears-lick", - "fifty-taxis-allow", - "flat-ducks-buy", - "fluffy-years-shake", - "four-files-behave", - "four-pears-swim", - "fresh-camels-give", - "fresh-crews-promise", - "fresh-schools-thank", - "gentle-elephants-look", - "gentle-pears-camp", - "gentle-pumpkins-carry", - "giant-cars-walk", - "giant-cycles-end", - "good-plums-confess", - "great-baboons-allow", - "healthy-dancers-dream", - "healthy-shirts-fold", - "heavy-experts-accept", - "heavy-rings-play", - "hip-moose-boil", - "hip-mugs-camp", - "hungry-paws-dress", - "hungry-radios-play", - "large-forks-arrive", - "late-forks-fetch", - "lazy-hotels-wait", - "long-turkeys-argue", - "loud-ghosts-deny", - "lovely-turtles-remain", - "many-masks-smoke", - "mighty-crews-attack", - "mighty-humans-shave", - "modern-ducks-battle", - "nasty-colts-tickle", - "new-beers-drive", - "new-kangaroos-train", - "nice-apes-kneel", - "nice-pillows-poke", - "ninety-numbers-study", - "old-apricots-taste", - "old-chairs-switch", - "old-coats-doubt", - "olive-doors-begin", - "olive-paws-divide", - "orange-ears-kiss", - "orange-jokes-tap", - "orange-planes-crash", - "plenty-buckets-float", - "plenty-tigers-argue", - "poor-seahorses-rush", - "popular-bikes-do", - "pretty-bats-end", - "pretty-swans-worry", - "quick-pumpkins-shave", - "quick-roses-move", - "real-apes-build", - "real-carrots-brake", - "real-jars-yawn", - "real-pears-study", - "red-beers-roll", - "red-yaks-press", - "renovate-dacadfa", - "rich-pugs-chew", - "rude-penguins-press", - "rude-tomatoes-itch", - "selfish-flies-kneel", - "shaggy-beers-collect", - "shaggy-buses-beg", - "sharp-chefs-attend", - "sharp-falcons-clean", - "shiny-geese-watch", - "shiny-goats-flash", - "silent-chairs-smoke", - "silver-kiwis-float", - "six-books-arrive", - "sixty-tips-argue", - "small-buckets-roll", - "smart-dancers-watch", - "sour-toes-joke", - "stale-horses-obey", - "stale-rice-count", - "strange-gifts-try", - "strange-queens-deliver", - "strange-taxis-explode", - "strong-taxis-wait", - "sweet-buckets-fry", - "sweet-countries-share", - "swift-badgers-hide", - "swift-mice-care", - "tall-colts-roll", - "tame-spies-hunt", - "tender-lies-wonder", - "tender-maps-type", - "thick-boats-decide", - "thick-dolphins-boil", - "thirty-stingrays-grin", - "three-moles-mix", - "tidy-camels-boil", - "tidy-planets-trade", - "tiny-files-judge", - "tricky-cups-hammer", - "tricky-vans-behave", - "twelve-donkeys-smash", - "two-jars-melt", - "unlucky-houses-end", - "violet-falcons-leave", - "violet-lamps-appear", - "weak-zebras-cover", - "wet-cows-brake", - "wet-shrimps-approve", - "wicked-ties-knock", - "wild-cows-watch", - "wild-geese-occur", - "wise-waves-approve", - "wise-weeks-design", - "young-days-talk" + "angry-eagles-end", + "angry-gorillas-unite", + "angry-walls-despacito", + "angry-walls-juggle", + "brave-socks-raise", + "breezy-pans-glow", + "bright-eyes-film", + "chatty-actors-live", + "chilled-terms-breathe", + "cold-pans-crash", + "create-app-1700579510", + "create-app-1700607979", + "curly-walls-relate", + "dry-readers-raise", + "eleven-ants-pretend", + "empty-dingos-grow", + "gentle-lies-greet", + "gold-shirts-yell", + "great-rings-type", + "hot-wolves-flash", + "kind-badgers-rush", + "large-weeks-accept", + "long-wolves-return", + "lovely-terms-search", + "lucky-kids-cough", + "metal-eggs-smile", + "mighty-beans-wink", + "nasty-tips-exercise", + "perfect-apes-sing", + "pink-dryers-repair", + "plenty-numbers-enjoy", + "polite-knives-build", + "poor-pandas-dream", + "proud-flies-travel", + "quick-horses-reply", + "renovate-07b1766", + "renovate-169bdc2", + "renovate-240982c", + "renovate-4891ee7", + "renovate-6c0fb81", + "renovate-9d2d52e", + "renovate-b193efa", + "renovate-c7270d5", + "renovate-ead3ba6", + "renovate-f5b18be", + "silly-numbers-wash", + "sixty-adults-kiss", + "sixty-houses-agree", + "spotty-olives-share", + "tiny-cobras-look", + "tricky-islands-wonder", + "twenty-beans-laugh", + "violet-zebras-thank" ] } diff --git a/.changeset/pretty-bats-end.md b/.changeset/pretty-bats-end.md deleted file mode 100644 index 8b08c5b00f..0000000000 --- a/.changeset/pretty-bats-end.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-gitlab': patch ---- - -Resolved a bug affecting the retrieval of users from group members. By appending '/all' to the API call, we now include members from all inherited groups, as per Gitlab's API specifications. This change is reflected in the listSaaSUsers function. diff --git a/.changeset/pretty-swans-worry.md b/.changeset/pretty-swans-worry.md deleted file mode 100644 index 621ae98fe5..0000000000 --- a/.changeset/pretty-swans-worry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-components': patch ---- - -Fixed the type declaration of `DependencyGraphProps`, the `defs` prop now expects `JSX.Element`s. diff --git a/.changeset/proud-flies-travel.md b/.changeset/proud-flies-travel.md new file mode 100644 index 0000000000..41f40e2e90 --- /dev/null +++ b/.changeset/proud-flies-travel.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-compat-api': patch +--- + +Made package public so it can be published diff --git a/.changeset/quick-horses-reply.md b/.changeset/quick-horses-reply.md new file mode 100644 index 0000000000..3469ef1d89 --- /dev/null +++ b/.changeset/quick-horses-reply.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-backend': patch +--- + +Fix creating env secret in github:environment:create action diff --git a/.changeset/quick-pumpkins-shave.md b/.changeset/quick-pumpkins-shave.md deleted file mode 100644 index cbb4c48dce..0000000000 --- a/.changeset/quick-pumpkins-shave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-home': patch ---- - -Added experimental support for declarative integration via the `/alpha` subpath. diff --git a/.changeset/quick-roses-move.md b/.changeset/quick-roses-move.md deleted file mode 100644 index 767ad0919e..0000000000 --- a/.changeset/quick-roses-move.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/dev-utils': patch -'@backstage/plugin-techdocs': patch ---- - -Switched the conditional `react-dom/client` import to use `import(...)` rather than `require(...)`. diff --git a/.changeset/real-apes-build.md b/.changeset/real-apes-build.md deleted file mode 100644 index 5481bebf3a..0000000000 --- a/.changeset/real-apes-build.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-auth-backend-module-microsoft-provider': patch ---- - -Correctly mark the client secret in configuration as secret diff --git a/.changeset/real-carrots-brake.md b/.changeset/real-carrots-brake.md deleted file mode 100644 index e9ae1f0c27..0000000000 --- a/.changeset/real-carrots-brake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-react': patch ---- - -Fixed a rare occurrence where a race in the search bar could throw away user input or cause the clear button not to work. diff --git a/.changeset/real-jars-yawn.md b/.changeset/real-jars-yawn.md deleted file mode 100644 index a89a687971..0000000000 --- a/.changeset/real-jars-yawn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -If create app installs dependencies, don't suggest to user that they also need to do it. diff --git a/.changeset/real-pears-study.md b/.changeset/real-pears-study.md deleted file mode 100644 index 9cbf9d8a28..0000000000 --- a/.changeset/real-pears-study.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-components': patch ---- - -Reverting the `MissingAnnotationEmptyState` component due to cyclical dependency. This component is now deprecated, please use the import from `@backstage/plugin-catalog-react` instead to use the new functionality diff --git a/.changeset/red-beers-roll.md b/.changeset/red-beers-roll.md deleted file mode 100644 index 3c061ce377..0000000000 --- a/.changeset/red-beers-roll.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-backend-module-techdocs': patch ---- - -The process of adding or modifying fields in the techdocs search index has been simplified. For more details, see [How to customize fields in the Software Catalog or TechDocs index](https://backstage.io/docs/features/search/how-to-guides.md#how-to-customize-fields-in-the-software-catalog-or-techdocs-index). diff --git a/.changeset/red-yaks-press.md b/.changeset/red-yaks-press.md deleted file mode 100644 index 7166ac345e..0000000000 --- a/.changeset/red-yaks-press.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-app-api': patch ---- - -Add current and default scopes when refreshing session diff --git a/.changeset/renovate-07b1766.md b/.changeset/renovate-07b1766.md new file mode 100644 index 0000000000..245f827d08 --- /dev/null +++ b/.changeset/renovate-07b1766.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-apollo-explorer': patch +--- + +Updated dependency `@apollo/explorer` to `^3.0.0`. diff --git a/.changeset/renovate-151ed0c.md b/.changeset/renovate-151ed0c.md deleted file mode 100644 index ee974fac52..0000000000 --- a/.changeset/renovate-151ed0c.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-cost-insights': patch ---- - -Updated dependency `@types/pluralize` to `^0.0.33`. diff --git a/.changeset/renovate-1693d3d.md b/.changeset/renovate-1693d3d.md deleted file mode 100644 index 2787ba12e4..0000000000 --- a/.changeset/renovate-1693d3d.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-components': patch ---- - -Updated dependency `linkify-react` to `4.1.2`. diff --git a/.changeset/renovate-abcaea1.md b/.changeset/renovate-169bdc2.md similarity index 51% rename from .changeset/renovate-abcaea1.md rename to .changeset/renovate-169bdc2.md index 7413c5c546..6a54230a28 100644 --- a/.changeset/renovate-abcaea1.md +++ b/.changeset/renovate-169bdc2.md @@ -2,4 +2,4 @@ '@backstage/plugin-api-docs': patch --- -Updated dependency `graphiql` to `3.0.9`. +Updated dependency `graphiql` to `3.0.10`. diff --git a/.changeset/renovate-240982c.md b/.changeset/renovate-240982c.md new file mode 100644 index 0000000000..f68e583388 --- /dev/null +++ b/.changeset/renovate-240982c.md @@ -0,0 +1,11 @@ +--- +'@backstage/plugin-home-react': patch +'@backstage/plugin-home': patch +'@backstage/plugin-scaffolder-react': patch +'@backstage/plugin-scaffolder': patch +--- + +Updated dependency `@rjsf/utils` to `5.14.1`. +Updated dependency `@rjsf/core` to `5.14.1`. +Updated dependency `@rjsf/material-ui` to `5.14.1`. +Updated dependency `@rjsf/validator-ajv8` to `5.14.1`. diff --git a/.changeset/renovate-4891ee7.md b/.changeset/renovate-4891ee7.md new file mode 100644 index 0000000000..031e42d111 --- /dev/null +++ b/.changeset/renovate-4891ee7.md @@ -0,0 +1,9 @@ +--- +'@backstage/backend-common': patch +'@backstage/plugin-kubernetes-backend': patch +'@backstage/plugin-kubernetes-common': patch +'@backstage/plugin-kubernetes-react': patch +'@backstage/plugin-kubernetes': patch +--- + +Updated dependency `@kubernetes/client-node` to `0.20.0`. diff --git a/.changeset/renovate-4b1eded.md b/.changeset/renovate-4b1eded.md new file mode 100644 index 0000000000..290e647895 --- /dev/null +++ b/.changeset/renovate-4b1eded.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-api-docs': patch +--- + +Updated dependency `@asyncapi/react-component` to `1.2.2`. diff --git a/.changeset/renovate-6075f87.md b/.changeset/renovate-6075f87.md new file mode 100644 index 0000000000..8997cb080b --- /dev/null +++ b/.changeset/renovate-6075f87.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kubernetes-backend': patch +--- + +Updated dependency `@aws-crypto/sha256-js` to `^5.0.0`. diff --git a/.changeset/renovate-6c0fb81.md b/.changeset/renovate-6c0fb81.md new file mode 100644 index 0000000000..a4677ed174 --- /dev/null +++ b/.changeset/renovate-6c0fb81.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-bitbucket-cloud-common': patch +--- + +Updated dependency `ts-morph` to `^20.0.0`. diff --git a/.changeset/renovate-6e5c790.md b/.changeset/renovate-6e5c790.md new file mode 100644 index 0000000000..e8be20623c --- /dev/null +++ b/.changeset/renovate-6e5c790.md @@ -0,0 +1,9 @@ +--- +'@backstage/integration': patch +'@backstage/plugin-azure-sites-backend': patch +'@backstage/plugin-catalog-backend-module-msgraph': patch +'@backstage/plugin-kubernetes-backend': patch +'@backstage/plugin-techdocs-node': patch +--- + +Updated dependency `@azure/identity` to `^4.0.0`. diff --git a/.changeset/renovate-851933d.md b/.changeset/renovate-851933d.md deleted file mode 100644 index b2de30e2b2..0000000000 --- a/.changeset/renovate-851933d.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Updated dependency `vite-plugin-node-polyfills` to `^0.16.0`. diff --git a/.changeset/renovate-9d2d52e.md b/.changeset/renovate-9d2d52e.md new file mode 100644 index 0000000000..e7a02f8f41 --- /dev/null +++ b/.changeset/renovate-9d2d52e.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Updated dependency `@typescript-eslint/eslint-plugin` to `6.11.0`. diff --git a/.changeset/renovate-a09b29c.md b/.changeset/renovate-a09b29c.md deleted file mode 100644 index 34765f733d..0000000000 --- a/.changeset/renovate-a09b29c.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/config-loader': patch ---- - -Updated dependency `typescript-json-schema` to `^0.62.0`. diff --git a/.changeset/renovate-a6399d6.md b/.changeset/renovate-a6399d6.md new file mode 100644 index 0000000000..d26cd717b3 --- /dev/null +++ b/.changeset/renovate-a6399d6.md @@ -0,0 +1,6 @@ +--- +'@backstage/backend-common': patch +'@backstage/plugin-techdocs-node': patch +--- + +Updated dependency `@google-cloud/storage` to `^7.0.0`. diff --git a/.changeset/renovate-b193efa.md b/.changeset/renovate-b193efa.md new file mode 100644 index 0000000000..dfb2430162 --- /dev/null +++ b/.changeset/renovate-b193efa.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-api-docs': patch +--- + +Updated dependency `@asyncapi/react-component` to `1.1.0`. diff --git a/.changeset/renovate-c0b4ae6.md b/.changeset/renovate-c0b4ae6.md deleted file mode 100644 index d7ab8ff515..0000000000 --- a/.changeset/renovate-c0b4ae6.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-api-docs': patch ---- - -Updated dependency `@graphiql/react` to `^0.20.0`. diff --git a/.changeset/renovate-c7270d5.md b/.changeset/renovate-c7270d5.md new file mode 100644 index 0000000000..e38e9ba816 --- /dev/null +++ b/.changeset/renovate-c7270d5.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-catalog-backend-module-gcp': patch +'@backstage/plugin-kubernetes-backend': patch +--- + +Updated dependency `@google-cloud/container` to `^5.0.0`. diff --git a/.changeset/renovate-dacadfa.md b/.changeset/renovate-dacadfa.md deleted file mode 100644 index a450dc06a9..0000000000 --- a/.changeset/renovate-dacadfa.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-cost-insights': patch ---- - -Updated dependency `@types/pluralize` to `^0.0.32`. diff --git a/.changeset/renovate-dee7ad1.md b/.changeset/renovate-dee7ad1.md new file mode 100644 index 0000000000..8f98f255f6 --- /dev/null +++ b/.changeset/renovate-dee7ad1.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-auth-backend': patch +--- + +Updated dependency `@google-cloud/firestore` to `^7.0.0`. diff --git a/.changeset/renovate-ead3ba6.md b/.changeset/renovate-ead3ba6.md new file mode 100644 index 0000000000..f62d2cf0ed --- /dev/null +++ b/.changeset/renovate-ead3ba6.md @@ -0,0 +1,11 @@ +--- +'@backstage/plugin-home-react': patch +'@backstage/plugin-home': patch +'@backstage/plugin-scaffolder-react': patch +'@backstage/plugin-scaffolder': patch +--- + +Updated dependency `@rjsf/utils` to `5.14.2`. +Updated dependency `@rjsf/core` to `5.14.2`. +Updated dependency `@rjsf/material-ui` to `5.14.2`. +Updated dependency `@rjsf/validator-ajv8` to `5.14.2`. diff --git a/.changeset/renovate-f5b18be.md b/.changeset/renovate-f5b18be.md new file mode 100644 index 0000000000..82bcbd724f --- /dev/null +++ b/.changeset/renovate-f5b18be.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-azure-sites-backend': patch +--- + +Updated dependency `@azure/arm-appservice` to `^14.0.0`. diff --git a/.changeset/rich-pugs-chew.md b/.changeset/rich-pugs-chew.md deleted file mode 100644 index 6c5aa0af62..0000000000 --- a/.changeset/rich-pugs-chew.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -The experimental package detection will now ignore packages that don't make `package.json` available. diff --git a/.changeset/rude-beans-drop.md b/.changeset/rude-beans-drop.md new file mode 100644 index 0000000000..63f10af55d --- /dev/null +++ b/.changeset/rude-beans-drop.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Update `linkify-react` to version `4.1.3` diff --git a/.changeset/rude-penguins-press.md b/.changeset/rude-penguins-press.md deleted file mode 100644 index 967b04bc19..0000000000 --- a/.changeset/rude-penguins-press.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder': patch ---- - -Title and description in RepoUrlPicker are now correctly displayed. diff --git a/.changeset/rude-tomatoes-itch.md b/.changeset/rude-tomatoes-itch.md deleted file mode 100644 index 1071f65756..0000000000 --- a/.changeset/rude-tomatoes-itch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-app-api': patch ---- - -Installed features are now deduplicated both by reference and ID when available. Features passed to `createApp` now override both discovered and loaded features. diff --git a/.changeset/selfish-flies-kneel.md b/.changeset/selfish-flies-kneel.md deleted file mode 100644 index 0f13f11d11..0000000000 --- a/.changeset/selfish-flies-kneel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-app-api': patch ---- - -No longer throw error on invalid input if the child is disabled. diff --git a/.changeset/shaggy-beers-collect.md b/.changeset/shaggy-beers-collect.md deleted file mode 100644 index 471368d6f2..0000000000 --- a/.changeset/shaggy-beers-collect.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/dev-utils': patch -'@backstage/plugin-techdocs': patch ---- - -Added support for React 18. The new `createRoot` API from `react-dom/client` will now be used if present. diff --git a/.changeset/shaggy-buses-beg.md b/.changeset/shaggy-buses-beg.md deleted file mode 100644 index d2c9351b5e..0000000000 --- a/.changeset/shaggy-buses-beg.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@backstage/plugin-catalog-react': minor ---- - -The `UserListPicker` component has undergone improvements to enhance its performance. - -The previous implementation inferred the number of owned and starred entities based on the entities available in the `EntityListContext`. The updated version no longer relies on the `EntityListContext` for inference, allowing for better decoupling. - -The component now loads the entities' count asynchronously, resulting in improved performance and responsiveness. For this purpose, some of the exported filters such as `EntityTagFilter`, `EntityOwnerFilter`, `EntityLifecycleFilter` and `EntityNamespaceFilter` have now the `getCatalogFilters` method implemented. diff --git a/.changeset/sharp-chefs-attend.md b/.changeset/sharp-chefs-attend.md deleted file mode 100644 index 2334344928..0000000000 --- a/.changeset/sharp-chefs-attend.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-test-utils': patch ---- - -Ensure recursive deletion of temporary directories in tests diff --git a/.changeset/sharp-falcons-clean.md b/.changeset/sharp-falcons-clean.md deleted file mode 100644 index bc247be451..0000000000 --- a/.changeset/sharp-falcons-clean.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-app-api': patch ---- - -Register default implementation for the `Translation API` on the new `createApp`. diff --git a/.changeset/shiny-geese-watch.md b/.changeset/shiny-geese-watch.md deleted file mode 100644 index 5394a0776d..0000000000 --- a/.changeset/shiny-geese-watch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-auth-backend-module-microsoft-provider': patch ---- - -Removed `prompt=consent` from start method to fix #20641 diff --git a/.changeset/silent-chairs-smoke.md b/.changeset/silent-chairs-smoke.md deleted file mode 100644 index bfd3a4d7cb..0000000000 --- a/.changeset/silent-chairs-smoke.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-app-api': patch ---- - -Fix for app node output IDs not being serialized correctly. diff --git a/.changeset/silent-pillows-reflect.md b/.changeset/silent-pillows-reflect.md deleted file mode 100644 index fe755056cc..0000000000 --- a/.changeset/silent-pillows-reflect.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -Refactoring the runner to generate minimally informative task log per iteration and properly validate iterated actions. diff --git a/.changeset/silly-numbers-wash.md b/.changeset/silly-numbers-wash.md new file mode 100644 index 0000000000..25df8b12c1 --- /dev/null +++ b/.changeset/silly-numbers-wash.md @@ -0,0 +1,20 @@ +--- +'@backstage/plugin-catalog': patch +--- + +Added pagination support to `CatalogIndexPage` + +`CatalogIndexPage` now offers an optional pagination feature, designed to accommodate adopters managing extensive catalogs. This new capability allows for better handling of large amounts of data. + +To activate the pagination mode, simply update your `App.tsx` as follows: + +```diff + const routes = ( + + ... +- } /> ++ } /> + ... +``` + +In case you have a custom catalog page and you want to enable pagination, you need to pass the `pagination` prop to `EntityListProvider` instead. diff --git a/.changeset/silver-kiwis-float.md b/.changeset/silver-kiwis-float.md deleted file mode 100644 index 6a45dfb1a6..0000000000 --- a/.changeset/silver-kiwis-float.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-plugin-api': minor ---- - -Extensions now return their output from the factory function rather than calling `bind(...)`. diff --git a/.changeset/silver-yaks-bow.md b/.changeset/silver-yaks-bow.md deleted file mode 100644 index bd1aefd376..0000000000 --- a/.changeset/silver-yaks-bow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-import': patch ---- - -Fix missing children key warning on the default catalog import page. diff --git a/.changeset/six-books-arrive.md b/.changeset/six-books-arrive.md deleted file mode 100644 index 785424f635..0000000000 --- a/.changeset/six-books-arrive.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -'@backstage/plugin-techdocs-module-addons-contrib': patch -'@backstage/plugin-microsoft-calendar': patch -'@backstage/plugin-scaffolder-react': patch -'@backstage/plugin-catalog-graph': patch -'@backstage/plugin-cost-insights': patch -'@backstage/plugin-tech-insights': patch -'@backstage/plugin-code-climate': patch -'@backstage/plugin-scaffolder': patch -'@backstage/plugin-gcalendar': patch -'@backstage/plugin-org-react': patch -'@backstage/plugin-sonarqube': patch -'@backstage/plugin-xcmetrics': patch -'@backstage/plugin-api-docs': patch -'@backstage/plugin-playlist': patch -'@backstage/plugin-catalog': patch -'@backstage/plugin-explore': patch -'@backstage/plugin-bazaar': patch -'@backstage/plugin-search': patch -'@backstage/plugin-org': patch ---- - -Internal theme type updates diff --git a/.changeset/sixty-adults-kiss.md b/.changeset/sixty-adults-kiss.md new file mode 100644 index 0000000000..eb73387308 --- /dev/null +++ b/.changeset/sixty-adults-kiss.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-app-api': patch +--- + +Added `createSpecializedApp`, which is a synchronous version of `createApp` where config and features already need to be loaded. diff --git a/.changeset/sixty-houses-agree.md b/.changeset/sixty-houses-agree.md new file mode 100644 index 0000000000..1cdd5e7908 --- /dev/null +++ b/.changeset/sixty-houses-agree.md @@ -0,0 +1,6 @@ +--- +'@backstage/backend-common': minor +'@backstage/integration': minor +--- + +Implemented `readTree` for Gitea provider to support TechDocs functionality diff --git a/.changeset/sixty-tips-argue.md b/.changeset/sixty-tips-argue.md deleted file mode 100644 index 9fc965a281..0000000000 --- a/.changeset/sixty-tips-argue.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-plugin-api': patch ---- - -Improve the extension boundary component and create a default extension suspense component. diff --git a/.changeset/slow-trees-warn.md b/.changeset/slow-trees-warn.md new file mode 100644 index 0000000000..5a05f9a07f --- /dev/null +++ b/.changeset/slow-trees-warn.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog': patch +--- + +Updated alpha plugin to include the `unregisterRedirect` external route. diff --git a/.changeset/small-buckets-roll.md b/.changeset/small-buckets-roll.md deleted file mode 100644 index 5cd9b23678..0000000000 --- a/.changeset/small-buckets-roll.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-home': patch ---- - -Temporarily pin the `react-grid-layout` sub-dependency to version `1.3.4` while the horizontal resizing of the latest version is not fixed. For more details, see [#20712](https://github.com/backstage/backstage/issues/20712). diff --git a/.changeset/smart-dancers-watch.md b/.changeset/smart-dancers-watch.md deleted file mode 100644 index b47a6ae5c2..0000000000 --- a/.changeset/smart-dancers-watch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-plugin-api': minor ---- - -`IconComponent` can now have a `fontSize` of `inherit`, which is useful for in-line icons. diff --git a/.changeset/soft-oranges-act.md b/.changeset/soft-oranges-act.md deleted file mode 100644 index 99ff63395f..0000000000 --- a/.changeset/soft-oranges-act.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-react': patch ---- - -Preserve step's time execution for a non-running task. diff --git a/.changeset/sour-toes-joke.md b/.changeset/sour-toes-joke.md deleted file mode 100644 index 4e380f4ded..0000000000 --- a/.changeset/sour-toes-joke.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -'@backstage/plugin-user-settings-backend': patch -'@backstage/plugin-scaffolder-backend': patch -'@backstage/plugin-periskop-backend': patch -'@backstage/plugin-scaffolder-node': patch -'@backstage/plugin-bazaar-backend': patch -'@backstage/plugin-kafka-backend': patch -'@backstage/plugin-proxy-backend': patch -'@backstage/plugin-sonarqube': patch -'@backstage/plugin-todo': patch ---- - -Switched to using `"exports"` field for `/alpha` subpath export. diff --git a/.changeset/spotty-olives-share.md b/.changeset/spotty-olives-share.md new file mode 100644 index 0000000000..7437b3af00 --- /dev/null +++ b/.changeset/spotty-olives-share.md @@ -0,0 +1,7 @@ +--- +'@techdocs/cli': minor +'@backstage/plugin-techdocs-node': minor +'@backstage/backend-common': patch +--- + +Add command `--runAsDefaultUser` for `@techdocs/cli generate` to bypass running the docker builds as host user for macOS and Linux. diff --git a/.changeset/stale-horses-obey.md b/.changeset/stale-horses-obey.md deleted file mode 100644 index 671844c1b7..0000000000 --- a/.changeset/stale-horses-obey.md +++ /dev/null @@ -1,32 +0,0 @@ ---- -'@backstage/plugin-github-deployments': patch -'@backstage/plugin-kubernetes-cluster': patch -'@backstage/plugin-newrelic-dashboard': patch -'@backstage/plugin-github-actions': patch -'@backstage/plugin-splunk-on-call': patch -'@backstage/plugin-code-coverage': patch -'@backstage/plugin-code-climate': patch -'@backstage/plugin-azure-sites': patch -'@backstage/plugin-cloudbuild': patch -'@backstage/plugin-kubernetes': patch -'@backstage/plugin-lighthouse': patch -'@backstage/plugin-dynatrace': patch -'@backstage/plugin-sonarqube': patch -'@backstage/plugin-airbrake': patch -'@backstage/plugin-circleci': patch -'@backstage/plugin-puppetdb': patch -'@backstage/plugin-techdocs': patch -'@backstage/plugin-bitrise': patch -'@backstage/plugin-jenkins': patch -'@backstage/plugin-rollbar': patch -'@backstage/plugin-allure': patch -'@backstage/plugin-sentry': patch -'@backstage/plugin-fossa': patch -'@backstage/plugin-kafka': patch -'@backstage/plugin-nomad': patch -'@backstage/plugin-vault': patch -'@backstage/plugin-gocd': patch -'@backstage/plugin-adr': patch ---- - -Import `MissingAnnotationEmptyState` from `@backstage/plugin-catalog-react` to remove the cyclical dependency diff --git a/.changeset/stale-rice-count.md b/.changeset/stale-rice-count.md deleted file mode 100644 index 3d2caf168d..0000000000 --- a/.changeset/stale-rice-count.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-plugin-api': patch ---- - -Deprecated several types related to the routing system that are scheduled to be removed, as well as several fields on the route ref types themselves. diff --git a/.changeset/stale-walls-cross.md b/.changeset/stale-walls-cross.md new file mode 100644 index 0000000000..79d682631b --- /dev/null +++ b/.changeset/stale-walls-cross.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-app-api': patch +--- + +Updates to provide `node` to extension factories instead of `id` and `source`. diff --git a/.changeset/strange-gifts-try.md b/.changeset/strange-gifts-try.md deleted file mode 100644 index 7f9aa89ad4..0000000000 --- a/.changeset/strange-gifts-try.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'@backstage/frontend-app-api': patch -'@backstage/plugin-catalog': patch -'@backstage/plugin-catalog-react': patch -'@backstage/plugin-graphiql': patch -'@backstage/plugin-search-react': patch ---- - -Internal updates to match changes in the experimental `@backstage/frontend-plugin-api`. diff --git a/.changeset/strange-queens-deliver.md b/.changeset/strange-queens-deliver.md deleted file mode 100644 index ed1d4d0b5b..0000000000 --- a/.changeset/strange-queens-deliver.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-auth-backend': patch ---- - -Reverted the Microsoft auth provider to the previous implementation. diff --git a/.changeset/strange-taxis-explode.md b/.changeset/strange-taxis-explode.md deleted file mode 100644 index 41bcf1895c..0000000000 --- a/.changeset/strange-taxis-explode.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-kubernetes-backend': patch -'@backstage/plugin-kubernetes-common': patch ---- - -Fixed the lack of `resourcequotas` as part of the Default Objects to fetch from the kubernetes api diff --git a/.changeset/strong-sloths-push.md b/.changeset/strong-sloths-push.md deleted file mode 100644 index 52ae7698a3..0000000000 --- a/.changeset/strong-sloths-push.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': minor ---- - -Allow using `globby`'s negative matching with `copyWithoutTemplating`/`copyWithoutRender`. This allows including an entire subdirectory while excluding a single file so that it will still be templated instead of needing to list every other file and ensure the list is updated when new files are added. diff --git a/.changeset/strong-taxis-wait.md b/.changeset/strong-taxis-wait.md deleted file mode 100644 index 13cfa9a1ba..0000000000 --- a/.changeset/strong-taxis-wait.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-app-api': patch ---- - -Added a workaround for double `default` wrapping when dynamically importing CommonJS modules with default exports. diff --git a/.changeset/sweet-buckets-fry.md b/.changeset/sweet-buckets-fry.md deleted file mode 100644 index 8f17617645..0000000000 --- a/.changeset/sweet-buckets-fry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-react': patch ---- - -The `spec.type` field in entities will now always be rendered as a string. diff --git a/.changeset/sweet-countries-share.md b/.changeset/sweet-countries-share.md deleted file mode 100644 index e1327a74b8..0000000000 --- a/.changeset/sweet-countries-share.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -Add examples for `github:webhook` scaffolder action & improve related tests diff --git a/.changeset/swift-badgers-hide.md b/.changeset/swift-badgers-hide.md deleted file mode 100644 index 217253370e..0000000000 --- a/.changeset/swift-badgers-hide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/frontend-app-api': patch ---- - -Internal refactor to rename the app graph to app tree diff --git a/.changeset/swift-mice-care.md b/.changeset/swift-mice-care.md deleted file mode 100644 index 1d0d7d8703..0000000000 --- a/.changeset/swift-mice-care.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Added `EXPERIMENTAL_VITE` flag for using [vite](https://vitejs.dev) as dev server instead of Webpack diff --git a/.changeset/tall-colts-roll.md b/.changeset/tall-colts-roll.md deleted file mode 100644 index 914a09cdac..0000000000 --- a/.changeset/tall-colts-roll.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': minor ---- - -Allow setting `update: true` in `publish:github:pull-request` scaffolder action diff --git a/.changeset/tame-spies-hunt.md b/.changeset/tame-spies-hunt.md deleted file mode 100644 index 5a45defb7e..0000000000 --- a/.changeset/tame-spies-hunt.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -Add examples for `github:deployKey:create` scaffolder action & improve related tests diff --git a/.changeset/tender-lies-wonder.md b/.changeset/tender-lies-wonder.md deleted file mode 100644 index 43124bb41c..0000000000 --- a/.changeset/tender-lies-wonder.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-auth-backend': minor ---- - -Adds the StaticTokenIssuer and StaticKeyStore, an alternative token issuer that can be used to sign the Authorization header using a predefined public/private key pair. diff --git a/.changeset/tender-maps-type.md b/.changeset/tender-maps-type.md deleted file mode 100644 index 11aa814a17..0000000000 --- a/.changeset/tender-maps-type.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-plugin-api': minor ---- - -Introduced `AnyRouteRefParams` as a replacement for `AnyParams`, which is now deprecated. diff --git a/.changeset/thick-boats-decide.md b/.changeset/thick-boats-decide.md deleted file mode 100644 index e258962ecd..0000000000 --- a/.changeset/thick-boats-decide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Added missing node-gyp dependency to fix Docker image build diff --git a/.changeset/thick-dolphins-boil.md b/.changeset/thick-dolphins-boil.md deleted file mode 100644 index dd562e620c..0000000000 --- a/.changeset/thick-dolphins-boil.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-import': patch ---- - -The `app.title` configuration is now properly required to be a string. diff --git a/.changeset/thick-tigers-call.md b/.changeset/thick-tigers-call.md deleted file mode 100644 index 4a9c66a354..0000000000 --- a/.changeset/thick-tigers-call.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'@backstage/plugin-playlist': minor ---- - -Support being able to define custom composable Playlist index pages - -**BREAKING** The individual `PlaylistPage` route must now be manually hooked up by making the following change to your setup: - -```diff --import { PlaylistIndexPage } from '@backstage/plugin-playlist'; -+import { PlaylistIndexPage, PlaylistPage } from '@backstage/plugin-playlist'; - -// ... - - } /> -+} /> -``` diff --git a/.changeset/thirty-stingrays-grin.md b/.changeset/thirty-stingrays-grin.md deleted file mode 100644 index 6dcb4bbd50..0000000000 --- a/.changeset/thirty-stingrays-grin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-openapi-utils': minor ---- - -Adds a new route, `/openapi.json` to validated routers for displaying their full OpenAPI spec in a standard endpoint. diff --git a/.changeset/three-moles-mix.md b/.changeset/three-moles-mix.md deleted file mode 100644 index d1e48194a1..0000000000 --- a/.changeset/three-moles-mix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search': patch ---- - -Fixed incorrect plugin ID in `/alpha` export. diff --git a/.changeset/tidy-camels-boil.md b/.changeset/tidy-camels-boil.md deleted file mode 100644 index 6e59f96f34..0000000000 --- a/.changeset/tidy-camels-boil.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-app-api': patch ---- - -Add component data `core.type` marker for `AppRouter` and `FlatRoutes`. diff --git a/.changeset/tidy-planets-trade.md b/.changeset/tidy-planets-trade.md deleted file mode 100644 index 49c1643e55..0000000000 --- a/.changeset/tidy-planets-trade.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch -'@backstage/plugin-scaffolder-common': patch -'@backstage/plugin-scaffolder-react': patch ---- - -Make it possible to define control buttons text (Back, Create, Review) per template diff --git a/.changeset/tiny-cobras-look.md b/.changeset/tiny-cobras-look.md new file mode 100644 index 0000000000..1c5acc6c4a --- /dev/null +++ b/.changeset/tiny-cobras-look.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +Expose an `onAuth` handler for `git` actions to provide custom credentials diff --git a/.changeset/tiny-files-judge.md b/.changeset/tiny-files-judge.md deleted file mode 100644 index 781adef3c7..0000000000 --- a/.changeset/tiny-files-judge.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-techdocs': minor ---- - -A new analytics event `not-found` will be published when a user visits a documentation site that does not exist diff --git a/.changeset/tricky-cups-hammer.md b/.changeset/tricky-cups-hammer.md deleted file mode 100644 index 4e1b6fe9ce..0000000000 --- a/.changeset/tricky-cups-hammer.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/core-plugin-api': patch ---- - -Added a new `/alpha` export `convertLegacyRouteRef`, which is a temporary utility to allow existing route refs to be used with the new experimental packages. diff --git a/.changeset/tricky-islands-wonder.md b/.changeset/tricky-islands-wonder.md new file mode 100644 index 0000000000..5b9c37281b --- /dev/null +++ b/.changeset/tricky-islands-wonder.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog': minor +--- + +The `columns` prop can be an array or a function that returns an array in order to override the default columns of the `CatalogIndexPage`. diff --git a/.changeset/tricky-vans-behave.md b/.changeset/tricky-vans-behave.md deleted file mode 100644 index 89592e5e8f..0000000000 --- a/.changeset/tricky-vans-behave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/backend-openapi-utils': patch ---- - -Adds a new function `wrapInOpenApiTestServer` that allows for proxied requests at runtime. This will support the new `yarn backstage-repo-tools schema openapi test` command. diff --git a/.changeset/twelve-donkeys-smash.md b/.changeset/twelve-donkeys-smash.md deleted file mode 100644 index 3cbdea388b..0000000000 --- a/.changeset/twelve-donkeys-smash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-github-actions': patch ---- - -Fixed an issue that was preventing the sorting of workflow runs by their status. diff --git a/.changeset/twenty-beans-laugh.md b/.changeset/twenty-beans-laugh.md new file mode 100644 index 0000000000..5dc537d93b --- /dev/null +++ b/.changeset/twenty-beans-laugh.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-react': patch +--- + +Fixed a issue where `CatalogPage` wasn't using the chosen `initiallySelectedFilter` as intended. diff --git a/.changeset/two-jars-melt.md b/.changeset/two-jars-melt.md deleted file mode 100644 index 2789157065..0000000000 --- a/.changeset/two-jars-melt.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/plugin-techdocs-backend': minor -'@backstage/plugin-techdocs-node': minor ---- - -Expose an extension point to set a custom build strategy. Also move `DocsBuildStrategy` type to `@backstage/plugin-techdocs-node` and deprecate `ShouldBuildParameters` type. diff --git a/.changeset/unlucky-houses-end.md b/.changeset/unlucky-houses-end.md deleted file mode 100644 index 48f5849002..0000000000 --- a/.changeset/unlucky-houses-end.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-backend-module-github': patch ---- - -Import `AnalyzeOptions` and `ScmLocationAnalyzer` types from `@backstage/plugin-catalog-node` diff --git a/.changeset/violet-falcons-leave.md b/.changeset/violet-falcons-leave.md deleted file mode 100644 index 03b91957b1..0000000000 --- a/.changeset/violet-falcons-leave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-react': patch ---- - -Removed unnecessary `@backstage/integration` dependency, replaced by `@backstage/integration-react`. diff --git a/.changeset/violet-lamps-appear.md b/.changeset/violet-lamps-appear.md deleted file mode 100644 index 23536fb728..0000000000 --- a/.changeset/violet-lamps-appear.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'@backstage/plugin-scaffolder': minor -'@backstage/plugin-scaffolder-react': minor ---- - -Release design improvements for the `Scaffolder` plugin and support v5 of `@rjsf/*` libraries. - -This change should be non-breaking. If you're seeing typescript issues after migrating please [open an issue](https://github.com/backstage/backstage/issues/new/choose) - -The `next` versions like `createNextFieldExtension` and `NextScaffolderPage` have been promoted to the public interface under `createScaffolderFieldExtension` and `ScaffolderPage`, so any older imports which are no longer found will need updating from `@backstage/plugin-scaffolder/alpha` or `@backstage/plugin-scaffolder-react/alpha` will need to be imported from `@backstage/plugin-scaffolder` and `@backstage/plugin-scaffolder-react` respectively. - -The legacy versions are now available in `/alpha` under `createLegacyFieldExtension` and `LegacyScaffolderPage` if you're running into issues, but be aware that these will be removed in a next mainline release. diff --git a/.changeset/violet-zebras-thank.md b/.changeset/violet-zebras-thank.md new file mode 100644 index 0000000000..eda6137dc1 --- /dev/null +++ b/.changeset/violet-zebras-thank.md @@ -0,0 +1,5 @@ +--- +'@backstage/theme': minor +--- + +Added a global `OverrideComponentNameToClassKeys` for other plugins and packages to populate using module augmentation. This will in turn will provide component style override types for `createUnifiedTheme`. diff --git a/.changeset/warm-plums-beg.md b/.changeset/warm-plums-beg.md new file mode 100644 index 0000000000..6d09aabd2d --- /dev/null +++ b/.changeset/warm-plums-beg.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-kubernetes-common': patch +--- + +Remove unused dependency diff --git a/.changeset/weak-zebras-cover.md b/.changeset/weak-zebras-cover.md deleted file mode 100644 index f3290683e2..0000000000 --- a/.changeset/weak-zebras-cover.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-react': patch ---- - -Minor refactor of search bar analytics capture diff --git a/.changeset/wet-cows-brake.md b/.changeset/wet-cows-brake.md deleted file mode 100644 index 9e694d8452..0000000000 --- a/.changeset/wet-cows-brake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-react': patch ---- - -The filter options passed to `SearchResultGroupLayout` are now always explicitly rendered as strings by default. diff --git a/.changeset/wet-shrimps-approve.md b/.changeset/wet-shrimps-approve.md deleted file mode 100644 index b75a28f355..0000000000 --- a/.changeset/wet-shrimps-approve.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-catalog-react': patch ---- - -Export `MissingAnnotationEmptyState` from `@backstage/plugin-catalog-react` diff --git a/.changeset/wicked-elephants-think.md b/.changeset/wicked-elephants-think.md new file mode 100644 index 0000000000..73fc9621bf --- /dev/null +++ b/.changeset/wicked-elephants-think.md @@ -0,0 +1,5 @@ +--- +'@backstage/frontend-plugin-api': minor +--- + +The extension `factory` function now longer receives `id` or `source`, but instead now provides the extension's `AppNode` as `node`. The `ExtensionBoundary` component has also been updated to receive a `node` prop rather than `id` and `source`. diff --git a/.changeset/wicked-ties-knock.md b/.changeset/wicked-ties-knock.md deleted file mode 100644 index 582cb905d0..0000000000 --- a/.changeset/wicked-ties-knock.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend-module-gitlab': patch ---- - -Add examples for `gitlab:projectAccessToken:create` scaffolder action & improve related tests diff --git a/.changeset/wild-cows-watch.md b/.changeset/wild-cows-watch.md deleted file mode 100644 index 770fb1a692..0000000000 --- a/.changeset/wild-cows-watch.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'@backstage/plugin-catalog': minor ---- - -Added the `DefaultEntityPresentationApi`, which is an implementation of the -`EntityPresentationApi` that `@backstage/plugin-catalog-react` exposes through -its `entityPresentationApiRef`. This implementation is also by default made -available automatically by the catalog plugin, unless you replace it with a -custom one. It batch fetches and caches data from the catalog as needed for -display, and is customizable by adopters to add their own rendering functions. diff --git a/.changeset/wild-geese-occur.md b/.changeset/wild-geese-occur.md deleted file mode 100644 index b97620e7f5..0000000000 --- a/.changeset/wild-geese-occur.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search': patch ---- - -Minor internal code cleanup. diff --git a/.changeset/wise-waves-approve.md b/.changeset/wise-waves-approve.md deleted file mode 100644 index f543f8918c..0000000000 --- a/.changeset/wise-waves-approve.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/cli': patch ---- - -Ignore `stdin` when spawning backend child process for the `start` command. Fixing an issue where backend startup would hang. diff --git a/.changeset/wise-weeks-design.md b/.changeset/wise-weeks-design.md deleted file mode 100644 index 657a8e23d5..0000000000 --- a/.changeset/wise-weeks-design.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-scaffolder-backend': patch ---- - -Add examples for `publish:github:pull-request` scaffolder action & improve related tests diff --git a/.changeset/young-days-talk.md b/.changeset/young-days-talk.md deleted file mode 100644 index b7420c7894..0000000000 --- a/.changeset/young-days-talk.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-search-react': patch ---- - -Use default extensions boundary and suspense on the alpha declarative `createSearchResultListItem` extension factory. diff --git a/.eslintrc.js b/.eslintrc.js index 0d937fc6b4..2df965ab73 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -45,13 +45,12 @@ module.exports = { "CallExpression[arguments.length=0] > MemberExpression[property.name='toUpperCase']", }, ], - 'testing-library/await-async-query': 'error', + 'testing-library/await-async-queries': 'error', 'testing-library/await-async-utils': 'error', - 'testing-library/no-await-sync-query': 'error', - 'testing-library/prefer-wait-for': 'error', + 'testing-library/no-await-sync-queries': 'error', 'testing-library/no-dom-import': 'error', 'testing-library/no-wait-for-side-effects': 'error', - 'testing-library/no-wait-for-empty-callback': 'error', + 'testing-library/await-async-events': 'error', 'no-restricted-globals': [ 'error', [ diff --git a/.github/labeler.yml b/.github/labeler.yml index dc048b1744..add66d7b28 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -2,7 +2,7 @@ area:catalog: - plugins/catalog/**/* - plugins/catalog-*/**/* - packages/catalog-*/**/* -scaffolder: +area:scaffolder: - plugins/scaffolder/**/* - plugins/scaffolder-*/**/* search: diff --git a/.github/uffizzi/uffizzi.production.app-config.yaml b/.github/uffizzi/uffizzi.production.app-config.yaml index fb6638295e..53944256e1 100644 --- a/.github/uffizzi/uffizzi.production.app-config.yaml +++ b/.github/uffizzi/uffizzi.production.app-config.yaml @@ -38,6 +38,14 @@ auth: url: https://demo.backstage.io/api/auth catalog: + rules: + - allow: + - Component + - API + - Resource + - System + - Domain + - Location locations: - type: url target: https://github.com/backstage/backstage/blob/${REF_NAME}/packages/catalog-model/examples/all.yaml diff --git a/.github/vale/Vocab/Backstage/accept.txt b/.github/vale/Vocab/Backstage/accept.txt index 73f6d56bb4..078a0617c9 100644 --- a/.github/vale/Vocab/Backstage/accept.txt +++ b/.github/vale/Vocab/Backstage/accept.txt @@ -462,3 +462,4 @@ zod Zolotusky zoomable zsh +scrollable \ No newline at end of file diff --git a/.github/workflows/automate_area-labels.yml b/.github/workflows/automate_area-labels.yml index 1ba3b1d6c3..5d12e4ca89 100644 --- a/.github/workflows/automate_area-labels.yml +++ b/.github/workflows/automate_area-labels.yml @@ -13,7 +13,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit diff --git a/.github/workflows/automate_changeset_feedback.yml b/.github/workflows/automate_changeset_feedback.yml index 1768cb670e..bf58b4b49d 100644 --- a/.github/workflows/automate_changeset_feedback.yml +++ b/.github/workflows/automate_changeset_feedback.yml @@ -23,7 +23,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit diff --git a/.github/workflows/automate_merge_message.yml b/.github/workflows/automate_merge_message.yml index d967e4404c..71e3450235 100644 --- a/.github/workflows/automate_merge_message.yml +++ b/.github/workflows/automate_merge_message.yml @@ -24,7 +24,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit @@ -44,7 +44,7 @@ jobs: node generate.js ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }} > message.txt - name: Post Message - uses: actions/github-script@v6.4.1 + uses: actions/github-script@v7.0.1 env: ISSUE_NUMBER: ${{ github.event.pull_request.number }} with: diff --git a/.github/workflows/automate_stale.yml b/.github/workflows/automate_stale.yml index b888471254..6d6fd65c0d 100644 --- a/.github/workflows/automate_stale.yml +++ b/.github/workflows/automate_stale.yml @@ -15,7 +15,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit diff --git a/.github/workflows/ci-noop.yml b/.github/workflows/ci-noop.yml index 648386873b..6918db4be5 100644 --- a/.github/workflows/ci-noop.yml +++ b/.github/workflows/ci-noop.yml @@ -39,7 +39,7 @@ jobs: name: Test ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 80ea6f8d1c..33d89b9c96 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,14 +27,14 @@ jobs: name: Install ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit - uses: actions/checkout@v4.1.1 - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3.8.2 + uses: actions/setup-node@v4.0.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth @@ -63,14 +63,14 @@ jobs: name: Verify ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit - uses: actions/checkout@v4.1.1 - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3.8.2 + uses: actions/setup-node@v4.0.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth @@ -201,7 +201,7 @@ jobs: run: git fetch origin master - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3.8.2 + uses: actions/setup-node@v4.0.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth diff --git a/.github/workflows/cron.yml b/.github/workflows/cron.yml index f1a1dbd0b0..4a9e4522f4 100644 --- a/.github/workflows/cron.yml +++ b/.github/workflows/cron.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit diff --git a/.github/workflows/deploy_docker-image.yml b/.github/workflows/deploy_docker-image.yml index 2af1143822..7fd15426e5 100644 --- a/.github/workflows/deploy_docker-image.yml +++ b/.github/workflows/deploy_docker-image.yml @@ -1,5 +1,7 @@ name: Build and push Docker image on: + workflow_dispatch: + repository_dispatch: types: [release-published] @@ -14,7 +16,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit @@ -25,7 +27,7 @@ jobs: ref: v${{ github.event.client_payload.version }} - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3.8.2 + uses: actions/setup-node@v4.0.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth @@ -45,21 +47,21 @@ jobs: working-directory: ./example-app - name: Login to GitHub Container Registry - uses: docker/login-action@v2.2.0 + uses: docker/login-action@v3.0.0 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v2.10.0 + uses: docker/setup-buildx-action@v3.0.0 - name: Build and push - uses: docker/build-push-action@v4.2.1 + uses: docker/build-push-action@v5.1.0 with: context: './example-app' file: ./example-app/packages/backend/Dockerfile - push: true + push: ${{ github.event_name == "repository_dispatch" && github.event.action == "release-published" }} platforms: linux/amd64,linux/arm64 tags: | ghcr.io/${{ github.repository_owner }}/backstage:latest diff --git a/.github/workflows/deploy_microsite.yml b/.github/workflows/deploy_microsite.yml index a03f80a7e2..d8e5789a09 100644 --- a/.github/workflows/deploy_microsite.yml +++ b/.github/workflows/deploy_microsite.yml @@ -24,14 +24,14 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit - uses: actions/checkout@v4.1.1 - name: use node.js 18.x - uses: actions/setup-node@v3.8.2 + uses: actions/setup-node@v4.0.0 with: node-version: 18.x registry-url: https://registry.npmjs.org/ # Needed for auth diff --git a/.github/workflows/deploy_nightly.yml b/.github/workflows/deploy_nightly.yml index 30176caa6b..0fe84b4329 100644 --- a/.github/workflows/deploy_nightly.yml +++ b/.github/workflows/deploy_nightly.yml @@ -15,14 +15,14 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: use node.js 18.x - uses: actions/setup-node@1a4442cacd436585916779262731d5b162bc6ec7 # v3.8.2 + uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4.0.0 with: node-version: 18.x registry-url: https://registry.npmjs.org/ # Needed for auth diff --git a/.github/workflows/deploy_packages.yml b/.github/workflows/deploy_packages.yml index b4487fe8e3..72124aa363 100644 --- a/.github/workflows/deploy_packages.yml +++ b/.github/workflows/deploy_packages.yml @@ -63,7 +63,7 @@ jobs: - uses: actions/checkout@v4.1.1 - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3.8.2 + uses: actions/setup-node@v4.0.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth @@ -138,14 +138,14 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit - uses: actions/checkout@v4.1.1 - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3.8.2 + uses: actions/setup-node@v4.0.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth @@ -171,7 +171,7 @@ jobs: if [ -f ".changeset/pre.json" ]; then yarn workspaces foreach -v --no-private npm publish --access public --tolerate-republish --tag next else - yarn workspaces foreach -p -j 10 -v --no-private npm publish --access public --tolerate-republish + yarn workspaces foreach -v --no-private npm publish --access public --tolerate-republish fi env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.github/workflows/issue.yaml b/.github/workflows/issue.yaml index 8ef339efc7..c81447e9c0 100644 --- a/.github/workflows/issue.yaml +++ b/.github/workflows/issue.yaml @@ -10,7 +10,7 @@ jobs: if: github.repository == 'backstage/backstage' steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit diff --git a/.github/workflows/pr-review-comment-trigger.yaml b/.github/workflows/pr-review-comment-trigger.yaml index 60129eee82..bfd1ffef3d 100644 --- a/.github/workflows/pr-review-comment-trigger.yaml +++ b/.github/workflows/pr-review-comment-trigger.yaml @@ -20,7 +20,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit diff --git a/.github/workflows/pr-review-comment.yaml b/.github/workflows/pr-review-comment.yaml index d85bb26f60..7d9869d378 100644 --- a/.github/workflows/pr-review-comment.yaml +++ b/.github/workflows/pr-review-comment.yaml @@ -17,13 +17,13 @@ jobs: steps: # Inspired by https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#using-data-from-the-triggering-workflow - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit - name: Read PR Number id: pr-number - uses: actions/github-script@v6.4.1 + uses: actions/github-script@v7.0.1 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index cfa0738332..6c2ffcfe77 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -18,7 +18,7 @@ jobs: if: github.repository == 'backstage/backstage' && ( github.event.pull_request || github.event.issue.pull_request ) steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 74ed8fe49f..72bc1bff68 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -29,7 +29,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit @@ -66,6 +66,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: 'Upload to code-scanning' - uses: github/codeql-action/upload-sarif@74483a38d39275f33fcff5f35b679b5ca4a26a99 # v2.22.5 + uses: github/codeql-action/upload-sarif@407ffafae6a767df3e0230c3df91b6443ae8df75 # v2.22.8 with: sarif_file: results.sarif diff --git a/.github/workflows/sync_code-formatting.yml b/.github/workflows/sync_code-formatting.yml index d29fd97dc4..5296dbc4c3 100644 --- a/.github/workflows/sync_code-formatting.yml +++ b/.github/workflows/sync_code-formatting.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit @@ -20,7 +20,7 @@ jobs: fetch-depth: 0 - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3.8.2 + uses: actions/setup-node@v4.0.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth diff --git a/.github/workflows/sync_dependabot-changesets.yml b/.github/workflows/sync_dependabot-changesets.yml index 5450ffba0b..f61d8709a5 100644 --- a/.github/workflows/sync_dependabot-changesets.yml +++ b/.github/workflows/sync_dependabot-changesets.yml @@ -11,7 +11,7 @@ jobs: if: github.actor == 'dependabot[bot]' && github.repository == 'backstage/backstage' steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit @@ -26,7 +26,7 @@ jobs: git config --global user.email noreply@backstage.io git config --global user.name 'Github changeset workflow' - name: Generate changeset - uses: actions/github-script@v6.4.1 + uses: actions/github-script@v7.0.1 with: script: | const { promises: fs } = require('fs'); diff --git a/.github/workflows/sync_release-manifest.yml b/.github/workflows/sync_release-manifest.yml index 79848ac3d3..c6547e0f61 100644 --- a/.github/workflows/sync_release-manifest.yml +++ b/.github/workflows/sync_release-manifest.yml @@ -8,12 +8,12 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit # Setup node & install deps before checkout, keeping install quick - - uses: actions/setup-node@v3.8.2 + - uses: actions/setup-node@v4.0.0 with: node-version: 18.x - name: Install dependencies @@ -53,7 +53,7 @@ jobs: git push - name: Dispatch update-helper update - uses: actions/github-script@v6.4.1 + uses: actions/github-script@v7.0.1 with: github-token: ${{ secrets.GH_SERVICE_ACCOUNT_TOKEN }} # TODO(Rugvip): Remove the create-app dispatch once we've been on the release version for a while diff --git a/.github/workflows/sync_renovate-changesets.yml b/.github/workflows/sync_renovate-changesets.yml index f116a3b609..1e93a12f85 100644 --- a/.github/workflows/sync_renovate-changesets.yml +++ b/.github/workflows/sync_renovate-changesets.yml @@ -11,7 +11,7 @@ jobs: if: github.actor == 'renovate[bot]' && github.repository == 'backstage/backstage' steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit @@ -26,7 +26,7 @@ jobs: git config --global user.email noreply@backstage.io git config --global user.name 'Github changeset workflow' - name: Generate changeset - uses: actions/github-script@v6.4.1 + uses: actions/github-script@v7.0.1 with: script: | const { promises: fs } = require("fs"); diff --git a/.github/workflows/sync_snyk-github-issues.yml b/.github/workflows/sync_snyk-github-issues.yml index 4ace1cb0ea..40253188f6 100644 --- a/.github/workflows/sync_snyk-github-issues.yml +++ b/.github/workflows/sync_snyk-github-issues.yml @@ -12,14 +12,14 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit - uses: actions/checkout@v4.1.1 - name: use node.js 18.x - uses: actions/setup-node@v3.8.2 + uses: actions/setup-node@v4.0.0 with: node-version: 18.x registry-url: https://registry.npmjs.org/ # Needed for auth diff --git a/.github/workflows/sync_snyk-monitor.yml b/.github/workflows/sync_snyk-monitor.yml index 20639b24bf..7b2717d34e 100644 --- a/.github/workflows/sync_snyk-monitor.yml +++ b/.github/workflows/sync_snyk-monitor.yml @@ -25,7 +25,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit @@ -58,6 +58,6 @@ jobs: SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }} NODE_OPTIONS: --max-old-space-size=7168 - name: Upload Snyk report - uses: github/codeql-action/upload-sarif@v2.22.5 + uses: github/codeql-action/upload-sarif@v2.22.8 with: sarif_file: snyk.sarif diff --git a/.github/workflows/sync_version-packages.yml b/.github/workflows/sync_version-packages.yml index 6529017198..fc1d7a68f1 100644 --- a/.github/workflows/sync_version-packages.yml +++ b/.github/workflows/sync_version-packages.yml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit diff --git a/.github/workflows/uffizzi-build.yml b/.github/workflows/uffizzi-build.yml index 30f138d9b6..6bc36c796a 100644 --- a/.github/workflows/uffizzi-build.yml +++ b/.github/workflows/uffizzi-build.yml @@ -3,9 +3,14 @@ on: pull_request: types: [opened, synchronize, reopened, closed] paths-ignore: - - 'microsite/**' - - 'storybook/**' + - '.changeset/**' - 'contrib/**' + - 'docs/**' + - 'microsite/**' + - 'scripts/**' + - 'storybook/**' + - '**/*.test.*' + - '**/package.json' - '*.md' jobs: @@ -20,7 +25,7 @@ jobs: tags: ${{ steps.meta.outputs.tags }} steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit @@ -28,7 +33,7 @@ jobs: uses: actions/checkout@v4.1.1 - name: setup-node - uses: actions/setup-node@v3.8.2 + uses: actions/setup-node@v4.0.0 with: node-version: 18.x registry-url: https://registry.npmjs.org/ @@ -42,16 +47,12 @@ jobs: run: | cp -f ./.github/uffizzi/uffizzi.production.app-config.yaml ./app-config.yaml - - name: typescript build - run: | - yarn tsc - - name: backstage build run: | yarn workspace example-backend build - name: Set up Docker Buildx - uses: docker/setup-buildx-action@885d1462b80bc1c1c7f0b00334ad271f09369c55 # v2.10.0 + uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0 - name: Generate UUID image name id: uuid @@ -59,13 +60,13 @@ jobs: - name: Docker metadata id: meta - uses: docker/metadata-action@818d4b7b91585d195f67373fd9cb0332e31a7175 # v4.6.0 + uses: docker/metadata-action@96383f45573cb7f253c731d3b3ab81c87ef81934 # v5.0.0 with: images: registry.uffizzi.com/${{ env.UUID_TAG_APP }} tags: type=raw,value=60d - name: Build Image - uses: docker/build-push-action@0a97817b6ade9f46837855d676c4cca3a2471fc9 # v4.2.1 + uses: docker/build-push-action@4a13e500e55cf31b7a5d59a38ab2040ab0f42f56 # v5.1.0 with: context: . file: packages/backend/Dockerfile @@ -82,7 +83,7 @@ jobs: - build-backstage steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit @@ -114,7 +115,7 @@ jobs: if: ${{ github.event.action == 'closed' }} steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit diff --git a/.github/workflows/uffizzi-preview.yaml b/.github/workflows/uffizzi-preview.yaml index 1acbed2fa0..a9cce41fce 100644 --- a/.github/workflows/uffizzi-preview.yaml +++ b/.github/workflows/uffizzi-preview.yaml @@ -19,13 +19,13 @@ jobs: action: ${{ env.ACTION }} steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit - name: 'Download artifacts' # Fetch output (zip archive) from the workflow run that triggered this workflow. - uses: actions/github-script@v6.4.1 + uses: actions/github-script@v7.0.1 with: script: | let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({ @@ -104,7 +104,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 # Identify comment to be updated - name: Find comment for Ephemeral Environment @@ -119,7 +119,7 @@ jobs: # Create/Update comment with action deployment status - name: Create or Update Comment with Deployment Notification id: notification - uses: peter-evans/create-or-update-comment@v2 + uses: peter-evans/create-or-update-comment@v3 with: comment-id: ${{ steps.find-comment.outputs.comment-id }} issue-number: ${{ needs.cache-manifests-file.outputs.pr-number }} @@ -168,7 +168,7 @@ jobs: echo "Access the \`backstage\` endpoint at [\`${BACKSTAGE_HOST}\`](http://${BACKSTAGE_HOST})" >> $GITHUB_STEP_SUMMARY - name: Create or Update Comment with Deployment URL - uses: peter-evans/create-or-update-comment@v2 + uses: peter-evans/create-or-update-comment@v3 with: comment-id: ${{ steps.notification.outputs.comment-id }} issue-number: ${{ github.event.pull_request.number }} @@ -212,7 +212,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Delete Virtual Cluster uses: UffizziCloud/cluster-action@main @@ -232,7 +232,7 @@ jobs: direction: last - name: Update Comment with Deletion - uses: peter-evans/create-or-update-comment@v2 + uses: peter-evans/create-or-update-comment@v3 with: comment-id: ${{ steps.find-comment.outputs.comment-id }} issue-number: ${{ needs.cache-manifests-file.outputs.pr-number }} diff --git a/.github/workflows/verify_accessibility-noop.yml b/.github/workflows/verify_accessibility-noop.yml index ab438681bb..79c9962fce 100644 --- a/.github/workflows/verify_accessibility-noop.yml +++ b/.github/workflows/verify_accessibility-noop.yml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit diff --git a/.github/workflows/verify_accessibility.yml b/.github/workflows/verify_accessibility.yml index f1d803e899..3a5582792c 100644 --- a/.github/workflows/verify_accessibility.yml +++ b/.github/workflows/verify_accessibility.yml @@ -20,13 +20,13 @@ jobs: runs-on: ubuntu-latest steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit - uses: actions/checkout@v4.1.1 - name: Use Node.js 18.x - uses: actions/setup-node@v3.8.2 + uses: actions/setup-node@v4.0.0 with: node-version: 18.x - name: yarn install diff --git a/.github/workflows/verify_codeql.yml b/.github/workflows/verify_codeql.yml index e6c78cdb33..c23e45997c 100644 --- a/.github/workflows/verify_codeql.yml +++ b/.github/workflows/verify_codeql.yml @@ -42,7 +42,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit @@ -55,7 +55,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v2.22.5 + uses: github/codeql-action/init@v2.22.8 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -66,7 +66,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v2.22.5 + uses: github/codeql-action/autobuild@v2.22.8 # ℹ️ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl @@ -80,4 +80,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2.22.5 + uses: github/codeql-action/analyze@v2.22.8 diff --git a/.github/workflows/verify_docs-quality.yml b/.github/workflows/verify_docs-quality.yml index 8e11a53fb7..f87c8c2d38 100644 --- a/.github/workflows/verify_docs-quality.yml +++ b/.github/workflows/verify_docs-quality.yml @@ -12,7 +12,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit diff --git a/.github/workflows/verify_e2e-kubernetes-noop.yml b/.github/workflows/verify_e2e-kubernetes-noop.yml index 72b1c57f19..7606f78f07 100644 --- a/.github/workflows/verify_e2e-kubernetes-noop.yml +++ b/.github/workflows/verify_e2e-kubernetes-noop.yml @@ -23,7 +23,7 @@ jobs: name: Kubernetes ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit diff --git a/.github/workflows/verify_e2e-kubernetes.yml b/.github/workflows/verify_e2e-kubernetes.yml index 13cd6097b3..7e4862001e 100644 --- a/.github/workflows/verify_e2e-kubernetes.yml +++ b/.github/workflows/verify_e2e-kubernetes.yml @@ -22,14 +22,14 @@ jobs: name: Kubernetes ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit - uses: actions/checkout@v4.1.1 - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3.8.2 + uses: actions/setup-node@v4.0.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth diff --git a/.github/workflows/verify_e2e-linux-noop.yml b/.github/workflows/verify_e2e-linux-noop.yml index b451c5d75e..c1ac6ecf89 100644 --- a/.github/workflows/verify_e2e-linux-noop.yml +++ b/.github/workflows/verify_e2e-linux-noop.yml @@ -28,7 +28,7 @@ jobs: name: E2E Linux ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit diff --git a/.github/workflows/verify_e2e-linux.yml b/.github/workflows/verify_e2e-linux.yml index ba9ba365ab..89da89889f 100644 --- a/.github/workflows/verify_e2e-linux.yml +++ b/.github/workflows/verify_e2e-linux.yml @@ -40,7 +40,7 @@ jobs: name: E2E Linux ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit @@ -52,7 +52,7 @@ jobs: git config --global user.name 'GitHub e2e user' - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3.8.2 + uses: actions/setup-node@v4.0.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth diff --git a/.github/workflows/verify_e2e-techdocs.yml b/.github/workflows/verify_e2e-techdocs.yml index 3b7b42e905..46070cf248 100644 --- a/.github/workflows/verify_e2e-techdocs.yml +++ b/.github/workflows/verify_e2e-techdocs.yml @@ -30,7 +30,7 @@ jobs: name: Techdocs steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit diff --git a/.github/workflows/verify_e2e-windows-noop.yml b/.github/workflows/verify_e2e-windows-noop.yml index 329197ca62..e24f7820fe 100644 --- a/.github/workflows/verify_e2e-windows-noop.yml +++ b/.github/workflows/verify_e2e-windows-noop.yml @@ -16,7 +16,7 @@ permissions: jobs: noop: - runs-on: windows-2019 + runs-on: windows-2022 strategy: matrix: @@ -25,7 +25,7 @@ jobs: name: E2E Windows ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit diff --git a/.github/workflows/verify_e2e-windows.yml b/.github/workflows/verify_e2e-windows.yml index 55be3921e5..c0553fce3f 100644 --- a/.github/workflows/verify_e2e-windows.yml +++ b/.github/workflows/verify_e2e-windows.yml @@ -31,7 +31,7 @@ jobs: name: E2E Windows ${{ matrix.node-version }} steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit @@ -50,7 +50,7 @@ jobs: git config --global user.name 'GitHub e2e user' - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3.8.2 + uses: actions/setup-node@v4.0.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth diff --git a/.github/workflows/verify_fossa.yml b/.github/workflows/verify_fossa.yml index 85dbc46afa..e91a04d6ed 100644 --- a/.github/workflows/verify_fossa.yml +++ b/.github/workflows/verify_fossa.yml @@ -14,7 +14,7 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit diff --git a/.github/workflows/verify_microsite-noop.yml b/.github/workflows/verify_microsite-noop.yml index 020ecbcfd5..ac0e397127 100644 --- a/.github/workflows/verify_microsite-noop.yml +++ b/.github/workflows/verify_microsite-noop.yml @@ -5,7 +5,6 @@ name: Microsite Void on: pull_request: paths-ignore: - - '.github/workflows/verify_microsite-next.yml' - '.github/workflows/verify_microsite.yml' - 'microsite/**' - 'mkdocs.yml' @@ -21,7 +20,7 @@ jobs: name: Microsite steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit diff --git a/.github/workflows/verify_microsite.yml b/.github/workflows/verify_microsite.yml index 96f811338c..aef2bc333a 100644 --- a/.github/workflows/verify_microsite.yml +++ b/.github/workflows/verify_microsite.yml @@ -3,7 +3,6 @@ on: # NOTE: If you change these you must update verify_microsite-noop.yml as well pull_request: paths: - - '.github/workflows/verify_microsite-next.yml' - '.github/workflows/verify_microsite.yml' - 'microsite/**' - 'mkdocs.yml' @@ -24,14 +23,14 @@ jobs: name: Microsite steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit - uses: actions/checkout@v4.1.1 - name: use node.js 18.x - uses: actions/setup-node@v3.8.2 + uses: actions/setup-node@v4.0.0 with: node-version: 18.x diff --git a/.github/workflows/verify_storybook-noop.yml b/.github/workflows/verify_storybook-noop.yml index b60aa18362..3c92f0eaa2 100644 --- a/.github/workflows/verify_storybook-noop.yml +++ b/.github/workflows/verify_storybook-noop.yml @@ -28,7 +28,7 @@ jobs: name: Storybook steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit diff --git a/.github/workflows/verify_storybook.yml b/.github/workflows/verify_storybook.yml index 3d5a62cbbd..4bb322c8b5 100644 --- a/.github/workflows/verify_storybook.yml +++ b/.github/workflows/verify_storybook.yml @@ -28,7 +28,7 @@ jobs: name: Storybook steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit @@ -37,7 +37,7 @@ jobs: fetch-depth: 0 # Required to retrieve git history - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3.8.2 + uses: actions/setup-node@v4.0.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth @@ -51,7 +51,7 @@ jobs: - run: yarn build-storybook - - uses: chromaui/action@b52e14dd333579901e7099e0094b652e8284dea9 # v1 + - uses: chromaui/action@010142709398e03cee64f3351ed7503618093d9f # v1 with: token: ${{ secrets.GITHUB_TOKEN }} # projectToken intentionally shared to allow collaborators to run Chromatic on forks diff --git a/.github/workflows/verify_windows.yml b/.github/workflows/verify_windows.yml index feed9209ee..9834435504 100644 --- a/.github/workflows/verify_windows.yml +++ b/.github/workflows/verify_windows.yml @@ -29,14 +29,14 @@ jobs: steps: - name: Harden Runner - uses: step-security/harden-runner@1b05615854632b887b69ae1be8cbefe72d3ae423 # v2.6.0 + uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1 with: egress-policy: audit - uses: actions/checkout@v4.1.1 - name: use node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3.8.2 + uses: actions/setup-node@v4.0.0 with: node-version: ${{ matrix.node-version }} registry-url: https://registry.npmjs.org/ # Needed for auth diff --git a/ADOPTERS.md b/ADOPTERS.md index eaec1cc2d1..681285dd78 100644 --- a/ADOPTERS.md +++ b/ADOPTERS.md @@ -261,3 +261,4 @@ _You can do this by using the [Adopter form](https://info.backstage.spotify.com/ | [AppsFlyer](https://www.appsflyer.com/) | [Shahar Shmaram](https://github.com/shmaram) | Internal Developer Portal, a catalog of all company resources, custom providers and processors, scaffolder for generating new resources. | [Gynzy](https://gynzy.com) | [Stef Louwers](https://github.com/fhp) | We are building an internal developer portal to get an overview of all our software components. | | [Cielo](https://www.cielo.com.br) | [@Alex Silva](https://github.com/narokwq) | We are using as our Internal Developer Portal, it provides developers with the resources, information, and tools they need to build high-quality applications and adhere to organizational standards and security practices. | +| [Giant Swarm](https://giantswarm.io) | [Lucas Weatherhog](https://github.com/weatherhog) | At Giant Swarm we are using Backstage as our internal developer portal. Heavily using the service catalog and the TechDocs plugin. Further looking into adopting functionalities of our Web UI into Backstage to have a single pane of glass for our core business, managing all our components, and helping developers to be more productive. | diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 7597dd437c..464519e792 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,3 +1,3 @@ # Community Code of Conduct -Backstage follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md). +Backstage follows the [CNCF Code of Conduct](https://github.com/cncf/foundation/blob/main/code-of-conduct.md). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6c645ab524..07c2a3d96f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -12,6 +12,21 @@ You can find out more about the types of contributions over at [getting involved If you need help, just jump into our [Discord chatroom](https://discord.gg/backstage-687207715902193673). +## Table of Contents + +- [Code of Conduct](#code-of-conduct) +- [Security Issues?](#security-issues) +- [Accessibility](#accessibility) +- [Get Started!](#get-started) +- [Coding Guidelines](#coding-guidelines) +- [Package Scripts](#package-scripts) +- [Local configuration](#local-configuration) +- [Creating Changesets](#creating-changesets) +- [Developer Certificate of Origin](#developer-certificate-of-origin) +- [API Reports](#api-reports) +- [Submitting a Pull Request](#submitting-a-pull-request) +- [Review Process](#review-process) + ## Code of Conduct This project adheres to the [CNCF Code of Conduct][code-of-conduct]. By participating, you are expected to honor this code. @@ -98,7 +113,7 @@ If you're contributing to the backend or CLI tooling, be mindful of cross-platfo Also be sure to skim through our [ADRs](docs/architecture-decisions) to see if they cover what you're working on. In particular [ADR006: Avoid React.FC and React.SFC](docs/architecture-decisions/adr006-avoid-react-fc.md) is one to look out for. -If there are any updates in `markdown` file please make sure to run `yarn run lint:docs`. Though it is checked on `lint-staged`. It is required to install [vale](https://docs.errata.ai/vale/install) separately and make sure it is accessed by global command. +If there are any updates in `markdown` file please make sure to run `yarn run lint:docs`. Though it is checked on `lint-staged`. It is required to install [vale](https://vale.sh/docs/vale-cli/installation/) separately and make sure it is accessed by global command. ### Editor @@ -273,6 +288,13 @@ Awesome commit message Signed-off-by: Jane Smith ``` +> Note: this assumes you have setup your git name and email, if you have not you can use these commands to set that up: +> +> ```shell +> git config --global user.name "Your Name" +> git config --global user.email "youremail@example.com" +> ``` + - In case you forgot to add it to the most recent commit, use `git commit --amend --signoff` - In case you forgot to add it to the last N commits in your branch, use `git rebase --signoff HEAD~N` and replace N with the number of new commits you created in your branch. - If you have a very deep branch with a lot of commits, run `git rebase -i --signoff $(git merge-base -a master HEAD)`, double check to make sense of the commits (keep all lines as `pick`) and save and close the editor. This should bulk sign all the commits in your PR. Do be careful though. If you have a complex flow with a lot of branching and re-merging of work branches and stuff, merge-base may not be the right solution for you. @@ -283,7 +305,7 @@ Note: If you have already pushed your branch to a remote, you might have to forc If you are using the GitHub Desktop client, you need to manually add the `Signed-off-by` line to the Description field on the Changes tab before committing: -``` +```text Awesome description (commit message) Signed-off-by: Jane Smith @@ -291,6 +313,16 @@ Signed-off-by: Jane Smith In case you forgot to add the line to your most recent commit, you can amend the commit message from the History tab before pushing your branch (GitHub Desktop 2.9 or later). +### Using VS Code? + +If you are using VS Code you can enable always signing your commits by setting the following in your `settings.json` file: + +```json +"git.alwaysSignOff": true, +``` + +Or from the Settings UI look for the "Git: Always Sign Off" setting and check the "Controls the signoff flag for all commits" box. + ## API Reports Backstage uses [API Extractor](https://api-extractor.com/) and TSDoc comments to generate API Reports in Markdown format. These reports are what drive the [API Reference documentation](https://backstage.io/docs/reference/). What this means is that if you are making changes to the API or adding a new plugin then you will need either generate a new API Report or update an existing API Report. If you don't do this the CI build will fail when you create your Pull Request. diff --git a/README.md b/README.md index 1175b4320c..3f4993658d 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,9 @@ # [Backstage](https://backstage.io) -> 🏖️ From October 30th - November 5th, employees at Spotify will have a week to recharge, which means all core maintainers & some project area maintainers are out of office. Right after that, we will go into the week of BackstageCon + KubeCon in Chicago, hoping to see some of you there! Expect slower responses & reviews during the 2 weeks, but we're on it for urgent issues. We will be up to speed again on November 13th! 🏖️ - [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![CNCF Status](https://img.shields.io/badge/cncf%20status-incubation-blue.svg)](https://www.cncf.io/projects) -[![Discord](https://img.shields.io/discord/687207715902193673)](https://discord.gg/backstage-687207715902193673) +[![Discord](https://img.shields.io/discord/687207715902193673?logo=discord&label=Discord&color=5865F2&logoColor=white)](https://discord.gg/backstage-687207715902193673) ![Code style](https://img.shields.io/badge/code_style-prettier-ff69b4.svg) [![Codecov](https://img.shields.io/codecov/c/github/backstage/backstage)](https://codecov.io/gh/backstage/backstage) [![](https://img.shields.io/github/v/release/backstage/backstage)](https://github.com/backstage/backstage/releases) diff --git a/contrib/.devcontainer/Dockerfile b/contrib/.devcontainer/Dockerfile index 35459b8d97..6407aa26dd 100644 --- a/contrib/.devcontainer/Dockerfile +++ b/contrib/.devcontainer/Dockerfile @@ -1,4 +1,4 @@ -FROM mcr.microsoft.com/devcontainers/typescript-node:18 +FROM mcr.microsoft.com/devcontainers/typescript-node:20 RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ && apt-get -y install chromium \ diff --git a/contrib/chart/backstage/Chart.lock b/contrib/chart/backstage/Chart.lock index 6220a481dd..b6068caacf 100644 --- a/contrib/chart/backstage/Chart.lock +++ b/contrib/chart/backstage/Chart.lock @@ -1,6 +1,6 @@ dependencies: - name: postgresql repository: https://charts.bitnami.com/bitnami - version: 9.8.12 -digest: sha256:549b9a0cdf7b2e0ad949ebad853a467bf320928970a946fb0ef7e13e9bdb7a10 -generated: "2022-05-20T08:15:48.301491565Z" + version: 13.2.12 +digest: sha256:3add6e2f2c055e415403ebbba7740113ee052b87ad72e59b35b301df2098d41e +generated: "2023-11-20T12:09:32.786270903Z" diff --git a/contrib/chart/backstage/Chart.yaml b/contrib/chart/backstage/Chart.yaml index 9770ef665c..80ff44462c 100644 --- a/contrib/chart/backstage/Chart.yaml +++ b/contrib/chart/backstage/Chart.yaml @@ -18,7 +18,7 @@ sources: dependencies: - name: postgresql condition: postgresql.enabled - version: 9.8.12 + version: 13.2.12 repository: https://charts.bitnami.com/bitnami maintainers: diff --git a/contrib/docs/tutorials/authenticate-api-requests.md b/contrib/docs/tutorials/authenticate-api-requests.md index c14eaebb54..4c44c8ae65 100644 --- a/contrib/docs/tutorials/authenticate-api-requests.md +++ b/contrib/docs/tutorials/authenticate-api-requests.md @@ -8,6 +8,8 @@ API requests from frontend plugins include an authorization header with a Backst As techdocs HTML pages load assets without an Authorization header the code below also sets a token cookie when the user logs in (and when the token is about to expire). +## Old Backend System Setup + Create `packages/backend/src/authMiddleware.ts`: ```typescript @@ -122,6 +124,151 @@ async function main() { } ``` +## New Backend System Setup + +Create `packages/backend/src/authMiddlewareFactory.ts`: + +```typescript +import { HostDiscovery } from '@backstage/backend-app-api'; +import { ServerTokenManager } from '@backstage/backend-common'; +import { + LoggerService, + RootConfigService, +} from '@backstage/backend-plugin-api'; +import { + DefaultIdentityClient, + getBearerTokenFromAuthorizationHeader, +} from '@backstage/plugin-auth-node'; +import { NextFunction, Request, RequestHandler, Response } from 'express'; +import { decodeJwt } from 'jose'; +import lzstring from 'lz-string'; +import { URL } from 'url'; + +type AuthMiddlewareFactoryOptions = { + config: RootConfigService; + logger: LoggerService; +}; + +export const authMiddlewareFactory = ({ + config, + logger, +}: AuthMiddlewareFactoryOptions): RequestHandler => { + const baseUrl = config.getString('backend.baseUrl'); + const discovery = HostDiscovery.fromConfig(config); + const identity = DefaultIdentityClient.create({ discovery }); + const tokenManager = ServerTokenManager.fromConfig(config, { logger }); + + return async (req: Request, res: Response, next: NextFunction) => { + const fullPath = `${req.baseUrl}${req.path}`; + + // Only apply auth to /api routes & skip auth for the following endpoints + // Add any additional plugin routes you want to whitelist eg. events + const nonAuthWhitelist = ['app', 'auth']; + const nonAuthRegex = new RegExp( + `^\/api\/(${nonAuthWhitelist.join('|')})(?=\/|$)\S*`, + ); + if (!fullPath.startsWith('/api/') || nonAuthRegex.test(fullPath)) { + next(); + return; + } + + try { + // Token cookies are compressed to reduce size + const cookieToken = lzstring.decompressFromEncodedURIComponent( + req.cookies.token, + ); + const token = + getBearerTokenFromAuthorizationHeader(req.headers.authorization) ?? + cookieToken; + + try { + // Attempt to authenticate as a frontend request token + await identity.authenticate(token); + } catch (err) { + // Attempt to authenticate as a backend request token + await tokenManager.authenticate(token); + } + + if (!req.headers.authorization) { + // Authorization header may be forwarded by plugin requests + req.headers.authorization = `Bearer ${token}`; + } + + if (token !== cookieToken) { + try { + const payload = decodeJwt(token); + res.cookie('token', token, { + // Compress token to reduce cookie size + encode: lzstring.compressToEncodedURIComponent, + expires: new Date((payload?.exp ?? 0) * 1000), + secure: baseUrl.startsWith('https://'), + sameSite: 'lax', + domain: new URL(baseUrl).hostname, + path: '/', + httpOnly: true, + }); + } catch { + // Ignore + } + } + next(); + } catch { + res.status(401).send(`Unauthorized`); + } + }; +}; +``` + +Install cookie-parser: + +```bash +# From your Backstage root directory +yarn add --cwd packages/backend cookie-parser @types/cookie-parser +``` + +Create a custom configured `rootHttpRouterService` in `packages/backend/src/customRootHttpRouterService.ts`: + +```typescript +import { rootHttpRouterServiceFactory } from '@backstage/backend-app-api'; +import cookieParser from 'cookie-parser'; +import { authMiddlewareFactory } from './authMiddlewareFactory'; + +export default rootHttpRouterServiceFactory({ + configure: ({ app, config, logger, middleware, routes }) => { + app.use(middleware.helmet()); + app.use(middleware.cors()); + app.use(middleware.compression()); + app.use(cookieParser()); + app.use(middleware.logging()); + + app.use(authMiddlewareFactory({ config, logger })); + + // Simple handler to set auth cookie for user + app.use('/api/cookie', (_, res) => { + res.status(200).send(); + }); + + app.use(routes); + + app.use(middleware.notFound()); + app.use(middleware.error()); + }, +}); +``` + +Update `packages/backend/src/index.ts` to add the custom `rootHttpRouterService` and override the default: + +```typescript +// ... +const backend = createBackend(); + +backend.add(import('./customRootHttpRouterService')); + +// ... +``` + +## Frontend Setup + Create `packages/app/src/cookieAuth.ts`: ```typescript diff --git a/docs/assets/plugins/cloudbuild/CloudBuildPlugin.png b/docs/assets/plugins/cloudbuild/CloudBuildPlugin.png new file mode 100644 index 0000000000..3b347f0f68 Binary files /dev/null and b/docs/assets/plugins/cloudbuild/CloudBuildPlugin.png differ diff --git a/docs/auth/index.md b/docs/auth/index.md index 091c8b01a0..806cda0ff7 100644 --- a/docs/auth/index.md +++ b/docs/auth/index.md @@ -371,6 +371,7 @@ createApiFactory({ configApi, discoveryApi, oauthRequestApi, + provider: { id: 'ghe', title: 'GitHub Enterprise', icon: () => null }, defaultScopes: ['read:user'], environment: configApi.getOptionalString('auth.environment'), }), diff --git a/docs/auth/okta/provider.md b/docs/auth/okta/provider.md index e4fc8bfb45..99ff664a67 100644 --- a/docs/auth/okta/provider.md +++ b/docs/auth/okta/provider.md @@ -43,6 +43,8 @@ auth: audience: ${AUTH_OKTA_DOMAIN} authServerId: ${AUTH_OKTA_AUTH_SERVER_ID} # Optional idp: ${AUTH_OKTA_IDP} # Optional + # https://developer.okta.com/docs/reference/api/oidc/#scope-dependent-claims-not-always-returned + additionalScopes: ${AUTH_OKTA_ADDITIONAL_SCOPES} # Optional ``` The values referenced are found on the Application page on your Okta site. @@ -55,6 +57,8 @@ The values referenced are found on the Application page on your Okta site. - `authServerId`: The authorization server ID for the Application - `idp`: The identity provider for the application, e.g. `0oaulob4BFVa4zQvt0g3` +`additionalScopes` is an optional value, a string of space separated scopes, that will be combined with the default `scope` value of `openid profile email offline_access` to adjust the `scope` sent to Okta during OAuth. This will have an impact on [the dependent claims returned](https://developer.okta.com/docs/reference/api/oidc/#scope-dependent-claims-not-always-returned). For example, setting the `additionalScopes` value to `groups` will result in the claim returning a list of the groups that the user is a member of that also match the ID token group filter of the client app. + ## Adding the provider to the Backstage frontend To add the provider to the frontend, add the `oktaAuthApi` reference and diff --git a/docs/backend-system/architecture/05-extension-points.md b/docs/backend-system/architecture/05-extension-points.md index d8d993b5bf..e6eb0a9e16 100644 --- a/docs/backend-system/architecture/05-extension-points.md +++ b/docs/backend-system/architecture/05-extension-points.md @@ -70,7 +70,7 @@ Note that we create a closure that adds to a shared `actions` structure when `ad ## Module Extension Points -Just like plugins, modules can also provide their own extension points. The API for registering and using extension points is the same as for plugins. However, modules should typically only use extension points to allow for complex internal customizations by users of the plugin module. It is therefore preferred to export the extension point directly from the module package, rather than creating a separate node library for that purpose. +Just like plugins, modules can also provide their own extension points. The API for registering and using extension points is the same as for plugins. However, modules should typically only use extension points to allow for complex internal customizations by users of the plugin module. It is therefore preferred to export the extension point directly from the module package, rather than creating a separate node library for that purpose. Extension points exported by a module are used the same way as extension points exported by a plugin, you create your own separate module and declare a dependency on the extension point that you want to interact with. ## Extension Point Design diff --git a/docs/backend-system/building-backends/08-migrating.md b/docs/backend-system/building-backends/08-migrating.md index 1e30d0aa9e..98dde46d38 100644 --- a/docs/backend-system/building-backends/08-migrating.md +++ b/docs/backend-system/building-backends/08-migrating.md @@ -262,6 +262,67 @@ If you have other customizations made to `plugins/catalog.ts`, such as adding custom processors or entity providers, read on. Otherwise, you should be able to just delete that file at this point. +#### Microsoft Graph + +Import the Microsoft Graph catalog module + +```ts title="packages/backend/src/index.ts" +backend.add(import('@backstage/plugin-catalog-backend/alpha')); +/* highlight-add-start */ +backend.add(import('@backstage/plugin-catalog-backend-module-msgraph/alpha')); +/* highlight-add-end */ +``` + +If you were providng a `schedule` programtically, this now needs to be set via configuration + +```yaml title="app-config.yaml" +catalog: + providers: + microsoftGraphOrg: + provider: + /* highlight-add-start */ + schedule: + frequency: PT4H + timeout: PT30M + /* highlight-add-end */ + +``` + +If you were providing transformers, these can be configured by extending `microsoftGraphOrgEntityProviderTransformExtensionPoint` + +```ts title="packages/backend/src/index.ts" +import { createBackendModule } from '@backstage/backend-plugin-api'; +import { microsoftGraphOrgEntityProviderTransformExtensionPoint } from '@backstage/plugin-catalog-backend-module-msgraph/alpha'; + +backend.add( + createBackendModule({ + pluginId: 'catalog', + moduleId: 'microsoftGraphExtensions', + register(env) { + env.registerInit({ + deps: { + /* highlight-add-start */ + microsoftGraphTransformers: + microsoftGraphOrgEntityProviderTransformExtensionPoint, + /* highlight-add-end */ + }, + async init({ microsoftGraphTransformers }) { + /* highlight-add-start */ + microsoftGraphTransformers.setUserTransformer(myUserTransformer); + microsoftGraphTransformers.setGroupTransformer(myGroupTransformer); + microsoftGraphTransformers.setOrganizationTransformer( + myOrganizationTransformer, + ); + /* highlight-add-end */ + }, + }); + }, + }), +); +``` + +#### Other Catalog Extensions + You will use the [extension points](../architecture/05-extension-points.md) mechanism to extend or tweak the functionality of the plugin. To do that, you'll make your own bespoke [module](../architecture/06-modules.md) which diff --git a/docs/backend-system/building-plugins-and-modules/01-index.md b/docs/backend-system/building-plugins-and-modules/01-index.md index fed074b258..7d97694aec 100644 --- a/docs/backend-system/building-plugins-and-modules/01-index.md +++ b/docs/backend-system/building-plugins-and-modules/01-index.md @@ -72,12 +72,12 @@ items. ## Modules -Backend modules are used to extend [plugins](../architecture/04-plugins.md) with +Backend modules are used to extend [plugins](../architecture/04-plugins.md) or other modules with additional features or change existing behavior. They must always be installed -in the same backend instance as the plugin that they extend, and may only extend -a single plugin. Modules interact with their target plugin using the [extension +in the same backend instance as the plugin or module that they extend, and may only extend a single plugin and modules from that plugin at a time. +Modules interact with their target plugin or module using the [extension points](../architecture/05-extension-points.md) registered by the plugin, while also being -able to depend on the [services](../architecture/03-services.md) of that plugin. +able to depend on the [services](../architecture/03-services.md) of the target plugin. That last point is worth reiterating: injected `plugin` scoped services will be the exact same ones as the target plugin will receive later, i.e. they will be scoped @@ -88,6 +88,9 @@ package, for example `@backstage/plugin-catalog-node`, and does not directly declare a dependency on the plugin package itself. This is to avoid a direct dependency and potentially cause duplicate installations of the plugin package, while duplicate installations of library packages should always be supported. +Modules with extension points typically export their extension points from the same +package however, since the extension points are generally only intended for internal +customizations where package versions can be kept in sync. To create a Backend module, run `yarn new`, select `backend-module`, and fill out the rest of the prompts. This will create a new package at `plugins/-backend-module-`. diff --git a/docs/backend-system/building-plugins-and-modules/08-migrating.md b/docs/backend-system/building-plugins-and-modules/08-migrating.md index 067ab02b4d..269a09b55c 100644 --- a/docs/backend-system/building-plugins-and-modules/08-migrating.md +++ b/docs/backend-system/building-plugins-and-modules/08-migrating.md @@ -73,30 +73,99 @@ export const kubernetesPlugin = createBackendPlugin({ }); ``` -Done! Users of this plugin are now able to import the `kubernetesPlugin` and register it in their backend using +Lastly, make sure you re-export the plugin instance as the default export of your package in `src/index.ts`: + +```ts +export { kubernetesPlugin as default } from './plugin.ts'; +``` + +Done! Users of this plugin are now able to import your plugin package and register it in their backend using ```ts // packages/backend/src/index.ts -import { kubernetesPlugin } from '@backstage/plugin-kubernetes-backend'; -backend.add(kubernetesPlugin); +backend.add(import('@backstage/plugin-kubernetes-backend')); ``` There's one thing missing that those sharp eyed readers might have noticed: the `clusterSupplier` option is missing from the original plugin. Let's add it and discuss the alternatives. -One alternative is to pass the `ClusterSupplier` in as options to the plugin, which is quick and easy but not very flexible, and also hard to evolve without introducing breaking changes as it changes the public API for the plugin. Having complex types passed in directly to the plugin also clutters the backend setup code and makes it harder to read. - -Options are primarily used for simple configuration values that are not complex types. In this case we want to allow users to register their own `ClusterSupplier` implementations to the plugin. This is where the new backend system's [extension points](../architecture/05-extension-points.md) come in handy, but let's look at doing this with options first. +One alternative is to make it possible to build the cluster supplier using static configuration. It could for example be that there is a selection of built-in implementations to choose from, or that the logic for how the `ClusterSupplier` is supposed to function is all determined by configuration, or a combination of the two. Using static configuration for customization is always the preferred option whenever it's possible. In this case, we could for example imagine that we would be able to configure our cluster supplier like this: ```ts /* omitted imports but they remain the same as above */ -export interface KubernetesOptions { - clusterSupplier?: KubernetesClustersSupplier; -} - -const kubernetesPlugin = createBackendPlugin((options: KubernetesOptions) => ({ +const kubernetesPlugin = createBackendPlugin({ pluginId: 'kubernetes', register(env) { + env.registerInit({ + deps: { + /* omitted dependencies but they remain the same as above */ + }, + async init({ config, logger, catalogApi, discovery, http }) { + // Note that in a real implementation this would be done by the `KubernetesBuilder` instead, + // but here we've extracted it into a separate call to highlight the example. + const configuredClusterSupplier = readClusterSupplierFromConfig(config); + + const { router } = await KubernetesBuilder.createBuilder({ + config, + logger, + catalogApi, + discovery, + }) + .setClusterSupplier(configuredClusterSupplier) + .build(); + http.use(router); + }, + }); + }, +}); +``` + +There are however many types of customizations that are not possible to do with static configuration. In this case we want integrators to be able to create arbitrary implementations of the `ClusterSupplier` interface, which in the end requires an implementation through code. This is where the new backend system's [extension points](../architecture/05-extension-points.md) come in handy. + +The new [extension points](../architecture/05-extension-points.md) API allows [modules](../architecture/06-modules.md) to add functionality into the backend plugin itself, in this case an additional `ClusterSupplier`. Let's look at how we could add support for installing custom suppliers using an extension point. This will allow integrators to build their own internal module with a custom `ClusterSupplier` implementation. + +First we'll go ahead and create a `@backstage/plugin-kubernetes-node` package where we can define our extension point. A separate package is used to avoid direct dependencies on the plugin package itself. With the new package created, we define the extension point like this: + +```ts +import { createExtensionPoint } from '@backstage/backend-plugin-api'; + +export interface KubernetesClusterSupplierExtensionPoint { + setClusterSupplier(supplier: KubernetesClustersSupplier): void; +} + +/** + * An extension point that allows other plugins to set the cluster supplier. + */ +export const kubernetesClustersSupplierExtensionPoint = + createExtensionPoint({ + id: 'kubernetes.cluster-supplier', + }); +``` + +For more information on how to design extension points, see the [extension points](../architecture/05-extension-points.md#extension-point-design) documentation. + +Next we'll need to add support for this extension point to the Kubernetes backend plugin itself: + +```ts +/* omitted other imports but they remain the same as above */ +import { kubernetesClustersSupplierExtensionPoint } from '@backstage/plugin-kubernetes-node'; + +export const kubernetesPlugin = createBackendPlugin({ + pluginId: 'kubernetes', + register(env) { + let clusterSupplier: KubernetesClustersSupplier | undefined = undefined; + + // We register the extension point with the backend, which allows modules to + // register their own ClusterSupplier. + env.registerExtensionPoint(kubernetesClustersSupplierExtensionPoint, { + setClusterSupplier(supplier) { + if (clusterSupplier) { + throw new Error('ClusterSupplier may only be set once'); + } + clusterSupplier = supplier; + }, + }); + env.registerInit({ deps: { /* omitted dependencies but they remain the same as above */ @@ -108,103 +177,7 @@ const kubernetesPlugin = createBackendPlugin((options: KubernetesOptions) => ({ catalogApi, discovery, }) - .setClusterSupplier(options.clusterSupplier) - .build(); - http.use(router); - }, - }); - }, -})); -``` - -The above would allow users to specify their own `ClusterSupplier` implementation to the plugin like this: - -```ts -backend.add( - kubernetesPlugin({ clusterSupplier: new MyCustomClusterSupplier() }), -); -``` - -Just to echo what was said above, this is not a very flexible solution and will for example be problematic to keep backwards compatible if we start evolving the options to for example accept multiple suppliers or tweak the `ClusterSupplier` interface. - -The new [extension points](../architecture/05-extension-points.md) API allows [modules](../architecture/06-modules.md) to add functionality into the backend plugin itself, in this case an additional `ClusterSupplier`. - -The kubernetes backend plugin only supports one `ClusterSupplier` at this time but let's look at how we could add support for multiple suppliers using extension points. This allows users to install several modules that add their own `ClusterSupplier` implementations to the plugin like this: - -```ts -backend.add(kubernetesPlugin()); -backend.add(kubernetesGoogleContainerEngineClusterSupplier()); -backend.add(kubernetesElasticContainerEngine()); -``` - -Now let's look at how to implement this with extension points. First we need to define the extension point itself. As the extension point will be used by other modules, it's common practice to export these from a shared package so that they can be imported by other modules and plugins. - -We'll go ahead and create a `@backstage/plugin-kubernetes-node` package for this and from there we'll export the extension point. - -```ts -import { createExtensionPoint } from '@backstage/backend-plugin-api'; - -export interface KubernetesClusterSupplierExtensionPoint { - addClusterSupplier(supplier: KubernetesClustersSupplier): void; -} - -/** - * An extension point that allows other plugins to add cluster suppliers. - * @public - */ -export const kubernetesClustersSupplierExtensionPoint = - createExtensionPoint({ - id: 'kubernetes.cluster-supplier', - }); -``` - -Now we can use this extension point in the kubernetes backend plugin to register the extension point for modules to use. - -```ts -import { kubernetesClustersSupplierExtensionPoint, KubernetesClusterSupplierExtensionPoint } from '@backstage/plugin-kubernetes-node'; - -// Our internal implementation of the extension point, should not be exported. -class ClusterSupplier implements KubernetesClusterSupplierExtensionPoint { - private clusterSuppliers: KubernetesClustersSupplier | undefined; - - // This method is private and only used internally to retrieve the registered supplier. - getClusterSupplier() { - return this.clusterSuppliers; - } - - addClusterSupplier(supplier: KubernetesClustersSupplier) { - // We can remove this check once the plugin support multiple suppliers. - if(this.clusterSuppliers) { - throw new Error('Multiple Kubernetes cluster suppliers is not supported at this time'); - } - this.clusterSuppliers = supplier; - } -} - -export const kubernetesPlugin = createBackendPlugin({ - pluginId: 'kubernetes', - register(env) { - const extensionPoint = new ClusterSupplier(); - // We register the extension point with the backend, which allows modules to - // register their own ClusterSupplier. - env.registerExtensionPoint( - kubernetesClustersSupplierExtensionPoint, - extensionPoint, - ); - - env.registerInit({ - deps: { - ... omitted ... - }, - async init({ config, logger, catalogApi, discovery, http }) { - const { router } = await KubernetesBuilder.createBuilder({ - config, - logger, - catalogApi, - discovery, - }) - // We pass in the registered supplier from the extension point. - .setClusterSupplier(extensionPoint.getClusterSupplier()) + .setClusterSupplier(clusterSupplier) .build(); http.use(router); }, @@ -213,24 +186,33 @@ export const kubernetesPlugin = createBackendPlugin({ }); ``` -And that's it! Modules can now be built that add clusters into to the kubernetes backend plugin, here's an example of a module that adds a `GoogleContainerEngineSupplier` to the kubernetes backend. +And that's it! Modules can now be built that add clusters into to the kubernetes backend plugin, here's an example of a module that adds a `GoogleContainerEngineSupplier` to the kubernetes backend: ```ts import { kubernetesClustersSupplierExtensionPoint } from '@backstage/plugin-kubernetes-node'; -export const kubernetesGoogleContainerEngineClusterSupplier = - createBackendModule({ - pluginId: 'kubernetes', - moduleId: 'gke.supplier', - register(env) { - env.registerInit({ - deps: { - supplier: kubernetesClustersSupplierExtensionPoint, - }, - async init({ supplier }) { - supplier.addClusterSupplier(new GoogleContainerEngineSupplier()); - }, - }); - }, - }); +// This is a custom implementation of the ClusterSupplier interface. +import { GoogleContainerEngineSupplier } from './GoogleContainerEngineSupplier'; + +export default createBackendModule({ + pluginId: 'kubernetes', + moduleId: 'gke.supplier', + register(env) { + env.registerInit({ + deps: { + supplier: kubernetesClustersSupplierExtensionPoint, + }, + async init({ supplier }) { + supplier.setClusterSupplier(new GoogleContainerEngineSupplier()); + }, + }); + }, +}); +``` + +The above module can then be installed by the integrator alongside the kubernetes backend plugin: + +```ts +backend.add(import('@backstage/plugin-kubernetes-backend')); +backend.add(import('@internal/gke-cluster-supplier')); ``` diff --git a/docs/features/kubernetes/configuration.md b/docs/features/kubernetes/configuration.md index 07e3a8a828..494e51320a 100644 --- a/docs/features/kubernetes/configuration.md +++ b/docs/features/kubernetes/configuration.md @@ -51,11 +51,13 @@ kubernetes: This configures how to determine which clusters a component is running in. -Currently, the only valid value is: +Valid values are: - `multiTenant` - This configuration assumes that all components run on all the provided clusters. +- `singleTenant` - This configuration assumes that current component run on one cluster in provided clusters. + ### `clusterLocatorMethods` This is an array used to determine where to retrieve cluster configuration from. @@ -577,6 +579,22 @@ for more info. 'backstage.io/kubernetes-label-selector': 'app=my-app,component=front-end' ``` +### Cluster Selection annotation + +This is applicable only for `singleTenant` serviceLocatorMethod. + +You can now select `single` kubernetes cluster that the entity is part-of from all your defined kubernetes clusters. To apply this use the following annotation. + +SingleTenant Cluster: + +```yaml +'backstage.io/kubernetes-cluster': dice-cluster +``` + +In the example above, we configured the "backstage.io/kubernetes-cluster" annotation on the entity `catalog-info.yaml` file to specify that the current component is running in a single cluster called "dice-cluster", so this cluster must have been specified in the `app-config.yaml`, under the Kubernetes clusters configuration (for more details, see [`Configuring Kubernetes clusters`](#configuring-kubernetes-clusters)). + +If you do not specify the annotation by `default Backstage fetches all` defined Kubernetes cluster. + [1]: https://cloud.google.com/kubernetes-engine [2]: https://cloud.google.com/docs/authentication/production#linux-or-macos [3]: https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/ diff --git a/docs/features/software-catalog/configuration.md b/docs/features/software-catalog/configuration.md index 97c75a01ff..61366a91f7 100644 --- a/docs/features/software-catalog/configuration.md +++ b/docs/features/software-catalog/configuration.md @@ -46,7 +46,7 @@ action is logged for further investigation. ### Local File (`type: file`) Configurations -In addition to url locations, you can use the `file` location type to bring in content from the local file system. You should only use this for local development, test setups and example data, not for production data. +In addition to url locations, you can use the `file` location type to bring in content from the local file system. You should only use this for local development, test setups, and example data, not for production data. You are also not able to use placeholders in them like `$text`. You can however reference other files relative to the current file. See the full [catalog example data set here](https://github.com/backstage/backstage/tree/master/packages/catalog-model/examples) for an extensive example. Here is an example pulling in the `all.yaml` file from the examples folder. Note the use of `../../` to go up two levels from the current execution path of the backend. This is typically `packages/backend/`. @@ -61,7 +61,7 @@ catalog: ### Integration Processors Integrations may simply provide a mechanism to handle `url` location type for an -external provider, or they may also include additional processors out of the +external provider or they may also include additional processors out of the box, such as the GitHub [discovery](../../integrations/github/discovery.md) processor that scans a GitHub organization for [entity descriptor files](descriptor-format.md). @@ -78,10 +78,10 @@ Backstage's descriptor format. This is documented in ## Catalog Rules -By default the catalog will only allow ingestion of entities with the kind -`Component`, `API` and `Location`. In order to allow entities of other kinds to +By default, the catalog will only allow the ingestion of entities with the kind +`Component`, `API`, and `Location`. In order to allow entities of other kinds to be added, you need to add rules to the catalog. Rules are added either in a -separate `catalog.rules` key, or added to statically configured locations. +separate `catalog.rules` key or added to statically configured locations. For example, given the following configuration: @@ -99,7 +99,7 @@ catalog: We are able to add entities of kind `Component`, `API`, `Location`, or `Template` from any location, and `Group` entities from the `org-data.yaml`, -which will also be read as statically configured location. +which will also be read as a statically configured location. Note that if the `catalog.rules` key is present it will replace the default value, meaning that you need to add rules for the default kinds if you want @@ -115,10 +115,10 @@ catalog: ## Readonly mode -Processors provides a good way to automate ingestion of entities when combined +Processors provide a good way to automate the ingestion of entities when combined with [Static Location Configuration](#static-location-configuration) or a discovery processor like -[GitHub Discovery](../../integrations/github/discovery.md). To enforce usage of +[GitHub Discovery](../../integrations/github/discovery.md). To enforce the usage of processors to locate entities we can configure the catalog into `readonly` mode. This configuration disables registering and deleting locations with the catalog APIs. @@ -127,7 +127,7 @@ catalog: readonly: true ``` -> **Note that any plugin relying on the catalog API for creating, updating and +> **Note that any plugin relying on the catalog API for creating, updating, and > deleting entities will not work in this mode.** Deleting an entity by UUID, `DELETE /entities/by-uid/:uid`, is allowed when using this mode. It may be rediscovered as noted in [explicit deletion](life-of-an-entity.md#explicit-deletion). @@ -140,9 +140,9 @@ plugin. ## Clean up orphaned entities -In short entities can become orphaned through multiple means, such as when a catalog-info YAML file is moved from one place to another in the version control system without updating the registration in the catalog. For safety reasons the default behavior is to just tag the orphaned entities, and keep them around. You can read more about orphaned entities [here](life-of-an-entity.md#orphaning). +In short, entities can become orphaned through multiple means, such as when a catalog-info YAML file is moved from one place to another in the version control system without updating the registration in the catalog. For safety reasons, the default behavior is to just tag the orphaned entities, and keep them around. You can read more about orphaned entities [here](life-of-an-entity.md#orphaning). -However, if you do with to automatically remove the orphaned entities, you can use the following configuration, and everything with an orphaned entity tag will be eventually deleted. +However, if you do wish to automatically remove the orphaned entities, you can use the following configuration, and everything with an orphaned entity tag will be eventually deleted. ```yaml catalog: diff --git a/docs/features/software-templates/adding-templates.md b/docs/features/software-templates/adding-templates.md index 7254a56d6c..6396d7530a 100644 --- a/docs/features/software-templates/adding-templates.md +++ b/docs/features/software-templates/adding-templates.md @@ -114,6 +114,6 @@ configured differently should be running on `/catalog-import`. For information about writing your own templates, you can check out the docs [here](./writing-templates.md) -If you are looking for a method to discover templates without the need for manual ingestion, there are several options available. One approach is to utilize Discovery providers, such as [GitHub Discovery](https://backstage.io/docs/integrations/github/discover). +If you are looking for a method to discover templates without the need for manual ingestion, there are several options available. One approach is to utilize Discovery providers, such as [GitHub Discovery](https://backstage.io/docs/integrations/github/discovery). Alternatively, you can choose to set up an external integration. This involves connecting your system to external sources or platforms that may host templates relevant to your needs, as mentioned in [External Integration](https://backstage.io/docs/features/software-catalog/external-integrations/). diff --git a/docs/features/software-templates/index.md b/docs/features/software-templates/index.md index c0f2e8a97e..aa650a9703 100644 --- a/docs/features/software-templates/index.md +++ b/docs/features/software-templates/index.md @@ -20,6 +20,11 @@ locations like GitHub or GitLab. > Be sure to have covered > [Getting Started with Backstage](../../getting-started) before proceeding. +> Note: if you're running Backstage with Node 20 or later, you'll need to pass the flag `--no-node-snapshot` to Node in order to +> use the templates feature. +> One way to do this is to specify the `NODE_OPTIONS` environment variable before starting Backstage: +> `export NODE_OPTIONS=--no-node-snapshot` + The Software Templates are available under `/create`. For local development you should be able to reach them at `http://localhost:3000/create`. diff --git a/docs/features/software-templates/migrating-to-rjsf-v5.md b/docs/features/software-templates/migrating-to-rjsf-v5.md new file mode 100644 index 0000000000..829aaf8410 --- /dev/null +++ b/docs/features/software-templates/migrating-to-rjsf-v5.md @@ -0,0 +1,135 @@ +--- +id: migrating-to-rjsf-v5 +title: 'Migrating to react-jsonschema-form@v5' +# prettier-ignore +description: Docs on migrating to `react-jsonschema-form`@v5 and the new designs +--- + +> Note: If you were previously using the `/alpha` imports to test out the `scaffolder/next` work, those imports have been promoted to the default exports from the respective packages. You should just have to remove the `/alpha` from the import path, and remove the `Next` from the import name. `NextScaffolderPage` -> `ScaffolderPage`, `createNextScaffolderFieldExtension` -> `createScaffolderFieldExtension` etc. + +## What's `react-jsonschema-form`? + +This library is core to the frontend part of the scaffolder plugin, and is responsible for rendering the form in which developers and end users fill out to meet the `jsonschema` requirement for the parameters section. + +Since the initial release of the `scaffolder` plugin, we we're on a pretty old version of `react-jsonschema-form` (v3), which has been pretty outdated as of late. The problem with us just bumping this library was that there are several breaking changes with the new v5 version, which we've tried pretty aggressively not to pass on to our end users for their templates and [Custom Field Extensions](https://backstage.io/docs/features/software-templates/writing-custom-field-extensions/). + +We're hoping that by duplicating the types from version 3 of `react-jsonschema-form` and making these the types that we will support even though the underlying library is v5, it should get us through all of the breaking changes without passing that down. + +## What's new? + +With that in mind, this release has `v5` of `react-jsonschema-form`, and with that comes all the new features and bugfixes in `v4` that we were waiting for - one of the main ones being the ability to use `if / then / else` syntax in the `template.yaml` definitions! 🎉 + +We've also rebuilt how validation works in the `scaffolder` components, which now means that we've opened the ability to have `async` validation functions in your `Field Extensions`. + +Some of the pages have gotten a little bit of an overhaul in terms of UI based on some research and feedback from the community and internally. + +- The `TemplateList` page has gotten some new `Card` components which show a little more information than the previous version with a little `material-ui` standards. +- The `WizardPage` has received some new updates with the stepper now running horizontally, and the `Review` step being a dedicated step in the stepper. +- The `OngoingTask` page now does not show the logs by default, and instead has a much cleaner interface for tracking the ongoing steps and the pipeline of actions that are currently showing. + - You can also now provide your own `OutputsComponent` which can be used to render the outputs from an ongoing / completed task in a way that suits your templates the best. For instance, if your template produces `Pull Requests`, it could be useful to render these in an interactive way where you can see the statuses of each of these `Pull Requests` in the `Ongoing Task` page. + +There's also a lot of bug fixes, and other things, but these are the main ones that we wanted to highlight. + +## How do I upgrade + +With the release of [`v1.20.0`](https://github.com/backstage/backstage/releases/tag/v1.20.0) these changes should have been made for you. We're hoping that it should be pretty transparent, and things just work as expected. Please reach out to us on [discord](https://discord.com/invite/MUpMjP2) or in a [issue](https://github.com/backstage/backstage/issues/new?assignees=&labels=bug&projects=&template=bug.yaml&title=%F0%9F%90%9B+Bug+Report%3A+%3Ctitle%3E) if you're having issues. + +It's possible that if you have a hard dependency on any of the `@rjsf/*` libraries in your app, you'll need to bump these manually to the version that we currently support: `5.13.6` at the time of writing. There could be breaking changes that you will have to fix here however, which we think should be pretty simple, but they're things like changing imports from `@rjsf/core` to `@rjsf/utils`. + +```ts +/* highlight-remove-next-line */ +import { FieldValidation } from '@rjsf/core'; +/* highlight-add-next-line */ +import { FieldValidation } from '@rjsf/utils; +``` + +## Escape hatch + +If for some reason the upgrade to [`v1.20.0`](https://github.com/backstage/backstage/releases/tag/v1.20.0) didn't go as planned, there's an escape hatch for use until the next mainline release in which we will try to get any issues fixed before removing the legacy code. + +We've moved some of the older exports to an `/alpha` export so you should be able switch to using the old library just in case. + +```tsx +/* highlight-remove-next-line */ +import { ScaffolderPage } from '@backstage/plugin-scaffolder'; +/* highlight-add-next-line */ +import { LegacyScaffolderPage } from '@backstage/plugin-scaffolder/alpha'; +``` + +And this API should be the exact same as the previous Router, so you should be able to make a change like the following further down in this file: + +```tsx + + entity?.metadata?.tags?.includes('recommended') ?? false, + }, + ]} + /> + } +> + + + {/* ... other extensions */} + + + + {/* ... other layouts */} + + +``` + +And you can also update any of your `CustomFieldExtensions` to use the old helper like so: + +```ts +/* highlight-remove-next-line */ +import { createScaffolderFieldExtension } from '@backstage/plugin-scaffolder'; +/* highlight-add-next-line */ +import { createLegacyScaffolderFieldExtension } from '@backstage/plugin-scaffolder-react/alpha'; + +export const EntityNamePickerFieldExtension = scaffolderPlugin.provide( + /* highlight-remove-next-line */ + createScaffolderFieldExtension({ + /* highlight-add-next-line */ + createLegacyScaffolderFieldExtension({ + component: EntityNamePicker, + name: 'EntityNamePicker', + validation: entityNamePickerValidation, + }), +); +``` + +And in the component themselves, you might have to do the following: + +```tsx +/* highlight-remove-next-line */ +import { FieldExtensionComponentProps } from '@backstage/plugin-scaffolder-react'; +/* highlight-add-next-line */ +import { LegacyFieldExtensionComponentProps } from '@backstage/plugin-scaffolder-react/alpha'; + +export const EntityNamePicker = ( + /* highlight-remove-next-line */ + props: FieldExtensionComponentProps, + /* highlight-add-next-line */ + props: LegacyFieldExtensionComponentProps, +) => { + const { + onChange, + required, + schema: { title = 'Name', description = 'Unique name of the component' }, + rawErrors, + formData, + idSchema, + placeholder, + } = props; + // .. +}; +``` diff --git a/docs/features/software-templates/testing-scaffolder-alpha.md b/docs/features/software-templates/testing-scaffolder-alpha.md deleted file mode 100644 index 02e579ef83..0000000000 --- a/docs/features/software-templates/testing-scaffolder-alpha.md +++ /dev/null @@ -1,276 +0,0 @@ ---- -id: testing-scaffolder-alpha -title: 'Experimental: Testing out the alpha Scaffolder plugin' -# prettier-ignore -description: Docs on the upcoming breaking release for the scaffolder plugin ---- - -## What's `scaffolder/next`? - -The `alpha` version, or as you might have seen referred to in other places the `scaffolder/next` release, is a new version of the `scaffolder` plugin that will be the first breaking change to the plugin, so you can also think of it as `@backstage/plugin-scaffolder@2.0.0`. -Its mostly a rewrite of a lot of the frontend components and pages that had very limited test coverage, which made adding new features to the `scaffolder` plugin quite hard, and we were lacking in confidence when making changes. - -There is of course some other things that have changed when re-writing this, which are essentially what has caused some breaking changes. -Now, this is not like previous scaffolder changes where you would have to change all of your templates as this is only the frontend plugin that is going to have breaking changes. You can read more about the [breaking changes](#breaking-changes) below. - -## What's new? - -First off, the main dependency that we have for the frontend which is responsible for rendering the `JSONSchema` into `material-ui` components is [react-jsonschema-form](https://github.com/rjsf-team/react-jsonschema-form). -This dependency in the current version of the plugin is 3.x.x, which is now 2 major versions out of date. Long story short, `v4` of this plugin contained some bug fixes, and new features but we we're unable to upgrade due to some issues with having support for `material-ui@v4`, so we had to wait for `v5` to be released, and because of the `FieldExtensions` and how they are very tightly coupled to the `react-jsonschema-form` library, we also wanted to make sure that this release was stable before getting people to migrate their `Field Extensions`. - -With that in mind, this release has `v5` of `react-jsonschema-form`, and with that comes all the new features and bugfixes in `v4` that we were waiting for - one of the main ones being the ability to use `if / then / else` syntax in the `template.yaml` definitions! 🎉 - -We've also rebuilt how validation works in the `scaffolder` components, which now means that we've opened the ability to have `async` validation functions in your `Field Extensions`. - -Some of the pages have gotten a little bit of an overhaul in terms of UI based on some research and feedback from the community and internally. - -- The `TemplateList` page has gotten some new `Card` components which show a little more information than the previous version with a little `material-ui` standards. -- The `WizardPage` has received some new updates with the stepper now running horizontally, and the `Review` step being a dedicated step in the stepper. -- The `OngoingTask` page now does not show the logs by default, and instead has a much cleaner interface for tracking the ongoing steps and the pipeline of actions that are currently showing. - - You can also now provide your own `OutputsComponent` which can be used to render the outputs from an ongoing / completed task in a way that suits your templates the best. For instance, if your template produces `Pull Requests`, it could be useful to render these in an interactive way where you can see the statuses of each of these `Pull Requests` in the `Ongoing Task` page. - -There's also a lot of bug fixes, and other things, but these are the main ones that we wanted to highlight. - -## How do I test out the `alpha` version? - -With the release of [`v1.11.0`](https://github.com/backstage/backstage/releases/tag/v1.11.0) it's now possible to run the `scaffolder/next` plugin and it be a drop in replacement for the current version that you use today. This means that you can start using the new code, and start testing it out. Once we have collected enough feedback, and squashed any bugs that might block us from releasing, it will be promoted from the `/alpha` exports and replace the existing code leading to breaking changes if you haven't already made these changes as part of this testing pilot. Those that have chosen to opt into this testing pilot means that once we promote it from the `/alpha` exports, you will need to update your code to point to the original exports from the `scaffolder` plugin, just like the code is today but with the [breaking changes](#breaking-changes) that you already made to your `Custom Field Extensions`. - -It's also worth calling out that if you do test this out, and find some issues or something not working out as expected, feel free to raise an issue in the [repo](https://github.com/backstage/backstage) or reach out to us on Discord! - -### Make the required changes to `App.tsx` - -The `ScaffolderPage` router has a completely different export for the `scaffolder/next` work, so you will want to change any import from the old `ScaffolderPage` to the new `NextScaffolderPage` - -```tsx -/* highlight-remove-next-line */ -import { ScaffolderPage } from '@backstage/plugin-scaffolder'; -/* highlight-add-next-line */ -import { NextScaffolderPage } from '@backstage/plugin-scaffolder/alpha'; -``` - -And this API should be the exact same as the previous Router, so you should be able to make a change like the following further down in this file: - -```tsx - - entity?.metadata?.tags?.includes('recommended') ?? false, - }, - ]} - /> - } -> - - - {/* ... other extensions */} - - - - {/* ... other layouts */} - - -``` - -Optionally, you can choose to run the two side by side by using `FeatureFlags` in your `App.tsx` if you wish, but, we would also recommend duplicating any `CustomFieldExtensions` too as the new `CustomFieldExtensions` might not be compatible with the old form. - -```tsx - - }> - - - - - - - }> - - - - - -``` - -You should then be able to enable the `scaffolder-next-preview` feature flag under `/settings/feature-flags` in Backstage. - -### Make the required changes to your `CustomFieldExtensions` - -There's differently named function for creating field extensions part of the `/alpha` exports as these are the ones that can contain breaking changes because of the breaking changes that have been applied in `react-jsonschema-form`. - -Let's take the following example: - -```ts -export const EntityNamePickerFieldExtension = scaffolderPlugin.provide( - createScaffolderFieldExtension({ - component: EntityNamePicker, - name: 'EntityNamePicker', - validation: entityNamePickerValidation, - schema: EntityNamePickerSchema, - }), -); -``` - -References for `createScaffolderFieldExtension` have an `/alpha` version of `createNextScaffolderFieldExtension`, which should be used instead. - -```ts -/* highlight-remove-next-line */ -import { createScaffolderFieldExtension } from '@backstage/plugin-scaffolder'; -/* highlight-add-next-line */ -import { createNextScaffolderFieldExtension } from '@backstage/plugin-scaffolder-react/alpha'; - -export const EntityNamePickerFieldExtension = scaffolderPlugin.provide( - /* highlight-remove-next-line */ - createScaffolderFieldExtension({ - /* highlight-add-next-line */ - createNextScaffolderFieldExtension({ - component: EntityNamePicker, - name: 'EntityNamePicker', - validation: entityNamePickerValidation, - }), -); -``` - -Once you've done this you will find that you will have two squiggly lines under the properties that are passed in. One for the component and one for the validation (if provided.) - -Let's take the following code for the `EntityNamePicker` component: - -```tsx -export const EntityNamePicker = ( - props: FieldExtensionComponentProps, -) => { - const { - onChange, - required, - schema: { title = 'Name', description = 'Unique name of the component' }, - rawErrors, - formData, - uiSchema: { 'ui:autofocus': autoFocus }, - idSchema, - placeholder, - } = props; - // .. -}; -``` - -There's another `/alpha` export that you need to replace `FieldExtensionComponentProps` with which is the `NextFieldExtensionComponentProps`. - -```tsx -/* highlight-remove-next-line */ -import { FieldExtensionComponentProps } from '@backstage/plugin-scaffolder-react'; -/* highlight-add-next-line */ -import { NextFieldExtensionComponentProps } from '@backstage/plugin-scaffolder-react/alpha'; - -export const EntityNamePicker = ( - /* highlight-remove-next-line */ - props: FieldExtensionComponentProps, - /* highlight-add-next-line */ - props: NextFieldExtensionComponentProps, -) => { - const { - onChange, - required, - schema: { title = 'Name', description = 'Unique name of the component' }, - rawErrors, - formData, - /* highlight-remove-next-line */ - uiSchema: { 'ui:autofocus': autoFocus }, - /* highlight-add-next-line */ - uiSchema: { 'ui:autofocus': autoFocus } = {}, - idSchema, - placeholder, - } = props; - // .. -}; -``` - -You'll notice that there's an additional change here, which is that we're now defaulting the `uiSchema` to an empty object. This is because the `uiSchema` is now optional, and if you don't provide it, it will be `undefined` instead of an empty object. There's more around this in the [breaking changes](#breaking-changes) section. - -To fix the previous validation error, you will need to change the import for the `FieldValidation` type that is used in the `validation` function. - -Let's take the following example of the validation function: - -```ts -import { FieldValidation } from '@rjsf/utils'; -import { KubernetesValidatorFunctions } from '@backstage/catalog-model'; - -export const entityNamePickerValidation = ( - value: string, - validation: FieldValidation, -) => { - if (!KubernetesValidatorFunctions.isValidObjectName(value)) { - validation.addError( - 'Must start and end with an alphanumeric character, and contain only alphanumeric characters, hyphens, underscores, and periods. Maximum length is 63 characters.', - ); - } -}; -``` - -You will need to change the import for `FieldValidation` to point at the new `react-jsonschema-form` dependency. - -> Note: you will probably need to install this dependency too, by using `yarn add @rjsf/utils` in the package where you define these validation functions, this could also be in the `packages/app` folder, so you can install it there if needed. - -```ts -/* highlight-remove-next-line */ -import { FieldValidation } from '@rjsf/core'; -/* highlight-add-next-line */ -import { FieldValidation } from '@rjsf/utils; -import { KubernetesValidatorFunctions } from '@backstage/catalog-model'; - -export const entityNamePickerValidation = ( - value: string, - validation: FieldValidation, -) => { -``` - -## Breaking Changes - -Once we fully release the code that is in the `/alpha` exports right now onto the current API and release v2.0.0 of `@backstage/plugin-scaffolder` the breaking changes will be as follows: - -### `uiSchema` is now optional - -Later releases of `react-jsonschema-form` have made the `uiSchema` optional, and if you don't provide it, it will be `undefined` instead of an empty object. This means that you will need to make sure that you're defaulting the `uiSchema` to an empty object if you're using it in your code. - -```tsx -const { - onChange, - required, - schema: { title = 'Name', description = 'Unique name of the component' }, - rawErrors, - formData, - /* highlight-remove-next-line */ - uiSchema: { 'ui:autofocus': autoFocus }, - /* highlight-add-next-line */ - uiSchema: { 'ui:autofocus': autoFocus } = {}, - idSchema, - placeholder, -} = props; -// .. -``` - -### `formData` can also be `undefined` - -If you were using the `formData` and assuming that it was set to an empty object when building `Field Extensions` that return objects, then this will be `undefined` now due to a change in the `react-jsonschema-form` library. - -```tsx -const { - onChange, - required, - schema: { title = 'Name', description = 'Unique name of the component' }, - rawErrors, - /* highlight-remove-next-line */ - formData, - /* highlight-add-next-line */ - formData = {}, // or maybe some other default value that you would prefer - uiSchema: { 'ui:autofocus': autoFocus } = {}, - idSchema, - placeholder, -} = props; -// .. -``` diff --git a/docs/features/techdocs/README.md b/docs/features/techdocs/README.md index 3251451cce..c6e1fd42ad 100644 --- a/docs/features/techdocs/README.md +++ b/docs/features/techdocs/README.md @@ -68,6 +68,7 @@ See [TechDocs Architecture](architecture.md) to get an overview of where the bel | Gerrit | Yes ✅ | | GitLab | Yes ✅ | | GitLab Enterprise | Yes ✅ | +| Gitea | Yes ✅ | ### File storage providers diff --git a/docs/features/techdocs/cli.md b/docs/features/techdocs/cli.md index 9704b9b21b..cc356f68d1 100644 --- a/docs/features/techdocs/cli.md +++ b/docs/features/techdocs/cli.md @@ -147,6 +147,7 @@ Options: Defaults to false, which means that the techdocs-core plugin is always added to the mkdocs file. --legacyCopyReadmeMdToIndexMd Attempt to ensure an index.md exists falling back to using /README.md or README.md in case a default /index.md is not provided. (default: false) + --runAsDefaultUser Bypass setting the container user as the same user and group id as host for Linux and MacOS (default: false) -v --verbose Enable verbose output. (default: false) -h, --help display help for command ``` diff --git a/docs/integrations/azure/org.md b/docs/integrations/azure/org.md index c4968b0399..061baf7301 100644 --- a/docs/integrations/azure/org.md +++ b/docs/integrations/azure/org.md @@ -34,6 +34,9 @@ catalog: securityEnabled eq false and mailEnabled eq true and groupTypes/any(c:c+eq+'Unified') + schedule: + frequency: PT1H + timeout: PT50M ``` Finally, register the plugin in `catalog.ts`. @@ -52,11 +55,7 @@ export default async function createPlugin( builder.addEntityProvider( MicrosoftGraphOrgEntityProvider.fromConfig(env.config, { logger: env.logger, - schedule: env.scheduler.createScheduledTaskRunner({ - frequency: { hours: 1 }, - timeout: { minutes: 50 }, - initialDelay: { seconds: 15 }, - }), + scheduler: env.scheduler, }), ); /* highlight-add-end */ diff --git a/docs/local-dev/cli-build-system.md b/docs/local-dev/cli-build-system.md index 7bb4918d47..51c328c871 100644 --- a/docs/local-dev/cli-build-system.md +++ b/docs/local-dev/cli-build-system.md @@ -295,7 +295,8 @@ Webpack configuration itself varies very little between the frontend development and production bundling, so we'll dive more into the configuration in the production section below. The main differences are that `process.env.NODE_ENV` is set to `'development'`, minification is disabled, cheap source maps are used, -and [React Hot Loader](https://github.com/gaearon/react-hot-loader) is enabled. +and [React Refresh](https://github.com/pmmmwh/react-refresh-webpack-plugin#readme) +is enabled. If you prefer to run type checking and linting as part of the Webpack process, you can enable usage of the @@ -589,22 +590,25 @@ For your productivity working with unit tests it's quite essential to have your A complete launch configuration for VS Code debugging may look like this: -```json +```jsonc { "type": "node", - "name": "vscode-jest-tests", + "name": "vscode-jest-tests.v2", "request": "launch", + "args": [ + "repo", + "test", + "--runInBand", + "--watchAll=false", + "--testNamePattern", + "${jest.testNamePattern}", + "--runTestsByPath", + "${jest.testFile}" + ], "console": "integratedTerminal", "internalConsoleOptions": "neverOpen", "disableOptimisticBPs": true, - "program": "${workspaceFolder}/node_modules/.bin/jest", - "cwd": "${workspaceFolder}", - "args": [ - "--config", - "node_modules/@backstage/cli/config/jest.js", - "--runInBand", - "--watchAll=false" - ] + "program": "${workspaceFolder}/node_modules/.bin/backstage-cli" } ``` diff --git a/docs/local-dev/debugging.md b/docs/local-dev/debugging.md index d2a4d02db0..68e37374f6 100644 --- a/docs/local-dev/debugging.md +++ b/docs/local-dev/debugging.md @@ -47,3 +47,28 @@ The resulting log should now have more information available for debugging: [1] 2023-04-12T00:51:44.118Z search info Collating documents for tools succeeded type=plugin documentType=tools [1] 2023-04-12T00:51:44.119Z backstage debug task: search_index_tools will next occur around 2023-04-11T21:01:44.118-04:00 type=taskManager task=search_index_tools ``` + +## Debugger + +### VSCode + +In your `launch.json`, add a new entry with the following, + +```jsonc +{ + "name": "Start Backend", + "request": "launch", + "args": [ + "package", + "start" + ], + "cwd": "${workspaceFolder}/packages/backend", + "program": "${workspaceFolder}/node_modules/.bin/backstage-cli", + "skipFiles": [ + "/**" + ], + "type": "node" +}, +``` + +You may notice that the normal logs mentioned above do not get logged, this is an issue with the logging library we're using, `winston`, and is not easily solved. See [this thread](https://github.com/winstonjs/winston/issues/1544) for more information. diff --git a/docs/releases/v1.20.0-changelog.md b/docs/releases/v1.20.0-changelog.md new file mode 100644 index 0000000000..6df613ac77 --- /dev/null +++ b/docs/releases/v1.20.0-changelog.md @@ -0,0 +1,3723 @@ +# Release v1.20.0 + +## @backstage/backend-openapi-utils@0.1.0 + +### Minor Changes + +- 785fb1ea75: Adds a new route, `/openapi.json` to validated routers for displaying their full OpenAPI spec in a standard endpoint. + +### Patch Changes + +- 6694b369a3: Adds a new function `wrapInOpenApiTestServer` that allows for proxied requests at runtime. This will support the new `yarn backstage-repo-tools schema openapi test` command. +- Updated dependencies + - @backstage/backend-plugin-api@0.6.7 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## @backstage/cli@0.24.0 + +### Minor Changes + +- 8db5c3cd7a: Removed support for the `publishConfig.alphaTypes` and `.betaTypes` fields that were used together with `--experimental-type-build` to generate `/alpha` and `/beta` entry points. Use the `exports` field to achieve this instead. +- 4e36abef14: Remove support for the deprecated `--experimental-type-build` option for `package build`. + +### Patch Changes + +- 4ba4ac351f: Switch from using deprecated `@esbuild-kit/*` packages to using `tsx`. This also switches to using the new module loader `register` API when available, avoiding the experimental warning when starting backends. +- cd80ebb062: Updated dependency `vite-plugin-node-polyfills` to `^0.16.0`. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- 971dcba764: Updated dependency `@typescript-eslint/eslint-plugin` to `6.10.0`. +- 6bf7561d3c: The experimental package detection will now ignore packages that don't make `package.json` available. +- e14cbf563d: Added `EXPERIMENTAL_VITE` flag for using [vite](https://vitejs.dev) as dev server instead of Webpack +- 7cd34392f5: Ignore `stdin` when spawning backend child process for the `start` command. Fixing an issue where backend startup would hang. +- Updated dependencies + - @backstage/config-loader@1.5.3 + - @backstage/cli-node@0.2.0 + - @backstage/integration@1.7.2 + - @backstage/release-manifests@0.0.11 + - @backstage/catalog-model@1.4.3 + - @backstage/cli-common@0.1.13 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/eslint-plugin@0.1.3 + - @backstage/types@1.1.1 + +## @backstage/cli-node@0.2.0 + +### Minor Changes + +- 8db5c3cd7a: Removed support for the `publishConfig.alphaTypes` and `.betaTypes` fields that were used together with `--experimental-type-build` to generate `/alpha` and `/beta` entry points. Use the `exports` field to achieve this instead. + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.13 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/core-plugin-api@1.8.0 + +### Minor Changes + +- 1e5b7d993a: `IconComponent` can now have a `fontSize` of `inherit`, which is useful for in-line icons. +- cb6db75bc2: Introduced `AnyRouteRefParams` as a replacement for `AnyParams`, which is now deprecated. + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- cb6db75bc2: Deprecated several types related to the routing system that are scheduled to be removed, as well as several fields on the route ref types themselves. +- 68fc9dc60e: Added a new `/alpha` export `convertLegacyRouteRef`, which is a temporary utility to allow existing route refs to be used with the new experimental packages. +- Updated dependencies + - @backstage/version-bridge@1.0.7 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + +## @backstage/frontend-app-api@0.3.0 + +### Minor Changes + +- 68fc9dc60e: Added the ability to configure bound routes through `app.routes.bindings`. The routing system used by `createApp` has been replaced by one that only supports route refs of the new format from `@backstage/frontend-plugin-api`. The requirement for route refs to have the same ID as their associated extension has been removed. + +### Patch Changes + +- e28d379e32: Refactor internal extension instance system into an app graph. +- fdc348d5d3: The options parameter of `createApp` is now optional. +- 6c2b872153: Add official support for React 18. +- dc613f9bcf: Updated `app.extensions` configuration schema. +- 733bd95746: Implement new `AppTreeApi` +- 685a4c8901: Installed features are now deduplicated both by reference and ID when available. Features passed to `createApp` now override both discovered and loaded features. +- fa28d4e6df: No longer throw error on invalid input if the child is disabled. +- bb98953cb9: Register default implementation for the `Translation API` on the new `createApp`. +- fe6d09953d: Fix for app node output IDs not being serialized correctly. +- 77f009b35d: Internal updates to match changes in the experimental `@backstage/frontend-plugin-api`. +- 4d6fa921db: Internal refactor to rename the app graph to app tree +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/plugin-graphiql@0.3.0 + - @backstage/core-plugin-api@1.8.0 + - @backstage/version-bridge@1.0.7 + - @backstage/core-app-api@1.11.1 + - @backstage/theme@0.4.4 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + +## @backstage/frontend-plugin-api@0.3.0 + +### Minor Changes + +- 68fc9dc60e: Added `RouteRef`, `SubRouteRef`, `ExternalRouteRef`, and related types. All exports from this package that previously relied on the types with the same name from `@backstage/core-plugin-api` now use the new types instead. To convert and existing legacy route ref to be compatible with the APIs from this package, use the `convertLegacyRouteRef` utility from `@backstage/core-plugin-api/alpha`. +- 77f009b35d: Extensions now return their output from the factory function rather than calling `bind(...)`. + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 733bd95746: Add new `AppTreeApi`. +- 6af88a05ff: Improve the extension boundary component and create a default extension suspense component. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/version-bridge@1.0.7 + - @backstage/types@1.1.1 + +## @backstage/repo-tools@0.4.0 + +### Minor Changes + +- 4e36abef14: Remove support for the deprecated `--experimental-type-build` option for `package build`. +- 6694b369a3: Adds a new command `schema openapi test` that performs runtime validation of your OpenAPI specs using your test data. Under the hood, we're using Optic to perform this check, really cool work by them! + + To use this new command, you will have to run `yarn add @useoptic/optic` in the root of your repo. + +### Patch Changes + +- Updated dependencies + - @backstage/cli-node@0.2.0 + - @backstage/catalog-model@1.4.3 + - @backstage/cli-common@0.1.13 + - @backstage/errors@1.2.3 + +## @techdocs/cli@1.7.0 + +### Minor Changes + +- 8600b86820: validate Docker status before running mkdocs server + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs-node@1.10.0 + - @backstage/backend-common@0.19.9 + - @backstage/catalog-model@1.4.3 + - @backstage/cli-common@0.1.13 + - @backstage/config@1.1.1 + +## @backstage/plugin-api-docs@0.10.0 + +### Minor Changes + +- 0ac0e10822: Replace GraphiQL playground with DocExplorer +- 62310404b7: Define a default for oauth2RedirectUrl option of swagger-ui-react to match documentation + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- 613a55911f: Updated dependency `graphiql` to `3.0.9`. +- 4ad15278e6: Updated dependency `@graphiql/react` to `^0.20.0`. +- 62b5922916: Internal theme type updates +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/plugin-catalog@1.15.0 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + +## @backstage/plugin-auth-backend@0.20.0 + +### Minor Changes + +- bdf08ad04a: Adds the StaticTokenIssuer and StaticKeyStore, an alternative token issuer that can be used to sign the Authorization header using a predefined public/private key pair. + +### Patch Changes + +- 243c655a68: JSDoc and Error message updates to handle `Azure Active Directory` re-brand to `Entra ID` +- 013611b42e: `knex` has been bumped to major version 3 and `better-sqlite3` to major version 9, which deprecate node 16 support. +- f2fc5acca6: Added an optional `additionalScopes` configuration parameter to `okta` providers, that lets you add additional scopes on top of the default ones. +- 96c4f54bf6: Reverted the Microsoft auth provider to the previous implementation. +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/plugin-auth-backend-module-gitlab-provider@0.1.4 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @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-backend-module-gcp-iap-provider@0.2.1 + - @backstage/plugin-auth-backend-module-github-provider@0.1.4 + - @backstage/plugin-auth-backend-module-google-provider@0.1.4 + - @backstage/plugin-auth-backend-module-oauth2-provider@0.1.4 + - @backstage/plugin-auth-node@0.4.1 + +## @backstage/plugin-catalog@1.15.0 + +### Minor Changes + +- 1e5b7d993a: Added the `DefaultEntityPresentationApi`, which is an implementation of the + `EntityPresentationApi` that `@backstage/plugin-catalog-react` exposes through + its `entityPresentationApiRef`. This implementation is also by default made + available automatically by the catalog plugin, unless you replace it with a + custom one. It batch fetches and caches data from the catalog as needed for + display, and is customizable by adopters to add their own rendering functions. + +### Patch Changes + +- eb817ee6d4: Fix spacing inconsistency with links and labels in headers + +- 8a8445663b: Migrate catalog entity cards to new frontend system extension format. + +- e964c17db9: Use default extensions boundary and suspense on the alpha declarative `createCatalogFilterExtension` extension factory. + +- 71c97e7d73: The \`spec.lifecycle' field in entities will now always be rendered as a string. + +- 6c2b872153: Add official support for React 18. + +- 0bf6ebda88: Initial entity page implementation for new frontend system at `/alpha`, with an overview page enabled by default and the about card available as an optional card. + +- bb98953cb9: Create declarative extensions for the `Catalog` plugin; this initial plugin preset contains sidebar item, index page and filter extensions, all distributed via `/alpha` subpath. + + The `EntityPage` will be migrated in a follow-up patch. + +- 7c265b9758: Fix type error on `CatalogTable` when using Material UI v5 + +- 69c14904b6: Use `EntityRefLinks` with `hideIcons` property to avoid double icons + +- 62b5922916: Internal theme type updates + +- 77f009b35d: Internal updates to match changes in the experimental `@backstage/frontend-plugin-api`. + +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/plugin-scaffolder-common@1.4.3 + - @backstage/integration-react@1.1.21 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-search-react@1.7.2 + - @backstage/theme@0.4.4 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-catalog-backend@1.15.0 + +### Minor Changes + +- e5bf3749ad: Support adding location analyzers in new catalog analysis extension point and move `AnalyzeOptions` and `ScmLocationAnalyzer` types to `@backstage/plugin-catalog-node` +- 8d756968f9: Introduce a new optional config parameter `catalog.stitchingStrategy.mode`, + which can have the values `'immediate'` (default) and `'deferred'`. The default + is for stitching to work as it did before this change, which means that it + happens "in-band" (blocking) immediately when each processing task finishes. + When set to `'deferred'`, stitching is instead deferred to happen on a separate + asynchronous worker queue just like processing. + + Deferred stitching should make performance smoother when ingesting large amounts + of entities, and reduce p99 processing times and repeated over-stitching of + hot spot entities when fan-out/fan-in in terms of relations is very large. It + does however also come with some performance cost due to the queuing with how + much wall-clock time some types of task take. + +### Patch Changes + +- 6694b369a3: Update the OpenAPI spec with more complete error responses and request bodies using Optic. Also, updates the test cases to use the new `supertest` pass through from `@backstage/backend-openapi-utils`. +- 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/integration@1.7.2 + - @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/plugin-permission-common@0.7.10 + - @backstage/backend-openapi-utils@0.1.0 + - @backstage/plugin-search-backend-module-catalog@0.1.11 + - @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-catalog-common@1.0.18 + - @backstage/plugin-events-node@0.2.16 + - @backstage/plugin-permission-node@0.7.18 + +## @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.0 + +### Minor Changes + +- 785fb1ea75: Adds a new catalog module for ingesting Backstage plugin OpenAPI specs into the catalog for display as an API entity. + +### Patch Changes + +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- 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/backend-openapi-utils@0.1.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## @backstage/plugin-catalog-graph@0.3.0 + +### Minor Changes + +- a604623324: Add the entire `Entity` to `EntityNodeData` and deprecate `name`, `kind`, `title`, `namespace` and `spec`. + + To get the deprecated properties in your custom component you can use: + + ```typescript + import { DEFAULT_NAMESPACE } from '@backstage/catalog-model'; + + const { + kind, + metadata: { name, namespace = DEFAULT_NAMESPACE, title }, + } = entity; + ``` + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 62b5922916: Internal theme type updates +- 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-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/types@1.1.1 + +## @backstage/plugin-catalog-node@1.5.0 + +### Minor Changes + +- e5bf3749ad: Support adding location analyzers in new catalog analysis extension point and move `AnalyzeOptions` and `ScmLocationAnalyzer` types to `@backstage/plugin-catalog-node` + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.7 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + +## @backstage/plugin-catalog-react@1.9.0 + +### Minor Changes + +- 1e5b7d993a: Added an `EntityPresentationApi` and associated `entityPresentationApiRef`. This + API lets you control how references to entities (e.g. in links, headings, + iconography etc) are represented in the user interface. + + Usage of this API is initially added to the `EntityRefLink` and `EntityRefLinks` + components, so that they can render richer, more correct representation of + entity refs. There's also a new `EntityDisplayName` component, which works just like + the `EntityRefLink` but without the link. + + Along with that change, the `fetchEntities` and `getTitle` props of + `EntityRefLinksProps` are deprecated and no longer used, since the same need + instead is fulfilled (and by default always enabled) by the + `entityPresentationApiRef`. + +- 1fd53fa0c6: The `UserListPicker` component has undergone improvements to enhance its performance. + + The previous implementation inferred the number of owned and starred entities based on the entities available in the `EntityListContext`. The updated version no longer relies on the `EntityListContext` for inference, allowing for better decoupling. + + The component now loads the entities' count asynchronously, resulting in improved performance and responsiveness. For this purpose, some of the exported filters such as `EntityTagFilter`, `EntityOwnerFilter`, `EntityLifecycleFilter` and `EntityNamespaceFilter` have now the `getCatalogFilters` method implemented. + +### Patch Changes + +- 2ad1bacef7: Add EntityRef to Entity Inspector UI +- 6c2b872153: Add official support for React 18. +- 69ee8d75f4: Remove `button` prop from used MaterialUI `MenuItem` component fixing incompatibility with MaterialUI v5. +- 0bf6ebda88: Added new APIs at the `/alpha` subpath for creating entity page cards and content for the new frontend system. +- 77f009b35d: Internal updates to match changes in the experimental `@backstage/frontend-plugin-api`. +- 71c97e7d73: The `spec.type` field in entities will now always be rendered as a string. +- 69c14904b6: Move the `EntityRefLink` icon to the left hand side as per Material-UI guidelines +- 000dcd01af: Removed unnecessary `@backstage/integration` dependency, replaced by `@backstage/integration-react`. +- 6c357184e2: Export `MissingAnnotationEmptyState` from `@backstage/plugin-catalog-react` +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/integration-react@1.1.21 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-permission-react@0.4.17 + - @backstage/version-bridge@1.0.7 + - @backstage/theme@0.4.4 + - @backstage/catalog-client@1.4.6 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + +## @backstage/plugin-graphiql@0.3.0 + +### Minor Changes + +- 57fda44b90: Upgrade to GraphiQL to 3.0.6 + +### Patch Changes + +- 68fc9dc60e: Updated alpha exports according to routing changes in `@backstage/frontend-plugin-api`. +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- 77f009b35d: Internal updates to match changes in the experimental `@backstage/frontend-plugin-api`. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + +## @backstage/plugin-playlist@0.2.0 + +### Minor Changes + +- f0e2ef3b81: Support being able to define custom composable Playlist index pages + + **BREAKING** The individual `PlaylistPage` route must now be manually hooked up by making the following change to your setup: + + ```diff + -import { PlaylistIndexPage } from '@backstage/plugin-playlist'; + +import { PlaylistIndexPage, PlaylistPage } from '@backstage/plugin-playlist'; + + // ... + + } /> + +} /> + ``` + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 69ee8d75f4: Remove `button` prop from used MaterialUI `MenuItem` component fixing incompatibility with MaterialUI v5. +- 62b5922916: Internal theme type updates +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-permission-react@0.4.17 + - @backstage/plugin-search-react@1.7.2 + - @backstage/theme@0.4.4 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-playlist-common@0.1.12 + +## @backstage/plugin-scaffolder@1.16.0 + +### Minor Changes + +- f28c11743a: Add a possibility to use a formatter on a warning panel. Applied it for a scaffolder template +- 3fdffbb699: Release design improvements for the `Scaffolder` plugin and support v5 of `@rjsf/*` libraries. + + This change should be non-breaking. If you're seeing typescript issues after migrating please [open an issue](https://github.com/backstage/backstage/issues/new/choose) + + The `next` versions like `createNextFieldExtension` and `NextScaffolderPage` have been promoted to the public interface under `createScaffolderFieldExtension` and `ScaffolderPage`, so any older imports which are no longer found will need updating from `@backstage/plugin-scaffolder/alpha` or `@backstage/plugin-scaffolder-react/alpha` will need to be imported from `@backstage/plugin-scaffolder` and `@backstage/plugin-scaffolder-react` respectively. + + The legacy versions are now available in `/alpha` under `createLegacyFieldExtension` and `LegacyScaffolderPage` if you're running into issues, but be aware that these will be removed in a next mainline release. + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 69ee8d75f4: Remove `button` prop from used MaterialUI `MenuItem` component fixing incompatibility with MaterialUI v5. +- c838da0edd: Updated dependency `@rjsf/utils` to `5.13.6`. + Updated dependency `@rjsf/core` to `5.13.6`. + Updated dependency `@rjsf/material-ui` to `5.13.6`. + Updated dependency `@rjsf/validator-ajv8` to `5.13.6`. +- 26e4d916d5: Title and description in RepoUrlPicker are now correctly displayed. +- 69c14904b6: Use `EntityRefLinks` with `hideIcons` property to avoid double icons +- 62b5922916: Internal theme type updates +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/plugin-scaffolder-common@1.4.3 + - @backstage/integration@1.7.2 + - @backstage/integration-react@1.1.21 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-permission-react@0.4.17 + - @backstage/plugin-scaffolder-react@1.6.0 + - @backstage/theme@0.4.4 + - @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-catalog-common@1.0.18 + +## @backstage/plugin-scaffolder-backend@1.19.0 + +### Minor Changes + +- f3ab9cfcb7: Made shut down stale tasks configurable. + + There are two properties exposed: + + - `scaffolder.processingInterval` - sets the processing interval for staled tasks. + - `scaffolder.taskTimeoutJanitorFrequency` - sets the task's heartbeat timeout, when to consider a task to be staled. + +- 7d5a921114: Allow using `globby`'s negative matching with `copyWithoutTemplating`/`copyWithoutRender`. This allows including an entire subdirectory while excluding a single file so that it will still be templated instead of needing to list every other file and ensure the list is updated when new files are added. + +- 5e4127c18e: Allow setting `update: true` in `publish:github:pull-request` scaffolder action + +### Patch Changes + +- 0920fd02ac: Add examples for `github:environment:create` scaffolder action & improve related tests +- ae30a9ae8c: Added description for publish:gerrit scaffolder actions +- 013611b42e: `knex` has been bumped to major version 3 and `better-sqlite3` to major version 9, which deprecate node 16 support. +- 23f72b2cba: Refactoring the runner to generate minimally informative task log per iteration and properly validate iterated actions. +- 8613ba3928: Switched to using `"exports"` field for `/alpha` subpath export. +- 99d4936f6c: Add examples for `github:webhook` scaffolder action & improve related tests +- 2be3922eb8: Add examples for `github:deployKey:create` scaffolder action & improve related tests +- 76d07da66a: Make it possible to define control buttons text (Back, Create, Review) per template +- f8727ad228: Add examples for `publish:github:pull-request` scaffolder action & improve related tests +- Updated dependencies + - @backstage/plugin-catalog-backend@1.15.0 + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/plugin-scaffolder-common@1.4.3 + - @backstage/integration@1.7.2 + - @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/plugin-permission-common@0.7.10 + - @backstage/plugin-scaffolder-node@0.2.8 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.4 + - @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-catalog-common@1.0.18 + - @backstage/plugin-permission-node@0.7.18 + +## @backstage/plugin-scaffolder-react@1.6.0 + +### Minor Changes + +- 3fdffbb699: Release design improvements for the `Scaffolder` plugin and support v5 of `@rjsf/*` libraries. + + This change should be non-breaking. If you're seeing typescript issues after migrating please [open an issue](https://github.com/backstage/backstage/issues/new/choose) + + The `next` versions like `createNextFieldExtension` and `NextScaffolderPage` have been promoted to the public interface under `createScaffolderFieldExtension` and `ScaffolderPage`, so any older imports which are no longer found will need updating from `@backstage/plugin-scaffolder/alpha` or `@backstage/plugin-scaffolder-react/alpha` will need to be imported from `@backstage/plugin-scaffolder` and `@backstage/plugin-scaffolder-react` respectively. + + The legacy versions are now available in `/alpha` under `createLegacyFieldExtension` and `LegacyScaffolderPage` if you're running into issues, but be aware that these will be removed in a next mainline release. + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 171a99816b: Fixed `backstage:featureFlag` in `scaffolder/next` by sorting out `manifest.steps`. +- c838da0edd: Updated dependency `@rjsf/utils` to `5.13.6`. + Updated dependency `@rjsf/core` to `5.13.6`. + Updated dependency `@rjsf/material-ui` to `5.13.6`. + Updated dependency `@rjsf/validator-ajv8` to `5.13.6`. +- 69c14904b6: Use `EntityRefLinks` with `hideIcons` property to avoid double icons +- 62b5922916: Internal theme type updates +- dda56ae265: Preserve step's time execution for a non-running task. +- 76d07da66a: Make it possible to define control buttons text (Back, Create, Review) per template +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/plugin-scaffolder-common@1.4.3 + - @backstage/core-plugin-api@1.8.0 + - @backstage/version-bridge@1.0.7 + - @backstage/theme@0.4.4 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/plugin-search-backend-module-stack-overflow-collator@0.1.0 + +### Minor Changes + +- 46f0f1700e: Extract a package for the Stack Overflow new backend system plugin. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-node@1.2.11 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/config@1.1.1 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-techdocs@1.9.0 + +### Minor Changes + +- 17f93d5589: A new analytics event `not-found` will be published when a user visits a documentation site that does not exist + +### Patch Changes + +- 4728b3960d: Fixed navigation bug that caused users to not be scrolled to the top of a new page. Fixed navigation bug where using backwards and forwards browser navigation did not scroll users to the correct place on the TechDoc page. +- a3add7a682: Export alpha routes and nav item extension, only available for applications that uses the new Frontend system. +- 71c97e7d73: The \`spec.lifecycle' field in entities will now always be rendered as a string. +- 68fc9dc60e: Updated alpha exports according to routing changes in `@backstage/frontend-plugin-api`. +- 6c2b872153: Add official support for React 18. +- 0bf6ebda88: Added entity page content for the new plugin exported via `/alpha`. +- 67cc85bb14: Switched the conditional `react-dom/client` import to use `import(...)` rather than `require(...)`. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- 38cda52746: Added support for React 18. The new `createRoot` API from `react-dom/client` will now be used if present. +- 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/frontend-plugin-api@0.3.0 + - @backstage/integration@1.7.2 + - @backstage/integration-react@1.1.21 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-techdocs-react@1.1.13 + - @backstage/plugin-search-react@1.7.2 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-techdocs-backend@1.9.0 + +### Minor Changes + +- 67cff7b06f: Expose an extension point to set a custom build strategy. Also move `DocsBuildStrategy` type to `@backstage/plugin-techdocs-node` and deprecate `ShouldBuildParameters` type. + +### Patch Changes + +- c3c5c7e514: Add info about the entity when tech docs fail to build +- 48a61bfdca: Fix potential memory leak by not creating a build log transport if not given via `RouterOptions`. +- 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-techdocs-node@1.10.0 + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-search-backend-module-techdocs@0.1.11 + - @backstage/catalog-client@1.4.6 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-techdocs-node@1.10.0 + +### Minor Changes + +- 67cff7b06f: Expose an extension point to set a custom build strategy. Also move `DocsBuildStrategy` type to `@backstage/plugin-techdocs-node` and deprecate `ShouldBuildParameters` type. + +### Patch Changes + +- e61a975f61: Switch to `@smithy/node-http-handler` instead of the `@aws-sdk/node-http-handler` +- 3d043526f4: Updated dependency `aws-sdk-client-mock` to `^3.0.0`. +- Updated dependencies + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/integration-aws-node@0.1.8 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-vault-backend@0.4.0 + +### Minor Changes + +- a873a32a1f: Added support for the [new backend system](https://backstage.io/docs/backend-system/). + + In your `packages/backend/src/index.ts` make the following changes: + + ```diff + import { createBackend } from '@backstage/backend-defaults'; + const backend = createBackend(); + // ... other feature additions + + backend.add(import('@backstage/plugin-vault-backend'); + backend.start(); + ``` + + If you use the new backend system, the token renewal task can be defined via configuration file: + + ```diff + vault: + baseUrl: + token: + schedule: + + frequency: ... + + timeout: ... + + # Other schedule options, such as scope or initialDelay + ``` + + If the `schedule` is omitted or set to `false` no token renewal task will be scheduled. + If the value of `schedule` is set to `true` the renew will be scheduled hourly (the default). + In other cases (like in the diff above), the defined schedule will be used. + + **DEPRECATIONS**: The interface `VaultApi` and the type `VaultSecret` are now deprecated. Import them from `@backstage/plugin-vault-node`. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-vault-node@0.1.0 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## @backstage/plugin-vault-node@0.1.0 + +### Minor Changes + +- 7a41bcf2af: Initial version of the \`plugin-vault-node\`\` package. It contains the extension point definitions + for the vault backend, as well as some types that will be deprecated in the backend plugin. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.7 + +## @backstage/app-defaults@1.4.5 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-permission-react@0.4.17 + - @backstage/core-app-api@1.11.1 + - @backstage/theme@0.4.4 + +## @backstage/backend-app-api@0.5.8 + +### Patch Changes + +- bc9a18d5ec: Added a workaround for double `default` wrapping when dynamically importing CommonJS modules with default exports. +- Updated dependencies + - @backstage/config-loader@1.5.3 + - @backstage/cli-node@0.2.0 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/cli-common@0.1.13 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.4.1 + - @backstage/plugin-permission-node@0.7.18 + +## @backstage/backend-common@0.19.9 + +### Patch Changes + +- aa13482090: Limit the database creation concurrency to one, defensively +- 013611b42e: `knex` has been bumped to major version 3 and `better-sqlite3` to major version 9, which deprecate node 16 support. +- 3d043526f4: Updated dependency `aws-sdk-client-mock` to `^3.0.0`. +- Updated dependencies + - @backstage/config-loader@1.5.3 + - @backstage/integration@1.7.2 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/integration-aws-node@0.1.8 + - @backstage/backend-app-api@0.5.8 + - @backstage/backend-dev-utils@0.1.2 + - @backstage/cli-common@0.1.13 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/backend-defaults@0.2.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-app-api@0.5.8 + +## @backstage/backend-plugin-api@0.6.7 + +### 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/backend-tasks@0.5.12 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.4.1 + +## @backstage/backend-tasks@0.5.12 + +### 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/backend-common@0.19.9 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/backend-test-utils@0.2.8 + +### Patch Changes + +- 013611b42e: `knex` has been bumped to major version 3 and `better-sqlite3` to major version 9, which deprecate node 16 support. +- bb688f7b3b: Ensure recursive deletion of temporary directories in tests +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-app-api@0.5.8 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.4.1 + +## @backstage/catalog-client@1.4.6 + +### Patch Changes + +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + +## @backstage/config-loader@1.5.3 + +### Patch Changes + +- 22ca64f117: Correctly resolve config targets into absolute paths +- 087bab5b42: Updated dependency `typescript-json-schema` to `^0.62.0`. +- Updated dependencies + - @backstage/cli-common@0.1.13 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/core-app-api@1.11.1 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 89d13e5618: Add current and default scopes when refreshing session +- 9ab0572217: Add component data `core.type` marker for `AppRouter` and `FlatRoutes`. +- Updated dependencies + - @backstage/core-plugin-api@1.8.0 + - @backstage/version-bridge@1.0.7 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + +## @backstage/core-components@0.13.8 + +### Patch Changes + +- 81c8db2088: Fix `RoutedTabs` so that it does not explode without tabs. + +- eb817ee6d4: Fix spacing inconsistency with links and labels in headers + +- f28c11743a: Add a possibility to use a formatter on a warning panel. Applied it for a scaffolder template + +- 6c2b872153: Add official support for React 18. + +- e07570a740: Fixed an issue causing the `Select` component to show empty chips when some of the selected values did not match any item + +- 7bdc1b0a12: Fixed compatibility with Safari <16.3 by eliminating RegEx lookbehind in `extractInitials`. + + This PR also changed how initials are generated resulting in _John Jonathan Doe_ => _JD_ instead of _JJ_. + +- 66071b42c0: Make the `options.titleFormat` prop of `` apply to all keys including nested ones. Previously, this option would only apply to the root keys of the `metadata` prop. + + Document and improve the props of ``. Previously, the `options` prop was `any`. + +- 71c97e7d73: Fixed the type declaration of `DependencyGraphProps`, the `defs` prop now expects `JSX.Element`s. + +- 0c5b78650c: Reverting the `MissingAnnotationEmptyState` component due to cyclical dependency. This component is now deprecated, please use the import from `@backstage/plugin-catalog-react` instead to use the new functionality + +- 4b7d341746: Updated dependency `linkify-react` to `4.1.2`. + +- 0ef24425c1: Updated dependency `linkifyjs` to `4.1.2`. + +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. + +- Updated dependencies + - @backstage/core-plugin-api@1.8.0 + - @backstage/version-bridge@1.0.7 + - @backstage/theme@0.4.4 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## @backstage/create-app@0.5.7 + +### Patch Changes + +- 770763487a: Cleaned up cases where deprecated code was being used but had a new location they should be imported from + +- 013611b42e: `knex` has been bumped to major version 3 and `better-sqlite3` to major version 9, which deprecate node 16 support. + + You can do the same in your own Backstage repository to ensure that you get future node 18+ relevant updates, by having the following lines in your `packages/backend/package.json`: + + "dependencies": { + // ... + "knex": "^3.0.0" + }, + "devDependencies": { + // ... + "better-sqlite3": "^9.0.0", + +- f577e1176f: Bumped create-app version. + +- 6c2b872153: Add official support for React 18. + +- ae1602e54d: If create app installs dependencies, don't suggest to user that they also need to do it. + +- e6b7ab8d2b: Added missing node-gyp dependency to fix Docker image build + +- Updated dependencies + - @backstage/cli-common@0.1.13 + +## @backstage/dev-utils@1.0.23 + +### Patch Changes + +- 67cc85bb14: Switched the conditional `react-dom/client` import to use `import(...)` rather than `require(...)`. +- 38cda52746: Added support for React 18. The new `createRoot` API from `react-dom/client` will now be used if present. +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/integration-react@1.1.21 + - @backstage/core-plugin-api@1.8.0 + - @backstage/app-defaults@1.4.5 + - @backstage/core-app-api@1.11.1 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + +## @backstage/integration@1.7.2 + +### Patch Changes + +- 243c655a68: JSDoc and Error message updates to handle `Azure Active Directory` re-brand to `Entra ID` +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/config@1.1.1 + +## @backstage/integration-aws-node@0.1.8 + +### Patch Changes + +- 20d97d28a3: Updated dependency `aws-sdk-client-mock-jest` to `^3.0.0`. +- 3d043526f4: Updated dependency `aws-sdk-client-mock` to `^3.0.0`. +- Updated dependencies + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## @backstage/integration-react@1.1.21 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/integration@1.7.2 + - @backstage/core-plugin-api@1.8.0 + - @backstage/config@1.1.1 + +## @backstage/release-manifests@0.0.11 + +### Patch Changes + +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. + +## @backstage/test-utils@1.4.5 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-permission-react@0.4.17 + - @backstage/core-app-api@1.11.1 + - @backstage/theme@0.4.4 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + +## @backstage/theme@0.4.4 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. + +## @backstage/version-bridge@1.0.7 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. + +## @backstage/plugin-adr@0.6.9 + +### 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/frontend-plugin-api@0.3.0 + - @backstage/integration-react@1.1.21 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-search-react@1.7.2 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + - @backstage/plugin-adr-common@0.2.17 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-adr-backend@0.4.4 + +### Patch Changes + +- 68f8a55622: Updated dependency `@types/marked` to `^5.0.0`. +- Updated dependencies + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-adr-common@0.2.17 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-adr-common@0.2.17 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.7.2 + - @backstage/catalog-model@1.4.3 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-airbrake@0.3.26 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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/test-utils@1.4.5 + - @backstage/theme@0.4.4 + - @backstage/dev-utils@1.0.23 + - @backstage/catalog-model@1.4.3 + +## @backstage/plugin-airbrake-backend@0.3.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/config@1.1.1 + +## @backstage/plugin-allure@0.1.42 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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/plugin-analytics-module-ga@0.1.35 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/config@1.1.1 + +## @backstage/plugin-analytics-module-ga4@0.1.6 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 504614d313: Updated dependency `@types/jest` to `^29.0.0`. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/config@1.1.1 + +## @backstage/plugin-analytics-module-newrelic-browser@0.0.4 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/config@1.1.1 + +## @backstage/plugin-apache-airflow@0.2.17 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + +## @backstage/plugin-api-docs-module-protoc-gen-doc@0.1.5 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. + +## @backstage/plugin-apollo-explorer@0.1.17 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + +## @backstage/plugin-app-backend@0.3.55 + +### 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/config-loader@1.5.3 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.7 + +## @backstage/plugin-app-node@0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.7 + +## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.7 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.4.1 + +## @backstage/plugin-auth-backend-module-github-provider@0.1.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-auth-node@0.4.1 + +## @backstage/plugin-auth-backend-module-gitlab-provider@0.1.4 + +### Patch Changes + +- a3236ad0ca: Fix link to the repository in `README.md`. +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-auth-node@0.4.1 + +## @backstage/plugin-auth-backend-module-google-provider@0.1.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-auth-node@0.4.1 + +## @backstage/plugin-auth-backend-module-microsoft-provider@0.1.2 + +### Patch Changes + +- a3236ad0ca: Fix link to the repository in `README.md`. + +- 3979524c74: Added support for specifying a domain hint on the Microsoft authentication provider configuration. + +- fde212dd10: Re-add the missing profile photo + as well as access token retrieval for foreign scopes. + + Additionally, we switch from previously 48x48 to 96x96 + which is the size used at the profile card. + +- 5aeb14f035: Correctly mark the client secret in configuration as secret + +- 2817115d09: Removed `prompt=consent` from start method to fix #20641 + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-auth-node@0.4.1 + +## @backstage/plugin-auth-backend-module-oauth2-provider@0.1.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-auth-node@0.4.1 + +## @backstage/plugin-auth-backend-module-pinniped-provider@0.1.1 + +### Patch Changes + +- a8f6afda4a: Introduced metadata cache for the `pinniped` provider. +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/config@1.1.1 + - @backstage/plugin-auth-node@0.4.1 + +## @backstage/plugin-auth-node@0.4.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @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-azure-devops@0.3.8 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- ce9e59cbb3: Refactored the error handling for some of the hooks +- 361bb34d8e: Consolidated getting the annotation values into a single function to help with future changes +- 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-azure-devops-common@0.3.1 + +## @backstage/plugin-azure-devops-backend@0.4.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/config@1.1.1 + - @backstage/plugin-azure-devops-common@0.3.1 + +## @backstage/plugin-azure-sites@0.1.15 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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/plugin-azure-sites-common@0.1.1 + +## @backstage/plugin-azure-sites-backend@0.1.17 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/config@1.1.1 + - @backstage/plugin-azure-sites-common@0.1.1 + +## @backstage/plugin-badges@0.2.50 + +### 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-badges-backend@0.3.4 + +### Patch Changes + +- 013611b42e: `knex` has been bumped to major version 3 and `better-sqlite3` to major version 9, which deprecate node 16 support. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-auth-node@0.4.1 + +## @backstage/plugin-bazaar@0.2.18 + +### Patch Changes + +- c6e7940ccf: Updated Readme document in bazaar plugin +- 4e66e37bd1: Added alert popup for link and unlink entity in bazaar project +- c5aad900e3: Adding descending sort in a bazaar plugin +- 6c2b872153: Add official support for React 18. +- 69ee8d75f4: Remove `button` prop from used MaterialUI `MenuItem` component fixing incompatibility with MaterialUI v5. +- b3acba9091: Added alert popup in the bazaar plugin +- 1a40159acb: Removed unnecessary dependency on `@backstage/cli`. +- 62b5922916: Internal theme type updates +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/plugin-catalog@1.15.0 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + +## @backstage/plugin-bazaar-backend@0.3.5 + +### Patch Changes + +- 013611b42e: `knex` has been bumped to major version 3 and `better-sqlite3` to major version 9, which deprecate node 16 support. +- 8613ba3928: Switched to using `"exports"` field for `/alpha` subpath export. +- 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 + - @backstage/plugin-auth-node@0.4.1 + +## @backstage/plugin-bitbucket-cloud-common@0.2.14 + +### Patch Changes + +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/integration@1.7.2 + +## @backstage/plugin-bitrise@0.1.53 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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/plugin-catalog-backend-module-aws@0.3.1 + +### Patch Changes + +- 20d97d28a3: Updated dependency `aws-sdk-client-mock-jest` to `^3.0.0`. +- 3d043526f4: Updated dependency `aws-sdk-client-mock` to `^3.0.0`. +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/plugin-kubernetes-common@0.7.1 + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/integration-aws-node@0.1.8 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + +## @backstage/plugin-catalog-backend-module-azure@0.1.26 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + +## @backstage/plugin-catalog-backend-module-bitbucket@0.2.22 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/plugin-bitbucket-cloud-common@0.2.14 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/plugin-catalog-backend-module-bitbucket-cloud@0.1.22 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/integration@1.7.2 + - @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/plugin-bitbucket-cloud-common@0.2.14 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-events-node@0.2.16 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.1.20 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## @backstage/plugin-catalog-backend-module-gcp@0.1.7 + +### Patch Changes + +- 62180df4ee: Allow integration with kubernetes dashboard +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/plugin-kubernetes-common@0.7.1 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + +## @backstage/plugin-catalog-backend-module-gerrit@0.1.23 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## @backstage/plugin-catalog-backend-module-github@0.4.5 + +### Patch Changes + +- 88b673aa76: Import `AnalyzeOptions` and `ScmLocationAnalyzer` types from `@backstage/plugin-catalog-node` +- Updated dependencies + - @backstage/plugin-catalog-backend@1.15.0 + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/integration@1.7.2 + - @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/plugin-catalog-common@1.0.18 + - @backstage/plugin-events-node@0.2.16 + +## @backstage/plugin-catalog-backend-module-github-org@0.1.1 + +### Patch Changes + +- 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/plugin-catalog-backend-module-github@0.4.5 + - @backstage/config@1.1.1 + +## @backstage/plugin-catalog-backend-module-gitlab@0.3.4 + +### Patch Changes + +- d732f17610: Added try catch around fetching gitlab group users to prevent refresh from failing completely while only a select number of groups might not be able to load correctly. +- 0873a43ac1: Resolved a bug affecting the retrieval of users from group members. By appending '/all' to the API call, we now include members from all inherited groups, as per Gitlab's API specifications. This change is reflected in the listSaaSUsers function. +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.4.11 + +### 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-backend@1.15.0 + - @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/plugin-permission-common@0.7.10 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-events-node@0.2.16 + +## @backstage/plugin-catalog-backend-module-ldap@0.5.22 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/backend-tasks@0.5.12 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + +## @backstage/plugin-catalog-backend-module-msgraph@0.5.14 + +### Patch Changes + +- 224aa6f64c: export the function to read ms graph provider config +- 243c655a68: JSDoc and Error message updates to handle `Azure Active Directory` re-brand to `Entra ID` +- 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-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + +## @backstage/plugin-catalog-backend-module-openapi@0.1.24 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.15.0 + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + +## @backstage/plugin-catalog-backend-module-puppetdb@0.1.12 + +### Patch Changes + +- 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-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.4 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/plugin-scaffolder-common@1.4.3 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/catalog-model@1.4.3 + - @backstage/plugin-catalog-common@1.0.18 + +## @backstage/plugin-catalog-backend-module-unprocessed@0.3.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/backend-plugin-api@0.6.7 + - @backstage/catalog-model@1.4.3 + - @backstage/plugin-auth-node@0.4.1 + +## @backstage/plugin-catalog-common@1.0.18 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.10 + - @backstage/catalog-model@1.4.3 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-catalog-graphql@0.4.1 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + +## @backstage/plugin-catalog-import@0.10.2 + +### Patch Changes + +- 6db75b900a: Create an experimental plugin that is compatible with the declarative integration system, it is exported from the `/alpha` subpath. +- 6c2b872153: Add official support for React 18. +- dee1f39fcc: Fix missing children key warning on the default catalog import page. +- 71c97e7d73: The `app.title` configuration is now properly required to be a string. +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/integration@1.7.2 + - @backstage/integration-react@1.1.21 + - @backstage/core-plugin-api@1.8.0 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-catalog-common@1.0.18 + +## @backstage/plugin-catalog-unprocessed-entities@0.1.5 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- a11cdb9200: Added filtering and sorting to unprocessed entities tables. +- Updated dependencies + - @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-cicd-statistics@0.1.28 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-plugin-api@1.8.0 + - @backstage/catalog-model@1.4.3 + +## @backstage/plugin-cicd-statistics-module-gitlab@0.1.22 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-cicd-statistics@0.1.28 + - @backstage/catalog-model@1.4.3 + +## @backstage/plugin-circleci@0.3.26 + +### 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/plugin-cloudbuild@0.3.26 + +### Patch Changes + +- 8ae07cab4c: Added Installation Steps so that it is clear what is needed to install and use the Google Cloud Plugin. +- 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/plugin-code-climate@0.1.26 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 62b5922916: Internal theme type updates +- 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/plugin-code-coverage@0.2.19 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 71c97e7d73: The warning for missing code coverage will now render the entity as a reference. +- 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 + - @backstage/errors@1.2.3 + +## @backstage/plugin-code-coverage-backend@0.2.21 + +### Patch Changes + +- 11f671eaa9: Added support for new backend system +- 013611b42e: `knex` has been bumped to major version 3 and `better-sqlite3` to major version 9, which deprecate node 16 support. +- Updated dependencies + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-auth-node@0.4.1 + +## @backstage/plugin-codescene@0.1.19 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## @backstage/plugin-config-schema@0.1.47 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/plugin-cost-insights@0.12.15 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 69ee8d75f4: Remove `button` prop from used MaterialUI `MenuItem` component fixing incompatibility with MaterialUI v5. +- d49cffaf6a: Updated dependency `@types/pluralize` to `^0.0.33`. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- 7da799d5b7: Updated dependency `@types/pluralize` to `^0.0.32`. +- 62b5922916: Internal theme type updates +- 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 + - @backstage/plugin-cost-insights-common@0.1.2 + +## @backstage/plugin-devtools@0.1.6 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-permission-react@0.4.17 + - @backstage/theme@0.4.4 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-devtools-common@0.1.6 + +## @backstage/plugin-devtools-backend@0.2.4 + +### Patch Changes + +- Updated dependencies + - @backstage/config-loader@1.5.3 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/cli-common@0.1.13 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.4.1 + - @backstage/plugin-devtools-common@0.1.6 + - @backstage/plugin-permission-node@0.7.18 + +## @backstage/plugin-devtools-common@0.1.6 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.10 + - @backstage/types@1.1.1 + +## @backstage/plugin-dynatrace@8.0.0 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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/plugin-entity-feedback@0.2.9 + +### 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-entity-feedback-common@0.1.3 + +## @backstage/plugin-entity-feedback-backend@0.2.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/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/plugin-auth-node@0.4.1 + - @backstage/plugin-entity-feedback-common@0.1.3 + +## @backstage/plugin-entity-validation@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-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/plugin-catalog-common@1.0.18 + +## @backstage/plugin-events-backend@0.2.16 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/config@1.1.1 + - @backstage/plugin-events-node@0.2.16 + +## @backstage/plugin-events-backend-module-aws-sqs@0.2.10 + +### Patch Changes + +- 3d043526f4: Updated dependency `aws-sdk-client-mock` to `^3.0.0`. +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/plugin-events-node@0.2.16 + +## @backstage/plugin-events-backend-module-azure@0.1.17 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-events-node@0.2.16 + +## @backstage/plugin-events-backend-module-bitbucket-cloud@0.1.17 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-events-node@0.2.16 + +## @backstage/plugin-events-backend-module-gerrit@0.1.17 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-events-node@0.2.16 + +## @backstage/plugin-events-backend-module-github@0.1.17 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.7 + - @backstage/config@1.1.1 + - @backstage/plugin-events-node@0.2.16 + +## @backstage/plugin-events-backend-module-gitlab@0.1.17 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.7 + - @backstage/config@1.1.1 + - @backstage/plugin-events-node@0.2.16 + +## @backstage/plugin-events-backend-test-utils@0.1.17 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.16 + +## @backstage/plugin-events-node@0.2.16 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.7 + +## @backstage/plugin-explore@0.4.12 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- 62b5922916: Internal theme type updates +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-explore-react@0.0.33 + - @backstage/plugin-search-react@1.7.2 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/plugin-explore-common@0.0.2 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-explore-backend@0.0.17 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/plugin-explore-common@0.0.2 + - @backstage/plugin-search-backend-module-explore@0.1.11 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-explore-react@0.0.33 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-explore-common@0.0.2 + +## @backstage/plugin-firehydrant@0.2.10 + +### 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/plugin-fossa@0.2.58 + +### 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/errors@1.2.3 + +## @backstage/plugin-gcalendar@0.3.20 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- 62b5922916: Internal theme type updates +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/errors@1.2.3 + +## @backstage/plugin-gcp-projects@0.3.43 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + +## @backstage/plugin-git-release-manager@0.3.39 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/integration@1.7.2 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + +## @backstage/plugin-github-actions@0.6.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 +- ee0c44ce62: Fixed an issue that was preventing the sorting of workflow runs by their status. +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/integration@1.7.2 + - @backstage/integration-react@1.1.21 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + +## @backstage/plugin-github-deployments@0.1.57 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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/integration@1.7.2 + - @backstage/integration-react@1.1.21 + - @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-github-issues@0.2.15 + +### 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/integration@1.7.2 + - @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-github-pull-requests-board@0.1.20 + +### 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/integration@1.7.2 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + +## @backstage/plugin-gitops-profiles@0.3.42 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/config@1.1.1 + +## @backstage/plugin-gocd@0.1.32 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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/errors@1.2.3 + +## @backstage/plugin-graphql-backend@0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/plugin-catalog-graphql@0.4.1 + - @backstage/config@1.1.1 + +## @backstage/plugin-graphql-voyager@0.1.9 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + +## @backstage/plugin-home@0.5.10 + +### Patch Changes + +- d86b2acec4: Fix bug where `retrieveAll` method wasn't fetching visits + +- 3fdffbb699: Remove the duplicate versions of `@rjsf/*` as they're no longer needed + +- 6c2b872153: Add official support for React 18. + +- 5b364984bf: Added experimental support for declarative integration via the `/alpha` subpath. + +- c838da0edd: Updated dependency `@rjsf/utils` to `5.13.6`. + Updated dependency `@rjsf/core` to `5.13.6`. + Updated dependency `@rjsf/material-ui` to `5.13.6`. + Updated dependency `@rjsf/validator-ajv8` to `5.13.6`. + +- cc0e8d0b51: Temporarily pin the `react-grid-layout` sub-dependency to version `1.3.4` while the horizontal resizing of the latest version is not fixed. For more details, see [#20712](https://github.com/backstage/backstage/issues/20712). + +- 302316d231: Added a new Featured Docs component to `plugin-home`, which can display any entity given a filter. + + import { FeaturedDocsCard } from '@backstage/plugin-home'; + + + + See the [storybook examples](https://backstage.io/storybook/?path=/story/plugins-home-components-featureddocs--default) + +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/core-plugin-api@1.8.0 + - @backstage/core-app-api@1.11.1 + - @backstage/plugin-home-react@0.1.5 + - @backstage/theme@0.4.4 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + +## @backstage/plugin-home-react@0.1.5 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- c838da0edd: Updated dependency `@rjsf/utils` to `5.13.6`. + Updated dependency `@rjsf/core` to `5.13.6`. + Updated dependency `@rjsf/material-ui` to `5.13.6`. + Updated dependency `@rjsf/validator-ajv8` to `5.13.6`. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + +## @backstage/plugin-ilert@0.2.15 + +### 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-jenkins@0.9.1 + +### 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/errors@1.2.3 + - @backstage/plugin-jenkins-common@0.1.21 + +## @backstage/plugin-jenkins-backend@0.3.1 + +### Patch Changes + +- 4bfb878807: Updated dependency `@types/jenkins` to `^1.0.0`. +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/catalog-client@1.4.6 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-auth-node@0.4.1 + - @backstage/plugin-jenkins-common@0.1.21 + - @backstage/plugin-permission-node@0.7.18 + +## @backstage/plugin-jenkins-common@0.1.21 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-catalog-common@1.0.18 + +## @backstage/plugin-kafka@0.3.26 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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 + +## @backstage/plugin-kafka-backend@0.3.5 + +### Patch Changes + +- 8613ba3928: Switched to using `"exports"` field for `/alpha` subpath export. +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## @backstage/plugin-kubernetes@0.11.1 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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/plugin-kubernetes-common@0.7.1 + - @backstage/plugin-kubernetes-react@0.1.1 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/plugin-kubernetes-backend@0.13.1 + +### Patch Changes + +- 62180df4ee: Allow storing dashboard parameters for kubernetes in catalog +- df40b067e1: Fixed the lack of `resourcequotas` as part of the Default Objects to fetch from the kubernetes api +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/plugin-kubernetes-common@0.7.1 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/integration-aws-node@0.1.8 + - @backstage/catalog-client@1.4.6 + - @backstage/plugin-permission-common@0.7.10 + - @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-kubernetes-node@0.1.1 + - @backstage/plugin-permission-node@0.7.18 + +## @backstage/plugin-kubernetes-cluster@0.0.2 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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/plugin-kubernetes-common@0.7.1 + - @backstage/plugin-kubernetes-react@0.1.1 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## @backstage/plugin-kubernetes-common@0.7.1 + +### Patch Changes + +- 62180df4ee: Allow storing dashboard parameters for kubernetes in catalog +- df40b067e1: Fixed the lack of `resourcequotas` as part of the Default Objects to fetch from the kubernetes api +- Updated dependencies + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/plugin-kubernetes-node@0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-common@0.7.1 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/catalog-model@1.4.3 + +## @backstage/plugin-kubernetes-react@0.1.1 + +### Patch Changes + +- 0f4cad6da0: Internal refactor to avoid a null pointer problem + +- 6c2b872153: Add official support for React 18. + +- b52f576f48: Make sure types exported by other `kubernetes` plugins in the past are exported again after the creation + of the react package. + + Some types have been moved to this new package but the export was missing, so they were not available anymore for developers. + +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/plugin-kubernetes-common@0.7.1 + - @backstage/core-plugin-api@1.8.0 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/plugin-lighthouse@0.4.11 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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 + - @backstage/plugin-lighthouse-common@0.1.4 + +## @backstage/plugin-lighthouse-backend@0.3.4 + +### Patch Changes + +- 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/types@1.1.1 + - @backstage/plugin-lighthouse-common@0.1.4 + +## @backstage/plugin-linguist@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 + +## @backstage/plugin-linguist-backend@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 + +## @backstage/plugin-microsoft-calendar@0.1.9 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 62b5922916: Internal theme type updates +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/errors@1.2.3 + +## @backstage/plugin-newrelic@0.3.42 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + +## @backstage/plugin-newrelic-dashboard@0.3.1 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + +## @backstage/plugin-nomad@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 + +## @backstage/plugin-nomad-backend@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 + +## @backstage/plugin-octopus-deploy@0.2.8 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4d2f72c572: Added Deep link into Octopus Deploy project from the Release Table. +- 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/plugin-opencost@0.2.2 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + +## @backstage/plugin-org@0.6.16 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 62b5922916: Internal theme type updates +- 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/plugin-org-react@0.1.15 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 62b5922916: Internal theme type updates +- 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-client@1.4.6 + - @backstage/catalog-model@1.4.3 + +## @backstage/plugin-pagerduty@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 + +## @backstage/plugin-periskop@0.1.24 + +### 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-periskop-backend@0.2.5 + +### Patch Changes + +- 8613ba3928: Switched to using `"exports"` field for `/alpha` subpath export. +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/config@1.1.1 + +## @backstage/plugin-permission-backend@0.5.30 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-auth-node@0.4.1 + - @backstage/plugin-permission-node@0.7.18 + +## @backstage/plugin-permission-backend-module-allow-all-policy@0.1.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-auth-node@0.4.1 + - @backstage/plugin-permission-node@0.7.18 + +## @backstage/plugin-permission-common@0.7.10 + +### Patch Changes + +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/plugin-permission-node@0.7.18 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-auth-node@0.4.1 + +## @backstage/plugin-permission-react@0.4.17 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/config@1.1.1 + +## @backstage/plugin-playlist-backend@0.3.11 + +### 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/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/catalog-client@1.4.6 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-auth-node@0.4.1 + - @backstage/plugin-permission-node@0.7.18 + - @backstage/plugin-playlist-common@0.1.12 + +## @backstage/plugin-playlist-common@0.1.12 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.10 + +## @backstage/plugin-proxy-backend@0.4.5 + +### Patch Changes + +- 8613ba3928: Switched to using `"exports"` field for `/alpha` subpath export. +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/config@1.1.1 + +## @backstage/plugin-puppetdb@0.1.9 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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/errors@1.2.3 + +## @backstage/plugin-rollbar@0.4.26 + +### 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/plugin-rollbar-backend@0.1.52 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/config@1.1.1 + +## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.8 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/plugin-scaffolder-node@0.2.8 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.31 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/plugin-scaffolder-node@0.2.8 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder-backend-module-gitlab@0.2.10 + +### Patch Changes + +- 26ca97ebaa: Add examples for `gitlab:projectAccessToken:create` scaffolder action & improve related tests +- Updated dependencies + - @backstage/integration@1.7.2 + - @backstage/plugin-scaffolder-node@0.2.8 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## @backstage/plugin-scaffolder-backend-module-rails@0.4.24 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/plugin-scaffolder-node@0.2.8 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder-backend-module-sentry@0.1.15 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.2.8 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.2.28 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.2.8 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder-common@1.4.3 + +### Patch Changes + +- 2e0cef42ab: Add missing required property `type` in `Template.v1beta3.schema.json` schema +- 76d07da66a: Make it possible to define control buttons text (Back, Create, Review) per template +- Updated dependencies + - @backstage/plugin-permission-common@0.7.10 + - @backstage/catalog-model@1.4.3 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder-node@0.2.8 + +### Patch Changes + +- 8613ba3928: Switched to using `"exports"` field for `/alpha` subpath export. +- Updated dependencies + - @backstage/plugin-scaffolder-common@1.4.3 + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/plugin-search@1.4.2 + +### Patch Changes + +- 68fc9dc60e: Updated alpha exports according to routing changes in `@backstage/frontend-plugin-api`. +- 6c2b872153: Add official support for React 18. +- 62b5922916: Internal theme type updates +- fa11120050: Fixed incorrect plugin ID in `/alpha` export. +- 71c97e7d73: Minor internal code cleanup. +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/core-plugin-api@1.8.0 + - @backstage/version-bridge@1.0.7 + - @backstage/plugin-search-react@1.7.2 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-search-backend@1.4.7 + +### Patch Changes + +- 6694b369a3: Update the OpenAPI spec with more complete error responses and request bodies using Optic. Also, updates the test cases to use the new `supertest` pass through from `@backstage/backend-openapi-utils`. +- Updated dependencies + - @backstage/plugin-search-backend-node@1.2.11 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/backend-openapi-utils@0.1.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.4.1 + - @backstage/plugin-permission-node@0.7.18 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-search-backend-module-catalog@0.1.11 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/plugin-search-backend-node@1.2.11 + - @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/plugin-permission-common@0.7.10 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-search-backend-module-elasticsearch@1.3.10 + +### Patch Changes + +- 006df4a581: Support AWS OpenSearch Serverless search backend. Does not support `_refresh` endpoint. +- Updated dependencies + - @backstage/plugin-search-backend-node@1.2.11 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/integration-aws-node@0.1.8 + - @backstage/config@1.1.1 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-search-backend-module-explore@0.1.11 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-node@1.2.11 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/config@1.1.1 + - @backstage/plugin-explore-common@0.0.2 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-search-backend-module-pg@0.5.16 + +### Patch Changes + +- 2b4cd1ccae: Optimize outdated documents deletion logic in PgSearchEngine DatabaseDocumentStore which significantly reduces cost on large tables +- 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-search-backend-node@1.2.11 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/config@1.1.1 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-search-backend-module-techdocs@0.1.11 + +### Patch Changes + +- c437253b7a: The process of adding or modifying fields in the techdocs search index has been simplified. For more details, see [How to customize fields in the Software Catalog or TechDocs index](https://backstage.io/docs/features/search/how-to-guides.md#how-to-customize-fields-in-the-software-catalog-or-techdocs-index). +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/plugin-techdocs-node@1.10.0 + - @backstage/plugin-search-backend-node@1.2.11 + - @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/plugin-permission-common@0.7.10 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-search-backend-node@1.2.11 + +### Patch Changes + +- b168d7e7ea: Fix highlighting for non-string fields on the `Lunr` search engine implementation. +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-search-common@1.2.8 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.10 + - @backstage/types@1.1.1 + +## @backstage/plugin-search-react@1.7.2 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- f48cde800a: Emit search analytics in the search hook instead of in a dedicated component +- f75caf9f3d: Fixed a rare occurrence where a race in the search bar could throw away user input or cause the clear button not to work. +- 77f009b35d: Internal updates to match changes in the experimental `@backstage/frontend-plugin-api`. +- a539643cba: Minor refactor of search bar analytics capture +- 71c97e7d73: The filter options passed to `SearchResultGroupLayout` are now always explicitly rendered as strings by default. +- e7c09c4f4b: Use default extensions boundary and suspense on the alpha declarative `createSearchResultListItem` extension factory. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/frontend-app-api@0.3.0 + - @backstage/core-plugin-api@1.8.0 + - @backstage/version-bridge@1.0.7 + - @backstage/theme@0.4.4 + - @backstage/types@1.1.1 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-sentry@0.5.11 + +### 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/plugin-shortcuts@0.3.16 + +### Patch Changes + +- 55725922a5: Ensure that shortcuts aren't duplicate-checked against themselves +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/types@1.1.1 + +## @backstage/plugin-sonarqube@0.7.8 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- 62b5922916: Internal theme type updates +- 8613ba3928: Switched to using `"exports"` field for `/alpha` subpath export. +- 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/plugin-sonarqube-react@0.1.10 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + +## @backstage/plugin-sonarqube-backend@0.2.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 + +## @backstage/plugin-sonarqube-react@0.1.10 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-plugin-api@1.8.0 + - @backstage/catalog-model@1.4.3 + +## @backstage/plugin-splunk-on-call@0.4.15 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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/plugin-stack-overflow@0.1.22 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- b168d7e7ea: Migrate package to the new Frontend system, the new module is distributed with a `/alpha` subpath. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-search-react@1.7.2 + - @backstage/plugin-home-react@0.1.5 + - @backstage/theme@0.4.4 + - @backstage/config@1.1.1 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-stack-overflow-backend@0.2.11 + +### Patch Changes + +- b168d7e7ea: Deprecate package in favor of the new `@backstage/plugin-search-backend-module-stack-overflow-collator` module. + + The search collator `requestParams` option is optional now, so its default value is `{ order: 'desc', sort: 'activity', site: 'stackoverflow' }` as defined in the `Try It` section on the [official Stack Overflow API documentation](https://api.stackexchange.com/docs/questions). + +- Updated dependencies + - @backstage/plugin-search-backend-module-stack-overflow-collator@0.1.0 + - @backstage/backend-common@0.19.9 + - @backstage/config@1.1.1 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-stackstorm@0.1.8 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/errors@1.2.3 + +## @backstage/plugin-tech-insights@0.3.18 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 62b5922916: Internal theme type updates +- 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/types@1.1.1 + - @backstage/plugin-tech-insights-common@0.2.12 + +## @backstage/plugin-tech-insights-backend@0.5.21 + +### Patch Changes + +- 013611b42e: `knex` has been bumped to major version 3 and `better-sqlite3` to major version 9, which deprecate node 16 support. +- 193ad022bb: Add `factRetrieverId` to the fact retriever's logger metadata. +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @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-tech-insights-common@0.2.12 + - @backstage/plugin-tech-insights-node@0.4.13 + +## @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.39 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-tech-insights-common@0.2.12 + - @backstage/plugin-tech-insights-node@0.4.13 + +## @backstage/plugin-tech-insights-node@0.4.13 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-tasks@0.5.12 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/plugin-tech-insights-common@0.2.12 + +## @backstage/plugin-tech-radar@0.6.10 + +### Patch Changes + +- 68fc9dc60e: Updated alpha exports according to routing changes in `@backstage/frontend-plugin-api`. +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.23 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/plugin-catalog@1.15.0 + - @backstage/plugin-techdocs@1.9.0 + - @backstage/integration-react@1.1.21 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-techdocs-react@1.1.13 + - @backstage/core-app-api@1.11.1 + - @backstage/plugin-search-react@1.7.2 + - @backstage/test-utils@1.4.5 + - @backstage/theme@0.4.4 + +## @backstage/plugin-techdocs-module-addons-contrib@1.1.2 + +### Patch Changes + +- 4728b3960d: Fixed navigation bug that caused users to not be scrolled to the top of a new page. Fixed navigation bug where using backwards and forwards browser navigation did not scroll users to the correct place on the TechDoc page. +- 6c2b872153: Add official support for React 18. +- 62b5922916: Internal theme type updates +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/integration@1.7.2 + - @backstage/integration-react@1.1.21 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-techdocs-react@1.1.13 + - @backstage/theme@0.4.4 + +## @backstage/plugin-techdocs-react@1.1.13 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/version-bridge@1.0.7 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + +## @backstage/plugin-todo@0.2.30 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 8613ba3928: Switched to using `"exports"` field for `/alpha` subpath export. +- 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-todo-backend@0.3.5 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/catalog-client@1.4.6 + - @backstage/backend-openapi-utils@0.1.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## @backstage/plugin-user-settings@0.7.12 + +### Patch Changes + +- 68fc9dc60e: Updated alpha exports according to routing changes in `@backstage/frontend-plugin-api`. +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/core-plugin-api@1.8.0 + - @backstage/core-app-api@1.11.1 + - @backstage/theme@0.4.4 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/plugin-user-settings-backend@0.2.6 + +### Patch Changes + +- dd0350379b: Added dependency on `@backstage/config` +- 013611b42e: `knex` has been bumped to major version 3 and `better-sqlite3` to major version 9, which deprecate node 16 support. +- 8613ba3928: Switched to using `"exports"` field for `/alpha` subpath export. +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @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-vault@0.1.21 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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/errors@1.2.3 + +## @backstage/plugin-xcmetrics@0.2.45 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 62b5922916: Internal theme type updates +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/errors@1.2.3 + +## example-app@0.2.89 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-api-docs@0.10.0 + - @backstage/plugin-catalog-import@0.10.2 + - @backstage/cli@0.24.0 + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/plugin-shortcuts@0.3.16 + - @backstage/plugin-home@0.5.10 + - @backstage/core-components@0.13.8 + - @backstage/plugin-catalog@1.15.0 + - @backstage/plugin-graphiql@0.3.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.2 + - @backstage/plugin-techdocs@1.9.0 + - @backstage/plugin-cloudbuild@0.3.26 + - @backstage/plugin-scaffolder@1.16.0 + - @backstage/frontend-app-api@0.3.0 + - @backstage/plugin-user-settings@0.7.12 + - @backstage/plugin-tech-radar@0.6.10 + - @backstage/plugin-search@1.4.2 + - @backstage/plugin-catalog-unprocessed-entities@0.1.5 + - @backstage/integration-react@1.1.21 + - @backstage/plugin-kubernetes-cluster@0.0.2 + - @backstage/plugin-microsoft-calendar@0.1.9 + - @backstage/plugin-newrelic-dashboard@0.3.1 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-permission-react@0.4.17 + - @backstage/plugin-scaffolder-react@1.6.0 + - @backstage/plugin-entity-feedback@0.2.9 + - @backstage/plugin-apache-airflow@0.2.17 + - @backstage/plugin-github-actions@0.6.7 + - @backstage/plugin-octopus-deploy@0.2.8 + - @backstage/plugin-stack-overflow@0.1.22 + - @backstage/plugin-techdocs-react@1.1.13 + - @backstage/app-defaults@1.4.5 + - @backstage/core-app-api@1.11.1 + - @backstage/plugin-catalog-graph@0.3.0 + - @backstage/plugin-code-coverage@0.2.19 + - @backstage/plugin-cost-insights@0.12.15 + - @backstage/plugin-tech-insights@0.3.18 + - @backstage/plugin-azure-devops@0.3.8 + - @backstage/plugin-gcp-projects@0.3.43 + - @backstage/plugin-search-react@1.7.2 + - @backstage/plugin-azure-sites@0.1.15 + - @backstage/plugin-kubernetes@0.11.1 + - @backstage/plugin-lighthouse@0.4.11 + - @backstage/plugin-stackstorm@0.1.8 + - @backstage/plugin-dynatrace@8.0.0 + - @backstage/plugin-gcalendar@0.3.20 + - @backstage/plugin-pagerduty@0.6.7 + - @backstage/plugin-airbrake@0.3.26 + - @backstage/plugin-circleci@0.3.26 + - @backstage/plugin-devtools@0.1.6 + - @backstage/plugin-linguist@0.1.11 + - @backstage/plugin-newrelic@0.3.42 + - @backstage/plugin-playlist@0.2.0 + - @backstage/plugin-puppetdb@0.1.9 + - @backstage/plugin-explore@0.4.12 + - @backstage/plugin-jenkins@0.9.1 + - @backstage/plugin-rollbar@0.4.26 + - @backstage/theme@0.4.4 + - @backstage/plugin-badges@0.2.50 + - @backstage/plugin-sentry@0.5.11 + - @backstage/plugin-kafka@0.3.26 + - @backstage/plugin-nomad@0.1.7 + - @backstage/plugin-gocd@0.1.32 + - @backstage/plugin-todo@0.2.30 + - @backstage/plugin-adr@0.6.9 + - @backstage/plugin-org@0.6.16 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-linguist-common@0.1.2 + - @backstage/plugin-search-common@1.2.8 + +## example-app-next@0.0.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-api-docs@0.10.0 + - @backstage/plugin-catalog-import@0.10.2 + - @backstage/cli@0.24.0 + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/plugin-shortcuts@0.3.16 + - @backstage/plugin-home@0.5.10 + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/plugin-catalog@1.15.0 + - @backstage/plugin-graphiql@0.3.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.2 + - @backstage/plugin-techdocs@1.9.0 + - @backstage/plugin-cloudbuild@0.3.26 + - @backstage/plugin-scaffolder@1.16.0 + - @backstage/frontend-app-api@0.3.0 + - @backstage/plugin-user-settings@0.7.12 + - @backstage/plugin-tech-radar@0.6.10 + - @backstage/plugin-search@1.4.2 + - @backstage/plugin-catalog-unprocessed-entities@0.1.5 + - @backstage/integration-react@1.1.21 + - @backstage/plugin-microsoft-calendar@0.1.9 + - @backstage/plugin-newrelic-dashboard@0.3.1 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-permission-react@0.4.17 + - @backstage/plugin-scaffolder-react@1.6.0 + - @backstage/plugin-entity-feedback@0.2.9 + - @backstage/plugin-apache-airflow@0.2.17 + - @backstage/plugin-github-actions@0.6.7 + - @backstage/plugin-octopus-deploy@0.2.8 + - @backstage/plugin-techdocs-react@1.1.13 + - @backstage/app-defaults@1.4.5 + - @backstage/core-app-api@1.11.1 + - @backstage/plugin-catalog-graph@0.3.0 + - @backstage/plugin-code-coverage@0.2.19 + - @backstage/plugin-cost-insights@0.12.15 + - @backstage/plugin-tech-insights@0.3.18 + - @backstage/plugin-azure-devops@0.3.8 + - @backstage/plugin-gcp-projects@0.3.43 + - @backstage/plugin-search-react@1.7.2 + - @backstage/plugin-azure-sites@0.1.15 + - @backstage/plugin-kubernetes@0.11.1 + - @backstage/plugin-lighthouse@0.4.11 + - @backstage/plugin-stackstorm@0.1.8 + - @backstage/plugin-dynatrace@8.0.0 + - @backstage/plugin-gcalendar@0.3.20 + - @backstage/plugin-pagerduty@0.6.7 + - @backstage/plugin-airbrake@0.3.26 + - @backstage/plugin-circleci@0.3.26 + - @backstage/plugin-devtools@0.1.6 + - @backstage/plugin-linguist@0.1.11 + - @backstage/plugin-newrelic@0.3.42 + - @backstage/plugin-playlist@0.2.0 + - @backstage/plugin-puppetdb@0.1.9 + - @backstage/plugin-explore@0.4.12 + - @backstage/plugin-jenkins@0.9.1 + - @backstage/plugin-rollbar@0.4.26 + - @backstage/theme@0.4.4 + - @backstage/plugin-badges@0.2.50 + - @backstage/plugin-sentry@0.5.11 + - @backstage/plugin-kafka@0.3.26 + - @backstage/plugin-gocd@0.1.32 + - @backstage/plugin-todo@0.2.30 + - @backstage/plugin-adr@0.6.9 + - @backstage/plugin-org@0.6.16 + - app-next-example-plugin@0.0.3 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/core-compat-api@0.0.1 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-linguist-common@0.1.2 + - @backstage/plugin-search-common@1.2.8 + +## app-next-example-plugin@0.0.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + +## example-backend@0.2.89 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.15.0 + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/plugin-search-backend-module-pg@0.5.16 + - @backstage/plugin-kubernetes-backend@0.13.1 + - @backstage/plugin-search-backend-node@1.2.11 + - @backstage/integration@1.7.2 + - @backstage/plugin-auth-backend@0.20.0 + - @backstage/backend-common@0.19.9 + - @backstage/plugin-techdocs-backend@1.9.0 + - @backstage/plugin-code-coverage-backend@0.2.21 + - @backstage/plugin-scaffolder-backend@1.19.0 + - @backstage/plugin-search-backend-module-elasticsearch@1.3.10 + - @backstage/plugin-search-backend@1.4.7 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.4 + - @backstage/plugin-entity-feedback-backend@0.2.4 + - @backstage/plugin-tech-insights-backend@0.5.21 + - @backstage/plugin-linguist-backend@0.5.4 + - @backstage/plugin-playlist-backend@0.3.11 + - @backstage/backend-tasks@0.5.12 + - @backstage/plugin-badges-backend@0.3.4 + - @backstage/plugin-app-backend@0.3.55 + - @backstage/plugin-search-backend-module-techdocs@0.1.11 + - @backstage/catalog-client@1.4.6 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-jenkins-backend@0.3.1 + - @backstage/plugin-adr-backend@0.4.4 + - @backstage/plugin-kafka-backend@0.3.5 + - @backstage/plugin-proxy-backend@0.4.5 + - example-app@0.2.89 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.4 + - @backstage/plugin-lighthouse-backend@0.3.4 + - @backstage/plugin-search-backend-module-catalog@0.1.11 + - @backstage/plugin-todo-backend@0.3.5 + - @backstage/plugin-devtools-backend@0.2.4 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/plugin-auth-node@0.4.1 + - @backstage/plugin-azure-devops-backend@0.4.4 + - @backstage/plugin-azure-sites-backend@0.1.17 + - @backstage/plugin-events-backend@0.2.16 + - @backstage/plugin-events-node@0.2.16 + - @backstage/plugin-explore-backend@0.0.17 + - @backstage/plugin-graphql-backend@0.2.1 + - @backstage/plugin-nomad-backend@0.1.9 + - @backstage/plugin-permission-backend@0.5.30 + - @backstage/plugin-permission-node@0.7.18 + - @backstage/plugin-rollbar-backend@0.1.52 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.8 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.24 + - @backstage/plugin-search-backend-module-explore@0.1.11 + - @backstage/plugin-search-common@1.2.8 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.39 + - @backstage/plugin-tech-insights-node@0.4.13 + +## example-backend-next@0.0.17 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.15.0 + - @backstage/plugin-kubernetes-backend@0.13.1 + - @backstage/plugin-search-backend-node@1.2.11 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.0 + - @backstage/plugin-techdocs-backend@1.9.0 + - @backstage/plugin-scaffolder-backend@1.19.0 + - @backstage/plugin-search-backend@1.4.7 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.4 + - @backstage/plugin-entity-feedback-backend@0.2.4 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-linguist-backend@0.5.4 + - @backstage/plugin-playlist-backend@0.3.11 + - @backstage/backend-tasks@0.5.12 + - @backstage/plugin-badges-backend@0.3.4 + - @backstage/plugin-app-backend@0.3.55 + - @backstage/plugin-search-backend-module-techdocs@0.1.11 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-jenkins-backend@0.3.1 + - @backstage/plugin-adr-backend@0.4.4 + - @backstage/plugin-proxy-backend@0.4.5 + - @backstage/plugin-catalog-backend-module-openapi@0.1.24 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.4 + - @backstage/plugin-lighthouse-backend@0.3.4 + - @backstage/plugin-search-backend-module-catalog@0.1.11 + - @backstage/plugin-todo-backend@0.3.5 + - @backstage/plugin-devtools-backend@0.2.4 + - @backstage/backend-defaults@0.2.7 + - @backstage/plugin-auth-node@0.4.1 + - @backstage/plugin-azure-devops-backend@0.4.4 + - @backstage/plugin-nomad-backend@0.1.9 + - @backstage/plugin-permission-backend@0.5.30 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.4 + - @backstage/plugin-permission-node@0.7.18 + - @backstage/plugin-search-backend-module-explore@0.1.11 + - @backstage/plugin-sonarqube-backend@0.2.9 + +## @backstage/backend-plugin-manager@0.0.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.15.0 + - @backstage/cli-node@0.2.0 + - @backstage/plugin-search-backend-node@1.2.11 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-scaffolder-node@0.2.8 + - @backstage/cli-common@0.1.13 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.4.1 + - @backstage/plugin-events-backend@0.2.16 + - @backstage/plugin-events-node@0.2.16 + - @backstage/plugin-permission-node@0.7.18 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/core-compat-api@0.0.1 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/core-plugin-api@1.8.0 + +## e2e-test@0.2.9 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.7 + - @backstage/cli-common@0.1.13 + - @backstage/errors@1.2.3 + +## techdocs-cli-embedded-app@0.2.88 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.24.0 + - @backstage/core-components@0.13.8 + - @backstage/plugin-catalog@1.15.0 + - @backstage/plugin-techdocs@1.9.0 + - @backstage/integration-react@1.1.21 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-techdocs-react@1.1.13 + - @backstage/app-defaults@1.4.5 + - @backstage/core-app-api@1.11.1 + - @backstage/test-utils@1.4.5 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + +## @internal/plugin-todo-list@1.0.19 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + +## @internal/plugin-todo-list-backend@1.0.19 + +### 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 + - @backstage/plugin-auth-node@0.4.1 + +## @internal/plugin-todo-list-common@1.0.15 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.10 diff --git a/docs/releases/v1.20.0.md b/docs/releases/v1.20.0.md new file mode 100644 index 0000000000..921b8219fb --- /dev/null +++ b/docs/releases/v1.20.0.md @@ -0,0 +1,50 @@ +--- +id: v1.20.0 +title: v1.20.0 +description: Backstage Release v1.20.0 +--- + +These are the release notes for the v1.20.0 release of [Backstage](https://backstage.io/). + +A huge thanks to the whole team of maintainers and contributors as well as the amazing Backstage Community for the hard work in getting this release developed and done. + +## Highlights + +### Support for experimental type build has been removed + +The `--experimental-type-build` option is no longer supported by any commands in the Backstage CLI. Existing usage should be migrated to using [subpath exports](https://backstage.io/docs/local-dev/cli-build-system#subpath-exports) instead. + +### Experimental support for Vite ⚡ + +Due to some concerns about performance in larger monorepo setups and hot-reloading times, we’re looking to replace [Webpack](https://webpack.js.org/) with [Vite](https://vitejs.dev/) longer term, and in this release we’re shipping experimental support for Vite behind an `EXPERIMENTAL_VITE` environment variable flag when running `yarn start` in the frontend. + +Please reach out by [creating a GitHub issue](https://github.com/backstage/backstage/issues/new/choose) with any problems that you might be running into when using this experimental feature. + +### Scaffolder: `react-jsonschema-form@v5` + Design tweaks 💅 + +It’s finally here. We’ve shipped support for `react-jsonschema-form@v5` which **should** be a completely non-breaking change for end users. We’ve also tweaked some of the designs for some of the new Scaffolder Pages. You can read more in the [relevant migration docs](https://backstage.io/docs/features/software-templates/migrating-to-rjsf-v5) + +### Catalog Presentation API + +The Catalog plugin now uses the `EntityPresentationApi` to decide how entities are rendered in the UI. This includes fetching catalog data in the background in order to show entities using their `metadata.title`. For more information, including how to customize the presentation, see [the PR](https://github.com/backstage/backstage/pull/17474), (documentation is in the works!). + +## Security Fixes + +This release does not contain any security fixes. + +## Upgrade path + +We recommend that you keep your Backstage project up to date with this latest release. For more guidance on how to upgrade, check out the documentation for [keeping Backstage updated](https://backstage.io/docs/getting-started/keeping-backstage-updated). + +## Links and References + +Below you can find a list of links and references to help you learn about and start using this new release. + +- [Backstage official website](https://backstage.io/), [documentation](https://backstage.io/docs/), and [getting started guide](https://backstage.io/docs/getting-started/) +- [GitHub repository](https://github.com/backstage/backstage) +- Backstage's [versioning and support policy](https://backstage.io/docs/overview/versioning-policy) +- [Community Discord](https://discord.gg/backstage-687207715902193673) for discussions and support +- [Changelog](https://github.com/backstage/backstage/tree/master/docs/releases/v1.20.0-changelog.md) +- Backstage [Demos](https://backstage.io/demos), [Blog](https://backstage.io/blog), [Roadmap](https://backstage.io/docs/overview/roadmap) and [Plugins](https://backstage.io/plugins) + +Sign up for our [newsletter](https://info.backstage.spotify.com/newsletter_subscribe) if you want to be informed about what is happening in the world of Backstage. diff --git a/docs/releases/v1.21.0-next.0-changelog.md b/docs/releases/v1.21.0-next.0-changelog.md new file mode 100644 index 0000000000..a306e4158b --- /dev/null +++ b/docs/releases/v1.21.0-next.0-changelog.md @@ -0,0 +1,3058 @@ +# Release v1.21.0-next.0 + +## @backstage/backend-common@0.20.0-next.0 + +### Minor Changes + +- 870db76a45: Implemented `readTree` for Gitea provider to support TechDocs functionality + +### Patch Changes + +- 7f04128bbc: Allow a default cache TTL to be set through the app config +- 1ad8906a9e: Use `Readable.from` to fix some of the stream issues +- 706fc3a7e1: Updated dependency `@kubernetes/client-node` to `0.20.0`. +- d15d483a49: Add command `--runAsDefaultUser` for `@techdocs/cli generate` to bypass running the docker builds as host user for macOS and Linux. +- d1e00aa17a: Expose an `onAuth` handler for `git` actions to provide custom credentials +- Updated dependencies + - @backstage/integration@1.8.0-next.0 + - @backstage/backend-app-api@0.5.9-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/backend-dev-utils@0.1.2 + - @backstage/cli-common@0.1.13 + - @backstage/config@1.1.1 + - @backstage/config-loader@1.5.3 + - @backstage/errors@1.2.3 + - @backstage/integration-aws-node@0.1.8 + - @backstage/types@1.1.1 + +## @backstage/frontend-test-utils@0.1.0-next.0 + +### Minor Changes + +- 59fabd5106: New testing utility library for `@backstage/frontend-app-api` and `@backstage/frontend-plugin-api`. + +### Patch Changes + +- 59fabd5106: Added `createExtensionTester` for rendering extensions in tests. +- Updated dependencies + - @backstage/frontend-app-api@0.3.1-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/test-utils@1.4.6-next.0 + - @backstage/types@1.1.1 + +## @backstage/integration@1.8.0-next.0 + +### Minor Changes + +- 870db76a45: Implemented `readTree` for Gitea provider to support TechDocs functionality + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.1.1 + +## @techdocs/cli@1.8.0-next.0 + +### Minor Changes + +- d15d483a49: Add command `--runAsDefaultUser` for `@techdocs/cli generate` to bypass running the docker builds as host user for macOS and Linux. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-techdocs-node@1.11.0-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/cli-common@0.1.13 + - @backstage/config@1.1.1 + +## @backstage/theme@0.5.0-next.0 + +### Minor Changes + +- 4d9e3b39e4: Added a global `OverrideComponentNameToClassKeys` for other plugins and packages to populate using module augmentation. This will in turn will provide component style override types for `createUnifiedTheme`. + +## @backstage/plugin-auth-backend-module-atlassian-provider@0.1.0-next.0 + +### Minor Changes + +- 2a5891e816: New module for `@backstage/plugin-auth-backend` that adds an atlassian auth provider + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + +## @backstage/plugin-catalog@1.16.0-next.0 + +### Minor Changes + +- b8e1eb2c0f: The `columns` prop can be an array or a function that returns an array in order to override the default columns of the `CatalogIndexPage`. + +### Patch Changes + +- bc7e6d3eb9: Fix copy entity url function in http contexts. + +- cd910c4fa5: - Fixes bug where after unregistering an entity you are redirected to `/`. + + - Adds an optional external route `unregisterRedirect` to override this behaviour to another route. + +- 03d0b6dcdc: The `convertLegacyRouteRef` utility used by the alpha exports is now imported from `@backstage/core-compat-api`. + +- 4d9e3b39e4: Register component overrides in the global `OverrideComponentNameToClassKeys` provided by `@backstage/theme`. This will in turn will provide component style override types for `createUnifiedTheme`. + +- 8587f067d2: Added pagination support to `CatalogIndexPage` + + `CatalogIndexPage` now offers an optional pagination feature, designed to accommodate adopters managing extensive catalogs. This new capability allows for better handling of large amounts of data. + + To activate the pagination mode, simply update your `App.tsx` as follows: + + ```diff + const routes = ( + + ... + - } /> + + } /> + ... + ``` + + In case you have a custom catalog page and you want to enable pagination, you need to pass the `pagination` prop to `EntityListProvider` instead. + +- Updated dependencies + - @backstage/core-compat-api@0.0.2-next.0 + - @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-search-react@1.7.4-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-scaffolder-common@1.4.3 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-kubernetes-backend@0.14.0-next.0 + +### Minor Changes + +- 52050ada6e: You can now select `single` kubernetes cluster that the entity is part-of from all your defined kubernetes clusters, by passing `backstage.io/kubernetes-cluster` annotation with the defined cluster name. + + If you do not specify the annotation by `default it fetches all` defined kubernetes cluster. + + To apply + + catalog-info.yaml + + ```diff + annotations: + 'backstage.io/kubernetes-id': dice-roller + 'backstage.io/kubernetes-namespace': dice-space + + 'backstage.io/kubernetes-cluster': dice-cluster + 'backstage.io/kubernetes-label-selector': 'app=my-app,component=front-end' + ``` + +### Patch Changes + +- 706fc3a7e1: Updated dependency `@kubernetes/client-node` to `0.20.0`. +- 42c1aee741: Updated dependency `@google-cloud/container` to `^5.0.0`. +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-kubernetes-common@0.7.2-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/plugin-permission-node@0.7.19-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/integration-aws-node@0.1.8 + - @backstage/types@1.1.1 + - @backstage/plugin-kubernetes-node@0.1.2-next.0 + - @backstage/plugin-permission-common@0.7.10 + +## @backstage/plugin-techdocs-node@1.11.0-next.0 + +### Minor Changes + +- d15d483a49: Add command `--runAsDefaultUser` for `@techdocs/cli generate` to bypass running the docker builds as host user for macOS and Linux. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/integration-aws-node@0.1.8 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/app-defaults@1.4.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/core-app-api@1.11.2-next.0 + - @backstage/plugin-permission-react@0.4.18-next.0 + +## @backstage/backend-app-api@0.5.9-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-permission-node@0.7.19-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/cli-common@0.1.13 + - @backstage/cli-node@0.2.0 + - @backstage/config@1.1.1 + - @backstage/config-loader@1.5.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/backend-defaults@0.2.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-app-api@0.5.9-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + +## @backstage/backend-openapi-utils@0.1.1-next.0 + +### Patch Changes + +- aaa6fb3bc9: Minor updates for TypeScript 5.2.2+ compatibility +- Updated dependencies + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## @backstage/backend-plugin-api@0.6.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.7.10 + +## @backstage/backend-tasks@0.5.13-next.0 + +### Patch Changes + +- d8f488aaa8: Allow tasks to run more often that the default work check interval, which is 5 seconds. +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/backend-test-utils@0.2.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-app-api@0.5.9-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/cli@0.24.1-next.0 + +### Patch Changes + +- 8cda3c72f2: Tweaked Node.js version check for when to use the new module register API with the new backend `package start` command. +- 017c425f93: Updated dependency `@typescript-eslint/eslint-plugin` to `6.11.0`. +- Updated dependencies + - @backstage/integration@1.8.0-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/cli-common@0.1.13 + - @backstage/cli-node@0.2.0 + - @backstage/config@1.1.1 + - @backstage/config-loader@1.5.3 + - @backstage/errors@1.2.3 + - @backstage/eslint-plugin@0.1.3 + - @backstage/release-manifests@0.0.11 + - @backstage/types@1.1.1 + +## @backstage/core-app-api@1.11.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.7 + +## @backstage/core-components@0.13.9-next.0 + +### Patch Changes + +- 381ed86d5e: Add missing export for IconLinkVertical +- 5c8a3e3960: Minor improvements to `Table` component. +- 4d9e3b39e4: Register component overrides in the global `OverrideComponentNameToClassKeys` provided by `@backstage/theme`. This will in turn will provide component style override types for `createUnifiedTheme`. +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/version-bridge@1.0.7 + +## @backstage/core-plugin-api@1.8.1-next.0 + +### Patch Changes + +- 03d0b6dcdc: Removed the alpha `convertLegacyRouteRef` utility, which as been moved to `@backstage/core-compat-api` +- Updated dependencies + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.7 + +## @backstage/create-app@0.5.8-next.0 + +### Patch Changes + +- Bumped create-app version. +- Updated dependencies + - @backstage/cli-common@0.1.13 + +## @backstage/dev-utils@1.0.25-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/app-defaults@1.4.6-next.0 + - @backstage/core-app-api@1.11.2-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/catalog-model@1.4.3 + +## @backstage/frontend-app-api@0.3.1-next.0 + +### Patch Changes + +- 60d6eb544e: Removed `@backstage/plugin-graphiql` dependency. +- 9ad4039efa: Bringing over apis from core-plugin-api +- b8cb7804c8: Added `createSpecializedApp`, which is a synchronous version of `createApp` where config and features already need to be loaded. +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/core-app-api@1.11.2-next.0 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.7 + +## @backstage/frontend-plugin-api@0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.7 + +## @backstage/integration-react@1.1.22-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/config@1.1.1 + +## @backstage/test-utils@1.4.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/core-app-api@1.11.2-next.0 + - @backstage/plugin-permission-react@0.4.18-next.0 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.7.10 + +## @backstage/plugin-adr@0.6.11-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-search-react@1.7.4-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/plugin-adr-common@0.2.18-next.0 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-adr-backend@0.4.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/integration@1.8.0-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/plugin-adr-common@0.2.18-next.0 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-adr-common@0.2.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.8.0-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-airbrake@0.3.28-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/dev-utils@1.0.25-next.0 + - @backstage/test-utils@1.4.6-next.0 + - @backstage/catalog-model@1.4.3 + +## @backstage/plugin-airbrake-backend@0.3.5-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/plugin-allure@0.1.44-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/plugin-analytics-module-ga@0.1.36-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/config@1.1.1 + +## @backstage/plugin-analytics-module-ga4@0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/config@1.1.1 + +## @backstage/plugin-analytics-module-newrelic-browser@0.0.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/config@1.1.1 + +## @backstage/plugin-apache-airflow@0.2.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + +## @backstage/plugin-api-docs@0.10.2-next.0 + +### Patch Changes + +- 816d331d16: Add dependency on `graphql-config` to compensate for `graphql-language-service` needing it but not shipping the dep properly +- 615159e536: Updated dependency `graphiql` to `3.0.10`. +- 53e2c06f41: Updated dependency `@asyncapi/react-component` to `1.1.0`. +- 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-catalog@1.16.0-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/catalog-model@1.4.3 + +## @backstage/plugin-apollo-explorer@0.1.18-next.0 + +### Patch Changes + +- e296b94128: Updated dependency `@apollo/explorer` to `^3.0.0`. +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + +## @backstage/plugin-app-backend@0.3.56-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/config-loader@1.5.3 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.8-next.0 + +## @backstage/plugin-app-node@0.1.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.8-next.0 + +## @backstage/plugin-auth-backend@0.20.1-next.0 + +### Patch Changes + +- 2a5891e816: Migrate the atlassian auth provider to be implemented using the new `@backstage/plugin-auth-backend-module-atlassian-provider` module +- e1c189b524: The Okta provider implementation is moved to the new module +- Updated dependencies + - @backstage/plugin-auth-backend-module-atlassian-provider@0.1.0-next.0 + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-backend-module-okta-provider@0.0.1-next.0 + - @backstage/plugin-auth-backend-module-github-provider@0.1.5-next.0 + - @backstage/plugin-auth-backend-module-gitlab-provider@0.1.5-next.0 + - @backstage/plugin-auth-backend-module-oauth2-provider@0.1.5-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/plugin-auth-backend-module-google-provider@0.1.5-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-auth-backend-module-gcp-iap-provider@0.2.2-next.0 + +## @backstage/plugin-auth-backend-module-gcp-iap-provider@0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/plugin-auth-backend-module-github-provider@0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + +## @backstage/plugin-auth-backend-module-gitlab-provider@0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + +## @backstage/plugin-auth-backend-module-google-provider@0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + +## @backstage/plugin-auth-backend-module-microsoft-provider@0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + +## @backstage/plugin-auth-backend-module-oauth2-provider@0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + +## @backstage/plugin-auth-backend-module-okta-provider@0.0.1-next.0 + +### Patch Changes + +- e1c189b524: Adds okta-provider backend module for the auth plugin +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + +## @backstage/plugin-auth-backend-module-pinniped-provider@0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + +## @backstage/plugin-auth-node@0.4.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-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-azure-devops@0.3.10-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-azure-devops-common@0.3.1 + +## @backstage/plugin-azure-devops-backend@0.4.5-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/plugin-azure-devops-common@0.3.1 + +## @backstage/plugin-azure-sites@0.1.17-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/plugin-azure-sites-common@0.1.1 + +## @backstage/plugin-azure-sites-backend@0.1.18-next.0 + +### Patch Changes + +- b7a13edf6d: Updated dependency `@azure/arm-appservice` to `^14.0.0`. +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/config@1.1.1 + - @backstage/plugin-azure-sites-common@0.1.1 + +## @backstage/plugin-badges@0.2.52-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-badges-backend@0.3.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-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/plugin-bazaar@0.2.20-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-catalog@1.16.0-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + +## @backstage/plugin-bazaar-backend@0.3.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## @backstage/plugin-bitbucket-cloud-common@0.2.15-next.0 + +### Patch Changes + +- acf93904e7: Updated dependency `ts-morph` to `^20.0.0`. +- Updated dependencies + - @backstage/integration@1.8.0-next.0 + +## @backstage/plugin-bitrise@0.1.55-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/plugin-catalog-backend@1.15.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-openapi-utils@0.1.1-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/plugin-permission-node@0.7.19-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.12-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-catalog-common@1.0.18 + - @backstage/plugin-events-node@0.2.17-next.0 + - @backstage/plugin-permission-common@0.7.10 + +## @backstage/plugin-catalog-backend-module-aws@0.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-kubernetes-common@0.7.2-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/integration-aws-node@0.1.8 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + +## @backstage/plugin-catalog-backend-module-azure@0.1.27-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/backend-plugin-api@0.6.8-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-catalog-common@1.0.18 + +## @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-openapi-utils@0.1.1-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## @backstage/plugin-catalog-backend-module-bitbucket@0.2.23-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.15-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-catalog-node@1.5.1-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-catalog-backend-module-bitbucket-cloud@0.1.23-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.15-next.0 + - @backstage/integration@1.8.0-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/plugin-catalog-common@1.0.18 + - @backstage/plugin-events-node@0.2.17-next.0 + +## @backstage/plugin-catalog-backend-module-bitbucket-server@0.1.21-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## @backstage/plugin-catalog-backend-module-gcp@0.1.8-next.0 + +### Patch Changes + +- 42c1aee741: Updated dependency `@google-cloud/container` to `^5.0.0`. +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-kubernetes-common@0.7.2-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + +## @backstage/plugin-catalog-backend-module-gerrit@0.1.24-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## @backstage/plugin-catalog-backend-module-github@0.4.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-catalog-backend@1.15.1-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/plugin-catalog-common@1.0.18 + - @backstage/plugin-events-node@0.2.17-next.0 + +## @backstage/plugin-catalog-backend-module-github-org@0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-catalog-backend-module-github@0.4.6-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + +## @backstage/plugin-catalog-backend-module-gitlab@0.3.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + +## @backstage/plugin-catalog-backend-module-incremental-ingestion@0.4.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-catalog-backend@1.15.1-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-events-node@0.2.17-next.0 + - @backstage/plugin-permission-common@0.7.10 + +## @backstage/plugin-catalog-backend-module-ldap@0.5.23-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-catalog-node@1.5.1-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-catalog-common@1.0.18 + +## @backstage/plugin-catalog-backend-module-msgraph@0.5.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + +## @backstage/plugin-catalog-backend-module-openapi@0.1.25-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-catalog-backend@1.15.1-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + +## @backstage/plugin-catalog-backend-module-puppetdb@0.1.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/backend-plugin-api@0.6.8-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-catalog-backend-module-scaffolder-entity-model@0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-scaffolder-common@1.4.3 + +## @backstage/plugin-catalog-backend-module-unprocessed@0.3.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + +## @backstage/plugin-catalog-graph@0.3.2-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-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/types@1.1.1 + +## @backstage/plugin-catalog-import@0.10.4-next.0 + +### Patch Changes + +- 03d0b6dcdc: The `convertLegacyRouteRef` utility used by the alpha exports is now imported from `@backstage/core-compat-api`. +- Updated dependencies + - @backstage/core-compat-api@0.0.2-next.0 + - @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/integration@1.8.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/integration-react@1.1.22-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/plugin-catalog-common@1.0.18 + +## @backstage/plugin-catalog-node@1.5.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + +## @backstage/plugin-catalog-react@1.9.2-next.0 + +### Patch Changes + +- 8587f067d2: Added pagination support to `EntityListProvider`. +- aaa6fb3bc9: Minor updates for TypeScript 5.2.2+ compatibility +- 4d9e3b39e4: Register component overrides in the global `OverrideComponentNameToClassKeys` provided by `@backstage/theme`. This will in turn will provide component style override types for `createUnifiedTheme`. +- eee0ff2946: Fixed a issue where `CatalogPage` wasn't using the chosen `initiallySelectedFilter` as intended. +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/plugin-permission-react@0.4.18-next.0 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.7 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-permission-common@0.7.10 + +## @backstage/plugin-catalog-unprocessed-entities@0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-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-cicd-statistics@0.1.30-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/catalog-model@1.4.3 + +## @backstage/plugin-cicd-statistics-module-gitlab@0.1.24-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/plugin-cicd-statistics@0.1.30-next.0 + - @backstage/catalog-model@1.4.3 + +## @backstage/plugin-circleci@0.3.28-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/plugin-cloudbuild@0.3.28-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/plugin-code-climate@0.1.28-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/plugin-code-coverage@0.2.21-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 + - @backstage/errors@1.2.3 + +## @backstage/plugin-code-coverage-backend@0.2.22-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-auth-node@0.4.2-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/plugin-codescene@0.1.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## @backstage/plugin-config-schema@0.1.48-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/plugin-cost-insights@0.12.17-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 + - @backstage/plugin-cost-insights-common@0.1.2 + +## @backstage/plugin-devtools@0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/plugin-permission-react@0.4.18-next.0 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-devtools-common@0.1.6 + +## @backstage/plugin-devtools-backend@0.2.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-permission-node@0.7.19-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/cli-common@0.1.13 + - @backstage/config@1.1.1 + - @backstage/config-loader@1.5.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-devtools-common@0.1.6 + - @backstage/plugin-permission-common@0.7.10 + +## @backstage/plugin-dynatrace@8.0.2-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/plugin-entity-feedback@0.2.11-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-entity-feedback-common@0.1.3 + +## @backstage/plugin-entity-feedback-backend@0.2.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-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/plugin-entity-feedback-common@0.1.3 + +## @backstage/plugin-entity-validation@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-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/plugin-catalog-common@1.0.18 + +## @backstage/plugin-events-backend@0.2.17-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/plugin-events-node@0.2.17-next.0 + +## @backstage/plugin-events-backend-module-aws-sqs@0.2.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/plugin-events-node@0.2.17-next.0 + +## @backstage/plugin-events-backend-module-azure@0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/plugin-events-node@0.2.17-next.0 + +## @backstage/plugin-events-backend-module-bitbucket-cloud@0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/plugin-events-node@0.2.17-next.0 + +## @backstage/plugin-events-backend-module-gerrit@0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/plugin-events-node@0.2.17-next.0 + +## @backstage/plugin-events-backend-module-github@0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/plugin-events-node@0.2.17-next.0 + +## @backstage/plugin-events-backend-module-gitlab@0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/plugin-events-node@0.2.17-next.0 + +## @backstage/plugin-events-backend-test-utils@0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.17-next.0 + +## @backstage/plugin-events-node@0.2.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.8-next.0 + +## @backstage/plugin-explore@0.4.14-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-search-react@1.7.4-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/plugin-explore-react@0.0.34-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/plugin-explore-common@0.0.2 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-explore-backend@0.0.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.12-next.0 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/plugin-explore-common@0.0.2 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-explore-react@0.0.34-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/plugin-explore-common@0.0.2 + +## @backstage/plugin-firehydrant@0.2.12-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/plugin-fossa@0.2.60-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-gcalendar@0.3.21-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/errors@1.2.3 + +## @backstage/plugin-gcp-projects@0.3.44-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + +## @backstage/plugin-git-release-manager@0.3.40-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/theme@0.5.0-next.0 + +## @backstage/plugin-github-actions@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/integration@1.8.0-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/catalog-model@1.4.3 + +## @backstage/plugin-github-deployments@0.1.59-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/integration@1.8.0-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + +## @backstage/plugin-github-issues@0.2.17-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/integration@1.8.0-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + +## @backstage/plugin-github-pull-requests-board@0.1.22-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/integration@1.8.0-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/catalog-model@1.4.3 + +## @backstage/plugin-gitops-profiles@0.3.43-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/config@1.1.1 + +## @backstage/plugin-gocd@0.1.34-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-graphiql@0.3.1-next.0 + +### Patch Changes + +- 03d0b6dcdc: The `convertLegacyRouteRef` utility used by the alpha exports is now imported from `@backstage/core-compat-api`. +- Updated dependencies + - @backstage/core-compat-api@0.0.2-next.0 + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + +## @backstage/plugin-graphql-voyager@0.1.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + +## @backstage/plugin-home@0.5.12-next.0 + +### Patch Changes + +- 6cd12f277b: Updated dependency `@rjsf/utils` to `5.14.1`. + Updated dependency `@rjsf/core` to `5.14.1`. + Updated dependency `@rjsf/material-ui` to `5.14.1`. + Updated dependency `@rjsf/validator-ajv8` to `5.14.1`. +- 63c494ef22: Updated dependency `@rjsf/utils` to `5.14.2`. + Updated dependency `@rjsf/core` to `5.14.2`. + Updated dependency `@rjsf/material-ui` to `5.14.2`. + Updated dependency `@rjsf/validator-ajv8` to `5.14.2`. +- 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/frontend-plugin-api@0.3.1-next.0 + - @backstage/core-app-api@1.11.2-next.0 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + +## @backstage/plugin-home-react@0.1.6-next.0 + +### Patch Changes + +- 6cd12f277b: Updated dependency `@rjsf/utils` to `5.14.1`. + Updated dependency `@rjsf/core` to `5.14.1`. + Updated dependency `@rjsf/material-ui` to `5.14.1`. + Updated dependency `@rjsf/validator-ajv8` to `5.14.1`. +- 63c494ef22: Updated dependency `@rjsf/utils` to `5.14.2`. + Updated dependency `@rjsf/core` to `5.14.2`. + Updated dependency `@rjsf/material-ui` to `5.14.2`. + Updated dependency `@rjsf/validator-ajv8` to `5.14.2`. +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + +## @backstage/plugin-ilert@0.2.17-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-jenkins@0.9.3-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-jenkins-common@0.1.21 + +## @backstage/plugin-jenkins-backend@0.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/plugin-permission-node@0.7.19-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/plugin-jenkins-common@0.1.21 + - @backstage/plugin-permission-common@0.7.10 + +## @backstage/plugin-kafka@0.3.28-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 + +## @backstage/plugin-kafka-backend@0.3.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## @backstage/plugin-kubernetes@0.11.3-next.0 + +### Patch Changes + +- 706fc3a7e1: Updated dependency `@kubernetes/client-node` to `0.20.0`. +- 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-kubernetes-react@0.1.2-next.0 + - @backstage/plugin-kubernetes-common@0.7.2-next.0 + - @backstage/theme@0.5.0-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-kubernetes-cluster@0.0.4-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-kubernetes-react@0.1.2-next.0 + - @backstage/plugin-kubernetes-common@0.7.2-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## @backstage/plugin-kubernetes-common@0.7.2-next.0 + +### Patch Changes + +- 706fc3a7e1: Updated dependency `@kubernetes/client-node` to `0.20.0`. +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.7.10 + +## @backstage/plugin-kubernetes-node@0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-common@0.7.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + +## @backstage/plugin-kubernetes-react@0.1.2-next.0 + +### Patch Changes + +- b5ae2e5a62: Add ID property to the table displaying kubernetes pods to avoid closing the info sidebar when the data reloads and needs to rerender. +- 706fc3a7e1: Updated dependency `@kubernetes/client-node` to `0.20.0`. +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/plugin-kubernetes-common@0.7.2-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/plugin-lighthouse@0.4.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/config@1.1.1 + - @backstage/plugin-lighthouse-common@0.1.4 + +## @backstage/plugin-lighthouse-backend@0.3.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-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/types@1.1.1 + - @backstage/plugin-lighthouse-common@0.1.4 + +## @backstage/plugin-linguist@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 + +## @backstage/plugin-linguist-backend@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 + +## @backstage/plugin-microsoft-calendar@0.1.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/errors@1.2.3 + +## @backstage/plugin-newrelic@0.3.43-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + +## @backstage/plugin-newrelic-dashboard@0.3.3-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/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + +## @backstage/plugin-nomad@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 + +## @backstage/plugin-nomad-backend@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 + +## @backstage/plugin-octopus-deploy@0.2.10-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/plugin-opencost@0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + +## @backstage/plugin-org@0.6.18-next.0 + +### Patch Changes + +- 3a65d9c4d7: Support member list scrollable when parent has specified height +- 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/plugin-org-react@0.1.17-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-client@1.4.6 + - @backstage/catalog-model@1.4.3 + +## @backstage/plugin-pagerduty@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 + +## @backstage/plugin-periskop@0.1.26-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-periskop-backend@0.2.6-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/plugin-permission-backend@0.5.31-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-permission-node@0.7.19-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-permission-common@0.7.10 + +## @backstage/plugin-permission-backend-module-allow-all-policy@0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-permission-node@0.7.19-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/plugin-permission-common@0.7.10 + +## @backstage/plugin-permission-node@0.7.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-permission-common@0.7.10 + +## @backstage/plugin-permission-react@0.4.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/config@1.1.1 + - @backstage/plugin-permission-common@0.7.10 + +## @backstage/plugin-playlist@0.2.2-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-search-react@1.7.4-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/plugin-permission-react@0.4.18-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-playlist-common@0.1.12 + +## @backstage/plugin-playlist-backend@0.3.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-permission-node@0.7.19-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/plugin-permission-common@0.7.10 + - @backstage/plugin-playlist-common@0.1.12 + +## @backstage/plugin-proxy-backend@0.4.6-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/plugin-puppetdb@0.1.11-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-rollbar@0.4.28-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/plugin-rollbar-backend@0.1.53-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/config@1.1.1 + +## @backstage/plugin-scaffolder@1.16.2-next.0 + +### Patch Changes + +- 6806d10be3: Added `headerOptions` to `TemplateListPage` to optionally override default values. + Changed `themeId` of TemplateListPage from `website` to `home`. +- aaa6fb3bc9: Minor updates for TypeScript 5.2.2+ compatibility +- 6cd12f277b: Updated dependency `@rjsf/utils` to `5.14.1`. + Updated dependency `@rjsf/core` to `5.14.1`. + Updated dependency `@rjsf/material-ui` to `5.14.1`. + Updated dependency `@rjsf/validator-ajv8` to `5.14.1`. +- 63c494ef22: Updated dependency `@rjsf/utils` to `5.14.2`. + Updated dependency `@rjsf/core` to `5.14.2`. + Updated dependency `@rjsf/material-ui` to `5.14.2`. + Updated dependency `@rjsf/validator-ajv8` to `5.14.2`. +- 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-scaffolder-react@1.6.2-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/plugin-permission-react@0.4.18-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-catalog-common@1.0.18 + - @backstage/plugin-scaffolder-common@1.4.3 + +## @backstage/plugin-scaffolder-backend@1.19.2-next.0 + +### Patch Changes + +- aff34fcf23: Fix issue with Circular JSON dependencies in templating +- 48667b4d3a: Fix creating env secret in github:environment:create action +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-catalog-backend@1.15.1-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.5-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/plugin-permission-node@0.7.19-next.0 + - @backstage/plugin-scaffolder-node@0.2.9-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-catalog-common@1.0.18 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-scaffolder-common@1.4.3 + +## @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-scaffolder-node@0.2.9-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder-backend-module-cookiecutter@0.2.32-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-scaffolder-node@0.2.9-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder-backend-module-gitlab@0.2.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-scaffolder-node@0.2.9-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## @backstage/plugin-scaffolder-backend-module-rails@0.4.25-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-scaffolder-node@0.2.9-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder-backend-module-sentry@0.1.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.2.9-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## @backstage/plugin-scaffolder-backend-module-yeoman@0.2.29-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.2.9-next.0 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + +## @backstage/plugin-scaffolder-node@0.2.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-common@1.4.3 + +## @backstage/plugin-scaffolder-react@1.6.2-next.0 + +### Patch Changes + +- e516bf4da8: Step titles in the Stepper are now clickable and redirect the user to the corresponding step, as an alternative to using the back buttons. +- aaa6fb3bc9: Minor updates for TypeScript 5.2.2+ compatibility +- 6cd12f277b: Updated dependency `@rjsf/utils` to `5.14.1`. + Updated dependency `@rjsf/core` to `5.14.1`. + Updated dependency `@rjsf/material-ui` to `5.14.1`. + Updated dependency `@rjsf/validator-ajv8` to `5.14.1`. +- 63c494ef22: Updated dependency `@rjsf/utils` to `5.14.2`. + Updated dependency `@rjsf/core` to `5.14.2`. + Updated dependency `@rjsf/material-ui` to `5.14.2`. + Updated dependency `@rjsf/validator-ajv8` to `5.14.2`. +- 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-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.7 + - @backstage/plugin-scaffolder-common@1.4.3 + +## @backstage/plugin-search@1.4.4-next.0 + +### Patch Changes + +- 03d0b6dcdc: The `convertLegacyRouteRef` utility used by the alpha exports is now imported from `@backstage/core-compat-api`. +- Updated dependencies + - @backstage/core-compat-api@0.0.2-next.0 + - @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-search-react@1.7.4-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.7 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-search-backend@1.4.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-openapi-utils@0.1.1-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-permission-node@0.7.19-next.0 + - @backstage/plugin-search-backend-node@1.2.12-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-search-backend-module-catalog@0.1.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/plugin-search-backend-node@1.2.12-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/plugin-catalog-common@1.0.18 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-search-backend-module-elasticsearch@1.3.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-search-backend-node@1.2.12-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/integration-aws-node@0.1.8 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-search-backend-module-explore@0.1.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-search-backend-node@1.2.12-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/plugin-explore-common@0.0.2 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-search-backend-module-pg@0.5.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-search-backend-node@1.2.12-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-search-backend-module-stack-overflow-collator@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-search-backend-node@1.2.12-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-search-backend-module-techdocs@0.1.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-techdocs-node@1.11.0-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/plugin-search-backend-node@1.2.12-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/plugin-catalog-common@1.0.18 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-search-backend-node@1.2.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-search-react@1.7.4-next.0 + +### Patch Changes + +- 84dabc5363: Removed `@backstage/frontend-app-api` dependency. +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.7 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-sentry@0.5.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/plugin-shortcuts@0.3.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/types@1.1.1 + +## @backstage/plugin-sonarqube@0.7.10-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/plugin-sonarqube-react@0.1.11-next.0 + - @backstage/catalog-model@1.4.3 + +## @backstage/plugin-sonarqube-backend@0.2.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 + +## @backstage/plugin-sonarqube-react@0.1.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/catalog-model@1.4.3 + +## @backstage/plugin-splunk-on-call@0.4.17-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/plugin-stack-overflow@0.1.23-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/plugin-search-react@1.7.4-next.0 + - @backstage/plugin-home-react@0.1.6-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/config@1.1.1 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-stack-overflow-backend@0.2.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-search-backend-module-stack-overflow-collator@0.1.1-next.0 + - @backstage/config@1.1.1 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-stackstorm@0.1.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/errors@1.2.3 + +## @backstage/plugin-tech-insights@0.3.20-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/types@1.1.1 + - @backstage/plugin-tech-insights-common@0.2.12 + +## @backstage/plugin-tech-insights-backend@0.5.22-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-tech-insights-node@0.4.14-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-tech-insights-common@0.2.12 + +## @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.40-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-tech-insights-node@0.4.14-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-tech-insights-common@0.2.12 + +## @backstage/plugin-tech-insights-node@0.4.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/plugin-tech-insights-common@0.2.12 + +## @backstage/plugin-tech-radar@0.6.11-next.0 + +### Patch Changes + +- 03d0b6dcdc: The `convertLegacyRouteRef` utility used by the alpha exports is now imported from `@backstage/core-compat-api`. +- Updated dependencies + - @backstage/core-compat-api@0.0.2-next.0 + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + +## @backstage/plugin-techdocs@1.9.2-next.0 + +### Patch Changes + +- 03d0b6dcdc: The `convertLegacyRouteRef` utility used by the alpha exports is now imported from `@backstage/core-compat-api`. +- Updated dependencies + - @backstage/core-compat-api@0.0.2-next.0 + - @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-search-react@1.7.4-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/plugin-techdocs-react@1.1.14-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.25-next.0 + +### Patch Changes + +- 3f354e68f4: Move `@testing-library/react` to be a `peerDependency` +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/plugin-catalog@1.16.0-next.0 + - @backstage/plugin-techdocs@1.9.2-next.0 + - @backstage/plugin-search-react@1.7.4-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/core-app-api@1.11.2-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/test-utils@1.4.6-next.0 + - @backstage/plugin-techdocs-react@1.1.14-next.0 + +## @backstage/plugin-techdocs-backend@1.9.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-techdocs-node@1.11.0-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.12-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/plugin-catalog-common@1.0.18 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/plugin-techdocs-module-addons-contrib@1.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/plugin-techdocs-react@1.1.14-next.0 + +## @backstage/plugin-techdocs-react@1.1.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/version-bridge@1.0.7 + +## @backstage/plugin-todo@0.2.32-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-todo-backend@0.3.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-openapi-utils@0.1.1-next.0 + - @backstage/integration@1.8.0-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/plugin-user-settings@0.7.14-next.0 + +### Patch Changes + +- 03d0b6dcdc: The `convertLegacyRouteRef` utility used by the alpha exports is now imported from `@backstage/core-compat-api`. +- Updated dependencies + - @backstage/core-compat-api@0.0.2-next.0 + - @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/frontend-plugin-api@0.3.1-next.0 + - @backstage/core-app-api@1.11.2-next.0 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## @backstage/plugin-user-settings-backend@0.2.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-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-vault@0.1.23-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-vault-backend@0.4.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-vault-node@0.1.1-next.0 + +## @backstage/plugin-vault-node@0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.8-next.0 + +## @backstage/plugin-xcmetrics@0.2.46-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/errors@1.2.3 + +## example-app@0.2.90-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/plugin-api-docs@0.10.2-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/plugin-scaffolder@1.16.2-next.0 + - @backstage/plugin-catalog@1.16.0-next.0 + - @backstage/frontend-app-api@0.3.1-next.0 + - @backstage/plugin-org@0.6.18-next.0 + - @backstage/plugin-scaffolder-react@1.6.2-next.0 + - @backstage/plugin-catalog-import@0.10.4-next.0 + - @backstage/plugin-user-settings@0.7.14-next.0 + - @backstage/plugin-tech-radar@0.6.11-next.0 + - @backstage/plugin-graphiql@0.3.1-next.0 + - @backstage/plugin-techdocs@1.9.2-next.0 + - @backstage/plugin-search@1.4.4-next.0 + - @backstage/plugin-search-react@1.7.4-next.0 + - @backstage/cli@0.24.1-next.0 + - @backstage/plugin-home@0.5.12-next.0 + - @backstage/plugin-kubernetes@0.11.3-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/app-defaults@1.4.6-next.0 + - @backstage/core-app-api@1.11.2-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/plugin-adr@0.6.11-next.0 + - @backstage/plugin-airbrake@0.3.28-next.0 + - @backstage/plugin-apache-airflow@0.2.18-next.0 + - @backstage/plugin-azure-devops@0.3.10-next.0 + - @backstage/plugin-azure-sites@0.1.17-next.0 + - @backstage/plugin-badges@0.2.52-next.0 + - @backstage/plugin-catalog-graph@0.3.2-next.0 + - @backstage/plugin-catalog-unprocessed-entities@0.1.6-next.0 + - @backstage/plugin-circleci@0.3.28-next.0 + - @backstage/plugin-cloudbuild@0.3.28-next.0 + - @backstage/plugin-code-coverage@0.2.21-next.0 + - @backstage/plugin-cost-insights@0.12.17-next.0 + - @backstage/plugin-devtools@0.1.7-next.0 + - @backstage/plugin-dynatrace@8.0.2-next.0 + - @backstage/plugin-entity-feedback@0.2.11-next.0 + - @backstage/plugin-explore@0.4.14-next.0 + - @backstage/plugin-gcalendar@0.3.21-next.0 + - @backstage/plugin-gcp-projects@0.3.44-next.0 + - @backstage/plugin-github-actions@0.6.9-next.0 + - @backstage/plugin-gocd@0.1.34-next.0 + - @backstage/plugin-jenkins@0.9.3-next.0 + - @backstage/plugin-kafka@0.3.28-next.0 + - @backstage/plugin-kubernetes-cluster@0.0.4-next.0 + - @backstage/plugin-lighthouse@0.4.13-next.0 + - @backstage/plugin-linguist@0.1.13-next.0 + - @backstage/plugin-microsoft-calendar@0.1.10-next.0 + - @backstage/plugin-newrelic@0.3.43-next.0 + - @backstage/plugin-newrelic-dashboard@0.3.3-next.0 + - @backstage/plugin-nomad@0.1.9-next.0 + - @backstage/plugin-octopus-deploy@0.2.10-next.0 + - @backstage/plugin-pagerduty@0.6.9-next.0 + - @backstage/plugin-permission-react@0.4.18-next.0 + - @backstage/plugin-playlist@0.2.2-next.0 + - @backstage/plugin-puppetdb@0.1.11-next.0 + - @backstage/plugin-rollbar@0.4.28-next.0 + - @backstage/plugin-sentry@0.5.13-next.0 + - @backstage/plugin-shortcuts@0.3.17-next.0 + - @backstage/plugin-stack-overflow@0.1.23-next.0 + - @backstage/plugin-stackstorm@0.1.9-next.0 + - @backstage/plugin-tech-insights@0.3.20-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.3-next.0 + - @backstage/plugin-techdocs-react@1.1.14-next.0 + - @backstage/plugin-todo@0.2.32-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-linguist-common@0.1.2 + - @backstage/plugin-search-common@1.2.8 + +## example-app-next@0.0.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.0.2-next.0 + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/plugin-catalog-react@1.9.2-next.0 + - @backstage/plugin-api-docs@0.10.2-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/plugin-scaffolder@1.16.2-next.0 + - @backstage/plugin-catalog@1.16.0-next.0 + - @backstage/frontend-app-api@0.3.1-next.0 + - @backstage/plugin-org@0.6.18-next.0 + - @backstage/plugin-scaffolder-react@1.6.2-next.0 + - @backstage/plugin-catalog-import@0.10.4-next.0 + - @backstage/plugin-user-settings@0.7.14-next.0 + - @backstage/plugin-tech-radar@0.6.11-next.0 + - @backstage/plugin-graphiql@0.3.1-next.0 + - @backstage/plugin-techdocs@1.9.2-next.0 + - @backstage/plugin-search@1.4.4-next.0 + - @backstage/plugin-search-react@1.7.4-next.0 + - @backstage/cli@0.24.1-next.0 + - @backstage/plugin-home@0.5.12-next.0 + - @backstage/plugin-kubernetes@0.11.3-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/app-defaults@1.4.6-next.0 + - @backstage/core-app-api@1.11.2-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/plugin-adr@0.6.11-next.0 + - @backstage/plugin-airbrake@0.3.28-next.0 + - @backstage/plugin-apache-airflow@0.2.18-next.0 + - @backstage/plugin-azure-devops@0.3.10-next.0 + - @backstage/plugin-azure-sites@0.1.17-next.0 + - @backstage/plugin-badges@0.2.52-next.0 + - @backstage/plugin-catalog-graph@0.3.2-next.0 + - @backstage/plugin-catalog-unprocessed-entities@0.1.6-next.0 + - @backstage/plugin-circleci@0.3.28-next.0 + - @backstage/plugin-cloudbuild@0.3.28-next.0 + - @backstage/plugin-code-coverage@0.2.21-next.0 + - @backstage/plugin-cost-insights@0.12.17-next.0 + - @backstage/plugin-devtools@0.1.7-next.0 + - @backstage/plugin-dynatrace@8.0.2-next.0 + - @backstage/plugin-entity-feedback@0.2.11-next.0 + - @backstage/plugin-explore@0.4.14-next.0 + - @backstage/plugin-gcalendar@0.3.21-next.0 + - @backstage/plugin-gcp-projects@0.3.44-next.0 + - @backstage/plugin-github-actions@0.6.9-next.0 + - @backstage/plugin-gocd@0.1.34-next.0 + - @backstage/plugin-jenkins@0.9.3-next.0 + - @backstage/plugin-kafka@0.3.28-next.0 + - @backstage/plugin-lighthouse@0.4.13-next.0 + - @backstage/plugin-linguist@0.1.13-next.0 + - @backstage/plugin-microsoft-calendar@0.1.10-next.0 + - @backstage/plugin-newrelic@0.3.43-next.0 + - @backstage/plugin-newrelic-dashboard@0.3.3-next.0 + - @backstage/plugin-octopus-deploy@0.2.10-next.0 + - @backstage/plugin-pagerduty@0.6.9-next.0 + - @backstage/plugin-permission-react@0.4.18-next.0 + - @backstage/plugin-playlist@0.2.2-next.0 + - @backstage/plugin-puppetdb@0.1.11-next.0 + - @backstage/plugin-rollbar@0.4.28-next.0 + - @backstage/plugin-sentry@0.5.13-next.0 + - @backstage/plugin-shortcuts@0.3.17-next.0 + - @backstage/plugin-stackstorm@0.1.9-next.0 + - @backstage/plugin-tech-insights@0.3.20-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.3-next.0 + - @backstage/plugin-techdocs-react@1.1.14-next.0 + - @backstage/plugin-todo@0.2.32-next.0 + - app-next-example-plugin@0.0.4-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-linguist-common@0.1.2 + - @backstage/plugin-search-common@1.2.8 + +## app-next-example-plugin@0.0.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.9-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + +## example-backend@0.2.90-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-backend@0.20.1-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-scaffolder-backend@1.19.2-next.0 + - @backstage/plugin-kubernetes-backend@0.14.0-next.0 + - @backstage/plugin-azure-sites-backend@0.1.18-next.0 + - @backstage/integration@1.8.0-next.0 + - example-app@0.2.90-next.0 + - @backstage/plugin-adr-backend@0.4.5-next.0 + - @backstage/plugin-app-backend@0.3.56-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-azure-devops-backend@0.4.5-next.0 + - @backstage/plugin-badges-backend@0.3.5-next.0 + - @backstage/plugin-catalog-backend@1.15.1-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.5-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/plugin-code-coverage-backend@0.2.22-next.0 + - @backstage/plugin-devtools-backend@0.2.5-next.0 + - @backstage/plugin-entity-feedback-backend@0.2.5-next.0 + - @backstage/plugin-events-backend@0.2.17-next.0 + - @backstage/plugin-explore-backend@0.0.18-next.0 + - @backstage/plugin-jenkins-backend@0.3.2-next.0 + - @backstage/plugin-kafka-backend@0.3.6-next.0 + - @backstage/plugin-lighthouse-backend@0.3.5-next.0 + - @backstage/plugin-linguist-backend@0.5.5-next.0 + - @backstage/plugin-nomad-backend@0.1.10-next.0 + - @backstage/plugin-permission-backend@0.5.31-next.0 + - @backstage/plugin-permission-node@0.7.19-next.0 + - @backstage/plugin-playlist-backend@0.3.12-next.0 + - @backstage/plugin-proxy-backend@0.4.6-next.0 + - @backstage/plugin-rollbar-backend@0.1.53-next.0 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.9-next.0 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.25-next.0 + - @backstage/plugin-search-backend@1.4.8-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.12-next.0 + - @backstage/plugin-search-backend-module-elasticsearch@1.3.11-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.12-next.0 + - @backstage/plugin-search-backend-module-pg@0.5.17-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.12-next.0 + - @backstage/plugin-search-backend-node@1.2.12-next.0 + - @backstage/plugin-tech-insights-backend@0.5.22-next.0 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.40-next.0 + - @backstage/plugin-tech-insights-node@0.4.14-next.0 + - @backstage/plugin-techdocs-backend@1.9.1-next.0 + - @backstage/plugin-todo-backend@0.3.6-next.0 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.5-next.0 + - @backstage/plugin-events-node@0.2.17-next.0 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-search-common@1.2.8 + +## example-backend-next@0.0.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-scaffolder-backend@1.19.2-next.0 + - @backstage/plugin-kubernetes-backend@0.14.0-next.0 + - @backstage/backend-defaults@0.2.8-next.0 + - @backstage/plugin-adr-backend@0.4.5-next.0 + - @backstage/plugin-app-backend@0.3.56-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-azure-devops-backend@0.4.5-next.0 + - @backstage/plugin-badges-backend@0.3.5-next.0 + - @backstage/plugin-catalog-backend@1.15.1-next.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.1-next.0 + - @backstage/plugin-catalog-backend-module-openapi@0.1.25-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.5-next.0 + - @backstage/plugin-devtools-backend@0.2.5-next.0 + - @backstage/plugin-entity-feedback-backend@0.2.5-next.0 + - @backstage/plugin-jenkins-backend@0.3.2-next.0 + - @backstage/plugin-lighthouse-backend@0.3.5-next.0 + - @backstage/plugin-linguist-backend@0.5.5-next.0 + - @backstage/plugin-nomad-backend@0.1.10-next.0 + - @backstage/plugin-permission-backend@0.5.31-next.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.5-next.0 + - @backstage/plugin-permission-node@0.7.19-next.0 + - @backstage/plugin-playlist-backend@0.3.12-next.0 + - @backstage/plugin-proxy-backend@0.4.6-next.0 + - @backstage/plugin-search-backend@1.4.8-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.12-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.12-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.12-next.0 + - @backstage/plugin-search-backend-node@1.2.12-next.0 + - @backstage/plugin-sonarqube-backend@0.2.10-next.0 + - @backstage/plugin-techdocs-backend@1.9.1-next.0 + - @backstage/plugin-todo-backend@0.3.6-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.5-next.0 + - @backstage/plugin-permission-common@0.7.10 + +## @backstage/backend-plugin-manager@0.0.4-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-backend@1.15.1-next.0 + - @backstage/plugin-events-backend@0.2.17-next.0 + - @backstage/plugin-permission-node@0.7.19-next.0 + - @backstage/plugin-scaffolder-node@0.2.9-next.0 + - @backstage/plugin-search-backend-node@1.2.12-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/cli-common@0.1.13 + - @backstage/cli-node@0.2.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-events-node@0.2.17-next.0 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-search-common@1.2.8 + +## @backstage/core-compat-api@0.0.2-next.0 + +### Patch Changes + +- 03d0b6dcdc: Added `convertLegacyRouteRef` utility to convert existing route refs to be used with the new experimental packages. +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/core-app-api@1.11.2-next.0 + +## e2e-test@0.2.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.8-next.0 + - @backstage/cli-common@0.1.13 + - @backstage/errors@1.2.3 + +## techdocs-cli-embedded-app@0.2.89-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/plugin-catalog@1.16.0-next.0 + - @backstage/plugin-techdocs@1.9.2-next.0 + - @backstage/cli@0.24.1-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/app-defaults@1.4.6-next.0 + - @backstage/core-app-api@1.11.2-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/test-utils@1.4.6-next.0 + - @backstage/plugin-techdocs-react@1.1.14-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + +## @internal/plugin-todo-list@1.0.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + +## @internal/plugin-todo-list-backend@1.0.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 diff --git a/docs/releases/v1.21.0-next.1-changelog.md b/docs/releases/v1.21.0-next.1-changelog.md new file mode 100644 index 0000000000..aa5f14b1b4 --- /dev/null +++ b/docs/releases/v1.21.0-next.1-changelog.md @@ -0,0 +1,140 @@ +# Release v1.21.0-next.1 + +## @backstage/core-compat-api@0.0.1-next.0 + +### Patch Changes + +- c219b168aa: Made package public so it can be published + +## @backstage/create-app@0.5.8-next.1 + +### Patch Changes + +- Bumped create-app version. + +## @backstage/plugin-api-docs@0.10.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.16.0-next.1 + +## @backstage/plugin-bazaar@0.2.20-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.16.0-next.1 + +## @backstage/plugin-catalog@1.16.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.0.1-next.0 + +## @backstage/plugin-catalog-import@0.10.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.0.1-next.0 + +## @backstage/plugin-graphiql@0.3.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.0.1-next.0 + +## @backstage/plugin-search@1.4.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.0.1-next.0 + +## @backstage/plugin-tech-radar@0.6.11-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.0.1-next.0 + +## @backstage/plugin-techdocs@1.9.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.0.1-next.0 + +## @backstage/plugin-techdocs-addons-test-utils@1.0.25-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.16.0-next.1 + - @backstage/plugin-techdocs@1.9.2-next.1 + +## @backstage/plugin-user-settings@0.7.14-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.0.1-next.0 + +## example-app@0.2.90-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.16.0-next.1 + - @backstage/plugin-catalog-import@0.10.4-next.1 + - @backstage/plugin-graphiql@0.3.1-next.1 + - @backstage/plugin-search@1.4.4-next.1 + - @backstage/plugin-tech-radar@0.6.11-next.1 + - @backstage/plugin-techdocs@1.9.2-next.1 + - @backstage/plugin-user-settings@0.7.14-next.1 + - @backstage/plugin-api-docs@0.10.2-next.1 + - @backstage/plugin-catalog-graph@0.3.2-next.0 + - @backstage/plugin-explore@0.4.14-next.0 + - @backstage/plugin-org@0.6.18-next.0 + - @backstage/plugin-scaffolder@1.16.2-next.0 + - @backstage/plugin-scaffolder-react@1.6.2-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.3-next.0 + +## example-app-next@0.0.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.0.1-next.0 + - @backstage/plugin-catalog@1.16.0-next.1 + - @backstage/plugin-catalog-import@0.10.4-next.1 + - @backstage/plugin-graphiql@0.3.1-next.1 + - @backstage/plugin-search@1.4.4-next.1 + - @backstage/plugin-tech-radar@0.6.11-next.1 + - @backstage/plugin-techdocs@1.9.2-next.1 + - @backstage/plugin-user-settings@0.7.14-next.1 + - @backstage/plugin-api-docs@0.10.2-next.1 + - @backstage/plugin-catalog-graph@0.3.2-next.0 + - @backstage/plugin-explore@0.4.14-next.0 + - @backstage/plugin-org@0.6.18-next.0 + - @backstage/plugin-scaffolder@1.16.2-next.0 + - @backstage/plugin-scaffolder-react@1.6.2-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.3-next.0 + +## e2e-test@0.2.10-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.8-next.1 + +## techdocs-cli-embedded-app@0.2.89-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.16.0-next.1 + - @backstage/plugin-techdocs@1.9.2-next.1 diff --git a/microsite/blog/2023-11-15-backstagecon-kubecon-23.mdx b/microsite/blog/2023-11-15-backstagecon-kubecon-23.mdx new file mode 100644 index 0000000000..7b7f7c0f0b --- /dev/null +++ b/microsite/blog/2023-11-15-backstagecon-kubecon-23.mdx @@ -0,0 +1,72 @@ +--- +# prettier-ignore +title: "Wrap up: BackstageCon ‘23, KubeCon + Cloud Native NA" +author: Jorge Lainfiesta, Spotify +authorURL: https://www.linkedin.com/in/jrlainfiesta/ +authorImageURL: https://avatars.githubusercontent.com/u/4451393?v=4 +--- + +![BackstageCon ‘23, KubeCon + Cloud Native NA](assets/23-11-15/00-cover.png) + +tl;dr BackstageCon North America is officially in the books! We had a blast in Chicago talking about Backstage non-stop throughout the week at both BackstageCon and KubeCon. If you weren't able to join us, the [BackstageCon talks are available](https://www.youtube.com/playlist?list=PLj6h78yzYM2PxiInfZi2OKu1KluNfbLtc) for replay on the CNCF YouTube channel. +{/* truncate */} + +Obviously we're biased, but Backstage was definitely one of the big topics at [KubeCon + CloudNativeCon North America](https://events.linuxfoundation.org/kubecon-cloudnativecon-north-america/) this year. Recently, the CNCF announced that Backstage was the [third fastest-growing project](https://www.cncf.io/blog/2023/10/27/october-2023-where-we-are-with-velocity-of-cncf-lf-and-top-30-open-source-projects/) of the year (up from the fifth last year). And you could confirm it with your own eyes during BackstageCon and KubeCon: hundreds of people flocked through the event, talks, and the project booth sharing their enthusiasm and asking more questions about the project. + +### BackstageCon: A growing community  + +With a whopping peak attendance of 400+ people, the crowd nearly doubled from last year,[ taking the center stage of the conference](https://www.forbes.com/sites/janakirammsv/2023/11/14/backstage-project-takes-center-stage-at-kubecon-north-america-2023/?sh=1972303a6539), as reported by Forbes. For some, BackstageCon was their first entry point into the community, but the event also boasted lots of  familiar faces, mostly from some of the most mature adopters such as Dynatrace, Lunar, and US Bank. We also got to hear from new voices in the community like Comcast and Grafana Labs. + +We hear a lot of great questions such as: + +- How do I make more developers use my developer portal? + +- Will generative AI take my Backstage instance to the next level? + +- What's all the fuss around the upcoming Declarative Integration in Backstage? + +The community got together to discuss these and more questions with exciting talks and debates. The talks were all recorded and are [up on YouTube](https://www.youtube.com/playlist?list=PLj6h78yzYM2PxiInfZi2OKu1KluNfbLtc), so make sure to check them out. + +**Driving Backstage adoption** + +Growing adoption was top of mind during BackstageCon. David Tuite, CEO of Roadie, shared the lessons learned from interviewing 20 adopters, which revealed that the Scaffolder was a prime place to get started when adopting Backstage, as it lets stakeholders get an easily measurable ROI. + +![Panel of Backstage adopters](assets/23-11-15/10-panel.jpg) + +Helen Greul, Head of Engineering for Backstage at Spotify, hosted [a panel discussion](https://www.youtube.com/watch?v=Iti5glzYOG8&list=PLj6h78yzYM2PxiInfZi2OKu1KluNfbLtc&index=10) with four adopters that are using Backstage at scale: Twilio, Lunar Bank, US Bank, and Expedia. The crucial role of Backstage in fostering inner sourcing and simplifying new hires onboarding were a few of the subjects covered in the panel. + +How adopters are using Backstage was also a highlight of the day. B3, Brazil's Stock Exchange, shared [how they're building their developer portal](https://www.youtube.com/watch?v=FyWCKIVYO7g&list=PLj6h78yzYM2PxiInfZi2OKu1KluNfbLtc&index=14). And from Grafana Labs, we heard how they're using [Backstage along Crossplane to drive GitOps](https://www.youtube.com/watch?v=q-JUWob69Hw&list=PLj6h78yzYM2PxiInfZi2OKu1KluNfbLtc&index=10). + +**What's next with Backstage?** + +The discussion on how Backstage is evolving was featured in a few talks, through live demos that — remarkably — did not go wrong even once! Ben ([benjdlambert](https://github.com/benjdlambert)) and Patrik ([Rugvip](https://github.com/Rugvip)), core maintainers, presented an introduction to the plans around [Declarative Integration](https://www.youtube.com/watch?v=8hVMNMXXN44&list=PLj6h78yzYM2PxiInfZi2OKu1KluNfbLtc&index=8), which will allow people to install plugins without dealing with TypeScript or React. On the other hand, Djamaile and Mitch, from Spotify, [introduced the upcoming Quickstart](https://www.youtube.com/watch?v=bUdaO9NKXJY&list=PLj6h78yzYM2PxiInfZi2OKu1KluNfbLtc&index=12), a tool from Spotify in private-beta that will allow anyone to get started with Backstage through a GUI in a few steps. + +**A thriving community** + +People gathered outside the conference room where BackstageCon was happening to catch up with each other and learn from the event sponsors. It was great to connect with everyone and talk about how everyone is using Backstage. + +![KubeCon Attendees](assets/23-11-15/20-booth.jpg) + +![Spotify at BackstageCon](assets/23-11-15/30-spotify-kubecon.jpg) + +### Mom, Backstage is not a phase + +The interest from the cloud-native community in Backstage did not waver this year. Instead, the Backstage booth in the KubeCon Project Pavillion saw a nonstop flux of visitors asking more about the project. There were three talks featuring Backstage during KubeCon. + +**Backstage talks during KubeCon NA '23** + +The first talk touching on Backstage of the schedule was Tim Hansen's ([timbonicus](https://github.com/timbonicus)) "Everything Is Code: Embracing GitOps at Spotify," who achieved rockstar status thanks to his phenomenal insights. The queue to ask questions after the talk's questions was surreal! + +![KubeCon Attendees](assets/23-11-15/40-tim-talk.jpg) + +Backstage maintainers Ben and Patrik addressed a full-room during their talk “Simplifying Backstage - Breaking the Code Barrier” in which they explained Declarative Integration, how it works and the expected migration path. Declarative Integration will enable adopters to install the plugins they use—and even customize them—without dealing with TypeScript or React. + +![KubeCon Attendees](assets/23-11-15/50-patrik-ben-full.jpg) + +And to close the event, Ritesh Patel, Nirmata and David Murphy, Upbound, introduced the BACK Stack, which stands for Backstage, Argo, Crossplane, and Kyverno. These four tools make up a powerful combo that can enable self-service workflows secure and scalable. After a great demo, the speakers presented a reference architecture that can help guide an approach to using Backstage to build your platform. + +![KubeCon Attendees](assets/23-11-15/60-back-stack.jpg) + +### See you next year! + +The next KubeCon Europe is scheduled for March 18-22 in Paris. We're looking forward to meeting you all there! [KubeCon EU](https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/program/cfp/) and[ BackstageCon EU](https://events.linuxfoundation.org/kubecon-cloudnativecon-europe/co-located-events/backstagecon/) are accepting CFPs, submit your proposal now! diff --git a/microsite/blog/assets/23-11-15/00-cover.png b/microsite/blog/assets/23-11-15/00-cover.png new file mode 100644 index 0000000000..18da63a930 Binary files /dev/null and b/microsite/blog/assets/23-11-15/00-cover.png differ diff --git a/microsite/blog/assets/23-11-15/10-panel.jpg b/microsite/blog/assets/23-11-15/10-panel.jpg new file mode 100644 index 0000000000..a6ebf8dcae Binary files /dev/null and b/microsite/blog/assets/23-11-15/10-panel.jpg differ diff --git a/microsite/blog/assets/23-11-15/20-booth.jpg b/microsite/blog/assets/23-11-15/20-booth.jpg new file mode 100644 index 0000000000..4faa5a5f1f Binary files /dev/null and b/microsite/blog/assets/23-11-15/20-booth.jpg differ diff --git a/microsite/blog/assets/23-11-15/30-spotify-kubecon.jpg b/microsite/blog/assets/23-11-15/30-spotify-kubecon.jpg new file mode 100644 index 0000000000..fa64ec451f Binary files /dev/null and b/microsite/blog/assets/23-11-15/30-spotify-kubecon.jpg differ diff --git a/microsite/blog/assets/23-11-15/40-tim-talk.jpg b/microsite/blog/assets/23-11-15/40-tim-talk.jpg new file mode 100644 index 0000000000..73873bcb4c Binary files /dev/null and b/microsite/blog/assets/23-11-15/40-tim-talk.jpg differ diff --git a/microsite/blog/assets/23-11-15/50-patrik-ben-full.jpg b/microsite/blog/assets/23-11-15/50-patrik-ben-full.jpg new file mode 100644 index 0000000000..2048dd2f5a Binary files /dev/null and b/microsite/blog/assets/23-11-15/50-patrik-ben-full.jpg differ diff --git a/microsite/blog/assets/23-11-15/60-back-stack.jpg b/microsite/blog/assets/23-11-15/60-back-stack.jpg new file mode 100644 index 0000000000..668fc407da Binary files /dev/null and b/microsite/blog/assets/23-11-15/60-back-stack.jpg differ diff --git a/microsite/data/plugins/festive-fun.yaml b/microsite/data/plugins/festive-fun.yaml new file mode 100644 index 0000000000..33995eca27 --- /dev/null +++ b/microsite/data/plugins/festive-fun.yaml @@ -0,0 +1,10 @@ +--- +title: Festive Fun +author: benjmac +authorUrl: https://github.com/benjmac +category: Humor +description: Festive, seasonal, animations to spice up your instance of Backstage! +documentation: https://github.com/benjmac/backstage-plugin-festive-fun/ +iconUrl: https://raw.githubusercontent.com/benjmac/backstage-plugin-festive-fun/main/docs/festive-fun-logo.png +npmPackageName: 'backstage-plugin-festive-fun' +addedDate: '2023-11-20' diff --git a/microsite/data/plugins/harness-srm.yaml b/microsite/data/plugins/harness-srm.yaml new file mode 100644 index 0000000000..d55c60ea04 --- /dev/null +++ b/microsite/data/plugins/harness-srm.yaml @@ -0,0 +1,14 @@ +--- +title: Harness Service Reliability Management +author: harness.io +authorUrl: https://github.com/harness/backstage-plugins +category: Quality +description: This plugin tracks the defined SLOs and Error Budgets for your Monitored services in Harness SRM Module. +documentation: https://github.com/harness/backstage-plugins/tree/main/plugins/harness-srm +iconUrl: https://static.harness.io/ng-static/images/favicon.png +npmPackageName: '@harnessio/backstage-plugin-harness-srm' +tags: + - service-reliability-management + - slo + - sli +addedDate: '2023-11-17' diff --git a/microsite/data/plugins/highlights.yaml b/microsite/data/plugins/highlights.yaml new file mode 100644 index 0000000000..82d303f4ed --- /dev/null +++ b/microsite/data/plugins/highlights.yaml @@ -0,0 +1,12 @@ +--- +title: Highlights +author: RSC Labs +authorUrl: https://rsoftcon.com/ +category: Discovery +description: Highlight what is important for you and put it on front for the quick view and access. Built-in support of Git information from GitHub and GitLab. +documentation: https://github.com/RSC-Labs/backstage-highlights-plugin/blob/main/README.md +iconUrl: https://raw.githubusercontent.com/RSC-Labs/backstage-highlights-plugin/main/docs/highlighter.png +npmPackageName: '@rsc-labs/backstage-highlights-plugin' +tags: + - highlights +addedDate: '2023-11-20' diff --git a/microsite/data/plugins/opencost.yaml b/microsite/data/plugins/opencost.yaml index dbf65979ca..950b0606a7 100644 --- a/microsite/data/plugins/opencost.yaml +++ b/microsite/data/plugins/opencost.yaml @@ -5,6 +5,6 @@ authorUrl: https://opencost.io category: Monitoring description: OpenCost provides cloud cost monitoring for your cloud native environments. documentation: https://github.com/backstage/backstage/blob/master/plugins/opencost/README.md -iconUrl: img/opencost.png +iconUrl: /img/opencost.png npmPackageName: '@backstage/plugin-opencost' addedDate: '2023-10-26' diff --git a/microsite/docusaurus.config.js b/microsite/docusaurus.config.js index f4dd76b8e3..99f58d29cb 100644 --- a/microsite/docusaurus.config.js +++ b/microsite/docusaurus.config.js @@ -140,6 +140,10 @@ module.exports = { from: '/docs/getting-started/running-backstage-locally', to: '/docs/getting-started/', }, + { + from: '/docs/features/software-templates/testing-scaffolder-alpha', + to: '/docs/features/software-templates/migrating-to-rjsf-v5', + }, ], }, ], @@ -178,7 +182,7 @@ module.exports = { position: 'left', }, { - to: 'docs/releases/v1.19.0', + to: 'docs/releases/v1.20.0', label: 'Releases', position: 'left', }, diff --git a/microsite/sidebars.json b/microsite/sidebars.json index 8d8cb39eaa..c9b1c99eba 100644 --- a/microsite/sidebars.json +++ b/microsite/sidebars.json @@ -1,6 +1,7 @@ { "releases": { "Release Notes": [ + "releases/v1.20.0", "releases/v1.19.0", "releases/v1.18.0", "releases/v1.17.0", @@ -116,7 +117,7 @@ "features/software-templates/writing-custom-field-extensions", "features/software-templates/writing-custom-step-layouts", "features/software-templates/authorizing-parameters-steps-and-actions", - "features/software-templates/testing-scaffolder-alpha", + "features/software-templates/migrating-to-rjsf-v5", "features/software-templates/migrating-from-v1beta2-to-v1beta3" ] }, diff --git a/microsite/yarn.lock b/microsite/yarn.lock index bac3df5e70..0eed7b6eb3 100644 --- a/microsite/yarn.lock +++ b/microsite/yarn.lock @@ -2701,90 +2701,82 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-darwin-arm64@npm:1.3.96" +"@swc/core-darwin-arm64@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-darwin-arm64@npm:1.3.99" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-darwin-x64@npm:1.3.96" +"@swc/core-darwin-x64@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-darwin-x64@npm:1.3.99" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.96" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@swc/core-linux-arm64-gnu@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.96" +"@swc/core-linux-arm64-gnu@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.99" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.96" +"@swc/core-linux-arm64-musl@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.99" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.96" +"@swc/core-linux-x64-gnu@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.99" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-linux-x64-musl@npm:1.3.96" +"@swc/core-linux-x64-musl@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-linux-x64-musl@npm:1.3.99" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.96" +"@swc/core-win32-arm64-msvc@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.99" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.96" +"@swc/core-win32-ia32-msvc@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.99" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.96" +"@swc/core-win32-x64-msvc@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.99" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.46": - version: 1.3.96 - resolution: "@swc/core@npm:1.3.96" + version: 1.3.99 + resolution: "@swc/core@npm:1.3.99" dependencies: - "@swc/core-darwin-arm64": 1.3.96 - "@swc/core-darwin-x64": 1.3.96 - "@swc/core-linux-arm-gnueabihf": 1.3.96 - "@swc/core-linux-arm64-gnu": 1.3.96 - "@swc/core-linux-arm64-musl": 1.3.96 - "@swc/core-linux-x64-gnu": 1.3.96 - "@swc/core-linux-x64-musl": 1.3.96 - "@swc/core-win32-arm64-msvc": 1.3.96 - "@swc/core-win32-ia32-msvc": 1.3.96 - "@swc/core-win32-x64-msvc": 1.3.96 + "@swc/core-darwin-arm64": 1.3.99 + "@swc/core-darwin-x64": 1.3.99 + "@swc/core-linux-arm64-gnu": 1.3.99 + "@swc/core-linux-arm64-musl": 1.3.99 + "@swc/core-linux-x64-gnu": 1.3.99 + "@swc/core-linux-x64-musl": 1.3.99 + "@swc/core-win32-arm64-msvc": 1.3.99 + "@swc/core-win32-ia32-msvc": 1.3.99 + "@swc/core-win32-x64-msvc": 1.3.99 "@swc/counter": ^0.1.1 "@swc/types": ^0.1.5 peerDependencies: @@ -2794,8 +2786,6 @@ __metadata: optional: true "@swc/core-darwin-x64": optional: true - "@swc/core-linux-arm-gnueabihf": - optional: true "@swc/core-linux-arm64-gnu": optional: true "@swc/core-linux-arm64-musl": @@ -2813,7 +2803,7 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: 41d4a4461b2952aaf8d3be945d373d0f3bd126115ee1aad0f76f2690e2b5635b6ec5bb54a7638deb9afedb1ad6f7d8453468a704e54e5fbb8234dd4a43b80205 + checksum: a4d51e650913045fe3100195b053dafb55dc06fcadd4a9381712c64f09a75d548596bb1a96e8ed84ba0199f701e821a381a25db82c1016cdd731e0077a83192e languageName: node linkType: hard @@ -3055,9 +3045,9 @@ __metadata: linkType: hard "@types/luxon@npm:^3.0.0": - version: 3.3.4 - resolution: "@types/luxon@npm:3.3.4" - checksum: aa4862bd62d748e7966f9a0ec76058e9d74397ee426c7d64f61c677d83de0303c303cc78515001833df3f4ad16c95f572b0e2ffaee6e55bc50b80857e8437f3a + version: 3.3.5 + resolution: "@types/luxon@npm:3.3.5" + checksum: 7fd31c673600dd494dedefe8c405d2e6957c0ba101f8445f7eaf9afcf4a1fa1ca649cab01c9777523ff9de58c3c35e2589a1a004a0c629cd7953033115ac74f5 languageName: node linkType: hard @@ -7562,9 +7552,9 @@ __metadata: linkType: hard "luxon@npm:^3.0.0": - version: 3.4.3 - resolution: "luxon@npm:3.4.3" - checksum: 3eade81506224d038ed24035a0cd0dd4887848d7eba9361dce9ad8ef81380596a68153240be3988721f9690c624fb449fcf8fd8c3fc0681a6a8496faf48e92a3 + version: 3.4.4 + resolution: "luxon@npm:3.4.4" + checksum: 36c1f99c4796ee4bfddf7dc94fa87815add43ebc44c8934c924946260a58512f0fd2743a629302885df7f35ccbd2d13f178c15df046d0e3b6eb71db178f1c60c languageName: node linkType: hard diff --git a/package.json b/package.json index 25d89ba398..1b23829f76 100644 --- a/package.json +++ b/package.json @@ -54,10 +54,9 @@ "@material-ui/pickers@^3.3.10": "patch:@material-ui/pickers@npm%3A3.3.11#./.yarn/patches/@material-ui-pickers-npm-3.3.11-1c8f68ea20.patch", "@material-ui/pickers@^3.2.10": "patch:@material-ui/pickers@npm%3A3.3.11#./.yarn/patches/@material-ui-pickers-npm-3.3.11-1c8f68ea20.patch" }, - "version": "1.20.0-next.2", + "version": "1.21.0-next.1", "dependencies": { "@backstage/errors": "workspace:^", - "@changesets/changelog-github": "^0.4.8", "@manypkg/get-packages": "^1.1.3", "@useoptic/optic": "^0.50.10" }, @@ -82,17 +81,17 @@ "eslint": "^8.6.0", "eslint-plugin-notice": "^0.9.10", "eslint-plugin-react": "^7.28.0", - "eslint-plugin-testing-library": "^5.9.1", + "eslint-plugin-testing-library": "^6.0.0", "fs-extra": "10.1.0", "husky": "^8.0.0", - "lint-staged": "^13.0.0", + "lint-staged": "^15.0.0", "minimist": "^1.2.5", - "node-gyp": "^9.4.0", + "node-gyp": "^10.0.0", "prettier": "^2.2.1", "semver": "^7.5.3", "shx": "^0.3.2", "ts-node": "^10.4.0", - "typescript": "~5.0.0" + "typescript": "~5.2.0" }, "prettier": "@spotify/prettier-config", "lint-staged": { diff --git a/packages/app-defaults/CHANGELOG.md b/packages/app-defaults/CHANGELOG.md index 647cf987b6..62873d9809 100644 --- a/packages/app-defaults/CHANGELOG.md +++ b/packages/app-defaults/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/app-defaults +## 1.4.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/core-app-api@1.11.2-next.0 + - @backstage/plugin-permission-react@0.4.18-next.0 + +## 1.4.5 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-permission-react@0.4.17 + - @backstage/core-app-api@1.11.1 + - @backstage/theme@0.4.4 + ## 1.4.5-next.2 ### Patch Changes diff --git a/packages/app-defaults/package.json b/packages/app-defaults/package.json index 875213f678..550672d7fb 100644 --- a/packages/app-defaults/package.json +++ b/packages/app-defaults/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/app-defaults", "description": "Provides the default wiring of a Backstage App", - "version": "1.4.5-next.2", + "version": "1.4.6-next.0", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/app-next-example-plugin/CHANGELOG.md b/packages/app-next-example-plugin/CHANGELOG.md index 373a0b61d0..2eff29241d 100644 --- a/packages/app-next-example-plugin/CHANGELOG.md +++ b/packages/app-next-example-plugin/CHANGELOG.md @@ -1,5 +1,21 @@ # app-next-example-plugin +## 0.0.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.9-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + +## 0.0.3 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + ## 0.0.3-next.2 ### Patch Changes diff --git a/packages/app-next-example-plugin/package.json b/packages/app-next-example-plugin/package.json index dedb8e4329..b3de8f9a83 100644 --- a/packages/app-next-example-plugin/package.json +++ b/packages/app-next-example-plugin/package.json @@ -1,7 +1,7 @@ { "name": "app-next-example-plugin", "description": "Backstage internal example plugin", - "version": "0.0.3-next.2", + "version": "0.0.4-next.0", "publishConfig": { "access": "public", "main": "dist/index.esm.js", @@ -45,7 +45,7 @@ }, "devDependencies": { "@backstage/cli": "workspace:^", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/packages/app-next/CHANGELOG.md b/packages/app-next/CHANGELOG.md index 194160771d..879025f1a0 100644 --- a/packages/app-next/CHANGELOG.md +++ b/packages/app-next/CHANGELOG.md @@ -1,5 +1,180 @@ # example-app-next +## 0.0.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.0.1-next.0 + - @backstage/plugin-catalog@1.16.0-next.1 + - @backstage/plugin-catalog-import@0.10.4-next.1 + - @backstage/plugin-graphiql@0.3.1-next.1 + - @backstage/plugin-search@1.4.4-next.1 + - @backstage/plugin-tech-radar@0.6.11-next.1 + - @backstage/plugin-techdocs@1.9.2-next.1 + - @backstage/plugin-user-settings@0.7.14-next.1 + - @backstage/plugin-api-docs@0.10.2-next.1 + - @backstage/plugin-catalog-graph@0.3.2-next.0 + - @backstage/plugin-explore@0.4.14-next.0 + - @backstage/plugin-org@0.6.18-next.0 + - @backstage/plugin-scaffolder@1.16.2-next.0 + - @backstage/plugin-scaffolder-react@1.6.2-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.3-next.0 + +## 0.0.4-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.0.2-next.0 + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/plugin-catalog-react@1.9.2-next.0 + - @backstage/plugin-api-docs@0.10.2-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/plugin-scaffolder@1.16.2-next.0 + - @backstage/plugin-catalog@1.16.0-next.0 + - @backstage/frontend-app-api@0.3.1-next.0 + - @backstage/plugin-org@0.6.18-next.0 + - @backstage/plugin-scaffolder-react@1.6.2-next.0 + - @backstage/plugin-catalog-import@0.10.4-next.0 + - @backstage/plugin-user-settings@0.7.14-next.0 + - @backstage/plugin-tech-radar@0.6.11-next.0 + - @backstage/plugin-graphiql@0.3.1-next.0 + - @backstage/plugin-techdocs@1.9.2-next.0 + - @backstage/plugin-search@1.4.4-next.0 + - @backstage/plugin-search-react@1.7.4-next.0 + - @backstage/cli@0.24.1-next.0 + - @backstage/plugin-home@0.5.12-next.0 + - @backstage/plugin-kubernetes@0.11.3-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/app-defaults@1.4.6-next.0 + - @backstage/core-app-api@1.11.2-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/plugin-adr@0.6.11-next.0 + - @backstage/plugin-airbrake@0.3.28-next.0 + - @backstage/plugin-apache-airflow@0.2.18-next.0 + - @backstage/plugin-azure-devops@0.3.10-next.0 + - @backstage/plugin-azure-sites@0.1.17-next.0 + - @backstage/plugin-badges@0.2.52-next.0 + - @backstage/plugin-catalog-graph@0.3.2-next.0 + - @backstage/plugin-catalog-unprocessed-entities@0.1.6-next.0 + - @backstage/plugin-circleci@0.3.28-next.0 + - @backstage/plugin-cloudbuild@0.3.28-next.0 + - @backstage/plugin-code-coverage@0.2.21-next.0 + - @backstage/plugin-cost-insights@0.12.17-next.0 + - @backstage/plugin-devtools@0.1.7-next.0 + - @backstage/plugin-dynatrace@8.0.2-next.0 + - @backstage/plugin-entity-feedback@0.2.11-next.0 + - @backstage/plugin-explore@0.4.14-next.0 + - @backstage/plugin-gcalendar@0.3.21-next.0 + - @backstage/plugin-gcp-projects@0.3.44-next.0 + - @backstage/plugin-github-actions@0.6.9-next.0 + - @backstage/plugin-gocd@0.1.34-next.0 + - @backstage/plugin-jenkins@0.9.3-next.0 + - @backstage/plugin-kafka@0.3.28-next.0 + - @backstage/plugin-lighthouse@0.4.13-next.0 + - @backstage/plugin-linguist@0.1.13-next.0 + - @backstage/plugin-microsoft-calendar@0.1.10-next.0 + - @backstage/plugin-newrelic@0.3.43-next.0 + - @backstage/plugin-newrelic-dashboard@0.3.3-next.0 + - @backstage/plugin-octopus-deploy@0.2.10-next.0 + - @backstage/plugin-pagerduty@0.6.9-next.0 + - @backstage/plugin-permission-react@0.4.18-next.0 + - @backstage/plugin-playlist@0.2.2-next.0 + - @backstage/plugin-puppetdb@0.1.11-next.0 + - @backstage/plugin-rollbar@0.4.28-next.0 + - @backstage/plugin-sentry@0.5.13-next.0 + - @backstage/plugin-shortcuts@0.3.17-next.0 + - @backstage/plugin-stackstorm@0.1.9-next.0 + - @backstage/plugin-tech-insights@0.3.20-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.3-next.0 + - @backstage/plugin-techdocs-react@1.1.14-next.0 + - @backstage/plugin-todo@0.2.32-next.0 + - app-next-example-plugin@0.0.4-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-linguist-common@0.1.2 + - @backstage/plugin-search-common@1.2.8 + +## 0.0.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-api-docs@0.10.0 + - @backstage/plugin-catalog-import@0.10.2 + - @backstage/cli@0.24.0 + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/plugin-shortcuts@0.3.16 + - @backstage/plugin-home@0.5.10 + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/plugin-catalog@1.15.0 + - @backstage/plugin-graphiql@0.3.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.2 + - @backstage/plugin-techdocs@1.9.0 + - @backstage/plugin-cloudbuild@0.3.26 + - @backstage/plugin-scaffolder@1.16.0 + - @backstage/frontend-app-api@0.3.0 + - @backstage/plugin-user-settings@0.7.12 + - @backstage/plugin-tech-radar@0.6.10 + - @backstage/plugin-search@1.4.2 + - @backstage/plugin-catalog-unprocessed-entities@0.1.5 + - @backstage/integration-react@1.1.21 + - @backstage/plugin-microsoft-calendar@0.1.9 + - @backstage/plugin-newrelic-dashboard@0.3.1 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-permission-react@0.4.17 + - @backstage/plugin-scaffolder-react@1.6.0 + - @backstage/plugin-entity-feedback@0.2.9 + - @backstage/plugin-apache-airflow@0.2.17 + - @backstage/plugin-github-actions@0.6.7 + - @backstage/plugin-octopus-deploy@0.2.8 + - @backstage/plugin-techdocs-react@1.1.13 + - @backstage/app-defaults@1.4.5 + - @backstage/core-app-api@1.11.1 + - @backstage/plugin-catalog-graph@0.3.0 + - @backstage/plugin-code-coverage@0.2.19 + - @backstage/plugin-cost-insights@0.12.15 + - @backstage/plugin-tech-insights@0.3.18 + - @backstage/plugin-azure-devops@0.3.8 + - @backstage/plugin-gcp-projects@0.3.43 + - @backstage/plugin-search-react@1.7.2 + - @backstage/plugin-azure-sites@0.1.15 + - @backstage/plugin-kubernetes@0.11.1 + - @backstage/plugin-lighthouse@0.4.11 + - @backstage/plugin-stackstorm@0.1.8 + - @backstage/plugin-dynatrace@8.0.0 + - @backstage/plugin-gcalendar@0.3.20 + - @backstage/plugin-pagerduty@0.6.7 + - @backstage/plugin-airbrake@0.3.26 + - @backstage/plugin-circleci@0.3.26 + - @backstage/plugin-devtools@0.1.6 + - @backstage/plugin-linguist@0.1.11 + - @backstage/plugin-newrelic@0.3.42 + - @backstage/plugin-playlist@0.2.0 + - @backstage/plugin-puppetdb@0.1.9 + - @backstage/plugin-explore@0.4.12 + - @backstage/plugin-jenkins@0.9.1 + - @backstage/plugin-rollbar@0.4.26 + - @backstage/theme@0.4.4 + - @backstage/plugin-badges@0.2.50 + - @backstage/plugin-sentry@0.5.11 + - @backstage/plugin-kafka@0.3.26 + - @backstage/plugin-gocd@0.1.32 + - @backstage/plugin-todo@0.2.30 + - @backstage/plugin-adr@0.6.9 + - @backstage/plugin-org@0.6.16 + - app-next-example-plugin@0.0.3 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/core-compat-api@0.0.1 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-linguist-common@0.1.2 + - @backstage/plugin-search-common@1.2.8 + ## 0.0.3-next.2 ### Patch Changes diff --git a/packages/app-next/package.json b/packages/app-next/package.json index 90108f9065..30ac920c2c 100644 --- a/packages/app-next/package.json +++ b/packages/app-next/package.json @@ -1,6 +1,6 @@ { "name": "example-app-next", - "version": "0.0.3-next.2", + "version": "0.0.4-next.1", "private": true, "backstage": { "role": "frontend" diff --git a/packages/app-next/src/App.tsx b/packages/app-next/src/App.tsx index 978c40ef44..67faf8d646 100644 --- a/packages/app-next/src/App.tsx +++ b/packages/app-next/src/App.tsx @@ -36,12 +36,18 @@ import { collectLegacyRoutes } from '@backstage/core-compat-api'; import { FlatRoutes } from '@backstage/core-app-api'; import { Route } from 'react-router'; import { CatalogImportPage } from '@backstage/plugin-catalog-import'; -import { createApiFactory, configApiRef } from '@backstage/core-plugin-api'; +import { + createApiFactory, + configApiRef, + SignInPageProps, +} from '@backstage/core-plugin-api'; import { ScmAuth, ScmIntegrationsApi, scmIntegrationsApiRef, } from '@backstage/integration-react'; +import { createSignInPageExtension } from '@backstage/frontend-plugin-api'; +import { SignInPage } from '@backstage/core-components'; /* @@ -84,6 +90,12 @@ const homePageExtension = createExtension({ }, }); +const signInPage = createSignInPageExtension({ + id: 'signInPage', + loader: async () => (props: SignInPageProps) => + , +}); + const scmAuthExtension = createApiExtension({ factory: ScmAuth.createDefaultApiFactory(), }); @@ -112,7 +124,12 @@ const app = createApp({ homePlugin, ...collectedLegacyPlugins, createExtensionOverrides({ - extensions: [homePageExtension, scmAuthExtension, scmIntegrationApi], + extensions: [ + homePageExtension, + scmAuthExtension, + scmIntegrationApi, + signInPage, + ], }), ], /* Handled through config instead */ diff --git a/packages/app/CHANGELOG.md b/packages/app/CHANGELOG.md index 67166b089b..089aa84942 100644 --- a/packages/app/CHANGELOG.md +++ b/packages/app/CHANGELOG.md @@ -1,5 +1,179 @@ # example-app +## 0.2.90-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.16.0-next.1 + - @backstage/plugin-catalog-import@0.10.4-next.1 + - @backstage/plugin-graphiql@0.3.1-next.1 + - @backstage/plugin-search@1.4.4-next.1 + - @backstage/plugin-tech-radar@0.6.11-next.1 + - @backstage/plugin-techdocs@1.9.2-next.1 + - @backstage/plugin-user-settings@0.7.14-next.1 + - @backstage/plugin-api-docs@0.10.2-next.1 + - @backstage/plugin-catalog-graph@0.3.2-next.0 + - @backstage/plugin-explore@0.4.14-next.0 + - @backstage/plugin-org@0.6.18-next.0 + - @backstage/plugin-scaffolder@1.16.2-next.0 + - @backstage/plugin-scaffolder-react@1.6.2-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.3-next.0 + +## 0.2.90-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/plugin-api-docs@0.10.2-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/plugin-scaffolder@1.16.2-next.0 + - @backstage/plugin-catalog@1.16.0-next.0 + - @backstage/frontend-app-api@0.3.1-next.0 + - @backstage/plugin-org@0.6.18-next.0 + - @backstage/plugin-scaffolder-react@1.6.2-next.0 + - @backstage/plugin-catalog-import@0.10.4-next.0 + - @backstage/plugin-user-settings@0.7.14-next.0 + - @backstage/plugin-tech-radar@0.6.11-next.0 + - @backstage/plugin-graphiql@0.3.1-next.0 + - @backstage/plugin-techdocs@1.9.2-next.0 + - @backstage/plugin-search@1.4.4-next.0 + - @backstage/plugin-search-react@1.7.4-next.0 + - @backstage/cli@0.24.1-next.0 + - @backstage/plugin-home@0.5.12-next.0 + - @backstage/plugin-kubernetes@0.11.3-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/app-defaults@1.4.6-next.0 + - @backstage/core-app-api@1.11.2-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/plugin-adr@0.6.11-next.0 + - @backstage/plugin-airbrake@0.3.28-next.0 + - @backstage/plugin-apache-airflow@0.2.18-next.0 + - @backstage/plugin-azure-devops@0.3.10-next.0 + - @backstage/plugin-azure-sites@0.1.17-next.0 + - @backstage/plugin-badges@0.2.52-next.0 + - @backstage/plugin-catalog-graph@0.3.2-next.0 + - @backstage/plugin-catalog-unprocessed-entities@0.1.6-next.0 + - @backstage/plugin-circleci@0.3.28-next.0 + - @backstage/plugin-cloudbuild@0.3.28-next.0 + - @backstage/plugin-code-coverage@0.2.21-next.0 + - @backstage/plugin-cost-insights@0.12.17-next.0 + - @backstage/plugin-devtools@0.1.7-next.0 + - @backstage/plugin-dynatrace@8.0.2-next.0 + - @backstage/plugin-entity-feedback@0.2.11-next.0 + - @backstage/plugin-explore@0.4.14-next.0 + - @backstage/plugin-gcalendar@0.3.21-next.0 + - @backstage/plugin-gcp-projects@0.3.44-next.0 + - @backstage/plugin-github-actions@0.6.9-next.0 + - @backstage/plugin-gocd@0.1.34-next.0 + - @backstage/plugin-jenkins@0.9.3-next.0 + - @backstage/plugin-kafka@0.3.28-next.0 + - @backstage/plugin-kubernetes-cluster@0.0.4-next.0 + - @backstage/plugin-lighthouse@0.4.13-next.0 + - @backstage/plugin-linguist@0.1.13-next.0 + - @backstage/plugin-microsoft-calendar@0.1.10-next.0 + - @backstage/plugin-newrelic@0.3.43-next.0 + - @backstage/plugin-newrelic-dashboard@0.3.3-next.0 + - @backstage/plugin-nomad@0.1.9-next.0 + - @backstage/plugin-octopus-deploy@0.2.10-next.0 + - @backstage/plugin-pagerduty@0.6.9-next.0 + - @backstage/plugin-permission-react@0.4.18-next.0 + - @backstage/plugin-playlist@0.2.2-next.0 + - @backstage/plugin-puppetdb@0.1.11-next.0 + - @backstage/plugin-rollbar@0.4.28-next.0 + - @backstage/plugin-sentry@0.5.13-next.0 + - @backstage/plugin-shortcuts@0.3.17-next.0 + - @backstage/plugin-stack-overflow@0.1.23-next.0 + - @backstage/plugin-stackstorm@0.1.9-next.0 + - @backstage/plugin-tech-insights@0.3.20-next.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.3-next.0 + - @backstage/plugin-techdocs-react@1.1.14-next.0 + - @backstage/plugin-todo@0.2.32-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-linguist-common@0.1.2 + - @backstage/plugin-search-common@1.2.8 + +## 0.2.89 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-api-docs@0.10.0 + - @backstage/plugin-catalog-import@0.10.2 + - @backstage/cli@0.24.0 + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/plugin-shortcuts@0.3.16 + - @backstage/plugin-home@0.5.10 + - @backstage/core-components@0.13.8 + - @backstage/plugin-catalog@1.15.0 + - @backstage/plugin-graphiql@0.3.0 + - @backstage/plugin-techdocs-module-addons-contrib@1.1.2 + - @backstage/plugin-techdocs@1.9.0 + - @backstage/plugin-cloudbuild@0.3.26 + - @backstage/plugin-scaffolder@1.16.0 + - @backstage/frontend-app-api@0.3.0 + - @backstage/plugin-user-settings@0.7.12 + - @backstage/plugin-tech-radar@0.6.10 + - @backstage/plugin-search@1.4.2 + - @backstage/plugin-catalog-unprocessed-entities@0.1.5 + - @backstage/integration-react@1.1.21 + - @backstage/plugin-kubernetes-cluster@0.0.2 + - @backstage/plugin-microsoft-calendar@0.1.9 + - @backstage/plugin-newrelic-dashboard@0.3.1 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-permission-react@0.4.17 + - @backstage/plugin-scaffolder-react@1.6.0 + - @backstage/plugin-entity-feedback@0.2.9 + - @backstage/plugin-apache-airflow@0.2.17 + - @backstage/plugin-github-actions@0.6.7 + - @backstage/plugin-octopus-deploy@0.2.8 + - @backstage/plugin-stack-overflow@0.1.22 + - @backstage/plugin-techdocs-react@1.1.13 + - @backstage/app-defaults@1.4.5 + - @backstage/core-app-api@1.11.1 + - @backstage/plugin-catalog-graph@0.3.0 + - @backstage/plugin-code-coverage@0.2.19 + - @backstage/plugin-cost-insights@0.12.15 + - @backstage/plugin-tech-insights@0.3.18 + - @backstage/plugin-azure-devops@0.3.8 + - @backstage/plugin-gcp-projects@0.3.43 + - @backstage/plugin-search-react@1.7.2 + - @backstage/plugin-azure-sites@0.1.15 + - @backstage/plugin-kubernetes@0.11.1 + - @backstage/plugin-lighthouse@0.4.11 + - @backstage/plugin-stackstorm@0.1.8 + - @backstage/plugin-dynatrace@8.0.0 + - @backstage/plugin-gcalendar@0.3.20 + - @backstage/plugin-pagerduty@0.6.7 + - @backstage/plugin-airbrake@0.3.26 + - @backstage/plugin-circleci@0.3.26 + - @backstage/plugin-devtools@0.1.6 + - @backstage/plugin-linguist@0.1.11 + - @backstage/plugin-newrelic@0.3.42 + - @backstage/plugin-playlist@0.2.0 + - @backstage/plugin-puppetdb@0.1.9 + - @backstage/plugin-explore@0.4.12 + - @backstage/plugin-jenkins@0.9.1 + - @backstage/plugin-rollbar@0.4.26 + - @backstage/theme@0.4.4 + - @backstage/plugin-badges@0.2.50 + - @backstage/plugin-sentry@0.5.11 + - @backstage/plugin-kafka@0.3.26 + - @backstage/plugin-nomad@0.1.7 + - @backstage/plugin-gocd@0.1.32 + - @backstage/plugin-todo@0.2.30 + - @backstage/plugin-adr@0.6.9 + - @backstage/plugin-org@0.6.16 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-linguist-common@0.1.2 + - @backstage/plugin-search-common@1.2.8 + ## 0.2.89-next.2 ### Patch Changes diff --git a/packages/app/package.json b/packages/app/package.json index 3655c38b13..7cf7ae3290 100644 --- a/packages/app/package.json +++ b/packages/app/package.json @@ -1,6 +1,6 @@ { "name": "example-app", - "version": "0.2.89-next.2", + "version": "0.2.90-next.1", "private": true, "backstage": { "role": "frontend" diff --git a/packages/app/src/components/catalog/EntityPage.test.tsx b/packages/app/src/components/catalog/EntityPage.test.tsx index 68ce5fb497..25181db2c1 100644 --- a/packages/app/src/components/catalog/EntityPage.test.tsx +++ b/packages/app/src/components/catalog/EntityPage.test.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import { EntityLayout } from '@backstage/plugin-catalog'; +import { EntityLayout, catalogPlugin } from '@backstage/plugin-catalog'; import { EntityProvider, starredEntitiesApiRef, @@ -51,6 +51,7 @@ describe('EntityPage Test', () => { listWorkflowRuns: jest.fn().mockResolvedValue([]), }; const mockPermissionApi = new MockPermissionApi(); + const rootRouteRef = catalogPlugin.routes.catalogIndex; describe('cicdContent', () => { it('Should render GitHub Actions View', async () => { @@ -70,6 +71,11 @@ describe('EntityPage Test', () => { , + { + mountedRoutes: { + '/catalog': rootRouteRef, + }, + }, ); expect(rendered.getByText('ExampleComponent')).toBeInTheDocument(); diff --git a/packages/backend-app-api/CHANGELOG.md b/packages/backend-app-api/CHANGELOG.md index 256fa98f91..1f19f67eea 100644 --- a/packages/backend-app-api/CHANGELOG.md +++ b/packages/backend-app-api/CHANGELOG.md @@ -1,5 +1,40 @@ # @backstage/backend-app-api +## 0.5.9-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-permission-node@0.7.19-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/cli-common@0.1.13 + - @backstage/cli-node@0.2.0 + - @backstage/config@1.1.1 + - @backstage/config-loader@1.5.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## 0.5.8 + +### Patch Changes + +- bc9a18d5ec: Added a workaround for double `default` wrapping when dynamically importing CommonJS modules with default exports. +- Updated dependencies + - @backstage/config-loader@1.5.3 + - @backstage/cli-node@0.2.0 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/cli-common@0.1.13 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.4.1 + - @backstage/plugin-permission-node@0.7.18 + ## 0.5.8-next.2 ### Patch Changes diff --git a/packages/backend-app-api/package.json b/packages/backend-app-api/package.json index 8fc20cff33..51e052d8a3 100644 --- a/packages/backend-app-api/package.json +++ b/packages/backend-app-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-app-api", "description": "Core API used by Backstage backend apps", - "version": "0.5.8-next.2", + "version": "0.5.9-next.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-common/CHANGELOG.md b/packages/backend-common/CHANGELOG.md index 8b9c65605d..16a4bcafb4 100644 --- a/packages/backend-common/CHANGELOG.md +++ b/packages/backend-common/CHANGELOG.md @@ -1,5 +1,49 @@ # @backstage/backend-common +## 0.20.0-next.0 + +### Minor Changes + +- 870db76a45: Implemented `readTree` for Gitea provider to support TechDocs functionality + +### Patch Changes + +- 7f04128bbc: Allow a default cache TTL to be set through the app config +- 1ad8906a9e: Use `Readable.from` to fix some of the stream issues +- 706fc3a7e1: Updated dependency `@kubernetes/client-node` to `0.20.0`. +- d15d483a49: Add command `--runAsDefaultUser` for `@techdocs/cli generate` to bypass running the docker builds as host user for macOS and Linux. +- d1e00aa17a: Expose an `onAuth` handler for `git` actions to provide custom credentials +- Updated dependencies + - @backstage/integration@1.8.0-next.0 + - @backstage/backend-app-api@0.5.9-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/backend-dev-utils@0.1.2 + - @backstage/cli-common@0.1.13 + - @backstage/config@1.1.1 + - @backstage/config-loader@1.5.3 + - @backstage/errors@1.2.3 + - @backstage/integration-aws-node@0.1.8 + - @backstage/types@1.1.1 + +## 0.19.9 + +### Patch Changes + +- aa13482090: Limit the database creation concurrency to one, defensively +- 013611b42e: `knex` has been bumped to major version 3 and `better-sqlite3` to major version 9, which deprecate node 16 support. +- 3d043526f4: Updated dependency `aws-sdk-client-mock` to `^3.0.0`. +- Updated dependencies + - @backstage/config-loader@1.5.3 + - @backstage/integration@1.7.2 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/integration-aws-node@0.1.8 + - @backstage/backend-app-api@0.5.8 + - @backstage/backend-dev-utils@0.1.2 + - @backstage/cli-common@0.1.13 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + ## 0.19.9-next.2 ### Patch Changes diff --git a/packages/backend-common/api-report.md b/packages/backend-common/api-report.md index 4f1dcdbf81..e7d89c2aa5 100644 --- a/packages/backend-common/api-report.md +++ b/packages/backend-common/api-report.md @@ -7,6 +7,7 @@ /// import { AppConfig } from '@backstage/config'; +import { AuthCallback } from 'isomorphic-git'; import { AwsCredentialsManager } from '@backstage/integration-aws-node'; import { AwsS3Integration } from '@backstage/integration'; import { AzureDevOpsCredentialsProvider } from '@backstage/integration'; @@ -68,6 +69,12 @@ import { V1PodTemplateSpec } from '@kubernetes/client-node'; import * as winston from 'winston'; import { Writable } from 'stream'; +// @public +export type AuthCallbackOptions = { + onAuth: AuthCallback; + logger?: LoggerService; +}; + // @public export class AwsS3UrlReader implements UrlReader { constructor( @@ -385,12 +392,7 @@ export class Git { tags?: boolean; }): Promise; // (undocumented) - static fromAuth: (options: { - username?: string; - password?: string; - token?: string; - logger?: LoggerService; - }) => Git; + static fromAuth: (options: StaticAuthOptions | AuthCallbackOptions) => Git; // (undocumented) init(options: { dir: string; defaultBranch?: string }): Promise; log(options: { dir: string; ref?: string }): Promise; @@ -420,13 +422,18 @@ export class Git { // @public export class GiteaUrlReader implements UrlReader { - constructor(integration: GiteaIntegration); + constructor( + integration: GiteaIntegration, + deps: { + treeResponseFactory: ReadTreeResponseFactory; + }, + ); // (undocumented) static factory: ReaderFactory; // (undocumented) read(url: string): Promise; // (undocumented) - readTree(): Promise; + readTree(url: string, options?: ReadTreeOptions): Promise; // (undocumented) readUrl(url: string, options?: ReadUrlOptions): Promise; // (undocumented) @@ -684,6 +691,7 @@ export type RunContainerOptions = { workingDir?: string; envVars?: Record; pullImage?: boolean; + defaultUser?: boolean; }; export { SearchOptions }; @@ -745,6 +753,14 @@ export function setRootLogger(newLogger: winston.Logger): void; // @public @deprecated export const SingleHostDiscovery: typeof HostDiscovery_2; +// @public +export type StaticAuthOptions = { + username?: string; + password?: string; + token?: string; + logger?: LoggerService; +}; + // @public export type StatusCheck = () => Promise; diff --git a/packages/backend-common/config.d.ts b/packages/backend-common/config.d.ts index f6330d16bc..8bcc5465d5 100644 --- a/packages/backend-common/config.d.ts +++ b/packages/backend-common/config.d.ts @@ -149,6 +149,8 @@ export interface Config { cache?: | { store: 'memory'; + /** An optional default TTL (in milliseconds). */ + defaultTtl?: number; } | { store: 'redis'; @@ -157,6 +159,8 @@ export interface Config { * @visibility secret */ connection: string; + /** An optional default TTL (in milliseconds). */ + defaultTtl?: number; } | { store: 'memcache'; @@ -165,6 +169,8 @@ export interface Config { * @visibility secret */ connection: string; + /** An optional default TTL (in milliseconds). */ + defaultTtl?: number; }; cors?: { diff --git a/packages/backend-common/package.json b/packages/backend-common/package.json index 546d73eaa0..14436fc1f2 100644 --- a/packages/backend-common/package.json +++ b/packages/backend-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-common", "description": "Common functionality library for Backstage backends", - "version": "0.19.9-next.2", + "version": "0.20.0-next.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { @@ -64,10 +64,10 @@ "@backstage/integration": "workspace:^", "@backstage/integration-aws-node": "workspace:^", "@backstage/types": "workspace:^", - "@google-cloud/storage": "^6.0.0", + "@google-cloud/storage": "^7.0.0", "@keyv/memcache": "^1.3.5", "@keyv/redis": "^2.5.3", - "@kubernetes/client-node": "0.19.0", + "@kubernetes/client-node": "0.20.0", "@manypkg/get-packages": "^1.1.3", "@octokit/rest": "^19.0.3", "@types/cors": "^2.8.6", @@ -129,7 +129,7 @@ "@types/tar": "^6.1.1", "@types/webpack-env": "^1.15.2", "@types/yauzl": "^2.10.0", - "aws-sdk-client-mock": "^2.0.0", + "aws-sdk-client-mock": "^3.0.0", "better-sqlite3": "^9.0.0", "http-errors": "^2.0.0", "msw": "^1.0.0", diff --git a/packages/backend-common/src/cache/CacheManager.test.ts b/packages/backend-common/src/cache/CacheManager.test.ts index 13a4a0d599..4b7bb05efd 100644 --- a/packages/backend-common/src/cache/CacheManager.test.ts +++ b/packages/backend-common/src/cache/CacheManager.test.ts @@ -33,11 +33,13 @@ jest.mock('./CacheClient', () => { }; }); +const globalDefaultTtl = 1234; describe('CacheManager', () => { const defaultConfigOptions = { backend: { cache: { store: 'memory', + defaultTtl: globalDefaultTtl, }, }, }; @@ -49,9 +51,11 @@ describe('CacheManager', () => { it('accesses the backend.cache key', () => { const getOptionalString = jest.fn(); const getOptionalBoolean = jest.fn(); + const getOptionalNumber = jest.fn(); const config = defaultConfig(); config.getOptionalString = getOptionalString; config.getOptionalBoolean = getOptionalBoolean; + config.getOptionalNumber = getOptionalNumber; CacheManager.fromConfig(config); @@ -62,6 +66,9 @@ describe('CacheManager', () => { expect(getOptionalBoolean.mock.calls[0][0]).toEqual( 'backend.cache.useRedisSets', ); + expect(getOptionalNumber.mock.calls[0][0]).toEqual( + 'backend.cache.defaultTtl', + ); }); it('does not require the backend.cache key', () => { @@ -159,6 +166,20 @@ describe('CacheManager', () => { }); }); + it('returns memory client with a global defaultTtl when explicitly configured', () => { + const manager = CacheManager.fromConfig(defaultConfig()); + const expectedNamespace = 'test-plugin'; + manager.forPlugin(expectedNamespace).getClient(); + + const cache = Keyv as unknown as jest.Mock; + const mockCalls = cache.mock.calls.splice(-1); + const callArgs = mockCalls[0]; + expect(callArgs[0]).toMatchObject({ + ttl: globalDefaultTtl, + namespace: expectedNamespace, + }); + }); + it('shares memory across multiple instances of the memory client', () => { const manager = CacheManager.fromConfig(defaultConfig()); const plugin = 'test-plugin'; @@ -201,6 +222,32 @@ describe('CacheManager', () => { expect(mockMemcacheCalls[0][0]).toEqual(expectedHost); }); + it('returns a memcache client with a global defaultTtl when configured', () => { + const expectedHost = '127.0.0.1:11211'; + const manager = CacheManager.fromConfig( + new ConfigReader({ + backend: { + cache: { + store: 'memcache', + connection: expectedHost, + defaultTtl: globalDefaultTtl, + }, + }, + }), + ); + manager.forPlugin('test').getClient(); + + const cache = Keyv as unknown as jest.Mock; + const mockCacheCalls = cache.mock.calls.splice(-1); + expect(mockCacheCalls[0][0]).toMatchObject({ + ttl: globalDefaultTtl, + }); + expect(mockCacheCalls[0][0].store).toBeInstanceOf(KeyvMemcache); + const memcache = KeyvMemcache as unknown as jest.Mock; + const mockMemcacheCalls = memcache.mock.calls.splice(-1); + expect(mockMemcacheCalls[0][0]).toEqual(expectedHost); + }); + it('returns a Redis client when configured', () => { const redisConnection = 'redis://127.0.0.1:6379'; const manager = CacheManager.fromConfig( @@ -227,6 +274,32 @@ describe('CacheManager', () => { expect(mockRedisCalls[0][0]).toEqual(redisConnection); }); + it('returns a Redis client with a global defaultTtl when configured', () => { + const redisConnection = 'redis://127.0.0.1:6379'; + const manager = CacheManager.fromConfig( + new ConfigReader({ + backend: { + cache: { + store: 'redis', + connection: redisConnection, + defaultTtl: globalDefaultTtl, + }, + }, + }), + ); + manager.forPlugin('test').getClient(); + + const cache = Keyv as unknown as jest.Mock; + const mockCacheCalls = cache.mock.calls.splice(-1); + expect(mockCacheCalls[0][0]).toMatchObject({ + ttl: globalDefaultTtl, + }); + expect(mockCacheCalls[0][0].store).toBeInstanceOf(KeyvRedis); + const redis = KeyvRedis as unknown as jest.Mock; + const mockRedisCalls = redis.mock.calls.splice(-1); + expect(mockRedisCalls[0][0]).toEqual(redisConnection); + }); + it('returns a Redis client when configured with useRedisSets flag', () => { const redisConnection = 'redis://127.0.0.1:6379'; const useRedisSets = false; diff --git a/packages/backend-common/src/cache/CacheManager.ts b/packages/backend-common/src/cache/CacheManager.ts index efaaf04e3a..c7298ab3e9 100644 --- a/packages/backend-common/src/cache/CacheManager.ts +++ b/packages/backend-common/src/cache/CacheManager.ts @@ -57,6 +57,7 @@ export class CacheManager { private readonly connection: string; private readonly useRedisSets: boolean; private readonly errorHandler: CacheManagerOptions['onError']; + private readonly defaultTtl?: number; /** * Creates a new {@link CacheManager} instance by reading from the `backend` @@ -71,6 +72,7 @@ export class CacheManager { // If no `backend.cache` config is provided, instantiate the CacheManager // with an in-memory cache client. const store = config.getOptionalString('backend.cache.store') || 'memory'; + const defaultTtl = config.getOptionalNumber('backend.cache.defaultTtl'); const connectionString = config.getOptionalString('backend.cache.connection') || ''; const useRedisSets = @@ -84,6 +86,7 @@ export class CacheManager { useRedisSets, logger, options.onError, + defaultTtl, ); } @@ -93,6 +96,7 @@ export class CacheManager { useRedisSets: boolean, logger: LoggerService, errorHandler: CacheManagerOptions['onError'], + defaultTtl?: number, ) { if (!this.storeFactories.hasOwnProperty(store)) { throw new Error(`Unknown cache store: ${store}`); @@ -102,6 +106,7 @@ export class CacheManager { this.connection = connectionString; this.useRedisSets = useRedisSets; this.errorHandler = errorHandler; + this.defaultTtl = defaultTtl; } /** @@ -116,7 +121,7 @@ export class CacheManager { const clientFactory = (options: CacheServiceOptions) => { const concreteClient = this.getClientWithTtl( pluginId, - options.defaultTtl, + options.defaultTtl ?? this.defaultTtl, ); // Always provide an error handler to avoid stopping the process. diff --git a/packages/backend-common/src/reading/GerritUrlReader.ts b/packages/backend-common/src/reading/GerritUrlReader.ts index f4a5fdb9f5..665770815f 100644 --- a/packages/backend-common/src/reading/GerritUrlReader.ts +++ b/packages/backend-common/src/reading/GerritUrlReader.ts @@ -139,7 +139,7 @@ export class GerritUrlReader implements UrlReader { return Buffer.from(responseBody, 'base64'); }, stream: () => { - const readable = new Readable().wrap(response.body); + const readable = Readable.from(response.body); return readable.pipe(new Base64Decode()); }, }; diff --git a/packages/backend-common/src/reading/GiteaUrlReader.test.ts b/packages/backend-common/src/reading/GiteaUrlReader.test.ts index 1860d9f461..a941d2e5aa 100644 --- a/packages/backend-common/src/reading/GiteaUrlReader.test.ts +++ b/packages/backend-common/src/reading/GiteaUrlReader.test.ts @@ -26,6 +26,8 @@ import { DefaultReadTreeResponseFactory } from './tree'; import getRawBody from 'raw-body'; import { GiteaUrlReader } from './GiteaUrlReader'; import { NotFoundError, NotModifiedError } from '@backstage/errors'; +import fs from 'fs-extra'; +import path from 'path'; const treeResponseFactory = DefaultReadTreeResponseFactory.create({ config: new ConfigReader({}), @@ -47,6 +49,7 @@ const giteaProcessor = new GiteaUrlReader( }), ), ), + { treeResponseFactory }, ); const createReader = (config: JsonObject): UrlReaderPredicateTuple[] => { @@ -247,4 +250,82 @@ describe('GiteaUrlReader', () => { ).rejects.toThrow(NotModifiedError); }); }); + + describe('readTree', () => { + const commitHash = '3bdd5457286abdf920db4b77bf2fef79a06190c2'; + + const repoBuffer = fs.readFileSync( + path.resolve(__dirname, '__fixtures__/mock-main.tar.gz'), + ); + + beforeEach(() => { + worker.use( + rest.get( + 'https://gitea.com/api/v1/repos/owner/project/git/commits/branch2', + (_, res, ctx) => { + return res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json({ sha: commitHash }), + ); + }, + ), + ); + }); + + it('should be able to get archive', async () => { + worker.use( + rest.get( + 'https://gitea.com/api/v1/repos/owner/project/archive/branch2.tar.gz', + (_, res, ctx) => { + return res( + ctx.status(200), + ctx.set('Content-Type', 'application/gzip'), + ctx.set( + 'content-disposition', + 'attachment; filename=backstage-mock.tar.gz', + ), + ctx.body(repoBuffer), + ); + }, + ), + ); + + const response = await giteaProcessor.readTree( + 'https://gitea.com/owner/project/src/branch/branch2', + ); + expect(response.etag).toBe(commitHash); + + const files = await response.files(); + expect(files.length).toBe(2); + }); + + it('should return not modified', async () => { + await expect( + giteaProcessor.readTree( + 'https://gitea.com/owner/project/src/branch/branch2', + { + etag: commitHash, + }, + ), + ).rejects.toThrow(NotModifiedError); + }); + + it('should return not found', async () => { + worker.use( + rest.get( + 'https://gitea.com/api/v1/repos/owner/project/git/commits/branch3', + (_, res, ctx) => { + return res(ctx.status(404)); + }, + ), + ); + + await expect( + giteaProcessor.readTree( + 'https://gitea.com/owner/project/src/branch/branch3', + ), + ).rejects.toThrow(NotFoundError); + }); + }); }); diff --git a/packages/backend-common/src/reading/GiteaUrlReader.ts b/packages/backend-common/src/reading/GiteaUrlReader.ts index 34542e878e..c8fab45157 100644 --- a/packages/backend-common/src/reading/GiteaUrlReader.ts +++ b/packages/backend-common/src/reading/GiteaUrlReader.ts @@ -14,15 +14,21 @@ * limitations under the License. */ import { - getGiteaRequestOptions, getGiteaFileContentsUrl, + getGiteaArchiveUrl, + getGiteaLatestCommitUrl, + parseGiteaUrl, + getGiteaRequestOptions, GiteaIntegration, ScmIntegrations, } from '@backstage/integration'; -import { ReadUrlOptions, ReadUrlResponse } from './types'; import { ReaderFactory, + ReadTreeOptions, ReadTreeResponse, + ReadTreeResponseFactory, + ReadUrlOptions, + ReadUrlResponse, SearchResponse, UrlReader, } from './types'; @@ -42,11 +48,11 @@ import { parseLastModified } from './util'; * @public */ export class GiteaUrlReader implements UrlReader { - static factory: ReaderFactory = ({ config }) => { + static factory: ReaderFactory = ({ config, treeResponseFactory }) => { return ScmIntegrations.fromConfig(config) .gitea.list() .map(integration => { - const reader = new GiteaUrlReader(integration); + const reader = new GiteaUrlReader(integration, { treeResponseFactory }); const predicate = (url: URL) => { return url.host === integration.config.host; }; @@ -54,7 +60,12 @@ export class GiteaUrlReader implements UrlReader { }); }; - constructor(private readonly integration: GiteaIntegration) {} + constructor( + private readonly integration: GiteaIntegration, + private readonly deps: { + treeResponseFactory: ReadTreeResponseFactory; + }, + ) {} async read(url: string): Promise { const response = await this.readUrl(url); @@ -113,9 +124,38 @@ export class GiteaUrlReader implements UrlReader { throw new Error(message); } - readTree(): Promise { - throw new Error('GiteaUrlReader readTree not implemented.'); + async readTree( + url: string, + options?: ReadTreeOptions, + ): Promise { + const lastCommitHash = await this.getLastCommitHash(url); + if (options?.etag && options.etag === lastCommitHash) { + throw new NotModifiedError(); + } + + const archiveUri = getGiteaArchiveUrl(this.integration.config, url); + + let response: Response; + try { + response = await fetch(archiveUri, { + method: 'GET', + ...getGiteaRequestOptions(this.integration.config), + signal: options?.signal as any, + }); + } catch (e) { + throw new Error(`Unable to read ${archiveUri}, ${e}`); + } + + const parsedUri = parseGiteaUrl(this.integration.config, url); + + return this.deps.treeResponseFactory.fromTarArchive({ + stream: Readable.from(response.body), + subpath: parsedUri.path, + etag: lastCommitHash, + filter: options?.filter, + }); } + search(): Promise { throw new Error('GiteaUrlReader search not implemented.'); } @@ -126,4 +166,22 @@ export class GiteaUrlReader implements UrlReader { this.integration.config.password, )}}`; } + + private async getLastCommitHash(url: string): Promise { + const commitUri = getGiteaLatestCommitUrl(this.integration.config, url); + + const response = await fetch( + commitUri, + getGiteaRequestOptions(this.integration.config), + ); + if (!response.ok) { + const message = `Failed to retrieve latest commit information from ${commitUri}, ${response.status} ${response.statusText}`; + if (response.status === 404) { + throw new NotFoundError(message); + } + throw new Error(message); + } + + return (await response.json()).sha; + } } diff --git a/packages/backend-common/src/reading/ReadUrlResponseFactory.test.ts b/packages/backend-common/src/reading/ReadUrlResponseFactory.test.ts index 1eb18f5c1d..95d9099662 100644 --- a/packages/backend-common/src/reading/ReadUrlResponseFactory.test.ts +++ b/packages/backend-common/src/reading/ReadUrlResponseFactory.test.ts @@ -16,7 +16,7 @@ import { ConflictError } from '@backstage/errors'; import getRawBody from 'raw-body'; -import { Readable, Stream } from 'stream'; +import { Readable } from 'stream'; import { ReadUrlResponseFactory } from './ReadUrlResponseFactory'; describe('ReadUrlResponseFactory', () => { @@ -74,25 +74,10 @@ describe('ReadUrlResponseFactory', () => { describe("fromNodeJSReadable's", () => { const expectedText = 'expected text'; - const timeouts: NodeJS.Timeout[] = []; let readable: NodeJS.ReadableStream; beforeEach(() => { - readable = new Stream({ - encoding: 'utf-8', - }) as unknown as NodeJS.ReadableStream; - readable.readable = true; - - // Write data asynchronously, as soon as possible. - timeouts[0] = setTimeout(() => { - timeouts[1] = setTimeout(readable.emit.bind(readable, 'end'), 0); - readable.emit('data', expectedText); - }, 0); - }); - - afterEach(() => { - // Clear out timeouts so we don't emit data across tests. - timeouts.forEach(clearTimeout); + readable = Readable.from(Buffer.from(expectedText)); }); it('etag is passed through', async () => { diff --git a/packages/backend-common/src/reading/ReadUrlResponseFactory.ts b/packages/backend-common/src/reading/ReadUrlResponseFactory.ts index 69b9c6c16a..5eb4b2f5bc 100644 --- a/packages/backend-common/src/reading/ReadUrlResponseFactory.ts +++ b/packages/backend-common/src/reading/ReadUrlResponseFactory.ts @@ -72,7 +72,7 @@ export class ReadUrlResponseFactory { oldStyleStream: NodeJS.ReadableStream, options?: ReadUrlResponseFactoryFromStreamOptions, ): Promise { - const readable = new Readable().wrap(oldStyleStream); + const readable = Readable.from(oldStyleStream); return ReadUrlResponseFactory.fromReadable(readable, options); } } diff --git a/packages/backend-common/src/scm/git.test.ts b/packages/backend-common/src/scm/git.test.ts index 5ec960fc53..7533c6e2f3 100644 --- a/packages/backend-common/src/scm/git.test.ts +++ b/packages/backend-common/src/scm/git.test.ts @@ -190,7 +190,7 @@ describe('Git', () => { }); }); - it('should pass a function that returns the authorization as the onAuth handler', async () => { + it('should pass a function that returns the authorization as the onAuth handler when username and password are specified', async () => { const url = 'http://github.com/some/repo'; const dir = '/some/mock/dir'; const auth = { @@ -208,6 +208,25 @@ describe('Git', () => { expect(onAuth()).toEqual(auth); }); + it('should pass the provided callback as the onAuth handler when on auth is specified', async () => { + const url = 'http://github.com/some/repo'; + const dir = '/some/mock/dir'; + const auth = { + username: 'from', + password: 'callback', + }; + + const git = Git.fromAuth({ onAuth: () => auth }); + + await git.clone({ url, dir }); + + const { onAuth } = ( + isomorphic.clone as unknown as jest.Mock<(typeof isomorphic)['clone']> + ).mock.calls[0][0]!; + + expect(onAuth()).toEqual(auth); + }); + it('should propagate the data from the error handler', async () => { const url = 'http://github.com/some/repo'; const dir = '/some/mock/dir'; diff --git a/packages/backend-common/src/scm/git.ts b/packages/backend-common/src/scm/git.ts index 8ccdbeafbd..364e1bacd5 100644 --- a/packages/backend-common/src/scm/git.ts +++ b/packages/backend-common/src/scm/git.ts @@ -18,11 +18,40 @@ import git, { ProgressCallback, MergeResult, ReadCommitResult, + AuthCallback, } from 'isomorphic-git'; import http from 'isomorphic-git/http/node'; import fs from 'fs-extra'; import { LoggerService } from '@backstage/backend-plugin-api'; +function isAuthCallbackOptions( + options: StaticAuthOptions | AuthCallbackOptions, +): options is AuthCallbackOptions { + return 'onAuth' in options; +} + +/** + * Configure static credential for authentication + * + * @public + */ +export type StaticAuthOptions = { + username?: string; + password?: string; + token?: string; + logger?: LoggerService; +}; + +/** + * Configure an authentication callback that can provide credentials on demand + * + * @public + */ +export type AuthCallbackOptions = { + onAuth: AuthCallback; + logger?: LoggerService; +}; + /* provider username password Azure 'notempty' token @@ -42,6 +71,7 @@ instead of Basic Auth (e.g., Bitbucket Server). * * @public */ + export class Git { private readonly headers: { [x: string]: string; @@ -49,12 +79,13 @@ export class Git { private constructor( private readonly config: { - username?: string; - password?: string; + onAuth: AuthCallback; token?: string; logger?: LoggerService; }, ) { + this.onAuth = config.onAuth; + this.headers = { 'user-agent': 'git/@isomorphic-git', ...(config.token ? { Authorization: `Bearer ${config.token}` } : {}), @@ -288,10 +319,7 @@ export class Git { }); } - private onAuth = () => ({ - username: this.config.username, - password: this.config.password, - }); + private onAuth: AuthCallback; private onProgressHandler = (): ProgressCallback => { let currentPhase = ''; @@ -308,13 +336,13 @@ export class Git { }; }; - static fromAuth = (options: { - username?: string; - password?: string; - token?: string; - logger?: LoggerService; - }) => { + static fromAuth = (options: StaticAuthOptions | AuthCallbackOptions) => { + if (isAuthCallbackOptions(options)) { + const { onAuth, logger } = options; + return new Git({ onAuth, logger }); + } + const { username, password, token, logger } = options; - return new Git({ username, password, token, logger }); + return new Git({ onAuth: () => ({ username, password }), token, logger }); }; } diff --git a/packages/backend-common/src/scm/index.ts b/packages/backend-common/src/scm/index.ts index ceba752c9e..f9c59e99eb 100644 --- a/packages/backend-common/src/scm/index.ts +++ b/packages/backend-common/src/scm/index.ts @@ -15,3 +15,4 @@ */ export { Git } from './git'; +export type { StaticAuthOptions, AuthCallbackOptions } from './git'; diff --git a/packages/backend-common/src/util/ContainerRunner.ts b/packages/backend-common/src/util/ContainerRunner.ts index 22e40ec455..7dc12919b3 100644 --- a/packages/backend-common/src/util/ContainerRunner.ts +++ b/packages/backend-common/src/util/ContainerRunner.ts @@ -30,6 +30,7 @@ export type RunContainerOptions = { workingDir?: string; envVars?: Record; pullImage?: boolean; + defaultUser?: boolean; }; /** diff --git a/packages/backend-common/src/util/DockerContainerRunner.ts b/packages/backend-common/src/util/DockerContainerRunner.ts index 4d4684c814..986470eb98 100644 --- a/packages/backend-common/src/util/DockerContainerRunner.ts +++ b/packages/backend-common/src/util/DockerContainerRunner.ts @@ -46,6 +46,7 @@ export class DockerContainerRunner implements ContainerRunner { workingDir, envVars = {}, pullImage = true, + defaultUser = false, } = options; // Show a better error message when Docker is unavailable. @@ -71,7 +72,7 @@ export class DockerContainerRunner implements ContainerRunner { } const userOptions: UserOptions = {}; - if (process.getuid && process.getgid) { + if (!defaultUser && process.getuid && process.getgid) { // Files that are created inside the Docker container will be owned by // root on the host system on non Mac systems, because of reasons. Mainly the fact that // volume sharing is done using NFS on Mac and actual mounts in Linux world. diff --git a/packages/backend-defaults/CHANGELOG.md b/packages/backend-defaults/CHANGELOG.md index f5e8637475..7354e39b9d 100644 --- a/packages/backend-defaults/CHANGELOG.md +++ b/packages/backend-defaults/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/backend-defaults +## 0.2.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-app-api@0.5.9-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + +## 0.2.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-app-api@0.5.8 + ## 0.2.7-next.2 ### Patch Changes diff --git a/packages/backend-defaults/package.json b/packages/backend-defaults/package.json index 7c7a5f8813..bb2e2b0743 100644 --- a/packages/backend-defaults/package.json +++ b/packages/backend-defaults/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-defaults", "description": "Backend defaults used by Backstage backend apps", - "version": "0.2.7-next.2", + "version": "0.2.8-next.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-next/CHANGELOG.md b/packages/backend-next/CHANGELOG.md index f94cc2b82d..5d035799c5 100644 --- a/packages/backend-next/CHANGELOG.md +++ b/packages/backend-next/CHANGELOG.md @@ -1,5 +1,87 @@ # example-backend-next +## 0.0.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-scaffolder-backend@1.19.2-next.0 + - @backstage/plugin-kubernetes-backend@0.14.0-next.0 + - @backstage/backend-defaults@0.2.8-next.0 + - @backstage/plugin-adr-backend@0.4.5-next.0 + - @backstage/plugin-app-backend@0.3.56-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-azure-devops-backend@0.4.5-next.0 + - @backstage/plugin-badges-backend@0.3.5-next.0 + - @backstage/plugin-catalog-backend@1.15.1-next.0 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.1-next.0 + - @backstage/plugin-catalog-backend-module-openapi@0.1.25-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.5-next.0 + - @backstage/plugin-devtools-backend@0.2.5-next.0 + - @backstage/plugin-entity-feedback-backend@0.2.5-next.0 + - @backstage/plugin-jenkins-backend@0.3.2-next.0 + - @backstage/plugin-lighthouse-backend@0.3.5-next.0 + - @backstage/plugin-linguist-backend@0.5.5-next.0 + - @backstage/plugin-nomad-backend@0.1.10-next.0 + - @backstage/plugin-permission-backend@0.5.31-next.0 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.5-next.0 + - @backstage/plugin-permission-node@0.7.19-next.0 + - @backstage/plugin-playlist-backend@0.3.12-next.0 + - @backstage/plugin-proxy-backend@0.4.6-next.0 + - @backstage/plugin-search-backend@1.4.8-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.12-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.12-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.12-next.0 + - @backstage/plugin-search-backend-node@1.2.12-next.0 + - @backstage/plugin-sonarqube-backend@0.2.10-next.0 + - @backstage/plugin-techdocs-backend@1.9.1-next.0 + - @backstage/plugin-todo-backend@0.3.6-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.5-next.0 + - @backstage/plugin-permission-common@0.7.10 + +## 0.0.17 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.15.0 + - @backstage/plugin-kubernetes-backend@0.13.1 + - @backstage/plugin-search-backend-node@1.2.11 + - @backstage/plugin-catalog-backend-module-backstage-openapi@0.1.0 + - @backstage/plugin-techdocs-backend@1.9.0 + - @backstage/plugin-scaffolder-backend@1.19.0 + - @backstage/plugin-search-backend@1.4.7 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.4 + - @backstage/plugin-entity-feedback-backend@0.2.4 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-linguist-backend@0.5.4 + - @backstage/plugin-playlist-backend@0.3.11 + - @backstage/backend-tasks@0.5.12 + - @backstage/plugin-badges-backend@0.3.4 + - @backstage/plugin-app-backend@0.3.55 + - @backstage/plugin-search-backend-module-techdocs@0.1.11 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-jenkins-backend@0.3.1 + - @backstage/plugin-adr-backend@0.4.4 + - @backstage/plugin-proxy-backend@0.4.5 + - @backstage/plugin-catalog-backend-module-openapi@0.1.24 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.4 + - @backstage/plugin-lighthouse-backend@0.3.4 + - @backstage/plugin-search-backend-module-catalog@0.1.11 + - @backstage/plugin-todo-backend@0.3.5 + - @backstage/plugin-devtools-backend@0.2.4 + - @backstage/backend-defaults@0.2.7 + - @backstage/plugin-auth-node@0.4.1 + - @backstage/plugin-azure-devops-backend@0.4.4 + - @backstage/plugin-nomad-backend@0.1.9 + - @backstage/plugin-permission-backend@0.5.30 + - @backstage/plugin-permission-backend-module-allow-all-policy@0.1.4 + - @backstage/plugin-permission-node@0.7.18 + - @backstage/plugin-search-backend-module-explore@0.1.11 + - @backstage/plugin-sonarqube-backend@0.2.9 + ## 0.0.17-next.2 ### Patch Changes diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json index c26e97de3d..2d53421dfc 100644 --- a/packages/backend-next/package.json +++ b/packages/backend-next/package.json @@ -1,6 +1,6 @@ { "name": "example-backend-next", - "version": "0.0.17-next.2", + "version": "0.0.18-next.0", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/backend-openapi-utils/CHANGELOG.md b/packages/backend-openapi-utils/CHANGELOG.md index 3ac4d9f3a8..39c12d507f 100644 --- a/packages/backend-openapi-utils/CHANGELOG.md +++ b/packages/backend-openapi-utils/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/backend-openapi-utils +## 0.1.1-next.0 + +### Patch Changes + +- aaa6fb3bc9: Minor updates for TypeScript 5.2.2+ compatibility +- Updated dependencies + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## 0.1.0 + +### Minor Changes + +- 785fb1ea75: Adds a new route, `/openapi.json` to validated routers for displaying their full OpenAPI spec in a standard endpoint. + +### Patch Changes + +- 6694b369a3: Adds a new function `wrapInOpenApiTestServer` that allows for proxied requests at runtime. This will support the new `yarn backstage-repo-tools schema openapi test` command. +- Updated dependencies + - @backstage/backend-plugin-api@0.6.7 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + ## 0.1.0-next.2 ### Patch Changes diff --git a/packages/backend-openapi-utils/api-report.md b/packages/backend-openapi-utils/api-report.md index 67132ca74b..0d78ec9671 100644 --- a/packages/backend-openapi-utils/api-report.md +++ b/packages/backend-openapi-utils/api-report.md @@ -61,12 +61,13 @@ type ComponentTypes = Extract< >; // @public (undocumented) -type ConvertAll = []> = T extends [ - infer First extends JSONSchema7, - ...infer Rest, -] - ? ConvertAll]> - : R; +type ConvertAll> = { + [Index in keyof T]: T[Index] extends JSONSchema7 + ? FromSchema + : T[Index]; +} & { + length: T['length']; +}; // @public (undocumented) interface CookieObject extends ParameterObject { diff --git a/packages/backend-openapi-utils/package.json b/packages/backend-openapi-utils/package.json index 7517156d84..e3d57c8f27 100644 --- a/packages/backend-openapi-utils/package.json +++ b/packages/backend-openapi-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-openapi-utils", "description": "OpenAPI typescript support.", - "version": "0.1.0-next.2", + "version": "0.1.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/backend-openapi-utils/src/types/common.ts b/packages/backend-openapi-utils/src/types/common.ts index c3c7284369..f9dedf2f84 100644 --- a/packages/backend-openapi-utils/src/types/common.ts +++ b/packages/backend-openapi-utils/src/types/common.ts @@ -220,12 +220,11 @@ export type TuplifyUnion< /** * @public */ -export type ConvertAll = []> = T extends [ - infer First extends JSONSchema7, - ...infer Rest, -] - ? ConvertAll]> - : R; +export type ConvertAll> = { + [Index in keyof T]: T[Index] extends JSONSchema7 + ? FromSchema + : T[Index]; +} & { length: T['length'] }; /** * @public diff --git a/packages/backend-plugin-api/CHANGELOG.md b/packages/backend-plugin-api/CHANGELOG.md index 8121b848e0..98d025ca68 100644 --- a/packages/backend-plugin-api/CHANGELOG.md +++ b/packages/backend-plugin-api/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/backend-plugin-api +## 0.6.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.7.10 + +## 0.6.7 + +### 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/backend-tasks@0.5.12 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.4.1 + ## 0.6.7-next.2 ### Patch Changes diff --git a/packages/backend-plugin-api/package.json b/packages/backend-plugin-api/package.json index 458958ab29..81a4694934 100644 --- a/packages/backend-plugin-api/package.json +++ b/packages/backend-plugin-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-plugin-api", "description": "Core API used by Backstage backend plugins", - "version": "0.6.7-next.2", + "version": "0.6.8-next.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-plugin-manager/CHANGELOG.md b/packages/backend-plugin-manager/CHANGELOG.md index fd4bd03ba6..f826362f2d 100644 --- a/packages/backend-plugin-manager/CHANGELOG.md +++ b/packages/backend-plugin-manager/CHANGELOG.md @@ -1,5 +1,51 @@ # @backstage/backend-plugin-manager +## 0.0.4-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-backend@1.15.1-next.0 + - @backstage/plugin-events-backend@0.2.17-next.0 + - @backstage/plugin-permission-node@0.7.19-next.0 + - @backstage/plugin-scaffolder-node@0.2.9-next.0 + - @backstage/plugin-search-backend-node@1.2.12-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/cli-common@0.1.13 + - @backstage/cli-node@0.2.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-events-node@0.2.17-next.0 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-search-common@1.2.8 + +## 0.0.3 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.15.0 + - @backstage/cli-node@0.2.0 + - @backstage/plugin-search-backend-node@1.2.11 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-scaffolder-node@0.2.8 + - @backstage/cli-common@0.1.13 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.4.1 + - @backstage/plugin-events-backend@0.2.16 + - @backstage/plugin-events-node@0.2.16 + - @backstage/plugin-permission-node@0.7.18 + - @backstage/plugin-search-common@1.2.8 + ## 0.0.3-next.2 ### Patch Changes diff --git a/packages/backend-plugin-manager/package.json b/packages/backend-plugin-manager/package.json index f58c678c09..643a94f3cb 100644 --- a/packages/backend-plugin-manager/package.json +++ b/packages/backend-plugin-manager/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-plugin-manager", "description": "Backstage plugin management backend", - "version": "0.0.3-next.2", + "version": "0.0.4-next.0", "private": true, "main": "src/index.ts", "types": "src/index.ts", diff --git a/packages/backend-tasks/CHANGELOG.md b/packages/backend-tasks/CHANGELOG.md index e2d9a7abda..8635aa3e03 100644 --- a/packages/backend-tasks/CHANGELOG.md +++ b/packages/backend-tasks/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/backend-tasks +## 0.5.13-next.0 + +### Patch Changes + +- d8f488aaa8: Allow tasks to run more often that the default work check interval, which is 5 seconds. +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## 0.5.12 + +### 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/backend-common@0.19.9 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + ## 0.5.12-next.2 ### Patch Changes diff --git a/packages/backend-tasks/package.json b/packages/backend-tasks/package.json index 306dace806..cd71be4190 100644 --- a/packages/backend-tasks/package.json +++ b/packages/backend-tasks/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-tasks", "description": "Common distributed task management library for Backstage backends", - "version": "0.5.12-next.2", + "version": "0.5.13-next.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend-tasks/src/tasks/TaskWorker.ts b/packages/backend-tasks/src/tasks/TaskWorker.ts index 4e10f0b5b2..fe327b38d6 100644 --- a/packages/backend-tasks/src/tasks/TaskWorker.ts +++ b/packages/backend-tasks/src/tasks/TaskWorker.ts @@ -51,6 +51,15 @@ export class TaskWorker { `Task worker starting: ${this.taskId}, ${JSON.stringify(settings)}`, ); + let workCheckFrequency = this.workCheckFrequency; + const isCron = !settings?.cadence.startsWith('P'); + if (!isCron) { + const cadence = Duration.fromISO(settings.cadence); + if (cadence < workCheckFrequency) { + workCheckFrequency = cadence; + } + } + let attemptNum = 1; (async () => { for (;;) { @@ -69,7 +78,7 @@ export class TaskWorker { break; } - await sleep(this.workCheckFrequency, options?.signal); + await sleep(workCheckFrequency, options?.signal); } this.logger.info(`Task worker finished: ${this.taskId}`); diff --git a/packages/backend-test-utils/CHANGELOG.md b/packages/backend-test-utils/CHANGELOG.md index ea7e1927dd..4931fd8b2f 100644 --- a/packages/backend-test-utils/CHANGELOG.md +++ b/packages/backend-test-utils/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/backend-test-utils +## 0.2.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-app-api@0.5.9-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## 0.2.8 + +### Patch Changes + +- 013611b42e: `knex` has been bumped to major version 3 and `better-sqlite3` to major version 9, which deprecate node 16 support. +- bb688f7b3b: Ensure recursive deletion of temporary directories in tests +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-app-api@0.5.8 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.4.1 + ## 0.2.8-next.2 ### Patch Changes diff --git a/packages/backend-test-utils/package.json b/packages/backend-test-utils/package.json index 41ffa38a57..f449be08ed 100644 --- a/packages/backend-test-utils/package.json +++ b/packages/backend-test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/backend-test-utils", "description": "Test helpers library for Backstage backends", - "version": "0.2.8-next.2", + "version": "0.2.9-next.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index 44fd12f126..11ddf672a8 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,122 @@ # example-backend +## 0.2.90-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-backend@0.20.1-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-scaffolder-backend@1.19.2-next.0 + - @backstage/plugin-kubernetes-backend@0.14.0-next.0 + - @backstage/plugin-azure-sites-backend@0.1.18-next.0 + - @backstage/integration@1.8.0-next.0 + - example-app@0.2.90-next.0 + - @backstage/plugin-adr-backend@0.4.5-next.0 + - @backstage/plugin-app-backend@0.3.56-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-azure-devops-backend@0.4.5-next.0 + - @backstage/plugin-badges-backend@0.3.5-next.0 + - @backstage/plugin-catalog-backend@1.15.1-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.5-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/plugin-code-coverage-backend@0.2.22-next.0 + - @backstage/plugin-devtools-backend@0.2.5-next.0 + - @backstage/plugin-entity-feedback-backend@0.2.5-next.0 + - @backstage/plugin-events-backend@0.2.17-next.0 + - @backstage/plugin-explore-backend@0.0.18-next.0 + - @backstage/plugin-jenkins-backend@0.3.2-next.0 + - @backstage/plugin-kafka-backend@0.3.6-next.0 + - @backstage/plugin-lighthouse-backend@0.3.5-next.0 + - @backstage/plugin-linguist-backend@0.5.5-next.0 + - @backstage/plugin-nomad-backend@0.1.10-next.0 + - @backstage/plugin-permission-backend@0.5.31-next.0 + - @backstage/plugin-permission-node@0.7.19-next.0 + - @backstage/plugin-playlist-backend@0.3.12-next.0 + - @backstage/plugin-proxy-backend@0.4.6-next.0 + - @backstage/plugin-rollbar-backend@0.1.53-next.0 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.9-next.0 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.25-next.0 + - @backstage/plugin-search-backend@1.4.8-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.12-next.0 + - @backstage/plugin-search-backend-module-elasticsearch@1.3.11-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.12-next.0 + - @backstage/plugin-search-backend-module-pg@0.5.17-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.12-next.0 + - @backstage/plugin-search-backend-node@1.2.12-next.0 + - @backstage/plugin-tech-insights-backend@0.5.22-next.0 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.40-next.0 + - @backstage/plugin-tech-insights-node@0.4.14-next.0 + - @backstage/plugin-techdocs-backend@1.9.1-next.0 + - @backstage/plugin-todo-backend@0.3.6-next.0 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.5-next.0 + - @backstage/plugin-events-node@0.2.17-next.0 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-search-common@1.2.8 + +## 0.2.89 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.15.0 + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/plugin-search-backend-module-pg@0.5.16 + - @backstage/plugin-kubernetes-backend@0.13.1 + - @backstage/plugin-search-backend-node@1.2.11 + - @backstage/integration@1.7.2 + - @backstage/plugin-auth-backend@0.20.0 + - @backstage/backend-common@0.19.9 + - @backstage/plugin-techdocs-backend@1.9.0 + - @backstage/plugin-code-coverage-backend@0.2.21 + - @backstage/plugin-scaffolder-backend@1.19.0 + - @backstage/plugin-search-backend-module-elasticsearch@1.3.10 + - @backstage/plugin-search-backend@1.4.7 + - @backstage/plugin-catalog-backend-module-unprocessed@0.3.4 + - @backstage/plugin-entity-feedback-backend@0.2.4 + - @backstage/plugin-tech-insights-backend@0.5.21 + - @backstage/plugin-linguist-backend@0.5.4 + - @backstage/plugin-playlist-backend@0.3.11 + - @backstage/backend-tasks@0.5.12 + - @backstage/plugin-badges-backend@0.3.4 + - @backstage/plugin-app-backend@0.3.55 + - @backstage/plugin-search-backend-module-techdocs@0.1.11 + - @backstage/catalog-client@1.4.6 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-jenkins-backend@0.3.1 + - @backstage/plugin-adr-backend@0.4.4 + - @backstage/plugin-kafka-backend@0.3.5 + - @backstage/plugin-proxy-backend@0.4.5 + - example-app@0.2.89 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.4 + - @backstage/plugin-lighthouse-backend@0.3.4 + - @backstage/plugin-search-backend-module-catalog@0.1.11 + - @backstage/plugin-todo-backend@0.3.5 + - @backstage/plugin-devtools-backend@0.2.4 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/plugin-auth-node@0.4.1 + - @backstage/plugin-azure-devops-backend@0.4.4 + - @backstage/plugin-azure-sites-backend@0.1.17 + - @backstage/plugin-events-backend@0.2.16 + - @backstage/plugin-events-node@0.2.16 + - @backstage/plugin-explore-backend@0.0.17 + - @backstage/plugin-graphql-backend@0.2.1 + - @backstage/plugin-nomad-backend@0.1.9 + - @backstage/plugin-permission-backend@0.5.30 + - @backstage/plugin-permission-node@0.7.18 + - @backstage/plugin-rollbar-backend@0.1.52 + - @backstage/plugin-scaffolder-backend-module-confluence-to-markdown@0.2.8 + - @backstage/plugin-scaffolder-backend-module-rails@0.4.24 + - @backstage/plugin-search-backend-module-explore@0.1.11 + - @backstage/plugin-search-common@1.2.8 + - @backstage/plugin-tech-insights-backend-module-jsonfc@0.1.39 + - @backstage/plugin-tech-insights-node@0.4.13 + ## 0.2.89-next.2 ### Patch Changes diff --git a/packages/backend/Dockerfile b/packages/backend/Dockerfile index 5667209330..e0e6ab8a31 100644 --- a/packages/backend/Dockerfile +++ b/packages/backend/Dockerfile @@ -47,7 +47,6 @@ COPY --chown=node:node .yarnrc.yml ./ COPY --chown=node:node yarn.lock package.json packages/backend/dist/skeleton.tar.gz ./ RUN tar xzf skeleton.tar.gz && rm skeleton.tar.gz -# Note that this install is not immutable, which is one of the reasons we don't recommend Yarn 3 yet RUN --mount=type=cache,target=/home/node/.yarn/berry/cache,sharing=locked,uid=1000,gid=1000 \ yarn workspaces focus --all --production diff --git a/packages/backend/package.json b/packages/backend/package.json index bb425e5a2c..fc964dfdbc 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "example-backend", - "version": "0.2.89-next.2", + "version": "0.2.90-next.0", "main": "dist/index.cjs.js", "types": "src/index.ts", "license": "Apache-2.0", @@ -49,7 +49,6 @@ "@backstage/plugin-events-backend": "workspace:^", "@backstage/plugin-events-node": "workspace:^", "@backstage/plugin-explore-backend": "workspace:^", - "@backstage/plugin-graphql-backend": "workspace:^", "@backstage/plugin-jenkins-backend": "workspace:^", "@backstage/plugin-kafka-backend": "workspace:^", "@backstage/plugin-kubernetes-backend": "workspace:^", diff --git a/packages/catalog-client/CHANGELOG.md b/packages/catalog-client/CHANGELOG.md index b3c1aeb56f..7a2618f0e0 100644 --- a/packages/catalog-client/CHANGELOG.md +++ b/packages/catalog-client/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/catalog-client +## 1.4.6 + +### Patch Changes + +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + ## 1.4.5 ### Patch Changes diff --git a/packages/catalog-client/package.json b/packages/catalog-client/package.json index 28cbe0879a..02c30ee19b 100644 --- a/packages/catalog-client/package.json +++ b/packages/catalog-client/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/catalog-client", "description": "An isomorphic client for the catalog backend", - "version": "1.4.5", + "version": "1.4.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,7 +35,7 @@ "dependencies": { "@backstage/catalog-model": "workspace:^", "@backstage/errors": "workspace:^", - "cross-fetch": "^3.1.5" + "cross-fetch": "^4.0.0" }, "devDependencies": { "@backstage/cli": "workspace:^", diff --git a/packages/cli-node/CHANGELOG.md b/packages/cli-node/CHANGELOG.md index efe94c5ffa..d13b9593cd 100644 --- a/packages/cli-node/CHANGELOG.md +++ b/packages/cli-node/CHANGELOG.md @@ -1,5 +1,18 @@ # @backstage/cli-node +## 0.2.0 + +### Minor Changes + +- 8db5c3cd7a: Removed support for the `publishConfig.alphaTypes` and `.betaTypes` fields that were used together with `--experimental-type-build` to generate `/alpha` and `/beta` entry points. Use the `exports` field to achieve this instead. + +### Patch Changes + +- Updated dependencies + - @backstage/cli-common@0.1.13 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + ## 0.2.0-next.0 ### Minor Changes diff --git a/packages/cli-node/package.json b/packages/cli-node/package.json index 74051dbd94..36368fd4a9 100644 --- a/packages/cli-node/package.json +++ b/packages/cli-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/cli-node", "description": "Node.js library for Backstage CLIs", - "version": "0.2.0-next.0", + "version": "0.2.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/cli/CHANGELOG.md b/packages/cli/CHANGELOG.md index c2f25872bf..ec80b61dc4 100644 --- a/packages/cli/CHANGELOG.md +++ b/packages/cli/CHANGELOG.md @@ -1,5 +1,51 @@ # @backstage/cli +## 0.24.1-next.0 + +### Patch Changes + +- 8cda3c72f2: Tweaked Node.js version check for when to use the new module register API with the new backend `package start` command. +- 017c425f93: Updated dependency `@typescript-eslint/eslint-plugin` to `6.11.0`. +- Updated dependencies + - @backstage/integration@1.8.0-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/cli-common@0.1.13 + - @backstage/cli-node@0.2.0 + - @backstage/config@1.1.1 + - @backstage/config-loader@1.5.3 + - @backstage/errors@1.2.3 + - @backstage/eslint-plugin@0.1.3 + - @backstage/release-manifests@0.0.11 + - @backstage/types@1.1.1 + +## 0.24.0 + +### Minor Changes + +- 8db5c3cd7a: Removed support for the `publishConfig.alphaTypes` and `.betaTypes` fields that were used together with `--experimental-type-build` to generate `/alpha` and `/beta` entry points. Use the `exports` field to achieve this instead. +- 4e36abef14: Remove support for the deprecated `--experimental-type-build` option for `package build`. + +### Patch Changes + +- 4ba4ac351f: Switch from using deprecated `@esbuild-kit/*` packages to using `tsx`. This also switches to using the new module loader `register` API when available, avoiding the experimental warning when starting backends. +- cd80ebb062: Updated dependency `vite-plugin-node-polyfills` to `^0.16.0`. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- 971dcba764: Updated dependency `@typescript-eslint/eslint-plugin` to `6.10.0`. +- 6bf7561d3c: The experimental package detection will now ignore packages that don't make `package.json` available. +- e14cbf563d: Added `EXPERIMENTAL_VITE` flag for using [vite](https://vitejs.dev) as dev server instead of Webpack +- 7cd34392f5: Ignore `stdin` when spawning backend child process for the `start` command. Fixing an issue where backend startup would hang. +- Updated dependencies + - @backstage/config-loader@1.5.3 + - @backstage/cli-node@0.2.0 + - @backstage/integration@1.7.2 + - @backstage/release-manifests@0.0.11 + - @backstage/catalog-model@1.4.3 + - @backstage/cli-common@0.1.13 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/eslint-plugin@0.1.3 + - @backstage/types@1.1.1 + ## 0.24.0-next.1 ### Patch Changes diff --git a/packages/cli/package.json b/packages/cli/package.json index 7990e08435..490325296c 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/cli", "description": "CLI for developing Backstage plugins and apps", - "version": "0.24.0-next.1", + "version": "0.24.1-next.0", "publishConfig": { "access": "public" }, @@ -64,7 +64,7 @@ "@swc/jest": "^0.2.22", "@types/jest": "^29.0.0", "@types/webpack-env": "^1.15.2", - "@typescript-eslint/eslint-plugin": "6.7.5", + "@typescript-eslint/eslint-plugin": "6.11.0", "@typescript-eslint/parser": "^6.7.2", "@yarnpkg/lockfile": "^1.1.0", "@yarnpkg/parsers": "^3.0.0-rc.4", @@ -73,7 +73,7 @@ "chalk": "^4.0.0", "chokidar": "^3.3.1", "commander": "^9.1.0", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "cross-spawn": "^7.0.3", "css-loader": "^6.5.1", "ctrlc-windows": "^2.1.0", @@ -170,8 +170,7 @@ "del": "^7.0.0", "msw": "^1.0.0", "nodemon": "^3.0.1", - "ts-node": "^10.0.0", - "type-fest": "^2.19.0" + "ts-node": "^10.0.0" }, "peerDependencies": { "@vitejs/plugin-react": "^4.0.4", diff --git a/packages/cli/src/lib/bundler/server.ts b/packages/cli/src/lib/bundler/server.ts index bd70b2b074..2fd1385584 100644 --- a/packages/cli/src/lib/bundler/server.ts +++ b/packages/cli/src/lib/bundler/server.ts @@ -72,6 +72,20 @@ export async function serveBundle(options: ServeOptions) { ), ); } + + if ( + targetPkg.dependencies?.['react-router']?.includes('beta') || + targetPkg.dependencies?.['react-router-dom']?.includes('beta') + ) { + // eslint-disable-next-line no-console + console.warn( + chalk.yellow(` +DEPRECATION WARNING: React Router Beta is deprecated and support for it will be removed in a future release. + Please migrate to use React Router v6 stable. + See https://backstage.io/docs/tutorials/react-router-stable-migration +`), + ); + } } checkReactVersion(); diff --git a/packages/cli/src/lib/experimental/startBackendExperimental.ts b/packages/cli/src/lib/experimental/startBackendExperimental.ts index af6e33a1e4..6238b2277b 100644 --- a/packages/cli/src/lib/experimental/startBackendExperimental.ts +++ b/packages/cli/src/lib/experimental/startBackendExperimental.ts @@ -28,7 +28,8 @@ import { paths } from '../paths'; import spawn from 'cross-spawn'; const [nodeMajor, nodeMinor] = process.versions.node.split('.').map(Number); -const supportsModuleLoaderRegister = nodeMajor >= 20 && nodeMinor >= 6; +const supportsModuleLoaderRegister = + nodeMajor > 20 || (nodeMajor === 20 && nodeMinor >= 6); const loaderArgs = [ '--require', diff --git a/packages/config-loader/CHANGELOG.md b/packages/config-loader/CHANGELOG.md index 269c1b5c31..169e2e45df 100644 --- a/packages/config-loader/CHANGELOG.md +++ b/packages/config-loader/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/config-loader +## 1.5.3 + +### Patch Changes + +- 22ca64f117: Correctly resolve config targets into absolute paths +- 087bab5b42: Updated dependency `typescript-json-schema` to `^0.62.0`. +- Updated dependencies + - @backstage/cli-common@0.1.13 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + ## 1.5.2-next.0 ### Patch Changes diff --git a/packages/config-loader/package.json b/packages/config-loader/package.json index 89d70825dd..8a41d7548f 100644 --- a/packages/config-loader/package.json +++ b/packages/config-loader/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/config-loader", "description": "Config loading functionality used by Backstage backend, and CLI", - "version": "1.5.3-next.0", + "version": "1.5.3", "publishConfig": { "access": "public", "main": "dist/index.cjs.js", diff --git a/packages/core-app-api/CHANGELOG.md b/packages/core-app-api/CHANGELOG.md index 3ce35f99c0..f77c607e3f 100644 --- a/packages/core-app-api/CHANGELOG.md +++ b/packages/core-app-api/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/core-app-api +## 1.11.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.7 + +## 1.11.1 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 89d13e5618: Add current and default scopes when refreshing session +- 9ab0572217: Add component data `core.type` marker for `AppRouter` and `FlatRoutes`. +- Updated dependencies + - @backstage/core-plugin-api@1.8.0 + - @backstage/version-bridge@1.0.7 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + ## 1.11.1-next.0 ### Patch Changes diff --git a/packages/core-app-api/package.json b/packages/core-app-api/package.json index 2a5a3cf0c8..0efa8b3bb8 100644 --- a/packages/core-app-api/package.json +++ b/packages/core-app-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-app-api", "description": "Core app API used by Backstage apps", - "version": "1.11.1-next.0", + "version": "1.11.2-next.0", "publishConfig": { "access": "public" }, diff --git a/packages/core-app-api/src/app/AppManager.tsx b/packages/core-app-api/src/app/AppManager.tsx index 37407283b5..c8cdfd7c23 100644 --- a/packages/core-app-api/src/app/AppManager.tsx +++ b/packages/core-app-api/src/app/AppManager.tsx @@ -240,11 +240,21 @@ export class AppManager implements BackstageApp { ); const { routing, featureFlags, routeBindings } = useMemo(() => { + const usesReactRouterBeta = isReactRouterBeta(); + if (usesReactRouterBeta) { + // eslint-disable-next-line no-console + console.warn(` +DEPRECATION WARNING: React Router Beta is deprecated and support for it will be removed in a future release. + Please migrate to use React Router v6 stable. + See https://backstage.io/docs/tutorials/react-router-stable-migration +`); + } + const result = traverseElementTree({ root: children, discoverers: [childDiscoverer, routeElementDiscoverer], collectors: { - routing: isReactRouterBeta() + routing: usesReactRouterBeta ? routingV1Collector : routingV2Collector, collectedPlugins: pluginCollector, diff --git a/packages/core-compat-api/CHANGELOG.md b/packages/core-compat-api/CHANGELOG.md index 174d695533..017e3ec785 100644 --- a/packages/core-compat-api/CHANGELOG.md +++ b/packages/core-compat-api/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/core-compat-api +## 0.0.1-next.0 + +### Patch Changes + +- c219b168aa: Made package public so it can be published + +## 0.0.2-next.0 + +### Patch Changes + +- 03d0b6dcdc: Added `convertLegacyRouteRef` utility to convert existing route refs to be used with the new experimental packages. +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/core-app-api@1.11.2-next.0 + +## 0.0.1 + +### Patch Changes + +- Updated dependencies + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/core-plugin-api@1.8.0 + ## 0.0.1-next.2 ### Patch Changes diff --git a/packages/core-compat-api/api-report.md b/packages/core-compat-api/api-report.md index 3dd2eb6b22..877aefa24f 100644 --- a/packages/core-compat-api/api-report.md +++ b/packages/core-compat-api/api-report.md @@ -5,9 +5,16 @@ ```ts /// +import { AnyRouteRefParams } from '@backstage/core-plugin-api'; import { BackstagePlugin } from '@backstage/frontend-plugin-api'; import { ExtensionOverrides } from '@backstage/frontend-plugin-api'; +import { ExternalRouteRef } from '@backstage/core-plugin-api'; +import { ExternalRouteRef as ExternalRouteRef_2 } from '@backstage/frontend-plugin-api'; import { default as React_2 } from 'react'; +import { RouteRef } from '@backstage/core-plugin-api'; +import { RouteRef as RouteRef_2 } from '@backstage/frontend-plugin-api'; +import { SubRouteRef } from '@backstage/core-plugin-api'; +import { SubRouteRef as SubRouteRef_2 } from '@backstage/frontend-plugin-api'; // @public (undocumented) export function collectLegacyRoutes( @@ -19,5 +26,23 @@ export function convertLegacyApp( rootElement: React_2.JSX.Element, ): (ExtensionOverrides | BackstagePlugin)[]; +// @public +export function convertLegacyRouteRef( + ref: RouteRef, +): RouteRef_2; + +// @public +export function convertLegacyRouteRef( + ref: SubRouteRef, +): SubRouteRef_2; + +// @public +export function convertLegacyRouteRef< + TParams extends AnyRouteRefParams, + TOptional extends boolean, +>( + ref: ExternalRouteRef, +): ExternalRouteRef_2; + // (No @packageDocumentation comment for this package) ``` diff --git a/packages/core-compat-api/package.json b/packages/core-compat-api/package.json index a9bdfe2ff9..f887193616 100644 --- a/packages/core-compat-api/package.json +++ b/packages/core-compat-api/package.json @@ -1,10 +1,9 @@ { "name": "@backstage/core-compat-api", - "version": "0.0.1-next.2", + "version": "0.0.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", - "private": true, "publishConfig": { "access": "public", "main": "dist/index.esm.js", @@ -25,7 +24,6 @@ }, "devDependencies": { "@backstage/cli": "workspace:^", - "@backstage/core-app-api": "workspace:^", "@backstage/plugin-puppetdb": "workspace:^", "@backstage/plugin-stackstorm": "workspace:^", "@oriflame/backstage-plugin-score-card": "^0.7.0", @@ -39,7 +37,9 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "dependencies": { + "@backstage/core-app-api": "workspace:^", "@backstage/core-plugin-api": "workspace:^", - "@backstage/frontend-plugin-api": "workspace:^" + "@backstage/frontend-plugin-api": "workspace:^", + "@types/react": "^16.13.1 || ^17.0.0" } } diff --git a/packages/core-compat-api/src/collectLegacyRoutes.tsx b/packages/core-compat-api/src/collectLegacyRoutes.tsx index 8178de2876..037107bfda 100644 --- a/packages/core-compat-api/src/collectLegacyRoutes.tsx +++ b/packages/core-compat-api/src/collectLegacyRoutes.tsx @@ -28,7 +28,7 @@ import { RouteRef, getComponentData, } from '@backstage/core-plugin-api'; -import { convertLegacyRouteRef } from '@backstage/core-plugin-api/alpha'; +import { convertLegacyRouteRef } from './convertLegacyRouteRef'; /* diff --git a/packages/core-plugin-api/src/routing/convertLegacyRouteRef.ts b/packages/core-compat-api/src/convertLegacyRouteRef.ts similarity index 79% rename from packages/core-plugin-api/src/routing/convertLegacyRouteRef.ts rename to packages/core-compat-api/src/convertLegacyRouteRef.ts index 940a4174a9..2495f3719c 100644 --- a/packages/core-plugin-api/src/routing/convertLegacyRouteRef.ts +++ b/packages/core-compat-api/src/convertLegacyRouteRef.ts @@ -14,7 +14,6 @@ * limitations under the License. */ -import { routeRefType } from './types'; import { RouteRef as LegacyRouteRef, SubRouteRef as LegacySubRouteRef, @@ -22,9 +21,9 @@ import { AnyRouteRefParams, } from '@backstage/core-plugin-api'; -// Relative imports to avoid dependency, at least for now - // eslint-disable-next-line @backstage/no-relative-monorepo-imports +import { routeRefType } from '../../core-plugin-api/src/routing/types'; + import { RouteRef, SubRouteRef, @@ -32,29 +31,14 @@ import { createRouteRef, createSubRouteRef, createExternalRouteRef, -} from '../../../frontend-plugin-api/src/routing'; +} from '@backstage/frontend-plugin-api'; + // eslint-disable-next-line @backstage/no-relative-monorepo-imports -import { toInternalRouteRef } from '../../../frontend-plugin-api/src/routing/RouteRef'; +import { toInternalRouteRef } from '../../frontend-plugin-api/src/routing/RouteRef'; // eslint-disable-next-line @backstage/no-relative-monorepo-imports -import { toInternalSubRouteRef } from '../../../frontend-plugin-api/src/routing/SubRouteRef'; +import { toInternalSubRouteRef } from '../../frontend-plugin-api/src/routing/SubRouteRef'; // eslint-disable-next-line @backstage/no-relative-monorepo-imports -import { toInternalExternalRouteRef } from '../../../frontend-plugin-api/src/routing/ExternalRouteRef'; - -// TODO(Rugvip): Once this is moved to a compat package these aliases can be removed and imported from frontend- instead - -/** @ignore */ -type NewRouteRef = - RouteRef; - -/** @ignore */ -type NewSubRouteRef = - SubRouteRef; - -/** @ignore */ -type NewExternalRouteRef< - TParams extends AnyRouteRefParams = AnyRouteRefParams, - TOptional extends boolean = boolean, -> = ExternalRouteRef; +import { toInternalExternalRouteRef } from '../../frontend-plugin-api/src/routing/ExternalRouteRef'; /** * A temporary helper to convert a legacy route ref to the new system. @@ -66,7 +50,7 @@ type NewExternalRouteRef< */ export function convertLegacyRouteRef( ref: LegacyRouteRef, -): NewRouteRef; +): RouteRef; /** * A temporary helper to convert a legacy sub route ref to the new system. @@ -78,7 +62,7 @@ export function convertLegacyRouteRef( */ export function convertLegacyRouteRef( ref: LegacySubRouteRef, -): NewSubRouteRef; +): SubRouteRef; /** * A temporary helper to convert a legacy external route ref to the new system. @@ -93,14 +77,14 @@ export function convertLegacyRouteRef< TOptional extends boolean, >( ref: LegacyExternalRouteRef, -): NewExternalRouteRef; +): ExternalRouteRef; export function convertLegacyRouteRef( ref: LegacyRouteRef | LegacySubRouteRef | LegacyExternalRouteRef, -): NewRouteRef | NewSubRouteRef | NewExternalRouteRef { +): RouteRef | SubRouteRef | ExternalRouteRef { // Ref has already been converted if ('$$type' in ref) { - return ref as unknown as NewRouteRef | NewSubRouteRef | NewExternalRouteRef; + return ref as unknown as RouteRef | SubRouteRef | ExternalRouteRef; } const type = (ref as unknown as { [routeRefType]: unknown })[routeRefType]; diff --git a/packages/core-compat-api/src/index.ts b/packages/core-compat-api/src/index.ts index e5f61119a3..421ced7054 100644 --- a/packages/core-compat-api/src/index.ts +++ b/packages/core-compat-api/src/index.ts @@ -15,3 +15,4 @@ */ export { collectLegacyRoutes } from './collectLegacyRoutes'; export { convertLegacyApp } from './convertLegacyApp'; +export { convertLegacyRouteRef } from './convertLegacyRouteRef'; diff --git a/packages/core-components/CHANGELOG.md b/packages/core-components/CHANGELOG.md index fd25c6bbc5..f726aa1b19 100644 --- a/packages/core-components/CHANGELOG.md +++ b/packages/core-components/CHANGELOG.md @@ -1,5 +1,48 @@ # @backstage/core-components +## 0.13.9-next.0 + +### Patch Changes + +- 381ed86d5e: Add missing export for IconLinkVertical +- 5c8a3e3960: Minor improvements to `Table` component. +- 4d9e3b39e4: Register component overrides in the global `OverrideComponentNameToClassKeys` provided by `@backstage/theme`. This will in turn will provide component style override types for `createUnifiedTheme`. +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/version-bridge@1.0.7 + +## 0.13.8 + +### Patch Changes + +- 81c8db2088: Fix `RoutedTabs` so that it does not explode without tabs. +- eb817ee6d4: Fix spacing inconsistency with links and labels in headers +- f28c11743a: Add a possibility to use a formatter on a warning panel. Applied it for a scaffolder template +- 6c2b872153: Add official support for React 18. +- e07570a740: Fixed an issue causing the `Select` component to show empty chips when some of the selected values did not match any item +- 7bdc1b0a12: Fixed compatibility with Safari <16.3 by eliminating RegEx lookbehind in `extractInitials`. + + This PR also changed how initials are generated resulting in _John Jonathan Doe_ => _JD_ instead of _JJ_. + +- 66071b42c0: Make the `options.titleFormat` prop of `` apply to all keys including nested ones. Previously, this option would only apply to the root keys of the `metadata` prop. + + Document and improve the props of ``. Previously, the `options` prop was `any`. + +- 71c97e7d73: Fixed the type declaration of `DependencyGraphProps`, the `defs` prop now expects `JSX.Element`s. +- 0c5b78650c: Reverting the `MissingAnnotationEmptyState` component due to cyclical dependency. This component is now deprecated, please use the import from `@backstage/plugin-catalog-react` instead to use the new functionality +- 4b7d341746: Updated dependency `linkify-react` to `4.1.2`. +- 0ef24425c1: Updated dependency `linkifyjs` to `4.1.2`. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-plugin-api@1.8.0 + - @backstage/version-bridge@1.0.7 + - @backstage/theme@0.4.4 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + ## 0.13.8-next.2 ### Patch Changes diff --git a/packages/core-components/api-report.md b/packages/core-components/api-report.md index d03d51f4fd..cca7017089 100644 --- a/packages/core-components/api-report.md +++ b/packages/core-components/api-report.md @@ -8,7 +8,6 @@ import { ApiRef } from '@backstage/core-plugin-api'; import { BackstageIdentityApi } from '@backstage/core-plugin-api'; import { BackstagePalette } from '@backstage/theme'; -import { BackstageTheme } from '@backstage/theme'; import { BackstageUserIdentity } from '@backstage/core-plugin-api'; import { BottomNavigationActionProps } from '@material-ui/core/BottomNavigationAction'; import { ButtonProps as ButtonProps_2 } from '@material-ui/core/Button'; @@ -541,6 +540,17 @@ export type HorizontalScrollGridClassKey = | 'buttonLeft' | 'buttonRight'; +// @public (undocumented) +export function IconLinkVertical({ + color, + disabled, + href, + icon, + label, + onClick, + title, +}: IconLinkVerticalProps): React_2.JSX.Element; + // @public (undocumented) export type IconLinkVerticalClassKey = | 'link' diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 3b37203b50..1c1201a320 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-components", "description": "Core components used by Backstage plugins and apps", - "version": "0.13.8-next.2", + "version": "0.13.9-next.0", "publishConfig": { "access": "public", "main": "dist/index.esm.js", @@ -55,7 +55,7 @@ "dagre": "^0.8.5", "history": "^5.0.0", "immer": "^9.0.1", - "linkify-react": "4.1.2", + "linkify-react": "4.1.3", "linkifyjs": "4.1.2", "lodash": "^4.17.21", "pluralize": "^8.0.0", @@ -100,7 +100,7 @@ "@types/react-virtualized-auto-sizer": "^1.0.1", "@types/react-window": "^1.8.5", "@types/zen-observable": "^0.8.0", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/packages/core-components/src/components/CodeSnippet/CodeSnippet.tsx b/packages/core-components/src/components/CodeSnippet/CodeSnippet.tsx index 3270cac176..6eb274b015 100644 --- a/packages/core-components/src/components/CodeSnippet/CodeSnippet.tsx +++ b/packages/core-components/src/components/CodeSnippet/CodeSnippet.tsx @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; + import Box from '@material-ui/core/Box'; import { useTheme } from '@material-ui/core/styles'; import React from 'react'; @@ -83,7 +83,7 @@ export function CodeSnippet(props: CodeSnippetProps) { customStyle, showCopyCodeButton = false, } = props; - const theme = useTheme(); + const theme = useTheme(); const mode = theme.palette.type === 'dark' ? dark : docco; const highlightColor = theme.palette.type === 'dark' ? '#256bf3' : '#e6ffed'; diff --git a/packages/core-components/src/components/CreateButton/CreateButton.tsx b/packages/core-components/src/components/CreateButton/CreateButton.tsx index d5d7080851..beca7e8c73 100644 --- a/packages/core-components/src/components/CreateButton/CreateButton.tsx +++ b/packages/core-components/src/components/CreateButton/CreateButton.tsx @@ -14,13 +14,13 @@ * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; import Button from '@material-ui/core/Button'; import IconButton from '@material-ui/core/IconButton'; import useMediaQuery from '@material-ui/core/useMediaQuery'; import React from 'react'; import { Link as RouterLink, LinkProps } from 'react-router-dom'; import AddCircleOutline from '@material-ui/icons/AddCircleOutline'; +import { Theme } from '@material-ui/core/styles'; /** * Properties for {@link CreateButton} @@ -38,7 +38,7 @@ export type CreateButtonProps = { */ export function CreateButton(props: CreateButtonProps) { const { title, to } = props; - const isXSScreen = useMediaQuery(theme => + const isXSScreen = useMediaQuery(theme => theme.breakpoints.down('xs'), ); diff --git a/packages/core-components/src/components/DependencyGraph/DefaultLabel.tsx b/packages/core-components/src/components/DependencyGraph/DefaultLabel.tsx index 677782cf57..d4a91e50db 100644 --- a/packages/core-components/src/components/DependencyGraph/DefaultLabel.tsx +++ b/packages/core-components/src/components/DependencyGraph/DefaultLabel.tsx @@ -16,14 +16,13 @@ import React from 'react'; import makeStyles from '@material-ui/core/styles/makeStyles'; -import { BackstageTheme } from '@backstage/theme'; import { DependencyGraphTypes as Types } from './types'; /** @public */ export type DependencyGraphDefaultLabelClassKey = 'text'; const useStyles = makeStyles( - (theme: BackstageTheme) => ({ + theme => ({ text: { fill: theme.palette.textContrast, }, diff --git a/packages/core-components/src/components/DependencyGraph/DefaultNode.tsx b/packages/core-components/src/components/DependencyGraph/DefaultNode.tsx index 5c28375118..81a918c7b8 100644 --- a/packages/core-components/src/components/DependencyGraph/DefaultNode.tsx +++ b/packages/core-components/src/components/DependencyGraph/DefaultNode.tsx @@ -16,14 +16,13 @@ import React from 'react'; import { makeStyles } from '@material-ui/core/styles'; -import { BackstageTheme } from '@backstage/theme'; import { DependencyGraphTypes as Types } from './types'; /** @public */ export type DependencyGraphDefaultNodeClassKey = 'node' | 'text'; const useStyles = makeStyles( - (theme: BackstageTheme) => ({ + theme => ({ node: { fill: theme.palette.primary.light, stroke: theme.palette.primary.light, diff --git a/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx b/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx index 3dd1025b8f..d4907d2a18 100644 --- a/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx +++ b/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx @@ -20,7 +20,6 @@ import * as d3Selection from 'd3-selection'; import useTheme from '@material-ui/core/styles/useTheme'; import dagre from 'dagre'; import debounce from 'lodash/debounce'; -import { BackstageTheme } from '@backstage/theme'; import { DependencyGraphTypes as Types } from './types'; import { Node } from './Node'; import { Edge, GraphEdge } from './Edge'; @@ -205,7 +204,7 @@ export function DependencyGraph( fit = 'grow', ...svgProps } = props; - const theme: BackstageTheme = useTheme(); + const theme = useTheme(); const [containerWidth, setContainerWidth] = React.useState(100); const [containerHeight, setContainerHeight] = React.useState(100); diff --git a/packages/core-components/src/components/DependencyGraph/Edge.tsx b/packages/core-components/src/components/DependencyGraph/Edge.tsx index 4e3ba96e48..05e068eca4 100644 --- a/packages/core-components/src/components/DependencyGraph/Edge.tsx +++ b/packages/core-components/src/components/DependencyGraph/Edge.tsx @@ -18,7 +18,6 @@ import React from 'react'; import * as d3Shape from 'd3-shape'; import isFinite from 'lodash/isFinite'; import makeStyles from '@material-ui/core/styles/makeStyles'; -import { BackstageTheme } from '@backstage/theme'; import { DependencyGraphTypes as Types } from './types'; import { EDGE_TEST_ID, LABEL_TEST_ID } from './constants'; import { DefaultLabel } from './DefaultLabel'; @@ -42,7 +41,7 @@ export type GraphEdge = Types.DependencyEdge & export type DependencyGraphEdgeClassKey = 'path' | 'label'; const useStyles = makeStyles( - (theme: BackstageTheme) => ({ + theme => ({ path: { strokeWidth: 1, stroke: theme.palette.textSubtle, diff --git a/packages/core-components/src/components/DismissableBanner/DismissableBanner.tsx b/packages/core-components/src/components/DismissableBanner/DismissableBanner.tsx index 9b74b1e9b8..649043fc21 100644 --- a/packages/core-components/src/components/DismissableBanner/DismissableBanner.tsx +++ b/packages/core-components/src/components/DismissableBanner/DismissableBanner.tsx @@ -19,7 +19,6 @@ import { useApi, storageApiRef } from '@backstage/core-plugin-api'; import useObservable from 'react-use/lib/useObservable'; import classNames from 'classnames'; import { makeStyles } from '@material-ui/core/styles'; -import { BackstageTheme } from '@backstage/theme'; import Snackbar from '@material-ui/core/Snackbar'; import SnackbarContent from '@material-ui/core/SnackbarContent'; import IconButton from '@material-ui/core/IconButton'; @@ -42,7 +41,7 @@ export type DismissableBannerClassKey = export type DismissbleBannerClassKey = DismissableBannerClassKey; const useStyles = makeStyles( - (theme: BackstageTheme) => ({ + theme => ({ root: { padding: theme.spacing(0), marginBottom: theme.spacing(0), diff --git a/packages/core-components/src/components/EmptyState/MissingAnnotationEmptyState.tsx b/packages/core-components/src/components/EmptyState/MissingAnnotationEmptyState.tsx index efbfdb9999..81b4714531 100644 --- a/packages/core-components/src/components/EmptyState/MissingAnnotationEmptyState.tsx +++ b/packages/core-components/src/components/EmptyState/MissingAnnotationEmptyState.tsx @@ -14,7 +14,6 @@ * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; import Box from '@material-ui/core/Box'; import Button from '@material-ui/core/Button'; import { makeStyles } from '@material-ui/core/styles'; @@ -54,7 +53,7 @@ type Props = { */ export type MissingAnnotationEmptyStateClassKey = 'code'; -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ code: { borderRadius: 6, diff --git a/packages/core-components/src/components/HeaderIconLinkRow/index.ts b/packages/core-components/src/components/HeaderIconLinkRow/index.ts index f2207d32c5..84bb915945 100644 --- a/packages/core-components/src/components/HeaderIconLinkRow/index.ts +++ b/packages/core-components/src/components/HeaderIconLinkRow/index.ts @@ -15,6 +15,7 @@ */ export { HeaderIconLinkRow } from './HeaderIconLinkRow'; +export { IconLinkVertical } from './IconLinkVertical'; export type { HeaderIconLinkRowClassKey } from './HeaderIconLinkRow'; export type { IconLinkVerticalProps, diff --git a/packages/core-components/src/components/HorizontalScrollGrid/HorizontalScrollGrid.tsx b/packages/core-components/src/components/HorizontalScrollGrid/HorizontalScrollGrid.tsx index c4c9dadb78..e89b7896dd 100644 --- a/packages/core-components/src/components/HorizontalScrollGrid/HorizontalScrollGrid.tsx +++ b/packages/core-components/src/components/HorizontalScrollGrid/HorizontalScrollGrid.tsx @@ -16,7 +16,7 @@ import Box from '@material-ui/core/Box'; import Grid from '@material-ui/core/Grid'; import IconButton from '@material-ui/core/IconButton'; -import { makeStyles, Theme } from '@material-ui/core/styles'; +import { makeStyles } from '@material-ui/core/styles'; import ChevronLeftIcon from '@material-ui/icons/ChevronLeft'; import ChevronRightIcon from '@material-ui/icons/ChevronRight'; import classNames from 'classnames'; @@ -68,7 +68,7 @@ export type HorizontalScrollGridClassKey = | 'buttonLeft' | 'buttonRight'; -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ root: { position: 'relative', diff --git a/packages/core-components/src/components/MarkdownContent/MarkdownContent.tsx b/packages/core-components/src/components/MarkdownContent/MarkdownContent.tsx index 425e723052..b422a62b6c 100644 --- a/packages/core-components/src/components/MarkdownContent/MarkdownContent.tsx +++ b/packages/core-components/src/components/MarkdownContent/MarkdownContent.tsx @@ -18,13 +18,12 @@ import { makeStyles } from '@material-ui/core/styles'; import ReactMarkdown, { Options } from 'react-markdown'; import gfm from 'remark-gfm'; import React from 'react'; -import { BackstageTheme } from '@backstage/theme'; import { CodeSnippet } from '../CodeSnippet'; import { HeadingProps } from 'react-markdown/lib/ast-to-react'; export type MarkdownContentClassKey = 'markdown'; -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ markdown: { '& table': { diff --git a/packages/core-components/src/components/OAuthRequestDialog/LoginRequestListItem.tsx b/packages/core-components/src/components/OAuthRequestDialog/LoginRequestListItem.tsx index c7707c07d5..782624362d 100644 --- a/packages/core-components/src/components/OAuthRequestDialog/LoginRequestListItem.tsx +++ b/packages/core-components/src/components/OAuthRequestDialog/LoginRequestListItem.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import { makeStyles, Theme } from '@material-ui/core/styles'; +import { makeStyles } from '@material-ui/core/styles'; import ListItem from '@material-ui/core/ListItem'; import ListItemAvatar from '@material-ui/core/ListItemAvatar'; import ListItemText from '@material-ui/core/ListItemText'; @@ -26,7 +26,7 @@ import { PendingOAuthRequest } from '@backstage/core-plugin-api'; export type LoginRequestListItemClassKey = 'root'; -const useItemStyles = makeStyles( +const useItemStyles = makeStyles( theme => ({ root: { paddingLeft: theme.spacing(3), diff --git a/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx b/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx index 8fdace3766..7c17e74e4a 100644 --- a/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx +++ b/packages/core-components/src/components/OAuthRequestDialog/OAuthRequestDialog.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import { makeStyles, Theme } from '@material-ui/core/styles'; +import { makeStyles } from '@material-ui/core/styles'; import Dialog from '@material-ui/core/Dialog'; import DialogActions from '@material-ui/core/DialogActions'; import DialogContent from '@material-ui/core/DialogContent'; @@ -37,7 +37,7 @@ export type OAuthRequestDialogClassKey = | 'contentList' | 'actionButtons'; -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ dialog: { paddingTop: theme.spacing(1), diff --git a/packages/core-components/src/components/Progress/Progress.tsx b/packages/core-components/src/components/Progress/Progress.tsx index eb17b9eb25..6d1281edd5 100644 --- a/packages/core-components/src/components/Progress/Progress.tsx +++ b/packages/core-components/src/components/Progress/Progress.tsx @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; + import Box from '@material-ui/core/Box'; import LinearProgress, { LinearProgressProps, @@ -22,7 +22,7 @@ import { useTheme } from '@material-ui/core/styles'; import React, { PropsWithChildren, useEffect, useState } from 'react'; export function Progress(props: PropsWithChildren) { - const theme = useTheme(); + const theme = useTheme(); const [isVisible, setIsVisible] = useState(false); useEffect(() => { diff --git a/packages/core-components/src/components/ProgressBars/Gauge.tsx b/packages/core-components/src/components/ProgressBars/Gauge.tsx index ca84a5f480..088e369e62 100644 --- a/packages/core-components/src/components/ProgressBars/Gauge.tsx +++ b/packages/core-components/src/components/ProgressBars/Gauge.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import { BackstagePalette, BackstageTheme } from '@backstage/theme'; +import { BackstagePalette } from '@backstage/theme'; import { makeStyles, useTheme } from '@material-ui/core/styles'; import { Circle } from 'rc-progress'; import React, { ReactNode, useEffect, useState } from 'react'; @@ -28,7 +28,7 @@ export type GaugeClassKey = | 'circle' | 'colorUnknown'; -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ root: { position: 'relative', @@ -123,7 +123,7 @@ export function Gauge(props: GaugeProps) { const [hoverRef, setHoverRef] = useState(null); const { getColor = getProgressColor } = props; const classes = useStyles(props); - const { palette } = useTheme(); + const { palette } = useTheme(); const { value, fractional, inverse, unit, max, description } = { ...defaultGaugeProps, ...props, diff --git a/packages/core-components/src/components/ProgressBars/LinearGauge.tsx b/packages/core-components/src/components/ProgressBars/LinearGauge.tsx index 8d45b83571..a41b41f3dc 100644 --- a/packages/core-components/src/components/ProgressBars/LinearGauge.tsx +++ b/packages/core-components/src/components/ProgressBars/LinearGauge.tsx @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; + import { useTheme } from '@material-ui/core/styles'; import Tooltip from '@material-ui/core/Tooltip'; import Typography from '@material-ui/core/Typography'; @@ -33,7 +33,7 @@ type Props = { export function LinearGauge(props: Props) { const { value, getColor = getProgressColor, width = 'thick' } = props; - const { palette } = useTheme(); + const { palette } = useTheme(); if (isNaN(value)) { return null; } diff --git a/packages/core-components/src/components/Select/Select.tsx b/packages/core-components/src/components/Select/Select.tsx index 918ce301fb..ec7f87eb94 100644 --- a/packages/core-components/src/components/Select/Select.tsx +++ b/packages/core-components/src/components/Select/Select.tsx @@ -218,15 +218,20 @@ export function SelectComponent(props: SelectProps) { renderValue={s => multiple && (value as any[]).length !== 0 ? ( - {(s as string[]).map(selectedValue => ( - el.value === selectedValue)?.value} - label={items.find(el => el.value === selectedValue)?.label} - clickable - onDelete={handleDelete(selectedValue)} - className={classes.chip} - /> - ))} + {(s as string[]).map(selectedValue => { + const item = items.find(el => el.value === selectedValue); + return item ? ( + + ) : ( + false + ); + })} ) : ( diff --git a/packages/core-components/src/components/Status/Status.tsx b/packages/core-components/src/components/Status/Status.tsx index 364193e383..615eed6aec 100644 --- a/packages/core-components/src/components/Status/Status.tsx +++ b/packages/core-components/src/components/Status/Status.tsx @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; + import { makeStyles } from '@material-ui/core/styles'; import Typography from '@material-ui/core/Typography'; import classNames from 'classnames'; @@ -28,7 +28,7 @@ export type StatusClassKey = | 'running' | 'aborted'; -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ status: { fontWeight: theme.typography.fontWeightMedium, diff --git a/packages/core-components/src/components/SupportButton/SupportButton.tsx b/packages/core-components/src/components/SupportButton/SupportButton.tsx index a07c03b7d2..726500c77e 100644 --- a/packages/core-components/src/components/SupportButton/SupportButton.tsx +++ b/packages/core-components/src/components/SupportButton/SupportButton.tsx @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { useApp } from '@backstage/core-plugin-api'; -import { BackstageTheme } from '@backstage/theme'; import Box from '@material-ui/core/Box'; import Button from '@material-ui/core/Button'; import DialogActions from '@material-ui/core/DialogActions'; @@ -24,7 +24,7 @@ import ListItemText from '@material-ui/core/ListItemText'; import MenuItem from '@material-ui/core/MenuItem'; import MenuList from '@material-ui/core/MenuList'; import Popover from '@material-ui/core/Popover'; -import { makeStyles } from '@material-ui/core/styles'; +import { Theme, makeStyles } from '@material-ui/core/styles'; import Typography from '@material-ui/core/Typography'; import useMediaQuery from '@material-ui/core/useMediaQuery'; import React, { MouseEventHandler, useState } from 'react'; @@ -91,7 +91,7 @@ export function SupportButton(props: SupportButtonProps) { const [popoverOpen, setPopoverOpen] = useState(false); const [anchorEl, setAnchorEl] = useState(null); const classes = useStyles(); - const isSmallScreen = useMediaQuery(theme => + const isSmallScreen = useMediaQuery(theme => theme.breakpoints.down('sm'), ); diff --git a/packages/core-components/src/components/Table/Filters.tsx b/packages/core-components/src/components/Table/Filters.tsx index 24eaa98cb5..568b22b933 100644 --- a/packages/core-components/src/components/Table/Filters.tsx +++ b/packages/core-components/src/components/Table/Filters.tsx @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; + import Box from '@material-ui/core/Box'; import Button from '@material-ui/core/Button'; import { makeStyles } from '@material-ui/core/styles'; @@ -24,7 +24,7 @@ import { SelectProps } from '../Select/Select'; export type TableFiltersClassKey = 'root' | 'value' | 'heder' | 'filters'; -const useFilterStyles = makeStyles( +const useFilterStyles = makeStyles( theme => ({ root: { height: '100%', diff --git a/packages/core-components/src/components/Table/SubvalueCell.tsx b/packages/core-components/src/components/Table/SubvalueCell.tsx index cc577b7456..8ccebbe65a 100644 --- a/packages/core-components/src/components/Table/SubvalueCell.tsx +++ b/packages/core-components/src/components/Table/SubvalueCell.tsx @@ -13,14 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; + import Box from '@material-ui/core/Box'; import { makeStyles } from '@material-ui/core/styles'; import React from 'react'; export type SubvalueCellClassKey = 'value' | 'subvalue'; -const useSubvalueCellStyles = makeStyles( +const useSubvalueCellStyles = makeStyles( theme => ({ value: { marginBottom: theme.spacing(0.75), diff --git a/packages/core-components/src/components/Table/Table.tsx b/packages/core-components/src/components/Table/Table.tsx index e4ee9b5995..4aba7445b3 100644 --- a/packages/core-components/src/components/Table/Table.tsx +++ b/packages/core-components/src/components/Table/Table.tsx @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; + import MTable, { Column, Icons, @@ -25,7 +25,12 @@ import MTable, { } from '@material-table/core'; import Box from '@material-ui/core/Box'; import IconButton from '@material-ui/core/IconButton'; -import { makeStyles, useTheme, withStyles } from '@material-ui/core/styles'; +import { + makeStyles, + Theme, + useTheme, + withStyles, +} from '@material-ui/core/styles'; import Typography from '@material-ui/core/Typography'; import AddBox from '@material-ui/icons/AddBox'; import ArrowUpward from '@material-ui/icons/ArrowUpward'; @@ -48,12 +53,13 @@ import React, { ReactNode, useCallback, useEffect, + useMemo, useState, } from 'react'; import { SelectProps } from '../Select/Select'; import { Filter, Filters, SelectedFilters, Without } from './Filters'; -import CircularProgress from '@material-ui/core/CircularProgress'; +import { TableLoadingBody } from './TableLoadingBody'; // Material-table is not using the standard icons available in in material-ui. https://github.com/mbrn/material-table/issues/51 const tableIcons: Icons = { @@ -136,7 +142,7 @@ const StyledMTableToolbar = withStyles( /** @public */ export type FiltersContainerClassKey = 'root' | 'title'; -const useFilterStyles = makeStyles( +const useFilterStyles = makeStyles( theme => ({ root: { display: 'flex', @@ -154,7 +160,7 @@ const useFilterStyles = makeStyles( export type TableClassKey = 'root'; -const useTableStyles = makeStyles( +const useTableStyles = makeStyles( () => ({ root: { display: 'flex', @@ -166,7 +172,7 @@ const useTableStyles = makeStyles( function convertColumns( columns: TableColumn[], - theme: BackstageTheme, + theme: Theme, ): TableColumn[] { return columns.map(column => { const headerStyle: React.CSSProperties = column.headerStyle ?? {}; @@ -303,20 +309,21 @@ export function Table(props: TableProps) { const { data, columns, + emptyContent, options, title, subtitle, + localization, filters, initialState, - emptyContent, onStateChange, components, - isLoading: isLoading, + isLoading: loading, ...restProps } = props; const tableClasses = useTableStyles(); - const theme = useTheme(); + const theme = useTheme(); const calculatedInitialState = { ...defaultInitialState, ...initialState }; @@ -327,14 +334,11 @@ export function Table(props: TableProps) { () => setFiltersOpen(v => !v), [setFiltersOpen], ); - const [selectedFiltersLength, setSelectedFiltersLength] = useState(0); - const [tableData, setTableData] = useState(data as any[]); + const [selectedFilters, setSelectedFilters] = useState( calculatedInitialState.filters, ); - const MTColumns = convertColumns(columns, theme); - const [search, setSearch] = useState(calculatedInitialState.search); useEffect(() => { @@ -352,25 +356,15 @@ export function Table(props: TableProps) { } }, [search, filtersOpen, selectedFilters, onStateChange]); - const defaultOptions: Options = { - headerStyle: { - textTransform: 'uppercase', - }, - }; - const getFieldByTitle = useCallback( (titleValue: string | keyof T) => columns.find(el => el.title === titleValue)?.field, [columns], ); - useEffect(() => { - if (typeof data === 'function') { - return; - } - if (!selectedFilters) { - setTableData(data as any[]); - return; + const tableData = useMemo(() => { + if (typeof data === 'function' || !selectedFilters) { + return data; } const selectedFiltersArray = Object.values(selectedFilters); @@ -396,62 +390,12 @@ export function Table(props: TableProps) { return fieldValue === filterValue; }), ); - setTableData(newData); - } else { - setTableData(data as any[]); + return newData; } - setSelectedFiltersLength(selectedFiltersArray.flat().length); + return data; }, [data, selectedFilters, getFieldByTitle]); - const constructFilters = ( - filterConfig: TableFilter[], - dataValue: any[] | undefined, - ): Filter[] => { - const extractDistinctValues = (field: string | keyof T): Set => { - const distinctValues = new Set(); - const addValue = (value: any) => { - if (value !== undefined && value !== null) { - distinctValues.add(value); - } - }; - - if (dataValue) { - dataValue.forEach(el => { - const value = extractValueByField( - el, - getFieldByTitle(field) as string, - ); - - if (Array.isArray(value)) { - (value as []).forEach(addValue); - } else { - addValue(value); - } - }); - } - - return distinctValues; - }; - - const constructSelect = ( - filter: TableFilter, - ): Without => { - return { - placeholder: 'All results', - label: filter.column, - multiple: filter.type === 'multiple-select', - items: [...extractDistinctValues(filter.column)].sort().map(value => ({ - label: value, - value, - })), - }; - }; - - return filterConfig.map(filter => ({ - type: filter.type, - element: constructSelect(filter), - })); - }; + const selectedFiltersLength = Object.values(selectedFilters).flat().length; const hasFilters = !!filters?.length; const Toolbar = useCallback( @@ -471,50 +415,16 @@ export function Table(props: TableProps) { const hasNoRows = typeof data !== 'function' && data.length === 0; const columnCount = columns.length; - const Body = useCallback( - (bodyProps: any /* no type for this in material-table */) => { - if (isLoading) { - return ( - - - - - - - - - - ); - } - - if (emptyContent && hasNoRows) { - return ( - - - {emptyContent} - - - ); - } - - return ; - }, - [hasNoRows, emptyContent, columnCount, isLoading], + const Body = useMemo( + () => makeBody({ hasNoRows, emptyContent, columnCount, loading }), + [hasNoRows, emptyContent, columnCount, loading], ); return ( {filtersOpen && data && typeof data !== 'function' && filters?.length && ( @@ -522,12 +432,12 @@ export function Table(props: TableProps) { components={{ Header: StyledMTableHeader, - Toolbar, Body, + Toolbar, ...components, }} - options={{ ...defaultOptions, ...options }} - columns={MTColumns} + options={{ headerStyle: { textTransform: 'uppercase' }, ...options }} + columns={convertColumns(columns, theme)} icons={tableIcons} title={ <> @@ -541,10 +451,11 @@ export function Table(props: TableProps) { )} } - data={typeof data === 'function' ? data : tableData} + data={tableData} style={{ width: '100%' }} localization={{ toolbar: { searchPlaceholder: 'Filter', searchTooltip: 'Filter' }, + ...localization, }} {...restProps} /> @@ -553,3 +464,84 @@ export function Table(props: TableProps) { } Table.icons = Object.freeze(tableIcons); + +function makeBody({ + columnCount, + emptyContent, + hasNoRows, + loading, +}: { + hasNoRows: boolean; + emptyContent: ReactNode; + columnCount: number; + loading?: boolean; +}) { + return (bodyProps: any /* no type for this in material-table */) => { + if (loading) { + return ; + } + + if (emptyContent && hasNoRows) { + return ( + + + {emptyContent} + + + ); + } + + return ; + }; +} + +function constructFilters( + filterConfig: TableFilter[], + dataValue: any[] | undefined, + columns: TableColumn[], +): Filter[] { + const extractDistinctValues = (field: string | keyof T): Set => { + const distinctValues = new Set(); + const addValue = (value: any) => { + if (value !== undefined && value !== null) { + distinctValues.add(value); + } + }; + + if (dataValue) { + dataValue.forEach(el => { + const value = extractValueByField( + el, + columns.find(c => c.title === field)?.field as string, + ); + + if (Array.isArray(value)) { + (value as []).forEach(addValue); + } else { + addValue(value); + } + }); + } + + return distinctValues; + }; + + const constructSelect = ( + filter: TableFilter, + ): Without => { + return { + placeholder: 'All results', + label: filter.column, + multiple: filter.type === 'multiple-select', + items: [...extractDistinctValues(filter.column)].sort().map(value => ({ + label: value, + value, + })), + }; + }; + + return filterConfig.map(filter => ({ + type: filter.type, + element: constructSelect(filter), + })); +} diff --git a/packages/core-components/src/components/Table/TableLoadingBody.tsx b/packages/core-components/src/components/Table/TableLoadingBody.tsx new file mode 100644 index 0000000000..3671bf1c51 --- /dev/null +++ b/packages/core-components/src/components/Table/TableLoadingBody.tsx @@ -0,0 +1,44 @@ +/* + * 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 Box from '@material-ui/core/Box'; +import CircularProgress from '@material-ui/core/CircularProgress'; +import React from 'react'; + +/** + * @internal + */ +export function TableLoadingBody(props: { colSpan?: number }) { + return ( + + + + + + + + + + ); +} diff --git a/packages/core-components/src/components/TrendLine/TrendLine.tsx b/packages/core-components/src/components/TrendLine/TrendLine.tsx index b59d748c2c..25d1045e09 100644 --- a/packages/core-components/src/components/TrendLine/TrendLine.tsx +++ b/packages/core-components/src/components/TrendLine/TrendLine.tsx @@ -21,10 +21,9 @@ import { SparklinesLineProps, SparklinesProps, } from 'react-sparklines'; -import { useTheme } from '@material-ui/core/styles'; -import { BackstageTheme } from '@backstage/theme'; +import { Theme, useTheme } from '@material-ui/core/styles'; -function color(data: number[], theme: BackstageTheme): string | undefined { +function color(data: number[], theme: Theme): string | undefined { const lastNum = data[data.length - 1]; if (!lastNum) return undefined; if (lastNum >= 0.9) return theme.palette.status.ok; @@ -36,7 +35,7 @@ export function TrendLine( props: SparklinesProps & Pick & { title?: string }, ) { - const theme = useTheme(); + const theme = useTheme(); if (!props.data) return null; return ( diff --git a/packages/core-components/src/components/WarningPanel/WarningPanel.tsx b/packages/core-components/src/components/WarningPanel/WarningPanel.tsx index 1ed356024c..634b8f7b09 100644 --- a/packages/core-components/src/components/WarningPanel/WarningPanel.tsx +++ b/packages/core-components/src/components/WarningPanel/WarningPanel.tsx @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; -import { makeStyles, darken, lighten } from '@material-ui/core/styles'; + +import { makeStyles, darken, lighten, Theme } from '@material-ui/core/styles'; import Accordion from '@material-ui/core/Accordion'; import AccordionSummary from '@material-ui/core/AccordionSummary'; import AccordionDetails from '@material-ui/core/AccordionDetails'; @@ -27,7 +27,7 @@ import { MarkdownContent } from '../MarkdownContent'; const getWarningTextColor = ( severity: NonNullable, - theme: BackstageTheme, + theme: Theme, ) => { const getColor = theme.palette.type === 'light' ? darken : lighten; return getColor(theme.palette[severity].light, 0.6); @@ -35,13 +35,13 @@ const getWarningTextColor = ( const getWarningBackgroundColor = ( severity: NonNullable, - theme: BackstageTheme, + theme: Theme, ) => { const getBackgroundColor = theme.palette.type === 'light' ? lighten : darken; return getBackgroundColor(theme.palette[severity].light, 0.9); }; -const useErrorOutlineStyles = makeStyles(theme => ({ +const useErrorOutlineStyles = makeStyles(theme => ({ root: { marginRight: theme.spacing(1), fill: ({ severity }: WarningProps) => @@ -68,7 +68,7 @@ export type WarningPanelClassKey = | 'message' | 'details'; -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ panel: { backgroundColor: ({ severity }: WarningProps) => diff --git a/packages/core-components/src/layout/BottomLink/BottomLink.tsx b/packages/core-components/src/layout/BottomLink/BottomLink.tsx index f385d9ce11..ea706002a4 100644 --- a/packages/core-components/src/layout/BottomLink/BottomLink.tsx +++ b/packages/core-components/src/layout/BottomLink/BottomLink.tsx @@ -14,7 +14,6 @@ * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; import Box from '@material-ui/core/Box'; import Divider from '@material-ui/core/Divider'; import { makeStyles } from '@material-ui/core/styles'; @@ -26,7 +25,7 @@ import { Link } from '../../components/Link'; /** @public */ export type BottomLinkClassKey = 'root' | 'boxTitle' | 'arrow'; -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ root: { maxWidth: 'fit-content', diff --git a/packages/core-components/src/layout/ErrorPage/ErrorPage.tsx b/packages/core-components/src/layout/ErrorPage/ErrorPage.tsx index 9cfaac363e..73acf1f650 100644 --- a/packages/core-components/src/layout/ErrorPage/ErrorPage.tsx +++ b/packages/core-components/src/layout/ErrorPage/ErrorPage.tsx @@ -14,7 +14,6 @@ * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; import Grid from '@material-ui/core/Grid'; import { makeStyles } from '@material-ui/core/styles'; import Typography from '@material-ui/core/Typography'; @@ -34,7 +33,7 @@ interface IErrorPageProps { /** @public */ export type ErrorPageClassKey = 'container' | 'title' | 'subtitle'; -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ container: { padding: theme.spacing(8), diff --git a/packages/core-components/src/layout/Header/Header.tsx b/packages/core-components/src/layout/Header/Header.tsx index cd2f281d65..c6ceda1070 100644 --- a/packages/core-components/src/layout/Header/Header.tsx +++ b/packages/core-components/src/layout/Header/Header.tsx @@ -15,7 +15,6 @@ */ import { configApiRef, useApi } from '@backstage/core-plugin-api'; -import { BackstageTheme } from '@backstage/theme'; import Box from '@material-ui/core/Box'; import Grid from '@material-ui/core/Grid'; import { makeStyles } from '@material-ui/core/styles'; @@ -39,7 +38,7 @@ export type HeaderClassKey = | 'breadcrumbType' | 'breadcrumbTitle'; -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ header: { gridArea: 'pageHeader', diff --git a/packages/core-components/src/layout/HeaderLabel/HeaderLabel.tsx b/packages/core-components/src/layout/HeaderLabel/HeaderLabel.tsx index fdd48a5d81..6a41d6aedc 100644 --- a/packages/core-components/src/layout/HeaderLabel/HeaderLabel.tsx +++ b/packages/core-components/src/layout/HeaderLabel/HeaderLabel.tsx @@ -14,7 +14,6 @@ * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; import Grid from '@material-ui/core/Grid'; import { alpha, makeStyles } from '@material-ui/core/styles'; import Typography from '@material-ui/core/Typography'; @@ -24,7 +23,7 @@ import { Link } from '../../components/Link'; /** @public */ export type HeaderLabelClassKey = 'root' | 'label' | 'value'; -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ root: { textAlign: 'left', diff --git a/packages/core-components/src/layout/ItemCard/ItemCardHeader.tsx b/packages/core-components/src/layout/ItemCard/ItemCardHeader.tsx index 1e4e7dc316..6dc4725f09 100644 --- a/packages/core-components/src/layout/ItemCard/ItemCardHeader.tsx +++ b/packages/core-components/src/layout/ItemCard/ItemCardHeader.tsx @@ -13,16 +13,21 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; + import Box from '@material-ui/core/Box'; -import { createStyles, makeStyles, WithStyles } from '@material-ui/core/styles'; +import { + createStyles, + makeStyles, + Theme, + WithStyles, +} from '@material-ui/core/styles'; import Typography from '@material-ui/core/Typography'; import React from 'react'; /** @public */ export type ItemCardHeaderClassKey = 'root'; -const styles = (theme: BackstageTheme) => +const styles = (theme: Theme) => createStyles({ root: { color: theme.palette.common.white, diff --git a/packages/core-components/src/layout/Page/Page.tsx b/packages/core-components/src/layout/Page/Page.tsx index e388e0366a..28194b2889 100644 --- a/packages/core-components/src/layout/Page/Page.tsx +++ b/packages/core-components/src/layout/Page/Page.tsx @@ -15,12 +15,11 @@ */ import React from 'react'; -import { BackstageTheme } from '@backstage/theme'; -import { makeStyles, ThemeProvider } from '@material-ui/core/styles'; +import { makeStyles, Theme, ThemeProvider } from '@material-ui/core/styles'; export type PageClassKey = 'root'; -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ root: { display: 'grid', @@ -53,7 +52,7 @@ export function Page(props: Props) { const classes = useStyles(); return ( ({ + theme={(baseTheme: Theme) => ({ ...baseTheme, page: baseTheme.getPageTheme({ themeId }), })} diff --git a/packages/core-components/src/layout/Sidebar/Bar.tsx b/packages/core-components/src/layout/Sidebar/Bar.tsx index 8cb43ba007..550c614522 100644 --- a/packages/core-components/src/layout/Sidebar/Bar.tsx +++ b/packages/core-components/src/layout/Sidebar/Bar.tsx @@ -14,10 +14,9 @@ * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; import Box from '@material-ui/core/Box'; import Button from '@material-ui/core/Button'; -import { makeStyles } from '@material-ui/core/styles'; +import { makeStyles, Theme } from '@material-ui/core/styles'; import useMediaQuery from '@material-ui/core/useMediaQuery'; import classnames from 'classnames'; import React, { useContext, useRef, useState } from 'react'; @@ -38,7 +37,7 @@ import { useSidebarPinState } from './SidebarPinStateContext'; /** @public */ export type SidebarClassKey = 'drawer' | 'drawerOpen'; -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ drawer: { display: 'flex', @@ -133,7 +132,7 @@ const DesktopSidebar = (props: DesktopSidebarProps) => { } = props; const classes = useStyles({ sidebarConfig }); - const isSmallScreen = useMediaQuery( + const isSmallScreen = useMediaQuery( theme => theme.breakpoints.down('md'), { noSsr: true }, ); diff --git a/packages/core-components/src/layout/Sidebar/Intro.tsx b/packages/core-components/src/layout/Sidebar/Intro.tsx index 824e9e42fd..6f75f096fb 100644 --- a/packages/core-components/src/layout/Sidebar/Intro.tsx +++ b/packages/core-components/src/layout/Sidebar/Intro.tsx @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; + import Box from '@material-ui/core/Box'; import Collapse from '@material-ui/core/Collapse'; import IconButton from '@material-ui/core/IconButton'; -import { makeStyles } from '@material-ui/core/styles'; +import { makeStyles, Theme } from '@material-ui/core/styles'; import Typography from '@material-ui/core/Typography'; import CloseIcon from '@material-ui/icons/Close'; import { useLocalStorageValue } from '@react-hookz/web'; @@ -39,7 +39,7 @@ export type SidebarIntroClassKey = | 'introDismissText' | 'introDismissIcon'; -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ introCard: props => ({ color: '#b5b5b5', diff --git a/packages/core-components/src/layout/Sidebar/Items.tsx b/packages/core-components/src/layout/Sidebar/Items.tsx index aba4c79181..f9970749d0 100644 --- a/packages/core-components/src/layout/Sidebar/Items.tsx +++ b/packages/core-components/src/layout/Sidebar/Items.tsx @@ -13,12 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { IconComponent, useAnalytics, useElementFilter, } from '@backstage/core-plugin-api'; -import { BackstageTheme } from '@backstage/theme'; import Badge from '@material-ui/core/Badge'; import Box from '@material-ui/core/Box'; import { makeStyles, styled, Theme } from '@material-ui/core/styles'; @@ -90,7 +90,7 @@ export type SidebarItemClassKey = | 'selected'; const makeSidebarStyles = (sidebarConfig: SidebarConfig) => - makeStyles( + makeStyles( theme => ({ root: { color: theme.palette.navigation.color, @@ -501,7 +501,7 @@ const SidebarItemWithSubmenu = ({ const [isHoveredOn, setIsHoveredOn] = useState(false); const location = useLocation(); const isActive = useLocationMatch(children, location); - const isSmallScreen = useMediaQuery((theme: BackstageTheme) => + const isSmallScreen = useMediaQuery((theme: Theme) => theme.breakpoints.down('sm'), ); @@ -726,7 +726,7 @@ export const SidebarExpandButton = () => { const { sidebarConfig } = useContext(SidebarConfigContext); const classes = useMemoStyles(sidebarConfig); const { isOpen, setOpen } = useSidebarOpenState(); - const isSmallScreen = useMediaQuery( + const isSmallScreen = useMediaQuery( theme => theme.breakpoints.down('md'), { noSsr: true }, ); diff --git a/packages/core-components/src/layout/Sidebar/MobileSidebar.tsx b/packages/core-components/src/layout/Sidebar/MobileSidebar.tsx index 88d653cea5..bc38f5510c 100644 --- a/packages/core-components/src/layout/Sidebar/MobileSidebar.tsx +++ b/packages/core-components/src/layout/Sidebar/MobileSidebar.tsx @@ -15,11 +15,10 @@ */ import { useElementFilter } from '@backstage/core-plugin-api'; -import { BackstageTheme } from '@backstage/theme'; import BottomNavigation from '@material-ui/core/BottomNavigation'; import Box from '@material-ui/core/Box'; import IconButton from '@material-ui/core/IconButton'; -import { makeStyles } from '@material-ui/core/styles'; +import { Theme, makeStyles } from '@material-ui/core/styles'; import Drawer from '@material-ui/core/Drawer'; import Typography from '@material-ui/core/Typography'; import CloseIcon from '@material-ui/icons/Close'; @@ -51,7 +50,7 @@ type OverlayMenuProps = { children?: React.ReactNode; }; -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ root: { position: 'fixed', diff --git a/packages/core-components/src/layout/Sidebar/Page.tsx b/packages/core-components/src/layout/Sidebar/Page.tsx index c0107256e1..09d5bd910c 100644 --- a/packages/core-components/src/layout/Sidebar/Page.tsx +++ b/packages/core-components/src/layout/Sidebar/Page.tsx @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; + import Box from '@material-ui/core/Box'; -import { makeStyles } from '@material-ui/core/styles'; +import { makeStyles, Theme } from '@material-ui/core/styles'; import useMediaQuery from '@material-ui/core/useMediaQuery'; import React, { createContext, @@ -34,7 +34,7 @@ import { SidebarPinStateProvider } from './SidebarPinStateContext'; export type SidebarPageClassKey = 'root'; const useStyles = makeStyles< - BackstageTheme, + Theme, { sidebarConfig: SidebarConfig; isPinned: boolean } >( theme => ({ @@ -107,10 +107,9 @@ export function SidebarPage(props: SidebarPageProps) { LocalStorage.setSidebarPinState(isPinned); }, [isPinned]); - const isMobile = useMediaQuery( - theme => theme.breakpoints.down('xs'), - { noSsr: true }, - ); + const isMobile = useMediaQuery(theme => theme.breakpoints.down('xs'), { + noSsr: true, + }); const toggleSidebarPinState = () => setIsPinned(!isPinned); diff --git a/packages/core-components/src/layout/Sidebar/SidebarGroup.tsx b/packages/core-components/src/layout/Sidebar/SidebarGroup.tsx index 2ce68cd51a..7944728af6 100644 --- a/packages/core-components/src/layout/Sidebar/SidebarGroup.tsx +++ b/packages/core-components/src/layout/Sidebar/SidebarGroup.tsx @@ -15,11 +15,10 @@ * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; import BottomNavigationAction, { BottomNavigationActionProps, } from '@material-ui/core/BottomNavigationAction'; -import { makeStyles } from '@material-ui/core/styles'; +import { Theme, makeStyles } from '@material-ui/core/styles'; import React, { useContext } from 'react'; import { useLocation } from 'react-router-dom'; import { Link } from '../../components/Link/Link'; @@ -48,7 +47,7 @@ export interface SidebarGroupProps extends BottomNavigationActionProps { children?: React.ReactNode; } -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ root: { flexGrow: 0, diff --git a/packages/core-components/src/layout/Sidebar/SidebarSubmenu.tsx b/packages/core-components/src/layout/Sidebar/SidebarSubmenu.tsx index 85ba923672..6b6951d023 100644 --- a/packages/core-components/src/layout/Sidebar/SidebarSubmenu.tsx +++ b/packages/core-components/src/layout/Sidebar/SidebarSubmenu.tsx @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; + import Box from '@material-ui/core/Box'; -import { makeStyles } from '@material-ui/core/styles'; +import { makeStyles, Theme } from '@material-ui/core/styles'; import Typography from '@material-ui/core/Typography'; import classnames from 'classnames'; import React, { ReactNode, useContext, useEffect, useState } from 'react'; @@ -28,7 +28,7 @@ import { import { useSidebarOpenState } from './SidebarOpenStateContext'; const useStyles = makeStyles< - BackstageTheme, + Theme, { submenuConfig: SubmenuConfig; left: number } >( theme => ({ diff --git a/packages/core-components/src/layout/Sidebar/SidebarSubmenuItem.tsx b/packages/core-components/src/layout/Sidebar/SidebarSubmenuItem.tsx index d1925036bb..0503f58f1c 100644 --- a/packages/core-components/src/layout/Sidebar/SidebarSubmenuItem.tsx +++ b/packages/core-components/src/layout/Sidebar/SidebarSubmenuItem.tsx @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import React, { useContext, useState } from 'react'; import { resolvePath, useLocation, useResolvedPath } from 'react-router-dom'; import { makeStyles } from '@material-ui/core/styles'; @@ -21,7 +22,6 @@ import Typography from '@material-ui/core/Typography'; import { Link } from '../../components/Link'; import { IconComponent } from '@backstage/core-plugin-api'; import classnames from 'classnames'; -import { BackstageTheme } from '@backstage/theme'; import ArrowDropDownIcon from '@material-ui/icons/ArrowDropDown'; import ArrowDropUpIcon from '@material-ui/icons/ArrowDropUp'; import { SidebarItemWithSubmenuContext } from './config'; @@ -29,7 +29,7 @@ import { isLocationMatch } from './utils'; import Box from '@material-ui/core/Box'; import Button from '@material-ui/core/Button'; -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ item: { height: 48, diff --git a/packages/core-components/src/overridableComponents.ts b/packages/core-components/src/overridableComponents.ts index c872317049..750303e4df 100644 --- a/packages/core-components/src/overridableComponents.ts +++ b/packages/core-components/src/overridableComponents.ts @@ -173,3 +173,8 @@ export type BackstageOverrides = Overrides & { StyleRules >; }; + +declare module '@backstage/theme' { + interface OverrideComponentNameToClassKeys + extends BackstageComponentsNameToClassKey {} +} diff --git a/packages/core-plugin-api/CHANGELOG.md b/packages/core-plugin-api/CHANGELOG.md index 23dbfc0968..d80e3e9f89 100644 --- a/packages/core-plugin-api/CHANGELOG.md +++ b/packages/core-plugin-api/CHANGELOG.md @@ -1,5 +1,32 @@ # @backstage/core-plugin-api +## 1.8.1-next.0 + +### Patch Changes + +- 03d0b6dcdc: Removed the alpha `convertLegacyRouteRef` utility, which as been moved to `@backstage/core-compat-api` +- Updated dependencies + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.7 + +## 1.8.0 + +### Minor Changes + +- 1e5b7d993a: `IconComponent` can now have a `fontSize` of `inherit`, which is useful for in-line icons. +- cb6db75bc2: Introduced `AnyRouteRefParams` as a replacement for `AnyParams`, which is now deprecated. + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- cb6db75bc2: Deprecated several types related to the routing system that are scheduled to be removed, as well as several fields on the route ref types themselves. +- 68fc9dc60e: Added a new `/alpha` export `convertLegacyRouteRef`, which is a temporary utility to allow existing route refs to be used with the new experimental packages. +- Updated dependencies + - @backstage/version-bridge@1.0.7 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + ## 1.8.0-next.0 ### Minor Changes diff --git a/packages/core-plugin-api/alpha-api-report.md b/packages/core-plugin-api/alpha-api-report.md index 0284d691a9..ba3583142f 100644 --- a/packages/core-plugin-api/alpha-api-report.md +++ b/packages/core-plugin-api/alpha-api-report.md @@ -3,12 +3,8 @@ > Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). ```ts -import { AnyRouteRefParams } from '@backstage/core-plugin-api'; import { ApiRef } from '@backstage/core-plugin-api'; -import { ExternalRouteRef } from '@backstage/core-plugin-api'; import { Observable } from '@backstage/types'; -import { RouteRef } from '@backstage/core-plugin-api'; -import { SubRouteRef } from '@backstage/core-plugin-api'; import { TranslationMessages as TranslationMessages_2 } from '@backstage/core-plugin-api/alpha'; import { TranslationRef as TranslationRef_2 } from '@backstage/core-plugin-api/alpha'; @@ -29,24 +25,6 @@ export type AppLanguageApi = { // @alpha (undocumented) export const appLanguageApiRef: ApiRef; -// @public -export function convertLegacyRouteRef( - ref: RouteRef, -): NewRouteRef; - -// @public -export function convertLegacyRouteRef( - ref: SubRouteRef, -): NewSubRouteRef; - -// @public -export function convertLegacyRouteRef< - TParams extends AnyRouteRefParams, - TOptional extends boolean, ->( - ref: ExternalRouteRef, -): NewExternalRouteRef; - // @alpha export function createTranslationMessages< TId extends string, diff --git a/packages/core-plugin-api/package.json b/packages/core-plugin-api/package.json index 5aac6b3fb7..98286779f8 100644 --- a/packages/core-plugin-api/package.json +++ b/packages/core-plugin-api/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/core-plugin-api", "description": "Core API used by Backstage plugins", - "version": "1.8.0-next.0", + "version": "1.8.1-next.0", "publishConfig": { "access": "public" }, diff --git a/packages/core-plugin-api/src/alpha.ts b/packages/core-plugin-api/src/alpha.ts index 540b4ed22a..ebcbcf34c0 100644 --- a/packages/core-plugin-api/src/alpha.ts +++ b/packages/core-plugin-api/src/alpha.ts @@ -16,4 +16,3 @@ export * from './translation'; export * from './apis/alpha'; -export { convertLegacyRouteRef } from './routing/convertLegacyRouteRef'; diff --git a/packages/create-app/CHANGELOG.md b/packages/create-app/CHANGELOG.md index 1260ed1e4a..74c2c3b7ce 100644 --- a/packages/create-app/CHANGELOG.md +++ b/packages/create-app/CHANGELOG.md @@ -1,5 +1,45 @@ # @backstage/create-app +## 0.5.8-next.1 + +### Patch Changes + +- Bumped create-app version. + +## 0.5.8-next.0 + +### Patch Changes + +- Bumped create-app version. +- Updated dependencies + - @backstage/cli-common@0.1.13 + +## 0.5.7 + +### Patch Changes + +- 770763487a: Cleaned up cases where deprecated code was being used but had a new location they should be imported from +- 013611b42e: `knex` has been bumped to major version 3 and `better-sqlite3` to major version 9, which deprecate node 16 support. + + You can do the same in your own Backstage repository to ensure that you get future node 18+ relevant updates, by having the following lines in your `packages/backend/package.json`: + + ``` + "dependencies": { + // ... + "knex": "^3.0.0" + }, + "devDependencies": { + // ... + "better-sqlite3": "^9.0.0", + ``` + +- f577e1176f: Bumped create-app version. +- 6c2b872153: Add official support for React 18. +- ae1602e54d: If create app installs dependencies, don't suggest to user that they also need to do it. +- e6b7ab8d2b: Added missing node-gyp dependency to fix Docker image build +- Updated dependencies + - @backstage/cli-common@0.1.13 + ## 0.5.7-next.2 ### Patch Changes diff --git a/packages/create-app/package.json b/packages/create-app/package.json index f1ae787ca8..52f075adc5 100644 --- a/packages/create-app/package.json +++ b/packages/create-app/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/create-app", "description": "A CLI that helps you create your own Backstage app", - "version": "0.5.7-next.2", + "version": "0.5.8-next.1", "publishConfig": { "access": "public" }, diff --git a/packages/dev-utils/CHANGELOG.md b/packages/dev-utils/CHANGELOG.md index 4cc9fc7b4c..485dc687ab 100644 --- a/packages/dev-utils/CHANGELOG.md +++ b/packages/dev-utils/CHANGELOG.md @@ -1,5 +1,35 @@ # @backstage/dev-utils +## 1.0.25-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/app-defaults@1.4.6-next.0 + - @backstage/core-app-api@1.11.2-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/catalog-model@1.4.3 + +## 1.0.23 + +### Patch Changes + +- 67cc85bb14: Switched the conditional `react-dom/client` import to use `import(...)` rather than `require(...)`. +- 38cda52746: Added support for React 18. The new `createRoot` API from `react-dom/client` will now be used if present. +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/integration-react@1.1.21 + - @backstage/core-plugin-api@1.8.0 + - @backstage/app-defaults@1.4.5 + - @backstage/core-app-api@1.11.1 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + ## 1.0.23-next.2 ### Patch Changes diff --git a/packages/dev-utils/package.json b/packages/dev-utils/package.json index a4fce127b3..ddcb29bdc3 100644 --- a/packages/dev-utils/package.json +++ b/packages/dev-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/dev-utils", "description": "Utilities for developing Backstage plugins.", - "version": "1.0.23-next.2", + "version": "1.0.25-next.0", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/packages/dev-utils/src/components/EntityGridItem/EntityGridItem.tsx b/packages/dev-utils/src/components/EntityGridItem/EntityGridItem.tsx index a66550a4d2..55bac24a34 100644 --- a/packages/dev-utils/src/components/EntityGridItem/EntityGridItem.tsx +++ b/packages/dev-utils/src/components/EntityGridItem/EntityGridItem.tsx @@ -16,11 +16,10 @@ import { Entity } from '@backstage/catalog-model'; import { EntityProvider } from '@backstage/plugin-catalog-react'; -import { BackstageTheme } from '@backstage/theme'; -import { Grid, GridProps, makeStyles } from '@material-ui/core'; +import { Grid, GridProps, Theme, makeStyles } from '@material-ui/core'; import React from 'react'; -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ root: ({ entity }) => ({ position: 'relative', diff --git a/packages/e2e-test/CHANGELOG.md b/packages/e2e-test/CHANGELOG.md index 20a0576918..053825aae0 100644 --- a/packages/e2e-test/CHANGELOG.md +++ b/packages/e2e-test/CHANGELOG.md @@ -1,5 +1,30 @@ # e2e-test +## 0.2.10-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.8-next.1 + +## 0.2.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.8-next.0 + - @backstage/cli-common@0.1.13 + - @backstage/errors@1.2.3 + +## 0.2.9 + +### Patch Changes + +- Updated dependencies + - @backstage/create-app@0.5.7 + - @backstage/cli-common@0.1.13 + - @backstage/errors@1.2.3 + ## 0.2.9-next.2 ### Patch Changes diff --git a/packages/e2e-test/package.json b/packages/e2e-test/package.json index 4190379e83..35eec664f9 100644 --- a/packages/e2e-test/package.json +++ b/packages/e2e-test/package.json @@ -1,7 +1,7 @@ { "name": "e2e-test", "description": "E2E test for verifying Backstage packages", - "version": "0.2.9-next.2", + "version": "0.2.10-next.1", "private": true, "backstage": { "role": "cli" @@ -32,7 +32,7 @@ "@backstage/errors": "workspace:^", "chalk": "^4.0.0", "commander": "^9.1.0", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "fs-extra": "10.1.0", "handlebars": "^4.7.3", "mysql2": "^2.2.5", diff --git a/packages/eslint-plugin/rules/no-undeclared-imports.js b/packages/eslint-plugin/rules/no-undeclared-imports.js index c986b52c65..d2c92ccb8a 100644 --- a/packages/eslint-plugin/rules/no-undeclared-imports.js +++ b/packages/eslint-plugin/rules/no-undeclared-imports.js @@ -121,6 +121,39 @@ function getAddFlagForDepsField(depsField) { } } +/** + * Looks up the most common version range for a dependency if it already exists in the repo. + * + * @param {string} name + * @param {string} flag + * @param {getPackageMap.PackageMap} packages + * @returns {string} + */ +function addVersionQuery(name, flag, packages) { + const rangeCounts = new Map(); + + for (const pkg of packages.list) { + const deps = + flag === '--dev' + ? pkg.packageJson.devDependencies + : flag === '--peer' + ? pkg.packageJson.peerDependencies + : pkg.packageJson.dependencies; + const range = deps?.[name]; + if (range) { + rangeCounts.set(range, (rangeCounts.get(range) ?? 0) + 1); + } + } + + const mostCommonRange = [...rangeCounts.entries()].sort( + (a, b) => b[1] - a[1], + )[0]?.[0]; + if (!mostCommonRange) { + return name; + } + return `${name}@${mostCommonRange}`; +} + /** @type {import('eslint').Rule.RuleModule} */ module.exports = { meta: { @@ -177,13 +210,22 @@ module.exports = { } for (const [flag, names] of Object.entries(byFlag)) { + // Look up existing version queries in the repo for the same dependency + const namesWithQuery = [...names].map(name => + addVersionQuery(name, flag, packages), + ); + // The security implication of this is a bit interesting, as crafted add-import // directives could be used to install malicious packages. However, the same is true - // for adding malicious packages to package.json, so there's significant difference. - execFileSync('yarn', ['add', ...(flag ? [flag] : []), ...names], { - cwd: localPkg.dir, - stdio: 'inherit', - }); + // for adding malicious packages to package.json, so there's no significant difference. + execFileSync( + 'yarn', + ['add', ...(flag ? [flag] : []), ...namesWithQuery], + { + cwd: localPkg.dir, + stdio: 'inherit', + }, + ); } // This switches all import directives back to the original import. diff --git a/packages/frontend-app-api/CHANGELOG.md b/packages/frontend-app-api/CHANGELOG.md index b65d797397..a933f6a649 100644 --- a/packages/frontend-app-api/CHANGELOG.md +++ b/packages/frontend-app-api/CHANGELOG.md @@ -1,5 +1,52 @@ # @backstage/frontend-app-api +## 0.3.1-next.0 + +### Patch Changes + +- 60d6eb544e: Removed `@backstage/plugin-graphiql` dependency. +- 9ad4039efa: Bringing over apis from core-plugin-api +- b8cb7804c8: Added `createSpecializedApp`, which is a synchronous version of `createApp` where config and features already need to be loaded. +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/core-app-api@1.11.2-next.0 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.7 + +## 0.3.0 + +### Minor Changes + +- 68fc9dc60e: Added the ability to configure bound routes through `app.routes.bindings`. The routing system used by `createApp` has been replaced by one that only supports route refs of the new format from `@backstage/frontend-plugin-api`. The requirement for route refs to have the same ID as their associated extension has been removed. + +### Patch Changes + +- e28d379e32: Refactor internal extension instance system into an app graph. +- fdc348d5d3: The options parameter of `createApp` is now optional. +- 6c2b872153: Add official support for React 18. +- dc613f9bcf: Updated `app.extensions` configuration schema. +- 733bd95746: Implement new `AppTreeApi` +- 685a4c8901: Installed features are now deduplicated both by reference and ID when available. Features passed to `createApp` now override both discovered and loaded features. +- fa28d4e6df: No longer throw error on invalid input if the child is disabled. +- bb98953cb9: Register default implementation for the `Translation API` on the new `createApp`. +- fe6d09953d: Fix for app node output IDs not being serialized correctly. +- 77f009b35d: Internal updates to match changes in the experimental `@backstage/frontend-plugin-api`. +- 4d6fa921db: Internal refactor to rename the app graph to app tree +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/plugin-graphiql@0.3.0 + - @backstage/core-plugin-api@1.8.0 + - @backstage/version-bridge@1.0.7 + - @backstage/core-app-api@1.11.1 + - @backstage/theme@0.4.4 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + ## 0.3.0-next.2 ### Patch Changes diff --git a/packages/frontend-app-api/api-report.md b/packages/frontend-app-api/api-report.md index 3d6d936018..3ca51f6331 100644 --- a/packages/frontend-app-api/api-report.md +++ b/packages/frontend-app-api/api-report.md @@ -41,6 +41,15 @@ export function createApp(options?: { // @public (undocumented) export function createExtensionTree(options: { config: Config }): ExtensionTree; +// @public +export function createSpecializedApp(options?: { + features?: (BackstagePlugin | ExtensionOverrides)[]; + config?: ConfigApi; + bindRoutes?(context: { bind: AppRouteBinder }): void; +}): { + createRoot(): JSX_2.Element; +}; + // @public (undocumented) export interface ExtensionTree { // (undocumented) diff --git a/packages/frontend-app-api/package.json b/packages/frontend-app-api/package.json index d8b51a0776..7a32004273 100644 --- a/packages/frontend-app-api/package.json +++ b/packages/frontend-app-api/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/frontend-app-api", - "version": "0.3.0-next.2", + "version": "0.3.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -39,7 +39,6 @@ "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", "@backstage/frontend-plugin-api": "workspace:^", - "@backstage/plugin-graphiql": "workspace:^", "@backstage/theme": "workspace:^", "@backstage/types": "workspace:^", "@backstage/version-bridge": "workspace:^", diff --git a/packages/frontend-app-api/src/extensions/CoreLayout.tsx b/packages/frontend-app-api/src/extensions/CoreLayout.tsx index 97f49acac9..0099b67751 100644 --- a/packages/frontend-app-api/src/extensions/CoreLayout.tsx +++ b/packages/frontend-app-api/src/extensions/CoreLayout.tsx @@ -24,7 +24,7 @@ import { SidebarPage } from '@backstage/core-components'; export const CoreLayout = createExtension({ id: 'core.layout', - attachTo: { id: 'core', input: 'root' }, + attachTo: { id: 'core.router', input: 'children' }, inputs: { nav: createExtensionInput( { diff --git a/packages/frontend-app-api/src/extensions/CoreNav.tsx b/packages/frontend-app-api/src/extensions/CoreNav.tsx index 37ce50276b..8d0d4ea5de 100644 --- a/packages/frontend-app-api/src/extensions/CoreNav.tsx +++ b/packages/frontend-app-api/src/extensions/CoreNav.tsx @@ -19,6 +19,7 @@ import { createExtension, coreExtensionData, createExtensionInput, + LogoElements, NavTarget, useRouteRef, } from '@backstage/frontend-plugin-api'; @@ -51,14 +52,16 @@ const useSidebarLogoStyles = makeStyles({ }, }); -const SidebarLogo = () => { +const SidebarLogo = (props: LogoElements) => { const classes = useSidebarLogoStyles(); const { isOpen } = useSidebarOpenState(); return (
- {isOpen ? : } + {isOpen + ? props?.logoFull ?? + : props?.logoIcon ?? }
); @@ -78,6 +81,15 @@ export const CoreNav = createExtension({ items: createExtensionInput({ target: coreExtensionData.navTarget, }), + logos: createExtensionInput( + { + elements: coreExtensionData.logoElements, + }, + { + singleton: true, + optional: true, + }, + ), }, output: { element: coreExtensionData.reactElement, @@ -86,7 +98,7 @@ export const CoreNav = createExtension({ return { element: ( - + {inputs.items.map((item, index) => ( diff --git a/packages/frontend-app-api/src/extensions/CoreRouter.tsx b/packages/frontend-app-api/src/extensions/CoreRouter.tsx new file mode 100644 index 0000000000..f128a246e6 --- /dev/null +++ b/packages/frontend-app-api/src/extensions/CoreRouter.tsx @@ -0,0 +1,175 @@ +/* + * 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, { ComponentType, ReactNode, useContext, useState } from 'react'; +import { + coreExtensionData, + createExtension, + createExtensionInput, +} from '@backstage/frontend-plugin-api'; +import { + ConfigApi, + IdentityApi, + SignInPageProps, + configApiRef, + useApi, +} from '@backstage/core-plugin-api'; +import { InternalAppContext } from '../wiring/InternalAppContext'; +// eslint-disable-next-line @backstage/no-relative-monorepo-imports +import { AppIdentityProxy } from '../../../core-app-api/src/apis/implementations/IdentityApi/AppIdentityProxy'; +import { BrowserRouter } from 'react-router-dom'; +// eslint-disable-next-line @backstage/no-relative-monorepo-imports +import { signInPageComponentDataRef } from '../../../frontend-plugin-api/src/extensions/createSignInPageExtension'; + +export const CoreRouter = createExtension({ + id: 'core.router', + attachTo: { id: 'core', input: 'root' }, + inputs: { + signInPage: createExtensionInput( + { + component: signInPageComponentDataRef, + }, + { singleton: true, optional: true }, + ), + children: createExtensionInput( + { + element: coreExtensionData.reactElement, + }, + { singleton: true }, + ), + }, + output: { + element: coreExtensionData.reactElement, + }, + factory({ inputs }) { + return { + element: ( + + {inputs.children.element} + + ), + }; + }, +}); + +/** + * Read the configured base path. + * + * The returned path does not have a trailing slash. + */ +function getBasePath(configApi: ConfigApi) { + let { pathname } = new URL( + configApi.getOptionalString('app.baseUrl') ?? '/', + 'http://sample.dev', // baseUrl can be specified as just a path + ); + pathname = pathname.replace(/\/*$/, ''); + return pathname; +} + +// This wraps the sign-in page and waits for sign-in to be completed before rendering the app +function SignInPageWrapper({ + component: Component, + appIdentityProxy, + children, +}: { + component: ComponentType; + appIdentityProxy: AppIdentityProxy; + children: ReactNode; +}) { + const [identityApi, setIdentityApi] = useState(); + const configApi = useApi(configApiRef); + const basePath = getBasePath(configApi); + + if (!identityApi) { + return ; + } + + appIdentityProxy.setTarget(identityApi, { + signOutTargetUrl: basePath || '/', + }); + return <>{children}; +} + +/** + * Props for the {@link AppRouter} component. + * @public + */ +export interface AppRouterProps { + children?: ReactNode; + SignInPageComponent?: ComponentType; +} + +/** + * App router and sign-in page wrapper. + * + * @public + * @remarks + * + * The AppRouter provides the routing context and renders the sign-in page. + * Until the user has successfully signed in, this component will render + * the sign-in page. Once the user has signed-in, it will instead render + * the app, while providing routing and route tracking for the app. + */ +export function AppRouter(props: AppRouterProps) { + const { children, SignInPageComponent } = props; + + const configApi = useApi(configApiRef); + const basePath = getBasePath(configApi); + const internalAppContext = useContext(InternalAppContext); + if (!internalAppContext) { + throw new Error('AppRouter must be rendered within the AppProvider'); + } + const { appIdentityProxy } = internalAppContext; + + // If the app hasn't configured a sign-in page, we just continue as guest. + if (!SignInPageComponent) { + appIdentityProxy.setTarget( + { + getUserId: () => 'guest', + getIdToken: async () => undefined, + getProfile: () => ({ + email: 'guest@example.com', + displayName: 'Guest', + }), + getProfileInfo: async () => ({ + email: 'guest@example.com', + displayName: 'Guest', + }), + getBackstageIdentity: async () => ({ + type: 'user', + userEntityRef: 'user:default/guest', + ownershipEntityRefs: ['user:default/guest'], + }), + getCredentials: async () => ({}), + signOut: async () => {}, + }, + { signOutTargetUrl: basePath || '/' }, + ); + + return {children}; + } + + return ( + + + {children} + + + ); +} diff --git a/packages/frontend-app-api/src/routing/extractRouteInfoFromAppNode.test.ts b/packages/frontend-app-api/src/routing/extractRouteInfoFromAppNode.test.ts index c44c10180a..112e1435ae 100644 --- a/packages/frontend-app-api/src/routing/extractRouteInfoFromAppNode.test.ts +++ b/packages/frontend-app-api/src/routing/extractRouteInfoFromAppNode.test.ts @@ -33,6 +33,7 @@ import { Core } from '../extensions/Core'; import { CoreRoutes } from '../extensions/CoreRoutes'; import { CoreNav } from '../extensions/CoreNav'; import { CoreLayout } from '../extensions/CoreLayout'; +import { CoreRouter } from '../extensions/CoreRouter'; const ref1 = createRouteRef(); const ref2 = createRouteRef(); @@ -79,7 +80,7 @@ function routeInfoFromExtensions(extensions: Extension[]) { }); const tree = createAppTree({ config: new MockConfigApi({}), - builtinExtensions: [Core, CoreRoutes, CoreNav, CoreLayout], + builtinExtensions: [Core, CoreRoutes, CoreNav, CoreLayout, CoreRouter], features: [plugin], }); diff --git a/packages/frontend-app-api/src/routing/extractRouteInfoFromAppNode.ts b/packages/frontend-app-api/src/routing/extractRouteInfoFromAppNode.ts index 43955328a8..2bfd09a3e8 100644 --- a/packages/frontend-app-api/src/routing/extractRouteInfoFromAppNode.ts +++ b/packages/frontend-app-api/src/routing/extractRouteInfoFromAppNode.ts @@ -15,10 +15,9 @@ */ import { RouteRef, coreExtensionData } from '@backstage/frontend-plugin-api'; -// eslint-disable-next-line @backstage/no-relative-monorepo-imports -import { toLegacyPlugin } from '../wiring/createApp'; import { BackstageRouteObject } from './types'; import { AppNode } from '@backstage/frontend-plugin-api'; +import { toLegacyPlugin } from './toLegacyPlugin'; // We always add a child that matches all subroutes but without any route refs. This makes // sure that we're always able to match each route no matter how deep the navigation goes. diff --git a/packages/frontend-app-api/src/routing/toLegacyPlugin.ts b/packages/frontend-app-api/src/routing/toLegacyPlugin.ts new file mode 100644 index 0000000000..2d04d04dda --- /dev/null +++ b/packages/frontend-app-api/src/routing/toLegacyPlugin.ts @@ -0,0 +1,55 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { BackstagePlugin } from '@backstage/frontend-plugin-api'; +import { BackstagePlugin as LegacyBackstagePlugin } from '@backstage/core-plugin-api'; +import { getOrCreateGlobalSingleton } from '@backstage/version-bridge'; + +// Make sure that we only convert each new plugin instance to its legacy equivalent once +const legacyPluginStore = getOrCreateGlobalSingleton( + 'legacy-plugin-compatibility-store', + () => new WeakMap(), +); + +export function toLegacyPlugin(plugin: BackstagePlugin): LegacyBackstagePlugin { + let legacy = legacyPluginStore.get(plugin); + if (legacy) { + return legacy; + } + + const errorMsg = 'Not implemented in legacy plugin compatibility layer'; + const notImplemented = () => { + throw new Error(errorMsg); + }; + + legacy = { + getId(): string { + return plugin.id; + }, + get routes() { + return {}; + }, + get externalRoutes() { + return {}; + }, + getApis: notImplemented, + getFeatureFlags: notImplemented, + provide: notImplemented, + }; + + legacyPluginStore.set(plugin, legacy); + return legacy; +} diff --git a/packages/frontend-app-api/src/tree/instantiateAppNodeTree.test.ts b/packages/frontend-app-api/src/tree/instantiateAppNodeTree.test.ts index 68a95fa1fe..802c71f729 100644 --- a/packages/frontend-app-api/src/tree/instantiateAppNodeTree.test.ts +++ b/packages/frontend-app-api/src/tree/instantiateAppNodeTree.test.ts @@ -15,6 +15,7 @@ */ import { + AppNode, Extension, createExtension, createExtensionDataRef, @@ -52,15 +53,27 @@ const simpleExtension = createExtension({ function makeSpec( extension: Extension, - config?: TConfig, + spec?: Partial, ): AppNodeSpec { return { id: extension.id, attachTo: extension.attachTo, disabled: extension.disabled, extension, - config, source: undefined, + ...spec, + }; +} + +function makeNode( + extension: Extension, + spec?: Partial, +): AppNode { + return { + spec: makeSpec(extension, spec), + edges: { + attachments: new Map(), + }, }; } @@ -71,7 +84,7 @@ function makeInstanceWithId( return { id: extension.id, instance: createAppNodeInstance({ - spec: makeSpec(extension, config), + node: makeNode(extension, { config }), attachments: new Map(), }), }; @@ -80,7 +93,7 @@ function makeInstanceWithId( describe('instantiateAppNodeTree', () => { it('should instantiate a single node', () => { const tree = resolveAppTree('root-node', [ - { ...makeSpec(simpleExtension), id: 'root-node' }, + makeSpec(simpleExtension, { id: 'root-node' }), ]); expect(tree.root.instance).not.toBeDefined(); instantiateAppNodeTree(tree.root); @@ -94,7 +107,7 @@ describe('instantiateAppNodeTree', () => { it('should not instantiate disabled nodes', () => { const tree = resolveAppTree('root-node', [ - { ...makeSpec(simpleExtension), id: 'root-node', disabled: true }, + makeSpec(simpleExtension, { id: 'root-node', disabled: true }), ]); expect(tree.root.instance).not.toBeDefined(); instantiateAppNodeTree(tree.root); @@ -103,28 +116,25 @@ describe('instantiateAppNodeTree', () => { it('should instantiate a node with attachments', () => { const tree = resolveAppTree('root-node', [ - { - ...makeSpec( - createExtension({ - id: 'root-node', - attachTo: { id: 'ignored', input: 'ignored' }, - inputs: { - test: createExtensionInput({ test: testDataRef }), - }, - output: { - inputMirror: inputMirrorDataRef, - }, - factory({ inputs }) { - return { inputMirror: inputs }; - }, - }), - ), - }, - { - ...makeSpec(simpleExtension), + makeSpec( + createExtension({ + id: 'root-node', + attachTo: { id: 'ignored', input: 'ignored' }, + inputs: { + test: createExtensionInput({ test: testDataRef }), + }, + output: { + inputMirror: inputMirrorDataRef, + }, + factory({ inputs }) { + return { inputMirror: inputs }; + }, + }), + ), + makeSpec(simpleExtension, { id: 'child-node', attachTo: { id: 'root-node', input: 'test' }, - }, + }), ]); const childNode = tree.nodes.get('child-node'); @@ -191,7 +201,7 @@ describe('createAppNodeInstance', () => { it('should create a simple extension instance', () => { const attachments = new Map(); const instance = createAppNodeInstance({ - spec: makeSpec(simpleExtension), + node: makeNode(simpleExtension), attachments, }); @@ -231,7 +241,7 @@ describe('createAppNodeInstance', () => { ]); const instance = createAppNodeInstance({ attachments, - spec: makeSpec( + node: makeNode( createExtension({ id: 'core.test', attachTo: { id: 'ignored', input: 'ignored' }, @@ -283,10 +293,7 @@ describe('createAppNodeInstance', () => { it('should refuse to create an extension with invalid config', () => { expect(() => createAppNodeInstance({ - spec: { - ...makeSpec(simpleExtension), - config: { other: 'not-a-number' }, - }, + node: makeNode(simpleExtension, { config: { other: 'not-a-number' } }), attachments: new Map(), }), ).toThrow( @@ -297,7 +304,7 @@ describe('createAppNodeInstance', () => { it('should forward extension factory errors', () => { expect(() => createAppNodeInstance({ - spec: makeSpec( + node: makeNode( createExtension({ id: 'core.test', attachTo: { id: 'ignored', input: 'ignored' }, @@ -319,7 +326,7 @@ describe('createAppNodeInstance', () => { it('should refuse to create an instance with duplicate output', () => { expect(() => createAppNodeInstance({ - spec: makeSpec( + node: makeNode( createExtension({ id: 'core.test', attachTo: { id: 'ignored', input: 'ignored' }, @@ -342,7 +349,7 @@ describe('createAppNodeInstance', () => { it('should refuse to create an instance with disconnected output data', () => { expect(() => createAppNodeInstance({ - spec: makeSpec( + node: makeNode( createExtension({ id: 'core.test', attachTo: { id: 'ignored', input: 'ignored' }, @@ -364,7 +371,7 @@ describe('createAppNodeInstance', () => { it('should refuse to create an instance with missing required input', () => { expect(() => createAppNodeInstance({ - spec: makeSpec( + node: makeNode( createExtension({ id: 'core.test', attachTo: { id: 'ignored', input: 'ignored' }, @@ -408,7 +415,7 @@ describe('createAppNodeInstance', () => { ], ], ]), - spec: makeSpec( + node: makeNode( createExtension({ id: 'core.test', attachTo: { id: 'ignored', input: 'ignored' }, @@ -443,7 +450,7 @@ describe('createAppNodeInstance', () => { ], ], ]), - spec: makeSpec( + node: makeNode( createExtension({ id: 'core.test', attachTo: { id: 'ignored', input: 'ignored' }, @@ -469,7 +476,7 @@ describe('createAppNodeInstance', () => { ], ], ]), - spec: makeSpec( + node: makeNode( createExtension({ id: 'core.test', attachTo: { id: 'ignored', input: 'ignored' }, @@ -503,7 +510,7 @@ describe('createAppNodeInstance', () => { ], ], ]), - spec: makeSpec( + node: makeNode( createExtension({ id: 'core.test', attachTo: { id: 'ignored', input: 'ignored' }, @@ -531,7 +538,7 @@ describe('createAppNodeInstance', () => { attachments: new Map([ ['singleton', [makeInstanceWithId(simpleExtension, undefined)]], ]), - spec: makeSpec( + node: makeNode( createExtension({ id: 'core.test', attachTo: { id: 'ignored', input: 'ignored' }, diff --git a/packages/frontend-app-api/src/tree/instantiateAppNodeTree.ts b/packages/frontend-app-api/src/tree/instantiateAppNodeTree.ts index 003abbb97e..2b1ab04c25 100644 --- a/packages/frontend-app-api/src/tree/instantiateAppNodeTree.ts +++ b/packages/frontend-app-api/src/tree/instantiateAppNodeTree.ts @@ -20,11 +20,7 @@ import { ExtensionDataRef, } from '@backstage/frontend-plugin-api'; import mapValues from 'lodash/mapValues'; -import { - AppNode, - AppNodeInstance, - AppNodeSpec, -} from '@backstage/frontend-plugin-api'; +import { AppNode, AppNodeInstance } from '@backstage/frontend-plugin-api'; type Mutable = { -readonly [P in keyof T]: T[P]; @@ -99,11 +95,11 @@ function resolveInputs( /** @internal */ export function createAppNodeInstance(options: { - spec: AppNodeSpec; + node: AppNode; attachments: ReadonlyMap; }): AppNodeInstance { - const { spec, attachments } = options; - const { id, extension, config, source } = spec; + const { node, attachments } = options; + const { id, extension, config } = node.spec; const extensionData = new Map(); const extensionDataRefs = new Set>(); @@ -118,7 +114,7 @@ export function createAppNodeInstance(options: { try { const namedOutputs = extension.factory({ - source, + node, config: parsedConfig, inputs: resolveInputs(extension.inputs, attachments), }); @@ -186,7 +182,7 @@ export function instantiateAppNodeTree(rootNode: AppNode): void { } (node as Mutable).instance = createAppNodeInstance({ - spec: node.spec, + node, attachments: instantiatedAttachments, }); diff --git a/packages/frontend-app-api/src/wiring/InternalAppContext.ts b/packages/frontend-app-api/src/wiring/InternalAppContext.ts new file mode 100644 index 0000000000..805c46a067 --- /dev/null +++ b/packages/frontend-app-api/src/wiring/InternalAppContext.ts @@ -0,0 +1,26 @@ +/* + * 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 { createContext } from 'react'; +// eslint-disable-next-line @backstage/no-relative-monorepo-imports +import { AppIdentityProxy } from '../../../core-app-api/src/apis/implementations/IdentityApi/AppIdentityProxy'; + +export const InternalAppContext = createContext< + | undefined + | { + appIdentityProxy: AppIdentityProxy; + } +>(undefined); diff --git a/packages/frontend-app-api/src/wiring/createApp.test.tsx b/packages/frontend-app-api/src/wiring/createApp.test.tsx index 80d9f846f0..52186a5029 100644 --- a/packages/frontend-app-api/src/wiring/createApp.test.tsx +++ b/packages/frontend-app-api/src/wiring/createApp.test.tsx @@ -127,18 +127,22 @@ describe('createApp', () => { expect(String(tree.root)).toMatchInlineSnapshot(` " root [ - - content [ - - routes [ - + + children [ + + content [ + + routes [ + + ] + ] - + nav [ + + ] + ] - nav [ - - ] - + ] themes [ diff --git a/packages/frontend-app-api/src/wiring/createApp.tsx b/packages/frontend-app-api/src/wiring/createApp.tsx index ca0e1d60d1..1858bd4884 100644 --- a/packages/frontend-app-api/src/wiring/createApp.tsx +++ b/packages/frontend-app-api/src/wiring/createApp.tsx @@ -76,11 +76,10 @@ import { components as defaultComponents, icons as defaultIcons, } from '../../../app-defaults/src/defaults'; -import { BrowserRouter, Route } from 'react-router-dom'; +import { Route } from 'react-router-dom'; import { SidebarItem } from '@backstage/core-components'; import { DarkTheme, LightTheme } from '../extensions/themes'; import { extractRouteInfoFromAppNode } from '../routing/extractRouteInfoFromAppNode'; -import { getOrCreateGlobalSingleton } from '@backstage/version-bridge'; import { appLanguageApiRef, translationApiRef, @@ -91,9 +90,13 @@ import { resolveRouteBindings } from '../routing/resolveRouteBindings'; import { collectRouteIds } from '../routing/collectRouteIds'; import { createAppTree } from '../tree'; import { AppNode } from '@backstage/frontend-plugin-api'; +import { toLegacyPlugin } from '../routing/toLegacyPlugin'; +import { InternalAppContext } from './InternalAppContext'; +import { CoreRouter } from '../extensions/CoreRouter'; const builtinExtensions = [ Core, + CoreRouter, CoreRoutes, CoreNav, CoreLayout, @@ -244,49 +247,18 @@ export function createApp(options?: { const discoveredFeatures = getAvailableFeatures(config); const loadedFeatures = (await options?.featureLoader?.({ config })) ?? []; - const allFeatures = deduplicateFeatures([ - ...discoveredFeatures, - ...loadedFeatures, - ...(options?.features ?? []), - ]); - const tree = createAppTree({ - features: allFeatures, - builtinExtensions, + const app = createSpecializedApp({ config, - }); + features: [ + ...discoveredFeatures, + ...loadedFeatures, + ...(options?.features ?? []), + ], + bindRoutes: options?.bindRoutes, + }).createRoot(); - const appContext = createLegacyAppContext( - allFeatures.filter( - (f): f is BackstagePlugin => f.$$type === '@backstage/BackstagePlugin', - ), - ); - - const routeIds = collectRouteIds(allFeatures); - - const App = () => ( - - - - - {/* TODO: set base path using the logic from AppRouter */} - - {tree.root.instance!.getData(coreExtensionData.reactElement)} - - - - - - ); - - return { default: App }; + return { default: () => app }; } return { @@ -301,40 +273,64 @@ export function createApp(options?: { }; } -// Make sure that we only convert each new plugin instance to its legacy equivalent once -const legacyPluginStore = getOrCreateGlobalSingleton( - 'legacy-plugin-compatibility-store', - () => new WeakMap(), -); +/** + * Synchronous version of {@link createApp}, expecting all features and + * config to have been loaded already. + * @public + */ +export function createSpecializedApp(options?: { + features?: (BackstagePlugin | ExtensionOverrides)[]; + config?: ConfigApi; + bindRoutes?(context: { bind: AppRouteBinder }): void; +}): { createRoot(): JSX.Element } { + const { + features: duplicatedFeatures = [], + config = new ConfigReader({}, 'empty-config'), + } = options ?? {}; -export function toLegacyPlugin(plugin: BackstagePlugin): LegacyBackstagePlugin { - let legacy = legacyPluginStore.get(plugin); - if (legacy) { - return legacy; - } + const features = deduplicateFeatures(duplicatedFeatures); - const errorMsg = 'Not implemented in legacy plugin compatibility layer'; - const notImplemented = () => { - throw new Error(errorMsg); + const tree = createAppTree({ + features, + builtinExtensions, + config, + }); + + const appContext = createLegacyAppContext( + features.filter( + (f): f is BackstagePlugin => f.$$type === '@backstage/BackstagePlugin', + ), + ); + + const appIdentityProxy = new AppIdentityProxy(); + const apiHolder = createApiHolder(tree, config, appIdentityProxy); + const routeInfo = extractRouteInfoFromAppNode(tree.root); + const routeBindings = resolveRouteBindings( + options?.bindRoutes, + config, + collectRouteIds(features), + ); + const rootEl = tree.root.instance!.getData(coreExtensionData.reactElement); + + const App = () => ( + + + + + + {rootEl} + + + + + + ); + + return { + createRoot() { + return ; + }, }; - - legacy = { - getId(): string { - return plugin.id; - }, - get routes() { - return {}; - }, - get externalRoutes() { - return {}; - }, - getApis: notImplemented, - getFeatureFlags: notImplemented, - provide: notImplemented, - }; - - legacyPluginStore.set(plugin, legacy); - return legacy; } function createLegacyAppContext(plugins: BackstagePlugin[]): AppContext { @@ -359,7 +355,11 @@ function createLegacyAppContext(plugins: BackstagePlugin[]): AppContext { }; } -function createApiHolder(tree: AppTree, configApi: ConfigApi): ApiHolder { +function createApiHolder( + tree: AppTree, + configApi: ConfigApi, + appIdentityProxy: AppIdentityProxy, +): ApiHolder { const factoryRegistry = new ApiFactoryRegistry(); const pluginApis = @@ -388,33 +388,7 @@ function createApiHolder(tree: AppTree, configApi: ConfigApi): ApiHolder { factoryRegistry.register('static', { api: identityApiRef, deps: {}, - factory: () => { - const appIdentityProxy = new AppIdentityProxy(); - // TODO: Remove this when sign-in page is migrated - appIdentityProxy.setTarget( - { - getUserId: () => 'guest', - getIdToken: async () => undefined, - getProfile: () => ({ - email: 'guest@example.com', - displayName: 'Guest', - }), - getProfileInfo: async () => ({ - email: 'guest@example.com', - displayName: 'Guest', - }), - getBackstageIdentity: async () => ({ - type: 'user', - userEntityRef: 'user:default/guest', - ownershipEntityRefs: ['user:default/guest'], - }), - getCredentials: async () => ({}), - signOut: async () => {}, - }, - { signOutTargetUrl: '/' }, - ); - return appIdentityProxy; - }, + factory: () => appIdentityProxy, }); factoryRegistry.register('static', { diff --git a/packages/frontend-app-api/src/wiring/index.ts b/packages/frontend-app-api/src/wiring/index.ts index dc1ba3bc13..412e643523 100644 --- a/packages/frontend-app-api/src/wiring/index.ts +++ b/packages/frontend-app-api/src/wiring/index.ts @@ -16,6 +16,7 @@ export { createApp, + createSpecializedApp, createExtensionTree, type ExtensionTreeNode, type ExtensionTree, diff --git a/packages/frontend-plugin-api/CHANGELOG.md b/packages/frontend-plugin-api/CHANGELOG.md index 00defc21c8..94f90d6717 100644 --- a/packages/frontend-plugin-api/CHANGELOG.md +++ b/packages/frontend-plugin-api/CHANGELOG.md @@ -1,5 +1,34 @@ # @backstage/frontend-plugin-api +## 0.3.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.7 + +## 0.3.0 + +### Minor Changes + +- 68fc9dc60e: Added `RouteRef`, `SubRouteRef`, `ExternalRouteRef`, and related types. All exports from this package that previously relied on the types with the same name from `@backstage/core-plugin-api` now use the new types instead. To convert and existing legacy route ref to be compatible with the APIs from this package, use the `convertLegacyRouteRef` utility from `@backstage/core-plugin-api/alpha`. +- 77f009b35d: Extensions now return their output from the factory function rather than calling `bind(...)`. + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 733bd95746: Add new `AppTreeApi`. +- 6af88a05ff: Improve the extension boundary component and create a default extension suspense component. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/version-bridge@1.0.7 + - @backstage/types@1.1.1 + ## 0.3.0-next.2 ### Patch Changes diff --git a/packages/frontend-plugin-api/api-report.md b/packages/frontend-plugin-api/api-report.md index 794da9617b..bcc6115ff3 100644 --- a/packages/frontend-plugin-api/api-report.md +++ b/packages/frontend-plugin-api/api-report.md @@ -5,19 +5,91 @@ ```ts /// +import { AlertApi } from '@backstage/core-plugin-api'; +import { alertApiRef } from '@backstage/core-plugin-api'; +import { AlertMessage } from '@backstage/core-plugin-api'; import { AnyApiFactory } from '@backstage/core-plugin-api'; import { AnyApiRef } from '@backstage/core-plugin-api'; +import { ApiFactory } from '@backstage/core-plugin-api'; +import { ApiHolder } from '@backstage/core-plugin-api'; import { ApiRef } from '@backstage/core-plugin-api'; +import { ApiRefConfig } from '@backstage/core-plugin-api'; import { AppTheme } from '@backstage/core-plugin-api'; -import { IconComponent } from '@backstage/core-plugin-api'; +import { AppThemeApi } from '@backstage/core-plugin-api'; +import { appThemeApiRef } from '@backstage/core-plugin-api'; +import { atlassianAuthApiRef } from '@backstage/core-plugin-api'; +import { AuthProviderInfo } from '@backstage/core-plugin-api'; +import { AuthRequestOptions } from '@backstage/core-plugin-api'; +import { BackstageIdentityApi } from '@backstage/core-plugin-api'; +import { BackstageIdentityResponse } from '@backstage/core-plugin-api'; +import { BackstageUserIdentity } from '@backstage/core-plugin-api'; +import { bitbucketAuthApiRef } from '@backstage/core-plugin-api'; +import { bitbucketServerAuthApiRef } from '@backstage/core-plugin-api'; +import { ComponentType } from 'react'; +import { ConfigApi } from '@backstage/core-plugin-api'; +import { configApiRef } from '@backstage/core-plugin-api'; +import { createApiFactory } from '@backstage/core-plugin-api'; +import { createApiRef } from '@backstage/core-plugin-api'; +import { DiscoveryApi } from '@backstage/core-plugin-api'; +import { discoveryApiRef } from '@backstage/core-plugin-api'; +import { ErrorApi } from '@backstage/core-plugin-api'; +import { ErrorApiError } from '@backstage/core-plugin-api'; +import { ErrorApiErrorContext } from '@backstage/core-plugin-api'; +import { errorApiRef } from '@backstage/core-plugin-api'; +import { FeatureFlag } from '@backstage/core-plugin-api'; +import { FeatureFlagsApi } from '@backstage/core-plugin-api'; +import { featureFlagsApiRef } from '@backstage/core-plugin-api'; +import { FeatureFlagsSaveOptions } from '@backstage/core-plugin-api'; +import { FeatureFlagState } from '@backstage/core-plugin-api'; +import { FetchApi } from '@backstage/core-plugin-api'; +import { fetchApiRef } from '@backstage/core-plugin-api'; +import { githubAuthApiRef } from '@backstage/core-plugin-api'; +import { gitlabAuthApiRef } from '@backstage/core-plugin-api'; +import { googleAuthApiRef } from '@backstage/core-plugin-api'; +import { IconComponent as IconComponent_2 } from '@backstage/core-plugin-api'; +import { IdentityApi } from '@backstage/core-plugin-api'; +import { identityApiRef } from '@backstage/core-plugin-api'; import { JsonObject } from '@backstage/types'; import { JSX as JSX_2 } from 'react'; +import { microsoftAuthApiRef } from '@backstage/core-plugin-api'; +import { OAuthApi } from '@backstage/core-plugin-api'; +import { OAuthRequestApi } from '@backstage/core-plugin-api'; +import { oauthRequestApiRef } from '@backstage/core-plugin-api'; +import { OAuthRequester } from '@backstage/core-plugin-api'; +import { OAuthRequesterOptions } from '@backstage/core-plugin-api'; +import { OAuthScope } from '@backstage/core-plugin-api'; +import { oktaAuthApiRef } from '@backstage/core-plugin-api'; +import { oneloginAuthApiRef } from '@backstage/core-plugin-api'; +import { OpenIdConnectApi } from '@backstage/core-plugin-api'; +import { PendingOAuthRequest } from '@backstage/core-plugin-api'; +import { ProfileInfo } from '@backstage/core-plugin-api'; +import { ProfileInfoApi } from '@backstage/core-plugin-api'; import { default as React_2 } from 'react'; import { ReactNode } from 'react'; +import { SessionApi } from '@backstage/core-plugin-api'; +import { SessionState } from '@backstage/core-plugin-api'; +import { SignInPageProps } from '@backstage/core-plugin-api'; +import { StorageApi } from '@backstage/core-plugin-api'; +import { storageApiRef } from '@backstage/core-plugin-api'; +import { StorageValueSnapshot } from '@backstage/core-plugin-api'; +import { TypesToApiRefs } from '@backstage/core-plugin-api'; +import { useApi } from '@backstage/core-plugin-api'; +import { useApiHolder } from '@backstage/core-plugin-api'; +import { withApis } from '@backstage/core-plugin-api'; import { z } from 'zod'; import { ZodSchema } from 'zod'; import { ZodTypeDef } from 'zod'; +export { AlertApi }; + +export { alertApiRef }; + +export { AlertMessage }; + +export { AnyApiFactory }; + +export { AnyApiRef }; + // @public (undocumented) export type AnyExtensionDataMap = { [name in string]: ExtensionDataRef< @@ -56,6 +128,14 @@ export type AnyRoutes = { [name in string]: RouteRef; }; +export { ApiFactory }; + +export { ApiHolder }; + +export { ApiRef }; + +export { ApiRefConfig }; + // @public export interface AppNode { readonly edges: AppNodeEdges; @@ -99,6 +179,12 @@ export interface AppNodeSpec { readonly source?: BackstagePlugin; } +export { AppTheme }; + +export { AppThemeApi }; + +export { appThemeApiRef }; + // @public export interface AppTree { readonly nodes: ReadonlyMap; @@ -116,6 +202,16 @@ export interface AppTreeApi { // @public export const appTreeApiRef: ApiRef; +export { atlassianAuthApiRef }; + +export { AuthProviderInfo }; + +export { AuthRequestOptions }; + +export { BackstageIdentityApi }; + +export { BackstageIdentityResponse }; + // @public (undocumented) export interface BackstagePlugin< Routes extends AnyRoutes = AnyRoutes, @@ -133,6 +229,16 @@ export interface BackstagePlugin< routes: Routes; } +export { BackstageUserIdentity }; + +export { bitbucketAuthApiRef }; + +export { bitbucketServerAuthApiRef }; + +export { ConfigApi }; + +export { configApiRef }; + // @public (undocumented) export interface ConfigurableExtensionDataRef< TData, @@ -157,6 +263,7 @@ export const coreExtensionData: { routeRef: ConfigurableExtensionDataRef, {}>; navTarget: ConfigurableExtensionDataRef; theme: ConfigurableExtensionDataRef; + logoElements: ConfigurableExtensionDataRef; }; // @public (undocumented) @@ -181,6 +288,10 @@ export function createApiExtension< }, ): Extension; +export { createApiFactory }; + +export { createApiRef }; + // @public (undocumented) export function createExtension< TOutput extends AnyExtensionDataMap, @@ -230,7 +341,7 @@ export interface CreateExtensionOptions< disabled?: boolean; // (undocumented) factory(options: { - source?: BackstagePlugin; + node: AppNode; config: TConfig; inputs: Expand>; }): Expand>; @@ -277,7 +388,7 @@ export function createNavItemExtension(options: { id: string; routeRef: RouteRef; title: string; - icon: IconComponent; + icon: IconComponent_2; }): Extension<{ title: string; }>; @@ -345,6 +456,25 @@ export function createSchemaFromZod( schemaCreator: (zImpl: typeof z) => ZodSchema, ): PortableSchema; +// @public (undocumented) +export function createSignInPageExtension< + TConfig extends {}, + TInputs extends AnyExtensionInputMap, +>(options: { + id: string; + attachTo?: { + id: string; + input: string; + }; + configSchema?: PortableSchema; + disabled?: boolean; + inputs?: TInputs; + loader: (options: { + config: TConfig; + inputs: Expand>; + }) => Promise>; +}): Extension; + // @public export function createSubRouteRef< Path extends string, @@ -357,6 +487,18 @@ export function createSubRouteRef< // @public (undocumented) export function createThemeExtension(theme: AppTheme): Extension; +export { DiscoveryApi }; + +export { discoveryApiRef }; + +export { ErrorApi }; + +export { ErrorApiError }; + +export { ErrorApiErrorContext }; + +export { errorApiRef }; + // @public (undocumented) export interface Extension { // (undocumented) @@ -372,7 +514,7 @@ export interface Extension { disabled: boolean; // (undocumented) factory(options: { - source?: BackstagePlugin; + node: AppNode; config: TConfig; inputs: Record< string, @@ -397,11 +539,9 @@ export interface ExtensionBoundaryProps { // (undocumented) children: ReactNode; // (undocumented) - id: string; + node: AppNode; // (undocumented) routable?: boolean; - // (undocumented) - source?: BackstagePlugin; } // @public (undocumented) @@ -488,13 +628,75 @@ export interface ExternalRouteRef< readonly T: TParams; } +export { FeatureFlag }; + +export { FeatureFlagsApi }; + +export { featureFlagsApiRef }; + +export { FeatureFlagsSaveOptions }; + +export { FeatureFlagState }; + +export { FetchApi }; + +export { fetchApiRef }; + +export { githubAuthApiRef }; + +export { gitlabAuthApiRef }; + +export { googleAuthApiRef }; + +// @public +export type IconComponent = ComponentType< + | { + fontSize?: 'large' | 'small' | 'default' | 'inherit'; + } + | { + fontSize?: 'medium' | 'large' | 'small' | 'inherit'; + } +>; + +export { IdentityApi }; + +export { identityApiRef }; + +// @public (undocumented) +export type LogoElements = { + logoIcon?: JSX_2.Element; + logoFull?: JSX_2.Element; +}; + +export { microsoftAuthApiRef }; + // @public (undocumented) export type NavTarget = { title: string; - icon: IconComponent; + icon: IconComponent_2; routeRef: RouteRef; }; +export { OAuthApi }; + +export { OAuthRequestApi }; + +export { oauthRequestApiRef }; + +export { OAuthRequester }; + +export { OAuthRequesterOptions }; + +export { OAuthScope }; + +export { oktaAuthApiRef }; + +export { oneloginAuthApiRef }; + +export { OpenIdConnectApi }; + +export { PendingOAuthRequest }; + // @public (undocumented) export interface PluginOptions< Routes extends AnyRoutes, @@ -516,6 +718,10 @@ export type PortableSchema = { schema: JsonObject; }; +export { ProfileInfo }; + +export { ProfileInfoApi }; + // @public export type RouteFunc = ( ...[params]: TParams extends undefined @@ -533,6 +739,16 @@ export interface RouteRef< readonly T: TParams; } +export { SessionApi }; + +export { SessionState }; + +export { StorageApi }; + +export { storageApiRef }; + +export { StorageValueSnapshot }; + // @public export interface SubRouteRef< TParams extends AnyRouteRefParams = AnyRouteRefParams, @@ -545,6 +761,12 @@ export interface SubRouteRef< readonly T: TParams; } +export { TypesToApiRefs }; + +export { useApi }; + +export { useApiHolder }; + // @public export function useRouteRef< TOptional extends boolean, @@ -562,4 +784,6 @@ export function useRouteRef( export function useRouteRefParams( _routeRef: RouteRef | SubRouteRef, ): Params; + +export { withApis }; ``` diff --git a/packages/frontend-plugin-api/package.json b/packages/frontend-plugin-api/package.json index 86714f2713..45888aff39 100644 --- a/packages/frontend-plugin-api/package.json +++ b/packages/frontend-plugin-api/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/frontend-plugin-api", - "version": "0.3.0-next.2", + "version": "0.3.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,6 +25,7 @@ "devDependencies": { "@backstage/cli": "workspace:^", "@backstage/frontend-app-api": "workspace:^", + "@backstage/frontend-test-utils": "workspace:^", "@backstage/test-utils": "workspace:^", "@testing-library/jest-dom": "^6.0.0", "@testing-library/react": "^14.0.0", @@ -38,6 +39,7 @@ "react-router-dom": "6.0.0-beta.0 || ^6.3.0" }, "dependencies": { + "@backstage/config": "workspace:^", "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", "@backstage/types": "workspace:^", diff --git a/plugins/catalog-graphql/src/index.ts b/packages/frontend-plugin-api/src/apis/definitions/AlertApi.ts similarity index 83% rename from plugins/catalog-graphql/src/index.ts rename to packages/frontend-plugin-api/src/apis/definitions/AlertApi.ts index 51ae12e684..649a930b50 100644 --- a/plugins/catalog-graphql/src/index.ts +++ b/packages/frontend-plugin-api/src/apis/definitions/AlertApi.ts @@ -14,10 +14,8 @@ * limitations under the License. */ -/** - * An experimental Backstage catalog GraphQL module - * - * @packageDocumentation - */ - -export * from './graphql/module'; +export { + type AlertApi, + type AlertMessage, + alertApiRef, +} from '@backstage/core-plugin-api'; diff --git a/packages/frontend-plugin-api/src/apis/definitions/AppLanguageApi.ts b/packages/frontend-plugin-api/src/apis/definitions/AppLanguageApi.ts new file mode 100644 index 0000000000..37ffcfa820 --- /dev/null +++ b/packages/frontend-plugin-api/src/apis/definitions/AppLanguageApi.ts @@ -0,0 +1,20 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { + type AppLanguageApi, + appLanguageApiRef, +} from '@backstage/core-plugin-api/alpha'; diff --git a/plugins/graphql-backend/src/index.ts b/packages/frontend-plugin-api/src/apis/definitions/AppThemeApi.ts similarity index 82% rename from plugins/graphql-backend/src/index.ts rename to packages/frontend-plugin-api/src/apis/definitions/AppThemeApi.ts index a9f7f92ad9..ce62cd72c3 100644 --- a/plugins/graphql-backend/src/index.ts +++ b/packages/frontend-plugin-api/src/apis/definitions/AppThemeApi.ts @@ -14,10 +14,8 @@ * limitations under the License. */ -/** - * An experimental Backstage backend plugin for GraphQL - * - * @packageDocumentation - */ - -export * from './service/router'; +export { + type AppTheme, + type AppThemeApi, + appThemeApiRef, +} from '@backstage/core-plugin-api'; diff --git a/packages/frontend-plugin-api/src/apis/definitions/ConfigApi.ts b/packages/frontend-plugin-api/src/apis/definitions/ConfigApi.ts new file mode 100644 index 0000000000..968a2843ba --- /dev/null +++ b/packages/frontend-plugin-api/src/apis/definitions/ConfigApi.ts @@ -0,0 +1,17 @@ +/* + * 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 ConfigApi, configApiRef } from '@backstage/core-plugin-api'; diff --git a/packages/frontend-plugin-api/src/apis/definitions/DiscoveryApi.ts b/packages/frontend-plugin-api/src/apis/definitions/DiscoveryApi.ts new file mode 100644 index 0000000000..98b3f0bbf0 --- /dev/null +++ b/packages/frontend-plugin-api/src/apis/definitions/DiscoveryApi.ts @@ -0,0 +1,17 @@ +/* + * 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 DiscoveryApi, discoveryApiRef } from '@backstage/core-plugin-api'; diff --git a/packages/frontend-plugin-api/src/apis/definitions/ErrorApi.ts b/packages/frontend-plugin-api/src/apis/definitions/ErrorApi.ts new file mode 100644 index 0000000000..57782a05dc --- /dev/null +++ b/packages/frontend-plugin-api/src/apis/definitions/ErrorApi.ts @@ -0,0 +1,22 @@ +/* + * 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 ErrorApiError, + type ErrorApiErrorContext, + type ErrorApi, + errorApiRef, +} from '@backstage/core-plugin-api'; diff --git a/packages/frontend-plugin-api/src/apis/definitions/FeatureFlagsApi.ts b/packages/frontend-plugin-api/src/apis/definitions/FeatureFlagsApi.ts new file mode 100644 index 0000000000..820efc0a25 --- /dev/null +++ b/packages/frontend-plugin-api/src/apis/definitions/FeatureFlagsApi.ts @@ -0,0 +1,23 @@ +/* + * 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 FeatureFlag, + type FeatureFlagState, + type FeatureFlagsSaveOptions, + type FeatureFlagsApi, + featureFlagsApiRef, +} from '@backstage/core-plugin-api'; diff --git a/packages/frontend-plugin-api/src/apis/definitions/FetchApi.ts b/packages/frontend-plugin-api/src/apis/definitions/FetchApi.ts new file mode 100644 index 0000000000..bcc9bc6a91 --- /dev/null +++ b/packages/frontend-plugin-api/src/apis/definitions/FetchApi.ts @@ -0,0 +1,17 @@ +/* + * 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 { type FetchApi, fetchApiRef } from '@backstage/core-plugin-api'; diff --git a/packages/frontend-plugin-api/src/apis/definitions/IdentityApi.ts b/packages/frontend-plugin-api/src/apis/definitions/IdentityApi.ts new file mode 100644 index 0000000000..03503a8fba --- /dev/null +++ b/packages/frontend-plugin-api/src/apis/definitions/IdentityApi.ts @@ -0,0 +1,17 @@ +/* + * 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 IdentityApi, identityApiRef } from '@backstage/core-plugin-api'; diff --git a/packages/frontend-plugin-api/src/apis/definitions/OAuthRequestApi.ts b/packages/frontend-plugin-api/src/apis/definitions/OAuthRequestApi.ts new file mode 100644 index 0000000000..ff7a0f2852 --- /dev/null +++ b/packages/frontend-plugin-api/src/apis/definitions/OAuthRequestApi.ts @@ -0,0 +1,23 @@ +/* + * 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 OAuthRequesterOptions, + type OAuthRequester, + type PendingOAuthRequest, + type OAuthRequestApi, + oauthRequestApiRef, +} from '@backstage/core-plugin-api'; diff --git a/packages/frontend-plugin-api/src/apis/definitions/StorageApi.ts b/packages/frontend-plugin-api/src/apis/definitions/StorageApi.ts new file mode 100644 index 0000000000..2309d2414c --- /dev/null +++ b/packages/frontend-plugin-api/src/apis/definitions/StorageApi.ts @@ -0,0 +1,21 @@ +/* + * 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 StorageValueSnapshot, + type StorageApi, + storageApiRef, +} from '@backstage/core-plugin-api'; diff --git a/packages/frontend-plugin-api/src/apis/definitions/alpha.ts b/packages/frontend-plugin-api/src/apis/definitions/alpha.ts new file mode 100644 index 0000000000..a4ccde1170 --- /dev/null +++ b/packages/frontend-plugin-api/src/apis/definitions/alpha.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { appLanguageApiRef, type AppLanguageApi } from './AppLanguageApi'; diff --git a/packages/frontend-plugin-api/src/apis/definitions/auth.ts b/packages/frontend-plugin-api/src/apis/definitions/auth.ts new file mode 100644 index 0000000000..d27aebbf47 --- /dev/null +++ b/packages/frontend-plugin-api/src/apis/definitions/auth.ts @@ -0,0 +1,39 @@ +/* + * 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 BackstageIdentityApi, + type BackstageIdentityResponse, + type BackstageUserIdentity, + type AuthProviderInfo, + type AuthRequestOptions, + type OAuthScope, + type OAuthApi, + type OpenIdConnectApi, + type ProfileInfoApi, + type ProfileInfo, + type SessionApi, + SessionState, + atlassianAuthApiRef, + bitbucketAuthApiRef, + bitbucketServerAuthApiRef, + githubAuthApiRef, + gitlabAuthApiRef, + googleAuthApiRef, + oktaAuthApiRef, + microsoftAuthApiRef, + oneloginAuthApiRef, +} from '@backstage/core-plugin-api'; diff --git a/packages/frontend-plugin-api/src/apis/definitions/index.ts b/packages/frontend-plugin-api/src/apis/definitions/index.ts index 8facdca2ca..420942cb19 100644 --- a/packages/frontend-plugin-api/src/apis/definitions/index.ts +++ b/packages/frontend-plugin-api/src/apis/definitions/index.ts @@ -23,3 +23,22 @@ export { type AppTree, type AppTreeApi, } from './AppTreeApi'; + +// This folder contains definitions for all core APIs. +// +// Plugins should rely on these APIs for functionality as much as possible. +// +// If you think some API definition is missing, please open an Issue or send a PR! + +export * from './auth'; + +export * from './AlertApi'; +export * from './AppThemeApi'; +export * from './ConfigApi'; +export * from './DiscoveryApi'; +export * from './ErrorApi'; +export * from './FeatureFlagsApi'; +export * from './FetchApi'; +export * from './IdentityApi'; +export * from './OAuthRequestApi'; +export * from './StorageApi'; diff --git a/packages/frontend-plugin-api/src/apis/index.ts b/packages/frontend-plugin-api/src/apis/index.ts index 5a012c0553..5def6cb0f9 100644 --- a/packages/frontend-plugin-api/src/apis/index.ts +++ b/packages/frontend-plugin-api/src/apis/index.ts @@ -15,3 +15,4 @@ */ export * from './definitions'; +export * from './system'; diff --git a/packages/frontend-plugin-api/src/apis/system/ApiRef.ts b/packages/frontend-plugin-api/src/apis/system/ApiRef.ts new file mode 100644 index 0000000000..0d1f8312cb --- /dev/null +++ b/packages/frontend-plugin-api/src/apis/system/ApiRef.ts @@ -0,0 +1,21 @@ +/* + * 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 ApiRef, + type ApiRefConfig, + createApiRef, +} from '@backstage/core-plugin-api'; diff --git a/packages/frontend-plugin-api/src/apis/system/helpers.ts b/packages/frontend-plugin-api/src/apis/system/helpers.ts new file mode 100644 index 0000000000..5de265be99 --- /dev/null +++ b/packages/frontend-plugin-api/src/apis/system/helpers.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { createApiFactory } from '@backstage/core-plugin-api'; diff --git a/packages/frontend-plugin-api/src/apis/system/index.ts b/packages/frontend-plugin-api/src/apis/system/index.ts new file mode 100644 index 0000000000..b1bd3ac2b3 --- /dev/null +++ b/packages/frontend-plugin-api/src/apis/system/index.ts @@ -0,0 +1,21 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { useApi, useApiHolder, withApis } from './useApi'; +export { createApiRef } from './ApiRef'; +export type { ApiRefConfig } from './ApiRef'; +export * from './types'; +export * from './helpers'; diff --git a/packages/frontend-plugin-api/src/apis/system/types.ts b/packages/frontend-plugin-api/src/apis/system/types.ts new file mode 100644 index 0000000000..cc44e19e3f --- /dev/null +++ b/packages/frontend-plugin-api/src/apis/system/types.ts @@ -0,0 +1,24 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export type { + ApiRef, + AnyApiRef, + TypesToApiRefs, + ApiHolder, + ApiFactory, + AnyApiFactory, +} from '@backstage/core-plugin-api'; diff --git a/packages/frontend-plugin-api/src/apis/system/useApi.tsx b/packages/frontend-plugin-api/src/apis/system/useApi.tsx new file mode 100644 index 0000000000..d2efa49fa1 --- /dev/null +++ b/packages/frontend-plugin-api/src/apis/system/useApi.tsx @@ -0,0 +1,17 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { useApiHolder, useApi, withApis } from '@backstage/core-plugin-api'; diff --git a/packages/frontend-plugin-api/src/components/ExtensionBoundary.test.tsx b/packages/frontend-plugin-api/src/components/ExtensionBoundary.test.tsx index 7b27c79360..49a9f95ed2 100644 --- a/packages/frontend-plugin-api/src/components/ExtensionBoundary.test.tsx +++ b/packages/frontend-plugin-api/src/components/ExtensionBoundary.test.tsx @@ -16,44 +16,12 @@ import React, { useEffect } from 'react'; import { screen, waitFor } from '@testing-library/react'; -import { - MockAnalyticsApi, - MockConfigApi, - TestApiProvider, - renderWithEffects, -} from '@backstage/test-utils'; +import { MockAnalyticsApi, TestApiProvider } from '@backstage/test-utils'; import { ExtensionBoundary } from './ExtensionBoundary'; -import { - Extension, - coreExtensionData, - createExtension, - createPlugin, -} from '../wiring'; +import { coreExtensionData, createExtension } from '../wiring'; import { analyticsApiRef, useAnalytics } from '@backstage/core-plugin-api'; -import { createApp } from '@backstage/frontend-app-api'; -import { JsonObject } from '@backstage/types'; import { createRouteRef } from '../routing'; - -function renderExtensionInTestApp( - extension: Extension, - options?: { - config?: JsonObject; - }, -) { - const { config = {} } = options ?? {}; - - const app = createApp({ - features: [ - createPlugin({ - id: 'plugin', - extensions: [extension], - }), - ], - configLoader: async () => new MockConfigApi(config), - }); - - return renderWithEffects(app.createRoot()); -} +import { createExtensionTester } from '@backstage/frontend-test-utils'; const wrapInBoundaryExtension = (element: JSX.Element) => { const id = 'plugin.extension'; @@ -66,15 +34,11 @@ const wrapInBoundaryExtension = (element: JSX.Element) => { path: coreExtensionData.routePath, routeRef: coreExtensionData.routeRef.optional(), }, - factory({ source }) { + factory({ node }) { return { routeRef, path: '/', - element: ( - - {element} - - ), + element: {element}, }; }, }); @@ -86,7 +50,7 @@ describe('ExtensionBoundary', () => { const TextComponent = () => { return

{text}

; }; - await renderExtensionInTestApp(wrapInBoundaryExtension()); + createExtensionTester(wrapInBoundaryExtension()).render(); await waitFor(() => expect(screen.getByText(text)).toBeInTheDocument()); }); @@ -95,7 +59,7 @@ describe('ExtensionBoundary', () => { const ErrorComponent = () => { throw new Error(error); }; - await renderExtensionInTestApp(wrapInBoundaryExtension()); + createExtensionTester(wrapInBoundaryExtension()).render(); await waitFor(() => expect(screen.getByText(error)).toBeInTheDocument()); }); @@ -112,13 +76,13 @@ describe('ExtensionBoundary', () => { return null; }; - await renderExtensionInTestApp( + createExtensionTester( wrapInBoundaryExtension( , ), - ); + ).render(); await waitFor(() => expect(analyticsApiMock.getEvents()[0]).toMatchObject({ diff --git a/packages/frontend-plugin-api/src/components/ExtensionBoundary.tsx b/packages/frontend-plugin-api/src/components/ExtensionBoundary.tsx index a9ea297216..8fad8d8336 100644 --- a/packages/frontend-plugin-api/src/components/ExtensionBoundary.tsx +++ b/packages/frontend-plugin-api/src/components/ExtensionBoundary.tsx @@ -16,11 +16,11 @@ import React, { PropsWithChildren, ReactNode, useEffect } from 'react'; import { AnalyticsContext, useAnalytics } from '@backstage/core-plugin-api'; -import { BackstagePlugin } from '../wiring'; import { ErrorBoundary } from './ErrorBoundary'; import { ExtensionSuspense } from './ExtensionSuspense'; // eslint-disable-next-line @backstage/no-relative-monorepo-imports import { routableExtensionRenderedEvent } from '../../../core-plugin-api/src/analytics/Tracker'; +import { AppNode } from '../apis'; type RouteTrackerProps = PropsWithChildren<{ disableTracking?: boolean; @@ -44,25 +44,24 @@ const RouteTracker = (props: RouteTrackerProps) => { /** @public */ export interface ExtensionBoundaryProps { - id: string; - source?: BackstagePlugin; + node: AppNode; routable?: boolean; children: ReactNode; } /** @public */ export function ExtensionBoundary(props: ExtensionBoundaryProps) { - const { id, source, routable, children } = props; + const { node, routable, children } = props; // Skipping "routeRef" attribute in the new system, the extension "id" should provide more insight const attributes = { - extension: id, - pluginId: source?.id, + extension: node.spec.id, + pluginId: node.spec.source?.id, }; return ( - + {children} diff --git a/packages/frontend-plugin-api/src/extensions/createNavLogoExtension.test.tsx b/packages/frontend-plugin-api/src/extensions/createNavLogoExtension.test.tsx new file mode 100644 index 0000000000..93efadb0e1 --- /dev/null +++ b/packages/frontend-plugin-api/src/extensions/createNavLogoExtension.test.tsx @@ -0,0 +1,44 @@ +/* + * 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 { createNavLogoExtension } from './createNavLogoExtension'; + +jest.mock('@backstage/core-plugin-api', () => ({ + ...jest.requireActual('@backstage/core-plugin-api'), +})); + +describe('createNavLogoExtension', () => { + it('creates the extension properly', () => { + expect( + createNavLogoExtension({ + id: 'test', + logoFull:
Logo Full
, + logoIcon:
Logo Icon
, + }), + ).toEqual({ + $$type: '@backstage/Extension', + id: 'test', + attachTo: { id: 'core.nav', input: 'logos' }, + disabled: false, + inputs: {}, + output: { + logos: expect.anything(), + }, + factory: expect.any(Function), + }); + }); +}); diff --git a/packages/frontend-plugin-api/src/extensions/createNavLogoExtension.tsx b/packages/frontend-plugin-api/src/extensions/createNavLogoExtension.tsx new file mode 100644 index 0000000000..5cfff81a9d --- /dev/null +++ b/packages/frontend-plugin-api/src/extensions/createNavLogoExtension.tsx @@ -0,0 +1,44 @@ +/* + * 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 { coreExtensionData, createExtension } from '../wiring'; + +/** + * Helper for creating extensions for a nav logos. + * @public + */ +export function createNavLogoExtension(options: { + id: string; + logoIcon: JSX.Element; + logoFull: JSX.Element; +}) { + const { id, logoIcon, logoFull } = options; + return createExtension({ + id, + attachTo: { id: 'core.nav', input: 'logos' }, + output: { + logos: coreExtensionData.logoElements, + }, + factory: () => { + return { + logos: { + logoIcon, + logoFull, + }, + }; + }, + }); +} diff --git a/packages/frontend-plugin-api/src/extensions/createPageExtension.test.tsx b/packages/frontend-plugin-api/src/extensions/createPageExtension.test.tsx index 81843558da..f75821944a 100644 --- a/packages/frontend-plugin-api/src/extensions/createPageExtension.test.tsx +++ b/packages/frontend-plugin-api/src/extensions/createPageExtension.test.tsx @@ -15,16 +15,12 @@ */ import React from 'react'; -import { renderWithEffects, wrapInTestApp } from '@backstage/test-utils'; import { useAnalytics } from '@backstage/core-plugin-api'; import { waitFor } from '@testing-library/react'; import { PortableSchema } from '../schema'; -import { - coreExtensionData, - createExtensionInput, - createPlugin, -} from '../wiring'; +import { coreExtensionData, createExtensionInput } from '../wiring'; import { createPageExtension } from './createPageExtension'; +import { createExtensionTester } from '@backstage/frontend-test-utils'; jest.mock('@backstage/core-plugin-api', () => ({ ...jest.requireActual('@backstage/core-plugin-api'), @@ -120,19 +116,13 @@ describe('createPageExtension', () => { captureEvent, }); - const extension = createPageExtension({ - id: 'plugin.page', - defaultPath: '/', - loader: async () =>
Component
, - }); - - const output = extension.factory({ - source: createPlugin({ id: 'plugin ' }), - config: { path: '/' }, - inputs: {}, - }); - - renderWithEffects(wrapInTestApp(output.element as unknown as JSX.Element)); + createExtensionTester( + createPageExtension({ + id: 'plugin.page', + defaultPath: '/', + loader: async () =>
Component
, + }), + ).render(); await waitFor(() => expect(captureEvent).toHaveBeenCalledWith( diff --git a/packages/frontend-plugin-api/src/extensions/createPageExtension.tsx b/packages/frontend-plugin-api/src/extensions/createPageExtension.tsx index f5e258a1e4..99733ba367 100644 --- a/packages/frontend-plugin-api/src/extensions/createPageExtension.tsx +++ b/packages/frontend-plugin-api/src/extensions/createPageExtension.tsx @@ -75,7 +75,7 @@ export function createPageExtension< path: coreExtensionData.routePath, routeRef: coreExtensionData.routeRef.optional(), }, - factory({ config, inputs, source }) { + factory({ config, inputs, node }) { const ExtensionComponent = lazy(() => options .loader({ config, inputs }) @@ -86,7 +86,7 @@ export function createPageExtension< path: config.path, routeRef: options.routeRef, element: ( - + ), diff --git a/packages/frontend-plugin-api/src/extensions/createSignInPageExtension.test.tsx b/packages/frontend-plugin-api/src/extensions/createSignInPageExtension.test.tsx new file mode 100644 index 0000000000..964941e213 --- /dev/null +++ b/packages/frontend-plugin-api/src/extensions/createSignInPageExtension.test.tsx @@ -0,0 +1,47 @@ +/* + * 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 { createExtensionTester } from '@backstage/frontend-test-utils'; +import { screen } from '@testing-library/react'; +import { createSignInPageExtension } from './createSignInPageExtension'; +import { coreExtensionData, createExtension } from '../wiring'; + +describe('createSignInPageExtension', () => { + it('renders a sign-in page', async () => { + const SignInPage = createSignInPageExtension({ + id: 'test', + loader: async () => () =>
, + }); + + createExtensionTester( + createExtension({ + id: 'dummy', + attachTo: { id: 'ignored', input: 'ignored' }, + output: { + element: coreExtensionData.reactElement, + }, + factory: () => ({ element:
}), + }), + ) + .add(SignInPage) + .render(); + + await expect( + screen.findByTestId('sign-in-page'), + ).resolves.toBeInTheDocument(); + }); +}); diff --git a/packages/frontend-plugin-api/src/extensions/createSignInPageExtension.tsx b/packages/frontend-plugin-api/src/extensions/createSignInPageExtension.tsx new file mode 100644 index 0000000000..f869ed8f13 --- /dev/null +++ b/packages/frontend-plugin-api/src/extensions/createSignInPageExtension.tsx @@ -0,0 +1,79 @@ +/* + * 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, { ComponentType, lazy } from 'react'; +import { ExtensionBoundary } from '../components'; +import { PortableSchema } from '../schema'; +import { + createExtension, + Extension, + ExtensionInputValues, + AnyExtensionInputMap, + createExtensionDataRef, +} from '../wiring'; +import { Expand } from '../types'; +import { SignInPageProps } from '@backstage/core-plugin-api'; + +/** @internal */ +export const signInPageComponentDataRef = + createExtensionDataRef>('core.signInPage'); + +/** + * + * @public + */ +export function createSignInPageExtension< + TConfig extends {}, + TInputs extends AnyExtensionInputMap, +>(options: { + id: string; + attachTo?: { id: string; input: string }; + configSchema?: PortableSchema; + disabled?: boolean; + inputs?: TInputs; + loader: (options: { + config: TConfig; + inputs: Expand>; + }) => Promise>; +}): Extension { + const { id } = options; + + return createExtension({ + id, + attachTo: options.attachTo ?? { id: 'core.router', input: 'signInPage' }, + configSchema: options.configSchema, + inputs: options.inputs, + disabled: options.disabled, + output: { + component: signInPageComponentDataRef, + }, + factory({ config, inputs, node }) { + const ExtensionComponent = lazy(() => + options + .loader({ config, inputs }) + .then(component => ({ default: component })), + ); + + return { + component: props => ( + + + + ), + }; + }, + }); +} diff --git a/packages/frontend-plugin-api/src/extensions/index.ts b/packages/frontend-plugin-api/src/extensions/index.ts index 00cf4f919c..d696774272 100644 --- a/packages/frontend-plugin-api/src/extensions/index.ts +++ b/packages/frontend-plugin-api/src/extensions/index.ts @@ -17,4 +17,5 @@ export { createApiExtension } from './createApiExtension'; export { createPageExtension } from './createPageExtension'; export { createNavItemExtension } from './createNavItemExtension'; +export { createSignInPageExtension } from './createSignInPageExtension'; export { createThemeExtension } from './createThemeExtension'; diff --git a/plugins/catalog-graphql/src/setupTests.ts b/packages/frontend-plugin-api/src/icons/index.ts similarity index 92% rename from plugins/catalog-graphql/src/setupTests.ts rename to packages/frontend-plugin-api/src/icons/index.ts index 8f32650781..9c9e45e54c 100644 --- a/plugins/catalog-graphql/src/setupTests.ts +++ b/packages/frontend-plugin-api/src/icons/index.ts @@ -13,4 +13,5 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -export {}; + +export type { IconComponent } from './types'; diff --git a/packages/frontend-plugin-api/src/icons/types.ts b/packages/frontend-plugin-api/src/icons/types.ts new file mode 100644 index 0000000000..4d54629de2 --- /dev/null +++ b/packages/frontend-plugin-api/src/icons/types.ts @@ -0,0 +1,45 @@ +/* + * 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 { ComponentType } from 'react'; + +/** + * IconComponent is the common icon type used throughout Backstage when + * working with and rendering generic icons, including the app system icons. + * + * @remarks + * + * The type is based on SvgIcon from Material UI, but both do not what the plugin-api + * package to have a dependency on Material UI, nor do we want the props to be as broad + * as the SvgIconProps interface. + * + * If you have the need to forward additional props from SvgIconProps, you can + * open an issue or submit a PR to the main Backstage repo. When doing so please + * also describe your use-case and reasoning of the addition. + * + * @public + */ + +export type IconComponent = ComponentType< + /* Material UI v4 */ + | { + fontSize?: 'large' | 'small' | 'default' | 'inherit'; + } + /* Material UI v5: https://mui.com/material-ui/migration/v5-component-changes/#icon */ + | { + fontSize?: 'medium' | 'large' | 'small' | 'inherit'; + } +>; diff --git a/packages/frontend-plugin-api/src/index.ts b/packages/frontend-plugin-api/src/index.ts index 498bc96a77..3248e79945 100644 --- a/packages/frontend-plugin-api/src/index.ts +++ b/packages/frontend-plugin-api/src/index.ts @@ -23,6 +23,8 @@ export * from './apis'; export * from './components'; export * from './extensions'; +export * from './icons'; export * from './routing'; export * from './schema'; +export * from './apis/system'; export * from './wiring'; diff --git a/packages/frontend-plugin-api/src/wiring/coreExtensionData.ts b/packages/frontend-plugin-api/src/wiring/coreExtensionData.ts index 023eab57e1..9ffdb835ba 100644 --- a/packages/frontend-plugin-api/src/wiring/coreExtensionData.ts +++ b/packages/frontend-plugin-api/src/wiring/coreExtensionData.ts @@ -30,6 +30,12 @@ export type NavTarget = { routeRef: RouteRef; }; +/** @public */ +export type LogoElements = { + logoIcon?: JSX.Element; + logoFull?: JSX.Element; +}; + /** @public */ export const coreExtensionData = { reactElement: createExtensionDataRef('core.reactElement'), @@ -38,4 +44,5 @@ export const coreExtensionData = { routeRef: createExtensionDataRef('core.routing.ref'), navTarget: createExtensionDataRef('core.nav.target'), theme: createExtensionDataRef('core.theme'), + logoElements: createExtensionDataRef('core.logos'), }; diff --git a/packages/frontend-plugin-api/src/wiring/createExtension.ts b/packages/frontend-plugin-api/src/wiring/createExtension.ts index ff011a5875..9443caeb66 100644 --- a/packages/frontend-plugin-api/src/wiring/createExtension.ts +++ b/packages/frontend-plugin-api/src/wiring/createExtension.ts @@ -14,11 +14,11 @@ * limitations under the License. */ +import { AppNode } from '../apis'; import { PortableSchema } from '../schema'; import { Expand } from '../types'; import { ExtensionDataRef } from './createExtensionDataRef'; import { ExtensionInput } from './createExtensionInput'; -import { BackstagePlugin } from './createPlugin'; /** @public */ export type AnyExtensionDataMap = { @@ -80,7 +80,7 @@ export interface CreateExtensionOptions< output: TOutput; configSchema?: PortableSchema; factory(options: { - source?: BackstagePlugin; + node: AppNode; config: TConfig; inputs: Expand>; }): Expand>; @@ -96,7 +96,7 @@ export interface Extension { output: AnyExtensionDataMap; configSchema?: PortableSchema; factory(options: { - source?: BackstagePlugin; + node: AppNode; config: TConfig; inputs: Record< string, diff --git a/packages/frontend-plugin-api/src/wiring/createPlugin.test.ts b/packages/frontend-plugin-api/src/wiring/createPlugin.test.ts index 42648fcd96..f69b54aa42 100644 --- a/packages/frontend-plugin-api/src/wiring/createPlugin.test.ts +++ b/packages/frontend-plugin-api/src/wiring/createPlugin.test.ts @@ -133,7 +133,7 @@ describe('createPlugin', () => { await renderWithEffects( createTestAppRoot({ features: [plugin], - config: { app: { extensions: [{ 'core.layout': false }] } }, + config: { app: { extensions: [{ 'core.router': false }] } }, }), ); @@ -161,7 +161,7 @@ describe('createPlugin', () => { config: { app: { extensions: [ - { 'core.layout': false }, + { 'core.router': false }, { 'plugin.catalog.page': { config: { name: 'CatalogRenamed' }, diff --git a/packages/frontend-plugin-api/src/wiring/index.ts b/packages/frontend-plugin-api/src/wiring/index.ts index ec685d6c81..19e11185e9 100644 --- a/packages/frontend-plugin-api/src/wiring/index.ts +++ b/packages/frontend-plugin-api/src/wiring/index.ts @@ -14,7 +14,11 @@ * limitations under the License. */ -export { coreExtensionData, type NavTarget } from './coreExtensionData'; +export { + coreExtensionData, + type LogoElements, + type NavTarget, +} from './coreExtensionData'; export { createExtension, type Extension, diff --git a/plugins/catalog-graphql/.eslintrc.js b/packages/frontend-test-utils/.eslintrc.js similarity index 100% rename from plugins/catalog-graphql/.eslintrc.js rename to packages/frontend-test-utils/.eslintrc.js diff --git a/packages/frontend-test-utils/CHANGELOG.md b/packages/frontend-test-utils/CHANGELOG.md new file mode 100644 index 0000000000..d112822d13 --- /dev/null +++ b/packages/frontend-test-utils/CHANGELOG.md @@ -0,0 +1,16 @@ +# @backstage/frontend-test-utils + +## 0.1.0-next.0 + +### Minor Changes + +- 59fabd5106: New testing utility library for `@backstage/frontend-app-api` and `@backstage/frontend-plugin-api`. + +### Patch Changes + +- 59fabd5106: Added `createExtensionTester` for rendering extensions in tests. +- Updated dependencies + - @backstage/frontend-app-api@0.3.1-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/test-utils@1.4.6-next.0 + - @backstage/types@1.1.1 diff --git a/packages/frontend-test-utils/README.md b/packages/frontend-test-utils/README.md new file mode 100644 index 0000000000..50f853d9ed --- /dev/null +++ b/packages/frontend-test-utils/README.md @@ -0,0 +1,12 @@ +# @backstage/frontend-test-utils + +Contains utilities that can be used when testing frontend features such as extensions. + +## Installation + +Install the package via Yarn into your own packages: + +```sh +cd # if within a monorepo +yarn add --dev @backstage/frontend-test-utils +``` diff --git a/packages/frontend-test-utils/api-report.md b/packages/frontend-test-utils/api-report.md new file mode 100644 index 0000000000..8d7837b90a --- /dev/null +++ b/packages/frontend-test-utils/api-report.md @@ -0,0 +1,30 @@ +## API Report File for "@backstage/frontend-test-utils" + +> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). + +```ts +import { Extension } from '@backstage/frontend-plugin-api'; +import { JsonObject } from '@backstage/types'; +import { RenderResult } from '@testing-library/react'; + +// @public (undocumented) +export function createExtensionTester( + subject: Extension, + options?: { + config?: TConfig; + }, +): ExtensionTester; + +// @public (undocumented) +export class ExtensionTester { + // (undocumented) + add( + extension: Extension, + options?: { + config?: TConfig; + }, + ): ExtensionTester; + // (undocumented) + render(options?: { config?: JsonObject }): RenderResult; +} +``` diff --git a/packages/frontend-test-utils/catalog-info.yaml b/packages/frontend-test-utils/catalog-info.yaml new file mode 100644 index 0000000000..e2d2a57897 --- /dev/null +++ b/packages/frontend-test-utils/catalog-info.yaml @@ -0,0 +1,9 @@ +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: backstage-frontend-test-utils + title: '@backstage/frontend-test-utils' +spec: + lifecycle: experimental + type: backstage-web-library + owner: maintainers diff --git a/packages/frontend-test-utils/package.json b/packages/frontend-test-utils/package.json new file mode 100644 index 0000000000..2434eec37c --- /dev/null +++ b/packages/frontend-test-utils/package.json @@ -0,0 +1,42 @@ +{ + "name": "@backstage/frontend-test-utils", + "version": "0.1.0-next.0", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "publishConfig": { + "access": "public", + "main": "dist/index.esm.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "web-library" + }, + "sideEffects": false, + "scripts": { + "start": "backstage-cli package start", + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack" + }, + "devDependencies": { + "@backstage/cli": "workspace:^", + "@testing-library/jest-dom": "^6.0.0" + }, + "files": [ + "dist" + ], + "dependencies": { + "@backstage/frontend-app-api": "workspace:^", + "@backstage/frontend-plugin-api": "workspace:^", + "@backstage/test-utils": "workspace:^", + "@backstage/types": "workspace:^" + }, + "peerDependencies": { + "@testing-library/react": "^12.1.3 || ^13.0.0 || ^14.0.0", + "react": "^16.13.1 || ^17.0.0 || ^18.0.0" + } +} diff --git a/packages/frontend-test-utils/src/app/createExtensionTester.test.tsx b/packages/frontend-test-utils/src/app/createExtensionTester.test.tsx new file mode 100644 index 0000000000..398acf4c74 --- /dev/null +++ b/packages/frontend-test-utils/src/app/createExtensionTester.test.tsx @@ -0,0 +1,68 @@ +/* + * 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 { + coreExtensionData, + createExtension, +} from '@backstage/frontend-plugin-api'; +import { screen } from '@testing-library/react'; +import React from 'react'; +import { createExtensionTester } from './createExtensionTester'; + +describe('createExtensionTester', () => { + it('should render a simple extension', async () => { + createExtensionTester( + createExtension({ + id: 'test', + attachTo: { id: 'ignored', input: 'ignored' }, + output: { element: coreExtensionData.reactElement }, + factory: () => ({ element:
test
}), + }), + ).render(); + + await expect(screen.findByText('test')).resolves.toBeInTheDocument(); + }); + + it('should render an extension even if disabled by default', async () => { + createExtensionTester( + createExtension({ + id: 'test', + attachTo: { id: 'ignored', input: 'ignored' }, + disabled: true, + output: { element: coreExtensionData.reactElement }, + factory: () => ({ element:
test
}), + }), + ).render(); + + await expect(screen.findByText('test')).resolves.toBeInTheDocument(); + }); + + it("should fail to render an extension that doesn't output a react element", async () => { + expect(() => + createExtensionTester( + createExtension({ + id: 'test', + attachTo: { id: 'ignored', input: 'ignored' }, + disabled: true, + output: { path: coreExtensionData.routePath }, + factory: () => ({ path: '/foo' }), + }), + ).render(), + ).toThrow( + "Failed to instantiate extension 'core.router', input 'children' did not receive required extension data 'core.reactElement' from extension 'test'", + ); + }); +}); diff --git a/packages/frontend-test-utils/src/app/createExtensionTester.ts b/packages/frontend-test-utils/src/app/createExtensionTester.ts new file mode 100644 index 0000000000..c95ece342d --- /dev/null +++ b/packages/frontend-test-utils/src/app/createExtensionTester.ts @@ -0,0 +1,114 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { createSpecializedApp } from '@backstage/frontend-app-api'; +import { Extension, createPlugin } from '@backstage/frontend-plugin-api'; +import { MockConfigApi } from '@backstage/test-utils'; +import { JsonArray, JsonObject, JsonValue } from '@backstage/types'; +import { RenderResult, render } from '@testing-library/react'; + +/** @public */ +export class ExtensionTester { + /** @internal */ + static forSubject( + subject: Extension, + options?: { config?: TConfig }, + ): ExtensionTester { + const tester = new ExtensionTester(); + tester.add(subject, options); + return tester; + } + + readonly #extensions = new Array<{ + extension: Extension; + config?: JsonValue; + }>(); + + add( + extension: Extension, + options?: { config?: TConfig }, + ): ExtensionTester { + this.#extensions.push({ + extension, + config: options?.config as JsonValue, + }); + + return this; + } + + render(options?: { config?: JsonObject }): RenderResult { + const { config = {} } = options ?? {}; + + const [subject, ...rest] = this.#extensions; + if (!subject) { + throw new Error( + 'No subject found. At least one extension should be added to the tester.', + ); + } + + const extensionsConfig: JsonArray = [ + ...rest.map(entry => ({ + [entry.extension.id]: { + config: entry.config, + }, + })), + { + [subject.extension.id]: { + attachTo: { id: 'core.router', input: 'children' }, + config: subject.config, + disabled: false, + }, + }, + { + 'core.layout': false, + }, + { + 'core.nav': false, + }, + { + 'core.routes': false, + }, + ]; + + const finalConfig = { + ...config, + app: { + ...(typeof config.app === 'object' ? config.app : undefined), + extensions: extensionsConfig, + }, + }; + + const app = createSpecializedApp({ + features: [ + createPlugin({ + id: 'test', + extensions: this.#extensions.map(entry => entry.extension), + }), + ], + config: new MockConfigApi(finalConfig), + }); + + return render(app.createRoot()); + } +} + +/** @public */ +export function createExtensionTester( + subject: Extension, + options?: { config?: TConfig }, +): ExtensionTester { + return ExtensionTester.forSubject(subject, options); +} diff --git a/packages/frontend-test-utils/src/app/index.ts b/packages/frontend-test-utils/src/app/index.ts new file mode 100644 index 0000000000..3152fac6e7 --- /dev/null +++ b/packages/frontend-test-utils/src/app/index.ts @@ -0,0 +1,20 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { + createExtensionTester, + type ExtensionTester, +} from './createExtensionTester'; diff --git a/packages/frontend-test-utils/src/index.ts b/packages/frontend-test-utils/src/index.ts new file mode 100644 index 0000000000..6a28cc2abe --- /dev/null +++ b/packages/frontend-test-utils/src/index.ts @@ -0,0 +1,23 @@ +/* + * 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. + */ + +/** + * @packageDocumentation + * + * Contains utilities that can be used when testing frontend features such as extensions. + */ + +export * from './app'; diff --git a/packages/frontend-test-utils/src/setupTests.ts b/packages/frontend-test-utils/src/setupTests.ts new file mode 100644 index 0000000000..c30f1d15cb --- /dev/null +++ b/packages/frontend-test-utils/src/setupTests.ts @@ -0,0 +1,17 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import '@testing-library/jest-dom'; diff --git a/packages/integration-aws-node/CHANGELOG.md b/packages/integration-aws-node/CHANGELOG.md index 87156a5623..175541de5f 100644 --- a/packages/integration-aws-node/CHANGELOG.md +++ b/packages/integration-aws-node/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/integration-aws-node +## 0.1.8 + +### Patch Changes + +- 20d97d28a3: Updated dependency `aws-sdk-client-mock-jest` to `^3.0.0`. +- 3d043526f4: Updated dependency `aws-sdk-client-mock` to `^3.0.0`. +- Updated dependencies + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + ## 0.1.7 ### Patch Changes diff --git a/packages/integration-aws-node/package.json b/packages/integration-aws-node/package.json index 714ccf4767..92108c1cca 100644 --- a/packages/integration-aws-node/package.json +++ b/packages/integration-aws-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration-aws-node", "description": "Helpers for fetching AWS account credentials", - "version": "0.1.7", + "version": "0.1.8", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { @@ -44,8 +44,8 @@ "@backstage/cli": "workspace:^", "@backstage/config-loader": "workspace:^", "@backstage/test-utils": "workspace:^", - "aws-sdk-client-mock": "^2.0.0", - "aws-sdk-client-mock-jest": "^2.0.0" + "aws-sdk-client-mock": "^3.0.0", + "aws-sdk-client-mock-jest": "^3.0.0" }, "files": [ "dist", diff --git a/packages/integration-react/CHANGELOG.md b/packages/integration-react/CHANGELOG.md index a23564adad..21a4a75e75 100644 --- a/packages/integration-react/CHANGELOG.md +++ b/packages/integration-react/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/integration-react +## 1.1.22-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/config@1.1.1 + +## 1.1.21 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/integration@1.7.2 + - @backstage/core-plugin-api@1.8.0 + - @backstage/config@1.1.1 + ## 1.1.21-next.1 ### Patch Changes diff --git a/packages/integration-react/package.json b/packages/integration-react/package.json index 807ae468d0..f3e83da77e 100644 --- a/packages/integration-react/package.json +++ b/packages/integration-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration-react", "description": "Frontend package for managing integrations towards external systems", - "version": "1.1.21-next.1", + "version": "1.1.22-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/packages/integration/CHANGELOG.md b/packages/integration/CHANGELOG.md index bf500bc707..a3392a512d 100644 --- a/packages/integration/CHANGELOG.md +++ b/packages/integration/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/integration +## 1.8.0-next.0 + +### Minor Changes + +- 870db76a45: Implemented `readTree` for Gitea provider to support TechDocs functionality + +### Patch Changes + +- Updated dependencies + - @backstage/config@1.1.1 + +## 1.7.2 + +### Patch Changes + +- 243c655a68: JSDoc and Error message updates to handle `Azure Active Directory` re-brand to `Entra ID` +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/config@1.1.1 + ## 1.7.2-next.0 ### Patch Changes diff --git a/packages/integration/api-report.md b/packages/integration/api-report.md index f64c06257e..634e03dbfc 100644 --- a/packages/integration/api-report.md +++ b/packages/integration/api-report.md @@ -419,12 +419,30 @@ export function getGerritRequestOptions(config: GerritIntegrationConfig): { headers?: Record; }; +// @public +export function getGiteaArchiveUrl( + config: GiteaIntegrationConfig, + url: string, +): string; + +// @public +export function getGiteaEditContentsUrl( + config: GiteaIntegrationConfig, + url: string, +): string; + // @public export function getGiteaFileContentsUrl( config: GiteaIntegrationConfig, url: string, ): string; +// @public +export function getGiteaLatestCommitUrl( + config: GiteaIntegrationConfig, + url: string, +): string; + // @public export function getGiteaRequestOptions(config: GiteaIntegrationConfig): { headers?: Record; @@ -658,6 +676,18 @@ export function parseGerritGitilesUrl( // @public export function parseGerritJsonResponse(response: Response): Promise; +// @public +export function parseGiteaUrl( + config: GiteaIntegrationConfig, + url: string, +): { + url: string; + owner: string; + name: string; + ref: string; + path: string; +}; + // @public export type PersonalAccessTokenCredential = AzureCredentialBase & { kind: 'PersonalAccessToken'; diff --git a/packages/integration/package.json b/packages/integration/package.json index 7e88ef8282..df927acd55 100644 --- a/packages/integration/package.json +++ b/packages/integration/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/integration", "description": "Helpers for managing integrations towards external systems", - "version": "1.7.2-next.0", + "version": "1.8.0-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,11 +33,11 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@azure/identity": "^3.2.1", + "@azure/identity": "^4.0.0", "@backstage/config": "workspace:^", "@octokit/auth-app": "^4.0.0", "@octokit/rest": "^19.0.3", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "git-url-parse": "^13.0.0", "lodash": "^4.17.21", "luxon": "^3.0.0" diff --git a/packages/integration/src/gitea/core.test.ts b/packages/integration/src/gitea/core.test.ts index 125f3077ef..fe6381d52e 100644 --- a/packages/integration/src/gitea/core.test.ts +++ b/packages/integration/src/gitea/core.test.ts @@ -18,9 +18,12 @@ import { setupServer } from 'msw/node'; import { setupRequestMockHandlers } from '../helpers'; import { GiteaIntegrationConfig } from './config'; import { + getGiteaArchiveUrl, getGiteaEditContentsUrl, getGiteaFileContentsUrl, + getGiteaLatestCommitUrl, getGiteaRequestOptions, + parseGiteaUrl, } from './core'; describe('gitea core', () => { @@ -59,6 +62,38 @@ describe('gitea core', () => { }); }); + describe('getGiteaArchiveUrl', () => { + it('can create an url from arguments', () => { + const config: GiteaIntegrationConfig = { + host: 'gitea.example.com', + }; + expect( + getGiteaArchiveUrl( + config, + 'https://gitea.example.com/owner/repo/src/branch/branch_name', + ), + ).toEqual( + 'https://gitea.example.com/api/v1/repos/owner/repo/archive/branch_name.tar.gz', + ); + }); + }); + + describe('getGiteaLatestCommitUrl', () => { + it('can create an url from arguments', () => { + const config: GiteaIntegrationConfig = { + host: 'gitea.example.com', + }; + expect( + getGiteaLatestCommitUrl( + config, + 'https://gitea.example.com/owner/repo/src/branch/branch_name/', + ), + ).toEqual( + 'https://gitea.example.com/api/v1/repos/owner/repo/git/commits/branch_name', + ); + }); + }); + describe('getGerritRequestOptions', () => { it('adds token header when only a password is specified', () => { const authRequest: GiteaIntegrationConfig = { @@ -90,4 +125,61 @@ describe('gitea core', () => { ).toEqual(basicAuthentication); }); }); + + describe('parseGiteaUrl', () => { + it('can fetch gitea url', () => { + const config: GiteaIntegrationConfig = { + host: 'gitea.example.com', + }; + expect( + parseGiteaUrl( + config, + 'https://gitea.example.com/owner/repo/src/branch/branch_name/', + ), + ).toEqual({ + url: 'https://gitea.example.com', + owner: 'owner', + name: 'repo', + ref: 'branch_name', + path: '', + }); + }); + + it('provide path without starting slash', () => { + const config: GiteaIntegrationConfig = { + host: 'gitea.example.com', + }; + expect( + parseGiteaUrl( + config, + 'https://gitea.example.com/owner/repo/src/branch/branch_name/simple/path', + ), + ).toEqual({ + url: 'https://gitea.example.com', + owner: 'owner', + name: 'repo', + ref: 'branch_name', + path: 'simple/path', + }); + }); + + it('use base url if provided', () => { + const config: GiteaIntegrationConfig = { + host: 'gitea.example.com', + baseUrl: 'https://base-gitea.example.com', + }; + expect( + parseGiteaUrl( + config, + 'https://base-gitea.example.com/owner/repo/src/branch/branch_name/', + ), + ).toEqual({ + url: 'https://base-gitea.example.com', + owner: 'owner', + name: 'repo', + ref: 'branch_name', + path: '', + }); + }); + }); }); diff --git a/packages/integration/src/gitea/core.ts b/packages/integration/src/gitea/core.ts index ee3fec12fc..95caa24c06 100644 --- a/packages/integration/src/gitea/core.ts +++ b/packages/integration/src/gitea/core.ts @@ -33,16 +33,8 @@ export function getGiteaEditContentsUrl( config: GiteaIntegrationConfig, url: string, ) { - try { - const baseUrl = config.baseUrl ?? `https://${config.host}`; - const [_blank, owner, name, _src, _branch, ref, ...path] = url - .replace(baseUrl, '') - .split('/'); - const pathWithoutSlash = path.join('/').replace(/^\//, ''); - return `${baseUrl}/${owner}/${name}/_edit/${ref}/${pathWithoutSlash}`; - } catch (e) { - throw new Error(`Incorrect URL: ${url}, ${e}`); - } + const giteaUrl = parseGiteaUrl(config, url); + return `${giteaUrl.url}/${giteaUrl.owner}/${giteaUrl.name}/_edit/${giteaUrl.ref}/${giteaUrl.path}`; } /** @@ -63,17 +55,52 @@ export function getGiteaFileContentsUrl( config: GiteaIntegrationConfig, url: string, ) { - try { - const baseUrl = config.baseUrl ?? `https://${config.host}`; - const [_blank, owner, name, _src, _branch, ref, ...path] = url - .replace(baseUrl, '') - .split('/'); - const pathWithoutSlash = path.join('/').replace(/^\//, ''); + const giteaUrl = parseGiteaUrl(config, url); + return `${giteaUrl.url}/api/v1/repos/${giteaUrl.owner}/${giteaUrl.name}/contents/${giteaUrl.path}?ref=${giteaUrl.ref}`; +} - return `${baseUrl}/api/v1/repos/${owner}/${name}/contents/${pathWithoutSlash}?ref=${ref}`; - } catch (e) { - throw new Error(`Incorrect URL: ${url}, ${e}`); - } +/** + * Given a URL pointing to a repository/path, returns a URL + * for archive contents of the repository. + * + * @remarks + * + * Converts + * from: https://gitea.com/a/b/src/branchname + * or: https://gitea.com/api/v1/repos/a/b/archive/branchname.tar.gz + * + * @param url - A URL pointing to a repository/path + * @param config - The relevant provider config + * @public + */ +export function getGiteaArchiveUrl( + config: GiteaIntegrationConfig, + url: string, +) { + const giteaUrl = parseGiteaUrl(config, url); + return `${giteaUrl.url}/api/v1/repos/${giteaUrl.owner}/${giteaUrl.name}/archive/${giteaUrl.ref}.tar.gz`; +} + +/** + * Given a URL pointing to a repository branch, returns a URL + * for latest commit information. + * + * @remarks + * + * Converts + * from: https://gitea.com/a/b/src/branchname + * or: https://gitea.com/api/v1/repos/a/b/git/commits/branchname + * + * @param url - A URL pointing to a repository branch + * @param config - The relevant provider config + * @public + */ +export function getGiteaLatestCommitUrl( + config: GiteaIntegrationConfig, + url: string, +) { + const giteaUrl = parseGiteaUrl(config, url); + return `${giteaUrl.url}/api/v1/repos/${giteaUrl.owner}/${giteaUrl.name}/git/commits/${giteaUrl.ref}`; } /** @@ -104,3 +131,39 @@ export function getGiteaRequestOptions(config: GiteaIntegrationConfig): { headers, }; } + +/** + * Return parsed git url properties. + * + * @param config - A Gitea provider config + * @param url - A URL pointing to a repository + * @public + */ +export function parseGiteaUrl( + config: GiteaIntegrationConfig, + url: string, +): { + url: string; + owner: string; + name: string; + ref: string; + path: string; +} { + const baseUrl = config.baseUrl ?? `https://${config.host}`; + try { + const [_blank, owner, name, _src, _branch, ref, ...path] = url + .replace(baseUrl, '') + .split('/'); + const pathWithoutSlash = path.join('/').replace(/^\//, ''); + + return { + url: baseUrl, + owner: owner, + name: name, + ref: ref, + path: pathWithoutSlash, + }; + } catch (e) { + throw new Error(`Incorrect URL: ${url}, ${e}`); + } +} diff --git a/packages/integration/src/gitea/index.ts b/packages/integration/src/gitea/index.ts index 6b951b1fb0..071509d699 100644 --- a/packages/integration/src/gitea/index.ts +++ b/packages/integration/src/gitea/index.ts @@ -14,6 +14,13 @@ * limitations under the License. */ export { GiteaIntegration } from './GiteaIntegration'; -export { getGiteaRequestOptions, getGiteaFileContentsUrl } from './core'; +export { + getGiteaEditContentsUrl, + getGiteaFileContentsUrl, + getGiteaArchiveUrl, + getGiteaLatestCommitUrl, + getGiteaRequestOptions, + parseGiteaUrl, +} from './core'; export { readGiteaConfig } from './config'; export type { GiteaIntegrationConfig } from './config'; diff --git a/packages/release-manifests/CHANGELOG.md b/packages/release-manifests/CHANGELOG.md index 001c7b2055..2176118ea2 100644 --- a/packages/release-manifests/CHANGELOG.md +++ b/packages/release-manifests/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/release-manifests +## 0.0.11 + +### Patch Changes + +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. + ## 0.0.10 ### Patch Changes diff --git a/packages/release-manifests/package.json b/packages/release-manifests/package.json index 24003eeaa4..f9de4d6d2d 100644 --- a/packages/release-manifests/package.json +++ b/packages/release-manifests/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/release-manifests", "description": "Helper library for receiving release manifests", - "version": "0.0.10", + "version": "0.0.11", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { @@ -33,7 +33,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "cross-fetch": "^3.1.5" + "cross-fetch": "^4.0.0" }, "devDependencies": { "@backstage/cli": "workspace:^", diff --git a/packages/repo-tools/CHANGELOG.md b/packages/repo-tools/CHANGELOG.md index 18ef451c79..b439c08fc6 100644 --- a/packages/repo-tools/CHANGELOG.md +++ b/packages/repo-tools/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/repo-tools +## 0.4.0 + +### Minor Changes + +- 4e36abef14: Remove support for the deprecated `--experimental-type-build` option for `package build`. +- 6694b369a3: Adds a new command `schema openapi test` that performs runtime validation of your OpenAPI specs using your test data. Under the hood, we're using Optic to perform this check, really cool work by them! + + To use this new command, you will have to run `yarn add @useoptic/optic` in the root of your repo. + +### Patch Changes + +- Updated dependencies + - @backstage/cli-node@0.2.0 + - @backstage/catalog-model@1.4.3 + - @backstage/cli-common@0.1.13 + - @backstage/errors@1.2.3 + ## 0.4.0-next.0 ### Minor Changes diff --git a/packages/repo-tools/package.json b/packages/repo-tools/package.json index 663695a764..3bd76a6e60 100644 --- a/packages/repo-tools/package.json +++ b/packages/repo-tools/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/repo-tools", "description": "CLI for Backstage repo tooling ", - "version": "0.4.0-next.0", + "version": "0.4.0", "publishConfig": { "access": "public" }, diff --git a/packages/techdocs-cli-embedded-app/CHANGELOG.md b/packages/techdocs-cli-embedded-app/CHANGELOG.md index b635bbc871..b75cb32d7a 100644 --- a/packages/techdocs-cli-embedded-app/CHANGELOG.md +++ b/packages/techdocs-cli-embedded-app/CHANGELOG.md @@ -1,5 +1,51 @@ # techdocs-cli-embedded-app +## 0.2.89-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.16.0-next.1 + - @backstage/plugin-techdocs@1.9.2-next.1 + +## 0.2.89-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/plugin-catalog@1.16.0-next.0 + - @backstage/plugin-techdocs@1.9.2-next.0 + - @backstage/cli@0.24.1-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/app-defaults@1.4.6-next.0 + - @backstage/core-app-api@1.11.2-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/test-utils@1.4.6-next.0 + - @backstage/plugin-techdocs-react@1.1.14-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + +## 0.2.88 + +### Patch Changes + +- Updated dependencies + - @backstage/cli@0.24.0 + - @backstage/core-components@0.13.8 + - @backstage/plugin-catalog@1.15.0 + - @backstage/plugin-techdocs@1.9.0 + - @backstage/integration-react@1.1.21 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-techdocs-react@1.1.13 + - @backstage/app-defaults@1.4.5 + - @backstage/core-app-api@1.11.1 + - @backstage/test-utils@1.4.5 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + ## 0.2.88-next.2 ### Patch Changes diff --git a/packages/techdocs-cli-embedded-app/package.json b/packages/techdocs-cli-embedded-app/package.json index 75000b552b..21b1ff39f4 100644 --- a/packages/techdocs-cli-embedded-app/package.json +++ b/packages/techdocs-cli-embedded-app/package.json @@ -1,6 +1,6 @@ { "name": "techdocs-cli-embedded-app", - "version": "0.2.88-next.2", + "version": "0.2.89-next.1", "private": true, "backstage": { "role": "frontend" diff --git a/packages/techdocs-cli/CHANGELOG.md b/packages/techdocs-cli/CHANGELOG.md index 792490abaf..bdcd94b951 100644 --- a/packages/techdocs-cli/CHANGELOG.md +++ b/packages/techdocs-cli/CHANGELOG.md @@ -1,5 +1,35 @@ # @techdocs/cli +## 1.8.0-next.0 + +### Minor Changes + +- d15d483a49: Add command `--runAsDefaultUser` for `@techdocs/cli generate` to bypass running the docker builds as host user for macOS and Linux. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-techdocs-node@1.11.0-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/cli-common@0.1.13 + - @backstage/config@1.1.1 + +## 1.7.0 + +### Minor Changes + +- 8600b86820: validate Docker status before running mkdocs server + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-techdocs-node@1.10.0 + - @backstage/backend-common@0.19.9 + - @backstage/catalog-model@1.4.3 + - @backstage/cli-common@0.1.13 + - @backstage/config@1.1.1 + ## 1.6.1-next.2 ### Patch Changes diff --git a/packages/techdocs-cli/cli-report.md b/packages/techdocs-cli/cli-report.md index 890718b0d2..8f2233b158 100644 --- a/packages/techdocs-cli/cli-report.md +++ b/packages/techdocs-cli/cli-report.md @@ -38,6 +38,7 @@ Options: --omitTechdocsCoreMkdocsPlugin --legacyCopyReadmeMdToIndexMd --defaultPlugin [defaultPlugins...] + --runAsDefaultUser -h, --help ``` diff --git a/packages/techdocs-cli/package.json b/packages/techdocs-cli/package.json index fc50468351..fa1c69d09b 100644 --- a/packages/techdocs-cli/package.json +++ b/packages/techdocs-cli/package.json @@ -1,7 +1,7 @@ { "name": "@techdocs/cli", "description": "Utility CLI for managing TechDocs sites in Backstage.", - "version": "1.6.1-next.2", + "version": "1.8.0-next.0", "publishConfig": { "access": "public" }, diff --git a/packages/techdocs-cli/src/commands/generate/generate.ts b/packages/techdocs-cli/src/commands/generate/generate.ts index 934eaf1efd..bf6910ff4a 100644 --- a/packages/techdocs-cli/src/commands/generate/generate.ts +++ b/packages/techdocs-cli/src/commands/generate/generate.ts @@ -114,6 +114,7 @@ export default async function generate(opts: OptionValues) { etag: opts.etag, logStream: getLogStream(logger), siteOptions: { name: opts.siteName }, + runAsDefaultUser: opts.runAsDefaultUser, }); if (configIsTemporary) { diff --git a/packages/techdocs-cli/src/commands/index.ts b/packages/techdocs-cli/src/commands/index.ts index 10a00da513..bb469ec82a 100644 --- a/packages/techdocs-cli/src/commands/index.ts +++ b/packages/techdocs-cli/src/commands/index.ts @@ -75,6 +75,11 @@ export function registerCommands(program: Command) { 'Plugins which should be added automatically to the mkdocs.yaml file', [], ) + .option( + '--runAsDefaultUser', + 'Bypass setting the container user as the same user and group id as host for Linux and MacOS', + false, + ) .alias('build') .action(lazy(() => import('./generate/generate').then(m => m.default))); diff --git a/packages/techdocs-cli/src/commands/serve/mkdocs.ts b/packages/techdocs-cli/src/commands/serve/mkdocs.ts index c061d4474f..00c5e5f0ed 100644 --- a/packages/techdocs-cli/src/commands/serve/mkdocs.ts +++ b/packages/techdocs-cli/src/commands/serve/mkdocs.ts @@ -21,6 +21,7 @@ import { runMkdocsServer } from '../../lib/mkdocsServer'; import { LogFunc, waitForSignal } from '../../lib/run'; import { getMkdocsYml } from '@backstage/plugin-techdocs-node'; import fs from 'fs-extra'; +import { checkIfDockerIsOperational } from './utils'; export default async function serveMkdocs(opts: OptionValues) { const logger = createLogger({ verbose: opts.verbose }); @@ -29,6 +30,13 @@ export default async function serveMkdocs(opts: OptionValues) { const localAddr = `http://127.0.0.1:${opts.port}`; const expectedDevAddr = opts.docker ? dockerAddr : localAddr; + if (opts.docker) { + const isDockerOperational = await checkIfDockerIsOperational(logger); + if (!isDockerOperational) { + return; + } + } + const { path: mkdocsYmlPath, configIsTemporary } = await getMkdocsYml( './', opts.siteName, diff --git a/packages/techdocs-cli/src/commands/serve/serve.ts b/packages/techdocs-cli/src/commands/serve/serve.ts index 5fcf1787d3..98c9982b21 100644 --- a/packages/techdocs-cli/src/commands/serve/serve.ts +++ b/packages/techdocs-cli/src/commands/serve/serve.ts @@ -24,6 +24,7 @@ import { LogFunc, waitForSignal } from '../../lib/run'; import { createLogger } from '../../lib/utility'; import { getMkdocsYml } from '@backstage/plugin-techdocs-node'; import fs from 'fs-extra'; +import { checkIfDockerIsOperational } from './utils'; function findPreviewBundlePath(): string { try { @@ -73,6 +74,14 @@ export default async function serve(opts: OptionValues) { mkdocsConfigFileName, }); + // Validate that Docker is up and running + if (opts.docker) { + const isDockerOperational = await checkIfDockerIsOperational(logger); + if (!isDockerOperational) { + return; + } + } + let mkdocsServerHasStarted = false; const mkdocsLogFunc: LogFunc = data => { // Sometimes the lines contain an unnecessary extra new line diff --git a/packages/techdocs-cli/src/commands/serve/utils.ts b/packages/techdocs-cli/src/commands/serve/utils.ts new file mode 100644 index 0000000000..2b19b0fbc0 --- /dev/null +++ b/packages/techdocs-cli/src/commands/serve/utils.ts @@ -0,0 +1,38 @@ +/* + * 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 { promisify } from 'util'; +import * as winston from 'winston'; +import { execFile } from 'child_process'; + +export async function checkIfDockerIsOperational( + logger: winston.Logger, +): Promise { + logger.info('Checking Docker status...'); + try { + const runCheck = promisify(execFile); + await runCheck('docker', ['info'], { shell: true }); + logger.info( + 'Docker is up and running. Proceed to starting up mkdocs server', + ); + return true; + } catch { + logger.error( + 'Docker is not running. Exiting. Please check status of Docker daemon with `docker info` before re-running', + ); + return false; + } +} diff --git a/packages/test-utils/CHANGELOG.md b/packages/test-utils/CHANGELOG.md index 9580b4855f..5bde6c3354 100644 --- a/packages/test-utils/CHANGELOG.md +++ b/packages/test-utils/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/test-utils +## 1.4.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/core-app-api@1.11.2-next.0 + - @backstage/plugin-permission-react@0.4.18-next.0 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.7.10 + +## 1.4.5 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-permission-react@0.4.17 + - @backstage/core-app-api@1.11.1 + - @backstage/theme@0.4.4 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + ## 1.4.5-next.0 ### Patch Changes diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json index 35a434dd8f..15b3a387ae 100644 --- a/packages/test-utils/package.json +++ b/packages/test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/test-utils", "description": "Utilities to test Backstage plugins and apps.", - "version": "1.4.5-next.0", + "version": "1.4.6-next.0", "publishConfig": { "access": "public" }, @@ -56,7 +56,7 @@ "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "i18next": "^22.4.15", "zen-observable": "^0.10.0" }, diff --git a/packages/theme/CHANGELOG.md b/packages/theme/CHANGELOG.md index b2583c299a..e1ee5fe11f 100644 --- a/packages/theme/CHANGELOG.md +++ b/packages/theme/CHANGELOG.md @@ -1,5 +1,17 @@ # @backstage/theme +## 0.5.0-next.0 + +### Minor Changes + +- 4d9e3b39e4: Added a global `OverrideComponentNameToClassKeys` for other plugins and packages to populate using module augmentation. This will in turn will provide component style override types for `createUnifiedTheme`. + +## 0.4.4 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. + ## 0.4.4-next.0 ### Patch Changes diff --git a/packages/theme/api-report.md b/packages/theme/api-report.md index 4ab05e8770..21d6be6a78 100644 --- a/packages/theme/api-report.md +++ b/packages/theme/api-report.md @@ -15,6 +15,7 @@ import { Theme as Theme_3 } from '@material-ui/core'; import { ThemeOptions } from '@mui/material/styles'; import { ThemeOptions as ThemeOptions_2 } from '@material-ui/core/styles'; import type { ThemeOptions as ThemeOptions_3 } from '@material-ui/core'; +import { UnifiedTheme as UnifiedTheme_2 } from '@backstage/theme'; // @public @deprecated export type BackstagePalette = Palette & BackstagePaletteAdditions; @@ -216,6 +217,9 @@ export function genPageTheme(props: { // @public @deprecated export const lightTheme: Theme_3; +// @public +export interface OverrideComponentNameToClassKeys {} + // @public export type PageTheme = { colors: string[]; @@ -401,8 +405,8 @@ export type SupportedVersions = 'v4' | 'v5'; // @public export const themes: { - light: UnifiedTheme; - dark: UnifiedTheme; + light: UnifiedTheme_2; + dark: UnifiedTheme_2; }; // @public diff --git a/packages/theme/package.json b/packages/theme/package.json index 7aed800cbc..ad70198cf8 100644 --- a/packages/theme/package.json +++ b/packages/theme/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/theme", "description": "material-ui theme for use with Backstage.", - "version": "0.4.4-next.0", + "version": "0.5.0-next.0", "publishConfig": { "access": "public", "main": "dist/index.esm.js", @@ -45,6 +45,9 @@ }, "devDependencies": { "@backstage/cli": "workspace:^", + "@mui/styles": "^5.14.18", + "@testing-library/jest-dom": "^6.0.0", + "@testing-library/react": "^14.0.0", "@types/react": "^16.13.1 || ^17.0.0" }, "files": [ diff --git a/plugins/graphql-backend/src/setupTests.ts b/packages/theme/src/setupTests.ts similarity index 94% rename from plugins/graphql-backend/src/setupTests.ts rename to packages/theme/src/setupTests.ts index d3232290a7..963c0f188b 100644 --- a/plugins/graphql-backend/src/setupTests.ts +++ b/packages/theme/src/setupTests.ts @@ -14,4 +14,4 @@ * limitations under the License. */ -export {}; +import '@testing-library/jest-dom'; diff --git a/packages/theme/src/unified/UnifiedThemeProvider.test.tsx b/packages/theme/src/unified/UnifiedThemeProvider.test.tsx new file mode 100644 index 0000000000..da4af5abab --- /dev/null +++ b/packages/theme/src/unified/UnifiedThemeProvider.test.tsx @@ -0,0 +1,86 @@ +/* + * 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 { + useTheme as useV4Theme, + makeStyles as makeV4Styles, +} from '@material-ui/core/styles'; +import { useTheme as useV5Theme } from '@mui/material/styles'; +import { makeStyles as makeV5Styles } from '@mui/styles'; +import { render, screen } from '@testing-library/react'; +import React from 'react'; +import './MuiClassNameSetup'; +import { UnifiedThemeProvider } from './UnifiedThemeProvider'; +import { themes } from './themes'; + +describe('UnifiedThemeProvider', () => { + it('provides a themes for v4 and v5 directly', () => { + function MyV4Component() { + const theme = useV4Theme(); + return v4-grey: {theme.palette.grey[500]}; + } + function MyV5Component() { + const theme = useV5Theme(); + return v5-grey: {theme.palette.grey[500]}; + } + + render( + + + + , + ); + + expect(screen.getByText('v4-grey: #9e9e9e')).toBeInTheDocument(); + expect(screen.getByText('v5-grey: #9e9e9e')).toBeInTheDocument(); + }); + + it('provides a themes for v4 and v5 through makeStyles', () => { + const useV4Styles = makeV4Styles(theme => ({ + root: { + color: theme.palette.grey[500], + }, + })); + const useV5Styles = makeV5Styles(theme => ({ + root: { + color: theme.palette.grey[500], + }, + })); + + function MyV4Component() { + const classes = useV4Styles(); + return v4; + } + function MyV5Component() { + const classes = useV5Styles(); + return v5; + } + + render( + + + + , + ); + + expect(window.getComputedStyle(screen.getByText('v4')).color).toBe( + 'rgb(158, 158, 158)', + ); + expect(window.getComputedStyle(screen.getByText('v5')).color).toBe( + 'rgb(158, 158, 158)', + ); + }); +}); diff --git a/packages/theme/src/v5/types.test.ts b/packages/theme/src/v5/types.test.ts new file mode 100644 index 0000000000..12bd0ff2b8 --- /dev/null +++ b/packages/theme/src/v5/types.test.ts @@ -0,0 +1,47 @@ +/* + * 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 { palettes } from '../base'; +import { createUnifiedTheme } from '../unified'; + +declare module '@backstage/theme' { + interface OverrideComponentNameToClassKeys { + MyTestComponent: 'root' | 'header'; + } +} + +describe('OverrideComponentNameToClassKeys', () => { + it('should provide type safe component style overrides', () => { + const theme = createUnifiedTheme({ + palette: palettes.light, + components: { + MyTestComponent: { + styleOverrides: { + root: { + color: '#f00', + }, + // @ts-expect-error + invalid: { + color: '#b45', + }, + }, + }, + }, + }); + + expect(theme).toBeDefined(); + }); +}); diff --git a/packages/theme/src/v5/types.ts b/packages/theme/src/v5/types.ts index 0d6d46cef9..aa80c903fa 100644 --- a/packages/theme/src/v5/types.ts +++ b/packages/theme/src/v5/types.ts @@ -19,6 +19,8 @@ import { BackstagePaletteAdditions, BackstageThemeAdditions, } from '../base/types'; +// eslint-disable-next-line no-restricted-imports +import { OverridesStyleRules } from '@mui/material/styles/overrides'; declare module '@mui/material/styles' { interface Palette extends BackstagePaletteAdditions {} @@ -35,3 +37,30 @@ declare module '@mui/material/styles' { declare module '@mui/private-theming/defaultTheme' { interface DefaultTheme extends Theme {} } + +/** + * Merge interface declarations into this type to register overrides for your components. + * + * @public + * @example + * ```ts + * declare module '@backstage/theme' { + * interface OverrideComponentNameToClassKeys { + * MyComponent: 'root' | 'header'; + * } + * } + * ``` + */ +export interface OverrideComponentNameToClassKeys {} + +type BackstageComponentOverrides = { + [TName in keyof OverrideComponentNameToClassKeys]?: { + styleOverrides?: Partial< + OverridesStyleRules + >; + }; +}; + +declare module '@mui/material/styles' { + interface Components extends BackstageComponentOverrides {} +} diff --git a/packages/version-bridge/CHANGELOG.md b/packages/version-bridge/CHANGELOG.md index 7e7a708be1..1ff0a048a2 100644 --- a/packages/version-bridge/CHANGELOG.md +++ b/packages/version-bridge/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/version-bridge +## 1.0.7 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. + ## 1.0.7-next.0 ### Patch Changes diff --git a/packages/version-bridge/package.json b/packages/version-bridge/package.json index 4cb6119071..f40ef91d0c 100644 --- a/packages/version-bridge/package.json +++ b/packages/version-bridge/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/version-bridge", "description": "Utilities used by @backstage packages to support multiple concurrent versions", - "version": "1.0.7-next.0", + "version": "1.0.7", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/adr-backend/CHANGELOG.md b/plugins/adr-backend/CHANGELOG.md index b6e94e72c7..5ea30aee78 100644 --- a/plugins/adr-backend/CHANGELOG.md +++ b/plugins/adr-backend/CHANGELOG.md @@ -1,5 +1,36 @@ # @backstage/plugin-adr-backend +## 0.4.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/integration@1.8.0-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/plugin-adr-common@0.2.18-next.0 + - @backstage/plugin-search-common@1.2.8 + +## 0.4.4 + +### Patch Changes + +- 68f8a55622: Updated dependency `@types/marked` to `^5.0.0`. +- Updated dependencies + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-adr-common@0.2.17 + - @backstage/plugin-search-common@1.2.8 + ## 0.4.4-next.2 ### Patch Changes diff --git a/plugins/adr-backend/package.json b/plugins/adr-backend/package.json index 8c1a7d4714..8981a4905d 100644 --- a/plugins/adr-backend/package.json +++ b/plugins/adr-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr-backend", - "version": "0.4.4-next.2", + "version": "0.4.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -48,7 +48,7 @@ }, "devDependencies": { "@backstage/cli": "workspace:^", - "@types/marked": "^4.0.0", + "@types/marked": "^5.0.0", "@types/supertest": "^2.0.8", "msw": "^1.0.0", "supertest": "^6.1.3" diff --git a/plugins/adr-common/CHANGELOG.md b/plugins/adr-common/CHANGELOG.md index e9e1c68cf0..2127f06437 100644 --- a/plugins/adr-common/CHANGELOG.md +++ b/plugins/adr-common/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-adr-common +## 0.2.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.8.0-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/plugin-search-common@1.2.8 + +## 0.2.17 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.7.2 + - @backstage/catalog-model@1.4.3 + - @backstage/plugin-search-common@1.2.8 + ## 0.2.17-next.0 ### Patch Changes diff --git a/plugins/adr-common/package.json b/plugins/adr-common/package.json index e737f1fcf9..43bc951328 100644 --- a/plugins/adr-common/package.json +++ b/plugins/adr-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-adr-common", "description": "Common functionalities for the adr plugin", - "version": "0.2.17-next.0", + "version": "0.2.18-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/adr/CHANGELOG.md b/plugins/adr/CHANGELOG.md index 570878106a..0e69d1e735 100644 --- a/plugins/adr/CHANGELOG.md +++ b/plugins/adr/CHANGELOG.md @@ -1,5 +1,40 @@ # @backstage/plugin-adr +## 0.6.11-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-search-react@1.7.4-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/plugin-adr-common@0.2.18-next.0 + - @backstage/plugin-search-common@1.2.8 + +## 0.6.9 + +### 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/frontend-plugin-api@0.3.0 + - @backstage/integration-react@1.1.21 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-search-react@1.7.2 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + - @backstage/plugin-adr-common@0.2.17 + - @backstage/plugin-search-common@1.2.8 + ## 0.6.9-next.2 ### Patch Changes diff --git a/plugins/adr/package.json b/plugins/adr/package.json index 2c5122b6a9..47468844ce 100644 --- a/plugins/adr/package.json +++ b/plugins/adr/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-adr", - "version": "0.6.9-next.2", + "version": "0.6.11-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -76,7 +76,7 @@ "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.0.0", "@types/git-url-parse": "^9.0.0", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/airbrake-backend/CHANGELOG.md b/plugins/airbrake-backend/CHANGELOG.md index cdb9f53d53..4ce8e4b3b5 100644 --- a/plugins/airbrake-backend/CHANGELOG.md +++ b/plugins/airbrake-backend/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-airbrake-backend +## 0.3.5-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 + +## 0.3.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/config@1.1.1 + ## 0.3.4-next.2 ### Patch Changes diff --git a/plugins/airbrake-backend/package.json b/plugins/airbrake-backend/package.json index 434aef9372..a3ac0b4c27 100644 --- a/plugins/airbrake-backend/package.json +++ b/plugins/airbrake-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake-backend", - "version": "0.3.4-next.2", + "version": "0.3.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/airbrake/CHANGELOG.md b/plugins/airbrake/CHANGELOG.md index a09ac986c6..19bc827a72 100644 --- a/plugins/airbrake/CHANGELOG.md +++ b/plugins/airbrake/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-airbrake +## 0.3.28-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/dev-utils@1.0.25-next.0 + - @backstage/test-utils@1.4.6-next.0 + - @backstage/catalog-model@1.4.3 + +## 0.3.26 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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/test-utils@1.4.5 + - @backstage/theme@0.4.4 + - @backstage/dev-utils@1.0.23 + - @backstage/catalog-model@1.4.3 + ## 0.3.26-next.2 ### Patch Changes diff --git a/plugins/airbrake/package.json b/plugins/airbrake/package.json index e5a872e1c6..932aa55e91 100644 --- a/plugins/airbrake/package.json +++ b/plugins/airbrake/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-airbrake", - "version": "0.3.26-next.2", + "version": "0.3.28-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/airbrake/src/components/EntityAirbrakeWidget/EntityAirbrakeWidget.tsx b/plugins/airbrake/src/components/EntityAirbrakeWidget/EntityAirbrakeWidget.tsx index 3e82d60d81..666a7ffea2 100644 --- a/plugins/airbrake/src/components/EntityAirbrakeWidget/EntityAirbrakeWidget.tsx +++ b/plugins/airbrake/src/components/EntityAirbrakeWidget/EntityAirbrakeWidget.tsx @@ -22,7 +22,6 @@ import { Progress, } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; -import { BackstageTheme } from '@backstage/theme'; import { Grid, Typography } from '@material-ui/core'; import { makeStyles } from '@material-ui/core/styles'; import React from 'react'; @@ -31,11 +30,11 @@ import { airbrakeApiRef } from '../../api'; import { MissingAnnotationEmptyState } from '@backstage/plugin-catalog-react'; import { AIRBRAKE_PROJECT_ID_ANNOTATION, useProjectId } from '../useProjectId'; -const useStyles = makeStyles(() => ({ +const useStyles = makeStyles({ multilineText: { whiteSpace: 'pre-wrap', }, -})); +}); export const EntityAirbrakeWidget = ({ entity }: { entity: Entity }) => { const classes = useStyles(); diff --git a/plugins/allure/CHANGELOG.md b/plugins/allure/CHANGELOG.md index 207a3723c3..c72b6eedb6 100644 --- a/plugins/allure/CHANGELOG.md +++ b/plugins/allure/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-allure +## 0.1.44-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 + +## 0.1.42 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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 + ## 0.1.42-next.2 ### Patch Changes diff --git a/plugins/allure/package.json b/plugins/allure/package.json index 947acfa34f..ee1952c819 100644 --- a/plugins/allure/package.json +++ b/plugins/allure/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-allure", "description": "A Backstage plugin that integrates with Allure", - "version": "0.1.42-next.2", + "version": "0.1.44-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/analytics-module-ga/CHANGELOG.md b/plugins/analytics-module-ga/CHANGELOG.md index b38c520e15..acf6f0eb98 100644 --- a/plugins/analytics-module-ga/CHANGELOG.md +++ b/plugins/analytics-module-ga/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-analytics-module-ga +## 0.1.36-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/config@1.1.1 + +## 0.1.35 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/config@1.1.1 + ## 0.1.35-next.2 ### Patch Changes diff --git a/plugins/analytics-module-ga/package.json b/plugins/analytics-module-ga/package.json index 402ac7d1d9..9cace65a5d 100644 --- a/plugins/analytics-module-ga/package.json +++ b/plugins/analytics-module-ga/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-analytics-module-ga", - "version": "0.1.35-next.2", + "version": "0.1.36-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/analytics-module-ga4/CHANGELOG.md b/plugins/analytics-module-ga4/CHANGELOG.md index d5f6248fef..a929abaf61 100644 --- a/plugins/analytics-module-ga4/CHANGELOG.md +++ b/plugins/analytics-module-ga4/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-analytics-module-ga4 +## 0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/config@1.1.1 + +## 0.1.6 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 504614d313: Updated dependency `@types/jest` to `^29.0.0`. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/config@1.1.1 + ## 0.1.6-next.2 ### Patch Changes diff --git a/plugins/analytics-module-ga4/package.json b/plugins/analytics-module-ga4/package.json index 9132d35208..90155e34a8 100644 --- a/plugins/analytics-module-ga4/package.json +++ b/plugins/analytics-module-ga4/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-analytics-module-ga4", - "version": "0.1.6-next.2", + "version": "0.1.7-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -50,7 +50,7 @@ "@testing-library/jest-dom": "^6.0.0", "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.0.0", - "@types/jest": "^28.1.3", + "@types/jest": "^29.0.0", "@types/react": "^16.13.1 || ^17.0.0", "msw": "^1.0.0" }, diff --git a/plugins/analytics-module-newrelic-browser/CHANGELOG.md b/plugins/analytics-module-newrelic-browser/CHANGELOG.md index 6bf3c52b29..86a86de836 100644 --- a/plugins/analytics-module-newrelic-browser/CHANGELOG.md +++ b/plugins/analytics-module-newrelic-browser/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-analytics-module-newrelic-browser +## 0.0.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/config@1.1.1 + +## 0.0.4 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/config@1.1.1 + ## 0.0.4-next.2 ### Patch Changes diff --git a/plugins/analytics-module-newrelic-browser/package.json b/plugins/analytics-module-newrelic-browser/package.json index 8f6c8cb875..c9d876c315 100644 --- a/plugins/analytics-module-newrelic-browser/package.json +++ b/plugins/analytics-module-newrelic-browser/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-analytics-module-newrelic-browser", - "version": "0.0.4-next.2", + "version": "0.0.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/apache-airflow/CHANGELOG.md b/plugins/apache-airflow/CHANGELOG.md index 29380e22e6..959d447f55 100644 --- a/plugins/apache-airflow/CHANGELOG.md +++ b/plugins/apache-airflow/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-apache-airflow +## 0.2.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + +## 0.2.17 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + ## 0.2.17-next.2 ### Patch Changes diff --git a/plugins/apache-airflow/package.json b/plugins/apache-airflow/package.json index 2ce0806e61..f1d122f4f5 100644 --- a/plugins/apache-airflow/package.json +++ b/plugins/apache-airflow/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-apache-airflow", - "version": "0.2.17-next.2", + "version": "0.2.18-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,7 +35,7 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.61", "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "qs": "^6.10.1", "react-use": "^17.2.4" }, diff --git a/plugins/api-docs-module-protoc-gen-doc/CHANGELOG.md b/plugins/api-docs-module-protoc-gen-doc/CHANGELOG.md index b31c53f633..2c96409cab 100644 --- a/plugins/api-docs-module-protoc-gen-doc/CHANGELOG.md +++ b/plugins/api-docs-module-protoc-gen-doc/CHANGELOG.md @@ -1,5 +1,11 @@ # @backstage/plugin-api-docs-module-protoc-gen-doc +## 0.1.5 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. + ## 0.1.5-next.0 ### Patch Changes diff --git a/plugins/api-docs-module-protoc-gen-doc/package.json b/plugins/api-docs-module-protoc-gen-doc/package.json index 4f038aaaec..3adf16d6ff 100644 --- a/plugins/api-docs-module-protoc-gen-doc/package.json +++ b/plugins/api-docs-module-protoc-gen-doc/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-api-docs-module-protoc-gen-doc", "description": "Additional functionalities for the api-docs plugin that renders the output of the protoc-gen-doc", - "version": "0.1.5-next.0", + "version": "0.1.5", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/api-docs/CHANGELOG.md b/plugins/api-docs/CHANGELOG.md index 42bb23bf2c..d88c90e769 100644 --- a/plugins/api-docs/CHANGELOG.md +++ b/plugins/api-docs/CHANGELOG.md @@ -1,5 +1,49 @@ # @backstage/plugin-api-docs +## 0.10.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.16.0-next.1 + +## 0.10.2-next.0 + +### Patch Changes + +- 816d331d16: Add dependency on `graphql-config` to compensate for `graphql-language-service` needing it but not shipping the dep properly +- 615159e536: Updated dependency `graphiql` to `3.0.10`. +- 53e2c06f41: Updated dependency `@asyncapi/react-component` to `1.1.0`. +- 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-catalog@1.16.0-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/catalog-model@1.4.3 + +## 0.10.0 + +### Minor Changes + +- 0ac0e10822: Replace GraphiQL playground with DocExplorer +- 62310404b7: Define a default for oauth2RedirectUrl option of swagger-ui-react to match documentation + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- 613a55911f: Updated dependency `graphiql` to `3.0.9`. +- 4ad15278e6: Updated dependency `@graphiql/react` to `^0.20.0`. +- 62b5922916: Internal theme type updates +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/plugin-catalog@1.15.0 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + ## 0.10.0-next.2 ### Minor Changes diff --git a/plugins/api-docs/package.json b/plugins/api-docs/package.json index 6b49b1bdc2..5196d13a51 100644 --- a/plugins/api-docs/package.json +++ b/plugins/api-docs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-api-docs", "description": "A Backstage plugin that helps represent API entities in the frontend", - "version": "0.10.0-next.2", + "version": "0.10.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -33,7 +33,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@asyncapi/react-component": "1.0.0-next.48", + "@asyncapi/react-component": "1.2.2", "@backstage/catalog-model": "workspace:^", "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", @@ -45,8 +45,9 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.61", "@types/react": "^16.13.1 || ^17.0.0", - "graphiql": "3.0.9", + "graphiql": "3.0.10", "graphql": "^16.0.0", + "graphql-config": "^5.0.2", "graphql-ws": "^5.4.1", "isomorphic-form-data": "^2.0.0", "react-use": "^17.2.4", @@ -67,7 +68,7 @@ "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.0.0", "@types/swagger-ui-react": "^4.18.0", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/api-docs/src/components/ApiDefinitionDialog/ApiDefinitionDialog.tsx b/plugins/api-docs/src/components/ApiDefinitionDialog/ApiDefinitionDialog.tsx index 2f82a0cc5a..6673420732 100644 --- a/plugins/api-docs/src/components/ApiDefinitionDialog/ApiDefinitionDialog.tsx +++ b/plugins/api-docs/src/components/ApiDefinitionDialog/ApiDefinitionDialog.tsx @@ -16,7 +16,6 @@ import { ApiEntity } from '@backstage/catalog-model'; import { useApi } from '@backstage/core-plugin-api'; -import { BackstageTheme } from '@backstage/theme'; import { Box, Button, @@ -33,7 +32,7 @@ import React, { useEffect } from 'react'; import { apiDocsConfigRef } from '../../config'; import { PlainApiDefinitionWidget } from '../PlainApiDefinitionWidget'; -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ fullHeightDialog: { height: 'calc(100% - 64px)', }, diff --git a/plugins/api-docs/src/components/AsyncApiDefinitionWidget/AsyncApiDefinition.test.tsx b/plugins/api-docs/src/components/AsyncApiDefinitionWidget/AsyncApiDefinition.test.tsx index c9f979edad..ed3a3e98ce 100644 --- a/plugins/api-docs/src/components/AsyncApiDefinitionWidget/AsyncApiDefinition.test.tsx +++ b/plugins/api-docs/src/components/AsyncApiDefinitionWidget/AsyncApiDefinition.test.tsx @@ -54,7 +54,7 @@ components: expect(getByText(/Account Service/i)).toBeInTheDocument(); expect(getByText(/user\/signedup/i)).toBeInTheDocument(); - expect(getAllByText(/UserSignedUp/i)).toHaveLength(2); + expect(getAllByText(/UserSignedUp/i)).toHaveLength(4); expect(getAllByText(/displayName/i)).toHaveLength(3); }); }); diff --git a/plugins/api-docs/src/components/GraphQlDefinitionWidget/GraphQlDefinition.tsx b/plugins/api-docs/src/components/GraphQlDefinitionWidget/GraphQlDefinition.tsx index 6ad8643111..bf45a0e637 100644 --- a/plugins/api-docs/src/components/GraphQlDefinitionWidget/GraphQlDefinition.tsx +++ b/plugins/api-docs/src/components/GraphQlDefinitionWidget/GraphQlDefinition.tsx @@ -14,7 +14,6 @@ * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; import { makeStyles } from '@material-ui/core/styles'; import { DocExplorer, @@ -26,7 +25,7 @@ import 'graphiql/graphiql.css'; import { buildSchema } from 'graphql'; import React from 'react'; -const useStyles = makeStyles(() => ({ +const useStyles = makeStyles({ root: { height: '100%', display: 'flex', @@ -46,7 +45,7 @@ const useStyles = makeStyles(() => ({ }, }, }, -})); +}); type Props = { definition: string; diff --git a/plugins/api-docs/src/components/GrpcApiDefinitionWidget/GrpcApiDefinitionWidget.tsx b/plugins/api-docs/src/components/GrpcApiDefinitionWidget/GrpcApiDefinitionWidget.tsx index b6bf317099..8363ebaedc 100644 --- a/plugins/api-docs/src/components/GrpcApiDefinitionWidget/GrpcApiDefinitionWidget.tsx +++ b/plugins/api-docs/src/components/GrpcApiDefinitionWidget/GrpcApiDefinitionWidget.tsx @@ -17,7 +17,6 @@ import React from 'react'; import { CodeSnippet } from '@backstage/core-components'; import { useTheme } from '@material-ui/core/styles'; -import { BackstageTheme } from '@backstage/theme'; /** @public */ export type GrpcApiDefinitionWidgetProps = { @@ -28,7 +27,7 @@ export type GrpcApiDefinitionWidgetProps = { export const GrpcApiDefinitionWidget = ( props: GrpcApiDefinitionWidgetProps, ) => { - const theme = useTheme(); + const theme = useTheme(); return ( { const { definition } = props; - const theme = useTheme(); + const theme = useTheme(); return ( (theme => ({ +const useStyles = makeStyles(theme => ({ tabs: { background: theme.palette.background.paper, }, diff --git a/plugins/app-backend/CHANGELOG.md b/plugins/app-backend/CHANGELOG.md index f9e98e031e..d3c21b03fd 100644 --- a/plugins/app-backend/CHANGELOG.md +++ b/plugins/app-backend/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-app-backend +## 0.3.56-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/config-loader@1.5.3 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.8-next.0 + +## 0.3.55 + +### 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/config-loader@1.5.3 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/plugin-app-node@0.1.7 + ## 0.3.55-next.2 ### Patch Changes diff --git a/plugins/app-backend/package.json b/plugins/app-backend/package.json index 1699ac7f31..87f6b6827c 100644 --- a/plugins/app-backend/package.json +++ b/plugins/app-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-app-backend", "description": "A Backstage backend plugin that serves the Backstage frontend app", - "version": "0.3.55-next.2", + "version": "0.3.56-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/app-node/CHANGELOG.md b/plugins/app-node/CHANGELOG.md index 13f0920921..f901f5b879 100644 --- a/plugins/app-node/CHANGELOG.md +++ b/plugins/app-node/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-app-node +## 0.1.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.8-next.0 + +## 0.1.7 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.7 + ## 0.1.7-next.2 ### Patch Changes diff --git a/plugins/app-node/package.json b/plugins/app-node/package.json index f781002c6c..042703f5ab 100644 --- a/plugins/app-node/package.json +++ b/plugins/app-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-app-node", "description": "Node.js library for the app plugin", - "version": "0.1.7-next.2", + "version": "0.1.8-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/graphql-backend/.eslintrc.js b/plugins/auth-backend-module-atlassian-provider/.eslintrc.js similarity index 100% rename from plugins/graphql-backend/.eslintrc.js rename to plugins/auth-backend-module-atlassian-provider/.eslintrc.js diff --git a/plugins/auth-backend-module-atlassian-provider/CHANGELOG.md b/plugins/auth-backend-module-atlassian-provider/CHANGELOG.md new file mode 100644 index 0000000000..7e02d921ea --- /dev/null +++ b/plugins/auth-backend-module-atlassian-provider/CHANGELOG.md @@ -0,0 +1,14 @@ +# @backstage/plugin-auth-backend-module-atlassian-provider + +## 0.1.0-next.0 + +### Minor Changes + +- 2a5891e816: New module for `@backstage/plugin-auth-backend` that adds an atlassian auth provider + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 diff --git a/plugins/auth-backend-module-atlassian-provider/README.md b/plugins/auth-backend-module-atlassian-provider/README.md new file mode 100644 index 0000000000..fb326f68be --- /dev/null +++ b/plugins/auth-backend-module-atlassian-provider/README.md @@ -0,0 +1,8 @@ +# Auth Module: Atlassian Provider + +This module provides an Atlassian auth provider implementation for `@backstage/plugin-auth-backend`. + +## Links + +- [Repository](https://atlassian.com/backstage/backstage/tree/master/plugins/auth-backend-module-atlassian-provider) +- [Backstage Project Homepage](https://backstage.io) diff --git a/plugins/auth-backend-module-atlassian-provider/api-report.md b/plugins/auth-backend-module-atlassian-provider/api-report.md new file mode 100644 index 0000000000..8a30e6b493 --- /dev/null +++ b/plugins/auth-backend-module-atlassian-provider/api-report.md @@ -0,0 +1,30 @@ +## API Report File for "@backstage/plugin-auth-backend-module-atlassian-provider" + +> 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 { OAuthAuthenticator } from '@backstage/plugin-auth-node'; +import { OAuthAuthenticatorResult } from '@backstage/plugin-auth-node'; +import { PassportOAuthAuthenticatorHelper } from '@backstage/plugin-auth-node'; +import { PassportProfile } from '@backstage/plugin-auth-node'; +import { SignInResolverFactory } from '@backstage/plugin-auth-node'; + +// @public (undocumented) +export const atlassianAuthenticator: OAuthAuthenticator< + PassportOAuthAuthenticatorHelper, + PassportProfile +>; + +// @public +export namespace atlassianSignInResolvers { + const usernameMatchingUserEntityName: SignInResolverFactory< + OAuthAuthenticatorResult, + unknown + >; +} + +// @public (undocumented) +const authModuleAtlassianProvider: () => BackendFeature; +export default authModuleAtlassianProvider; +``` diff --git a/plugins/auth-backend-module-atlassian-provider/catalog-info.yaml b/plugins/auth-backend-module-atlassian-provider/catalog-info.yaml new file mode 100644 index 0000000000..d3e2c11c17 --- /dev/null +++ b/plugins/auth-backend-module-atlassian-provider/catalog-info.yaml @@ -0,0 +1,10 @@ +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: backstage-plugin-auth-backend-module-atlassian-provider + title: '@backstage/plugin-auth-backend-module-atlassian-provider' + description: The atlassian-provider backend module for the auth plugin. +spec: + lifecycle: experimental + type: backstage-backend-plugin-module + owner: maintainers diff --git a/plugins/auth-backend-module-atlassian-provider/config.d.ts b/plugins/auth-backend-module-atlassian-provider/config.d.ts new file mode 100644 index 0000000000..999bf1b304 --- /dev/null +++ b/plugins/auth-backend-module-atlassian-provider/config.d.ts @@ -0,0 +1,34 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface Config { + auth?: { + providers?: { + /** @visibility frontend */ + atlassian?: { + [authEnv: string]: { + clientId: string; + /** + * @visibility secret + */ + clientSecret: string; + audience?: string; + callbackUrl?: string; + }; + }; + }; + }; +} diff --git a/plugins/auth-backend-module-atlassian-provider/dev/index.ts b/plugins/auth-backend-module-atlassian-provider/dev/index.ts new file mode 100644 index 0000000000..d3c18c1d48 --- /dev/null +++ b/plugins/auth-backend-module-atlassian-provider/dev/index.ts @@ -0,0 +1,24 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { createBackend } from '@backstage/backend-defaults'; + +const backend = createBackend(); + +backend.add(import('@backstage/plugin-auth-backend')); +backend.add(import('../src')); + +backend.start(); diff --git a/plugins/auth-backend-module-atlassian-provider/package.json b/plugins/auth-backend-module-atlassian-provider/package.json new file mode 100644 index 0000000000..a75aae73ea --- /dev/null +++ b/plugins/auth-backend-module-atlassian-provider/package.json @@ -0,0 +1,45 @@ +{ + "name": "@backstage/plugin-auth-backend-module-atlassian-provider", + "description": "The atlassian-provider backend module for the auth plugin.", + "version": "0.1.0-next.0", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "publishConfig": { + "access": "public", + "main": "dist/index.cjs.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "backend-plugin-module" + }, + "scripts": { + "start": "backstage-cli package start", + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack" + }, + "dependencies": { + "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", + "@backstage/plugin-auth-node": "workspace:^", + "express": "^4.18.2", + "passport": "^0.6.0", + "passport-atlassian-oauth2": "^2.1.0" + }, + "devDependencies": { + "@backstage/backend-defaults": "workspace:^", + "@backstage/backend-test-utils": "workspace:^", + "@backstage/cli": "workspace:^", + "@backstage/plugin-auth-backend": "workspace:^", + "supertest": "^6.3.3" + }, + "configSchema": "config.d.ts", + "files": [ + "dist", + "config.d.ts" + ] +} diff --git a/plugins/auth-backend-module-atlassian-provider/src/authenticator.ts b/plugins/auth-backend-module-atlassian-provider/src/authenticator.ts new file mode 100644 index 0000000000..3e5ed50246 --- /dev/null +++ b/plugins/auth-backend-module-atlassian-provider/src/authenticator.ts @@ -0,0 +1,77 @@ +/* + * 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 { Strategy as AtlassianStrategy } from 'passport-atlassian-oauth2'; +import { + createOAuthAuthenticator, + PassportOAuthAuthenticatorHelper, + PassportOAuthDoneCallback, + PassportProfile, +} from '@backstage/plugin-auth-node'; + +/** @public */ +export const atlassianAuthenticator = createOAuthAuthenticator({ + defaultProfileTransform: + PassportOAuthAuthenticatorHelper.defaultProfileTransform, + initialize({ callbackUrl, config }) { + const clientId = config.getString('clientId'); + const clientSecret = config.getString('clientSecret'); + const baseUrl = + config.getOptionalString('audience') || 'https://atlassian.com'; + + return PassportOAuthAuthenticatorHelper.from( + new AtlassianStrategy( + { + clientID: clientId, + clientSecret: clientSecret, + callbackURL: callbackUrl, + baseURL: baseUrl, + authorizationURL: `${baseUrl}/oauth/authorize`, + tokenURL: `${baseUrl}/oauth/token`, + profileURL: `${baseUrl}/api/v4/user`, + }, + ( + accessToken: string, + refreshToken: string, + params: any, + fullProfile: PassportProfile, + done: PassportOAuthDoneCallback, + ) => { + done( + undefined, + { fullProfile, params, accessToken }, + { refreshToken }, + ); + }, + ), + ); + }, + + async start(input, helper) { + return helper.start(input, { + accessType: 'offline', + prompt: 'consent', + }); + }, + + async authenticate(input, helper) { + return helper.authenticate(input); + }, + + async refresh(input, helper) { + return helper.refresh(input); + }, +}); diff --git a/plugins/auth-backend-module-atlassian-provider/src/index.ts b/plugins/auth-backend-module-atlassian-provider/src/index.ts new file mode 100644 index 0000000000..cc71c9b7e3 --- /dev/null +++ b/plugins/auth-backend-module-atlassian-provider/src/index.ts @@ -0,0 +1,25 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * The atlassian-provider backend module for the auth plugin. + * + * @packageDocumentation + */ + +export { atlassianAuthenticator } from './authenticator'; +export { authModuleAtlassianProvider as default } from './module'; +export { atlassianSignInResolvers } from './resolvers'; diff --git a/plugins/auth-backend-module-atlassian-provider/src/module.test.ts b/plugins/auth-backend-module-atlassian-provider/src/module.test.ts new file mode 100644 index 0000000000..8d02b0b7a5 --- /dev/null +++ b/plugins/auth-backend-module-atlassian-provider/src/module.test.ts @@ -0,0 +1,77 @@ +/* + * 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 { mockServices, startTestBackend } from '@backstage/backend-test-utils'; +import { authModuleAtlassianProvider } from './module'; +import request from 'supertest'; +import { decodeOAuthState } from '@backstage/plugin-auth-node'; + +describe('authModuleAtlassianProvider', () => { + it('should start', async () => { + const { server } = await startTestBackend({ + features: [ + import('@backstage/plugin-auth-backend'), + authModuleAtlassianProvider, + mockServices.rootConfig.factory({ + data: { + app: { + baseUrl: 'http://localhost:3000', + }, + auth: { + providers: { + atlassian: { + development: { + clientId: 'my-client-id', + clientSecret: 'my-client-secret', + }, + }, + }, + }, + }, + }), + ], + }); + + const agent = request.agent(server); + + const res = await agent.get('/api/auth/atlassian/start?env=development'); + + expect(res.status).toEqual(302); + + const nonceCookie = agent.jar.getCookie('atlassian-nonce', { + domain: 'localhost', + path: '/api/auth/atlassian/handler', + script: false, + secure: false, + }); + expect(nonceCookie).toBeDefined(); + + const startUrl = new URL(res.get('location')); + expect(startUrl.origin).toBe('https://atlassian.com'); + expect(startUrl.pathname).toBe('/oauth/authorize'); + expect(Object.fromEntries(startUrl.searchParams)).toEqual({ + response_type: 'code', + client_id: 'my-client-id', + redirect_uri: `http://localhost:${server.port()}/api/auth/atlassian/handler/frame`, + state: expect.any(String), + }); + + expect(decodeOAuthState(startUrl.searchParams.get('state')!)).toEqual({ + env: 'development', + nonce: decodeURIComponent(nonceCookie.value), + }); + }); +}); diff --git a/plugins/auth-backend-module-atlassian-provider/src/module.ts b/plugins/auth-backend-module-atlassian-provider/src/module.ts new file mode 100644 index 0000000000..9acb665ede --- /dev/null +++ b/plugins/auth-backend-module-atlassian-provider/src/module.ts @@ -0,0 +1,48 @@ +/* + * 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 { createBackendModule } from '@backstage/backend-plugin-api'; +import { + authProvidersExtensionPoint, + commonSignInResolvers, + createOAuthProviderFactory, +} from '@backstage/plugin-auth-node'; +import { atlassianAuthenticator } from './authenticator'; +import { atlassianSignInResolvers } from './resolvers'; + +/** @public */ +export const authModuleAtlassianProvider = createBackendModule({ + pluginId: 'auth', + moduleId: 'atlassian-provider', + register(reg) { + reg.registerInit({ + deps: { + providers: authProvidersExtensionPoint, + }, + async init({ providers }) { + providers.registerProvider({ + providerId: 'atlassian', + factory: createOAuthProviderFactory({ + authenticator: atlassianAuthenticator, + signInResolverFactories: { + ...atlassianSignInResolvers, + ...commonSignInResolvers, + }, + }), + }); + }, + }); + }, +}); diff --git a/plugins/auth-backend-module-atlassian-provider/src/resolvers.ts b/plugins/auth-backend-module-atlassian-provider/src/resolvers.ts new file mode 100644 index 0000000000..1f3090bfdd --- /dev/null +++ b/plugins/auth-backend-module-atlassian-provider/src/resolvers.ts @@ -0,0 +1,50 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + createSignInResolverFactory, + OAuthAuthenticatorResult, + PassportProfile, + SignInInfo, +} from '@backstage/plugin-auth-node'; + +/** + * Available sign-in resolvers for the Atlassian auth provider. + * + * @public + */ +export namespace atlassianSignInResolvers { + /** + * Looks up the user by matching their Atlassian username to the entity name. + */ + export const usernameMatchingUserEntityName = createSignInResolverFactory({ + create() { + return async ( + info: SignInInfo>, + ctx, + ) => { + const { result } = info; + + const id = result.fullProfile.username; + if (!id) { + throw new Error(`Atlassian user profile does not contain a username`); + } + + return ctx.signInWithCatalogUser({ entityRef: { name: id } }); + }; + }, + }); +} diff --git a/plugins/auth-backend-module-atlassian-provider/src/types.d.ts b/plugins/auth-backend-module-atlassian-provider/src/types.d.ts new file mode 100644 index 0000000000..5fd47bf885 --- /dev/null +++ b/plugins/auth-backend-module-atlassian-provider/src/types.d.ts @@ -0,0 +1,25 @@ +/* + * 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. + */ + +declare module 'passport-atlassian-oauth2' { + import { Request } from 'express'; + import { StrategyCreated } from 'passport'; + + export class Strategy { + constructor(options: any, verify: any); + authenticate(this: StrategyCreated, req: Request, options?: any): any; + } +} diff --git a/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md b/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md index b4624b7614..60aa68020a 100644 --- a/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-gcp-iap-provider/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-auth-backend-module-gcp-iap-provider +## 0.2.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## 0.2.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.7 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.4.1 + ## 0.2.1-next.2 ### Patch Changes diff --git a/plugins/auth-backend-module-gcp-iap-provider/package.json b/plugins/auth-backend-module-gcp-iap-provider/package.json index 22cb9afc12..2dbb69c8cd 100644 --- a/plugins/auth-backend-module-gcp-iap-provider/package.json +++ b/plugins/auth-backend-module-gcp-iap-provider/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-auth-backend-module-gcp-iap-provider", "description": "A GCP IAP auth provider module for the Backstage auth backend", - "version": "0.2.1-next.2", + "version": "0.2.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-backend-module-github-provider/CHANGELOG.md b/plugins/auth-backend-module-github-provider/CHANGELOG.md index 0ff80a1600..3bf47f8a7a 100644 --- a/plugins/auth-backend-module-github-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-github-provider/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-auth-backend-module-github-provider +## 0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + +## 0.1.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-auth-node@0.4.1 + ## 0.1.4-next.2 ### Patch Changes diff --git a/plugins/auth-backend-module-github-provider/package.json b/plugins/auth-backend-module-github-provider/package.json index e84723147a..218ec94cac 100644 --- a/plugins/auth-backend-module-github-provider/package.json +++ b/plugins/auth-backend-module-github-provider/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-auth-backend-module-github-provider", "description": "The github-provider backend module for the auth plugin.", - "version": "0.1.4-next.2", + "version": "0.1.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md b/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md index 29d6733090..c610e93ec8 100644 --- a/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-gitlab-provider/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-auth-backend-module-gitlab-provider +## 0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + +## 0.1.4 + +### Patch Changes + +- a3236ad0ca: Fix link to the repository in `README.md`. +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-auth-node@0.4.1 + ## 0.1.4-next.2 ### Patch Changes diff --git a/plugins/auth-backend-module-gitlab-provider/package.json b/plugins/auth-backend-module-gitlab-provider/package.json index 087cbcb3ce..9d931e628c 100644 --- a/plugins/auth-backend-module-gitlab-provider/package.json +++ b/plugins/auth-backend-module-gitlab-provider/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-auth-backend-module-gitlab-provider", "description": "The gitlab-provider backend module for the auth plugin.", - "version": "0.1.4-next.2", + "version": "0.1.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-backend-module-google-provider/CHANGELOG.md b/plugins/auth-backend-module-google-provider/CHANGELOG.md index 92ee0e10c9..a8edf35c7e 100644 --- a/plugins/auth-backend-module-google-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-google-provider/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-auth-backend-module-google-provider +## 0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + +## 0.1.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-auth-node@0.4.1 + ## 0.1.4-next.2 ### Patch Changes diff --git a/plugins/auth-backend-module-google-provider/package.json b/plugins/auth-backend-module-google-provider/package.json index f13b82ffc7..1cbb87c5b2 100644 --- a/plugins/auth-backend-module-google-provider/package.json +++ b/plugins/auth-backend-module-google-provider/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-auth-backend-module-google-provider", "description": "A Google auth provider module for the Backstage auth backend", - "version": "0.1.4-next.2", + "version": "0.1.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md b/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md index 04fe350cf6..76bf7d60d7 100644 --- a/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-microsoft-provider/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-auth-backend-module-microsoft-provider +## 0.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + +## 0.1.2 + +### Patch Changes + +- a3236ad0ca: Fix link to the repository in `README.md`. +- 3979524c74: Added support for specifying a domain hint on the Microsoft authentication provider configuration. +- fde212dd10: Re-add the missing profile photo + as well as access token retrieval for foreign scopes. + + Additionally, we switch from previously 48x48 to 96x96 + which is the size used at the profile card. + +- 5aeb14f035: Correctly mark the client secret in configuration as secret +- 2817115d09: Removed `prompt=consent` from start method to fix #20641 +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-auth-node@0.4.1 + ## 0.1.2-next.2 ### Patch Changes diff --git a/plugins/auth-backend-module-microsoft-provider/package.json b/plugins/auth-backend-module-microsoft-provider/package.json index 4b94acbbbf..e67da9228c 100644 --- a/plugins/auth-backend-module-microsoft-provider/package.json +++ b/plugins/auth-backend-module-microsoft-provider/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-auth-backend-module-microsoft-provider", "description": "The microsoft-provider backend module for the auth plugin.", - "version": "0.1.2-next.2", + "version": "0.1.3-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md b/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md index dc2863709d..bae3565d3b 100644 --- a/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-oauth2-provider/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-auth-backend-module-oauth2-provider +## 0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + +## 0.1.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-auth-node@0.4.1 + ## 0.1.4-next.2 ### Patch Changes diff --git a/plugins/auth-backend-module-oauth2-provider/package.json b/plugins/auth-backend-module-oauth2-provider/package.json index 24aab9ea73..cc672f77b9 100644 --- a/plugins/auth-backend-module-oauth2-provider/package.json +++ b/plugins/auth-backend-module-oauth2-provider/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-auth-backend-module-oauth2-provider", "description": "The oauth2-provider backend module for the auth plugin.", - "version": "0.1.4-next.2", + "version": "0.1.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/auth-backend-module-okta-provider/.eslintrc.js b/plugins/auth-backend-module-okta-provider/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/auth-backend-module-okta-provider/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/auth-backend-module-okta-provider/CHANGELOG.md b/plugins/auth-backend-module-okta-provider/CHANGELOG.md new file mode 100644 index 0000000000..98782fccb5 --- /dev/null +++ b/plugins/auth-backend-module-okta-provider/CHANGELOG.md @@ -0,0 +1,11 @@ +# @backstage/plugin-auth-backend-module-okta-provider + +## 0.0.1-next.0 + +### Patch Changes + +- e1c189b524: Adds okta-provider backend module for the auth plugin +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 diff --git a/plugins/auth-backend-module-okta-provider/README.md b/plugins/auth-backend-module-okta-provider/README.md new file mode 100644 index 0000000000..3a320a9b1a --- /dev/null +++ b/plugins/auth-backend-module-okta-provider/README.md @@ -0,0 +1,30 @@ +# Auth Module: Okta Provider + +This module provides an Okta auth provider implementation for `@backstage/plugin-auth-backend`. + +## Utilization + +This module is used in `auth-backend/src/providers/okta` + +```ts +import { oktaAuthenticator } from '@backstage/plugin-auth-backend-module-okta-provider'; + +export const okta = createAuthProviderIntegration({ + create({ + authHandler?: AuthHandler, + + signIn?: { + resolver: SignInResolver, + }, + }) { + return createOAuthProviderFactory({ + authenticator: oktaAuthenticator, + }); + }, +}); +``` + +## Links + +- [Repository](https://okta.com/backstage/backstage/tree/master/plugins/auth-backend-module-okta-provider) +- [Backstage Project Homepage](https://backstage.io) diff --git a/plugins/auth-backend-module-okta-provider/api-report.md b/plugins/auth-backend-module-okta-provider/api-report.md new file mode 100644 index 0000000000..e04c762fe2 --- /dev/null +++ b/plugins/auth-backend-module-okta-provider/api-report.md @@ -0,0 +1,30 @@ +## API Report File for "@backstage/plugin-auth-backend-module-okta-provider" + +> 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 { OAuthAuthenticator } from '@backstage/plugin-auth-node'; +import { OAuthAuthenticatorResult } from '@backstage/plugin-auth-node'; +import { PassportOAuthAuthenticatorHelper } from '@backstage/plugin-auth-node'; +import { PassportProfile } from '@backstage/plugin-auth-node'; +import { SignInResolverFactory } from '@backstage/plugin-auth-node'; + +// @public (undocumented) +const authModuleOktaProvider: () => BackendFeature; +export default authModuleOktaProvider; + +// @public (undocumented) +export const oktaAuthenticator: OAuthAuthenticator< + PassportOAuthAuthenticatorHelper, + PassportProfile +>; + +// @public +export namespace oktaSignInResolvers { + const emailMatchingUserEntityAnnotation: SignInResolverFactory< + OAuthAuthenticatorResult, + unknown + >; +} +``` diff --git a/plugins/auth-backend-module-okta-provider/catalog-info.yaml b/plugins/auth-backend-module-okta-provider/catalog-info.yaml new file mode 100644 index 0000000000..7a5536edcf --- /dev/null +++ b/plugins/auth-backend-module-okta-provider/catalog-info.yaml @@ -0,0 +1,10 @@ +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: backstage-plugin-auth-backend-module-okta-provider + title: '@backstage/plugin-auth-backend-module-okta-provider' + description: The okta-provider backend module for the auth plugin. +spec: + lifecycle: experimental + type: backstage-backend-plugin-module + owner: maintainers diff --git a/plugins/auth-backend-module-okta-provider/config.d.ts b/plugins/auth-backend-module-okta-provider/config.d.ts new file mode 100644 index 0000000000..f047c96739 --- /dev/null +++ b/plugins/auth-backend-module-okta-provider/config.d.ts @@ -0,0 +1,36 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface Config { + auth?: { + providers?: { + /** @visibility frontend */ + okta?: { + [authEnv: string]: { + clientId: string; + /** + * @visibility secret + */ + clientSecret: string; + audience?: string; + authServerId?: string; + idp?: string; + callbackUrl?: string; + }; + }; + }; + }; +} diff --git a/plugins/auth-backend-module-okta-provider/dev/index.ts b/plugins/auth-backend-module-okta-provider/dev/index.ts new file mode 100644 index 0000000000..d3c18c1d48 --- /dev/null +++ b/plugins/auth-backend-module-okta-provider/dev/index.ts @@ -0,0 +1,24 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { createBackend } from '@backstage/backend-defaults'; + +const backend = createBackend(); + +backend.add(import('@backstage/plugin-auth-backend')); +backend.add(import('../src')); + +backend.start(); diff --git a/plugins/auth-backend-module-okta-provider/package.json b/plugins/auth-backend-module-okta-provider/package.json new file mode 100644 index 0000000000..a9e8606335 --- /dev/null +++ b/plugins/auth-backend-module-okta-provider/package.json @@ -0,0 +1,45 @@ +{ + "name": "@backstage/plugin-auth-backend-module-okta-provider", + "description": "The okta-provider backend module for the auth plugin.", + "version": "0.0.1-next.0", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "publishConfig": { + "access": "public", + "main": "dist/index.cjs.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "backend-plugin-module" + }, + "scripts": { + "start": "backstage-cli package start", + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack" + }, + "dependencies": { + "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", + "@backstage/plugin-auth-node": "workspace:^", + "@davidzemon/passport-okta-oauth": "^0.0.5", + "express": "^4.18.2", + "passport": "^0.6.0" + }, + "devDependencies": { + "@backstage/backend-defaults": "workspace:^", + "@backstage/backend-test-utils": "workspace:^", + "@backstage/cli": "workspace:^", + "@backstage/plugin-auth-backend": "workspace:^", + "supertest": "^6.3.3" + }, + "configSchema": "config.d.ts", + "files": [ + "dist", + "config.d.ts" + ] +} diff --git a/plugins/auth-backend-module-okta-provider/src/authenticator.ts b/plugins/auth-backend-module-okta-provider/src/authenticator.ts new file mode 100644 index 0000000000..42201232f1 --- /dev/null +++ b/plugins/auth-backend-module-okta-provider/src/authenticator.ts @@ -0,0 +1,93 @@ +/* + * 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 { Strategy as OktaStrategy } from '@davidzemon/passport-okta-oauth'; +import { + createOAuthAuthenticator, + PassportOAuthAuthenticatorHelper, + PassportOAuthDoneCallback, + PassportProfile, +} from '@backstage/plugin-auth-node'; + +/** @public */ +export const oktaAuthenticator = createOAuthAuthenticator({ + defaultProfileTransform: + PassportOAuthAuthenticatorHelper.defaultProfileTransform, + initialize({ callbackUrl, config }) { + const clientId = config.getString('clientId'); + const clientSecret = config.getString('clientSecret'); + const audience = config.getOptionalString('audience') || 'https://okta.com'; + const authServerId = config.getOptionalString('authServerId'); + const idp = config.getOptionalString('idp'); + // default scopes are taken from + // https://developer.okta.com/docs/reference/api/oidc/#response-example-success-refresh-token + const defaultScopes = 'openid profile email'; + // additional scopes can be configured in the config as a space separated string + const additionalScopes = config.getOptionalString('additionalScopes') || ''; + // combine default and additional scopes and remove duplicates + const combineScopeStrings = (scopesA: string, scopesB: string) => { + const scopesAArray = scopesA.split(' '); + const scopesBArray = scopesB.split(' '); + const combinedScopes = new Set([...scopesAArray, ...scopesBArray]); + return Array.from(combinedScopes).join(' '); + }; + const scope = combineScopeStrings(defaultScopes, additionalScopes); + + return PassportOAuthAuthenticatorHelper.from( + new OktaStrategy( + { + clientID: clientId, + clientSecret: clientSecret, + callbackURL: callbackUrl, + audience: audience, + authServerID: authServerId, + idp: idp, + passReqToCallback: false, + response_type: 'code', + scope, + }, + ( + accessToken: string, + refreshToken: string, + params: any, + fullProfile: PassportProfile, + done: PassportOAuthDoneCallback, + ) => { + done( + undefined, + { fullProfile, params, accessToken }, + { refreshToken }, + ); + }, + ), + ); + }, + + async start(input, helper) { + return helper.start(input, { + accessType: 'offline', + prompt: 'consent', + }); + }, + + async authenticate(input, helper) { + return helper.authenticate(input); + }, + + async refresh(input, helper) { + return helper.refresh(input); + }, +}); diff --git a/plugins/auth-backend-module-okta-provider/src/index.ts b/plugins/auth-backend-module-okta-provider/src/index.ts new file mode 100644 index 0000000000..43a075d56f --- /dev/null +++ b/plugins/auth-backend-module-okta-provider/src/index.ts @@ -0,0 +1,25 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * The okta-provider backend module for the auth plugin. + * + * @packageDocumentation + */ + +export { oktaAuthenticator } from './authenticator'; +export { authModuleOktaProvider as default } from './module'; +export { oktaSignInResolvers } from './resolvers'; diff --git a/plugins/auth-backend-module-okta-provider/src/module.test.ts b/plugins/auth-backend-module-okta-provider/src/module.test.ts new file mode 100644 index 0000000000..e469067b3f --- /dev/null +++ b/plugins/auth-backend-module-okta-provider/src/module.test.ts @@ -0,0 +1,82 @@ +/* + * 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 { mockServices, startTestBackend } from '@backstage/backend-test-utils'; +import { authModuleOktaProvider } from './module'; +import request from 'supertest'; +import { decodeOAuthState } from '@backstage/plugin-auth-node'; + +describe('authModuleOktaProvider', () => { + it('should start', async () => { + const defaultScopes = 'openid profile email'; + const additionalScopes = 'groups phone'; + const combinedScopes = `${defaultScopes} ${additionalScopes}`; + const { server } = await startTestBackend({ + features: [ + import('@backstage/plugin-auth-backend'), + authModuleOktaProvider, + mockServices.rootConfig.factory({ + data: { + app: { + baseUrl: 'http://localhost:3000', + }, + auth: { + providers: { + okta: { + development: { + clientId: 'my-client-id', + clientSecret: 'my-client-secret', + additionalScopes, + }, + }, + }, + }, + }, + }), + ], + }); + + const agent = request.agent(server); + + const res = await agent.get('/api/auth/okta/start?env=development'); + + expect(res.status).toEqual(302); + + const nonceCookie = agent.jar.getCookie('okta-nonce', { + domain: 'localhost', + path: '/api/auth/okta/handler', + script: false, + secure: false, + }); + expect(nonceCookie).toBeDefined(); + + const startUrl = new URL(res.get('location')); + expect(startUrl.origin).toBe('https://okta.com'); + expect(startUrl.pathname).toBe('/oauth2/v1/authorize'); + expect(Object.fromEntries(startUrl.searchParams)).toEqual({ + response_type: 'code', + scope: combinedScopes, + client_id: 'my-client-id', + redirect_uri: `http://localhost:${server.port()}/api/auth/okta/handler/frame`, + state: expect.any(String), + }); + + expect(decodeOAuthState(startUrl.searchParams.get('state')!)).toEqual({ + env: 'development', + nonce: decodeURIComponent(nonceCookie.value), + }); + }); +}); diff --git a/plugins/auth-backend-module-okta-provider/src/module.ts b/plugins/auth-backend-module-okta-provider/src/module.ts new file mode 100644 index 0000000000..35cb6634d5 --- /dev/null +++ b/plugins/auth-backend-module-okta-provider/src/module.ts @@ -0,0 +1,48 @@ +/* + * 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 { createBackendModule } from '@backstage/backend-plugin-api'; +import { + authProvidersExtensionPoint, + commonSignInResolvers, + createOAuthProviderFactory, +} from '@backstage/plugin-auth-node'; +import { oktaAuthenticator } from './authenticator'; +import { oktaSignInResolvers } from './resolvers'; + +/** @public */ +export const authModuleOktaProvider = createBackendModule({ + pluginId: 'auth', + moduleId: 'okta-provider', + register(reg) { + reg.registerInit({ + deps: { + providers: authProvidersExtensionPoint, + }, + async init({ providers }) { + providers.registerProvider({ + providerId: 'okta', + factory: createOAuthProviderFactory({ + authenticator: oktaAuthenticator, + signInResolverFactories: { + ...oktaSignInResolvers, + ...commonSignInResolvers, + }, + }), + }); + }, + }); + }, +}); diff --git a/plugins/auth-backend-module-okta-provider/src/resolvers.ts b/plugins/auth-backend-module-okta-provider/src/resolvers.ts new file mode 100644 index 0000000000..8bc3f38f17 --- /dev/null +++ b/plugins/auth-backend-module-okta-provider/src/resolvers.ts @@ -0,0 +1,54 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { + createSignInResolverFactory, + OAuthAuthenticatorResult, + PassportProfile, + SignInInfo, +} from '@backstage/plugin-auth-node'; + +/** + * Available sign-in resolvers for the Okta auth provider. + * + * @public + */ +export namespace oktaSignInResolvers { + /** + * Looks up the user by matching their Okta email to the entity email. + */ + + export const emailMatchingUserEntityAnnotation = createSignInResolverFactory({ + create() { + return async ( + info: SignInInfo>, + ctx, + ) => { + const { profile } = info; + + if (!profile.email) { + throw new Error('Okta profile contained no email'); + } + + return ctx.signInWithCatalogUser({ + annotations: { + 'okta.com/email': profile.email, + }, + }); + }; + }, + }); +} diff --git a/plugins/auth-backend-module-okta-provider/src/types.d.ts b/plugins/auth-backend-module-okta-provider/src/types.d.ts new file mode 100644 index 0000000000..58cfb74173 --- /dev/null +++ b/plugins/auth-backend-module-okta-provider/src/types.d.ts @@ -0,0 +1,25 @@ +/* + * 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. + */ + +declare module 'passport-okta2' { + import { Request } from 'express'; + import { StrategyCreated } from 'passport'; + + export class Strategy { + constructor(options: any, verify: any); + authenticate(this: StrategyCreated, req: Request, options?: any): any; + } +} diff --git a/plugins/auth-backend-module-pinniped-provider/CHANGELOG.md b/plugins/auth-backend-module-pinniped-provider/CHANGELOG.md index c04460a935..57d4e5611a 100644 --- a/plugins/auth-backend-module-pinniped-provider/CHANGELOG.md +++ b/plugins/auth-backend-module-pinniped-provider/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-auth-backend-module-pinniped-provider +## 0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + +## 0.1.1 + +### Patch Changes + +- a8f6afda4a: Introduced metadata cache for the `pinniped` provider. +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/config@1.1.1 + - @backstage/plugin-auth-node@0.4.1 + ## 0.1.1-next.2 ### Patch Changes diff --git a/plugins/auth-backend-module-pinniped-provider/api-report.md b/plugins/auth-backend-module-pinniped-provider/api-report.md index b9b993bd1e..430099713e 100644 --- a/plugins/auth-backend-module-pinniped-provider/api-report.md +++ b/plugins/auth-backend-module-pinniped-provider/api-report.md @@ -5,6 +5,7 @@ ```ts import { BackendFeature } from '@backstage/backend-plugin-api'; import { BaseClient } from 'openid-client'; +import { Config } from '@backstage/config'; import { OAuthAuthenticator } from '@backstage/plugin-auth-node'; import { Strategy } from 'openid-client'; import { TokenSet } from 'openid-client'; @@ -14,7 +15,15 @@ export const authModulePinnipedProvider: () => BackendFeature; // @public (undocumented) export const pinnipedAuthenticator: OAuthAuthenticator< - Promise<{ + PinnipedStrategyCache, + unknown +>; + +// @public (undocumented) +export class PinnipedStrategyCache { + constructor(callbackUrl: string, config: Config); + // (undocumented) + getStrategy(): Promise<{ providerStrategy: Strategy< { tokenset: TokenSet; @@ -22,7 +31,6 @@ export const pinnipedAuthenticator: OAuthAuthenticator< BaseClient >; client: BaseClient; - }>, - unknown ->; + }>; +} ``` diff --git a/plugins/auth-backend-module-pinniped-provider/package.json b/plugins/auth-backend-module-pinniped-provider/package.json index 087a90cdbb..2b572696fd 100644 --- a/plugins/auth-backend-module-pinniped-provider/package.json +++ b/plugins/auth-backend-module-pinniped-provider/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-auth-backend-module-pinniped-provider", "description": "The pinniped-provider backend module for the auth plugin.", - "version": "0.1.1-next.2", + "version": "0.1.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -25,14 +25,15 @@ "dependencies": { "@backstage/backend-common": "workspace:^", "@backstage/backend-plugin-api": "workspace:^", + "@backstage/config": "workspace:^", "@backstage/plugin-auth-node": "workspace:^", + "luxon": "^3.4.3", "openid-client": "^5.4.3" }, "devDependencies": { "@backstage/backend-defaults": "workspace:^", "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", - "@backstage/config": "workspace:^", "@backstage/plugin-auth-backend": "workspace:^", "cookie-parser": "^1.4.6", "express": "^4.18.2", diff --git a/plugins/auth-backend-module-pinniped-provider/src/authenticator.test.ts b/plugins/auth-backend-module-pinniped-provider/src/authenticator.test.ts index f908c1ea13..2ecd54e80a 100644 --- a/plugins/auth-backend-module-pinniped-provider/src/authenticator.test.ts +++ b/plugins/auth-backend-module-pinniped-provider/src/authenticator.test.ts @@ -28,9 +28,10 @@ import { ConfigReader } from '@backstage/config'; import { JWK, SignJWT, exportJWK, generateKeyPair } from 'jose'; import { rest } from 'msw'; import express from 'express'; +import { DateTime } from 'luxon'; describe('pinnipedAuthenticator', () => { - let implementation: any; + let authCtx: any; let oauthState: OAuthState; let idToken: string; let publicKey: JWK; @@ -85,6 +86,7 @@ describe('pinnipedAuthenticator', () => { beforeEach(() => { jest.clearAllMocks(); + jest.restoreAllMocks(); mswServer.use( rest.get( @@ -128,7 +130,7 @@ describe('pinnipedAuthenticator', () => { }), ); - implementation = pinnipedAuthenticator.initialize({ + authCtx = pinnipedAuthenticator.initialize({ callbackUrl: 'https://backstage.test/callback', config: new ConfigReader({ federationDomain: 'https://federationDomain.test', @@ -143,6 +145,17 @@ describe('pinnipedAuthenticator', () => { }; }); + describe('#initialize', () => { + it('always returns a PinnipedStrategyCache', async () => { + const { providerStrategy, client } = await authCtx.getStrategy(); + + expect(providerStrategy).toBeDefined(); + expect(client.issuer.authorization_endpoint).toMatch( + 'https://pinniped.test/oauth2/authorize', + ); + }); + }); + describe('#start', () => { let fakeSession: Record; let startRequest: OAuthAuthenticatorStartInput; @@ -162,7 +175,7 @@ describe('pinnipedAuthenticator', () => { it('redirects to authorization endpoint returned from OIDC metadata endpoint', async () => { const startResponse = await pinnipedAuthenticator.start( startRequest, - implementation, + authCtx, ); const url = new URL(startResponse.url); @@ -174,7 +187,7 @@ describe('pinnipedAuthenticator', () => { it('initiates authorization code grant', async () => { const startResponse = await pinnipedAuthenticator.start( startRequest, - implementation, + authCtx, ); const { searchParams } = new URL(startResponse.url); @@ -185,7 +198,7 @@ describe('pinnipedAuthenticator', () => { startRequest.req.query = { audience: 'test-cluster' }; const startResponse = await pinnipedAuthenticator.start( startRequest, - implementation, + authCtx, ); const { searchParams } = new URL(startResponse.url); const stateParam = searchParams.get('state'); @@ -201,7 +214,7 @@ describe('pinnipedAuthenticator', () => { it('passes client ID from config', async () => { const startResponse = await pinnipedAuthenticator.start( startRequest, - implementation, + authCtx, ); const { searchParams } = new URL(startResponse.url); @@ -211,7 +224,7 @@ describe('pinnipedAuthenticator', () => { it('passes callback URL from config', async () => { const startResponse = await pinnipedAuthenticator.start( startRequest, - implementation, + authCtx, ); const { searchParams } = new URL(startResponse.url); @@ -223,7 +236,7 @@ describe('pinnipedAuthenticator', () => { it('generates PKCE challenge', async () => { const startResponse = await pinnipedAuthenticator.start( startRequest, - implementation, + authCtx, ); const { searchParams } = new URL(startResponse.url); @@ -232,14 +245,14 @@ describe('pinnipedAuthenticator', () => { }); it('stores PKCE verifier in session', async () => { - await pinnipedAuthenticator.start(startRequest, implementation); + await pinnipedAuthenticator.start(startRequest, authCtx); expect(fakeSession['oidc:pinniped.test'].code_verifier).toBeDefined(); }); it('requests sufficient scopes for token exchange by default', async () => { const startResponse = await pinnipedAuthenticator.start( startRequest, - implementation, + authCtx, ); const { searchParams } = new URL(startResponse.url); const scopes = searchParams.get('scope')?.split(' ') ?? []; @@ -257,7 +270,7 @@ describe('pinnipedAuthenticator', () => { it('encodes OAuth state in query param', async () => { const startResponse = await pinnipedAuthenticator.start( startRequest, - implementation, + authCtx, ); const { searchParams } = new URL(startResponse.url); const stateParam = searchParams.get('state'); @@ -276,10 +289,103 @@ describe('pinnipedAuthenticator', () => { url: 'test', }, } as unknown as OAuthAuthenticatorStartInput, - implementation, + authCtx, ), ).rejects.toThrow('authentication requires session support'); }); + + it('refreshes oidc metadata after a failed fetch', async () => { + mswServer.use( + rest.get( + 'https://federationDomain.test/.well-known/openid-configuration', + (_req, res, _ctx) => res.networkError('Timeout'), + ), + ); + + const authCtxCreatedWhileSupervisorUnavailable = + pinnipedAuthenticator.initialize({ + callbackUrl: 'https://backstage.test/callback', + config: new ConfigReader({ + federationDomain: 'https://federationDomain.test', + clientId: 'clientId', + clientSecret: 'clientSecret', + }), + }); + + mswServer.use( + rest.get( + 'https://federationDomain.test/.well-known/openid-configuration', + (_req, res, ctx) => + res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json(issuerMetadata), + ), + ), + ); + + const response = await pinnipedAuthenticator.start( + startRequest, + authCtxCreatedWhileSupervisorUnavailable, + ); + + expect(response.url).toMatch('https://pinniped.test/oauth2/authorize'); + }); + + it('caches oidc metadata after a success', async () => { + // we start with 1 because the supervisor was called once already when we initialize. + let supervisorCalls: number = 1; + + mswServer.use( + rest.get( + 'https://federationDomain.test/.well-known/openid-configuration', + (_req, res, ctx) => { + supervisorCalls += 1; + return res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json(issuerMetadata), + ); + }, + ), + ); + + await pinnipedAuthenticator.start(startRequest, authCtx); + await pinnipedAuthenticator.start(startRequest, authCtx); + + expect(supervisorCalls).toEqual(1); + }); + + it('refreshes oidc metadata when current one in cache expires', async () => { + // we start with 1 because the supervisor was called once already when we initialize. + let supervisorCalls: number = 1; + const fixedTime = DateTime.local(); + jest.spyOn(DateTime, 'local').mockImplementation(() => fixedTime); + + mswServer.use( + rest.get( + 'https://federationDomain.test/.well-known/openid-configuration', + (_req, res, ctx) => { + supervisorCalls += 1; + return res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json(issuerMetadata), + ); + }, + ), + ); + + await pinnipedAuthenticator.start(startRequest, authCtx); + + jest + .spyOn(DateTime, 'local') + .mockImplementation(() => fixedTime.plus({ seconds: 60000 })); + + await pinnipedAuthenticator.start(startRequest, authCtx); + + expect(supervisorCalls).toEqual(2); + }); }); describe('#authenticate', () => { @@ -304,7 +410,7 @@ describe('pinnipedAuthenticator', () => { it('exchanges authorization code for access token', async () => { const handlerResponse = await pinnipedAuthenticator.authenticate( handlerRequest, - implementation, + authCtx, ); const accessToken = handlerResponse.session.accessToken; @@ -314,7 +420,7 @@ describe('pinnipedAuthenticator', () => { it('exchanges authorization code for refresh token', async () => { const handlerResponse = await pinnipedAuthenticator.authenticate( handlerRequest, - implementation, + authCtx, ); const refreshToken = handlerResponse.session.refreshToken; @@ -324,7 +430,7 @@ describe('pinnipedAuthenticator', () => { it('returns granted scope', async () => { const handlerResponse = await pinnipedAuthenticator.authenticate( handlerRequest, - implementation, + authCtx, ); const responseScope = handlerResponse.session.scope; @@ -349,7 +455,7 @@ describe('pinnipedAuthenticator', () => { const handlerResponse = await pinnipedAuthenticator.authenticate( handlerRequest, - implementation, + authCtx, ); expect(handlerResponse.session.idToken).toEqual(clusterScopedIdToken); @@ -413,7 +519,7 @@ describe('pinnipedAuthenticator', () => { }; await expect( - pinnipedAuthenticator.authenticate(handlerRequest, implementation), + pinnipedAuthenticator.authenticate(handlerRequest, authCtx), ).rejects.toThrow( `Failed to get cluster specific ID token for "test_cluster": Error: RFC8693 token exchange failed with error: NetworkError: Connection timed out`, ); @@ -422,7 +528,7 @@ describe('pinnipedAuthenticator', () => { it('fails without authorization code', async () => { handlerRequest.req.url = 'https://test.com'; return expect( - pinnipedAuthenticator.authenticate(handlerRequest, implementation), + pinnipedAuthenticator.authenticate(handlerRequest, authCtx), ).rejects.toThrow('Unexpected redirect'); }); @@ -440,7 +546,7 @@ describe('pinnipedAuthenticator', () => { }, } as unknown as express.Request, }, - implementation, + authCtx, ), ).rejects.toThrow( 'Authentication rejected, state missing from the response', @@ -456,10 +562,140 @@ describe('pinnipedAuthenticator', () => { url: 'https://test.com', } as unknown as express.Request, }, - implementation, + authCtx, ), ).rejects.toThrow('authentication requires session support'); }); + + it('refreshes oidc metadata after a failed fetch', async () => { + mswServer.use( + rest.get( + 'https://federationDomain.test/.well-known/openid-configuration', + (_req, res, _ctx) => res.networkError('Timeout'), + ), + ); + + const authCtxCreatedWhileSupervisorUnavailable = + pinnipedAuthenticator.initialize({ + callbackUrl: 'https://backstage.test/callback', + config: new ConfigReader({ + federationDomain: 'https://federationDomain.test', + clientId: 'clientId', + clientSecret: 'clientSecret', + }), + }); + + mswServer.use( + rest.get( + 'https://federationDomain.test/.well-known/openid-configuration', + (_req, res, ctx) => + res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json(issuerMetadata), + ), + ), + ); + + const response = await pinnipedAuthenticator.authenticate( + handlerRequest, + authCtxCreatedWhileSupervisorUnavailable, + ); + expect(response.session.accessToken).toEqual('accessToken'); + }); + + it('caches oidc metadata after a success', async () => { + let supervisorCalls: number = 1; + + mswServer.use( + rest.get( + 'https://federationDomain.test/.well-known/openid-configuration', + (_req, res, ctx) => { + supervisorCalls += 1; + return res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json(issuerMetadata), + ); + }, + ), + ); + + await pinnipedAuthenticator.authenticate(handlerRequest, authCtx); + + await pinnipedAuthenticator.authenticate( + { + req: { + method: 'GET', + url: `https://test?code=authorization_code&state=${encodeOAuthState( + oauthState, + )}`, + session: { + 'oidc:pinniped.test': { + state: encodeOAuthState(oauthState), + }, + }, + } as unknown as express.Request, + }, + authCtx, + ); + + expect(supervisorCalls).toEqual(1); + }); + + it('refreshes oidc metadata when current one in cache expires', async () => { + let supervisorCalls: number = 0; + const fixedTime = DateTime.local(); + jest.spyOn(DateTime, 'local').mockImplementation(() => fixedTime); + + mswServer.use( + rest.get( + 'https://federationDomain.test/.well-known/openid-configuration', + (_req, res, ctx) => { + supervisorCalls += 1; + return res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json(issuerMetadata), + ); + }, + ), + ); + + authCtx = pinnipedAuthenticator.initialize({ + callbackUrl: 'https://backstage.test/callback', + config: new ConfigReader({ + federationDomain: 'https://federationDomain.test', + clientId: 'clientId', + clientSecret: 'clientSecret', + }), + }); + + await pinnipedAuthenticator.authenticate(handlerRequest, authCtx); + + jest + .spyOn(DateTime, 'local') + .mockImplementation(() => fixedTime.plus({ seconds: 60000 })); + + await pinnipedAuthenticator.authenticate( + { + req: { + method: 'GET', + url: `https://test?code=authorization_code&state=${encodeOAuthState( + oauthState, + )}`, + session: { + 'oidc:pinniped.test': { + state: encodeOAuthState(oauthState), + }, + }, + } as unknown as express.Request, + }, + authCtx, + ); + + expect(supervisorCalls).toEqual(2); + }); }); describe('#refresh', () => { @@ -476,7 +712,7 @@ describe('pinnipedAuthenticator', () => { it('gets new refresh token', async () => { const refreshResponse = await pinnipedAuthenticator.refresh( refreshRequest, - implementation, + authCtx, ); expect(refreshResponse.session.refreshToken).toBe('refreshToken'); @@ -485,7 +721,7 @@ describe('pinnipedAuthenticator', () => { it('gets access token', async () => { const refreshResponse = await pinnipedAuthenticator.refresh( refreshRequest, - implementation, + authCtx, ); expect(refreshResponse.session.accessToken).toBe('accessToken'); @@ -494,10 +730,100 @@ describe('pinnipedAuthenticator', () => { it('gets id token', async () => { const refreshResponse = await pinnipedAuthenticator.refresh( refreshRequest, - implementation, + authCtx, ); expect(refreshResponse.session.idToken).toBe(idToken); }); + + it('refreshes oidc metadata after a failed fetch', async () => { + mswServer.use( + rest.get( + 'https://federationDomain.test/.well-known/openid-configuration', + (_req, res, _ctx) => res.networkError('Timeout'), + ), + ); + + const authCtxCreatedWhileSupervisorUnavailable = + pinnipedAuthenticator.initialize({ + callbackUrl: 'https://backstage.test/callback', + config: new ConfigReader({ + federationDomain: 'https://federationDomain.test', + clientId: 'clientId', + clientSecret: 'clientSecret', + }), + }); + + mswServer.use( + rest.get( + 'https://federationDomain.test/.well-known/openid-configuration', + (_req, res, ctx) => + res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json(issuerMetadata), + ), + ), + ); + + const response = await pinnipedAuthenticator.refresh( + refreshRequest, + authCtxCreatedWhileSupervisorUnavailable, + ); + expect(response.session.accessToken).toEqual('accessToken'); + }); + + it('caches oidc metadata after a success', async () => { + let supervisorCalls: number = 1; + + mswServer.use( + rest.get( + 'https://federationDomain.test/.well-known/openid-configuration', + (_req, res, ctx) => { + supervisorCalls += 1; + return res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json(issuerMetadata), + ); + }, + ), + ); + + await pinnipedAuthenticator.refresh(refreshRequest, authCtx); + await pinnipedAuthenticator.refresh(refreshRequest, authCtx); + + expect(supervisorCalls).toEqual(1); + }); + + it('refreshes oidc metadata when current one in cache expires', async () => { + let supervisorCalls: number = 1; + const fixedTime = DateTime.local(); + jest.spyOn(DateTime, 'local').mockImplementation(() => fixedTime); + + mswServer.use( + rest.get( + 'https://federationDomain.test/.well-known/openid-configuration', + (_req, res, ctx) => { + supervisorCalls += 1; + return res( + ctx.status(200), + ctx.set('Content-Type', 'application/json'), + ctx.json(issuerMetadata), + ); + }, + ), + ); + + await pinnipedAuthenticator.refresh(refreshRequest, authCtx); + + jest + .spyOn(DateTime, 'local') + .mockImplementation(() => fixedTime.plus({ seconds: 60000 })); + + await pinnipedAuthenticator.refresh(refreshRequest, authCtx); + + expect(supervisorCalls).toEqual(2); + }); }); }); diff --git a/plugins/auth-backend-module-pinniped-provider/src/authenticator.ts b/plugins/auth-backend-module-pinniped-provider/src/authenticator.ts index 83c4204ad0..e07eaba759 100644 --- a/plugins/auth-backend-module-pinniped-provider/src/authenticator.ts +++ b/plugins/auth-backend-module-pinniped-provider/src/authenticator.ts @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { Config } from '@backstage/config'; import { PassportDoneCallback } from '@backstage/plugin-auth-node'; import { createOAuthAuthenticator, @@ -24,7 +25,9 @@ import { Issuer, TokenSet, Strategy as OidcStrategy, + BaseClient, } from 'openid-client'; +import { DateTime } from 'luxon'; const rfc8693TokenExchange = async ({ subject_token, @@ -53,22 +56,78 @@ const rfc8693TokenExchange = async ({ }); }; +const OIDC_METADATA_TTL_SECONDS = 3600; + /** @public */ -export const pinnipedAuthenticator = createOAuthAuthenticator({ - defaultProfileTransform: async (_r, _c) => ({ profile: {} }), - async initialize({ callbackUrl, config }) { +export class PinnipedStrategyCache { + private readonly callbackUrl: string; + private readonly config: Config; + private strategyPromise: Promise<{ + providerStrategy: OidcStrategy<{ tokenset: TokenSet }, BaseClient>; + client: BaseClient; + }>; + + private cachedPromise?: Promise<{ + providerStrategy: OidcStrategy<{ tokenset: TokenSet }, BaseClient>; + client: BaseClient; + }>; + private cachedPromiseExpiry?: Date; + + constructor(callbackUrl: string, config: Config) { + this.callbackUrl = callbackUrl; + this.config = config; + this.strategyPromise = this.buildStrategy(); + } + + public async getStrategy(): Promise<{ + providerStrategy: OidcStrategy<{ tokenset: TokenSet }, BaseClient>; + client: BaseClient; + }> { + if (this.cachedPromise) { + if ( + this.cachedPromiseExpiry && + DateTime.fromJSDate(this.cachedPromiseExpiry) > DateTime.local() + ) { + return this.cachedPromise; + } + // cachedPromise has expired, remove promise from cache and regenerate strategy + this.strategyPromise = this.buildStrategy(); + delete this.cachedPromise; + } + + try { + // if strategy is generated successfully, save it to cache + await this.strategyPromise; + this.cachedPromise = this.strategyPromise; + this.cachedPromiseExpiry = DateTime.utc() + .plus({ seconds: OIDC_METADATA_TTL_SECONDS }) + .toJSDate(); + } catch (error) { + // if we fail to generate a strategy, retry and overwrite strategy + this.strategyPromise = this.buildStrategy(); + delete this.cachedPromise; + delete this.cachedPromiseExpiry; + } + + return this.strategyPromise; + } + + private async buildStrategy(): Promise<{ + providerStrategy: OidcStrategy<{ tokenset: TokenSet }, BaseClient>; + client: BaseClient; + }> { const issuer = await Issuer.discover( - `${config.getString( + `${this.config.getString( 'federationDomain', )}/.well-known/openid-configuration`, ); const client = new issuer.Client({ - access_type: 'offline', // this option must be passed to provider to receive a refresh token - client_id: config.getString('clientId'), - client_secret: config.getString('clientSecret'), - redirect_uris: [callbackUrl], + access_type: 'offline', + client_id: this.config.getString('clientId'), + client_secret: this.config.getString('clientSecret'), + redirect_uris: [this.callbackUrl], response_types: ['code'], - scope: config.getOptionalString('scope') || '', + scope: this.config.getOptionalString('scope') || '', id_token_signed_response_alg: 'ES256', }); const providerStrategy = new OidcStrategy( @@ -88,12 +147,18 @@ export const pinnipedAuthenticator = createOAuthAuthenticator({ done(undefined, { tokenset }, {}); }, ); - return { providerStrategy, client }; - }, + } +} - async start(input, ctx) { - const { providerStrategy } = await ctx; +/** @public */ +export const pinnipedAuthenticator = createOAuthAuthenticator({ + defaultProfileTransform: async (_r, _c) => ({ profile: {} }), + initialize({ callbackUrl, config }) { + return new PinnipedStrategyCache(callbackUrl, config); + }, + async start(input, ctx): Promise<{ url: string; status?: number }> { + const { providerStrategy } = await ctx.getStrategy(); const stringifiedAudience = input.req.query?.audience as string; const decodedState = decodeOAuthState(input.state); const state = { ...decodedState, audience: stringifiedAudience }; @@ -117,7 +182,7 @@ export const pinnipedAuthenticator = createOAuthAuthenticator({ }, async authenticate(input, ctx) { - const { providerStrategy } = await ctx; + const { providerStrategy } = await ctx.getStrategy(); const { req } = input; const { searchParams } = new URL(req.url, 'https://pinniped.com'); const stateParam = searchParams.get('state'); @@ -132,7 +197,7 @@ export const pinnipedAuthenticator = createOAuthAuthenticator({ ? rfc8693TokenExchange({ subject_token: user.tokenset.access_token, target_audience: audience, - ctx, + ctx: ctx.getStrategy(), }).catch(err => reject( new Error( @@ -172,7 +237,7 @@ export const pinnipedAuthenticator = createOAuthAuthenticator({ }, async refresh(input, ctx) { - const { client } = await ctx; + const { client } = await ctx.getStrategy(); const tokenset = await client.refresh(input.refreshToken); return new Promise((resolve, reject) => { diff --git a/plugins/auth-backend-module-pinniped-provider/src/index.ts b/plugins/auth-backend-module-pinniped-provider/src/index.ts index 9a2ca6727e..df4cd58603 100644 --- a/plugins/auth-backend-module-pinniped-provider/src/index.ts +++ b/plugins/auth-backend-module-pinniped-provider/src/index.ts @@ -20,5 +20,5 @@ * @packageDocumentation */ -export { pinnipedAuthenticator } from './authenticator'; +export { pinnipedAuthenticator, PinnipedStrategyCache } from './authenticator'; export { authModulePinnipedProvider } from './module'; diff --git a/plugins/auth-backend-module-pinniped-provider/src/module.test.ts b/plugins/auth-backend-module-pinniped-provider/src/module.test.ts index ed285cff86..a5c8fb4599 100644 --- a/plugins/auth-backend-module-pinniped-provider/src/module.test.ts +++ b/plugins/auth-backend-module-pinniped-provider/src/module.test.ts @@ -13,30 +13,21 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { setupRequestMockHandlers } from '@backstage/backend-test-utils'; -import request from 'supertest'; -import { setupServer } from 'msw/node'; -import { rest } from 'msw'; -import { Server } from 'http'; -import express from 'express'; -import cookieParser from 'cookie-parser'; -import session from 'express-session'; -import passport from 'passport'; -import { AddressInfo } from 'net'; import { - AuthProviderRouteHandlers, - createOAuthRouteHandlers, -} from '@backstage/plugin-auth-node'; -import Router from 'express-promise-router'; -import { pinnipedAuthenticator } from './authenticator'; -import { ConfigReader } from '@backstage/config'; + mockServices, + setupRequestMockHandlers, + startTestBackend, +} from '@backstage/backend-test-utils'; +import { Server } from 'http'; import { JWK, SignJWT, exportJWK, generateKeyPair } from 'jose'; +import { rest } from 'msw'; +import { setupServer } from 'msw/node'; +import request from 'supertest'; +import { authModulePinnipedProvider } from './module'; describe('authModulePinnipedProvider', () => { - let app: express.Express; - let backstageServer: Server; - let appUrl: string; - let providerRouteHandler: AuthProviderRouteHandlers; + let server: Server; + let port: number; let idToken: string; let publicKey: JWK; @@ -151,73 +142,38 @@ describe('authModulePinnipedProvider', () => { }), ); - const secret = 'secret'; - app = express() - .use(cookieParser(secret)) - .use( - session({ - secret, - saveUninitialized: false, - resave: false, - cookie: { secure: false }, - }), - ) - .use(passport.initialize()) - .use(passport.session()); - await new Promise(resolve => { - backstageServer = app.listen(0, '0.0.0.0', () => { - appUrl = `http://127.0.0.1:${ - (backstageServer.address() as AddressInfo).port - }`; - resolve(null); - }); - }); - - mswServer.use(rest.all(`${appUrl}/*`, req => req.passthrough())); - - providerRouteHandler = createOAuthRouteHandlers({ - authenticator: pinnipedAuthenticator, - appUrl, - baseUrl: `${appUrl}/api/auth`, - isOriginAllowed: _ => true, - providerId: 'pinniped', - config: new ConfigReader({ - federationDomain: 'https://federationDomain.test', - clientId: 'clientId', - clientSecret: 'clientSecret', - }), - resolverContext: { - issueToken: async _ => ({ token: '' }), - findCatalogUser: async _ => ({ - entity: { - apiVersion: '', - kind: '', - metadata: { name: '' }, + const backend = await startTestBackend({ + features: [ + authModulePinnipedProvider, + import('@backstage/plugin-auth-backend'), + mockServices.rootConfig.factory({ + data: { + app: { baseUrl: 'http://localhost' }, + auth: { + session: { secret: 'test' }, + providers: { + pinniped: { + development: { + federationDomain: 'https://federationDomain.test', + clientId: 'clientId', + clientSecret: 'clientSecret', + }, + }, + }, + }, }, }), - signInWithCatalogUser: async _ => ({ token: '' }), - }, + ], }); - const router = Router(); - router - .use( - '/api/auth/pinniped/start', - providerRouteHandler.start.bind(providerRouteHandler), - ) - .use( - '/api/auth/pinniped/handler/frame', - providerRouteHandler.frameHandler.bind(providerRouteHandler), - ); - app.use(router); - }); + server = backend.server; + port = backend.server.port(); - afterEach(() => { - backstageServer.close(); + mswServer.use(rest.all(`http://*:${port}/*`, req => req.passthrough())); }); it('should start', async () => { - const agent = request.agent(backstageServer); + const agent = request.agent(server); const startResponse = await agent.get( `/api/auth/pinniped/start?env=development&audience=test_cluster`, ); @@ -230,15 +186,20 @@ describe('authModulePinnipedProvider', () => { // make /start request with audience parameter const startResponse = await agent.get( - `${appUrl}/api/auth/pinniped/start?env=development&audience=test_cluster`, + `http://localhost:${port}/api/auth/pinniped/start?env=development&audience=test_cluster`, ); - // follow redirect to authorization endpoint - const authorizationResponse = await agent.get( - startResponse.header.location, + + // Emulate user interaction with the Pinniped login page + const authResponse = await agent.get(startResponse.header.location); + expect(authResponse.status).toBe(302); + const callbackUrl = new URL(authResponse.header.location); + + // follow redirect from the login page back to the callback URL to the Backstage auth backend + const relativeCallbackUrl = String(callbackUrl).slice( + callbackUrl.origin.length, ); - // follow redirect to token_endpoint const handlerResponse = await agent.get( - authorizationResponse.header.location, + `http://localhost:${port}${relativeCallbackUrl}`, ); expect(handlerResponse.text).toContain( diff --git a/plugins/auth-backend-module-vmware-cloud-provider/.eslintrc.js b/plugins/auth-backend-module-vmware-cloud-provider/.eslintrc.js new file mode 100644 index 0000000000..e2a53a6ad2 --- /dev/null +++ b/plugins/auth-backend-module-vmware-cloud-provider/.eslintrc.js @@ -0,0 +1 @@ +module.exports = require('@backstage/cli/config/eslint-factory')(__dirname); diff --git a/plugins/auth-backend-module-vmware-cloud-provider/README.md b/plugins/auth-backend-module-vmware-cloud-provider/README.md new file mode 100644 index 0000000000..d06a0d84ab --- /dev/null +++ b/plugins/auth-backend-module-vmware-cloud-provider/README.md @@ -0,0 +1,7 @@ +# Auth Module: VMware Cloud Provider + +This module provides an VMware Cloud auth provider implementation for `@backstage/plugin-auth-backend`. + +## Links + +- [Backstage](https://backstage.io) diff --git a/plugins/auth-backend-module-vmware-cloud-provider/api-report.md b/plugins/auth-backend-module-vmware-cloud-provider/api-report.md new file mode 100644 index 0000000000..ff9e82dd45 --- /dev/null +++ b/plugins/auth-backend-module-vmware-cloud-provider/api-report.md @@ -0,0 +1,46 @@ +## API Report File for "@backstage/plugin-auth-backend-module-vmware-cloud-provider" + +> 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 { OAuthAuthenticator } from '@backstage/plugin-auth-node'; +import { OAuthAuthenticatorResult } from '@backstage/plugin-auth-node'; +import { PassportOAuthAuthenticatorHelper } from '@backstage/plugin-auth-node'; +import { PassportProfile } from '@backstage/plugin-auth-node'; +import { SignInResolverFactory } from '@backstage/plugin-auth-node'; +import { Strategy } from 'passport-oauth2'; + +// @public +const authModuleVmwareCloudProvider: () => BackendFeature; +export default authModuleVmwareCloudProvider; + +// @public +export const vmwareCloudAuthenticator: OAuthAuthenticator< + VMwareCloudAuthenticatorContext, + VMwarePassportProfile +>; + +// @public (undocumented) +export interface VMwareCloudAuthenticatorContext { + // (undocumented) + helper: PassportOAuthAuthenticatorHelper; + // (undocumented) + organizationId?: string; + // (undocumented) + providerStrategy: Strategy; +} + +// @public +export namespace vmwareCloudSignInResolvers { + const profileEmailMatchingUserEntityEmail: SignInResolverFactory< + OAuthAuthenticatorResult, + unknown + >; +} + +// @public (undocumented) +export type VMwarePassportProfile = PassportProfile & { + organizationId?: string; +}; +``` diff --git a/plugins/auth-backend-module-vmware-cloud-provider/catalog-info.yaml b/plugins/auth-backend-module-vmware-cloud-provider/catalog-info.yaml new file mode 100644 index 0000000000..d40b1e4308 --- /dev/null +++ b/plugins/auth-backend-module-vmware-cloud-provider/catalog-info.yaml @@ -0,0 +1,10 @@ +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: backstage-plugin-auth-backend-module-vmware-cloud-provider + title: '@backstage/plugin-auth-backend-module-vmware-cloud-provider' + description: The vmware-cloud-provider backend module for the auth plugin. +spec: + lifecycle: experimental + type: backstage-backend-plugin-module + owner: maintainers diff --git a/plugins/auth-backend-module-vmware-cloud-provider/config.d.ts b/plugins/auth-backend-module-vmware-cloud-provider/config.d.ts new file mode 100644 index 0000000000..10b3566899 --- /dev/null +++ b/plugins/auth-backend-module-vmware-cloud-provider/config.d.ts @@ -0,0 +1,31 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export interface Config { + auth?: { + providers?: { + /** @visibility frontend */ + vmwareCloudServices?: { + [authEnv: string]: { + clientId: string; + organizationId: string; + scope?: string; + consoleEndpoint?: string; + }; + }; + }; + }; +} diff --git a/plugins/auth-backend-module-vmware-cloud-provider/dev/index.ts b/plugins/auth-backend-module-vmware-cloud-provider/dev/index.ts new file mode 100644 index 0000000000..d3c18c1d48 --- /dev/null +++ b/plugins/auth-backend-module-vmware-cloud-provider/dev/index.ts @@ -0,0 +1,24 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { createBackend } from '@backstage/backend-defaults'; + +const backend = createBackend(); + +backend.add(import('@backstage/plugin-auth-backend')); +backend.add(import('../src')); + +backend.start(); diff --git a/plugins/auth-backend-module-vmware-cloud-provider/package.json b/plugins/auth-backend-module-vmware-cloud-provider/package.json new file mode 100644 index 0000000000..f48e69154b --- /dev/null +++ b/plugins/auth-backend-module-vmware-cloud-provider/package.json @@ -0,0 +1,47 @@ +{ + "name": "@backstage/plugin-auth-backend-module-vmware-cloud-provider", + "description": "The vmware-cloud-provider backend module for the auth plugin.", + "version": "0.0.0", + "main": "src/index.ts", + "types": "src/index.ts", + "license": "Apache-2.0", + "publishConfig": { + "access": "public", + "main": "dist/index.cjs.js", + "types": "dist/index.d.ts" + }, + "backstage": { + "role": "backend-plugin-module" + }, + "scripts": { + "start": "backstage-cli package start", + "build": "backstage-cli package build", + "lint": "backstage-cli package lint", + "test": "backstage-cli package test", + "clean": "backstage-cli package clean", + "prepack": "backstage-cli package prepack", + "postpack": "backstage-cli package postpack" + }, + "dependencies": { + "@backstage/backend-common": "workspace:^", + "@backstage/backend-plugin-api": "workspace:^", + "@backstage/catalog-model": "workspace:^", + "@backstage/plugin-auth-node": "workspace:^", + "@types/passport-oauth2": "^1.4.15", + "jose": "^4.6.0", + "passport-oauth2": "^1.6.1" + }, + "devDependencies": { + "@backstage/backend-defaults": "workspace:^", + "@backstage/backend-test-utils": "workspace:^", + "@backstage/cli": "workspace:^", + "@backstage/config": "workspace:^", + "@backstage/errors": "workspace:^", + "@backstage/plugin-auth-backend": "workspace:^", + "msw": "^2.0.8", + "supertest": "^6.3.3" + }, + "files": [ + "dist" + ] +} diff --git a/plugins/auth-backend-module-vmware-cloud-provider/src/authenticator.test.ts b/plugins/auth-backend-module-vmware-cloud-provider/src/authenticator.test.ts new file mode 100644 index 0000000000..f38ceeb462 --- /dev/null +++ b/plugins/auth-backend-module-vmware-cloud-provider/src/authenticator.test.ts @@ -0,0 +1,477 @@ +/* + * 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 { setupRequestMockHandlers } from '@backstage/backend-test-utils'; +import { ConfigReader } from '@backstage/config'; +import { + AuthResolverContext, + encodeOAuthState, + OAuthAuthenticatorAuthenticateInput, + OAuthAuthenticatorRefreshInput, + OAuthAuthenticatorStartInput, + OAuthState, +} from '@backstage/plugin-auth-node'; +import { SignJWT } from 'jose'; +import { http, HttpResponse } from 'msw'; +import { setupServer } from 'msw/node'; + +import { + vmwareCloudAuthenticator, + VMwareCloudAuthenticatorContext, +} from './authenticator'; + +jest.mock('uid2', () => jest.fn().mockReturnValue('sessionid')); + +describe('vmwareCloudAuthenticator', () => { + const server = setupServer(); + setupRequestMockHandlers(server); + + let oAuthState: OAuthState = { + nonce: 'nonce', + env: 'env', + }; + + const signInInfo: Record = { + given_name: 'Givenname', + family_name: 'Familyname', + context_name: 'orgId', + email: 'user@example.com', + }; + + let idToken: string; + + let authResponse: { + access_token: string; + refresh_token: string; + id_token: typeof idToken; + }; + + let fakeSession: Record; + let authenticatorCtx: VMwareCloudAuthenticatorContext; + + beforeAll(async () => { + idToken = await new SignJWT(signInInfo) + .setProtectedHeader({ alg: 'HS256' }) + .sign(Buffer.from('signing key')); + + authResponse = { + access_token: 'accessToken', + refresh_token: 'refreshToken', + id_token: idToken, + }; + }); + + beforeEach(() => { + server.use( + http.post( + 'https://console.cloud.vmware.com/csp/gateway/am/api/auth/token', + ({ request }) => + request.headers.get('Authorization') + ? HttpResponse.json(authResponse) + : HttpResponse.json(null, { status: 500 }), + ), + ); + + authenticatorCtx = vmwareCloudAuthenticator.initialize({ + callbackUrl: 'http://callbackUrl', + config: new ConfigReader({ + clientId: 'placeholderClientId', + organizationId: 'orgId', + }), + }); + }); + + describe('#initialize', () => { + it('fails when organizationId is not configured', () => { + return expect(() => + vmwareCloudAuthenticator.initialize({ + callbackUrl: 'http://callbackUrl', + config: new ConfigReader({ + clientId: 'placeholderClientId', + }), + }), + ).toThrow(`Missing required config value at 'organizationId'`); + }); + }); + + describe('#start', () => { + let startRequest: OAuthAuthenticatorStartInput; + + beforeEach(() => { + fakeSession = {}; + startRequest = { + state: encodeOAuthState(oAuthState), + req: { + query: {}, + session: fakeSession, + }, + } as OAuthAuthenticatorStartInput; + }); + + it('redirects to the Cloud Services Console consent page', async () => { + const startResponse = await vmwareCloudAuthenticator.start( + startRequest, + authenticatorCtx, + ); + const url = new URL(startResponse.url); + + expect(url.protocol).toBe('https:'); + expect(url.hostname).toBe('console.cloud.vmware.com'); + expect(url.pathname).toBe('/csp/gateway/discovery'); + }); + + it('passes client ID from config', async () => { + const startResponse = await vmwareCloudAuthenticator.start( + startRequest, + authenticatorCtx, + ); + const { searchParams } = new URL(startResponse.url); + + expect(searchParams.get('client_id')).toBe('placeholderClientId'); + }); + + it('passes organizationId from config', async () => { + const startResponse = await vmwareCloudAuthenticator.start( + startRequest, + authenticatorCtx, + ); + const { searchParams } = new URL(startResponse.url); + + expect(searchParams.get('orgId')).toBe('orgId'); + }); + + it('passes callback URL', async () => { + const startResponse = await vmwareCloudAuthenticator.start( + startRequest, + authenticatorCtx, + ); + const { searchParams } = new URL(startResponse.url); + + expect(searchParams.get('redirect_uri')).toBe('http://callbackUrl'); + }); + + it('requests scopes for ID and refresh token', async () => { + const startResponse = await vmwareCloudAuthenticator.start( + startRequest, + authenticatorCtx, + ); + const { searchParams } = new URL(startResponse.url); + + expect(searchParams.get('scope')).toBe('openid offline_access'); + }); + + it('generates PKCE challenge', async () => { + const startResponse = await vmwareCloudAuthenticator.start( + startRequest, + authenticatorCtx, + ); + const { searchParams } = new URL(startResponse.url); + + expect(searchParams.get('code_challenge_method')).toBe('S256'); + expect(searchParams.get('code_challenge')).not.toBeNull(); + }); + + it('stores PKCE verifier in session', async () => { + await vmwareCloudAuthenticator.start(startRequest, authenticatorCtx); + + expect( + fakeSession['oauth2:console.cloud.vmware.com'].state.code_verifier, + ).toBeDefined(); + }); + + it('fails when request has no session', () => { + return expect( + vmwareCloudAuthenticator.start( + { + state: encodeOAuthState(oAuthState), + req: { + query: {}, + }, + } as OAuthAuthenticatorStartInput, + authenticatorCtx, + ), + ).rejects.toThrow('requires session support'); + }); + + it('adds session ID handle to state param', async () => { + const startResponse = await vmwareCloudAuthenticator.start( + startRequest, + authenticatorCtx, + ); + const stateParam = new URL(startResponse.url).searchParams.get('state'); + + const state = Object.fromEntries( + new URLSearchParams(Buffer.from(stateParam!, 'hex').toString('utf-8')), + ); + + const { handle } = fakeSession['oauth2:console.cloud.vmware.com'].state; + expect(state.handle).toBe(handle); + }); + }); + + describe('#authenticate', () => { + let resolverContext: jest.Mocked; + let authenticateRequest: OAuthAuthenticatorAuthenticateInput; + + beforeEach(() => { + resolverContext = { + issueToken: jest.fn().mockResolvedValue({ + token: 'defaultBackstageToken', + }), + findCatalogUser: jest.fn(), + signInWithCatalogUser: jest.fn().mockResolvedValue({ + token: 'backstageToken', + }), + }; + + oAuthState = { + code_verifier: 'foo', + handle: 'sessionid', + nonce: 'nonce', + env: 'development', + } as OAuthState; + + fakeSession = { + ['oauth2:console.cloud.vmware.com']: { + state: oAuthState, + }, + }; + + authenticateRequest = { + req: { + query: { + code: 'foo', + state: encodeOAuthState(oAuthState), + } as unknown, + session: fakeSession, + }, + } as OAuthAuthenticatorAuthenticateInput; + }); + + it('stores refresh token in cookie', async () => { + const { + session: { refreshToken }, + } = await vmwareCloudAuthenticator.authenticate( + authenticateRequest, + authenticatorCtx, + ); + + expect(refreshToken).toBe('refreshToken'); + }); + + it('responds with ID token', async () => { + const { session } = await vmwareCloudAuthenticator.authenticate( + authenticateRequest, + authenticatorCtx, + ); + + expect(session.idToken).toBe(idToken); + }); + + it('default transform decodes ID token', async () => { + const result = await vmwareCloudAuthenticator.authenticate( + authenticateRequest, + authenticatorCtx, + ); + + const { profile } = + await vmwareCloudAuthenticator.defaultProfileTransform( + result, + resolverContext, + ); + + expect(profile).toStrictEqual({ + email: signInInfo.email, + displayName: `${signInInfo.given_name} ${signInInfo.family_name}`, + }); + }); + + it('default transform fails if claims are missing', async () => { + authenticatorCtx = vmwareCloudAuthenticator.initialize({ + callbackUrl: 'http://callbackUrl', + config: new ConfigReader({ + clientId: 'placeholderClientId', + organizationId: 'myOrgId', + }), + }); + + const result = await vmwareCloudAuthenticator.authenticate( + authenticateRequest, + authenticatorCtx, + ); + + return expect( + vmwareCloudAuthenticator.defaultProfileTransform( + result, + resolverContext, + ), + ).rejects.toThrow('ID token organizationId mismatch'); + }); + + it('default transform fails if organizationId mismatch', async () => { + const inadequateIdToken: string = await new SignJWT({ sub: 'unusual' }) + .setProtectedHeader({ alg: 'HS256' }) + .sign(Buffer.from('signing key')); + + server.use( + http.post( + 'https://console.cloud.vmware.com/csp/gateway/am/api/auth/token', + () => + HttpResponse.json({ + access_token: 'accessToken', + id_token: inadequateIdToken, + }), + ), + ); + + const result = await vmwareCloudAuthenticator.authenticate( + authenticateRequest, + authenticatorCtx, + ); + + return expect( + vmwareCloudAuthenticator.defaultProfileTransform( + result, + resolverContext, + ), + ).rejects.toThrow( + 'ID token missing required claims: email, given_name, family_name', + ); + }); + + it('fails when request has no session', () => { + return expect( + vmwareCloudAuthenticator.authenticate( + { + req: { + query: {}, + }, + } as OAuthAuthenticatorStartInput, + authenticatorCtx, + ), + ).rejects.toThrow('requires session support'); + }); + + it('fails when request has no authorization code', () => { + return expect( + vmwareCloudAuthenticator.authenticate( + { + req: { + query: {}, + session: fakeSession, + }, + } as OAuthAuthenticatorStartInput, + authenticatorCtx, + ), + ).rejects.toThrow('Unexpected redirect'); + }); + }); + + describe('integration between #start and #authenticate', () => { + beforeEach(() => { + fakeSession = { + ['oauth2:console.cloud.vmware.com']: { + state: oAuthState, + }, + }; + }); + + it('state param is compatible', async () => { + const startResponse = await vmwareCloudAuthenticator.start( + { + req: { + query: {}, + session: {}, + }, + state: encodeOAuthState(oAuthState), + } as OAuthAuthenticatorStartInput, + authenticatorCtx, + ); + const { searchParams } = new URL(startResponse.url); + const { session } = await vmwareCloudAuthenticator.authenticate( + { + req: { + query: { + code: 'authorization_code', + state: searchParams.get('state'), + } as unknown, + session: fakeSession, + }, + } as OAuthAuthenticatorAuthenticateInput, + authenticatorCtx, + ); + + expect(session).toBeDefined(); + expect(session.idToken).toBe(idToken); + }); + }); + + describe('#refresh', () => { + let refreshRequest: OAuthAuthenticatorRefreshInput; + let resolverContext: jest.Mocked; + + beforeEach(() => { + resolverContext = { + issueToken: jest.fn().mockResolvedValue({ + token: 'defaultBackstageToken', + }), + findCatalogUser: jest.fn(), + signInWithCatalogUser: jest.fn().mockResolvedValue({ + token: 'backstageToken', + }), + }; + + refreshRequest = { + req: { + query: { + code: 'foo', + state: 'sessionid', + } as unknown, + session: fakeSession, + }, + } as OAuthAuthenticatorRefreshInput; + }); + + it('gets new refresh token', async () => { + const { + session: { refreshToken }, + } = await vmwareCloudAuthenticator.refresh( + refreshRequest, + authenticatorCtx, + ); + + expect(refreshToken).toBe('refreshToken'); + }); + + it('default transform decodes ID token', async () => { + const result = await vmwareCloudAuthenticator.refresh( + refreshRequest, + authenticatorCtx, + ); + + const { profile } = + await vmwareCloudAuthenticator.defaultProfileTransform( + result, + resolverContext, + ); + + expect(profile).toStrictEqual({ + email: signInInfo.email, + displayName: `${signInInfo.given_name} ${signInInfo.family_name}`, + }); + }); + }); +}); diff --git a/plugins/auth-backend-module-vmware-cloud-provider/src/authenticator.ts b/plugins/auth-backend-module-vmware-cloud-provider/src/authenticator.ts new file mode 100644 index 0000000000..4db4836f13 --- /dev/null +++ b/plugins/auth-backend-module-vmware-cloud-provider/src/authenticator.ts @@ -0,0 +1,238 @@ +/* + * 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 { + createOAuthAuthenticator, + decodeOAuthState, + encodeOAuthState, + OAuthState, + PassportOAuthAuthenticatorHelper, + PassportOAuthDoneCallback, + PassportProfile, +} from '@backstage/plugin-auth-node'; +import { decodeJwt } from 'jose'; +import { + Metadata, + StateStoreStoreCallback, + StateStoreVerifyCallback, + Strategy as OAuth2Strategy, +} from 'passport-oauth2'; + +/** @public */ +export interface VMwareCloudAuthenticatorContext { + organizationId?: string; + providerStrategy: OAuth2Strategy; + helper: PassportOAuthAuthenticatorHelper; +} + +/** @public */ +export type VMwarePassportProfile = PassportProfile & { + organizationId?: string; +}; + +/** + * VMware Cloud Authenticator to be used by `createOAuthProviderFactory` + * + * @public + */ +export const vmwareCloudAuthenticator = createOAuthAuthenticator< + VMwareCloudAuthenticatorContext, + VMwarePassportProfile +>({ + defaultProfileTransform: async input => { + if (!input.session.idToken) { + throw new Error( + `Failed to parse id token and get profile info, missing token from session`, + ); + } + + const vmwareClaims = ['email', 'given_name', 'family_name', 'context_name']; + + const identity = decodeJwt(input.session.idToken); + const missingClaims = vmwareClaims.filter(key => !(key in identity)); + + if (missingClaims.length > 0) { + throw new Error( + `ID token missing required claims: ${missingClaims.join(', ')}`, + ); + } + + const typeMismatchClaims = vmwareClaims.filter( + key => typeof identity[key] !== 'string', + ); + + if (typeMismatchClaims.length > 0) { + throw new Error( + `ID token claims type mismatch: ${typeMismatchClaims.join(', ')}`, + ); + } + + // These claims were checked for presence & type + const { email, given_name, family_name, context_name } = identity as Record< + string, + string + >; + + if (context_name !== input.fullProfile.organizationId) { + throw new Error(`ID token organizationId mismatch`); + } + + return { + profile: { + displayName: `${given_name} ${family_name}`, + email, + }, + }; + }, + initialize({ callbackUrl, config }) { + const consoleEndpoint = + config.getOptionalString('consoleEndpoint') ?? + 'https://console.cloud.vmware.com'; + const organizationId = config.getString('organizationId'); + + const clientId = config.getString('clientId'); + const clientSecret = ''; + const authorizationUrl = `${consoleEndpoint}/csp/gateway/discovery`; + const tokenUrl = `${consoleEndpoint}/csp/gateway/am/api/auth/token`; + const scope = config.getOptionalString('scope') ?? 'openid offline_access'; + + const providerStrategy = new OAuth2Strategy( + { + clientID: clientId, + clientSecret: clientSecret, + callbackURL: callbackUrl, + authorizationURL: authorizationUrl, + tokenURL: tokenUrl, + passReqToCallback: false, + pkce: true, + state: true, + scope: scope, + customHeaders: { + Authorization: `Basic ${encodeClientCredentials( + clientId, + clientSecret, + )}`, + }, + }, + ( + accessToken: any, + refreshToken: any, + params: any, + fullProfile: PassportProfile, + done: PassportOAuthDoneCallback, + ) => { + done(undefined, { fullProfile, params, accessToken }, { refreshToken }); + }, + ); + + // Both VMware & OAuth2Strategy fight over control of the state when PKCE is on, thus this hack + const pkceSessionStore = Object.create( + (providerStrategy as any)._stateStore, + ); + (providerStrategy as any)._stateStore = { + verify(req: Request, state: string, callback: StateStoreVerifyCallback) { + pkceSessionStore.verify( + req, + (decodeOAuthState(state) as any).handle, + callback, + ); + }, + store( + req: Request & { + scope: string; + state: OAuthState; + }, + verifier: string, + state: any, + meta: Metadata, + callback: StateStoreStoreCallback, + ) { + pkceSessionStore.store( + req, + verifier, + state, + meta, + (err: Error, handle: string) => { + callback( + err, + encodeOAuthState({ + handle, + ...state, + ...req.state, + } as OAuthState), + ); + }, + ); + }, + }; + + return { + organizationId, + providerStrategy, + helper: PassportOAuthAuthenticatorHelper.from(providerStrategy), + }; + }, + + async start(input, ctx) { + return new Promise((resolve, reject) => { + const strategy: OAuth2Strategy = Object.create(ctx.providerStrategy); + + strategy.redirect = (url: string, status?: number) => { + const parsed = new URL(url); + if (ctx.organizationId) { + parsed.searchParams.set('orgId', ctx.organizationId); + } + resolve({ url: parsed.toString(), status: status ?? undefined }); + }; + strategy.error = (error: Error) => { + reject(error); + }; + strategy.authenticate(input.req, { + scope: input.scope, + state: decodeOAuthState(input.state), + accessType: 'offline', + prompt: 'consent', + }); + }); + }, + + async authenticate(input, ctx) { + return ctx.helper.authenticate(input).then(result => ({ + ...result, + fullProfile: { + ...result.fullProfile, + organizationId: ctx.organizationId, + } as VMwarePassportProfile, + })); + }, + + async refresh(input, ctx) { + return ctx.helper.refresh(input).then(result => ({ + ...result, + fullProfile: { + ...result.fullProfile, + organizationId: ctx.organizationId, + } as VMwarePassportProfile, + })); + }, +}); + +/** @private */ +function encodeClientCredentials( + clientID: string, + clientSecret: string, +): string { + return Buffer.from(`${clientID}:${clientSecret}`).toString('base64'); +} diff --git a/plugins/auth-backend-module-vmware-cloud-provider/src/index.ts b/plugins/auth-backend-module-vmware-cloud-provider/src/index.ts new file mode 100644 index 0000000000..1d7bb14b63 --- /dev/null +++ b/plugins/auth-backend-module-vmware-cloud-provider/src/index.ts @@ -0,0 +1,29 @@ +/* + * 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. + */ + +/** + * The vmware-cloud-provider backend module for the auth plugin. + * + * @packageDocumentation + */ + +export { + vmwareCloudAuthenticator, + type VMwareCloudAuthenticatorContext, + type VMwarePassportProfile, +} from './authenticator'; +export { authModuleVmwareCloudProvider as default } from './module'; +export { vmwareCloudSignInResolvers } from './resolvers'; diff --git a/plugins/auth-backend-module-vmware-cloud-provider/src/module.test.ts b/plugins/auth-backend-module-vmware-cloud-provider/src/module.test.ts new file mode 100644 index 0000000000..9bed931da1 --- /dev/null +++ b/plugins/auth-backend-module-vmware-cloud-provider/src/module.test.ts @@ -0,0 +1,90 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { mockServices, startTestBackend } from '@backstage/backend-test-utils'; +import { decodeOAuthState } from '@backstage/plugin-auth-node'; +import request from 'supertest'; + +import { Config } from '../config'; +import { authModuleVmwareCloudProvider } from './module'; + +describe('authModuleVmwareCloudProvider', () => { + it('should start', async () => { + const backend = await startTestBackend({ + features: [ + import('@backstage/plugin-auth-backend'), + authModuleVmwareCloudProvider, + mockServices.rootConfig.factory({ + data: { + app: { + baseUrl: 'http://localhost:3000', + }, + auth: { + session: { secret: 'test' }, + providers: { + vmwareCloudServices: { + development: { + clientId: 'placeholderClientId', + organizationId: 'orgId', + }, + }, + }, + } as Config['auth'], + }, + }), + ], + }); + + const { server } = backend; + + const agent = request.agent(server); + + const res = await agent.get( + '/api/auth/vmwareCloudServices/start?env=development', + ); + + expect(res.status).toEqual(302); + + const nonceCookie = agent.jar.getCookie('vmwareCloudServices-nonce', { + domain: 'localhost', + path: '/api/auth/vmwareCloudServices/handler', + script: false, + secure: false, + }); + expect(nonceCookie).toBeDefined(); + + const startUrl = new URL(res.get('location')); + expect(startUrl.origin).toBe('https://console.cloud.vmware.com'); + expect(startUrl.pathname).toBe('/csp/gateway/discovery'); + expect(Object.fromEntries(startUrl.searchParams)).toEqual({ + response_type: 'code', + client_id: 'placeholderClientId', + redirect_uri: `http://localhost:${server.port()}/api/auth/vmwareCloudServices/handler/frame`, + code_challenge: expect.any(String), + state: expect.any(String), + scope: 'openid offline_access', + orgId: 'orgId', + code_challenge_method: 'S256', + }); + + expect(decodeOAuthState(startUrl.searchParams.get('state')!)).toEqual({ + env: 'development', + handle: expect.any(String), + nonce: decodeURIComponent(nonceCookie.value), + }); + + backend.stop(); + }); +}); diff --git a/plugins/auth-backend-module-vmware-cloud-provider/src/module.ts b/plugins/auth-backend-module-vmware-cloud-provider/src/module.ts new file mode 100644 index 0000000000..5ef79654a3 --- /dev/null +++ b/plugins/auth-backend-module-vmware-cloud-provider/src/module.ts @@ -0,0 +1,51 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { createBackendModule } from '@backstage/backend-plugin-api'; +import { + authProvidersExtensionPoint, + commonSignInResolvers, + createOAuthProviderFactory, +} from '@backstage/plugin-auth-node'; + +import { vmwareCloudAuthenticator } from './authenticator'; +import { vmwareCloudSignInResolvers } from './resolvers'; + +/** + * VMware Cloud Provider backend module for the auth plugin + * + * @public + */ +export const authModuleVmwareCloudProvider = createBackendModule({ + pluginId: 'auth', + moduleId: 'vmware-cloud-provider', + register(reg) { + reg.registerInit({ + deps: { providers: authProvidersExtensionPoint }, + async init({ providers }) { + providers.registerProvider({ + providerId: 'vmwareCloudServices', + factory: createOAuthProviderFactory({ + authenticator: vmwareCloudAuthenticator, + signInResolverFactories: { + ...vmwareCloudSignInResolvers, + ...commonSignInResolvers, + }, + }), + }); + }, + }); + }, +}); diff --git a/plugins/auth-backend-module-vmware-cloud-provider/src/resolvers.test.ts b/plugins/auth-backend-module-vmware-cloud-provider/src/resolvers.test.ts new file mode 100644 index 0000000000..250fd430c7 --- /dev/null +++ b/plugins/auth-backend-module-vmware-cloud-provider/src/resolvers.test.ts @@ -0,0 +1,90 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { NotFoundError } from '@backstage/errors'; +import { + AuthResolverContext, + OAuthAuthenticatorResult, + PassportProfile, + SignInInfo, + SignInResolver, +} from '@backstage/plugin-auth-node'; + +import { vmwareCloudSignInResolvers } from './resolvers'; + +describe('vmwareCloudResolver', () => { + let resolverContext: jest.Mocked; + let signInInfo: SignInInfo>; + let signInResolver: SignInResolver>; + + beforeEach(() => { + resolverContext = { + issueToken: jest.fn().mockResolvedValue({ + token: 'defaultBackstageToken', + }), + findCatalogUser: jest.fn(), + signInWithCatalogUser: jest.fn().mockResolvedValue({ + token: 'backstageToken', + }), + }; + + signInInfo = { + result: {} as any, // Resolver doesn't care about the result object + profile: { + displayName: 'TestName', + email: 'user@example.com', + }, + }; + + signInResolver = + vmwareCloudSignInResolvers.profileEmailMatchingUserEntityEmail(); + }); + + it('looks up backstage identity by email', async () => { + const backstageIdentity = await signInResolver(signInInfo, resolverContext); + + expect(backstageIdentity.token).toBe('backstageToken'); + expect(resolverContext.signInWithCatalogUser).toHaveBeenCalledWith({ + filter: { + 'spec.profile.email': 'user@example.com', + }, + }); + }); + + it('returns "fake" backstage identity when no entity matches', async () => { + resolverContext.signInWithCatalogUser.mockRejectedValue( + new NotFoundError('User not found'), + ); + + const backstageIdentity = await signInResolver(signInInfo, resolverContext); + + expect(backstageIdentity.token).toBe('defaultBackstageToken'); + expect(resolverContext.issueToken).toHaveBeenCalledWith({ + claims: { + sub: 'user:default/user@example.com', + ent: ['user:default/user@example.com'], + }, + }); + }); + + it('fails when resolver context throws other error', () => { + const error = new Error('bizarre'); + resolverContext.signInWithCatalogUser.mockRejectedValue(error); + + return expect(signInResolver(signInInfo, resolverContext)).rejects.toThrow( + error, + ); + }); +}); diff --git a/plugins/auth-backend-module-vmware-cloud-provider/src/resolvers.ts b/plugins/auth-backend-module-vmware-cloud-provider/src/resolvers.ts new file mode 100644 index 0000000000..2b3a78842b --- /dev/null +++ b/plugins/auth-backend-module-vmware-cloud-provider/src/resolvers.ts @@ -0,0 +1,75 @@ +/* + * 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 { stringifyEntityRef } from '@backstage/catalog-model'; +import { + createSignInResolverFactory, + OAuthAuthenticatorResult, + PassportProfile, + SignInInfo, +} from '@backstage/plugin-auth-node'; + +/** + * Available sign-in resolvers for the VMware Cloud auth provider. + * + * @public + */ +export namespace vmwareCloudSignInResolvers { + /** + * Looks up the user by matching their profile email to the entity's profile email. + * If that fails, sign in the user without associating with a catalog user. + */ + export const profileEmailMatchingUserEntityEmail = + createSignInResolverFactory({ + create() { + return async ( + info: SignInInfo>, + ctx, + ) => { + const email = info.profile.email; + + if (!email) { + throw new Error( + 'VMware login failed, user profile does not contain an email', + ); + } + + const userEntityRef = stringifyEntityRef({ + kind: 'User', + name: email, + }); + + try { + // we await here so that signInWithCatalogUser throws in the current `try` + return await ctx.signInWithCatalogUser({ + filter: { + 'spec.profile.email': email, + }, + }); + } catch (e) { + if (e.name !== 'NotFoundError') { + throw e; + } + return ctx.issueToken({ + claims: { + sub: userEntityRef, + ent: [userEntityRef], + }, + }); + } + }; + }, + }); +} diff --git a/plugins/auth-backend/CHANGELOG.md b/plugins/auth-backend/CHANGELOG.md index 57c9c1aac2..2ab0a71b77 100644 --- a/plugins/auth-backend/CHANGELOG.md +++ b/plugins/auth-backend/CHANGELOG.md @@ -1,5 +1,57 @@ # @backstage/plugin-auth-backend +## 0.20.1-next.0 + +### Patch Changes + +- 2a5891e816: Migrate the atlassian auth provider to be implemented using the new `@backstage/plugin-auth-backend-module-atlassian-provider` module +- e1c189b524: The Okta provider implementation is moved to the new module +- Updated dependencies + - @backstage/plugin-auth-backend-module-atlassian-provider@0.1.0-next.0 + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-backend-module-okta-provider@0.0.1-next.0 + - @backstage/plugin-auth-backend-module-github-provider@0.1.5-next.0 + - @backstage/plugin-auth-backend-module-gitlab-provider@0.1.5-next.0 + - @backstage/plugin-auth-backend-module-oauth2-provider@0.1.5-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/plugin-auth-backend-module-google-provider@0.1.5-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-auth-backend-module-gcp-iap-provider@0.2.2-next.0 + +## 0.20.0 + +### Minor Changes + +- bdf08ad04a: Adds the StaticTokenIssuer and StaticKeyStore, an alternative token issuer that can be used to sign the Authorization header using a predefined public/private key pair. + +### Patch Changes + +- 243c655a68: JSDoc and Error message updates to handle `Azure Active Directory` re-brand to `Entra ID` +- 013611b42e: `knex` has been bumped to major version 3 and `better-sqlite3` to major version 9, which deprecate node 16 support. +- f2fc5acca6: Added an optional `additionalScopes` configuration parameter to `okta` providers, that lets you add additional scopes on top of the default ones. +- 96c4f54bf6: Reverted the Microsoft auth provider to the previous implementation. +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/plugin-auth-backend-module-gitlab-provider@0.1.4 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @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-backend-module-gcp-iap-provider@0.2.1 + - @backstage/plugin-auth-backend-module-github-provider@0.1.4 + - @backstage/plugin-auth-backend-module-google-provider@0.1.4 + - @backstage/plugin-auth-backend-module-oauth2-provider@0.1.4 + - @backstage/plugin-auth-node@0.4.1 + ## 0.20.0-next.2 ### Patch Changes diff --git a/plugins/auth-backend/api-report.md b/plugins/auth-backend/api-report.md index 6372c2ee60..c20ddbe5a8 100644 --- a/plugins/auth-backend/api-report.md +++ b/plugins/auth-backend/api-report.md @@ -599,8 +599,6 @@ export const providers: Readonly<{ | undefined, ) => AuthProviderFactory_2; resolvers: Readonly<{ - emailLocalPartMatchingUserEntityName: () => SignInResolver; - emailMatchingUserEntityProfileEmail: () => SignInResolver; emailMatchingUserEntityAnnotation(): SignInResolver; }>; }>; diff --git a/plugins/auth-backend/config.d.ts b/plugins/auth-backend/config.d.ts index 54fad12939..34139593d3 100644 --- a/plugins/auth-backend/config.d.ts +++ b/plugins/auth-backend/config.d.ts @@ -135,20 +135,6 @@ export interface Config { acceptedClockSkewMs?: number; }; /** @visibility frontend */ - okta?: { - [authEnv: string]: { - clientId: string; - /** - * @visibility secret - */ - clientSecret: string; - audience: string; - authServerId?: string; - idp?: string; - callbackUrl?: string; - }; - }; - /** @visibility frontend */ oauth2?: { [authEnv: string]: { clientId: string; diff --git a/plugins/auth-backend/package.json b/plugins/auth-backend/package.json index 08336ae6fe..67d1b0734d 100644 --- a/plugins/auth-backend/package.json +++ b/plugins/auth-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-auth-backend", "description": "A Backstage backend plugin that handles authentication", - "version": "0.20.0-next.2", + "version": "0.20.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -38,16 +38,17 @@ "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", + "@backstage/plugin-auth-backend-module-atlassian-provider": "workspace:^", "@backstage/plugin-auth-backend-module-gcp-iap-provider": "workspace:^", "@backstage/plugin-auth-backend-module-github-provider": "workspace:^", "@backstage/plugin-auth-backend-module-gitlab-provider": "workspace:^", "@backstage/plugin-auth-backend-module-google-provider": "workspace:^", "@backstage/plugin-auth-backend-module-oauth2-provider": "workspace:^", + "@backstage/plugin-auth-backend-module-okta-provider": "workspace:^", "@backstage/plugin-auth-node": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@backstage/types": "workspace:^", - "@davidzemon/passport-okta-oauth": "^0.0.5", - "@google-cloud/firestore": "^6.0.0", + "@google-cloud/firestore": "^7.0.0", "@types/express": "^4.17.6", "@types/passport": "^1.0.3", "compression": "^1.7.4", diff --git a/plugins/auth-backend/src/providers/atlassian/provider.test.ts b/plugins/auth-backend/src/providers/atlassian/provider.test.ts deleted file mode 100644 index 1fb987d3b0..0000000000 --- a/plugins/auth-backend/src/providers/atlassian/provider.test.ts +++ /dev/null @@ -1,145 +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 { AtlassianAuthProvider } from './provider'; -import * as helpers from '../../lib/passport/PassportStrategyHelper'; -import { OAuthResult } from '../../lib/oauth'; -import { PassportProfile } from '../../lib/passport/types'; -import { AuthResolverContext } from '../types'; - -jest.mock('../../lib/passport/PassportStrategyHelper', () => { - return { - executeFrameHandlerStrategy: jest.fn(), - executeRefreshTokenStrategy: jest.fn(), - executeFetchUserProfileStrategy: jest.fn(), - }; -}); - -const mockFrameHandler = jest.spyOn( - helpers, - 'executeFrameHandlerStrategy', -) as unknown as jest.MockedFunction<() => Promise<{ result: OAuthResult }>>; - -describe('createAtlassianProvider', () => { - const provider = new AtlassianAuthProvider({ - resolverContext: {} as AuthResolverContext, - authHandler: async ({ fullProfile }) => ({ - profile: { - email: fullProfile.emails![0]!.value, - displayName: fullProfile.displayName, - picture: 'http://google.com/lols', - }, - }), - clientId: 'mock', - clientSecret: 'mock', - callbackUrl: 'mock', - scopes: 'scope', - }); - - it('should auth', async () => { - mockFrameHandler.mockResolvedValueOnce({ - result: { - fullProfile: { - photos: [ - { - value: - 'https://a1cf74336522e87f135f-2f21ace9a6cf0052456644b80fa06d4f.ssl.cf2.rackcdn.com/images/characters_opt/p-mystic-river-sean-penn.jpg', - }, - ], - emails: [{ value: 'conrad@example.com' }], - displayName: 'Conrad', - id: 'conrad', - provider: 'google', - }, - params: { - id_token: 'idToken', - scope: 'scope', - expires_in: 123, - }, - accessToken: 'accessToken', - refreshToken: 'wacka', - }, - }); - const result = await provider.handler({} as any); - expect(result).toEqual({ - response: { - providerInfo: { - accessToken: 'accessToken', - expiresInSeconds: 123, - idToken: 'idToken', - scope: 'scope', - }, - profile: { - email: 'conrad@example.com', - displayName: 'Conrad', - picture: 'http://google.com/lols', - }, - }, - refreshToken: 'wacka', - }); - }); - - it('should forward a new refresh token on refresh', async () => { - const mockRefreshToken = jest.spyOn( - helpers, - 'executeRefreshTokenStrategy', - ) as unknown as jest.MockedFunction<() => Promise<{}>>; - - mockRefreshToken.mockResolvedValueOnce({ - accessToken: 'a.b.c', - refreshToken: 'dont-forget-to-send-refresh', - params: { - id_token: 'my-id', - scope: 'read_user', - }, - }); - - const mockUserProfile = jest.spyOn( - helpers, - 'executeFetchUserProfileStrategy', - ) as unknown as jest.MockedFunction<() => Promise>; - - mockUserProfile.mockResolvedValueOnce({ - id: 'uid-my-id', - username: 'mockuser', - provider: 'atlassian', - displayName: 'Mocked User', - emails: [ - { - value: 'mockuser@gmail.com', - }, - ], - }); - - const result = await provider.refresh({} as any); - - expect(result).toEqual({ - response: { - profile: { - displayName: 'Mocked User', - email: 'mockuser@gmail.com', - picture: 'http://google.com/lols', - }, - providerInfo: { - accessToken: 'a.b.c', - idToken: 'my-id', - scope: 'read_user', - }, - }, - refreshToken: 'dont-forget-to-send-refresh', - }); - }); -}); diff --git a/plugins/auth-backend/src/providers/atlassian/provider.ts b/plugins/auth-backend/src/providers/atlassian/provider.ts index e02d899fb1..a142d1de90 100644 --- a/plugins/auth-backend/src/providers/atlassian/provider.ts +++ b/plugins/auth-backend/src/providers/atlassian/provider.ts @@ -14,156 +14,18 @@ * limitations under the License. */ -import AtlassianStrategy from './strategy'; -import { - encodeState, - OAuthAdapter, - OAuthEnvironmentHandler, - OAuthHandlers, - OAuthProviderOptions, - OAuthRefreshRequest, - OAuthResponse, - OAuthResult, - OAuthStartRequest, -} from '../../lib/oauth'; -import passport from 'passport'; -import { - executeFetchUserProfileStrategy, - executeFrameHandlerStrategy, - executeRedirectStrategy, - executeRefreshTokenStrategy, - makeProfileInfo, - PassportDoneCallback, -} from '../../lib/passport'; -import { - AuthHandler, - AuthResolverContext, - OAuthStartResponse, - SignInResolver, -} from '../types'; -import express from 'express'; +import { SignInResolver, AuthHandler } from '../types'; +import { OAuthResult } from '../../lib/oauth'; import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; - -/** @public */ -export type AtlassianAuthProviderOptions = OAuthProviderOptions & { - scopes: string; - signInResolver?: SignInResolver; - authHandler: AuthHandler; - resolverContext: AuthResolverContext; -}; - -export const atlassianDefaultAuthHandler: AuthHandler = async ({ - fullProfile, - params, -}) => ({ - profile: makeProfileInfo(fullProfile, params.id_token), -}); - -export class AtlassianAuthProvider implements OAuthHandlers { - private readonly _strategy: AtlassianStrategy; - private readonly signInResolver?: SignInResolver; - private readonly authHandler: AuthHandler; - private readonly resolverContext: AuthResolverContext; - - constructor(options: AtlassianAuthProviderOptions) { - this.resolverContext = options.resolverContext; - this.authHandler = options.authHandler; - this.signInResolver = options.signInResolver; - - this._strategy = new AtlassianStrategy( - { - clientID: options.clientId, - clientSecret: options.clientSecret, - callbackURL: options.callbackUrl, - scope: options.scopes, - }, - ( - accessToken: any, - refreshToken: any, - params: any, - fullProfile: passport.Profile, - done: PassportDoneCallback, - ) => { - done(undefined, { - fullProfile, - accessToken, - refreshToken, - params, - }); - }, - ); - } - - async start(req: OAuthStartRequest): Promise { - return await executeRedirectStrategy(req, this._strategy, { - state: encodeState(req.state), - }); - } - - async handler(req: express.Request) { - const { result } = await executeFrameHandlerStrategy( - req, - this._strategy, - ); - - return { - response: await this.handleResult(result), - refreshToken: result.refreshToken, - }; - } - - private async handleResult(result: OAuthResult): Promise { - const { profile } = await this.authHandler(result, this.resolverContext); - - const response: OAuthResponse = { - providerInfo: { - idToken: result.params.id_token, - accessToken: result.accessToken, - scope: result.params.scope, - expiresInSeconds: result.params.expires_in, - }, - profile, - }; - - if (this.signInResolver) { - response.backstageIdentity = await this.signInResolver( - { - result, - profile, - }, - this.resolverContext, - ); - } - - return response; - } - - async refresh(req: OAuthRefreshRequest) { - const { accessToken, params, refreshToken } = - await executeRefreshTokenStrategy( - this._strategy, - req.refreshToken, - req.scope, - ); - - const fullProfile = await executeFetchUserProfileStrategy( - this._strategy, - accessToken, - ); - - return { - response: await this.handleResult({ - fullProfile, - params, - accessToken, - }), - refreshToken, - }; - } -} +import { createOAuthProviderFactory } from '@backstage/plugin-auth-node'; +import { + adaptLegacyOAuthHandler, + adaptLegacyOAuthSignInResolver, +} from '../../lib/legacy'; +import { atlassianAuthenticator } from '@backstage/plugin-auth-backend-module-atlassian-provider'; /** - * Auth provider integration for atlassian auth + * Auth provider integration for Atlassian auth * * @public */ @@ -182,33 +44,10 @@ export const atlassian = createAuthProviderIntegration({ resolver: SignInResolver; }; }) { - return ({ providerId, globalConfig, config, resolverContext }) => - OAuthEnvironmentHandler.mapConfig(config, envConfig => { - const clientId = envConfig.getString('clientId'); - const clientSecret = envConfig.getString('clientSecret'); - const scopes = envConfig.getString('scopes'); - const customCallbackUrl = envConfig.getOptionalString('callbackUrl'); - const callbackUrl = - customCallbackUrl || - `${globalConfig.baseUrl}/${providerId}/handler/frame`; - - const authHandler: AuthHandler = - options?.authHandler ?? atlassianDefaultAuthHandler; - - const provider = new AtlassianAuthProvider({ - clientId, - clientSecret, - scopes, - callbackUrl, - authHandler, - signInResolver: options?.signIn?.resolver, - resolverContext, - }); - - return OAuthAdapter.fromConfig(globalConfig, provider, { - providerId, - callbackUrl, - }); - }); + return createOAuthProviderFactory({ + authenticator: atlassianAuthenticator, + profileTransform: adaptLegacyOAuthHandler(options?.authHandler), + signInResolver: adaptLegacyOAuthSignInResolver(options?.signIn?.resolver), + }); }, }); diff --git a/plugins/auth-backend/src/providers/okta/provider.test.ts b/plugins/auth-backend/src/providers/okta/provider.test.ts deleted file mode 100644 index bc27129300..0000000000 --- a/plugins/auth-backend/src/providers/okta/provider.test.ts +++ /dev/null @@ -1,100 +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 { OktaAuthProvider } from './provider'; -import * as helpers from '../../lib/passport/PassportStrategyHelper'; -import { OAuthResult } from '../../lib/oauth'; -import { AuthResolverContext } from '../types'; - -jest.mock('../../lib/passport/PassportStrategyHelper', () => { - return { - executeFrameHandlerStrategy: jest.fn(), - executeRefreshTokenStrategy: jest.fn(), - executeFetchUserProfileStrategy: jest.fn(), - }; -}); - -const mockFrameHandler = jest.spyOn( - helpers, - 'executeFrameHandlerStrategy', -) as unknown as jest.MockedFunction< - () => Promise<{ result: OAuthResult; privateInfo: any }> ->; - -describe('createOktaProvider', () => { - it('should auth', async () => { - const provider = new OktaAuthProvider({ - resolverContext: {} as AuthResolverContext, - authHandler: async ({ fullProfile }) => ({ - profile: { - email: fullProfile.emails![0]!.value, - displayName: fullProfile.displayName, - }, - }), - audience: 'http://example.com', - clientId: 'mock', - clientSecret: 'mock', - callbackUrl: 'mock', - }); - - mockFrameHandler.mockResolvedValueOnce({ - result: { - fullProfile: { - emails: [ - { - type: 'work', - value: 'conrad@example.com', - }, - ], - displayName: 'Conrad', - name: { - familyName: 'Ribas', - givenName: 'Francisco', - }, - id: 'conrad', - provider: 'okta', - photos: [ - { - value: 'some-data', - }, - ], - }, - params: { - id_token: 'idToken', - scope: 'scope', - expires_in: 123, - }, - accessToken: 'accessToken', - }, - privateInfo: { - refreshToken: 'wacka', - }, - }); - const { response } = await provider.handler({} as any); - expect(response).toEqual({ - providerInfo: { - accessToken: 'accessToken', - expiresInSeconds: 123, - idToken: 'idToken', - scope: 'scope', - }, - profile: { - email: 'conrad@example.com', - displayName: 'Conrad', - }, - }); - }); -}); diff --git a/plugins/auth-backend/src/providers/okta/provider.ts b/plugins/auth-backend/src/providers/okta/provider.ts index 05e0451bdb..4c8d5c37d7 100644 --- a/plugins/auth-backend/src/providers/okta/provider.ts +++ b/plugins/auth-backend/src/providers/okta/provider.ts @@ -14,187 +14,16 @@ * limitations under the License. */ -import express from 'express'; -import { - OAuthAdapter, - OAuthProviderOptions, - OAuthHandlers, - OAuthResponse, - OAuthEnvironmentHandler, - OAuthStartRequest, - encodeState, - OAuthRefreshRequest, - OAuthResult, -} from '../../lib/oauth'; -import { Strategy as OktaStrategy } from '@davidzemon/passport-okta-oauth'; -import passport from 'passport'; -import { - executeFrameHandlerStrategy, - executeRedirectStrategy, - executeRefreshTokenStrategy, - makeProfileInfo, - executeFetchUserProfileStrategy, - PassportDoneCallback, -} from '../../lib/passport'; -import { - AuthHandler, - OAuthStartResponse, - SignInResolver, - AuthResolverContext, -} from '../types'; +import { AuthHandler, SignInResolver } from '../types'; +import { OAuthResult } from '../../lib/oauth'; + import { createAuthProviderIntegration } from '../createAuthProviderIntegration'; +import { createOAuthProviderFactory } from '@backstage/plugin-auth-node'; import { - commonByEmailLocalPartResolver, - commonByEmailResolver, -} from '../resolvers'; -import { StateStore } from 'passport-oauth2'; - -type PrivateInfo = { - refreshToken: string; -}; - -export type OktaAuthProviderOptions = OAuthProviderOptions & { - audience: string; - authServerId?: string; - idp?: string; - signInResolver?: SignInResolver; - authHandler: AuthHandler; - resolverContext: AuthResolverContext; -}; - -export class OktaAuthProvider implements OAuthHandlers { - private readonly strategy: any; - private readonly signInResolver?: SignInResolver; - private readonly authHandler: AuthHandler; - private readonly resolverContext: AuthResolverContext; - - /** - * Due to passport-okta-oauth forcing options.state = true, - * passport-oauth2 requires express-session to be installed - * so that the 'state' parameter of the oauth2 flow can be stored. - * This implementation of StateStore matches the NullStore found within - * passport-oauth2, which is the StateStore implementation used when options.state = false, - * allowing us to avoid using express-session in order to integrate with Okta. - */ - private store: StateStore = { - store(_req: express.Request, cb: any) { - cb(null, null); - }, - verify(_req: express.Request, _state: string, cb: any) { - cb(null, true); - }, - }; - - constructor(options: OktaAuthProviderOptions) { - this.signInResolver = options.signInResolver; - this.authHandler = options.authHandler; - this.resolverContext = options.resolverContext; - - this.strategy = new OktaStrategy( - { - clientID: options.clientId, - clientSecret: options.clientSecret, - callbackURL: options.callbackUrl, - audience: options.audience, - authServerID: options.authServerId, - idp: options.idp, - passReqToCallback: false, - store: this.store, - response_type: 'code', - }, - ( - accessToken: any, - refreshToken: any, - params: any, - fullProfile: passport.Profile, - done: PassportDoneCallback, - ) => { - done( - undefined, - { - accessToken, - refreshToken, - params, - fullProfile, - }, - { - refreshToken, - }, - ); - }, - ); - } - - async start(req: OAuthStartRequest): Promise { - return await executeRedirectStrategy(req, this.strategy, { - accessType: 'offline', - prompt: 'consent', - scope: req.scope, - state: encodeState(req.state), - }); - } - - async handler(req: express.Request) { - const { result, privateInfo } = await executeFrameHandlerStrategy< - OAuthResult, - PrivateInfo - >(req, this.strategy); - - return { - response: await this.handleResult(result), - refreshToken: privateInfo.refreshToken, - }; - } - - async refresh(req: OAuthRefreshRequest) { - const { accessToken, refreshToken, params } = - await executeRefreshTokenStrategy( - this.strategy, - req.refreshToken, - req.scope, - ); - - const fullProfile = await executeFetchUserProfileStrategy( - this.strategy, - accessToken, - ); - - return { - response: await this.handleResult({ - fullProfile, - params, - accessToken, - }), - refreshToken, - }; - } - - private async handleResult(result: OAuthResult) { - const { profile } = await this.authHandler(result, this.resolverContext); - - const response: OAuthResponse = { - providerInfo: { - idToken: result.params.id_token, - accessToken: result.accessToken, - scope: result.params.scope, - expiresInSeconds: result.params.expires_in, - }, - profile, - }; - - if (this.signInResolver) { - response.backstageIdentity = await this.signInResolver( - { - result, - profile, - }, - this.resolverContext, - ); - } - - return response; - } -} + adaptLegacyOAuthHandler, + adaptLegacyOAuthSignInResolver, +} from '../../lib/legacy'; +import { oktaAuthenticator } from '@backstage/plugin-auth-backend-module-okta-provider'; /** * Auth provider integration for Okta auth @@ -208,72 +37,20 @@ export const okta = createAuthProviderIntegration({ * into the profile that will be presented to the user. */ authHandler?: AuthHandler; - /** * Configure sign-in for this provider, without it the provider can not be used to sign users in. */ signIn?: { - /** - * Maps an auth result to a Backstage identity for the user. - */ resolver: SignInResolver; }; }) { - return ({ providerId, globalConfig, config, resolverContext }) => - OAuthEnvironmentHandler.mapConfig(config, envConfig => { - const clientId = envConfig.getString('clientId'); - const clientSecret = envConfig.getString('clientSecret'); - const audience = envConfig.getString('audience'); - const authServerId = envConfig.getOptionalString('authServerId'); - const idp = envConfig.getOptionalString('idp'); - const customCallbackUrl = envConfig.getOptionalString('callbackUrl'); - const callbackUrl = - customCallbackUrl || - `${globalConfig.baseUrl}/${providerId}/handler/frame`; - - // This is a safe assumption as `passport-okta-oauth` uses the audience - // as the base for building the authorization, token, and user info URLs. - // https://github.com/fischerdan/passport-okta-oauth/blob/ea9ac42d/lib/passport-okta-oauth/oauth2.js#L12-L14 - if (!audience.startsWith('https://')) { - throw new Error("URL for 'audience' must start with 'https://'."); - } - - const authHandler: AuthHandler = options?.authHandler - ? options.authHandler - : async ({ fullProfile, params }) => ({ - profile: makeProfileInfo(fullProfile, params.id_token), - }); - - const provider = new OktaAuthProvider({ - audience, - authServerId, - idp, - clientId, - clientSecret, - callbackUrl, - authHandler, - signInResolver: options?.signIn?.resolver, - resolverContext, - }); - - return OAuthAdapter.fromConfig(globalConfig, provider, { - providerId, - callbackUrl, - }); - }); + return createOAuthProviderFactory({ + authenticator: oktaAuthenticator, + profileTransform: adaptLegacyOAuthHandler(options?.authHandler), + signInResolver: adaptLegacyOAuthSignInResolver(options?.signIn?.resolver), + }); }, resolvers: { - /** - * Looks up the user by matching their email local part to the entity name. - */ - emailLocalPartMatchingUserEntityName: () => commonByEmailLocalPartResolver, - /** - * Looks up the user by matching their email to the entity email. - */ - emailMatchingUserEntityProfileEmail: () => commonByEmailResolver, - /** - * Looks up the user by matching their email to the `okta.com/email` annotation. - */ emailMatchingUserEntityAnnotation(): SignInResolver { return async (info, ctx) => { const { profile } = info; diff --git a/plugins/auth-node/CHANGELOG.md b/plugins/auth-node/CHANGELOG.md index 65fe3b962e..d585f8d1d4 100644 --- a/plugins/auth-node/CHANGELOG.md +++ b/plugins/auth-node/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-auth-node +## 0.4.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-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 + +## 0.4.1 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @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 + ## 0.4.1-next.2 ### Patch Changes diff --git a/plugins/auth-node/package.json b/plugins/auth-node/package.json index ebabd6903d..5a18593ab6 100644 --- a/plugins/auth-node/package.json +++ b/plugins/auth-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-auth-node", - "version": "0.4.1-next.2", + "version": "0.4.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-devops-backend/CHANGELOG.md b/plugins/azure-devops-backend/CHANGELOG.md index c5de0432ec..30b573b43f 100644 --- a/plugins/azure-devops-backend/CHANGELOG.md +++ b/plugins/azure-devops-backend/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-azure-devops-backend +## 0.4.5-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/plugin-azure-devops-common@0.3.1 + +## 0.4.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/config@1.1.1 + - @backstage/plugin-azure-devops-common@0.3.1 + ## 0.4.4-next.2 ### Patch Changes diff --git a/plugins/azure-devops-backend/package.json b/plugins/azure-devops-backend/package.json index e675ec316f..5bf6b9b39f 100644 --- a/plugins/azure-devops-backend/package.json +++ b/plugins/azure-devops-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops-backend", - "version": "0.4.4-next.2", + "version": "0.4.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-devops/CHANGELOG.md b/plugins/azure-devops/CHANGELOG.md index beb0f0478e..919b4b7a25 100644 --- a/plugins/azure-devops/CHANGELOG.md +++ b/plugins/azure-devops/CHANGELOG.md @@ -1,5 +1,34 @@ # @backstage/plugin-azure-devops +## 0.3.10-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-azure-devops-common@0.3.1 + +## 0.3.8 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- ce9e59cbb3: Refactored the error handling for some of the hooks +- 361bb34d8e: Consolidated getting the annotation values into a single function to help with future changes +- 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-azure-devops-common@0.3.1 + ## 0.3.8-next.2 ### Patch Changes diff --git a/plugins/azure-devops/package.json b/plugins/azure-devops/package.json index fbc049a860..9040d51e8d 100644 --- a/plugins/azure-devops/package.json +++ b/plugins/azure-devops/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-devops", - "version": "0.3.8-next.2", + "version": "0.3.10-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-devops/src/components/EntityPageAzurePipelines/EntityPageAzurePipelines.tsx b/plugins/azure-devops/src/components/EntityPageAzurePipelines/EntityPageAzurePipelines.tsx index 02a61a9a9a..c33d849c24 100644 --- a/plugins/azure-devops/src/components/EntityPageAzurePipelines/EntityPageAzurePipelines.tsx +++ b/plugins/azure-devops/src/components/EntityPageAzurePipelines/EntityPageAzurePipelines.tsx @@ -16,21 +16,13 @@ import { BuildTable } from '../BuildTable/BuildTable'; import React from 'react'; -import { getAnnotationValuesFromEntity } from '../../utils/getAnnotationValuesFromEntity'; -import { useBuildRuns } from '../../hooks/useBuildRuns'; +import { useBuildRuns } from '../../hooks'; import { useEntity } from '@backstage/plugin-catalog-react'; export const EntityPageAzurePipelines = (props: { defaultLimit?: number }) => { const { entity } = useEntity(); - const { project, repo, definition } = getAnnotationValuesFromEntity(entity); - - const { items, loading, error } = useBuildRuns( - project, - props.defaultLimit, - repo, - definition, - ); + const { items, loading, error } = useBuildRuns(entity, props.defaultLimit); return ; }; diff --git a/plugins/azure-devops/src/hooks/index.ts b/plugins/azure-devops/src/hooks/index.ts index ab1a3c9998..82ca86d055 100644 --- a/plugins/azure-devops/src/hooks/index.ts +++ b/plugins/azure-devops/src/hooks/index.ts @@ -17,7 +17,7 @@ export * from './useAllTeams'; export * from './useDashboardPullRequests'; export * from './usePullRequests'; -export * from './useRepoBuilds'; export * from './useUserEmail'; export * from './useUserTeamIds'; export * from './useReadme'; +export * from './useBuildRuns'; diff --git a/plugins/azure-devops/src/hooks/useRepoBuilds.test.tsx b/plugins/azure-devops/src/hooks/useBuildRuns.test.tsx similarity index 84% rename from plugins/azure-devops/src/hooks/useRepoBuilds.test.tsx rename to plugins/azure-devops/src/hooks/useBuildRuns.test.tsx index 99eaeb1ce3..409602eec4 100644 --- a/plugins/azure-devops/src/hooks/useRepoBuilds.test.tsx +++ b/plugins/azure-devops/src/hooks/useBuildRuns.test.tsx @@ -17,14 +17,14 @@ import React from 'react'; import { renderHook, waitFor } from '@testing-library/react'; import { Entity } from '@backstage/catalog-model'; -import { RepoBuild } from '@backstage/plugin-azure-devops-common'; +import { BuildRun } from '@backstage/plugin-azure-devops-common'; import { TestApiProvider } from '@backstage/test-utils'; import { AzureDevOpsApi, azureDevOpsApiRef } from '../api'; -import { useRepoBuilds } from './useRepoBuilds'; +import { useBuildRuns } from './useBuildRuns'; -describe('useRepoBuilds', () => { +describe('useBuildRuns', () => { const azureDevOpsApiMock = { - getRepoBuilds: jest.fn(), + getBuildRuns: jest.fn(), }; const azureDevOpsApi = azureDevOpsApiMock as Partial as AzureDevOpsApi; @@ -35,7 +35,7 @@ describe('useRepoBuilds', () => { ); - it('should provide an array of RepoBuild', async () => { + it('should provide an array of BuildRun', async () => { const entity: Entity = { apiVersion: 'backstage.io/v1alpha1', kind: 'Component', @@ -47,7 +47,7 @@ describe('useRepoBuilds', () => { }, }, }; - const repoBuilds: RepoBuild[] = [ + const buildRuns: BuildRun[] = [ { id: 1, title: 'title-1', @@ -67,10 +67,10 @@ describe('useRepoBuilds', () => { link: 'https://dev.azure.com/org/project/repo', }, ]; - azureDevOpsApiMock.getRepoBuilds.mockResolvedValue({ - items: repoBuilds, + azureDevOpsApiMock.getBuildRuns.mockResolvedValue({ + items: buildRuns, }); - const { result } = renderHook(() => useRepoBuilds(entity), { + const { result } = renderHook(() => useBuildRuns(entity), { wrapper: Wrapper, }); @@ -79,7 +79,7 @@ describe('useRepoBuilds', () => { await waitFor(() => { expect(result.current).toEqual({ error: undefined, - items: repoBuilds, + items: buildRuns, loading: false, }); }); @@ -96,7 +96,7 @@ describe('useRepoBuilds', () => { }; expect(() => - renderHook(() => useRepoBuilds(entity), { + renderHook(() => useBuildRuns(entity), { wrapper: Wrapper, }), ).toThrow('Value for annotation "dev.azure.com/project" was not found'); @@ -116,7 +116,7 @@ describe('useRepoBuilds', () => { }; expect(() => - renderHook(() => useRepoBuilds(entity), { + renderHook(() => useBuildRuns(entity), { wrapper: Wrapper, }), ).toThrow( diff --git a/plugins/azure-devops/src/hooks/useBuildRuns.ts b/plugins/azure-devops/src/hooks/useBuildRuns.ts index ae0273de44..2b70ea63a5 100644 --- a/plugins/azure-devops/src/hooks/useBuildRuns.ts +++ b/plugins/azure-devops/src/hooks/useBuildRuns.ts @@ -23,12 +23,12 @@ import { AZURE_DEVOPS_DEFAULT_TOP } from '../constants'; import { azureDevOpsApiRef } from '../api'; import { useApi } from '@backstage/core-plugin-api'; import useAsync from 'react-use/lib/useAsync'; +import { getAnnotationValuesFromEntity } from '../utils'; +import { Entity } from '@backstage/catalog-model'; export function useBuildRuns( - projectName: string, + entity: Entity, defaultLimit?: number, - repoName?: string, - definitionName?: string, ): { items?: BuildRun[]; loading: boolean; @@ -42,8 +42,9 @@ export function useBuildRuns( const api = useApi(azureDevOpsApiRef); const { value, loading, error } = useAsync(() => { - return api.getBuildRuns(projectName, repoName, definitionName, options); - }, [api, projectName, repoName, definitionName]); + const { project, repo, definition } = getAnnotationValuesFromEntity(entity); + return api.getBuildRuns(project, repo, definition, options); + }, [api]); return { items: value?.items, diff --git a/plugins/azure-devops/src/hooks/useGitTags.ts b/plugins/azure-devops/src/hooks/useGitTags.ts index 13c7118934..8a2fb2825d 100644 --- a/plugins/azure-devops/src/hooks/useGitTags.ts +++ b/plugins/azure-devops/src/hooks/useGitTags.ts @@ -28,11 +28,11 @@ export function useGitTags(entity: Entity): { error?: Error; } { const api = useApi(azureDevOpsApiRef); - const { project, repo } = getAnnotationValuesFromEntity(entity); - const { value, loading, error } = useAsync(async () => { - return await api.getGitTags(project, repo as string); - }, [api, project, repo]); + const { value, loading, error } = useAsync(() => { + const { project, repo } = getAnnotationValuesFromEntity(entity); + return api.getGitTags(project, repo as string); + }, [api]); return { items: value?.items, diff --git a/plugins/azure-devops/src/hooks/usePullRequests.ts b/plugins/azure-devops/src/hooks/usePullRequests.ts index c4223871f2..de886919eb 100644 --- a/plugins/azure-devops/src/hooks/usePullRequests.ts +++ b/plugins/azure-devops/src/hooks/usePullRequests.ts @@ -44,11 +44,11 @@ export function usePullRequests( }; const api = useApi(azureDevOpsApiRef); - const { project, repo } = getAnnotationValuesFromEntity(entity); - const { value, loading, error } = useAsync(async () => { - return await api.getPullRequests(project, repo as string, options); - }, [api, project, repo, top, status]); + const { value, loading, error } = useAsync(() => { + const { project, repo } = getAnnotationValuesFromEntity(entity); + return api.getPullRequests(project, repo as string, options); + }, [api, top, status]); return { items: value?.items, diff --git a/plugins/azure-devops/src/hooks/useReadme.ts b/plugins/azure-devops/src/hooks/useReadme.ts index 60b2e21990..67d3c5dfd0 100644 --- a/plugins/azure-devops/src/hooks/useReadme.ts +++ b/plugins/azure-devops/src/hooks/useReadme.ts @@ -28,11 +28,11 @@ export function useReadme(entity: Entity): { error?: Error; } { const api = useApi(azureDevOpsApiRef); - const { project, repo } = getAnnotationValuesFromEntity(entity); - const { value, loading, error } = useAsync(async () => { - return await api.getReadme({ project, repo: repo as string }); - }, [api, project, repo]); + const { value, loading, error } = useAsync(() => { + const { project, repo } = getAnnotationValuesFromEntity(entity); + return api.getReadme({ project, repo: repo as string }); + }, [api]); return { item: value, diff --git a/plugins/azure-devops/src/hooks/useRepoBuilds.ts b/plugins/azure-devops/src/hooks/useRepoBuilds.ts deleted file mode 100644 index 9292a6e035..0000000000 --- a/plugins/azure-devops/src/hooks/useRepoBuilds.ts +++ /dev/null @@ -1,54 +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 { - RepoBuild, - RepoBuildOptions, -} from '@backstage/plugin-azure-devops-common'; - -import { AZURE_DEVOPS_DEFAULT_TOP } from '../constants'; -import { Entity } from '@backstage/catalog-model'; -import { azureDevOpsApiRef } from '../api'; -import { useApi } from '@backstage/core-plugin-api'; -import useAsync from 'react-use/lib/useAsync'; -import { getAnnotationValuesFromEntity } from '../utils'; - -export function useRepoBuilds( - entity: Entity, - defaultLimit?: number, -): { - items?: RepoBuild[]; - loading: boolean; - error?: Error; -} { - const top = defaultLimit ?? AZURE_DEVOPS_DEFAULT_TOP; - const options: RepoBuildOptions = { - top: top, - }; - - const api = useApi(azureDevOpsApiRef); - const { project, repo } = getAnnotationValuesFromEntity(entity); - - const { value, loading, error } = useAsync(async () => { - return await api.getRepoBuilds(project, repo as string, options); - }, [api, project, repo, entity]); - - return { - items: value?.items, - loading, - error, - }; -} diff --git a/plugins/azure-sites-backend/CHANGELOG.md b/plugins/azure-sites-backend/CHANGELOG.md index b981cb0b66..75cf7ac7a5 100644 --- a/plugins/azure-sites-backend/CHANGELOG.md +++ b/plugins/azure-sites-backend/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-azure-sites-backend +## 0.1.18-next.0 + +### Patch Changes + +- b7a13edf6d: Updated dependency `@azure/arm-appservice` to `^14.0.0`. +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/config@1.1.1 + - @backstage/plugin-azure-sites-common@0.1.1 + +## 0.1.17 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/config@1.1.1 + - @backstage/plugin-azure-sites-common@0.1.1 + ## 0.1.17-next.2 ### Patch Changes diff --git a/plugins/azure-sites-backend/package.json b/plugins/azure-sites-backend/package.json index 975ad2fee2..bf1cc6a144 100644 --- a/plugins/azure-sites-backend/package.json +++ b/plugins/azure-sites-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-sites-backend", - "version": "0.1.17-next.2", + "version": "0.1.18-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,9 +32,9 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@azure/arm-appservice": "^13.0.1", + "@azure/arm-appservice": "^14.0.0", "@azure/arm-resourcegraph": "^4.2.1", - "@azure/identity": "^3.2.1", + "@azure/identity": "^4.0.0", "@backstage/backend-common": "workspace:^", "@backstage/config": "workspace:^", "@backstage/plugin-azure-sites-common": "workspace:^", diff --git a/plugins/azure-sites/CHANGELOG.md b/plugins/azure-sites/CHANGELOG.md index 5c6cf6529f..3c36d729f3 100644 --- a/plugins/azure-sites/CHANGELOG.md +++ b/plugins/azure-sites/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-azure-sites +## 0.1.17-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/plugin-azure-sites-common@0.1.1 + +## 0.1.15 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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/plugin-azure-sites-common@0.1.1 + ## 0.1.15-next.2 ### Patch Changes diff --git a/plugins/azure-sites/package.json b/plugins/azure-sites/package.json index 3be71efd11..631d368bc8 100644 --- a/plugins/azure-sites/package.json +++ b/plugins/azure-sites/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-azure-sites", - "version": "0.1.15-next.2", + "version": "0.1.17-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/azure-sites/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.tsx b/plugins/azure-sites/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.tsx index 16321cd464..44f5f1697d 100644 --- a/plugins/azure-sites/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.tsx +++ b/plugins/azure-sites/src/components/AzureSitesOverviewTableComponent/AzureSitesOverviewTable.tsx @@ -39,7 +39,6 @@ import OpenInNewIcon from '@material-ui/icons/OpenInNew'; import { DateTime } from 'luxon'; import { useApi } from '@backstage/core-plugin-api'; import { azureSiteApiRef } from '../../api'; -import { BackstageTheme } from '@backstage/theme'; type States = 'Waiting' | 'Running' | 'Paused' | 'Failed' | 'Stopped'; type Kinds = 'app' | 'functionapp'; @@ -50,7 +49,7 @@ const State = ({ value }: { value: States }) => { common: { black }, status: { ok, error }, }, - } = useTheme(); + } = useTheme(); const colorMap = { Waiting: '#dcbc21', diff --git a/plugins/badges-backend/CHANGELOG.md b/plugins/badges-backend/CHANGELOG.md index bbb536b028..aab01f0504 100644 --- a/plugins/badges-backend/CHANGELOG.md +++ b/plugins/badges-backend/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-badges-backend +## 0.3.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-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 + +## 0.3.4 + +### Patch Changes + +- 013611b42e: `knex` has been bumped to major version 3 and `better-sqlite3` to major version 9, which deprecate node 16 support. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-auth-node@0.4.1 + ## 0.3.4-next.2 ### Patch Changes diff --git a/plugins/badges-backend/package.json b/plugins/badges-backend/package.json index 3dd6b9e916..657ad01b09 100644 --- a/plugins/badges-backend/package.json +++ b/plugins/badges-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges-backend", "description": "A Backstage backend plugin that generates README badges for your entities", - "version": "0.3.4-next.2", + "version": "0.3.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -56,7 +56,7 @@ "@backstage/backend-test-utils": "workspace:^", "@backstage/catalog-client": "workspace:^", "@backstage/cli": "workspace:^", - "cross-fetch": "^3.1.5" + "cross-fetch": "^4.0.0" }, "files": [ "dist", diff --git a/plugins/badges/CHANGELOG.md b/plugins/badges/CHANGELOG.md index b7df261971..0d1a0856c9 100644 --- a/plugins/badges/CHANGELOG.md +++ b/plugins/badges/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-badges +## 0.2.52-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 + +## 0.2.50 + +### 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 + ## 0.2.50-next.2 ### Patch Changes diff --git a/plugins/badges/package.json b/plugins/badges/package.json index fc407675c7..ff09805301 100644 --- a/plugins/badges/package.json +++ b/plugins/badges/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-badges", "description": "A Backstage plugin that generates README badges for your entities", - "version": "0.2.50-next.2", + "version": "0.2.52-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bazaar-backend/CHANGELOG.md b/plugins/bazaar-backend/CHANGELOG.md index 825e3f42ba..ca50ba2d48 100644 --- a/plugins/bazaar-backend/CHANGELOG.md +++ b/plugins/bazaar-backend/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-bazaar-backend +## 0.3.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## 0.3.5 + +### Patch Changes + +- 013611b42e: `knex` has been bumped to major version 3 and `better-sqlite3` to major version 9, which deprecate node 16 support. +- 8613ba3928: Switched to using `"exports"` field for `/alpha` subpath export. +- 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 + - @backstage/plugin-auth-node@0.4.1 + ## 0.3.5-next.2 ### Patch Changes diff --git a/plugins/bazaar-backend/package.json b/plugins/bazaar-backend/package.json index 82ce689cab..f1deae24d8 100644 --- a/plugins/bazaar-backend/package.json +++ b/plugins/bazaar-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar-backend", - "version": "0.3.5-next.2", + "version": "0.3.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/bazaar/CHANGELOG.md b/plugins/bazaar/CHANGELOG.md index 8bb4cad655..8dff109d9f 100644 --- a/plugins/bazaar/CHANGELOG.md +++ b/plugins/bazaar/CHANGELOG.md @@ -1,5 +1,48 @@ # @backstage/plugin-bazaar +## 0.2.20-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.16.0-next.1 + +## 0.2.20-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-catalog@1.16.0-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + +## 0.2.18 + +### Patch Changes + +- c6e7940ccf: Updated Readme document in bazaar plugin +- 4e66e37bd1: Added alert popup for link and unlink entity in bazaar project +- c5aad900e3: Adding descending sort in a bazaar plugin +- 6c2b872153: Add official support for React 18. +- 69ee8d75f4: Remove `button` prop from used MaterialUI `MenuItem` component fixing incompatibility with MaterialUI v5. +- b3acba9091: Added alert popup in the bazaar plugin +- 1a40159acb: Removed unnecessary dependency on `@backstage/cli`. +- 62b5922916: Internal theme type updates +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/plugin-catalog@1.15.0 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + ## 0.2.18-next.2 ### Patch Changes diff --git a/plugins/bazaar/package.json b/plugins/bazaar/package.json index bb21e6303e..a4b59ec57e 100644 --- a/plugins/bazaar/package.json +++ b/plugins/bazaar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-bazaar", - "version": "0.2.18-next.2", + "version": "0.2.20-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -34,7 +34,6 @@ "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", "@backstage/errors": "workspace:^", - "@backstage/plugin-catalog": "workspace:^", "@backstage/plugin-catalog-react": "workspace:^", "@backstage/theme": "workspace:^", "@date-io/luxon": "1.x", diff --git a/plugins/bazaar/src/components/CardContentFields/AboutField.tsx b/plugins/bazaar/src/components/CardContentFields/AboutField.tsx new file mode 100644 index 0000000000..e8c49bf4d7 --- /dev/null +++ b/plugins/bazaar/src/components/CardContentFields/AboutField.tsx @@ -0,0 +1,72 @@ +/* + * 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 { useElementFilter } from '@backstage/core-plugin-api'; +import { Grid, makeStyles, Typography } from '@material-ui/core'; +import React from 'react'; + +const useStyles = makeStyles(theme => ({ + value: { + fontWeight: 'bold', + overflow: 'hidden', + lineHeight: '24px', + wordBreak: 'break-word', + }, + label: { + color: theme.palette.text.secondary, + textTransform: 'uppercase', + fontSize: '10px', + fontWeight: 'bold', + letterSpacing: 0.5, + overflow: 'hidden', + whiteSpace: 'nowrap', + }, +})); + +/** + * Props for {@link AboutField}. + */ +export interface AboutFieldProps { + label: string; + value?: string; + gridSizes?: Record; + children?: React.ReactNode; +} + +export function AboutField(props: AboutFieldProps) { + const { label, value, gridSizes, children } = props; + const classes = useStyles(); + + const childElements = useElementFilter(children, c => c.getElements()); + + // Content is either children or a string prop `value` + const content = + childElements.length > 0 ? ( + childElements + ) : ( + + {value || `unknown`} + + ); + return ( + + + {label} + + {content} + + ); +} diff --git a/plugins/bazaar/src/components/CardContentFields/CardContentFields.tsx b/plugins/bazaar/src/components/CardContentFields/CardContentFields.tsx index 82ab9df89d..f252efebee 100644 --- a/plugins/bazaar/src/components/CardContentFields/CardContentFields.tsx +++ b/plugins/bazaar/src/components/CardContentFields/CardContentFields.tsx @@ -25,8 +25,8 @@ import { import { parseEntityRef } from '@backstage/catalog-model'; import { Avatar, Link } from '@backstage/core-components'; import { useRouteRef } from '@backstage/core-plugin-api'; -import { AboutField } from '@backstage/plugin-catalog'; import { entityRouteRef } from '@backstage/plugin-catalog-react'; +import { AboutField } from './AboutField'; import { StatusTag } from '../StatusTag'; import { Member, BazaarProject } from '../../types'; diff --git a/plugins/bazaar/src/components/InputSelector/InputSelector.tsx b/plugins/bazaar/src/components/InputSelector/InputSelector.tsx index b7e9ecd96a..69907f9b3e 100644 --- a/plugins/bazaar/src/components/InputSelector/InputSelector.tsx +++ b/plugins/bazaar/src/components/InputSelector/InputSelector.tsx @@ -60,7 +60,7 @@ export const InputSelector = ({ name, options, control, error }: Props) => { > {options.map(option => { return ( - + {option} ); diff --git a/plugins/bitbucket-cloud-common/CHANGELOG.md b/plugins/bitbucket-cloud-common/CHANGELOG.md index cbe27eeda7..58bfdcea30 100644 --- a/plugins/bitbucket-cloud-common/CHANGELOG.md +++ b/plugins/bitbucket-cloud-common/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-bitbucket-cloud-common +## 0.2.15-next.0 + +### Patch Changes + +- acf93904e7: Updated dependency `ts-morph` to `^20.0.0`. +- Updated dependencies + - @backstage/integration@1.8.0-next.0 + +## 0.2.14 + +### Patch Changes + +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/integration@1.7.2 + ## 0.2.14-next.0 ### Patch Changes diff --git a/plugins/bitbucket-cloud-common/package.json b/plugins/bitbucket-cloud-common/package.json index d5987758dc..0aa9d3550e 100644 --- a/plugins/bitbucket-cloud-common/package.json +++ b/plugins/bitbucket-cloud-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-bitbucket-cloud-common", "description": "Common functionalities for bitbucket-cloud plugins", - "version": "0.2.14-next.0", + "version": "0.2.15-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -35,13 +35,13 @@ }, "dependencies": { "@backstage/integration": "workspace:^", - "cross-fetch": "^3.1.5" + "cross-fetch": "^4.0.0" }, "devDependencies": { "@backstage/cli": "workspace:^", "@openapitools/openapi-generator-cli": "^2.4.26", "msw": "^1.0.0", - "ts-morph": "^17.0.0" + "ts-morph": "^20.0.0" }, "files": [ "dist" diff --git a/plugins/bitrise/CHANGELOG.md b/plugins/bitrise/CHANGELOG.md index ace0b27c13..3b180f797e 100644 --- a/plugins/bitrise/CHANGELOG.md +++ b/plugins/bitrise/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-bitrise +## 0.1.55-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 + +## 0.1.53 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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 + ## 0.1.53-next.2 ### Patch Changes diff --git a/plugins/bitrise/package.json b/plugins/bitrise/package.json index b3b7f771b3..5f4df1022f 100644 --- a/plugins/bitrise/package.json +++ b/plugins/bitrise/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-bitrise", "description": "A Backstage plugin that integrates towards Bitrise", - "version": "0.1.53-next.2", + "version": "0.1.55-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-aws/CHANGELOG.md b/plugins/catalog-backend-module-aws/CHANGELOG.md index b7c33a1823..4447c07186 100644 --- a/plugins/catalog-backend-module-aws/CHANGELOG.md +++ b/plugins/catalog-backend-module-aws/CHANGELOG.md @@ -1,5 +1,43 @@ # @backstage/plugin-catalog-backend-module-aws +## 0.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-kubernetes-common@0.7.2-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/integration-aws-node@0.1.8 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + +## 0.3.1 + +### Patch Changes + +- 20d97d28a3: Updated dependency `aws-sdk-client-mock-jest` to `^3.0.0`. +- 3d043526f4: Updated dependency `aws-sdk-client-mock` to `^3.0.0`. +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/plugin-kubernetes-common@0.7.1 + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/integration-aws-node@0.1.8 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + ## 0.3.1-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-aws/package.json b/plugins/catalog-backend-module-aws/package.json index b58dd78bd2..a4ae3b395f 100644 --- a/plugins/catalog-backend-module-aws/package.json +++ b/plugins/catalog-backend-module-aws/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-aws", "description": "A Backstage catalog backend module that helps integrate towards AWS", - "version": "0.3.1-next.2", + "version": "0.3.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -73,8 +73,8 @@ "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", "@types/lodash": "^4.14.151", - "aws-sdk-client-mock": "^2.0.0", - "aws-sdk-client-mock-jest": "^2.0.0", + "aws-sdk-client-mock": "^3.0.0", + "aws-sdk-client-mock-jest": "^3.0.0", "luxon": "^3.0.0", "yaml": "^2.0.0" }, diff --git a/plugins/catalog-backend-module-azure/CHANGELOG.md b/plugins/catalog-backend-module-azure/CHANGELOG.md index 280325be31..04d6dcd33b 100644 --- a/plugins/catalog-backend-module-azure/CHANGELOG.md +++ b/plugins/catalog-backend-module-azure/CHANGELOG.md @@ -1,5 +1,37 @@ # @backstage/plugin-catalog-backend-module-azure +## 0.1.27-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/backend-plugin-api@0.6.8-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-catalog-common@1.0.18 + +## 0.1.26 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + ## 0.1.26-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-azure/package.json b/plugins/catalog-backend-module-azure/package.json index 590a4edab1..1ff6c4cc78 100644 --- a/plugins/catalog-backend-module-azure/package.json +++ b/plugins/catalog-backend-module-azure/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-azure", "description": "A Backstage catalog backend module that helps integrate towards Azure", - "version": "0.1.26-next.2", + "version": "0.1.27-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-backstage-openapi/CHANGELOG.md b/plugins/catalog-backend-module-backstage-openapi/CHANGELOG.md index d18925cdd4..cf6015342e 100644 --- a/plugins/catalog-backend-module-backstage-openapi/CHANGELOG.md +++ b/plugins/catalog-backend-module-backstage-openapi/CHANGELOG.md @@ -1,5 +1,38 @@ # @backstage/plugin-catalog-backend-module-backstage-openapi +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-openapi-utils@0.1.1-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## 0.1.0 + +### Minor Changes + +- 785fb1ea75: Adds a new catalog module for ingesting Backstage plugin OpenAPI specs into the catalog for display as an API entity. + +### Patch Changes + +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- 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/backend-openapi-utils@0.1.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + ## 0.1.0-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-backstage-openapi/package.json b/plugins/catalog-backend-module-backstage-openapi/package.json index 488f9bc30f..57611b6920 100644 --- a/plugins/catalog-backend-module-backstage-openapi/package.json +++ b/plugins/catalog-backend-module-backstage-openapi/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-backstage-openapi", - "version": "0.1.0-next.2", + "version": "0.1.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -30,7 +30,7 @@ "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "express": "^4.17.1", "express-promise-router": "^4.1.0", "lodash": "^4.17.21", diff --git a/plugins/catalog-backend-module-backstage-openapi/src/InternalOpenApiDocumentationProvider.ts b/plugins/catalog-backend-module-backstage-openapi/src/InternalOpenApiDocumentationProvider.ts index 33c461d95a..a8782e5eea 100644 --- a/plugins/catalog-backend-module-backstage-openapi/src/InternalOpenApiDocumentationProvider.ts +++ b/plugins/catalog-backend-module-backstage-openapi/src/InternalOpenApiDocumentationProvider.ts @@ -25,6 +25,7 @@ import { EntityProviderConnection, } from '@backstage/plugin-catalog-node'; import { merge, isErrorResult } from 'openapi-merge'; +import { TokenManager } from '@backstage/backend-common'; import { getOpenApiSpecRoute } from '@backstage/backend-openapi-utils'; import type { OpenAPIObject, @@ -107,17 +108,25 @@ const loadSpecs = async ({ discovery, plugins, logger, + tokenManager, }: { baseUrl: string; plugins: string[]; discovery: DiscoveryService; logger: LoggerService; + tokenManager: TokenManager; }) => { const specs: OpenAPIObject[] = []; for (const pluginId of plugins) { const url = await discovery.getExternalBaseUrl(pluginId); const openApiUrl = getOpenApiSpecRoute(url); - const response = await fetch(openApiUrl); + const { token } = await tokenManager.getToken(); + const response = await fetch(openApiUrl, { + method: 'GET', + headers: { + Authorization: `Bearer ${token}`, + }, + }); if (response.ok) { const spec = await response.json(); addTagsToSpec(spec, pluginId); @@ -144,6 +153,7 @@ export class InternalOpenApiDocumentationProvider implements EntityProvider { public readonly config: Config, public readonly discovery: DiscoveryService, public readonly logger: LoggerService, + public readonly tokenManager: TokenManager, taskRunner: TaskRunner, ) { this.scheduleFn = this.createScheduleFn(taskRunner); @@ -155,6 +165,7 @@ export class InternalOpenApiDocumentationProvider implements EntityProvider { discovery: DiscoveryService; logger: LoggerService; schedule: PluginTaskScheduler; + tokenManager: TokenManager; }, ) { const taskRunner = options.schedule.createScheduledTaskRunner({ @@ -169,6 +180,7 @@ export class InternalOpenApiDocumentationProvider implements EntityProvider { config, options.discovery, options.logger, + options.tokenManager, taskRunner, ); } @@ -231,6 +243,7 @@ export class InternalOpenApiDocumentationProvider implements EntityProvider { await loadSpecs({ baseUrl: this.config.getString('backend.baseUrl'), discovery: this.discovery, + tokenManager: this.tokenManager, plugins: pluginsToMerge, logger, }), diff --git a/plugins/catalog-backend-module-backstage-openapi/src/index.ts b/plugins/catalog-backend-module-backstage-openapi/src/index.ts index 226442666c..ac425afaf2 100644 --- a/plugins/catalog-backend-module-backstage-openapi/src/index.ts +++ b/plugins/catalog-backend-module-backstage-openapi/src/index.ts @@ -44,13 +44,22 @@ export const catalogModuleInternalOpenApiSpec = createBackendModule({ discovery: coreServices.discovery, scheduler: coreServices.scheduler, logger: coreServices.logger, + tokenManager: coreServices.tokenManager, }, - async init({ catalog, config, discovery, scheduler, logger }) { + async init({ + catalog, + config, + discovery, + scheduler, + logger, + tokenManager, + }) { catalog.addEntityProvider( InternalOpenApiDocumentationProvider.fromConfig(config, { discovery, schedule: scheduler, logger, + tokenManager, }), ); }, diff --git a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md index 0fea22581e..d0824e1fe6 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,39 @@ # @backstage/plugin-catalog-backend-module-bitbucket-cloud +## 0.1.23-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.15-next.0 + - @backstage/integration@1.8.0-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/plugin-catalog-common@1.0.18 + - @backstage/plugin-events-node@0.2.17-next.0 + +## 0.1.22 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/integration@1.7.2 + - @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/plugin-bitbucket-cloud-common@0.2.14 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-events-node@0.2.16 + ## 0.1.22-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-cloud/package.json b/plugins/catalog-backend-module-bitbucket-cloud/package.json index 3e446c3ef3..fd991c00a6 100644 --- a/plugins/catalog-backend-module-bitbucket-cloud/package.json +++ b/plugins/catalog-backend-module-bitbucket-cloud/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-cloud", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket Cloud", - "version": "0.1.22-next.2", + "version": "0.1.23-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md index 4a388c5d25..f96a8ee235 100644 --- a/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket-server/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-catalog-backend-module-bitbucket-server +## 0.1.21-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## 0.1.20 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + ## 0.1.20-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket-server/package.json b/plugins/catalog-backend-module-bitbucket-server/package.json index a593ce88ff..acba1bc02a 100644 --- a/plugins/catalog-backend-module-bitbucket-server/package.json +++ b/plugins/catalog-backend-module-bitbucket-server/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket-server", - "version": "0.1.20-next.2", + "version": "0.1.21-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md index 4b621af6bc..a611562cfe 100644 --- a/plugins/catalog-backend-module-bitbucket/CHANGELOG.md +++ b/plugins/catalog-backend-module-bitbucket/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-catalog-backend-module-bitbucket +## 0.2.23-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-bitbucket-cloud-common@0.2.15-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## 0.2.22 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/plugin-bitbucket-cloud-common@0.2.14 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + ## 0.2.22-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-bitbucket/package.json b/plugins/catalog-backend-module-bitbucket/package.json index 178f3d3e4d..cc0d27df6b 100644 --- a/plugins/catalog-backend-module-bitbucket/package.json +++ b/plugins/catalog-backend-module-bitbucket/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-bitbucket", "description": "A Backstage catalog backend module that helps integrate towards Bitbucket", - "version": "0.2.22-next.2", + "version": "0.2.23-next.0", "deprecated": true, "main": "src/index.ts", "types": "src/index.ts", diff --git a/plugins/catalog-backend-module-gcp/CHANGELOG.md b/plugins/catalog-backend-module-gcp/CHANGELOG.md index f94c653b04..a438d1dc65 100644 --- a/plugins/catalog-backend-module-gcp/CHANGELOG.md +++ b/plugins/catalog-backend-module-gcp/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-catalog-backend-module-gcp +## 0.1.8-next.0 + +### Patch Changes + +- 42c1aee741: Updated dependency `@google-cloud/container` to `^5.0.0`. +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-kubernetes-common@0.7.2-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + +## 0.1.7 + +### Patch Changes + +- 62180df4ee: Allow integration with kubernetes dashboard +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/plugin-kubernetes-common@0.7.1 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + ## 0.1.7-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-gcp/package.json b/plugins/catalog-backend-module-gcp/package.json index 7c0c4ff0b5..d33ffa9d47 100644 --- a/plugins/catalog-backend-module-gcp/package.json +++ b/plugins/catalog-backend-module-gcp/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-gcp", "description": "A Backstage catalog backend module that helps integrate towards GCP", - "version": "0.1.7-next.2", + "version": "0.1.8-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -52,7 +52,7 @@ "@backstage/config": "workspace:^", "@backstage/plugin-catalog-node": "workspace:^", "@backstage/plugin-kubernetes-common": "workspace:^", - "@google-cloud/container": "^4.15.0", + "@google-cloud/container": "^5.0.0", "winston": "^3.2.1" }, "devDependencies": { diff --git a/plugins/catalog-backend-module-gerrit/CHANGELOG.md b/plugins/catalog-backend-module-gerrit/CHANGELOG.md index 5e8d10ce5a..b0f9d60904 100644 --- a/plugins/catalog-backend-module-gerrit/CHANGELOG.md +++ b/plugins/catalog-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-catalog-backend-module-gerrit +## 0.1.24-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## 0.1.23 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + ## 0.1.23-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-gerrit/package.json b/plugins/catalog-backend-module-gerrit/package.json index 1dc5e7ecfe..04e3457389 100644 --- a/plugins/catalog-backend-module-gerrit/package.json +++ b/plugins/catalog-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-backend-module-gerrit", - "version": "0.1.23-next.2", + "version": "0.1.24-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-github-org/CHANGELOG.md b/plugins/catalog-backend-module-github-org/CHANGELOG.md index 364093e236..cd9731e46c 100644 --- a/plugins/catalog-backend-module-github-org/CHANGELOG.md +++ b/plugins/catalog-backend-module-github-org/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-catalog-backend-module-github-org +## 0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-catalog-backend-module-github@0.4.6-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + +## 0.1.1 + +### Patch Changes + +- 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/plugin-catalog-backend-module-github@0.4.5 + - @backstage/config@1.1.1 + ## 0.1.1-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-github-org/package.json b/plugins/catalog-backend-module-github-org/package.json index b2a24d483a..a1abbd3207 100644 --- a/plugins/catalog-backend-module-github-org/package.json +++ b/plugins/catalog-backend-module-github-org/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-github-org", "description": "The github-org backend module for the catalog plugin.", - "version": "0.1.1-next.2", + "version": "0.1.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-github/CHANGELOG.md b/plugins/catalog-backend-module-github/CHANGELOG.md index f9b466604b..535430f03b 100644 --- a/plugins/catalog-backend-module-github/CHANGELOG.md +++ b/plugins/catalog-backend-module-github/CHANGELOG.md @@ -1,5 +1,40 @@ # @backstage/plugin-catalog-backend-module-github +## 0.4.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-catalog-backend@1.15.1-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/plugin-catalog-common@1.0.18 + - @backstage/plugin-events-node@0.2.17-next.0 + +## 0.4.5 + +### Patch Changes + +- 88b673aa76: Import `AnalyzeOptions` and `ScmLocationAnalyzer` types from `@backstage/plugin-catalog-node` +- Updated dependencies + - @backstage/plugin-catalog-backend@1.15.0 + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/integration@1.7.2 + - @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/plugin-catalog-common@1.0.18 + - @backstage/plugin-events-node@0.2.16 + ## 0.4.5-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-github/package.json b/plugins/catalog-backend-module-github/package.json index 0d1e1bd7fc..e94b98e427 100644 --- a/plugins/catalog-backend-module-github/package.json +++ b/plugins/catalog-backend-module-github/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-github", "description": "A Backstage catalog backend module that helps integrate towards GitHub", - "version": "0.4.5-next.2", + "version": "0.4.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-gitlab/CHANGELOG.md b/plugins/catalog-backend-module-gitlab/CHANGELOG.md index 22e01f5ea7..5d98bdd8c2 100644 --- a/plugins/catalog-backend-module-gitlab/CHANGELOG.md +++ b/plugins/catalog-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-catalog-backend-module-gitlab +## 0.3.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + +## 0.3.4 + +### Patch Changes + +- d732f17610: Added try catch around fetching gitlab group users to prevent refresh from failing completely while only a select number of groups might not be able to load correctly. +- 0873a43ac1: Resolved a bug affecting the retrieval of users from group members. By appending '/all' to the API call, we now include members from all inherited groups, as per Gitlab's API specifications. This change is reflected in the listSaaSUsers function. +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + ## 0.3.4-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-gitlab/package.json b/plugins/catalog-backend-module-gitlab/package.json index 071e408322..d42961b665 100644 --- a/plugins/catalog-backend-module-gitlab/package.json +++ b/plugins/catalog-backend-module-gitlab/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-gitlab", "description": "A Backstage catalog backend module that helps integrate towards GitLab", - "version": "0.3.4-next.2", + "version": "0.3.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md index cfc689a57b..f2b342aae6 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md +++ b/plugins/catalog-backend-module-incremental-ingestion/CHANGELOG.md @@ -1,5 +1,38 @@ # @backstage/plugin-catalog-backend-module-incremental-ingestion +## 0.4.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-catalog-backend@1.15.1-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-events-node@0.2.17-next.0 + - @backstage/plugin-permission-common@0.7.10 + +## 0.4.11 + +### 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-backend@1.15.0 + - @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/plugin-permission-common@0.7.10 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-events-node@0.2.16 + ## 0.4.11-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-incremental-ingestion/package.json b/plugins/catalog-backend-module-incremental-ingestion/package.json index cd0a4dd0d4..53677fdec2 100644 --- a/plugins/catalog-backend-module-incremental-ingestion/package.json +++ b/plugins/catalog-backend-module-incremental-ingestion/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-incremental-ingestion", "description": "An entity provider for streaming large asset sources into the catalog", - "version": "0.4.11-next.2", + "version": "0.4.12-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-ldap/CHANGELOG.md b/plugins/catalog-backend-module-ldap/CHANGELOG.md index 66377e8eeb..987005f0a3 100644 --- a/plugins/catalog-backend-module-ldap/CHANGELOG.md +++ b/plugins/catalog-backend-module-ldap/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-catalog-backend-module-ldap +## 0.5.23-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-catalog-node@1.5.1-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-catalog-common@1.0.18 + +## 0.5.22 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/backend-tasks@0.5.12 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + ## 0.5.22-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-ldap/package.json b/plugins/catalog-backend-module-ldap/package.json index 5bf7ede085..fc1325c991 100644 --- a/plugins/catalog-backend-module-ldap/package.json +++ b/plugins/catalog-backend-module-ldap/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-ldap", "description": "A Backstage catalog backend module that helps integrate towards LDAP", - "version": "0.5.22-next.2", + "version": "0.5.23-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-msgraph/CHANGELOG.md b/plugins/catalog-backend-module-msgraph/CHANGELOG.md index cec1263ea7..e4d73b6745 100644 --- a/plugins/catalog-backend-module-msgraph/CHANGELOG.md +++ b/plugins/catalog-backend-module-msgraph/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-catalog-backend-module-msgraph +## 0.5.15-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + +## 0.5.14 + +### Patch Changes + +- 224aa6f64c: export the function to read ms graph provider config +- 243c655a68: JSDoc and Error message updates to handle `Azure Active Directory` re-brand to `Entra ID` +- 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-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + ## 0.5.14-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-msgraph/package.json b/plugins/catalog-backend-module-msgraph/package.json index 00ff5da3b8..52ff917585 100644 --- a/plugins/catalog-backend-module-msgraph/package.json +++ b/plugins/catalog-backend-module-msgraph/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-msgraph", "description": "A Backstage catalog backend module that helps integrate towards Microsoft Graph", - "version": "0.5.14-next.2", + "version": "0.5.15-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -45,7 +45,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@azure/identity": "^3.2.1", + "@azure/identity": "^4.0.0", "@backstage/backend-common": "workspace:^", "@backstage/backend-plugin-api": "workspace:^", "@backstage/backend-tasks": "workspace:^", diff --git a/plugins/catalog-backend-module-openapi/CHANGELOG.md b/plugins/catalog-backend-module-openapi/CHANGELOG.md index df5ecf9aa5..8b7743c39f 100644 --- a/plugins/catalog-backend-module-openapi/CHANGELOG.md +++ b/plugins/catalog-backend-module-openapi/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-catalog-backend-module-openapi +## 0.1.25-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-catalog-backend@1.15.1-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + +## 0.1.24 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-backend@1.15.0 + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + ## 0.1.24-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-openapi/package.json b/plugins/catalog-backend-module-openapi/package.json index 1a9dcd8cde..85e8cedb06 100644 --- a/plugins/catalog-backend-module-openapi/package.json +++ b/plugins/catalog-backend-module-openapi/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-openapi", "description": "A Backstage catalog backend module that helps with OpenAPI specifications", - "version": "0.1.24-next.2", + "version": "0.1.25-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md index d50f4e10ae..1a2febb565 100644 --- a/plugins/catalog-backend-module-puppetdb/CHANGELOG.md +++ b/plugins/catalog-backend-module-puppetdb/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-catalog-backend-module-puppetdb +## 0.1.13-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## 0.1.12 + +### Patch Changes + +- 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-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + ## 0.1.12-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-puppetdb/package.json b/plugins/catalog-backend-module-puppetdb/package.json index eb398bebc4..751c37c16c 100644 --- a/plugins/catalog-backend-module-puppetdb/package.json +++ b/plugins/catalog-backend-module-puppetdb/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-puppetdb", "description": "A Backstage catalog backend module that helps integrate towards PuppetDB", - "version": "0.1.12-next.2", + "version": "0.1.13-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md b/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md index 2ba8c5973c..f122b093e0 100644 --- a/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md +++ b/plugins/catalog-backend-module-scaffolder-entity-model/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-catalog-backend-module-scaffolder-entity-model +## 0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-scaffolder-common@1.4.3 + +## 0.1.4 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/plugin-scaffolder-common@1.4.3 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/catalog-model@1.4.3 + - @backstage/plugin-catalog-common@1.0.18 + ## 0.1.4-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-scaffolder-entity-model/package.json b/plugins/catalog-backend-module-scaffolder-entity-model/package.json index 7a6aa74799..638aa6d104 100644 --- a/plugins/catalog-backend-module-scaffolder-entity-model/package.json +++ b/plugins/catalog-backend-module-scaffolder-entity-model/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-scaffolder-entity-model", "description": "Adds support for the scaffolder specific entity model (e.g. the Template kind) to the catalog backend plugin.", - "version": "0.1.4-next.2", + "version": "0.1.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend-module-unprocessed/CHANGELOG.md b/plugins/catalog-backend-module-unprocessed/CHANGELOG.md index ce2f89a953..45dbc74091 100644 --- a/plugins/catalog-backend-module-unprocessed/CHANGELOG.md +++ b/plugins/catalog-backend-module-unprocessed/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-catalog-backend-module-unprocessed +## 0.3.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + +## 0.3.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/backend-plugin-api@0.6.7 + - @backstage/catalog-model@1.4.3 + - @backstage/plugin-auth-node@0.4.1 + ## 0.3.4-next.2 ### Patch Changes diff --git a/plugins/catalog-backend-module-unprocessed/package.json b/plugins/catalog-backend-module-unprocessed/package.json index c32c4fb144..9e0f29285e 100644 --- a/plugins/catalog-backend-module-unprocessed/package.json +++ b/plugins/catalog-backend-module-unprocessed/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend-module-unprocessed", "description": "Backstage Catalog module to view unprocessed entities", - "version": "0.3.4-next.2", + "version": "0.3.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-backend/CHANGELOG.md b/plugins/catalog-backend/CHANGELOG.md index 45d54108d9..cb721208a3 100644 --- a/plugins/catalog-backend/CHANGELOG.md +++ b/plugins/catalog-backend/CHANGELOG.md @@ -1,5 +1,69 @@ # @backstage/plugin-catalog-backend +## 1.15.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-openapi-utils@0.1.1-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/plugin-permission-node@0.7.19-next.0 + - @backstage/plugin-search-backend-module-catalog@0.1.12-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-catalog-common@1.0.18 + - @backstage/plugin-events-node@0.2.17-next.0 + - @backstage/plugin-permission-common@0.7.10 + +## 1.15.0 + +### Minor Changes + +- e5bf3749ad: Support adding location analyzers in new catalog analysis extension point and move `AnalyzeOptions` and `ScmLocationAnalyzer` types to `@backstage/plugin-catalog-node` +- 8d756968f9: Introduce a new optional config parameter `catalog.stitchingStrategy.mode`, + which can have the values `'immediate'` (default) and `'deferred'`. The default + is for stitching to work as it did before this change, which means that it + happens "in-band" (blocking) immediately when each processing task finishes. + When set to `'deferred'`, stitching is instead deferred to happen on a separate + asynchronous worker queue just like processing. + + Deferred stitching should make performance smoother when ingesting large amounts + of entities, and reduce p99 processing times and repeated over-stitching of + hot spot entities when fan-out/fan-in in terms of relations is very large. It + does however also come with some performance cost due to the queuing with how + much wall-clock time some types of task take. + +### Patch Changes + +- 6694b369a3: Update the OpenAPI spec with more complete error responses and request bodies using Optic. Also, updates the test cases to use the new `supertest` pass through from `@backstage/backend-openapi-utils`. +- 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/integration@1.7.2 + - @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/plugin-permission-common@0.7.10 + - @backstage/backend-openapi-utils@0.1.0 + - @backstage/plugin-search-backend-module-catalog@0.1.11 + - @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-catalog-common@1.0.18 + - @backstage/plugin-events-node@0.2.16 + - @backstage/plugin-permission-node@0.7.18 + ## 1.15.0-next.2 ### Patch Changes diff --git a/plugins/catalog-backend/package.json b/plugins/catalog-backend/package.json index f02f865618..f20cbd86a9 100644 --- a/plugins/catalog-backend/package.json +++ b/plugins/catalog-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-backend", "description": "The Backstage backend plugin that provides the Backstage catalog", - "version": "1.15.0-next.2", + "version": "1.15.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -90,6 +90,7 @@ "@backstage/plugin-permission-common": "workspace:^", "@types/core-js": "^2.5.4", "@types/git-url-parse": "^9.0.0", + "@types/glob": "^7.1.1", "@types/lodash": "^4.14.151", "@types/supertest": "^2.0.8", "@types/uuid": "^8.0.0", diff --git a/plugins/catalog-common/CHANGELOG.md b/plugins/catalog-common/CHANGELOG.md index 3dbde65433..15582a68fc 100644 --- a/plugins/catalog-common/CHANGELOG.md +++ b/plugins/catalog-common/CHANGELOG.md @@ -1,5 +1,14 @@ # @backstage/plugin-catalog-common +## 1.0.18 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.10 + - @backstage/catalog-model@1.4.3 + - @backstage/plugin-search-common@1.2.8 + ## 1.0.17 ### Patch Changes diff --git a/plugins/catalog-common/package.json b/plugins/catalog-common/package.json index 68ab60e7c3..45720ee32a 100644 --- a/plugins/catalog-common/package.json +++ b/plugins/catalog-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-common", "description": "Common functionalities for the catalog plugin", - "version": "1.0.17", + "version": "1.0.18", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-graph/CHANGELOG.md b/plugins/catalog-graph/CHANGELOG.md index d172e599aa..7c5667aa3b 100644 --- a/plugins/catalog-graph/CHANGELOG.md +++ b/plugins/catalog-graph/CHANGELOG.md @@ -1,5 +1,48 @@ # @backstage/plugin-catalog-graph +## 0.3.2-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-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/types@1.1.1 + +## 0.3.0 + +### Minor Changes + +- a604623324: Add the entire `Entity` to `EntityNodeData` and deprecate `name`, `kind`, `title`, `namespace` and `spec`. + + To get the deprecated properties in your custom component you can use: + + ```typescript + import { DEFAULT_NAMESPACE } from '@backstage/catalog-model'; + + const { + kind, + metadata: { name, namespace = DEFAULT_NAMESPACE, title }, + } = entity; + ``` + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 62b5922916: Internal theme type updates +- 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-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/types@1.1.1 + ## 0.2.38-next.2 ### Patch Changes diff --git a/plugins/catalog-graph/README.md b/plugins/catalog-graph/README.md index 010a129b0f..f00d11810f 100644 --- a/plugins/catalog-graph/README.md +++ b/plugins/catalog-graph/README.md @@ -90,7 +90,7 @@ To use the catalog graph plugin, you have to add some things to your Backstage a Copy the default implementation `DefaultRenderNode.tsx` and add more classes to the styles: ```typescript -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ node: { … diff --git a/plugins/catalog-graph/package.json b/plugins/catalog-graph/package.json index ab45ef6ea2..a8be8619a4 100644 --- a/plugins/catalog-graph/package.json +++ b/plugins/catalog-graph/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-graph", - "version": "0.2.38-next.2", + "version": "0.3.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-graphql/CHANGELOG.md b/plugins/catalog-graphql/CHANGELOG.md deleted file mode 100644 index 0a8a24b828..0000000000 --- a/plugins/catalog-graphql/CHANGELOG.md +++ /dev/null @@ -1,701 +0,0 @@ -# @backstage/plugin-catalog-graphql - -## 0.4.1-next.0 - -### Patch Changes - -- 6c2b872153: Add official support for React 18. -- Updated dependencies - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/types@1.1.1 - -## 0.4.0 - -### Minor Changes - -- 9def1e95ab: This package has been deprecated, consider using [@frontside/backstage-plugin-graphql-backend](https://www.npmjs.com/package/@frontside/backstage-plugin-graphql-backend) instead. - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.4.3 - - @backstage/config@1.1.1 - - @backstage/types@1.1.1 - -## 0.3.24-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.4.3-next.0 - - @backstage/config@1.1.1-next.0 - - @backstage/types@1.1.1 - -## 0.3.23 - -### Patch Changes - -- Updated dependencies - - @backstage/config@1.1.0 - - @backstage/catalog-model@1.4.2 - - @backstage/types@1.1.1 - -## 0.3.23-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.4.2-next.2 - - @backstage/config@1.1.0-next.2 - - @backstage/types@1.1.1-next.0 - -## 0.3.23-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/config@1.1.0-next.1 - - @backstage/catalog-model@1.4.2-next.1 - - @backstage/types@1.1.0 - -## 0.3.23-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/config@1.1.0-next.0 - - @backstage/catalog-model@1.4.2-next.0 - - @backstage/types@1.1.0 - -## 0.3.22 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.4.1 - - @backstage/config@1.0.8 - - @backstage/types@1.1.0 - -## 0.3.22-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.4.1-next.0 - - @backstage/config@1.0.8 - - @backstage/types@1.1.0 - -## 0.3.21 - -### Patch Changes - -- Updated dependencies - - @backstage/types@1.1.0 - - @backstage/catalog-model@1.4.0 - - @backstage/config@1.0.8 - -## 0.3.21-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.4.0-next.1 - - @backstage/config@1.0.7 - - @backstage/types@1.0.2 - -## 0.3.21-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.4.0-next.0 - - @backstage/config@1.0.7 - - @backstage/types@1.0.2 - -## 0.3.20 - -### Patch Changes - -- e47e69eadf0: Updated dependency `@apollo/server` to `^4.0.0`. -- e0c6e8b9c3c: Update peer dependencies -- Updated dependencies - - @backstage/catalog-model@1.3.0 - - @backstage/config@1.0.7 - - @backstage/types@1.0.2 - -## 0.3.20-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.3.0-next.0 - - @backstage/config@1.0.7 - - @backstage/types@1.0.2 - -## 0.3.20-next.1 - -### Patch Changes - -- e0c6e8b9c3c: Update peer dependencies -- Updated dependencies - - @backstage/catalog-model@1.2.1 - - @backstage/config@1.0.7 - - @backstage/types@1.0.2 - -## 0.3.20-next.0 - -### Patch Changes - -- e47e69eadf0: Updated dependency `@apollo/server` to `^4.0.0`. -- Updated dependencies - - @backstage/config@1.0.7 - - @backstage/catalog-model@1.2.1 - - @backstage/types@1.0.2 - -## 0.3.19 - -### Patch Changes - -- b990021ddeb: Updated dependency `@graphql-codegen/cli` to `^3.0.0`. - Updated dependency `@graphql-codegen/graphql-modules-preset` to `^3.0.0`. - Updated dependency `@graphql-codegen/typescript` to `^3.0.0`. - Updated dependency `@graphql-codegen/typescript-resolvers` to `^3.0.0`. -- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. -- Updated dependencies - - @backstage/catalog-model@1.2.1 - - @backstage/config@1.0.7 - - @backstage/types@1.0.2 - -## 0.3.19-next.1 - -### Patch Changes - -- b990021ddeb: Updated dependency `@graphql-codegen/cli` to `^3.0.0`. - Updated dependency `@graphql-codegen/graphql-modules-preset` to `^3.0.0`. - Updated dependency `@graphql-codegen/typescript` to `^3.0.0`. - Updated dependency `@graphql-codegen/typescript-resolvers` to `^3.0.0`. -- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. -- Updated dependencies - - @backstage/config@1.0.7-next.0 - - @backstage/catalog-model@1.2.1-next.1 - - @backstage/types@1.0.2 - -## 0.3.19-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.2.1-next.0 - - @backstage/config@1.0.6 - - @backstage/types@1.0.2 - -## 0.3.18 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.2.0 - - @backstage/config@1.0.6 - - @backstage/types@1.0.2 - -## 0.3.18-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.2.0-next.1 - - @backstage/config@1.0.6 - - @backstage/types@1.0.2 - -## 0.3.18-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.1.6-next.0 - -## 0.3.17 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.1.5 - - @backstage/config@1.0.6 - - @backstage/types@1.0.2 - -## 0.3.17-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/config@1.0.6-next.0 - - @backstage/catalog-model@1.1.5-next.1 - - @backstage/types@1.0.2 - -## 0.3.17-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.1.5-next.0 - - @backstage/config@1.0.5 - - @backstage/types@1.0.2 - -## 0.3.16 - -### Patch Changes - -- 3280711113: Updated dependency `msw` to `^0.49.0`. -- Updated dependencies - - @backstage/types@1.0.2 - - @backstage/catalog-model@1.1.4 - - @backstage/config@1.0.5 - -## 0.3.16-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/types@1.0.2-next.1 - - @backstage/config@1.0.5-next.1 - - @backstage/catalog-model@1.1.4-next.1 - -## 0.3.16-next.0 - -### Patch Changes - -- 3280711113: Updated dependency `msw` to `^0.49.0`. -- Updated dependencies - - @backstage/types@1.0.2-next.0 - - @backstage/catalog-model@1.1.4-next.0 - - @backstage/config@1.0.5-next.0 - -## 0.3.15 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.1.3 - - @backstage/types@1.0.1 - - @backstage/config@1.0.4 - -## 0.3.15-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.1.3-next.0 - - @backstage/types@1.0.1-next.0 - - @backstage/config@1.0.4-next.0 - -## 0.3.14 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.1.2 - - @backstage/config@1.0.3 - - @backstage/types@1.0.0 - -## 0.3.14-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.1.2-next.2 - - @backstage/config@1.0.3-next.2 - - @backstage/types@1.0.0 - -## 0.3.14-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.1.2-next.1 - - @backstage/config@1.0.3-next.1 - - @backstage/types@1.0.0 - -## 0.3.14-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.1.2-next.0 - - @backstage/config@1.0.3-next.0 - - @backstage/types@1.0.0 - -## 0.3.13 - -### Patch Changes - -- 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/catalog-model@1.1.1 - - @backstage/config@1.0.2 - -## 0.3.13-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.1.1-next.0 - - @backstage/config@1.0.2-next.0 - -## 0.3.13-next.2 - -### Patch Changes - -- 667d917488: Updated dependency `msw` to `^0.47.0`. -- 87ec2ba4d6: Updated dependency `msw` to `^0.46.0`. - -## 0.3.13-next.1 - -### Patch Changes - -- d669d89206: Minor API signatures cleanup - -## 0.3.13-next.0 - -### Patch Changes - -- bf5e9030eb: Updated dependency `msw` to `^0.45.0`. - -## 0.3.12 - -### Patch Changes - -- fa3eeee92d: Updated dependency `@graphql-tools/schema` to `^9.0.0`. - -## 0.3.11 - -### Patch Changes - -- a70869e775: Updated dependency `msw` to `^0.43.0`. -- 8006d0f9bf: Updated dependency `msw` to `^0.44.0`. -- Updated dependencies - - @backstage/catalog-model@1.1.0 - -## 0.3.11-next.1 - -### Patch Changes - -- a70869e775: Updated dependency `msw` to `^0.43.0`. -- Updated dependencies - - @backstage/catalog-model@1.1.0-next.3 - -## 0.3.11-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.1.0-next.0 - -## 0.3.10 - -### Patch Changes - -- 8f7b1835df: Updated dependency `msw` to `^0.41.0`. -- Updated dependencies - - @backstage/catalog-model@1.0.3 - -## 0.3.10-next.0 - -### Patch Changes - -- 8f7b1835df: Updated dependency `msw` to `^0.41.0`. -- Updated dependencies - - @backstage/catalog-model@1.0.3-next.0 - -## 0.3.9 - -### Patch Changes - -- Updated dependencies - - @backstage/config@1.0.1 - - @backstage/catalog-model@1.0.2 - -## 0.3.9-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/config@1.0.1-next.0 - - @backstage/catalog-model@1.0.2-next.0 - -## 0.3.8 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.0.1 - -## 0.3.8-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@1.0.1-next.0 - -## 0.3.7 - -### Patch Changes - -- 02ad19d189: Do not use `metadata.generation` from entity data -- Updated dependencies - - @backstage/catalog-model@1.0.0 - - @backstage/config@1.0.0 - - @backstage/types@1.0.0 - -## 0.3.6 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@0.13.0 - -## 0.3.6-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@0.13.0-next.0 - -## 0.3.5 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@0.12.0 - -## 0.3.4 - -### Patch Changes - -- 68913af4ff: chore(deps): bump `graphql-modules` from 1.4.4 to 2.0.0 -- Updated dependencies - - @backstage/catalog-model@0.11.0 - -## 0.3.3 - -### Patch Changes - -- Fix for the previous release with missing type declarations. -- Updated dependencies - - @backstage/catalog-model@0.10.1 - - @backstage/config@0.1.15 - - @backstage/types@0.1.3 - -## 0.3.2 - -### 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` -- Updated dependencies - - @backstage/catalog-model@0.10.0 - - @backstage/config@0.1.14 - - @backstage/types@0.1.2 - -## 0.3.1 - -### Patch Changes - -- Updated dependencies - - @backstage/config@0.1.13 - - @backstage/catalog-model@0.9.10 - -## 0.3.1-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/config@0.1.13-next.0 - - @backstage/catalog-model@0.9.10-next.0 - -## 0.3.0 - -### Minor Changes - -- 0fb17da164: chore: bumping dependencies in the GraphQL modules and bringing them up to date with the latest `graphql-modules` library - -### Patch Changes - -- cf01627a33: Bump graphql versions -- Updated dependencies - - @backstage/config@0.1.12 - - @backstage/catalog-model@0.9.9 - -## 0.2.14 - -### Patch Changes - -- 6b500622d5: Move to using node-fetch internally instead of cross-fetch - -## 0.2.13 - -### Patch Changes - -- 10615525f3: Switch to use the json and observable types from `@backstage/types` -- Updated dependencies - - @backstage/config@0.1.11 - - @backstage/catalog-model@0.9.6 - -## 0.2.12 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.9.0 - - @backstage/config@0.1.8 - -## 0.2.11 - -### Patch Changes - -- Updated dependencies - - @backstage/catalog-model@0.9.0 - - @backstage/backend-common@0.8.5 - -## 0.2.10 - -### Patch Changes - -- Updated dependencies [add62a455] -- Updated dependencies [704875e26] - - @backstage/catalog-model@0.8.0 - -## 0.2.9 - -### Patch Changes - -- 3be844496: chore: bump `ts-node` versions to 9.1.1 -- Updated dependencies [22fd8ce2a] -- Updated dependencies [10c008a3a] -- Updated dependencies [f9fb4a205] -- Updated dependencies [16be1d093] - - @backstage/backend-common@0.8.0 - - @backstage/catalog-model@0.7.9 - -## 0.2.8 - -### Patch Changes - -- Updated dependencies [e0bfd3d44] -- Updated dependencies [38ca05168] -- Updated dependencies [d8b81fd28] - - @backstage/backend-common@0.7.0 - - @backstage/catalog-model@0.7.8 - - @backstage/config@0.1.5 - -## 0.2.7 - -### Patch Changes - -- Updated dependencies [8686eb38c] -- Updated dependencies [0434853a5] -- Updated dependencies [8686eb38c] - - @backstage/backend-common@0.6.0 - - @backstage/config@0.1.4 - -## 0.2.6 - -### Patch Changes - -- Updated dependencies [def2307f3] -- Updated dependencies [0b135e7e0] -- Updated dependencies [294a70cab] -- Updated dependencies [0ea032763] -- Updated dependencies [5345a1f98] -- Updated dependencies [09a370426] -- Updated dependencies [a93f42213] - - @backstage/catalog-model@0.7.0 - - @backstage/backend-common@0.5.0 - -## 0.2.5 - -### Patch Changes - -- Updated dependencies [c911061b7] -- Updated dependencies [1d1c2860f] -- Updated dependencies [0e6298f7e] -- Updated dependencies [4eafdec4a] -- Updated dependencies [ac3560b42] - - @backstage/catalog-model@0.6.0 - - @backstage/backend-common@0.4.1 - -## 0.2.4 - -### Patch Changes - -- Updated dependencies [38e24db00] -- Updated dependencies [e3bd9fc2f] -- Updated dependencies [12bbd748c] -- Updated dependencies [83b6e0c1f] -- Updated dependencies [e3bd9fc2f] - - @backstage/backend-common@0.4.0 - - @backstage/config@0.1.2 - - @backstage/catalog-model@0.5.0 - -## 0.2.3 - -### Patch Changes - -- Updated dependencies [612368274] -- Updated dependencies [08835a61d] -- Updated dependencies [a9fd599f7] -- Updated dependencies [bcc211a08] - - @backstage/backend-common@0.3.3 - - @backstage/catalog-model@0.4.0 - -## 0.2.2 - -### Patch Changes - -- Updated dependencies [1166fcc36] -- Updated dependencies [bff3305aa] -- Updated dependencies [1185919f3] -- Updated dependencies [b47dce06f] - - @backstage/catalog-model@0.3.0 - - @backstage/backend-common@0.3.1 - -## 0.2.1 - -### Patch Changes - -- Updated dependencies [1722cb53c] -- Updated dependencies [1722cb53c] -- Updated dependencies [7b37e6834] -- Updated dependencies [8e2effb53] - - @backstage/backend-common@0.3.0 - -## 0.2.0 - -### Minor Changes - -- 28edd7d29: Create backend plugin through CLI - -### Patch Changes - -- Updated dependencies [3a4236570] -- Updated dependencies [e0be86b6f] -- Updated dependencies [f70a52868] -- Updated dependencies [12b5fe940] -- Updated dependencies [5249594c5] -- Updated dependencies [56e4eb589] -- Updated dependencies [e37c0a005] -- Updated dependencies [a768a07fb] -- Updated dependencies [f00ca3cb8] -- Updated dependencies [6579769df] -- Updated dependencies [5adfc005e] -- Updated dependencies [8c2b76e45] -- Updated dependencies [440a17b39] -- Updated dependencies [fa56f4615] -- Updated dependencies [8afce088a] -- Updated dependencies [b3d57961c] -- Updated dependencies [7bbeb049f] - - @backstage/catalog-model@0.2.0 - - @backstage/backend-common@0.2.0 diff --git a/plugins/catalog-graphql/README.md b/plugins/catalog-graphql/README.md deleted file mode 100644 index 021d0d1b20..0000000000 --- a/plugins/catalog-graphql/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Catalog GraphQL Plugin - -This package has been deprecated, consider using [@frontside/backstage-plugin-graphql-backend](https://www.npmjs.com/package/@frontside/backstage-plugin-graphql-backend) instead. diff --git a/plugins/catalog-graphql/api-report.md b/plugins/catalog-graphql/api-report.md deleted file mode 100644 index f03ed94af5..0000000000 --- a/plugins/catalog-graphql/api-report.md +++ /dev/null @@ -1,20 +0,0 @@ -## API Report File for "@backstage/plugin-catalog-graphql" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts -import { Config } from '@backstage/config'; -import { Logger } from 'winston'; -import { Module } from 'graphql-modules'; - -// @public (undocumented) -export function createModule(options: ModuleOptions): Promise; - -// @public (undocumented) -export interface ModuleOptions { - // (undocumented) - config: Config; - // (undocumented) - logger: Logger; -} -``` diff --git a/plugins/catalog-graphql/catalog-info.yaml b/plugins/catalog-graphql/catalog-info.yaml deleted file mode 100644 index 202acc8c95..0000000000 --- a/plugins/catalog-graphql/catalog-info.yaml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: backstage.io/v1alpha1 -kind: Component -metadata: - name: backstage-plugin-catalog-graphql - title: '@backstage/plugin-catalog-graphql' - description: An experimental Backstage catalog GraphQL module -spec: - lifecycle: experimental - type: backstage-backend-plugin - owner: catalog-maintainers diff --git a/plugins/catalog-graphql/codegen.yml b/plugins/catalog-graphql/codegen.yml deleted file mode 100644 index d71c9a7017..0000000000 --- a/plugins/catalog-graphql/codegen.yml +++ /dev/null @@ -1,14 +0,0 @@ -overwrite: true -generates: - ./src/graphql/types.ts: - schema: ./src/schema.js - plugins: - - typescript - - typescript-resolvers - hooks: - afterOneFileWrite: - - eslint --fix - config: - allowParentTypeOverride: true - useIndexSignature: true - defaultMapper: Partial<{T}> diff --git a/plugins/catalog-graphql/package.json b/plugins/catalog-graphql/package.json deleted file mode 100644 index de493b16f4..0000000000 --- a/plugins/catalog-graphql/package.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "name": "@backstage/plugin-catalog-graphql", - "description": "Deprecated, consider using @frontside/backstage-plugin-graphql-backend instead", - "version": "0.4.1-next.0", - "main": "src/index.ts", - "types": "src/index.ts", - "license": "Apache-2.0", - "publishConfig": { - "access": "public", - "main": "dist/index.cjs.js", - "types": "dist/index.d.ts" - }, - "backstage": { - "role": "backend-plugin" - }, - "homepage": "https://backstage.io", - "repository": { - "type": "git", - "url": "https://github.com/backstage/backstage", - "directory": "plugins/catalog-graphql" - }, - "keywords": [ - "backstage", - "graphql" - ], - "scripts": { - "start": "backstage-cli package start", - "build": "backstage-cli package build", - "lint": "backstage-cli package lint", - "test": "backstage-cli package test", - "prepack": "backstage-cli package prepack", - "postpack": "backstage-cli package postpack", - "generate:types": "graphql-codegen", - "clean": "backstage-cli package clean" - }, - "dependencies": { - "@apollo/client": "^3.0.0", - "@apollo/server": "^4.0.0", - "@backstage/catalog-model": "workspace:^", - "@backstage/config": "workspace:^", - "@backstage/types": "workspace:^", - "graphql": "^16.0.0", - "graphql-modules": "^2.0.0", - "graphql-tag": "^2.11.0", - "graphql-type-json": "^0.3.2", - "node-fetch": "^2.6.7", - "winston": "^3.2.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" - }, - "devDependencies": { - "@backstage/cli": "workspace:^", - "@backstage/test-utils": "workspace:^", - "@graphql-codegen/cli": "^3.0.0", - "@graphql-codegen/graphql-modules-preset": "^3.0.0", - "@graphql-codegen/typescript": "^3.0.0", - "@graphql-codegen/typescript-resolvers": "^3.0.0", - "@graphql-tools/schema": "^9.0.0", - "@types/react": "^16.13.1 || ^17.0.0", - "msw": "^1.0.0" - }, - "files": [ - "dist" - ] -} diff --git a/plugins/catalog-graphql/src/graphql/module.test.ts b/plugins/catalog-graphql/src/graphql/module.test.ts deleted file mode 100644 index d4589a2625..0000000000 --- a/plugins/catalog-graphql/src/graphql/module.test.ts +++ /dev/null @@ -1,314 +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 { createModule } from './module'; -import { makeExecutableSchema } from '@graphql-tools/schema'; -import { rest } from 'msw'; -import { setupServer } from 'msw/node'; -import { ConfigReader } from '@backstage/config'; -import { ReaderEntity } from '../service/client'; -import { createLogger } from 'winston'; -import { setupRequestMockHandlers } from '@backstage/test-utils'; -import { gql } from '@apollo/client'; -import { Module, createApplication, testkit } from 'graphql-modules'; - -describe('Catalog Module', () => { - const worker = setupServer(); - const mockCatalogBaseUrl = 'http://im.mock'; - const mockConfig = new ConfigReader({ - backend: { - baseUrl: mockCatalogBaseUrl, - }, - }); - - const createMockApplication = (module: Module) => { - const application = createApplication({ - modules: [module], - schemaBuilder(input) { - return makeExecutableSchema({ - ...input, - inheritResolversFromInterfaces: true, - }); - }, - }); - - return application; - }; - - setupRequestMockHandlers(worker); - - describe('Default Entity', () => { - beforeEach(() => { - const mockResponse: ReaderEntity[] = [ - { - apiVersion: 'something', - kind: 'Component', - metadata: { - annotations: {}, - etag: '123', - labels: {}, - name: 'Ben', - namespace: 'Blames', - uid: '123', - }, - spec: { - type: 'thing', - lifecycle: 'something', - owner: 'auser', - }, - }, - ]; - - worker.use( - rest.get(`${mockCatalogBaseUrl}/api/catalog/entities`, (_, res, ctx) => - res(ctx.status(200), ctx.json(mockResponse)), - ), - ); - }); - - it('should call the catalog client when requesting entities', async () => { - const app = createMockApplication( - await createModule({ - config: mockConfig, - logger: createLogger(), - }), - ); - - const result = await testkit.execute(app, { - document: gql` - query { - catalog { - list { - kind - apiVersion - metadata { - name - } - } - } - } - `, - }); - - const [catalogItem] = result.data?.catalog.list; - expect(catalogItem.kind).toBe('Component'); - expect(catalogItem.apiVersion).toBe('something'); - expect(catalogItem.metadata.name).toBe('Ben'); - }); - - it('Defaults to empty annotations when none are provided', async () => { - const mockResponse: ReaderEntity[] = [ - { - apiVersion: 'something', - kind: 'Component', - metadata: { - annotations: null as any, - etag: '123', - labels: {}, - name: 'Ben', - namespace: 'Blames', - uid: '123', - }, - spec: { - type: 'thing', - lifecycle: 'something', - owner: 'auser', - }, - }, - ]; - worker.use( - rest.get(`${mockCatalogBaseUrl}/api/catalog/entities`, (_, res, ctx) => - res(ctx.status(200), ctx.json(mockResponse)), - ), - ); - - const app = createMockApplication( - await createModule({ - config: mockConfig, - logger: createLogger(), - }), - ); - - const result = await testkit.execute(app, { - document: gql` - query { - catalog { - list { - metadata { - annotations - } - } - } - } - `, - }); - - const [catalogItem] = result.data?.catalog.list; - expect(catalogItem.metadata.annotations).toEqual({}); - }); - - it('Defaults to empty labels when none are provided', async () => { - const mockResponse: ReaderEntity[] = [ - { - apiVersion: 'something', - kind: 'Component', - metadata: { - annotations: {}, - etag: '123', - labels: null as any, - name: 'Ben', - namespace: 'Blames', - uid: '123', - }, - spec: { - type: 'thing', - lifecycle: 'something', - owner: 'auser', - }, - }, - ]; - worker.use( - rest.get(`${mockCatalogBaseUrl}/api/catalog/entities`, (_, res, ctx) => - res(ctx.status(200), ctx.json(mockResponse)), - ), - ); - - const app = createMockApplication( - await createModule({ - config: mockConfig, - logger: createLogger(), - }), - ); - - const result = await testkit.execute(app, { - document: gql` - query { - catalog { - list { - metadata { - labels - } - } - } - } - `, - }); - - const [catalogItem] = result.data?.catalog.list; - expect(catalogItem.metadata.labels).toEqual({}); - }); - it('Returns the correct record from the annotation dictionary', async () => { - const mockResponse: ReaderEntity[] = [ - { - apiVersion: 'something', - kind: 'Component', - metadata: { - annotations: { lob: 'bloben' }, - etag: '123', - labels: {}, - name: 'Ben', - namespace: 'Blames', - uid: '123', - }, - spec: { - type: 'thing', - lifecycle: 'something', - owner: 'auser', - }, - }, - ]; - worker.use( - rest.get(`${mockCatalogBaseUrl}/api/catalog/entities`, (_, res, ctx) => - res(ctx.status(200), ctx.json(mockResponse)), - ), - ); - - const app = createMockApplication( - await createModule({ - config: mockConfig, - logger: createLogger(), - }), - ); - - const result = await testkit.execute(app, { - document: gql` - query { - catalog { - list { - metadata { - test: annotation(name: "lob") - } - } - } - } - `, - }); - - const [catalogItem] = result.data?.catalog.list; - expect(catalogItem.metadata.test).toEqual('bloben'); - }); - it('Returns the correct record from the labels dictionary', async () => { - const mockResponse: ReaderEntity[] = [ - { - apiVersion: 'something', - kind: 'Component', - metadata: { - annotations: {}, - etag: '123', - labels: { lob2: 'bloben' }, - name: 'Ben', - namespace: 'Blames', - uid: '123', - }, - spec: { - type: 'thing', - lifecycle: 'something', - owner: 'auser', - }, - }, - ]; - worker.use( - rest.get(`${mockCatalogBaseUrl}/api/catalog/entities`, (_, res, ctx) => - res(ctx.status(200), ctx.json(mockResponse)), - ), - ); - - const app = createMockApplication( - await createModule({ - config: mockConfig, - logger: createLogger(), - }), - ); - - const result = await testkit.execute(app, { - document: gql` - query { - catalog { - list { - metadata { - test: label(name: "lob2") - } - } - } - } - `, - }); - - const [catalogItem] = result.data?.catalog.list; - expect(catalogItem.metadata.test).toEqual('bloben'); - }); - }); -}); diff --git a/plugins/catalog-graphql/src/graphql/module.ts b/plugins/catalog-graphql/src/graphql/module.ts deleted file mode 100644 index e27adbbaf1..0000000000 --- a/plugins/catalog-graphql/src/graphql/module.ts +++ /dev/null @@ -1,106 +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 { Logger } from 'winston'; -import { - createModule as createGraphQLModule, - Module, - gql, -} from 'graphql-modules'; -import { Resolvers, CatalogQuery } from './types'; -import { Config } from '@backstage/config'; -import { CatalogClient } from '../service/client'; -import GraphQLJSON, { GraphQLJSONObject } from 'graphql-type-json'; -import { Entity } from '@backstage/catalog-model'; -import typeDefs from '../schema'; - -/** @public */ -export interface ModuleOptions { - logger: Logger; - config: Config; -} - -/** @public */ -export async function createModule(options: ModuleOptions): Promise { - const catalogClient = new CatalogClient( - options.config.getString('backend.baseUrl'), - ); - - const resolvers: Resolvers = { - JSON: GraphQLJSON, - JSONObject: GraphQLJSONObject, - DefaultEntitySpec: { - raw: rootValue => { - const { entity } = rootValue as { entity: Entity }; - return entity.spec ?? null; - }, - }, - Query: { - catalog: () => ({} as CatalogQuery), - }, - CatalogQuery: { - list: async () => { - return await catalogClient.list(); - }, - }, - CatalogEntity: { - metadata: entity => ({ ...entity.metadata!, entity }), - spec: entity => ({ ...entity.spec!, entity }), - }, - EntityMetadata: { - __resolveType: rootValue => { - const { - entity: { kind }, - } = rootValue as { entity: Entity }; - - switch (kind) { - case 'Component': - return 'ComponentMetadata'; - case 'Template': - return 'TemplateMetadata'; - default: - return 'DefaultEntityMetadata'; - } - }, - annotation: (e, { name }) => e.annotations?.[name] ?? null, - labels: e => e.labels ?? {}, - annotations: e => e.annotations ?? {}, - label: (e, { name }) => e.labels?.[name] ?? null, - }, - EntitySpec: { - __resolveType: rootValue => { - const { - entity: { kind }, - } = rootValue as { entity: Entity }; - - switch (kind) { - case 'Component': - return 'ComponentEntitySpec'; - case 'Template': - return 'TemplateEntitySpec'; - default: - return 'DefaultEntitySpec'; - } - }, - }, - }; - - return createGraphQLModule({ - id: 'plugin-catalog-graphql', - typeDefs: gql(typeDefs), - resolvers, - }); -} diff --git a/plugins/catalog-graphql/src/graphql/types.ts b/plugins/catalog-graphql/src/graphql/types.ts deleted file mode 100644 index aecf2a1cd1..0000000000 --- a/plugins/catalog-graphql/src/graphql/types.ts +++ /dev/null @@ -1,544 +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 { - GraphQLResolveInfo, - GraphQLScalarType, - GraphQLScalarTypeConfig, -} from 'graphql'; - -export type Maybe = T | null; -export type InputMaybe = Maybe; -export type Exact = { - [K in keyof T]: T[K]; -}; -export type MakeOptional = Omit & { - [SubKey in K]?: Maybe; -}; -export type MakeMaybe = Omit & { - [SubKey in K]: Maybe; -}; -export type Omit = Pick>; -export type RequireFields = { - [X in Exclude]?: T[X]; -} & { [P in K]-?: NonNullable }; -/** All built-in and custom scalars, mapped to their actual values */ -export type Scalars = { - ID: string; - String: string; - Boolean: boolean; - Int: number; - Float: number; - JSON: any; - JSONObject: any; -}; - -export type CatalogEntity = { - __typename?: 'CatalogEntity'; - apiVersion: Scalars['String']; - kind: Scalars['String']; - metadata?: Maybe; - spec: EntitySpec; -}; - -export type CatalogQuery = { - __typename?: 'CatalogQuery'; - list: Array; -}; - -export type ComponentEntitySpec = { - __typename?: 'ComponentEntitySpec'; - lifecycle: Scalars['String']; - owner: Scalars['String']; - type: Scalars['String']; -}; - -export type ComponentMetadata = EntityMetadata & { - __typename?: 'ComponentMetadata'; - annotation?: Maybe; - annotations: Scalars['JSONObject']; - etag: Scalars['String']; - label?: Maybe; - labels: Scalars['JSONObject']; - name: Scalars['String']; - relationships?: Maybe; - uid: Scalars['String']; -}; - -export type ComponentMetadataAnnotationArgs = { - name: Scalars['String']; -}; - -export type ComponentMetadataLabelArgs = { - name: Scalars['String']; -}; - -export type DefaultEntityMetadata = EntityMetadata & { - __typename?: 'DefaultEntityMetadata'; - annotation?: Maybe; - annotations: Scalars['JSONObject']; - etag: Scalars['String']; - label?: Maybe; - labels: Scalars['JSONObject']; - name: Scalars['String']; - uid: Scalars['String']; -}; - -export type DefaultEntityMetadataAnnotationArgs = { - name: Scalars['String']; -}; - -export type DefaultEntityMetadataLabelArgs = { - name: Scalars['String']; -}; - -export type DefaultEntitySpec = { - __typename?: 'DefaultEntitySpec'; - raw?: Maybe; -}; - -export type EntityMetadata = { - annotation?: Maybe; - annotations: Scalars['JSONObject']; - etag: Scalars['String']; - label?: Maybe; - labels: Scalars['JSONObject']; - name: Scalars['String']; - uid: Scalars['String']; -}; - -export type EntityMetadataAnnotationArgs = { - name: Scalars['String']; -}; - -export type EntityMetadataLabelArgs = { - name: Scalars['String']; -}; - -export type EntitySpec = - | ComponentEntitySpec - | DefaultEntitySpec - | TemplateEntitySpec; - -export type Query = { - __typename?: 'Query'; - catalog: CatalogQuery; -}; - -export type TemplateEntitySpec = { - __typename?: 'TemplateEntitySpec'; - path?: Maybe; - schema: Scalars['JSONObject']; - templater: Scalars['String']; - type: Scalars['String']; -}; - -export type TemplateMetadata = EntityMetadata & { - __typename?: 'TemplateMetadata'; - annotation?: Maybe; - annotations: Scalars['JSONObject']; - etag: Scalars['String']; - label?: Maybe; - labels: Scalars['JSONObject']; - name: Scalars['String']; - uid: Scalars['String']; - updatedBy?: Maybe; -}; - -export type TemplateMetadataAnnotationArgs = { - name: Scalars['String']; -}; - -export type TemplateMetadataLabelArgs = { - name: Scalars['String']; -}; - -export type WithIndex = TObject & Record; -export type ResolversObject = WithIndex; - -export type ResolverTypeWrapper = Promise | T; - -export type ResolverWithResolve = { - resolve: ResolverFn; -}; -export type Resolver = - | ResolverFn - | ResolverWithResolve; - -export type ResolverFn = ( - parent: TParent, - args: TArgs, - context: TContext, - info: GraphQLResolveInfo, -) => Promise | TResult; - -export type SubscriptionSubscribeFn = ( - parent: TParent, - args: TArgs, - context: TContext, - info: GraphQLResolveInfo, -) => AsyncIterable | Promise>; - -export type SubscriptionResolveFn = ( - parent: TParent, - args: TArgs, - context: TContext, - info: GraphQLResolveInfo, -) => TResult | Promise; - -export interface SubscriptionSubscriberObject< - TResult, - TKey extends string, - TParent, - TContext, - TArgs, -> { - subscribe: SubscriptionSubscribeFn< - { [key in TKey]: TResult }, - TParent, - TContext, - TArgs - >; - resolve?: SubscriptionResolveFn< - TResult, - { [key in TKey]: TResult }, - TContext, - TArgs - >; -} - -export interface SubscriptionResolverObject { - subscribe: SubscriptionSubscribeFn; - resolve: SubscriptionResolveFn; -} - -export type SubscriptionObject< - TResult, - TKey extends string, - TParent, - TContext, - TArgs, -> = - | SubscriptionSubscriberObject - | SubscriptionResolverObject; - -export type SubscriptionResolver< - TResult, - TKey extends string, - TParent = {}, - TContext = {}, - TArgs = {}, -> = - | (( - ...args: any[] - ) => SubscriptionObject) - | SubscriptionObject; - -export type TypeResolveFn = ( - parent: TParent, - context: TContext, - info: GraphQLResolveInfo, -) => Maybe | Promise>; - -export type IsTypeOfResolverFn = ( - obj: T, - context: TContext, - info: GraphQLResolveInfo, -) => boolean | Promise; - -export type NextResolverFn = () => Promise; - -export type DirectiveResolverFn< - TResult = {}, - TParent = {}, - TContext = {}, - TArgs = {}, -> = ( - next: NextResolverFn, - parent: TParent, - args: TArgs, - context: TContext, - info: GraphQLResolveInfo, -) => TResult | Promise; - -/** Mapping between all available schema types and the resolvers types */ -export type ResolversTypes = ResolversObject<{ - Boolean: ResolverTypeWrapper>; - CatalogEntity: ResolverTypeWrapper< - Partial< - Omit & { spec: ResolversTypes['EntitySpec'] } - > - >; - CatalogQuery: ResolverTypeWrapper>; - ComponentEntitySpec: ResolverTypeWrapper>; - ComponentMetadata: ResolverTypeWrapper>; - DefaultEntityMetadata: ResolverTypeWrapper>; - DefaultEntitySpec: ResolverTypeWrapper>; - EntityMetadata: - | ResolversTypes['ComponentMetadata'] - | ResolversTypes['DefaultEntityMetadata'] - | ResolversTypes['TemplateMetadata']; - EntitySpec: Partial< - | ResolversTypes['ComponentEntitySpec'] - | ResolversTypes['DefaultEntitySpec'] - | ResolversTypes['TemplateEntitySpec'] - >; - Int: ResolverTypeWrapper>; - JSON: ResolverTypeWrapper>; - JSONObject: ResolverTypeWrapper>; - Query: ResolverTypeWrapper<{}>; - String: ResolverTypeWrapper>; - TemplateEntitySpec: ResolverTypeWrapper>; - TemplateMetadata: ResolverTypeWrapper>; -}>; - -/** Mapping between all available schema types and the resolvers parents */ -export type ResolversParentTypes = ResolversObject<{ - Boolean: Partial; - CatalogEntity: Partial< - Omit & { spec: ResolversParentTypes['EntitySpec'] } - >; - CatalogQuery: Partial; - ComponentEntitySpec: Partial; - ComponentMetadata: Partial; - DefaultEntityMetadata: Partial; - DefaultEntitySpec: Partial; - EntityMetadata: - | ResolversParentTypes['ComponentMetadata'] - | ResolversParentTypes['DefaultEntityMetadata'] - | ResolversParentTypes['TemplateMetadata']; - EntitySpec: Partial< - | ResolversParentTypes['ComponentEntitySpec'] - | ResolversParentTypes['DefaultEntitySpec'] - | ResolversParentTypes['TemplateEntitySpec'] - >; - Int: Partial; - JSON: Partial; - JSONObject: Partial; - Query: {}; - String: Partial; - TemplateEntitySpec: Partial; - TemplateMetadata: Partial; -}>; - -export type CatalogEntityResolvers< - ContextType = any, - ParentType = ResolversParentTypes['CatalogEntity'], -> = ResolversObject<{ - apiVersion?: Resolver; - kind?: Resolver; - metadata?: Resolver< - Maybe, - ParentType, - ContextType - >; - spec?: Resolver; - __isTypeOf?: IsTypeOfResolverFn; -}>; - -export type CatalogQueryResolvers< - ContextType = any, - ParentType = ResolversParentTypes['CatalogQuery'], -> = ResolversObject<{ - list?: Resolver< - Array, - ParentType, - ContextType - >; - __isTypeOf?: IsTypeOfResolverFn; -}>; - -export type ComponentEntitySpecResolvers< - ContextType = any, - ParentType = ResolversParentTypes['ComponentEntitySpec'], -> = ResolversObject<{ - lifecycle?: Resolver; - owner?: Resolver; - type?: Resolver; - __isTypeOf?: IsTypeOfResolverFn; -}>; - -export type ComponentMetadataResolvers< - ContextType = any, - ParentType = ResolversParentTypes['ComponentMetadata'], -> = ResolversObject<{ - annotation?: Resolver< - Maybe, - ParentType, - ContextType, - RequireFields - >; - annotations?: Resolver; - etag?: Resolver; - label?: Resolver< - Maybe, - ParentType, - ContextType, - RequireFields - >; - labels?: Resolver; - name?: Resolver; - relationships?: Resolver< - Maybe, - ParentType, - ContextType - >; - uid?: Resolver; - __isTypeOf?: IsTypeOfResolverFn; -}>; - -export type DefaultEntityMetadataResolvers< - ContextType = any, - ParentType = ResolversParentTypes['DefaultEntityMetadata'], -> = ResolversObject<{ - annotation?: Resolver< - Maybe, - ParentType, - ContextType, - RequireFields - >; - annotations?: Resolver; - etag?: Resolver; - label?: Resolver< - Maybe, - ParentType, - ContextType, - RequireFields - >; - labels?: Resolver; - name?: Resolver; - uid?: Resolver; - __isTypeOf?: IsTypeOfResolverFn; -}>; - -export type DefaultEntitySpecResolvers< - ContextType = any, - ParentType = ResolversParentTypes['DefaultEntitySpec'], -> = ResolversObject<{ - raw?: Resolver, ParentType, ContextType>; - __isTypeOf?: IsTypeOfResolverFn; -}>; - -export type EntityMetadataResolvers< - ContextType = any, - ParentType = ResolversParentTypes['EntityMetadata'], -> = ResolversObject<{ - __resolveType: TypeResolveFn< - 'ComponentMetadata' | 'DefaultEntityMetadata' | 'TemplateMetadata', - ParentType, - ContextType - >; - annotation?: Resolver< - Maybe, - ParentType, - ContextType, - RequireFields - >; - annotations?: Resolver; - etag?: Resolver; - label?: Resolver< - Maybe, - ParentType, - ContextType, - RequireFields - >; - labels?: Resolver; - name?: Resolver; - uid?: Resolver; -}>; - -export type EntitySpecResolvers< - ContextType = any, - ParentType = ResolversParentTypes['EntitySpec'], -> = ResolversObject<{ - __resolveType: TypeResolveFn< - 'ComponentEntitySpec' | 'DefaultEntitySpec' | 'TemplateEntitySpec', - ParentType, - ContextType - >; -}>; - -export interface JsonScalarConfig - extends GraphQLScalarTypeConfig { - name: 'JSON'; -} - -export interface JsonObjectScalarConfig - extends GraphQLScalarTypeConfig { - name: 'JSONObject'; -} - -export type QueryResolvers< - ContextType = any, - ParentType = ResolversParentTypes['Query'], -> = ResolversObject<{ - catalog?: Resolver; -}>; - -export type TemplateEntitySpecResolvers< - ContextType = any, - ParentType = ResolversParentTypes['TemplateEntitySpec'], -> = ResolversObject<{ - path?: Resolver, ParentType, ContextType>; - schema?: Resolver; - templater?: Resolver; - type?: Resolver; - __isTypeOf?: IsTypeOfResolverFn; -}>; - -export type TemplateMetadataResolvers< - ContextType = any, - ParentType = ResolversParentTypes['TemplateMetadata'], -> = ResolversObject<{ - annotation?: Resolver< - Maybe, - ParentType, - ContextType, - RequireFields - >; - annotations?: Resolver; - etag?: Resolver; - label?: Resolver< - Maybe, - ParentType, - ContextType, - RequireFields - >; - labels?: Resolver; - name?: Resolver; - uid?: Resolver; - updatedBy?: Resolver< - Maybe, - ParentType, - ContextType - >; - __isTypeOf?: IsTypeOfResolverFn; -}>; - -export type Resolvers = ResolversObject<{ - CatalogEntity?: CatalogEntityResolvers; - CatalogQuery?: CatalogQueryResolvers; - ComponentEntitySpec?: ComponentEntitySpecResolvers; - ComponentMetadata?: ComponentMetadataResolvers; - DefaultEntityMetadata?: DefaultEntityMetadataResolvers; - DefaultEntitySpec?: DefaultEntitySpecResolvers; - EntityMetadata?: EntityMetadataResolvers; - EntitySpec?: EntitySpecResolvers; - JSON?: GraphQLScalarType; - JSONObject?: GraphQLScalarType; - Query?: QueryResolvers; - TemplateEntitySpec?: TemplateEntitySpecResolvers; - TemplateMetadata?: TemplateMetadataResolvers; -}>; diff --git a/plugins/catalog-graphql/src/schema.js b/plugins/catalog-graphql/src/schema.js deleted file mode 100644 index cf6ccf3017..0000000000 --- a/plugins/catalog-graphql/src/schema.js +++ /dev/null @@ -1,104 +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. - */ - -const schema = /* GraphQL */ ` - scalar JSON - scalar JSONObject - - interface EntityMetadata { - name: String! - annotations: JSONObject! - annotation(name: String!): JSON - labels: JSONObject! - label(name: String!): JSON - uid: String! - etag: String! - } - - type DefaultEntityMetadata implements EntityMetadata { - name: String! - annotations: JSONObject! - annotation(name: String!): JSON - labels: JSONObject! - label(name: String!): JSON - uid: String! - etag: String! - } - - type ComponentMetadata implements EntityMetadata { - name: String! - annotations: JSONObject! - annotation(name: String!): JSON - labels: JSONObject! - label(name: String!): JSON - uid: String! - etag: String! - # mock field to prove extensions working - relationships: String - } - - type TemplateMetadata implements EntityMetadata { - name: String! - annotations: JSONObject! - annotation(name: String!): JSON - labels: JSONObject! - label(name: String!): JSON - uid: String! - etag: String! - # mock field to prove extensions working - updatedBy: String - } - - # TODO: move this definition into plugin-scaffolder-graphql - type TemplateEntitySpec { - type: String! - path: String - schema: JSONObject! - templater: String! - } - - type ComponentEntitySpec { - type: String! - lifecycle: String! - owner: String! - } - - type DefaultEntitySpec { - raw: JSONObject - } - - union EntitySpec = - DefaultEntitySpec - | TemplateEntitySpec - | ComponentEntitySpec - - type CatalogEntity { - apiVersion: String! - kind: String! - metadata: EntityMetadata - spec: EntitySpec! - } - - type CatalogQuery { - list: [CatalogEntity!]! - } - - type Query { - catalog: CatalogQuery! - } -`; - -export default schema; diff --git a/plugins/catalog-graphql/src/service/client.test.ts b/plugins/catalog-graphql/src/service/client.test.ts deleted file mode 100644 index 72041725a3..0000000000 --- a/plugins/catalog-graphql/src/service/client.test.ts +++ /dev/null @@ -1,56 +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 { CatalogClient } from './client'; -import { rest } from 'msw'; -import { setupServer } from 'msw/node'; -import { setupRequestMockHandlers } from '@backstage/test-utils'; - -describe('Catalog GraphQL Module', () => { - const worker = setupServer(); - setupRequestMockHandlers(worker); - - const baseUrl = 'http://localhost:1234'; - - it('will return the entities', async () => { - const expectedResponse = [{ id: 'something' }]; - - worker.use( - rest.get(`${baseUrl}/api/catalog/entities`, (_, res, ctx) => - res(ctx.status(200), ctx.json(expectedResponse)), - ), - ); - - const client = new CatalogClient(baseUrl); - - const response = await client.list(); - - expect(response).toEqual(expectedResponse); - }); - - it('throws an error with the text', async () => { - const expectedResponse = 'something broke'; - - worker.use( - rest.get(`${baseUrl}/api/catalog/entities`, (_, res, ctx) => - res(ctx.status(500), ctx.text(expectedResponse)), - ), - ); - - const client = new CatalogClient(baseUrl); - - await expect(() => client.list()).rejects.toThrow(expectedResponse); - }); -}); diff --git a/plugins/catalog-graphql/src/service/client.ts b/plugins/catalog-graphql/src/service/client.ts deleted file mode 100644 index c6a5cff140..0000000000 --- a/plugins/catalog-graphql/src/service/client.ts +++ /dev/null @@ -1,47 +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, EntityMeta } from '@backstage/catalog-model'; -import fetch from 'node-fetch'; - -export interface ReaderEntityMeta extends EntityMeta { - uid: string; - etag: string; - namespace: string; - annotations: Record; - labels: Record; -} - -export interface ReaderEntity extends Entity { - metadata: ReaderEntityMeta; -} - -export class CatalogClient { - constructor(private baseUrl: string) {} - - async list(): Promise { - const res = await fetch(`${this.baseUrl}/api/catalog/entities`); - - if (!res.ok) { - // todo(blam): need some better way to handle errors here - // experiment with throwing the input errors etc and having graphql versions of that - throw new Error(await res.text()); - } - - const entities = (await res.json()) as ReaderEntity[]; - return entities; - } -} diff --git a/plugins/catalog-import/CHANGELOG.md b/plugins/catalog-import/CHANGELOG.md index 5d99d9cd83..b5e55fa324 100644 --- a/plugins/catalog-import/CHANGELOG.md +++ b/plugins/catalog-import/CHANGELOG.md @@ -1,5 +1,52 @@ # @backstage/plugin-catalog-import +## 0.10.4-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.0.1-next.0 + +## 0.10.4-next.0 + +### Patch Changes + +- 03d0b6dcdc: The `convertLegacyRouteRef` utility used by the alpha exports is now imported from `@backstage/core-compat-api`. +- Updated dependencies + - @backstage/core-compat-api@0.0.2-next.0 + - @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/integration@1.8.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/integration-react@1.1.22-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/plugin-catalog-common@1.0.18 + +## 0.10.2 + +### Patch Changes + +- 6db75b900a: Create an experimental plugin that is compatible with the declarative integration system, it is exported from the `/alpha` subpath. +- 6c2b872153: Add official support for React 18. +- dee1f39fcc: Fix missing children key warning on the default catalog import page. +- 71c97e7d73: The `app.title` configuration is now properly required to be a string. +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/integration@1.7.2 + - @backstage/integration-react@1.1.21 + - @backstage/core-plugin-api@1.8.0 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-catalog-common@1.0.18 + ## 0.10.2-next.2 ### Patch Changes diff --git a/plugins/catalog-import/package.json b/plugins/catalog-import/package.json index b528ae0ac1..23e0ea6755 100644 --- a/plugins/catalog-import/package.json +++ b/plugins/catalog-import/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-import", "description": "A Backstage plugin the helps you import entities into your catalog", - "version": "0.10.2-next.2", + "version": "0.10.4-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -49,6 +49,7 @@ "@backstage/catalog-client": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", + "@backstage/core-compat-api": "workspace:^", "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", "@backstage/errors": "workspace:^", diff --git a/plugins/catalog-import/src/alpha.tsx b/plugins/catalog-import/src/alpha.tsx index bde1048f13..18ddda2ceb 100644 --- a/plugins/catalog-import/src/alpha.tsx +++ b/plugins/catalog-import/src/alpha.tsx @@ -20,7 +20,7 @@ import { discoveryApiRef, identityApiRef, } from '@backstage/core-plugin-api'; -import { convertLegacyRouteRef } from '@backstage/core-plugin-api/alpha'; +import { convertLegacyRouteRef } from '@backstage/core-compat-api'; import { createApiExtension, createPageExtension, diff --git a/plugins/catalog-node/CHANGELOG.md b/plugins/catalog-node/CHANGELOG.md index 228dd31789..20e5462e95 100644 --- a/plugins/catalog-node/CHANGELOG.md +++ b/plugins/catalog-node/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-catalog-node +## 1.5.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + +## 1.5.0 + +### Minor Changes + +- e5bf3749ad: Support adding location analyzers in new catalog analysis extension point and move `AnalyzeOptions` and `ScmLocationAnalyzer` types to `@backstage/plugin-catalog-node` + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.7 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + ## 1.5.0-next.2 ### Patch Changes diff --git a/plugins/catalog-node/package.json b/plugins/catalog-node/package.json index 27277b5381..f07ffd2c91 100644 --- a/plugins/catalog-node/package.json +++ b/plugins/catalog-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-node", "description": "The plugin-catalog-node module for @backstage/plugin-catalog-backend", - "version": "1.5.0-next.2", + "version": "1.5.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-react/CHANGELOG.md b/plugins/catalog-react/CHANGELOG.md index 24a21d1e71..7bbbc00716 100644 --- a/plugins/catalog-react/CHANGELOG.md +++ b/plugins/catalog-react/CHANGELOG.md @@ -1,5 +1,78 @@ # @backstage/plugin-catalog-react +## 1.9.2-next.0 + +### Patch Changes + +- 8587f067d2: Added pagination support to `EntityListProvider`. +- aaa6fb3bc9: Minor updates for TypeScript 5.2.2+ compatibility +- 4d9e3b39e4: Register component overrides in the global `OverrideComponentNameToClassKeys` provided by `@backstage/theme`. This will in turn will provide component style override types for `createUnifiedTheme`. +- eee0ff2946: Fixed a issue where `CatalogPage` wasn't using the chosen `initiallySelectedFilter` as intended. +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/plugin-permission-react@0.4.18-next.0 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.7 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-permission-common@0.7.10 + +## 1.9.0 + +### Minor Changes + +- 1e5b7d993a: Added an `EntityPresentationApi` and associated `entityPresentationApiRef`. This + API lets you control how references to entities (e.g. in links, headings, + iconography etc) are represented in the user interface. + + Usage of this API is initially added to the `EntityRefLink` and `EntityRefLinks` + components, so that they can render richer, more correct representation of + entity refs. There's also a new `EntityDisplayName` component, which works just like + the `EntityRefLink` but without the link. + + Along with that change, the `fetchEntities` and `getTitle` props of + `EntityRefLinksProps` are deprecated and no longer used, since the same need + instead is fulfilled (and by default always enabled) by the + `entityPresentationApiRef`. + +- 1fd53fa0c6: The `UserListPicker` component has undergone improvements to enhance its performance. + + The previous implementation inferred the number of owned and starred entities based on the entities available in the `EntityListContext`. The updated version no longer relies on the `EntityListContext` for inference, allowing for better decoupling. + + The component now loads the entities' count asynchronously, resulting in improved performance and responsiveness. For this purpose, some of the exported filters such as `EntityTagFilter`, `EntityOwnerFilter`, `EntityLifecycleFilter` and `EntityNamespaceFilter` have now the `getCatalogFilters` method implemented. + +### Patch Changes + +- 2ad1bacef7: Add EntityRef to Entity Inspector UI +- 6c2b872153: Add official support for React 18. +- 69ee8d75f4: Remove `button` prop from used MaterialUI `MenuItem` component fixing incompatibility with MaterialUI v5. +- 0bf6ebda88: Added new APIs at the `/alpha` subpath for creating entity page cards and content for the new frontend system. +- 77f009b35d: Internal updates to match changes in the experimental `@backstage/frontend-plugin-api`. +- 71c97e7d73: The `spec.type` field in entities will now always be rendered as a string. +- 69c14904b6: Move the `EntityRefLink` icon to the left hand side as per Material-UI guidelines +- 000dcd01af: Removed unnecessary `@backstage/integration` dependency, replaced by `@backstage/integration-react`. +- 6c357184e2: Export `MissingAnnotationEmptyState` from `@backstage/plugin-catalog-react` +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/integration-react@1.1.21 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-permission-react@0.4.17 + - @backstage/version-bridge@1.0.7 + - @backstage/theme@0.4.4 + - @backstage/catalog-client@1.4.6 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + ## 1.9.0-next.2 ### Patch Changes diff --git a/plugins/catalog-react/api-report.md b/plugins/catalog-react/api-report.md index 5ebc9de8d6..8c6b3a729f 100644 --- a/plugins/catalog-react/api-report.md +++ b/plugins/catalog-react/api-report.md @@ -196,8 +196,8 @@ export const EntityDisplayName: (props: EntityDisplayNameProps) => JSX.Element; // @public export type EntityDisplayNameProps = { entityRef: Entity | CompoundEntityRef | string; - noIcon?: boolean; - noTooltip?: boolean; + hideIcon?: boolean; + disableTooltip?: boolean; defaultKind?: string; defaultNamespace?: string; }; @@ -284,13 +284,26 @@ export type EntityListContextProps< queryParameters: Partial>; loading: boolean; error?: Error; + pageInfo?: { + next?: () => void; + prev?: () => void; + }; }; // @public export const EntityListProvider: ( - props: PropsWithChildren<{}>, + props: EntityListProviderProps, ) => React_2.JSX.Element; +// @public (undocumented) +export type EntityListProviderProps = PropsWithChildren<{ + pagination?: + | boolean + | { + limit?: number; + }; +}>; + // @public (undocumented) export type EntityLoadingStatus = { entity?: TEntity; @@ -399,6 +412,7 @@ export type EntityRefLinkProps = { defaultNamespace?: string; title?: string; children?: React_2.ReactNode; + hideIcon?: boolean; } & Omit; // @public @@ -412,6 +426,7 @@ export type EntityRefLinksProps< > = { defaultKind?: string; entityRefs: TRef[]; + hideIcons?: boolean; fetchEntities?: boolean; getTitle?(entity: TRef): string | undefined; } & Omit; diff --git a/plugins/catalog-react/package.json b/plugins/catalog-react/package.json index abefaeadb9..1017cbf70b 100644 --- a/plugins/catalog-react/package.json +++ b/plugins/catalog-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog-react", "description": "A frontend library that helps other Backstage plugins interact with the catalog", - "version": "1.9.0-next.2", + "version": "1.9.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog-react/src/alpha.tsx b/plugins/catalog-react/src/alpha.tsx index 8d0436e4be..a339816742 100644 --- a/plugins/catalog-react/src/alpha.tsx +++ b/plugins/catalog-react/src/alpha.tsx @@ -113,7 +113,7 @@ export function createEntityCardExtension< .optional(), }), ), - factory({ config, inputs, source }) { + factory({ config, inputs, node }) { const ExtensionComponent = lazy(() => options .loader({ inputs }) @@ -122,7 +122,7 @@ export function createEntityCardExtension< return { element: ( - + ), @@ -179,7 +179,7 @@ export function createEntityContentExtension< .optional(), }), ), - factory({ config, inputs, source }) { + factory({ config, inputs, node }) { const ExtensionComponent = lazy(() => options .loader({ inputs }) @@ -191,7 +191,7 @@ export function createEntityContentExtension< title: config.title, routeRef: options.routeRef, element: ( - + ), diff --git a/plugins/catalog-react/src/apis/EntityPresentationApi/defaultEntityPresentation.ts b/plugins/catalog-react/src/apis/EntityPresentationApi/defaultEntityPresentation.ts index eacb659062..4ba18e35d1 100644 --- a/plugins/catalog-react/src/apis/EntityPresentationApi/defaultEntityPresentation.ts +++ b/plugins/catalog-react/src/apis/EntityPresentationApi/defaultEntityPresentation.ts @@ -30,6 +30,7 @@ import LocationOnIcon from '@material-ui/icons/LocationOn'; import MemoryIcon from '@material-ui/icons/Memory'; import PeopleIcon from '@material-ui/icons/People'; import PersonIcon from '@material-ui/icons/Person'; +import WorkIcon from '@material-ui/icons/Work'; import get from 'lodash/get'; import { EntityRefPresentationSnapshot } from './EntityPresentationApi'; @@ -39,6 +40,7 @@ const DEFAULT_ICONS: Record = { api: ExtensionIcon, component: MemoryIcon, system: BusinessIcon, + resource: WorkIcon, domain: ApartmentIcon, location: LocationOnIcon, user: PersonIcon, diff --git a/plugins/catalog-react/src/components/CatalogFilterLayout/CatalogFilterLayout.tsx b/plugins/catalog-react/src/components/CatalogFilterLayout/CatalogFilterLayout.tsx index 1a1404edf2..1a0c446c9e 100644 --- a/plugins/catalog-react/src/components/CatalogFilterLayout/CatalogFilterLayout.tsx +++ b/plugins/catalog-react/src/components/CatalogFilterLayout/CatalogFilterLayout.tsx @@ -20,12 +20,12 @@ import { Button, Drawer, Grid, + Theme, Typography, useMediaQuery, useTheme, } from '@material-ui/core'; import FilterListIcon from '@material-ui/icons/FilterList'; -import { BackstageTheme } from '@backstage/theme'; /** @public */ export const Filters = (props: { @@ -35,10 +35,10 @@ export const Filters = (props: { drawerAnchor?: 'left' | 'right' | 'top' | 'bottom'; }; }) => { - const isScreenSmallerThanBreakpoint = useMediaQuery(theme => + const isScreenSmallerThanBreakpoint = useMediaQuery((theme: Theme) => theme.breakpoints.down(props.options?.drawerBreakpoint ?? 'md'), ); - const theme = useTheme(); + const theme = useTheme(); const [filterDrawerOpen, setFilterDrawerOpen] = useState(false); return isScreenSmallerThanBreakpoint ? ( diff --git a/plugins/catalog-react/src/components/EntityAutocompletePicker/EntityAutocompletePicker.tsx b/plugins/catalog-react/src/components/EntityAutocompletePicker/EntityAutocompletePicker.tsx index 3eaba51909..98e680aa12 100644 --- a/plugins/catalog-react/src/components/EntityAutocompletePicker/EntityAutocompletePicker.tsx +++ b/plugins/catalog-react/src/components/EntityAutocompletePicker/EntityAutocompletePicker.tsx @@ -130,7 +130,7 @@ export function EntityAutocompletePicker< {label} - multiple disableCloseOnSelect options={availableOptions} diff --git a/plugins/catalog-react/src/components/EntityDisplayName/EntityDisplayName.tsx b/plugins/catalog-react/src/components/EntityDisplayName/EntityDisplayName.tsx index 6bdbe83a84..de55f46391 100644 --- a/plugins/catalog-react/src/components/EntityDisplayName/EntityDisplayName.tsx +++ b/plugins/catalog-react/src/components/EntityDisplayName/EntityDisplayName.tsx @@ -34,7 +34,7 @@ const useStyles = makeStyles( alignItems: 'center', }, icon: { - marginLeft: theme.spacing(0.5), + marginRight: theme.spacing(0.5), color: theme.palette.text.secondary, lineHeight: 0, }, @@ -49,8 +49,8 @@ const useStyles = makeStyles( */ export type EntityDisplayNameProps = { entityRef: Entity | CompoundEntityRef | string; - noIcon?: boolean; - noTooltip?: boolean; + hideIcon?: boolean; + disableTooltip?: boolean; defaultKind?: string; defaultNamespace?: string; }; @@ -63,7 +63,8 @@ export type EntityDisplayNameProps = { export const EntityDisplayName = ( props: EntityDisplayNameProps, ): JSX.Element => { - const { entityRef, noIcon, noTooltip, defaultKind, defaultNamespace } = props; + const { entityRef, hideIcon, disableTooltip, defaultKind, defaultNamespace } = + props; const classes = useStyles(); const { primaryTitle, secondaryTitle, Icon } = useEntityPresentation( @@ -77,17 +78,17 @@ export const EntityDisplayName = ( // Optionally an icon, and wrapper around them both content = ( - {content} - {Icon && !noIcon ? ( + {Icon && !hideIcon ? ( ) : null} + {content} ); // Optionally, a tooltip as the outermost layer - if (secondaryTitle && !noTooltip) { + if (secondaryTitle && !disableTooltip) { content = ( {content} diff --git a/plugins/catalog-react/src/components/EntityPeekAheadPopover/EntityPeekAheadPopover.test.tsx b/plugins/catalog-react/src/components/EntityPeekAheadPopover/EntityPeekAheadPopover.test.tsx index 85a477801a..d8bd8f11a6 100644 --- a/plugins/catalog-react/src/components/EntityPeekAheadPopover/EntityPeekAheadPopover.test.tsx +++ b/plugins/catalog-react/src/components/EntityPeekAheadPopover/EntityPeekAheadPopover.test.tsx @@ -66,12 +66,12 @@ describe('', () => { ); expect(screen.getByText('s1')).toBeInTheDocument(); expect(screen.queryByText('service1')).toBeNull(); - user.hover(screen.getByTestId('popover1')); + await user.hover(screen.getByTestId('popover1')); expect(await screen.findByText('service1')).toBeInTheDocument(); expect(screen.getByText('s2')).toBeInTheDocument(); expect(screen.queryByText('service2')).toBeNull(); - user.hover(screen.getByTestId('popover2')); + await user.hover(screen.getByTestId('popover2')); expect( await screen.findByText('Error: component:default/service2 not found'), ).toBeInTheDocument(); diff --git a/plugins/catalog-react/src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.tsx b/plugins/catalog-react/src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.tsx index 01a6e0188d..7b8a35d162 100644 --- a/plugins/catalog-react/src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.tsx +++ b/plugins/catalog-react/src/components/EntityProcessingStatusPicker/EntityProcessingStatusPicker.tsx @@ -72,7 +72,7 @@ export const EntityProcessingStatusPicker = () => { Processing Status - multiple disableCloseOnSelect options={availableAdvancedItems} diff --git a/plugins/catalog-react/src/components/EntityRefLink/EntityRefLink.tsx b/plugins/catalog-react/src/components/EntityRefLink/EntityRefLink.tsx index 32627fccb2..c5af47e870 100644 --- a/plugins/catalog-react/src/components/EntityRefLink/EntityRefLink.tsx +++ b/plugins/catalog-react/src/components/EntityRefLink/EntityRefLink.tsx @@ -38,6 +38,7 @@ export type EntityRefLinkProps = { /** @deprecated This option should no longer be used; presentation is requested through the {@link entityPresentationApiRef} instead */ title?: string; children?: React.ReactNode; + hideIcon?: boolean; } & Omit; /** @@ -53,6 +54,7 @@ export const EntityRefLink = forwardRef( defaultNamespace, title, children, + hideIcon, ...linkProps } = props; const entityRoute = useEntityRoute(props.entityRef); @@ -62,6 +64,7 @@ export const EntityRefLink = forwardRef( entityRef={entityRef} defaultKind={defaultKind} defaultNamespace={defaultNamespace} + hideIcon={hideIcon} /> ); diff --git a/plugins/catalog-react/src/components/EntityRefLink/EntityRefLinks.tsx b/plugins/catalog-react/src/components/EntityRefLink/EntityRefLinks.tsx index 929b3f9376..a9370af471 100644 --- a/plugins/catalog-react/src/components/EntityRefLink/EntityRefLinks.tsx +++ b/plugins/catalog-react/src/components/EntityRefLink/EntityRefLinks.tsx @@ -32,6 +32,7 @@ export type EntityRefLinksProps< > = { defaultKind?: string; entityRefs: TRef[]; + hideIcons?: boolean; /** @deprecated This option is no longer used; presentation is handled by entityPresentationApiRef instead */ fetchEntities?: boolean; /** @deprecated This option is no longer used; presentation is handled by entityPresentationApiRef instead */ @@ -46,7 +47,7 @@ export type EntityRefLinksProps< export function EntityRefLinks< TRef extends string | CompoundEntityRef | Entity, >(props: EntityRefLinksProps) { - const { entityRefs, ...linkProps } = props; + const { entityRefs, hideIcons, ...linkProps } = props; return ( <> @@ -56,7 +57,7 @@ export function EntityRefLinks< return ( {i > 0 && ', '} - + ); })} diff --git a/plugins/catalog-react/src/components/MissingAnnotationEmptyState/MissingAnnotationEmptyState.tsx b/plugins/catalog-react/src/components/MissingAnnotationEmptyState/MissingAnnotationEmptyState.tsx index 284025d8cd..4d9329e664 100644 --- a/plugins/catalog-react/src/components/MissingAnnotationEmptyState/MissingAnnotationEmptyState.tsx +++ b/plugins/catalog-react/src/components/MissingAnnotationEmptyState/MissingAnnotationEmptyState.tsx @@ -14,7 +14,6 @@ * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; import Box from '@material-ui/core/Box'; import Button from '@material-ui/core/Button'; import { makeStyles } from '@material-ui/core/styles'; @@ -27,7 +26,7 @@ import { useEntity } from '../../hooks'; /** @public */ export type MissingAnnotationEmptyStateClassKey = 'code'; -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ code: { borderRadius: 6, diff --git a/plugins/catalog-react/src/components/UserListPicker/UserListPicker.test.tsx b/plugins/catalog-react/src/components/UserListPicker/UserListPicker.test.tsx index ad56681d6c..5667447503 100644 --- a/plugins/catalog-react/src/components/UserListPicker/UserListPicker.test.tsx +++ b/plugins/catalog-react/src/components/UserListPicker/UserListPicker.test.tsx @@ -40,6 +40,7 @@ import { storageApiRef, } from '@backstage/core-plugin-api'; import { MockStarredEntitiesApi, starredEntitiesApiRef } from '../../apis'; +import { DefaultEntityFilters } from '../../hooks'; const mockUser: UserEntity = { apiVersion: 'backstage.io/v1alpha1', @@ -289,7 +290,12 @@ describe('', () => { const updateFilters = jest.fn(); render( - + , @@ -297,6 +303,25 @@ describe('', () => { fireEvent.click(screen.getByText('Starred')); + // wait until the component has finished loading + await waitFor(() => { + expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ + filter: { kind: 'component', 'metadata.name': ['e-1', 'e-2'] }, + limit: 1000, + }); + expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ + filter: { kind: 'component' }, + limit: 0, + }); + expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ + filter: { + kind: 'component', + 'relations.ownedBy': ['user:default/testuser'], + }, + limit: 0, + }); + }); + await waitFor(() => expect(updateFilters).toHaveBeenLastCalledWith({ user: EntityUserFilter.starred([ @@ -360,12 +385,17 @@ describe('', () => { describe('filter resetting', () => { const updateFilters = jest.fn(); - const Picker = ({ ...props }: UserListPickerProps) => ( + const Picker = ({ + filters, + ...props + }: UserListPickerProps & { filters?: DefaultEntityFilters }) => ( @@ -413,6 +443,21 @@ describe('', () => { }); }); + it('does not reset the filter when request is empty', async () => { + render(); + + await waitFor(() => { + expect(mockCatalogApi.queryEntities).toHaveBeenCalledTimes(1); + expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ + filter: { 'metadata.name': ['e-1', 'e-2'] }, + limit: 1000, + }); + }); + expect(updateFilters).not.toHaveBeenCalledWith({ + user: expect.any(Object), + }); + }); + it('resets the filter to "all" when entities are loaded', async () => { mockCatalogApi.queryEntities?.mockImplementation(async request => { if ( @@ -541,6 +586,21 @@ describe('', () => { }), ); }); + + it('does not reset the filter when request is empty xxxx', async () => { + render(); + + await waitFor(() => { + expect(mockCatalogApi.queryEntities).toHaveBeenCalledTimes(1); + expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ + filter: { 'metadata.name': ['e-1', 'e-2'] }, + limit: 1000, + }); + }); + expect(updateFilters).not.toHaveBeenCalledWith({ + user: expect.any(Object), + }); + }); }); describe(`when there are some starred entities present`, () => { diff --git a/plugins/catalog-react/src/components/UserListPicker/UserListPicker.tsx b/plugins/catalog-react/src/components/UserListPicker/UserListPicker.tsx index 854a1cb1b7..950bf5ea70 100644 --- a/plugins/catalog-react/src/components/UserListPicker/UserListPicker.tsx +++ b/plugins/catalog-react/src/components/UserListPicker/UserListPicker.tsx @@ -27,7 +27,6 @@ import { ListItemText, makeStyles, MenuItem, - Theme, Typography, } from '@material-ui/core'; import SettingsIcon from '@material-ui/icons/Settings'; @@ -48,7 +47,7 @@ export type CatalogReactUserListPickerClassKey = | 'menuItem' | 'groupWrapper'; -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ root: { backgroundColor: 'rgba(0, 0, 0, .11)', @@ -243,7 +242,6 @@ export const UserListPicker = (props: UserListPickerProps) => { setSelectedUserFilter(item.id)} selected={item.id === filters.user?.value} diff --git a/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.test.tsx b/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.test.tsx index 1f6fbfd53d..aeaa20c535 100644 --- a/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.test.tsx +++ b/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.test.tsx @@ -93,8 +93,8 @@ describe('useOwnedEntitiesCount', () => { ).rejects.toThrow(); expect(result.current).toEqual({ - count: 0, - loading: false, + count: undefined, + loading: true, filter: EntityUserFilter.owned([ 'user:default/spiderman', 'user:group/a-group', diff --git a/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.ts b/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.ts index 1adab49361..2f03a0b285 100644 --- a/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.ts +++ b/plugins/catalog-react/src/components/UserListPicker/useOwnedEntitiesCount.ts @@ -14,16 +14,16 @@ * limitations under the License. */ -import { QueryEntitiesInitialRequest } from '@backstage/catalog-client'; import { identityApiRef, useApi } from '@backstage/core-plugin-api'; -import { compact, intersection, isEqual } from 'lodash'; -import { useEffect, useMemo, useRef } from 'react'; +import { compact, intersection } from 'lodash'; +import { useMemo } from 'react'; import useAsync from 'react-use/lib/useAsync'; import { catalogApiRef } from '../../api'; import { EntityOwnerFilter, EntityUserFilter } from '../../filters'; import { useEntityList } from '../../hooks'; import { reduceCatalogFilters } from '../../utils'; import useAsyncFn from 'react-use/lib/useAsyncFn'; +import useDeepCompareEffect from 'react-use/lib/useDeepCompareEffect'; export function useOwnedEntitiesCount() { const identityApi = useApi(identityApiRef); @@ -37,79 +37,63 @@ export function useOwnedEntitiesCount() { [], ); - const prevRequest = useRef(); - - const request = useMemo(() => { - const { user, owners, ...allFilters } = filters; - const compacted = compact(Object.values(allFilters)); - const allFilter = reduceCatalogFilters(compacted); - const { ['metadata.name']: metadata, ...filter } = allFilter; - - const countFilter = getOwnedCountClaims(owners, ownershipEntityRefs); - - if ( - ownershipEntityRefs?.length === 0 || - countFilter === undefined || - Object.keys(filter).length === 0 - ) { - prevRequest.current = undefined; - return undefined; - } - const newRequest: QueryEntitiesInitialRequest = { - filter: { - ...filter, - 'relations.ownedBy': countFilter, - }, - limit: 0, - }; - - if (isEqual(newRequest, prevRequest.current)) { - return prevRequest.current; - } - - prevRequest.current = newRequest; - - return newRequest; - }, [filters, ownershipEntityRefs]); + const { user, owners, ...allFilters } = filters; + const { ['metadata.name']: metadata, ...filter } = reduceCatalogFilters( + compact(Object.values(allFilters)), + ); const [{ value: count, loading: loadingEntityOwnership }, fetchEntities] = useAsyncFn( - async ( - req: QueryEntitiesInitialRequest | undefined, - ownershipEntityRefsParam: string[], - ) => { - if (ownershipEntityRefsParam && !req) { + async (req: { + ownershipEntityRefs: string[]; + owners: EntityOwnerFilter | undefined; + filter: Record; + }) => { + const ownedClaims = getOwnedCountClaims( + req.owners, + req.ownershipEntityRefs, + ); + if (ownedClaims === undefined) { // this implicitly means that there aren't claims in common with // the logged in users, so avoid invoking the queryEntities endpoint // which will implicitly returns 0 return 0; } - const { totalItems } = await catalogApi.queryEntities(req); + + const { totalItems } = await catalogApi.queryEntities({ + filter: { + ...req.filter, + 'relations.ownedBy': ownedClaims, + }, + limit: 0, + }); return totalItems; }, [], { loading: true }, ); - useEffect(() => { - if (ownershipEntityRefs) { - if (request && Object.keys(request).length === 0) { - return; - } - fetchEntities(request, ownershipEntityRefs); + useDeepCompareEffect(() => { + // context contains no filter, wait + if (Object.keys(filter).length === 0) { + return; } - }, [fetchEntities, request, ownershipEntityRefs]); + // ownershipEntityRefs is loading, wait + if (ownershipEntityRefs === undefined) { + return; + } + fetchEntities({ ownershipEntityRefs, owners, filter }); + }, [ownershipEntityRefs, owners, filter]); const loading = loadingEntityRefs || loadingEntityOwnership; - const filter = useMemo( - () => EntityUserFilter.owned(ownershipEntityRefs ?? []), - [ownershipEntityRefs], - ); return { count, loading, - filter, + filter: useMemo( + () => EntityUserFilter.owned(ownershipEntityRefs ?? []), + [ownershipEntityRefs], + ), ownershipEntityRefs, }; } diff --git a/plugins/catalog-react/src/hooks/index.ts b/plugins/catalog-react/src/hooks/index.ts index ffd32206ef..c3021f8992 100644 --- a/plugins/catalog-react/src/hooks/index.ts +++ b/plugins/catalog-react/src/hooks/index.ts @@ -32,6 +32,7 @@ export { export type { DefaultEntityFilters, EntityListContextProps, + EntityListProviderProps, } from './useEntityListProvider'; export { useEntityTypeFilter } from './useEntityTypeFilter'; export { useRelatedEntities } from './useRelatedEntities'; diff --git a/plugins/catalog-react/src/hooks/useEntityListProvider.test.tsx b/plugins/catalog-react/src/hooks/useEntityListProvider.test.tsx index edbfb65c0c..f6881d4a80 100644 --- a/plugins/catalog-react/src/hooks/useEntityListProvider.test.tsx +++ b/plugins/catalog-react/src/hooks/useEntityListProvider.test.tsx @@ -31,14 +31,13 @@ import React, { PropsWithChildren } from 'react'; import { MemoryRouter } from 'react-router-dom'; import { catalogApiRef } from '../api'; import { starredEntitiesApiRef, MockStarredEntitiesApi } from '../apis'; -import { EntityKindPicker, UserListPicker } from '../components'; import { EntityKindFilter, EntityTypeFilter, EntityUserFilter, } from '../filters'; -import { UserListFilterKind } from '../types'; import { EntityListProvider, useEntityList } from './useEntityListProvider'; +import { useMountEffect } from '@react-hookz/web'; const entities: Entity[] = [ { @@ -77,43 +76,53 @@ const mockIdentityApi: Partial = { }), getCredentials: async () => ({ token: undefined }), }; -const mockCatalogApi: Partial = { - getEntities: jest.fn().mockImplementation(async () => ({ items: entities })), - getEntityByRef: async () => undefined, +const mockCatalogApi: Partial> = { + getEntities: jest.fn().mockResolvedValue({ items: entities }), + queryEntities: jest.fn().mockResolvedValue({ + items: entities, + pageInfo: { prevCursor: 'prevCursor', nextCursor: 'nextCursor' }, + totalItems: 10, + }), + getEntityByRef: jest.fn().mockResolvedValue(undefined), }; -const wrapper = ({ - userFilter, - location, - children, -}: PropsWithChildren<{ - userFilter?: UserListFilterKind; - location?: string; -}>) => { - return ( - - - - - - - ); -}; +const createWrapper = + (options: { location?: string; pagination: boolean }) => + (props: PropsWithChildren) => { + const InitialFiltersWrapper = ({ children }: PropsWithChildren) => { + const { updateFilters } = useEntityList(); + + useMountEffect(() => { + updateFilters({ kind: new EntityKindFilter('component') }); + }); + + return <>{children}; + }; + + return ( + + + + {props.children} + + + + ); + }; describe('', () => { const origReplaceState = window.history.replaceState; + const pagination = false; + beforeEach(() => { window.history.replaceState = jest.fn(); }); @@ -125,16 +134,17 @@ describe('', () => { jest.clearAllMocks(); }); - it('resolves backend filters', async () => { + it('should send backend filters', async () => { const { result } = renderHook(() => useEntityList(), { - wrapper, + wrapper: createWrapper({ pagination }), }); await waitFor(() => { - expect(result.current.backendEntities.length).toBeGreaterThan(0); + expect(result.current.backendEntities.length).toBe(2); }); - expect(result.current.backendEntities.length).toBe(2); + expect(result.current.entities.length).toBe(2); + expect(mockCatalogApi.getEntities).toHaveBeenCalledTimes(1); expect(mockCatalogApi.getEntities).toHaveBeenCalledWith({ filter: { kind: 'component' }, }); @@ -142,17 +152,12 @@ describe('', () => { it('resolves frontend filters', async () => { const { result } = renderHook(() => useEntityList(), { - wrapper, + wrapper: createWrapper({ pagination }), initialProps: { userFilter: 'all', }, }); - await waitFor(() => { - expect(result.current.backendEntities.length).toBeGreaterThan(0); - }); - expect(result.current.backendEntities.length).toBe(2); - act(() => result.current.updateFilters({ user: EntityUserFilter.owned(ownershipEntityRefs), @@ -171,8 +176,10 @@ describe('', () => { filters: { kind: 'component', type: 'service' }, }); const { result } = renderHook(() => useEntityList(), { - wrapper: ({ children }) => - wrapper({ location: `/catalog?${query}`, children }), + wrapper: createWrapper({ + location: `/catalog?${query}`, + pagination, + }), }); await waitFor(() => { @@ -186,7 +193,7 @@ describe('', () => { it('does not fetch when only frontend filters change', async () => { const { result } = renderHook(() => useEntityList(), { - wrapper, + wrapper: createWrapper({ pagination }), }); await waitFor(() => { @@ -202,13 +209,18 @@ describe('', () => { await waitFor(() => { expect(result.current.entities.length).toBe(1); - expect(mockCatalogApi.getEntities).toHaveBeenCalledTimes(1); }); + + await expect(() => + waitFor(() => { + expect(mockCatalogApi.getEntities).not.toHaveBeenCalledTimes(1); + }), + ).rejects.toThrow(); }); it('debounces multiple filter changes', async () => { const { result } = renderHook(() => useEntityList(), { - wrapper, + wrapper: createWrapper({ pagination }), }); await waitFor(() => { @@ -218,18 +230,20 @@ describe('', () => { expect(mockCatalogApi.getEntities).toHaveBeenCalledTimes(1); await act(async () => { - result.current.updateFilters({ kind: new EntityKindFilter('component') }); + result.current.updateFilters({ kind: new EntityKindFilter('api') }); result.current.updateFilters({ type: new EntityTypeFilter('service') }); }); await waitFor(() => { - expect(mockCatalogApi.getEntities).toHaveBeenCalledTimes(2); + expect(mockCatalogApi.getEntities).toHaveBeenNthCalledWith(2, { + filter: { kind: 'api', 'spec.type': ['service'] }, + }); }); }); it('returns an error on catalogApi failure', async () => { const { result } = renderHook(() => useEntityList(), { - wrapper, + wrapper: createWrapper({ pagination }), }); await waitFor(() => { @@ -237,7 +251,7 @@ describe('', () => { }); expect(result.current.backendEntities.length).toBe(2); - mockCatalogApi.getEntities = jest.fn().mockRejectedValue('error'); + mockCatalogApi.getEntities!.mockRejectedValueOnce('error'); act(() => { result.current.updateFilters({ kind: new EntityKindFilter('api') }); }); @@ -245,4 +259,230 @@ describe('', () => { expect(result.current.error).toBeDefined(); }); }); + + it('returns an empty pageInfo', async () => { + const { result } = renderHook(() => useEntityList(), { + wrapper: createWrapper({ pagination }), + }); + await waitFor(() => { + expect(mockCatalogApi.getEntities).toHaveBeenCalled(); + }); + + expect(result.current.pageInfo).toBeUndefined(); + }); +}); + +describe('', () => { + const origReplaceState = window.history.replaceState; + const pagination = true; + const limit = 20; + const orderFields = [{ field: 'metadata.name', order: 'asc' }]; + + beforeEach(() => { + window.history.replaceState = jest.fn(); + }); + afterEach(() => { + window.history.replaceState = origReplaceState; + }); + + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should send backend filters', async () => { + const { result } = renderHook(() => useEntityList(), { + wrapper: createWrapper({ pagination }), + }); + + await waitFor(() => { + expect(result.current.backendEntities.length).toBe(2); + }); + + expect(result.current.entities.length).toBe(2); + expect(mockCatalogApi.queryEntities).toHaveBeenCalledTimes(1); + expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ + filter: { kind: 'component' }, + limit, + orderFields, + }); + }); + + it('resolves frontend filters', async () => { + const { result } = renderHook(() => useEntityList(), { + wrapper: createWrapper({ pagination }), + initialProps: { + userFilter: 'all', + }, + }); + + act(() => + result.current.updateFilters({ + user: EntityUserFilter.owned(ownershipEntityRefs), + }), + ); + + await waitFor(() => { + expect(result.current.backendEntities.length).toBe(2); + expect(result.current.entities.length).toBe(1); + expect(mockCatalogApi.queryEntities).toHaveBeenCalledTimes(1); + }); + }); + + it('resolves query param filter values', async () => { + const query = qs.stringify({ + filters: { kind: 'component', type: 'service' }, + }); + const { result } = renderHook(() => useEntityList(), { + wrapper: createWrapper({ + location: `/catalog?${query}`, + pagination, + }), + }); + + await waitFor(() => { + expect(result.current.queryParameters).toBeTruthy(); + }); + expect(result.current.queryParameters).toEqual({ + kind: 'component', + type: 'service', + }); + }); + + it('fetch when frontend filters change', async () => { + const { result } = renderHook(() => useEntityList(), { + wrapper: createWrapper({ pagination }), + }); + + await waitFor(() => { + expect(result.current.entities.length).toBe(2); + expect(mockCatalogApi.queryEntities).toHaveBeenCalledTimes(1); + }); + + act(() => + result.current.updateFilters({ + user: EntityUserFilter.owned(ownershipEntityRefs), + }), + ); + + await waitFor(() => { + expect(result.current.entities.length).toBe(1); + }); + + await waitFor(() => { + expect(mockCatalogApi.queryEntities).toHaveBeenCalledTimes(2); + }); + }); + + it('debounces multiple filter changes', async () => { + const { result } = renderHook(() => useEntityList(), { + wrapper: createWrapper({ pagination }), + }); + + await waitFor(() => { + expect(result.current.backendEntities.length).toBeGreaterThan(0); + }); + expect(result.current.backendEntities.length).toBe(2); + expect(mockCatalogApi.queryEntities).toHaveBeenCalledTimes(1); + + await act(async () => { + result.current.updateFilters({ kind: new EntityKindFilter('api') }); + result.current.updateFilters({ type: new EntityTypeFilter('service') }); + }); + + await waitFor(() => { + expect(mockCatalogApi.queryEntities).toHaveBeenNthCalledWith(2, { + filter: { kind: 'api', 'spec.type': ['service'] }, + limit, + orderFields, + }); + }); + }); + + it('returns an error on catalogApi failure', async () => { + const { result } = renderHook(() => useEntityList(), { + wrapper: createWrapper({ pagination }), + }); + + await waitFor(() => { + expect(result.current.backendEntities.length).toBeGreaterThan(0); + }); + expect(result.current.backendEntities.length).toBe(2); + + mockCatalogApi.queryEntities!.mockRejectedValueOnce('error'); + act(() => { + result.current.updateFilters({ kind: new EntityKindFilter('api') }); + }); + await waitFor(() => { + expect(result.current.error).toBeDefined(); + }); + }); + + describe('pageInfo', () => { + it('returns an empty pageInfo', async () => { + mockCatalogApi.queryEntities!.mockResolvedValueOnce({ + items: [], + pageInfo: {}, + totalItems: 10, + }); + const { result } = renderHook(() => useEntityList(), { + wrapper: createWrapper({ pagination }), + }); + await waitFor(() => { + expect(mockCatalogApi.queryEntities).toHaveBeenCalled(); + }); + + expect(result.current.pageInfo).toStrictEqual({ + prev: undefined, + next: undefined, + }); + }); + + it('returns pageInfo with next function and properly fetch next batch', async () => { + const { result } = renderHook(() => useEntityList(), { + wrapper: createWrapper({ pagination }), + }); + await waitFor(() => { + expect(mockCatalogApi.queryEntities).toHaveBeenCalled(); + }); + + await waitFor(() => { + expect(result.current.pageInfo!.next).toBeDefined(); + }); + + act(() => { + result.current.pageInfo!.next!(); + }); + + await waitFor(() => { + expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ + cursor: 'nextCursor', + limit, + }); + }); + }); + + it('returns pageInfo with prev function and properly fetch prev batch', async () => { + const { result } = renderHook(() => useEntityList(), { + wrapper: createWrapper({ pagination }), + }); + await waitFor(() => { + expect(mockCatalogApi.queryEntities).toHaveBeenCalled(); + }); + + await waitFor(() => { + expect(result.current.pageInfo!.prev).toBeDefined(); + }); + + act(() => { + result.current.pageInfo!.prev!(); + }); + + await waitFor(() => { + expect(mockCatalogApi.queryEntities).toHaveBeenCalledWith({ + cursor: 'prevCursor', + limit, + }); + }); + }); + }); }); diff --git a/plugins/catalog-react/src/hooks/useEntityListProvider.tsx b/plugins/catalog-react/src/hooks/useEntityListProvider.tsx index 948efc969f..1ce87c262e 100644 --- a/plugins/catalog-react/src/hooks/useEntityListProvider.tsx +++ b/plugins/catalog-react/src/hooks/useEntityListProvider.tsx @@ -44,8 +44,13 @@ import { EntityUserFilter, } from '../filters'; import { EntityFilter } from '../types'; -import { reduceBackendCatalogFilters, reduceEntityFilters } from '../utils'; +import { + reduceBackendCatalogFilters, + reduceCatalogFilters, + reduceEntityFilters, +} from '../utils'; import { useApi } from '@backstage/core-plugin-api'; +import { QueryEntitiesResponse } from '@backstage/catalog-client'; /** @public */ export type DefaultEntityFilters = { @@ -98,6 +103,11 @@ export type EntityListContextProps< loading: boolean; error?: Error; + + pageInfo?: { + next?: () => void; + prev?: () => void; + }; }; /** @@ -110,16 +120,25 @@ export const EntityListContext = createContext< type OutputState = { appliedFilters: EntityFilters; + appliedCursor?: string; entities: Entity[]; backendEntities: Entity[]; + pageInfo?: QueryEntitiesResponse['pageInfo']; }; +/** + * @public + */ +export type EntityListProviderProps = PropsWithChildren<{ + pagination?: boolean | { limit?: number }; +}>; + /** * Provides entities and filters for a catalog listing. * @public */ export const EntityListProvider = ( - props: PropsWithChildren<{}>, + props: EntityListProviderProps, ) => { const isMounted = useMountedState(); const catalogApi = useApi(catalogApiRef); @@ -132,13 +151,32 @@ export const EntityListProvider = ( // trigger a useLocation change; this would instead come from an external source, such as a manual // update of the URL or two catalog sidebar links with different catalog filters. const location = useLocation(); - const queryParameters = useMemo( - () => - (qs.parse(location.search, { - ignoreQueryPrefix: true, - }).filters ?? {}) as Record, - [location], - ); + + const enablePagination = + props.pagination === true || typeof props.pagination === 'object'; + + const limit = + props.pagination && + typeof props.pagination === 'object' && + typeof props.pagination.limit === 'number' + ? props.pagination.limit + : 20; + + const { queryParameters, cursor: initialCursor } = useMemo(() => { + const parsed = qs.parse(location.search, { + ignoreQueryPrefix: true, + }); + + return { + queryParameters: (parsed.filters ?? {}) as Record< + string, + string | string[] + >, + cursor: typeof parsed.cursor === 'string' ? parsed.cursor : undefined, + }; + }, [location]); + + const [cursor, setCursor] = useState(initialCursor); const [outputState, setOutputState] = useState>( () => { @@ -146,6 +184,7 @@ export const EntityListProvider = ( appliedFilters: {} as EntityFilters, entities: [], backendEntities: [], + pageInfo: enablePagination ? {} : undefined, }; }, ); @@ -156,11 +195,6 @@ export const EntityListProvider = ( const [{ loading, error }, refresh] = useAsyncFn( async () => { const compacted = compact(Object.values(requestedFilters)); - const entityFilter = reduceEntityFilters(compacted); - const backendFilter = reduceBackendCatalogFilters(compacted); - const previousBackendFilter = reduceBackendCatalogFilters( - compact(Object.values(outputState.appliedFilters)), - ); const queryParams = Object.keys(requestedFilters).reduce( (params, key) => { @@ -175,26 +209,71 @@ export const EntityListProvider = ( {} as Record, ); - // TODO(mtlewis): currently entities will never be requested unless - // there's at least one filter, we should allow an initial request - // to happen with no filters. - if (!isEqual(previousBackendFilter, backendFilter)) { - // TODO(timbonicus): should limit fields here, but would need filter - // fields + table columns - const response = await catalogApi.getEntities({ - filter: backendFilter, - }); - setOutputState({ - appliedFilters: requestedFilters, - backendEntities: response.items, - entities: response.items.filter(entityFilter), - }); + if (enablePagination) { + if (cursor) { + if (cursor !== outputState.appliedCursor) { + const entityFilter = reduceEntityFilters(compacted); + const response = await catalogApi.queryEntities({ + cursor, + limit, + }); + setOutputState({ + appliedFilters: requestedFilters, + appliedCursor: cursor, + backendEntities: response.items, + entities: response.items.filter(entityFilter), + pageInfo: response.pageInfo, + }); + } + } else { + const entityFilter = reduceEntityFilters(compacted); + const backendFilter = reduceCatalogFilters(compacted); + const previousBackendFilter = reduceCatalogFilters( + compact(Object.values(outputState.appliedFilters)), + ); + + if (!isEqual(previousBackendFilter, backendFilter)) { + const response = await catalogApi.queryEntities({ + filter: backendFilter, + limit, + orderFields: [{ field: 'metadata.name', order: 'asc' }], + }); + setOutputState({ + appliedFilters: requestedFilters, + backendEntities: response.items, + entities: response.items.filter(entityFilter), + pageInfo: response.pageInfo, + }); + } + } } else { - setOutputState({ - appliedFilters: requestedFilters, - backendEntities: outputState.backendEntities, - entities: outputState.backendEntities.filter(entityFilter), - }); + const entityFilter = reduceEntityFilters(compacted); + const backendFilter = reduceBackendCatalogFilters(compacted); + const previousBackendFilter = reduceBackendCatalogFilters( + compact(Object.values(outputState.appliedFilters)), + ); + + // TODO(mtlewis): currently entities will never be requested unless + // there's at least one filter, we should allow an initial request + // to happen with no filters. + if (!isEqual(previousBackendFilter, backendFilter)) { + // TODO(timbonicus): should limit fields here, but would need filter + // fields + table columns + const response = await catalogApi.getEntities({ + filter: backendFilter, + }); + setOutputState({ + appliedFilters: requestedFilters, + backendEntities: response.items, + entities: response.items.filter(entityFilter), + }); + } else { + setOutputState({ + appliedFilters: requestedFilters, + backendEntities: outputState.backendEntities, + entities: outputState.backendEntities.filter(entityFilter), + }); + } } if (isMounted()) { @@ -202,7 +281,7 @@ export const EntityListProvider = ( ignoreQueryPrefix: true, }); const newParams = qs.stringify( - { ...oldParams, filters: queryParams }, + { ...oldParams, filters: queryParams, cursor }, { addQueryPrefix: true, arrayFormat: 'repeat' }, ); const newUrl = `${window.location.pathname}${newParams}`; @@ -214,13 +293,20 @@ export const EntityListProvider = ( window.history?.replaceState(null, document.title, newUrl); } }, - [catalogApi, queryParameters, requestedFilters, outputState], + [ + catalogApi, + queryParameters, + requestedFilters, + outputState, + cursor, + enablePagination, + ], { loading: true }, ); // Slight debounce on the refresh, since (especially on page load) several // filters will be calling this in rapid succession. - useDebounce(refresh, 10, [requestedFilters]); + useDebounce(refresh, 10, [requestedFilters, cursor]); const updateFilters = useCallback( ( @@ -228,6 +314,12 @@ export const EntityListProvider = ( | Partial | ((prevFilters: EntityFilters) => Partial), ) => { + // changing filters will affect pagination, so we need to reset + // the cursor and start from the first page. + // TODO(vinzscam): this is currently causing issues at page reload + // where the state is not kept. Unfortunately we need to rething + // the way filters work in order to fix this. + setCursor(undefined); setRequestedFilters(prevFilters => { const newFilters = typeof update === 'function' ? update(prevFilters) : update; @@ -237,6 +329,19 @@ export const EntityListProvider = ( [], ); + const pageInfo = useMemo(() => { + if (!enablePagination) { + return undefined; + } + + const prevCursor = outputState.pageInfo?.prevCursor; + const nextCursor = outputState.pageInfo?.nextCursor; + return { + prev: prevCursor ? () => setCursor(prevCursor) : undefined, + next: nextCursor ? () => setCursor(nextCursor) : undefined, + }; + }, [enablePagination, outputState.pageInfo]); + const value = useMemo( () => ({ filters: outputState.appliedFilters, @@ -246,8 +351,9 @@ export const EntityListProvider = ( queryParameters, loading, error, + pageInfo, }), - [outputState, updateFilters, queryParameters, loading, error], + [outputState, updateFilters, queryParameters, loading, error, pageInfo], ); return ( diff --git a/plugins/catalog-react/src/overridableComponents.ts b/plugins/catalog-react/src/overridableComponents.ts index e94af1c4fb..6424c95ab5 100644 --- a/plugins/catalog-react/src/overridableComponents.ts +++ b/plugins/catalog-react/src/overridableComponents.ts @@ -44,3 +44,8 @@ export type BackstageOverrides = Overrides & { StyleRules >; }; + +declare module '@backstage/theme' { + interface OverrideComponentNameToClassKeys + extends CatalogReactComponentsNameToClassKey {} +} diff --git a/plugins/catalog-unprocessed-entities/CHANGELOG.md b/plugins/catalog-unprocessed-entities/CHANGELOG.md index 97184a50cd..44fcaa4626 100644 --- a/plugins/catalog-unprocessed-entities/CHANGELOG.md +++ b/plugins/catalog-unprocessed-entities/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-catalog-unprocessed-entities +## 0.1.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-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 + +## 0.1.5 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- a11cdb9200: Added filtering and sorting to unprocessed entities tables. +- Updated dependencies + - @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 + ## 0.1.5-next.2 ### Patch Changes diff --git a/plugins/catalog-unprocessed-entities/package.json b/plugins/catalog-unprocessed-entities/package.json index 50a27c05c6..d1e466d27c 100644 --- a/plugins/catalog-unprocessed-entities/package.json +++ b/plugins/catalog-unprocessed-entities/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-catalog-unprocessed-entities", - "version": "0.1.5-next.2", + "version": "0.1.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/catalog/CHANGELOG.md b/plugins/catalog/CHANGELOG.md index 7d1b4820bc..95bbf0bfb6 100644 --- a/plugins/catalog/CHANGELOG.md +++ b/plugins/catalog/CHANGELOG.md @@ -1,5 +1,102 @@ # @backstage/plugin-catalog +## 1.16.0-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.0.1-next.0 + +## 1.16.0-next.0 + +### Minor Changes + +- b8e1eb2c0f: The `columns` prop can be an array or a function that returns an array in order to override the default columns of the `CatalogIndexPage`. + +### Patch Changes + +- bc7e6d3eb9: Fix copy entity url function in http contexts. +- cd910c4fa5: - Fixes bug where after unregistering an entity you are redirected to `/`. + - Adds an optional external route `unregisterRedirect` to override this behaviour to another route. +- 03d0b6dcdc: The `convertLegacyRouteRef` utility used by the alpha exports is now imported from `@backstage/core-compat-api`. +- 4d9e3b39e4: Register component overrides in the global `OverrideComponentNameToClassKeys` provided by `@backstage/theme`. This will in turn will provide component style override types for `createUnifiedTheme`. +- 8587f067d2: Added pagination support to `CatalogIndexPage` + + `CatalogIndexPage` now offers an optional pagination feature, designed to accommodate adopters managing extensive catalogs. This new capability allows for better handling of large amounts of data. + + To activate the pagination mode, simply update your `App.tsx` as follows: + + ```diff + const routes = ( + + ... + - } /> + + } /> + ... + ``` + + In case you have a custom catalog page and you want to enable pagination, you need to pass the `pagination` prop to `EntityListProvider` instead. + +- Updated dependencies + - @backstage/core-compat-api@0.0.2-next.0 + - @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-search-react@1.7.4-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-scaffolder-common@1.4.3 + - @backstage/plugin-search-common@1.2.8 + +## 1.15.0 + +### Minor Changes + +- 1e5b7d993a: Added the `DefaultEntityPresentationApi`, which is an implementation of the + `EntityPresentationApi` that `@backstage/plugin-catalog-react` exposes through + its `entityPresentationApiRef`. This implementation is also by default made + available automatically by the catalog plugin, unless you replace it with a + custom one. It batch fetches and caches data from the catalog as needed for + display, and is customizable by adopters to add their own rendering functions. + +### Patch Changes + +- eb817ee6d4: Fix spacing inconsistency with links and labels in headers +- 8a8445663b: Migrate catalog entity cards to new frontend system extension format. +- e964c17db9: Use default extensions boundary and suspense on the alpha declarative `createCatalogFilterExtension` extension factory. +- 71c97e7d73: The `spec.lifecycle' field in entities will now always be rendered as a string. +- 6c2b872153: Add official support for React 18. +- 0bf6ebda88: Initial entity page implementation for new frontend system at `/alpha`, with an overview page enabled by default and the about card available as an optional card. +- bb98953cb9: Create declarative extensions for the `Catalog` plugin; this initial plugin preset contains sidebar item, index page and filter extensions, all distributed via `/alpha` subpath. + + The `EntityPage` will be migrated in a follow-up patch. + +- 7c265b9758: Fix type error on `CatalogTable` when using Material UI v5 +- 69c14904b6: Use `EntityRefLinks` with `hideIcons` property to avoid double icons +- 62b5922916: Internal theme type updates +- 77f009b35d: Internal updates to match changes in the experimental `@backstage/frontend-plugin-api`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/plugin-scaffolder-common@1.4.3 + - @backstage/integration-react@1.1.21 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-search-react@1.7.2 + - @backstage/theme@0.4.4 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-search-common@1.2.8 + ## 1.15.0-next.2 ### Patch Changes diff --git a/plugins/catalog/alpha-api-report.md b/plugins/catalog/alpha-api-report.md index 43e589bdc3..52afb0894a 100644 --- a/plugins/catalog/alpha-api-report.md +++ b/plugins/catalog/alpha-api-report.md @@ -50,6 +50,7 @@ const _default: BackstagePlugin< }, true >; + unregisterRedirect: ExternalRouteRef; } >; export default _default; diff --git a/plugins/catalog/api-report.md b/plugins/catalog/api-report.md index 6647f8deaa..bef24b50d8 100644 --- a/plugins/catalog/api-report.md +++ b/plugins/catalog/api-report.md @@ -11,6 +11,7 @@ import { CatalogApi } from '@backstage/plugin-catalog-react'; import { ComponentEntity } from '@backstage/catalog-model'; import { CompoundEntityRef } from '@backstage/catalog-model'; import { Entity } from '@backstage/catalog-model'; +import { EntityListContextProps } from '@backstage/plugin-catalog-react'; import { EntityOwnerPickerProps } from '@backstage/plugin-catalog-react'; import { EntityPresentationApi } from '@backstage/plugin-catalog-react'; import { EntityRefPresentation } from '@backstage/plugin-catalog-react'; @@ -122,6 +123,7 @@ export const catalogPlugin: BackstagePlugin< }, true >; + unregisterRedirect: ExternalRouteRef; } >; @@ -156,7 +158,9 @@ export const CatalogTable: { createSystemColumn(): TableColumn; createOwnerColumn(): TableColumn; createSpecTargetsColumn(): TableColumn; - createSpecTypeColumn(): TableColumn; + createSpecTypeColumn(options?: { + hidden: boolean; + }): TableColumn; createSpecLifecycleColumn(): TableColumn; createMetadataDescriptionColumn(): TableColumn; createTagsColumn(): TableColumn; @@ -180,12 +184,17 @@ export const CatalogTable: { }>; }; +// @public +export type CatalogTableColumnsFunc = ( + entityListContext: EntityListContextProps, +) => TableColumn[]; + // @public export interface CatalogTableProps { // (undocumented) actions?: TableProps['actions']; // (undocumented) - columns?: TableColumn[]; + columns?: TableColumn[] | CatalogTableColumnsFunc; // (undocumented) emptyContent?: ReactNode; // (undocumented) @@ -217,7 +226,7 @@ export interface DefaultCatalogPageProps { // (undocumented) actions?: TableProps['actions']; // (undocumented) - columns?: TableColumn[]; + columns?: TableColumn[] | CatalogTableColumnsFunc; // (undocumented) emptyContent?: ReactNode; // (undocumented) @@ -227,6 +236,12 @@ export interface DefaultCatalogPageProps { // (undocumented) ownerPickerMode?: EntityOwnerPickerProps['mode']; // (undocumented) + pagination?: + | boolean + | { + limit?: number; + }; + // (undocumented) tableOptions?: TableProps['options']; } diff --git a/plugins/catalog/config.d.ts b/plugins/catalog/config.d.ts new file mode 100644 index 0000000000..af749db905 --- /dev/null +++ b/plugins/catalog/config.d.ts @@ -0,0 +1,27 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +export interface Config { + catalog?: { + /** + * @deepVisibility frontend + */ + experimentalPagination?: + | boolean + | { + limit?: number; + }; + }; +} diff --git a/plugins/catalog/package.json b/plugins/catalog/package.json index 7d5220e2fb..1ac4fe3b73 100644 --- a/plugins/catalog/package.json +++ b/plugins/catalog/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-catalog", "description": "The Backstage plugin for browsing the Backstage catalog", - "version": "1.15.0-next.2", + "version": "1.16.0-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -48,6 +48,7 @@ "dependencies": { "@backstage/catalog-client": "workspace:^", "@backstage/catalog-model": "workspace:^", + "@backstage/core-compat-api": "workspace:^", "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", "@backstage/errors": "workspace:^", @@ -63,6 +64,7 @@ "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.61", + "@mui/utils": "^5.14.15", "@types/react": "^16.13.1 || ^17.0.0", "dataloader": "^2.0.0", "expiry-map": "^2.0.0", @@ -89,6 +91,8 @@ "@testing-library/user-event": "^14.0.0" }, "files": [ - "dist" - ] + "dist", + "config.d.ts" + ], + "configSchema": "config.d.ts" } diff --git a/plugins/catalog/src/alpha/createCatalogFilterExtension.tsx b/plugins/catalog/src/alpha/createCatalogFilterExtension.tsx index cf3dbd318a..7dae30c1fa 100644 --- a/plugins/catalog/src/alpha/createCatalogFilterExtension.tsx +++ b/plugins/catalog/src/alpha/createCatalogFilterExtension.tsx @@ -43,7 +43,7 @@ export function createCatalogFilterExtension< output: { element: coreExtensionData.reactElement, }, - factory({ config, source }) { + factory({ config, node }) { const ExtensionComponent = lazy(() => options .loader({ config }) @@ -52,7 +52,7 @@ export function createCatalogFilterExtension< return { element: ( - + ), diff --git a/plugins/catalog/src/alpha/navItems.tsx b/plugins/catalog/src/alpha/navItems.tsx index b6481fd764..77ea394a97 100644 --- a/plugins/catalog/src/alpha/navItems.tsx +++ b/plugins/catalog/src/alpha/navItems.tsx @@ -15,7 +15,7 @@ */ import HomeIcon from '@material-ui/icons/Home'; -import { convertLegacyRouteRef } from '@backstage/core-plugin-api/alpha'; +import { convertLegacyRouteRef } from '@backstage/core-compat-api'; import { createNavItemExtension } from '@backstage/frontend-plugin-api'; import { rootRouteRef } from '../routes'; diff --git a/plugins/catalog/src/alpha/pages.tsx b/plugins/catalog/src/alpha/pages.tsx index 6270ae777d..6324f53083 100644 --- a/plugins/catalog/src/alpha/pages.tsx +++ b/plugins/catalog/src/alpha/pages.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { convertLegacyRouteRef } from '@backstage/core-plugin-api/alpha'; +import { convertLegacyRouteRef } from '@backstage/core-compat-api'; import { createPageExtension, coreExtensionData, diff --git a/plugins/catalog/src/alpha/plugin.tsx b/plugins/catalog/src/alpha/plugin.tsx index 2f019ca33e..7140259df0 100644 --- a/plugins/catalog/src/alpha/plugin.tsx +++ b/plugins/catalog/src/alpha/plugin.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import { convertLegacyRouteRef } from '@backstage/core-plugin-api/alpha'; +import { convertLegacyRouteRef } from '@backstage/core-compat-api'; import { createPlugin } from '@backstage/frontend-plugin-api'; import { entityRouteRef } from '@backstage/plugin-catalog-react'; @@ -22,6 +22,7 @@ import { entityRouteRef } from '@backstage/plugin-catalog-react'; import { createComponentRouteRef, createFromTemplateRouteRef, + unregisterRedirectRouteRef, rootRouteRef, viewTechDocRouteRef, } from '../routes'; @@ -45,6 +46,7 @@ export default createPlugin({ viewTechDoc: convertLegacyRouteRef(viewTechDocRouteRef), createComponent: convertLegacyRouteRef(createComponentRouteRef), createFromTemplate: convertLegacyRouteRef(createFromTemplateRouteRef), + unregisterRedirect: convertLegacyRouteRef(unregisterRedirectRouteRef), }, extensions: [ ...apis, diff --git a/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.test.tsx b/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.test.tsx index 0ced712344..f3cc0cb042 100644 --- a/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.test.tsx +++ b/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.test.tsx @@ -45,6 +45,8 @@ import { createComponentRouteRef } from '../../routes'; import { CatalogTableRow } from '../CatalogTable'; import { DefaultCatalogPage } from './DefaultCatalogPage'; +import { CatalogTableColumnsFunc } from '../CatalogTable/types'; + describe('DefaultCatalogPage', () => { const origReplaceState = window.history.replaceState; beforeEach(() => { @@ -217,6 +219,25 @@ describe('DefaultCatalogPage', () => { expect(columnHeaderLabels).toEqual(['Foo', 'Bar', 'Baz', 'Actions']); }, 20_000); + it('should render the custom column function passed as prop', async () => { + const columns: CatalogTableColumnsFunc = ({ filters, entities }) => { + return filters.kind?.value === 'component' && entities.length + ? [ + { title: 'Foo', field: 'entity.foo' }, + { title: 'Bar', field: 'entity.bar' }, + { title: 'Baz', field: 'entity.spec.lifecycle' }, + ] + : []; + }; + await renderWrapped(); + + const columnHeader = screen + .getAllByRole('button') + .filter(c => c.tagName === 'SPAN'); + const columnHeaderLabels = columnHeader.map(c => c.textContent); + expect(columnHeaderLabels).toEqual(['Foo', 'Bar', 'Baz', 'Actions']); + }, 20_000); + it('should render the default actions of an item in the grid', async () => { await renderWrapped(); await waitFor(() => expect(catalogApi.queryEntities).toHaveBeenCalled()); diff --git a/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.tsx b/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.tsx index e50c69b8ec..1f724d10fc 100644 --- a/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.tsx +++ b/plugins/catalog/src/components/CatalogPage/DefaultCatalogPage.tsx @@ -44,15 +44,18 @@ import { CatalogTable, CatalogTableRow } from '../CatalogTable'; import { catalogTranslationRef } from '../../translation'; import { useTranslationRef } from '@backstage/core-plugin-api/alpha'; +import { CatalogTableColumnsFunc } from '../CatalogTable/types'; + /** @internal */ -export interface BaseCatalogPageProps { +export type BaseCatalogPageProps = { filters: ReactNode; content?: ReactNode; -} + pagination?: boolean | { limit?: number }; +}; /** @internal */ export function BaseCatalogPage(props: BaseCatalogPageProps) { - const { filters, content = } = props; + const { filters, content = , pagination } = props; const orgName = useApi(configApiRef).getOptionalString('organization.name') ?? 'Backstage'; const createComponentLink = useRouteRef(createComponentRouteRef); @@ -68,7 +71,7 @@ export function BaseCatalogPage(props: BaseCatalogPageProps) { /> All your software catalog entities - + {filters} {content} @@ -86,12 +89,13 @@ export function BaseCatalogPage(props: BaseCatalogPageProps) { */ export interface DefaultCatalogPageProps { initiallySelectedFilter?: UserListFilterKind; - columns?: TableColumn[]; + columns?: TableColumn[] | CatalogTableColumnsFunc; actions?: TableProps['actions']; initialKind?: string; tableOptions?: TableProps['options']; emptyContent?: ReactNode; ownerPickerMode?: EntityOwnerPickerProps['mode']; + pagination?: boolean | { limit?: number }; } export function DefaultCatalogPage(props: DefaultCatalogPageProps) { @@ -102,6 +106,7 @@ export function DefaultCatalogPage(props: DefaultCatalogPageProps) { initialKind = 'component', tableOptions = {}, emptyContent, + pagination, ownerPickerMode, } = props; @@ -127,6 +132,7 @@ export function DefaultCatalogPage(props: DefaultCatalogPageProps) { emptyContent={emptyContent} /> } + pagination={pagination} /> ); } diff --git a/plugins/catalog/src/components/CatalogTable/CatalogTable.test.tsx b/plugins/catalog/src/components/CatalogTable/CatalogTable.test.tsx index c242372a97..052d8f4787 100644 --- a/plugins/catalog/src/components/CatalogTable/CatalogTable.test.tsx +++ b/plugins/catalog/src/components/CatalogTable/CatalogTable.test.tsx @@ -32,6 +32,7 @@ import { renderInTestApp, TestApiRegistry } from '@backstage/test-utils'; import { act, fireEvent, screen } from '@testing-library/react'; import * as React from 'react'; import { CatalogTable } from './CatalogTable'; +import { CatalogTableColumnsFunc } from './types'; const entities: Entity[] = [ { @@ -379,4 +380,63 @@ describe('CatalogTable component', () => { const labelCellValue = screen.getByText('generic'); expect(labelCellValue).toBeInTheDocument(); }); + + it('should render the label column with customised title and value as specified using function', async () => { + const columns: CatalogTableColumnsFunc = ({ + filters, + entities: entities1, + }) => { + return filters.kind?.value === 'api' && entities1.length + ? [ + CatalogTable.columns.createNameColumn({ defaultKind: 'API' }), + CatalogTable.columns.createLabelColumn('category', { + title: 'Category', + }), + ] + : []; + }; + + const entity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'API', + metadata: { + name: 'APIWithLabel', + labels: { category: 'generic' }, + }, + }; + const expectedColumns = ['Name', 'Category', 'Actions']; + + await renderInTestApp( + + ({ kind: 'api' }), + toQueryValue: () => 'api', + }, + }, + }} + > + + + , + { + mountedRoutes: { + '/catalog/:namespace/:kind/:name': entityRouteRef, + }, + }, + ); + + const columnHeader = screen + .getAllByRole('button') + .filter(c => c.tagName === 'SPAN'); + const columnHeaderLabels = columnHeader.map(c => c.textContent); + expect(columnHeaderLabels).toEqual(expectedColumns); + + const labelCellValue = screen.getByText('generic'); + expect(labelCellValue).toBeInTheDocument(); + }); }); diff --git a/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx b/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx index 24ccb22908..006210bb1d 100644 --- a/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx +++ b/plugins/catalog/src/components/CatalogTable/CatalogTable.tsx @@ -34,17 +34,19 @@ import { useEntityList, useStarredEntities, } from '@backstage/plugin-catalog-react'; -import { Typography } from '@material-ui/core'; +import Typography from '@material-ui/core/Typography'; import { withStyles } from '@material-ui/core/styles'; +import { visuallyHidden } from '@mui/utils'; import Edit from '@material-ui/icons/Edit'; import OpenInNew from '@material-ui/icons/OpenInNew'; import Star from '@material-ui/icons/Star'; import StarBorder from '@material-ui/icons/StarBorder'; import { capitalize } from 'lodash'; +import pluralize from 'pluralize'; import React, { ReactNode, useMemo } from 'react'; import { columnFactories } from './columns'; -import { CatalogTableRow } from './types'; -import pluralize from 'pluralize'; +import { CatalogTableColumnsFunc, CatalogTableRow } from './types'; +import { PaginatedCatalogTable } from './PaginatedCatalogTable'; /** * Props for {@link CatalogTable}. @@ -52,7 +54,7 @@ import pluralize from 'pluralize'; * @public */ export interface CatalogTableProps { - columns?: TableColumn[]; + columns?: TableColumn[] | CatalogTableColumnsFunc; actions?: TableProps['actions']; tableOptions?: TableProps['options']; emptyContent?: ReactNode; @@ -75,55 +77,66 @@ const refCompare = (a: Entity, b: Entity) => { return toRef(a).localeCompare(toRef(b)); }; +const defaultColumnsFunc: CatalogTableColumnsFunc = ({ filters, entities }) => { + const showTypeColumn = filters.type === undefined; + + return [ + columnFactories.createTitleColumn({ hidden: true }), + columnFactories.createNameColumn({ defaultKind: filters.kind?.value }), + ...createEntitySpecificColumns(), + columnFactories.createMetadataDescriptionColumn(), + columnFactories.createTagsColumn(), + ]; + + function createEntitySpecificColumns(): TableColumn[] { + const baseColumns = [ + columnFactories.createSystemColumn(), + columnFactories.createOwnerColumn(), + columnFactories.createSpecTypeColumn({ hidden: !showTypeColumn }), + columnFactories.createSpecLifecycleColumn(), + ]; + switch (filters.kind?.value) { + case 'user': + return []; + case 'domain': + case 'system': + return [columnFactories.createOwnerColumn()]; + case 'group': + case 'template': + return [ + columnFactories.createSpecTypeColumn({ hidden: !showTypeColumn }), + ]; + case 'location': + return [ + columnFactories.createSpecTypeColumn({ hidden: !showTypeColumn }), + columnFactories.createSpecTargetsColumn(), + ]; + default: + return entities.every(entity => entity.metadata.namespace === 'default') + ? baseColumns + : [...baseColumns, columnFactories.createNamespaceColumn()]; + } + } +}; + /** @public */ export const CatalogTable = (props: CatalogTableProps) => { - const { columns, actions, tableOptions, subtitle, emptyContent } = props; + const { + columns = defaultColumnsFunc, + tableOptions, + subtitle, + emptyContent, + } = props; const { isStarredEntity, toggleStarredEntity } = useStarredEntities(); - const { loading, error, entities, filters } = useEntityList(); + const entityListContext = useEntityList(); + const { loading, error, entities, filters, pageInfo } = entityListContext; + const enablePagination = !!pageInfo; - const defaultColumns: TableColumn[] = useMemo(() => { - return [ - columnFactories.createTitleColumn({ hidden: true }), - columnFactories.createNameColumn({ defaultKind: filters.kind?.value }), - ...createEntitySpecificColumns(), - columnFactories.createMetadataDescriptionColumn(), - columnFactories.createTagsColumn(), - ]; - - function createEntitySpecificColumns(): TableColumn[] { - const baseColumns = [ - columnFactories.createSystemColumn(), - columnFactories.createOwnerColumn(), - columnFactories.createSpecTypeColumn(), - columnFactories.createSpecLifecycleColumn(), - ]; - switch (filters.kind?.value) { - case 'user': - return []; - case 'domain': - case 'system': - return [columnFactories.createOwnerColumn()]; - case 'group': - case 'template': - return [columnFactories.createSpecTypeColumn()]; - case 'location': - return [ - columnFactories.createSpecTypeColumn(), - columnFactories.createSpecTargetsColumn(), - ]; - default: - return entities.every( - entity => entity.metadata.namespace === 'default', - ) - ? baseColumns - : [...baseColumns, columnFactories.createNamespaceColumn()]; - } - } - }, [filters.kind?.value, entities]); - - const showTypeColumn = filters.type === undefined; - // TODO(timbonicus): remove the title from the CatalogTable once using EntitySearchBar - const titlePreamble = capitalize(filters.user?.value ?? 'all'); + const tableColumns = useMemo( + () => + typeof columns === 'function' ? columns(entityListContext) : columns, + [columns, entityListContext], + ); if (error) { return ( @@ -146,7 +159,7 @@ export const CatalogTable = (props: CatalogTableProps) => { return { icon: () => ( <> - {title} + {title} ), @@ -165,7 +178,7 @@ export const CatalogTable = (props: CatalogTableProps) => { return { icon: () => ( <> - {title} + {title} ), @@ -185,7 +198,7 @@ export const CatalogTable = (props: CatalogTableProps) => { cellStyle: { paddingLeft: '1em' }, icon: () => ( <> - {title} + {title} {isStarred ? : } ), @@ -195,66 +208,58 @@ export const CatalogTable = (props: CatalogTableProps) => { }, ]; - const rows = entities.sort(refCompare).map(entity => { - const partOfSystemRelations = getEntityRelations(entity, RELATION_PART_OF, { - kind: 'system', - }); - const ownedByRelations = getEntityRelations(entity, RELATION_OWNED_BY); - - return { - entity, - resolved: { - // This name is here for backwards compatibility mostly; the - // presentation of refs in the table should in general be handled with - // EntityRefLink / EntityName components - name: humanizeEntityRef(entity, { - defaultKind: 'Component', - }), - entityRef: stringifyEntityRef(entity), - ownedByRelationsTitle: ownedByRelations - .map(r => humanizeEntityRef(r, { defaultKind: 'group' })) - .join(', '), - ownedByRelations, - partOfSystemRelationTitle: partOfSystemRelations - .map(r => - humanizeEntityRef(r, { - defaultKind: 'system', - }), - ) - .join(', '), - partOfSystemRelations, - }, - }; - }); - - const typeColumn = (columns || defaultColumns).find(c => c.title === 'Type'); - if (typeColumn) { - typeColumn.hidden = !showTypeColumn; - } - const showPagination = rows.length > 20; const currentKind = filters.kind?.value || ''; const currentType = filters.type?.value || ''; + // TODO(timbonicus): remove the title from the CatalogTable once using EntitySearchBar + const titlePreamble = capitalize(filters.user?.value ?? 'all'); const titleDisplay = [titlePreamble, currentType, pluralize(currentKind)] .filter(s => s) .join(' '); + const title = `${titleDisplay} (${entities.length})`; + const actions = props.actions || defaultActions; + const options = { + actionsColumnIndex: -1, + loadingType: 'linear' as const, + showEmptyDataSourceMessage: !loading, + padding: 'dense' as const, + ...tableOptions, + }; + + if (enablePagination) { + return ( + + ); + } + + const rows = entities.sort(refCompare).map(toEntityRow); + const pageSize = 20; + const showPagination = rows.length > pageSize; + return ( isLoading={loading} - columns={columns || defaultColumns} + columns={tableColumns} options={{ paging: showPagination, - pageSize: 20, - actionsColumnIndex: -1, - loadingType: 'linear', - showEmptyDataSourceMessage: !loading, - padding: 'dense', + pageSize: pageSize, pageSizeOptions: [20, 50, 100], - ...tableOptions, + ...options, }} title={`${titleDisplay} (${entities.length})`} data={rows} - actions={actions || defaultActions} + actions={actions} subtitle={subtitle} emptyContent={emptyContent} /> @@ -262,3 +267,35 @@ export const CatalogTable = (props: CatalogTableProps) => { }; CatalogTable.columns = columnFactories; + +function toEntityRow(entity: Entity) { + const partOfSystemRelations = getEntityRelations(entity, RELATION_PART_OF, { + kind: 'system', + }); + const ownedByRelations = getEntityRelations(entity, RELATION_OWNED_BY); + + return { + entity, + resolved: { + // This name is here for backwards compatibility mostly; the + // presentation of refs in the table should in general be handled with + // EntityRefLink / EntityName components + name: humanizeEntityRef(entity, { + defaultKind: 'Component', + }), + entityRef: stringifyEntityRef(entity), + ownedByRelationsTitle: ownedByRelations + .map(r => humanizeEntityRef(r, { defaultKind: 'group' })) + .join(', '), + ownedByRelations, + partOfSystemRelationTitle: partOfSystemRelations + .map(r => + humanizeEntityRef(r, { + defaultKind: 'system', + }), + ) + .join(', '), + partOfSystemRelations, + }, + }; +} diff --git a/plugins/catalog/src/components/CatalogTable/PaginatedCatalogTable.test.tsx b/plugins/catalog/src/components/CatalogTable/PaginatedCatalogTable.test.tsx new file mode 100644 index 0000000000..dbf37c2d5c --- /dev/null +++ b/plugins/catalog/src/components/CatalogTable/PaginatedCatalogTable.test.tsx @@ -0,0 +1,99 @@ +/* + * 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 { fireEvent, render } from '@testing-library/react'; +import { PaginatedCatalogTable } from './PaginatedCatalogTable'; +import { screen } from '@testing-library/react'; +import { CatalogTableRow } from './types'; + +describe('PaginatedCatalogTable', () => { + const data = new Array(100).fill(0).map((_, index) => { + const name = `component-${index}`; + return { + entity: { + apiVersion: '1', + kind: 'component', + metadata: { + name, + }, + }, + resolved: { + name, + entityRef: 'component:default/component', + }, + } as CatalogTableRow; + }); + + const columns = [ + { + title: 'Title', + field: 'entity.metadata.name', + searchable: true, + }, + ]; + + it('should display all the items', () => { + render(); + + for (const item of data) { + expect(screen.queryByText(item.resolved.name)).toBeInTheDocument(); + } + }); + + it('should display and invoke the next button', async () => { + const { rerender } = render( + , + ); + + expect( + screen.queryAllByRole('button', { name: 'Next Page' })[0], + ).toBeDisabled(); + + const fn = jest.fn(); + + rerender(); + + const nextButton = screen.queryAllByRole('button', { + name: 'Next Page', + })[0]; + expect(nextButton).toBeEnabled(); + + fireEvent.click(nextButton); + expect(fn).toHaveBeenCalled(); + }); + + it('should display and invoke the prev button', async () => { + const { rerender } = render( + , + ); + + expect( + screen.queryAllByRole('button', { name: 'Next Page' })[0], + ).toBeDisabled(); + + const fn = jest.fn(); + + rerender(); + + const prevButton = screen.queryAllByRole('button', { + name: 'Previous Page', + })[0]; + expect(prevButton).toBeEnabled(); + + fireEvent.click(prevButton); + expect(fn).toHaveBeenCalled(); + }); +}); diff --git a/plugins/catalog/src/components/CatalogTable/PaginatedCatalogTable.tsx b/plugins/catalog/src/components/CatalogTable/PaginatedCatalogTable.tsx new file mode 100644 index 0000000000..771878b65c --- /dev/null +++ b/plugins/catalog/src/components/CatalogTable/PaginatedCatalogTable.tsx @@ -0,0 +1,58 @@ +/* + * 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 { Table, TableProps } from '@backstage/core-components'; +import { CatalogTableRow } from './types'; + +type PaginatedCatalogTableProps = { + prev?(): void; + next?(): void; +} & TableProps; + +/** + * @internal + */ +export function PaginatedCatalogTable(props: PaginatedCatalogTableProps) { + const { columns, data, next, prev } = props; + + return ( + { + if (page > 0) { + next?.(); + } else { + prev?.(); + } + }} + /* this will enable the prev button accordingly */ + page={prev ? 1 : 0} + /* this will enable the next button accordingly */ + totalCount={next ? Number.MAX_VALUE : Number.MAX_SAFE_INTEGER} + localization={{ pagination: { labelDisplayedRows: '' } }} + /> + ); +} diff --git a/plugins/catalog/src/components/CatalogTable/columns.tsx b/plugins/catalog/src/components/CatalogTable/columns.tsx index 3c31fcadf1..4260a0c26b 100644 --- a/plugins/catalog/src/components/CatalogTable/columns.tsx +++ b/plugins/catalog/src/components/CatalogTable/columns.tsx @@ -100,11 +100,15 @@ export const columnFactories = Object.freeze({ ), }; }, - createSpecTypeColumn(): TableColumn { + createSpecTypeColumn( + options: { + hidden: boolean; + } = { hidden: false }, + ): TableColumn { return { title: 'Type', field: 'entity.spec.type', - hidden: true, + hidden: options.hidden, width: 'auto', }; }, diff --git a/plugins/catalog/src/components/CatalogTable/index.ts b/plugins/catalog/src/components/CatalogTable/index.ts index 4e1b90f80a..f5d1ca1bb7 100644 --- a/plugins/catalog/src/components/CatalogTable/index.ts +++ b/plugins/catalog/src/components/CatalogTable/index.ts @@ -16,4 +16,4 @@ export { CatalogTable } from './CatalogTable'; export type { CatalogTableProps } from './CatalogTable'; -export type { CatalogTableRow } from './types'; +export type { CatalogTableRow, CatalogTableColumnsFunc } from './types'; diff --git a/plugins/catalog/src/components/CatalogTable/types.ts b/plugins/catalog/src/components/CatalogTable/types.ts index f2b3324169..c991205b11 100644 --- a/plugins/catalog/src/components/CatalogTable/types.ts +++ b/plugins/catalog/src/components/CatalogTable/types.ts @@ -14,7 +14,9 @@ * limitations under the License. */ -import { Entity, CompoundEntityRef } from '@backstage/catalog-model'; +import { CompoundEntityRef, Entity } from '@backstage/catalog-model'; +import { EntityListContextProps } from '@backstage/plugin-catalog-react'; +import { TableColumn } from '@backstage/core-components'; /** @public */ export interface CatalogTableRow { @@ -31,3 +33,12 @@ export interface CatalogTableRow { ownedByRelations: CompoundEntityRef[]; }; } + +/** + * Typed columns function to dynamically render columns based on entity list context. + * + * @public + */ +export type CatalogTableColumnsFunc = ( + entityListContext: EntityListContextProps, +) => TableColumn[]; diff --git a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx index 9cd377b447..0fc746f455 100644 --- a/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx +++ b/plugins/catalog/src/components/EntityContextMenu/EntityContextMenu.tsx @@ -28,12 +28,13 @@ import { Theme, makeStyles } from '@material-ui/core/styles'; import BugReportIcon from '@material-ui/icons/BugReport'; import MoreVert from '@material-ui/icons/MoreVert'; import FileCopyTwoToneIcon from '@material-ui/icons/FileCopyTwoTone'; -import React, { useCallback, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { IconComponent } from '@backstage/core-plugin-api'; import { useEntityPermission } from '@backstage/plugin-catalog-react/alpha'; import { catalogEntityDeletePermission } from '@backstage/plugin-catalog-common/alpha'; import { UnregisterEntity, UnregisterEntityOptions } from './UnregisterEntity'; import { useApi, alertApiRef } from '@backstage/core-plugin-api'; +import useCopyToClipboard from 'react-use/lib/useCopyToClipboard'; /** @public */ export type EntityContextMenuClassKey = 'button'; @@ -87,16 +88,16 @@ export function EntityContextMenu(props: EntityContextMenuProps) { }; const alertApi = useApi(alertApiRef); - - const copyToClipboard = useCallback(() => { - window.navigator.clipboard.writeText(window.location.toString()).then(() => + const [copyState, copyToClipboard] = useCopyToClipboard(); + useEffect(() => { + if (!copyState.error && copyState.value) { alertApi.post({ message: 'Copied!', severity: 'info', display: 'transient', - }), - ); - }, [alertApi]); + }); + } + }, [copyState, alertApi]); const extraItems = UNSTABLE_extraContextMenuItems && [ ...UNSTABLE_extraContextMenuItems.map(item => ( @@ -163,7 +164,7 @@ export function EntityContextMenu(props: EntityContextMenuProps) { { onClose(); - copyToClipboard(); + copyToClipboard(window.location.toString()); }} > diff --git a/plugins/catalog/src/components/EntityLabelsCard/EntityLabelsEmptyState.tsx b/plugins/catalog/src/components/EntityLabelsCard/EntityLabelsEmptyState.tsx index a193a90d05..8878cb827f 100644 --- a/plugins/catalog/src/components/EntityLabelsCard/EntityLabelsEmptyState.tsx +++ b/plugins/catalog/src/components/EntityLabelsCard/EntityLabelsEmptyState.tsx @@ -14,7 +14,6 @@ * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; import { Button, makeStyles, Typography } from '@material-ui/core'; import React from 'react'; import { CodeSnippet } from '@backstage/core-components'; @@ -24,7 +23,7 @@ const ENTITY_YAML = `metadata: labels: javaVersion: 1.2.3`; -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ code: { borderRadius: 6, diff --git a/plugins/catalog/src/components/EntityLayout/EntityLayout.test.tsx b/plugins/catalog/src/components/EntityLayout/EntityLayout.test.tsx index 3634405af8..c222c2d7b6 100644 --- a/plugins/catalog/src/components/EntityLayout/EntityLayout.test.tsx +++ b/plugins/catalog/src/components/EntityLayout/EntityLayout.test.tsx @@ -15,7 +15,11 @@ */ import { CatalogApi } from '@backstage/catalog-client'; -import { Entity } from '@backstage/catalog-model'; +import { + ANNOTATION_ORIGIN_LOCATION, + Entity, + RELATION_OWNED_BY, +} from '@backstage/catalog-model'; import { ApiProvider } from '@backstage/core-app-api'; import { AlertApi, alertApiRef } from '@backstage/core-plugin-api'; import { @@ -30,27 +34,30 @@ import { permissionApiRef } from '@backstage/plugin-permission-react'; import { MockPermissionApi, renderInTestApp, + TestApiProvider, TestApiRegistry, } from '@backstage/test-utils'; -import { act, fireEvent, screen } from '@testing-library/react'; +import { act, fireEvent, screen, waitFor } from '@testing-library/react'; import React from 'react'; import { EntityLayout } from './EntityLayout'; - -const mockEntity = { - kind: 'MyKind', - metadata: { - name: 'my-entity', - }, -} as Entity; - -const mockApis = TestApiRegistry.from( - [catalogApiRef, {} as CatalogApi], - [alertApiRef, {} as AlertApi], - [starredEntitiesApiRef, new MockStarredEntitiesApi()], - [permissionApiRef, new MockPermissionApi()], -); +import { rootRouteRef, unregisterRedirectRouteRef } from '../../routes'; +import { Route, Routes } from 'react-router-dom'; describe('EntityLayout', () => { + const mockEntity = { + kind: 'MyKind', + metadata: { + name: 'my-entity', + }, + } as Entity; + + const mockApis = TestApiRegistry.from( + [catalogApiRef, {} as CatalogApi], + [alertApiRef, {} as AlertApi], + [starredEntitiesApiRef, new MockStarredEntitiesApi()], + [permissionApiRef, new MockPermissionApi()], + ); + it('renders simplest case', async () => { await renderInTestApp( @@ -65,6 +72,7 @@ describe('EntityLayout', () => { { mountedRoutes: { '/catalog/:namespace/:kind/:name': entityRouteRef, + '/catalog': rootRouteRef, }, }, ); @@ -97,6 +105,7 @@ describe('EntityLayout', () => { { mountedRoutes: { '/catalog/:namespace/:kind/:name': entityRouteRef, + '/catalog': rootRouteRef, }, }, ); @@ -120,6 +129,7 @@ describe('EntityLayout', () => { { mountedRoutes: { '/catalog/:namespace/:kind/:name': entityRouteRef, + '/catalog': rootRouteRef, }, }, ); @@ -146,6 +156,7 @@ describe('EntityLayout', () => { { mountedRoutes: { '/catalog/:namespace/:kind/:name': entityRouteRef, + '/catalog': rootRouteRef, }, }, ); @@ -178,6 +189,7 @@ describe('EntityLayout', () => { { mountedRoutes: { '/catalog/:namespace/:kind/:name': entityRouteRef, + '/catalog': rootRouteRef, }, }, ); @@ -225,6 +237,7 @@ describe('EntityLayout', () => { { mountedRoutes: { '/catalog/:namespace/:kind/:name': entityRouteRef, + '/catalog': rootRouteRef, }, }, ); @@ -253,6 +266,7 @@ describe('EntityLayout', () => { { mountedRoutes: { '/catalog/:namespace/:kind/:name': entityRouteRef, + '/catalog': rootRouteRef, }, }, ); @@ -265,3 +279,168 @@ describe('EntityLayout', () => { expect(linkParent?.tagName).toBe('P'); }); }); + +describe('EntityLayout - CleanUpAfterRemoval', () => { + const entity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + name: 'n', + namespace: 'ns', + annotations: { + [ANNOTATION_ORIGIN_LOCATION]: 'url:http://example.com', + }, + }, + spec: { + owner: 'tools', + type: 'service', + }, + relations: [ + { + type: RELATION_OWNED_BY, + targetRef: 'group:default/tools', + }, + ], + }; + const getLocationByRef: jest.MockedFunction = + jest.fn(); + const getEntities: jest.MockedFunction = jest.fn(); + const removeEntityByUid: jest.MockedFunction< + CatalogApi['removeEntityByUid'] + > = jest.fn(); + const getEntityFacets: jest.MockedFunction = + jest.fn(); + getLocationByRef.mockResolvedValue(undefined); + getEntities.mockResolvedValue({ items: [{ ...entity }] }); + getEntityFacets.mockResolvedValue({ + facets: { + 'relations.ownedBy': [{ count: 1, value: 'group:default/tools' }], + }, + }); + + const alertApi: AlertApi = { + post() { + return undefined; + }, + alert$() { + throw new Error('not implemented'); + }, + }; + + it('redirects to externalRouteRef when unregisterRedirectRouteRef is bound', async () => { + await renderInTestApp( + + + + +
tabbed-test-content
+
+
+
+ + catalog-page

} /> + external-page

} /> +
+
, + { + mountedRoutes: { + '/catalog/:namespace/:kind/:name': entityRouteRef, + '/catalog': rootRouteRef, + '/testRoute': unregisterRedirectRouteRef, + }, + }, + ); + + const menuButton = screen.queryAllByTestId('menu-button')[0]; + fireEvent.click(menuButton); + const listItemUnregister = screen.queryAllByRole('menuitem', { + name: /Unregister entity/i, + })[0]; + fireEvent.click(listItemUnregister); + await waitFor(() => { + const deleteEntityButton = screen.getByRole('button', { + name: /Delete Entity/i, + }); + act(() => { + fireEvent.click(deleteEntityButton); + }); + }); + + await waitFor(() => { + expect(screen.getByText('external-page')).toBeInTheDocument(); + }); + }); + + it('redirects to rootRouteRef when unregisterRedirectRouteRef is not bound', async () => { + await renderInTestApp( + + + + +
tabbed-test-content
+
+
+
+ + catalog-page

} /> + external-page

} /> +
+
, + { + mountedRoutes: { + '/catalog/:namespace/:kind/:name': entityRouteRef, + '/catalog': rootRouteRef, + }, + }, + ); + + const menuButton = screen.queryAllByTestId('menu-button')[0]; + fireEvent.click(menuButton); + const listItemUnregister = screen.queryAllByRole('menuitem', { + name: /Unregister entity/i, + })[0]; + fireEvent.click(listItemUnregister); + await waitFor(() => { + const deleteEntityButton = screen.getByRole('button', { + name: /Delete Entity/i, + }); + act(() => { + fireEvent.click(deleteEntityButton); + }); + }); + + await waitFor(() => { + expect(screen.getByText('catalog-page')).toBeInTheDocument(); + }); + }); +}); diff --git a/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx b/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx index fb6da04f1a..8e11f92599 100644 --- a/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx +++ b/plugins/catalog/src/components/EntityLayout/EntityLayout.tsx @@ -33,6 +33,7 @@ import { attachComponentData, IconComponent, useElementFilter, + useRouteRef, useRouteRefParams, } from '@backstage/core-plugin-api'; import { @@ -50,6 +51,7 @@ import { Alert } from '@material-ui/lab'; import React, { useEffect, useState } from 'react'; import { useLocation, useNavigate } from 'react-router-dom'; import { EntityContextMenu } from '../EntityContextMenu/EntityContextMenu'; +import { rootRouteRef, unregisterRedirectRouteRef } from '../../routes'; /** @public */ export type EntityLayoutRouteProps = { @@ -79,7 +81,7 @@ function EntityLayoutTitle(props: { whiteSpace="nowrap" overflow="hidden" > - {entity ? : title} + {entity ? : title} {entity && } @@ -229,10 +231,15 @@ export const EntityLayout = (props: EntityLayoutProps) => { const [confirmationDialogOpen, setConfirmationDialogOpen] = useState(false); const [inspectionDialogOpen, setInspectionDialogOpen] = useState(false); const navigate = useNavigate(); + const catalogRoute = useRouteRef(rootRouteRef); + const unregisterRedirectRoute = useRouteRef(unregisterRedirectRouteRef); + const cleanUpAfterRemoval = async () => { setConfirmationDialogOpen(false); setInspectionDialogOpen(false); - navigate('/'); + navigate( + unregisterRedirectRoute ? unregisterRedirectRoute() : catalogRoute(), + ); }; // Make sure to close the dialog if the user clicks links in it that navigate diff --git a/plugins/catalog/src/components/EntityLinksCard/EntityLinksEmptyState.tsx b/plugins/catalog/src/components/EntityLinksCard/EntityLinksEmptyState.tsx index f55527c78a..59ab3f3db2 100644 --- a/plugins/catalog/src/components/EntityLinksCard/EntityLinksEmptyState.tsx +++ b/plugins/catalog/src/components/EntityLinksCard/EntityLinksEmptyState.tsx @@ -14,7 +14,6 @@ * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; import { Button, makeStyles, Typography } from '@material-ui/core'; import React from 'react'; import { CodeSnippet } from '@backstage/core-components'; @@ -29,7 +28,7 @@ const ENTITY_YAML = `metadata: /** @public */ export type EntityLinksEmptyStateClassKey = 'code'; -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ code: { borderRadius: 6, diff --git a/plugins/catalog/src/components/EntityNotFound/EntityNotFound.tsx b/plugins/catalog/src/components/EntityNotFound/EntityNotFound.tsx index fca763c37b..d8d9fe0855 100644 --- a/plugins/catalog/src/components/EntityNotFound/EntityNotFound.tsx +++ b/plugins/catalog/src/components/EntityNotFound/EntityNotFound.tsx @@ -17,10 +17,9 @@ import React from 'react'; import { Grid, Button, Typography } from '@material-ui/core'; import { makeStyles } from '@material-ui/core/styles'; -import { BackstageTheme } from '@backstage/theme'; import { Illo } from './Illo'; -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ container: { paddingTop: theme.spacing(24), paddingLeft: theme.spacing(8), diff --git a/plugins/catalog/src/overridableComponents.ts b/plugins/catalog/src/overridableComponents.ts index 5cd82202d5..0d981b1700 100644 --- a/plugins/catalog/src/overridableComponents.ts +++ b/plugins/catalog/src/overridableComponents.ts @@ -33,3 +33,8 @@ export type BackstageOverrides = Overrides & { StyleRules >; }; + +declare module '@backstage/theme' { + interface OverrideComponentNameToClassKeys + extends PluginCatalogComponentsNameToClassKey {} +} diff --git a/plugins/catalog/src/plugin.ts b/plugins/catalog/src/plugin.ts index d310639fb1..f41fefe404 100644 --- a/plugins/catalog/src/plugin.ts +++ b/plugins/catalog/src/plugin.ts @@ -25,6 +25,7 @@ import { import { createComponentRouteRef, createFromTemplateRouteRef, + unregisterRedirectRouteRef, viewTechDocRouteRef, } from './routes'; import { @@ -89,6 +90,7 @@ export const catalogPlugin = createPlugin({ createComponent: createComponentRouteRef, viewTechDoc: viewTechDocRouteRef, createFromTemplate: createFromTemplateRouteRef, + unregisterRedirect: unregisterRedirectRouteRef, }, }); diff --git a/plugins/catalog/src/routes.ts b/plugins/catalog/src/routes.ts index ab70a3c551..dcc46c7988 100644 --- a/plugins/catalog/src/routes.ts +++ b/plugins/catalog/src/routes.ts @@ -36,6 +36,11 @@ export const createFromTemplateRouteRef = createExternalRouteRef({ params: ['namespace', 'templateName'], }); +export const unregisterRedirectRouteRef = createExternalRouteRef({ + id: 'catalog:unregister-redirect', + optional: true, +}); + export const rootRouteRef = createRouteRef({ id: 'catalog', }); diff --git a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md index c107239384..06bce48963 100644 --- a/plugins/cicd-statistics-module-gitlab/CHANGELOG.md +++ b/plugins/cicd-statistics-module-gitlab/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-cicd-statistics-module-gitlab +## 0.1.24-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/plugin-cicd-statistics@0.1.30-next.0 + - @backstage/catalog-model@1.4.3 + +## 0.1.22 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-cicd-statistics@0.1.28 + - @backstage/catalog-model@1.4.3 + ## 0.1.22-next.2 ### Patch Changes diff --git a/plugins/cicd-statistics-module-gitlab/package.json b/plugins/cicd-statistics-module-gitlab/package.json index 8b5403d084..15c0602394 100644 --- a/plugins/cicd-statistics-module-gitlab/package.json +++ b/plugins/cicd-statistics-module-gitlab/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cicd-statistics-module-gitlab", "description": "CI/CD Statistics plugin module; Gitlab CICD", - "version": "0.1.22-next.2", + "version": "0.1.24-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cicd-statistics/CHANGELOG.md b/plugins/cicd-statistics/CHANGELOG.md index 75c87a0e29..0cdd53dc87 100644 --- a/plugins/cicd-statistics/CHANGELOG.md +++ b/plugins/cicd-statistics/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-cicd-statistics +## 0.1.30-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/catalog-model@1.4.3 + +## 0.1.28 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-plugin-api@1.8.0 + - @backstage/catalog-model@1.4.3 + ## 0.1.28-next.2 ### Patch Changes diff --git a/plugins/cicd-statistics/package.json b/plugins/cicd-statistics/package.json index 51cc3ec539..35a44e3fd0 100644 --- a/plugins/cicd-statistics/package.json +++ b/plugins/cicd-statistics/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cicd-statistics", "description": "A frontend plugin visualizing CI/CD pipeline statistics (build time)", - "version": "0.1.28-next.2", + "version": "0.1.30-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cicd-statistics/src/components/chart-filters.tsx b/plugins/cicd-statistics/src/components/chart-filters.tsx index 03cbea5dd0..026e81fd74 100644 --- a/plugins/cicd-statistics/src/components/chart-filters.tsx +++ b/plugins/cicd-statistics/src/components/chart-filters.tsx @@ -27,7 +27,6 @@ import { Switch, Tooltip, Typography, - Theme, makeStyles, } from '@material-ui/core'; import ShowChartIcon from '@material-ui/icons/ShowChart'; @@ -54,7 +53,7 @@ import { Toggle } from './toggle'; import { DurationSlider } from './duration-slider'; import { Label } from './label'; -export const useStyles = makeStyles( +export const useStyles = makeStyles( theme => ({ rootCard: { padding: theme.spacing(0, 0, 0, 0), diff --git a/plugins/cicd-statistics/src/components/label.tsx b/plugins/cicd-statistics/src/components/label.tsx index fe064d30a6..1c9a05b303 100644 --- a/plugins/cicd-statistics/src/components/label.tsx +++ b/plugins/cicd-statistics/src/components/label.tsx @@ -15,9 +15,9 @@ */ import React, { PropsWithChildren } from 'react'; -import { Typography, Theme, makeStyles } from '@material-ui/core'; +import { Typography, makeStyles } from '@material-ui/core'; -export const useStyles = makeStyles( +export const useStyles = makeStyles( theme => ({ label: { fontWeight: 'normal', diff --git a/plugins/cicd-statistics/src/entity-page.tsx b/plugins/cicd-statistics/src/entity-page.tsx index db5cba42aa..25b8477f61 100644 --- a/plugins/cicd-statistics/src/entity-page.tsx +++ b/plugins/cicd-statistics/src/entity-page.tsx @@ -15,7 +15,7 @@ */ import React, { useCallback, useState, useMemo, useEffect } from 'react'; -import { Grid, makeStyles, Theme } from '@material-ui/core'; +import { Grid, makeStyles } from '@material-ui/core'; import { Alert } from '@material-ui/lab'; import { useEntity } from '@backstage/plugin-catalog-react'; import { useApi, errorApiRef } from '@backstage/core-plugin-api'; @@ -57,7 +57,7 @@ export function EntityPageCicdCharts() { )); } -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ pane: { padding: theme.spacing(1, 1, 1, 1), diff --git a/plugins/circleci/CHANGELOG.md b/plugins/circleci/CHANGELOG.md index 6fbb26f3f2..79a0b71b57 100644 --- a/plugins/circleci/CHANGELOG.md +++ b/plugins/circleci/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-circleci +## 0.3.28-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 + +## 0.3.26 + +### 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 + ## 0.3.26-next.2 ### Patch Changes diff --git a/plugins/circleci/package.json b/plugins/circleci/package.json index 7fbef0c907..7075a383a8 100644 --- a/plugins/circleci/package.json +++ b/plugins/circleci/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-circleci", "description": "A Backstage plugin that integrates towards Circle CI", - "version": "0.3.26-next.2", + "version": "0.3.28-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -64,7 +64,7 @@ "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.0.0", "@types/humanize-duration": "^3.25.1", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/cloudbuild/CHANGELOG.md b/plugins/cloudbuild/CHANGELOG.md index 152953b6d8..32ea259d87 100644 --- a/plugins/cloudbuild/CHANGELOG.md +++ b/plugins/cloudbuild/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-cloudbuild +## 0.3.28-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 + +## 0.3.26 + +### Patch Changes + +- 8ae07cab4c: Added Installation Steps so that it is clear what is needed to install and use the Google Cloud Plugin. +- 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 + ## 0.3.26-next.2 ### Patch Changes diff --git a/plugins/cloudbuild/README.md b/plugins/cloudbuild/README.md index 5f1f6519dc..07999c85a1 100644 --- a/plugins/cloudbuild/README.md +++ b/plugins/cloudbuild/README.md @@ -1,13 +1,81 @@ # Google Cloud Build -Welcome to the Google Cloud Build plugin! +### Welcome to the Google Cloud Build plugin! -_This plugin was created through the Backstage CLI_ +This plugin allows you to include Google Cloud Build history in your backstage CI/CD page. -## Getting started + -Your plugin has been added to the example app in this repository, meaning you'll be able to access it by running `yarn start` in the root directory, and then navigating to [/cloudbuild](http://localhost:3000/cloudbuild). +## Installation Steps -You can also serve the plugin in isolation by running `yarn start` in the plugin directory. -This method of serving the plugin provides quicker iteration speed and a faster startup and hot reloads. -It is only meant for local development, and the setup for it can be found inside the [/dev](./dev) directory. +### Install the plugin into backstage + +```bash +cd packages/app +yarn add @backstage/plugin-cloudbuild +``` + +### Modify EntityPage.tsx + +packages/app/src/components/catalog/EntityPage.tsx + +#### Add the Plugin import to the list of imports + +```diff +// packages/app/src/components/catalog/EntityPage.tsx +import { TechDocsAddons } from '@backstage/plugin-techdocs-react'; + +import { ReportIssue } from '@backstage/plugin-techdocs-module-addons-contrib'; + ++import { EntityCloudbuildContent, isCloudbuildAvailable } from '@backstage/plugin-cloudbuild'; +``` + +#### In your `cicdContent` constant, add the following switch case + +```diff +// packages/app/src/components/catalog/EntityPage.tsx +const cicdContent = ( + ++ ++ ++ + + + + +``` + +##### OPTIONAL + +If you don't use GitHub Actions, or don't want to show it on your CI/CD page, then you can remove the switch case for it + +```diff +// packages/app/src/components/catalog/EntityPage.tsx +const cicdContent = ( + ++ ++ ++ + +- +- +- +``` + +### Add annotation to your component-info.yaml file. + +Any component, that you would like the Cloud Build Plugin to populate for, should include the following annotation: + +```diff +// component-info.yaml +apiVersion: backstage.io/v1alpha1 +kind: Component +metadata: + name: backstage + description: Backstage application. ++ annotations: ++ google.com/cloudbuild-project-slug: your-project-name +spec: + type: website + lifecycle: development +``` diff --git a/plugins/cloudbuild/package.json b/plugins/cloudbuild/package.json index 3343f8dd66..1caaf87edd 100644 --- a/plugins/cloudbuild/package.json +++ b/plugins/cloudbuild/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cloudbuild", "description": "A Backstage plugin that integrates towards Google Cloud Build", - "version": "0.3.26-next.2", + "version": "0.3.28-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -61,7 +61,7 @@ "@testing-library/jest-dom": "^6.0.0", "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.0.0", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/cloudbuild/src/components/Cards/Cards.tsx b/plugins/cloudbuild/src/components/Cards/Cards.tsx index 2b7a8607b7..11efe520e0 100644 --- a/plugins/cloudbuild/src/components/Cards/Cards.tsx +++ b/plugins/cloudbuild/src/components/Cards/Cards.tsx @@ -19,7 +19,7 @@ import { useWorkflowRuns, WorkflowRun } from '../useWorkflowRuns'; import { WorkflowRunsTable } from '../WorkflowRunsTable'; import { useEntity } from '@backstage/plugin-catalog-react'; import { WorkflowRunStatus } from '../WorkflowRunStatus'; -import { Theme, makeStyles, LinearProgress } from '@material-ui/core'; +import { makeStyles, LinearProgress } from '@material-ui/core'; import ExternalLinkIcon from '@material-ui/icons/Launch'; import { CLOUDBUILD_ANNOTATION } from '../useProjectName'; @@ -31,7 +31,7 @@ import { } from '@backstage/core-components'; import { errorApiRef, useApi } from '@backstage/core-plugin-api'; -const useStyles = makeStyles({ +const useStyles = makeStyles({ externalLinkIcon: { fontSize: 'inherit', verticalAlign: 'bottom', diff --git a/plugins/cloudbuild/src/components/WorkflowRunDetails/WorkflowRunDetails.tsx b/plugins/cloudbuild/src/components/WorkflowRunDetails/WorkflowRunDetails.tsx index a35d9b6f6c..f55d7957a3 100644 --- a/plugins/cloudbuild/src/components/WorkflowRunDetails/WorkflowRunDetails.tsx +++ b/plugins/cloudbuild/src/components/WorkflowRunDetails/WorkflowRunDetails.tsx @@ -25,7 +25,6 @@ import { TableCell, TableContainer, TableRow, - Theme, Typography, } from '@material-ui/core'; import ExternalLinkIcon from '@material-ui/icons/Launch'; @@ -36,7 +35,7 @@ import { WorkflowRunStatus } from '../WorkflowRunStatus'; import { useWorkflowRunsDetails } from './useWorkflowRunsDetails'; import { Breadcrumbs, Link, WarningPanel } from '@backstage/core-components'; -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ root: { maxWidth: 720, margin: theme.spacing(2), diff --git a/plugins/code-climate/CHANGELOG.md b/plugins/code-climate/CHANGELOG.md index 3474d8150f..dd10502cf0 100644 --- a/plugins/code-climate/CHANGELOG.md +++ b/plugins/code-climate/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-code-climate +## 0.1.28-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 + +## 0.1.26 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 62b5922916: Internal theme type updates +- 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 + ## 0.1.26-next.2 ### Patch Changes diff --git a/plugins/code-climate/package.json b/plugins/code-climate/package.json index 7a1ad81bd3..5210337fda 100644 --- a/plugins/code-climate/package.json +++ b/plugins/code-climate/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-code-climate", - "version": "0.1.26-next.2", + "version": "0.1.28-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-coverage-backend/CHANGELOG.md b/plugins/code-coverage-backend/CHANGELOG.md index bb640d02bc..08fe1692d8 100644 --- a/plugins/code-coverage-backend/CHANGELOG.md +++ b/plugins/code-coverage-backend/CHANGELOG.md @@ -1,5 +1,35 @@ # @backstage/plugin-code-coverage-backend +## 0.2.22-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-auth-node@0.4.2-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 + +## 0.2.21 + +### Patch Changes + +- 11f671eaa9: Added support for new backend system +- 013611b42e: `knex` has been bumped to major version 3 and `better-sqlite3` to major version 9, which deprecate node 16 support. +- Updated dependencies + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-auth-node@0.4.1 + ## 0.2.21-next.2 ### Patch Changes diff --git a/plugins/code-coverage-backend/package.json b/plugins/code-coverage-backend/package.json index 0b20b1fcaa..4bd83b92f6 100644 --- a/plugins/code-coverage-backend/package.json +++ b/plugins/code-coverage-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-code-coverage-backend", "description": "A Backstage backend plugin that helps you keep track of your code coverage", - "version": "0.2.21-next.2", + "version": "0.2.22-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-coverage/CHANGELOG.md b/plugins/code-coverage/CHANGELOG.md index bd28b8c0fd..a29cf758a8 100644 --- a/plugins/code-coverage/CHANGELOG.md +++ b/plugins/code-coverage/CHANGELOG.md @@ -1,5 +1,34 @@ # @backstage/plugin-code-coverage +## 0.2.21-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 + - @backstage/errors@1.2.3 + +## 0.2.19 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 71c97e7d73: The warning for missing code coverage will now render the entity as a reference. +- 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 + - @backstage/errors@1.2.3 + ## 0.2.19-next.2 ### Patch Changes diff --git a/plugins/code-coverage/package.json b/plugins/code-coverage/package.json index 12d2b501c1..c4fda6c18b 100644 --- a/plugins/code-coverage/package.json +++ b/plugins/code-coverage/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-code-coverage", "description": "A Backstage plugin that helps you keep track of your code coverage", - "version": "0.2.19-next.2", + "version": "0.2.21-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/code-coverage/src/components/CoverageHistoryChart/CoverageHistoryChart.tsx b/plugins/code-coverage/src/components/CoverageHistoryChart/CoverageHistoryChart.tsx index 09f499fafd..3cb4ad5d56 100644 --- a/plugins/code-coverage/src/components/CoverageHistoryChart/CoverageHistoryChart.tsx +++ b/plugins/code-coverage/src/components/CoverageHistoryChart/CoverageHistoryChart.tsx @@ -15,7 +15,6 @@ */ import { useEntity } from '@backstage/plugin-catalog-react'; -import { BackstageTheme } from '@backstage/theme'; import { Box, Card, @@ -50,7 +49,7 @@ import { DateTime } from 'luxon'; type Coverage = 'line' | 'branch'; -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ trendDown: { color: theme.palette.status.warning, }, diff --git a/plugins/codescene/CHANGELOG.md b/plugins/codescene/CHANGELOG.md index a82096cabf..36af453283 100644 --- a/plugins/codescene/CHANGELOG.md +++ b/plugins/codescene/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-codescene +## 0.1.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## 0.1.19 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + ## 0.1.19-next.2 ### Patch Changes diff --git a/plugins/codescene/package.json b/plugins/codescene/package.json index ced314c7ce..9296b76c55 100644 --- a/plugins/codescene/package.json +++ b/plugins/codescene/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-codescene", - "version": "0.1.19-next.2", + "version": "0.1.20-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/codescene/src/components/Gauge/Gauge.tsx b/plugins/codescene/src/components/Gauge/Gauge.tsx index 97e6b33daf..df91136b6a 100644 --- a/plugins/codescene/src/components/Gauge/Gauge.tsx +++ b/plugins/codescene/src/components/Gauge/Gauge.tsx @@ -13,13 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { BackstagePalette, BackstageTheme } from '@backstage/theme'; + import { makeStyles, useTheme } from '@material-ui/core/styles'; +import { Palette } from '@material-ui/core/styles/createPalette'; import Tooltip from '@material-ui/core/Tooltip'; import { Circle } from 'rc-progress'; import React, { useEffect, useState } from 'react'; -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ root: { position: 'relative', @@ -51,7 +52,7 @@ export type GaugeProps = { }; export type GaugePropsGetColorOptions = { - palette: BackstagePalette; + palette: Palette; value: number; max: number; }; @@ -78,11 +79,10 @@ export const getProgressColor: GaugePropsGetColor = ({ /** * Circular Progress Bar - * */ export function Gauge(props: GaugeProps) { const classes = useStyles(props); - const { palette } = useTheme(); + const { palette } = useTheme(); const [hoverRef, setHoverRef] = useState(null); const [open, setOpen] = useState(false); const { value, max, tooltipDelay, tooltipText } = { diff --git a/plugins/config-schema/CHANGELOG.md b/plugins/config-schema/CHANGELOG.md index 1137a9207b..b05b2e5e85 100644 --- a/plugins/config-schema/CHANGELOG.md +++ b/plugins/config-schema/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-config-schema +## 0.1.48-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## 0.1.47 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + ## 0.1.47-next.2 ### Patch Changes diff --git a/plugins/config-schema/package.json b/plugins/config-schema/package.json index 230639106c..da59ec9de9 100644 --- a/plugins/config-schema/package.json +++ b/plugins/config-schema/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-config-schema", "description": "A Backstage plugin that lets you browse the configuration schema of your app", - "version": "0.1.47-next.2", + "version": "0.1.48-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/cost-insights/CHANGELOG.md b/plugins/cost-insights/CHANGELOG.md index 1f343ab3ee..471675b140 100644 --- a/plugins/cost-insights/CHANGELOG.md +++ b/plugins/cost-insights/CHANGELOG.md @@ -1,5 +1,37 @@ # @backstage/plugin-cost-insights +## 0.12.17-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 + - @backstage/plugin-cost-insights-common@0.1.2 + +## 0.12.15 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 69ee8d75f4: Remove `button` prop from used MaterialUI `MenuItem` component fixing incompatibility with MaterialUI v5. +- d49cffaf6a: Updated dependency `@types/pluralize` to `^0.0.33`. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- 7da799d5b7: Updated dependency `@types/pluralize` to `^0.0.32`. +- 62b5922916: Internal theme type updates +- 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 + - @backstage/plugin-cost-insights-common@0.1.2 + ## 0.12.15-next.2 ### Patch Changes diff --git a/plugins/cost-insights/package.json b/plugins/cost-insights/package.json index 337ca7c58b..88166e729d 100644 --- a/plugins/cost-insights/package.json +++ b/plugins/cost-insights/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-cost-insights", "description": "A Backstage plugin that helps you keep track of your cloud spend", - "version": "0.12.15-next.2", + "version": "0.12.17-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -75,7 +75,7 @@ "@types/regression": "^2.0.0", "@types/yup": "^0.29.13", "canvas": "^2.10.2", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/cost-insights/src/components/CostInsightsNavigation/CostInsightsNavigation.tsx b/plugins/cost-insights/src/components/CostInsightsNavigation/CostInsightsNavigation.tsx index 507016f391..0bdfed3855 100644 --- a/plugins/cost-insights/src/components/CostInsightsNavigation/CostInsightsNavigation.tsx +++ b/plugins/cost-insights/src/components/CostInsightsNavigation/CostInsightsNavigation.tsx @@ -44,7 +44,6 @@ const NavigationMenuItem = ({ navigation, icon, title }: NavigationItem) => { const [, setScroll] = useScroll(); return ( setScroll(navigation)} diff --git a/plugins/cost-insights/src/utils/styles.ts b/plugins/cost-insights/src/utils/styles.ts index cec9c0150d..c4c330138b 100644 --- a/plugins/cost-insights/src/utils/styles.ts +++ b/plugins/cost-insights/src/utils/styles.ts @@ -21,9 +21,9 @@ import { getLuminance, lighten, makeStyles, + Theme, } from '@material-ui/core'; import { CostInsightsTheme, CostInsightsThemeOptions } from '../types'; -import { BackstageTheme } from '@backstage/theme'; export const costInsightsLightTheme = { palette: { @@ -231,7 +231,7 @@ export const useCostInsightsStyles = makeStyles(theme => ({ }, })); -export const useCostInsightsTabsStyles = makeStyles(theme => ({ +export const useCostInsightsTabsStyles = makeStyles(theme => ({ tabs: { borderBottom: `1px solid ${theme.palette.textVerySubtle}`, backgroundColor: brighten(theme.palette.background.default), diff --git a/plugins/devtools-backend/CHANGELOG.md b/plugins/devtools-backend/CHANGELOG.md index 6cc2983ba7..a1e9a0d4fd 100644 --- a/plugins/devtools-backend/CHANGELOG.md +++ b/plugins/devtools-backend/CHANGELOG.md @@ -1,5 +1,39 @@ # @backstage/plugin-devtools-backend +## 0.2.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-permission-node@0.7.19-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/cli-common@0.1.13 + - @backstage/config@1.1.1 + - @backstage/config-loader@1.5.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-devtools-common@0.1.6 + - @backstage/plugin-permission-common@0.7.10 + +## 0.2.4 + +### Patch Changes + +- Updated dependencies + - @backstage/config-loader@1.5.3 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/cli-common@0.1.13 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.4.1 + - @backstage/plugin-devtools-common@0.1.6 + - @backstage/plugin-permission-node@0.7.18 + ## 0.2.4-next.2 ### Patch Changes diff --git a/plugins/devtools-backend/package.json b/plugins/devtools-backend/package.json index 43a4bab569..f4976a695f 100644 --- a/plugins/devtools-backend/package.json +++ b/plugins/devtools-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-devtools-backend", - "version": "0.2.4-next.2", + "version": "0.2.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/devtools-common/CHANGELOG.md b/plugins/devtools-common/CHANGELOG.md index 4a95434b3d..adcc675218 100644 --- a/plugins/devtools-common/CHANGELOG.md +++ b/plugins/devtools-common/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-devtools-common +## 0.1.6 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.10 + - @backstage/types@1.1.1 + ## 0.1.5 ### Patch Changes diff --git a/plugins/devtools-common/package.json b/plugins/devtools-common/package.json index 703ad2a5e3..6cf7f36cbc 100644 --- a/plugins/devtools-common/package.json +++ b/plugins/devtools-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-devtools-common", "description": "Common functionalities for the devtools plugin", - "version": "0.1.5", + "version": "0.1.6", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/devtools/CHANGELOG.md b/plugins/devtools/CHANGELOG.md index 87c2de069b..f00218080d 100644 --- a/plugins/devtools/CHANGELOG.md +++ b/plugins/devtools/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-devtools +## 0.1.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/plugin-permission-react@0.4.18-next.0 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-devtools-common@0.1.6 + +## 0.1.6 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-permission-react@0.4.17 + - @backstage/theme@0.4.4 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-devtools-common@0.1.6 + ## 0.1.6-next.2 ### Patch Changes diff --git a/plugins/devtools/package.json b/plugins/devtools/package.json index 11a36d6db0..9f0318df40 100644 --- a/plugins/devtools/package.json +++ b/plugins/devtools/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-devtools", - "version": "0.1.6-next.2", + "version": "0.1.7-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -56,7 +56,7 @@ "@testing-library/jest-dom": "^6.0.0", "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.0.0", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/dynatrace/CHANGELOG.md b/plugins/dynatrace/CHANGELOG.md index a664369aa4..180444eabd 100644 --- a/plugins/dynatrace/CHANGELOG.md +++ b/plugins/dynatrace/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-dynatrace +## 8.0.2-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 + +## 8.0.0 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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 + ## 8.0.0-next.2 ### Patch Changes diff --git a/plugins/dynatrace/package.json b/plugins/dynatrace/package.json index 51c62a94da..cd09c89a1c 100644 --- a/plugins/dynatrace/package.json +++ b/plugins/dynatrace/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-dynatrace", - "version": "8.0.0-next.2", + "version": "8.0.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-feedback-backend/CHANGELOG.md b/plugins/entity-feedback-backend/CHANGELOG.md index 11714d4fa0..441859172c 100644 --- a/plugins/entity-feedback-backend/CHANGELOG.md +++ b/plugins/entity-feedback-backend/CHANGELOG.md @@ -1,5 +1,32 @@ # @backstage/plugin-entity-feedback-backend +## 0.2.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-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/plugin-entity-feedback-common@0.1.3 + +## 0.2.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/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/plugin-auth-node@0.4.1 + - @backstage/plugin-entity-feedback-common@0.1.3 + ## 0.2.4-next.2 ### Patch Changes diff --git a/plugins/entity-feedback-backend/package.json b/plugins/entity-feedback-backend/package.json index c19bf4b0c4..e13f20fa64 100644 --- a/plugins/entity-feedback-backend/package.json +++ b/plugins/entity-feedback-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-entity-feedback-backend", - "version": "0.2.4-next.2", + "version": "0.2.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-feedback/CHANGELOG.md b/plugins/entity-feedback/CHANGELOG.md index 218acbb296..e890abd312 100644 --- a/plugins/entity-feedback/CHANGELOG.md +++ b/plugins/entity-feedback/CHANGELOG.md @@ -1,5 +1,32 @@ # @backstage/plugin-entity-feedback +## 0.2.11-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-entity-feedback-common@0.1.3 + +## 0.2.9 + +### 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-entity-feedback-common@0.1.3 + ## 0.2.9-next.2 ### Patch Changes diff --git a/plugins/entity-feedback/package.json b/plugins/entity-feedback/package.json index 5c0317d19a..4569a53c34 100644 --- a/plugins/entity-feedback/package.json +++ b/plugins/entity-feedback/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-entity-feedback", - "version": "0.2.9-next.2", + "version": "0.2.11-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/entity-feedback/src/components/FeedbackResponseTable/FeedbackResponseTable.tsx b/plugins/entity-feedback/src/components/FeedbackResponseTable/FeedbackResponseTable.tsx index 654cfd1413..863cdcc6b6 100644 --- a/plugins/entity-feedback/src/components/FeedbackResponseTable/FeedbackResponseTable.tsx +++ b/plugins/entity-feedback/src/components/FeedbackResponseTable/FeedbackResponseTable.tsx @@ -18,7 +18,6 @@ import { ErrorPanel, Table } from '@backstage/core-components'; import { useApi } from '@backstage/core-plugin-api'; import { EntityRefLink } from '@backstage/plugin-catalog-react'; import { FeedbackResponse } from '@backstage/plugin-entity-feedback-common'; -import { BackstageTheme } from '@backstage/theme'; import { Chip, makeStyles } from '@material-ui/core'; import CheckIcon from '@material-ui/icons/Check'; import React from 'react'; @@ -28,7 +27,7 @@ import { entityFeedbackApiRef } from '../../api'; type ResponseRow = Omit; -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ consentCheck: { color: theme.palette.status.ok, }, diff --git a/plugins/entity-validation/CHANGELOG.md b/plugins/entity-validation/CHANGELOG.md index 50b1f294da..3c5dd92fa1 100644 --- a/plugins/entity-validation/CHANGELOG.md +++ b/plugins/entity-validation/CHANGELOG.md @@ -1,5 +1,34 @@ # @backstage/plugin-entity-validation +## 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-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/plugin-catalog-common@1.0.18 + +## 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-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/plugin-catalog-common@1.0.18 + ## 0.1.11-next.2 ### Patch Changes diff --git a/plugins/entity-validation/package.json b/plugins/entity-validation/package.json index ead1a14221..8657c2cbdc 100644 --- a/plugins/entity-validation/package.json +++ b/plugins/entity-validation/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-entity-validation", - "version": "0.1.11-next.2", + "version": "0.1.13-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-aws-sqs/CHANGELOG.md b/plugins/events-backend-module-aws-sqs/CHANGELOG.md index c005cdb894..c4f5ad2d51 100644 --- a/plugins/events-backend-module-aws-sqs/CHANGELOG.md +++ b/plugins/events-backend-module-aws-sqs/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-events-backend-module-aws-sqs +## 0.2.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/plugin-events-node@0.2.17-next.0 + +## 0.2.10 + +### Patch Changes + +- 3d043526f4: Updated dependency `aws-sdk-client-mock` to `^3.0.0`. +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/plugin-events-node@0.2.16 + ## 0.2.10-next.2 ### Patch Changes diff --git a/plugins/events-backend-module-aws-sqs/package.json b/plugins/events-backend-module-aws-sqs/package.json index c8e4745984..74a36221e3 100644 --- a/plugins/events-backend-module-aws-sqs/package.json +++ b/plugins/events-backend-module-aws-sqs/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-aws-sqs", - "version": "0.2.10-next.2", + "version": "0.2.11-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -57,7 +57,7 @@ "@backstage/backend-test-utils": "workspace:^", "@backstage/cli": "workspace:^", "@backstage/plugin-events-backend-test-utils": "workspace:^", - "aws-sdk-client-mock": "^2.0.0" + "aws-sdk-client-mock": "^3.0.0" }, "files": [ "config.d.ts", diff --git a/plugins/events-backend-module-azure/CHANGELOG.md b/plugins/events-backend-module-azure/CHANGELOG.md index 1a0bedecf9..6ff642a8e3 100644 --- a/plugins/events-backend-module-azure/CHANGELOG.md +++ b/plugins/events-backend-module-azure/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-events-backend-module-azure +## 0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/plugin-events-node@0.2.17-next.0 + +## 0.1.17 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-events-node@0.2.16 + ## 0.1.17-next.2 ### Patch Changes diff --git a/plugins/events-backend-module-azure/package.json b/plugins/events-backend-module-azure/package.json index fa03b1f6d1..c4df3cc562 100644 --- a/plugins/events-backend-module-azure/package.json +++ b/plugins/events-backend-module-azure/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-azure", - "version": "0.1.17-next.2", + "version": "0.1.18-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md index 4f727bc887..0a74f17134 100644 --- a/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md +++ b/plugins/events-backend-module-bitbucket-cloud/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-events-backend-module-bitbucket-cloud +## 0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/plugin-events-node@0.2.17-next.0 + +## 0.1.17 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-events-node@0.2.16 + ## 0.1.17-next.2 ### Patch Changes diff --git a/plugins/events-backend-module-bitbucket-cloud/package.json b/plugins/events-backend-module-bitbucket-cloud/package.json index 2642cda904..68783b5478 100644 --- a/plugins/events-backend-module-bitbucket-cloud/package.json +++ b/plugins/events-backend-module-bitbucket-cloud/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-bitbucket-cloud", - "version": "0.1.17-next.2", + "version": "0.1.18-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-gerrit/CHANGELOG.md b/plugins/events-backend-module-gerrit/CHANGELOG.md index edcdba1470..300f445915 100644 --- a/plugins/events-backend-module-gerrit/CHANGELOG.md +++ b/plugins/events-backend-module-gerrit/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-events-backend-module-gerrit +## 0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/plugin-events-node@0.2.17-next.0 + +## 0.1.17 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-events-node@0.2.16 + ## 0.1.17-next.2 ### Patch Changes diff --git a/plugins/events-backend-module-gerrit/package.json b/plugins/events-backend-module-gerrit/package.json index 5c69c1522c..882aa89f5e 100644 --- a/plugins/events-backend-module-gerrit/package.json +++ b/plugins/events-backend-module-gerrit/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-gerrit", - "version": "0.1.17-next.2", + "version": "0.1.18-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-github/CHANGELOG.md b/plugins/events-backend-module-github/CHANGELOG.md index ea5e24bbcf..0d68ab29f1 100644 --- a/plugins/events-backend-module-github/CHANGELOG.md +++ b/plugins/events-backend-module-github/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-events-backend-module-github +## 0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/plugin-events-node@0.2.17-next.0 + +## 0.1.17 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.7 + - @backstage/config@1.1.1 + - @backstage/plugin-events-node@0.2.16 + ## 0.1.17-next.2 ### Patch Changes diff --git a/plugins/events-backend-module-github/package.json b/plugins/events-backend-module-github/package.json index 3d26afa7ef..acc0a7fcf9 100644 --- a/plugins/events-backend-module-github/package.json +++ b/plugins/events-backend-module-github/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-github", - "version": "0.1.17-next.2", + "version": "0.1.18-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-module-gitlab/CHANGELOG.md b/plugins/events-backend-module-gitlab/CHANGELOG.md index e7f390c518..ce34e6fe75 100644 --- a/plugins/events-backend-module-gitlab/CHANGELOG.md +++ b/plugins/events-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-events-backend-module-gitlab +## 0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/plugin-events-node@0.2.17-next.0 + +## 0.1.17 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.7 + - @backstage/config@1.1.1 + - @backstage/plugin-events-node@0.2.16 + ## 0.1.17-next.2 ### Patch Changes diff --git a/plugins/events-backend-module-gitlab/package.json b/plugins/events-backend-module-gitlab/package.json index 7743604b31..794e6cba27 100644 --- a/plugins/events-backend-module-gitlab/package.json +++ b/plugins/events-backend-module-gitlab/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend-module-gitlab", - "version": "0.1.17-next.2", + "version": "0.1.18-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend-test-utils/CHANGELOG.md b/plugins/events-backend-test-utils/CHANGELOG.md index 0eb3531587..505bdcd256 100644 --- a/plugins/events-backend-test-utils/CHANGELOG.md +++ b/plugins/events-backend-test-utils/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-events-backend-test-utils +## 0.1.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.17-next.0 + +## 0.1.17 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-events-node@0.2.16 + ## 0.1.17-next.2 ### Patch Changes diff --git a/plugins/events-backend-test-utils/package.json b/plugins/events-backend-test-utils/package.json index bba8cf31ef..e82047e483 100644 --- a/plugins/events-backend-test-utils/package.json +++ b/plugins/events-backend-test-utils/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-events-backend-test-utils", "description": "The plugin-events-backend-test-utils for @backstage/plugin-events-node", - "version": "0.1.17-next.2", + "version": "0.1.18-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-backend/CHANGELOG.md b/plugins/events-backend/CHANGELOG.md index 7904ab40cb..2c0c2cbf70 100644 --- a/plugins/events-backend/CHANGELOG.md +++ b/plugins/events-backend/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-events-backend +## 0.2.17-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/plugin-events-node@0.2.17-next.0 + +## 0.2.16 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/config@1.1.1 + - @backstage/plugin-events-node@0.2.16 + ## 0.2.16-next.2 ### Patch Changes diff --git a/plugins/events-backend/package.json b/plugins/events-backend/package.json index 5314726051..1288abf0a3 100644 --- a/plugins/events-backend/package.json +++ b/plugins/events-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-events-backend", - "version": "0.2.16-next.2", + "version": "0.2.17-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/events-node/CHANGELOG.md b/plugins/events-node/CHANGELOG.md index 38276d2484..787e3daa7b 100644 --- a/plugins/events-node/CHANGELOG.md +++ b/plugins/events-node/CHANGELOG.md @@ -1,5 +1,19 @@ # @backstage/plugin-events-node +## 0.2.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.8-next.0 + +## 0.2.16 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.7 + ## 0.2.16-next.2 ### Patch Changes diff --git a/plugins/events-node/package.json b/plugins/events-node/package.json index 8505950cd6..531138ff69 100644 --- a/plugins/events-node/package.json +++ b/plugins/events-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-events-node", "description": "The plugin-events-node module for @backstage/plugin-events-backend", - "version": "0.2.16-next.2", + "version": "0.2.17-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/example-todo-list-backend/CHANGELOG.md b/plugins/example-todo-list-backend/CHANGELOG.md index bb757870fd..1cc13d252a 100644 --- a/plugins/example-todo-list-backend/CHANGELOG.md +++ b/plugins/example-todo-list-backend/CHANGELOG.md @@ -1,5 +1,27 @@ # @internal/plugin-todo-list-backend +## 1.0.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## 1.0.19 + +### 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 + - @backstage/plugin-auth-node@0.4.1 + ## 1.0.19-next.2 ### Patch Changes diff --git a/plugins/example-todo-list-backend/package.json b/plugins/example-todo-list-backend/package.json index 01e3aa75b2..a04643c4c2 100644 --- a/plugins/example-todo-list-backend/package.json +++ b/plugins/example-todo-list-backend/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list-backend", - "version": "1.0.19-next.2", + "version": "1.0.20-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/example-todo-list-common/CHANGELOG.md b/plugins/example-todo-list-common/CHANGELOG.md index 8deaa18374..c4d964b881 100644 --- a/plugins/example-todo-list-common/CHANGELOG.md +++ b/plugins/example-todo-list-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @internal/plugin-todo-list-common +## 1.0.15 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.10 + ## 1.0.14 ### Patch Changes diff --git a/plugins/example-todo-list-common/package.json b/plugins/example-todo-list-common/package.json index 57e6a9dbdf..33ec099414 100644 --- a/plugins/example-todo-list-common/package.json +++ b/plugins/example-todo-list-common/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list-common", - "version": "1.0.14", + "version": "1.0.15", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -37,7 +37,7 @@ "@backstage/core-app-api": "workspace:^", "@backstage/dev-utils": "workspace:^", "@backstage/test-utils": "workspace:^", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/example-todo-list/CHANGELOG.md b/plugins/example-todo-list/CHANGELOG.md index b7d90099a8..b3a8a8f93d 100644 --- a/plugins/example-todo-list/CHANGELOG.md +++ b/plugins/example-todo-list/CHANGELOG.md @@ -1,5 +1,23 @@ # @internal/plugin-todo-list +## 1.0.20-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + +## 1.0.19 + +### Patch Changes + +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + ## 1.0.19-next.2 ### Patch Changes diff --git a/plugins/example-todo-list/package.json b/plugins/example-todo-list/package.json index adcdb1e3c8..d08efb9d22 100644 --- a/plugins/example-todo-list/package.json +++ b/plugins/example-todo-list/package.json @@ -1,6 +1,6 @@ { "name": "@internal/plugin-todo-list", - "version": "1.0.19-next.2", + "version": "1.0.20-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore-backend/CHANGELOG.md b/plugins/explore-backend/CHANGELOG.md index 2d2d88d678..9e7c38e8f8 100644 --- a/plugins/explore-backend/CHANGELOG.md +++ b/plugins/explore-backend/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-explore-backend +## 0.0.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-search-backend-module-explore@0.1.12-next.0 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/plugin-explore-common@0.0.2 + - @backstage/plugin-search-common@1.2.8 + +## 0.0.17 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/plugin-explore-common@0.0.2 + - @backstage/plugin-search-backend-module-explore@0.1.11 + - @backstage/plugin-search-common@1.2.8 + ## 0.0.17-next.2 ### Patch Changes diff --git a/plugins/explore-backend/package.json b/plugins/explore-backend/package.json index d8ab7f3f5f..ac94ef4c05 100644 --- a/plugins/explore-backend/package.json +++ b/plugins/explore-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-explore-backend", - "version": "0.0.17-next.2", + "version": "0.0.18-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/explore-react/CHANGELOG.md b/plugins/explore-react/CHANGELOG.md index 006d3cf7e9..59a6c265d0 100644 --- a/plugins/explore-react/CHANGELOG.md +++ b/plugins/explore-react/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-explore-react +## 0.0.34-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/plugin-explore-common@0.0.2 + +## 0.0.33 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-explore-common@0.0.2 + ## 0.0.33-next.0 ### Patch Changes diff --git a/plugins/explore-react/package.json b/plugins/explore-react/package.json index ce9f6af869..65e554db77 100644 --- a/plugins/explore-react/package.json +++ b/plugins/explore-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-explore-react", "description": "A frontend library for Backstage plugins that want to interact with the explore plugin", - "version": "0.0.33-next.0", + "version": "0.0.34-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -50,7 +50,7 @@ "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.0.0", "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/explore/CHANGELOG.md b/plugins/explore/CHANGELOG.md index aebd60fb4f..091216334f 100644 --- a/plugins/explore/CHANGELOG.md +++ b/plugins/explore/CHANGELOG.md @@ -1,5 +1,42 @@ # @backstage/plugin-explore +## 0.4.14-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-search-react@1.7.4-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/plugin-explore-react@0.0.34-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/plugin-explore-common@0.0.2 + - @backstage/plugin-search-common@1.2.8 + +## 0.4.12 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- 62b5922916: Internal theme type updates +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-explore-react@0.0.33 + - @backstage/plugin-search-react@1.7.2 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/plugin-explore-common@0.0.2 + - @backstage/plugin-search-common@1.2.8 + ## 0.4.12-next.2 ### Patch Changes diff --git a/plugins/explore/package.json b/plugins/explore/package.json index d3e6ee0de9..b1169ae515 100644 --- a/plugins/explore/package.json +++ b/plugins/explore/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-explore", "description": "A Backstage plugin for building an exploration page of your software ecosystem", - "version": "0.4.12-next.2", + "version": "0.4.14-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -80,7 +80,7 @@ "@testing-library/jest-dom": "^6.0.0", "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.0.0", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/explore/src/components/ToolCard/ToolCard.tsx b/plugins/explore/src/components/ToolCard/ToolCard.tsx index c2d9079f8f..47c2cfb41d 100644 --- a/plugins/explore/src/components/ToolCard/ToolCard.tsx +++ b/plugins/explore/src/components/ToolCard/ToolCard.tsx @@ -15,7 +15,6 @@ */ import { ExploreTool } from '@backstage/plugin-explore-react'; -import { BackstageTheme } from '@backstage/theme'; import { Box, Card, @@ -24,6 +23,7 @@ import { CardMedia, Chip, makeStyles, + Theme, Typography, } from '@material-ui/core'; import { LinkButton } from '@backstage/core-components'; @@ -32,7 +32,7 @@ import React from 'react'; // TODO: Align styling between Domain and ToolCard -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ media: { height: 128, diff --git a/plugins/firehydrant/CHANGELOG.md b/plugins/firehydrant/CHANGELOG.md index 1f9b202642..53b350f331 100644 --- a/plugins/firehydrant/CHANGELOG.md +++ b/plugins/firehydrant/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-firehydrant +## 0.2.12-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 + +## 0.2.10 + +### 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 + ## 0.2.10-next.2 ### Patch Changes diff --git a/plugins/firehydrant/package.json b/plugins/firehydrant/package.json index 6c514bfae3..19f4ed58d6 100644 --- a/plugins/firehydrant/package.json +++ b/plugins/firehydrant/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-firehydrant", "description": "A Backstage plugin that integrates towards FireHydrant", - "version": "0.2.10-next.2", + "version": "0.2.12-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/fossa/CHANGELOG.md b/plugins/fossa/CHANGELOG.md index fa67b4b78b..fea4e21868 100644 --- a/plugins/fossa/CHANGELOG.md +++ b/plugins/fossa/CHANGELOG.md @@ -1,5 +1,32 @@ # @backstage/plugin-fossa +## 0.2.60-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 + +## 0.2.58 + +### 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/errors@1.2.3 + ## 0.2.58-next.2 ### Patch Changes diff --git a/plugins/fossa/package.json b/plugins/fossa/package.json index dd21e351f9..be34560e1b 100644 --- a/plugins/fossa/package.json +++ b/plugins/fossa/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-fossa", "description": "A Backstage plugin that integrates towards FOSSA", - "version": "0.2.58-next.2", + "version": "0.2.60-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -44,7 +44,7 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.61", "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "luxon": "^3.0.0", "p-limit": "^3.0.2", "react-use": "^17.2.4" diff --git a/plugins/gcalendar/CHANGELOG.md b/plugins/gcalendar/CHANGELOG.md index 54b342f86c..e8663cb365 100644 --- a/plugins/gcalendar/CHANGELOG.md +++ b/plugins/gcalendar/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-gcalendar +## 0.3.21-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/errors@1.2.3 + +## 0.3.20 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- 62b5922916: Internal theme type updates +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/errors@1.2.3 + ## 0.3.20-next.2 ### Patch Changes diff --git a/plugins/gcalendar/package.json b/plugins/gcalendar/package.json index fa2d23473a..c75c431f18 100644 --- a/plugins/gcalendar/package.json +++ b/plugins/gcalendar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-gcalendar", - "version": "0.3.20-next.2", + "version": "0.3.21-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -40,7 +40,7 @@ "@tanstack/react-query": "^4.1.3", "@types/react": "^16.13.1 || ^17.0.0", "classnames": "^2.3.1", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "dompurify": "^2.3.6", "lodash": "^4.17.21", "luxon": "^3.0.0", diff --git a/plugins/gcp-projects/CHANGELOG.md b/plugins/gcp-projects/CHANGELOG.md index 7b0dd8c033..c1a3f6ca6d 100644 --- a/plugins/gcp-projects/CHANGELOG.md +++ b/plugins/gcp-projects/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-gcp-projects +## 0.3.44-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + +## 0.3.43 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + ## 0.3.43-next.2 ### Patch Changes diff --git a/plugins/gcp-projects/package.json b/plugins/gcp-projects/package.json index 9477e23c7b..1fde4908fa 100644 --- a/plugins/gcp-projects/package.json +++ b/plugins/gcp-projects/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gcp-projects", "description": "A Backstage plugin that helps you manage projects in GCP", - "version": "0.3.43-next.2", + "version": "0.3.44-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -57,7 +57,7 @@ "@testing-library/jest-dom": "^6.0.0", "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.0.0", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/gcp-projects/src/components/ProjectDetailsPage/ProjectDetailsPage.tsx b/plugins/gcp-projects/src/components/ProjectDetailsPage/ProjectDetailsPage.tsx index 364033ce73..9cde3a51c2 100644 --- a/plugins/gcp-projects/src/components/ProjectDetailsPage/ProjectDetailsPage.tsx +++ b/plugins/gcp-projects/src/components/ProjectDetailsPage/ProjectDetailsPage.tsx @@ -23,7 +23,6 @@ import { TableBody, TableCell, TableRow, - Theme, Typography, } from '@material-ui/core'; import React from 'react'; @@ -43,7 +42,7 @@ import { import { useApi, useRouteRef } from '@backstage/core-plugin-api'; import { rootRouteRef } from '../../routes'; -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ root: { maxWidth: 720, margin: theme.spacing(2), diff --git a/plugins/git-release-manager/CHANGELOG.md b/plugins/git-release-manager/CHANGELOG.md index 7fd41d38bf..3c4beb18b0 100644 --- a/plugins/git-release-manager/CHANGELOG.md +++ b/plugins/git-release-manager/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-git-release-manager +## 0.3.40-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/theme@0.5.0-next.0 + +## 0.3.39 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/integration@1.7.2 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + ## 0.3.39-next.2 ### Patch Changes diff --git a/plugins/git-release-manager/api-report.md b/plugins/git-release-manager/api-report.md index 3e4c0847a7..d2dd7e909f 100644 --- a/plugins/git-release-manager/api-report.md +++ b/plugins/git-release-manager/api-report.md @@ -317,42 +317,42 @@ function LinearProgressWithLabel(props: { // Warning: (ae-missing-release-tag) "MOCK_RELEASE_BRANCH_NAME_CALVER" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -const MOCK_RELEASE_BRANCH_NAME_CALVER: string; +const MOCK_RELEASE_BRANCH_NAME_CALVER = 'rc/2020.01.01_1'; // Warning: (ae-missing-release-tag) "MOCK_RELEASE_BRANCH_NAME_SEMVER" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -const MOCK_RELEASE_BRANCH_NAME_SEMVER: string; +const MOCK_RELEASE_BRANCH_NAME_SEMVER = 'rc/1.2.3'; // Warning: (ae-missing-release-tag) "MOCK_RELEASE_CANDIDATE_TAG_NAME_CALVER" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -const MOCK_RELEASE_CANDIDATE_TAG_NAME_CALVER: string; +const MOCK_RELEASE_CANDIDATE_TAG_NAME_CALVER = 'rc-2020.01.01_1'; // Warning: (ae-missing-release-tag) "MOCK_RELEASE_CANDIDATE_TAG_NAME_SEMVER" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -const MOCK_RELEASE_CANDIDATE_TAG_NAME_SEMVER: string; +const MOCK_RELEASE_CANDIDATE_TAG_NAME_SEMVER = 'rc-1.2.3'; // Warning: (ae-missing-release-tag) "MOCK_RELEASE_NAME_CALVER" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -const MOCK_RELEASE_NAME_CALVER: string; +const MOCK_RELEASE_NAME_CALVER = 'Version 2020.01.01_1'; // Warning: (ae-missing-release-tag) "MOCK_RELEASE_NAME_SEMVER" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -const MOCK_RELEASE_NAME_SEMVER: string; +const MOCK_RELEASE_NAME_SEMVER = 'Version 1.2.3'; // Warning: (ae-missing-release-tag) "MOCK_RELEASE_VERSION_TAG_NAME_CALVER" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -const MOCK_RELEASE_VERSION_TAG_NAME_CALVER: string; +const MOCK_RELEASE_VERSION_TAG_NAME_CALVER = 'version-2020.01.01_1'; // Warning: (ae-missing-release-tag) "MOCK_RELEASE_VERSION_TAG_NAME_SEMVER" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) -const MOCK_RELEASE_VERSION_TAG_NAME_SEMVER: string; +const MOCK_RELEASE_VERSION_TAG_NAME_SEMVER = 'version-1.2.3'; // Warning: (ae-missing-release-tag) "mockBumpedTag" is part of the package's API, but it is missing a release tag (@alpha, @beta, @public, or @internal) // diff --git a/plugins/git-release-manager/package.json b/plugins/git-release-manager/package.json index 6dfe7587fb..c0454d5b3b 100644 --- a/plugins/git-release-manager/package.json +++ b/plugins/git-release-manager/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-git-release-manager", "description": "A Backstage plugin that helps you manage releases in git", - "version": "0.3.39-next.2", + "version": "0.3.40-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-actions/CHANGELOG.md b/plugins/github-actions/CHANGELOG.md index 9662d0554f..4466f730c3 100644 --- a/plugins/github-actions/CHANGELOG.md +++ b/plugins/github-actions/CHANGELOG.md @@ -1,5 +1,35 @@ # @backstage/plugin-github-actions +## 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/integration@1.8.0-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/catalog-model@1.4.3 + +## 0.6.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 +- ee0c44ce62: Fixed an issue that was preventing the sorting of workflow runs by their status. +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/integration@1.7.2 + - @backstage/integration-react@1.1.21 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + ## 0.6.7-next.2 ### Patch Changes diff --git a/plugins/github-actions/package.json b/plugins/github-actions/package.json index e79a6b8cb5..fe419c47b7 100644 --- a/plugins/github-actions/package.json +++ b/plugins/github-actions/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-actions", "description": "A Backstage plugin that integrates towards GitHub Actions", - "version": "0.6.7-next.2", + "version": "0.6.9-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -65,7 +65,7 @@ "@testing-library/jest-dom": "^6.0.0", "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.0.0", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/github-actions/src/components/Cards/Cards.tsx b/plugins/github-actions/src/components/Cards/Cards.tsx index 205288cba7..0075e3f775 100644 --- a/plugins/github-actions/src/components/Cards/Cards.tsx +++ b/plugins/github-actions/src/components/Cards/Cards.tsx @@ -15,12 +15,7 @@ */ import { useEntity } from '@backstage/plugin-catalog-react'; -import { - LinearProgress, - makeStyles, - Theme, - Typography, -} from '@material-ui/core'; +import { LinearProgress, makeStyles, Typography } from '@material-ui/core'; import ExternalLinkIcon from '@material-ui/icons/Launch'; import React, { useEffect } from 'react'; import { GITHUB_ACTIONS_ANNOTATION } from '../getProjectNameFromEntity'; @@ -36,7 +31,7 @@ import { } from '@backstage/core-components'; import { getHostnameFromEntity } from '../getHostnameFromEntity'; -const useStyles = makeStyles({ +const useStyles = makeStyles({ externalLinkIcon: { fontSize: 'inherit', verticalAlign: 'bottom', diff --git a/plugins/github-actions/src/components/WorkflowRunLogs/WorkflowRunLogs.tsx b/plugins/github-actions/src/components/WorkflowRunLogs/WorkflowRunLogs.tsx index 2bf8d3356b..c83da2efdd 100644 --- a/plugins/github-actions/src/components/WorkflowRunLogs/WorkflowRunLogs.tsx +++ b/plugins/github-actions/src/components/WorkflowRunLogs/WorkflowRunLogs.tsx @@ -23,7 +23,6 @@ import { Fade, makeStyles, Modal, - Theme, Tooltip, Typography, Zoom, @@ -35,7 +34,7 @@ import { getProjectNameFromEntity } from '../getProjectNameFromEntity'; import { useDownloadWorkflowRunLogs } from './useDownloadWorkflowRunLogs'; import { getHostnameFromEntity } from '../getHostnameFromEntity'; -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ button: { order: -1, marginRight: 0, diff --git a/plugins/github-deployments/CHANGELOG.md b/plugins/github-deployments/CHANGELOG.md index cbc4bb9664..7945e4810d 100644 --- a/plugins/github-deployments/CHANGELOG.md +++ b/plugins/github-deployments/CHANGELOG.md @@ -1,5 +1,35 @@ # @backstage/plugin-github-deployments +## 0.1.59-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/integration@1.8.0-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + +## 0.1.57 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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/integration@1.7.2 + - @backstage/integration-react@1.1.21 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + ## 0.1.57-next.2 ### Patch Changes diff --git a/plugins/github-deployments/package.json b/plugins/github-deployments/package.json index 33725f44ff..a3a7383151 100644 --- a/plugins/github-deployments/package.json +++ b/plugins/github-deployments/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-deployments", "description": "A Backstage plugin that integrates towards GitHub Deployments", - "version": "0.1.57-next.2", + "version": "0.1.59-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-issues/CHANGELOG.md b/plugins/github-issues/CHANGELOG.md index e257a8f7e8..2f6ab11e34 100644 --- a/plugins/github-issues/CHANGELOG.md +++ b/plugins/github-issues/CHANGELOG.md @@ -1,5 +1,32 @@ # @backstage/plugin-github-issues +## 0.2.17-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/integration@1.8.0-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + +## 0.2.15 + +### 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/integration@1.7.2 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + ## 0.2.15-next.2 ### Patch Changes diff --git a/plugins/github-issues/package.json b/plugins/github-issues/package.json index fb2001630a..bf6b8a39fd 100644 --- a/plugins/github-issues/package.json +++ b/plugins/github-issues/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-github-issues", - "version": "0.2.15-next.2", + "version": "0.2.17-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/github-pull-requests-board/CHANGELOG.md b/plugins/github-pull-requests-board/CHANGELOG.md index 9a5c5af99e..6dfb8de0c8 100644 --- a/plugins/github-pull-requests-board/CHANGELOG.md +++ b/plugins/github-pull-requests-board/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-github-pull-requests-board +## 0.1.22-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/integration@1.8.0-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/catalog-model@1.4.3 + +## 0.1.20 + +### 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/integration@1.7.2 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + ## 0.1.20-next.2 ### Patch Changes diff --git a/plugins/github-pull-requests-board/package.json b/plugins/github-pull-requests-board/package.json index 34a2abfea2..fe792bd7ab 100644 --- a/plugins/github-pull-requests-board/package.json +++ b/plugins/github-pull-requests-board/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-github-pull-requests-board", "description": "A Backstage plugin that allows you to see all open Pull Requests for all the repositories owned by your team", - "version": "0.1.20-next.2", + "version": "0.1.22-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/gitops-profiles/CHANGELOG.md b/plugins/gitops-profiles/CHANGELOG.md index cabd28e242..5cbca6f5d7 100644 --- a/plugins/gitops-profiles/CHANGELOG.md +++ b/plugins/gitops-profiles/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-gitops-profiles +## 0.3.43-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/config@1.1.1 + +## 0.3.42 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/config@1.1.1 + ## 0.3.42-next.2 ### Patch Changes diff --git a/plugins/gitops-profiles/package.json b/plugins/gitops-profiles/package.json index ff658ea36b..e5befa4e8e 100644 --- a/plugins/gitops-profiles/package.json +++ b/plugins/gitops-profiles/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gitops-profiles", "description": "A Backstage plugin that helps you manage GitOps profiles", - "version": "0.3.42-next.2", + "version": "0.3.43-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -58,7 +58,7 @@ "@testing-library/jest-dom": "^6.0.0", "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.0.0", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/gocd/CHANGELOG.md b/plugins/gocd/CHANGELOG.md index 925bd3bae1..e0d44dfe91 100644 --- a/plugins/gocd/CHANGELOG.md +++ b/plugins/gocd/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-gocd +## 0.1.34-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 + +## 0.1.32 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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/errors@1.2.3 + ## 0.1.32-next.2 ### Patch Changes diff --git a/plugins/gocd/package.json b/plugins/gocd/package.json index fc441891b3..5e54063738 100644 --- a/plugins/gocd/package.json +++ b/plugins/gocd/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-gocd", "description": "A Backstage plugin that integrates towards GoCD", - "version": "0.1.32-next.2", + "version": "0.1.34-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/graphiql/CHANGELOG.md b/plugins/graphiql/CHANGELOG.md index 8bf0f7557a..3066f9fa22 100644 --- a/plugins/graphiql/CHANGELOG.md +++ b/plugins/graphiql/CHANGELOG.md @@ -1,5 +1,42 @@ # @backstage/plugin-graphiql +## 0.3.1-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.0.1-next.0 + +## 0.3.1-next.0 + +### Patch Changes + +- 03d0b6dcdc: The `convertLegacyRouteRef` utility used by the alpha exports is now imported from `@backstage/core-compat-api`. +- Updated dependencies + - @backstage/core-compat-api@0.0.2-next.0 + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + +## 0.3.0 + +### Minor Changes + +- 57fda44b90: Upgrade to GraphiQL to 3.0.6 + +### Patch Changes + +- 68fc9dc60e: Updated alpha exports according to routing changes in `@backstage/frontend-plugin-api`. +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- 77f009b35d: Internal updates to match changes in the experimental `@backstage/frontend-plugin-api`. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + ## 0.3.0-next.2 ### Patch Changes diff --git a/plugins/graphiql/package.json b/plugins/graphiql/package.json index 164b4b3386..eab8f6c141 100644 --- a/plugins/graphiql/package.json +++ b/plugins/graphiql/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphiql", "description": "Backstage plugin for browsing GraphQL APIs", - "version": "0.3.0-next.2", + "version": "0.3.1-next.1", "publishConfig": { "access": "public" }, @@ -46,6 +46,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { + "@backstage/core-compat-api": "workspace:^", "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", "@backstage/frontend-plugin-api": "workspace:^", @@ -74,7 +75,7 @@ "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.0.0", "@types/codemirror": "^5.0.0", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/graphiql/src/alpha.tsx b/plugins/graphiql/src/alpha.tsx index 8b2b962355..760bc77d8e 100644 --- a/plugins/graphiql/src/alpha.tsx +++ b/plugins/graphiql/src/alpha.tsx @@ -34,7 +34,7 @@ import { } from '@backstage/plugin-graphiql'; import { createApiFactory, IconComponent } from '@backstage/core-plugin-api'; import { graphiQLRouteRef } from './route-refs'; -import { convertLegacyRouteRef } from '@backstage/core-plugin-api/alpha'; +import { convertLegacyRouteRef } from '@backstage/core-compat-api'; /** @alpha */ export const GraphiqlPage = createPageExtension({ diff --git a/plugins/graphiql/src/components/GraphiQLBrowser/GraphiQLBrowser.tsx b/plugins/graphiql/src/components/GraphiQLBrowser/GraphiQLBrowser.tsx index 40c2c168a8..cdd924a6d1 100644 --- a/plugins/graphiql/src/components/GraphiQLBrowser/GraphiQLBrowser.tsx +++ b/plugins/graphiql/src/components/GraphiQLBrowser/GraphiQLBrowser.tsx @@ -19,14 +19,13 @@ import { Tabs, Tab, makeStyles, Typography, Divider } from '@material-ui/core'; import 'graphiql/graphiql.css'; import { StorageBucket } from '../../lib/storage'; import { GraphQLEndpoint } from '../../lib/api'; -import { BackstageTheme } from '@backstage/theme'; import { Progress } from '@backstage/core-components'; const GraphiQL = React.lazy(() => import('graphiql').then(m => ({ default: m.GraphiQL })), ); -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ root: { height: '100%', display: 'flex', diff --git a/plugins/graphql-backend/CHANGELOG.md b/plugins/graphql-backend/CHANGELOG.md deleted file mode 100644 index 85418706c1..0000000000 --- a/plugins/graphql-backend/CHANGELOG.md +++ /dev/null @@ -1,893 +0,0 @@ -# @backstage/plugin-graphql-backend - -## 0.2.1-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.9-next.2 - -## 0.2.1-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.9-next.1 - - @backstage/config@1.1.1 - - @backstage/plugin-catalog-graphql@0.4.1-next.0 - -## 0.2.1-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-graphql@0.4.1-next.0 - - @backstage/backend-common@0.19.9-next.0 - - @backstage/config@1.1.1 - -## 0.2.0 - -### Minor Changes - -- 9def1e95ab: This package has been deprecated, consider using [@frontside/backstage-plugin-graphql-backend](https://www.npmjs.com/package/@frontside/backstage-plugin-graphql-backend) instead. - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.8 - - @backstage/plugin-catalog-graphql@0.4.0 - - @backstage/config@1.1.1 - -## 0.1.44-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.8-next.2 - - @backstage/config@1.1.1-next.0 - - @backstage/plugin-catalog-graphql@0.3.24-next.0 - -## 0.1.43-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.7-next.1 - - @backstage/config@1.1.0 - - @backstage/plugin-catalog-graphql@0.3.23 - -## 0.1.43-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.7-next.0 - - @backstage/config@1.1.0 - - @backstage/plugin-catalog-graphql@0.3.23 - -## 0.1.41 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.5 - - @backstage/config@1.1.0 - - @backstage/plugin-catalog-graphql@0.3.23 - -## 0.1.41-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/config@1.1.0-next.2 - - @backstage/backend-common@0.19.5-next.3 - - @backstage/plugin-catalog-graphql@0.3.23-next.2 - -## 0.1.41-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/config@1.1.0-next.1 - - @backstage/backend-common@0.19.5-next.2 - - @backstage/plugin-catalog-graphql@0.3.23-next.1 - -## 0.1.41-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/config@1.1.0-next.0 - - @backstage/backend-common@0.19.5-next.1 - - @backstage/plugin-catalog-graphql@0.3.23-next.0 - -## 0.1.40-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.4-next.0 - - @backstage/config@1.0.8 - - @backstage/plugin-catalog-graphql@0.3.22 - -## 0.1.38 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.2 - - @backstage/config@1.0.8 - - @backstage/plugin-catalog-graphql@0.3.22 - -## 0.1.38-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.2-next.2 - -## 0.1.38-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.2-next.1 - - @backstage/config@1.0.8 - - @backstage/plugin-catalog-graphql@0.3.22 - -## 0.1.38-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.2-next.0 - - @backstage/config@1.0.8 - - @backstage/plugin-catalog-graphql@0.3.22 - -## 0.1.37 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.1 - - @backstage/config@1.0.8 - - @backstage/plugin-catalog-graphql@0.3.22 - -## 0.1.37-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.1-next.0 - - @backstage/config@1.0.8 - - @backstage/plugin-catalog-graphql@0.3.22-next.0 - -## 0.1.36 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.0 - - @backstage/config@1.0.8 - - @backstage/plugin-catalog-graphql@0.3.21 - -## 0.1.36-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.0-next.2 - - @backstage/config@1.0.7 - - @backstage/plugin-catalog-graphql@0.3.21-next.1 - -## 0.1.36-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.19.0-next.1 - - @backstage/plugin-catalog-graphql@0.3.21-next.0 - - @backstage/config@1.0.7 - -## 0.1.36-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.18.6-next.0 - - @backstage/config@1.0.7 - - @backstage/plugin-catalog-graphql@0.3.20 - -## 0.1.35 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.18.5 - - @backstage/config@1.0.7 - - @backstage/plugin-catalog-graphql@0.3.20 - -## 0.1.35-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.18.5-next.1 - - @backstage/config@1.0.7 - - @backstage/plugin-catalog-graphql@0.3.20 - -## 0.1.35-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.18.5-next.0 - - @backstage/config@1.0.7 - - @backstage/plugin-catalog-graphql@0.3.20 - -## 0.1.34 - -### Patch Changes - -- e47e69eadf0: Updated dependency `@apollo/server` to `^4.0.0`. -- Updated dependencies - - @backstage/backend-common@0.18.4 - - @backstage/plugin-catalog-graphql@0.3.20 - - @backstage/config@1.0.7 - -## 0.1.34-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.18.4-next.2 - - @backstage/config@1.0.7 - - @backstage/plugin-catalog-graphql@0.3.20-next.2 - -## 0.1.34-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.18.4-next.2 - - @backstage/config@1.0.7 - - @backstage/plugin-catalog-graphql@0.3.20-next.1 - -## 0.1.34-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-graphql@0.3.20-next.1 - - @backstage/backend-common@0.18.4-next.1 - - @backstage/config@1.0.7 - -## 0.1.34-next.0 - -### Patch Changes - -- e47e69eadf0: Updated dependency `@apollo/server` to `^4.0.0`. -- Updated dependencies - - @backstage/plugin-catalog-graphql@0.3.20-next.0 - - @backstage/backend-common@0.18.4-next.0 - - @backstage/config@1.0.7 - -## 0.1.33 - -### Patch Changes - -- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. -- Updated dependencies - - @backstage/backend-common@0.18.3 - - @backstage/plugin-catalog-graphql@0.3.19 - - @backstage/config@1.0.7 - -## 0.1.33-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.18.3-next.2 - - @backstage/config@1.0.7-next.0 - - @backstage/plugin-catalog-graphql@0.3.19-next.1 - -## 0.1.33-next.1 - -### Patch Changes - -- 52b0022dab7: Updated dependency `msw` to `^1.0.0`. -- Updated dependencies - - @backstage/plugin-catalog-graphql@0.3.19-next.1 - - @backstage/backend-common@0.18.3-next.1 - - @backstage/config@1.0.7-next.0 - -## 0.1.33-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.18.3-next.0 - - @backstage/config@1.0.6 - - @backstage/plugin-catalog-graphql@0.3.19-next.0 - -## 0.1.32 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.18.2 - - @backstage/config@1.0.6 - - @backstage/plugin-catalog-graphql@0.3.18 - -## 0.1.32-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.18.2-next.2 - - @backstage/config@1.0.6 - - @backstage/plugin-catalog-graphql@0.3.18-next.1 - -## 0.1.32-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.18.2-next.1 - - @backstage/config@1.0.6 - - @backstage/plugin-catalog-graphql@0.3.18-next.0 - -## 0.1.32-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.18.2-next.0 - - @backstage/plugin-catalog-graphql@0.3.18-next.0 - -## 0.1.30 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.18.0 - - @backstage/config@1.0.6 - - @backstage/plugin-catalog-graphql@0.3.17 - -## 0.1.30-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.18.0-next.1 - - @backstage/config@1.0.6-next.0 - - @backstage/plugin-catalog-graphql@0.3.17-next.1 - -## 0.1.30-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.18.0-next.0 - - @backstage/config@1.0.6-next.0 - - @backstage/plugin-catalog-graphql@0.3.17-next.1 - -## 0.1.30-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.17.0 - - @backstage/config@1.0.5 - - @backstage/plugin-catalog-graphql@0.3.17-next.0 - -## 0.1.29 - -### Patch Changes - -- 3280711113: Updated dependency `msw` to `^0.49.0`. -- Updated dependencies - - @backstage/backend-common@0.17.0 - - @backstage/plugin-catalog-graphql@0.3.16 - - @backstage/config@1.0.5 - -## 0.1.29-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.17.0-next.3 - - @backstage/config@1.0.5-next.1 - - @backstage/plugin-catalog-graphql@0.3.16-next.1 - -## 0.1.29-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.17.0-next.2 - - @backstage/config@1.0.5-next.1 - - @backstage/plugin-catalog-graphql@0.3.16-next.1 - -## 0.1.29-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.17.0-next.1 - - @backstage/config@1.0.5-next.1 - - @backstage/plugin-catalog-graphql@0.3.16-next.1 - -## 0.1.29-next.0 - -### Patch Changes - -- 3280711113: Updated dependency `msw` to `^0.49.0`. -- Updated dependencies - - @backstage/backend-common@0.16.1-next.0 - - @backstage/plugin-catalog-graphql@0.3.16-next.0 - - @backstage/config@1.0.5-next.0 - -## 0.1.28 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.16.0 - - @backstage/config@1.0.4 - - @backstage/plugin-catalog-graphql@0.3.15 - -## 0.1.28-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.16.0-next.1 - - @backstage/config@1.0.4-next.0 - - @backstage/plugin-catalog-graphql@0.3.15-next.0 - -## 0.1.28-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.16.0-next.0 - - @backstage/config@1.0.4-next.0 - - @backstage/plugin-catalog-graphql@0.3.15-next.0 - -## 0.1.27 - -### Patch Changes - -- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` -- Updated dependencies - - @backstage/backend-common@0.15.2 - - @backstage/plugin-catalog-graphql@0.3.14 - - @backstage/config@1.0.3 - -## 0.1.27-next.2 - -### Patch Changes - -- 2d3a5f09ab: Use `response.json` rather than `response.send` where appropriate, as outlined in `SECURITY.md` -- Updated dependencies - - @backstage/backend-common@0.15.2-next.2 - - @backstage/config@1.0.3-next.2 - - @backstage/plugin-catalog-graphql@0.3.14-next.2 - -## 0.1.27-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.15.2-next.1 - - @backstage/config@1.0.3-next.1 - - @backstage/plugin-catalog-graphql@0.3.14-next.1 - -## 0.1.27-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/plugin-catalog-graphql@0.3.14-next.0 - - @backstage/backend-common@0.15.2-next.0 - - @backstage/config@1.0.3-next.0 - -## 0.1.26 - -### Patch Changes - -- d669d89206: Minor API signatures cleanup -- 60b85d8ade: Updated dependency `helmet` to `^6.0.0`. - - Please note that these policies are no longer applied by default: - - helmet.contentSecurityPolicy no longer sets block-all-mixed-content directive by default - helmet.expectCt is no longer set by default. It can, however, be explicitly enabled. It will be removed in Helmet 7. - -- 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/backend-common@0.15.1 - - @backstage/config@1.0.2 - - @backstage/plugin-catalog-graphql@0.3.13 - -## 0.1.26-next.3 - -### Patch Changes - -- Updated dependencies - - @backstage/config@1.0.2-next.0 - - @backstage/backend-common@0.15.1-next.3 - - @backstage/plugin-catalog-graphql@0.3.13-next.3 - -## 0.1.26-next.2 - -### Patch Changes - -- 667d917488: Updated dependency `msw` to `^0.47.0`. -- 87ec2ba4d6: Updated dependency `msw` to `^0.46.0`. -- Updated dependencies - - @backstage/backend-common@0.15.1-next.2 - - @backstage/plugin-catalog-graphql@0.3.13-next.2 - -## 0.1.26-next.1 - -### Patch Changes - -- d669d89206: Minor API signatures cleanup -- 60b85d8ade: Updated dependency `helmet` to `^6.0.0`. - - Please note that these policies are no longer applied by default: - - helmet.contentSecurityPolicy no longer sets block-all-mixed-content directive by default - helmet.expectCt is no longer set by default. It can, however, be explicitly enabled. It will be removed in Helmet 7. - -- Updated dependencies - - @backstage/backend-common@0.15.1-next.1 - - @backstage/plugin-catalog-graphql@0.3.13-next.1 - -## 0.1.26-next.0 - -### Patch Changes - -- bf5e9030eb: Updated dependency `msw` to `^0.45.0`. -- Updated dependencies - - @backstage/backend-common@0.15.1-next.0 - - @backstage/plugin-catalog-graphql@0.3.13-next.0 - -## 0.1.25 - -### Patch Changes - -- fa3eeee92d: Updated dependency `@graphql-tools/schema` to `^9.0.0`. -- Updated dependencies - - @backstage/backend-common@0.15.0 - - @backstage/plugin-catalog-graphql@0.3.12 - -## 0.1.25-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.15.0-next.0 - -## 0.1.24 - -### Patch Changes - -- a70869e775: Updated dependency `msw` to `^0.43.0`. -- 8006d0f9bf: Updated dependency `msw` to `^0.44.0`. -- Updated dependencies - - @backstage/backend-common@0.14.1 - - @backstage/plugin-catalog-graphql@0.3.11 - -## 0.1.24-next.1 - -### Patch Changes - -- a70869e775: Updated dependency `msw` to `^0.43.0`. -- Updated dependencies - - @backstage/backend-common@0.14.1-next.3 - - @backstage/plugin-catalog-graphql@0.3.11-next.1 - -## 0.1.24-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.14.1-next.0 - - @backstage/plugin-catalog-graphql@0.3.11-next.0 - -## 0.1.23 - -### Patch Changes - -- 8f7b1835df: Updated dependency `msw` to `^0.41.0`. -- Updated dependencies - - @backstage/backend-common@0.14.0 - - @backstage/plugin-catalog-graphql@0.3.10 - -## 0.1.23-next.2 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.14.0-next.2 - -## 0.1.23-next.1 - -### Patch Changes - -- 8f7b1835df: Updated dependency `msw` to `^0.41.0`. -- Updated dependencies - - @backstage/backend-common@0.13.6-next.1 - - @backstage/plugin-catalog-graphql@0.3.10-next.0 - -## 0.1.23-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.13.6-next.0 - -## 0.1.22 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.13.3 - - @backstage/config@1.0.1 - - @backstage/plugin-catalog-graphql@0.3.9 - -## 0.1.22-next.1 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.13.3-next.2 - - @backstage/config@1.0.1-next.0 - - @backstage/plugin-catalog-graphql@0.3.9-next.0 - -## 0.1.22-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.13.3-next.0 - -## 0.1.21 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.13.2 - - @backstage/plugin-catalog-graphql@0.3.8 - -## 0.1.21-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.13.2-next.0 - - @backstage/plugin-catalog-graphql@0.3.8-next.0 - -## 0.1.20 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.13.1 - - @backstage/plugin-catalog-graphql@0.3.7 - - @backstage/config@1.0.0 - -## 0.1.19 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.13.0 - - @backstage/plugin-catalog-graphql@0.3.6 - -## 0.1.19-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.13.0-next.0 - - @backstage/plugin-catalog-graphql@0.3.6-next.0 - -## 0.1.18 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.12.0 - - @backstage/plugin-catalog-graphql@0.3.5 - -## 0.1.17 - -### Patch Changes - -- 68913af4ff: chore(deps): bump `graphql-modules` from 1.4.4 to 2.0.0 -- Updated dependencies - - @backstage/backend-common@0.11.0 - - @backstage/plugin-catalog-graphql@0.3.4 - -## 0.1.16 - -### Patch Changes - -- Fix for the previous release with missing type declarations. -- Updated dependencies - - @backstage/backend-common@0.10.9 - - @backstage/config@0.1.15 - - @backstage/plugin-catalog-graphql@0.3.3 - -## 0.1.15 - -### Patch Changes - -- c77c5c7eb6: Added `backstage.role` to `package.json` -- 0107c9aa08: chore(deps): bump `helmet` from 4.4.1 to 5.0.2 -- Updated dependencies - - @backstage/backend-common@0.10.8 - - @backstage/plugin-catalog-graphql@0.3.2 - - @backstage/config@0.1.14 - -## 0.1.14 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.10.7 - -## 0.1.14-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.10.7-next.0 - -## 0.1.13 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.10.6 - -## 0.1.13-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.10.6-next.0 - -## 0.1.12 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.10.4 - - @backstage/config@0.1.13 - - @backstage/plugin-catalog-graphql@0.3.1 - -## 0.1.12-next.0 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.10.4-next.0 - - @backstage/config@0.1.13-next.0 - - @backstage/plugin-catalog-graphql@0.3.1-next.0 - -## 0.1.11 - -### Patch Changes - -- 0fb17da164: chore: bumping dependencies in the GraphQL modules and bringing them up to date with the latest `graphql-modules` library -- Updated dependencies - - @backstage/config@0.1.12 - - @backstage/backend-common@0.10.3 - - @backstage/plugin-catalog-graphql@0.3.0 - -## 0.1.10 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.10.0 - -## 0.1.9 - -### Patch Changes - -- Updated dependencies - - @backstage/backend-common@0.9.0 - - @backstage/config@0.1.8 - - @backstage/plugin-catalog-graphql@0.2.12 - -## 0.1.8 - -### Patch Changes - -- Updated dependencies [3be844496] -- Updated dependencies [22fd8ce2a] -- Updated dependencies [f9fb4a205] - - @backstage/plugin-catalog-graphql@0.2.9 - - @backstage/backend-common@0.8.0 - -## 0.1.7 - -### Patch Changes - -- Updated dependencies [e0bfd3d44] -- Updated dependencies [38ca05168] -- Updated dependencies [d8b81fd28] - - @backstage/backend-common@0.7.0 - - @backstage/config@0.1.5 - - @backstage/plugin-catalog-graphql@0.2.8 - -## 0.1.6 - -### Patch Changes - -- Updated dependencies [8686eb38c] -- Updated dependencies [0434853a5] -- Updated dependencies [8686eb38c] - - @backstage/backend-common@0.6.0 - - @backstage/config@0.1.4 - - @backstage/plugin-catalog-graphql@0.2.7 - -## 0.1.5 - -### Patch Changes - -- Updated dependencies [0b135e7e0] -- Updated dependencies [294a70cab] -- Updated dependencies [0ea032763] -- Updated dependencies [5345a1f98] -- Updated dependencies [09a370426] - - @backstage/backend-common@0.5.0 - - @backstage/plugin-catalog-graphql@0.2.6 - -## 0.1.4 - -### Patch Changes - -- Updated dependencies [38e24db00] -- Updated dependencies [e3bd9fc2f] -- Updated dependencies [12bbd748c] -- Updated dependencies [e3bd9fc2f] - - @backstage/backend-common@0.4.0 - - @backstage/config@0.1.2 - - @backstage/plugin-catalog-graphql@0.2.4 - -## 0.1.3 - -### Patch Changes - -- Updated dependencies [1722cb53c] -- Updated dependencies [1722cb53c] -- Updated dependencies [7b37e6834] -- Updated dependencies [8e2effb53] - - @backstage/backend-common@0.3.0 - - @backstage/plugin-catalog-graphql@0.2.1 - -## 0.1.2 - -### Patch Changes - -- Updated dependencies [28edd7d29] -- Updated dependencies [5249594c5] -- Updated dependencies [56e4eb589] -- Updated dependencies [e37c0a005] -- Updated dependencies [f00ca3cb8] -- Updated dependencies [6579769df] -- Updated dependencies [8c2b76e45] -- Updated dependencies [440a17b39] -- Updated dependencies [8afce088a] -- Updated dependencies [7bbeb049f] - - @backstage/plugin-catalog-graphql@0.2.0 - - @backstage/backend-common@0.2.0 diff --git a/plugins/graphql-backend/README.md b/plugins/graphql-backend/README.md deleted file mode 100644 index 7e9f6c772e..0000000000 --- a/plugins/graphql-backend/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# GraphQL Backend - -This package has been deprecated, consider using [@frontside/backstage-plugin-graphql-backend](https://www.npmjs.com/package/@frontside/backstage-plugin-graphql-backend) instead. diff --git a/plugins/graphql-backend/api-report.md b/plugins/graphql-backend/api-report.md deleted file mode 100644 index a787c4f209..0000000000 --- a/plugins/graphql-backend/api-report.md +++ /dev/null @@ -1,20 +0,0 @@ -## API Report File for "@backstage/plugin-graphql-backend" - -> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/). - -```ts -import { Config } from '@backstage/config'; -import express from 'express'; -import { Logger } from 'winston'; - -// @public (undocumented) -export function createRouter(options: RouterOptions): Promise; - -// @public (undocumented) -export interface RouterOptions { - // (undocumented) - config: Config; - // (undocumented) - logger: Logger; -} -``` diff --git a/plugins/graphql-backend/catalog-info.yaml b/plugins/graphql-backend/catalog-info.yaml deleted file mode 100644 index 4545c0def5..0000000000 --- a/plugins/graphql-backend/catalog-info.yaml +++ /dev/null @@ -1,10 +0,0 @@ -apiVersion: backstage.io/v1alpha1 -kind: Component -metadata: - name: backstage-plugin-graphql-backend - title: '@backstage/plugin-graphql-backend' - description: An experimental Backstage backend plugin for GraphQL -spec: - lifecycle: experimental - type: backstage-backend-plugin - owner: maintainers diff --git a/plugins/graphql-backend/package.json b/plugins/graphql-backend/package.json deleted file mode 100644 index 9d849bf9f2..0000000000 --- a/plugins/graphql-backend/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "@backstage/plugin-graphql-backend", - "description": "Deprecated, consider using @frontside/backstage-plugin-graphql-backend instead", - "version": "0.2.1-next.2", - "main": "src/index.ts", - "types": "src/index.ts", - "license": "Apache-2.0", - "publishConfig": { - "access": "public", - "main": "dist/index.cjs.js", - "types": "dist/index.d.ts" - }, - "backstage": { - "role": "backend-plugin" - }, - "homepage": "https://backstage.io", - "repository": { - "type": "git", - "url": "https://github.com/backstage/backstage", - "directory": "plugins/graphql-backend" - }, - "keywords": [ - "backstage", - "graphql" - ], - "scripts": { - "start": "backstage-cli package start", - "build": "backstage-cli package build", - "lint": "backstage-cli package lint", - "test": "backstage-cli package test", - "prepack": "backstage-cli package prepack", - "postpack": "backstage-cli package postpack", - "clean": "backstage-cli package clean" - }, - "dependencies": { - "@apollo/server": "^4.0.0", - "@backstage/backend-common": "workspace:^", - "@backstage/config": "workspace:^", - "@backstage/plugin-catalog-graphql": "workspace:^", - "@graphql-tools/schema": "^9.0.0", - "@types/express": "^4.17.6", - "express": "^4.17.1", - "express-promise-router": "^4.1.0", - "graphql": "^16.0.0", - "graphql-modules": "^2.0.0", - "helmet": "^6.0.0", - "reflect-metadata": "^0.1.13", - "winston": "^3.2.1", - "yn": "^4.0.0" - }, - "devDependencies": { - "@backstage/cli": "workspace:^", - "@types/supertest": "^2.0.8", - "msw": "^1.0.0", - "supertest": "^6.1.3" - }, - "files": [ - "dist", - "schema.gql" - ] -} diff --git a/plugins/graphql-backend/schema.gql b/plugins/graphql-backend/schema.gql deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/plugins/graphql-backend/src/service/router.test.ts b/plugins/graphql-backend/src/service/router.test.ts deleted file mode 100644 index 37dc25ebc6..0000000000 --- a/plugins/graphql-backend/src/service/router.test.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. - */ -import { createRouter } from './router'; -import supertest from 'supertest'; -import { ConfigReader } from '@backstage/config'; -import { createLogger } from 'winston'; -import express from 'express'; - -describe('Router', () => { - describe('/health', () => { - it('should return ok', async () => { - const config = new ConfigReader({ backend: { baseUrl: 'lol' } }); - - const router = await createRouter({ config, logger: createLogger() }); - const app = express().use(router); - - const { body } = await supertest(app).get('/health'); - - expect(body).toEqual({ status: 'ok' }); - }); - }); -}); diff --git a/plugins/graphql-backend/src/service/router.ts b/plugins/graphql-backend/src/service/router.ts deleted file mode 100644 index fbddee435f..0000000000 --- a/plugins/graphql-backend/src/service/router.ts +++ /dev/null @@ -1,78 +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 { errorHandler } from '@backstage/backend-common'; -import express from 'express'; -import Router from 'express-promise-router'; -import { Logger } from 'winston'; -import { createApplication } from 'graphql-modules'; -import { ApolloServer } from '@apollo/server'; -import { expressMiddleware } from '@apollo/server/express4'; -import { createModule as createCatalogModule } from '@backstage/plugin-catalog-graphql'; -import { Config } from '@backstage/config'; -import helmet from 'helmet'; -import { makeExecutableSchema } from '@graphql-tools/schema'; - -/** @public */ -export interface RouterOptions { - logger: Logger; - config: Config; -} - -/** @public */ -export async function createRouter( - options: RouterOptions, -): Promise { - const catalogModule = await createCatalogModule(options); - - const { createSchemaForApollo } = createApplication({ - modules: [catalogModule], - schemaBuilder(input) { - return makeExecutableSchema({ - ...input, - inheritResolversFromInterfaces: true, - }); - }, - }); - - const server = new ApolloServer({ - schema: createSchemaForApollo(), - logger: options.logger, - introspection: true, - }); - - await server.start(); - - const router = Router(); - - router.get('/health', (_, response) => { - response.json({ status: 'ok' }); - }); - - if (process.env.NODE_ENV === 'development') - router.use( - helmet.contentSecurityPolicy({ - directives: { - defaultSrc: ["'self'", "'unsafe-inline'", 'http://*'], - }, - }), - ); - - router.use(expressMiddleware(server)); - router.use(errorHandler()); - - return router; -} diff --git a/plugins/graphql-voyager/CHANGELOG.md b/plugins/graphql-voyager/CHANGELOG.md index 2ef077cf11..d3ea493357 100644 --- a/plugins/graphql-voyager/CHANGELOG.md +++ b/plugins/graphql-voyager/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-graphql-voyager +## 0.1.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + +## 0.1.9 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + ## 0.1.9-next.2 ### Patch Changes diff --git a/plugins/graphql-voyager/package.json b/plugins/graphql-voyager/package.json index 44c0ec551f..904f388234 100644 --- a/plugins/graphql-voyager/package.json +++ b/plugins/graphql-voyager/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-graphql-voyager", "description": "Backstage plugin for GraphQL Voyager", - "version": "0.1.9-next.2", + "version": "0.1.10-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/graphql-voyager/src/components/GraphQLVoyagerBrowser/GraphQLVoyagerBrowser.tsx b/plugins/graphql-voyager/src/components/GraphQLVoyagerBrowser/GraphQLVoyagerBrowser.tsx index d2f9262983..772c70b0fa 100644 --- a/plugins/graphql-voyager/src/components/GraphQLVoyagerBrowser/GraphQLVoyagerBrowser.tsx +++ b/plugins/graphql-voyager/src/components/GraphQLVoyagerBrowser/GraphQLVoyagerBrowser.tsx @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { GraphQLVoyagerEndpoint, introspectionQuery, @@ -20,18 +21,17 @@ import { import { useState } from 'react'; import { makeStyles, Tab, Tabs, Typography } from '@material-ui/core'; import React, { Suspense } from 'react'; -import { BackstageTheme } from '@backstage/theme'; import { Content, ErrorPanel, Progress } from '@backstage/core-components'; import { Voyager } from 'graphql-voyager'; import useAsync from 'react-use/lib/useAsync'; -const useStyles = makeStyles(() => ({ +const useStyles = makeStyles({ root: { height: '100%', display: 'flex', flexFlow: 'column nowrap', }, -})); +}); type GraphQLVoyagerBrowserProps = { endpoints: GraphQLVoyagerEndpoint[]; diff --git a/plugins/home-react/CHANGELOG.md b/plugins/home-react/CHANGELOG.md index b3dfb1bf11..bfe53d9bff 100644 --- a/plugins/home-react/CHANGELOG.md +++ b/plugins/home-react/CHANGELOG.md @@ -1,5 +1,35 @@ # @backstage/plugin-home-react +## 0.1.6-next.0 + +### Patch Changes + +- 6cd12f277b: Updated dependency `@rjsf/utils` to `5.14.1`. + Updated dependency `@rjsf/core` to `5.14.1`. + Updated dependency `@rjsf/material-ui` to `5.14.1`. + Updated dependency `@rjsf/validator-ajv8` to `5.14.1`. +- 63c494ef22: Updated dependency `@rjsf/utils` to `5.14.2`. + Updated dependency `@rjsf/core` to `5.14.2`. + Updated dependency `@rjsf/material-ui` to `5.14.2`. + Updated dependency `@rjsf/validator-ajv8` to `5.14.2`. +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + +## 0.1.5 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- c838da0edd: Updated dependency `@rjsf/utils` to `5.13.6`. + Updated dependency `@rjsf/core` to `5.13.6`. + Updated dependency `@rjsf/material-ui` to `5.13.6`. + Updated dependency `@rjsf/validator-ajv8` to `5.13.6`. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + ## 0.1.5-next.2 ### Patch Changes diff --git a/plugins/home-react/package.json b/plugins/home-react/package.json index 6ce09f978a..cb9a0cd388 100644 --- a/plugins/home-react/package.json +++ b/plugins/home-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-home-react", "description": "A Backstage plugin that contains react components helps you build a home page", - "version": "0.1.5-next.2", + "version": "0.1.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -38,7 +38,7 @@ "@backstage/core-plugin-api": "workspace:^", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", - "@rjsf/utils": "5.13.0", + "@rjsf/utils": "5.14.2", "@types/react": "^16.13.1 || ^17.0.0" }, "peerDependencies": { @@ -56,7 +56,7 @@ "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.0.0", "@types/react-grid-layout": "^1.3.2", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/home/CHANGELOG.md b/plugins/home/CHANGELOG.md index 2d4074bab6..28528b9793 100644 --- a/plugins/home/CHANGELOG.md +++ b/plugins/home/CHANGELOG.md @@ -1,5 +1,75 @@ # @backstage/plugin-home +## 0.5.12-next.0 + +### Patch Changes + +- 6cd12f277b: Updated dependency `@rjsf/utils` to `5.14.1`. + Updated dependency `@rjsf/core` to `5.14.1`. + Updated dependency `@rjsf/material-ui` to `5.14.1`. + Updated dependency `@rjsf/validator-ajv8` to `5.14.1`. +- 63c494ef22: Updated dependency `@rjsf/utils` to `5.14.2`. + Updated dependency `@rjsf/core` to `5.14.2`. + Updated dependency `@rjsf/material-ui` to `5.14.2`. + Updated dependency `@rjsf/validator-ajv8` to `5.14.2`. +- 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/frontend-plugin-api@0.3.1-next.0 + - @backstage/core-app-api@1.11.2-next.0 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + +## 0.5.10 + +### Patch Changes + +- d86b2acec4: Fix bug where `retrieveAll` method wasn't fetching visits +- 3fdffbb699: Remove the duplicate versions of `@rjsf/*` as they're no longer needed +- 6c2b872153: Add official support for React 18. +- 5b364984bf: Added experimental support for declarative integration via the `/alpha` subpath. +- c838da0edd: Updated dependency `@rjsf/utils` to `5.13.6`. + Updated dependency `@rjsf/core` to `5.13.6`. + Updated dependency `@rjsf/material-ui` to `5.13.6`. + Updated dependency `@rjsf/validator-ajv8` to `5.13.6`. +- cc0e8d0b51: Temporarily pin the `react-grid-layout` sub-dependency to version `1.3.4` while the horizontal resizing of the latest version is not fixed. For more details, see [#20712](https://github.com/backstage/backstage/issues/20712). +- 302316d231: Added a new Featured Docs component to `plugin-home`, which can display any entity given a filter. + + ``` + import { FeaturedDocsCard } from '@backstage/plugin-home'; + + + ``` + + See the [storybook examples](https://backstage.io/storybook/?path=/story/plugins-home-components-featureddocs--default) + +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/core-plugin-api@1.8.0 + - @backstage/core-app-api@1.11.1 + - @backstage/plugin-home-react@0.1.5 + - @backstage/theme@0.4.4 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + ## 0.5.10-next.2 ### Patch Changes diff --git a/plugins/home/api-report.md b/plugins/home/api-report.md index 3d947d9641..dd6e22c57d 100644 --- a/plugins/home/api-report.md +++ b/plugins/home/api-report.md @@ -14,6 +14,7 @@ import { CardSettings as CardSettings_2 } from '@backstage/plugin-home-react'; import { ComponentParts as ComponentParts_2 } from '@backstage/plugin-home-react'; import { ComponentRenderer as ComponentRenderer_2 } from '@backstage/plugin-home-react'; import { createCardExtension as createCardExtension_2 } from '@backstage/plugin-home-react'; +import { EntityFilterQuery } from '@backstage/catalog-client'; import { ErrorApi } from '@backstage/core-plugin-api'; import { IdentityApi } from '@backstage/core-plugin-api'; import { JSX as JSX_2 } from 'react'; @@ -101,6 +102,20 @@ export type CustomHomepageGridProps = { preventCollision?: boolean; }; +// @public +export const FeaturedDocsCard: ( + props: CardExtensionProps_2, +) => JSX_2.Element; + +// @public +export type FeaturedDocsCardProps = { + filter: EntityFilterQuery; + emptyState?: React_2.JSX.Element; + linkDestination?: string; + responseLimit?: number; + subLinkText?: string; +}; + // @public export const HeaderWorldClock: (props: { clockConfigs: ClockConfig[]; diff --git a/plugins/home/package.json b/plugins/home/package.json index b61619042c..78eaf80fe3 100644 --- a/plugins/home/package.json +++ b/plugins/home/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-home", "description": "A Backstage plugin that helps you build a home page", - "version": "0.5.10-next.2", + "version": "0.5.12-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -47,6 +47,7 @@ "clean": "backstage-cli package clean" }, "dependencies": { + "@backstage/catalog-client": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", "@backstage/core-app-api": "workspace:^", @@ -60,10 +61,10 @@ "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.61", - "@rjsf/core": "5.13.0", - "@rjsf/material-ui": "5.13.0", - "@rjsf/utils": "5.13.0", - "@rjsf/validator-ajv8": "5.13.0", + "@rjsf/core": "5.14.2", + "@rjsf/material-ui": "5.14.2", + "@rjsf/utils": "5.14.2", + "@rjsf/validator-ajv8": "5.14.2", "@types/react": "^16.13.1 || ^17.0.0", "lodash": "^4.17.21", "luxon": "^3.4.3", diff --git a/plugins/home/src/homePageComponents/FeaturedDocsCard/Content.test.tsx b/plugins/home/src/homePageComponents/FeaturedDocsCard/Content.test.tsx new file mode 100644 index 0000000000..427a1484d5 --- /dev/null +++ b/plugins/home/src/homePageComponents/FeaturedDocsCard/Content.test.tsx @@ -0,0 +1,73 @@ +/* + * 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 { Content } from './Content'; +import React from 'react'; +import { catalogApiRef, entityRouteRef } from '@backstage/plugin-catalog-react'; +import { renderInTestApp, TestApiProvider } from '@backstage/test-utils'; + +const docsEntities = [ + { + apiVersion: '1', + kind: 'Location', + metadata: { + name: 'getting-started-with-idp', + title: 'Getting Started Docs', + }, + spec: { + type: 'documentation', + }, + }, +]; + +describe('', () => { + const mockCatalogApi = { + getEntities: jest + .fn() + .mockImplementation(async () => ({ items: docsEntities })), + }; + let Wrapper: React.ComponentType>; + + beforeAll(() => { + Wrapper = ({ children }: { children?: React.ReactNode }) => ( + + {children} + + ); + }); + it('should show expected featured doc and title', async () => { + const { getByTestId, getByText } = await renderInTestApp( + + + , + { + mountedRoutes: { + '/home': entityRouteRef, + }, + }, + ); + const docsCardContent = getByTestId('docs-card-content'); + const docsEntity = getByText('Getting Started Docs'); + + expect(docsCardContent).toContainElement(docsEntity); + }); +}); diff --git a/plugins/home/src/homePageComponents/FeaturedDocsCard/Content.tsx b/plugins/home/src/homePageComponents/FeaturedDocsCard/Content.tsx new file mode 100644 index 0000000000..eb8d78b0cc --- /dev/null +++ b/plugins/home/src/homePageComponents/FeaturedDocsCard/Content.tsx @@ -0,0 +1,158 @@ +/* + * 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 useAsync from 'react-use/lib/useAsync'; +import { + LinkButton, + EmptyState, + Link, + Progress, + ErrorPanel, +} from '@backstage/core-components'; +import { catalogApiRef, CatalogApi } from '@backstage/plugin-catalog-react'; +import { useApi } from '@backstage/core-plugin-api'; +import { EntityFilterQuery } from '@backstage/catalog-client'; + +import { makeStyles, Typography } from '@material-ui/core'; + +/** + * Props customizing the component. + * + * @public + */ +export type FeaturedDocsCardProps = { + /** The entity filter used to display only the intended item/s */ + filter: EntityFilterQuery; + /** An optional ReactNode for empty states */ + emptyState?: React.JSX.Element; + /** An optional linkDestination to set for the Featured Doc */ + linkDestination?: string; + /** An optional limit to set for link destination */ + responseLimit?: number; + /** An optional string to customize sublink text */ + subLinkText?: string; +}; + +const useStyles = makeStyles( + theme => ({ + docDescription: { + fontSize: theme.typography.body1.fontSize, + fontWeight: theme.typography.body1.fontWeight, + marginBottom: theme.spacing(2), + marginTop: theme.spacing(2), + }, + docSubLink: { + fontSize: theme.typography.subtitle1.fontSize, + fontWeight: theme.typography.subtitle1.fontWeight, + lineHeight: theme.typography.subtitle1.lineHeight, + }, + docsTitleLink: { + fontSize: theme.typography.h6.fontSize, + fontWeight: theme.typography.h6.fontWeight, + lineHeight: theme.typography.h6.lineHeight, + }, + }), + { name: 'HomeFeaturedDocsCard' }, +); + +/** + * A component to display specific Featured Docs. + * + * @public + */ +export const Content = (props: FeaturedDocsCardProps): JSX.Element => { + const { emptyState, filter, linkDestination, responseLimit, subLinkText } = + props; + const linkText = subLinkText || 'LEARN MORE'; + const styles = useStyles(); + const catalogApi: CatalogApi = useApi(catalogApiRef); + const { + value: entities, + loading, + error, + } = useAsync(async () => { + const response = await catalogApi.getEntities({ + filter: filter, + limit: responseLimit || 10, + }); + return response.items; + }); + + if (loading) { + return ; + } + if (error) { + return ; + } + + return entities?.length ? ( + <> + {entities.map(d => ( +
+ + {d.metadata.title} + + {d.metadata.description && ( + + {d.metadata.description} + + )} + + {linkText} + +
+ ))} + + ) : ( + emptyState || ( + + DOCS + + } + /> + ) + ); +}; diff --git a/plugins/home/src/homePageComponents/FeaturedDocsCard/FeaturedDocsCard.stories.tsx b/plugins/home/src/homePageComponents/FeaturedDocsCard/FeaturedDocsCard.stories.tsx new file mode 100644 index 0000000000..91f0dbf27e --- /dev/null +++ b/plugins/home/src/homePageComponents/FeaturedDocsCard/FeaturedDocsCard.stories.tsx @@ -0,0 +1,71 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { FeaturedDocsCard } from '../../plugin'; +import React, { ComponentType, PropsWithChildren } from 'react'; +import { wrapInTestApp, TestApiProvider } from '@backstage/test-utils'; +import { catalogApiRef, entityRouteRef } from '@backstage/plugin-catalog-react'; +import { Grid } from '@material-ui/core'; + +const docsEntities = [ + { + apiVersion: '1', + kind: 'Location', + metadata: { + name: 'getting-started-with-backstage', + title: 'Getting Started Docs', + description: + 'An awesome doc you want to feature to help out your customers. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis pretium magna ut molestie lacinia. Nullam eget bibendum est, vitae finibus neque.', + }, + spec: { + type: 'documentation', + }, + }, +]; + +const mockCatalogApi = { + getEntities: async () => ({ items: docsEntities }), +}; + +export default { + title: 'Plugins/Home/Components/FeaturedDocsCard', + decorators: [ + (Story: ComponentType>) => + wrapInTestApp( + + + , + { + mountedRoutes: { + '/catalog/:namespace/:kind/:name': entityRouteRef, + }, + }, + ), + ], +}; + +export const Default = () => { + return ( + + + + ); +}; diff --git a/plugins/home/src/homePageComponents/FeaturedDocsCard/index.ts b/plugins/home/src/homePageComponents/FeaturedDocsCard/index.ts new file mode 100644 index 0000000000..5151fa370c --- /dev/null +++ b/plugins/home/src/homePageComponents/FeaturedDocsCard/index.ts @@ -0,0 +1,18 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export { Content } from './Content'; +export type { FeaturedDocsCardProps } from './Content'; diff --git a/plugins/home/src/homePageComponents/index.ts b/plugins/home/src/homePageComponents/index.ts index 03902debe4..e260982e8e 100644 --- a/plugins/home/src/homePageComponents/index.ts +++ b/plugins/home/src/homePageComponents/index.ts @@ -18,4 +18,5 @@ export type { ToolkitContentProps, Tool } from './Toolkit'; export type { ClockConfig } from './HeaderWorldClock'; export type { WelcomeTitleLanguageProps } from './WelcomeTitle'; export type { VisitedByTypeProps, VisitedByTypeKind } from './VisitedByType'; +export type { FeaturedDocsCardProps } from './FeaturedDocsCard'; export type { StarredEntitiesProps } from './StarredEntities'; diff --git a/plugins/home/src/index.ts b/plugins/home/src/index.ts index a80f8bd93d..154186f169 100644 --- a/plugins/home/src/index.ts +++ b/plugins/home/src/index.ts @@ -34,6 +34,7 @@ export { HeaderWorldClock, HomePageTopVisited, HomePageRecentlyVisited, + FeaturedDocsCard, } from './plugin'; export * from './components'; export * from './assets'; diff --git a/plugins/home/src/plugin.ts b/plugins/home/src/plugin.ts index ce288a1cb2..cb9f129a72 100644 --- a/plugins/home/src/plugin.ts +++ b/plugins/home/src/plugin.ts @@ -23,7 +23,11 @@ import { storageApiRef, } from '@backstage/core-plugin-api'; import { createCardExtension } from '@backstage/plugin-home-react'; -import { ToolkitContentProps, VisitedByTypeProps } from './homePageComponents'; +import { + ToolkitContentProps, + VisitedByTypeProps, + FeaturedDocsCardProps, +} from './homePageComponents'; import { rootRouteRef } from './routes'; import { VisitsStorageApi, visitsApiRef } from './api'; import { StarredEntitiesProps } from './homePageComponents/StarredEntities/Content'; @@ -211,3 +215,16 @@ export const HomePageRecentlyVisited = homePlugin.provide( import('./homePageComponents/VisitedByType/RecentlyVisited'), }), ); + +/** + * A component to display specific Featured Docs. + * + * @public + */ +export const FeaturedDocsCard = homePlugin.provide( + createCardExtension({ + name: 'FeaturedDocsCard', + title: 'Featured Docs', + components: () => import('./homePageComponents/FeaturedDocsCard'), + }), +); diff --git a/plugins/ilert/CHANGELOG.md b/plugins/ilert/CHANGELOG.md index 8346c31b23..a410255f8d 100644 --- a/plugins/ilert/CHANGELOG.md +++ b/plugins/ilert/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-ilert +## 0.2.17-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 + +## 0.2.15 + +### 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 + ## 0.2.15-next.2 ### Patch Changes diff --git a/plugins/ilert/package.json b/plugins/ilert/package.json index c852ca5652..7123186991 100644 --- a/plugins/ilert/package.json +++ b/plugins/ilert/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-ilert", "description": "A Backstage plugin that integrates towards iLert", - "version": "0.2.15-next.2", + "version": "0.2.17-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/ilert/src/components/ILertCard/ILertCardEmptyState.tsx b/plugins/ilert/src/components/ILertCard/ILertCardEmptyState.tsx index 966caea079..f81cfbc0a4 100644 --- a/plugins/ilert/src/components/ILertCard/ILertCardEmptyState.tsx +++ b/plugins/ilert/src/components/ILertCard/ILertCardEmptyState.tsx @@ -14,7 +14,6 @@ * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; import Card from '@material-ui/core/Card'; import CardContent from '@material-ui/core/CardContent'; import CardHeader from '@material-ui/core/CardHeader'; @@ -37,7 +36,7 @@ spec: lifecycle: production owner: guest`; -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ code: { borderRadius: 6, margin: theme.spacing(2, 0), diff --git a/plugins/jenkins-backend/CHANGELOG.md b/plugins/jenkins-backend/CHANGELOG.md index b47d26f6fb..af36fa4d88 100644 --- a/plugins/jenkins-backend/CHANGELOG.md +++ b/plugins/jenkins-backend/CHANGELOG.md @@ -1,5 +1,40 @@ # @backstage/plugin-jenkins-backend +## 0.3.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/plugin-permission-node@0.7.19-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/plugin-jenkins-common@0.1.21 + - @backstage/plugin-permission-common@0.7.10 + +## 0.3.1 + +### Patch Changes + +- 4bfb878807: Updated dependency `@types/jenkins` to `^1.0.0`. +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/catalog-client@1.4.6 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-auth-node@0.4.1 + - @backstage/plugin-jenkins-common@0.1.21 + - @backstage/plugin-permission-node@0.7.18 + ## 0.3.1-next.2 ### Patch Changes diff --git a/plugins/jenkins-backend/package.json b/plugins/jenkins-backend/package.json index 66779e6870..41739ad4eb 100644 --- a/plugins/jenkins-backend/package.json +++ b/plugins/jenkins-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-jenkins-backend", "description": "A Backstage backend plugin that integrates towards Jenkins", - "version": "0.3.1-next.2", + "version": "0.3.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -51,7 +51,7 @@ }, "devDependencies": { "@backstage/cli": "workspace:^", - "@types/jenkins": "^0.23.1", + "@types/jenkins": "^1.0.0", "@types/supertest": "^2.0.8", "msw": "^1.0.0", "supertest": "^6.1.6" diff --git a/plugins/jenkins-common/CHANGELOG.md b/plugins/jenkins-common/CHANGELOG.md index f91ea5074c..47d90761b5 100644 --- a/plugins/jenkins-common/CHANGELOG.md +++ b/plugins/jenkins-common/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-jenkins-common +## 0.1.21 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-catalog-common@1.0.18 + ## 0.1.20 ### Patch Changes diff --git a/plugins/jenkins-common/package.json b/plugins/jenkins-common/package.json index 0856d27ad0..7b6a333c3b 100644 --- a/plugins/jenkins-common/package.json +++ b/plugins/jenkins-common/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-jenkins-common", - "version": "0.1.20", + "version": "0.1.21", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/jenkins/CHANGELOG.md b/plugins/jenkins/CHANGELOG.md index f47d2c12c5..f98c22df3e 100644 --- a/plugins/jenkins/CHANGELOG.md +++ b/plugins/jenkins/CHANGELOG.md @@ -1,5 +1,34 @@ # @backstage/plugin-jenkins +## 0.9.3-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-jenkins-common@0.1.21 + +## 0.9.1 + +### 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/errors@1.2.3 + - @backstage/plugin-jenkins-common@0.1.21 + ## 0.9.1-next.2 ### Patch Changes diff --git a/plugins/jenkins/package.json b/plugins/jenkins/package.json index 636c73adf3..cc45d43590 100644 --- a/plugins/jenkins/package.json +++ b/plugins/jenkins/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-jenkins", "description": "A Backstage plugin that integrates towards Jenkins", - "version": "0.9.1-next.2", + "version": "0.9.3-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -63,7 +63,7 @@ "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.0.0", "@types/testing-library__jest-dom": "^5.9.1", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/jenkins/src/components/Cards/Cards.tsx b/plugins/jenkins/src/components/Cards/Cards.tsx index 44bbc06f65..1cbc3e5d9f 100644 --- a/plugins/jenkins/src/components/Cards/Cards.tsx +++ b/plugins/jenkins/src/components/Cards/Cards.tsx @@ -14,7 +14,7 @@ * limitations under the License. */ -import { LinearProgress, makeStyles, Theme } from '@material-ui/core'; +import { LinearProgress, makeStyles } from '@material-ui/core'; import ExternalLinkIcon from '@material-ui/icons/Launch'; import { DateTime, Duration } from 'luxon'; import React from 'react'; @@ -29,7 +29,7 @@ import { } from '@backstage/core-components'; import { Project } from '../../api/JenkinsApi'; -const useStyles = makeStyles({ +const useStyles = makeStyles({ externalLinkIcon: { fontSize: 'inherit', verticalAlign: 'bottom', diff --git a/plugins/kafka-backend/CHANGELOG.md b/plugins/kafka-backend/CHANGELOG.md index 0fb9b6c92d..076b38956b 100644 --- a/plugins/kafka-backend/CHANGELOG.md +++ b/plugins/kafka-backend/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-kafka-backend +## 0.3.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## 0.3.5 + +### Patch Changes + +- 8613ba3928: Switched to using `"exports"` field for `/alpha` subpath export. +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + ## 0.3.5-next.2 ### Patch Changes diff --git a/plugins/kafka-backend/package.json b/plugins/kafka-backend/package.json index 17237a69e7..93c817cd65 100644 --- a/plugins/kafka-backend/package.json +++ b/plugins/kafka-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka-backend", "description": "A Backstage backend plugin that integrates towards Kafka", - "version": "0.3.5-next.2", + "version": "0.3.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kafka/CHANGELOG.md b/plugins/kafka/CHANGELOG.md index 527d244872..9dd1951c1d 100644 --- a/plugins/kafka/CHANGELOG.md +++ b/plugins/kafka/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-kafka +## 0.3.28-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.3.26 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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.3.26-next.2 ### Patch Changes diff --git a/plugins/kafka/package.json b/plugins/kafka/package.json index 2c2afada94..7e7a1bbbd7 100644 --- a/plugins/kafka/package.json +++ b/plugins/kafka/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kafka", "description": "A Backstage plugin that integrates towards Kafka", - "version": "0.3.26-next.2", + "version": "0.3.28-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes-backend/CHANGELOG.md b/plugins/kubernetes-backend/CHANGELOG.md index a419085051..8a2f9b49bf 100644 --- a/plugins/kubernetes-backend/CHANGELOG.md +++ b/plugins/kubernetes-backend/CHANGELOG.md @@ -1,5 +1,67 @@ # @backstage/plugin-kubernetes-backend +## 0.14.0-next.0 + +### Minor Changes + +- 52050ada6e: You can now select `single` kubernetes cluster that the entity is part-of from all your defined kubernetes clusters, by passing `backstage.io/kubernetes-cluster` annotation with the defined cluster name. + + If you do not specify the annotation by `default it fetches all` defined kubernetes cluster. + + To apply + + catalog-info.yaml + + ```diff + annotations: + 'backstage.io/kubernetes-id': dice-roller + 'backstage.io/kubernetes-namespace': dice-space + + 'backstage.io/kubernetes-cluster': dice-cluster + 'backstage.io/kubernetes-label-selector': 'app=my-app,component=front-end' + ``` + +### Patch Changes + +- 706fc3a7e1: Updated dependency `@kubernetes/client-node` to `0.20.0`. +- 42c1aee741: Updated dependency `@google-cloud/container` to `^5.0.0`. +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-kubernetes-common@0.7.2-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/plugin-permission-node@0.7.19-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/integration-aws-node@0.1.8 + - @backstage/types@1.1.1 + - @backstage/plugin-kubernetes-node@0.1.2-next.0 + - @backstage/plugin-permission-common@0.7.10 + +## 0.13.1 + +### Patch Changes + +- 62180df4ee: Allow storing dashboard parameters for kubernetes in catalog +- df40b067e1: Fixed the lack of `resourcequotas` as part of the Default Objects to fetch from the kubernetes api +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/plugin-kubernetes-common@0.7.1 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/integration-aws-node@0.1.8 + - @backstage/catalog-client@1.4.6 + - @backstage/plugin-permission-common@0.7.10 + - @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-kubernetes-node@0.1.1 + - @backstage/plugin-permission-node@0.7.18 + ## 0.13.1-next.2 ### Patch Changes diff --git a/plugins/kubernetes-backend/api-report.md b/plugins/kubernetes-backend/api-report.md index 0ed5a31d9d..f79b14ede0 100644 --- a/plugins/kubernetes-backend/api-report.md +++ b/plugins/kubernetes-backend/api-report.md @@ -210,6 +210,10 @@ export class KubernetesBuilder { clusterSupplier: KubernetesClustersSupplier, ): KubernetesServiceLocator; // (undocumented) + protected buildSingleTenantServiceLocator( + clusterSupplier: KubernetesClustersSupplier, + ): KubernetesServiceLocator; + // (undocumented) static createBuilder(env: KubernetesEnvironment): KubernetesBuilder; // (undocumented) protected readonly env: KubernetesEnvironment; @@ -452,7 +456,7 @@ export class ServiceAccountStrategy implements AuthenticationStrategy { } // @public (undocumented) -export type ServiceLocatorMethod = 'multiTenant' | 'http'; +export type ServiceLocatorMethod = 'multiTenant' | 'singleTenant' | 'http'; // @public (undocumented) export interface ServiceLocatorRequestContext { diff --git a/plugins/kubernetes-backend/package.json b/plugins/kubernetes-backend/package.json index b653cd347e..b4fdc103a9 100644 --- a/plugins/kubernetes-backend/package.json +++ b/plugins/kubernetes-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-backend", "description": "A Backstage backend plugin that integrates towards Kubernetes", - "version": "0.13.1-next.2", + "version": "0.14.0-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -47,10 +47,10 @@ "clean": "backstage-cli package clean" }, "dependencies": { - "@aws-crypto/sha256-js": "^3.0.0", + "@aws-crypto/sha256-js": "^5.0.0", "@aws-sdk/credential-providers": "^3.350.0", "@aws-sdk/signature-v4": "^3.347.0", - "@azure/identity": "^3.2.1", + "@azure/identity": "^4.0.0", "@backstage/backend-common": "workspace:^", "@backstage/backend-plugin-api": "workspace:^", "@backstage/catalog-client": "workspace:^", @@ -65,9 +65,9 @@ "@backstage/plugin-permission-common": "workspace:^", "@backstage/plugin-permission-node": "workspace:^", "@backstage/types": "workspace:^", - "@google-cloud/container": "^4.0.0", + "@google-cloud/container": "^5.0.0", "@jest-mock/express": "^2.0.1", - "@kubernetes/client-node": "0.19.0", + "@kubernetes/client-node": "0.20.0", "@types/express": "^4.17.6", "@types/http-proxy-middleware": "^0.19.3", "@types/luxon": "^3.0.0", diff --git a/plugins/kubernetes-backend/src/service-locator/SingleTenantServiceLocator.test.ts b/plugins/kubernetes-backend/src/service-locator/SingleTenantServiceLocator.test.ts new file mode 100644 index 0000000000..7e66ab96ea --- /dev/null +++ b/plugins/kubernetes-backend/src/service-locator/SingleTenantServiceLocator.test.ts @@ -0,0 +1,151 @@ +/* + * 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 '@backstage/backend-common'; +import { Entity } from '@backstage/catalog-model'; +import { ServiceLocatorRequestContext } from '../types/types'; +import { SingleTenantServiceLocator } from './SingleTenantServiceLocator'; + +describe('SingleTenantConfigClusterLocator', () => { + it('empty clusters returns empty cluster details', async () => { + const sut = new SingleTenantServiceLocator({ + getClusters: async () => [], + }); + + const result = await sut.getClustersByEntity( + {} as Entity, + {} as ServiceLocatorRequestContext, + ); + + expect(result).toStrictEqual({ clusters: [] }); + }); + + it('one cluster return from two clusters', async () => { + const sut = new SingleTenantServiceLocator({ + getClusters: async () => { + return [ + { + name: 'cluster1', + url: 'http://localhost:8080', + authMetadata: {}, + }, + { + name: 'cluster2', + url: 'http://localhost:8081', + authMetadata: {}, + }, + ]; + }, + }); + + const testEntity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + namespace: 'default', + name: 'testEntity', + annotations: { + 'backstage.io/kubernetes-cluster': 'cluster1', + }, + }, + }; + + const result = await sut.getClustersByEntity( + testEntity as Entity, + {} as ServiceLocatorRequestContext, + ); + + expect(result).toStrictEqual({ + clusters: [ + { + name: 'cluster1', + url: 'http://localhost:8080', + authMetadata: {}, + }, + ], + }); + }); + + it('no annotation return all cluster', async () => { + const definedClusters = [ + { + name: 'cluster1', + url: 'http://localhost:8080', + authMetadata: {}, + }, + { + name: 'cluster2', + url: 'http://localhost:8081', + authMetadata: {}, + }, + ]; + + const sut = new SingleTenantServiceLocator({ + getClusters: async () => { + return definedClusters; + }, + }); + + const result = await sut.getClustersByEntity( + {} as Entity, + {} as ServiceLocatorRequestContext, + ); + + expect(result).toStrictEqual({ + clusters: definedClusters, + }); + }); + + it('wrong annotation returns empty cluster', async () => { + const sut = new SingleTenantServiceLocator({ + getClusters: async () => { + return [ + { + name: 'cluster1', + url: 'http://localhost:8080', + authMetadata: {}, + }, + { + name: 'cluster2', + url: 'http://localhost:8081', + authMetadata: {}, + }, + ]; + }, + }); + + const testEntity = { + apiVersion: 'backstage.io/v1alpha1', + kind: 'Component', + metadata: { + namespace: 'default', + name: 'testEntity', + annotations: { + 'backstage.io/kubernetes-cluster': 'cluster3', + }, + }, + }; + + const result = await sut.getClustersByEntity( + testEntity as Entity, + {} as ServiceLocatorRequestContext, + ); + + expect(result).toStrictEqual({ + clusters: [], + }); + }); +}); diff --git a/plugins/kubernetes-backend/src/service-locator/SingleTenantServiceLocator.ts b/plugins/kubernetes-backend/src/service-locator/SingleTenantServiceLocator.ts new file mode 100644 index 0000000000..e94d95776c --- /dev/null +++ b/plugins/kubernetes-backend/src/service-locator/SingleTenantServiceLocator.ts @@ -0,0 +1,54 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { Entity } from '@backstage/catalog-model'; +import { + ClusterDetails, + KubernetesClustersSupplier, + KubernetesServiceLocator, + ServiceLocatorRequestContext, +} from '../types/types'; + +// This locator assumes that service is located on one cluster +// Therefore it will always return specified cluster provided in backstage.io/kubernetes-cluster annotation +// If backstage.io/kubernetes-cluster annotation not provided will always return all cluster provided +export class SingleTenantServiceLocator implements KubernetesServiceLocator { + private readonly clusterSupplier: KubernetesClustersSupplier; + + constructor(clusterSupplier: KubernetesClustersSupplier) { + this.clusterSupplier = clusterSupplier; + } + + // As this implementation always returns all clusters serviceId is ignored here + getClustersByEntity( + _entity: Entity, + _requestContext: ServiceLocatorRequestContext, + ): Promise<{ clusters: ClusterDetails[] }> { + return this.clusterSupplier.getClusters().then(clusters => { + if (_entity.metadata?.annotations?.['backstage.io/kubernetes-cluster']) { + return { + clusters: clusters.filter( + c => + c.name === + _entity.metadata?.annotations?.[ + 'backstage.io/kubernetes-cluster' + ], + ), + }; + } + return { clusters }; + }); + } +} diff --git a/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts b/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts index b05db36398..3bc7402179 100644 --- a/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts +++ b/plugins/kubernetes-backend/src/service/KubernetesBuilder.ts @@ -43,6 +43,7 @@ import { import { addResourceRoutesToRouter } from '../routes/resourcesRoutes'; import { MultiTenantServiceLocator } from '../service-locator/MultiTenantServiceLocator'; +import { SingleTenantServiceLocator } from '../service-locator/SingleTenantServiceLocator'; import { CustomResource, KubernetesClustersSupplier, @@ -276,6 +277,10 @@ export class KubernetesBuilder { this.serviceLocator = this.buildMultiTenantServiceLocator(clusterSupplier); break; + case 'singleTenant': + this.serviceLocator = + this.buildSingleTenantServiceLocator(clusterSupplier); + break; case 'http': this.serviceLocator = this.buildHttpServiceLocator(clusterSupplier); break; @@ -294,6 +299,12 @@ export class KubernetesBuilder { return new MultiTenantServiceLocator(clusterSupplier); } + protected buildSingleTenantServiceLocator( + clusterSupplier: KubernetesClustersSupplier, + ): KubernetesServiceLocator { + return new SingleTenantServiceLocator(clusterSupplier); + } + protected buildHttpServiceLocator( _clusterSupplier: KubernetesClustersSupplier, ): KubernetesServiceLocator { diff --git a/plugins/kubernetes-backend/src/types/types.ts b/plugins/kubernetes-backend/src/types/types.ts index 597984591f..6781dc1161 100644 --- a/plugins/kubernetes-backend/src/types/types.ts +++ b/plugins/kubernetes-backend/src/types/types.ts @@ -144,7 +144,7 @@ export interface KubernetesServiceLocator { * * @public */ -export type ServiceLocatorMethod = 'multiTenant' | 'http'; // TODO implement http +export type ServiceLocatorMethod = 'multiTenant' | 'singleTenant' | 'http'; // TODO implement http /** * Provider-specific authentication configuration diff --git a/plugins/kubernetes-cluster/CHANGELOG.md b/plugins/kubernetes-cluster/CHANGELOG.md index 0f700d4768..969996da08 100644 --- a/plugins/kubernetes-cluster/CHANGELOG.md +++ b/plugins/kubernetes-cluster/CHANGELOG.md @@ -1,5 +1,37 @@ # @backstage/plugin-kubernetes-cluster +## 0.0.4-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-kubernetes-react@0.1.2-next.0 + - @backstage/plugin-kubernetes-common@0.7.2-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## 0.0.2 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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/plugin-kubernetes-common@0.7.1 + - @backstage/plugin-kubernetes-react@0.1.1 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + ## 0.0.2-next.2 ### Patch Changes diff --git a/plugins/kubernetes-cluster/package.json b/plugins/kubernetes-cluster/package.json index 18f47b47af..6429f99d3f 100644 --- a/plugins/kubernetes-cluster/package.json +++ b/plugins/kubernetes-cluster/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-cluster", "description": "A Backstage plugin that shows details of Kubernetes clusters", - "version": "0.0.2-next.2", + "version": "0.0.4-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes-common/CHANGELOG.md b/plugins/kubernetes-common/CHANGELOG.md index ec818f3d00..7eeb148d94 100644 --- a/plugins/kubernetes-common/CHANGELOG.md +++ b/plugins/kubernetes-common/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-kubernetes-common +## 0.7.2-next.0 + +### Patch Changes + +- 706fc3a7e1: Updated dependency `@kubernetes/client-node` to `0.20.0`. +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.7.10 + +## 0.7.1 + +### Patch Changes + +- 62180df4ee: Allow storing dashboard parameters for kubernetes in catalog +- df40b067e1: Fixed the lack of `resourcequotas` as part of the Default Objects to fetch from the kubernetes api +- Updated dependencies + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + ## 0.7.1-next.1 ### Patch Changes diff --git a/plugins/kubernetes-common/package.json b/plugins/kubernetes-common/package.json index d63265ddea..c66ea6606e 100644 --- a/plugins/kubernetes-common/package.json +++ b/plugins/kubernetes-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-common", "description": "Common functionalities for kubernetes, to be shared between kubernetes and kubernetes-backend plugin", - "version": "0.7.1-next.1", + "version": "0.7.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -40,11 +40,10 @@ }, "dependencies": { "@backstage/catalog-model": "workspace:^", - "@backstage/core-plugin-api": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/plugin-permission-common": "workspace:^", "@backstage/types": "workspace:^", - "@kubernetes/client-node": "0.19.0", + "@kubernetes/client-node": "0.20.0", "kubernetes-models": "^4.3.1", "lodash": "^4.17.21", "luxon": "^3.0.0" diff --git a/plugins/kubernetes-node/CHANGELOG.md b/plugins/kubernetes-node/CHANGELOG.md index e10683b110..28619caaf9 100644 --- a/plugins/kubernetes-node/CHANGELOG.md +++ b/plugins/kubernetes-node/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-kubernetes-node +## 0.1.2-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-common@0.7.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + +## 0.1.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-kubernetes-common@0.7.1 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/catalog-model@1.4.3 + ## 0.1.1-next.2 ### Patch Changes diff --git a/plugins/kubernetes-node/package.json b/plugins/kubernetes-node/package.json index 993eb3b574..2f8b3237fc 100644 --- a/plugins/kubernetes-node/package.json +++ b/plugins/kubernetes-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-node", "description": "Node.js library for the kubernetes plugin", - "version": "0.1.1-next.2", + "version": "0.1.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/kubernetes-react/CHANGELOG.md b/plugins/kubernetes-react/CHANGELOG.md index 11cff887ec..fbc09b0b90 100644 --- a/plugins/kubernetes-react/CHANGELOG.md +++ b/plugins/kubernetes-react/CHANGELOG.md @@ -1,5 +1,38 @@ # @backstage/plugin-kubernetes-react +## 0.1.2-next.0 + +### Patch Changes + +- b5ae2e5a62: Add ID property to the table displaying kubernetes pods to avoid closing the info sidebar when the data reloads and needs to rerender. +- 706fc3a7e1: Updated dependency `@kubernetes/client-node` to `0.20.0`. +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/plugin-kubernetes-common@0.7.2-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## 0.1.1 + +### Patch Changes + +- 0f4cad6da0: Internal refactor to avoid a null pointer problem +- 6c2b872153: Add official support for React 18. +- b52f576f48: Make sure types exported by other `kubernetes` plugins in the past are exported again after the creation + of the react package. + + Some types have been moved to this new package but the export was missing, so they were not available anymore for developers. + +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/plugin-kubernetes-common@0.7.1 + - @backstage/core-plugin-api@1.8.0 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + ## 0.1.1-next.2 ### Patch Changes diff --git a/plugins/kubernetes-react/package.json b/plugins/kubernetes-react/package.json index bddd793b97..0b707da172 100644 --- a/plugins/kubernetes-react/package.json +++ b/plugins/kubernetes-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes-react", "description": "Web library for the kubernetes-react plugin", - "version": "0.1.1-next.2", + "version": "0.1.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -32,7 +32,7 @@ "@backstage/types": "workspace:^", "@kubernetes-models/apimachinery": "^1.1.0", "@kubernetes-models/base": "^4.0.1", - "@kubernetes/client-node": "^0.19.0", + "@kubernetes/client-node": "^0.20.0", "@material-ui/core": "^4.9.13", "@material-ui/icons": "^4.11.3", "@material-ui/lab": "^4.0.0-alpha.61", diff --git a/plugins/kubernetes-react/src/components/Pods/PodsTable.tsx b/plugins/kubernetes-react/src/components/Pods/PodsTable.tsx index f7c2660c84..d83aebb210 100644 --- a/plugins/kubernetes-react/src/components/Pods/PodsTable.tsx +++ b/plugins/kubernetes-react/src/components/Pods/PodsTable.tsx @@ -125,6 +125,11 @@ const Memory = ({ clusterName, pod }: { clusterName: string; pod: Pod }) => { export const PodsTable = ({ pods, extraColumns = [] }: PodsTablesProps) => { const cluster = useContext(ClusterContext); const defaultColumns: TableColumn[] = [ + { + title: 'ID', + field: 'metadata.uid', + hidden: true, + }, { title: 'name', highlight: true, @@ -176,7 +181,14 @@ export const PodsTable = ({ pods, extraColumns = [] }: PodsTablesProps) => {
({ + ...pod, + id: pod?.metadata?.uid, + })) as any as Pod[] + } columns={columns} /> diff --git a/plugins/kubernetes/CHANGELOG.md b/plugins/kubernetes/CHANGELOG.md index 644af82b5a..f4a0c0dfd9 100644 --- a/plugins/kubernetes/CHANGELOG.md +++ b/plugins/kubernetes/CHANGELOG.md @@ -1,5 +1,40 @@ # @backstage/plugin-kubernetes +## 0.11.3-next.0 + +### Patch Changes + +- 706fc3a7e1: Updated dependency `@kubernetes/client-node` to `0.20.0`. +- 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-kubernetes-react@0.1.2-next.0 + - @backstage/plugin-kubernetes-common@0.7.2-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## 0.11.1 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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/plugin-kubernetes-common@0.7.1 + - @backstage/plugin-kubernetes-react@0.1.1 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + ## 0.11.1-next.2 ### Patch Changes diff --git a/plugins/kubernetes/package.json b/plugins/kubernetes/package.json index 1ae47b383c..8970a9d19e 100644 --- a/plugins/kubernetes/package.json +++ b/plugins/kubernetes/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-kubernetes", "description": "A Backstage plugin that integrates towards Kubernetes", - "version": "0.11.1-next.2", + "version": "0.11.3-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -46,7 +46,7 @@ "@backstage/types": "workspace:^", "@kubernetes-models/apimachinery": "^1.1.0", "@kubernetes-models/base": "^4.0.1", - "@kubernetes/client-node": "0.19.0", + "@kubernetes/client-node": "0.20.0", "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.61", diff --git a/plugins/lighthouse-backend/CHANGELOG.md b/plugins/lighthouse-backend/CHANGELOG.md index 7aeebf7d9d..4d13ee7bb9 100644 --- a/plugins/lighthouse-backend/CHANGELOG.md +++ b/plugins/lighthouse-backend/CHANGELOG.md @@ -1,5 +1,35 @@ # @backstage/plugin-lighthouse-backend +## 0.3.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-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/types@1.1.1 + - @backstage/plugin-lighthouse-common@0.1.4 + +## 0.3.4 + +### Patch Changes + +- 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/types@1.1.1 + - @backstage/plugin-lighthouse-common@0.1.4 + ## 0.3.4-next.2 ### Patch Changes diff --git a/plugins/lighthouse-backend/package.json b/plugins/lighthouse-backend/package.json index d0828439f6..84cff5b8eb 100644 --- a/plugins/lighthouse-backend/package.json +++ b/plugins/lighthouse-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-lighthouse-backend", "description": "Backend functionalities for lighthouse", - "version": "0.3.4-next.2", + "version": "0.3.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/lighthouse/CHANGELOG.md b/plugins/lighthouse/CHANGELOG.md index bb711423da..0a43306d8b 100644 --- a/plugins/lighthouse/CHANGELOG.md +++ b/plugins/lighthouse/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-lighthouse +## 0.4.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/config@1.1.1 + - @backstage/plugin-lighthouse-common@0.1.4 + +## 0.4.11 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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 + - @backstage/plugin-lighthouse-common@0.1.4 + ## 0.4.11-next.2 ### Patch Changes diff --git a/plugins/lighthouse/package.json b/plugins/lighthouse/package.json index e14a58252b..d9e1562293 100644 --- a/plugins/lighthouse/package.json +++ b/plugins/lighthouse/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-lighthouse", "description": "A Backstage plugin that integrates towards Lighthouse", - "version": "0.4.11-next.2", + "version": "0.4.13-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/linguist-backend/CHANGELOG.md b/plugins/linguist-backend/CHANGELOG.md index 65ad934f6c..b6d4eeecba 100644 --- a/plugins/linguist-backend/CHANGELOG.md +++ b/plugins/linguist-backend/CHANGELOG.md @@ -1,5 +1,40 @@ # @backstage/plugin-linguist-backend +## 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 diff --git a/plugins/linguist-backend/package.json b/plugins/linguist-backend/package.json index a70f8f2e98..078e771acb 100644 --- a/plugins/linguist-backend/package.json +++ b/plugins/linguist-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-linguist-backend", - "version": "0.5.4-next.2", + "version": "0.5.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/linguist/CHANGELOG.md b/plugins/linguist/CHANGELOG.md index 455f329b82..9eff98f884 100644 --- a/plugins/linguist/CHANGELOG.md +++ b/plugins/linguist/CHANGELOG.md @@ -1,5 +1,32 @@ # @backstage/plugin-linguist +## 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 diff --git a/plugins/linguist/package.json b/plugins/linguist/package.json index d47d695a49..f5c1fc6d16 100644 --- a/plugins/linguist/package.json +++ b/plugins/linguist/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-linguist", - "version": "0.1.11-next.2", + "version": "0.1.13-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/microsoft-calendar/CHANGELOG.md b/plugins/microsoft-calendar/CHANGELOG.md index f1a6abe709..5197b46b04 100644 --- a/plugins/microsoft-calendar/CHANGELOG.md +++ b/plugins/microsoft-calendar/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-microsoft-calendar +## 0.1.10-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/errors@1.2.3 + +## 0.1.9 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 62b5922916: Internal theme type updates +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/errors@1.2.3 + ## 0.1.9-next.2 ### Patch Changes diff --git a/plugins/microsoft-calendar/package.json b/plugins/microsoft-calendar/package.json index 0f8532b305..2f8e24ba7c 100644 --- a/plugins/microsoft-calendar/package.json +++ b/plugins/microsoft-calendar/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-microsoft-calendar", - "version": "0.1.9-next.2", + "version": "0.1.10-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/newrelic-dashboard/CHANGELOG.md b/plugins/newrelic-dashboard/CHANGELOG.md index d2b5291446..d4fc089300 100644 --- a/plugins/newrelic-dashboard/CHANGELOG.md +++ b/plugins/newrelic-dashboard/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-newrelic-dashboard +## 0.3.3-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/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + +## 0.3.1 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + ## 0.3.1-next.2 ### Patch Changes diff --git a/plugins/newrelic-dashboard/package.json b/plugins/newrelic-dashboard/package.json index 618e43e1fd..35360c23be 100644 --- a/plugins/newrelic-dashboard/package.json +++ b/plugins/newrelic-dashboard/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-newrelic-dashboard", - "version": "0.3.1-next.2", + "version": "0.3.3-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/newrelic/CHANGELOG.md b/plugins/newrelic/CHANGELOG.md index c4ea0fc8ea..cb8ad604bc 100644 --- a/plugins/newrelic/CHANGELOG.md +++ b/plugins/newrelic/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-newrelic +## 0.3.43-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + +## 0.3.42 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + ## 0.3.42-next.2 ### Patch Changes diff --git a/plugins/newrelic/package.json b/plugins/newrelic/package.json index e400fff5d7..3f4ae91bbe 100644 --- a/plugins/newrelic/package.json +++ b/plugins/newrelic/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-newrelic", "description": "A Backstage plugin that integrates towards New Relic", - "version": "0.3.42-next.2", + "version": "0.3.43-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -60,7 +60,7 @@ "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.0.0", "@types/parse-link-header": "^2.0.1", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "msw": "^1.2.3" }, "files": [ diff --git a/plugins/nomad-backend/CHANGELOG.md b/plugins/nomad-backend/CHANGELOG.md index 1ae3d6c002..edcee04e86 100644 --- a/plugins/nomad-backend/CHANGELOG.md +++ b/plugins/nomad-backend/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-nomad-backend +## 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 diff --git a/plugins/nomad-backend/package.json b/plugins/nomad-backend/package.json index 0e87e15999..074e35f1db 100644 --- a/plugins/nomad-backend/package.json +++ b/plugins/nomad-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-nomad-backend", - "version": "0.1.9-next.2", + "version": "0.1.10-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/nomad/CHANGELOG.md b/plugins/nomad/CHANGELOG.md index b16c1f918a..6efac21380 100644 --- a/plugins/nomad/CHANGELOG.md +++ b/plugins/nomad/CHANGELOG.md @@ -1,5 +1,32 @@ # @backstage/plugin-nomad +## 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 diff --git a/plugins/nomad/package.json b/plugins/nomad/package.json index 4dbeab002e..fc8cab5de7 100644 --- a/plugins/nomad/package.json +++ b/plugins/nomad/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-nomad", - "version": "0.1.7-next.2", + "version": "0.1.9-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -55,7 +55,7 @@ "@testing-library/jest-dom": "^6.0.0", "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.0.0", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/octopus-deploy/CHANGELOG.md b/plugins/octopus-deploy/CHANGELOG.md index 3ec6f12e74..4855e1964e 100644 --- a/plugins/octopus-deploy/CHANGELOG.md +++ b/plugins/octopus-deploy/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-octopus-deploy +## 0.2.10-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 + +## 0.2.8 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4d2f72c572: Added Deep link into Octopus Deploy project from the Release Table. +- 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 + ## 0.2.8-next.2 ### Patch Changes diff --git a/plugins/octopus-deploy/README.md b/plugins/octopus-deploy/README.md index e80bbf0fcd..9e37777091 100644 --- a/plugins/octopus-deploy/README.md +++ b/plugins/octopus-deploy/README.md @@ -23,6 +23,13 @@ proxy: X-Octopus-ApiKey: ${OCTOPUS_API_KEY} ``` +Optionally, also add the following section to your app-config.yaml if you wish to enable linking to the Project Release page in the Octopus Deploy UI from the footer of the Backstage Release Table. Typically this will be the server URL above without the /api postfix. + +``` +octopusdeploy: + webBaseUrl: "" +``` + 2. Add the following to `EntityPage.tsx` to display Octopus Releases ``` diff --git a/plugins/octopus-deploy/api-report.md b/plugins/octopus-deploy/api-report.md index 3d65e40c64..094cc0a7b0 100644 --- a/plugins/octopus-deploy/api-report.md +++ b/plugins/octopus-deploy/api-report.md @@ -7,6 +7,7 @@ import { ApiRef } from '@backstage/core-plugin-api'; import { BackstagePlugin } from '@backstage/core-plugin-api'; +import { ConfigApi } from '@backstage/core-plugin-api'; import { DiscoveryApi } from '@backstage/core-plugin-api'; import { Entity } from '@backstage/catalog-model'; import { FetchApi } from '@backstage/core-plugin-api'; @@ -25,6 +26,10 @@ export const OCTOPUS_DEPLOY_PROJECT_ID_ANNOTATION = 'octopus.com/project-id'; // @public (undocumented) export interface OctopusDeployApi { + // (undocumented) + getConfig(): Promise; + // (undocumented) + getProjectInfo(projectReference: ProjectReference): Promise; // (undocumented) getReleaseProgression(opts: { projectReference: ProjectReference; @@ -38,11 +43,16 @@ export const octopusDeployApiRef: ApiRef; // @public (undocumented) export class OctopusDeployClient implements OctopusDeployApi { constructor(options: { + configApi: ConfigApi; discoveryApi: DiscoveryApi; fetchApi: FetchApi; proxyPathBase?: string; }); // (undocumented) + getConfig(): Promise; + // (undocumented) + getProjectInfo(projectReference: ProjectReference): Promise; + // (undocumented) getReleaseProgression(opts: { projectReference: ProjectReference; releaseHistoryCount: number; @@ -63,12 +73,30 @@ export type OctopusEnvironment = { Name: string; }; +// @public (undocumented) +export type OctopusLinks = { + Self: string; + Web: string; +}; + +// @public (undocumented) +export type OctopusPluginConfig = { + WebUiBaseUrl: string; +}; + // @public (undocumented) export type OctopusProgression = { Environments: OctopusEnvironment[]; Releases: OctopusReleaseProgression[]; }; +// @public (undocumented) +export type OctopusProject = { + Name: string; + Slug: string; + Links: OctopusLinks; +}; + // @public (undocumented) export type OctopusRelease = { Id: string; diff --git a/plugins/octopus-deploy/config.d.ts b/plugins/octopus-deploy/config.d.ts new file mode 100644 index 0000000000..81d14f2921 --- /dev/null +++ b/plugins/octopus-deploy/config.d.ts @@ -0,0 +1,24 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +export interface Config { + octopusdeploy?: { + /** + * Frontend Web UI Base URL for deep links to UI + * @visibility frontend + */ + webBaseUrl?: string; + }; +} diff --git a/plugins/octopus-deploy/package.json b/plugins/octopus-deploy/package.json index f71ee497ed..2e28dd8453 100644 --- a/plugins/octopus-deploy/package.json +++ b/plugins/octopus-deploy/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-octopus-deploy", - "version": "0.2.8-next.2", + "version": "0.2.10-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -57,6 +57,8 @@ "msw": "^1.0.0" }, "files": [ - "dist" - ] + "dist", + "config.d.ts" + ], + "configSchema": "config.d.ts" } diff --git a/plugins/octopus-deploy/src/api/index.ts b/plugins/octopus-deploy/src/api/index.ts index 0364bed269..cb5d428308 100644 --- a/plugins/octopus-deploy/src/api/index.ts +++ b/plugins/octopus-deploy/src/api/index.ts @@ -17,6 +17,7 @@ import { createApiRef, DiscoveryApi, FetchApi, + ConfigApi, } from '@backstage/core-plugin-api'; import { ProjectReference } from '../utils/getAnnotationFromEntity'; @@ -48,6 +49,23 @@ export type OctopusRelease = { export type OctopusDeployment = { State: string; }; +/** @public */ +export type OctopusLinks = { + Self: string; + Web: string; +}; + +/** @public */ +export type OctopusProject = { + Name: string; + Slug: string; + Links: OctopusLinks; +}; + +/** @public */ +export type OctopusPluginConfig = { + WebUiBaseUrl: string; +}; /** @public */ export const octopusDeployApiRef = createApiRef({ @@ -55,6 +73,7 @@ export const octopusDeployApiRef = createApiRef({ }); const DEFAULT_PROXY_PATH_BASE = '/octopus-deploy'; +const WEB_UI_BASE_URL_CONFIG_KEY = 'octopusdeploy.webBaseUrl'; /** @public */ export interface OctopusDeployApi { @@ -62,19 +81,24 @@ export interface OctopusDeployApi { projectReference: ProjectReference; releaseHistoryCount: number; }): Promise; + getProjectInfo(projectReference: ProjectReference): Promise; + getConfig(): Promise; } /** @public */ export class OctopusDeployClient implements OctopusDeployApi { + private readonly configApi: ConfigApi; private readonly discoveryApi: DiscoveryApi; private readonly fetchApi: FetchApi; private readonly proxyPathBase: string; constructor(options: { + configApi: ConfigApi; discoveryApi: DiscoveryApi; fetchApi: FetchApi; proxyPathBase?: string; }) { + this.configApi = options.configApi; this.discoveryApi = options.discoveryApi; this.fetchApi = options.fetchApi; this.proxyPathBase = options.proxyPathBase ?? DEFAULT_PROXY_PATH_BASE; @@ -84,7 +108,7 @@ export class OctopusDeployClient implements OctopusDeployApi { projectReference: ProjectReference; releaseHistoryCount: number; }): Promise { - const url = await this.getApiUrl(opts); + const url = await this.getProgressionApiUrl(opts); const response = await this.fetchApi.fetch(url); @@ -107,24 +131,58 @@ export class OctopusDeployClient implements OctopusDeployApi { return responseJson; } - private async getApiUrl(opts: { + async getProjectInfo( + projectReference: ProjectReference, + ): Promise { + const url = await this.getProjectApiUrl(projectReference); + const response = await this.fetchApi.fetch(url); + + let responseJson; + + try { + responseJson = await response.json(); + } catch (e) { + responseJson = { releases: [] }; + } + + if (response.status !== 200) { + throw new Error( + `Error communicating with Octopus Deploy: ${ + responseJson?.error?.title || response.statusText + }`, + ); + } + + return responseJson; + } + + async getConfig(): Promise { + return { + WebUiBaseUrl: this.configApi.getString(WEB_UI_BASE_URL_CONFIG_KEY), + }; + } + + private async getProgressionApiUrl(opts: { projectReference: ProjectReference; releaseHistoryCount: number; }) { - const proxyUrl = await this.discoveryApi.getBaseUrl('proxy'); const queryParameters = new URLSearchParams({ releaseHistoryCount: opts.releaseHistoryCount.toString(), }); - if (opts.projectReference.spaceId !== undefined) { - return `${proxyUrl}${this.proxyPathBase}/${encodeURIComponent( - opts.projectReference.spaceId, - )}/projects/${encodeURIComponent( - opts.projectReference.projectId, - )}/progression?${queryParameters}`; - } + const projectUrl = await this.getProjectApiUrl(opts.projectReference); + + return `${projectUrl}/progression?${queryParameters}`; + } + + private async getProjectApiUrl(projectReference: ProjectReference) { + const proxyUrl = await this.discoveryApi.getBaseUrl('proxy'); + if (projectReference.spaceId !== undefined) + return `${proxyUrl}${this.proxyPathBase}/${encodeURIComponent( + projectReference.spaceId, + )}/projects/${encodeURIComponent(projectReference.projectId)}`; return `${proxyUrl}${this.proxyPathBase}/projects/${encodeURIComponent( - opts.projectReference.projectId, - )}/progression?${queryParameters}`; + projectReference.projectId, + )}`; } } diff --git a/plugins/octopus-deploy/src/components/EntityPageOctopusDeploy/EntityPageOctopusDeploy.tsx b/plugins/octopus-deploy/src/components/EntityPageOctopusDeploy/EntityPageOctopusDeploy.tsx index 21080cb408..d9352a414a 100644 --- a/plugins/octopus-deploy/src/components/EntityPageOctopusDeploy/EntityPageOctopusDeploy.tsx +++ b/plugins/octopus-deploy/src/components/EntityPageOctopusDeploy/EntityPageOctopusDeploy.tsx @@ -13,7 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +import { useConfig } from '../../hooks/useConfig'; import { useEntity } from '@backstage/plugin-catalog-react'; +import { useProject } from '../../hooks/useProject'; import { useReleases } from '../../hooks/useReleases'; import { getProjectReferenceAnnotationFromEntity } from '../../utils/getAnnotationFromEntity'; import React from 'react'; @@ -30,12 +32,22 @@ export const EntityPageOctopusDeploy = (props: { defaultLimit?: number }) => { projectReference.spaceId, ); + const { + project, + loading: projectLoading, + error: projectError, + } = useProject(projectReference.projectId, projectReference.spaceId); + + const { config, loading: configLoading, error: configError } = useConfig(); + return ( ); }; diff --git a/plugins/octopus-deploy/src/components/ReleaseTable/ReleaseTable.tsx b/plugins/octopus-deploy/src/components/ReleaseTable/ReleaseTable.tsx index bc185546b1..b61b533667 100644 --- a/plugins/octopus-deploy/src/components/ReleaseTable/ReleaseTable.tsx +++ b/plugins/octopus-deploy/src/components/ReleaseTable/ReleaseTable.tsx @@ -14,10 +14,17 @@ * limitations under the License. */ import { Box, Typography } from '@material-ui/core'; -import { OctopusEnvironment, OctopusReleaseProgression } from '../../api'; +import { + OctopusEnvironment, + OctopusProject, + OctopusReleaseProgression, + OctopusPluginConfig, +} from '../../api'; import React from 'react'; import { + BottomLink, + BottomLinkProps, ResponseErrorPanel, StatusAborted, StatusError, @@ -33,6 +40,8 @@ import { OctopusDeployIcon } from '../OctopusDeployIcon'; type ReleaseTableProps = { environments?: OctopusEnvironment[]; releases?: OctopusReleaseProgression[]; + project?: OctopusProject; + config?: OctopusPluginConfig; loading: boolean; error?: Error; }; @@ -93,6 +102,8 @@ export const getDeploymentStatusComponent = (state: string | undefined) => { export const ReleaseTable = ({ environments, releases, + project, + config, loading, error, }: ReleaseTableProps) => { @@ -130,24 +141,39 @@ export const ReleaseTable = ({ })) ?? []), ]; + const deepLink: BottomLinkProps | null = + project?.Links?.Web && config?.WebUiBaseUrl + ? { + link: `${config.WebUiBaseUrl}${project.Links.Web}`, + title: 'Go to project', + onClick: e => { + e.preventDefault(); + window.open(`${config?.WebUiBaseUrl}${project?.Links.Web}`); + }, + } + : null; + return ( -
- - - Octopus Deploy - Releases ({releases ? releases.length : 0}) - - } - data={releases ?? []} - /> + +
+ + + Octopus Deploy - Releases ({releases ? releases.length : 0}) + + } + data={releases ?? []} + /> + {deepLink !== null && } + ); }; diff --git a/plugins/octopus-deploy/src/hooks/useConfig.ts b/plugins/octopus-deploy/src/hooks/useConfig.ts new file mode 100644 index 0000000000..7218bf1a2c --- /dev/null +++ b/plugins/octopus-deploy/src/hooks/useConfig.ts @@ -0,0 +1,36 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { useApi } from '@backstage/core-plugin-api'; +import useAsync from 'react-use/lib/useAsync'; +import { octopusDeployApiRef, OctopusPluginConfig } from '../api'; + +export function useConfig(): { + config?: OctopusPluginConfig; + loading: boolean; + error?: Error; +} { + const api = useApi(octopusDeployApiRef); + + const { value, loading, error } = useAsync(() => { + return api.getConfig(); + }, [api]); + + return { + config: value, + loading, + error, + }; +} diff --git a/plugins/octopus-deploy/src/hooks/useProject.ts b/plugins/octopus-deploy/src/hooks/useProject.ts new file mode 100644 index 0000000000..f4178fd3e0 --- /dev/null +++ b/plugins/octopus-deploy/src/hooks/useProject.ts @@ -0,0 +1,39 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { useApi } from '@backstage/core-plugin-api'; +import useAsync from 'react-use/lib/useAsync'; +import { octopusDeployApiRef, OctopusProject } from '../api'; + +export function useProject( + projectId: string, + spaceId?: string, +): { + project?: OctopusProject; + loading: boolean; + error?: Error; +} { + const api = useApi(octopusDeployApiRef); + + const { value, loading, error } = useAsync(() => { + return api.getProjectInfo({ projectId: projectId, spaceId: spaceId }); + }, [api, projectId, spaceId]); + + return { + project: value, + loading, + error, + }; +} diff --git a/plugins/octopus-deploy/src/plugin.ts b/plugins/octopus-deploy/src/plugin.ts index 9365f93bdb..39b2b49fb7 100644 --- a/plugins/octopus-deploy/src/plugin.ts +++ b/plugins/octopus-deploy/src/plugin.ts @@ -24,6 +24,7 @@ import { createRoutableExtension, discoveryApiRef, fetchApiRef, + configApiRef, } from '@backstage/core-plugin-api'; import { Entity } from '@backstage/catalog-model'; @@ -38,9 +39,13 @@ export const octopusDeployPlugin = createPlugin({ apis: [ createApiFactory({ api: octopusDeployApiRef, - deps: { discoveryApi: discoveryApiRef, fetchApi: fetchApiRef }, - factory: ({ discoveryApi, fetchApi }) => - new OctopusDeployClient({ discoveryApi, fetchApi }), + deps: { + discoveryApi: discoveryApiRef, + fetchApi: fetchApiRef, + configApi: configApiRef, + }, + factory: ({ discoveryApi, fetchApi, configApi }) => + new OctopusDeployClient({ discoveryApi, fetchApi, configApi }), }), ], }); diff --git a/plugins/opencost/CHANGELOG.md b/plugins/opencost/CHANGELOG.md index f2520046c8..bc4fcbd562 100644 --- a/plugins/opencost/CHANGELOG.md +++ b/plugins/opencost/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-opencost +## 0.2.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + +## 0.2.2 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + ## 0.2.2-next.2 ### Patch Changes diff --git a/plugins/opencost/package.json b/plugins/opencost/package.json index 8c311f14db..fba53eb9da 100644 --- a/plugins/opencost/package.json +++ b/plugins/opencost/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-opencost", - "version": "0.2.2-next.2", + "version": "0.2.3-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -51,7 +51,7 @@ "@testing-library/jest-dom": "^6.0.0", "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.0.0", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/org-react/CHANGELOG.md b/plugins/org-react/CHANGELOG.md index 0ca09d2952..80ca996f05 100644 --- a/plugins/org-react/CHANGELOG.md +++ b/plugins/org-react/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-org-react +## 0.1.17-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-client@1.4.6 + - @backstage/catalog-model@1.4.3 + +## 0.1.15 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 62b5922916: Internal theme type updates +- 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-client@1.4.6 + - @backstage/catalog-model@1.4.3 + ## 0.1.15-next.2 ### Patch Changes diff --git a/plugins/org-react/package.json b/plugins/org-react/package.json index 9551c415eb..2893e283ee 100644 --- a/plugins/org-react/package.json +++ b/plugins/org-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-org-react", - "version": "0.1.15-next.2", + "version": "0.1.17-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/org/CHANGELOG.md b/plugins/org/CHANGELOG.md index 706a144c53..9157075dd9 100644 --- a/plugins/org/CHANGELOG.md +++ b/plugins/org/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-org +## 0.6.18-next.0 + +### Patch Changes + +- 3a65d9c4d7: Support member list scrollable when parent has specified height +- 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 + +## 0.6.16 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 62b5922916: Internal theme type updates +- 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 + ## 0.6.16-next.2 ### Patch Changes diff --git a/plugins/org/package.json b/plugins/org/package.json index 08213e43de..15c64bd7b8 100644 --- a/plugins/org/package.json +++ b/plugins/org/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-org", "description": "A Backstage plugin that helps you create entity pages for your organization", - "version": "0.6.16-next.2", + "version": "0.6.18-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/org/src/components/Cards/Group/MembersList/MembersListCard.test.tsx b/plugins/org/src/components/Cards/Group/MembersList/MembersListCard.test.tsx index 6613aa5b6a..cd5801ac71 100644 --- a/plugins/org/src/components/Cards/Group/MembersList/MembersListCard.test.tsx +++ b/plugins/org/src/components/Cards/Group/MembersList/MembersListCard.test.tsx @@ -31,7 +31,7 @@ import { mockedCatalogApiSupportingGroups, } from '../../../../__testUtils__/catalogMocks'; import { permissionApiRef } from '@backstage/plugin-permission-react'; -import { EntityLayout } from '@backstage/plugin-catalog'; +import { EntityLayout, catalogPlugin } from '@backstage/plugin-catalog'; import { screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { Observable } from '@backstage/types'; @@ -63,6 +63,8 @@ const mockedStarredEntitiesApi: Partial = { }, }; +const rootRouteRef = catalogPlugin.routes.catalogIndex; + describe('MemberTab Test', () => { const groupEntity: GroupEntity = { apiVersion: 'backstage.io/v1alpha1', @@ -122,6 +124,7 @@ describe('MemberTab Test', () => { { mountedRoutes: { '/catalog/:namespace/:kind/:name': entityRouteRef, + '/catalog': rootRouteRef, }, }, ); @@ -151,6 +154,7 @@ describe('MemberTab Test', () => { { mountedRoutes: { '/catalog/:namespace/:kind/:name': entityRouteRef, + '/catalog': rootRouteRef, }, }, ); @@ -179,6 +183,7 @@ describe('MemberTab Test', () => { { mountedRoutes: { '/catalog/:namespace/:kind/:name': entityRouteRef, + '/catalog': rootRouteRef, }, }, ); @@ -206,6 +211,7 @@ describe('MemberTab Test', () => { { mountedRoutes: { '/catalog/:namespace/:kind/:name': entityRouteRef, + '/catalog': rootRouteRef, }, }, ); @@ -231,6 +237,7 @@ describe('MemberTab Test', () => { { mountedRoutes: { '/catalog/:namespace/:kind/:name': entityRouteRef, + '/catalog': rootRouteRef, }, }, ); @@ -265,6 +272,7 @@ describe('MemberTab Test', () => { { mountedRoutes: { '/catalog/:namespace/:kind/:name': entityRouteRef, + '/catalog': rootRouteRef, }, }, ); @@ -299,6 +307,7 @@ describe('MemberTab Test', () => { { mountedRoutes: { '/catalog/:namespace/:kind/:name': entityRouteRef, + '/catalog': rootRouteRef, }, }, ); diff --git a/plugins/org/src/components/Cards/Group/MembersList/MembersListCard.tsx b/plugins/org/src/components/Cards/Group/MembersList/MembersListCard.tsx index 3716af5522..701feb0b73 100644 --- a/plugins/org/src/components/Cards/Group/MembersList/MembersListCard.tsx +++ b/plugins/org/src/components/Cards/Group/MembersList/MembersListCard.tsx @@ -119,6 +119,15 @@ const MemberComponent = (props: { member: UserEntity }) => { ); }; +const useListStyles = makeStyles(() => ({ + root: { + height: '100%', + }, + cardContent: { + overflow: 'auto', + }, +})); + /** @public */ export const MembersListCard = (props: { memberDisplayTitle?: string; @@ -130,6 +139,7 @@ export const MembersListCard = (props: { pageSize = 50, showAggregateMembersToggle, } = props; + const classes = useListStyles(); const { entity: groupEntity } = useEntity(); const { @@ -210,13 +220,15 @@ export const MembersListCard = (props: { ); return ( - + {showAggregateMembersToggle && ( <> diff --git a/plugins/pagerduty/CHANGELOG.md b/plugins/pagerduty/CHANGELOG.md index 6b9620a151..40c6ff4e02 100644 --- a/plugins/pagerduty/CHANGELOG.md +++ b/plugins/pagerduty/CHANGELOG.md @@ -1,5 +1,32 @@ # @backstage/plugin-pagerduty +## 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 diff --git a/plugins/pagerduty/package.json b/plugins/pagerduty/package.json index cbc5c1ed45..726ff91a63 100644 --- a/plugins/pagerduty/package.json +++ b/plugins/pagerduty/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-pagerduty", "description": "A Backstage plugin that integrates towards PagerDuty", - "version": "0.6.7-next.2", + "version": "0.6.9-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/pagerduty/src/components/ChangeEvents/ChangeEventListItem.tsx b/plugins/pagerduty/src/components/ChangeEvents/ChangeEventListItem.tsx index 7b531bf1de..8dc5bf1f33 100644 --- a/plugins/pagerduty/src/components/ChangeEvents/ChangeEventListItem.tsx +++ b/plugins/pagerduty/src/components/ChangeEvents/ChangeEventListItem.tsx @@ -28,9 +28,8 @@ import { import { DateTime, Duration } from 'luxon'; import { PagerDutyChangeEvent } from '../types'; import OpenInBrowserIcon from '@material-ui/icons/OpenInBrowser'; -import { BackstageTheme } from '@backstage/theme'; -const useStyles = makeStyles({ +const useStyles = makeStyles({ denseListIcon: { marginRight: 0, display: 'flex', diff --git a/plugins/pagerduty/src/components/Incident/IncidentListItem.tsx b/plugins/pagerduty/src/components/Incident/IncidentListItem.tsx index b23fcb8490..3ee92f1470 100644 --- a/plugins/pagerduty/src/components/Incident/IncidentListItem.tsx +++ b/plugins/pagerduty/src/components/Incident/IncidentListItem.tsx @@ -30,10 +30,9 @@ import Warning from '@material-ui/icons/Warning'; import { DateTime, Duration } from 'luxon'; import { PagerDutyIncident } from '../types'; import OpenInBrowserIcon from '@material-ui/icons/OpenInBrowser'; -import { BackstageTheme } from '@backstage/theme'; import { Link } from '@backstage/core-components'; -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ denseListIcon: { marginRight: 0, display: 'flex', diff --git a/plugins/pagerduty/src/components/TriggerButton/index.tsx b/plugins/pagerduty/src/components/TriggerButton/index.tsx index 1c12103d73..60adbd38c0 100644 --- a/plugins/pagerduty/src/components/TriggerButton/index.tsx +++ b/plugins/pagerduty/src/components/TriggerButton/index.tsx @@ -13,14 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import React, { useCallback, ReactNode, useState } from 'react'; import { makeStyles, Button } from '@material-ui/core'; -import { BackstageTheme } from '@backstage/theme'; - import { usePagerdutyEntity } from '../../hooks'; import { TriggerDialog } from '../TriggerDialog'; -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ buttonStyle: { backgroundColor: theme.palette.error.main, color: theme.palette.error.contrastText, diff --git a/plugins/periskop-backend/CHANGELOG.md b/plugins/periskop-backend/CHANGELOG.md index 6fc6dc094f..5884a31457 100644 --- a/plugins/periskop-backend/CHANGELOG.md +++ b/plugins/periskop-backend/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-periskop-backend +## 0.2.6-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 + +## 0.2.5 + +### Patch Changes + +- 8613ba3928: Switched to using `"exports"` field for `/alpha` subpath export. +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/config@1.1.1 + ## 0.2.5-next.2 ### Patch Changes diff --git a/plugins/periskop-backend/package.json b/plugins/periskop-backend/package.json index 545ac13a02..e1de6e6751 100644 --- a/plugins/periskop-backend/package.json +++ b/plugins/periskop-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop-backend", - "version": "0.2.5-next.2", + "version": "0.2.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/periskop/CHANGELOG.md b/plugins/periskop/CHANGELOG.md index c15a85cc21..139ab1c5f7 100644 --- a/plugins/periskop/CHANGELOG.md +++ b/plugins/periskop/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-periskop +## 0.1.26-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 + +## 0.1.24 + +### 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 + ## 0.1.24-next.2 ### Patch Changes diff --git a/plugins/periskop/package.json b/plugins/periskop/package.json index 86063b596f..9099c884a7 100644 --- a/plugins/periskop/package.json +++ b/plugins/periskop/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-periskop", - "version": "0.1.24-next.2", + "version": "0.1.26-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md b/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md index e9296041db..59488140e0 100644 --- a/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md +++ b/plugins/permission-backend-module-policy-allow-all/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-permission-backend-module-allow-all-policy +## 0.1.5-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-permission-node@0.7.19-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/plugin-permission-common@0.7.10 + +## 0.1.4 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-auth-node@0.4.1 + - @backstage/plugin-permission-node@0.7.18 + ## 0.1.4-next.2 ### Patch Changes diff --git a/plugins/permission-backend-module-policy-allow-all/package.json b/plugins/permission-backend-module-policy-allow-all/package.json index ba4ea0911f..259186d50b 100644 --- a/plugins/permission-backend-module-policy-allow-all/package.json +++ b/plugins/permission-backend-module-policy-allow-all/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-permission-backend-module-allow-all-policy", "description": "Allow all policy backend module for the permission plugin.", - "version": "0.1.4-next.2", + "version": "0.1.5-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-backend/CHANGELOG.md b/plugins/permission-backend/CHANGELOG.md index 79cabf4be4..d40c6eff77 100644 --- a/plugins/permission-backend/CHANGELOG.md +++ b/plugins/permission-backend/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-permission-backend +## 0.5.31-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-permission-node@0.7.19-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-permission-common@0.7.10 + +## 0.5.30 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-auth-node@0.4.1 + - @backstage/plugin-permission-node@0.7.18 + ## 0.5.30-next.2 ### Patch Changes diff --git a/plugins/permission-backend/package.json b/plugins/permission-backend/package.json index 1f7e7bd28a..c3e8c7a54c 100644 --- a/plugins/permission-backend/package.json +++ b/plugins/permission-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-backend", - "version": "0.5.30-next.2", + "version": "0.5.31-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-common/CHANGELOG.md b/plugins/permission-common/CHANGELOG.md index c017cd00fc..26fb7356f9 100644 --- a/plugins/permission-common/CHANGELOG.md +++ b/plugins/permission-common/CHANGELOG.md @@ -1,5 +1,15 @@ # @backstage/plugin-permission-common +## 0.7.10 + +### Patch Changes + +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + ## 0.7.9 ### Patch Changes diff --git a/plugins/permission-common/package.json b/plugins/permission-common/package.json index 0c8292a24d..0cc2d043df 100644 --- a/plugins/permission-common/package.json +++ b/plugins/permission-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-permission-common", "description": "Isomorphic types and client for Backstage permissions and authorization", - "version": "0.7.9", + "version": "0.7.10", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { @@ -45,7 +45,7 @@ "@backstage/config": "workspace:^", "@backstage/errors": "workspace:^", "@backstage/types": "workspace:^", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "uuid": "^8.0.0", "zod": "^3.21.4" }, diff --git a/plugins/permission-node/CHANGELOG.md b/plugins/permission-node/CHANGELOG.md index c8407a1b1a..a9c27025a9 100644 --- a/plugins/permission-node/CHANGELOG.md +++ b/plugins/permission-node/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-permission-node +## 0.7.19-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-permission-common@0.7.10 + +## 0.7.18 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-auth-node@0.4.1 + ## 0.7.18-next.2 ### Patch Changes diff --git a/plugins/permission-node/package.json b/plugins/permission-node/package.json index c2adf69d04..4191d16a67 100644 --- a/plugins/permission-node/package.json +++ b/plugins/permission-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-permission-node", "description": "Common permission and authorization utilities for backend plugins", - "version": "0.7.18-next.2", + "version": "0.7.19-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/permission-react/CHANGELOG.md b/plugins/permission-react/CHANGELOG.md index c7aa0a2e81..c5edb4e8f4 100644 --- a/plugins/permission-react/CHANGELOG.md +++ b/plugins/permission-react/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-permission-react +## 0.4.18-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/config@1.1.1 + - @backstage/plugin-permission-common@0.7.10 + +## 0.4.17 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/config@1.1.1 + ## 0.4.17-next.0 ### Patch Changes diff --git a/plugins/permission-react/package.json b/plugins/permission-react/package.json index 7e432821b2..26f2cde701 100644 --- a/plugins/permission-react/package.json +++ b/plugins/permission-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-permission-react", - "version": "0.4.17-next.0", + "version": "0.4.18-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -36,7 +36,7 @@ "@backstage/core-plugin-api": "workspace:^", "@backstage/plugin-permission-common": "workspace:^", "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "react-use": "^17.2.4", "swr": "^2.0.0" }, diff --git a/plugins/playlist-backend/CHANGELOG.md b/plugins/playlist-backend/CHANGELOG.md index 20e68b9301..29b12ea597 100644 --- a/plugins/playlist-backend/CHANGELOG.md +++ b/plugins/playlist-backend/CHANGELOG.md @@ -1,5 +1,38 @@ # @backstage/plugin-playlist-backend +## 0.3.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-permission-node@0.7.19-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/plugin-permission-common@0.7.10 + - @backstage/plugin-playlist-common@0.1.12 + +## 0.3.11 + +### 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/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/catalog-client@1.4.6 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-auth-node@0.4.1 + - @backstage/plugin-permission-node@0.7.18 + - @backstage/plugin-playlist-common@0.1.12 + ## 0.3.11-next.2 ### Patch Changes diff --git a/plugins/playlist-backend/package.json b/plugins/playlist-backend/package.json index bd32d40a8b..28fc5e12da 100644 --- a/plugins/playlist-backend/package.json +++ b/plugins/playlist-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-playlist-backend", - "version": "0.3.11-next.2", + "version": "0.3.12-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist-common/CHANGELOG.md b/plugins/playlist-common/CHANGELOG.md index 5916ed33e8..af77b53222 100644 --- a/plugins/playlist-common/CHANGELOG.md +++ b/plugins/playlist-common/CHANGELOG.md @@ -1,5 +1,12 @@ # @backstage/plugin-playlist-common +## 0.1.12 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.10 + ## 0.1.11 ### Patch Changes diff --git a/plugins/playlist-common/package.json b/plugins/playlist-common/package.json index e08afb8392..f19883a74d 100644 --- a/plugins/playlist-common/package.json +++ b/plugins/playlist-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-playlist-common", "description": "Common functionalities for the playlist plugin", - "version": "0.1.11", + "version": "0.1.12", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist/CHANGELOG.md b/plugins/playlist/CHANGELOG.md index 2fe26e8cc7..12d289d0bf 100644 --- a/plugins/playlist/CHANGELOG.md +++ b/plugins/playlist/CHANGELOG.md @@ -1,5 +1,58 @@ # @backstage/plugin-playlist +## 0.2.2-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-search-react@1.7.4-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/plugin-permission-react@0.4.18-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-playlist-common@0.1.12 + +## 0.2.0 + +### Minor Changes + +- f0e2ef3b81: Support being able to define custom composable Playlist index pages + + **BREAKING** The individual `PlaylistPage` route must now be manually hooked up by making the following change to your setup: + + ```diff + -import { PlaylistIndexPage } from '@backstage/plugin-playlist'; + +import { PlaylistIndexPage, PlaylistPage } from '@backstage/plugin-playlist'; + + // ... + + } /> + +} /> + ``` + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 69ee8d75f4: Remove `button` prop from used MaterialUI `MenuItem` component fixing incompatibility with MaterialUI v5. +- 62b5922916: Internal theme type updates +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-permission-react@0.4.17 + - @backstage/plugin-search-react@1.7.2 + - @backstage/theme@0.4.4 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-playlist-common@0.1.12 + ## 0.1.18-next.2 ### Patch Changes diff --git a/plugins/playlist/package.json b/plugins/playlist/package.json index 785c3f53e3..c23be32837 100644 --- a/plugins/playlist/package.json +++ b/plugins/playlist/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-playlist", - "version": "0.1.18-next.2", + "version": "0.2.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx b/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx index ac32097680..26c7b3fd45 100644 --- a/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx +++ b/plugins/playlist/src/components/CreatePlaylistButton/CreatePlaylistButton.tsx @@ -20,13 +20,12 @@ import { useRouteRef, alertApiRef, } from '@backstage/core-plugin-api'; -import { BackstageTheme } from '@backstage/theme'; import { usePermission } from '@backstage/plugin-permission-react'; import { permissions, PlaylistMetadata, } from '@backstage/plugin-playlist-common'; -import { Button, IconButton, useMediaQuery } from '@material-ui/core'; +import { Button, IconButton, Theme, useMediaQuery } from '@material-ui/core'; import AddCircleOutline from '@material-ui/icons/AddCircleOutline'; import React, { useCallback, useState } from 'react'; import { useNavigate } from 'react-router-dom'; @@ -49,7 +48,7 @@ export const CreatePlaylistButton = () => { const { allowed } = usePermission({ permission: permissions.playlistListCreate, }); - const isXSScreen = useMediaQuery(theme => + const isXSScreen = useMediaQuery(theme => theme.breakpoints.down('xs'), ); diff --git a/plugins/playlist/src/components/PersonalListPicker/PersonalListPicker.tsx b/plugins/playlist/src/components/PersonalListPicker/PersonalListPicker.tsx index 20bb5ba68a..0691d26732 100644 --- a/plugins/playlist/src/components/PersonalListPicker/PersonalListPicker.tsx +++ b/plugins/playlist/src/components/PersonalListPicker/PersonalListPicker.tsx @@ -29,7 +29,6 @@ import { ListItemText, makeStyles, MenuItem, - Theme, Typography, } from '@material-ui/core'; import PlaylistPlayIcon from '@material-ui/icons/PlaylistPlay'; @@ -75,7 +74,7 @@ export class PersonalListFilter implements PlaylistFilter { } } -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ root: { backgroundColor: 'rgba(0, 0, 0, .11)', boxShadow: 'none', @@ -270,7 +269,6 @@ export const PersonalListPicker = () => { setSelectedPersonalFilter(item.id)} selected={item.id === selectedPersonalFilter} diff --git a/plugins/proxy-backend/CHANGELOG.md b/plugins/proxy-backend/CHANGELOG.md index 87458c7f74..49518973c8 100644 --- a/plugins/proxy-backend/CHANGELOG.md +++ b/plugins/proxy-backend/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-proxy-backend +## 0.4.6-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 + +## 0.4.5 + +### Patch Changes + +- 8613ba3928: Switched to using `"exports"` field for `/alpha` subpath export. +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/config@1.1.1 + ## 0.4.5-next.2 ### Patch Changes diff --git a/plugins/proxy-backend/package.json b/plugins/proxy-backend/package.json index 897d1b0b32..a3bc61540f 100644 --- a/plugins/proxy-backend/package.json +++ b/plugins/proxy-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-proxy-backend", "description": "A Backstage backend plugin that helps you set up proxy endpoints in the backend", - "version": "0.4.5-next.2", + "version": "0.4.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/puppetdb/CHANGELOG.md b/plugins/puppetdb/CHANGELOG.md index 04aed439ec..0147ed7ac7 100644 --- a/plugins/puppetdb/CHANGELOG.md +++ b/plugins/puppetdb/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-puppetdb +## 0.1.11-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 + +## 0.1.9 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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/errors@1.2.3 + ## 0.1.9-next.2 ### Patch Changes diff --git a/plugins/puppetdb/package.json b/plugins/puppetdb/package.json index 76315fb10e..fbddd1a2e4 100644 --- a/plugins/puppetdb/package.json +++ b/plugins/puppetdb/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-puppetdb", "description": "Backstage plugin to visualize resource information and Puppet facts from PuppetDB.", - "version": "0.1.9-next.2", + "version": "0.1.11-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/puppetdb/src/components/ReportDetailsPage/ReportDetailsLogsTable.tsx b/plugins/puppetdb/src/components/ReportDetailsPage/ReportDetailsLogsTable.tsx index f512fcd935..d12b432314 100644 --- a/plugins/puppetdb/src/components/ReportDetailsPage/ReportDetailsLogsTable.tsx +++ b/plugins/puppetdb/src/components/ReportDetailsPage/ReportDetailsLogsTable.tsx @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import Typography from '@material-ui/core/Typography'; import React from 'react'; import { puppetDbApiRef, PuppetDbReportLog } from '../../api'; @@ -24,13 +25,12 @@ import { import useAsync from 'react-use/lib/useAsync'; import { useApi } from '@backstage/core-plugin-api'; import { makeStyles } from '@material-ui/core/styles'; -import { BackstageTheme } from '@backstage/theme'; type ReportLogsTableProps = { hash: string; }; -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ empty: { padding: theme.spacing(2), display: 'flex', diff --git a/plugins/puppetdb/src/components/ReportDetailsPage/ReportDetailsPage.tsx b/plugins/puppetdb/src/components/ReportDetailsPage/ReportDetailsPage.tsx index db6536fce4..c7da8df36b 100644 --- a/plugins/puppetdb/src/components/ReportDetailsPage/ReportDetailsPage.tsx +++ b/plugins/puppetdb/src/components/ReportDetailsPage/ReportDetailsPage.tsx @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { Link as RouterLink, useParams } from 'react-router-dom'; import { Breadcrumbs, Link } from '@backstage/core-components'; import { makeStyles } from '@material-ui/core/styles'; @@ -27,11 +28,10 @@ import { Typography, Tabs, } from '@material-ui/core'; -import { BackstageTheme } from '@backstage/theme'; import { ReportDetailsEventsTable } from './ReportDetailsEventsTable'; import { ReportDetailsLogsTable } from './ReportDetailsLogsTable'; -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ cards: { marginTop: theme.spacing(2), }, diff --git a/plugins/rollbar-backend/CHANGELOG.md b/plugins/rollbar-backend/CHANGELOG.md index 1f1dd768d0..26b858f2ae 100644 --- a/plugins/rollbar-backend/CHANGELOG.md +++ b/plugins/rollbar-backend/CHANGELOG.md @@ -1,5 +1,21 @@ # @backstage/plugin-rollbar-backend +## 0.1.53-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/config@1.1.1 + +## 0.1.52 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/config@1.1.1 + ## 0.1.52-next.2 ### Patch Changes diff --git a/plugins/rollbar-backend/package.json b/plugins/rollbar-backend/package.json index f15b954585..6512f32d88 100644 --- a/plugins/rollbar-backend/package.json +++ b/plugins/rollbar-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-rollbar-backend", "description": "A Backstage backend plugin that integrates towards Rollbar", - "version": "0.1.52-next.2", + "version": "0.1.53-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/rollbar/CHANGELOG.md b/plugins/rollbar/CHANGELOG.md index f68dcc38db..8d8f35757a 100644 --- a/plugins/rollbar/CHANGELOG.md +++ b/plugins/rollbar/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-rollbar +## 0.4.28-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 + +## 0.4.26 + +### 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 + ## 0.4.26-next.2 ### Patch Changes diff --git a/plugins/rollbar/package.json b/plugins/rollbar/package.json index de56896d34..5c51bdab2a 100644 --- a/plugins/rollbar/package.json +++ b/plugins/rollbar/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-rollbar", "description": "A Backstage plugin that integrates towards Rollbar", - "version": "0.4.26-next.2", + "version": "0.4.28-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -61,7 +61,7 @@ "@testing-library/jest-dom": "^6.0.0", "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.0.0", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md index 7d56652ebe..96500ac2a5 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-scaffolder-backend-module-confluence-to-markdown +## 0.2.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-scaffolder-node@0.2.9-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## 0.2.8 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/plugin-scaffolder-node@0.2.8 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + ## 0.2.8-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json index 38a1f333cb..0f441ab713 100644 --- a/plugins/scaffolder-backend-module-confluence-to-markdown/package.json +++ b/plugins/scaffolder-backend-module-confluence-to-markdown/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-confluence-to-markdown", "description": "The confluence-to-markdown module for @backstage/plugin-scaffolder-backend", - "version": "0.2.8-next.2", + "version": "0.2.9-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md index c04a58e745..d7cf6eef65 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-cookiecutter/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-scaffolder-backend-module-cookiecutter +## 0.2.32-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-scaffolder-node@0.2.9-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## 0.2.31 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/plugin-scaffolder-node@0.2.8 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + ## 0.2.31-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-cookiecutter/package.json b/plugins/scaffolder-backend-module-cookiecutter/package.json index edd0899437..a9d7675198 100644 --- a/plugins/scaffolder-backend-module-cookiecutter/package.json +++ b/plugins/scaffolder-backend-module-cookiecutter/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-cookiecutter", "description": "A module for the scaffolder backend that lets you template projects using cookiecutter", - "version": "0.2.31-next.2", + "version": "0.2.32-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md index d43b1124a9..7b9fd3b55d 100644 --- a/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-gitlab/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-scaffolder-backend-module-gitlab +## 0.2.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-scaffolder-node@0.2.9-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## 0.2.10 + +### Patch Changes + +- 26ca97ebaa: Add examples for `gitlab:projectAccessToken:create` scaffolder action & improve related tests +- Updated dependencies + - @backstage/integration@1.7.2 + - @backstage/plugin-scaffolder-node@0.2.8 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + ## 0.2.10-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-gitlab/package.json b/plugins/scaffolder-backend-module-gitlab/package.json index 6ba82fd81f..eccb663b54 100644 --- a/plugins/scaffolder-backend-module-gitlab/package.json +++ b/plugins/scaffolder-backend-module-gitlab/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-gitlab", - "version": "0.2.10-next.2", + "version": "0.2.11-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-rails/CHANGELOG.md b/plugins/scaffolder-backend-module-rails/CHANGELOG.md index 42da0f806a..ebf034b594 100644 --- a/plugins/scaffolder-backend-module-rails/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-rails/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-scaffolder-backend-module-rails +## 0.4.25-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-scaffolder-node@0.2.9-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## 0.4.24 + +### Patch Changes + +- Updated dependencies + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/plugin-scaffolder-node@0.2.8 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + ## 0.4.24-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-rails/package.json b/plugins/scaffolder-backend-module-rails/package.json index 5b253fdb9d..abd4742845 100644 --- a/plugins/scaffolder-backend-module-rails/package.json +++ b/plugins/scaffolder-backend-module-rails/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend-module-rails", "description": "A module for the scaffolder backend that lets you template projects using Rails", - "version": "0.4.24-next.2", + "version": "0.4.25-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md index b0386e706e..2ba0251f7e 100644 --- a/plugins/scaffolder-backend-module-sentry/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-sentry/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-scaffolder-backend-module-sentry +## 0.1.16-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.2.9-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + +## 0.1.15 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.2.8 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + ## 0.1.15-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-sentry/package.json b/plugins/scaffolder-backend-module-sentry/package.json index 1413dfb004..58b39a6b5c 100644 --- a/plugins/scaffolder-backend-module-sentry/package.json +++ b/plugins/scaffolder-backend-module-sentry/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-sentry", - "version": "0.1.15-next.2", + "version": "0.1.16-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md index 46c2784d47..0e2c6901c0 100644 --- a/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md +++ b/plugins/scaffolder-backend-module-yeoman/CHANGELOG.md @@ -1,5 +1,23 @@ # @backstage/plugin-scaffolder-backend-module-yeoman +## 0.2.29-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.2.9-next.0 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + +## 0.2.28 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-scaffolder-node@0.2.8 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + ## 0.2.28-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend-module-yeoman/package.json b/plugins/scaffolder-backend-module-yeoman/package.json index 811e09f6ad..400e2e616b 100644 --- a/plugins/scaffolder-backend-module-yeoman/package.json +++ b/plugins/scaffolder-backend-module-yeoman/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-scaffolder-backend-module-yeoman", - "version": "0.2.28-next.2", + "version": "0.2.29-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend/CHANGELOG.md b/plugins/scaffolder-backend/CHANGELOG.md index 8725488364..531f437ca3 100644 --- a/plugins/scaffolder-backend/CHANGELOG.md +++ b/plugins/scaffolder-backend/CHANGELOG.md @@ -1,5 +1,76 @@ # @backstage/plugin-scaffolder-backend +## 1.19.2-next.0 + +### Patch Changes + +- aff34fcf23: Fix issue with Circular JSON dependencies in templating +- 48667b4d3a: Fix creating env secret in github:environment:create action +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-catalog-backend@1.15.1-next.0 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.5-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/plugin-permission-node@0.7.19-next.0 + - @backstage/plugin-scaffolder-node@0.2.9-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-catalog-common@1.0.18 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-scaffolder-common@1.4.3 + +## 1.19.0 + +### Minor Changes + +- f3ab9cfcb7: Made shut down stale tasks configurable. + + There are two properties exposed: + + - `scaffolder.processingInterval` - sets the processing interval for staled tasks. + - `scaffolder.taskTimeoutJanitorFrequency` - sets the task's heartbeat timeout, when to consider a task to be staled. + +- 7d5a921114: Allow using `globby`'s negative matching with `copyWithoutTemplating`/`copyWithoutRender`. This allows including an entire subdirectory while excluding a single file so that it will still be templated instead of needing to list every other file and ensure the list is updated when new files are added. +- 5e4127c18e: Allow setting `update: true` in `publish:github:pull-request` scaffolder action + +### Patch Changes + +- 0920fd02ac: Add examples for `github:environment:create` scaffolder action & improve related tests +- ae30a9ae8c: Added description for publish:gerrit scaffolder actions +- 013611b42e: `knex` has been bumped to major version 3 and `better-sqlite3` to major version 9, which deprecate node 16 support. +- 23f72b2cba: Refactoring the runner to generate minimally informative task log per iteration and properly validate iterated actions. +- 8613ba3928: Switched to using `"exports"` field for `/alpha` subpath export. +- 99d4936f6c: Add examples for `github:webhook` scaffolder action & improve related tests +- 2be3922eb8: Add examples for `github:deployKey:create` scaffolder action & improve related tests +- 76d07da66a: Make it possible to define control buttons text (Back, Create, Review) per template +- f8727ad228: Add examples for `publish:github:pull-request` scaffolder action & improve related tests +- Updated dependencies + - @backstage/plugin-catalog-backend@1.15.0 + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/plugin-scaffolder-common@1.4.3 + - @backstage/integration@1.7.2 + - @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/plugin-permission-common@0.7.10 + - @backstage/plugin-scaffolder-node@0.2.8 + - @backstage/plugin-catalog-backend-module-scaffolder-entity-model@0.1.4 + - @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-catalog-common@1.0.18 + - @backstage/plugin-permission-node@0.7.18 + ## 1.19.0-next.2 ### Patch Changes diff --git a/plugins/scaffolder-backend/api-report.md b/plugins/scaffolder-backend/api-report.md index 1f8615b477..b92b883767 100644 --- a/plugins/scaffolder-backend/api-report.md +++ b/plugins/scaffolder-backend/api-report.md @@ -804,11 +804,11 @@ export class DatabaseTaskStore implements TaskStore { >, ): Promise; // (undocumented) - claimTask(): Promise; + claimTask(): Promise; // (undocumented) completeTask(options: { taskId: string; - status: TaskStatus; + status: TaskStatus_2; eventBody: JsonObject; }): Promise; // (undocumented) @@ -826,16 +826,16 @@ export class DatabaseTaskStore implements TaskStore { >, ): Promise; // (undocumented) - getTask(taskId: string): Promise; + getTask(taskId: string): Promise; // (undocumented) heartbeatTask(taskId: string): Promise; // (undocumented) list(options: { createdBy?: string }): Promise<{ - tasks: SerializedTask[]; + tasks: SerializedTask_2[]; }>; // (undocumented) listEvents(options: TaskStoreListEventsOptions): Promise<{ - events: SerializedTaskEvent[]; + events: SerializedTaskEvent_2[]; }>; // (undocumented) listStaleTasks(options: { timeoutS: number }): Promise<{ @@ -876,9 +876,9 @@ export interface RouterOptions { // (undocumented) actions?: TemplateAction_2[]; // (undocumented) - additionalTemplateFilters?: Record; + additionalTemplateFilters?: Record; // (undocumented) - additionalTemplateGlobals?: Record; + additionalTemplateGlobals?: Record; // (undocumented) catalogClient: CatalogApi; concurrentTasksLimit?: number; @@ -901,7 +901,7 @@ export interface RouterOptions { // (undocumented) scheduler?: PluginTaskScheduler; // (undocumented) - taskBroker?: TaskBroker; + taskBroker?: TaskBroker_2; // @deprecated (undocumented) taskWorkers?: number; } diff --git a/plugins/scaffolder-backend/config.d.ts b/plugins/scaffolder-backend/config.d.ts index 60ccd52257..5914cddce7 100644 --- a/plugins/scaffolder-backend/config.d.ts +++ b/plugins/scaffolder-backend/config.d.ts @@ -14,6 +14,8 @@ * limitations under the License. */ +import { HumanDuration } from '@backstage/types'; + export interface Config { /** Configuration options for the scaffolder plugin */ scaffolder?: { @@ -37,5 +39,21 @@ export interface Config { * Set to 0 to disable task workers altogether. */ concurrentTasksLimit?: number; + + /** + * Makes sure to auto-expire and clean up things that time out or for other reasons should not be left lingering. + * + * By default, the frequency is every 5 minutes. + */ + taskTimeoutJanitorFrequency?: HumanDuration; + + /** + * Sets the task's heartbeat timeout, when to consider a task to be staled. + * + * Once task is considered to be staled, the scheduler will shut it down on the next cycle. + * + * Default value is 24 hours. + */ + taskTimeout?: HumanDuration; }; } diff --git a/plugins/scaffolder-backend/package.json b/plugins/scaffolder-backend/package.json index df1298f93e..b1d5b86671 100644 --- a/plugins/scaffolder-backend/package.json +++ b/plugins/scaffolder-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-backend", "description": "The Backstage backend plugin that helps you create new things", - "version": "1.19.0-next.2", + "version": "1.19.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubEnvironment.examples.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubEnvironment.examples.test.ts index 5e3da2fcec..9d5dbfd35c 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubEnvironment.examples.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubEnvironment.examples.test.ts @@ -25,7 +25,7 @@ import { examples } from './gitHubEnvironment.examples'; const mockOctokit = { rest: { actions: { - getRepoPublicKey: jest.fn(), + getEnvironmentPublicKey: jest.fn(), createEnvironmentVariable: jest.fn(), createOrUpdateEnvironmentSecret: jest.fn(), }, @@ -68,7 +68,7 @@ describe('github:environment:create examples', () => { }; beforeEach(() => { - mockOctokit.rest.actions.getRepoPublicKey.mockResolvedValue({ + mockOctokit.rest.actions.getEnvironmentPublicKey.mockResolvedValue({ data: { key: publicKey, key_id: 'keyid', @@ -109,7 +109,9 @@ describe('github:environment:create examples', () => { expect( mockOctokit.rest.actions.createEnvironmentVariable, ).not.toHaveBeenCalled(); - expect(mockOctokit.rest.actions.getRepoPublicKey).not.toHaveBeenCalled(); + expect( + mockOctokit.rest.actions.getEnvironmentPublicKey, + ).not.toHaveBeenCalled(); expect( mockOctokit.rest.actions.createOrUpdateEnvironmentSecret, ).not.toHaveBeenCalled(); @@ -141,7 +143,9 @@ describe('github:environment:create examples', () => { expect( mockOctokit.rest.actions.createEnvironmentVariable, ).not.toHaveBeenCalled(); - expect(mockOctokit.rest.actions.getRepoPublicKey).not.toHaveBeenCalled(); + expect( + mockOctokit.rest.actions.getEnvironmentPublicKey, + ).not.toHaveBeenCalled(); expect( mockOctokit.rest.actions.createOrUpdateEnvironmentSecret, ).not.toHaveBeenCalled(); diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubEnvironment.test.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubEnvironment.test.ts index d158bc122e..8ec3d84e36 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubEnvironment.test.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubEnvironment.test.ts @@ -24,7 +24,7 @@ import { ScmIntegrations } from '@backstage/integration'; const mockOctokit = { rest: { actions: { - getRepoPublicKey: jest.fn(), + getEnvironmentPublicKey: jest.fn(), createEnvironmentVariable: jest.fn(), createOrUpdateEnvironmentSecret: jest.fn(), }, @@ -71,7 +71,7 @@ describe('github:environment:create', () => { }; beforeEach(() => { - mockOctokit.rest.actions.getRepoPublicKey.mockResolvedValue({ + mockOctokit.rest.actions.getEnvironmentPublicKey.mockResolvedValue({ data: { key: publicKey, key_id: 'keyid', diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubEnvironment.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubEnvironment.ts index 874798e4df..16859d9a26 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubEnvironment.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/githubEnvironment.ts @@ -167,10 +167,11 @@ export function createGithubEnvironmentAction(options: { } if (secrets) { - const publicKeyResponse = await client.rest.actions.getRepoPublicKey({ - owner: owner, - repo: repo, - }); + const publicKeyResponse = + await client.rest.actions.getEnvironmentPublicKey({ + repository_id: repository.data.id, + environment_name: name, + }); await Sodium.ready; const binaryKey = Sodium.from_base64( diff --git a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts index edef7cec5c..d91f3bf3a2 100644 --- a/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts +++ b/plugins/scaffolder-backend/src/scaffolder/actions/builtin/github/helpers.ts @@ -134,7 +134,7 @@ export async function createGithubRepoWithCollaboratorsAndTopics( secrets: { [key: string]: string } | undefined, logger: Logger, ) { - // eslint-disable-next-line testing-library/no-await-sync-query + // eslint-disable-next-line testing-library/no-await-sync-queries const user = await client.rest.users.getByUsername({ username: owner, }); @@ -409,7 +409,7 @@ async function validateAccessTeam(client: Octokit, access: string) { try { // Below rule disabled because of a 'getByName' check for a different library // incorrectly triggers here. - // eslint-disable-next-line testing-library/no-await-sync-query + // eslint-disable-next-line testing-library/no-await-sync-queries await client.rest.teams.getByName({ org, team_slug, diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts index 40ffdb17d4..6beb01e401 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/DatabaseTaskStore.ts @@ -23,10 +23,6 @@ import { ConflictError, NotFoundError } from '@backstage/errors'; import { Knex } from 'knex'; import { v4 as uuid } from 'uuid'; import { - SerializedTaskEvent, - SerializedTask, - TaskStatus, - TaskEventType, TaskStore, TaskStoreEmitOptions, TaskStoreListEventsOptions, @@ -34,6 +30,12 @@ import { TaskStoreCreateTaskResult, TaskStoreShutDownTaskOptions, } from './types'; +import { + SerializedTaskEvent, + SerializedTask, + TaskStatus, + TaskEventType, +} from '@backstage/plugin-scaffolder-node'; import { DateTime } from 'luxon'; const migrationsDir = resolvePackagePath( diff --git a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts index 58ea689260..139d91b7a2 100644 --- a/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts +++ b/plugins/scaffolder-backend/src/scaffolder/tasks/NunjucksWorkflowRunner.ts @@ -290,14 +290,15 @@ export class NunjucksWorkflowRunner implements WorkflowRunner { input: step.input ? this.render( step.input, - { ...context, ...i, ...task }, + { ...context, secrets: task.secrets ?? {}, ...i }, renderTemplate, ) : {}, })); for (const iteration of iterations) { - const actionId = - action.id + (iteration.each ? `[${iteration.each.key}]` : ''); + const actionId = `${action.id}${ + iteration.each ? `[${iteration.each.key}]` : '' + }`; if (action.schema?.input) { const validateResult = validateJsonSchema( diff --git a/plugins/scaffolder-backend/src/service/helpers.ts b/plugins/scaffolder-backend/src/service/helpers.ts index 97d4ab93aa..3412fec2d3 100644 --- a/plugins/scaffolder-backend/src/service/helpers.ts +++ b/plugins/scaffolder-backend/src/service/helpers.ts @@ -107,7 +107,3 @@ export async function findTemplate(options: { return template as TemplateEntityV1beta3; } - -export type TemplateTransform = ( - template: TemplateEntityV1beta3, -) => TemplateEntityV1beta3; diff --git a/plugins/scaffolder-backend/src/service/router.test.ts b/plugins/scaffolder-backend/src/service/router.test.ts index f5aa043ce0..7a0bcc6877 100644 --- a/plugins/scaffolder-backend/src/service/router.test.ts +++ b/plugins/scaffolder-backend/src/service/router.test.ts @@ -38,7 +38,8 @@ import { stringifyEntityRef, UserEntity, } from '@backstage/catalog-model'; -import { createRouter, DatabaseTaskStore, TaskBroker } from '../index'; +import { createRouter, DatabaseTaskStore } from '../index'; +import { TaskBroker } from '@backstage/plugin-scaffolder-node'; import { StorageTaskBroker } from '../scaffolder/tasks/StorageTaskBroker'; import { IdentityApiGetIdentityRequest, diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index 194120f0f9..de0087e7de 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -24,10 +24,10 @@ import { stringifyEntityRef, UserEntity, } from '@backstage/catalog-model'; -import { Config } from '@backstage/config'; +import { Config, readDurationFromConfig } from '@backstage/config'; import { InputError, NotFoundError, stringifyError } from '@backstage/errors'; import { ScmIntegrations } from '@backstage/integration'; -import { JsonObject, JsonValue } from '@backstage/types'; +import { HumanDuration, JsonObject, JsonValue } from '@backstage/types'; import { TaskSpec, TemplateEntityV1beta3, @@ -48,11 +48,14 @@ import Router from 'express-promise-router'; import { validate } from 'jsonschema'; import { Logger } from 'winston'; import { z } from 'zod'; -import { TemplateFilter, TemplateGlobal } from '../lib'; +import { + TaskBroker, + TemplateFilter, + TemplateGlobal, +} from '@backstage/plugin-scaffolder-node'; import { createBuiltinActions, DatabaseTaskStore, - TaskBroker, TaskWorker, TemplateActionRegistry, } from '../scaffolder'; @@ -74,6 +77,7 @@ import { PermissionRule, } from '@backstage/plugin-permission-node'; import { scaffolderActionRules, scaffolderTemplateRules } from './rules'; +import { Duration } from 'luxon'; /** * @@ -212,6 +216,17 @@ function buildDefaultIdentityClient(options: RouterOptions): IdentityApi { }; } +const readDuration = ( + config: Config, + key: string, + defaultValue: HumanDuration, +) => { + if (config.has(key)) { + return readDurationFromConfig(config, { key }); + } + return defaultValue; +}; + /** * A method to create a router for the scaffolder backend plugin. * @public @@ -256,11 +271,21 @@ export async function createRouter( if (scheduler && databaseTaskStore.listStaleTasks) { await scheduler.scheduleTask({ id: 'close_stale_tasks', - frequency: { cron: '*/5 * * * *' }, // every 5 minutes, also supports Duration + frequency: readDuration( + config, + 'scaffolder.taskTimeoutJanitorFrequency', + { + minutes: 5, + }, + ), timeout: { minutes: 15 }, fn: async () => { const { tasks } = await databaseTaskStore.listStaleTasks({ - timeoutS: 86400, + timeoutS: Duration.fromObject( + readDuration(config, 'scaffolder.taskTimeout', { + hours: 24, + }), + ).as('seconds'), }); for (const task of tasks) { diff --git a/plugins/scaffolder-common/CHANGELOG.md b/plugins/scaffolder-common/CHANGELOG.md index f040d3c03e..ed63af5d36 100644 --- a/plugins/scaffolder-common/CHANGELOG.md +++ b/plugins/scaffolder-common/CHANGELOG.md @@ -1,5 +1,16 @@ # @backstage/plugin-scaffolder-common +## 1.4.3 + +### Patch Changes + +- 2e0cef42ab: Add missing required property `type` in `Template.v1beta3.schema.json` schema +- 76d07da66a: Make it possible to define control buttons text (Back, Create, Review) per template +- Updated dependencies + - @backstage/plugin-permission-common@0.7.10 + - @backstage/catalog-model@1.4.3 + - @backstage/types@1.1.1 + ## 1.4.3-next.1 ### Patch Changes diff --git a/plugins/scaffolder-common/package.json b/plugins/scaffolder-common/package.json index 7d69e8a91e..fc189b3a48 100644 --- a/plugins/scaffolder-common/package.json +++ b/plugins/scaffolder-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-common", "description": "Common functionalities for the scaffolder, to be shared between scaffolder and scaffolder-backend plugin", - "version": "1.4.3-next.1", + "version": "1.4.3", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-node/CHANGELOG.md b/plugins/scaffolder-node/CHANGELOG.md index 9ea5d7c3a5..0d2c194e06 100644 --- a/plugins/scaffolder-node/CHANGELOG.md +++ b/plugins/scaffolder-node/CHANGELOG.md @@ -1,5 +1,32 @@ # @backstage/plugin-scaffolder-node +## 0.2.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-scaffolder-common@1.4.3 + +## 0.2.8 + +### Patch Changes + +- 8613ba3928: Switched to using `"exports"` field for `/alpha` subpath export. +- Updated dependencies + - @backstage/plugin-scaffolder-common@1.4.3 + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + ## 0.2.8-next.2 ### Patch Changes diff --git a/plugins/scaffolder-node/package.json b/plugins/scaffolder-node/package.json index 2e9a4956fa..f9506dcc96 100644 --- a/plugins/scaffolder-node/package.json +++ b/plugins/scaffolder-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-node", "description": "The plugin-scaffolder-node module for @backstage/plugin-scaffolder-backend", - "version": "0.2.8-next.2", + "version": "0.2.9-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/scaffolder-react/CHANGELOG.md b/plugins/scaffolder-react/CHANGELOG.md index 39193de200..a66eb35b63 100644 --- a/plugins/scaffolder-react/CHANGELOG.md +++ b/plugins/scaffolder-react/CHANGELOG.md @@ -1,5 +1,67 @@ # @backstage/plugin-scaffolder-react +## 1.6.2-next.0 + +### Patch Changes + +- e516bf4da8: Step titles in the Stepper are now clickable and redirect the user to the corresponding step, as an alternative to using the back buttons. +- aaa6fb3bc9: Minor updates for TypeScript 5.2.2+ compatibility +- 6cd12f277b: Updated dependency `@rjsf/utils` to `5.14.1`. + Updated dependency `@rjsf/core` to `5.14.1`. + Updated dependency `@rjsf/material-ui` to `5.14.1`. + Updated dependency `@rjsf/validator-ajv8` to `5.14.1`. +- 63c494ef22: Updated dependency `@rjsf/utils` to `5.14.2`. + Updated dependency `@rjsf/core` to `5.14.2`. + Updated dependency `@rjsf/material-ui` to `5.14.2`. + Updated dependency `@rjsf/validator-ajv8` to `5.14.2`. +- 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-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.7 + - @backstage/plugin-scaffolder-common@1.4.3 + +## 1.6.0 + +### Minor Changes + +- 3fdffbb699: Release design improvements for the `Scaffolder` plugin and support v5 of `@rjsf/*` libraries. + + This change should be non-breaking. If you're seeing typescript issues after migrating please [open an issue](https://github.com/backstage/backstage/issues/new/choose) + + The `next` versions like `createNextFieldExtension` and `NextScaffolderPage` have been promoted to the public interface under `createScaffolderFieldExtension` and `ScaffolderPage`, so any older imports which are no longer found will need updating from `@backstage/plugin-scaffolder/alpha` or `@backstage/plugin-scaffolder-react/alpha` will need to be imported from `@backstage/plugin-scaffolder` and `@backstage/plugin-scaffolder-react` respectively. + + The legacy versions are now available in `/alpha` under `createLegacyFieldExtension` and `LegacyScaffolderPage` if you're running into issues, but be aware that these will be removed in a next mainline release. + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 171a99816b: Fixed `backstage:featureFlag` in `scaffolder/next` by sorting out `manifest.steps`. +- c838da0edd: Updated dependency `@rjsf/utils` to `5.13.6`. + Updated dependency `@rjsf/core` to `5.13.6`. + Updated dependency `@rjsf/material-ui` to `5.13.6`. + Updated dependency `@rjsf/validator-ajv8` to `5.13.6`. +- 69c14904b6: Use `EntityRefLinks` with `hideIcons` property to avoid double icons +- 62b5922916: Internal theme type updates +- dda56ae265: Preserve step's time execution for a non-running task. +- 76d07da66a: Make it possible to define control buttons text (Back, Create, Review) per template +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/plugin-scaffolder-common@1.4.3 + - @backstage/core-plugin-api@1.8.0 + - @backstage/version-bridge@1.0.7 + - @backstage/theme@0.4.4 + - @backstage/catalog-client@1.4.6 + - @backstage/catalog-model@1.4.3 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + ## 1.6.0-next.2 ### Patch Changes diff --git a/plugins/scaffolder-react/alpha-api-report.md b/plugins/scaffolder-react/alpha-api-report.md index 3d9361bf18..615b54df84 100644 --- a/plugins/scaffolder-react/alpha-api-report.md +++ b/plugins/scaffolder-react/alpha-api-report.md @@ -290,6 +290,11 @@ export interface TemplateGroupsProps { templateFilter?: (entity: TemplateEntityV1beta3) => boolean; } +// @alpha +export const useFilteredSchemaProperties: ( + manifest: TemplateParameterSchema | undefined, +) => TemplateParameterSchema | undefined; + // @alpha export const useFormDataFromQuery: ( initialState?: Record, diff --git a/plugins/scaffolder-react/package.json b/plugins/scaffolder-react/package.json index 68eed3f431..22cf4ba5a2 100644 --- a/plugins/scaffolder-react/package.json +++ b/plugins/scaffolder-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder-react", "description": "A frontend library that helps other Backstage plugins interact with the Scaffolder", - "version": "1.6.0-next.2", + "version": "1.6.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -60,10 +60,10 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.61", "@react-hookz/web": "^20.0.0", - "@rjsf/core": "5.13.0", - "@rjsf/material-ui": "5.13.0", - "@rjsf/utils": "5.13.0", - "@rjsf/validator-ajv8": "5.13.0", + "@rjsf/core": "5.14.2", + "@rjsf/material-ui": "5.14.2", + "@rjsf/utils": "5.14.2", + "@rjsf/validator-ajv8": "5.14.2", "@types/json-schema": "^7.0.9", "@types/react": "^16.13.1 || ^17.0.0", "classnames": "^2.2.6", diff --git a/plugins/scaffolder-react/src/next/components/Stepper/Stepper.test.tsx b/plugins/scaffolder-react/src/next/components/Stepper/Stepper.test.tsx index 34243e232d..2bb66fd782 100644 --- a/plugins/scaffolder-react/src/next/components/Stepper/Stepper.test.tsx +++ b/plugins/scaffolder-react/src/next/components/Stepper/Stepper.test.tsx @@ -112,6 +112,54 @@ describe('Stepper', () => { ); }); + it('should remember the state of the form when cycling through the pages by directly clicking on the step labels', async () => { + const manifest: TemplateParameterSchema = { + steps: [ + { + title: 'Step 1', + schema: { + properties: { + name: { + type: 'string', + }, + }, + }, + }, + { + title: 'Step 2', + schema: { + properties: { + description: { + type: 'string', + }, + }, + }, + }, + ], + title: 'React JSON Schema Form Test', + }; + + const { getByRole, getByLabelText } = await renderInTestApp( + , + ); + + await fireEvent.change(getByRole('textbox', { name: 'name' }), { + target: { value: 'im a test value' }, + }); + + await act(async () => { + await fireEvent.click(getByRole('button', { name: 'Next' })); + }); + + await act(async () => { + await fireEvent.click(getByLabelText('Step 1')); + }); + + expect(getByRole('textbox', { name: 'name' })).toHaveValue( + 'im a test value', + ); + }); + it('should merge nested formData correctly in multiple steps', async () => { const Repo = ({ onChange, diff --git a/plugins/scaffolder-react/src/next/components/Stepper/Stepper.tsx b/plugins/scaffolder-react/src/next/components/Stepper/Stepper.tsx index 9a333944b9..5aaf76316c 100644 --- a/plugins/scaffolder-react/src/next/components/Stepper/Stepper.tsx +++ b/plugins/scaffolder-react/src/next/components/Stepper/Stepper.tsx @@ -191,11 +191,22 @@ export const Stepper = (stepperProps: StepperProps) => { <> {isValidating && } - {steps.map((step, index) => ( - - {step.title} - - ))} + {steps.map((step, index) => { + const isAllowedLabelClick = activeStep > index; + return ( + + { + if (isAllowedLabelClick) setActiveStep(index); + }} + > + {step.title} + + + ); + })} Review diff --git a/plugins/scaffolder-react/src/next/components/TemplateCard/CardHeader.tsx b/plugins/scaffolder-react/src/next/components/TemplateCard/CardHeader.tsx index 608af1a0bf..1180c8f106 100644 --- a/plugins/scaffolder-react/src/next/components/TemplateCard/CardHeader.tsx +++ b/plugins/scaffolder-react/src/next/components/TemplateCard/CardHeader.tsx @@ -15,14 +15,13 @@ */ import React from 'react'; -import { makeStyles, useTheme } from '@material-ui/core'; +import { Theme, makeStyles, useTheme } from '@material-ui/core'; import { ItemCardHeader } from '@backstage/core-components'; -import { BackstageTheme } from '@backstage/theme'; import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common'; import { FavoriteEntity } from '@backstage/plugin-catalog-react'; const useStyles = makeStyles< - BackstageTheme, + Theme, { cardFontColor: string; cardBackgroundImage: string; @@ -55,7 +54,7 @@ export const CardHeader = (props: CardHeaderProps) => { spec: { type }, }, } = props; - const { getPageTheme } = useTheme(); + const { getPageTheme } = useTheme(); const themeForType = getPageTheme({ themeId: type }); const styles = useStyles({ diff --git a/plugins/scaffolder-react/src/next/components/TemplateCard/CardLink.tsx b/plugins/scaffolder-react/src/next/components/TemplateCard/CardLink.tsx index 9bdb3cf7fb..839d6c7ac1 100644 --- a/plugins/scaffolder-react/src/next/components/TemplateCard/CardLink.tsx +++ b/plugins/scaffolder-react/src/next/components/TemplateCard/CardLink.tsx @@ -13,8 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { IconComponent } from '@backstage/core-plugin-api'; -import { BackstageTheme } from '@backstage/theme'; import { Link } from '@backstage/core-components'; import { makeStyles } from '@material-ui/core'; import React from 'react'; @@ -25,7 +25,7 @@ interface CardLinkProps { url: string; } -const useStyles = makeStyles(() => ({ +const useStyles = makeStyles(() => ({ linkText: { display: 'inline-flex', alignItems: 'center', diff --git a/plugins/scaffolder-react/src/next/components/TemplateCard/TemplateCard.tsx b/plugins/scaffolder-react/src/next/components/TemplateCard/TemplateCard.tsx index 2a0a34823d..7850137945 100644 --- a/plugins/scaffolder-react/src/next/components/TemplateCard/TemplateCard.tsx +++ b/plugins/scaffolder-react/src/next/components/TemplateCard/TemplateCard.tsx @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { RELATION_OWNED_BY } from '@backstage/catalog-model'; import { MarkdownContent, UserIcon } from '@backstage/core-components'; import { IconComponent, useApp } from '@backstage/core-plugin-api'; @@ -21,7 +22,6 @@ import { getEntityRelations, } from '@backstage/plugin-catalog-react'; import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common'; -import { BackstageTheme } from '@backstage/theme'; import { Box, Card, @@ -32,13 +32,14 @@ import { Button, Grid, makeStyles, + Theme, } from '@material-ui/core'; import LanguageIcon from '@material-ui/icons/Language'; import React from 'react'; import { CardHeader } from './CardHeader'; import { CardLink } from './CardLink'; -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ box: { overflow: 'hidden', textOverflow: 'ellipsis', @@ -174,6 +175,7 @@ export const TemplateCard = (props: TemplateCardProps) => { style={{ marginLeft: '8px' }} entityRefs={ownedByRelations} defaultKind="Group" + hideIcons /> )} diff --git a/plugins/scaffolder-react/src/next/components/TemplateCategoryPicker/TemplateCategoryPicker.tsx b/plugins/scaffolder-react/src/next/components/TemplateCategoryPicker/TemplateCategoryPicker.tsx index b850c3bcfe..eba6aebf93 100644 --- a/plugins/scaffolder-react/src/next/components/TemplateCategoryPicker/TemplateCategoryPicker.tsx +++ b/plugins/scaffolder-react/src/next/components/TemplateCategoryPicker/TemplateCategoryPicker.tsx @@ -65,7 +65,7 @@ export const TemplateCategoryPicker = () => { > Categories - multiple id="categories-picker" options={availableTypes} diff --git a/plugins/scaffolder-react/src/next/components/Workflow/Workflow.tsx b/plugins/scaffolder-react/src/next/components/Workflow/Workflow.tsx index e7c56378a7..c6030930c5 100644 --- a/plugins/scaffolder-react/src/next/components/Workflow/Workflow.tsx +++ b/plugins/scaffolder-react/src/next/components/Workflow/Workflow.tsx @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import React, { useEffect } from 'react'; import { Content, @@ -22,14 +23,14 @@ import { } from '@backstage/core-components'; import { stringifyEntityRef } from '@backstage/catalog-model'; import { makeStyles } from '@material-ui/core'; -import { BackstageTheme } from '@backstage/theme'; import { errorApiRef, useApi } from '@backstage/core-plugin-api'; import { useTemplateParameterSchema } from '../../hooks/useTemplateParameterSchema'; import { Stepper, type StepperProps } from '../Stepper/Stepper'; import { SecretsContextProvider } from '../../../secrets/SecretsContext'; +import { useFilteredSchemaProperties } from '../../hooks/useFilteredSchemaProperties'; import { ReviewStepProps } from '@backstage/plugin-scaffolder-react'; -const useStyles = makeStyles(() => ({ +const useStyles = makeStyles({ markdown: { /** to make the styles for React Markdown not leak into the description */ '& :first-child': { @@ -39,7 +40,7 @@ const useStyles = makeStyles(() => ({ marginBottom: 0, }, }, -})); +}); /** * @alpha @@ -81,6 +82,8 @@ export const Workflow = (workflowProps: WorkflowProps): JSX.Element | null => { const { loading, manifest, error } = useTemplateParameterSchema(templateRef); + const sortedManifest = useFilteredSchemaProperties(manifest); + useEffect(() => { if (error) { errorApi.post(new Error(`Failed to load template, ${error}`)); @@ -94,19 +97,25 @@ export const Workflow = (workflowProps: WorkflowProps): JSX.Element | null => { return ( {loading && } - {manifest && ( + {sortedManifest && ( } noPadding titleTypographyProps={{ component: 'h2' }} > - + )} diff --git a/plugins/scaffolder-react/src/next/hooks/index.ts b/plugins/scaffolder-react/src/next/hooks/index.ts index ca8ce10eff..63f8cda4e9 100644 --- a/plugins/scaffolder-react/src/next/hooks/index.ts +++ b/plugins/scaffolder-react/src/next/hooks/index.ts @@ -19,3 +19,4 @@ export { type ParsedTemplateSchema, } from './useTemplateSchema'; export { useTemplateParameterSchema } from './useTemplateParameterSchema'; +export { useFilteredSchemaProperties } from './useFilteredSchemaProperties'; diff --git a/plugins/scaffolder-react/src/next/hooks/useFilteredSchemaProperties.test.tsx b/plugins/scaffolder-react/src/next/hooks/useFilteredSchemaProperties.test.tsx new file mode 100644 index 0000000000..3e568fa7bd --- /dev/null +++ b/plugins/scaffolder-react/src/next/hooks/useFilteredSchemaProperties.test.tsx @@ -0,0 +1,232 @@ +/* + * Copyright 2023 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { renderHook } from '@testing-library/react'; +import { useFilteredSchemaProperties } from './useFilteredSchemaProperties'; +import { TemplateParameterSchema } from '../../types'; +import { TestApiProvider } from '@backstage/test-utils'; +import React from 'react'; +import { featureFlagsApiRef } from '@backstage/core-plugin-api'; + +const mockFeatureFlagApi = { + isActive: jest.fn(), +}; + +describe('useFilteredSchemaProperties', () => { + it('should return the same manifest if no feature flag is set', () => { + mockFeatureFlagApi.isActive.mockReturnValue(true); + + const manifest: TemplateParameterSchema = { + title: 'Test Action template', + description: 'scaffolder v1beta3 template demo', + steps: [ + { + title: 'Fill in some steps', + schema: { + type: 'object', + 'backstage:featureFlag': 'experimental-feature', + properties: { + name: { + description: 'Unique name of the component', + title: 'Name', + type: 'string', + 'ui:autofocus': true, + }, + }, + }, + }, + { + title: 'Choose a location', + schema: { + type: 'object', + properties: { + repoUrl: { + type: 'string', + title: 'Repository Location', + 'ui:field': 'RepoUrlPicker', + }, + }, + }, + }, + ], + }; + + const filteredManifest = renderHook( + () => useFilteredSchemaProperties(manifest), + { + wrapper: ({ children }) => ( + + {children} + + ), + }, + ); + + expect(filteredManifest.result.current).toEqual(manifest); + }); + + it('should hide individual fields from steps of template', () => { + mockFeatureFlagApi.isActive.mockReturnValue(false); + + const manifest: TemplateParameterSchema = { + title: 'Test Action template', + description: 'scaffolder v1beta3 template demo', + steps: [ + { + title: 'Fill in some steps', + schema: { + type: 'object', + properties: { + name: { + description: 'Unique name of the component', + title: 'Name', + type: 'string', + 'ui:autofocus': true, + }, + }, + }, + }, + { + title: 'Choose a location', + schema: { + type: 'object', + properties: { + repoUrl: { + type: 'string', + title: 'Repository Location', + 'ui:field': 'RepoUrlPicker', + 'backstage:featureFlag': 'experimental-feature', + }, + }, + }, + }, + ], + }; + + const filteredManifest = renderHook( + () => useFilteredSchemaProperties(manifest), + { + wrapper: ({ children }) => ( + + {children} + + ), + }, + ); + + const expectedManifest: TemplateParameterSchema = { + title: 'Test Action template', + description: 'scaffolder v1beta3 template demo', + steps: [ + { + title: 'Fill in some steps', + schema: { + type: 'object', + properties: { + name: { + description: 'Unique name of the component', + title: 'Name', + type: 'string', + 'ui:autofocus': true, + }, + }, + }, + }, + { + title: 'Choose a location', + schema: { + type: 'object', + properties: {}, + }, + }, + ], + }; + + expect(filteredManifest.result.current).toEqual(expectedManifest); + }); + + it('should hide "Fill in some steps" from steps of template', () => { + mockFeatureFlagApi.isActive.mockReturnValue(false); + + const manifest: TemplateParameterSchema = { + title: 'Test Action template', + description: 'scaffolder v1beta3 template demo', + steps: [ + { + title: 'Fill in some steps', + schema: { + type: 'object', + 'backstage:featureFlag': 'experimental-feature', + properties: { + name: { + description: 'Unique name of the component', + title: 'Name', + type: 'string', + 'ui:autofocus': true, + }, + }, + }, + }, + { + title: 'Choose a location', + schema: { + type: 'object', + properties: { + repoUrl: { + type: 'string', + title: 'Repository Location', + 'ui:field': 'RepoUrlPicker', + }, + }, + }, + }, + ], + }; + + const filteredManifest = renderHook( + () => useFilteredSchemaProperties(manifest), + { + wrapper: ({ children }) => ( + + {children} + + ), + }, + ); + + const expectedManifest: TemplateParameterSchema = { + title: 'Test Action template', + description: 'scaffolder v1beta3 template demo', + steps: [ + { + title: 'Choose a location', + schema: { + type: 'object', + properties: { + repoUrl: { + type: 'string', + title: 'Repository Location', + 'ui:field': 'RepoUrlPicker', + }, + }, + }, + }, + ], + }; + + expect(filteredManifest.result.current).toEqual(expectedManifest); + }); +}); diff --git a/plugins/scaffolder-react/src/next/hooks/useFilteredSchemaProperties.ts b/plugins/scaffolder-react/src/next/hooks/useFilteredSchemaProperties.ts new file mode 100644 index 0000000000..be6f581f87 --- /dev/null +++ b/plugins/scaffolder-react/src/next/hooks/useFilteredSchemaProperties.ts @@ -0,0 +1,76 @@ +/* + * 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 cloneDeep from 'lodash/cloneDeep'; +import { useApi, featureFlagsApiRef } from '@backstage/core-plugin-api'; +import { TemplateParameterSchema } from '@backstage/plugin-scaffolder-react'; + +/** + * Returns manifest of software templates with steps without a featureFlag tag. + * @alpha + */ + +export const useFilteredSchemaProperties = ( + manifest: TemplateParameterSchema | undefined, +): TemplateParameterSchema | undefined => { + const featureFlagKey = 'backstage:featureFlag'; + const featureFlagApi = useApi(featureFlagsApiRef); + + if (!manifest) { + return undefined; + } + + const filteredSteps = manifest?.steps + .filter(step => { + const featureFlag = step.schema[featureFlagKey]; + return ( + typeof featureFlag !== 'string' || featureFlagApi.isActive(featureFlag) + ); + }) + .map(step => { + const filteredStep = cloneDeep(step); + const removedPropertyKeys: Array = []; + if (filteredStep.schema.properties) { + filteredStep.schema.properties = Object.fromEntries( + Object.entries(filteredStep.schema.properties).filter( + ([key, value]) => { + if (value[featureFlagKey]) { + if (featureFlagApi.isActive(value[featureFlagKey])) { + return true; + } + + removedPropertyKeys.push(key); + return false; + } + return true; + }, + ), + ); + + // remove the feature flag property key from required if they are not active + filteredStep.schema.required = Array.isArray( + filteredStep.schema.required, + ) + ? filteredStep.schema.required?.filter( + r => !removedPropertyKeys.includes(r as string), + ) + : filteredStep.schema.required; + } + + return filteredStep; + }); + + return { ...manifest, steps: filteredSteps }; +}; diff --git a/plugins/scaffolder/CHANGELOG.md b/plugins/scaffolder/CHANGELOG.md index 1bafc76774..547e59f7f3 100644 --- a/plugins/scaffolder/CHANGELOG.md +++ b/plugins/scaffolder/CHANGELOG.md @@ -1,5 +1,78 @@ # @backstage/plugin-scaffolder +## 1.16.2-next.0 + +### Patch Changes + +- 6806d10be3: Added `headerOptions` to `TemplateListPage` to optionally override default values. + Changed `themeId` of TemplateListPage from `website` to `home`. +- aaa6fb3bc9: Minor updates for TypeScript 5.2.2+ compatibility +- 6cd12f277b: Updated dependency `@rjsf/utils` to `5.14.1`. + Updated dependency `@rjsf/core` to `5.14.1`. + Updated dependency `@rjsf/material-ui` to `5.14.1`. + Updated dependency `@rjsf/validator-ajv8` to `5.14.1`. +- 63c494ef22: Updated dependency `@rjsf/utils` to `5.14.2`. + Updated dependency `@rjsf/core` to `5.14.2`. + Updated dependency `@rjsf/material-ui` to `5.14.2`. + Updated dependency `@rjsf/validator-ajv8` to `5.14.2`. +- 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-scaffolder-react@1.6.2-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/plugin-permission-react@0.4.18-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-catalog-common@1.0.18 + - @backstage/plugin-scaffolder-common@1.4.3 + +## 1.16.0 + +### Minor Changes + +- f28c11743a: Add a possibility to use a formatter on a warning panel. Applied it for a scaffolder template +- 3fdffbb699: Release design improvements for the `Scaffolder` plugin and support v5 of `@rjsf/*` libraries. + + This change should be non-breaking. If you're seeing typescript issues after migrating please [open an issue](https://github.com/backstage/backstage/issues/new/choose) + + The `next` versions like `createNextFieldExtension` and `NextScaffolderPage` have been promoted to the public interface under `createScaffolderFieldExtension` and `ScaffolderPage`, so any older imports which are no longer found will need updating from `@backstage/plugin-scaffolder/alpha` or `@backstage/plugin-scaffolder-react/alpha` will need to be imported from `@backstage/plugin-scaffolder` and `@backstage/plugin-scaffolder-react` respectively. + + The legacy versions are now available in `/alpha` under `createLegacyFieldExtension` and `LegacyScaffolderPage` if you're running into issues, but be aware that these will be removed in a next mainline release. + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 69ee8d75f4: Remove `button` prop from used MaterialUI `MenuItem` component fixing incompatibility with MaterialUI v5. +- c838da0edd: Updated dependency `@rjsf/utils` to `5.13.6`. + Updated dependency `@rjsf/core` to `5.13.6`. + Updated dependency `@rjsf/material-ui` to `5.13.6`. + Updated dependency `@rjsf/validator-ajv8` to `5.13.6`. +- 26e4d916d5: Title and description in RepoUrlPicker are now correctly displayed. +- 69c14904b6: Use `EntityRefLinks` with `hideIcons` property to avoid double icons +- 62b5922916: Internal theme type updates +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/plugin-scaffolder-common@1.4.3 + - @backstage/integration@1.7.2 + - @backstage/integration-react@1.1.21 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-permission-react@0.4.17 + - @backstage/plugin-scaffolder-react@1.6.0 + - @backstage/theme@0.4.4 + - @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-catalog-common@1.0.18 + ## 1.16.0-next.2 ### Minor Changes diff --git a/plugins/scaffolder/alpha-api-report.md b/plugins/scaffolder/alpha-api-report.md index 55d14bff75..e659b8f30d 100644 --- a/plugins/scaffolder/alpha-api-report.md +++ b/plugins/scaffolder/alpha-api-report.md @@ -70,6 +70,11 @@ export type TemplateListPageProps = { actions?: boolean; tasks?: boolean; }; + headerOptions?: { + pageTitleOverride?: string; + title?: string; + subtitle?: string; + }; }; // @alpha (undocumented) diff --git a/plugins/scaffolder/package.json b/plugins/scaffolder/package.json index 1b99086906..17d4b131b9 100644 --- a/plugins/scaffolder/package.json +++ b/plugins/scaffolder/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-scaffolder", "description": "The Backstage plugin that helps you create new things", - "version": "1.16.0-next.2", + "version": "1.16.2-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -68,10 +68,10 @@ "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.61", "@react-hookz/web": "^20.0.0", - "@rjsf/core": "5.13.0", - "@rjsf/material-ui": "5.13.0", - "@rjsf/utils": "5.13.0", - "@rjsf/validator-ajv8": "5.13.0", + "@rjsf/core": "5.14.2", + "@rjsf/material-ui": "5.14.2", + "@rjsf/utils": "5.14.2", + "@rjsf/validator-ajv8": "5.14.2", "@types/react": "^16.13.1 || ^17.0.0", "@uiw/react-codemirror": "^4.9.3", "classnames": "^2.2.6", diff --git a/plugins/scaffolder/src/components/ListTasksPage/OwnerListPicker.tsx b/plugins/scaffolder/src/components/ListTasksPage/OwnerListPicker.tsx index ee383569ee..fdb13b68a0 100644 --- a/plugins/scaffolder/src/components/ListTasksPage/OwnerListPicker.tsx +++ b/plugins/scaffolder/src/components/ListTasksPage/OwnerListPicker.tsx @@ -21,7 +21,6 @@ import { ListItemText, makeStyles, MenuItem, - Theme, Typography, } from '@material-ui/core'; import SettingsIcon from '@material-ui/icons/Settings'; @@ -29,7 +28,7 @@ import React, { Fragment } from 'react'; import AllIcon from '@material-ui/icons/FontDownload'; -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ root: { backgroundColor: 'rgba(0, 0, 0, .11)', @@ -111,7 +110,6 @@ export const OwnerListPicker = (props: { {group.items.map(item => ( onSelectOwner(item.id as 'owned' | 'all')} diff --git a/plugins/scaffolder/src/components/OngoingTask/ContextMenu.tsx b/plugins/scaffolder/src/components/OngoingTask/ContextMenu.tsx index 166c26e854..1612b943c2 100644 --- a/plugins/scaffolder/src/components/OngoingTask/ContextMenu.tsx +++ b/plugins/scaffolder/src/components/OngoingTask/ContextMenu.tsx @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; + import { IconButton, ListItemIcon, @@ -22,6 +22,7 @@ import { MenuItem, MenuList, Popover, + Theme, useTheme, } from '@material-ui/core'; import { useAsync } from '@react-hookz/web'; @@ -44,7 +45,7 @@ type ContextMenuProps = { taskId?: string; }; -const useStyles = makeStyles(() => ({ +const useStyles = makeStyles(() => ({ button: { color: ({ fontColor }) => fontColor, }, @@ -60,7 +61,7 @@ export const ContextMenu = (props: ContextMenuProps) => { onToggleButtonBar, taskId, } = props; - const { getPageTheme } = useTheme(); + const { getPageTheme } = useTheme(); const pageTheme = getPageTheme({ themeId: 'website' }); const classes = useStyles({ fontColor: pageTheme.fontColor }); const scaffolderApi = useApi(scaffolderApiRef); diff --git a/plugins/scaffolder/src/components/Router/Router.tsx b/plugins/scaffolder/src/components/Router/Router.tsx index dede51d676..bdda92c0ef 100644 --- a/plugins/scaffolder/src/components/Router/Router.tsx +++ b/plugins/scaffolder/src/components/Router/Router.tsx @@ -133,6 +133,7 @@ export const Router = (props: PropsWithChildren) => { contextMenu={props.contextMenu} groups={props.groups} templateFilter={props.templateFilter} + headerOptions={props.headerOptions} /> } /> diff --git a/plugins/scaffolder/src/components/TemplateTypePicker/TemplateTypePicker.tsx b/plugins/scaffolder/src/components/TemplateTypePicker/TemplateTypePicker.tsx index 88ddef2b92..0eed8cde75 100644 --- a/plugins/scaffolder/src/components/TemplateTypePicker/TemplateTypePicker.tsx +++ b/plugins/scaffolder/src/components/TemplateTypePicker/TemplateTypePicker.tsx @@ -65,7 +65,7 @@ export const TemplateTypePicker = () => { > Categories - id="categories-picker" multiple options={availableTypes} diff --git a/plugins/scaffolder/src/legacy/ScaffolderPage/ScaffolderPageContextMenu.tsx b/plugins/scaffolder/src/legacy/ScaffolderPage/ScaffolderPageContextMenu.tsx index 5558b314da..f6151c227b 100644 --- a/plugins/scaffolder/src/legacy/ScaffolderPage/ScaffolderPageContextMenu.tsx +++ b/plugins/scaffolder/src/legacy/ScaffolderPage/ScaffolderPageContextMenu.tsx @@ -15,7 +15,6 @@ */ import { useRouteRef } from '@backstage/core-plugin-api'; -import { BackstageTheme } from '@backstage/theme'; import IconButton from '@material-ui/core/IconButton'; import ListItemIcon from '@material-ui/core/ListItemIcon'; import ListItemText from '@material-ui/core/ListItemText'; @@ -35,7 +34,7 @@ import { scaffolderListTaskRouteRef, } from '../../routes'; -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ button: { color: theme.page.fontColor, }, diff --git a/plugins/scaffolder/src/legacy/TemplateCard/TemplateCard.tsx b/plugins/scaffolder/src/legacy/TemplateCard/TemplateCard.tsx index d35636f507..80f719bd36 100644 --- a/plugins/scaffolder/src/legacy/TemplateCard/TemplateCard.tsx +++ b/plugins/scaffolder/src/legacy/TemplateCard/TemplateCard.tsx @@ -45,7 +45,6 @@ import { getEntitySourceLocation, } from '@backstage/plugin-catalog-react'; import { TemplateEntityV1beta3 } from '@backstage/plugin-scaffolder-common'; -import { BackstageTheme } from '@backstage/theme'; import { Box, Card, @@ -55,6 +54,7 @@ import { Chip, IconButton, makeStyles, + Theme, Tooltip, Typography, useTheme, @@ -65,7 +65,7 @@ import React from 'react'; import { selectedTemplateRouteRef, viewTechDocRouteRef } from '../../routes'; const useStyles = makeStyles< - BackstageTheme, + Theme, { fontColor: string; backgroundImage: string } >(theme => ({ cardHeader: { @@ -179,7 +179,7 @@ const DeprecationWarning = () => { export const TemplateCard = ({ template, deprecated }: TemplateCardProps) => { const app = useApp(); - const backstageTheme = useTheme(); + const backstageTheme = useTheme(); const templateRoute = useRouteRef(selectedTemplateRouteRef); const templateProps = getTemplateCardProps(template); const ownedByRelations = getEntityRelations( @@ -243,7 +243,11 @@ export const TemplateCard = ({ template, deprecated }: TemplateCardProps) => { Owner - + { const { allowed } = usePermission({ permission: catalogEntityCreatePermission, }); - const isXSScreen = useMediaQuery(theme => + const isXSScreen = useMediaQuery(theme => theme.breakpoints.down('xs'), ); diff --git a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx index 44390bc03c..b1508e43fc 100644 --- a/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx +++ b/plugins/scaffolder/src/next/TemplateListPage/TemplateListPage.tsx @@ -67,6 +67,11 @@ export type TemplateListPageProps = { actions?: boolean; tasks?: boolean; }; + headerOptions?: { + pageTitleOverride?: string; + title?: string; + subtitle?: string; + }; }; const defaultGroup: TemplateGroupFilter = { @@ -93,6 +98,7 @@ export const TemplateListPage = (props: TemplateListPageProps) => { TemplateCardComponent, groups: givenGroups = [], templateFilter, + headerOptions, } = props; const navigate = useNavigate(); const editorLink = useRouteRef(editRouteRef); @@ -151,11 +157,12 @@ export const TemplateListPage = (props: TemplateListPageProps) => { return ( - +
diff --git a/plugins/search-backend-module-catalog/CHANGELOG.md b/plugins/search-backend-module-catalog/CHANGELOG.md index 56da88f30b..76662cfb76 100644 --- a/plugins/search-backend-module-catalog/CHANGELOG.md +++ b/plugins/search-backend-module-catalog/CHANGELOG.md @@ -1,5 +1,41 @@ # @backstage/plugin-search-backend-module-catalog +## 0.1.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/plugin-search-backend-node@1.2.12-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/plugin-catalog-common@1.0.18 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-search-common@1.2.8 + +## 0.1.11 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/plugin-search-backend-node@1.2.11 + - @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/plugin-permission-common@0.7.10 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-search-common@1.2.8 + ## 0.1.11-next.2 ### Patch Changes diff --git a/plugins/search-backend-module-catalog/package.json b/plugins/search-backend-module-catalog/package.json index c6479f1c30..ebab4143cd 100644 --- a/plugins/search-backend-module-catalog/package.json +++ b/plugins/search-backend-module-catalog/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-catalog", "description": "A module for the search backend that exports catalog modules", - "version": "0.1.11-next.2", + "version": "0.1.12-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-elasticsearch/CHANGELOG.md b/plugins/search-backend-module-elasticsearch/CHANGELOG.md index 15bb2e81ec..1fa95afa0d 100644 --- a/plugins/search-backend-module-elasticsearch/CHANGELOG.md +++ b/plugins/search-backend-module-elasticsearch/CHANGELOG.md @@ -1,5 +1,30 @@ # @backstage/plugin-search-backend-module-elasticsearch +## 1.3.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-search-backend-node@1.2.12-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/integration-aws-node@0.1.8 + - @backstage/plugin-search-common@1.2.8 + +## 1.3.10 + +### Patch Changes + +- 006df4a581: Support AWS OpenSearch Serverless search backend. Does not support `_refresh` endpoint. +- Updated dependencies + - @backstage/plugin-search-backend-node@1.2.11 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/integration-aws-node@0.1.8 + - @backstage/config@1.1.1 + - @backstage/plugin-search-common@1.2.8 + ## 1.3.10-next.2 ### Patch Changes diff --git a/plugins/search-backend-module-elasticsearch/package.json b/plugins/search-backend-module-elasticsearch/package.json index b8cfac9bc4..04701c8849 100644 --- a/plugins/search-backend-module-elasticsearch/package.json +++ b/plugins/search-backend-module-elasticsearch/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-elasticsearch", "description": "A module for the search backend that implements search using ElasticSearch", - "version": "1.3.10-next.2", + "version": "1.3.11-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-explore/CHANGELOG.md b/plugins/search-backend-module-explore/CHANGELOG.md index e685b969e4..7d0aba4645 100644 --- a/plugins/search-backend-module-explore/CHANGELOG.md +++ b/plugins/search-backend-module-explore/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-search-backend-module-explore +## 0.1.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-search-backend-node@1.2.12-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/plugin-explore-common@0.0.2 + - @backstage/plugin-search-common@1.2.8 + +## 0.1.11 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-node@1.2.11 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/config@1.1.1 + - @backstage/plugin-explore-common@0.0.2 + - @backstage/plugin-search-common@1.2.8 + ## 0.1.11-next.2 ### Patch Changes diff --git a/plugins/search-backend-module-explore/package.json b/plugins/search-backend-module-explore/package.json index 004f43d69c..9dcdf01368 100644 --- a/plugins/search-backend-module-explore/package.json +++ b/plugins/search-backend-module-explore/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-explore", "description": "A module for the search backend that exports explore modules", - "version": "0.1.11-next.2", + "version": "0.1.12-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-pg/CHANGELOG.md b/plugins/search-backend-module-pg/CHANGELOG.md index 93ad88d113..99f0a42a8f 100644 --- a/plugins/search-backend-module-pg/CHANGELOG.md +++ b/plugins/search-backend-module-pg/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-search-backend-module-pg +## 0.5.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-search-backend-node@1.2.12-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/plugin-search-common@1.2.8 + +## 0.5.16 + +### Patch Changes + +- 2b4cd1ccae: Optimize outdated documents deletion logic in PgSearchEngine DatabaseDocumentStore which significantly reduces cost on large tables +- 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-search-backend-node@1.2.11 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/config@1.1.1 + - @backstage/plugin-search-common@1.2.8 + ## 0.5.16-next.2 ### Patch Changes diff --git a/plugins/search-backend-module-pg/package.json b/plugins/search-backend-module-pg/package.json index a08cbd8a09..8cdb82b04a 100644 --- a/plugins/search-backend-module-pg/package.json +++ b/plugins/search-backend-module-pg/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-pg", "description": "A module for the search backend that implements search using PostgreSQL", - "version": "0.5.16-next.2", + "version": "0.5.17-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-stack-overflow-collator/CHANGELOG.md b/plugins/search-backend-module-stack-overflow-collator/CHANGELOG.md index 2c5acb8698..5688dd774c 100644 --- a/plugins/search-backend-module-stack-overflow-collator/CHANGELOG.md +++ b/plugins/search-backend-module-stack-overflow-collator/CHANGELOG.md @@ -1,5 +1,33 @@ # @backstage/plugin-search-backend-module-stack-overflow-collator +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-search-backend-node@1.2.12-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/plugin-search-common@1.2.8 + +## 0.1.0 + +### Minor Changes + +- 46f0f1700e: Extract a package for the Stack Overflow new backend system plugin. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-search-backend-node@1.2.11 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/config@1.1.1 + - @backstage/plugin-search-common@1.2.8 + ## 0.1.0-next.2 ### Patch Changes diff --git a/plugins/search-backend-module-stack-overflow-collator/package.json b/plugins/search-backend-module-stack-overflow-collator/package.json index 47de2e731f..6ecefe5951 100644 --- a/plugins/search-backend-module-stack-overflow-collator/package.json +++ b/plugins/search-backend-module-stack-overflow-collator/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-stack-overflow-collator", "description": "A module for the search backend that exports stack overflow modules", - "version": "0.1.0-next.2", + "version": "0.1.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-module-techdocs/CHANGELOG.md b/plugins/search-backend-module-techdocs/CHANGELOG.md index d3fdb83680..45753237fe 100644 --- a/plugins/search-backend-module-techdocs/CHANGELOG.md +++ b/plugins/search-backend-module-techdocs/CHANGELOG.md @@ -1,5 +1,42 @@ # @backstage/plugin-search-backend-module-techdocs +## 0.1.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-techdocs-node@1.11.0-next.0 + - @backstage/plugin-catalog-node@1.5.1-next.0 + - @backstage/plugin-search-backend-node@1.2.12-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/plugin-catalog-common@1.0.18 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-search-common@1.2.8 + +## 0.1.11 + +### Patch Changes + +- c437253b7a: The process of adding or modifying fields in the techdocs search index has been simplified. For more details, see [How to customize fields in the Software Catalog or TechDocs index](https://backstage.io/docs/features/search/how-to-guides.md#how-to-customize-fields-in-the-software-catalog-or-techdocs-index). +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/plugin-techdocs-node@1.10.0 + - @backstage/plugin-search-backend-node@1.2.11 + - @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/plugin-permission-common@0.7.10 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-search-common@1.2.8 + ## 0.1.11-next.2 ### Patch Changes diff --git a/plugins/search-backend-module-techdocs/package.json b/plugins/search-backend-module-techdocs/package.json index b7f7cb0476..b40ca5a9a0 100644 --- a/plugins/search-backend-module-techdocs/package.json +++ b/plugins/search-backend-module-techdocs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-module-techdocs", "description": "A module for the search backend that exports techdocs modules", - "version": "0.1.11-next.2", + "version": "0.1.12-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend-node/CHANGELOG.md b/plugins/search-backend-node/CHANGELOG.md index f6a93d160a..c71883fce8 100644 --- a/plugins/search-backend-node/CHANGELOG.md +++ b/plugins/search-backend-node/CHANGELOG.md @@ -1,5 +1,32 @@ # @backstage/plugin-search-backend-node +## 1.2.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-search-common@1.2.8 + +## 1.2.11 + +### Patch Changes + +- b168d7e7ea: Fix highlighting for non-string fields on the `Lunr` search engine implementation. +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-search-common@1.2.8 + ## 1.2.11-next.2 ### Patch Changes diff --git a/plugins/search-backend-node/package.json b/plugins/search-backend-node/package.json index 0ce2fb52af..7533f1f510 100644 --- a/plugins/search-backend-node/package.json +++ b/plugins/search-backend-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend-node", "description": "A library for Backstage backend plugins that want to interact with the search backend plugin", - "version": "1.2.11-next.2", + "version": "1.2.12-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-backend/CHANGELOG.md b/plugins/search-backend/CHANGELOG.md index 608b54e987..544834466b 100644 --- a/plugins/search-backend/CHANGELOG.md +++ b/plugins/search-backend/CHANGELOG.md @@ -1,5 +1,40 @@ # @backstage/plugin-search-backend +## 1.4.8-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-openapi-utils@0.1.1-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/plugin-permission-node@0.7.19-next.0 + - @backstage/plugin-search-backend-node@1.2.12-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-search-common@1.2.8 + +## 1.4.7 + +### Patch Changes + +- 6694b369a3: Update the OpenAPI spec with more complete error responses and request bodies using Optic. Also, updates the test cases to use the new `supertest` pass through from `@backstage/backend-openapi-utils`. +- Updated dependencies + - @backstage/plugin-search-backend-node@1.2.11 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/backend-openapi-utils@0.1.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + - @backstage/plugin-auth-node@0.4.1 + - @backstage/plugin-permission-node@0.7.18 + - @backstage/plugin-search-common@1.2.8 + ## 1.4.7-next.2 ### Patch Changes diff --git a/plugins/search-backend/package.json b/plugins/search-backend/package.json index 2b29cfd6db..fb06cdcc7d 100644 --- a/plugins/search-backend/package.json +++ b/plugins/search-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-backend", "description": "The Backstage backend plugin that provides your backstage app with search", - "version": "1.4.7-next.2", + "version": "1.4.8-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/search-common/CHANGELOG.md b/plugins/search-common/CHANGELOG.md index bfb7959327..a4cfc99d96 100644 --- a/plugins/search-common/CHANGELOG.md +++ b/plugins/search-common/CHANGELOG.md @@ -1,5 +1,13 @@ # @backstage/plugin-search-common +## 1.2.8 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-permission-common@0.7.10 + - @backstage/types@1.1.1 + ## 1.2.7 ### Patch Changes diff --git a/plugins/search-common/package.json b/plugins/search-common/package.json index 3fe45d84d2..23f5d2b545 100644 --- a/plugins/search-common/package.json +++ b/plugins/search-common/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-search-common", "description": "Common functionalities for Search, to be shared between various search-enabled plugins", - "version": "1.2.7", + "version": "1.2.8", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { diff --git a/plugins/search-react/CHANGELOG.md b/plugins/search-react/CHANGELOG.md index 4c510b4afa..d64617c51c 100644 --- a/plugins/search-react/CHANGELOG.md +++ b/plugins/search-react/CHANGELOG.md @@ -1,5 +1,40 @@ # @backstage/plugin-search-react +## 1.7.4-next.0 + +### Patch Changes + +- 84dabc5363: Removed `@backstage/frontend-app-api` dependency. +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/types@1.1.1 + - @backstage/version-bridge@1.0.7 + - @backstage/plugin-search-common@1.2.8 + +## 1.7.2 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- f48cde800a: Emit search analytics in the search hook instead of in a dedicated component +- f75caf9f3d: Fixed a rare occurrence where a race in the search bar could throw away user input or cause the clear button not to work. +- 77f009b35d: Internal updates to match changes in the experimental `@backstage/frontend-plugin-api`. +- a539643cba: Minor refactor of search bar analytics capture +- 71c97e7d73: The filter options passed to `SearchResultGroupLayout` are now always explicitly rendered as strings by default. +- e7c09c4f4b: Use default extensions boundary and suspense on the alpha declarative `createSearchResultListItem` extension factory. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/frontend-app-api@0.3.0 + - @backstage/core-plugin-api@1.8.0 + - @backstage/version-bridge@1.0.7 + - @backstage/theme@0.4.4 + - @backstage/types@1.1.1 + - @backstage/plugin-search-common@1.2.8 + ## 1.7.2-next.2 ### Patch Changes diff --git a/plugins/search-react/package.json b/plugins/search-react/package.json index 22c3bf2d78..e4dff0421c 100644 --- a/plugins/search-react/package.json +++ b/plugins/search-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-search-react", - "version": "1.7.2-next.2", + "version": "1.7.4-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -47,7 +47,6 @@ "dependencies": { "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", - "@backstage/frontend-app-api": "workspace:^", "@backstage/frontend-plugin-api": "workspace:^", "@backstage/plugin-search-common": "workspace:^", "@backstage/theme": "workspace:^", @@ -69,6 +68,8 @@ "devDependencies": { "@backstage/cli": "workspace:^", "@backstage/core-app-api": "workspace:^", + "@backstage/frontend-app-api": "workspace:^", + "@backstage/frontend-test-utils": "workspace:^", "@backstage/test-utils": "workspace:^", "@testing-library/dom": "^9.0.0", "@testing-library/jest-dom": "^6.0.0", diff --git a/plugins/search-react/src/alpha.test.tsx b/plugins/search-react/src/alpha.test.tsx index 5222e4dad5..e1a8166390 100644 --- a/plugins/search-react/src/alpha.test.tsx +++ b/plugins/search-react/src/alpha.test.tsx @@ -14,41 +14,28 @@ * limitations under the License. */ -import React from 'react'; - -import { render, screen } from '@testing-library/react'; - import { createExtensionInput, createPageExtension, - createPlugin, createSchemaFromZod, } from '@backstage/frontend-plugin-api'; +import { createExtensionTester } from '@backstage/frontend-test-utils'; import { SearchResult } from '@backstage/plugin-search-common'; -import { createApp } from '@backstage/frontend-app-api'; -import { MockConfigApi } from '@backstage/test-utils'; - +import { screen } from '@testing-library/react'; +import React from 'react'; import { BaseSearchResultListItemProps, createSearchResultListItemExtension, searchResultItemExtensionData as searchResultListItemExtensionData, } from './alpha'; -// TODO: Remove this mock when we have a permanent solution for nav items extensions -// The `GraphiQLIcon` used in "packages/frontend-app-api/src/extensions/CoreNav.tsx" file -// is throwing a "ReferenceError: ref is not defined" error during test -jest.mock('@backstage/plugin-graphiql', () => ({ - ...jest.requireActual('@backstage/plugin-graphiql'), - GraphiQLIcon: () => null, -})); - describe('createSearchResultListItemExtension', () => { it('Should use the correct result component', async () => { - type TechDocsSearchReasulListItemProps = BaseSearchResultListItemProps<{ + type TechDocsSearchResultListItemProps = BaseSearchResultListItemProps<{ lineClamp: number; }>; const TechDocsSearchResultItemComponent = ( - props: TechDocsSearchReasulListItemProps, + props: TechDocsSearchResultListItemProps, ) => (
TechDocs - Rank: {props.rank} - Line clamp: {props.lineClamp} @@ -60,10 +47,12 @@ describe('createSearchResultListItemExtension', () => { id: 'techdocs', attachTo: { id: 'plugin.search.page', input: 'items' }, configSchema: createSchemaFromZod(z => - z.object({ - noTrack: z.boolean().default(true), - lineClamp: z.number().default(5), - }), + z + .object({ + noTrack: z.boolean().default(true), + lineClamp: z.number().default(5), + }) + .default({}), ), predicate: result => result.type === 'techdocs', component: @@ -158,34 +147,15 @@ describe('createSearchResultListItemExtension', () => { }, }); - const SearchPlugin = createPlugin({ - id: 'search.plugin', - extensions: [ - SearchPageExtension, - ExploreSearchResultItemExtension, - TechDocsSearchResultItemExtension, - ], - }); - - const app = createApp({ - features: [SearchPlugin], - configLoader: async () => - new MockConfigApi({ - app: { - extensions: [ - { - 'plugin.search.result.item.techdocs': { - config: { - lineClamp: 3, - }, - }, - }, - ], - }, - }), - }); - - render(app.createRoot()); + createExtensionTester(SearchPageExtension) + .add(TechDocsSearchResultItemExtension, { + // TODO(Rugvip): We need to make the config input type available for use here + config: { + lineClamp: 3, + } as any, + }) + .add(ExploreSearchResultItemExtension) + .render(); expect(await screen.findByText(/Search Page/)).toBeInTheDocument(); diff --git a/plugins/search-react/src/alpha.tsx b/plugins/search-react/src/alpha.tsx index 80e464fe4e..bb738a2b08 100644 --- a/plugins/search-react/src/alpha.tsx +++ b/plugins/search-react/src/alpha.tsx @@ -107,7 +107,7 @@ export function createSearchResultListItemExtension< output: { item: searchResultItemExtensionData, }, - factory({ config, source }) { + factory({ config, node }) { const ExtensionComponent = lazy(() => options .component({ config }) @@ -118,7 +118,7 @@ export function createSearchResultListItemExtension< item: { predicate: options.predicate, component: props => ( - + maxLength ? `${text.slice(0, maxLength)}...` : text; } -const useStyles = makeStyles(theme => ({ + +const useStyles = makeStyles(theme => ({ root: { minWidth: 260, position: 'relative', diff --git a/plugins/shortcuts/CHANGELOG.md b/plugins/shortcuts/CHANGELOG.md index f54c0c6e51..3247352329 100644 --- a/plugins/shortcuts/CHANGELOG.md +++ b/plugins/shortcuts/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-shortcuts +## 0.3.17-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/types@1.1.1 + +## 0.3.16 + +### Patch Changes + +- 55725922a5: Ensure that shortcuts aren't duplicate-checked against themselves +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/types@1.1.1 + ## 0.3.16-next.2 ### Patch Changes diff --git a/plugins/shortcuts/package.json b/plugins/shortcuts/package.json index 5776687287..14afb8df00 100644 --- a/plugins/shortcuts/package.json +++ b/plugins/shortcuts/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-shortcuts", "description": "A Backstage plugin that provides a shortcuts feature to the sidebar", - "version": "0.3.16-next.2", + "version": "0.3.17-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube-backend/CHANGELOG.md b/plugins/sonarqube-backend/CHANGELOG.md index 84123d2a5c..d3daaf6505 100644 --- a/plugins/sonarqube-backend/CHANGELOG.md +++ b/plugins/sonarqube-backend/CHANGELOG.md @@ -1,5 +1,25 @@ # @backstage/plugin-sonarqube-backend +## 0.2.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.2.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.2.9-next.2 ### Patch Changes diff --git a/plugins/sonarqube-backend/package.json b/plugins/sonarqube-backend/package.json index 6eab1b597d..27b38e77a2 100644 --- a/plugins/sonarqube-backend/package.json +++ b/plugins/sonarqube-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-sonarqube-backend", - "version": "0.2.9-next.2", + "version": "0.2.10-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube-react/CHANGELOG.md b/plugins/sonarqube-react/CHANGELOG.md index 5bdedc7354..a4ff66eaf1 100644 --- a/plugins/sonarqube-react/CHANGELOG.md +++ b/plugins/sonarqube-react/CHANGELOG.md @@ -1,5 +1,22 @@ # @backstage/plugin-sonarqube-react +## 0.1.11-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/catalog-model@1.4.3 + +## 0.1.10 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-plugin-api@1.8.0 + - @backstage/catalog-model@1.4.3 + ## 0.1.10-next.0 ### Patch Changes diff --git a/plugins/sonarqube-react/package.json b/plugins/sonarqube-react/package.json index bfcd061497..a3578bec1f 100644 --- a/plugins/sonarqube-react/package.json +++ b/plugins/sonarqube-react/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-sonarqube-react", - "version": "0.1.10-next.0", + "version": "0.1.11-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/sonarqube/CHANGELOG.md b/plugins/sonarqube/CHANGELOG.md index 39220e5a82..1dc9f44886 100644 --- a/plugins/sonarqube/CHANGELOG.md +++ b/plugins/sonarqube/CHANGELOG.md @@ -1,5 +1,34 @@ # @backstage/plugin-sonarqube +## 0.7.10-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/plugin-sonarqube-react@0.1.11-next.0 + - @backstage/catalog-model@1.4.3 + +## 0.7.8 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- 62b5922916: Internal theme type updates +- 8613ba3928: Switched to using `"exports"` field for `/alpha` subpath export. +- 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/plugin-sonarqube-react@0.1.10 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + ## 0.7.8-next.2 ### Patch Changes diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json index 06eeeee30a..742a7249a7 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-sonarqube", "description": "", - "version": "0.7.8-next.2", + "version": "0.7.10-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -46,7 +46,7 @@ "@material-ui/lab": "4.0.0-alpha.61", "@material-ui/styles": "^4.10.0", "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "luxon": "^3.0.0", "rc-progress": "3.5.1", "react-use": "^17.2.4" diff --git a/plugins/splunk-on-call/CHANGELOG.md b/plugins/splunk-on-call/CHANGELOG.md index 00fc4b93ba..5ebc73d577 100644 --- a/plugins/splunk-on-call/CHANGELOG.md +++ b/plugins/splunk-on-call/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-splunk-on-call +## 0.4.17-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 + +## 0.4.15 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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 + ## 0.4.15-next.2 ### Patch Changes diff --git a/plugins/splunk-on-call/package.json b/plugins/splunk-on-call/package.json index 225462339f..8fc0fd6397 100644 --- a/plugins/splunk-on-call/package.json +++ b/plugins/splunk-on-call/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-splunk-on-call", "description": "A Backstage plugin that integrates towards Splunk On-Call", - "version": "0.4.15-next.2", + "version": "0.4.17-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stack-overflow-backend/CHANGELOG.md b/plugins/stack-overflow-backend/CHANGELOG.md index 20b30d1654..d736c2435a 100644 --- a/plugins/stack-overflow-backend/CHANGELOG.md +++ b/plugins/stack-overflow-backend/CHANGELOG.md @@ -1,5 +1,29 @@ # @backstage/plugin-stack-overflow-backend +## 0.2.12-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-search-backend-module-stack-overflow-collator@0.1.1-next.0 + - @backstage/config@1.1.1 + - @backstage/plugin-search-common@1.2.8 + +## 0.2.11 + +### Patch Changes + +- b168d7e7ea: Deprecate package in favor of the new `@backstage/plugin-search-backend-module-stack-overflow-collator` module. + + The search collator `requestParams` option is optional now, so its default value is `{ order: 'desc', sort: 'activity', site: 'stackoverflow' }` as defined in the `Try It` section on the [official Stack Overflow API documentation](https://api.stackexchange.com/docs/questions). + +- Updated dependencies + - @backstage/plugin-search-backend-module-stack-overflow-collator@0.1.0 + - @backstage/backend-common@0.19.9 + - @backstage/config@1.1.1 + - @backstage/plugin-search-common@1.2.8 + ## 0.2.11-next.2 ### Patch Changes diff --git a/plugins/stack-overflow-backend/package.json b/plugins/stack-overflow-backend/package.json index 38fd99212a..e4c1d82265 100644 --- a/plugins/stack-overflow-backend/package.json +++ b/plugins/stack-overflow-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-stack-overflow-backend", "description": "Deprecated, consider using @backstage/plugin-search-backend-module-stack-overflow-collator instead", - "version": "0.2.11-next.2", + "version": "0.2.12-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/stack-overflow/CHANGELOG.md b/plugins/stack-overflow/CHANGELOG.md index c9246d8c74..7f579095b9 100644 --- a/plugins/stack-overflow/CHANGELOG.md +++ b/plugins/stack-overflow/CHANGELOG.md @@ -1,5 +1,36 @@ # @backstage/plugin-stack-overflow +## 0.1.23-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/plugin-search-react@1.7.4-next.0 + - @backstage/plugin-home-react@0.1.6-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/config@1.1.1 + - @backstage/plugin-search-common@1.2.8 + +## 0.1.22 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- b168d7e7ea: Migrate package to the new Frontend system, the new module is distributed with a `/alpha` subpath. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-search-react@1.7.2 + - @backstage/plugin-home-react@0.1.5 + - @backstage/theme@0.4.4 + - @backstage/config@1.1.1 + - @backstage/plugin-search-common@1.2.8 + ## 0.1.22-next.2 ### Patch Changes diff --git a/plugins/stack-overflow/package.json b/plugins/stack-overflow/package.json index f73574a37f..9c55565b0a 100644 --- a/plugins/stack-overflow/package.json +++ b/plugins/stack-overflow/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-stack-overflow", - "version": "0.1.22-next.2", + "version": "0.1.23-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -54,7 +54,7 @@ "@material-ui/icons": "^4.9.1", "@testing-library/jest-dom": "^6.0.0", "@types/react": "^16.13.1 || ^17.0.0", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "lodash": "^4.17.21", "qs": "^6.9.4", "react-use": "^17.2.4" diff --git a/plugins/stackstorm/CHANGELOG.md b/plugins/stackstorm/CHANGELOG.md index e6c61992a6..f1e3f1b9ed 100644 --- a/plugins/stackstorm/CHANGELOG.md +++ b/plugins/stackstorm/CHANGELOG.md @@ -1,5 +1,26 @@ # @backstage/plugin-stackstorm +## 0.1.9-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/errors@1.2.3 + +## 0.1.8 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/errors@1.2.3 + ## 0.1.8-next.2 ### Patch Changes diff --git a/plugins/stackstorm/package.json b/plugins/stackstorm/package.json index 7fa01fbe2b..bf2bf2ec8c 100644 --- a/plugins/stackstorm/package.json +++ b/plugins/stackstorm/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-stackstorm", "description": "A Backstage plugin that integrates towards StackStorm", - "version": "0.1.8-next.2", + "version": "0.1.9-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md index 0b0edf94e0..2c5dc6d596 100644 --- a/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md +++ b/plugins/tech-insights-backend-module-jsonfc/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-tech-insights-backend-module-jsonfc +## 0.1.40-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-tech-insights-node@0.4.14-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-tech-insights-common@0.2.12 + +## 0.1.39 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-tech-insights-common@0.2.12 + - @backstage/plugin-tech-insights-node@0.4.13 + ## 0.1.39-next.2 ### Patch Changes diff --git a/plugins/tech-insights-backend-module-jsonfc/package.json b/plugins/tech-insights-backend-module-jsonfc/package.json index 858e5f7e63..b9250e979f 100644 --- a/plugins/tech-insights-backend-module-jsonfc/package.json +++ b/plugins/tech-insights-backend-module-jsonfc/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-backend-module-jsonfc", - "version": "0.1.39-next.2", + "version": "0.1.40-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-backend/CHANGELOG.md b/plugins/tech-insights-backend/CHANGELOG.md index d6a57cba49..fdd358402f 100644 --- a/plugins/tech-insights-backend/CHANGELOG.md +++ b/plugins/tech-insights-backend/CHANGELOG.md @@ -1,5 +1,37 @@ # @backstage/plugin-tech-insights-backend +## 0.5.22-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/plugin-tech-insights-node@0.4.14-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-tech-insights-common@0.2.12 + +## 0.5.21 + +### Patch Changes + +- 013611b42e: `knex` has been bumped to major version 3 and `better-sqlite3` to major version 9, which deprecate node 16 support. +- 193ad022bb: Add `factRetrieverId` to the fact retriever's logger metadata. +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @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-tech-insights-common@0.2.12 + - @backstage/plugin-tech-insights-node@0.4.13 + ## 0.5.21-next.2 ### Patch Changes diff --git a/plugins/tech-insights-backend/package.json b/plugins/tech-insights-backend/package.json index fbd62e5edf..46399ebc06 100644 --- a/plugins/tech-insights-backend/package.json +++ b/plugins/tech-insights-backend/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-backend", - "version": "0.5.21-next.2", + "version": "0.5.22-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights-node/CHANGELOG.md b/plugins/tech-insights-node/CHANGELOG.md index 0a69408682..5bc20edd52 100644 --- a/plugins/tech-insights-node/CHANGELOG.md +++ b/plugins/tech-insights-node/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-tech-insights-node +## 0.4.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/plugin-tech-insights-common@0.2.12 + +## 0.4.13 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-tasks@0.5.12 + - @backstage/config@1.1.1 + - @backstage/types@1.1.1 + - @backstage/plugin-tech-insights-common@0.2.12 + ## 0.4.13-next.2 ### Patch Changes diff --git a/plugins/tech-insights-node/package.json b/plugins/tech-insights-node/package.json index 0de5a3356a..e44a0faa42 100644 --- a/plugins/tech-insights-node/package.json +++ b/plugins/tech-insights-node/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights-node", - "version": "0.4.13-next.2", + "version": "0.4.14-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-insights/CHANGELOG.md b/plugins/tech-insights/CHANGELOG.md index 44b63eafee..24a0a87835 100644 --- a/plugins/tech-insights/CHANGELOG.md +++ b/plugins/tech-insights/CHANGELOG.md @@ -1,5 +1,35 @@ # @backstage/plugin-tech-insights +## 0.3.20-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/types@1.1.1 + - @backstage/plugin-tech-insights-common@0.2.12 + +## 0.3.18 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 62b5922916: Internal theme type updates +- 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/types@1.1.1 + - @backstage/plugin-tech-insights-common@0.2.12 + ## 0.3.18-next.2 ### Patch Changes diff --git a/plugins/tech-insights/package.json b/plugins/tech-insights/package.json index bcd8431705..8e25134cea 100644 --- a/plugins/tech-insights/package.json +++ b/plugins/tech-insights/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-tech-insights", - "version": "0.3.18-next.2", + "version": "0.3.20-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/tech-radar/CHANGELOG.md b/plugins/tech-radar/CHANGELOG.md index 68baf5e73c..0157900471 100644 --- a/plugins/tech-radar/CHANGELOG.md +++ b/plugins/tech-radar/CHANGELOG.md @@ -1,5 +1,37 @@ # @backstage/plugin-tech-radar +## 0.6.11-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.0.1-next.0 + +## 0.6.11-next.0 + +### Patch Changes + +- 03d0b6dcdc: The `convertLegacyRouteRef` utility used by the alpha exports is now imported from `@backstage/core-compat-api`. +- Updated dependencies + - @backstage/core-compat-api@0.0.2-next.0 + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + +## 0.6.10 + +### Patch Changes + +- 68fc9dc60e: Updated alpha exports according to routing changes in `@backstage/frontend-plugin-api`. +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + ## 0.6.10-next.2 ### Patch Changes diff --git a/plugins/tech-radar/package.json b/plugins/tech-radar/package.json index bf9ad3fbaa..258e25d753 100644 --- a/plugins/tech-radar/package.json +++ b/plugins/tech-radar/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-tech-radar", "description": "A Backstage plugin that lets you display a Tech Radar for your organization", - "version": "0.6.10-next.2", + "version": "0.6.11-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -46,6 +46,7 @@ "start": "backstage-cli package start" }, "dependencies": { + "@backstage/core-compat-api": "workspace:^", "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", "@backstage/frontend-plugin-api": "workspace:^", @@ -74,7 +75,7 @@ "@testing-library/user-event": "^14.0.0", "@types/color": "^3.0.1", "@types/d3-force": "^3.0.0", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/tech-radar/src/alpha.tsx b/plugins/tech-radar/src/alpha.tsx index 78230c0337..f9a34e2158 100644 --- a/plugins/tech-radar/src/alpha.tsx +++ b/plugins/tech-radar/src/alpha.tsx @@ -24,7 +24,7 @@ import { import React from 'react'; import { techRadarApiRef } from './api'; import { SampleTechRadarApi } from './sample'; -import { convertLegacyRouteRef } from '@backstage/core-plugin-api/alpha'; +import { convertLegacyRouteRef } from '@backstage/core-compat-api'; import { rootRouteRef } from './plugin'; /** @alpha */ diff --git a/plugins/tech-radar/src/components/RadarBubble/RadarBubble.tsx b/plugins/tech-radar/src/components/RadarBubble/RadarBubble.tsx index c114744a40..a904b981ca 100644 --- a/plugins/tech-radar/src/components/RadarBubble/RadarBubble.tsx +++ b/plugins/tech-radar/src/components/RadarBubble/RadarBubble.tsx @@ -15,7 +15,7 @@ */ import React, { useRef, useLayoutEffect } from 'react'; -import { makeStyles, Theme } from '@material-ui/core'; +import { makeStyles } from '@material-ui/core'; export type Props = { visible: boolean; @@ -24,7 +24,7 @@ export type Props = { y: number; }; -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ bubble: { pointerEvents: 'none', userSelect: 'none', diff --git a/plugins/tech-radar/src/components/RadarEntry/RadarEntry.tsx b/plugins/tech-radar/src/components/RadarEntry/RadarEntry.tsx index b7f5ea5962..996b8d1040 100644 --- a/plugins/tech-radar/src/components/RadarEntry/RadarEntry.tsx +++ b/plugins/tech-radar/src/components/RadarEntry/RadarEntry.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { makeStyles, Theme } from '@material-ui/core'; +import { makeStyles } from '@material-ui/core'; import { WithLink } from '../../utils/components'; import { RadarDescription } from '../RadarDescription'; import type { EntrySnapshot } from '../../utils/types'; @@ -37,7 +37,7 @@ export type Props = { onClick?: (event: React.MouseEvent) => void; }; -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ text: { pointerEvents: 'none', userSelect: 'none', diff --git a/plugins/tech-radar/src/components/RadarGrid/RadarGrid.tsx b/plugins/tech-radar/src/components/RadarGrid/RadarGrid.tsx index 8f796620e0..8f4f8acc78 100644 --- a/plugins/tech-radar/src/components/RadarGrid/RadarGrid.tsx +++ b/plugins/tech-radar/src/components/RadarGrid/RadarGrid.tsx @@ -15,7 +15,7 @@ */ import React from 'react'; -import { makeStyles, Theme } from '@material-ui/core'; +import { makeStyles } from '@material-ui/core'; import type { Ring } from '../../utils/types'; export type Props = { @@ -23,7 +23,7 @@ export type Props = { rings: Ring[]; }; -const useStyles = makeStyles( +const useStyles = makeStyles( theme => ({ ring: { fill: 'none', diff --git a/plugins/tech-radar/src/components/RadarLegend/RadarLegend.tsx b/plugins/tech-radar/src/components/RadarLegend/RadarLegend.tsx index d74cde1d40..0a7a69b73c 100644 --- a/plugins/tech-radar/src/components/RadarLegend/RadarLegend.tsx +++ b/plugins/tech-radar/src/components/RadarLegend/RadarLegend.tsx @@ -13,13 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { makeStyles, Theme } from '@material-ui/core'; + +import { makeStyles } from '@material-ui/core'; import React from 'react'; import { RadarLegendQuadrant } from './RadarLegendQuadrant'; import { RadarLegendProps } from './types'; import { setupSegments } from './utils'; -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ quadrant: { height: '100%', width: '100%', diff --git a/plugins/techdocs-addons-test-utils/CHANGELOG.md b/plugins/techdocs-addons-test-utils/CHANGELOG.md index 602488b644..2ac11de91a 100644 --- a/plugins/techdocs-addons-test-utils/CHANGELOG.md +++ b/plugins/techdocs-addons-test-utils/CHANGELOG.md @@ -1,5 +1,47 @@ # @backstage/plugin-techdocs-addons-test-utils +## 1.0.25-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog@1.16.0-next.1 + - @backstage/plugin-techdocs@1.9.2-next.1 + +## 1.0.25-next.0 + +### Patch Changes + +- 3f354e68f4: Move `@testing-library/react` to be a `peerDependency` +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/plugin-catalog@1.16.0-next.0 + - @backstage/plugin-techdocs@1.9.2-next.0 + - @backstage/plugin-search-react@1.7.4-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/core-app-api@1.11.2-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/test-utils@1.4.6-next.0 + - @backstage/plugin-techdocs-react@1.1.14-next.0 + +## 1.0.23 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/plugin-catalog@1.15.0 + - @backstage/plugin-techdocs@1.9.0 + - @backstage/integration-react@1.1.21 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-techdocs-react@1.1.13 + - @backstage/core-app-api@1.11.1 + - @backstage/plugin-search-react@1.7.2 + - @backstage/test-utils@1.4.5 + - @backstage/theme@0.4.4 + ## 1.0.23-next.2 ### Patch Changes diff --git a/plugins/techdocs-addons-test-utils/package.json b/plugins/techdocs-addons-test-utils/package.json index 613ed0a020..9cb79ffb2d 100644 --- a/plugins/techdocs-addons-test-utils/package.json +++ b/plugins/techdocs-addons-test-utils/package.json @@ -1,6 +1,6 @@ { "name": "@backstage/plugin-techdocs-addons-test-utils", - "version": "1.0.23-next.2", + "version": "1.0.25-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -38,6 +38,7 @@ "@backstage/core-plugin-api": "workspace:^", "@backstage/integration-react": "workspace:^", "@backstage/plugin-catalog": "workspace:^", + "@backstage/plugin-catalog-react": "workspace:^", "@backstage/plugin-search-react": "workspace:^", "@backstage/plugin-techdocs": "workspace:^", "@backstage/plugin-techdocs-react": "workspace:^", @@ -46,12 +47,12 @@ "@material-ui/core": "^4.12.2", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "4.0.0-alpha.61", - "@testing-library/react": "^14.0.0", "@types/react": "^16.13.1 || ^17.0.0", "react-use": "^17.2.4", "testing-library__dom": "^7.29.4-beta.1" }, "peerDependencies": { + "@testing-library/react": "^12.1.3 || ^13.0.0 || ^14.0.0", "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" diff --git a/plugins/techdocs-addons-test-utils/src/test-utils.tsx b/plugins/techdocs-addons-test-utils/src/test-utils.tsx index 865e8c0d3b..518e469e1e 100644 --- a/plugins/techdocs-addons-test-utils/src/test-utils.tsx +++ b/plugins/techdocs-addons-test-utils/src/test-utils.tsx @@ -34,7 +34,7 @@ import { techdocsStorageApiRef, } from '@backstage/plugin-techdocs-react'; import { TechDocsReaderPage, techdocsPlugin } from '@backstage/plugin-techdocs'; -import { catalogPlugin } from '@backstage/plugin-catalog'; +import { entityRouteRef } from '@backstage/plugin-catalog-react'; import { searchApiRef } from '@backstage/plugin-search-react'; import { scmIntegrationsApiRef } from '@backstage/integration-react'; @@ -259,7 +259,7 @@ export class TechDocsAddonTester { mountedRoutes: { '/docs': techdocsPlugin.routes.root, '/docs/:namespace/:kind/:name/*': techdocsPlugin.routes.docRoot, - '/catalog/:namespace/:kind/:name': catalogPlugin.routes.catalogEntity, + '/catalog/:namespace/:kind/:name': entityRouteRef, }, }); } diff --git a/plugins/techdocs-backend/CHANGELOG.md b/plugins/techdocs-backend/CHANGELOG.md index 6beb4dfb65..38cafea9aa 100644 --- a/plugins/techdocs-backend/CHANGELOG.md +++ b/plugins/techdocs-backend/CHANGELOG.md @@ -1,5 +1,48 @@ # @backstage/plugin-techdocs-backend +## 1.9.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/plugin-techdocs-node@1.11.0-next.0 + - @backstage/plugin-search-backend-module-techdocs@0.1.12-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/plugin-catalog-common@1.0.18 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/plugin-search-common@1.2.8 + +## 1.9.0 + +### Minor Changes + +- 67cff7b06f: Expose an extension point to set a custom build strategy. Also move `DocsBuildStrategy` type to `@backstage/plugin-techdocs-node` and deprecate `ShouldBuildParameters` type. + +### Patch Changes + +- c3c5c7e514: Add info about the entity when tech docs fail to build +- 48a61bfdca: Fix potential memory leak by not creating a build log transport if not given via `RouterOptions`. +- 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-techdocs-node@1.10.0 + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/plugin-search-backend-module-techdocs@0.1.11 + - @backstage/catalog-client@1.4.6 + - @backstage/plugin-permission-common@0.7.10 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-catalog-common@1.0.18 + - @backstage/plugin-search-common@1.2.8 + ## 1.9.0-next.2 ### Patch Changes diff --git a/plugins/techdocs-backend/package.json b/plugins/techdocs-backend/package.json index d16d55b198..d1885d9b94 100644 --- a/plugins/techdocs-backend/package.json +++ b/plugins/techdocs-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-backend", "description": "The Backstage backend plugin that renders technical documentation for your components", - "version": "1.9.0-next.2", + "version": "1.9.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-module-addons-contrib/CHANGELOG.md b/plugins/techdocs-module-addons-contrib/CHANGELOG.md index 47401b7b01..1b074bf428 100644 --- a/plugins/techdocs-module-addons-contrib/CHANGELOG.md +++ b/plugins/techdocs-module-addons-contrib/CHANGELOG.md @@ -1,5 +1,32 @@ # @backstage/plugin-techdocs-module-addons-contrib +## 1.1.3-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/plugin-techdocs-react@1.1.14-next.0 + +## 1.1.2 + +### Patch Changes + +- 4728b3960d: Fixed navigation bug that caused users to not be scrolled to the top of a new page. Fixed navigation bug where using backwards and forwards browser navigation did not scroll users to the correct place on the TechDoc page. +- 6c2b872153: Add official support for React 18. +- 62b5922916: Internal theme type updates +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/integration@1.7.2 + - @backstage/integration-react@1.1.21 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-techdocs-react@1.1.13 + - @backstage/theme@0.4.4 + ## 1.1.2-next.2 ### Patch Changes diff --git a/plugins/techdocs-module-addons-contrib/package.json b/plugins/techdocs-module-addons-contrib/package.json index 5623b11f4a..53ff762126 100644 --- a/plugins/techdocs-module-addons-contrib/package.json +++ b/plugins/techdocs-module-addons-contrib/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-module-addons-contrib", "description": "Plugin module for contributed TechDocs Addons", - "version": "1.1.2-next.2", + "version": "1.1.3-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/techdocs-node/CHANGELOG.md b/plugins/techdocs-node/CHANGELOG.md index 927e7cf9c7..84ffa704a5 100644 --- a/plugins/techdocs-node/CHANGELOG.md +++ b/plugins/techdocs-node/CHANGELOG.md @@ -1,5 +1,43 @@ # @backstage/plugin-techdocs-node +## 1.11.0-next.0 + +### Minor Changes + +- d15d483a49: Add command `--runAsDefaultUser` for `@techdocs/cli generate` to bypass running the docker builds as host user for macOS and Linux. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/integration-aws-node@0.1.8 + - @backstage/plugin-search-common@1.2.8 + +## 1.10.0 + +### Minor Changes + +- 67cff7b06f: Expose an extension point to set a custom build strategy. Also move `DocsBuildStrategy` type to `@backstage/plugin-techdocs-node` and deprecate `ShouldBuildParameters` type. + +### Patch Changes + +- e61a975f61: Switch to `@smithy/node-http-handler` instead of the `@aws-sdk/node-http-handler` +- 3d043526f4: Updated dependency `aws-sdk-client-mock` to `^3.0.0`. +- Updated dependencies + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/integration-aws-node@0.1.8 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-search-common@1.2.8 + ## 1.10.0-next.2 ### Patch Changes diff --git a/plugins/techdocs-node/api-report.md b/plugins/techdocs-node/api-report.md index c267574642..de5b5b21b8 100644 --- a/plugins/techdocs-node/api-report.md +++ b/plugins/techdocs-node/api-report.md @@ -62,6 +62,7 @@ export type GeneratorRunOptions = { siteOptions?: { name?: string; }; + runAsDefaultUser?: boolean; }; // @public diff --git a/plugins/techdocs-node/package.json b/plugins/techdocs-node/package.json index abffb6c781..ed9ad108c8 100644 --- a/plugins/techdocs-node/package.json +++ b/plugins/techdocs-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-node", "description": "Common node.js functionalities for TechDocs, to be shared between techdocs-backend plugin and techdocs-cli", - "version": "1.10.0-next.2", + "version": "1.11.0-next.0", "main": "src/index.ts", "types": "src/index.ts", "publishConfig": { @@ -43,7 +43,7 @@ "@aws-sdk/credential-providers": "^3.350.0", "@aws-sdk/lib-storage": "^3.350.0", "@aws-sdk/types": "^3.347.0", - "@azure/identity": "^3.2.1", + "@azure/identity": "^4.0.0", "@azure/storage-blob": "^12.5.0", "@backstage/backend-common": "workspace:^", "@backstage/backend-plugin-api": "workspace:^", @@ -53,7 +53,7 @@ "@backstage/integration": "workspace:^", "@backstage/integration-aws-node": "workspace:^", "@backstage/plugin-search-common": "workspace:^", - "@google-cloud/storage": "^6.0.0", + "@google-cloud/storage": "^7.0.0", "@smithy/node-http-handler": "^2.1.7", "@trendyol-js/openstack-swift-sdk": "^0.0.6", "@types/express": "^4.17.6", @@ -76,7 +76,7 @@ "@types/mime-types": "^2.1.0", "@types/recursive-readdir": "^2.2.0", "@types/supertest": "^2.0.8", - "aws-sdk-client-mock": "^2.0.0", + "aws-sdk-client-mock": "^3.0.0", "supertest": "^6.1.3" } } diff --git a/plugins/techdocs-node/src/stages/generate/techdocs.ts b/plugins/techdocs-node/src/stages/generate/techdocs.ts index b1baf214b3..a4671f24a5 100644 --- a/plugins/techdocs-node/src/stages/generate/techdocs.ts +++ b/plugins/techdocs-node/src/stages/generate/techdocs.ts @@ -97,6 +97,7 @@ export class TechdocsGenerator implements GeneratorBase { logger: childLogger, logStream, siteOptions, + runAsDefaultUser, } = options; // Do some updates to mkdocs.yml before generating docs e.g. adding repo_url @@ -171,6 +172,7 @@ export class TechdocsGenerator implements GeneratorBase { // write to, otherwise they will just fail trying to write to / envVars: { HOME: '/tmp' }, pullImage: this.options.pullImage, + defaultUser: runAsDefaultUser, }); childLogger.info( `Successfully generated docs from ${inputDir} into ${outputDir} using techdocs-container`, diff --git a/plugins/techdocs-node/src/stages/generate/types.ts b/plugins/techdocs-node/src/stages/generate/types.ts index eca1057914..149c3c2195 100644 --- a/plugins/techdocs-node/src/stages/generate/types.ts +++ b/plugins/techdocs-node/src/stages/generate/types.ts @@ -64,6 +64,7 @@ export type GeneratorRunOptions = { logger: Logger; logStream?: Writable; siteOptions?: { name?: string }; + runAsDefaultUser?: boolean; }; /** diff --git a/plugins/techdocs-react/CHANGELOG.md b/plugins/techdocs-react/CHANGELOG.md index 9140d95972..c22425c38d 100644 --- a/plugins/techdocs-react/CHANGELOG.md +++ b/plugins/techdocs-react/CHANGELOG.md @@ -1,5 +1,28 @@ # @backstage/plugin-techdocs-react +## 1.1.14-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/version-bridge@1.0.7 + +## 1.1.13 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/version-bridge@1.0.7 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + ## 1.1.13-next.2 ### Patch Changes diff --git a/plugins/techdocs-react/package.json b/plugins/techdocs-react/package.json index 38527300f7..af3f4f3898 100644 --- a/plugins/techdocs-react/package.json +++ b/plugins/techdocs-react/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs-react", "description": "Shared frontend utilities for TechDocs and Addons", - "version": "1.1.13-next.2", + "version": "1.1.14-next.0", "publishConfig": { "access": "public", "main": "dist/index.esm.js", diff --git a/plugins/techdocs/CHANGELOG.md b/plugins/techdocs/CHANGELOG.md index 6eb725a86e..781546b460 100644 --- a/plugins/techdocs/CHANGELOG.md +++ b/plugins/techdocs/CHANGELOG.md @@ -1,5 +1,66 @@ # @backstage/plugin-techdocs +## 1.9.2-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.0.1-next.0 + +## 1.9.2-next.0 + +### Patch Changes + +- 03d0b6dcdc: The `convertLegacyRouteRef` utility used by the alpha exports is now imported from `@backstage/core-compat-api`. +- Updated dependencies + - @backstage/core-compat-api@0.0.2-next.0 + - @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-search-react@1.7.4-next.0 + - @backstage/integration@1.8.0-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/frontend-plugin-api@0.3.1-next.0 + - @backstage/integration-react@1.1.22-next.0 + - @backstage/plugin-techdocs-react@1.1.14-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-search-common@1.2.8 + +## 1.9.0 + +### Minor Changes + +- 17f93d5589: A new analytics event `not-found` will be published when a user visits a documentation site that does not exist + +### Patch Changes + +- 4728b3960d: Fixed navigation bug that caused users to not be scrolled to the top of a new page. Fixed navigation bug where using backwards and forwards browser navigation did not scroll users to the correct place on the TechDoc page. +- a3add7a682: Export alpha routes and nav item extension, only available for applications that uses the new Frontend system. +- 71c97e7d73: The `spec.lifecycle' field in entities will now always be rendered as a string. +- 68fc9dc60e: Updated alpha exports according to routing changes in `@backstage/frontend-plugin-api`. +- 6c2b872153: Add official support for React 18. +- 0bf6ebda88: Added entity page content for the new plugin exported via `/alpha`. +- 67cc85bb14: Switched the conditional `react-dom/client` import to use `import(...)` rather than `require(...)`. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- 38cda52746: Added support for React 18. The new `createRoot` API from `react-dom/client` will now be used if present. +- 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/frontend-plugin-api@0.3.0 + - @backstage/integration@1.7.2 + - @backstage/integration-react@1.1.21 + - @backstage/core-plugin-api@1.8.0 + - @backstage/plugin-techdocs-react@1.1.13 + - @backstage/plugin-search-react@1.7.2 + - @backstage/theme@0.4.4 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-search-common@1.2.8 + ## 1.9.0-next.2 ### Minor Changes diff --git a/plugins/techdocs/package.json b/plugins/techdocs/package.json index 91d8f8959a..7ddd663700 100644 --- a/plugins/techdocs/package.json +++ b/plugins/techdocs/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-techdocs", "description": "The Backstage plugin that renders technical documentation for your components", - "version": "1.9.0-next.2", + "version": "1.9.2-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -49,6 +49,7 @@ "dependencies": { "@backstage/catalog-model": "workspace:^", "@backstage/config": "workspace:^", + "@backstage/core-compat-api": "workspace:^", "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", "@backstage/errors": "workspace:^", @@ -91,7 +92,7 @@ "@types/dompurify": "^2.2.2", "@types/event-source-polyfill": "^1.0.0", "canvas": "^2.10.2", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/techdocs/src/alpha.tsx b/plugins/techdocs/src/alpha.tsx index ceb5f47364..533b4cb524 100644 --- a/plugins/techdocs/src/alpha.tsx +++ b/plugins/techdocs/src/alpha.tsx @@ -31,7 +31,7 @@ import { fetchApiRef, identityApiRef, } from '@backstage/core-plugin-api'; -import { convertLegacyRouteRef } from '@backstage/core-plugin-api/alpha'; +import { convertLegacyRouteRef } from '@backstage/core-compat-api'; import { techdocsApiRef, techdocsStorageApiRef, diff --git a/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/dom.tsx b/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/dom.tsx index 29e6945fa7..3d12718986 100644 --- a/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/dom.tsx +++ b/plugins/techdocs/src/reader/components/TechDocsReaderPageContent/dom.tsx @@ -18,7 +18,6 @@ import { useCallback, useEffect, useState } from 'react'; import { useTheme, useMediaQuery } from '@material-ui/core'; -import { BackstageTheme } from '@backstage/theme'; import { CompoundEntityRef } from '@backstage/catalog-model'; import { useAnalytics, useApi } from '@backstage/core-plugin-api'; import { scmIntegrationsApiRef } from '@backstage/integration-react'; @@ -58,7 +57,7 @@ export const useTechDocsReaderDom = ( entityRef: CompoundEntityRef, ): Element | null => { const navigate = useNavigateUrl(); - const theme = useTheme(); + const theme = useTheme(); const isMobileMedia = useMediaQuery(MOBILE_MEDIA_QUERY); const sanitizerTransformer = useSanitizerTransformer(); const stylesTransformer = useStylesTransformer(); diff --git a/plugins/techdocs/src/reader/transformers/styles/rules/types.ts b/plugins/techdocs/src/reader/transformers/styles/rules/types.ts index 6419ef8e39..defdc4ad90 100644 --- a/plugins/techdocs/src/reader/transformers/styles/rules/types.ts +++ b/plugins/techdocs/src/reader/transformers/styles/rules/types.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { BackstageTheme } from '@backstage/theme'; +import { Theme } from '@material-ui/core'; /** * A Backstage sidebar object that contains properties such as its pin state. @@ -31,7 +31,7 @@ export type RuleOptions = { /** * A Backstage theme object that contains the application's design tokens. */ - theme: BackstageTheme; + theme: Theme; /** * A Backstage sidebar, see {@link BackstageSidebar} for more details. */ diff --git a/plugins/techdocs/src/reader/transformers/styles/transformer.ts b/plugins/techdocs/src/reader/transformers/styles/transformer.ts index 04a6d476af..dee77fb1ed 100644 --- a/plugins/techdocs/src/reader/transformers/styles/transformer.ts +++ b/plugins/techdocs/src/reader/transformers/styles/transformer.ts @@ -15,12 +15,8 @@ */ import { useCallback, useMemo } from 'react'; - import { useTheme } from '@material-ui/core'; - import { useSidebarPinState } from '@backstage/core-components'; -import { BackstageTheme } from '@backstage/theme'; - import { Transformer } from '../transformer'; import { rules } from './rules'; @@ -35,7 +31,7 @@ const useSidebar = () => useSidebarPinState(); */ const useRuleStyles = () => { const sidebar = useSidebar(); - const theme = useTheme(); + const theme = useTheme(); return useMemo(() => { const options = { theme, sidebar }; diff --git a/plugins/todo-backend/CHANGELOG.md b/plugins/todo-backend/CHANGELOG.md index d066e4412c..21206ffb11 100644 --- a/plugins/todo-backend/CHANGELOG.md +++ b/plugins/todo-backend/CHANGELOG.md @@ -1,5 +1,35 @@ # @backstage/plugin-todo-backend +## 0.3.6-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-openapi-utils@0.1.1-next.0 + - @backstage/integration@1.8.0-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 + +## 0.3.5 + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-catalog-node@1.5.0 + - @backstage/integration@1.7.2 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/catalog-client@1.4.6 + - @backstage/backend-openapi-utils@0.1.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + ## 0.3.5-next.2 ### Patch Changes diff --git a/plugins/todo-backend/package.json b/plugins/todo-backend/package.json index ca85bef10d..de6cacce0e 100644 --- a/plugins/todo-backend/package.json +++ b/plugins/todo-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-todo-backend", "description": "A Backstage backend plugin that lets you browse TODO comments in your source code", - "version": "0.3.5-next.2", + "version": "0.3.6-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/todo/CHANGELOG.md b/plugins/todo/CHANGELOG.md index 69b52a179c..e11b9cf345 100644 --- a/plugins/todo/CHANGELOG.md +++ b/plugins/todo/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-todo +## 0.2.32-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 + +## 0.2.30 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 8613ba3928: Switched to using `"exports"` field for `/alpha` subpath export. +- 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 + ## 0.2.30-next.2 ### Patch Changes diff --git a/plugins/todo/package.json b/plugins/todo/package.json index bfe845b9c4..a8da3e18f0 100644 --- a/plugins/todo/package.json +++ b/plugins/todo/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-todo", "description": "A Backstage plugin that lets you browse TODO comments in your source code", - "version": "0.2.30-next.2", + "version": "0.2.32-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/user-settings-backend/CHANGELOG.md b/plugins/user-settings-backend/CHANGELOG.md index dd9c2ecdc7..e749a227fb 100644 --- a/plugins/user-settings-backend/CHANGELOG.md +++ b/plugins/user-settings-backend/CHANGELOG.md @@ -1,5 +1,34 @@ # @backstage/plugin-user-settings-backend +## 0.2.7-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/plugin-auth-node@0.4.2-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/catalog-model@1.4.3 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## 0.2.6 + +### Patch Changes + +- dd0350379b: Added dependency on `@backstage/config` +- 013611b42e: `knex` has been bumped to major version 3 and `better-sqlite3` to major version 9, which deprecate node 16 support. +- 8613ba3928: Switched to using `"exports"` field for `/alpha` subpath export. +- Updated dependencies + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @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 + ## 0.2.6-next.2 ### Patch Changes diff --git a/plugins/user-settings-backend/package.json b/plugins/user-settings-backend/package.json index 762b95cc36..63957f0457 100644 --- a/plugins/user-settings-backend/package.json +++ b/plugins/user-settings-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-user-settings-backend", "description": "The Backstage backend plugin to manage user settings", - "version": "0.2.6-next.2", + "version": "0.2.7-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/user-settings/CHANGELOG.md b/plugins/user-settings/CHANGELOG.md index d8bfd0bf2c..09db865099 100644 --- a/plugins/user-settings/CHANGELOG.md +++ b/plugins/user-settings/CHANGELOG.md @@ -1,5 +1,45 @@ # @backstage/plugin-user-settings +## 0.7.14-next.1 + +### Patch Changes + +- Updated dependencies + - @backstage/core-compat-api@0.0.1-next.0 + +## 0.7.14-next.0 + +### Patch Changes + +- 03d0b6dcdc: The `convertLegacyRouteRef` utility used by the alpha exports is now imported from `@backstage/core-compat-api`. +- Updated dependencies + - @backstage/core-compat-api@0.0.2-next.0 + - @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/frontend-plugin-api@0.3.1-next.0 + - @backstage/core-app-api@1.11.2-next.0 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + +## 0.7.12 + +### Patch Changes + +- 68fc9dc60e: Updated alpha exports according to routing changes in `@backstage/frontend-plugin-api`. +- 6c2b872153: Add official support for React 18. +- 4aa43f62aa: Updated dependency `cross-fetch` to `^4.0.0`. +- Updated dependencies + - @backstage/plugin-catalog-react@1.9.0 + - @backstage/core-components@0.13.8 + - @backstage/frontend-plugin-api@0.3.0 + - @backstage/core-plugin-api@1.8.0 + - @backstage/core-app-api@1.11.1 + - @backstage/theme@0.4.4 + - @backstage/errors@1.2.3 + - @backstage/types@1.1.1 + ## 0.7.12-next.2 ### Patch Changes diff --git a/plugins/user-settings/package.json b/plugins/user-settings/package.json index 1b388169d4..95cda4711e 100644 --- a/plugins/user-settings/package.json +++ b/plugins/user-settings/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-user-settings", "description": "A Backstage plugin that provides a settings page", - "version": "0.7.12-next.2", + "version": "0.7.14-next.1", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", @@ -47,6 +47,7 @@ }, "dependencies": { "@backstage/core-app-api": "workspace:^", + "@backstage/core-compat-api": "workspace:^", "@backstage/core-components": "workspace:^", "@backstage/core-plugin-api": "workspace:^", "@backstage/errors": "workspace:^", @@ -75,7 +76,7 @@ "@testing-library/jest-dom": "^6.0.0", "@testing-library/react": "^14.0.0", "@testing-library/user-event": "^14.0.0", - "cross-fetch": "^3.1.5", + "cross-fetch": "^4.0.0", "msw": "^1.0.0" }, "files": [ diff --git a/plugins/user-settings/src/alpha.tsx b/plugins/user-settings/src/alpha.tsx index 07cc8ce547..419ee2808d 100644 --- a/plugins/user-settings/src/alpha.tsx +++ b/plugins/user-settings/src/alpha.tsx @@ -19,7 +19,7 @@ import { createPageExtension, createPlugin, } from '@backstage/frontend-plugin-api'; -import { convertLegacyRouteRef } from '@backstage/core-plugin-api/alpha'; +import { convertLegacyRouteRef } from '@backstage/core-compat-api'; import { settingsRouteRef } from './plugin'; import React from 'react'; diff --git a/plugins/user-settings/src/components/AuthProviders/ProviderSettingsAvatar.tsx b/plugins/user-settings/src/components/AuthProviders/ProviderSettingsAvatar.tsx index e92b0efe15..07e9b4aa55 100644 --- a/plugins/user-settings/src/components/AuthProviders/ProviderSettingsAvatar.tsx +++ b/plugins/user-settings/src/components/AuthProviders/ProviderSettingsAvatar.tsx @@ -15,11 +15,10 @@ */ import React from 'react'; -import { BackstageTheme } from '@backstage/theme'; -import { makeStyles, Avatar } from '@material-ui/core'; +import { makeStyles, Avatar, Theme } from '@material-ui/core'; import { sidebarConfig } from '@backstage/core-components'; -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ avatar: { width: ({ size }) => size, height: ({ size }) => size, diff --git a/plugins/user-settings/src/components/General/UserSettingsSignInAvatar.tsx b/plugins/user-settings/src/components/General/UserSettingsSignInAvatar.tsx index af1d2969e6..85c616ec72 100644 --- a/plugins/user-settings/src/components/General/UserSettingsSignInAvatar.tsx +++ b/plugins/user-settings/src/components/General/UserSettingsSignInAvatar.tsx @@ -15,12 +15,11 @@ */ import React from 'react'; -import { BackstageTheme } from '@backstage/theme'; -import { makeStyles, Avatar } from '@material-ui/core'; +import { makeStyles, Avatar, Theme } from '@material-ui/core'; import { useUserProfile } from '../useUserProfileInfo'; import { sidebarConfig } from '@backstage/core-components'; -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ avatar: { width: ({ size }) => size, height: ({ size }) => size, diff --git a/plugins/vault-backend/CHANGELOG.md b/plugins/vault-backend/CHANGELOG.md index 06ce82839e..6437abf187 100644 --- a/plugins/vault-backend/CHANGELOG.md +++ b/plugins/vault-backend/CHANGELOG.md @@ -1,5 +1,61 @@ # @backstage/plugin-vault-backend +## 0.4.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-common@0.20.0-next.0 + - @backstage/backend-tasks@0.5.13-next.0 + - @backstage/backend-plugin-api@0.6.8-next.0 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + - @backstage/plugin-vault-node@0.1.1-next.0 + +## 0.4.0 + +### Minor Changes + +- a873a32a1f: Added support for the [new backend system](https://backstage.io/docs/backend-system/). + + In your `packages/backend/src/index.ts` make the following changes: + + ```diff + import { createBackend } from '@backstage/backend-defaults'; + const backend = createBackend(); + // ... other feature additions + + backend.add(import('@backstage/plugin-vault-backend'); + backend.start(); + ``` + + If you use the new backend system, the token renewal task can be defined via configuration file: + + ```diff + vault: + baseUrl: + token: + schedule: + + frequency: ... + + timeout: ... + + # Other schedule options, such as scope or initialDelay + ``` + + If the `schedule` is omitted or set to `false` no token renewal task will be scheduled. + If the value of `schedule` is set to `true` the renew will be scheduled hourly (the default). + In other cases (like in the diff above), the defined schedule will be used. + + **DEPRECATIONS**: The interface `VaultApi` and the type `VaultSecret` are now deprecated. Import them from `@backstage/plugin-vault-node`. + +### Patch Changes + +- Updated dependencies + - @backstage/plugin-vault-node@0.1.0 + - @backstage/backend-common@0.19.9 + - @backstage/backend-plugin-api@0.6.7 + - @backstage/backend-tasks@0.5.12 + - @backstage/config@1.1.1 + - @backstage/errors@1.2.3 + ## 0.4.0-next.2 ### Patch Changes diff --git a/plugins/vault-backend/package.json b/plugins/vault-backend/package.json index 3213b5e32a..f3e1b35e34 100644 --- a/plugins/vault-backend/package.json +++ b/plugins/vault-backend/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault-backend", "description": "A Backstage backend plugin that integrates towards Vault", - "version": "0.4.0-next.2", + "version": "0.4.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/vault-node/CHANGELOG.md b/plugins/vault-node/CHANGELOG.md index 67d9ab502e..cad01e299c 100644 --- a/plugins/vault-node/CHANGELOG.md +++ b/plugins/vault-node/CHANGELOG.md @@ -1,5 +1,24 @@ # @backstage/plugin-vault-node +## 0.1.1-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.8-next.0 + +## 0.1.0 + +### Minor Changes + +- 7a41bcf2af: Initial version of the `plugin-vault-node`` package. It contains the extension point definitions + for the vault backend, as well as some types that will be deprecated in the backend plugin. + +### Patch Changes + +- Updated dependencies + - @backstage/backend-plugin-api@0.6.7 + ## 0.1.0-next.2 ### Patch Changes diff --git a/plugins/vault-node/package.json b/plugins/vault-node/package.json index d371e14409..5895ebe1c6 100644 --- a/plugins/vault-node/package.json +++ b/plugins/vault-node/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault-node", "description": "Node.js library for the vault plugin", - "version": "0.1.0-next.2", + "version": "0.1.1-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/vault/CHANGELOG.md b/plugins/vault/CHANGELOG.md index d434cbbd60..8af5828881 100644 --- a/plugins/vault/CHANGELOG.md +++ b/plugins/vault/CHANGELOG.md @@ -1,5 +1,31 @@ # @backstage/plugin-vault +## 0.1.23-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 + +## 0.1.21 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 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/errors@1.2.3 + ## 0.1.21-next.2 ### Patch Changes diff --git a/plugins/vault/package.json b/plugins/vault/package.json index 3a49f9dd60..f6d6523564 100644 --- a/plugins/vault/package.json +++ b/plugins/vault/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-vault", "description": "A Backstage plugin that integrates towards Vault", - "version": "0.1.21-next.2", + "version": "0.1.23-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/xcmetrics/CHANGELOG.md b/plugins/xcmetrics/CHANGELOG.md index 5f1fca4c0e..7db4abda2d 100644 --- a/plugins/xcmetrics/CHANGELOG.md +++ b/plugins/xcmetrics/CHANGELOG.md @@ -1,5 +1,27 @@ # @backstage/plugin-xcmetrics +## 0.2.46-next.0 + +### Patch Changes + +- Updated dependencies + - @backstage/core-plugin-api@1.8.1-next.0 + - @backstage/core-components@0.13.9-next.0 + - @backstage/theme@0.5.0-next.0 + - @backstage/errors@1.2.3 + +## 0.2.45 + +### Patch Changes + +- 6c2b872153: Add official support for React 18. +- 62b5922916: Internal theme type updates +- Updated dependencies + - @backstage/core-components@0.13.8 + - @backstage/core-plugin-api@1.8.0 + - @backstage/theme@0.4.4 + - @backstage/errors@1.2.3 + ## 0.2.45-next.2 ### Patch Changes diff --git a/plugins/xcmetrics/package.json b/plugins/xcmetrics/package.json index a5a9d0ef59..c4e3b72cdb 100644 --- a/plugins/xcmetrics/package.json +++ b/plugins/xcmetrics/package.json @@ -1,7 +1,7 @@ { "name": "@backstage/plugin-xcmetrics", "description": "A Backstage plugin that shows XCode build metrics for your components", - "version": "0.2.45-next.2", + "version": "0.2.46-next.0", "main": "src/index.ts", "types": "src/index.ts", "license": "Apache-2.0", diff --git a/plugins/xcmetrics/src/components/BuildListFilter/BuildListFilter.tsx b/plugins/xcmetrics/src/components/BuildListFilter/BuildListFilter.tsx index 9a2b759235..ce2a2f4c05 100644 --- a/plugins/xcmetrics/src/components/BuildListFilter/BuildListFilter.tsx +++ b/plugins/xcmetrics/src/components/BuildListFilter/BuildListFilter.tsx @@ -18,7 +18,6 @@ import React, { useEffect, useState } from 'react'; import { makeStyles, IconButton, Grid, Button } from '@material-ui/core'; import FilterList from '@material-ui/icons/FilterList'; import { InfoCard, Select } from '@backstage/core-components'; -import { BackstageTheme } from '@backstage/theme'; import { useApi } from '@backstage/core-plugin-api'; import useAsync from 'react-use/lib/useAsync'; import { BuildFilters, BuildStatus, xcmetricsApiRef } from '../../api'; @@ -28,7 +27,7 @@ const toSelectItems = (strings: string[]) => { return strings.map(str => ({ label: str, value: str })); }; -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ filtersContent: { padding: theme.spacing(2, 2, 2, 2.5), }, diff --git a/plugins/xcmetrics/src/components/OverviewTrends/OverviewTrends.tsx b/plugins/xcmetrics/src/components/OverviewTrends/OverviewTrends.tsx index 4c791688be..e6a1601e37 100644 --- a/plugins/xcmetrics/src/components/OverviewTrends/OverviewTrends.tsx +++ b/plugins/xcmetrics/src/components/OverviewTrends/OverviewTrends.tsx @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import { Grid, makeStyles, useTheme } from '@material-ui/core'; import React, { useState } from 'react'; import { Progress, Select } from '@backstage/core-components'; @@ -30,7 +31,6 @@ import { getValues, sumField, } from '../../utils'; -import { BackstageTheme } from '@backstage/theme'; const useStyles = makeStyles({ spacingTop: { @@ -51,7 +51,7 @@ const DAYS_SELECT_ITEMS = [ export const OverviewTrends = () => { const [days, setDays] = useState(14); - const theme = useTheme(); + const theme = useTheme(); const classes = useStyles(); const client = useApi(xcmetricsApiRef); const buildCountsResult = useAsync( diff --git a/plugins/xcmetrics/src/components/StatusCell/StatusCell.tsx b/plugins/xcmetrics/src/components/StatusCell/StatusCell.tsx index 387879b3a0..98ddadc1ff 100644 --- a/plugins/xcmetrics/src/components/StatusCell/StatusCell.tsx +++ b/plugins/xcmetrics/src/components/StatusCell/StatusCell.tsx @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import { makeStyles, Tooltip } from '@material-ui/core'; + +import { makeStyles, Theme, Tooltip } from '@material-ui/core'; import React from 'react'; -import { BackstageTheme } from '@backstage/theme'; import { BuildStatus, BuildStatusResult, xcmetricsApiRef } from '../../api'; import { cn, formatDuration, formatStatus } from '../../utils'; import useAsync from 'react-use/lib/useAsync'; @@ -71,7 +71,7 @@ type StatusStyle = { [key in BuildStatus]: any; }; -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ root: { width: ({ size }) => size, height: ({ size }) => size, diff --git a/plugins/xcmetrics/src/components/StatusMatrix/StatusMatrix.tsx b/plugins/xcmetrics/src/components/StatusMatrix/StatusMatrix.tsx index 6e78c822ad..4c5af54017 100644 --- a/plugins/xcmetrics/src/components/StatusMatrix/StatusMatrix.tsx +++ b/plugins/xcmetrics/src/components/StatusMatrix/StatusMatrix.tsx @@ -13,9 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + import React from 'react'; import { makeStyles } from '@material-ui/core'; -import { BackstageTheme } from '@backstage/theme'; import { xcmetricsApiRef } from '../../api'; import useAsync from 'react-use/lib/useAsync'; import useMeasure from 'react-use/lib/useMeasure'; @@ -28,7 +28,7 @@ const CELL_SIZE = 12; const CELL_MARGIN = 4; const MAX_ROWS = 4; -const useStyles = makeStyles(theme => ({ +const useStyles = makeStyles(theme => ({ root: { marginTop: 8, display: 'flex', diff --git a/scripts/verify-links.js b/scripts/verify-links.js index b05dd5eead..f685af191b 100755 --- a/scripts/verify-links.js +++ b/scripts/verify-links.js @@ -168,6 +168,9 @@ async function findExternalDocsLinks(dir) { async function main() { process.chdir(projectRoot); + const isCI = Boolean(process.env.CI); + const hasReference = existsSync(resolvePath(projectRoot, 'docs/reference')); + const files = await listFiles('.'); const mdFiles = files.filter(f => f.endsWith('.md')); const badUrls = []; @@ -180,10 +183,19 @@ async function main() { badUrls.push(...badFileUrls); } + if (!hasReference) { + console.log( + "Skipping API reference link validation, no docs/reference/ dir. Reference docs can be built with 'yarn build:api-docs'", + ); + } + if (badUrls.length) { console.log(`Found ${badUrls.length} bad links within repo`); for (const { url, basePath, problem } of badUrls) { if (problem === 'missing') { + if (url.startsWith('../reference/') && !isCI && !hasReference) { + continue; + } console.error( `Unable to reach ${url} from root or microsite/static/, linked from ${basePath}`, ); diff --git a/scripts/verify-local-dependencies.js b/scripts/verify-local-dependencies.js index b44e0836f4..5d75348681 100755 --- a/scripts/verify-local-dependencies.js +++ b/scripts/verify-local-dependencies.js @@ -33,18 +33,84 @@ const depTypes = [ 'optionalDependencies', ]; +const roleRules = [ + { + sourceRole: ['frontend-plugin', 'web-library'], + targetRole: ['backend-plugin', 'node-library'], + message: `Package SOURCE_NAME with frontend role SOURCE_ROLE has a dependency on package TARGET_NAME with backend role TARGET_ROLE, which is not permitted`, + }, + { + sourceRole: ['backend-plugin', 'node-library'], + targetRole: ['frontend-plugin', 'web-library'], + message: `Package SOURCE_NAME with backend role SOURCE_ROLE has a dependency on package TARGET_NAME with frontend role TARGET_ROLE, which is not permitted`, + }, + { + sourceRole: ['common-library'], + targetRole: [ + 'frontend-plugin', + 'web-library', + 'backend-plugin', + 'node-library', + ], + message: `Polymorphic package SOURCE_NAME has a dependency on package TARGET_NAME with role TARGET_ROLE, which is not permitted since it's not also polymorphic`, + }, + { + sourceRole: ['frontend-plugin', 'web-library'], + targetRole: 'frontend-plugin', + except: [ + // TODO(freben): Address these + '@backstage/plugin-api-docs', + '@backstage/plugin-techdocs-addons-test-utils', + ], + message: `Package SOURCE_NAME with role SOURCE_ROLE has a dependency on another plugin package TARGET_NAME, which is not permitted`, + }, + { + sourceRole: ['frontend-plugin', 'web-library'], + targetName: ['@backstage/core-app-api', '@backstage/frontend-app-api'], + except: [ + // These are legitimate + '@backstage/app-defaults', + '@backstage/core-compat-api', + '@backstage/dev-utils', + '@backstage/frontend-app-api', + '@backstage/frontend-test-utils', + '@backstage/test-utils', + // TODO(freben): Address these + '@backstage/plugin-home', + '@backstage/plugin-techdocs-addons-test-utils', + '@backstage/plugin-user-settings', + ], + message: `Plugin package SOURCE_NAME with role SOURCE_ROLE has a runtime dependency on package TARGET_NAME, which is not permitted. If you are using this dependency for dev server purposes, you can move it to devDependencies instead.`, + }, + { + sourceRole: ['backend-plugin', 'node-library'], + targetName: ['@backstage/backend-app-api'], + except: [ + // These are legitimate + '@backstage/backend-common', + '@backstage/backend-defaults', + '@backstage/backend-test-utils', + ], + message: `Plugin package SOURCE_NAME with role SOURCE_ROLE has a runtime dependency on package TARGET_NAME, which is not permitted. If you are using this dependency for dev server purposes, you can move it to devDependencies instead.`, + }, +]; + async function main(args) { const shouldFix = args.includes('--fix'); const rootPath = resolvePath(__dirname, '..'); const { packages } = await getPackages(rootPath); - let hadErrors = false; + let hadVersionRangeErrors = false; + let hadRoleErrors = false; const pkgMap = new Map(packages.map(pkg => [pkg.packageJson.name, pkg])); for (const pkg of packages) { - let fixed = false; + let versionRangeErrorsFixed = false; + /* + * Ensure that all internal deps have "workspace:^" version ranges + */ for (const depType of depTypes) { const deps = pkg.packageJson[depType]; @@ -54,33 +120,94 @@ async function main(args) { } const localPackage = pkgMap.get(dep); if (localPackage && range !== 'workspace:^') { - hadErrors = true; + hadVersionRangeErrors = true; console.log( `Local dependency from ${pkg.packageJson.name} to ${dep} should have a workspace range`, ); - fixed = true; + versionRangeErrorsFixed = true; pkg.packageJson[depType][dep] = 'workspace:^'; } } } - if (shouldFix && fixed) { + /* + * Ensure that there are no forbidden runtime dependency role combinations + */ + const sourceRole = pkg.packageJson.backstage?.role; + if (typeof sourceRole === 'string') { + for (const [targetName] of Object.entries( + pkg.packageJson.dependencies ?? {}, + )) { + let targetPackageJson; + try { + const packageJsonPath = require.resolve( + `${targetName}/package.json`, + { + paths: [pkg.dir], + }, + ); + targetPackageJson = JSON.parse(await fs.readFile(packageJsonPath)); + } catch { + // ignore + continue; + } + + const sourceName = pkg.packageJson.name; + const targetRole = targetPackageJson.backstage?.role; + if (typeof targetRole === 'string') { + for (const rule of roleRules) { + const matchesSourceRole = [rule.sourceRole ?? []] + .flat() + .includes(sourceRole); + const matchesTargetRole = [rule.targetRole ?? []] + .flat() + .includes(targetRole); + const matchesTargetName = [rule.targetName ?? []] + .flat() + .includes(targetName); + const isExempt = [rule.except ?? []].flat().includes(sourceName); + if ( + matchesSourceRole && + (matchesTargetName || matchesTargetRole) && + !isExempt + ) { + hadRoleErrors = true; + console.error( + rule.message + .replace('SOURCE_NAME', `'${sourceName}'`) + .replace('SOURCE_ROLE', `'${sourceRole}'`) + .replace('TARGET_NAME', `'${targetName}'`) + .replace('TARGET_ROLE', `'${targetRole}'`), + ); + } + } + } + } + } + + /* + * Fixup + */ + if (shouldFix && versionRangeErrorsFixed) { await fs.writeJson(joinPath(pkg.dir, 'package.json'), pkg.packageJson, { spaces: 2, }); } } - if (!shouldFix && hadErrors) { + if (!shouldFix && hadVersionRangeErrors) { console.error(); console.error('At least one package has an invalid local dependency'); console.error( 'Run `node scripts/verify-local-dependencies.js --fix` to fix', ); - process.exit(2); } + + if (hadRoleErrors) { + process.exit(3); + } } main(process.argv.slice(2)).catch(error => { diff --git a/storybook/yarn.lock b/storybook/yarn.lock index e16eb422f2..0d68b14c70 100644 --- a/storybook/yarn.lock +++ b/storybook/yarn.lock @@ -2842,90 +2842,82 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-darwin-arm64@npm:1.3.96" +"@swc/core-darwin-arm64@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-darwin-arm64@npm:1.3.99" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-darwin-x64@npm:1.3.96" +"@swc/core-darwin-x64@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-darwin-x64@npm:1.3.99" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.96" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@swc/core-linux-arm64-gnu@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.96" +"@swc/core-linux-arm64-gnu@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.99" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.96" +"@swc/core-linux-arm64-musl@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.99" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.96" +"@swc/core-linux-x64-gnu@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.99" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-linux-x64-musl@npm:1.3.96" +"@swc/core-linux-x64-musl@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-linux-x64-musl@npm:1.3.99" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.96" +"@swc/core-win32-arm64-msvc@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.99" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.96" +"@swc/core-win32-ia32-msvc@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.99" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.96" +"@swc/core-win32-x64-msvc@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.99" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.46": - version: 1.3.96 - resolution: "@swc/core@npm:1.3.96" + version: 1.3.99 + resolution: "@swc/core@npm:1.3.99" dependencies: - "@swc/core-darwin-arm64": 1.3.96 - "@swc/core-darwin-x64": 1.3.96 - "@swc/core-linux-arm-gnueabihf": 1.3.96 - "@swc/core-linux-arm64-gnu": 1.3.96 - "@swc/core-linux-arm64-musl": 1.3.96 - "@swc/core-linux-x64-gnu": 1.3.96 - "@swc/core-linux-x64-musl": 1.3.96 - "@swc/core-win32-arm64-msvc": 1.3.96 - "@swc/core-win32-ia32-msvc": 1.3.96 - "@swc/core-win32-x64-msvc": 1.3.96 + "@swc/core-darwin-arm64": 1.3.99 + "@swc/core-darwin-x64": 1.3.99 + "@swc/core-linux-arm64-gnu": 1.3.99 + "@swc/core-linux-arm64-musl": 1.3.99 + "@swc/core-linux-x64-gnu": 1.3.99 + "@swc/core-linux-x64-musl": 1.3.99 + "@swc/core-win32-arm64-msvc": 1.3.99 + "@swc/core-win32-ia32-msvc": 1.3.99 + "@swc/core-win32-x64-msvc": 1.3.99 "@swc/counter": ^0.1.1 "@swc/types": ^0.1.5 peerDependencies: @@ -2935,8 +2927,6 @@ __metadata: optional: true "@swc/core-darwin-x64": optional: true - "@swc/core-linux-arm-gnueabihf": - optional: true "@swc/core-linux-arm64-gnu": optional: true "@swc/core-linux-arm64-musl": @@ -2954,7 +2944,7 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: 41d4a4461b2952aaf8d3be945d373d0f3bd126115ee1aad0f76f2690e2b5635b6ec5bb54a7638deb9afedb1ad6f7d8453468a704e54e5fbb8234dd4a43b80205 + checksum: a4d51e650913045fe3100195b053dafb55dc06fcadd4a9381712c64f09a75d548596bb1a96e8ed84ba0199f701e821a381a25db82c1016cdd731e0077a83192e languageName: node linkType: hard diff --git a/yarn.lock b/yarn.lock index 0e715017b0..ac8c50cc20 100644 --- a/yarn.lock +++ b/yarn.lock @@ -105,54 +105,9 @@ __metadata: languageName: node linkType: hard -"@apollo/cache-control-types@npm:^1.0.3": - version: 1.0.3 - resolution: "@apollo/cache-control-types@npm:1.0.3" - peerDependencies: - graphql: 14.x || 15.x || 16.x - checksum: 1c2791f3c7fa0fc609bd42cebcb6a0d1ccfcee9b22e54c4aa5af918944ae9dbdd45d7b84670afc6de34444e9226e9e82523bc3969805b506b86fd28dc9abc9fa - languageName: node - linkType: hard - -"@apollo/client@npm:^3.0.0": - version: 3.8.7 - resolution: "@apollo/client@npm:3.8.7" - dependencies: - "@graphql-typed-document-node/core": ^3.1.1 - "@wry/context": ^0.7.3 - "@wry/equality": ^0.5.6 - "@wry/trie": ^0.4.3 - graphql-tag: ^2.12.6 - hoist-non-react-statics: ^3.3.2 - optimism: ^0.17.5 - prop-types: ^15.7.2 - response-iterator: ^0.2.6 - symbol-observable: ^4.0.0 - ts-invariant: ^0.10.3 - tslib: ^2.3.0 - zen-observable-ts: ^1.2.5 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - graphql-ws: ^5.5.5 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - subscriptions-transport-ws: ^0.9.0 || ^0.11.0 - peerDependenciesMeta: - graphql-ws: - optional: true - react: - optional: true - react-dom: - optional: true - subscriptions-transport-ws: - optional: true - checksum: b4343d7f64481d6e4ee9f3ff461cfdab669728104b7540a4fff885232335fed55920e76de823ee4f2fa711aa72afbbf1cfe29601eacabb3577dc1f3ee82046d4 - languageName: node - linkType: hard - -"@apollo/explorer@npm:^2.0.0": - version: 2.0.2 - resolution: "@apollo/explorer@npm:2.0.2" +"@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 @@ -170,233 +125,11 @@ __metadata: optional: true use-deep-compare-effect: optional: true - checksum: 02ba8732b25ea568905f7c68bd68ae5f9f988743348e93b7ecba4a6882fc5cba3f4f1a426368d96b8aa795c5c9f32fab0fd2be35e4ad01d1cfefa495a22eb92b + checksum: 0617cd1995cb8a63e25ee93204e09f6210a9031ca7942a7c74b9ac74677072fd6242d1479110d9a756c013589626706766380788e9b07dc63a18b494f581406c languageName: node linkType: hard -"@apollo/protobufjs@npm:1.2.7": - version: 1.2.7 - resolution: "@apollo/protobufjs@npm:1.2.7" - dependencies: - "@protobufjs/aspromise": ^1.1.2 - "@protobufjs/base64": ^1.1.2 - "@protobufjs/codegen": ^2.0.4 - "@protobufjs/eventemitter": ^1.1.0 - "@protobufjs/fetch": ^1.1.0 - "@protobufjs/float": ^1.0.2 - "@protobufjs/inquire": ^1.1.0 - "@protobufjs/path": ^1.1.2 - "@protobufjs/pool": ^1.1.0 - "@protobufjs/utf8": ^1.1.0 - "@types/long": ^4.0.0 - long: ^4.0.0 - bin: - apollo-pbjs: bin/pbjs - apollo-pbts: bin/pbts - checksum: e01a33984ae06d6679f6796bb44e55260112ddd090ebc9f87d3f952c45153dd5df5c91ac4bf91ba60fb72ff8c1218059ce4bf8bb2eb08c5049c783de0098eec0 - languageName: node - linkType: hard - -"@apollo/server-gateway-interface@npm:^1.1.1": - version: 1.1.1 - resolution: "@apollo/server-gateway-interface@npm:1.1.1" - dependencies: - "@apollo/usage-reporting-protobuf": ^4.1.1 - "@apollo/utils.fetcher": ^2.0.0 - "@apollo/utils.keyvaluecache": ^2.1.0 - "@apollo/utils.logger": ^2.0.0 - peerDependencies: - graphql: 14.x || 15.x || 16.x - checksum: b85ca1682258f6d022b49acf4b6cb8147a4cc38fcc0e68fa3ca6a00843bee5b84f8317af26cbe3e6a41ede6990eb7eb733c50a123441a1efab56572b7d0fd6dc - languageName: node - linkType: hard - -"@apollo/server@npm:^4.0.0": - version: 4.9.5 - resolution: "@apollo/server@npm:4.9.5" - dependencies: - "@apollo/cache-control-types": ^1.0.3 - "@apollo/server-gateway-interface": ^1.1.1 - "@apollo/usage-reporting-protobuf": ^4.1.1 - "@apollo/utils.createhash": ^2.0.0 - "@apollo/utils.fetcher": ^2.0.0 - "@apollo/utils.isnodelike": ^2.0.0 - "@apollo/utils.keyvaluecache": ^2.1.0 - "@apollo/utils.logger": ^2.0.0 - "@apollo/utils.usagereporting": ^2.1.0 - "@apollo/utils.withrequired": ^2.0.0 - "@graphql-tools/schema": ^9.0.0 - "@josephg/resolvable": ^1.0.0 - "@types/express": ^4.17.13 - "@types/express-serve-static-core": ^4.17.30 - "@types/node-fetch": ^2.6.1 - async-retry: ^1.2.1 - body-parser: ^1.20.0 - cors: ^2.8.5 - express: ^4.17.1 - loglevel: ^1.6.8 - lru-cache: ^7.10.1 - negotiator: ^0.6.3 - node-abort-controller: ^3.1.1 - node-fetch: ^2.6.7 - uuid: ^9.0.0 - whatwg-mimetype: ^3.0.0 - peerDependencies: - graphql: ^16.6.0 - checksum: 52aac2ef0665a776b2da8930b2a6e31b652a9a3c5b2e48e56d323e40b618acae091c69dc04ebed5355a36e22b793ceb31baa04afe516205c67c2db87c0fb01a0 - languageName: node - linkType: hard - -"@apollo/usage-reporting-protobuf@npm:^4.1.0, @apollo/usage-reporting-protobuf@npm:^4.1.1": - version: 4.1.1 - resolution: "@apollo/usage-reporting-protobuf@npm:4.1.1" - dependencies: - "@apollo/protobufjs": 1.2.7 - checksum: 899f13cfb57cfe4320e50fff84254604c25538620aa5a56bad06fb4fc929a8842237b376a5ab6d82800d9aceacc8e79ccae01a1c11e85456d4a9ed50a6fe40ee - languageName: node - linkType: hard - -"@apollo/utils.createhash@npm:^2.0.0": - version: 2.0.0 - resolution: "@apollo/utils.createhash@npm:2.0.0" - dependencies: - "@apollo/utils.isnodelike": ^2.0.0 - sha.js: ^2.4.11 - checksum: 467558891f22b05293ca2d9c04fb4815d8b13e9e03cac6f6f5eb752d06f00eb46a3f237c93250d83d53753326c289899b177f3147cd368079b7e74098392b1b7 - languageName: node - linkType: hard - -"@apollo/utils.dropunuseddefinitions@npm:^2.0.1": - version: 2.0.1 - resolution: "@apollo/utils.dropunuseddefinitions@npm:2.0.1" - peerDependencies: - graphql: 14.x || 15.x || 16.x - checksum: c12166f2551fb44045a8210317b7776abc263136bd07bfe3c6eecdb050468590fc73e524efc437cad21cc4cfcd1efc3e110285025150c2073a4b303934898ac1 - languageName: node - linkType: hard - -"@apollo/utils.fetcher@npm:^2.0.0": - version: 2.0.0 - resolution: "@apollo/utils.fetcher@npm:2.0.0" - checksum: e9f4b696f496751d1b781836f394608115ae1fab673cb30ede223748d04eb983384b5c9e01f8350bb0530d841fd0ccb41be3a3a4bcae0a141b2478862add29cc - languageName: node - linkType: hard - -"@apollo/utils.isnodelike@npm:^2.0.0": - version: 2.0.0 - resolution: "@apollo/utils.isnodelike@npm:2.0.0" - checksum: 436853000037c955e7112d19b60ca82e6d453e7bc715f3360ab23384fe1153039b06f9329e85e1adb030a1b22f0b9e960b28a5ccd92f7c61a1af57e58401a1aa - languageName: node - linkType: hard - -"@apollo/utils.keyvaluecache@npm:^2.1.0": - version: 2.1.0 - resolution: "@apollo/utils.keyvaluecache@npm:2.1.0" - dependencies: - "@apollo/utils.logger": ^2.0.0 - lru-cache: ^7.14.1 - checksum: 1e1c9cdea98384c01864250bd8e39cffaa822adbd60f9387ecf5c6565f69c2fd23b3ebdc499990b39535d4df0e3991fe73ec2d59a2798631ede04d8834d8c384 - languageName: node - linkType: hard - -"@apollo/utils.logger@npm:^2.0.0": - version: 2.0.0 - resolution: "@apollo/utils.logger@npm:2.0.0" - checksum: bfe87036382adaf1b5f05acc8e926b6316a8b37dc0c0b20ae0c2010b61085d018620203eda9cb6884e650f3d971a4dfdbc30980deedba99d219ba2abd9bd8ffa - languageName: node - linkType: hard - -"@apollo/utils.printwithreducedwhitespace@npm:^2.0.1": - version: 2.0.1 - resolution: "@apollo/utils.printwithreducedwhitespace@npm:2.0.1" - peerDependencies: - graphql: 14.x || 15.x || 16.x - checksum: 16cd191e66f3801b15deb581426cd1f55066bb824c32d63fe9de9c255bea2e2b6ee1ffc88873607830d2df0f3b4d9a14c707b709f205062e21a502f08f40d513 - languageName: node - linkType: hard - -"@apollo/utils.removealiases@npm:2.0.1": - version: 2.0.1 - resolution: "@apollo/utils.removealiases@npm:2.0.1" - peerDependencies: - graphql: 14.x || 15.x || 16.x - checksum: 2f3f925b239bce49fe9d80bb9fbb551992c8d9180af160e780faf1c88971a30ef16b842e82e1f27a0e1f8c649af0a442ef95f6838d4cde6148939ec73d9464f6 - languageName: node - linkType: hard - -"@apollo/utils.sortast@npm:^2.0.1": - version: 2.0.1 - resolution: "@apollo/utils.sortast@npm:2.0.1" - dependencies: - lodash.sortby: ^4.7.0 - peerDependencies: - graphql: 14.x || 15.x || 16.x - checksum: b71245558ebd64bf93b98aec933d4b5f5758e0fecf7915728d94725ed4201fb2515e2af92fe01a595638147e5e0ef50a27ab5323d9b76eeb126769fb1e58f051 - languageName: node - linkType: hard - -"@apollo/utils.stripsensitiveliterals@npm:^2.0.1": - version: 2.0.1 - resolution: "@apollo/utils.stripsensitiveliterals@npm:2.0.1" - peerDependencies: - graphql: 14.x || 15.x || 16.x - checksum: a3f74af0626f89d61f7ed1d25194f6b77006a06653399eecaea0b246cf685a85465091f2dc70280b127871b5c1eda7ded799ce176271c2612946acdc9453d388 - languageName: node - linkType: hard - -"@apollo/utils.usagereporting@npm:^2.1.0": - version: 2.1.0 - resolution: "@apollo/utils.usagereporting@npm:2.1.0" - dependencies: - "@apollo/usage-reporting-protobuf": ^4.1.0 - "@apollo/utils.dropunuseddefinitions": ^2.0.1 - "@apollo/utils.printwithreducedwhitespace": ^2.0.1 - "@apollo/utils.removealiases": 2.0.1 - "@apollo/utils.sortast": ^2.0.1 - "@apollo/utils.stripsensitiveliterals": ^2.0.1 - peerDependencies: - graphql: 14.x || 15.x || 16.x - checksum: 7a676f9b519563955d105264a93668e3897108d937115063c4cd3df310f32be29b8d7bdfe12eeca8d5966558d8c7f07742bcfd9ebb844c48b6ad1acee620183f - languageName: node - linkType: hard - -"@apollo/utils.withrequired@npm:^2.0.0": - version: 2.0.0 - resolution: "@apollo/utils.withrequired@npm:2.0.0" - checksum: 144cef2859318879b3478693eb891c31afa75f30e807bdfbef98ec3aa93c74cb0a3f76d245dbdedd4954f52c1b9ec8bebbccc69eb5d8bb8109c88c4352225e24 - languageName: node - linkType: hard - -"@ardatan/relay-compiler@npm:12.0.0": - version: 12.0.0 - resolution: "@ardatan/relay-compiler@npm:12.0.0" - dependencies: - "@babel/core": ^7.14.0 - "@babel/generator": ^7.14.0 - "@babel/parser": ^7.14.0 - "@babel/runtime": ^7.0.0 - "@babel/traverse": ^7.14.0 - "@babel/types": ^7.0.0 - babel-preset-fbjs: ^3.4.0 - chalk: ^4.0.0 - fb-watchman: ^2.0.0 - fbjs: ^3.0.0 - glob: ^7.1.1 - immutable: ~3.7.6 - invariant: ^2.2.4 - nullthrows: ^1.1.1 - relay-runtime: 12.0.0 - signedsource: ^1.0.0 - yargs: ^15.3.1 - peerDependencies: - graphql: "*" - bin: - relay-compiler: bin/relay-compiler - checksum: f0cec120d02961ee8652e0dde72d9e425bc97cad5d0f767d8764cfd30952294eb2838432f33e4da8bb6999d0c13dcd1df128280666bfea373294d98aa8033ae7 - languageName: node - linkType: hard - -"@ardatan/sync-fetch@npm:0.0.1": +"@ardatan/sync-fetch@npm:^0.0.1": version: 0.0.1 resolution: "@ardatan/sync-fetch@npm:0.0.1" dependencies: @@ -405,59 +138,101 @@ __metadata: languageName: node linkType: hard -"@asyncapi/avro-schema-parser@npm:^1.1.0": - version: 1.1.0 - resolution: "@asyncapi/avro-schema-parser@npm:1.1.0" +"@asyncapi/avro-schema-parser@npm:^3.0.5": + version: 3.0.5 + resolution: "@asyncapi/avro-schema-parser@npm:3.0.5" dependencies: - avsc: ^5.7.3 - checksum: 31bb6285a49f255e809088164ac4638103b2ec3e761c9c85be116af8abd9fe429626ba79ba6b3899d3823a77216741d9d793841e600145f2956328f3ce45a0e0 + "@asyncapi/parser": ^2.1.2 + "@types/json-schema": ^7.0.11 + avsc: ^5.7.6 + checksum: c8e0a5aac1a5793ab92af44f67416273a8c5a61336785a6d6963ea80402f4b6c6129e1deff6f4e1a09aa31b3e311203bf8c08fb9f3aa9f01114c1b558f3a74f3 languageName: node linkType: hard -"@asyncapi/openapi-schema-parser@npm:^2.0.1": - version: 2.0.1 - resolution: "@asyncapi/openapi-schema-parser@npm:2.0.1" +"@asyncapi/openapi-schema-parser@npm:^3.0.6": + version: 3.0.6 + resolution: "@asyncapi/openapi-schema-parser@npm:3.0.6" dependencies: - "@openapi-contrib/openapi-schema-to-json-schema": ^3.0.0 - checksum: 703662e20f93baed7bfafa1a8fe909c6d8df6404fbd86cf86276c736bcb5e5a54dd5b8a6d979aa27d9502fad1ea11f0d89c3e6f7ca57b67579efa9f5b8ca1759 + "@asyncapi/parser": ^2.1.2 + "@openapi-contrib/openapi-schema-to-json-schema": ~3.2.0 + ajv: ^8.11.0 + ajv-errors: ^3.0.0 + ajv-formats: ^2.1.1 + checksum: d02174ff44d9f863e54c80f96bc95f96f8eeb491843ecc89ba92222d3e77e6f1593c370d83208b70360a0843a56cc35d23ca559c196dba1eb14a8b62e25d6a55 languageName: node linkType: hard -"@asyncapi/parser@npm:^1.18.0": - version: 1.18.0 - resolution: "@asyncapi/parser@npm:1.18.0" +"@asyncapi/parser@npm:^2.1.0, @asyncapi/parser@npm:^2.1.2": + version: 2.1.2 + resolution: "@asyncapi/parser@npm:2.1.2" dependencies: - "@apidevtools/json-schema-ref-parser": ^9.0.6 - "@asyncapi/specs": ^4.1.0 - "@fmvilas/pseudo-yaml-ast": ^0.3.1 - ajv: ^6.10.1 - js-yaml: ^3.13.1 - json-to-ast: ^2.1.0 - lodash.clonedeep: ^4.5.0 - node-fetch: ^2.6.0 - tiny-merge-patch: ^0.1.2 - checksum: 7e08cae52990ce97299170faf99aaf27a8e2e02e6b03df28518d256f5687f394c26fd0a4aba235514ed4e3c2fd081a79321a489c20987ed22122afdb0b9ea0dd + "@asyncapi/specs": ^5.1.0 + "@openapi-contrib/openapi-schema-to-json-schema": ~3.2.0 + "@stoplight/json": ^3.20.2 + "@stoplight/json-ref-readers": ^1.2.2 + "@stoplight/json-ref-resolver": ^3.1.5 + "@stoplight/spectral-core": ^1.16.1 + "@stoplight/spectral-functions": ^1.7.2 + "@stoplight/spectral-parsers": ^1.0.2 + "@stoplight/spectral-ref-resolver": ^1.0.3 + "@stoplight/types": ^13.12.0 + "@types/json-schema": ^7.0.11 + "@types/urijs": ^1.19.19 + ajv: ^8.11.0 + ajv-errors: ^3.0.0 + ajv-formats: ^2.1.1 + avsc: ^5.7.5 + js-yaml: ^4.1.0 + jsonpath-plus: ^7.2.0 + node-fetch: 2.6.7 + checksum: fb88d211455937bccd03a84addf546523c0ecd6f6564927227085f803d520e65915ae5aaf0e26dfad23d602f3444451abdb8d3001bc551f30d41e6b35986b307 languageName: node linkType: hard -"@asyncapi/protobuf-schema-parser@npm:^1.0.0": - version: 1.0.0 - resolution: "@asyncapi/protobuf-schema-parser@npm:1.0.0" +"@asyncapi/parser@npm:^3.0.0-next-major-spec.10": + version: 3.0.0-next-major-spec.12 + resolution: "@asyncapi/parser@npm:3.0.0-next-major-spec.12" dependencies: - conventional-changelog-conventionalcommits: ^5.0.0 + "@asyncapi/specs": ^6.0.0-next-major-spec.9 + "@openapi-contrib/openapi-schema-to-json-schema": ~3.2.0 + "@stoplight/json-ref-resolver": ^3.1.5 + "@stoplight/spectral-core": ^1.16.1 + "@stoplight/spectral-functions": ^1.7.2 + "@stoplight/spectral-parsers": ^1.0.2 + "@types/json-schema": ^7.0.11 + "@types/urijs": ^1.19.19 + ajv: ^8.11.0 + ajv-errors: ^3.0.0 + ajv-formats: ^2.1.1 + avsc: ^5.7.5 + js-yaml: ^4.1.0 + jsonpath-plus: ^7.2.0 + node-fetch: 2.6.7 + ramldt2jsonschema: ^1.2.3 + webapi-parser: ^0.5.0 + checksum: 960843cc3303fe6c2c2fe227edb66d396fa96100b5e1e7ed001bde70a341505db0e638e5a518f9d00c4daa707c77c4779aa36ea8d7cd264d1e66335587c30750 + languageName: node + linkType: hard + +"@asyncapi/protobuf-schema-parser@npm:3.0.0": + version: 3.0.0 + resolution: "@asyncapi/protobuf-schema-parser@npm:3.0.0" + dependencies: + "@asyncapi/parser": ^2.1.0 + "@types/protocol-buffers-schema": ^3.4.1 protocol-buffers-schema: ^3.6.0 - checksum: 0d7dfdf79bb698618701f2ace8f369d3d3b38d26015b6b4a01cab47f9587f88dd9f5042d6f796fa59044b114d801075d47d7216f28bba3c96823364ab5790b7d + checksum: a80bbc9bb5ef4e21d5eb0aa56f5aa1207afff482a72abcbf45faece6f295bdeaf81fff349aa1542ef4cf8674f1ff943e8bc29371b07154e615e097d80b15a7dd languageName: node linkType: hard -"@asyncapi/react-component@npm:1.0.0-next.48": - version: 1.0.0-next.48 - resolution: "@asyncapi/react-component@npm:1.0.0-next.48" +"@asyncapi/react-component@npm:1.2.2": + version: 1.2.2 + resolution: "@asyncapi/react-component@npm:1.2.2" dependencies: - "@asyncapi/avro-schema-parser": ^1.1.0 - "@asyncapi/openapi-schema-parser": ^2.0.1 - "@asyncapi/parser": ^1.18.0 - "@asyncapi/protobuf-schema-parser": ^1.0.0 + "@asyncapi/avro-schema-parser": ^3.0.5 + "@asyncapi/openapi-schema-parser": ^3.0.6 + "@asyncapi/parser": ^3.0.0-next-major-spec.10 + "@asyncapi/protobuf-schema-parser": 3.0.0 highlight.js: ^10.7.2 isomorphic-dompurify: ^0.13.0 marked: ^4.0.14 @@ -466,7 +241,7 @@ __metadata: peerDependencies: react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: e01c5ca294d708e6557b3e3ccbc83e46a0cb1ca36cc022aec26ff8c7372756df390993ba21f993cdba3b4a95aea644005d9f3531cd5ce066e4376ebf624b21f2 + checksum: d8b4d692b6bc1c8a98c2cb61d72207e4faea9c03ce39f959131da43b21cbd4e7efb0e8d137a40eac6bdf3c389bf33ff534efd259f38f580ee7205aa702e803d1 languageName: node linkType: hard @@ -479,6 +254,24 @@ __metadata: languageName: node linkType: hard +"@asyncapi/specs@npm:^5.1.0": + version: 5.1.0 + resolution: "@asyncapi/specs@npm:5.1.0" + dependencies: + "@types/json-schema": ^7.0.11 + checksum: a4ca804d028c8ecb4d6484de84633854e64ba32fb995caa413cb1388da1e4f2bce3b8c635cd3a9217f6f0c202b566498d09301cd825d6485014a7b510a5d3faf + languageName: node + linkType: hard + +"@asyncapi/specs@npm:^6.0.0-next-major-spec.9": + version: 6.0.0-next-major-spec.13 + resolution: "@asyncapi/specs@npm:6.0.0-next-major-spec.13" + dependencies: + "@types/json-schema": ^7.0.11 + checksum: a66bedba036684fa7984d94d211fe5aaac28043d3a79c4fc6bf5ddabf3a384e1a9cb3b4224d1a937448d2a6e24e3ddf5c4e8c7a32804963994d84fa5e0285b7c + languageName: node + linkType: hard + "@aws-crypto/crc32@npm:3.0.0": version: 3.0.0 resolution: "@aws-crypto/crc32@npm:3.0.0" @@ -552,6 +345,17 @@ __metadata: languageName: node linkType: hard +"@aws-crypto/sha256-js@npm:^5.0.0": + version: 5.2.0 + resolution: "@aws-crypto/sha256-js@npm:5.2.0" + dependencies: + "@aws-crypto/util": ^5.2.0 + "@aws-sdk/types": ^3.222.0 + tslib: ^2.6.2 + checksum: 007fbe0436d714d0d0d282e2b61c90e45adcb9ad75eac9ac7ba03d32b56624afd09b2a9ceb4d659661cf17c51d74d1900ab6b00eacafc002da1101664955ca53 + languageName: node + linkType: hard + "@aws-crypto/supports-web-crypto@npm:^3.0.0": version: 3.0.0 resolution: "@aws-crypto/supports-web-crypto@npm:3.0.0" @@ -572,6 +376,17 @@ __metadata: languageName: node linkType: hard +"@aws-crypto/util@npm:^5.2.0": + version: 5.2.0 + resolution: "@aws-crypto/util@npm:5.2.0" + dependencies: + "@aws-sdk/types": ^3.222.0 + "@smithy/util-utf8": ^2.0.0 + tslib: ^2.6.2 + checksum: f0f81d9d2771c59946cfec48b86cb23d39f78a966c4a1f89d4753abdc3cb38de06f907d1e6450059b121d48ac65d612ab88bdb70014553a077fc3dabddfbf8d6 + languageName: node + linkType: hard + "@aws-sdk/abort-controller@npm:3.370.0, @aws-sdk/abort-controller@npm:^3.347.0": version: 3.370.0 resolution: "@aws-sdk/abort-controller@npm:3.370.0" @@ -582,505 +397,505 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/client-cognito-identity@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/client-cognito-identity@npm:3.449.0" +"@aws-sdk/client-cognito-identity@npm:3.454.0": + version: 3.454.0 + resolution: "@aws-sdk/client-cognito-identity@npm:3.454.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.449.0 - "@aws-sdk/core": 3.445.0 - "@aws-sdk/credential-provider-node": 3.449.0 - "@aws-sdk/middleware-host-header": 3.449.0 - "@aws-sdk/middleware-logger": 3.449.0 - "@aws-sdk/middleware-recursion-detection": 3.449.0 - "@aws-sdk/middleware-signing": 3.449.0 - "@aws-sdk/middleware-user-agent": 3.449.0 - "@aws-sdk/region-config-resolver": 3.433.0 - "@aws-sdk/types": 3.449.0 - "@aws-sdk/util-endpoints": 3.449.0 - "@aws-sdk/util-user-agent-browser": 3.449.0 - "@aws-sdk/util-user-agent-node": 3.449.0 - "@smithy/config-resolver": ^2.0.16 - "@smithy/fetch-http-handler": ^2.2.4 - "@smithy/hash-node": ^2.0.12 - "@smithy/invalid-dependency": ^2.0.12 - "@smithy/middleware-content-length": ^2.0.14 - "@smithy/middleware-endpoint": ^2.1.3 - "@smithy/middleware-retry": ^2.0.18 - "@smithy/middleware-serde": ^2.0.12 - "@smithy/middleware-stack": ^2.0.6 - "@smithy/node-config-provider": ^2.1.3 - "@smithy/node-http-handler": ^2.1.8 - "@smithy/protocol-http": ^3.0.8 - "@smithy/smithy-client": ^2.1.12 - "@smithy/types": ^2.4.0 - "@smithy/url-parser": ^2.0.12 - "@smithy/util-base64": ^2.0.0 + "@aws-sdk/client-sts": 3.454.0 + "@aws-sdk/core": 3.451.0 + "@aws-sdk/credential-provider-node": 3.451.0 + "@aws-sdk/middleware-host-header": 3.451.0 + "@aws-sdk/middleware-logger": 3.451.0 + "@aws-sdk/middleware-recursion-detection": 3.451.0 + "@aws-sdk/middleware-signing": 3.451.0 + "@aws-sdk/middleware-user-agent": 3.451.0 + "@aws-sdk/region-config-resolver": 3.451.0 + "@aws-sdk/types": 3.451.0 + "@aws-sdk/util-endpoints": 3.451.0 + "@aws-sdk/util-user-agent-browser": 3.451.0 + "@aws-sdk/util-user-agent-node": 3.451.0 + "@smithy/config-resolver": ^2.0.18 + "@smithy/fetch-http-handler": ^2.2.6 + "@smithy/hash-node": ^2.0.15 + "@smithy/invalid-dependency": ^2.0.13 + "@smithy/middleware-content-length": ^2.0.15 + "@smithy/middleware-endpoint": ^2.2.0 + "@smithy/middleware-retry": ^2.0.20 + "@smithy/middleware-serde": ^2.0.13 + "@smithy/middleware-stack": ^2.0.7 + "@smithy/node-config-provider": ^2.1.5 + "@smithy/node-http-handler": ^2.1.9 + "@smithy/protocol-http": ^3.0.9 + "@smithy/smithy-client": ^2.1.15 + "@smithy/types": ^2.5.0 + "@smithy/url-parser": ^2.0.13 + "@smithy/util-base64": ^2.0.1 "@smithy/util-body-length-browser": ^2.0.0 "@smithy/util-body-length-node": ^2.1.0 - "@smithy/util-defaults-mode-browser": ^2.0.16 - "@smithy/util-defaults-mode-node": ^2.0.21 - "@smithy/util-endpoints": ^1.0.2 - "@smithy/util-retry": ^2.0.5 - "@smithy/util-utf8": ^2.0.0 + "@smithy/util-defaults-mode-browser": ^2.0.19 + "@smithy/util-defaults-mode-node": ^2.0.25 + "@smithy/util-endpoints": ^1.0.4 + "@smithy/util-retry": ^2.0.6 + "@smithy/util-utf8": ^2.0.2 tslib: ^2.5.0 - checksum: 050368396fb9fd853322a334c747da2734f54fb56605c97878cde74a618d41de05f841e45e5fde6cd0274593c2a126bf1bc4472d08c3c5535cf9725e10134c80 + checksum: 277d664aeaaf3b053949ca96d26c09d4bafc3afbd93a35bbd3a9b9b05c742e82fcc2398b1c63422de049ddbf45b80272427f444721b3e72435ffa40cf7519942 languageName: node linkType: hard "@aws-sdk/client-eks@npm:^3.350.0": - version: 3.449.0 - resolution: "@aws-sdk/client-eks@npm:3.449.0" + version: 3.454.0 + resolution: "@aws-sdk/client-eks@npm:3.454.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.449.0 - "@aws-sdk/core": 3.445.0 - "@aws-sdk/credential-provider-node": 3.449.0 - "@aws-sdk/middleware-host-header": 3.449.0 - "@aws-sdk/middleware-logger": 3.449.0 - "@aws-sdk/middleware-recursion-detection": 3.449.0 - "@aws-sdk/middleware-signing": 3.449.0 - "@aws-sdk/middleware-user-agent": 3.449.0 - "@aws-sdk/region-config-resolver": 3.433.0 - "@aws-sdk/types": 3.449.0 - "@aws-sdk/util-endpoints": 3.449.0 - "@aws-sdk/util-user-agent-browser": 3.449.0 - "@aws-sdk/util-user-agent-node": 3.449.0 - "@smithy/config-resolver": ^2.0.16 - "@smithy/fetch-http-handler": ^2.2.4 - "@smithy/hash-node": ^2.0.12 - "@smithy/invalid-dependency": ^2.0.12 - "@smithy/middleware-content-length": ^2.0.14 - "@smithy/middleware-endpoint": ^2.1.3 - "@smithy/middleware-retry": ^2.0.18 - "@smithy/middleware-serde": ^2.0.12 - "@smithy/middleware-stack": ^2.0.6 - "@smithy/node-config-provider": ^2.1.3 - "@smithy/node-http-handler": ^2.1.8 - "@smithy/protocol-http": ^3.0.8 - "@smithy/smithy-client": ^2.1.12 - "@smithy/types": ^2.4.0 - "@smithy/url-parser": ^2.0.12 - "@smithy/util-base64": ^2.0.0 + "@aws-sdk/client-sts": 3.454.0 + "@aws-sdk/core": 3.451.0 + "@aws-sdk/credential-provider-node": 3.451.0 + "@aws-sdk/middleware-host-header": 3.451.0 + "@aws-sdk/middleware-logger": 3.451.0 + "@aws-sdk/middleware-recursion-detection": 3.451.0 + "@aws-sdk/middleware-signing": 3.451.0 + "@aws-sdk/middleware-user-agent": 3.451.0 + "@aws-sdk/region-config-resolver": 3.451.0 + "@aws-sdk/types": 3.451.0 + "@aws-sdk/util-endpoints": 3.451.0 + "@aws-sdk/util-user-agent-browser": 3.451.0 + "@aws-sdk/util-user-agent-node": 3.451.0 + "@smithy/config-resolver": ^2.0.18 + "@smithy/fetch-http-handler": ^2.2.6 + "@smithy/hash-node": ^2.0.15 + "@smithy/invalid-dependency": ^2.0.13 + "@smithy/middleware-content-length": ^2.0.15 + "@smithy/middleware-endpoint": ^2.2.0 + "@smithy/middleware-retry": ^2.0.20 + "@smithy/middleware-serde": ^2.0.13 + "@smithy/middleware-stack": ^2.0.7 + "@smithy/node-config-provider": ^2.1.5 + "@smithy/node-http-handler": ^2.1.9 + "@smithy/protocol-http": ^3.0.9 + "@smithy/smithy-client": ^2.1.15 + "@smithy/types": ^2.5.0 + "@smithy/url-parser": ^2.0.13 + "@smithy/util-base64": ^2.0.1 "@smithy/util-body-length-browser": ^2.0.0 "@smithy/util-body-length-node": ^2.1.0 - "@smithy/util-defaults-mode-browser": ^2.0.16 - "@smithy/util-defaults-mode-node": ^2.0.21 - "@smithy/util-endpoints": ^1.0.2 - "@smithy/util-retry": ^2.0.5 - "@smithy/util-utf8": ^2.0.0 - "@smithy/util-waiter": ^2.0.12 + "@smithy/util-defaults-mode-browser": ^2.0.19 + "@smithy/util-defaults-mode-node": ^2.0.25 + "@smithy/util-endpoints": ^1.0.4 + "@smithy/util-retry": ^2.0.6 + "@smithy/util-utf8": ^2.0.2 + "@smithy/util-waiter": ^2.0.13 tslib: ^2.5.0 uuid: ^8.3.2 - checksum: caed2bcfef089fdf9d3f5f490a9bd932ae6734e41e559d02f4b65d5e5918f70639f033eb171b4c9de0df07668ae85cbca8aabf745bee0409a55e7113afb0228f + checksum: 5a7cf06e2f516ef9dfff82d4097144fcf1b5477dd1277b9ebba22f38fa8108c029fc7c89e62f420daf51c575e52ed6f97c38b64a81770d9f26b367a5f212a446 languageName: node linkType: hard "@aws-sdk/client-organizations@npm:^3.350.0": - version: 3.449.0 - resolution: "@aws-sdk/client-organizations@npm:3.449.0" + version: 3.454.0 + resolution: "@aws-sdk/client-organizations@npm:3.454.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.449.0 - "@aws-sdk/core": 3.445.0 - "@aws-sdk/credential-provider-node": 3.449.0 - "@aws-sdk/middleware-host-header": 3.449.0 - "@aws-sdk/middleware-logger": 3.449.0 - "@aws-sdk/middleware-recursion-detection": 3.449.0 - "@aws-sdk/middleware-signing": 3.449.0 - "@aws-sdk/middleware-user-agent": 3.449.0 - "@aws-sdk/region-config-resolver": 3.433.0 - "@aws-sdk/types": 3.449.0 - "@aws-sdk/util-endpoints": 3.449.0 - "@aws-sdk/util-user-agent-browser": 3.449.0 - "@aws-sdk/util-user-agent-node": 3.449.0 - "@smithy/config-resolver": ^2.0.16 - "@smithy/fetch-http-handler": ^2.2.4 - "@smithy/hash-node": ^2.0.12 - "@smithy/invalid-dependency": ^2.0.12 - "@smithy/middleware-content-length": ^2.0.14 - "@smithy/middleware-endpoint": ^2.1.3 - "@smithy/middleware-retry": ^2.0.18 - "@smithy/middleware-serde": ^2.0.12 - "@smithy/middleware-stack": ^2.0.6 - "@smithy/node-config-provider": ^2.1.3 - "@smithy/node-http-handler": ^2.1.8 - "@smithy/protocol-http": ^3.0.8 - "@smithy/smithy-client": ^2.1.12 - "@smithy/types": ^2.4.0 - "@smithy/url-parser": ^2.0.12 - "@smithy/util-base64": ^2.0.0 + "@aws-sdk/client-sts": 3.454.0 + "@aws-sdk/core": 3.451.0 + "@aws-sdk/credential-provider-node": 3.451.0 + "@aws-sdk/middleware-host-header": 3.451.0 + "@aws-sdk/middleware-logger": 3.451.0 + "@aws-sdk/middleware-recursion-detection": 3.451.0 + "@aws-sdk/middleware-signing": 3.451.0 + "@aws-sdk/middleware-user-agent": 3.451.0 + "@aws-sdk/region-config-resolver": 3.451.0 + "@aws-sdk/types": 3.451.0 + "@aws-sdk/util-endpoints": 3.451.0 + "@aws-sdk/util-user-agent-browser": 3.451.0 + "@aws-sdk/util-user-agent-node": 3.451.0 + "@smithy/config-resolver": ^2.0.18 + "@smithy/fetch-http-handler": ^2.2.6 + "@smithy/hash-node": ^2.0.15 + "@smithy/invalid-dependency": ^2.0.13 + "@smithy/middleware-content-length": ^2.0.15 + "@smithy/middleware-endpoint": ^2.2.0 + "@smithy/middleware-retry": ^2.0.20 + "@smithy/middleware-serde": ^2.0.13 + "@smithy/middleware-stack": ^2.0.7 + "@smithy/node-config-provider": ^2.1.5 + "@smithy/node-http-handler": ^2.1.9 + "@smithy/protocol-http": ^3.0.9 + "@smithy/smithy-client": ^2.1.15 + "@smithy/types": ^2.5.0 + "@smithy/url-parser": ^2.0.13 + "@smithy/util-base64": ^2.0.1 "@smithy/util-body-length-browser": ^2.0.0 "@smithy/util-body-length-node": ^2.1.0 - "@smithy/util-defaults-mode-browser": ^2.0.16 - "@smithy/util-defaults-mode-node": ^2.0.21 - "@smithy/util-endpoints": ^1.0.2 - "@smithy/util-retry": ^2.0.5 - "@smithy/util-utf8": ^2.0.0 + "@smithy/util-defaults-mode-browser": ^2.0.19 + "@smithy/util-defaults-mode-node": ^2.0.25 + "@smithy/util-endpoints": ^1.0.4 + "@smithy/util-retry": ^2.0.6 + "@smithy/util-utf8": ^2.0.2 tslib: ^2.5.0 - checksum: 8e5368e1617b09a5367cbe07545e8ba86e4d2e9411b1828b996b90669c2de25851e2cf6369968df53e446a7296a255cf9cf908ffe95c2605c70971c747b58071 + checksum: 66c4cf0f6eb8eccd61852b6231704aac6561f2a20a6232dc50c5988c7699f3a6bc878e3fb30daeb63e53201c807efe37316746e4a0e40e7df5b633f66a7612e1 languageName: node linkType: hard "@aws-sdk/client-s3@npm:^3.350.0": - version: 3.449.0 - resolution: "@aws-sdk/client-s3@npm:3.449.0" + version: 3.454.0 + resolution: "@aws-sdk/client-s3@npm:3.454.0" dependencies: "@aws-crypto/sha1-browser": 3.0.0 "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.449.0 - "@aws-sdk/core": 3.445.0 - "@aws-sdk/credential-provider-node": 3.449.0 - "@aws-sdk/middleware-bucket-endpoint": 3.449.0 - "@aws-sdk/middleware-expect-continue": 3.449.0 - "@aws-sdk/middleware-flexible-checksums": 3.449.0 - "@aws-sdk/middleware-host-header": 3.449.0 - "@aws-sdk/middleware-location-constraint": 3.449.0 - "@aws-sdk/middleware-logger": 3.449.0 - "@aws-sdk/middleware-recursion-detection": 3.449.0 - "@aws-sdk/middleware-sdk-s3": 3.449.0 - "@aws-sdk/middleware-signing": 3.449.0 - "@aws-sdk/middleware-ssec": 3.449.0 - "@aws-sdk/middleware-user-agent": 3.449.0 - "@aws-sdk/region-config-resolver": 3.433.0 - "@aws-sdk/signature-v4-multi-region": 3.449.0 - "@aws-sdk/types": 3.449.0 - "@aws-sdk/util-endpoints": 3.449.0 - "@aws-sdk/util-user-agent-browser": 3.449.0 - "@aws-sdk/util-user-agent-node": 3.449.0 + "@aws-sdk/client-sts": 3.454.0 + "@aws-sdk/core": 3.451.0 + "@aws-sdk/credential-provider-node": 3.451.0 + "@aws-sdk/middleware-bucket-endpoint": 3.451.0 + "@aws-sdk/middleware-expect-continue": 3.451.0 + "@aws-sdk/middleware-flexible-checksums": 3.451.0 + "@aws-sdk/middleware-host-header": 3.451.0 + "@aws-sdk/middleware-location-constraint": 3.451.0 + "@aws-sdk/middleware-logger": 3.451.0 + "@aws-sdk/middleware-recursion-detection": 3.451.0 + "@aws-sdk/middleware-sdk-s3": 3.451.0 + "@aws-sdk/middleware-signing": 3.451.0 + "@aws-sdk/middleware-ssec": 3.451.0 + "@aws-sdk/middleware-user-agent": 3.451.0 + "@aws-sdk/region-config-resolver": 3.451.0 + "@aws-sdk/signature-v4-multi-region": 3.451.0 + "@aws-sdk/types": 3.451.0 + "@aws-sdk/util-endpoints": 3.451.0 + "@aws-sdk/util-user-agent-browser": 3.451.0 + "@aws-sdk/util-user-agent-node": 3.451.0 "@aws-sdk/xml-builder": 3.310.0 - "@smithy/config-resolver": ^2.0.16 - "@smithy/eventstream-serde-browser": ^2.0.12 - "@smithy/eventstream-serde-config-resolver": ^2.0.12 - "@smithy/eventstream-serde-node": ^2.0.12 - "@smithy/fetch-http-handler": ^2.2.4 - "@smithy/hash-blob-browser": ^2.0.12 - "@smithy/hash-node": ^2.0.12 - "@smithy/hash-stream-node": ^2.0.12 - "@smithy/invalid-dependency": ^2.0.12 - "@smithy/md5-js": ^2.0.12 - "@smithy/middleware-content-length": ^2.0.14 - "@smithy/middleware-endpoint": ^2.1.3 - "@smithy/middleware-retry": ^2.0.18 - "@smithy/middleware-serde": ^2.0.12 - "@smithy/middleware-stack": ^2.0.6 - "@smithy/node-config-provider": ^2.1.3 - "@smithy/node-http-handler": ^2.1.8 - "@smithy/protocol-http": ^3.0.8 - "@smithy/smithy-client": ^2.1.12 - "@smithy/types": ^2.4.0 - "@smithy/url-parser": ^2.0.12 - "@smithy/util-base64": ^2.0.0 + "@smithy/config-resolver": ^2.0.18 + "@smithy/eventstream-serde-browser": ^2.0.13 + "@smithy/eventstream-serde-config-resolver": ^2.0.13 + "@smithy/eventstream-serde-node": ^2.0.13 + "@smithy/fetch-http-handler": ^2.2.6 + "@smithy/hash-blob-browser": ^2.0.14 + "@smithy/hash-node": ^2.0.15 + "@smithy/hash-stream-node": ^2.0.15 + "@smithy/invalid-dependency": ^2.0.13 + "@smithy/md5-js": ^2.0.15 + "@smithy/middleware-content-length": ^2.0.15 + "@smithy/middleware-endpoint": ^2.2.0 + "@smithy/middleware-retry": ^2.0.20 + "@smithy/middleware-serde": ^2.0.13 + "@smithy/middleware-stack": ^2.0.7 + "@smithy/node-config-provider": ^2.1.5 + "@smithy/node-http-handler": ^2.1.9 + "@smithy/protocol-http": ^3.0.9 + "@smithy/smithy-client": ^2.1.15 + "@smithy/types": ^2.5.0 + "@smithy/url-parser": ^2.0.13 + "@smithy/util-base64": ^2.0.1 "@smithy/util-body-length-browser": ^2.0.0 "@smithy/util-body-length-node": ^2.1.0 - "@smithy/util-defaults-mode-browser": ^2.0.16 - "@smithy/util-defaults-mode-node": ^2.0.21 - "@smithy/util-endpoints": ^1.0.2 - "@smithy/util-retry": ^2.0.5 - "@smithy/util-stream": ^2.0.17 - "@smithy/util-utf8": ^2.0.0 - "@smithy/util-waiter": ^2.0.12 + "@smithy/util-defaults-mode-browser": ^2.0.19 + "@smithy/util-defaults-mode-node": ^2.0.25 + "@smithy/util-endpoints": ^1.0.4 + "@smithy/util-retry": ^2.0.6 + "@smithy/util-stream": ^2.0.20 + "@smithy/util-utf8": ^2.0.2 + "@smithy/util-waiter": ^2.0.13 fast-xml-parser: 4.2.5 tslib: ^2.5.0 - checksum: b04a8400ae3d418393022062163331fecd0390cdc04d1f65db4739048d30407c4d1bcdeefd94324a8e51596b6affb8e27cee07427941a12b84ede9022f2c74f6 + checksum: 1317ab80b8457e6ac83f335390c98489be35c6edebaed9132121fcd3e905d7ee98b6a5fd7d03ba0b8aee1a9a93f8ce2abfa97d6ced9d1c0fde210c0385a7efa8 languageName: node linkType: hard "@aws-sdk/client-sqs@npm:^3.350.0": - version: 3.449.0 - resolution: "@aws-sdk/client-sqs@npm:3.449.0" + version: 3.454.0 + resolution: "@aws-sdk/client-sqs@npm:3.454.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/client-sts": 3.449.0 - "@aws-sdk/core": 3.445.0 - "@aws-sdk/credential-provider-node": 3.449.0 - "@aws-sdk/middleware-host-header": 3.449.0 - "@aws-sdk/middleware-logger": 3.449.0 - "@aws-sdk/middleware-recursion-detection": 3.449.0 - "@aws-sdk/middleware-sdk-sqs": 3.449.0 - "@aws-sdk/middleware-signing": 3.449.0 - "@aws-sdk/middleware-user-agent": 3.449.0 - "@aws-sdk/region-config-resolver": 3.433.0 - "@aws-sdk/types": 3.449.0 - "@aws-sdk/util-endpoints": 3.449.0 - "@aws-sdk/util-user-agent-browser": 3.449.0 - "@aws-sdk/util-user-agent-node": 3.449.0 - "@smithy/config-resolver": ^2.0.16 - "@smithy/fetch-http-handler": ^2.2.4 - "@smithy/hash-node": ^2.0.12 - "@smithy/invalid-dependency": ^2.0.12 - "@smithy/md5-js": ^2.0.12 - "@smithy/middleware-content-length": ^2.0.14 - "@smithy/middleware-endpoint": ^2.1.3 - "@smithy/middleware-retry": ^2.0.18 - "@smithy/middleware-serde": ^2.0.12 - "@smithy/middleware-stack": ^2.0.6 - "@smithy/node-config-provider": ^2.1.3 - "@smithy/node-http-handler": ^2.1.8 - "@smithy/protocol-http": ^3.0.8 - "@smithy/smithy-client": ^2.1.12 - "@smithy/types": ^2.4.0 - "@smithy/url-parser": ^2.0.12 - "@smithy/util-base64": ^2.0.0 + "@aws-sdk/client-sts": 3.454.0 + "@aws-sdk/core": 3.451.0 + "@aws-sdk/credential-provider-node": 3.451.0 + "@aws-sdk/middleware-host-header": 3.451.0 + "@aws-sdk/middleware-logger": 3.451.0 + "@aws-sdk/middleware-recursion-detection": 3.451.0 + "@aws-sdk/middleware-sdk-sqs": 3.451.0 + "@aws-sdk/middleware-signing": 3.451.0 + "@aws-sdk/middleware-user-agent": 3.451.0 + "@aws-sdk/region-config-resolver": 3.451.0 + "@aws-sdk/types": 3.451.0 + "@aws-sdk/util-endpoints": 3.451.0 + "@aws-sdk/util-user-agent-browser": 3.451.0 + "@aws-sdk/util-user-agent-node": 3.451.0 + "@smithy/config-resolver": ^2.0.18 + "@smithy/fetch-http-handler": ^2.2.6 + "@smithy/hash-node": ^2.0.15 + "@smithy/invalid-dependency": ^2.0.13 + "@smithy/md5-js": ^2.0.15 + "@smithy/middleware-content-length": ^2.0.15 + "@smithy/middleware-endpoint": ^2.2.0 + "@smithy/middleware-retry": ^2.0.20 + "@smithy/middleware-serde": ^2.0.13 + "@smithy/middleware-stack": ^2.0.7 + "@smithy/node-config-provider": ^2.1.5 + "@smithy/node-http-handler": ^2.1.9 + "@smithy/protocol-http": ^3.0.9 + "@smithy/smithy-client": ^2.1.15 + "@smithy/types": ^2.5.0 + "@smithy/url-parser": ^2.0.13 + "@smithy/util-base64": ^2.0.1 "@smithy/util-body-length-browser": ^2.0.0 "@smithy/util-body-length-node": ^2.1.0 - "@smithy/util-defaults-mode-browser": ^2.0.16 - "@smithy/util-defaults-mode-node": ^2.0.21 - "@smithy/util-endpoints": ^1.0.2 - "@smithy/util-retry": ^2.0.5 - "@smithy/util-utf8": ^2.0.0 + "@smithy/util-defaults-mode-browser": ^2.0.19 + "@smithy/util-defaults-mode-node": ^2.0.25 + "@smithy/util-endpoints": ^1.0.4 + "@smithy/util-retry": ^2.0.6 + "@smithy/util-utf8": ^2.0.2 tslib: ^2.5.0 - checksum: b33a3e12afb71c33649bcb4b769541d416d7c76741d9c4d715ee494d4516a303246d2dc6c3e46135aa61f7f3f48e4d7f883608defb88e6092a37ac0d5fafcdd1 + checksum: 4851ddbd509982a9185a2e7e20f52e326ce84c94a42f26368c2e18bd77d29a3e16c832b6308ab126adc5fd5f6b53c9d556cdf5e1aa2bb81bed5c8651d70e6377 languageName: node linkType: hard -"@aws-sdk/client-sso@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/client-sso@npm:3.449.0" +"@aws-sdk/client-sso@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/client-sso@npm:3.451.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/core": 3.445.0 - "@aws-sdk/middleware-host-header": 3.449.0 - "@aws-sdk/middleware-logger": 3.449.0 - "@aws-sdk/middleware-recursion-detection": 3.449.0 - "@aws-sdk/middleware-user-agent": 3.449.0 - "@aws-sdk/region-config-resolver": 3.433.0 - "@aws-sdk/types": 3.449.0 - "@aws-sdk/util-endpoints": 3.449.0 - "@aws-sdk/util-user-agent-browser": 3.449.0 - "@aws-sdk/util-user-agent-node": 3.449.0 - "@smithy/config-resolver": ^2.0.16 - "@smithy/fetch-http-handler": ^2.2.4 - "@smithy/hash-node": ^2.0.12 - "@smithy/invalid-dependency": ^2.0.12 - "@smithy/middleware-content-length": ^2.0.14 - "@smithy/middleware-endpoint": ^2.1.3 - "@smithy/middleware-retry": ^2.0.18 - "@smithy/middleware-serde": ^2.0.12 - "@smithy/middleware-stack": ^2.0.6 - "@smithy/node-config-provider": ^2.1.3 - "@smithy/node-http-handler": ^2.1.8 - "@smithy/protocol-http": ^3.0.8 - "@smithy/smithy-client": ^2.1.12 - "@smithy/types": ^2.4.0 - "@smithy/url-parser": ^2.0.12 - "@smithy/util-base64": ^2.0.0 + "@aws-sdk/core": 3.451.0 + "@aws-sdk/middleware-host-header": 3.451.0 + "@aws-sdk/middleware-logger": 3.451.0 + "@aws-sdk/middleware-recursion-detection": 3.451.0 + "@aws-sdk/middleware-user-agent": 3.451.0 + "@aws-sdk/region-config-resolver": 3.451.0 + "@aws-sdk/types": 3.451.0 + "@aws-sdk/util-endpoints": 3.451.0 + "@aws-sdk/util-user-agent-browser": 3.451.0 + "@aws-sdk/util-user-agent-node": 3.451.0 + "@smithy/config-resolver": ^2.0.18 + "@smithy/fetch-http-handler": ^2.2.6 + "@smithy/hash-node": ^2.0.15 + "@smithy/invalid-dependency": ^2.0.13 + "@smithy/middleware-content-length": ^2.0.15 + "@smithy/middleware-endpoint": ^2.2.0 + "@smithy/middleware-retry": ^2.0.20 + "@smithy/middleware-serde": ^2.0.13 + "@smithy/middleware-stack": ^2.0.7 + "@smithy/node-config-provider": ^2.1.5 + "@smithy/node-http-handler": ^2.1.9 + "@smithy/protocol-http": ^3.0.9 + "@smithy/smithy-client": ^2.1.15 + "@smithy/types": ^2.5.0 + "@smithy/url-parser": ^2.0.13 + "@smithy/util-base64": ^2.0.1 "@smithy/util-body-length-browser": ^2.0.0 "@smithy/util-body-length-node": ^2.1.0 - "@smithy/util-defaults-mode-browser": ^2.0.16 - "@smithy/util-defaults-mode-node": ^2.0.21 - "@smithy/util-endpoints": ^1.0.2 - "@smithy/util-retry": ^2.0.5 - "@smithy/util-utf8": ^2.0.0 + "@smithy/util-defaults-mode-browser": ^2.0.19 + "@smithy/util-defaults-mode-node": ^2.0.25 + "@smithy/util-endpoints": ^1.0.4 + "@smithy/util-retry": ^2.0.6 + "@smithy/util-utf8": ^2.0.2 tslib: ^2.5.0 - checksum: de51ad3655941f18a92515a334349e35aa85936ae6cc2a0cd41990d6eccd643fbb9f960ecd9d3a23dd597f1a32056217eac90e489bc820deabb8adf1b7d072e6 + checksum: 5ab78bf7704acad673eb2f97b7c9873e4e045e8476f827fc5f6e6f46ca37674f04efc1e168cdc4b3b0c5be1e6ada8e1a76fb4963a7af48560423a60b855f6005 languageName: node linkType: hard -"@aws-sdk/client-sts@npm:3.449.0, @aws-sdk/client-sts@npm:^3.350.0": - version: 3.449.0 - resolution: "@aws-sdk/client-sts@npm:3.449.0" +"@aws-sdk/client-sts@npm:3.454.0, @aws-sdk/client-sts@npm:^3.350.0": + version: 3.454.0 + resolution: "@aws-sdk/client-sts@npm:3.454.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/core": 3.445.0 - "@aws-sdk/credential-provider-node": 3.449.0 - "@aws-sdk/middleware-host-header": 3.449.0 - "@aws-sdk/middleware-logger": 3.449.0 - "@aws-sdk/middleware-recursion-detection": 3.449.0 - "@aws-sdk/middleware-sdk-sts": 3.449.0 - "@aws-sdk/middleware-signing": 3.449.0 - "@aws-sdk/middleware-user-agent": 3.449.0 - "@aws-sdk/region-config-resolver": 3.433.0 - "@aws-sdk/types": 3.449.0 - "@aws-sdk/util-endpoints": 3.449.0 - "@aws-sdk/util-user-agent-browser": 3.449.0 - "@aws-sdk/util-user-agent-node": 3.449.0 - "@smithy/config-resolver": ^2.0.16 - "@smithy/fetch-http-handler": ^2.2.4 - "@smithy/hash-node": ^2.0.12 - "@smithy/invalid-dependency": ^2.0.12 - "@smithy/middleware-content-length": ^2.0.14 - "@smithy/middleware-endpoint": ^2.1.3 - "@smithy/middleware-retry": ^2.0.18 - "@smithy/middleware-serde": ^2.0.12 - "@smithy/middleware-stack": ^2.0.6 - "@smithy/node-config-provider": ^2.1.3 - "@smithy/node-http-handler": ^2.1.8 - "@smithy/protocol-http": ^3.0.8 - "@smithy/smithy-client": ^2.1.12 - "@smithy/types": ^2.4.0 - "@smithy/url-parser": ^2.0.12 - "@smithy/util-base64": ^2.0.0 + "@aws-sdk/core": 3.451.0 + "@aws-sdk/credential-provider-node": 3.451.0 + "@aws-sdk/middleware-host-header": 3.451.0 + "@aws-sdk/middleware-logger": 3.451.0 + "@aws-sdk/middleware-recursion-detection": 3.451.0 + "@aws-sdk/middleware-sdk-sts": 3.451.0 + "@aws-sdk/middleware-signing": 3.451.0 + "@aws-sdk/middleware-user-agent": 3.451.0 + "@aws-sdk/region-config-resolver": 3.451.0 + "@aws-sdk/types": 3.451.0 + "@aws-sdk/util-endpoints": 3.451.0 + "@aws-sdk/util-user-agent-browser": 3.451.0 + "@aws-sdk/util-user-agent-node": 3.451.0 + "@smithy/config-resolver": ^2.0.18 + "@smithy/fetch-http-handler": ^2.2.6 + "@smithy/hash-node": ^2.0.15 + "@smithy/invalid-dependency": ^2.0.13 + "@smithy/middleware-content-length": ^2.0.15 + "@smithy/middleware-endpoint": ^2.2.0 + "@smithy/middleware-retry": ^2.0.20 + "@smithy/middleware-serde": ^2.0.13 + "@smithy/middleware-stack": ^2.0.7 + "@smithy/node-config-provider": ^2.1.5 + "@smithy/node-http-handler": ^2.1.9 + "@smithy/protocol-http": ^3.0.9 + "@smithy/smithy-client": ^2.1.15 + "@smithy/types": ^2.5.0 + "@smithy/url-parser": ^2.0.13 + "@smithy/util-base64": ^2.0.1 "@smithy/util-body-length-browser": ^2.0.0 "@smithy/util-body-length-node": ^2.1.0 - "@smithy/util-defaults-mode-browser": ^2.0.16 - "@smithy/util-defaults-mode-node": ^2.0.21 - "@smithy/util-endpoints": ^1.0.2 - "@smithy/util-retry": ^2.0.5 - "@smithy/util-utf8": ^2.0.0 + "@smithy/util-defaults-mode-browser": ^2.0.19 + "@smithy/util-defaults-mode-node": ^2.0.25 + "@smithy/util-endpoints": ^1.0.4 + "@smithy/util-retry": ^2.0.6 + "@smithy/util-utf8": ^2.0.2 fast-xml-parser: 4.2.5 tslib: ^2.5.0 - checksum: 3086648f0a3017efb4f069fad26f0f7ffc8942328c197d1c895cfa983fa069f35093b718b76ac3cd3225a83286303532a060b63ce0fcca20ff264855c1a98bd6 + checksum: 92e687abc8dcd5f6ddf911fe5800f04eeb11164214327072334275b04725ac77ee2170247b69df645ff756ed9f2b27916921d442fb393dc46084c114b5f76f54 languageName: node linkType: hard -"@aws-sdk/core@npm:3.445.0": - version: 3.445.0 - resolution: "@aws-sdk/core@npm:3.445.0" +"@aws-sdk/core@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/core@npm:3.451.0" dependencies: - "@smithy/smithy-client": ^2.1.12 + "@smithy/smithy-client": ^2.1.15 tslib: ^2.5.0 - checksum: ebe9c231167278cb1d4d782255ef0df561509f00ab01ec69421d23b870c3191d4d8762fab7c5ae7b032999d0b58472e5225ade5fd51665c18b9d73850cf75da2 + checksum: 20e36a0280ba6848222099eb30d3a09683563edf8eca48746529c9c2ae89dd7ab5d6a01ab05cd21b4bdd4f16117d41dc89e07d4d71f0abbcf50dcc5e85ef992d languageName: node linkType: hard -"@aws-sdk/credential-provider-cognito-identity@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.449.0" +"@aws-sdk/credential-provider-cognito-identity@npm:3.454.0": + version: 3.454.0 + resolution: "@aws-sdk/credential-provider-cognito-identity@npm:3.454.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.449.0 - "@aws-sdk/types": 3.449.0 + "@aws-sdk/client-cognito-identity": 3.454.0 + "@aws-sdk/types": 3.451.0 "@smithy/property-provider": ^2.0.0 - "@smithy/types": ^2.4.0 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: 5ae777f9259f50968b22b3e127482ae755701ec89aed5844841ca2b9609f66492a272fc61e06f1b8117f565e4b936092e4b64c5ec3326f277136d0fcb2135e05 + checksum: 4291033f9554ecd83f6a6dffc3309fa0da212dc9c3d197438abc77ed006a3622e9b81fe070305e5038f3ed15eb2a276306d8a040bea7a02d5591d66452e1c460 languageName: node linkType: hard -"@aws-sdk/credential-provider-env@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/credential-provider-env@npm:3.449.0" +"@aws-sdk/credential-provider-env@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/credential-provider-env@npm:3.451.0" dependencies: - "@aws-sdk/types": 3.449.0 + "@aws-sdk/types": 3.451.0 "@smithy/property-provider": ^2.0.0 - "@smithy/types": ^2.4.0 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: 8164bb3bd69553fcfb8e015e9f7e18e96a44a3596f9cf7bb0b6cd942c0827dcf5010ec4a7383f3b26c659d9a04b47a33e33ff7548b1a44b65a66b3d9f427e8e2 + checksum: 20268e3d30317ab92cfce042fbaf751959d8da8e5669b822f8089df26bf5ea4972bab04eb0653fd903a4ab6c41118fae57f589a7e05fd3022e0154cb0cd71ed7 languageName: node linkType: hard -"@aws-sdk/credential-provider-http@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/credential-provider-http@npm:3.449.0" +"@aws-sdk/credential-provider-http@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/credential-provider-http@npm:3.451.0" dependencies: - "@aws-sdk/types": 3.449.0 - "@smithy/fetch-http-handler": ^2.2.4 - "@smithy/node-http-handler": ^2.1.8 + "@aws-sdk/types": 3.451.0 + "@smithy/fetch-http-handler": ^2.2.6 + "@smithy/node-http-handler": ^2.1.9 "@smithy/property-provider": ^2.0.0 - "@smithy/protocol-http": ^3.0.8 - "@smithy/smithy-client": ^2.1.12 - "@smithy/types": ^2.4.0 - "@smithy/util-stream": ^2.0.17 + "@smithy/protocol-http": ^3.0.9 + "@smithy/smithy-client": ^2.1.15 + "@smithy/types": ^2.5.0 + "@smithy/util-stream": ^2.0.20 tslib: ^2.5.0 - checksum: c6d5cfea563619f3491eef05cfac399fca58b3975f2b84a119f64e67a5e5bcfbc54455c718a7b1a92ee25fa5ebf65a3eb5ff412e5fcc6f8d872d91ad952519d3 + checksum: 72d6c1487a24a95e765b665a0d2fb337fc86bb426f1fc999f7a2789a826302a649850791ec428eff13e250b4bf0e33f9d333dc3c34cfb15c83c863c254f601df languageName: node linkType: hard -"@aws-sdk/credential-provider-ini@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/credential-provider-ini@npm:3.449.0" +"@aws-sdk/credential-provider-ini@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/credential-provider-ini@npm:3.451.0" dependencies: - "@aws-sdk/credential-provider-env": 3.449.0 - "@aws-sdk/credential-provider-process": 3.449.0 - "@aws-sdk/credential-provider-sso": 3.449.0 - "@aws-sdk/credential-provider-web-identity": 3.449.0 - "@aws-sdk/types": 3.449.0 + "@aws-sdk/credential-provider-env": 3.451.0 + "@aws-sdk/credential-provider-process": 3.451.0 + "@aws-sdk/credential-provider-sso": 3.451.0 + "@aws-sdk/credential-provider-web-identity": 3.451.0 + "@aws-sdk/types": 3.451.0 "@smithy/credential-provider-imds": ^2.0.0 "@smithy/property-provider": ^2.0.0 "@smithy/shared-ini-file-loader": ^2.0.6 - "@smithy/types": ^2.4.0 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: 75b88307ffc0978e35c202d1aa972d1a9f5cfbf266e94771e08fea519fd141174cd2385fb2011d8b5d2c7eeb7e991c26e5aea3d5aa2ff5c0653942376af52bce + checksum: 6d549724209f24c2e21fa88f318c7faaa9e2e58c854fcabc257b71cd2e6f849d38eaa932e16b44bf56c420183fd4ae804ac44c7584808af868ae7316fde2c3b1 languageName: node linkType: hard -"@aws-sdk/credential-provider-node@npm:3.449.0, @aws-sdk/credential-provider-node@npm:^3.350.0": - version: 3.449.0 - resolution: "@aws-sdk/credential-provider-node@npm:3.449.0" +"@aws-sdk/credential-provider-node@npm:3.451.0, @aws-sdk/credential-provider-node@npm:^3.350.0": + version: 3.451.0 + resolution: "@aws-sdk/credential-provider-node@npm:3.451.0" dependencies: - "@aws-sdk/credential-provider-env": 3.449.0 - "@aws-sdk/credential-provider-ini": 3.449.0 - "@aws-sdk/credential-provider-process": 3.449.0 - "@aws-sdk/credential-provider-sso": 3.449.0 - "@aws-sdk/credential-provider-web-identity": 3.449.0 - "@aws-sdk/types": 3.449.0 + "@aws-sdk/credential-provider-env": 3.451.0 + "@aws-sdk/credential-provider-ini": 3.451.0 + "@aws-sdk/credential-provider-process": 3.451.0 + "@aws-sdk/credential-provider-sso": 3.451.0 + "@aws-sdk/credential-provider-web-identity": 3.451.0 + "@aws-sdk/types": 3.451.0 "@smithy/credential-provider-imds": ^2.0.0 "@smithy/property-provider": ^2.0.0 "@smithy/shared-ini-file-loader": ^2.0.6 - "@smithy/types": ^2.4.0 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: dffa7a00d57b15ff74def561b354c3ba76ed46738f4efe9ff35d2d5dc6c55170f92659d8d9a1fca5fefdef92c73fb565c0f55da2d11a4f210ee74121d692ec09 + checksum: 19dd93776250fd4e55a70daaca311f1f0bb27e5b195713e3f9d8e8431411e637c917a46bbd41dcf2044a93e0fdea02ebb238863f8c49684bf3e63aff928b5a6b languageName: node linkType: hard -"@aws-sdk/credential-provider-process@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/credential-provider-process@npm:3.449.0" +"@aws-sdk/credential-provider-process@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/credential-provider-process@npm:3.451.0" dependencies: - "@aws-sdk/types": 3.449.0 + "@aws-sdk/types": 3.451.0 "@smithy/property-provider": ^2.0.0 "@smithy/shared-ini-file-loader": ^2.0.6 - "@smithy/types": ^2.4.0 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: 8084ccbf6393b241b43ee18403282b03c9421bbbc8cda8253bad4115a9847840eee85c48d2b51215b8b76f21b8952db298a26117e6e5c864b2c5e61c2319b230 + checksum: 2c01b893d03f9a001bb970553bad14061e807445ec96002bb85d37445fa28403a5adbfc68036f01fc20d7c5310e88ccbcd96cd54d5ba9326640a18d6c96b93a2 languageName: node linkType: hard -"@aws-sdk/credential-provider-sso@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/credential-provider-sso@npm:3.449.0" +"@aws-sdk/credential-provider-sso@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/credential-provider-sso@npm:3.451.0" dependencies: - "@aws-sdk/client-sso": 3.449.0 - "@aws-sdk/token-providers": 3.449.0 - "@aws-sdk/types": 3.449.0 + "@aws-sdk/client-sso": 3.451.0 + "@aws-sdk/token-providers": 3.451.0 + "@aws-sdk/types": 3.451.0 "@smithy/property-provider": ^2.0.0 "@smithy/shared-ini-file-loader": ^2.0.6 - "@smithy/types": ^2.4.0 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: d80a7cf0664c5c4a9d421b3e66b4c75f4d82ff99982af121fe19a6465b84969777fdb960c844a8d6352c3bd96acff3ae5f89723c37ec3e0716c80f06025a3745 + checksum: 34483b4a213cac1f4859978319b38ef7f69a0d090de49a98d987486da2691a4cf5f474601ce338497d030156b1616a455a8d0bb79a4abbdbe8873a91e451ead2 languageName: node linkType: hard -"@aws-sdk/credential-provider-web-identity@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/credential-provider-web-identity@npm:3.449.0" +"@aws-sdk/credential-provider-web-identity@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/credential-provider-web-identity@npm:3.451.0" dependencies: - "@aws-sdk/types": 3.449.0 + "@aws-sdk/types": 3.451.0 "@smithy/property-provider": ^2.0.0 - "@smithy/types": ^2.4.0 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: 63d58bc68b413c8277b23f0016cc034970a9a0435051d790c4d57516d891948d964483acc3e66bb4830a8d76de8bc80d68c008f19e53f819aa15740c52504a22 + checksum: 2f677b9e4f727b6c24ed64d1ba23f524d8d136394dc62376db7b60acf57938a911d178bcdc33688a0cb17b5f55e2cc4aa455473a4393864568cacd202a50ce44 languageName: node linkType: hard "@aws-sdk/credential-providers@npm:^3.350.0": - version: 3.449.0 - resolution: "@aws-sdk/credential-providers@npm:3.449.0" + version: 3.454.0 + resolution: "@aws-sdk/credential-providers@npm:3.454.0" dependencies: - "@aws-sdk/client-cognito-identity": 3.449.0 - "@aws-sdk/client-sso": 3.449.0 - "@aws-sdk/client-sts": 3.449.0 - "@aws-sdk/credential-provider-cognito-identity": 3.449.0 - "@aws-sdk/credential-provider-env": 3.449.0 - "@aws-sdk/credential-provider-http": 3.449.0 - "@aws-sdk/credential-provider-ini": 3.449.0 - "@aws-sdk/credential-provider-node": 3.449.0 - "@aws-sdk/credential-provider-process": 3.449.0 - "@aws-sdk/credential-provider-sso": 3.449.0 - "@aws-sdk/credential-provider-web-identity": 3.449.0 - "@aws-sdk/types": 3.449.0 + "@aws-sdk/client-cognito-identity": 3.454.0 + "@aws-sdk/client-sso": 3.451.0 + "@aws-sdk/client-sts": 3.454.0 + "@aws-sdk/credential-provider-cognito-identity": 3.454.0 + "@aws-sdk/credential-provider-env": 3.451.0 + "@aws-sdk/credential-provider-http": 3.451.0 + "@aws-sdk/credential-provider-ini": 3.451.0 + "@aws-sdk/credential-provider-node": 3.451.0 + "@aws-sdk/credential-provider-process": 3.451.0 + "@aws-sdk/credential-provider-sso": 3.451.0 + "@aws-sdk/credential-provider-web-identity": 3.451.0 + "@aws-sdk/types": 3.451.0 "@smithy/credential-provider-imds": ^2.0.0 "@smithy/property-provider": ^2.0.0 - "@smithy/types": ^2.4.0 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: 51d1079fd7229c8fbfdc3c24b312fa2713668a2675df62099a788c8c89f66bfab6e4063271b7995ba05ec0e1c737581e2ef50a4af5aad63f0b3dae810b99d434 + checksum: fd6a59aded8a16a800c4354ca5445faac0b5507ca65ca7d1bdc2d5b12efb2c161eb87f399ac2c3e1579b5913f26858bb90d74e1a5026647b375efa7ae9233db9 languageName: node linkType: hard @@ -1106,34 +921,34 @@ __metadata: linkType: hard "@aws-sdk/lib-storage@npm:^3.350.0": - version: 3.449.0 - resolution: "@aws-sdk/lib-storage@npm:3.449.0" + version: 3.454.0 + resolution: "@aws-sdk/lib-storage@npm:3.454.0" dependencies: "@smithy/abort-controller": ^2.0.1 - "@smithy/middleware-endpoint": ^2.1.3 - "@smithy/smithy-client": ^2.1.12 + "@smithy/middleware-endpoint": ^2.2.0 + "@smithy/smithy-client": ^2.1.15 buffer: 5.6.0 events: 3.3.0 stream-browserify: 3.0.0 tslib: ^2.5.0 peerDependencies: "@aws-sdk/client-s3": ^3.0.0 - checksum: 71c751058d7da7282a2cb0e1e8a9d85638d9a1f9cbce7127cac4f41526042464a0969980950418f063eadbfd0b810c421f6245a20352a685d73c0df84ca41ac8 + checksum: b8d7dd7a333e5d1d13de449269f1295e2d4835aa3e6fcef01e262a551ec0968591ce669f46fd988b678323cfae86dd5d92528282aa4bf772c980feefe3420e8e languageName: node linkType: hard -"@aws-sdk/middleware-bucket-endpoint@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/middleware-bucket-endpoint@npm:3.449.0" +"@aws-sdk/middleware-bucket-endpoint@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/middleware-bucket-endpoint@npm:3.451.0" dependencies: - "@aws-sdk/types": 3.449.0 + "@aws-sdk/types": 3.451.0 "@aws-sdk/util-arn-parser": 3.310.0 - "@smithy/node-config-provider": ^2.1.3 - "@smithy/protocol-http": ^3.0.8 - "@smithy/types": ^2.4.0 + "@smithy/node-config-provider": ^2.1.5 + "@smithy/protocol-http": ^3.0.9 + "@smithy/types": ^2.5.0 "@smithy/util-config-provider": ^2.0.0 tslib: ^2.5.0 - checksum: 53ee7837fbfc64320403e952d5113bd76a63ee0b5b684ed8d0c3a3d6fadd39a5ff4d4956d4d3b62dc7c307b219f8f90ce37b5876d2fc8e8c2addb0b03c071536 + checksum: 4fba4c2ca560fe9a482d59a374239b5c6bf63a9f49373b91d9b1ed3aced648f0198b7d3b82c14fa896ec5f465562871bf9c59c29ff2e3f94df88f4641ff2bf78 languageName: node linkType: hard @@ -1150,116 +965,116 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-expect-continue@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/middleware-expect-continue@npm:3.449.0" +"@aws-sdk/middleware-expect-continue@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/middleware-expect-continue@npm:3.451.0" dependencies: - "@aws-sdk/types": 3.449.0 - "@smithy/protocol-http": ^3.0.8 - "@smithy/types": ^2.4.0 + "@aws-sdk/types": 3.451.0 + "@smithy/protocol-http": ^3.0.9 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: 72f5e1bde96282c2f9ccf45085d49dff02e6761437c8c27e342adef523acd81cedb779c77d10c6d4e879cbf5bdb60379f0a1c55d44acd4aa7729dd5b9db64bf2 + checksum: 3bfe5a1fc8f3e8baaec650aa085cb7a1c79d8d5af41bd940c005ba9c3c6d4feca2b65513d3494fe986276f43154e829f95ce1de4d852a741d7900cd95b864c1a languageName: node linkType: hard -"@aws-sdk/middleware-flexible-checksums@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/middleware-flexible-checksums@npm:3.449.0" +"@aws-sdk/middleware-flexible-checksums@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/middleware-flexible-checksums@npm:3.451.0" dependencies: "@aws-crypto/crc32": 3.0.0 "@aws-crypto/crc32c": 3.0.0 - "@aws-sdk/types": 3.449.0 + "@aws-sdk/types": 3.451.0 "@smithy/is-array-buffer": ^2.0.0 - "@smithy/protocol-http": ^3.0.8 - "@smithy/types": ^2.4.0 - "@smithy/util-utf8": ^2.0.0 + "@smithy/protocol-http": ^3.0.9 + "@smithy/types": ^2.5.0 + "@smithy/util-utf8": ^2.0.2 tslib: ^2.5.0 - checksum: 0b32de972a201e5bddf946f9e84079927cdffae0004c4f14623477a95057ad32b21851d9d565f6f86e538f02a2edaf5f09032c7ebf208f341cd8333c48e09c95 + checksum: 24f69c68437899286c19e68caf417e263529190f4e663c8e886a032090452c9cbaa0d6d25887a65a7234edb9d2657f847b2ff589aec2341852d727a174c94cf2 languageName: node linkType: hard -"@aws-sdk/middleware-host-header@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/middleware-host-header@npm:3.449.0" +"@aws-sdk/middleware-host-header@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/middleware-host-header@npm:3.451.0" dependencies: - "@aws-sdk/types": 3.449.0 - "@smithy/protocol-http": ^3.0.8 - "@smithy/types": ^2.4.0 + "@aws-sdk/types": 3.451.0 + "@smithy/protocol-http": ^3.0.9 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: 7470a19e08c726e5044821c9d5572717121091f24d18930563bf7a6e3abec9429b9c17328f68922d8fbf246b924b7ef0d5e0636b35849b0b21571e890084ada6 + checksum: ba06894d88f5fdd06762de839e7542b1605c73474d7bf93e6b0b74a62e77c5f3f4dd612daaf76e9eff59447c95a73cfa69b29f9856f7282227eea31173db99ca languageName: node linkType: hard -"@aws-sdk/middleware-location-constraint@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/middleware-location-constraint@npm:3.449.0" +"@aws-sdk/middleware-location-constraint@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/middleware-location-constraint@npm:3.451.0" dependencies: - "@aws-sdk/types": 3.449.0 - "@smithy/types": ^2.4.0 + "@aws-sdk/types": 3.451.0 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: 7359381fca8bf6301c62cbcf2920e75a5780b0d5bf13d6bc61bcdd20991bbaf08d5acd673c1ad92add3ffc0adeaecdaa305a77ec5b376c42f03b29a85c57c9d6 + checksum: d47ea96b28c429196352f2e99cbd5a3ab57726e0be0bfdb2d9ef7acb1e492a4a318f7c40e54bd14ce3b8d3f6f340e1fa89fcd5e3c62cf4e1f8edf08edd78b98b languageName: node linkType: hard -"@aws-sdk/middleware-logger@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/middleware-logger@npm:3.449.0" +"@aws-sdk/middleware-logger@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/middleware-logger@npm:3.451.0" dependencies: - "@aws-sdk/types": 3.449.0 - "@smithy/types": ^2.4.0 + "@aws-sdk/types": 3.451.0 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: d90ed870889ced4c39e12dd0f03c480e0b28de07a14147b478c6aa6fb84c7cb57369b3bc1ae9a249fc3a2b5539a9055bff752420c5ef4645afbda27ca8904384 + checksum: 34342389013ab83407c34eb58a5e162fb7b294050030f494a2b538e85492828a2719642365af1f7e5b89f847888fd936469c4bdb6843b81887edb89896b0a926 languageName: node linkType: hard -"@aws-sdk/middleware-recursion-detection@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/middleware-recursion-detection@npm:3.449.0" +"@aws-sdk/middleware-recursion-detection@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/middleware-recursion-detection@npm:3.451.0" dependencies: - "@aws-sdk/types": 3.449.0 - "@smithy/protocol-http": ^3.0.8 - "@smithy/types": ^2.4.0 + "@aws-sdk/types": 3.451.0 + "@smithy/protocol-http": ^3.0.9 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: a92890fc1d76fb431f6e250a9ba7042ccf3d4ea90eac29b99b9aee16a3a77a1c55cf826403424482d54cdcf3fb05dc05ad7b909c9bd7687e1838921f665063b3 + checksum: 70625b5c9e9f61d4c58a05a8aa616ec31c7bb23f45e8187fffe30003861fd3fe0bce96e6b120b4bb3937c0c66e04c96c8e024a4c42dd0524f0a0b6dc73b7e1d5 languageName: node linkType: hard -"@aws-sdk/middleware-sdk-s3@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/middleware-sdk-s3@npm:3.449.0" +"@aws-sdk/middleware-sdk-s3@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/middleware-sdk-s3@npm:3.451.0" dependencies: - "@aws-sdk/types": 3.449.0 + "@aws-sdk/types": 3.451.0 "@aws-sdk/util-arn-parser": 3.310.0 - "@smithy/protocol-http": ^3.0.8 - "@smithy/smithy-client": ^2.1.12 - "@smithy/types": ^2.4.0 + "@smithy/protocol-http": ^3.0.9 + "@smithy/smithy-client": ^2.1.15 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: 940449080bfa679dbe4f979382990d8a7e0f99aa69ccc2f2a4329a73e9e5ee9f4d5d7c6a059843b544d27226f46c22ef9d03f9c50cc9374d37cd70d4c002d43e + checksum: e8ba5b5d5918223b4f76113dcfabf7f342880f0ef5a0ebae861f142f2d74748f1aadd47270d61c591e31ba88c52cfca0cf7ba992384b34271e13ca144edf48a6 languageName: node linkType: hard -"@aws-sdk/middleware-sdk-sqs@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/middleware-sdk-sqs@npm:3.449.0" +"@aws-sdk/middleware-sdk-sqs@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/middleware-sdk-sqs@npm:3.451.0" dependencies: - "@aws-sdk/types": 3.449.0 - "@smithy/types": ^2.4.0 + "@aws-sdk/types": 3.451.0 + "@smithy/types": ^2.5.0 "@smithy/util-hex-encoding": ^2.0.0 - "@smithy/util-utf8": ^2.0.0 + "@smithy/util-utf8": ^2.0.2 tslib: ^2.5.0 - checksum: 24af2c4a52cfa0cbc164477c32d47d93c89815c6a4c62059bc00e63b1c23ca2ca9d92e2704c6e8e52694a1b8792d2d61bc4fc57b41cd579e7dd2b13c697dfbb3 + checksum: 4ef20e1ebffb3a2fe6ddc77a5ca18203ef405e71f77b3167cbee8241e5ff77be08d3ca43fb25c3582454ddc53d42b44f38c6942c95d706ac4c4f6111d062910a languageName: node linkType: hard -"@aws-sdk/middleware-sdk-sts@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/middleware-sdk-sts@npm:3.449.0" +"@aws-sdk/middleware-sdk-sts@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/middleware-sdk-sts@npm:3.451.0" dependencies: - "@aws-sdk/middleware-signing": 3.449.0 - "@aws-sdk/types": 3.449.0 - "@smithy/types": ^2.4.0 + "@aws-sdk/middleware-signing": 3.451.0 + "@aws-sdk/types": 3.451.0 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: e5dfca029da4dc676ce9b034d8425198fcb40bbdc6a9e8f49976a3042b1f7a5de5dee6dd8e2ec12b05ff5e448537ab2268540770d2bcc70f75a3d4393491edf3 + checksum: 8aef507f62ffc342bbf70f3ecb24e96d286526aa23040a13a1f4761059b1a57f3d2bed9b14caef0bde53dd440584ef9fea6947ff18cfdae7498b028beefa9ec5 languageName: node linkType: hard @@ -1273,42 +1088,42 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/middleware-signing@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/middleware-signing@npm:3.449.0" +"@aws-sdk/middleware-signing@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/middleware-signing@npm:3.451.0" dependencies: - "@aws-sdk/types": 3.449.0 + "@aws-sdk/types": 3.451.0 "@smithy/property-provider": ^2.0.0 - "@smithy/protocol-http": ^3.0.8 + "@smithy/protocol-http": ^3.0.9 "@smithy/signature-v4": ^2.0.0 - "@smithy/types": ^2.4.0 - "@smithy/util-middleware": ^2.0.5 + "@smithy/types": ^2.5.0 + "@smithy/util-middleware": ^2.0.6 tslib: ^2.5.0 - checksum: d33347563f8cc4332609eef5639299a7beca94e50491c398996a16d8c272182fc9595f579915749e4050d3b6a3161c190f3049fa63c5d89952f551a7b877f6e8 + checksum: 6a2900bdad76733fec5155af97f9f2b3448451bf15357d0dfbc35f646a321120dc6b5d5e3c5690b0bfc5294044c139ce28b3a07c149f33dd9572399f5ae0999d languageName: node linkType: hard -"@aws-sdk/middleware-ssec@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/middleware-ssec@npm:3.449.0" +"@aws-sdk/middleware-ssec@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/middleware-ssec@npm:3.451.0" dependencies: - "@aws-sdk/types": 3.449.0 - "@smithy/types": ^2.4.0 + "@aws-sdk/types": 3.451.0 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: 56eacc28d867da20ae8dfcf88c66867fe52fb3f4e79a15aed46c6633779fe4edcc56511b89b657da3b3314e9c24654761f590b685220d170bbd354e162397b25 + checksum: f9666c4aba9085eb6257e49636e0d4eae61ce9be1411965cb2212a0ce1bf63f89365db5b4710a9154e1001dba8ac0be09a46d6e38c13f6b9dc2b73b8a4efdce4 languageName: node linkType: hard -"@aws-sdk/middleware-user-agent@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/middleware-user-agent@npm:3.449.0" +"@aws-sdk/middleware-user-agent@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/middleware-user-agent@npm:3.451.0" dependencies: - "@aws-sdk/types": 3.449.0 - "@aws-sdk/util-endpoints": 3.449.0 - "@smithy/protocol-http": ^3.0.8 - "@smithy/types": ^2.4.0 + "@aws-sdk/types": 3.451.0 + "@aws-sdk/util-endpoints": 3.451.0 + "@smithy/protocol-http": ^3.0.9 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: 3aa57fc8d9e2dcd3525888c94b0d8682ae144b30b2b9197c9bed2f1db44ee82c2f5a8e0301a8c6e9c322a359e341398731fdb6529961bdc42691a7212afb9fcd + checksum: d547fb999a6f657d8806165102b57a082a4e5464666c928148292e233be38a53209c1b9a39eac7e0c403a77e0336159b9a72e89daad86365306421058b0c4f92 languageName: node linkType: hard @@ -1356,29 +1171,29 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/region-config-resolver@npm:3.433.0": - version: 3.433.0 - resolution: "@aws-sdk/region-config-resolver@npm:3.433.0" +"@aws-sdk/region-config-resolver@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/region-config-resolver@npm:3.451.0" dependencies: - "@smithy/node-config-provider": ^2.1.3 - "@smithy/types": ^2.4.0 + "@smithy/node-config-provider": ^2.1.5 + "@smithy/types": ^2.5.0 "@smithy/util-config-provider": ^2.0.0 - "@smithy/util-middleware": ^2.0.5 + "@smithy/util-middleware": ^2.0.6 tslib: ^2.5.0 - checksum: 80a80707c2c991c16e6a52bde426704337b119d89cdedd70af72a7c52d2ee285a6cdcd355e45cb630e6d2dc3a7f57749b3276b9fff851d57c57916ef5ee2616f + checksum: df1e324d873399ff022b29a0a7d03e840aadbb0a42fad0f7f1a11f041d5f37319ecefc58038d62eff998e627b07752c96ab5879b2a34ebd088e45fc9c7a12303 languageName: node linkType: hard -"@aws-sdk/signature-v4-multi-region@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/signature-v4-multi-region@npm:3.449.0" +"@aws-sdk/signature-v4-multi-region@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/signature-v4-multi-region@npm:3.451.0" dependencies: - "@aws-sdk/types": 3.449.0 - "@smithy/protocol-http": ^3.0.8 + "@aws-sdk/types": 3.451.0 + "@smithy/protocol-http": ^3.0.9 "@smithy/signature-v4": ^2.0.0 - "@smithy/types": ^2.4.0 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: 0104e7cbbb4a170445c906d706fe5335d5e25940267ff228b0a2029f25825dd8cf406d86e592bd2fc02862c7e32926768c958dd25f5f4d92feb0eb26a975efb2 + checksum: d0c9e434e28c4c06a78d6d12ebe0067bf4d299b73e106ef336dd730a63941dcdb443147a998603c0f64ec8a1a9f53c0b8ad7f0e67fe36959c154c1dcf664a485 languageName: node linkType: hard @@ -1398,48 +1213,48 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/token-providers@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/token-providers@npm:3.449.0" +"@aws-sdk/token-providers@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/token-providers@npm:3.451.0" dependencies: "@aws-crypto/sha256-browser": 3.0.0 "@aws-crypto/sha256-js": 3.0.0 - "@aws-sdk/middleware-host-header": 3.449.0 - "@aws-sdk/middleware-logger": 3.449.0 - "@aws-sdk/middleware-recursion-detection": 3.449.0 - "@aws-sdk/middleware-user-agent": 3.449.0 - "@aws-sdk/region-config-resolver": 3.433.0 - "@aws-sdk/types": 3.449.0 - "@aws-sdk/util-endpoints": 3.449.0 - "@aws-sdk/util-user-agent-browser": 3.449.0 - "@aws-sdk/util-user-agent-node": 3.449.0 - "@smithy/config-resolver": ^2.0.16 - "@smithy/fetch-http-handler": ^2.2.4 - "@smithy/hash-node": ^2.0.12 - "@smithy/invalid-dependency": ^2.0.12 - "@smithy/middleware-content-length": ^2.0.14 - "@smithy/middleware-endpoint": ^2.1.3 - "@smithy/middleware-retry": ^2.0.18 - "@smithy/middleware-serde": ^2.0.12 - "@smithy/middleware-stack": ^2.0.6 - "@smithy/node-config-provider": ^2.1.3 - "@smithy/node-http-handler": ^2.1.8 + "@aws-sdk/middleware-host-header": 3.451.0 + "@aws-sdk/middleware-logger": 3.451.0 + "@aws-sdk/middleware-recursion-detection": 3.451.0 + "@aws-sdk/middleware-user-agent": 3.451.0 + "@aws-sdk/region-config-resolver": 3.451.0 + "@aws-sdk/types": 3.451.0 + "@aws-sdk/util-endpoints": 3.451.0 + "@aws-sdk/util-user-agent-browser": 3.451.0 + "@aws-sdk/util-user-agent-node": 3.451.0 + "@smithy/config-resolver": ^2.0.18 + "@smithy/fetch-http-handler": ^2.2.6 + "@smithy/hash-node": ^2.0.15 + "@smithy/invalid-dependency": ^2.0.13 + "@smithy/middleware-content-length": ^2.0.15 + "@smithy/middleware-endpoint": ^2.2.0 + "@smithy/middleware-retry": ^2.0.20 + "@smithy/middleware-serde": ^2.0.13 + "@smithy/middleware-stack": ^2.0.7 + "@smithy/node-config-provider": ^2.1.5 + "@smithy/node-http-handler": ^2.1.9 "@smithy/property-provider": ^2.0.0 - "@smithy/protocol-http": ^3.0.8 + "@smithy/protocol-http": ^3.0.9 "@smithy/shared-ini-file-loader": ^2.0.6 - "@smithy/smithy-client": ^2.1.12 - "@smithy/types": ^2.4.0 - "@smithy/url-parser": ^2.0.12 - "@smithy/util-base64": ^2.0.0 + "@smithy/smithy-client": ^2.1.15 + "@smithy/types": ^2.5.0 + "@smithy/url-parser": ^2.0.13 + "@smithy/util-base64": ^2.0.1 "@smithy/util-body-length-browser": ^2.0.0 "@smithy/util-body-length-node": ^2.1.0 - "@smithy/util-defaults-mode-browser": ^2.0.16 - "@smithy/util-defaults-mode-node": ^2.0.21 - "@smithy/util-endpoints": ^1.0.2 - "@smithy/util-retry": ^2.0.5 - "@smithy/util-utf8": ^2.0.0 + "@smithy/util-defaults-mode-browser": ^2.0.19 + "@smithy/util-defaults-mode-node": ^2.0.25 + "@smithy/util-endpoints": ^1.0.4 + "@smithy/util-retry": ^2.0.6 + "@smithy/util-utf8": ^2.0.2 tslib: ^2.5.0 - checksum: 582d3874ce315aa2e58fc02536065de60f73c8bd05d7ee83eb151a8e00cfc10f95a2767c19c44b64dac4a39874cbc4a8106c8c2bd99dcf03ddacaa5f37ed0792 + checksum: 1c2d3927e33eedcfc0482744f065c44f632d13fb7a03152dd4d5b04546ab06fed6373f2e8432caf332c0ab93ac9a64bf88cc5071702f6f1adacc8aed53ed3e3b languageName: node linkType: hard @@ -1453,13 +1268,13 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/types@npm:3.449.0, @aws-sdk/types@npm:^3.222.0, @aws-sdk/types@npm:^3.347.0": - version: 3.449.0 - resolution: "@aws-sdk/types@npm:3.449.0" +"@aws-sdk/types@npm:3.451.0, @aws-sdk/types@npm:^3.222.0, @aws-sdk/types@npm:^3.347.0": + version: 3.451.0 + resolution: "@aws-sdk/types@npm:3.451.0" dependencies: - "@smithy/types": ^2.4.0 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: df63355242cdc05066249b1548025dbc5c209f7fe65a76d50fccfcff731045b48a7aafafed795cbe2db1120757e8bfd7adb82d852c57563648084c7be4e1d4de + checksum: 0f66eccf707ece1f21af6c8099a6b13191a119f48dacebd8794d74263628b95dcf0bfa479493ec1774c902fe7bb8867cfcbd1cf7d908653fe0e0759168970d19 languageName: node linkType: hard @@ -1493,14 +1308,14 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-endpoints@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/util-endpoints@npm:3.449.0" +"@aws-sdk/util-endpoints@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/util-endpoints@npm:3.451.0" dependencies: - "@aws-sdk/types": 3.449.0 - "@smithy/util-endpoints": ^1.0.2 + "@aws-sdk/types": 3.451.0 + "@smithy/util-endpoints": ^1.0.4 tslib: ^2.5.0 - checksum: 7890ca9d73fcf255165355d404fd86649bf68632cf47ce944240a39010624d7550673641cb9795fe74dd73cb16bfe852416f15e09314d3533d004ae05147ae9f + checksum: ebb558cadb896754f2f0078b31720441bf8d8f4735372950a00c677b2db1a9076a3aefa3c14148e39708b593f148a12930e1b29ecce6e4ed653ea10ab26f3c80 languageName: node linkType: hard @@ -1552,32 +1367,32 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-user-agent-browser@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/util-user-agent-browser@npm:3.449.0" +"@aws-sdk/util-user-agent-browser@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/util-user-agent-browser@npm:3.451.0" dependencies: - "@aws-sdk/types": 3.449.0 - "@smithy/types": ^2.4.0 + "@aws-sdk/types": 3.451.0 + "@smithy/types": ^2.5.0 bowser: ^2.11.0 tslib: ^2.5.0 - checksum: ed30cda022e74294af6c1e358c7331920d400cef58734a18f4eee0e9836ccd099fd23174bd8fe951bdfb06e31471ce2242483978d55d9589081d3b675ef7692a + checksum: 83e6a74aca3575b385db09787021bbd40589afdff0fcad1d4ea33c7a4711f3147d61fa6465a629838d8d093609d43097bedb4bfc6e12e3695179f4c244b691e3 languageName: node linkType: hard -"@aws-sdk/util-user-agent-node@npm:3.449.0": - version: 3.449.0 - resolution: "@aws-sdk/util-user-agent-node@npm:3.449.0" +"@aws-sdk/util-user-agent-node@npm:3.451.0": + version: 3.451.0 + resolution: "@aws-sdk/util-user-agent-node@npm:3.451.0" dependencies: - "@aws-sdk/types": 3.449.0 - "@smithy/node-config-provider": ^2.1.3 - "@smithy/types": ^2.4.0 + "@aws-sdk/types": 3.451.0 + "@smithy/node-config-provider": ^2.1.5 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 peerDependencies: aws-crt: ">=1.0.0" peerDependenciesMeta: aws-crt: optional: true - checksum: 0cd0aeef35f216d9c9125449b33e74b2ab69ca59dee3e5e398656c830e00d8c45f50ae568150fdaf202ad21ddbaafa31166cfc6dab1cd498f8e406c0edc8310b + checksum: 94ccacf05776b558f965d8081602435565be59a62e0ec61946a49c2519f742ae2552df407b9ba9b37d8cbac1ef8ea5538bb72c96bc1e1c55ab9ecb6be187fe67 languageName: node linkType: hard @@ -1618,18 +1433,18 @@ __metadata: languageName: node linkType: hard -"@azure/arm-appservice@npm:^13.0.1": - version: 13.0.3 - resolution: "@azure/arm-appservice@npm:13.0.3" +"@azure/arm-appservice@npm:^14.0.0": + version: 14.0.0 + resolution: "@azure/arm-appservice@npm:14.0.0" dependencies: "@azure/abort-controller": ^1.0.0 "@azure/core-auth": ^1.3.0 - "@azure/core-client": ^1.6.1 - "@azure/core-lro": ^2.2.0 + "@azure/core-client": ^1.7.0 + "@azure/core-lro": ^2.5.0 "@azure/core-paging": ^1.2.0 "@azure/core-rest-pipeline": ^1.8.0 tslib: ^2.2.0 - checksum: 9cd73985a31744fd7da56654c1de2d1396e93fa0cc3527b7c2843e56913e2b0abd81d996a319447f2f289421c45ede6a87f820ed0f4414e7cd2afeb383ee8a0a + checksum: a34776202f28808237a00958e6498f74547ed61cb284b681ac69fbd62fc9c174b12570ac8a02224162d4c9a2f066736ca40c4e31d12098fa630f9a9eef87d8ab languageName: node linkType: hard @@ -1656,9 +1471,9 @@ __metadata: languageName: node linkType: hard -"@azure/core-client@npm:^1.4.0, @azure/core-client@npm:^1.6.1": - version: 1.6.1 - resolution: "@azure/core-client@npm:1.6.1" +"@azure/core-client@npm:^1.4.0, @azure/core-client@npm:^1.7.0": + version: 1.7.3 + resolution: "@azure/core-client@npm:1.7.3" dependencies: "@azure/abort-controller": ^1.0.0 "@azure/core-auth": ^1.4.0 @@ -1667,7 +1482,7 @@ __metadata: "@azure/core-util": ^1.0.0 "@azure/logger": ^1.0.0 tslib: ^2.2.0 - checksum: 400890a9b5f0c8801ff92005c3cba7bb5124634e321735406731bef33688a79f23d28b49fccdfab90814dade41a13f3d3cb99f80151a2bff17628416e811afb6 + checksum: 155a188b75b2d5ea783d5fde50479337c41796736f0fced1576466c8251e429195c229f2aff0bf897761f15c19d8fd0deea9a54aab514bd3584e37140e3f0cdc languageName: node linkType: hard @@ -1693,15 +1508,15 @@ __metadata: languageName: node linkType: hard -"@azure/core-lro@npm:^2.2.0": - version: 2.2.4 - resolution: "@azure/core-lro@npm:2.2.4" +"@azure/core-lro@npm:^2.2.0, @azure/core-lro@npm:^2.5.0": + version: 2.5.4 + resolution: "@azure/core-lro@npm:2.5.4" dependencies: "@azure/abort-controller": ^1.0.0 - "@azure/core-tracing": 1.0.0-preview.13 + "@azure/core-util": ^1.2.0 "@azure/logger": ^1.0.0 tslib: ^2.2.0 - checksum: f3db331409f95fc71206acd9f64efbbdf43a83d86c2012bdd19e577a603225b3a7e74e827e5c6aad1cf18024bdd8110c4cf341f7386fc83c5cb86ab72f5ad9ca + checksum: f048b99850e8497b557cf661c2f8a384ea1227de6ea0c0e1436653851c3932e28a05056a380f7c20ebc51e4c6d7bd15d7dfabc6ecca80eddb9dc3e3339df9519 languageName: node linkType: hard @@ -1751,19 +1566,41 @@ __metadata: languageName: node linkType: hard -"@azure/core-util@npm:^1.0.0, @azure/core-util@npm:^1.1.0, @azure/core-util@npm:^1.1.1": - version: 1.4.0 - resolution: "@azure/core-util@npm:1.4.0" +"@azure/core-util@npm:^1.0.0, @azure/core-util@npm:^1.1.0, @azure/core-util@npm:^1.1.1, @azure/core-util@npm:^1.2.0, @azure/core-util@npm:^1.6.1": + version: 1.6.1 + resolution: "@azure/core-util@npm:1.6.1" dependencies: "@azure/abort-controller": ^1.0.0 tslib: ^2.2.0 - checksum: a6f66d8b162a10c5a012f039cff1d786055e06e20aced07ad2574e5caa1956a3d88c7a2815b0a6f82e3514eb936374db075f91236b3435cea2b4c9cf5ccec7ed + checksum: 1f8cd130993f161c98925070af863510cbcc79e0471864e4b16852afc2ee7413c9c7fabe72f20f3e521ee75c3cd7e3085661fdc8d5d0a643a6e1b1b7bf691ddd languageName: node linkType: hard "@azure/identity@npm:^3.2.1": - version: 3.3.2 - resolution: "@azure/identity@npm:3.3.2" + version: 3.4.1 + resolution: "@azure/identity@npm:3.4.1" + dependencies: + "@azure/abort-controller": ^1.0.0 + "@azure/core-auth": ^1.5.0 + "@azure/core-client": ^1.4.0 + "@azure/core-rest-pipeline": ^1.1.0 + "@azure/core-tracing": ^1.0.0 + "@azure/core-util": ^1.6.1 + "@azure/logger": ^1.0.0 + "@azure/msal-browser": ^3.5.0 + "@azure/msal-node": ^2.5.1 + events: ^3.0.0 + jws: ^4.0.0 + open: ^8.0.0 + stoppable: ^1.1.0 + tslib: ^2.2.0 + checksum: dedb09a5073503fda3e5bf23a76e4839627ee6724967e2a26fd536322c3907e19ff04bf9c3ad2716a4eecc2f602e03be3be1230271a572fc3f44879c737014c4 + languageName: node + linkType: hard + +"@azure/identity@npm:^4.0.0": + version: 4.0.0 + resolution: "@azure/identity@npm:4.0.0" dependencies: "@azure/abort-controller": ^1.0.0 "@azure/core-auth": ^1.5.0 @@ -1772,16 +1609,14 @@ __metadata: "@azure/core-tracing": ^1.0.0 "@azure/core-util": ^1.0.0 "@azure/logger": ^1.0.0 - "@azure/msal-browser": ^2.37.1 - "@azure/msal-common": ^13.1.0 - "@azure/msal-node": ^1.17.3 + "@azure/msal-browser": ^3.5.0 + "@azure/msal-node": ^2.5.1 events: ^3.0.0 jws: ^4.0.0 open: ^8.0.0 stoppable: ^1.1.0 tslib: ^2.2.0 - uuid: ^8.3.0 - checksum: 53a650dc6f73fb35137fd4e35f6db8b04bb77b3b8598f4fa5cc145e79ba1c28258bea535fb0af7f09d7fec4b44bbda0a1a3a2b593c6d8e576e23022617c8611e + checksum: 534a62afe4715d18e221e021f8088873b1efad34344bd4c6c4685572c89517f15a646e246e9233e8db7942b0a5c73f1961ea63e3baf39c28edde1ba51da4423d languageName: node linkType: hard @@ -1821,30 +1656,30 @@ __metadata: languageName: node linkType: hard -"@azure/msal-browser@npm:^2.37.1": - version: 2.37.1 - resolution: "@azure/msal-browser@npm:2.37.1" +"@azure/msal-browser@npm:^3.5.0": + version: 3.5.0 + resolution: "@azure/msal-browser@npm:3.5.0" dependencies: - "@azure/msal-common": 13.1.0 - checksum: 920b892bcdbc10f5e736e87363cb5964e48e8dcaf20f777f634308a5bc25550a7b02f62e826c1e3b50212e47e14435f9c3a4f72befc955392f0c4327e62518d0 + "@azure/msal-common": 14.4.0 + checksum: 876e5d5ac4fc638acc18faa2cea269b595963df5806482b858f3ec72b2cff3e2b4cb47fa1e0f7ace04dd66b0544e4471f04de299a551975bdb74f111fc65af34 languageName: node linkType: hard -"@azure/msal-common@npm:13.1.0, @azure/msal-common@npm:^13.1.0": - version: 13.1.0 - resolution: "@azure/msal-common@npm:13.1.0" - checksum: db21145f824f02f63a10fa7e1a356445e0c9e945bb1685a964416f1788a89fca165302d990cdfffb7e794b92dac1c90e4934ed018e92056682f863b0eec82587 +"@azure/msal-common@npm:14.4.0": + version: 14.4.0 + resolution: "@azure/msal-common@npm:14.4.0" + checksum: 63c63fac0915b4dbd026add260e2527138a02ba6f9ccd8d92d2641fc3e2b5d59c6943415d470e40af2f34c55e77ccfc2d3f90e8a2befc1eeae3a9896ec65ade8 languageName: node linkType: hard -"@azure/msal-node@npm:^1.17.3": - version: 1.17.3 - resolution: "@azure/msal-node@npm:1.17.3" +"@azure/msal-node@npm:^2.5.1": + version: 2.5.1 + resolution: "@azure/msal-node@npm:2.5.1" dependencies: - "@azure/msal-common": 13.1.0 + "@azure/msal-common": 14.4.0 jsonwebtoken: ^9.0.0 uuid: ^8.3.0 - checksum: 6afc815116196e481dd7f2c142b9935dce1fa2b225c87c5e3615d83ecc00e4ff65295f512a9b03349a71c8cf19d6c25e0551dd33a55a4550f77dfa98ccbbc0fd + checksum: f2e5cfbfeea010e88885d19d1fca22aa70fbdc488ec58e8c76b8da8a632be002ffacddd54671c7e58162bce3f5f1ddfcb440c330ddd627aa74134b6a81d1753e languageName: node linkType: hard @@ -1883,14 +1718,14 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.18.8, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9": +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9": version: 7.22.9 resolution: "@babel/compat-data@npm:7.22.9" checksum: bed77d9044ce948b4327b30dd0de0779fa9f3a7ed1f2d31638714ed00229fa71fc4d1617ae0eb1fad419338d3658d0e9a5a083297451e09e73e078d0347ff808 languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.14.0, @babel/core@npm:^7.19.6, @babel/core@npm:^7.23.0, @babel/core@npm:^7.23.2": +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.19.6, @babel/core@npm:^7.23.0, @babel/core@npm:^7.23.3": version: 7.23.3 resolution: "@babel/core@npm:7.23.3" dependencies: @@ -1913,7 +1748,7 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.14.0, @babel/generator@npm:^7.18.13, @babel/generator@npm:^7.23.3, @babel/generator@npm:^7.7.2": +"@babel/generator@npm:^7.23.3, @babel/generator@npm:^7.7.2": version: 7.23.3 resolution: "@babel/generator@npm:7.23.3" dependencies: @@ -1943,7 +1778,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.22.10, @babel/helper-compilation-targets@npm:^7.22.15, @babel/helper-compilation-targets@npm:^7.22.5, @babel/helper-compilation-targets@npm:^7.22.6": +"@babel/helper-compilation-targets@npm:^7.22.10, @babel/helper-compilation-targets@npm:^7.22.15, @babel/helper-compilation-targets@npm:^7.22.5, @babel/helper-compilation-targets@npm:^7.22.6": version: 7.22.15 resolution: "@babel/helper-compilation-targets@npm:7.22.15" dependencies: @@ -1956,7 +1791,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.22.11, @babel/helper-create-class-features-plugin@npm:^7.22.15, @babel/helper-create-class-features-plugin@npm:^7.22.5": +"@babel/helper-create-class-features-plugin@npm:^7.22.11, @babel/helper-create-class-features-plugin@npm:^7.22.15, @babel/helper-create-class-features-plugin@npm:^7.22.5": version: 7.22.15 resolution: "@babel/helper-create-class-features-plugin@npm:7.22.15" dependencies: @@ -2071,7 +1906,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": version: 7.22.5 resolution: "@babel/helper-plugin-utils@npm:7.22.5" checksum: c0fc7227076b6041acd2f0e818145d2e8c41968cc52fb5ca70eed48e21b8fe6dd88a0a91cbddf4951e33647336eb5ae184747ca706817ca3bef5e9e905151ff5 @@ -2185,7 +2020,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.20.15, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.23.0, @babel/parser@npm:^7.23.3": +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.22.15, @babel/parser@npm:^7.23.0, @babel/parser@npm:^7.23.3": version: 7.23.3 resolution: "@babel/parser@npm:7.23.3" bin: @@ -2218,33 +2053,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-class-properties@npm:^7.0.0": - version: 7.18.6 - resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6" - dependencies: - "@babel/helper-create-class-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 49a78a2773ec0db56e915d9797e44fd079ab8a9b2e1716e0df07c92532f2c65d76aeda9543883916b8e0ff13606afeffa67c5b93d05b607bc87653ad18a91422 - languageName: node - linkType: hard - -"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0": - version: 7.18.9 - resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.18.9" - dependencies: - "@babel/compat-data": ^7.18.8 - "@babel/helper-compilation-targets": ^7.18.9 - "@babel/helper-plugin-utils": ^7.18.9 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-transform-parameters": ^7.18.8 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 66b9bae741d46edf1c96776d26dfe5d335981e57164ec2450583e3d20dfaa08a5137ffebb897e443913207789f9816bfec4ae845f38762c0196a60949eaffdba - languageName: node - linkType: hard - "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2": version: 7.21.0-placeholder-for-preset-env.2 resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0-placeholder-for-preset-env.2" @@ -2276,7 +2084,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-class-properties@npm:^7.0.0, @babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3": +"@babel/plugin-syntax-class-properties@npm:^7.12.13, @babel/plugin-syntax-class-properties@npm:^7.8.3": version: 7.12.13 resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" dependencies: @@ -2320,7 +2128,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-flow@npm:^7.0.0, @babel/plugin-syntax-flow@npm:^7.23.3": +"@babel/plugin-syntax-flow@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-syntax-flow@npm:7.23.3" dependencies: @@ -2331,17 +2139,6 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-import-assertions@npm:7.20.0": - version: 7.20.0 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.20.0" - dependencies: - "@babel/helper-plugin-utils": ^7.19.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 6a86220e0aae40164cd3ffaf80e7c076a1be02a8f3480455dddbae05fda8140f429290027604df7a11b3f3f124866e8a6d69dbfa1dda61ee7377b920ad144d5b - languageName: node - linkType: hard - "@babel/plugin-syntax-import-assertions@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-syntax-import-assertions@npm:7.22.5" @@ -2386,7 +2183,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.0.0, @babel/plugin-syntax-jsx@npm:^7.22.5, @babel/plugin-syntax-jsx@npm:^7.23.3, @babel/plugin-syntax-jsx@npm:^7.7.2": +"@babel/plugin-syntax-jsx@npm:^7.22.5, @babel/plugin-syntax-jsx@npm:^7.23.3, @babel/plugin-syntax-jsx@npm:^7.7.2": version: 7.23.3 resolution: "@babel/plugin-syntax-jsx@npm:7.23.3" dependencies: @@ -2430,7 +2227,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-object-rest-spread@npm:^7.0.0, @babel/plugin-syntax-object-rest-spread@npm:^7.8.3": +"@babel/plugin-syntax-object-rest-spread@npm:^7.8.3": version: 7.8.3 resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" dependencies: @@ -2508,7 +2305,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.0.0, @babel/plugin-transform-arrow-functions@npm:^7.22.5": +"@babel/plugin-transform-arrow-functions@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-arrow-functions@npm:7.22.5" dependencies: @@ -2546,7 +2343,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoped-functions@npm:^7.0.0, @babel/plugin-transform-block-scoped-functions@npm:^7.22.5": +"@babel/plugin-transform-block-scoped-functions@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.22.5" dependencies: @@ -2557,7 +2354,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.0.0, @babel/plugin-transform-block-scoping@npm:^7.22.10": +"@babel/plugin-transform-block-scoping@npm:^7.22.10": version: 7.22.10 resolution: "@babel/plugin-transform-block-scoping@npm:7.22.10" dependencies: @@ -2593,7 +2390,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.0.0, @babel/plugin-transform-classes@npm:^7.22.6": +"@babel/plugin-transform-classes@npm:^7.22.6": version: 7.22.6 resolution: "@babel/plugin-transform-classes@npm:7.22.6" dependencies: @@ -2612,7 +2409,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.0.0, @babel/plugin-transform-computed-properties@npm:^7.22.5": +"@babel/plugin-transform-computed-properties@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-computed-properties@npm:7.22.5" dependencies: @@ -2624,7 +2421,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.0.0, @babel/plugin-transform-destructuring@npm:^7.22.10": +"@babel/plugin-transform-destructuring@npm:^7.22.10": version: 7.22.10 resolution: "@babel/plugin-transform-destructuring@npm:7.22.10" dependencies: @@ -2694,7 +2491,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-flow-strip-types@npm:^7.0.0, @babel/plugin-transform-flow-strip-types@npm:^7.23.3": +"@babel/plugin-transform-flow-strip-types@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-flow-strip-types@npm:7.23.3" dependencies: @@ -2706,7 +2503,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.0.0, @babel/plugin-transform-for-of@npm:^7.22.5": +"@babel/plugin-transform-for-of@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-for-of@npm:7.22.5" dependencies: @@ -2717,7 +2514,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.0.0, @babel/plugin-transform-function-name@npm:^7.22.5": +"@babel/plugin-transform-function-name@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-function-name@npm:7.22.5" dependencies: @@ -2742,7 +2539,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.0.0, @babel/plugin-transform-literals@npm:^7.22.5": +"@babel/plugin-transform-literals@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-literals@npm:7.22.5" dependencies: @@ -2765,7 +2562,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.0.0, @babel/plugin-transform-member-expression-literals@npm:^7.22.5": +"@babel/plugin-transform-member-expression-literals@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-member-expression-literals@npm:7.22.5" dependencies: @@ -2788,7 +2585,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.0.0, @babel/plugin-transform-modules-commonjs@npm:^7.22.5, @babel/plugin-transform-modules-commonjs@npm:^7.23.0, @babel/plugin-transform-modules-commonjs@npm:^7.23.3": +"@babel/plugin-transform-modules-commonjs@npm:^7.22.5, @babel/plugin-transform-modules-commonjs@npm:^7.23.0, @babel/plugin-transform-modules-commonjs@npm:^7.23.3": version: 7.23.3 resolution: "@babel/plugin-transform-modules-commonjs@npm:7.23.3" dependencies: @@ -2889,7 +2686,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.0.0, @babel/plugin-transform-object-super@npm:^7.22.5": +"@babel/plugin-transform-object-super@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-object-super@npm:7.22.5" dependencies: @@ -2926,7 +2723,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.18.8, @babel/plugin-transform-parameters@npm:^7.22.5": +"@babel/plugin-transform-parameters@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-parameters@npm:7.22.5" dependencies: @@ -2963,7 +2760,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.0.0, @babel/plugin-transform-property-literals@npm:^7.22.5": +"@babel/plugin-transform-property-literals@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-property-literals@npm:7.22.5" dependencies: @@ -2985,7 +2782,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-display-name@npm:^7.0.0, @babel/plugin-transform-react-display-name@npm:^7.22.5": +"@babel/plugin-transform-react-display-name@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-react-display-name@npm:7.22.5" dependencies: @@ -3007,29 +2804,29 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-self@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-react-jsx-self@npm:7.22.5" +"@babel/plugin-transform-react-jsx-self@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-react-jsx-self@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 671eebfabd14a0c7d6ae805fff7e289dfdb7ba984bb100ea2ef6dad1d6a665ebbb09199ab2e64fca7bc78bd0fdc80ca897b07996cf215fafc32c67bc564309af + checksum: 882bf56bc932d015c2d83214133939ddcf342e5bcafa21f1a93b19f2e052145115e1e0351730897fd66e5f67cad7875b8a8d81ceb12b6e2a886ad0102cb4eb1f languageName: node linkType: hard -"@babel/plugin-transform-react-jsx-source@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/plugin-transform-react-jsx-source@npm:7.22.5" +"@babel/plugin-transform-react-jsx-source@npm:^7.23.3": + version: 7.23.3 + resolution: "@babel/plugin-transform-react-jsx-source@npm:7.23.3" dependencies: "@babel/helper-plugin-utils": ^7.22.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4ca2bd62ca14f8bbdcda9139f3f799e1c1c1bae504b67c1ca9bca142c53d81926d1a2b811f66a625f20999b2d352131053d886601f1ba3c1e9378c104d884277 + checksum: 92287fb797e522d99bdc77eaa573ce79ff0ad9f1cf4e7df374645e28e51dce0adad129f6f075430b129b5bac8dad843f65021970e12e992d6d6671f0d65bb1e0 languageName: node linkType: hard -"@babel/plugin-transform-react-jsx@npm:^7.0.0, @babel/plugin-transform-react-jsx@npm:^7.22.5": +"@babel/plugin-transform-react-jsx@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-react-jsx@npm:7.22.5" dependencies: @@ -3079,7 +2876,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.0.0, @babel/plugin-transform-shorthand-properties@npm:^7.22.5": +"@babel/plugin-transform-shorthand-properties@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-shorthand-properties@npm:7.22.5" dependencies: @@ -3090,7 +2887,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.0.0, @babel/plugin-transform-spread@npm:^7.22.5": +"@babel/plugin-transform-spread@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-spread@npm:7.22.5" dependencies: @@ -3113,7 +2910,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.0.0, @babel/plugin-transform-template-literals@npm:^7.22.5": +"@babel/plugin-transform-template-literals@npm:^7.22.5": version: 7.22.5 resolution: "@babel/plugin-transform-template-literals@npm:7.22.5" dependencies: @@ -3384,7 +3181,7 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.18.10, @babel/template@npm:^7.22.15, @babel/template@npm:^7.22.5, @babel/template@npm:^7.3.3": +"@babel/template@npm:^7.22.15, @babel/template@npm:^7.22.5, @babel/template@npm:^7.3.3": version: 7.22.15 resolution: "@babel/template@npm:7.22.15" dependencies: @@ -3395,7 +3192,7 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.23.2, @babel/traverse@npm:^7.23.3, @babel/traverse@npm:^7.4.5": +"@babel/traverse@npm:^7.23.2, @babel/traverse@npm:^7.23.3, @babel/traverse@npm:^7.4.5": version: 7.23.3 resolution: "@babel/traverse@npm:7.23.3" dependencies: @@ -3413,7 +3210,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.16.8, @babel/types@npm:^7.18.13, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.10, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.3, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.10, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.3, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": version: 7.23.3 resolution: "@babel/types@npm:7.23.3" dependencies: @@ -3516,10 +3313,10 @@ __metadata: "@backstage/integration": "workspace:^" "@backstage/integration-aws-node": "workspace:^" "@backstage/types": "workspace:^" - "@google-cloud/storage": ^6.0.0 + "@google-cloud/storage": ^7.0.0 "@keyv/memcache": ^1.3.5 "@keyv/redis": ^2.5.3 - "@kubernetes/client-node": 0.19.0 + "@kubernetes/client-node": 0.20.0 "@manypkg/get-packages": ^1.1.3 "@octokit/rest": ^19.0.3 "@types/archiver": ^5.1.0 @@ -3538,7 +3335,7 @@ __metadata: "@types/webpack-env": ^1.15.2 "@types/yauzl": ^2.10.0 archiver: ^5.0.2 - aws-sdk-client-mock: ^2.0.0 + aws-sdk-client-mock: ^3.0.0 base64-stream: ^1.0.0 better-sqlite3: ^9.0.0 compression: ^1.7.4 @@ -3724,14 +3521,14 @@ __metadata: languageName: unknown linkType: soft -"@backstage/catalog-client@^1.4.5, @backstage/catalog-client@workspace:^, @backstage/catalog-client@workspace:packages/catalog-client": +"@backstage/catalog-client@^1.4.6, @backstage/catalog-client@workspace:^, @backstage/catalog-client@workspace:packages/catalog-client": version: 0.0.0-use.local resolution: "@backstage/catalog-client@workspace:packages/catalog-client" dependencies: "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/errors": "workspace:^" - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 msw: ^1.0.0 languageName: unknown linkType: soft @@ -3841,7 +3638,7 @@ __metadata: "@types/terser-webpack-plugin": ^5.0.4 "@types/webpack-env": ^1.15.2 "@types/yarnpkg__lockfile": ^1.1.4 - "@typescript-eslint/eslint-plugin": 6.7.5 + "@typescript-eslint/eslint-plugin": 6.11.0 "@typescript-eslint/parser": ^6.7.2 "@yarnpkg/lockfile": ^1.1.0 "@yarnpkg/parsers": ^3.0.0-rc.4 @@ -3850,7 +3647,7 @@ __metadata: chalk: ^4.0.0 chokidar: ^3.3.1 commander: ^9.1.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 cross-spawn: ^7.0.3 css-loader: ^6.5.1 ctrlc-windows: ^2.1.0 @@ -3911,7 +3708,6 @@ __metadata: terser-webpack-plugin: ^5.1.3 ts-node: ^10.0.0 tsx: ^3.14.0 - type-fest: ^2.19.0 util: ^0.12.3 webpack: ^5.70.0 webpack-dev-server: ^4.7.3 @@ -4047,6 +3843,7 @@ __metadata: "@backstage/plugin-stackstorm": "workspace:^" "@oriflame/backstage-plugin-score-card": ^0.7.0 "@testing-library/jest-dom": ^6.0.0 + "@types/react": ^16.13.1 || ^17.0.0 peerDependencies: react: ^16.13.1 || ^17.0.0 || ^18.0.0 react-router-dom: 6.0.0-beta.0 || ^6.3.0 @@ -4103,15 +3900,15 @@ __metadata: languageName: node linkType: hard -"@backstage/core-components@npm:^0.13.6, @backstage/core-components@npm:^0.13.7": - version: 0.13.7 - resolution: "@backstage/core-components@npm:0.13.7" +"@backstage/core-components@npm:^0.13.7, @backstage/core-components@npm:^0.13.8": + version: 0.13.8 + resolution: "@backstage/core-components@npm:0.13.8" dependencies: "@backstage/config": ^1.1.1 - "@backstage/core-plugin-api": ^1.7.0 + "@backstage/core-plugin-api": ^1.8.0 "@backstage/errors": ^1.2.3 - "@backstage/theme": ^0.4.3 - "@backstage/version-bridge": ^1.0.6 + "@backstage/theme": ^0.4.4 + "@backstage/version-bridge": ^1.0.7 "@date-io/core": ^1.3.13 "@material-table/core": ^3.1.0 "@material-ui/core": ^4.12.2 @@ -4129,8 +3926,8 @@ __metadata: dagre: ^0.8.5 history: ^5.0.0 immer: ^9.0.1 - linkify-react: 4.1.1 - linkifyjs: 4.1.1 + linkify-react: 4.1.2 + linkifyjs: 4.1.2 lodash: ^4.17.21 pluralize: ^8.0.0 qs: ^6.9.4 @@ -4149,10 +3946,10 @@ __metadata: zen-observable: ^0.10.0 zod: ^3.21.4 peerDependencies: - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 + react: ^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: 49b0573f7658b27788341439ec15f36ef03340875bed0d9594cae21b797e56a898063ead61f7fa9f08c739adae3284bff1d01f7d0467f3e53dd2efbb57365722 + checksum: 45bbf5af46837611c8c7fecde2afba49b2f958f9a8f047fe956b382a9a420a7e80c29f56ac2a5ecc8aa43e87c3b7a8446256d42aa642171f3439b5dd2a84bb0b languageName: node linkType: hard @@ -4195,14 +3992,14 @@ __metadata: "@types/zen-observable": ^0.8.0 ansi-regex: ^6.0.1 classnames: ^2.2.6 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 d3-selection: ^3.0.0 d3-shape: ^3.0.0 d3-zoom: ^3.0.0 dagre: ^0.8.5 history: ^5.0.0 immer: ^9.0.1 - linkify-react: 4.1.2 + linkify-react: 4.1.3 linkifyjs: 4.1.2 lodash: ^4.17.21 msw: ^1.0.0 @@ -4229,21 +4026,21 @@ __metadata: languageName: unknown linkType: soft -"@backstage/core-plugin-api@npm:^1.3.0, @backstage/core-plugin-api@npm:^1.5.0, @backstage/core-plugin-api@npm:^1.7.0": - version: 1.7.0 - resolution: "@backstage/core-plugin-api@npm:1.7.0" +"@backstage/core-plugin-api@npm:^1.3.0, @backstage/core-plugin-api@npm:^1.5.0, @backstage/core-plugin-api@npm:^1.7.0, @backstage/core-plugin-api@npm:^1.8.0": + version: 1.8.0 + resolution: "@backstage/core-plugin-api@npm:1.8.0" dependencies: "@backstage/config": ^1.1.1 "@backstage/types": ^1.1.1 - "@backstage/version-bridge": ^1.0.6 + "@backstage/version-bridge": ^1.0.7 "@types/react": ^16.13.1 || ^17.0.0 history: ^5.0.0 i18next: ^22.4.15 peerDependencies: - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 + 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: 7b328dac8faf598f4b45c098ba0629f29d1278c204fde11264fe964a82da4e3a72a13551200941b31901d3b0f483bea55deba5264ab55a2c202eae2c6a196ae7 + checksum: 1f78c4737c0e30682a3169d967943698cb95b3dccea1e60bd72e82dd14847192f5180db658b8d0b6811d6fb13830085ca3ecc6ea0be58771d0b517f877c97bbb languageName: node linkType: hard @@ -4376,7 +4173,6 @@ __metadata: "@backstage/core-components": "workspace:^" "@backstage/core-plugin-api": "workspace:^" "@backstage/frontend-plugin-api": "workspace:^" - "@backstage/plugin-graphiql": "workspace:^" "@backstage/test-utils": "workspace:^" "@backstage/theme": "workspace:^" "@backstage/types": "workspace:^" @@ -4393,14 +4189,36 @@ __metadata: languageName: unknown linkType: soft +"@backstage/frontend-plugin-api@npm:^0.3.0": + version: 0.3.0 + resolution: "@backstage/frontend-plugin-api@npm:0.3.0" + dependencies: + "@backstage/core-components": ^0.13.8 + "@backstage/core-plugin-api": ^1.8.0 + "@backstage/types": ^1.1.1 + "@backstage/version-bridge": ^1.0.7 + "@material-ui/core": ^4.12.4 + "@types/react": ^16.13.1 || ^17.0.0 + lodash: ^4.17.21 + zod: ^3.21.4 + zod-to-json-schema: ^3.21.4 + peerDependencies: + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-router-dom: 6.0.0-beta.0 || ^6.3.0 + checksum: 195b0cd480839ff54a07aa37eb3bc644c321ecd6bce258159ba457f63dc79486b59c73180aaf6f7e824d0dbf8dfd9cb96fe8d5843d5e64467e44551f78419dc2 + languageName: node + linkType: hard + "@backstage/frontend-plugin-api@workspace:^, @backstage/frontend-plugin-api@workspace:packages/frontend-plugin-api": version: 0.0.0-use.local resolution: "@backstage/frontend-plugin-api@workspace:packages/frontend-plugin-api" dependencies: "@backstage/cli": "workspace:^" + "@backstage/config": "workspace:^" "@backstage/core-components": "workspace:^" "@backstage/core-plugin-api": "workspace:^" "@backstage/frontend-app-api": "workspace:^" + "@backstage/frontend-test-utils": "workspace:^" "@backstage/test-utils": "workspace:^" "@backstage/types": "workspace:^" "@backstage/version-bridge": "workspace:^" @@ -4418,6 +4236,22 @@ __metadata: languageName: unknown linkType: soft +"@backstage/frontend-test-utils@workspace:^, @backstage/frontend-test-utils@workspace:packages/frontend-test-utils": + version: 0.0.0-use.local + resolution: "@backstage/frontend-test-utils@workspace:packages/frontend-test-utils" + dependencies: + "@backstage/cli": "workspace:^" + "@backstage/frontend-app-api": "workspace:^" + "@backstage/frontend-plugin-api": "workspace:^" + "@backstage/test-utils": "workspace:^" + "@backstage/types": "workspace:^" + "@testing-library/jest-dom": ^6.0.0 + peerDependencies: + "@testing-library/react": ^12.1.3 || ^13.0.0 || ^14.0.0 + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + languageName: unknown + linkType: soft + "@backstage/integration-aws-node@workspace:^, @backstage/integration-aws-node@workspace:packages/integration-aws-node": version: 0.0.0-use.local resolution: "@backstage/integration-aws-node@workspace:packages/integration-aws-node" @@ -4432,26 +4266,26 @@ __metadata: "@backstage/config-loader": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/test-utils": "workspace:^" - aws-sdk-client-mock: ^2.0.0 - aws-sdk-client-mock-jest: ^2.0.0 + aws-sdk-client-mock: ^3.0.0 + aws-sdk-client-mock-jest: ^3.0.0 languageName: unknown linkType: soft -"@backstage/integration-react@npm:^1.1.20": - version: 1.1.20 - resolution: "@backstage/integration-react@npm:1.1.20" +"@backstage/integration-react@npm:^1.1.20, @backstage/integration-react@npm:^1.1.21": + version: 1.1.21 + resolution: "@backstage/integration-react@npm:1.1.21" dependencies: "@backstage/config": ^1.1.1 - "@backstage/core-plugin-api": ^1.7.0 - "@backstage/integration": ^1.7.1 + "@backstage/core-plugin-api": ^1.8.0 + "@backstage/integration": ^1.7.2 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@types/react": ^16.13.1 || ^17.0.0 peerDependencies: - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 + 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: 6d76d58687703ac9fa8d328caf993cf8ae1326254e55cda90701c94418f37d0fb6ee1940050a56d6f47e7ee8468658be2862359b644deb10e686342960435487 + checksum: 5acbd36910954fd640eb586281436a579c08a5de8f1b226c86aab5028dcb3746190e740f5631d647e717f2c8aacde4a3efcd54fced7a75a8dcf5827c15213ab7 languageName: node linkType: hard @@ -4479,19 +4313,19 @@ __metadata: languageName: unknown linkType: soft -"@backstage/integration@npm:^1.7.1": - version: 1.7.1 - resolution: "@backstage/integration@npm:1.7.1" +"@backstage/integration@npm:^1.7.2": + version: 1.7.2 + resolution: "@backstage/integration@npm:1.7.2" dependencies: "@azure/identity": ^3.2.1 "@backstage/config": ^1.1.1 "@octokit/auth-app": ^4.0.0 "@octokit/rest": ^19.0.3 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 git-url-parse: ^13.0.0 lodash: ^4.17.21 luxon: ^3.0.0 - checksum: e36e91ee9d3f09a3f6e1dbbc2e41af2ecce49e83a06943f151a668422ec7afb07af4f1ee136f21618cc4ce8b59586473ec8fbb66aaf43c26a390f8e2eb26d597 + checksum: 6e9c63ea9da6d8769eb8cd05db01f91be70dc13d86a09c7be9835b1f57dac4fb64a3089be3b84b5329b9bacc887cda1dec3860bb04c9f58f78c458f96c942384 languageName: node linkType: hard @@ -4499,14 +4333,14 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/integration@workspace:packages/integration" dependencies: - "@azure/identity": ^3.2.1 + "@azure/identity": ^4.0.0 "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/config-loader": "workspace:^" "@octokit/auth-app": ^4.0.0 "@octokit/rest": ^19.0.3 "@types/luxon": ^3.0.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 git-url-parse: ^13.0.0 lodash: ^4.17.21 luxon: ^3.0.0 @@ -4529,7 +4363,7 @@ __metadata: "@backstage/plugin-adr-common": "workspace:^" "@backstage/plugin-search-common": "workspace:^" "@types/express": ^4.17.6 - "@types/marked": ^4.0.0 + "@types/marked": ^5.0.0 "@types/supertest": ^2.0.8 express: ^4.17.1 express-promise-router: ^4.1.0 @@ -4583,7 +4417,7 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/git-url-parse": ^9.0.0 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 lodash: ^4.17.21 msw: ^1.0.0 react-markdown: ^8.0.0 @@ -4693,7 +4527,7 @@ __metadata: "@testing-library/jest-dom": ^6.0.0 "@testing-library/react": ^14.0.0 "@testing-library/user-event": ^14.0.0 - "@types/jest": ^28.1.3 + "@types/jest": ^29.0.0 "@types/react": ^16.13.1 || ^17.0.0 msw: ^1.0.0 react-ga4: ^2.0.0 @@ -4775,7 +4609,7 @@ __metadata: "@testing-library/react": ^14.0.0 "@testing-library/user-event": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 msw: ^1.0.0 qs: ^6.10.1 react-use: ^17.2.4 @@ -4805,7 +4639,7 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-api-docs@workspace:plugins/api-docs" dependencies: - "@asyncapi/react-component": 1.0.0-next.48 + "@asyncapi/react-component": 1.2.2 "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/core-app-api": "workspace:^" @@ -4826,9 +4660,10 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 "@types/swagger-ui-react": ^4.18.0 - cross-fetch: ^3.1.5 - graphiql: 3.0.9 + cross-fetch: ^4.0.0 + graphiql: 3.0.10 graphql: ^16.0.0 + graphql-config: ^5.0.2 graphql-ws: ^5.4.1 isomorphic-form-data: ^2.0.0 msw: ^1.0.0 @@ -4845,7 +4680,7 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-apollo-explorer@workspace:plugins/apollo-explorer" dependencies: - "@apollo/explorer": ^2.0.0 + "@apollo/explorer": ^3.0.0 "@backstage/cli": "workspace:^" "@backstage/core-app-api": "workspace:^" "@backstage/core-components": "workspace:^" @@ -4912,6 +4747,24 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-auth-backend-module-atlassian-provider@workspace:^, @backstage/plugin-auth-backend-module-atlassian-provider@workspace:plugins/auth-backend-module-atlassian-provider": + version: 0.0.0-use.local + resolution: "@backstage/plugin-auth-backend-module-atlassian-provider@workspace:plugins/auth-backend-module-atlassian-provider" + dependencies: + "@backstage/backend-common": "workspace:^" + "@backstage/backend-defaults": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" + "@backstage/backend-test-utils": "workspace:^" + "@backstage/cli": "workspace:^" + "@backstage/plugin-auth-backend": "workspace:^" + "@backstage/plugin-auth-node": "workspace:^" + express: ^4.18.2 + passport: ^0.6.0 + passport-atlassian-oauth2: ^2.1.0 + supertest: ^6.3.3 + languageName: unknown + linkType: soft + "@backstage/plugin-auth-backend-module-gcp-iap-provider@workspace:^, @backstage/plugin-auth-backend-module-gcp-iap-provider@workspace:plugins/auth-backend-module-gcp-iap-provider": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-gcp-iap-provider@workspace:plugins/auth-backend-module-gcp-iap-provider" @@ -5021,6 +4874,24 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-auth-backend-module-okta-provider@workspace:^, @backstage/plugin-auth-backend-module-okta-provider@workspace:plugins/auth-backend-module-okta-provider": + version: 0.0.0-use.local + resolution: "@backstage/plugin-auth-backend-module-okta-provider@workspace:plugins/auth-backend-module-okta-provider" + dependencies: + "@backstage/backend-common": "workspace:^" + "@backstage/backend-defaults": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" + "@backstage/backend-test-utils": "workspace:^" + "@backstage/cli": "workspace:^" + "@backstage/plugin-auth-backend": "workspace:^" + "@backstage/plugin-auth-node": "workspace:^" + "@davidzemon/passport-okta-oauth": ^0.0.5 + express: ^4.18.2 + passport: ^0.6.0 + supertest: ^6.3.3 + languageName: unknown + linkType: soft + "@backstage/plugin-auth-backend-module-pinniped-provider@workspace:plugins/auth-backend-module-pinniped-provider": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend-module-pinniped-provider@workspace:plugins/auth-backend-module-pinniped-provider" @@ -5038,6 +4909,7 @@ __metadata: express-promise-router: ^4.1.1 express-session: ^1.17.3 jose: ^4.14.6 + luxon: ^3.4.3 msw: ^1.3.0 openid-client: ^5.4.3 passport: ^0.6.0 @@ -5045,6 +4917,28 @@ __metadata: languageName: unknown linkType: soft +"@backstage/plugin-auth-backend-module-vmware-cloud-provider@workspace:plugins/auth-backend-module-vmware-cloud-provider": + version: 0.0.0-use.local + resolution: "@backstage/plugin-auth-backend-module-vmware-cloud-provider@workspace:plugins/auth-backend-module-vmware-cloud-provider" + dependencies: + "@backstage/backend-common": "workspace:^" + "@backstage/backend-defaults": "workspace:^" + "@backstage/backend-plugin-api": "workspace:^" + "@backstage/backend-test-utils": "workspace:^" + "@backstage/catalog-model": "workspace:^" + "@backstage/cli": "workspace:^" + "@backstage/config": "workspace:^" + "@backstage/errors": "workspace:^" + "@backstage/plugin-auth-backend": "workspace:^" + "@backstage/plugin-auth-node": "workspace:^" + "@types/passport-oauth2": ^1.4.15 + jose: ^4.6.0 + msw: ^2.0.8 + passport-oauth2: ^1.6.1 + supertest: ^6.3.3 + languageName: unknown + linkType: soft + "@backstage/plugin-auth-backend@workspace:^, @backstage/plugin-auth-backend@workspace:plugins/auth-backend": version: 0.0.0-use.local resolution: "@backstage/plugin-auth-backend@workspace:plugins/auth-backend" @@ -5058,16 +4952,17 @@ __metadata: "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" + "@backstage/plugin-auth-backend-module-atlassian-provider": "workspace:^" "@backstage/plugin-auth-backend-module-gcp-iap-provider": "workspace:^" "@backstage/plugin-auth-backend-module-github-provider": "workspace:^" "@backstage/plugin-auth-backend-module-gitlab-provider": "workspace:^" "@backstage/plugin-auth-backend-module-google-provider": "workspace:^" "@backstage/plugin-auth-backend-module-oauth2-provider": "workspace:^" + "@backstage/plugin-auth-backend-module-okta-provider": "workspace:^" "@backstage/plugin-auth-node": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@backstage/types": "workspace:^" - "@davidzemon/passport-okta-oauth": ^0.0.5 - "@google-cloud/firestore": ^6.0.0 + "@google-cloud/firestore": ^7.0.0 "@types/body-parser": ^1.19.0 "@types/cookie-parser": ^1.4.2 "@types/express": ^4.17.6 @@ -5218,9 +5113,9 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-azure-sites-backend@workspace:plugins/azure-sites-backend" dependencies: - "@azure/arm-appservice": ^13.0.1 + "@azure/arm-appservice": ^14.0.0 "@azure/arm-resourcegraph": ^4.2.1 - "@azure/identity": ^3.2.1 + "@azure/identity": ^4.0.0 "@backstage/backend-common": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" @@ -5292,7 +5187,7 @@ __metadata: "@types/express": ^4.17.6 badge-maker: ^3.3.0 cors: ^2.8.5 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 express: ^4.17.1 express-promise-router: ^4.1.0 knex: ^3.0.0 @@ -5362,7 +5257,6 @@ __metadata: "@backstage/core-plugin-api": "workspace:^" "@backstage/dev-utils": "workspace:^" "@backstage/errors": "workspace:^" - "@backstage/plugin-catalog": "workspace:^" "@backstage/plugin-catalog-react": "workspace:^" "@backstage/theme": "workspace:^" "@date-io/luxon": 1.x @@ -5390,9 +5284,9 @@ __metadata: "@backstage/cli": "workspace:^" "@backstage/integration": "workspace:^" "@openapitools/openapi-generator-cli": ^2.4.26 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 msw: ^1.0.0 - ts-morph: ^17.0.0 + ts-morph: ^20.0.0 languageName: unknown linkType: soft @@ -5457,8 +5351,8 @@ __metadata: "@backstage/plugin-kubernetes-common": "workspace:^" "@backstage/types": "workspace:^" "@types/lodash": ^4.14.151 - aws-sdk-client-mock: ^2.0.0 - aws-sdk-client-mock-jest: ^2.0.0 + aws-sdk-client-mock: ^3.0.0 + aws-sdk-client-mock-jest: ^3.0.0 lodash: ^4.17.21 luxon: ^3.0.0 p-limit: ^3.0.2 @@ -5510,7 +5404,7 @@ __metadata: "@backstage/test-utils": "workspace:^" "@types/express": "*" "@types/supertest": ^2.0.8 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 express: ^4.17.1 express-promise-router: ^4.1.0 lodash: ^4.17.21 @@ -5605,7 +5499,7 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/plugin-catalog-node": "workspace:^" "@backstage/plugin-kubernetes-common": "workspace:^" - "@google-cloud/container": ^4.15.0 + "@google-cloud/container": ^5.0.0 winston: ^3.2.1 languageName: unknown linkType: soft @@ -5758,7 +5652,7 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-backend-module-msgraph@workspace:plugins/catalog-backend-module-msgraph" dependencies: - "@azure/identity": ^3.2.1 + "@azure/identity": ^4.0.0 "@backstage/backend-common": "workspace:^" "@backstage/backend-plugin-api": "workspace:^" "@backstage/backend-tasks": "workspace:^" @@ -5882,6 +5776,7 @@ __metadata: "@types/core-js": ^2.5.4 "@types/express": ^4.17.6 "@types/git-url-parse": ^9.0.0 + "@types/glob": ^7.1.1 "@types/lodash": ^4.14.151 "@types/supertest": ^2.0.8 "@types/uuid": ^8.0.0 @@ -5911,7 +5806,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-common@^1.0.10, @backstage/plugin-catalog-common@^1.0.17, @backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common": +"@backstage/plugin-catalog-common@^1.0.10, @backstage/plugin-catalog-common@^1.0.18, @backstage/plugin-catalog-common@workspace:^, @backstage/plugin-catalog-common@workspace:plugins/catalog-common": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-common@workspace:plugins/catalog-common" dependencies: @@ -5958,37 +5853,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-catalog-graphql@workspace:^, @backstage/plugin-catalog-graphql@workspace:plugins/catalog-graphql": - version: 0.0.0-use.local - resolution: "@backstage/plugin-catalog-graphql@workspace:plugins/catalog-graphql" - dependencies: - "@apollo/client": ^3.0.0 - "@apollo/server": ^4.0.0 - "@backstage/catalog-model": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - "@backstage/test-utils": "workspace:^" - "@backstage/types": "workspace:^" - "@graphql-codegen/cli": ^3.0.0 - "@graphql-codegen/graphql-modules-preset": ^3.0.0 - "@graphql-codegen/typescript": ^3.0.0 - "@graphql-codegen/typescript-resolvers": ^3.0.0 - "@graphql-tools/schema": ^9.0.0 - "@types/react": ^16.13.1 || ^17.0.0 - graphql: ^16.0.0 - graphql-modules: ^2.0.0 - graphql-tag: ^2.11.0 - graphql-type-json: ^0.3.2 - msw: ^1.0.0 - node-fetch: ^2.6.7 - winston: ^3.2.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-catalog-import@workspace:^, @backstage/plugin-catalog-import@workspace:plugins/catalog-import": version: 0.0.0-use.local resolution: "@backstage/plugin-catalog-import@workspace:plugins/catalog-import" @@ -5998,6 +5862,7 @@ __metadata: "@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/dev-utils": "workspace:^" @@ -6048,21 +5913,22 @@ __metadata: linkType: soft "@backstage/plugin-catalog-react@npm:^1.2.4, @backstage/plugin-catalog-react@npm:^1.8.5": - version: 1.8.5 - resolution: "@backstage/plugin-catalog-react@npm:1.8.5" + version: 1.9.1 + resolution: "@backstage/plugin-catalog-react@npm:1.9.1" dependencies: - "@backstage/catalog-client": ^1.4.5 + "@backstage/catalog-client": ^1.4.6 "@backstage/catalog-model": ^1.4.3 - "@backstage/core-components": ^0.13.6 - "@backstage/core-plugin-api": ^1.7.0 + "@backstage/core-components": ^0.13.8 + "@backstage/core-plugin-api": ^1.8.0 "@backstage/errors": ^1.2.3 - "@backstage/integration": ^1.7.1 - "@backstage/plugin-catalog-common": ^1.0.17 - "@backstage/plugin-permission-common": ^0.7.9 - "@backstage/plugin-permission-react": ^0.4.16 - "@backstage/theme": ^0.4.3 + "@backstage/frontend-plugin-api": ^0.3.0 + "@backstage/integration-react": ^1.1.21 + "@backstage/plugin-catalog-common": ^1.0.18 + "@backstage/plugin-permission-common": ^0.7.10 + "@backstage/plugin-permission-react": ^0.4.17 + "@backstage/theme": ^0.4.4 "@backstage/types": ^1.1.1 - "@backstage/version-bridge": ^1.0.6 + "@backstage/version-bridge": ^1.0.7 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 @@ -6076,10 +5942,10 @@ __metadata: yaml: ^2.0.0 zen-observable: ^0.10.0 peerDependencies: - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 + react: ^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: 8badfa1af8d20f93ff162580d62e0ddf91753c91dfc741bbc7e12a6e9c8ebc554797b537ccecd6adac276e404f7d5c20bf64aea44c6b2798bfe5643d251b9b04 + checksum: aa57e828a161db545353d06460ec62f13fa6ca9e44d378e903a8ce9bbbc24fb22dfe9ab264f4e8150ef7543afe26ee887afe7a305670b79e0818b9d8d098550e languageName: node linkType: hard @@ -6166,6 +6032,7 @@ __metadata: "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/core-app-api": "workspace:^" + "@backstage/core-compat-api": "workspace:^" "@backstage/core-components": "workspace:^" "@backstage/core-plugin-api": "workspace:^" "@backstage/dev-utils": "workspace:^" @@ -6184,6 +6051,7 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 + "@mui/utils": ^5.14.15 "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^6.0.0 "@testing-library/react": ^14.0.0 @@ -6274,7 +6142,7 @@ __metadata: "@types/humanize-duration": ^3.25.1 "@types/react": ^16.13.1 || ^17.0.0 circleci-api: ^4.0.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 humanize-duration: ^3.27.0 lodash: ^4.17.21 luxon: ^3.0.0 @@ -6308,7 +6176,7 @@ __metadata: "@testing-library/react": ^14.0.0 "@testing-library/user-event": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 luxon: ^3.0.0 msw: ^1.0.0 qs: ^6.9.4 @@ -6523,7 +6391,7 @@ __metadata: "@types/yup": ^0.29.13 canvas: ^2.10.2 classnames: ^2.2.6 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 history: ^5.0.0 luxon: ^3.0.0 msw: ^1.0.0 @@ -6609,7 +6477,7 @@ __metadata: "@testing-library/jest-dom": ^6.0.0 "@testing-library/react": ^14.0.0 "@testing-library/user-event": ^14.0.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 msw: ^1.0.0 react-json-view: ^1.21.3 react-use: ^17.2.4 @@ -6773,7 +6641,7 @@ __metadata: "@backstage/plugin-events-backend-test-utils": "workspace:^" "@backstage/plugin-events-node": "workspace:^" "@backstage/types": "workspace:^" - aws-sdk-client-mock: ^2.0.0 + aws-sdk-client-mock: ^3.0.0 luxon: ^3.0.0 winston: ^3.2.1 languageName: unknown @@ -6935,7 +6803,7 @@ __metadata: "@testing-library/react": ^14.0.0 "@testing-library/user-event": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 msw: ^1.0.0 peerDependencies: react: ^16.13.1 || ^17.0.0 || ^18.0.0 @@ -6973,7 +6841,7 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 classnames: ^2.2.6 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 msw: ^1.0.0 pluralize: ^8.0.0 react-use: ^17.2.4 @@ -7037,7 +6905,7 @@ __metadata: "@testing-library/react": ^14.0.0 "@testing-library/user-event": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 luxon: ^3.0.0 msw: ^1.0.0 p-limit: ^3.0.2 @@ -7074,7 +6942,7 @@ __metadata: "@types/react": ^16.13.1 || ^17.0.0 "@types/sanitize-html": ^2.6.2 classnames: ^2.3.1 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 dompurify: ^2.3.6 lodash: ^4.17.21 luxon: ^3.0.0 @@ -7108,7 +6976,7 @@ __metadata: "@testing-library/react": ^14.0.0 "@testing-library/user-event": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 msw: ^1.0.0 peerDependencies: react: ^16.13.1 || ^17.0.0 || ^18.0.0 @@ -7175,7 +7043,7 @@ __metadata: "@testing-library/react": ^14.0.0 "@testing-library/user-event": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 git-url-parse: ^13.0.0 luxon: ^3.0.0 msw: ^1.0.0 @@ -7309,7 +7177,7 @@ __metadata: "@testing-library/react": ^14.0.0 "@testing-library/user-event": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 msw: ^1.0.0 react-use: ^17.2.4 peerDependencies: @@ -7361,6 +7229,7 @@ __metadata: dependencies: "@backstage/cli": "workspace:^" "@backstage/core-app-api": "workspace:^" + "@backstage/core-compat-api": "workspace:^" "@backstage/core-components": "workspace:^" "@backstage/core-plugin-api": "workspace:^" "@backstage/dev-utils": "workspace:^" @@ -7376,7 +7245,7 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/codemirror": ^5.0.0 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 graphiql: ^3.0.6 graphql: ^16.0.0 graphql-ws: ^5.4.1 @@ -7389,31 +7258,6 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-graphql-backend@workspace:^, @backstage/plugin-graphql-backend@workspace:plugins/graphql-backend": - version: 0.0.0-use.local - resolution: "@backstage/plugin-graphql-backend@workspace:plugins/graphql-backend" - dependencies: - "@apollo/server": ^4.0.0 - "@backstage/backend-common": "workspace:^" - "@backstage/cli": "workspace:^" - "@backstage/config": "workspace:^" - "@backstage/plugin-catalog-graphql": "workspace:^" - "@graphql-tools/schema": ^9.0.0 - "@types/express": ^4.17.6 - "@types/supertest": ^2.0.8 - express: ^4.17.1 - express-promise-router: ^4.1.0 - graphql: ^16.0.0 - graphql-modules: ^2.0.0 - helmet: ^6.0.0 - msw: ^1.0.0 - reflect-metadata: ^0.1.13 - supertest: ^6.1.3 - winston: ^3.2.1 - yn: ^4.0.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" @@ -7444,20 +7288,20 @@ __metadata: linkType: soft "@backstage/plugin-home-react@npm:^0.1.4": - version: 0.1.4 - resolution: "@backstage/plugin-home-react@npm:0.1.4" + version: 0.1.5 + resolution: "@backstage/plugin-home-react@npm:0.1.5" dependencies: - "@backstage/core-components": ^0.13.6 - "@backstage/core-plugin-api": ^1.7.0 + "@backstage/core-components": ^0.13.8 + "@backstage/core-plugin-api": ^1.8.0 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@rjsf/utils": 5.13.0 + "@rjsf/utils": 5.13.6 "@types/react": ^16.13.1 || ^17.0.0 peerDependencies: - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 + 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: 52c528a8af4678308bf4341d85aa5360cfe8d1d90f024c59ca0d9bf9343c6964f025eef9c53c50560e65816b7dce052c27463d41b9609a2e125fa1ac637ac463 + checksum: 9ea922ec0ade7f12721552266a5e0513778a42594039a05819ca6ab7c253b84bd281c302c0a56e5c49f895dbba8ac404ab8521b8493b5908fe8af01cbbda31d6 languageName: node linkType: hard @@ -7473,14 +7317,14 @@ __metadata: "@backstage/test-utils": "workspace:^" "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 - "@rjsf/utils": 5.13.0 + "@rjsf/utils": 5.14.2 "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^6.0.0 "@testing-library/react": ^14.0.0 "@testing-library/user-event": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 "@types/react-grid-layout": ^1.3.2 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 msw: ^1.0.0 peerDependencies: react: ^16.13.1 || ^17.0.0 || ^18.0.0 @@ -7493,6 +7337,7 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-home@workspace:plugins/home" dependencies: + "@backstage/catalog-client": "workspace:^" "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/config": "workspace:^" @@ -7509,10 +7354,10 @@ __metadata: "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 - "@rjsf/core": 5.13.0 - "@rjsf/material-ui": 5.13.0 - "@rjsf/utils": 5.13.0 - "@rjsf/validator-ajv8": 5.13.0 + "@rjsf/core": 5.14.2 + "@rjsf/material-ui": 5.14.2 + "@rjsf/utils": 5.14.2 + "@rjsf/validator-ajv8": 5.14.2 "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^6.0.0 "@testing-library/react": ^14.0.0 @@ -7585,7 +7430,7 @@ __metadata: "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-permission-node": "workspace:^" "@types/express": ^4.17.6 - "@types/jenkins": ^0.23.1 + "@types/jenkins": ^1.0.0 "@types/supertest": ^2.0.8 express: ^4.17.1 express-promise-router: ^4.1.0 @@ -7632,7 +7477,7 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 "@types/testing-library__jest-dom": ^5.9.1 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 luxon: ^3.0.0 msw: ^1.0.0 react-use: ^17.2.4 @@ -7702,10 +7547,10 @@ __metadata: version: 0.0.0-use.local resolution: "@backstage/plugin-kubernetes-backend@workspace:plugins/kubernetes-backend" dependencies: - "@aws-crypto/sha256-js": ^3.0.0 + "@aws-crypto/sha256-js": ^5.0.0 "@aws-sdk/credential-providers": ^3.350.0 "@aws-sdk/signature-v4": ^3.347.0 - "@azure/identity": ^3.2.1 + "@azure/identity": ^4.0.0 "@backstage/backend-app-api": "workspace:^" "@backstage/backend-common": "workspace:^" "@backstage/backend-plugin-api": "workspace:^" @@ -7723,9 +7568,9 @@ __metadata: "@backstage/plugin-permission-common": "workspace:^" "@backstage/plugin-permission-node": "workspace:^" "@backstage/types": "workspace:^" - "@google-cloud/container": ^4.0.0 + "@google-cloud/container": ^5.0.0 "@jest-mock/express": ^2.0.1 - "@kubernetes/client-node": 0.19.0 + "@kubernetes/client-node": 0.20.0 "@types/aws4": ^1.5.1 "@types/express": ^4.17.6 "@types/http-proxy-middleware": ^0.19.3 @@ -7799,12 +7644,11 @@ __metadata: "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/core-app-api": "workspace:^" - "@backstage/core-plugin-api": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/plugin-permission-common": "workspace:^" "@backstage/test-utils": "workspace:^" "@backstage/types": "workspace:^" - "@kubernetes/client-node": 0.19.0 + "@kubernetes/client-node": 0.20.0 kubernetes-models: ^4.3.1 lodash: ^4.17.21 luxon: ^3.0.0 @@ -7838,7 +7682,7 @@ __metadata: "@backstage/types": "workspace:^" "@kubernetes-models/apimachinery": ^1.1.0 "@kubernetes-models/base": ^4.0.1 - "@kubernetes/client-node": ^0.19.0 + "@kubernetes/client-node": ^0.20.0 "@material-ui/core": ^4.9.13 "@material-ui/icons": ^4.11.3 "@material-ui/lab": ^4.0.0-alpha.61 @@ -7881,7 +7725,7 @@ __metadata: "@backstage/types": "workspace:^" "@kubernetes-models/apimachinery": ^1.1.0 "@kubernetes-models/base": ^4.0.1 - "@kubernetes/client-node": 0.19.0 + "@kubernetes/client-node": 0.20.0 "@material-ui/core": ^4.12.2 "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 @@ -8125,7 +7969,7 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/parse-link-header": ^2.0.1 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 msw: ^1.2.3 parse-link-header: ^2.0.0 react-use: ^17.2.4 @@ -8178,7 +8022,7 @@ __metadata: "@testing-library/react": ^14.0.0 "@testing-library/user-event": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 luxon: ^3.3.0 msw: ^1.0.0 react-use: ^17.2.4 @@ -8241,7 +8085,7 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 axios: ^1.4.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 date-fns: ^2.30.0 lodash: ^4.17.21 msw: ^1.0.0 @@ -8451,7 +8295,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-permission-common@^0.7.9, @backstage/plugin-permission-common@workspace:^, @backstage/plugin-permission-common@workspace:plugins/permission-common": +"@backstage/plugin-permission-common@^0.7.10, @backstage/plugin-permission-common@workspace:^, @backstage/plugin-permission-common@workspace:plugins/permission-common": version: 0.0.0-use.local resolution: "@backstage/plugin-permission-common@workspace:plugins/permission-common" dependencies: @@ -8459,7 +8303,7 @@ __metadata: "@backstage/config": "workspace:^" "@backstage/errors": "workspace:^" "@backstage/types": "workspace:^" - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 msw: ^1.0.0 uuid: ^8.0.0 zod: ^3.21.4 @@ -8489,22 +8333,22 @@ __metadata: languageName: unknown linkType: soft -"@backstage/plugin-permission-react@npm:^0.4.16": - version: 0.4.16 - resolution: "@backstage/plugin-permission-react@npm:0.4.16" +"@backstage/plugin-permission-react@npm:^0.4.17": + version: 0.4.17 + resolution: "@backstage/plugin-permission-react@npm:0.4.17" dependencies: "@backstage/config": ^1.1.1 - "@backstage/core-plugin-api": ^1.7.0 - "@backstage/plugin-permission-common": ^0.7.9 + "@backstage/core-plugin-api": ^1.8.0 + "@backstage/plugin-permission-common": ^0.7.10 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 react-use: ^17.2.4 swr: ^2.0.0 peerDependencies: - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 + react: ^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: dbf85118d34b29c19424f71cfb3918b63bc0243dd479df32227deec992686c006101395aef5a791887658d6d6543e0dbd9df4c5579fcbfd93284c79876924570 + checksum: 6baa30e83b68d27fc06411453100cc5fe98895021fe5a3db88c677e68430a8561744bc4581205e20f8326394e749b5e2ff19bb8037ecc86af6cae75124498111 languageName: node linkType: hard @@ -8520,7 +8364,7 @@ __metadata: "@testing-library/jest-dom": ^6.0.0 "@testing-library/react": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 react-use: ^17.2.4 swr: ^2.0.0 peerDependencies: @@ -8717,7 +8561,7 @@ __metadata: "@testing-library/react": ^14.0.0 "@testing-library/user-event": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 lodash: ^4.17.21 msw: ^1.0.0 react-sparklines: ^1.7.0 @@ -8966,10 +8810,10 @@ __metadata: "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 "@react-hookz/web": ^20.0.0 - "@rjsf/core": 5.13.0 - "@rjsf/material-ui": 5.13.0 - "@rjsf/utils": 5.13.0 - "@rjsf/validator-ajv8": 5.13.0 + "@rjsf/core": 5.14.2 + "@rjsf/material-ui": 5.14.2 + "@rjsf/utils": 5.14.2 + "@rjsf/validator-ajv8": 5.14.2 "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^6.0.0 "@testing-library/react": ^14.0.0 @@ -9029,10 +8873,10 @@ __metadata: "@material-ui/icons": ^4.9.1 "@material-ui/lab": 4.0.0-alpha.61 "@react-hookz/web": ^20.0.0 - "@rjsf/core": 5.13.0 - "@rjsf/material-ui": 5.13.0 - "@rjsf/utils": 5.13.0 - "@rjsf/validator-ajv8": 5.13.0 + "@rjsf/core": 5.14.2 + "@rjsf/material-ui": 5.14.2 + "@rjsf/utils": 5.14.2 + "@rjsf/validator-ajv8": 5.14.2 "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^6.0.0 "@testing-library/react": ^14.0.0 @@ -9265,6 +9109,7 @@ __metadata: "@backstage/core-plugin-api": "workspace:^" "@backstage/frontend-app-api": "workspace:^" "@backstage/frontend-plugin-api": "workspace:^" + "@backstage/frontend-test-utils": "workspace:^" "@backstage/plugin-search-common": "workspace:^" "@backstage/test-utils": "workspace:^" "@backstage/theme": "workspace:^" @@ -9296,6 +9141,7 @@ __metadata: "@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/dev-utils": "workspace:^" @@ -9351,7 +9197,7 @@ __metadata: "@testing-library/user-event": ^14.0.0 "@types/luxon": ^3.0.0 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 luxon: ^3.0.0 msw: ^1.0.0 react-sparklines: ^1.7.0 @@ -9456,7 +9302,7 @@ __metadata: "@testing-library/react": ^14.0.0 "@testing-library/user-event": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 luxon: ^3.0.0 msw: ^1.0.0 rc-progress: 3.5.1 @@ -9542,7 +9388,7 @@ __metadata: "@testing-library/react": ^14.0.0 "@testing-library/user-event": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 lodash: ^4.17.21 msw: ^1.0.0 qs: ^6.9.4 @@ -9700,6 +9546,7 @@ __metadata: dependencies: "@backstage/cli": "workspace:^" "@backstage/core-app-api": "workspace:^" + "@backstage/core-compat-api": "workspace:^" "@backstage/core-components": "workspace:^" "@backstage/core-plugin-api": "workspace:^" "@backstage/dev-utils": "workspace:^" @@ -9717,7 +9564,7 @@ __metadata: "@types/d3-force": ^3.0.0 "@types/react": ^16.13.1 || ^17.0.0 color: ^4.0.1 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 d3-force: ^3.0.0 msw: ^1.0.0 react-use: ^17.2.4 @@ -9739,6 +9586,7 @@ __metadata: "@backstage/dev-utils": "workspace:^" "@backstage/integration-react": "workspace:^" "@backstage/plugin-catalog": "workspace:^" + "@backstage/plugin-catalog-react": "workspace:^" "@backstage/plugin-search-react": "workspace:^" "@backstage/plugin-techdocs": "workspace:^" "@backstage/plugin-techdocs-react": "workspace:^" @@ -9749,13 +9597,13 @@ __metadata: "@material-ui/lab": 4.0.0-alpha.61 "@testing-library/dom": ^9.0.0 "@testing-library/jest-dom": ^6.0.0 - "@testing-library/react": ^14.0.0 "@testing-library/user-event": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 msw: ^1.0.0 react-use: ^17.2.4 testing-library__dom: ^7.29.4-beta.1 peerDependencies: + "@testing-library/react": ^12.1.3 || ^13.0.0 || ^14.0.0 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 @@ -9840,7 +9688,7 @@ __metadata: "@aws-sdk/credential-providers": ^3.350.0 "@aws-sdk/lib-storage": ^3.350.0 "@aws-sdk/types": ^3.347.0 - "@azure/identity": ^3.2.1 + "@azure/identity": ^4.0.0 "@azure/storage-blob": ^12.5.0 "@backstage/backend-common": "workspace:^" "@backstage/backend-plugin-api": "workspace:^" @@ -9852,7 +9700,7 @@ __metadata: "@backstage/integration": "workspace:^" "@backstage/integration-aws-node": "workspace:^" "@backstage/plugin-search-common": "workspace:^" - "@google-cloud/storage": ^6.0.0 + "@google-cloud/storage": ^7.0.0 "@smithy/node-http-handler": ^2.1.7 "@trendyol-js/openstack-swift-sdk": ^0.0.6 "@types/express": ^4.17.6 @@ -9861,7 +9709,7 @@ __metadata: "@types/mime-types": ^2.1.0 "@types/recursive-readdir": ^2.2.0 "@types/supertest": ^2.0.8 - aws-sdk-client-mock: ^2.0.0 + aws-sdk-client-mock: ^3.0.0 express: ^4.17.1 fs-extra: 10.1.0 git-url-parse: ^13.0.0 @@ -9913,6 +9761,7 @@ __metadata: "@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/dev-utils": "workspace:^" @@ -9939,7 +9788,7 @@ __metadata: "@types/event-source-polyfill": ^1.0.0 "@types/react": ^16.13.1 || ^17.0.0 canvas: ^2.10.2 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 dompurify: ^2.2.9 event-source-polyfill: 1.0.25 git-url-parse: ^13.0.0 @@ -10042,6 +9891,7 @@ __metadata: dependencies: "@backstage/cli": "workspace:^" "@backstage/core-app-api": "workspace:^" + "@backstage/core-compat-api": "workspace:^" "@backstage/core-components": "workspace:^" "@backstage/core-plugin-api": "workspace:^" "@backstage/dev-utils": "workspace:^" @@ -10060,7 +9910,7 @@ __metadata: "@testing-library/react": ^14.0.0 "@testing-library/user-event": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 msw: ^1.0.0 react-use: ^17.2.4 zen-observable: ^0.10.0 @@ -10179,7 +10029,7 @@ __metadata: dependencies: "@backstage/cli": "workspace:^" "@backstage/test-utils": "workspace:^" - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 msw: ^1.0.0 languageName: unknown linkType: soft @@ -10255,7 +10105,7 @@ __metadata: "@material-ui/icons": ^4.9.1 "@testing-library/jest-dom": ^6.0.0 "@types/react": ^16.13.1 || ^17.0.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 i18next: ^22.4.15 msw: ^1.0.0 zen-observable: ^0.10.0 @@ -10279,9 +10129,9 @@ __metadata: languageName: node linkType: hard -"@backstage/theme@npm:^0.4.3": - version: 0.4.3 - resolution: "@backstage/theme@npm:0.4.3" +"@backstage/theme@npm:^0.4.3, @backstage/theme@npm:^0.4.4": + version: 0.4.4 + resolution: "@backstage/theme@npm:0.4.4" dependencies: "@emotion/react": ^11.10.5 "@emotion/styled": ^11.10.5 @@ -10289,9 +10139,9 @@ __metadata: peerDependencies: "@material-ui/core": ^4.12.2 "@types/react": ^16.13.1 || ^17.0.0 - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 - checksum: 8ad491f837803959c22a23e2895d0409bfd8ba58c325c6bcf2a87fbedc4d6076568e7ed2f3a715296e3f6f03f8579df6947831fe983579c777d607826a90b142 + react: ^16.13.1 || ^17.0.0 || ^18.0.0 + react-dom: ^16.13.1 || ^17.0.0 || ^18.0.0 + checksum: 562ce0f0fd07202b44971b55bba9c39cd13c91a65873034d2e68fb5833c0d9882c2fd967d6c779a8563618ce035ec159823c865b0163911b7004f1bfce3ce4a1 languageName: node linkType: hard @@ -10303,6 +10153,9 @@ __metadata: "@emotion/react": ^11.10.5 "@emotion/styled": ^11.10.5 "@mui/material": ^5.12.2 + "@mui/styles": ^5.14.18 + "@testing-library/jest-dom": ^6.0.0 + "@testing-library/react": ^14.0.0 "@types/react": ^16.13.1 || ^17.0.0 peerDependencies: "@material-ui/core": ^4.12.2 @@ -10323,20 +10176,7 @@ __metadata: languageName: unknown linkType: soft -"@backstage/version-bridge@npm:^1.0.3, @backstage/version-bridge@npm:^1.0.6": - version: 1.0.6 - resolution: "@backstage/version-bridge@npm:1.0.6" - dependencies: - "@types/react": ^16.13.1 || ^17.0.0 - peerDependencies: - react: ^16.13.1 || ^17.0.0 - react-dom: ^16.13.1 || ^17.0.0 - react-router-dom: 6.0.0-beta.0 || ^6.3.0 - checksum: 2923a7723b3e9b6f2a6106ad13e6d7d648f727fa4751482f54bdd181ef7e8d0018b009edcbbfa297c938c3b936b6caba8df814652f5e78a38e8a83a81babce59 - languageName: node - linkType: hard - -"@backstage/version-bridge@workspace:^, @backstage/version-bridge@workspace:packages/version-bridge": +"@backstage/version-bridge@^1.0.3, @backstage/version-bridge@^1.0.7, @backstage/version-bridge@workspace:^, @backstage/version-bridge@workspace:packages/version-bridge": version: 0.0.0-use.local resolution: "@backstage/version-bridge@workspace:packages/version-bridge" dependencies: @@ -10372,6 +10212,33 @@ __metadata: languageName: node linkType: hard +"@bundled-es-modules/cookie@npm:^2.0.0": + version: 2.0.0 + resolution: "@bundled-es-modules/cookie@npm:2.0.0" + dependencies: + cookie: ^0.5.0 + checksum: 53114eabbedda20ba6c63f45dcea35c568616d22adf5d1882cef9761f65ae636bf47e0c66325572cc8e3a335e0257caf5f76ff1287990d9e9265be7bc9767a87 + languageName: node + linkType: hard + +"@bundled-es-modules/js-levenshtein@npm:^2.0.1": + version: 2.0.1 + resolution: "@bundled-es-modules/js-levenshtein@npm:2.0.1" + dependencies: + js-levenshtein: ^1.1.6 + checksum: 13d0cbd2b00e563e09a797559dcff8c7e208c1f71e1787535a3d248f7e3d33ef3f0809b9f498d41788ab5fd399882dcca79917d70d97921b7dde94a282c1b7d8 + languageName: node + linkType: hard + +"@bundled-es-modules/statuses@npm:^1.0.1": + version: 1.0.1 + resolution: "@bundled-es-modules/statuses@npm:1.0.1" + dependencies: + statuses: ^2.0.1 + checksum: bcaa7de192e73056950b5fd20e75140d8d09074b1adc4437924b2051bb02b4dbf568c96e67d53b220fb7d735c3446e2ba746599cb1793ab2d23dd2ef230a8622 + languageName: node + linkType: hard + "@changesets/apply-release-plan@npm:^6.1.4": version: 6.1.4 resolution: "@changesets/apply-release-plan@npm:6.1.4" @@ -10416,17 +10283,6 @@ __metadata: languageName: node linkType: hard -"@changesets/changelog-github@npm:^0.4.8": - version: 0.4.8 - resolution: "@changesets/changelog-github@npm:0.4.8" - dependencies: - "@changesets/get-github-info": ^0.5.2 - "@changesets/types": ^5.2.1 - dotenv: ^8.1.0 - checksum: 8a357cc08757e0eeca267ee05141f68bef936582abef8b78a5d30d99f5a86e41b7d3debba70992b73b2f57b0fc6201ec1cc3c65116930167ee3197b427b865c5 - languageName: node - linkType: hard - "@changesets/cli@npm:^2.14.0": version: 2.26.2 resolution: "@changesets/cli@npm:2.26.2" @@ -10507,16 +10363,6 @@ __metadata: languageName: node linkType: hard -"@changesets/get-github-info@npm:^0.5.2": - version: 0.5.2 - resolution: "@changesets/get-github-info@npm:0.5.2" - dependencies: - dataloader: ^1.4.0 - node-fetch: ^2.5.0 - checksum: 067e07eeaecdbedbd1c715513c4aa6206a941bd1d3af292d067792808c6fa6644caad2b35fba614a44892559c031c234df8028f8d2abd4cb2682d48080ef5df3 - languageName: node - linkType: hard - "@changesets/get-release-plan@npm:^3.0.17": version: 3.0.17 resolution: "@changesets/get-release-plan@npm:3.0.17" @@ -11028,9 +10874,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.19.5": - version: 0.19.5 - resolution: "@esbuild/android-arm64@npm:0.19.5" +"@esbuild/android-arm64@npm:0.19.7": + version: 0.19.7 + resolution: "@esbuild/android-arm64@npm:0.19.7" conditions: os=android & cpu=arm64 languageName: node linkType: hard @@ -11049,9 +10895,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm@npm:0.19.5": - version: 0.19.5 - resolution: "@esbuild/android-arm@npm:0.19.5" +"@esbuild/android-arm@npm:0.19.7": + version: 0.19.7 + resolution: "@esbuild/android-arm@npm:0.19.7" conditions: os=android & cpu=arm languageName: node linkType: hard @@ -11070,9 +10916,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-x64@npm:0.19.5": - version: 0.19.5 - resolution: "@esbuild/android-x64@npm:0.19.5" +"@esbuild/android-x64@npm:0.19.7": + version: 0.19.7 + resolution: "@esbuild/android-x64@npm:0.19.7" conditions: os=android & cpu=x64 languageName: node linkType: hard @@ -11091,9 +10937,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.19.5": - version: 0.19.5 - resolution: "@esbuild/darwin-arm64@npm:0.19.5" +"@esbuild/darwin-arm64@npm:0.19.7": + version: 0.19.7 + resolution: "@esbuild/darwin-arm64@npm:0.19.7" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -11112,9 +10958,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.19.5": - version: 0.19.5 - resolution: "@esbuild/darwin-x64@npm:0.19.5" +"@esbuild/darwin-x64@npm:0.19.7": + version: 0.19.7 + resolution: "@esbuild/darwin-x64@npm:0.19.7" conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -11133,9 +10979,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.19.5": - version: 0.19.5 - resolution: "@esbuild/freebsd-arm64@npm:0.19.5" +"@esbuild/freebsd-arm64@npm:0.19.7": + version: 0.19.7 + resolution: "@esbuild/freebsd-arm64@npm:0.19.7" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard @@ -11154,9 +11000,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.19.5": - version: 0.19.5 - resolution: "@esbuild/freebsd-x64@npm:0.19.5" +"@esbuild/freebsd-x64@npm:0.19.7": + version: 0.19.7 + resolution: "@esbuild/freebsd-x64@npm:0.19.7" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard @@ -11175,9 +11021,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.19.5": - version: 0.19.5 - resolution: "@esbuild/linux-arm64@npm:0.19.5" +"@esbuild/linux-arm64@npm:0.19.7": + version: 0.19.7 + resolution: "@esbuild/linux-arm64@npm:0.19.7" conditions: os=linux & cpu=arm64 languageName: node linkType: hard @@ -11196,9 +11042,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.19.5": - version: 0.19.5 - resolution: "@esbuild/linux-arm@npm:0.19.5" +"@esbuild/linux-arm@npm:0.19.7": + version: 0.19.7 + resolution: "@esbuild/linux-arm@npm:0.19.7" conditions: os=linux & cpu=arm languageName: node linkType: hard @@ -11217,9 +11063,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.19.5": - version: 0.19.5 - resolution: "@esbuild/linux-ia32@npm:0.19.5" +"@esbuild/linux-ia32@npm:0.19.7": + version: 0.19.7 + resolution: "@esbuild/linux-ia32@npm:0.19.7" conditions: os=linux & cpu=ia32 languageName: node linkType: hard @@ -11238,9 +11084,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.19.5": - version: 0.19.5 - resolution: "@esbuild/linux-loong64@npm:0.19.5" +"@esbuild/linux-loong64@npm:0.19.7": + version: 0.19.7 + resolution: "@esbuild/linux-loong64@npm:0.19.7" conditions: os=linux & cpu=loong64 languageName: node linkType: hard @@ -11259,9 +11105,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.19.5": - version: 0.19.5 - resolution: "@esbuild/linux-mips64el@npm:0.19.5" +"@esbuild/linux-mips64el@npm:0.19.7": + version: 0.19.7 + resolution: "@esbuild/linux-mips64el@npm:0.19.7" conditions: os=linux & cpu=mips64el languageName: node linkType: hard @@ -11280,9 +11126,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.19.5": - version: 0.19.5 - resolution: "@esbuild/linux-ppc64@npm:0.19.5" +"@esbuild/linux-ppc64@npm:0.19.7": + version: 0.19.7 + resolution: "@esbuild/linux-ppc64@npm:0.19.7" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard @@ -11301,9 +11147,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.19.5": - version: 0.19.5 - resolution: "@esbuild/linux-riscv64@npm:0.19.5" +"@esbuild/linux-riscv64@npm:0.19.7": + version: 0.19.7 + resolution: "@esbuild/linux-riscv64@npm:0.19.7" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard @@ -11322,9 +11168,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.19.5": - version: 0.19.5 - resolution: "@esbuild/linux-s390x@npm:0.19.5" +"@esbuild/linux-s390x@npm:0.19.7": + version: 0.19.7 + resolution: "@esbuild/linux-s390x@npm:0.19.7" conditions: os=linux & cpu=s390x languageName: node linkType: hard @@ -11343,9 +11189,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.19.5": - version: 0.19.5 - resolution: "@esbuild/linux-x64@npm:0.19.5" +"@esbuild/linux-x64@npm:0.19.7": + version: 0.19.7 + resolution: "@esbuild/linux-x64@npm:0.19.7" conditions: os=linux & cpu=x64 languageName: node linkType: hard @@ -11364,9 +11210,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.19.5": - version: 0.19.5 - resolution: "@esbuild/netbsd-x64@npm:0.19.5" +"@esbuild/netbsd-x64@npm:0.19.7": + version: 0.19.7 + resolution: "@esbuild/netbsd-x64@npm:0.19.7" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard @@ -11385,9 +11231,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.19.5": - version: 0.19.5 - resolution: "@esbuild/openbsd-x64@npm:0.19.5" +"@esbuild/openbsd-x64@npm:0.19.7": + version: 0.19.7 + resolution: "@esbuild/openbsd-x64@npm:0.19.7" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard @@ -11406,9 +11252,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.19.5": - version: 0.19.5 - resolution: "@esbuild/sunos-x64@npm:0.19.5" +"@esbuild/sunos-x64@npm:0.19.7": + version: 0.19.7 + resolution: "@esbuild/sunos-x64@npm:0.19.7" conditions: os=sunos & cpu=x64 languageName: node linkType: hard @@ -11427,9 +11273,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.19.5": - version: 0.19.5 - resolution: "@esbuild/win32-arm64@npm:0.19.5" +"@esbuild/win32-arm64@npm:0.19.7": + version: 0.19.7 + resolution: "@esbuild/win32-arm64@npm:0.19.7" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -11448,9 +11294,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.19.5": - version: 0.19.5 - resolution: "@esbuild/win32-ia32@npm:0.19.5" +"@esbuild/win32-ia32@npm:0.19.7": + version: 0.19.7 + resolution: "@esbuild/win32-ia32@npm:0.19.7" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard @@ -11469,9 +11315,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.19.5": - version: 0.19.5 - resolution: "@esbuild/win32-x64@npm:0.19.5" +"@esbuild/win32-x64@npm:0.19.7": + version: 0.19.7 + resolution: "@esbuild/win32-x64@npm:0.19.7" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -11511,10 +11357,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:8.53.0": - version: 8.53.0 - resolution: "@eslint/js@npm:8.53.0" - checksum: e0d5cfb0000aaee237c8e6d6d6e366faa60b1ef7f928ce17778373aa44d3b886368f6d5e1f97f913f0f16801aad016db8b8df78418c9d18825c15590328028af +"@eslint/js@npm:8.54.0": + version: 8.54.0 + resolution: "@eslint/js@npm:8.54.0" + checksum: 6d88a6f711ef0133566b5340e3178a178fbb297585766460f195d0a9db85688f1e5cf8559fd5748aeb3131e2096c66595b323d8edab22df015acda68f1ebde92 languageName: node linkType: hard @@ -11601,15 +11447,15 @@ __metadata: languageName: node linkType: hard -"@floating-ui/react-dom@npm:^2.0.0, @floating-ui/react-dom@npm:^2.0.2": - version: 2.0.2 - resolution: "@floating-ui/react-dom@npm:2.0.2" +"@floating-ui/react-dom@npm:^2.0.0, @floating-ui/react-dom@npm:^2.0.4": + version: 2.0.4 + resolution: "@floating-ui/react-dom@npm:2.0.4" dependencies: "@floating-ui/dom": ^1.5.1 peerDependencies: react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 4797e1f7a19c1e531ed0d578ccdcbe58970743e5a480ba30424857fc953063f36d481f8c5d69248a8f1d521b739e94bf5e1ffb35506400dea3d914f166ed2f7f + checksum: 91b2369e25f84888486e48c1656117468248906034ed482d411bb9ed1061b908dd32435b4ca3d0cd0ca6083291510a98ce74d76c671d5cc25b0c41e5fa824bae languageName: node linkType: hard @@ -11620,15 +11466,6 @@ __metadata: languageName: node linkType: hard -"@fmvilas/pseudo-yaml-ast@npm:^0.3.1": - version: 0.3.1 - resolution: "@fmvilas/pseudo-yaml-ast@npm:0.3.1" - dependencies: - yaml-ast-parser: 0.0.43 - checksum: 94b825dcfe4295d3b3b275cccf756f4012f4c5260d2f8469f9004073635f9aefec204bb0c0dfa9f066a5f6998d32226cace293a6a4e78c2b3a1ba05457608647 - languageName: node - linkType: hard - "@gar/promisify@npm:^1.0.1, @gar/promisify@npm:^1.1.3": version: 1.1.3 resolution: "@gar/promisify@npm:1.1.3" @@ -11686,74 +11523,73 @@ __metadata: languageName: node linkType: hard -"@google-cloud/container@npm:^4.0.0, @google-cloud/container@npm:^4.15.0": - version: 4.16.0 - resolution: "@google-cloud/container@npm:4.16.0" +"@google-cloud/container@npm:^5.0.0": + version: 5.4.0 + resolution: "@google-cloud/container@npm:5.4.0" dependencies: - google-gax: ^3.5.8 - checksum: 324d31a45e21ce8e4734a861d5abc5a3ed8f5d0a4825db37ea4a8d6ae6658b395f5e70a29b02fe8964cbf9bd6a00387652b55a670113b941394a9dc54d34ec52 + google-gax: ^4.0.3 + checksum: ab6a6f0d6e6dc7feb30c848f40109ada5464c2594d9bbb467dbd522e097f0dc1108d366becfae268831d0ca203fa06dcedf28014d4d9161838bb2bb550162465 languageName: node linkType: hard -"@google-cloud/firestore@npm:^6.0.0": - version: 6.8.0 - resolution: "@google-cloud/firestore@npm:6.8.0" +"@google-cloud/firestore@npm:^7.0.0": + version: 7.1.0 + resolution: "@google-cloud/firestore@npm:7.1.0" dependencies: fast-deep-equal: ^3.1.1 functional-red-black-tree: ^1.0.1 - google-gax: ^3.5.7 + google-gax: ^4.0.4 protobufjs: ^7.2.5 - checksum: e8e1fd7cc6fd688e771c3d2f62c2f33d23357e11ee03f6d2f2aeb0ea29378f8e62f2511936011b515bbeedf304b5e831e4f4a46b8905dbc421fe2fa521d2e43f + checksum: 271deeb1fbf389237f34e0a6fa90336ddd3beccc8ff4b6519c22ee1edd2da4c74aa7ee3b14a669fb16dc67ea21bf3c3baf5d1ffb01218c121fd9ac71bb4e873b languageName: node linkType: hard -"@google-cloud/paginator@npm:^3.0.7": - version: 3.0.7 - resolution: "@google-cloud/paginator@npm:3.0.7" +"@google-cloud/paginator@npm:^5.0.0": + version: 5.0.0 + resolution: "@google-cloud/paginator@npm:5.0.0" dependencies: arrify: ^2.0.0 extend: ^3.0.2 - checksum: bdecce8a894a0c7f47f13d0e42b2fa142098e1dd34ce571b7216ad624057214baf9066ecf091501b3770da9d7be20b983eda30185c8c6596192cb748f8a0090c + checksum: 7b8236ce610bef5c5de62a0ec267b0e4368480397621a692d213c56ffe66b20a8e6d4de0fe0606fd165672c873467ea313493f035a582e674df72c29dd20b7ef languageName: node linkType: hard -"@google-cloud/projectify@npm:^3.0.0": - version: 3.0.0 - resolution: "@google-cloud/projectify@npm:3.0.0" - checksum: 4fa7ad689422b0b9c152fb00260e54e39d81678f9c51518bdb34bc57ee00604524fcdd5837fa97eb2f8ff4811afee3f345b1b0993bc4a2fa1b803bdd6554839a +"@google-cloud/projectify@npm:^4.0.0": + version: 4.0.0 + resolution: "@google-cloud/projectify@npm:4.0.0" + checksum: 973d28414ae200433333a3c315aebb881ced42ea4afe6f3f8520d2fecded75e76c913f5189fea8fb29ce6ca36117c4f44001b3c503eecdd3ac7f02597a98354a languageName: node linkType: hard -"@google-cloud/promisify@npm:^3.0.0": - version: 3.0.0 - resolution: "@google-cloud/promisify@npm:3.0.0" - checksum: 5339e36bd5bc7957ae72b959e21c5d50fe028ad8eae9affb6e8e172aab715f3bf6a7b3c01720d6b4b67ea080d91dd30ac00f0dc88d455620c8bb10df263385a2 +"@google-cloud/promisify@npm:^4.0.0": + version: 4.0.0 + resolution: "@google-cloud/promisify@npm:4.0.0" + checksum: edd189398c5ed5b7b64a373177d77c87d076a248c31b8ae878bb91e2411d89860108bcb948c349f32628973a823bd131beb53ec008fd613a8cb466ef1d89de49 languageName: node linkType: hard -"@google-cloud/storage@npm:^6.0.0": - version: 6.12.0 - resolution: "@google-cloud/storage@npm:6.12.0" +"@google-cloud/storage@npm:^7.0.0": + version: 7.6.0 + resolution: "@google-cloud/storage@npm:7.6.0" dependencies: - "@google-cloud/paginator": ^3.0.7 - "@google-cloud/projectify": ^3.0.0 - "@google-cloud/promisify": ^3.0.0 + "@google-cloud/paginator": ^5.0.0 + "@google-cloud/projectify": ^4.0.0 + "@google-cloud/promisify": ^4.0.0 abort-controller: ^3.0.0 async-retry: ^1.3.3 compressible: ^2.0.12 duplexify: ^4.0.0 ent: ^2.2.0 - extend: ^3.0.2 - fast-xml-parser: ^4.2.2 - gaxios: ^5.0.0 - google-auth-library: ^8.0.1 + fast-xml-parser: ^4.3.0 + gaxios: ^6.0.2 + google-auth-library: ^9.0.0 mime: ^3.0.0 mime-types: ^2.0.8 p-limit: ^3.0.1 - retry-request: ^5.0.0 - teeny-request: ^8.0.0 + retry-request: ^7.0.0 + teeny-request: ^9.0.0 uuid: ^8.0.0 - checksum: cfe44e3f4d1bacd8eeefa7885d261f421c4ff84e82abe50200b5b77e28322baf9cb67497872b9868b25b43b14197b1a155d5eb7b70afb39d3476fa4bdead3338 + checksum: 0ab71792ddafef3ce3634e2428fe3508572611caa436c4e6315f5f8657f48fa5714f0410383f8b006b469d7e71b7ef2dd2c0d68323753bcd0b381b06bdd3e1f4 languageName: node linkType: hard @@ -11800,197 +11636,9 @@ __metadata: languageName: node linkType: hard -"@graphql-codegen/cli@npm:^3.0.0": - version: 3.3.1 - resolution: "@graphql-codegen/cli@npm:3.3.1" - dependencies: - "@babel/generator": ^7.18.13 - "@babel/template": ^7.18.10 - "@babel/types": ^7.18.13 - "@graphql-codegen/core": ^3.1.0 - "@graphql-codegen/plugin-helpers": ^4.2.0 - "@graphql-tools/apollo-engine-loader": ^7.3.6 - "@graphql-tools/code-file-loader": ^7.3.17 - "@graphql-tools/git-loader": ^7.2.13 - "@graphql-tools/github-loader": ^7.3.20 - "@graphql-tools/graphql-file-loader": ^7.5.0 - "@graphql-tools/json-file-loader": ^7.4.1 - "@graphql-tools/load": ^7.8.0 - "@graphql-tools/prisma-loader": ^7.2.49 - "@graphql-tools/url-loader": ^7.13.2 - "@graphql-tools/utils": ^9.0.0 - "@parcel/watcher": ^2.1.0 - "@whatwg-node/fetch": ^0.8.0 - chalk: ^4.1.0 - cosmiconfig: ^7.0.0 - debounce: ^1.2.0 - detect-indent: ^6.0.0 - graphql-config: ^4.5.0 - inquirer: ^8.0.0 - is-glob: ^4.0.1 - jiti: ^1.17.1 - json-to-pretty-yaml: ^1.2.2 - listr2: ^4.0.5 - log-symbols: ^4.0.0 - micromatch: ^4.0.5 - shell-quote: ^1.7.3 - string-env-interpolation: ^1.0.1 - ts-log: ^2.2.3 - tslib: ^2.4.0 - yaml: ^1.10.0 - yargs: ^17.0.0 - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - bin: - gql-gen: cjs/bin.js - graphql-code-generator: cjs/bin.js - graphql-codegen: cjs/bin.js - graphql-codegen-esm: esm/bin.js - checksum: cc3c0b8f1fd8150591b35b549a04577e84ac9c30396ad100196f594f741dd34e69ec9b1335ec41c00afe4ecf1d7e3505c1859fa244bdef1d10753d2b441de962 - languageName: node - linkType: hard - -"@graphql-codegen/core@npm:^3.1.0": - version: 3.1.0 - resolution: "@graphql-codegen/core@npm:3.1.0" - dependencies: - "@graphql-codegen/plugin-helpers": ^4.1.0 - "@graphql-tools/schema": ^9.0.0 - "@graphql-tools/utils": ^9.1.1 - tslib: ~2.5.0 - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 7ace2b185242d00575b877b0bbb884c66915d246ba17a98c0ab82c2ee3a93ff2c9ae9d7d75a1d346de02ca8f12eb02801ffe2da4846da6e164b43176cd02dd8c - languageName: node - linkType: hard - -"@graphql-codegen/graphql-modules-preset@npm:^3.0.0": - version: 3.1.3 - resolution: "@graphql-codegen/graphql-modules-preset@npm:3.1.3" - dependencies: - "@graphql-codegen/plugin-helpers": ^4.2.0 - "@graphql-codegen/visitor-plugin-common": 3.1.1 - "@graphql-tools/utils": ^9.0.0 - change-case-all: 1.0.15 - parse-filepath: ^1.0.2 - tslib: ~2.5.0 - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 6e7303a850984c3c414a96784f499dab188d94cf3d13b6f44cb3c59de4b5f127080df610a316554511cfe669283ac745d8b2537afbe6d8113e58f4b30a27c28b - languageName: node - linkType: hard - -"@graphql-codegen/plugin-helpers@npm:^4.1.0, @graphql-codegen/plugin-helpers@npm:^4.2.0": - version: 4.2.0 - resolution: "@graphql-codegen/plugin-helpers@npm:4.2.0" - dependencies: - "@graphql-tools/utils": ^9.0.0 - change-case-all: 1.0.15 - common-tags: 1.8.2 - import-from: 4.0.0 - lodash: ~4.17.0 - tslib: ~2.5.0 - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 5d26adc132026916db061d23b06fc2c329f372f19ecf56e39bd2b30082bff642f2030cd6dc0bad8d2d3ab781c1e145384e040310a479b83d85ec804b2983646d - languageName: node - linkType: hard - -"@graphql-codegen/schema-ast@npm:^3.0.1": - version: 3.0.1 - resolution: "@graphql-codegen/schema-ast@npm:3.0.1" - dependencies: - "@graphql-codegen/plugin-helpers": ^4.1.0 - "@graphql-tools/utils": ^9.0.0 - tslib: ~2.5.0 - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 620aa67a4ae59ccb4609763b7347d05e2cec62bf1362be3e1e01fc00969cdbb858398542aa261128e5b5e3cb6808b77861bdcf82662e80326e72b418f25f465f - languageName: node - linkType: hard - -"@graphql-codegen/typescript-resolvers@npm:^3.0.0": - version: 3.2.1 - resolution: "@graphql-codegen/typescript-resolvers@npm:3.2.1" - dependencies: - "@graphql-codegen/plugin-helpers": ^4.2.0 - "@graphql-codegen/typescript": ^3.0.4 - "@graphql-codegen/visitor-plugin-common": 3.1.1 - "@graphql-tools/utils": ^9.0.0 - auto-bind: ~4.0.0 - tslib: ~2.5.0 - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: a84f8fc68fe778beabbf537f1312699a220a3a605d972403075d8307fb7fe9aec73ae2eb5b42dea9f3a7c91deabfe6e1271d607e1b2c84b346686107f39354fb - languageName: node - linkType: hard - -"@graphql-codegen/typescript@npm:^3.0.0, @graphql-codegen/typescript@npm:^3.0.4": - version: 3.0.4 - resolution: "@graphql-codegen/typescript@npm:3.0.4" - dependencies: - "@graphql-codegen/plugin-helpers": ^4.2.0 - "@graphql-codegen/schema-ast": ^3.0.1 - "@graphql-codegen/visitor-plugin-common": 3.1.1 - auto-bind: ~4.0.0 - tslib: ~2.5.0 - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: ede5311c5f620e16c3e98f51bdcedc7fd42f2c552a8ca5a946f757dc9709c384a12d32d088769d04041461d3318159ad0644f70056aea1877ee80a0bdc48de1f - languageName: node - linkType: hard - -"@graphql-codegen/visitor-plugin-common@npm:3.1.1": - version: 3.1.1 - resolution: "@graphql-codegen/visitor-plugin-common@npm:3.1.1" - dependencies: - "@graphql-codegen/plugin-helpers": ^4.2.0 - "@graphql-tools/optimize": ^1.3.0 - "@graphql-tools/relay-operation-optimizer": ^6.5.0 - "@graphql-tools/utils": ^9.0.0 - auto-bind: ~4.0.0 - change-case-all: 1.0.15 - dependency-graph: ^0.11.0 - graphql-tag: ^2.11.0 - parse-filepath: ^1.0.2 - tslib: ~2.5.0 - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 8dbef75ba0576a7de5e134b53778d64d818084df01e74554adc979f08db8446e9734889575c820449b6ef9febd6a9005fb89c7c9c101a9e398c195b5c3279353 - languageName: node - linkType: hard - -"@graphql-tools/apollo-engine-loader@npm:^7.3.6": - version: 7.3.6 - resolution: "@graphql-tools/apollo-engine-loader@npm:7.3.6" - dependencies: - "@ardatan/sync-fetch": 0.0.1 - "@graphql-tools/utils": 8.9.0 - "@whatwg-node/fetch": ^0.2.4 - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: e9711b32fd90d41c97ea8eb6bcc68e5a78374114fdd628ae9f1d4855cc163aecda78d22697c0f6ab556f816a01d27d684bd756ed1b777e7fa42b63200c240b90 - languageName: node - linkType: hard - -"@graphql-tools/batch-execute@npm:8.5.14": - version: 8.5.14 - resolution: "@graphql-tools/batch-execute@npm:8.5.14" - dependencies: - "@graphql-tools/utils": 9.1.3 - dataloader: 2.1.0 - tslib: ^2.4.0 - value-or-promise: 1.0.11 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: a48a11f471fe804852abb60f361eb8e398e5fd9d3b8bc61e3734983a5c8c284f3087b903b5277a2c7e365434947af534a881e67c147b0a3d47849617e124ac33 - languageName: node - linkType: hard - "@graphql-tools/batch-execute@npm:^9.0.1": - version: 9.0.1 - resolution: "@graphql-tools/batch-execute@npm:9.0.1" + version: 9.0.2 + resolution: "@graphql-tools/batch-execute@npm:9.0.2" dependencies: "@graphql-tools/utils": ^10.0.5 dataloader: ^2.2.2 @@ -11998,45 +11646,13 @@ __metadata: value-or-promise: ^1.0.12 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: c2bcf9dbcd3d08b2e04708fddad7f587677b62e189b0357b8a5495693e17b257b3022f5983d503966baaf32cbdc92a0a00dc95be7f5b6039357a31ffdde29a19 + checksum: 35da796959dbdb9bf59c913b2db25ab6db244243a5d3adb011f528841ac4c54f36d0731d2cb5b5ea8d0f2d28b61e34fe47a9afc905072848c1cc362193583f1b languageName: node linkType: hard -"@graphql-tools/code-file-loader@npm:^7.3.17": - version: 7.3.21 - resolution: "@graphql-tools/code-file-loader@npm:7.3.21" - dependencies: - "@graphql-tools/graphql-tag-pluck": 7.5.0 - "@graphql-tools/utils": 9.2.1 - globby: ^11.0.3 - tslib: ^2.4.0 - unixify: ^1.0.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 5d0d0a70bac673b4925a65f2283e3fcc5c093d2466a144cc577cb515d3de92ca2458d92842e02fe82a95d57d30ce6d2998b8ee5674393f7cd3df52f69671d565 - languageName: node - linkType: hard - -"@graphql-tools/delegate@npm:9.0.21": - version: 9.0.21 - resolution: "@graphql-tools/delegate@npm:9.0.21" - dependencies: - "@graphql-tools/batch-execute": 8.5.14 - "@graphql-tools/executor": 0.0.11 - "@graphql-tools/schema": 9.0.12 - "@graphql-tools/utils": 9.1.3 - dataloader: 2.1.0 - tslib: ~2.4.0 - value-or-promise: 1.0.11 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: fab07abfb06325d82382e6de45bbf2bc6501f18ebabbe50661772b58f512d6e713565be16bd7f99f71fcb00ffeed25bba871d4d459a705880803878e20c2a183 - languageName: node - linkType: hard - -"@graphql-tools/delegate@npm:^10.0.0": - version: 10.0.2 - resolution: "@graphql-tools/delegate@npm:10.0.2" +"@graphql-tools/delegate@npm:^10.0.0, @graphql-tools/delegate@npm:^10.0.3": + version: 10.0.3 + resolution: "@graphql-tools/delegate@npm:10.0.3" dependencies: "@graphql-tools/batch-execute": ^9.0.1 "@graphql-tools/executor": ^1.0.0 @@ -12046,72 +11662,55 @@ __metadata: tslib: ^2.5.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 3641dd03b241234cc0bc15221e1bd7e82f003f0bdb59a04cfaba23b5dc43d3aed1f068cc79d526dd731f6e4acfd90c9e20287feb565b9c881ed441c5008e32db + checksum: 999b04ebcf92bb0978b1d1c059a8b152bd42a4d6aaa47441305fd662d40dcd27f2a2b5b35e3c4da96661a2f15178bee4235af8f918db0788c0f1454555a667b2 languageName: node linkType: hard -"@graphql-tools/executor-graphql-ws@npm:0.0.5": - version: 0.0.5 - resolution: "@graphql-tools/executor-graphql-ws@npm:0.0.5" +"@graphql-tools/executor-graphql-ws@npm:^1.0.0": + version: 1.1.1 + resolution: "@graphql-tools/executor-graphql-ws@npm:1.1.1" dependencies: - "@graphql-tools/utils": 9.1.3 - "@repeaterjs/repeater": 3.0.4 + "@graphql-tools/utils": ^10.0.2 "@types/ws": ^8.0.0 - graphql-ws: 5.11.2 - isomorphic-ws: 5.0.0 + graphql-ws: ^5.14.0 + isomorphic-ws: ^5.0.0 tslib: ^2.4.0 - ws: 8.11.0 + ws: ^8.13.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 79ced279e56b7508282859f805ca8fe1286eec3b53592893e35517f93e5204eca2db327258599749b0d832918d9d709962059087b4e6a894eacc16ceb0142273 + checksum: 30d29e2ef8fbedf07d7c279218f31a7279e714328f6c24d28ea76536fb4c5ed857ab5e486922000fcf9f85b83a9f3e995b8fd066b01ea4ab31d35efaa770c133 languageName: node linkType: hard -"@graphql-tools/executor-http@npm:0.0.7": - version: 0.0.7 - resolution: "@graphql-tools/executor-http@npm:0.0.7" +"@graphql-tools/executor-http@npm:^1.0.0": + version: 1.0.3 + resolution: "@graphql-tools/executor-http@npm:1.0.3" dependencies: - "@graphql-tools/utils": 9.1.3 - "@repeaterjs/repeater": 3.0.4 - "@whatwg-node/fetch": 0.5.3 - dset: 3.1.2 + "@graphql-tools/utils": ^10.0.2 + "@repeaterjs/repeater": ^3.0.4 + "@whatwg-node/fetch": ^0.9.0 extract-files: ^11.0.0 - meros: 1.2.1 + meros: ^1.2.1 tslib: ^2.4.0 - value-or-promise: 1.0.11 + value-or-promise: ^1.0.12 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 05918ee65cb7d3e927e707acddb184ba2efbccf03656454ff8b172654aa41c4ad35bed487c0399ca085ba39ca434421cdaadb78dec4d7ebabbd25fe3c5cbb81c + checksum: a6d757bfb1cba4b28b098c6775f2093d34059820bf8fa4cc6a2ef9007464a8e0d3b431f354cbc9b7c5388604d4b8dd245b32c9c43e0be74d5d4cd3da9d5d5da8 languageName: node linkType: hard -"@graphql-tools/executor-legacy-ws@npm:0.0.5": - version: 0.0.5 - resolution: "@graphql-tools/executor-legacy-ws@npm:0.0.5" +"@graphql-tools/executor-legacy-ws@npm:^1.0.0": + version: 1.0.4 + resolution: "@graphql-tools/executor-legacy-ws@npm:1.0.4" dependencies: - "@graphql-tools/utils": 9.1.3 + "@graphql-tools/utils": ^10.0.0 "@types/ws": ^8.0.0 isomorphic-ws: 5.0.0 tslib: ^2.4.0 - ws: 8.11.0 + ws: 8.14.2 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 2705e57ae81fbe3117d14900d50ab2459618d93192f795db97e2b98e9a772ebfe2308c17e72d92735123ec32fbedad014158d20fd1cc569fa287d47c90037a71 - languageName: node - linkType: hard - -"@graphql-tools/executor@npm:0.0.11": - version: 0.0.11 - resolution: "@graphql-tools/executor@npm:0.0.11" - dependencies: - "@graphql-tools/utils": 9.1.3 - "@graphql-typed-document-node/core": 3.1.1 - "@repeaterjs/repeater": 3.0.4 - tslib: ^2.4.0 - value-or-promise: 1.0.11 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 9f4c5d50eb574ab788a70684150502d4ad25b2681a3933a9415a0bbd78bfdf5ee203dca8bccc4cef93727157254216f0c22c5359bef1c1738f652b3122048b17 + checksum: d271e7b0860dfa47b29ca56aa761e555c804a3223ed9f42784b2f1dcc872b15976a2c89db9b34ca26143a0b5cf6f45c771ddc23c0c012f5dabf222334c59635e languageName: node linkType: hard @@ -12130,122 +11729,59 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/git-loader@npm:^7.2.13": - version: 7.2.13 - resolution: "@graphql-tools/git-loader@npm:7.2.13" +"@graphql-tools/graphql-file-loader@npm:^8.0.0": + version: 8.0.0 + resolution: "@graphql-tools/graphql-file-loader@npm:8.0.0" dependencies: - "@graphql-tools/graphql-tag-pluck": 7.4.0 - "@graphql-tools/utils": 9.1.1 - is-glob: 4.0.3 - micromatch: ^4.0.4 - tslib: ^2.4.0 - unixify: ^1.0.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 4690d473bb05d91765ee54fbfd0cb3859bda8cef776feced26e477b6aef22c582923ff18bdc963adcb649d8fa975344371001af60867d1e2cfd5624917cf6e91 - languageName: node - linkType: hard - -"@graphql-tools/github-loader@npm:^7.3.20": - version: 7.3.20 - resolution: "@graphql-tools/github-loader@npm:7.3.20" - dependencies: - "@ardatan/sync-fetch": 0.0.1 - "@graphql-tools/graphql-tag-pluck": 7.4.0 - "@graphql-tools/utils": 9.1.1 - "@whatwg-node/fetch": ^0.5.0 - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 96292e59f8b394fb1e69fae91b3fdf037962e8feadd15da7461043c9559450fc35c2438b669727b14a6d509f784f0c5401477f3f90f693a93fc8c59c246d0c77 - languageName: node - linkType: hard - -"@graphql-tools/graphql-file-loader@npm:^7.3.7, @graphql-tools/graphql-file-loader@npm:^7.5.0": - version: 7.5.0 - resolution: "@graphql-tools/graphql-file-loader@npm:7.5.0" - dependencies: - "@graphql-tools/import": 6.7.1 - "@graphql-tools/utils": 8.9.0 + "@graphql-tools/import": 7.0.0 + "@graphql-tools/utils": ^10.0.0 globby: ^11.0.3 tslib: ^2.4.0 unixify: ^1.0.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 57f9f64a26f62d25fcb65282d27a8f6cce8d99fd0ec8f1d5b31ab43fd5698876760e4df42fd96f2b5ea524f2e755768496ee2b3516d559d43270330551371359 + checksum: 62c5150132a044c396dddd55b6acfe88e1bee21911bbe7905eb35516e0dd969e18ca558a77bb62c5b243bf877fee0a66a5ef2e7dce611d44ef1d5ad8edda151b languageName: node linkType: hard -"@graphql-tools/graphql-tag-pluck@npm:7.4.0": - version: 7.4.0 - resolution: "@graphql-tools/graphql-tag-pluck@npm:7.4.0" +"@graphql-tools/import@npm:7.0.0": + version: 7.0.0 + resolution: "@graphql-tools/import@npm:7.0.0" dependencies: - "@babel/parser": ^7.16.8 - "@babel/plugin-syntax-import-assertions": 7.20.0 - "@babel/traverse": ^7.16.8 - "@babel/types": ^7.16.8 - "@graphql-tools/utils": 9.1.1 - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 670888e691707d430066a84ddcc9a34f64c6146e3f1406ab9fbdf74d5805fcbac8d32462cd387c411fbb81a5fc6bfb4d4d14e0568c5b887c72df8ebb7ef66c1b - languageName: node - linkType: hard - -"@graphql-tools/graphql-tag-pluck@npm:7.5.0": - version: 7.5.0 - resolution: "@graphql-tools/graphql-tag-pluck@npm:7.5.0" - dependencies: - "@babel/parser": ^7.16.8 - "@babel/plugin-syntax-import-assertions": 7.20.0 - "@babel/traverse": ^7.16.8 - "@babel/types": ^7.16.8 - "@graphql-tools/utils": 9.2.1 - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 47edaacdeafc4a464f8a51e047cafbb82a9a2700536a5b075eb4afad43c80b513a7b0ac4ad49a1e8a74b566ed7dfd677ebb0d0a967fe1e2ee66408cd5d4f294b - languageName: node - linkType: hard - -"@graphql-tools/import@npm:6.7.1": - version: 6.7.1 - resolution: "@graphql-tools/import@npm:6.7.1" - dependencies: - "@graphql-tools/utils": 8.9.0 + "@graphql-tools/utils": ^10.0.0 resolve-from: 5.0.0 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 1ba6ff176851eff345ccfd37616bd2d800fba074b88abb9a777b59fe153a1e55f2c24d8c033b141303267212f6a01eb874088e403b7efdf10c01c9ec7833af49 + checksum: 24f7f2096b635b84983932b53d2953edf77f2d35f22d892569aa0c8303a5eb1dd5cff5922dc0264cfe22891730a17cf69392a9fd4b1b682a89553d8e16247498 languageName: node linkType: hard -"@graphql-tools/json-file-loader@npm:^7.3.7, @graphql-tools/json-file-loader@npm:^7.4.1": - version: 7.4.1 - resolution: "@graphql-tools/json-file-loader@npm:7.4.1" +"@graphql-tools/json-file-loader@npm:^8.0.0": + version: 8.0.0 + resolution: "@graphql-tools/json-file-loader@npm:8.0.0" dependencies: - "@graphql-tools/utils": 8.9.0 + "@graphql-tools/utils": ^10.0.0 globby: ^11.0.3 tslib: ^2.4.0 unixify: ^1.0.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 9eae0fd4229b60fa93d3e523e7255eeb2400bda44a2e73ba036955c514be4f02c83e7578c4749c4a7e84b44d318d4c65979b745ddb34fa4d219449f455e3e873 + checksum: 5fe0ab7b2cb0a4fac7a223928803a4f193628d51ef6da06cf9fbed63b742b39efa2dac45cef69febcb49d1c7122b2b4447b1e6af46ab799ce529e44f9f974d7f languageName: node linkType: hard -"@graphql-tools/load@npm:^7.5.5, @graphql-tools/load@npm:^7.8.0": - version: 7.8.10 - resolution: "@graphql-tools/load@npm:7.8.10" +"@graphql-tools/load@npm:^8.0.0": + version: 8.0.0 + resolution: "@graphql-tools/load@npm:8.0.0" dependencies: - "@graphql-tools/schema": 9.0.14 - "@graphql-tools/utils": 9.1.4 + "@graphql-tools/schema": ^10.0.0 + "@graphql-tools/utils": ^10.0.0 p-limit: 3.1.0 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 9b1fd7041fc69072c4f7d6bc320c9de7f990e1792db567d3d913b9cc77f5c164ffee968dd90a688d89856e1e8c01beb8e1bbe9f22464fa8c563553229c3a3f28 + checksum: e1126bef8917e8a7e89c12cc95b127de727c04502e57f379d93dd3027ce72dc38b16a52a417263959a938b4660a1d362836eed59f941cd30ee3d5452c793a50d languageName: node linkType: hard @@ -12261,42 +11797,6 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/merge@npm:8.3.14": - version: 8.3.14 - resolution: "@graphql-tools/merge@npm:8.3.14" - dependencies: - "@graphql-tools/utils": 9.1.3 - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: d77098959a7ecf1346958eb6731f7354fc1155d253aa25169ca48b73053784f3db203ff88ada6a1cdfa9a0b026e55ce02afb83ac61b501223c018e97accf7cdc - languageName: node - linkType: hard - -"@graphql-tools/merge@npm:8.3.16": - version: 8.3.16 - resolution: "@graphql-tools/merge@npm:8.3.16" - dependencies: - "@graphql-tools/utils": 9.1.4 - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 4d7fa594e0d97b6d596c85619a8203cb9c88452b75efac4191697de00db5d043639ed47f6bf0a3ccc11e8638714d92a4a8bc37e77b61b46790ddf4a1e5d4bb87 - languageName: node - linkType: hard - -"@graphql-tools/merge@npm:^8.2.6, @graphql-tools/merge@npm:^8.4.1": - version: 8.4.1 - resolution: "@graphql-tools/merge@npm:8.4.1" - dependencies: - "@graphql-tools/utils": ^9.2.1 - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: badb094e2eb29688d39d451a83909dc6f92a28c98dbb485a2f745a963813ad1310b1624c7618e97477c90f7935c99b06792bf63c4957a58c642af1609bcec143 - languageName: node - linkType: hard - "@graphql-tools/merge@npm:^9.0.0": version: 9.0.0 resolution: "@graphql-tools/merge@npm:9.0.0" @@ -12309,87 +11809,6 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/optimize@npm:^1.3.0": - version: 1.3.0 - resolution: "@graphql-tools/optimize@npm:1.3.0" - dependencies: - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 56a5e8e3079a7ac69639410143315bafd43175c0366a95cf037698b64799ff80fc737b747b7751a4de31b44a679f67b7499468c556ca457932d5d1052db73f19 - languageName: node - linkType: hard - -"@graphql-tools/prisma-loader@npm:^7.2.49": - version: 7.2.49 - resolution: "@graphql-tools/prisma-loader@npm:7.2.49" - dependencies: - "@graphql-tools/url-loader": 7.16.28 - "@graphql-tools/utils": 9.1.3 - "@types/js-yaml": ^4.0.0 - "@types/json-stable-stringify": ^1.0.32 - "@types/jsonwebtoken": ^8.5.0 - chalk: ^4.1.0 - debug: ^4.3.1 - dotenv: ^16.0.0 - graphql-request: ^5.0.0 - http-proxy-agent: ^5.0.0 - https-proxy-agent: ^5.0.0 - isomorphic-fetch: ^3.0.0 - js-yaml: ^4.0.0 - json-stable-stringify: ^1.0.1 - jsonwebtoken: ^9.0.0 - lodash: ^4.17.20 - scuid: ^1.1.0 - tslib: ^2.4.0 - yaml-ast-parser: ^0.0.43 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 9a392346107ec5e468a8725c1d931b638e1899c25a80e34e9c888c050abf85dfde85faea9fdb19a8bfd9425bdb97949e14e759157d083aa91812fcff516ad82d - languageName: node - linkType: hard - -"@graphql-tools/relay-operation-optimizer@npm:^6.5.0": - version: 6.5.0 - resolution: "@graphql-tools/relay-operation-optimizer@npm:6.5.0" - dependencies: - "@ardatan/relay-compiler": 12.0.0 - "@graphql-tools/utils": 8.8.0 - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: eea705c0508b801806d36a6031997868d1aa35a2bee0a21c36e5ac345691a9fec88c9c00bc3c96fa998aa28deb2be667d65e6123ac469f22072f3eba2781b5ad - languageName: node - linkType: hard - -"@graphql-tools/schema@npm:9.0.12": - version: 9.0.12 - resolution: "@graphql-tools/schema@npm:9.0.12" - dependencies: - "@graphql-tools/merge": 8.3.14 - "@graphql-tools/utils": 9.1.3 - tslib: ^2.4.0 - value-or-promise: 1.0.11 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: c5ea750466181b425dd77822b1dc774227bcdb3a01631f114734d450cfc2dabeac60b3fac40e047090d6035b6a559b614716f1b61068889cf5aae0785650c31b - languageName: node - linkType: hard - -"@graphql-tools/schema@npm:9.0.14": - version: 9.0.14 - resolution: "@graphql-tools/schema@npm:9.0.14" - dependencies: - "@graphql-tools/merge": 8.3.16 - "@graphql-tools/utils": 9.1.4 - tslib: ^2.4.0 - value-or-promise: 1.0.12 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: ae958892363fe8b1715a9fd3c4bdb56d0d5d429693dbb9774ce930d104ed5a7c94db3c41c12d91fd930bf90ab186337d3ba660e765a99a98bde892f0d2dcf40e - languageName: node - linkType: hard - "@graphql-tools/schema@npm:^10.0.0": version: 10.0.0 resolution: "@graphql-tools/schema@npm:10.0.0" @@ -12418,51 +11837,26 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/schema@npm:^9.0.0": - version: 9.0.19 - resolution: "@graphql-tools/schema@npm:9.0.19" +"@graphql-tools/url-loader@npm:^8.0.0": + version: 8.0.0 + resolution: "@graphql-tools/url-loader@npm:8.0.0" dependencies: - "@graphql-tools/merge": ^8.4.1 - "@graphql-tools/utils": ^9.2.1 - tslib: ^2.4.0 - value-or-promise: ^1.0.12 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 1be91f61bf4be0c1c9aa640a6ad5b58328d5434d15e78ba73a47263420939db6741ad6723dece4611257e7e1e56518e116b76513a3014305d3f52d67aafb62fb - languageName: node - linkType: hard - -"@graphql-tools/url-loader@npm:7.16.28, @graphql-tools/url-loader@npm:^7.13.2, @graphql-tools/url-loader@npm:^7.9.7": - version: 7.16.28 - resolution: "@graphql-tools/url-loader@npm:7.16.28" - dependencies: - "@ardatan/sync-fetch": 0.0.1 - "@graphql-tools/delegate": 9.0.21 - "@graphql-tools/executor-graphql-ws": 0.0.5 - "@graphql-tools/executor-http": 0.0.7 - "@graphql-tools/executor-legacy-ws": 0.0.5 - "@graphql-tools/utils": 9.1.3 - "@graphql-tools/wrap": 9.2.23 + "@ardatan/sync-fetch": ^0.0.1 + "@graphql-tools/delegate": ^10.0.0 + "@graphql-tools/executor-graphql-ws": ^1.0.0 + "@graphql-tools/executor-http": ^1.0.0 + "@graphql-tools/executor-legacy-ws": ^1.0.0 + "@graphql-tools/utils": ^10.0.0 + "@graphql-tools/wrap": ^10.0.0 "@types/ws": ^8.0.0 - "@whatwg-node/fetch": ^0.5.0 - isomorphic-ws: 5.0.0 + "@whatwg-node/fetch": ^0.9.0 + isomorphic-ws: ^5.0.0 tslib: ^2.4.0 value-or-promise: ^1.0.11 - ws: 8.11.0 + ws: ^8.12.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: fca2dada0d80c051358f928a321eda0cfa96bb71704b4feb7e61dfd7226f78fb1dd2e8268f4e81080a2984cf57ee92ef6c8608c89c6f931860a0cbdd63bcb031 - languageName: node - linkType: hard - -"@graphql-tools/utils@npm:8.8.0": - version: 8.8.0 - resolution: "@graphql-tools/utils@npm:8.8.0" - dependencies: - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 631aa690fcf7c01c42829af93f2af1c62d2eeaca99a74f2ae9d6424b7662383391fff37443d61f76fd9f00243b33d0ba0a7df8792c835e1db1fd1b4cee2f32f0 + checksum: ddb77848d62a1705e09058e2de16342b0c4f3cf4a3a690e06a65ccaf4d1f72d1fe19f1862cce445cc4a7e8891cb61d6f1aa81540138076cf59a6ceaf3696a7e1 languageName: node linkType: hard @@ -12477,61 +11871,17 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/utils@npm:9.1.1": - version: 9.1.1 - resolution: "@graphql-tools/utils@npm:9.1.1" - dependencies: - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 5a5120417c00b0f8a834b69dca9b7496022f8b1ed3719c2cf7de8253ff639ecc0f4a8e2bcaf0193ce44bd59431098180e94bdd96406e9f260e058b16c0e26975 - languageName: node - linkType: hard - -"@graphql-tools/utils@npm:9.1.3": - version: 9.1.3 - resolution: "@graphql-tools/utils@npm:9.1.3" - dependencies: - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 3b5acd41ae939e2811f496b1676e6219be61a95f3e502bb3783542a67e7703d7709d4ae87fc9deb7284280aea687fb4b0e596f538d7f1cdf5a8827a2952ee994 - languageName: node - linkType: hard - -"@graphql-tools/utils@npm:9.1.4": - version: 9.1.4 - resolution: "@graphql-tools/utils@npm:9.1.4" - dependencies: - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 467135297a07b21bdd706ca03385354931db85fcf2accc514d69b7415c8cb0fb9e551e4bba0870278eab58bf4de757d354d53c88fd0f55b52d8562dbcba71869 - languageName: node - linkType: hard - -"@graphql-tools/utils@npm:9.2.1, @graphql-tools/utils@npm:^9.0.0, @graphql-tools/utils@npm:^9.1.1, @graphql-tools/utils@npm:^9.2.1": - version: 9.2.1 - resolution: "@graphql-tools/utils@npm:9.2.1" - dependencies: - "@graphql-typed-document-node/core": ^3.1.1 - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 94ed12df5f49e5c338322ffd931236a687a3d5c443bf499f9baab5d4fcd9792234111142be8aa506a01ca2e82732996c4e1d8f6159ff9cc7fdc5c97f63e55226 - languageName: node - linkType: hard - -"@graphql-tools/utils@npm:^10.0.0, @graphql-tools/utils@npm:^10.0.5": - version: 10.0.5 - resolution: "@graphql-tools/utils@npm:10.0.5" +"@graphql-tools/utils@npm:^10.0.0, @graphql-tools/utils@npm:^10.0.2, @graphql-tools/utils@npm:^10.0.5": + version: 10.0.8 + resolution: "@graphql-tools/utils@npm:10.0.8" dependencies: "@graphql-typed-document-node/core": ^3.1.1 + cross-inspect: 1.0.0 dset: ^3.1.2 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 600eb668b0a80264a56d1bfc2b431073a620de8ffea959362a1d13c4e0dd5738b627cc508ead8ecdbd7c1a2da05d5664e43443e15d3b221a809fa1a0e2740193 + checksum: 75d4f17592b5b93c1a60efb583decd96cc0f7cacfb68f483569d28bb9afd5a8d0b4e85a0136fa54c222c090d55bfc085798f1acccd5db41f7971673547cf2a34 languageName: node linkType: hard @@ -12546,46 +11896,22 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/wrap@npm:9.2.23": - version: 9.2.23 - resolution: "@graphql-tools/wrap@npm:9.2.23" - dependencies: - "@graphql-tools/delegate": 9.0.21 - "@graphql-tools/schema": 9.0.12 - "@graphql-tools/utils": 9.1.3 - tslib: ^2.4.0 - value-or-promise: 1.0.11 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 8f4f289d51adb92a7099940892c52b710e61f76d02580a3223e80aaed790d32f769cae33a4afeff398357f33a55267427d9703de6f0bd30ec9ba57ee3bd5ef5c - languageName: node - linkType: hard - "@graphql-tools/wrap@npm:^10.0.0": - version: 10.0.0 - resolution: "@graphql-tools/wrap@npm:10.0.0" + version: 10.0.1 + resolution: "@graphql-tools/wrap@npm:10.0.1" dependencies: - "@graphql-tools/delegate": ^10.0.0 + "@graphql-tools/delegate": ^10.0.3 "@graphql-tools/schema": ^10.0.0 "@graphql-tools/utils": ^10.0.0 tslib: ^2.4.0 value-or-promise: ^1.0.12 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: f7ce366cdd479c3f73c3c98f66fa13c528c63e2f791083e78ca14e010ebcd359b5c9bd78e2e8bd437a705418b87584eb6512f1eeb1971b81560c79c6fb3a4a6e + checksum: e94d63301c045688cd7bfd6cff4375de42b344eea3c4e604b9e98d29c3544d2222435e2e3f5ada0c0db690e364af630246ccc56f2b299addc93c2e77d6dd72d1 languageName: node linkType: hard -"@graphql-typed-document-node/core@npm:3.1.1": - version: 3.1.1 - resolution: "@graphql-typed-document-node/core@npm:3.1.1" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 87ff4cee308f1075f4472b80f9f9409667979940f8f701e87f0aa35ce5cf104d94b41258ea8192d05a0893475cd0f086a3929a07663b4fe8d0e805a277f07ed5 - languageName: node - linkType: hard - -"@graphql-typed-document-node/core@npm:3.2.0, @graphql-typed-document-node/core@npm:^3.1.0, @graphql-typed-document-node/core@npm:^3.1.1": +"@graphql-typed-document-node/core@npm:3.2.0, @graphql-typed-document-node/core@npm:^3.1.1": version: 3.2.0 resolution: "@graphql-typed-document-node/core@npm:3.2.0" peerDependencies: @@ -12594,28 +11920,27 @@ __metadata: languageName: node linkType: hard -"@grpc/grpc-js@npm:~1.8.0": - version: 1.8.9 - resolution: "@grpc/grpc-js@npm:1.8.9" +"@grpc/grpc-js@npm:~1.9.6": + version: 1.9.11 + resolution: "@grpc/grpc-js@npm:1.9.11" dependencies: - "@grpc/proto-loader": ^0.7.0 + "@grpc/proto-loader": ^0.7.8 "@types/node": ">=12.12.47" - checksum: 40408af0c0e2b61dbb0fe1c246ae30404c89c601f3e9f9f8447f82d01d8dc0c8befccf2afe9ded07dfc8bd89c927bcbfb5925d4b1ae887299112b2ab549f519c + checksum: ed11ebcb0f8c34e2ada1d16ac2eef2465e1812871dd42bf40a405dfa06e2bfe895e680aff10644f9d51c33ce1ee1882ee466237ee478365c5ed265c0d7c5c015 languageName: node linkType: hard -"@grpc/proto-loader@npm:^0.7.0": - version: 0.7.2 - resolution: "@grpc/proto-loader@npm:0.7.2" +"@grpc/proto-loader@npm:^0.7.0, @grpc/proto-loader@npm:^0.7.8": + version: 0.7.10 + resolution: "@grpc/proto-loader@npm:0.7.10" dependencies: - "@types/long": ^4.0.1 lodash.camelcase: ^4.3.0 - long: ^4.0.0 - protobufjs: ^7.0.0 - yargs: ^16.2.0 + long: ^5.0.0 + protobufjs: ^7.2.4 + yargs: ^17.7.2 bin: proto-loader-gen-types: build/bin/proto-loader-gen-types.js - checksum: b6b45b3da96d634886cae149be67c8754de6e6ed03fee974308610b99df417d7b33f12c22b2770755482634193876baeff13469f9d82898e0a5ccf4e5d8b3535 + checksum: 4987e23b57942c2363b6a6a106e63efae636666cefa348778dfafef2ff72da7343c8587667521cb1d52482827bcd001dd535bdc27065110af56d9c7c176334c9 languageName: node linkType: hard @@ -12750,7 +12075,7 @@ __metadata: "@backstage/dev-utils": "workspace:^" "@backstage/plugin-permission-common": "workspace:^" "@backstage/test-utils": "workspace:^" - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 msw: ^1.0.0 languageName: unknown linkType: soft @@ -13123,13 +12448,6 @@ __metadata: languageName: node linkType: hard -"@josephg/resolvable@npm:^1.0.0": - version: 1.0.1 - resolution: "@josephg/resolvable@npm:1.0.1" - checksum: 64eb763b5138bdae4fb59c0c0e89ed261b690917ae6bd777b533257668f151b8868698fb73dfd7665746ad07c7c917fe89ccfdf2404048d39f373f57f1a14e34 - languageName: node - linkType: hard - "@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": version: 0.3.2 resolution: "@jridgewell/gen-mapping@npm:0.3.2" @@ -13199,15 +12517,6 @@ __metadata: languageName: node linkType: hard -"@jsdoc/salty@npm:^0.2.1": - version: 0.2.3 - resolution: "@jsdoc/salty@npm:0.2.3" - dependencies: - lodash: ^4.17.21 - checksum: d2b29089e6ba942bf3228087d35379ada248c34f136357d1a4bf5c0350a0d5bde0f90dc68d5e7271728bac1951f85fe749075df0a32a9d584ad5d198492bf7f1 - languageName: node - linkType: hard - "@jsep-plugin/regex@npm:^1.0.1": version: 1.0.3 resolution: "@jsep-plugin/regex@npm:1.0.3" @@ -13286,9 +12595,9 @@ __metadata: languageName: node linkType: hard -"@kubernetes/client-node@npm:0.19.0, @kubernetes/client-node@npm:^0.19.0": - version: 0.19.0 - resolution: "@kubernetes/client-node@npm:0.19.0" +"@kubernetes/client-node@npm:0.20.0, @kubernetes/client-node@npm:^0.20.0": + version: 0.20.0 + resolution: "@kubernetes/client-node@npm:0.20.0" dependencies: "@types/js-yaml": ^4.0.1 "@types/node": ^20.1.1 @@ -13308,7 +12617,7 @@ __metadata: dependenciesMeta: openid-client: optional: true - checksum: d29ccfb562ac51a81f74de570eb832d150be6b73ba887ae1be682df9a34c3ab846d4d4ba74f0a9f0e0ce4da573f949ba712115e1d0513148cdf683a22d729e7f + checksum: c7c2ec9c597b5579ec452bcc13647feeaa3eaf93601afa5d9a4e06b5fe91d2cafa444a1da07b5330a7596f0e07e107d6abe4acabc5998f7bedf43cd0ab8bf343 languageName: node linkType: hard @@ -13882,6 +13191,13 @@ __metadata: languageName: node linkType: hard +"@mswjs/cookies@npm:^1.1.0": + version: 1.1.0 + resolution: "@mswjs/cookies@npm:1.1.0" + checksum: 1d9be44548907b92ff6acd46795292968661be19f1c04c43fdb2beb98bc7e58b8ffcef3be19d0f2cb58df07a36a6b53b4bbc0ea34e023b7366dbc28ffee90338 + languageName: node + linkType: hard + "@mswjs/interceptors@npm:^0.17.10": version: 0.17.10 resolution: "@mswjs/interceptors@npm:0.17.10" @@ -13898,14 +13214,28 @@ __metadata: languageName: node linkType: hard -"@mui/base@npm:5.0.0-beta.23": - version: 5.0.0-beta.23 - resolution: "@mui/base@npm:5.0.0-beta.23" +"@mswjs/interceptors@npm:^0.25.11": + version: 0.25.12 + resolution: "@mswjs/interceptors@npm:0.25.12" + dependencies: + "@open-draft/deferred-promise": ^2.2.0 + "@open-draft/logger": ^0.3.0 + "@open-draft/until": ^2.0.0 + is-node-process: ^1.2.0 + outvariant: ^1.2.1 + strict-event-emitter: ^0.5.1 + checksum: 0676808700059f55536b51ffe38e9ea07e26b4d9c284fbbdf7a52b7282b7a93703f18d93b109c384205fe5f72b585506d5550cc8f3559267892b01a0f7561d3d + languageName: node + linkType: hard + +"@mui/base@npm:5.0.0-beta.24": + version: 5.0.0-beta.24 + resolution: "@mui/base@npm:5.0.0-beta.24" dependencies: "@babel/runtime": ^7.23.2 - "@floating-ui/react-dom": ^2.0.2 - "@mui/types": ^7.2.8 - "@mui/utils": ^5.14.17 + "@floating-ui/react-dom": ^2.0.4 + "@mui/types": ^7.2.9 + "@mui/utils": ^5.14.18 "@popperjs/core": ^2.11.8 clsx: ^2.0.0 prop-types: ^15.8.1 @@ -13916,27 +13246,27 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: fdd0c0cbb193afb60ba5b713b433e52643b4c7693a0069aef62ef4a9e2e5050519e193e29420c5d5032008629a0abc565fb0252f1be5a8d04b798decff3e1844 + checksum: dbd6eb0af7cb89389b1dccd6a84d07128c41f60d297d8f1d484919950c9b45a5d8767042b622c74e311bce0368ee3f760afb34d80ad97af61f5b5650ae990c60 languageName: node linkType: hard -"@mui/core-downloads-tracker@npm:^5.14.17": - version: 5.14.17 - resolution: "@mui/core-downloads-tracker@npm:5.14.17" - checksum: dfa5ffe6e370ad9490cbe03b964967271462f7fb74c09e29e6fe09042f15ddec9a976f5131ce01b003dba1d66b70a6af026b0a1929db50124c783d7df45b06b6 +"@mui/core-downloads-tracker@npm:^5.14.18": + version: 5.14.18 + resolution: "@mui/core-downloads-tracker@npm:5.14.18" + checksum: 3d367797282e4b93eacee997667d62bc4eeac979e9664724e9db8d632278d8629f2a141894cf53d706f1d2a9f19965bffe2858aa2bc9833722e674cd560b896e languageName: node linkType: hard "@mui/material@npm:^5.12.2": - version: 5.14.17 - resolution: "@mui/material@npm:5.14.17" + version: 5.14.18 + resolution: "@mui/material@npm:5.14.18" dependencies: "@babel/runtime": ^7.23.2 - "@mui/base": 5.0.0-beta.23 - "@mui/core-downloads-tracker": ^5.14.17 - "@mui/system": ^5.14.17 - "@mui/types": ^7.2.8 - "@mui/utils": ^5.14.17 + "@mui/base": 5.0.0-beta.24 + "@mui/core-downloads-tracker": ^5.14.18 + "@mui/system": ^5.14.18 + "@mui/types": ^7.2.9 + "@mui/utils": ^5.14.18 "@types/react-transition-group": ^4.4.8 clsx: ^2.0.0 csstype: ^3.1.2 @@ -13956,16 +13286,16 @@ __metadata: optional: true "@types/react": optional: true - checksum: 7aedee8c9c0ded450cefd1d140f27f752f42b1f9ee729007ab10f79016bd4050dac35674f56b6b3757b8d18febc5750cd37275ab002a97be3ab039dc7166b21c + checksum: 488322f09638a71bb5d4bb5c027dde69d5cf89bcfd433594e3b90fea9fefa302bc85b9d2bf386493bf68d360107b59c6d148f46a68477e7f472f4f2d14d698a3 languageName: node linkType: hard -"@mui/private-theming@npm:^5.14.17": - version: 5.14.17 - resolution: "@mui/private-theming@npm:5.14.17" +"@mui/private-theming@npm:^5.14.18": + version: 5.14.18 + resolution: "@mui/private-theming@npm:5.14.18" dependencies: "@babel/runtime": ^7.23.2 - "@mui/utils": ^5.14.17 + "@mui/utils": ^5.14.18 prop-types: ^15.8.1 peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 @@ -13973,13 +13303,13 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: 59df16335f2598ed01f74631ca65739db461ce078081b2c8ca2bb2d1eb5e7a6cb8b2dca14ee0e83a35fefaabe62f49f3eff41fe9fa3ec17169487a8f0cee20ad + checksum: e7ba8e945f589db16ed05d507b0821d2e07b3d760bf78c9f745a75d75b5a94d1e546278629de15b090de289a9244591bfa2c09bb9f9f8679fb4e1d8cec360833 languageName: node linkType: hard -"@mui/styled-engine@npm:^5.14.17": - version: 5.14.17 - resolution: "@mui/styled-engine@npm:5.14.17" +"@mui/styled-engine@npm:^5.14.18": + version: 5.14.18 + resolution: "@mui/styled-engine@npm:5.14.18" dependencies: "@babel/runtime": ^7.23.2 "@emotion/cache": ^11.11.0 @@ -13994,19 +13324,50 @@ __metadata: optional: true "@emotion/styled": optional: true - checksum: eff29d1d619a6d0c796711fd02c9f93c0543ffa758ff18b7df7790ea64bb3d6604009171939ce5463814c225f5950ced58928cbbafbd0f3b84c1b4d67da691b1 + checksum: 6eba307d95ef462f8b80aaa50ec1db7409d19cead985eba28e86aec066ad4bc70b0daa6d89158a7aae88ea43d614cace5f890cbebe0d8636573e894b7da9cae1 languageName: node linkType: hard -"@mui/system@npm:^5.14.17": - version: 5.14.17 - resolution: "@mui/system@npm:5.14.17" +"@mui/styles@npm:^5.14.18": + version: 5.14.18 + resolution: "@mui/styles@npm:5.14.18" dependencies: "@babel/runtime": ^7.23.2 - "@mui/private-theming": ^5.14.17 - "@mui/styled-engine": ^5.14.17 - "@mui/types": ^7.2.8 - "@mui/utils": ^5.14.17 + "@emotion/hash": ^0.9.1 + "@mui/private-theming": ^5.14.18 + "@mui/types": ^7.2.9 + "@mui/utils": ^5.14.18 + clsx: ^2.0.0 + csstype: ^3.1.2 + hoist-non-react-statics: ^3.3.2 + jss: ^10.10.0 + jss-plugin-camel-case: ^10.10.0 + jss-plugin-default-unit: ^10.10.0 + jss-plugin-global: ^10.10.0 + jss-plugin-nested: ^10.10.0 + jss-plugin-props-sort: ^10.10.0 + jss-plugin-rule-value-function: ^10.10.0 + jss-plugin-vendor-prefixer: ^10.10.0 + prop-types: ^15.8.1 + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: c3a50ff3ab96e931f1506431de70c173af49c7a7d9410a2d132f65ef789f38f4cc742f456cfc16b24ecb7cb492b30dc1afb653cf31318b7059fd52fa790983b5 + languageName: node + linkType: hard + +"@mui/system@npm:^5.14.18": + version: 5.14.18 + resolution: "@mui/system@npm:5.14.18" + dependencies: + "@babel/runtime": ^7.23.2 + "@mui/private-theming": ^5.14.18 + "@mui/styled-engine": ^5.14.18 + "@mui/types": ^7.2.9 + "@mui/utils": ^5.14.18 clsx: ^2.0.0 csstype: ^3.1.2 prop-types: ^15.8.1 @@ -14022,28 +13383,28 @@ __metadata: optional: true "@types/react": optional: true - checksum: bd43393a15e0ff6d5b8a90a51ae0a5366b4edc9f99d73e53ef275d42e5d55cad2d15e0852c93728401fd6f40dc455a166366ba5d068e08798b7506b1608ab4fb + checksum: 8f7c4f3555ee64467826e1a40cfdb34b5c02520fd9f27779b8e6aa97cb9bbd27d98386a194d2e4c44b148babe5f67e3a715f8a09c03a1d71f2f14ddf60045174 languageName: node linkType: hard -"@mui/types@npm:^7.2.8": - version: 7.2.8 - resolution: "@mui/types@npm:7.2.8" +"@mui/types@npm:^7.2.9": + version: 7.2.9 + resolution: "@mui/types@npm:7.2.9" peerDependencies: "@types/react": ^17.0.0 || ^18.0.0 peerDependenciesMeta: "@types/react": optional: true - checksum: 1302d2d1b5a13201efede82ef16438737bd890f9b0a728714fc2da204f6031f055fbd84623ea63ff4ae5d4306b458699d85925608eb8f35df78e1dc0d7a44fc5 + checksum: 4888a1cf9a1adbae1c2f53ba9f8a0cf23eb5e0954bca00b958c240c87b5287771cb5e99bedb61a2c04f5dcbdef13a5b1f238153e98d8959ba51c5470db2c4b32 languageName: node linkType: hard -"@mui/utils@npm:^5.14.17": - version: 5.14.17 - resolution: "@mui/utils@npm:5.14.17" +"@mui/utils@npm:^5.14.15, @mui/utils@npm:^5.14.18": + version: 5.14.18 + resolution: "@mui/utils@npm:5.14.18" dependencies: "@babel/runtime": ^7.23.2 - "@types/prop-types": ^15.7.9 + "@types/prop-types": ^15.7.10 prop-types: ^15.8.1 react-is: ^18.2.0 peerDependencies: @@ -14052,7 +13413,7 @@ __metadata: peerDependenciesMeta: "@types/react": optional: true - checksum: a55ffc3961fdc754fc8b6e2569eeca4ebce2de65ca74c06a1cda6928ba2a9ac1c1c8075188dafc68c8ddb01fd06296d7e047f6a9416d155d86e812526e747071 + checksum: f24badcb6b026b392b94919f65c7f3bea6cfb0f741c1b8ebd74b02bba9ffc61f72e35bdea887e47dfd97d37ff465863aa29c7c5cfd33fb83224f4ff2300432b3 languageName: node linkType: hard @@ -14129,14 +13490,14 @@ __metadata: linkType: hard "@newrelic/browser-agent@npm:^1.236.0": - version: 1.246.1 - resolution: "@newrelic/browser-agent@npm:1.246.1" + version: 1.248.0 + resolution: "@newrelic/browser-agent@npm:1.248.0" dependencies: core-js: ^3.26.0 fflate: ^0.7.4 rrweb: 2.0.0-alpha.11 web-vitals: ^3.1.0 - checksum: 700336b39d870b76c8bd81dede8606f623ea8323944dc8a92be3fa075e5a39cc212b5b159208a993c5cbc81f91ff2936325614d5d268e88be53fa4efc3c73bce + checksum: 0db9d85304e687f6d0e0be89306d26ab99469475ecb8107e224d9757da98627d67c5a652d65782092aa543738976bcb0ae701c92a7fcac7b2ef72c283342cba5 languageName: node linkType: hard @@ -14788,14 +14149,31 @@ __metadata: linkType: hard "@octokit/webhooks@npm:^10.0.0": - version: 10.9.1 - resolution: "@octokit/webhooks@npm:10.9.1" + version: 10.9.2 + resolution: "@octokit/webhooks@npm:10.9.2" dependencies: "@octokit/request-error": ^3.0.0 "@octokit/webhooks-methods": ^3.0.0 "@octokit/webhooks-types": 6.11.0 aggregate-error: ^3.1.0 - checksum: 3ee4ae98777653d629068c7914a8df29affb399a385ae55954953afa0caa856bab0cf8e92cfa80d36db0e7dd08eada0a3597cffd2f503a9078410660f0609161 + checksum: 06ad79021adf9facff3937d387ed5949a2c42ef550401ce2b12df88816b2de30f5b868129a7af523c6036d18b76fb89d22c71d26223f1c2e07c40552f45f6387 + languageName: node + linkType: hard + +"@open-draft/deferred-promise@npm:^2.2.0": + version: 2.2.0 + resolution: "@open-draft/deferred-promise@npm:2.2.0" + checksum: 7f29d39725bb8ab5b62f89d88a4202ce2439ac740860979f9e3d0015dfe4bc3daddcfa5727fa4eed482fdbee770aa591b1136b98b0a0f0569a65294f35bdf56a + languageName: node + linkType: hard + +"@open-draft/logger@npm:^0.3.0": + version: 0.3.0 + resolution: "@open-draft/logger@npm:0.3.0" + dependencies: + is-node-process: ^1.2.0 + outvariant: ^1.4.0 + checksum: 7adfe3d0ed8ca32333ce2a77f9a93d561ebc89c989eaa9722f1dc8a2d2854f5de1bef6fa6894cdf58e16fa4dd9cfa99444ea1f5cac6eb1518e9247911ed042d5 languageName: node linkType: hard @@ -14806,13 +14184,19 @@ __metadata: languageName: node linkType: hard -"@openapi-contrib/openapi-schema-to-json-schema@npm:^3.0.0": - version: 3.0.3 - resolution: "@openapi-contrib/openapi-schema-to-json-schema@npm:3.0.3" +"@open-draft/until@npm:^2.0.0, @open-draft/until@npm:^2.1.0": + version: 2.1.0 + resolution: "@open-draft/until@npm:2.1.0" + checksum: 140ea3b16f4a3a6a729c1256050e20a93d408d7aa1e125648ce2665b3c526ed452510c6e4a6f4b15d95fb5e41203fb51510eb8fbc8812d5e5a91880293d66471 + languageName: node + linkType: hard + +"@openapi-contrib/openapi-schema-to-json-schema@npm:~3.2.0": + version: 3.2.0 + resolution: "@openapi-contrib/openapi-schema-to-json-schema@npm:3.2.0" dependencies: fast-deep-equal: ^3.1.3 - lodash.clonedeep: ^4.5.0 - checksum: 2296925669a4a78548f8ba055fbfc1f292274572ecb082d1465b6a6255799f43f0538880009bf4010b2fa9e7c84e97f8aa04d22b330fd469677c594ed98df314 + checksum: c47cbf85bee3e38e06a627efbbdffd78c95cdadebf6d935092c8ff616e31a69fcfd739a5d9cca5b4b2c6aef49f8dbced6c300eac1f8ade66b3fab403df19ccb2 languageName: node linkType: hard @@ -14942,52 +14326,6 @@ __metadata: languageName: node linkType: hard -"@parcel/watcher@npm:^2.1.0": - version: 2.1.0 - resolution: "@parcel/watcher@npm:2.1.0" - dependencies: - is-glob: ^4.0.3 - micromatch: ^4.0.5 - node-addon-api: ^3.2.1 - node-gyp: latest - node-gyp-build: ^4.3.0 - checksum: 17f512ad6d5dbb40053ceea7091f8af754afc63786b8f050b225b89a8ba24900468aad8bc4edb25c0349b4c0c8d061f50aa19242c0af52cbc30e6ebf50c7bf4c - languageName: node - linkType: hard - -"@peculiar/asn1-schema@npm:^2.1.6": - version: 2.2.0 - resolution: "@peculiar/asn1-schema@npm:2.2.0" - dependencies: - asn1js: ^3.0.5 - pvtsutils: ^1.3.2 - tslib: ^2.4.0 - checksum: 83c8b4e82d8f829ece3ad1aa96d4e2f0c5f16a5255bb066a1174bd020b031d456469d82786a561e5758af0e56d0391ae5e8c6b3657e73d438f49998ff3cf471f - languageName: node - linkType: hard - -"@peculiar/json-schema@npm:^1.1.12": - version: 1.1.12 - resolution: "@peculiar/json-schema@npm:1.1.12" - dependencies: - tslib: ^2.0.0 - checksum: b26ececdc23c5ef25837f8be8d1eb5e1c8bb6e9ae7227ac59ffea57fff56bd05137734e7685e9100595d3d88d906dff638ef8d1df54264c388d3eac1b05aa060 - languageName: node - linkType: hard - -"@peculiar/webcrypto@npm:^1.4.0": - version: 1.4.0 - resolution: "@peculiar/webcrypto@npm:1.4.0" - dependencies: - "@peculiar/asn1-schema": ^2.1.6 - "@peculiar/json-schema": ^1.1.12 - pvtsutils: ^1.3.2 - tslib: ^2.4.0 - webcrypto-core: ^1.7.4 - checksum: 3a7a3c8f253170436f353a61b807d2e2e7a686e6a9607487fde6459ddfff34c8000414287a6cd904bd81e002ce4564811b3c7789a0fd932cf015df6c4002fd02 - languageName: node - linkType: hard - "@pkgjs/parseargs@npm:^0.11.0": version: 0.11.0 resolution: "@pkgjs/parseargs@npm:0.11.0" @@ -14996,13 +14334,13 @@ __metadata: linkType: hard "@playwright/test@npm:^1.32.3": - version: 1.39.0 - resolution: "@playwright/test@npm:1.39.0" + version: 1.40.0 + resolution: "@playwright/test@npm:1.40.0" dependencies: - playwright: 1.39.0 + playwright: 1.40.0 bin: playwright: cli.js - checksum: e93e58fc1af4239f239b890374f066c9a758e2492d25e2c1a532f3f00782ab8e7706956a07540fd14882c74e75f5de36273621adce9b79afb8e36e6c15f1d539 + checksum: 128f05978f9f5a557f0b7924ec134d43cb70c78d74bc3bf7b18576f00e72399100ddf1f4a139e05ea8275407d8e27be0203ac34f514319a2cbeb01eaf0be5be4 languageName: node linkType: hard @@ -15722,10 +15060,10 @@ __metadata: languageName: node linkType: hard -"@remix-run/router@npm:1.11.0": - version: 1.11.0 - resolution: "@remix-run/router@npm:1.11.0" - checksum: 1966436ab3ab982862195e4871790644ce21e01511aa3f4350436296224e4dec2e6ee35f1f4cb83db69f7aa0e8ad4a0a01928b05359ae654edc8e2aa82bf754b +"@remix-run/router@npm:1.12.0": + version: 1.12.0 + resolution: "@remix-run/router@npm:1.12.0" + checksum: 0528a5c9dac443f90aef30b65fed39c6654b5c2db1d01d700b212d783958935b4d800250530430d78eacf03f3baa104edeae75a29cfb13b3180cbfca3352e645 languageName: node linkType: hard @@ -15736,16 +15074,16 @@ __metadata: languageName: node linkType: hard -"@repeaterjs/repeater@npm:3.0.4, @repeaterjs/repeater@npm:^3.0.4": - version: 3.0.4 - resolution: "@repeaterjs/repeater@npm:3.0.4" - checksum: cca0db3e802bc26fcce0b4a574074d9956da53bf43094de03c0e4732d05e13441279a92f0b96e2a7a39da50933684947a138c1213406eaafe39cfd4683d6c0df +"@repeaterjs/repeater@npm:^3.0.4": + version: 3.0.5 + resolution: "@repeaterjs/repeater@npm:3.0.5" + checksum: 4f66020679a2e7a93fbd43d40a7ae6a187d6d7d148b019cca025791dade452599848bd20cd225861a65629571806c551a18cd40190426eb74b050710ac3ae865 languageName: node linkType: hard -"@rjsf/core@npm:5.13.0": - version: 5.13.0 - resolution: "@rjsf/core@npm:5.13.0" +"@rjsf/core@npm:5.14.2": + version: 5.14.2 + resolution: "@rjsf/core@npm:5.14.2" dependencies: lodash: ^4.17.21 lodash-es: ^4.17.21 @@ -15755,26 +15093,26 @@ __metadata: peerDependencies: "@rjsf/utils": ^5.12.x react: ^16.14.0 || >=17 - checksum: d7d66d20fcdf310f4b152c22e1ac1ca8abe5f40b502711c9cabc4241b3252ec0e58345aa194529d2bdfb7a51b9f1179c9ddefc0cdc7fd9f94ad10c5e5b1032b8 + checksum: 8e3ce39e6c31ae4a72e7d4483f091b77327578ab74a65ebc39c348286d737e0fe829902e0d1218e354bf8a8e8a5055c90aac6c996f386ef7a48546f7d3ea6500 languageName: node linkType: hard -"@rjsf/material-ui@npm:5.13.0": - version: 5.13.0 - resolution: "@rjsf/material-ui@npm:5.13.0" +"@rjsf/material-ui@npm:5.14.2": + version: 5.14.2 + resolution: "@rjsf/material-ui@npm:5.14.2" peerDependencies: "@material-ui/core": ^4.12.3 "@material-ui/icons": ^4.11.2 "@rjsf/core": ^5.12.x "@rjsf/utils": ^5.12.x react: ^16.14.0 || >=17 - checksum: 4157a2f112aace66a284c4e40b3220676e884ef37ffdbda616406dfb1a30d58aef6e241c2093a589bbd2f73964db797d7378666e534acec952578075c62cbf6a + checksum: 502cdea7ae9d7d24f9aaee86edc4cc1019e5f956c2446c4f2b5ec377aff31d2d6a6df5c75db54f6fa0d3eb22d855b67e1e8778dfa2b37d88f917098344bbdf08 languageName: node linkType: hard -"@rjsf/utils@npm:5.13.0": - version: 5.13.0 - resolution: "@rjsf/utils@npm:5.13.0" +"@rjsf/utils@npm:5.13.6": + version: 5.13.6 + resolution: "@rjsf/utils@npm:5.13.6" dependencies: json-schema-merge-allof: ^0.8.1 jsonpointer: ^5.0.1 @@ -15783,13 +15121,28 @@ __metadata: react-is: ^18.2.0 peerDependencies: react: ^16.14.0 || >=17 - checksum: 283e2b405eac2f4fdd243b2e35ade7e83a4bf7551eb5e075499e8eb5d3a3ae161e9c047bcf63d2e6fef7c6b2e7438f1a150f353b909df992e85194940c311f9b + checksum: 1e6cdca9f547db4b96561752150c0aa4255426fa32ae84ea017b221e5816e7eb9ed985e9dbb73f1d83baaae36f892f1d10e2bf81d8a53f7e42b2bfc7df52d8e4 languageName: node linkType: hard -"@rjsf/validator-ajv8@npm:5.13.0": - version: 5.13.0 - resolution: "@rjsf/validator-ajv8@npm:5.13.0" +"@rjsf/utils@npm:5.14.2": + version: 5.14.2 + resolution: "@rjsf/utils@npm:5.14.2" + dependencies: + json-schema-merge-allof: ^0.8.1 + jsonpointer: ^5.0.1 + lodash: ^4.17.21 + lodash-es: ^4.17.21 + react-is: ^18.2.0 + peerDependencies: + react: ^16.14.0 || >=17 + checksum: e1caf316a3ab96b7b184988fd8e4db4904bdf0ab01146826f4dbd7ab5765c6f28f2e8c328366ace586f2bf8f903f482c32b4aefaf76ed72a16f31ca9814308ba + languageName: node + linkType: hard + +"@rjsf/validator-ajv8@npm:5.14.2": + version: 5.14.2 + resolution: "@rjsf/validator-ajv8@npm:5.14.2" dependencies: ajv: ^8.12.0 ajv-formats: ^2.1.1 @@ -15797,7 +15150,7 @@ __metadata: lodash-es: ^4.17.21 peerDependencies: "@rjsf/utils": ^5.12.x - checksum: dd36b12e26f213208b899087768b72f8e0763d9a9ac0ba478034270d4d5ac1cebb9ca3ec1a9150c95293b36620c41d5180efda677d23c644a4d4475d8fb49e75 + checksum: 5f8b7961e8ae15ab596e9904f38fc543858ad72566b4fbf15e57cea7dd1f9b9017cb8ba780bf0312635696ef681ef11765cb523c361a68d6e998ae486df23d6e languageName: node linkType: hard @@ -16271,23 +15624,23 @@ __metadata: languageName: node linkType: hard -"@smithy/abort-controller@npm:^2.0.1, @smithy/abort-controller@npm:^2.0.12": - version: 2.0.12 - resolution: "@smithy/abort-controller@npm:2.0.12" +"@smithy/abort-controller@npm:^2.0.1, @smithy/abort-controller@npm:^2.0.13, @smithy/abort-controller@npm:^2.0.14": + version: 2.0.14 + resolution: "@smithy/abort-controller@npm:2.0.14" dependencies: - "@smithy/types": ^2.4.0 + "@smithy/types": ^2.6.0 tslib: ^2.5.0 - checksum: 187bbe7819271de99c8218d0df08d7b56131a7563e1822ef3142ecdad258201c9cc792e222d59145f6f59f6260e3c4ae2ef09b76370daa393797fad1b3d56551 + checksum: f89c7b0523fcb4df7dd7057d15a6deff9aa0b9ac5fe816a2f1331353d3874cf8d3e9b2280a1daa903c32be0fe280ef034a2222f6e62f733fc7dc40be3b1cbe38 languageName: node linkType: hard -"@smithy/chunked-blob-reader-native@npm:^2.0.0": - version: 2.0.0 - resolution: "@smithy/chunked-blob-reader-native@npm:2.0.0" +"@smithy/chunked-blob-reader-native@npm:^2.0.1": + version: 2.0.1 + resolution: "@smithy/chunked-blob-reader-native@npm:2.0.1" dependencies: - "@smithy/util-base64": ^2.0.0 + "@smithy/util-base64": ^2.0.1 tslib: ^2.5.0 - checksum: 5f656dbc4913ab8312b6e687938f534a2ed28e749335560c21a6975f691630ede80afc4a81007078692da4eaa91839ae0a6e65dc39f3faf4423538f5d9bef37b + checksum: db13a380a51ace30c8ed5947ea1b9fa65f5f5d0dbb722b4abc4d19e4a1215979174f35365c692f9fe7d3c116eaaf90dd9fb58e1dcff4fe943fc76d86c7f1798d languageName: node linkType: hard @@ -16300,142 +15653,142 @@ __metadata: languageName: node linkType: hard -"@smithy/config-resolver@npm:^2.0.16": - version: 2.0.16 - resolution: "@smithy/config-resolver@npm:2.0.16" - dependencies: - "@smithy/node-config-provider": ^2.1.3 - "@smithy/types": ^2.4.0 - "@smithy/util-config-provider": ^2.0.0 - "@smithy/util-middleware": ^2.0.5 - tslib: ^2.5.0 - checksum: d92948bc42e59c451ff0cf5cf803b6cb13c664dd920d43c0f5a647193c93aa3634fa88391e85dad1c159f535432bfdd7653de8450599b4170e4adced2c8c9850 - languageName: node - linkType: hard - -"@smithy/credential-provider-imds@npm:^2.0.0, @smithy/credential-provider-imds@npm:^2.0.18": +"@smithy/config-resolver@npm:^2.0.18": version: 2.0.18 - resolution: "@smithy/credential-provider-imds@npm:2.0.18" + resolution: "@smithy/config-resolver@npm:2.0.18" dependencies: - "@smithy/node-config-provider": ^2.1.3 - "@smithy/property-provider": ^2.0.13 - "@smithy/types": ^2.4.0 - "@smithy/url-parser": ^2.0.12 + "@smithy/node-config-provider": ^2.1.5 + "@smithy/types": ^2.5.0 + "@smithy/util-config-provider": ^2.0.0 + "@smithy/util-middleware": ^2.0.6 tslib: ^2.5.0 - checksum: 12e4a436429b140a2d85e34842d9deb42d7507fe3d3b26070f45f484bf8ecba9ac4fe3f9deb87252f3f6e5ae31d19c9e61147079c69716c2f4bcd0aa4d2c73b8 + checksum: 40d89b243143baf61e2ab7495a97594b33a15ca7b498fc40b04c1b19f754eab95ab840733f6c63e7ac42b282c96d0925d256cdf399c915a0e24e75a7c6258a10 languageName: node linkType: hard -"@smithy/eventstream-codec@npm:^2.0.1, @smithy/eventstream-codec@npm:^2.0.12": - version: 2.0.12 - resolution: "@smithy/eventstream-codec@npm:2.0.12" +"@smithy/credential-provider-imds@npm:^2.0.0, @smithy/credential-provider-imds@npm:^2.1.1": + version: 2.1.1 + resolution: "@smithy/credential-provider-imds@npm:2.1.1" + dependencies: + "@smithy/node-config-provider": ^2.1.5 + "@smithy/property-provider": ^2.0.14 + "@smithy/types": ^2.5.0 + "@smithy/url-parser": ^2.0.13 + tslib: ^2.5.0 + checksum: 110c4185b39849c9baac6355deac959fbe6ff5bfcaeb6cafd6ff3c30b98fffe618d3b08aa2ef538b8f6f1f84e0f56b7f2d7f60c603967f5410768e8da002f8e9 + languageName: node + linkType: hard + +"@smithy/eventstream-codec@npm:^2.0.1, @smithy/eventstream-codec@npm:^2.0.13": + version: 2.0.13 + resolution: "@smithy/eventstream-codec@npm:2.0.13" dependencies: "@aws-crypto/crc32": 3.0.0 - "@smithy/types": ^2.4.0 + "@smithy/types": ^2.5.0 "@smithy/util-hex-encoding": ^2.0.0 tslib: ^2.5.0 - checksum: 38e457645512d06e9b74bdb8b33df8b712e96b97e59b7cd51c9d31686ba71b7f4e094615dedcca7a1790fdb7e52f3e0791af7d7b66ca46e0556544827a311d5b + checksum: fdae10c869061e6335903d9f0d80dbd0bb9fb5af484c97e5c9490a59ce3d27ca0bba8683149ee2dee7045c84c4d8c014b411611164535bb53936e1fef21ed8bc languageName: node linkType: hard -"@smithy/eventstream-serde-browser@npm:^2.0.12": - version: 2.0.12 - resolution: "@smithy/eventstream-serde-browser@npm:2.0.12" +"@smithy/eventstream-serde-browser@npm:^2.0.13": + version: 2.0.13 + resolution: "@smithy/eventstream-serde-browser@npm:2.0.13" dependencies: - "@smithy/eventstream-serde-universal": ^2.0.12 - "@smithy/types": ^2.4.0 + "@smithy/eventstream-serde-universal": ^2.0.13 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: 685d9d874e019d62cacac4d98c19ffbd8496c68efa0968f43f93cbcf3bcaa0db2c5ae060d0550c50bd24a6b1a15ea2b94ce7fed121733bb060dd536b7e618ff6 + checksum: 1107de0ed525cd7cc1315693d8b1601da09c66131b808496f0869324e87e9bced2efc06425dc8761756f4ceca24b6ae9ba7d4fca239fcf49d4fcc5aed93f4421 languageName: node linkType: hard -"@smithy/eventstream-serde-config-resolver@npm:^2.0.12": - version: 2.0.12 - resolution: "@smithy/eventstream-serde-config-resolver@npm:2.0.12" +"@smithy/eventstream-serde-config-resolver@npm:^2.0.13": + version: 2.0.13 + resolution: "@smithy/eventstream-serde-config-resolver@npm:2.0.13" dependencies: - "@smithy/types": ^2.4.0 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: 1fbed5f1b1c5fb8830d9940e2d8d56e1c33dd3ce5e5a79f259f0dacaa8ec6dfa4203163b63e707769e4153d1d17680cbf195690b596a44da6f43a62f66bad1aa + checksum: 29de012f1224ec5b9079088d55f06315be60729a6455aa1b340f6eac05fe53fd07c785d8f1908bdf8a97aa7fb4142a6ebf6715f479bf09c021680b55050c83bc languageName: node linkType: hard -"@smithy/eventstream-serde-node@npm:^2.0.12": - version: 2.0.12 - resolution: "@smithy/eventstream-serde-node@npm:2.0.12" +"@smithy/eventstream-serde-node@npm:^2.0.13": + version: 2.0.13 + resolution: "@smithy/eventstream-serde-node@npm:2.0.13" dependencies: - "@smithy/eventstream-serde-universal": ^2.0.12 - "@smithy/types": ^2.4.0 + "@smithy/eventstream-serde-universal": ^2.0.13 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: 541f57903daa13d78b09b23ac74a6643e8260b4c9afe9375344ccc347c62fdc1fc0c162f763f733b7bd46f8ceb240890cfc89f786bd49efd57cf43d74c9b3f6b + checksum: c83fdaf2ccc42a4f5f0d153adb37dd409cc78c15c1c73608a39af42219a714e30d9e47c3d80f2da1b810643c1964649b8d115e3a706f43b6401c3aab3b8f322f languageName: node linkType: hard -"@smithy/eventstream-serde-universal@npm:^2.0.12": - version: 2.0.12 - resolution: "@smithy/eventstream-serde-universal@npm:2.0.12" +"@smithy/eventstream-serde-universal@npm:^2.0.13": + version: 2.0.13 + resolution: "@smithy/eventstream-serde-universal@npm:2.0.13" dependencies: - "@smithy/eventstream-codec": ^2.0.12 - "@smithy/types": ^2.4.0 + "@smithy/eventstream-codec": ^2.0.13 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: fea8ad03da25f92b0f3a0b20398a410bbf264aad6318b2cea9c8740cd86b1b130f3b52a07fb2b25e82b19eb44d60ec3770b17667a6842d404548e200a085ead9 + checksum: 138fa619e3ae588438fd962a1a12988c8ec22b330d7cc787be75b5ec7650aa5cabec047c8ef0601545d0614d13803f1ec1f2d185f68bface54ccf643c5055075 languageName: node linkType: hard -"@smithy/fetch-http-handler@npm:^2.2.4": - version: 2.2.4 - resolution: "@smithy/fetch-http-handler@npm:2.2.4" +"@smithy/fetch-http-handler@npm:^2.2.6": + version: 2.2.6 + resolution: "@smithy/fetch-http-handler@npm:2.2.6" dependencies: - "@smithy/protocol-http": ^3.0.8 - "@smithy/querystring-builder": ^2.0.12 - "@smithy/types": ^2.4.0 - "@smithy/util-base64": ^2.0.0 + "@smithy/protocol-http": ^3.0.9 + "@smithy/querystring-builder": ^2.0.13 + "@smithy/types": ^2.5.0 + "@smithy/util-base64": ^2.0.1 tslib: ^2.5.0 - checksum: 37b9dfdd35ff4a997de07f3aacdaf4acb3881b3586b3c2bbf27f163066a241d54ce471fe100353e2bea3f3cd71ec8ef57a0a1f78f897e11c9166f75b06902cfc + checksum: 2bc59c5bd9ad5ffe72f1a686853444318118a0ac833acf6029114236804480ac3d9a9d41e0d92cea0263a2aa7d76a82dd8b6850ecfea2e4eeed30e1d8225ccc3 languageName: node linkType: hard -"@smithy/hash-blob-browser@npm:^2.0.12": - version: 2.0.12 - resolution: "@smithy/hash-blob-browser@npm:2.0.12" +"@smithy/hash-blob-browser@npm:^2.0.14": + version: 2.0.14 + resolution: "@smithy/hash-blob-browser@npm:2.0.14" dependencies: "@smithy/chunked-blob-reader": ^2.0.0 - "@smithy/chunked-blob-reader-native": ^2.0.0 - "@smithy/types": ^2.4.0 + "@smithy/chunked-blob-reader-native": ^2.0.1 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: 212dd0200020c13c98efaea4544d81acf286ecebf6b8751b7205797da7b0282b17df1e85385525a479c7d3a1f7fd17100f8083974fb33e220e084f310b86f578 + checksum: c492891d1854ad2ed9a99dbe815b2e5e9970cef45647c770182be47bb715ddf238fae2865af7e4c3f04ffc4e6ce386fe2a6bc211549b2c3dfa2c0eb7b91924a6 languageName: node linkType: hard -"@smithy/hash-node@npm:^2.0.12": - version: 2.0.12 - resolution: "@smithy/hash-node@npm:2.0.12" +"@smithy/hash-node@npm:^2.0.15": + version: 2.0.15 + resolution: "@smithy/hash-node@npm:2.0.15" dependencies: - "@smithy/types": ^2.4.0 + "@smithy/types": ^2.5.0 "@smithy/util-buffer-from": ^2.0.0 - "@smithy/util-utf8": ^2.0.0 + "@smithy/util-utf8": ^2.0.2 tslib: ^2.5.0 - checksum: e2b36a60c812fb716091ea06d205113cdee9ba4dfdd608bb1723e635f9bd53c4f8a9bd038f2c6fb369a91beee3189123925e2543ee373b81a77d62e71170523c + checksum: c3a2efed56ee6f58811d3a87a6e272a9c5fd82db527ea2c72cfe39401b61417676f2d7f952926be7b51ece134e662a8608a4ff4c2c500eb756a91a41384b716e languageName: node linkType: hard -"@smithy/hash-stream-node@npm:^2.0.12": - version: 2.0.12 - resolution: "@smithy/hash-stream-node@npm:2.0.12" +"@smithy/hash-stream-node@npm:^2.0.15": + version: 2.0.15 + resolution: "@smithy/hash-stream-node@npm:2.0.15" dependencies: - "@smithy/types": ^2.4.0 - "@smithy/util-utf8": ^2.0.0 + "@smithy/types": ^2.5.0 + "@smithy/util-utf8": ^2.0.2 tslib: ^2.5.0 - checksum: 83b395ad6e529a23f82ca006597b08e5e83cf35e92b6813624cb8735632f7271e13249ffc687d6c21dbabccec92fc73fcf747e7dd7096d6d913a33d1e6842c7d + checksum: 9588a91c6cfbe65289632a9d4369b340e949b83552311520e1df95d2f06456f8d11be0c6227eb266c96cbc56b7f9b631d75462616544b38fb160a616244a3996 languageName: node linkType: hard -"@smithy/invalid-dependency@npm:^2.0.12": - version: 2.0.12 - resolution: "@smithy/invalid-dependency@npm:2.0.12" +"@smithy/invalid-dependency@npm:^2.0.13": + version: 2.0.13 + resolution: "@smithy/invalid-dependency@npm:2.0.13" dependencies: - "@smithy/types": ^2.4.0 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: 3b8a218ad67d3eca06d1646f21e52bf7704449fec714a0c113ab5db100605b05b37b12facd00b92df1203d5bec66ff4ed5e763691ac7c098b85854f194eefb58 + checksum: f744eb38f5ee77d0b8ef5c57dfabf9befda4626f68808742e8b42754eba05e1def3e2a24e0daf2940b5454f52460af14e871dd8431b0237e87cb300be6704057 languageName: node linkType: hard @@ -16448,161 +15801,161 @@ __metadata: languageName: node linkType: hard -"@smithy/md5-js@npm:^2.0.12": - version: 2.0.12 - resolution: "@smithy/md5-js@npm:2.0.12" +"@smithy/md5-js@npm:^2.0.15": + version: 2.0.15 + resolution: "@smithy/md5-js@npm:2.0.15" dependencies: - "@smithy/types": ^2.4.0 - "@smithy/util-utf8": ^2.0.0 + "@smithy/types": ^2.5.0 + "@smithy/util-utf8": ^2.0.2 tslib: ^2.5.0 - checksum: c6b90d31d89ff386d13b8ecad7aeb2d63fd6b534f0954745b34690fdb4b2520f228769c4ef2967a476a2cd5d6de0151be2998714c5ba1fde2253976012b18fba + checksum: d5a40f063629977201bcf72092ed4e2bfea18134ef693721f69823356a878f919ec4b00b621ee078201167e429e1eb79e1d80c26f03b06d7ee999bfbd882788b languageName: node linkType: hard -"@smithy/middleware-content-length@npm:^2.0.14": - version: 2.0.14 - resolution: "@smithy/middleware-content-length@npm:2.0.14" +"@smithy/middleware-content-length@npm:^2.0.15": + version: 2.0.15 + resolution: "@smithy/middleware-content-length@npm:2.0.15" dependencies: - "@smithy/protocol-http": ^3.0.8 - "@smithy/types": ^2.4.0 + "@smithy/protocol-http": ^3.0.9 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: ff289f3c7ec4dbf53297e5968196444a387ddd3e67cb8426e40cadc096e7a5127e30315520761aa53a98daecfde0e6ecc195a722d4b31b7662f63b3286474224 + checksum: f22a35e175f09b929655eb1445dc0954b2f1580bffc41b91cd01f67bf0e41367e510919f213c239157083b2a25f1aa0b9cc60b1b6832f3e03d4e00ec3228e7cb languageName: node linkType: hard -"@smithy/middleware-endpoint@npm:^2.1.3": - version: 2.1.3 - resolution: "@smithy/middleware-endpoint@npm:2.1.3" +"@smithy/middleware-endpoint@npm:^2.2.0": + version: 2.2.0 + resolution: "@smithy/middleware-endpoint@npm:2.2.0" dependencies: - "@smithy/middleware-serde": ^2.0.12 - "@smithy/node-config-provider": ^2.1.3 - "@smithy/shared-ini-file-loader": ^2.2.2 - "@smithy/types": ^2.4.0 - "@smithy/url-parser": ^2.0.12 - "@smithy/util-middleware": ^2.0.5 + "@smithy/middleware-serde": ^2.0.13 + "@smithy/node-config-provider": ^2.1.5 + "@smithy/shared-ini-file-loader": ^2.2.4 + "@smithy/types": ^2.5.0 + "@smithy/url-parser": ^2.0.13 + "@smithy/util-middleware": ^2.0.6 tslib: ^2.5.0 - checksum: 62dfcb031bccb575a33f04ca8d684634eb03585530b28ffe759242dc13fef7e11755673d3d7d1be15a90f933f579614bc78d83dad0747e3bf344c60cb2212d92 + checksum: 2cf37d0859b2bb24deeca9e9907be38f120be56967970c0adbb443a9e126fd9889012b2d871df1fa1a1b2367f80b097f3f152d6bf8e4fdaf01fc6c714a1cc963 languageName: node linkType: hard -"@smithy/middleware-retry@npm:^2.0.18": - version: 2.0.18 - resolution: "@smithy/middleware-retry@npm:2.0.18" +"@smithy/middleware-retry@npm:^2.0.20": + version: 2.0.20 + resolution: "@smithy/middleware-retry@npm:2.0.20" dependencies: - "@smithy/node-config-provider": ^2.1.3 - "@smithy/protocol-http": ^3.0.8 - "@smithy/service-error-classification": ^2.0.5 - "@smithy/types": ^2.4.0 - "@smithy/util-middleware": ^2.0.5 - "@smithy/util-retry": ^2.0.5 + "@smithy/node-config-provider": ^2.1.5 + "@smithy/protocol-http": ^3.0.9 + "@smithy/service-error-classification": ^2.0.6 + "@smithy/types": ^2.5.0 + "@smithy/util-middleware": ^2.0.6 + "@smithy/util-retry": ^2.0.6 tslib: ^2.5.0 uuid: ^8.3.2 - checksum: 7372232d35fbff0f770e4ec608940c81a776040971556e3a328980ebcceb9f9469eb09e5d6014811c42759c77653ded4cbbccc21b7c26f3405c7299062a523b3 + checksum: 8b76aaeba90dd80409a615f5c866ae8490b537bcc21c0bb5371026a891b7c74ac0a1647175bd1752b2c3d6a1b443eddddf2dc093b24da585d924e957dea18113 languageName: node linkType: hard -"@smithy/middleware-serde@npm:^2.0.12": - version: 2.0.12 - resolution: "@smithy/middleware-serde@npm:2.0.12" - dependencies: - "@smithy/types": ^2.4.0 - tslib: ^2.5.0 - checksum: 5e8b04511c017bcadbf1a6efc6c71588586cabaa130df10562a74159d128e56965581799e80a0645557bab03df8bea187b21cb1fd536e17cf73148e5b678925f - languageName: node - linkType: hard - -"@smithy/middleware-stack@npm:^2.0.6": - version: 2.0.6 - resolution: "@smithy/middleware-stack@npm:2.0.6" - dependencies: - "@smithy/types": ^2.4.0 - tslib: ^2.5.0 - checksum: 3626b71364b83d091751cd6ad7f7bc655a1746f970c63ea3205c2bc171a596a734394d556fcf66f1458b8151fe54cab5bf774ee66b4d40c3dd9d9e7d9114f905 - languageName: node - linkType: hard - -"@smithy/node-config-provider@npm:^2.1.3, @smithy/node-config-provider@npm:^2.1.4": - version: 2.1.4 - resolution: "@smithy/node-config-provider@npm:2.1.4" - dependencies: - "@smithy/property-provider": ^2.0.13 - "@smithy/shared-ini-file-loader": ^2.2.3 - "@smithy/types": ^2.4.0 - tslib: ^2.5.0 - checksum: 17e8c029dddf77f568973d8b6ffd0abeec3d1914b4634e2e31b4b3f5908a92461b22876f712ad05cbf7eb2b77ee96c40b768a76104a78b17ffb3792673d8c58f - languageName: node - linkType: hard - -"@smithy/node-http-handler@npm:^2.1.7, @smithy/node-http-handler@npm:^2.1.8": - version: 2.1.8 - resolution: "@smithy/node-http-handler@npm:2.1.8" - dependencies: - "@smithy/abort-controller": ^2.0.12 - "@smithy/protocol-http": ^3.0.8 - "@smithy/querystring-builder": ^2.0.12 - "@smithy/types": ^2.4.0 - tslib: ^2.5.0 - checksum: 17e51b8c0b2dc7dcf7e32bc2cbd836220f86355b4d630f0b94fad4ed79dfa737b4ecbb7c72752b59e6849ca342c4a3ade89846e0276d986a72d25ed280ce3a8c - languageName: node - linkType: hard - -"@smithy/property-provider@npm:^2.0.0, @smithy/property-provider@npm:^2.0.13": +"@smithy/middleware-serde@npm:^2.0.13": version: 2.0.13 - resolution: "@smithy/property-provider@npm:2.0.13" + resolution: "@smithy/middleware-serde@npm:2.0.13" dependencies: - "@smithy/types": ^2.4.0 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: 62443ec94d4dafaa0c2f285957264b3b548fd5a164ebd1ef02e4286c55d3e07e4d22d695fc2857ad0b1e406d01bf27271e9d7c3c05465638da0226ae4305d3d7 + checksum: 549bdc9d2a79ee746572d631c0f10f700fa251a46ca289271ce1904027b483ac617f2e01c43b3f7f202395588f6607f436b32930318a83ecd6004a0b869ccf09 languageName: node linkType: hard -"@smithy/protocol-http@npm:^3.0.8": - version: 3.0.8 - resolution: "@smithy/protocol-http@npm:3.0.8" +"@smithy/middleware-stack@npm:^2.0.7": + version: 2.0.7 + resolution: "@smithy/middleware-stack@npm:2.0.7" dependencies: - "@smithy/types": ^2.4.0 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: deb4f7d863bcc67724555b3a1ffb8e605a3df63cde9f40234813f072184bb68f5c33388c1934f56576b08a877bb8c9c0bfb849deb0526b55a9410678040fa019 + checksum: 46405edb32290c1d6e291352a943687afcdacbaea413494f86b61b99b7a85ffc8f8f5aaf58f14ecc3c7cd80535231047d748e5d9ee3c38cd1b02c20daea938aa languageName: node linkType: hard -"@smithy/querystring-builder@npm:^2.0.12": - version: 2.0.12 - resolution: "@smithy/querystring-builder@npm:2.0.12" +"@smithy/node-config-provider@npm:^2.1.5": + version: 2.1.5 + resolution: "@smithy/node-config-provider@npm:2.1.5" dependencies: - "@smithy/types": ^2.4.0 + "@smithy/property-provider": ^2.0.14 + "@smithy/shared-ini-file-loader": ^2.2.4 + "@smithy/types": ^2.5.0 + tslib: ^2.5.0 + checksum: 813a0b0fa9758cc181074e1b3c1d7d3a9598e7bbbbed5da24eb38ec3053a8c00d675ee293d245d84cb601ade2e83e3faa054e68131307973419f93828abeb780 + languageName: node + linkType: hard + +"@smithy/node-http-handler@npm:^2.1.7, @smithy/node-http-handler@npm:^2.1.9": + version: 2.1.10 + resolution: "@smithy/node-http-handler@npm:2.1.10" + dependencies: + "@smithy/abort-controller": ^2.0.14 + "@smithy/protocol-http": ^3.0.10 + "@smithy/querystring-builder": ^2.0.14 + "@smithy/types": ^2.6.0 + tslib: ^2.5.0 + checksum: b24a3d2ebf87458f92274ba099af05a1a8d933d8df3767ab5d3baf273890c1cfd4be291b06b5323e5119898ba07e88a1f257b8970f7e75fc8944b7071090fa55 + languageName: node + linkType: hard + +"@smithy/property-provider@npm:^2.0.0, @smithy/property-provider@npm:^2.0.14": + version: 2.0.14 + resolution: "@smithy/property-provider@npm:2.0.14" + dependencies: + "@smithy/types": ^2.5.0 + tslib: ^2.5.0 + checksum: 44cd1b4eeb07be4b88c6a2e8a1f4cd6b56e40f1f457b64f596fc2f46ce7c4991230b0c9654cb4489f93897678b81457a1cac104f566d9856cfbc92a66efa1a2e + languageName: node + linkType: hard + +"@smithy/protocol-http@npm:^3.0.10, @smithy/protocol-http@npm:^3.0.9": + version: 3.0.10 + resolution: "@smithy/protocol-http@npm:3.0.10" + dependencies: + "@smithy/types": ^2.6.0 + tslib: ^2.5.0 + checksum: 77bda5c76e00e0fee6a0654d10a0127287402484522dcdcb0eda84a6be196304301a68d263ba27639fb288dbcbb891bfa3efa50a24ea9a9878915a0e1ddc8620 + languageName: node + linkType: hard + +"@smithy/querystring-builder@npm:^2.0.13, @smithy/querystring-builder@npm:^2.0.14": + version: 2.0.14 + resolution: "@smithy/querystring-builder@npm:2.0.14" + dependencies: + "@smithy/types": ^2.6.0 "@smithy/util-uri-escape": ^2.0.0 tslib: ^2.5.0 - checksum: d7d0608ac14d8ccd2b418743fc91be9c77b75a302a7552f666a81454fa1764e2162fb2c2f7655cf24045ae44416252362111b9612ea9759dbc1f27f75a71aa42 + checksum: e1287709055abd016b214e4cede9d976a63aa73aff8f3092db60a0fe7e103f7a1294bdedf39a7bbea4b2bf1b959682cbcf8e078ca0489a8a58b8b5706679b55d languageName: node linkType: hard -"@smithy/querystring-parser@npm:^2.0.12": - version: 2.0.12 - resolution: "@smithy/querystring-parser@npm:2.0.12" +"@smithy/querystring-parser@npm:^2.0.13": + version: 2.0.13 + resolution: "@smithy/querystring-parser@npm:2.0.13" dependencies: - "@smithy/types": ^2.4.0 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: 889dad387fda7db289d0360cbc38901d2c726d164c56915c76ee125bb8059f8a86e28442841000112c3b8a5a3c7701da391f961350969ea5242c6cdf55f296cf + checksum: aaaa21dcdaa44d5d3d734512e3fe8591fff9713dc32da129aa836d938f5469286952eba997adc68fb2f9d8655b0e02a4bba7a6163ff22f799880c913b74396dd languageName: node linkType: hard -"@smithy/service-error-classification@npm:^2.0.5": - version: 2.0.5 - resolution: "@smithy/service-error-classification@npm:2.0.5" +"@smithy/service-error-classification@npm:^2.0.6": + version: 2.0.6 + resolution: "@smithy/service-error-classification@npm:2.0.6" dependencies: - "@smithy/types": ^2.4.0 - checksum: cd4b9fcc5cd940035ca4f3e832f8480d75eb81c90501bdb5c9295c5fd26487ca2e2f3d3efa9a322faeaedf10d6d8324327cd3341fc05d38f8605006ad836abaa + "@smithy/types": ^2.5.0 + checksum: 07be989a2d3e17e14f8c7824bf9342632ec5ed1e4e0b4f2d242442f49a50058db5cbb7b8419b684126bf5c4ba08f6bce3360f43d73bd2def15771a1af7c1c95f languageName: node linkType: hard -"@smithy/shared-ini-file-loader@npm:^2.0.6, @smithy/shared-ini-file-loader@npm:^2.2.2, @smithy/shared-ini-file-loader@npm:^2.2.3": - version: 2.2.3 - resolution: "@smithy/shared-ini-file-loader@npm:2.2.3" +"@smithy/shared-ini-file-loader@npm:^2.0.6, @smithy/shared-ini-file-loader@npm:^2.2.4": + version: 2.2.4 + resolution: "@smithy/shared-ini-file-loader@npm:2.2.4" dependencies: - "@smithy/types": ^2.4.0 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: b80e0a194fb2e04a2c8868b8098083d4e2efbe33f1a59a325c0afb6e676a5825e8346d7dc8078ce88f0aacd82d9516e4c1eab7a6b6d636c7f91591c0627a4af4 + checksum: 790cc9c1e0d39ec179fcb97f612205770112ed14fa6626b2dee81ef140d6fa0d89a87825ccddda35475f9de9e6b8b70228565b2ed90c1487de20b603cc79505a languageName: node linkType: hard @@ -16622,15 +15975,15 @@ __metadata: languageName: node linkType: hard -"@smithy/smithy-client@npm:^2.1.12": - version: 2.1.12 - resolution: "@smithy/smithy-client@npm:2.1.12" +"@smithy/smithy-client@npm:^2.1.15": + version: 2.1.15 + resolution: "@smithy/smithy-client@npm:2.1.15" dependencies: - "@smithy/middleware-stack": ^2.0.6 - "@smithy/types": ^2.4.0 - "@smithy/util-stream": ^2.0.17 + "@smithy/middleware-stack": ^2.0.7 + "@smithy/types": ^2.5.0 + "@smithy/util-stream": ^2.0.20 tslib: ^2.5.0 - checksum: 9e2944a9c753511777468ec40a3295e5351d08349258a57b70dfc9a96e882efed6075eb7fd3c0494fa07279bdefdfad2e5aecf7930685c656131a97d56aae209 + checksum: ad9aa105748866f22147d5e357759edd4cc4e263269b50ad4d9d2f4ec211297d90bd768cd4f182eb8230a32134166b38532b24a8884589e75c417a6e964eaa6d languageName: node linkType: hard @@ -16643,33 +15996,33 @@ __metadata: languageName: node linkType: hard -"@smithy/types@npm:^2.0.2, @smithy/types@npm:^2.4.0": - version: 2.4.0 - resolution: "@smithy/types@npm:2.4.0" +"@smithy/types@npm:^2.0.2, @smithy/types@npm:^2.5.0, @smithy/types@npm:^2.6.0": + version: 2.6.0 + resolution: "@smithy/types@npm:2.6.0" dependencies: tslib: ^2.5.0 - checksum: 936690f8ba9323c05a1046102f83d7ed76c5c2f2405ca22e8bfed8d66a5ba12d74a187c10d93b085d6822b98edaec7b6309a4401f036099bf239a0bf5cdcf00d + checksum: 9233d1e6e414a8b807f9fe7a7c30064626f77b0242d8634b9b1c192f77b27a997a3caf90ecf7f4361d5926c9e9cc761991eecfb47bbfa6ce2be21c5533a3bea6 languageName: node linkType: hard -"@smithy/url-parser@npm:^2.0.12": - version: 2.0.12 - resolution: "@smithy/url-parser@npm:2.0.12" +"@smithy/url-parser@npm:^2.0.13": + version: 2.0.13 + resolution: "@smithy/url-parser@npm:2.0.13" dependencies: - "@smithy/querystring-parser": ^2.0.12 - "@smithy/types": ^2.4.0 + "@smithy/querystring-parser": ^2.0.13 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: 40324cee758137342573e9f7bf685bc7c3f8284ff2f15d3c68a244dacf26f62cd92b234f220ddfc2963038ef766dd73c3f70642c592a49bd10432c5432fb1ab6 + checksum: 96b64d0740aa8ce365316a361f5549c55fee92218e6d5673750ce8036bb68a9c200f2a39a945e548815c5206a5f28cb0022155e60d357fbb4a6bb41381d4b622 languageName: node linkType: hard -"@smithy/util-base64@npm:^2.0.0": - version: 2.0.0 - resolution: "@smithy/util-base64@npm:2.0.0" +"@smithy/util-base64@npm:^2.0.1": + version: 2.0.1 + resolution: "@smithy/util-base64@npm:2.0.1" dependencies: "@smithy/util-buffer-from": ^2.0.0 tslib: ^2.5.0 - checksum: 52124a684dfac853288acd2a0ffff02559c21bf7faaa3db58a914e4acb4b1f7925fd48593e7545db87f8f962250824d1249dc8be645ecbd2c1dd1728cfe1069b + checksum: 6320916b50a0f4048462564cbc413e619ee02747e188463721670ce554d0b1652517068a1aa066209101a2185b4f3d13afd0c173aac99c461ca685a1fa15f934 languageName: node linkType: hard @@ -16710,42 +16063,42 @@ __metadata: languageName: node linkType: hard -"@smithy/util-defaults-mode-browser@npm:^2.0.16": - version: 2.0.16 - resolution: "@smithy/util-defaults-mode-browser@npm:2.0.16" +"@smithy/util-defaults-mode-browser@npm:^2.0.19": + version: 2.0.19 + resolution: "@smithy/util-defaults-mode-browser@npm:2.0.19" dependencies: - "@smithy/property-provider": ^2.0.13 - "@smithy/smithy-client": ^2.1.12 - "@smithy/types": ^2.4.0 + "@smithy/property-provider": ^2.0.14 + "@smithy/smithy-client": ^2.1.15 + "@smithy/types": ^2.5.0 bowser: ^2.11.0 tslib: ^2.5.0 - checksum: 8dae0256e89c13ab7bcd791fe336124adc17d95401ceb7152784a809ed9ba09a639573c1ce2bf32b12964f7181aeb2cdfc283d820301f2b3a82ef4906fe83280 + checksum: 13b1f9fed2a9bbb9f755b192e1ddaccdb5624f104f89c0f0404c48ad1eafb006733f9b930692e50261c8479821cdcce08cfb71771ea5c0d112638bd4d23ba24d languageName: node linkType: hard -"@smithy/util-defaults-mode-node@npm:^2.0.21": - version: 2.0.21 - resolution: "@smithy/util-defaults-mode-node@npm:2.0.21" +"@smithy/util-defaults-mode-node@npm:^2.0.25": + version: 2.0.25 + resolution: "@smithy/util-defaults-mode-node@npm:2.0.25" dependencies: - "@smithy/config-resolver": ^2.0.16 - "@smithy/credential-provider-imds": ^2.0.18 - "@smithy/node-config-provider": ^2.1.3 - "@smithy/property-provider": ^2.0.13 - "@smithy/smithy-client": ^2.1.12 - "@smithy/types": ^2.4.0 + "@smithy/config-resolver": ^2.0.18 + "@smithy/credential-provider-imds": ^2.1.1 + "@smithy/node-config-provider": ^2.1.5 + "@smithy/property-provider": ^2.0.14 + "@smithy/smithy-client": ^2.1.15 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: ce2643ad99181b91b4eb00f2b2b34d12ff006ac1770333ae62541cfc7b98b873e233933d483d7bb0a443a8155debd94731a1df0f4cc572e6cc5ddbf97416e2d7 + checksum: 8e82f7f0c4260475e172f5baaf449155150c7d5ccb7939ccee3a061831b58998c55046cfd89761c06e43637e3e50805ca38277c5410f59b0906323e748285b80 languageName: node linkType: hard -"@smithy/util-endpoints@npm:^1.0.2": - version: 1.0.3 - resolution: "@smithy/util-endpoints@npm:1.0.3" +"@smithy/util-endpoints@npm:^1.0.4": + version: 1.0.4 + resolution: "@smithy/util-endpoints@npm:1.0.4" dependencies: - "@smithy/node-config-provider": ^2.1.4 - "@smithy/types": ^2.4.0 + "@smithy/node-config-provider": ^2.1.5 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: 474431360e6659c048a082e6e52af65bc1075b294191a187021b13191b2cb5001ddb7839696e3c5dfd16fb6ec3729c20735f41d803d2faf6a50ace96d57c566f + checksum: 8c121070c0207b728e498a9d0b6082fcc83098b0ab33fde9b0b2db1bef724affc8712d9ae251bc155f595b7ca61a61529b519597c549808129d51bfdef9ad119 languageName: node linkType: hard @@ -16758,40 +16111,40 @@ __metadata: languageName: node linkType: hard -"@smithy/util-middleware@npm:^2.0.0, @smithy/util-middleware@npm:^2.0.5": - version: 2.0.5 - resolution: "@smithy/util-middleware@npm:2.0.5" +"@smithy/util-middleware@npm:^2.0.0, @smithy/util-middleware@npm:^2.0.6": + version: 2.0.6 + resolution: "@smithy/util-middleware@npm:2.0.6" dependencies: - "@smithy/types": ^2.4.0 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: 9d001723e7472c0d78619320235f66d1de42f16e13d1189697f8e447d05643047ab97965525b147eaafbb0e169563ecb5b806da2d02bd4ce0b652b72df4d9131 + checksum: bf31193bbd08691c23e18da069fe95e2e989fcfde87133d183d469dc6e34d76918d56d68f5e5ff15d4f58575e7426ca6f952d248e51421739a2968c51e42e5b7 languageName: node linkType: hard -"@smithy/util-retry@npm:^2.0.5": - version: 2.0.5 - resolution: "@smithy/util-retry@npm:2.0.5" +"@smithy/util-retry@npm:^2.0.6": + version: 2.0.6 + resolution: "@smithy/util-retry@npm:2.0.6" dependencies: - "@smithy/service-error-classification": ^2.0.5 - "@smithy/types": ^2.4.0 + "@smithy/service-error-classification": ^2.0.6 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: e7169b458a9c194104e16014b2829deddb9ee4175fd17bd933d0ab9ec9df065cf23816b605eafb6604da1111e3280c5fea4da98dd8ec5f5f3e1c30e166119808 + checksum: c37d163f83981ca58c7d924b178a09e18abc915ffb5efb20fcc4e662ad909938296fd295244ed84a209e84e56d66a629a9eba655306ca401c1a3b91c4433ff22 languageName: node linkType: hard -"@smithy/util-stream@npm:^2.0.17": - version: 2.0.17 - resolution: "@smithy/util-stream@npm:2.0.17" +"@smithy/util-stream@npm:^2.0.20": + version: 2.0.20 + resolution: "@smithy/util-stream@npm:2.0.20" dependencies: - "@smithy/fetch-http-handler": ^2.2.4 - "@smithy/node-http-handler": ^2.1.8 - "@smithy/types": ^2.4.0 - "@smithy/util-base64": ^2.0.0 + "@smithy/fetch-http-handler": ^2.2.6 + "@smithy/node-http-handler": ^2.1.9 + "@smithy/types": ^2.5.0 + "@smithy/util-base64": ^2.0.1 "@smithy/util-buffer-from": ^2.0.0 "@smithy/util-hex-encoding": ^2.0.0 - "@smithy/util-utf8": ^2.0.0 + "@smithy/util-utf8": ^2.0.2 tslib: ^2.5.0 - checksum: acd68f7b092fdf3560f5d88f3f81d1bfab4c634f8b7acd8eca1993c8ce789d9652d23048c9e891a42dd12dd71e7a9756b9879ae95fccd1cd92f7ad8204c97d68 + checksum: 24aeaa4cbb69c1faecf35a5c15631beae92742b0deb140fd565053aa995bd5587fef3150e58cc87d16896bf35ebefd5afcc894daee0dde4d44deafd4a158ff22 languageName: node linkType: hard @@ -16804,24 +16157,24 @@ __metadata: languageName: node linkType: hard -"@smithy/util-utf8@npm:^2.0.0": - version: 2.0.0 - resolution: "@smithy/util-utf8@npm:2.0.0" +"@smithy/util-utf8@npm:^2.0.0, @smithy/util-utf8@npm:^2.0.2": + version: 2.0.2 + resolution: "@smithy/util-utf8@npm:2.0.2" dependencies: "@smithy/util-buffer-from": ^2.0.0 tslib: ^2.5.0 - checksum: bc8cda84f85b513380a61352635b306ae50d3b92974454db32835b39bbaa38150332b89346098ba9dea2e0002e2963fcbdd622bc9b3eec7b7ea8fa3f8c7ce737 + checksum: e38fd6324ca2858f76fb6fce427c03faec599213acf95a5b18eb77b72cdf9327bd688e5a260dbccc0f512ea5426422ed200122a9542c00b14a6d9becc3f84c79 languageName: node linkType: hard -"@smithy/util-waiter@npm:^2.0.12": - version: 2.0.12 - resolution: "@smithy/util-waiter@npm:2.0.12" +"@smithy/util-waiter@npm:^2.0.13": + version: 2.0.13 + resolution: "@smithy/util-waiter@npm:2.0.13" dependencies: - "@smithy/abort-controller": ^2.0.12 - "@smithy/types": ^2.4.0 + "@smithy/abort-controller": ^2.0.13 + "@smithy/types": ^2.5.0 tslib: ^2.5.0 - checksum: af35c36a58585472aae9e06ea000a113110f22bed179687213336a014b002deb867cb094f9cb01bc43856235df05517baf08009b3b929a48b48f964c426c1ffc + checksum: 1325887f9002b9f08c5cfcabcf35ce4488b4c2d009333955a166b27aa40b149a19f8359fdd8b265995409f64686bfb3aa02eb7bc18aea15aaa8d309d640107a5 languageName: node linkType: hard @@ -16888,7 +16241,7 @@ __metadata: languageName: node linkType: hard -"@stoplight/json-ref-readers@npm:1.2.2": +"@stoplight/json-ref-readers@npm:1.2.2, @stoplight/json-ref-readers@npm:^1.2.2": version: 1.2.2 resolution: "@stoplight/json-ref-readers@npm:1.2.2" dependencies: @@ -16898,11 +16251,11 @@ __metadata: languageName: node linkType: hard -"@stoplight/json-ref-resolver@npm:~3.1.5": - version: 3.1.5 - resolution: "@stoplight/json-ref-resolver@npm:3.1.5" +"@stoplight/json-ref-resolver@npm:^3.1.5, @stoplight/json-ref-resolver@npm:~3.1.6": + version: 3.1.6 + resolution: "@stoplight/json-ref-resolver@npm:3.1.6" dependencies: - "@stoplight/json": ^3.17.0 + "@stoplight/json": ^3.21.0 "@stoplight/path": ^1.3.2 "@stoplight/types": ^12.3.0 || ^13.0.0 "@types/urijs": ^1.19.19 @@ -16910,13 +16263,13 @@ __metadata: fast-memoize: ^2.5.2 immer: ^9.0.6 lodash: ^4.17.21 - tslib: ^2.3.1 + tslib: ^2.6.0 urijs: ^1.19.11 - checksum: b2df82e899717ffa7bab9ec4c380f206511b3971d242724afd34e8b964e5aa7be2a52e32ba48d435548a9ac13a63a2271ca69182abec8506fc3bb3cc129f6380 + checksum: 57c944cc8cee51b18fd8165aae7431eddf3b6ca96f2de7a264d890f18a869e5abb7750d48a77455ee1c688ac440efa4115bc8e912efce7c83140834bae49879e languageName: node linkType: hard -"@stoplight/json@npm:^3.17.0, @stoplight/json@npm:^3.17.1, @stoplight/json@npm:~3.21.0": +"@stoplight/json@npm:^3.17.0, @stoplight/json@npm:^3.17.1, @stoplight/json@npm:^3.20.2, @stoplight/json@npm:^3.21.0, @stoplight/json@npm:~3.21.0": version: 3.21.0 resolution: "@stoplight/json@npm:3.21.0" dependencies: @@ -16944,7 +16297,7 @@ __metadata: languageName: node linkType: hard -"@stoplight/spectral-core@npm:^1.15.1, @stoplight/spectral-core@npm:^1.18.0, @stoplight/spectral-core@npm:^1.7.0, @stoplight/spectral-core@npm:^1.8.0, @stoplight/spectral-core@npm:^1.8.1": +"@stoplight/spectral-core@npm:^1.15.1, @stoplight/spectral-core@npm:^1.16.1, @stoplight/spectral-core@npm:^1.18.0, @stoplight/spectral-core@npm:^1.7.0, @stoplight/spectral-core@npm:^1.8.0, @stoplight/spectral-core@npm:^1.8.1": version: 1.18.3 resolution: "@stoplight/spectral-core@npm:1.18.3" dependencies: @@ -17035,16 +16388,16 @@ __metadata: languageName: node linkType: hard -"@stoplight/spectral-ref-resolver@npm:^1.0.0": - version: 1.0.3 - resolution: "@stoplight/spectral-ref-resolver@npm:1.0.3" +"@stoplight/spectral-ref-resolver@npm:^1.0.0, @stoplight/spectral-ref-resolver@npm:^1.0.3": + version: 1.0.4 + resolution: "@stoplight/spectral-ref-resolver@npm:1.0.4" dependencies: "@stoplight/json-ref-readers": 1.2.2 - "@stoplight/json-ref-resolver": ~3.1.5 + "@stoplight/json-ref-resolver": ~3.1.6 "@stoplight/spectral-runtime": ^1.1.2 dependency-graph: 0.11.0 tslib: ^2.3.1 - checksum: efe93b1d1d32647b675c221530ecb20c55303dfcd1009efd8e036f6415eb1255fff19781358a74046160516a7b7088b6329885bb507a444c14db32fa23392bc9 + checksum: 1e9b2e211d2724e0bab7d817a5128f7b6cab9f0f5281d07223ace1d541a51a0eb3901b9f7b02d4b0484df1cb2a3f7239ec33a974321438d3d08ce7996fd6fcc4 languageName: node linkType: hard @@ -17095,7 +16448,7 @@ __metadata: languageName: node linkType: hard -"@stoplight/types@npm:^12.3.0 || ^13.0.0, @stoplight/types@npm:^13.0.0, @stoplight/types@npm:^13.14.0, @stoplight/types@npm:^13.15.0, @stoplight/types@npm:^13.6.0": +"@stoplight/types@npm:^12.3.0 || ^13.0.0, @stoplight/types@npm:^13.0.0, @stoplight/types@npm:^13.12.0, @stoplight/types@npm:^13.14.0, @stoplight/types@npm:^13.15.0, @stoplight/types@npm:^13.6.0": version: 13.20.0 resolution: "@stoplight/types@npm:13.20.0" dependencies: @@ -17761,90 +17114,82 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-darwin-arm64@npm:1.3.96" +"@swc/core-darwin-arm64@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-darwin-arm64@npm:1.3.99" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-darwin-x64@npm:1.3.96" +"@swc/core-darwin-x64@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-darwin-x64@npm:1.3.99" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.96" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@swc/core-linux-arm64-gnu@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.96" +"@swc/core-linux-arm64-gnu@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.99" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.96" +"@swc/core-linux-arm64-musl@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.99" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.96" +"@swc/core-linux-x64-gnu@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.99" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-linux-x64-musl@npm:1.3.96" +"@swc/core-linux-x64-musl@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-linux-x64-musl@npm:1.3.99" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.96" +"@swc/core-win32-arm64-msvc@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.99" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.96" +"@swc/core-win32-ia32-msvc@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.99" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.96": - version: 1.3.96 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.96" +"@swc/core-win32-x64-msvc@npm:1.3.99": + version: 1.3.99 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.99" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.46": - version: 1.3.96 - resolution: "@swc/core@npm:1.3.96" + version: 1.3.99 + resolution: "@swc/core@npm:1.3.99" dependencies: - "@swc/core-darwin-arm64": 1.3.96 - "@swc/core-darwin-x64": 1.3.96 - "@swc/core-linux-arm-gnueabihf": 1.3.96 - "@swc/core-linux-arm64-gnu": 1.3.96 - "@swc/core-linux-arm64-musl": 1.3.96 - "@swc/core-linux-x64-gnu": 1.3.96 - "@swc/core-linux-x64-musl": 1.3.96 - "@swc/core-win32-arm64-msvc": 1.3.96 - "@swc/core-win32-ia32-msvc": 1.3.96 - "@swc/core-win32-x64-msvc": 1.3.96 + "@swc/core-darwin-arm64": 1.3.99 + "@swc/core-darwin-x64": 1.3.99 + "@swc/core-linux-arm64-gnu": 1.3.99 + "@swc/core-linux-arm64-musl": 1.3.99 + "@swc/core-linux-x64-gnu": 1.3.99 + "@swc/core-linux-x64-musl": 1.3.99 + "@swc/core-win32-arm64-msvc": 1.3.99 + "@swc/core-win32-ia32-msvc": 1.3.99 + "@swc/core-win32-x64-msvc": 1.3.99 "@swc/counter": ^0.1.1 "@swc/types": ^0.1.5 peerDependencies: @@ -17854,8 +17199,6 @@ __metadata: optional: true "@swc/core-darwin-x64": optional: true - "@swc/core-linux-arm-gnueabihf": - optional: true "@swc/core-linux-arm64-gnu": optional: true "@swc/core-linux-arm64-musl": @@ -17873,7 +17216,7 @@ __metadata: peerDependenciesMeta: "@swc/helpers": optional: true - checksum: 41d4a4461b2952aaf8d3be945d373d0f3bd126115ee1aad0f76f2690e2b5635b6ec5bb54a7638deb9afedb1ad6f7d8453468a704e54e5fbb8234dd4a43b80205 + checksum: a4d51e650913045fe3100195b053dafb55dc06fcadd4a9381712c64f09a75d548596bb1a96e8ed84ba0199f701e821a381a25db82c1016cdd731e0077a83192e languageName: node linkType: hard @@ -18059,8 +17402,8 @@ __metadata: linkType: hard "@testing-library/react@npm:^14.0.0": - version: 14.1.0 - resolution: "@testing-library/react@npm:14.1.0" + version: 14.1.2 + resolution: "@testing-library/react@npm:14.1.2" dependencies: "@babel/runtime": ^7.12.5 "@testing-library/dom": ^9.0.0 @@ -18068,7 +17411,7 @@ __metadata: peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: e76681911947f0981a1a72802ea01abeacdc4973c62deaf19c206cb9ff8d23eff5e3888c572303614686f029ee8a2a2dad6d0f0a9fb222944dbd9e0ea573b248 + checksum: 0269903e53412cf96fddb55c8a97a9987a89c3308d71fa1418fe61c47d275445e7044c5387f57cf39b8cda319a41623dbad2cce7a17016aed3a9e85185aac75a languageName: node linkType: hard @@ -18128,15 +17471,15 @@ __metadata: languageName: node linkType: hard -"@ts-morph/common@npm:~0.18.0": - version: 0.18.1 - resolution: "@ts-morph/common@npm:0.18.1" +"@ts-morph/common@npm:~0.21.0": + version: 0.21.0 + resolution: "@ts-morph/common@npm:0.21.0" dependencies: fast-glob: ^3.2.12 - minimatch: ^5.1.0 - mkdirp: ^1.0.4 + minimatch: ^7.4.3 + mkdirp: ^2.1.6 path-browserify: ^1.0.1 - checksum: 848fff5f7a6428d7c2f055de20cf8df864a967aac0cc03adc558d853442085a8fd9dec70429da24d67d263794b315edb0791c46d23ad9ae513251a7702df8031 + checksum: c322e2a58608d7d924646b10ba9ad432b03e7b119788c9f0f270550bd5aca22947fcaa1c63f27e80898a50de3ed99fc8d9c23569c6a2f3f36c9307e35ceba3ed languageName: node linkType: hard @@ -18216,16 +17559,16 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.20.3": - version: 7.20.3 - resolution: "@types/babel__core@npm:7.20.3" +"@types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.20.4": + version: 7.20.4 + resolution: "@types/babel__core@npm:7.20.4" dependencies: "@babel/parser": ^7.20.7 "@babel/types": ^7.20.7 "@types/babel__generator": "*" "@types/babel__template": "*" "@types/babel__traverse": "*" - checksum: 8d14acc14d99b4b8bf36c00da368f6d597bd9ae3344aa7048f83f0f701b0463fa7c7bf2e50c3e4382fdbcfd1e4187b3452a0f0888b0f3ae8fad975591f7bdb94 + checksum: 75ed6072213423d2b827740d68bbf96f5a7050ce8bd842dde0ceec8d352d06e847166bac757df4beba55525b65f8727c0432adeb5cb4f83aa42e155ac555767e languageName: node linkType: hard @@ -18343,11 +17686,11 @@ __metadata: linkType: hard "@types/codemirror@npm:^5.0.0, @types/codemirror@npm:^5.60.8": - version: 5.60.13 - resolution: "@types/codemirror@npm:5.60.13" + version: 5.60.15 + resolution: "@types/codemirror@npm:5.60.15" dependencies: "@types/tern": "*" - checksum: 48d5ca1fa01f1e89f4c5ad4030e3d63780bebc3d3285b1a5beb0dc9038c306879c2fc089e39174b2b4bcd0b37ee858b38c7cc270ce9e5c71dd80dcd85eecc54d + checksum: cfad3f569de48fba3efa44fdfeba77933e231486a52cc80cff7ce6eeeed5b447a5bc2b11e2226bc00ccee332c661e53e35a15cf14eb835f434a6a402d9462f5f languageName: node linkType: hard @@ -18402,11 +17745,11 @@ __metadata: linkType: hard "@types/concat-stream@npm:^2.0.0": - version: 2.0.2 - resolution: "@types/concat-stream@npm:2.0.2" + version: 2.0.3 + resolution: "@types/concat-stream@npm:2.0.3" dependencies: "@types/node": "*" - checksum: 7340b17f073356d4b06e611b343cae5bcb348f40916785705632495807d3c88b110a329e049618eed32e8d605636235604cac3929ba691599f7c7dd56c2a4b21 + checksum: e829fde246528665b31a9b8f64c369ffc66aa2a1337d2bab1d38f4d4145701480af7c67e877dd09a7fa97fcbaa0f3baa816ed1b3e71c3ad430930acd37f4eb1f languageName: node linkType: hard @@ -18460,11 +17803,11 @@ __metadata: linkType: hard "@types/cors@npm:^2.8.6": - version: 2.8.16 - resolution: "@types/cors@npm:2.8.16" + version: 2.8.17 + resolution: "@types/cors@npm:2.8.17" dependencies: "@types/node": "*" - checksum: 0c760aa826167a42bfbccff00d67e39c9dd9852e0cd88610f6d3ea1ed17e438df0f8f1f3175c77bfbfdee4c77bf677b12f6b5bd309358c30b5d0e758624b7250 + checksum: 469bd85e29a35977099a3745c78e489916011169a664e97c4c3d6538143b0a16e4cc72b05b407dc008df3892ed7bf595f9b7c0f1f4680e169565ee9d64966bde languageName: node linkType: hard @@ -18479,11 +17822,11 @@ __metadata: linkType: hard "@types/cross-spawn@npm:^6.0.2": - version: 6.0.5 - resolution: "@types/cross-spawn@npm:6.0.5" + version: 6.0.6 + resolution: "@types/cross-spawn@npm:6.0.6" dependencies: "@types/node": "*" - checksum: 9b9cf332e49319903df3abeeb91882730f26ef80eed2e5d5ab1feb432f3f0804f72a07296c305daf5a310e771d5e3bbfc5395f993ba17e35d399bf6996860771 + checksum: b4172927cd1387cf037c3ade785ef46c87537b7bc2803d7f6663b4904d0c5d6f726415d1adb2fee4fecb21746738f11336076449265d46be4ce110cc3a8c8436 languageName: node linkType: hard @@ -18562,20 +17905,20 @@ __metadata: linkType: hard "@types/d3-shape@npm:^1": - version: 1.3.11 - resolution: "@types/d3-shape@npm:1.3.11" + version: 1.3.12 + resolution: "@types/d3-shape@npm:1.3.12" dependencies: "@types/d3-path": ^1 - checksum: e53113a1e18f3398bbe9a885657640c2080f3a52c5d745a44ed161239bf64b009a3de1aa621ee3befb295de3e71116f69dd2837e7acab60a947fac714452e1ad + checksum: 3a62a0a20ef3f767ecd396b2331b836aeaba43a87926a33bb257e3bbe9c70013a2be60718dd94539e287d628da2c5b6f80675c12c0c3a086a3f4129b04ac2285 languageName: node linkType: hard "@types/d3-shape@npm:^3.0.1, @types/d3-shape@npm:^3.1.0": - version: 3.1.5 - resolution: "@types/d3-shape@npm:3.1.5" + version: 3.1.6 + resolution: "@types/d3-shape@npm:3.1.6" dependencies: "@types/d3-path": "*" - checksum: 8476c3908ec70637c8d1e5b103eebd0155fe2b398280c782e318007b444b9abaed65aba35b426f701af14a880cec3f4e47bdbf3a2a45545e0f40fa45e7492708 + checksum: bd765be021019c43c8dca066a798a1de28a051d1213db6ca25f76c9e577da7ec40a592e3bda7628383ab48cb87164fe60b95eb5ec23761b2012bd0adb30c549a languageName: node linkType: hard @@ -18706,9 +18049,9 @@ __metadata: linkType: hard "@types/event-source-polyfill@npm:^1.0.0": - version: 1.0.4 - resolution: "@types/event-source-polyfill@npm:1.0.4" - checksum: fbb2197ccab6eec3a3b412b269ded3bc9617d5ce358c2d71d978dfb913dbca74d0ef66da3e9f0c4c6a8bcd5ab35237f36f3191ba3717bb3ca4314ccc6afc0e3d + version: 1.0.5 + resolution: "@types/event-source-polyfill@npm:1.0.5" + checksum: f506b68710162f2ade1bccbc5691b8c67e5a703e565df2bc0b7b5be2637ba838ef81ec6c10b03248fe4d054386d95a6e827c7aace6e924986c2b9985f77b55de languageName: node linkType: hard @@ -18719,7 +18062,7 @@ __metadata: languageName: node linkType: hard -"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.30, @types/express-serve-static-core@npm:^4.17.33, @types/express-serve-static-core@npm:^4.17.5": +"@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.33, @types/express-serve-static-core@npm:^4.17.5": version: 4.17.41 resolution: "@types/express-serve-static-core@npm:4.17.41" dependencies: @@ -18775,20 +18118,20 @@ __metadata: languageName: node linkType: hard -"@types/glob@npm:*": - version: 7.1.3 - resolution: "@types/glob@npm:7.1.3" +"@types/glob@npm:^7.1.1": + version: 7.2.0 + resolution: "@types/glob@npm:7.2.0" dependencies: "@types/minimatch": "*" "@types/node": "*" - checksum: e0eef12285f548f15d887145590594a04ccce7f7e645fb047cbac18cb093f25d507ffbcc725312294c224bb78cf980fce33e5807de8d6f8a868b4186253499d4 + checksum: 6ae717fedfdfdad25f3d5a568323926c64f52ef35897bcac8aca8e19bc50c0bd84630bbd063e5d52078b2137d8e7d3c26eabebd1a2f03ff350fff8a91e79fc19 languageName: node linkType: hard "@types/google-protobuf@npm:^3.7.2": - version: 3.15.10 - resolution: "@types/google-protobuf@npm:3.15.10" - checksum: a0c4696717d7a47f2aa4837d552583c2a5a69fe5790b38b8393850a53ea37a197dcd5b3ab19bc32f8604213eb04ff0b52ee94ac8b6d4f35cd700e8f7bb94f6a1 + version: 3.15.12 + resolution: "@types/google-protobuf@npm:3.15.12" + checksum: c64efd268170eac0865a42c9616b05100e5ac07e7fa1ed87c827c9d2a58eb02cb2d01cb3248c7ddd563468ecb079295b81ab966e399ba08858f525896631e961 languageName: node linkType: hard @@ -18928,12 +18271,13 @@ __metadata: languageName: node linkType: hard -"@types/jenkins@npm:^0.23.1": - version: 0.23.4 - resolution: "@types/jenkins@npm:0.23.4" +"@types/jenkins@npm:^1.0.0": + version: 1.0.2 + resolution: "@types/jenkins@npm:1.0.2" dependencies: "@types/node": "*" - checksum: 378af85d2f7c3da13cb04098837224551d5d048e6a7b87e78aea8c5e4385f8a1b2cdabd592bb7a6eaa0d46a27eb840c3aa3baa35f1f0449f7f03b8eb527c8562 + form-data: ^4.0.0 + checksum: c02895642c81a74cb40740117b5fce0af768ac7985028b6fd0c68d88b350261473db8c05681fc1de0c612579f905f283f0de33efe683ea9a716ae5264287bfba languageName: node linkType: hard @@ -18947,12 +18291,12 @@ __metadata: linkType: hard "@types/jest@npm:*, @types/jest@npm:^29.0.0": - version: 29.5.8 - resolution: "@types/jest@npm:29.5.8" + version: 29.5.10 + resolution: "@types/jest@npm:29.5.10" dependencies: expect: ^29.0.0 pretty-format: ^29.0.0 - checksum: ca8438a5b4c098c8c023e9d5b279ea306494a1d0b5291cfb498100fa780377145f068b2a021d545b0398bbe0328dcc37044dd3aaf3c6c0fe9b0bef7b46a63453 + checksum: ef385905787db528de9b6beb2688865c0bb276e64256ed60b9a1a6ffc0b75737456cb5e27e952a3241c5845b6a1da487470010dd30f3ca59c8581624c564a823 languageName: node linkType: hard @@ -18967,11 +18311,11 @@ __metadata: linkType: hard "@types/jquery@npm:^3.3.34": - version: 3.5.27 - resolution: "@types/jquery@npm:3.5.27" + version: 3.5.29 + resolution: "@types/jquery@npm:3.5.29" dependencies: "@types/sizzle": "*" - checksum: a217d3dbf134134e1b1e10bb0a197523eb362d8e2aa2ae2ad909ae8db0d625f5784203a0794a498b7a09e495ae7822512b3112440cc96b8374eda4afc33b0d6e + checksum: 5e959762d6f7050b07b4387b6507a308113384566a77cfc4f8d0f54c2fb0a79f6bc8c057706c6aa4840cde56f32ad0e5814fb53c5f078c5db9e01670a1ecd535 languageName: node linkType: hard @@ -18997,12 +18341,12 @@ __metadata: linkType: hard "@types/jscodeshift@npm:^0.11.0": - version: 0.11.10 - resolution: "@types/jscodeshift@npm:0.11.10" + version: 0.11.11 + resolution: "@types/jscodeshift@npm:0.11.11" dependencies: ast-types: ^0.14.1 recast: ^0.20.3 - checksum: 91cd3ec925e4a9624fe0f5490ac1509b1f9b34bd7beed89c210eb0bec340c7b4627beef27912e5408aeb4dd6e2d7e37d2fd6a66a8436cd2c56c5cb7e0ddc2cbb + checksum: 6224b781cbbc8e095cae3cb8f9dd1ca102d6c42d9c882b76ea84dfd0cd43870ce317369480ed6b593352efe9fe7199bd6c40ec2cb37646c474ba15f5b43d2109 languageName: node linkType: hard @@ -19018,11 +18362,11 @@ __metadata: linkType: hard "@types/json-schema-merge-allof@npm:^0.6.0": - version: 0.6.4 - resolution: "@types/json-schema-merge-allof@npm:0.6.4" + version: 0.6.5 + resolution: "@types/json-schema-merge-allof@npm:0.6.5" dependencies: "@types/json-schema": "*" - checksum: 7ac71a8b6cda3e1e48153c0c00939daab2ae56353fd2e41f59a3b69a2a26eafddb9e389b8096068eea5ac60e6619927a2d854f317c67940a35488ce52507b472 + checksum: 704806bce36c830b971bcc26415d2a4c4102482808bf6aef343dd4c062678f7e69e537ffebf4fbb389e568e4056cab9259b2b6f06a988c8676d90da37bbbc4c4 languageName: node linkType: hard @@ -19033,13 +18377,6 @@ __metadata: languageName: node linkType: hard -"@types/json-stable-stringify@npm:^1.0.32": - version: 1.0.32 - resolution: "@types/json-stable-stringify@npm:1.0.32" - checksum: 3091ddc8d15c6cce1a847ba1f8db21e7c2564c7b8bc6923a873801d936228f775096b517d62653fbcebedcb2a7992555dc6ed11517ef050e75525cdf1d1bce8d - languageName: node - linkType: hard - "@types/json5@npm:^0.0.29": version: 0.0.29 resolution: "@types/json5@npm:0.0.29" @@ -19047,15 +18384,6 @@ __metadata: languageName: node linkType: hard -"@types/jsonwebtoken@npm:^8.5.0": - version: 8.5.0 - resolution: "@types/jsonwebtoken@npm:8.5.0" - dependencies: - "@types/node": "*" - checksum: e8f9ab96ec5cf76195c0d31cf555371824b673939064efec698ca99525ce46476af54debd1f66bd732e6079e134848b97163797009c4b47a767448a0c6ddaeda - languageName: node - linkType: hard - "@types/jsonwebtoken@npm:^9.0.0": version: 9.0.0 resolution: "@types/jsonwebtoken@npm:9.0.0" @@ -19109,21 +18437,14 @@ __metadata: languageName: node linkType: hard -"@types/linkify-it@npm:*": - version: 3.0.2 - resolution: "@types/linkify-it@npm:3.0.2" - checksum: dff8f10fafb885422474e456596f12d518ec4cdd6c33cca7a08e7c86b912d301ed91cf5a7613e148c45a12600dc9ab3d85ad16d5b48dc1aaeda151a68f16b536 - languageName: node - linkType: hard - "@types/lodash@npm:^4.14.151, @types/lodash@npm:^4.14.173, @types/lodash@npm:^4.14.175": - version: 4.14.201 - resolution: "@types/lodash@npm:4.14.201" - checksum: 484be655298e9b2dc2d218ea934071b2ea31e4a531c561dd220dbda65237e8d08c20dc2d457ac24f29be7fe167415bf7bb9360ea0d80bdb8b0f0ec8d8db92fae + version: 4.14.202 + resolution: "@types/lodash@npm:4.14.202" + checksum: a91acf3564a568c6f199912f3eb2c76c99c5a0d7e219394294213b3f2d54f672619f0fde4da22b29dc5d4c31457cd799acc2e5cb6bd90f9af04a1578483b6ff7 languageName: node linkType: hard -"@types/long@npm:^4.0.0, @types/long@npm:^4.0.1": +"@types/long@npm:^4.0.0": version: 4.0.2 resolution: "@types/long@npm:4.0.2" checksum: d16cde7240d834cf44ba1eaec49e78ae3180e724cd667052b194a372f350d024cba8dd3f37b0864931683dab09ca935d52f0c4c1687178af5ada9fc85b0635f4 @@ -19138,26 +18459,16 @@ __metadata: linkType: hard "@types/luxon@npm:*, @types/luxon@npm:^3.0.0, @types/luxon@npm:~3.3.0": - version: 3.3.4 - resolution: "@types/luxon@npm:3.3.4" - checksum: aa4862bd62d748e7966f9a0ec76058e9d74397ee426c7d64f61c677d83de0303c303cc78515001833df3f4ad16c95f572b0e2ffaee6e55bc50b80857e8437f3a + version: 3.3.5 + resolution: "@types/luxon@npm:3.3.5" + checksum: 7fd31c673600dd494dedefe8c405d2e6957c0ba101f8445f7eaf9afcf4a1fa1ca649cab01c9777523ff9de58c3c35e2589a1a004a0c629cd7953033115ac74f5 languageName: node linkType: hard -"@types/markdown-it@npm:^12.2.3": - version: 12.2.3 - resolution: "@types/markdown-it@npm:12.2.3" - dependencies: - "@types/linkify-it": "*" - "@types/mdurl": "*" - checksum: 868824a3e4d00718ba9cd4762cf16694762a670860f4b402e6e9f952b6841a2027488bdc55d05c2b960bf5078df21a9d041270af7e8949514645fe88fdb722ac - languageName: node - linkType: hard - -"@types/marked@npm:^4.0.0": - version: 4.3.2 - resolution: "@types/marked@npm:4.3.2" - checksum: c1107079d6c368dd60a668a41aa2101d006cad404b6eb4af6723d419dc869b278928fb769825f11d0d311a8cf437428992729c8a47253b6a3894a6326b1ee4d9 +"@types/marked@npm:^5.0.0": + version: 5.0.2 + resolution: "@types/marked@npm:5.0.2" + checksum: 2875618970bd5aaba472e313c799bbe241fe9e31d1e79782841a0cc04e08ab2a98653166f1fb99bf8bcf140d3878c3ab960a12aa8f0fb949d8277e8a01d3411b languageName: node linkType: hard @@ -19170,7 +18481,7 @@ __metadata: languageName: node linkType: hard -"@types/mdurl@npm:*, @types/mdurl@npm:^1.0.0": +"@types/mdurl@npm:^1.0.0": version: 1.0.2 resolution: "@types/mdurl@npm:1.0.2" checksum: 79c7e523b377f53cf1f5a240fe23d0c6cae856667692bd21bf1d064eafe5ccc40ae39a2aa0a9a51e8c94d1307228c8f6b121e847124591a9a828c3baf65e86e2 @@ -19256,7 +18567,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.6.1": +"@types/node-fetch@npm:^2.5.0, @types/node-fetch@npm:^2.5.12, @types/node-fetch@npm:^2.5.7": version: 2.6.9 resolution: "@types/node-fetch@npm:2.6.9" dependencies: @@ -19267,20 +18578,20 @@ __metadata: linkType: hard "@types/node-forge@npm:^1.3.0": - version: 1.3.9 - resolution: "@types/node-forge@npm:1.3.9" + version: 1.3.10 + resolution: "@types/node-forge@npm:1.3.10" dependencies: "@types/node": "*" - checksum: 4ffab54136960b0944af942a44206470e98766b89b867b6126ebc65c6f21463fd9ea20b26714216e153fbbee7ca5ce689db9067ea286a92b34368a5e2f77601f + checksum: 363af42c83956c7e2483a71e398a02101ef6a55b4d86386c276315ca98bad02d6050b99fdbe13debcd1bcda250086b4a5b5c15a6fb2953d32420d269865ca7f8 languageName: node linkType: hard "@types/node@npm:*, @types/node@npm:>=12.12.47, @types/node@npm:>=13.7.0, @types/node@npm:^20.1.1": - version: 20.9.0 - resolution: "@types/node@npm:20.9.0" + version: 20.9.5 + resolution: "@types/node@npm:20.9.5" dependencies: undici-types: ~5.26.4 - checksum: bfd927da6bff8a32051fa44bb47ca32a56d2c8bc8ba0170770f181cc1fa3c0b05863c9b930f0ba8604a48d5eb0d319166601709ca53bf2deae0025d8b6c6b8a3 + checksum: 050ebd958e31ad21143f93614a25b15a8de5d0004338359409f76a661f734c4549698d852f21176c62f5661dacb572a090669cffef93cf6361c959e4d27d8d95 languageName: node linkType: hard @@ -19299,9 +18610,9 @@ __metadata: linkType: hard "@types/node@npm:^16.11.26, @types/node@npm:^16.7.10, @types/node@npm:^16.9.2": - version: 16.18.61 - resolution: "@types/node@npm:16.18.61" - checksum: fdd162829eddc9b0b82a1ec485ba3876428ff3bd94c5869b13f4a36eb2aa9bddd22ea7e8ee3b2faa91a0f70ff08d8fd8d4be7dd0d143f8ee776907d6a1d2ed25 + version: 16.18.65 + resolution: "@types/node@npm:16.18.65" + checksum: c53cd5bfff0b6868c2735c7afb24008b23ce204ce090cc4fd1bbe0515de32f1088d401183ecb1a329ea69ab81591ca4935875d0744abb4bd60f4f85810d8446e languageName: node linkType: hard @@ -19313,11 +18624,11 @@ __metadata: linkType: hard "@types/node@npm:^18.17.8": - version: 18.18.9 - resolution: "@types/node@npm:18.18.9" + version: 18.18.13 + resolution: "@types/node@npm:18.18.13" dependencies: undici-types: ~5.26.4 - checksum: 629ce20357586144031cb43d601617eef45e59460dea6b1e123f708e6885664f44d54f65e5b72b2614af5b8613f3652ced832649c0b991accbc6a85139befa51 + checksum: e36d7a0ea6ce8fb771fd84dc2412935408448c1fed098205d3103be661852fc40d22a987e6c6c926a20719a15266e3071c8d4fd2548a96ad6c3c74eb474b5e63 languageName: node linkType: hard @@ -19406,24 +18717,24 @@ __metadata: languageName: node linkType: hard -"@types/passport-oauth2@npm:*, @types/passport-oauth2@npm:^1.4.11": - version: 1.4.11 - resolution: "@types/passport-oauth2@npm:1.4.11" +"@types/passport-oauth2@npm:*, @types/passport-oauth2@npm:^1.4.11, @types/passport-oauth2@npm:^1.4.15": + version: 1.4.15 + resolution: "@types/passport-oauth2@npm:1.4.15" dependencies: "@types/express": "*" "@types/oauth": "*" "@types/passport": "*" - checksum: 09d047a6c09a05c036f7db0cf8f8c09bf5878fdd15949bb1baa09a35f439929d471048fa6595f09ea4a4ea25396ce3918b362136579cf4a2b2ee29a92c0dd1ce + checksum: 352c4e2d09a86f8fc0dcf2c917c221f302a35a14e7467e2fa3a1653c0a9a1f842c910a4e52f799856536522e6359c20d1afc319579d9edf4b2ac7ea11b183b52 languageName: node linkType: hard "@types/passport-saml@npm:^1.1.3": - version: 1.1.6 - resolution: "@types/passport-saml@npm:1.1.6" + version: 1.1.7 + resolution: "@types/passport-saml@npm:1.1.7" dependencies: "@types/express": "*" "@types/passport": "*" - checksum: 91609adca645d79d9248a7e21a77df37015a6ab9a051d9eded0beea983c36928ffa004f48d96c86182a34a30181e5dc204b983eabddf8cd2d91a7784a4ce6dc6 + checksum: cc112ac43d8a9ed586cfa04342afefef45ec96b7125a554534fb763986e3426b0316ee3d9e4705240c9c3df3b2b19914dba48ef6abccbd6946e9ae634f790332 languageName: node linkType: hard @@ -19438,11 +18749,11 @@ __metadata: linkType: hard "@types/passport@npm:*, @types/passport@npm:^1.0.3": - version: 1.0.15 - resolution: "@types/passport@npm:1.0.15" + version: 1.0.16 + resolution: "@types/passport@npm:1.0.16" dependencies: "@types/express": "*" - checksum: bf96312a2824b180a3202e01ffb19860813cf3d5fa617a0f0a8d0a4a36899c955280db5697b0b243b4dfbc2032e6b7695fdc6990a93f27ca1d0e2a072e01066a + checksum: e4a02fa338536eb82694ea548689a7214b1ca98df6a896080daa2b6a8859db02a1e6244eeefaf6f3cc9c268239bb4a7912049a9ed86192144a65c10e55219f80 languageName: node linkType: hard @@ -19478,10 +18789,19 @@ __metadata: languageName: node linkType: hard -"@types/prop-types@npm:*, @types/prop-types@npm:^15.0.0, @types/prop-types@npm:^15.7.3, @types/prop-types@npm:^15.7.9": - version: 15.7.10 - resolution: "@types/prop-types@npm:15.7.10" - checksum: 39ecc2d9e439ed16b32937a08d98b84ed4a70f53bcd52c8564c0cd7a36fe1004ca83a1fb94b13c1b7a5c048760f06445c3c6a91a6972c8eff652c0b50c9424b1 +"@types/prop-types@npm:*, @types/prop-types@npm:^15.0.0, @types/prop-types@npm:^15.7.10, @types/prop-types@npm:^15.7.3": + version: 15.7.11 + resolution: "@types/prop-types@npm:15.7.11" + checksum: 7519ff11d06fbf6b275029fe03fff9ec377b4cb6e864cac34d87d7146c7f5a7560fd164bdc1d2dbe00b60c43713631251af1fd3d34d46c69cd354602bc0c7c54 + languageName: node + linkType: hard + +"@types/protocol-buffers-schema@npm:^3.4.1": + version: 3.4.3 + resolution: "@types/protocol-buffers-schema@npm:3.4.3" + dependencies: + "@types/node": "*" + checksum: a07e150d4737fea79ea8b58be8b8828c9736319f3d8bce92d282b424629ebcd5e056d083b1f8c150a0a7213cdf518bd62c8c7725473f2214f23f5331adead5fb languageName: node linkType: hard @@ -19518,11 +18838,11 @@ __metadata: linkType: hard "@types/react-dom@npm:^18": - version: 18.2.15 - resolution: "@types/react-dom@npm:18.2.15" + version: 18.2.17 + resolution: "@types/react-dom@npm:18.2.17" dependencies: "@types/react": "*" - checksum: 8e9631600c21ff561328e38a951d1991b3b3b20f538af4c0efbd1327c883a5573a63f50e1b945c34fa51b114b30e1ca5e62317bd54f21e063d6697b4be843a03 + checksum: 7a4e704ed4be6e0c3ccd8a22ff69386fe548304bf4db090513f42e059ff4c65f7a427790320051524d6578a2e4c9667bb7a80a4c989b72361c019fbe851d9385 languageName: node linkType: hard @@ -19620,13 +18940,13 @@ __metadata: linkType: hard "@types/react@npm:^18": - version: 18.2.37 - resolution: "@types/react@npm:18.2.37" + version: 18.2.38 + resolution: "@types/react@npm:18.2.38" dependencies: "@types/prop-types": "*" "@types/scheduler": "*" csstype: ^3.0.2 - checksum: 2d2599f1a09e4f678509161fea8baeaf76d21deee460f4f3ccc1ca431ebe85f896d7d0b906127de17e97ed57240cec61955eb97d0b5d9cbf4e97fd6620b1acdb + checksum: 71f8c167173d32252be8b2d3c1c76b3570b94d2fbbd139da86d146be453626f5777e12c2781559119637520dbef9f91cffe968f67b5901618f29226d49fad326 languageName: node linkType: hard @@ -19640,12 +18960,12 @@ __metadata: linkType: hard "@types/recharts@npm:^1.8.14, @types/recharts@npm:^1.8.15": - version: 1.8.27 - resolution: "@types/recharts@npm:1.8.27" + version: 1.8.28 + resolution: "@types/recharts@npm:1.8.28" dependencies: "@types/d3-shape": ^1 "@types/react": "*" - checksum: d37fa91a35c07dfc95587f2a9e06e661c35e26b070b04e8fb325b89aee676c3953aba9fe2b27f740dc5ecf111a38540c3f2bdb33f47f3249c60bb21c28c9c9df + checksum: b334ed1b34123483a2f03dd4b13bdae3048a4a50b2a46b69e6580545ecd3fd57874a9818e5c2c1d8a98dc0bf8a1b6d45b4790d31fb5c395d7b7c6c268b716634 languageName: node linkType: hard @@ -19659,21 +18979,21 @@ __metadata: linkType: hard "@types/regression@npm:^2.0.0": - version: 2.0.5 - resolution: "@types/regression@npm:2.0.5" - checksum: b8eac5c024838f7491d36fe277981ed56f2b4e31f9e228f1837d13e1346abc7f41ed5031eb876af462f4e05afb9a6b48c4a44b6cbabff97af64faae246313997 + version: 2.0.6 + resolution: "@types/regression@npm:2.0.6" + checksum: c412ddd924efd53395f0011b38a6b1dbc94fc71adfa80efcb6657f0f1b6123fb27c101798dda8d0aa638c925900b4b4a9c5c03504a0d1255edd160e3090a5ce9 languageName: node linkType: hard -"@types/request@npm:^2.47.1": - version: 2.48.8 - resolution: "@types/request@npm:2.48.8" +"@types/request@npm:^2.47.1, @types/request@npm:^2.48.8": + version: 2.48.12 + resolution: "@types/request@npm:2.48.12" dependencies: "@types/caseless": "*" "@types/node": "*" "@types/tough-cookie": "*" form-data: ^2.5.0 - checksum: 0b7754941e08205dce51635d894ec524df276d2b83ca13b9aab723f9281acecf1108841e9554494cb1cb60f6d6ddbb47ebea97392bcf2bf607f035b3a9b4af45 + checksum: 20dfad0a46b4249bf42f09c51fbd4d02ec6738c5152194b5c7c69bab80b00eae9cc71df4489ffa929d0968d453ef7d0823d1f98871efed563a4fdb57bf0a4c58 languageName: node linkType: hard @@ -19702,16 +19022,6 @@ __metadata: languageName: node linkType: hard -"@types/rimraf@npm:^3.0.2": - version: 3.0.2 - resolution: "@types/rimraf@npm:3.0.2" - dependencies: - "@types/glob": "*" - "@types/node": "*" - checksum: b47fa302f46434cba704d20465861ad250df79467d3d289f9d6490d3aeeb41e8cb32dd80bd1a8fd833d1e185ac719fbf9be12e05ad9ce9be094d8ee8f1405347 - languageName: node - linkType: hard - "@types/rollup-plugin-peer-deps-external@npm:^2.2.0": version: 2.2.4 resolution: "@types/rollup-plugin-peer-deps-external@npm:2.2.4" @@ -19732,11 +19042,11 @@ __metadata: linkType: hard "@types/sanitize-html@npm:^2.6.2": - version: 2.9.4 - resolution: "@types/sanitize-html@npm:2.9.4" + version: 2.9.5 + resolution: "@types/sanitize-html@npm:2.9.5" dependencies: htmlparser2: ^8.0.0 - checksum: 196c6b0a307b6e0482cbad4d28c5f3f7bf03001bdc30ad1a18b61a5074ddbf9c1f32adee539ecd83370fceea2ef501955a2c3f27f820c229974a265d31832c95 + checksum: fd0afee5dac91aa2c42391f0c8c9254204f4ee1f10b902aa04e8f7809043d785e28af2732f75277ef09e46838013ad60abedb02ba1424b6218264f3333437fb5 languageName: node linkType: hard @@ -19866,6 +19176,13 @@ __metadata: languageName: node linkType: hard +"@types/statuses@npm:^2.0.1": + version: 2.0.4 + resolution: "@types/statuses@npm:2.0.4" + checksum: 3a806c3b96d1845e3e7441fbf0839037e95f717334760ddb7c29223c9a34a7206b68e2998631f89f1a1e3ef5b67b15652f6e8fa14987ebd7f6d38587c1bffd18 + languageName: node + linkType: hard + "@types/stoppable@npm:^1.1.0": version: 1.1.3 resolution: "@types/stoppable@npm:1.1.3" @@ -19922,12 +19239,12 @@ __metadata: linkType: hard "@types/tar@npm:^6.1.1": - version: 6.1.9 - resolution: "@types/tar@npm:6.1.9" + version: 6.1.10 + resolution: "@types/tar@npm:6.1.10" dependencies: "@types/node": "*" minipass: ^4.0.0 - checksum: d3765d47ab1d4ae35e40a1fd5f460e3413eea960e960443ed3de257425a62ba4d900dbe9ee5a2a740f4c68aa310597f56f74d274de070a06f45b8a913178a325 + checksum: 82d46f1246e830b98833ed94fbdfbcb3ffb8a5d7173609622d56c9326124523a3cc541607876c63a6ab9117eb59fb37ef8a6284b194164ab1d1d8c03a8ba59c6 languageName: node linkType: hard @@ -20061,11 +19378,11 @@ __metadata: linkType: hard "@types/ws@npm:*, @types/ws@npm:^8.0.0, @types/ws@npm:^8.5.3, @types/ws@npm:^8.5.5": - version: 8.5.8 - resolution: "@types/ws@npm:8.5.8" + version: 8.5.9 + resolution: "@types/ws@npm:8.5.9" dependencies: "@types/node": "*" - checksum: 4ad30de842834d4dd8e6e1476470752709d4165352a3a36780f23f4fdb686d4ac8ca5e16a0e0622940ddace910b856ff8a0baa2e24e41d204fb7a6a02ab2172b + checksum: 83f436b731d2cdc49a45ced31a0a65cdd2e39c24d7b882776c26efa190dad6553e266d624c7a7089f36ad3ed471e02e729f3219282c80689b435f665df4a2b0b languageName: node linkType: hard @@ -20127,21 +19444,21 @@ __metadata: linkType: hard "@types/zen-observable@npm:^0.8.0, @types/zen-observable@npm:^0.8.2": - version: 0.8.6 - resolution: "@types/zen-observable@npm:0.8.6" - checksum: 5110a0a019ff1c6571c9059d56910b3fa24862ae1211ee8cd71a304abd39aa415e3ea8110746e20db6757e4e08f4c0863216ab0f154c351bc89338bcde047868 + version: 0.8.7 + resolution: "@types/zen-observable@npm:0.8.7" + checksum: 6d4cdccded97f8e21b18224a70524e559abe2568863ed21ea000580aa3446c6d583253e83e8ecc0c93b4060ef3fb7f9d14739a57ee18925cc30e0e7d79713a15 languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:6.7.5": - version: 6.7.5 - resolution: "@typescript-eslint/eslint-plugin@npm:6.7.5" +"@typescript-eslint/eslint-plugin@npm:6.11.0": + version: 6.11.0 + resolution: "@typescript-eslint/eslint-plugin@npm:6.11.0" dependencies: "@eslint-community/regexpp": ^4.5.1 - "@typescript-eslint/scope-manager": 6.7.5 - "@typescript-eslint/type-utils": 6.7.5 - "@typescript-eslint/utils": 6.7.5 - "@typescript-eslint/visitor-keys": 6.7.5 + "@typescript-eslint/scope-manager": 6.11.0 + "@typescript-eslint/type-utils": 6.11.0 + "@typescript-eslint/utils": 6.11.0 + "@typescript-eslint/visitor-keys": 6.11.0 debug: ^4.3.4 graphemer: ^1.4.0 ignore: ^5.2.4 @@ -20154,25 +19471,25 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: c37edf5a703db4ff9227d67c2d2cf817e65c9afc94cc0e650fa3d2b05ac55201ef887ce9dadb9ca13779f4025bf4367e132b013e3559e777006a2332079bb180 + checksum: 8ba9ce7ce8609a044e405baf57cc84d6973d7676950c870288d7eae2dba44b36664e3f4d90b94a4de08e17259fe8baa7790750cd4e5391dbe2a2743497d7fae2 languageName: node linkType: hard "@typescript-eslint/parser@npm:^6.7.2": - version: 6.10.0 - resolution: "@typescript-eslint/parser@npm:6.10.0" + version: 6.11.0 + resolution: "@typescript-eslint/parser@npm:6.11.0" dependencies: - "@typescript-eslint/scope-manager": 6.10.0 - "@typescript-eslint/types": 6.10.0 - "@typescript-eslint/typescript-estree": 6.10.0 - "@typescript-eslint/visitor-keys": 6.10.0 + "@typescript-eslint/scope-manager": 6.11.0 + "@typescript-eslint/types": 6.11.0 + "@typescript-eslint/typescript-estree": 6.11.0 + "@typescript-eslint/visitor-keys": 6.11.0 debug: ^4.3.4 peerDependencies: eslint: ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: c4b140932d639b3f3eac892497aa700bcc9101ef268285020757dc9bee670d122de107e936320af99a5c06569e4eb93bccf87f14a9970ceab708c432e748423a + checksum: e9cb175e3537b82aa8cd39641ecb4e656586f89f8365cf05400b5aa8794dac0c8c10c6aa2fd7c13a684f62c1493f5e41c5534df49d377abe9dc89d861a51195c languageName: node linkType: hard @@ -20186,32 +19503,22 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:6.10.0": - version: 6.10.0 - resolution: "@typescript-eslint/scope-manager@npm:6.10.0" +"@typescript-eslint/scope-manager@npm:6.11.0": + version: 6.11.0 + resolution: "@typescript-eslint/scope-manager@npm:6.11.0" dependencies: - "@typescript-eslint/types": 6.10.0 - "@typescript-eslint/visitor-keys": 6.10.0 - checksum: c9b9483082ae853f10b888cf04d4a14f666ac55e749bfdb7b7f726fc51127a6340b5e2f50d93f134a8854ddcc41f7b116b214753251a8b033d0d84c600439c54 + "@typescript-eslint/types": 6.11.0 + "@typescript-eslint/visitor-keys": 6.11.0 + checksum: d219a96fd80fb14176cdcc47b070e870c73ccc0dfb32a8657f6ceaefb613dc0ea240a77250dcfc437d9c9360ca165c2765d4cf8fe689dae7e9eee2c0d6a98a50 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:6.7.5": - version: 6.7.5 - resolution: "@typescript-eslint/scope-manager@npm:6.7.5" +"@typescript-eslint/type-utils@npm:6.11.0": + version: 6.11.0 + resolution: "@typescript-eslint/type-utils@npm:6.11.0" dependencies: - "@typescript-eslint/types": 6.7.5 - "@typescript-eslint/visitor-keys": 6.7.5 - checksum: f21858ed78f81ab2d9879139f69657fda2a7b901078f79df64d1262d80f84ef66c56525ed0bb5e393fa5ca5474ad97f2225b7f713977c2d0f79cda31b2744af9 - languageName: node - linkType: hard - -"@typescript-eslint/type-utils@npm:6.7.5": - version: 6.7.5 - resolution: "@typescript-eslint/type-utils@npm:6.7.5" - dependencies: - "@typescript-eslint/typescript-estree": 6.7.5 - "@typescript-eslint/utils": 6.7.5 + "@typescript-eslint/typescript-estree": 6.11.0 + "@typescript-eslint/utils": 6.11.0 debug: ^4.3.4 ts-api-utils: ^1.0.1 peerDependencies: @@ -20219,7 +19526,7 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 8023d8ddcfbf4a0411b192016711068e9e6787c5811aee3a25ac40025ade0d063a1a3d7b38469e1a534bb31fa9dbeec08ab53b7a6d7b3128358294ac5b219d9a + checksum: 2effbe62ae3b12f8a88663072f68a5dcb1135d9ee3c09a0d9fcf49b943837c0a5966e907d4a1a15c27ddf82af2fcf7f6e004655d3e1f7a17c21596469771ff7d languageName: node linkType: hard @@ -20230,17 +19537,10 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/types@npm:6.10.0": - version: 6.10.0 - resolution: "@typescript-eslint/types@npm:6.10.0" - checksum: e63a9e05eb3d736d02a09131627d5cb89394bf0d9d6b46fb4b620be902d89d73554720be65acbc194787bff9ffcd518c9a6cf88fd63e418232b4181e8d8438df - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:6.7.5": - version: 6.7.5 - resolution: "@typescript-eslint/types@npm:6.7.5" - checksum: f21e5726b60f13feb3a920c92515fbc1205ba0e9bba9959b2e42c02c282a0ab4fb0e5ae84f3807b9b1cf95036027e9033d92a911fa88e6c243a87621d8dd7a01 +"@typescript-eslint/types@npm:6.11.0": + version: 6.11.0 + resolution: "@typescript-eslint/types@npm:6.11.0" + checksum: ca8a11320286c9b0759a70ec83b9fd99937c9686fafdd41d8ea09ed7b2fa12e6b342bf65547efe5495926cd04cfc6488315920e3caffd27f12d42cb9a8cf88c8 languageName: node linkType: hard @@ -20262,12 +19562,12 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:6.10.0": - version: 6.10.0 - resolution: "@typescript-eslint/typescript-estree@npm:6.10.0" +"@typescript-eslint/typescript-estree@npm:6.11.0": + version: 6.11.0 + resolution: "@typescript-eslint/typescript-estree@npm:6.11.0" dependencies: - "@typescript-eslint/types": 6.10.0 - "@typescript-eslint/visitor-keys": 6.10.0 + "@typescript-eslint/types": 6.11.0 + "@typescript-eslint/visitor-keys": 6.11.0 debug: ^4.3.4 globby: ^11.1.0 is-glob: ^4.0.3 @@ -20276,42 +19576,24 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 15bd8d9239a557071d6b03e7aa854b769fcc2dbdff587ed94be7ee8060dabdb05bcae4251df22432f625f82087e7f6986e9aab04f7eea35af694d4edd76a21af + checksum: e137ba7c4cad08853a44d9c40072496ca5f2d440828be9fd2d207a59db56b05a6dcb4756f3ba341ee2ae714de45df80114477946d30801c5a46eed67314fd9c6 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:6.7.5": - version: 6.7.5 - resolution: "@typescript-eslint/typescript-estree@npm:6.7.5" - dependencies: - "@typescript-eslint/types": 6.7.5 - "@typescript-eslint/visitor-keys": 6.7.5 - debug: ^4.3.4 - globby: ^11.1.0 - is-glob: ^4.0.3 - semver: ^7.5.4 - ts-api-utils: ^1.0.1 - peerDependenciesMeta: - typescript: - optional: true - checksum: 17685e8321edce1d1ec4278d84e63c0f41ccb19e9308f21c37450943ad0c33328755ac52b966e7855af17e01d22bc83d1fcda79c279fabe7d3460c8f315a7265 - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:6.7.5": - version: 6.7.5 - resolution: "@typescript-eslint/utils@npm:6.7.5" +"@typescript-eslint/utils@npm:6.11.0": + version: 6.11.0 + resolution: "@typescript-eslint/utils@npm:6.11.0" dependencies: "@eslint-community/eslint-utils": ^4.4.0 "@types/json-schema": ^7.0.12 "@types/semver": ^7.5.0 - "@typescript-eslint/scope-manager": 6.7.5 - "@typescript-eslint/types": 6.7.5 - "@typescript-eslint/typescript-estree": 6.7.5 + "@typescript-eslint/scope-manager": 6.11.0 + "@typescript-eslint/types": 6.11.0 + "@typescript-eslint/typescript-estree": 6.11.0 semver: ^7.5.4 peerDependencies: eslint: ^7.0.0 || ^8.0.0 - checksum: f365c654241f927e7784640079627d60a296aa3d575552b07594a69cfc419832eb5fa4adc87acb1988bea9741ae9cc4a5277dab168990310caef5de125255752 + checksum: e90aa2c8c56038a48de65a5303f9e4a4a70bb0d4d0a05cfcd28157fc0f06b2fc186c2e76a495f4540a903ea37577daa1403bab923d940114ec27a6326153d60f languageName: node linkType: hard @@ -20343,23 +19625,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:6.10.0": - version: 6.10.0 - resolution: "@typescript-eslint/visitor-keys@npm:6.10.0" +"@typescript-eslint/visitor-keys@npm:6.11.0": + version: 6.11.0 + resolution: "@typescript-eslint/visitor-keys@npm:6.11.0" dependencies: - "@typescript-eslint/types": 6.10.0 + "@typescript-eslint/types": 6.11.0 eslint-visitor-keys: ^3.4.1 - checksum: 9640bfae41e6109ffba31e68b1720382de0538d021261e2fc9e514c83c703084393c0818ca77ed26b950273e45e593371120281e8d4bbd09cb8c2d46c9fe4f03 - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:6.7.5": - version: 6.7.5 - resolution: "@typescript-eslint/visitor-keys@npm:6.7.5" - dependencies: - "@typescript-eslint/types": 6.7.5 - eslint-visitor-keys: ^3.4.1 - checksum: 2df996742f63d89fa339b0e8ff3a3a289d36b3f584f7538a7626bed3869e9ae27f8f56ab31748519d25a63de2ae22a43dd8413610b00436ff342b0a17eb85289 + checksum: 6aae9dd79963bbefbf2e310015b909627da541a13ab4d8359eea3c86c34fdbb91e583f65b5a99dee1959f7c5d67b21b45e5a05c63ddb4b82dacd60c890ce8b25 languageName: node linkType: hard @@ -20587,17 +19859,17 @@ __metadata: linkType: hard "@vitejs/plugin-react@npm:^4.0.4": - version: 4.1.1 - resolution: "@vitejs/plugin-react@npm:4.1.1" + version: 4.2.0 + resolution: "@vitejs/plugin-react@npm:4.2.0" dependencies: - "@babel/core": ^7.23.2 - "@babel/plugin-transform-react-jsx-self": ^7.22.5 - "@babel/plugin-transform-react-jsx-source": ^7.22.5 - "@types/babel__core": ^7.20.3 + "@babel/core": ^7.23.3 + "@babel/plugin-transform-react-jsx-self": ^7.23.3 + "@babel/plugin-transform-react-jsx-source": ^7.23.3 + "@types/babel__core": ^7.20.4 react-refresh: ^0.14.0 peerDependencies: - vite: ^4.2.0 - checksum: 275132ab1e4c227326396aeee93084f20bbe5f0fbe92d45813f3eacd0766eb6e8cd83ee222f90411aefad1ce60fbd31766a8e4725e7bb36914f2bba37afbdebf + vite: ^4.2.0 || ^5.0.0 + checksum: 515dc270dc433d9d80806501221d152f627aabc342916e9dc0d1d840fec76bc00daf3e41738f9aad286de89ee9325fd423372298bd04a3bfd618601ae62d515d languageName: node linkType: hard @@ -20752,98 +20024,33 @@ __metadata: languageName: node linkType: hard -"@whatwg-node/events@npm:^0.0.2": - version: 0.0.2 - resolution: "@whatwg-node/events@npm:0.0.2" - checksum: 6d491801d36967d5d62443cca6ef39d41cf882d575839d2e9d1a5f394722cd24ef84fe9e897bb72c01bd198871fda9ff0e8b1ac5aa6f3f814f87d92b7f28fdcc +"@whatwg-node/events@npm:^0.1.0": + version: 0.1.1 + resolution: "@whatwg-node/events@npm:0.1.1" + checksum: 3a356ca23522190201e27446cfd7ebf1cf96815ddb9d1ba5da0a00bbe6c1d28b4094862104411101fbedd47c758b25fe3683033f6a3e80933029efd664c33567 languageName: node linkType: hard -"@whatwg-node/fetch@npm:0.5.3, @whatwg-node/fetch@npm:^0.5.0": - version: 0.5.3 - resolution: "@whatwg-node/fetch@npm:0.5.3" +"@whatwg-node/fetch@npm:^0.9.0": + version: 0.9.14 + resolution: "@whatwg-node/fetch@npm:0.9.14" dependencies: - "@peculiar/webcrypto": ^1.4.0 - abort-controller: ^3.0.0 - busboy: ^1.6.0 - form-data-encoder: ^1.7.1 - formdata-node: ^4.3.1 - node-fetch: ^2.6.7 - undici: ^5.12.0 - web-streams-polyfill: ^3.2.0 - checksum: 73087779b3b0e70d0abf8b2a5d82919c29c26f8062e16db0cad413fe45c7b58c3c12cc2bcd5942aebdfdc4feee97b01cf1ff6c5d92d9507a140afdcafa410b12 + "@whatwg-node/node-fetch": ^0.5.0 + urlpattern-polyfill: ^9.0.0 + checksum: 9dc7c49742df03f8072e8caa1c2f602f9487ee5fd42c8daa23da24efe73c538f452f15852a6ce4aa12a933b70ce4c8b1fbd036a065b7e18ffbffa9b29f403746 languageName: node linkType: hard -"@whatwg-node/fetch@npm:^0.2.4": - version: 0.2.6 - resolution: "@whatwg-node/fetch@npm:0.2.6" +"@whatwg-node/node-fetch@npm:^0.5.0": + version: 0.5.0 + resolution: "@whatwg-node/node-fetch@npm:0.5.0" dependencies: - "@peculiar/webcrypto": ^1.4.0 - abort-controller: ^3.0.0 - busboy: ^1.6.0 - event-target-polyfill: ^0.0.3 - form-data-encoder: ^1.7.1 - formdata-node: ^4.3.1 - node-fetch: ^2.6.7 - undici: ^5.8.0 - web-streams-polyfill: ^3.2.0 - checksum: 12ee718be802860fbde2647ec0139dba598a278b0248326c0a314591b7096c84c34b16f5317273b0b11f3bbc6ff0d5d1df08983b4e9f5c3f0d779fde727f21af - languageName: node - linkType: hard - -"@whatwg-node/fetch@npm:^0.8.0": - version: 0.8.1 - resolution: "@whatwg-node/fetch@npm:0.8.1" - dependencies: - "@peculiar/webcrypto": ^1.4.0 - "@whatwg-node/node-fetch": ^0.3.0 - busboy: ^1.6.0 - urlpattern-polyfill: ^6.0.2 - web-streams-polyfill: ^3.2.1 - checksum: b827ac2299676705d98d31be4b68e70741200618b38daaae0d70e587f61fae573854170e2ca219d64bbd910b96960e26b64aa9869e9194a4d162e2a751d6f7a7 - languageName: node - linkType: hard - -"@whatwg-node/node-fetch@npm:^0.3.0": - version: 0.3.0 - resolution: "@whatwg-node/node-fetch@npm:0.3.0" - dependencies: - "@whatwg-node/events": ^0.0.2 + "@whatwg-node/events": ^0.1.0 busboy: ^1.6.0 fast-querystring: ^1.1.1 fast-url-parser: ^1.1.3 tslib: ^2.3.1 - peerDependencies: - "@types/node": ^18.0.6 - checksum: 141deb3f44d1978218c64ca285120b3e2427159773056774f2251f9d5d418c8e1d6f27f4b593d031ff4124f9cd00cb4bd9fd681e4528c9f498c72356a520b69f - languageName: node - linkType: hard - -"@wry/context@npm:^0.7.0, @wry/context@npm:^0.7.3": - version: 0.7.3 - resolution: "@wry/context@npm:0.7.3" - dependencies: - tslib: ^2.3.0 - checksum: 91c1e9eee9046c48ff857d60dcbb59f22246ce0f9bb2d9b190e0555227e7ba3f86024032cc057f3f5141d3bee93fc6b2a15ce2c79fa512569d3432eb8e1af02b - languageName: node - linkType: hard - -"@wry/equality@npm:^0.5.6": - version: 0.5.6 - resolution: "@wry/equality@npm:0.5.6" - dependencies: - tslib: ^2.3.0 - checksum: 9addf8891bdff5e23eecff03641846e7a56c1de3c9362c25e69c0b2ee3303e74b22e9a0376920283cd9d3bdd1bada12df54be5eaa29c2d801d33d94992672e14 - languageName: node - linkType: hard - -"@wry/trie@npm:^0.4.3": - version: 0.4.3 - resolution: "@wry/trie@npm:0.4.3" - dependencies: - tslib: ^2.3.0 - checksum: 106e021125cfafd22250a6631a0438a6a3debae7bd73f6db87fe42aa0757fe67693db0dfbe200ae1f60ba608c3e09ddb8a4e2b3527d56ed0a7e02aa0ee4c94e1 + checksum: 74350f16415be5f1b33460bd50a2c05b721cfb1e90eafddccf81c64267ac3ea3265c8792da815fef0f6132e882a6eacdc71bab926a5a9023570ddfece32e0b29 languageName: node linkType: hard @@ -20927,7 +20134,7 @@ __metadata: languageName: node linkType: hard -"abbrev@npm:1, abbrev@npm:^1.0.0": +"abbrev@npm:1": version: 1.1.1 resolution: "abbrev@npm:1.1.1" checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 @@ -21095,7 +20302,7 @@ __metadata: languageName: node linkType: hard -"ajv-errors@npm:~3.0.0": +"ajv-errors@npm:^3.0.0, ajv-errors@npm:~3.0.0": version: 3.0.0 resolution: "ajv-errors@npm:3.0.0" peerDependencies: @@ -21152,7 +20359,31 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.10.1, ajv@npm:^6.12.2, ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:^6.5.5, ajv@npm:~6.12.6": +"ajv@npm:6.5.2": + version: 6.5.2 + resolution: "ajv@npm:6.5.2" + dependencies: + fast-deep-equal: ^2.0.1 + fast-json-stable-stringify: ^2.0.0 + json-schema-traverse: ^0.4.1 + uri-js: ^4.2.1 + checksum: ac8590895952e6387f923cf7e130e2b4fac13e175caa2934c7792e8a54f2a619e805f769d6f1b5d26d75401fccbe69e5b1fe31ebae39f300c5660a78597ee2fb + languageName: node + linkType: hard + +"ajv@npm:^5.0.0": + version: 5.5.2 + resolution: "ajv@npm:5.5.2" + dependencies: + co: ^4.6.0 + fast-deep-equal: ^1.0.0 + fast-json-stable-stringify: ^2.0.0 + json-schema-traverse: ^0.3.0 + checksum: a69645c843e1676b0ae1c5192786e546427f808f386d26127c6585479378066c64341ceec0b127b6789d79628e71d2a732d402f575b98f9262db230d7b715a94 + languageName: node + linkType: hard + +"ajv@npm:^6.12.2, ajv@npm:^6.12.4, ajv@npm:^6.12.5, ajv@npm:^6.5.5, ajv@npm:~6.12.6": version: 6.12.6 resolution: "ajv@npm:6.12.6" dependencies: @@ -21164,7 +20395,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^8.0.0, ajv@npm:^8.10.0, ajv@npm:^8.11.2, ajv@npm:^8.12.0, ajv@npm:^8.6.0, ajv@npm:^8.6.3, ajv@npm:^8.8.0, ajv@npm:^8.8.2": +"ajv@npm:^8.0.0, ajv@npm:^8.10.0, ajv@npm:^8.11.0, ajv@npm:^8.11.2, ajv@npm:^8.12.0, ajv@npm:^8.6.0, ajv@npm:^8.6.3, ajv@npm:^8.8.0, ajv@npm:^8.8.2": version: 8.12.0 resolution: "ajv@npm:8.12.0" dependencies: @@ -21231,7 +20462,7 @@ __metadata: languageName: node linkType: hard -"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.0": +"ansi-escapes@npm:^4.2.1": version: 4.3.2 resolution: "ansi-escapes@npm:4.3.2" dependencies: @@ -21336,7 +20567,7 @@ __metadata: "@backstage/core-components": "workspace:^" "@backstage/frontend-plugin-api": "workspace:^" "@material-ui/icons": ^4.9.1 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 msw: ^1.0.0 peerDependencies: react: ^16.13.1 || ^17.0.0 || ^18.0.0 @@ -21505,13 +20736,6 @@ __metadata: languageName: node linkType: hard -"array-ify@npm:^1.0.0": - version: 1.0.0 - resolution: "array-ify@npm:1.0.0" - checksum: c0502015b319c93dd4484f18036bcc4b654eb76a4aa1f04afbcef11ac918859bb1f5d71ba1f0f1141770db9eef1a4f40f1761753650873068010bbf7bcdae4a4 - languageName: node - linkType: hard - "array-includes@npm:^3.1.6, array-includes@npm:^3.1.7": version: 3.1.7 resolution: "array-includes@npm:3.1.7" @@ -21639,17 +20863,6 @@ __metadata: languageName: node linkType: hard -"asn1js@npm:^3.0.1, asn1js@npm:^3.0.5": - version: 3.0.5 - resolution: "asn1js@npm:3.0.5" - dependencies: - pvtsutils: ^1.3.2 - pvutils: ^1.1.3 - tslib: ^2.4.0 - checksum: 3b6af1bbadd5762ef8ead5daf2f6bda1bc9e23bc825c4dcc996aa1f9521ad7390a64028565d95d98090d69c8431f004c71cccb866004759169d7c203cf9075eb - languageName: node - linkType: hard - "assert-plus@npm:1.0.0, assert-plus@npm:^1.0.0": version: 1.0.0 resolution: "assert-plus@npm:1.0.0" @@ -21743,7 +20956,7 @@ __metadata: languageName: node linkType: hard -"async-retry@npm:^1.2.1, async-retry@npm:^1.3.3": +"async-retry@npm:^1.3.3": version: 1.3.3 resolution: "async-retry@npm:1.3.3" dependencies: @@ -21815,13 +21028,6 @@ __metadata: languageName: node linkType: hard -"auto-bind@npm:~4.0.0": - version: 4.0.0 - resolution: "auto-bind@npm:4.0.0" - checksum: 00cad71cce5742faccb7dd65c1b55ebc4f45add4b0c9a1547b10b05bab22813230133b0c892c67ba3eb969a4524710c5e43cc45c72898ec84e56f3a596e7a04f - languageName: node - linkType: hard - "autolinker@npm:^3.11.0": version: 3.16.2 resolution: "autolinker@npm:3.16.2" @@ -21838,33 +21044,33 @@ __metadata: languageName: node linkType: hard -"avsc@npm:^5.7.3": +"avsc@npm:^5.7.5, avsc@npm:^5.7.6": version: 5.7.7 resolution: "avsc@npm:5.7.7" checksum: e3361aa88a61397b3345876263f79c8c8bfe013d849142202758205459a37e24cdbf02edc49ae019d6e82d93bbc7bc73e9e7fefca049aae91626bae28de4d1a9 languageName: node linkType: hard -"aws-sdk-client-mock-jest@npm:^2.0.0": - version: 2.2.0 - resolution: "aws-sdk-client-mock-jest@npm:2.2.0" +"aws-sdk-client-mock-jest@npm:^3.0.0": + version: 3.0.0 + resolution: "aws-sdk-client-mock-jest@npm:3.0.0" dependencies: "@types/jest": ^28.1.3 tslib: ^2.1.0 peerDependencies: - aws-sdk-client-mock: 2.2.0 - checksum: 2b9367077b745df34da049e2c90f4d743e38369d2d0f0469582ad27a8db52c2f1d5a711ec93b398bd54b732e1454e0028ef161eaea29a0309094ca24ef51a926 + aws-sdk-client-mock: 3.0.0 + checksum: 83f49e1d048bf32bb88b6a2ac8b3d14761a14dd699adc7c0e4bd9397b4771dd3e23779ec180bf63c03be7e85b2322840373a4c4d9840722ab15d409d6f4e8bd1 languageName: node linkType: hard -"aws-sdk-client-mock@npm:^2.0.0": - version: 2.2.0 - resolution: "aws-sdk-client-mock@npm:2.2.0" +"aws-sdk-client-mock@npm:^3.0.0": + version: 3.0.0 + resolution: "aws-sdk-client-mock@npm:3.0.0" dependencies: "@types/sinon": ^10.0.10 sinon: ^14.0.2 tslib: ^2.1.0 - checksum: 25232d56cd0401bc1212730a4a0192efc5154a211a648fe0cb4d71bd693216f63c8f13776ef04b4b36fb8eb70b9a7d19d87a3979816b9fd153450d44515d5598 + checksum: 6298de923260bc824d0c2788196f8839a20da8d64ed82e662913f19417ab872c6cb4c029c5f8f2782da0a4c16e37a8ac077da0bdb19c4e0c82707cf286f7c5d3 languageName: node linkType: hard @@ -21939,13 +21145,13 @@ __metadata: linkType: hard "axios@npm:^1.4.0, axios@npm:^1.6.0": - version: 1.6.1 - resolution: "axios@npm:1.6.1" + version: 1.6.2 + resolution: "axios@npm:1.6.2" dependencies: follow-redirects: ^1.15.0 form-data: ^4.0.0 proxy-from-env: ^1.1.0 - checksum: 573f03f59b7487d54551b16f5e155d1d130ad4864ed32d1da93d522b78a57123b34e3bde37f822a65ee297e79f1db840f9ad6514addff50d3cbf5caeed39e8dc + checksum: 4a7429e2b784be0f2902ca2680964391eae7236faa3967715f30ea45464b98ae3f1c6f631303b13dfe721b17126b01f486c7644b9ef276bfc63112db9fd379f8 languageName: node linkType: hard @@ -22088,13 +21294,6 @@ __metadata: languageName: node linkType: hard -"babel-plugin-syntax-trailing-function-commas@npm:^7.0.0-beta.0": - version: 7.0.0-beta.0 - resolution: "babel-plugin-syntax-trailing-function-commas@npm:7.0.0-beta.0" - checksum: e37509156ca945dd9e4b82c66dd74f2d842ad917bd280cb5aa67960942300cd065eeac476d2514bdcdedec071277a358f6d517c31d9f9244d9bbc3619a8ecf8a - languageName: node - linkType: hard - "babel-polyfill@npm:^6.26.0": version: 6.26.0 resolution: "babel-polyfill@npm:6.26.0" @@ -22128,43 +21327,6 @@ __metadata: languageName: node linkType: hard -"babel-preset-fbjs@npm:^3.4.0": - version: 3.4.0 - resolution: "babel-preset-fbjs@npm:3.4.0" - dependencies: - "@babel/plugin-proposal-class-properties": ^7.0.0 - "@babel/plugin-proposal-object-rest-spread": ^7.0.0 - "@babel/plugin-syntax-class-properties": ^7.0.0 - "@babel/plugin-syntax-flow": ^7.0.0 - "@babel/plugin-syntax-jsx": ^7.0.0 - "@babel/plugin-syntax-object-rest-spread": ^7.0.0 - "@babel/plugin-transform-arrow-functions": ^7.0.0 - "@babel/plugin-transform-block-scoped-functions": ^7.0.0 - "@babel/plugin-transform-block-scoping": ^7.0.0 - "@babel/plugin-transform-classes": ^7.0.0 - "@babel/plugin-transform-computed-properties": ^7.0.0 - "@babel/plugin-transform-destructuring": ^7.0.0 - "@babel/plugin-transform-flow-strip-types": ^7.0.0 - "@babel/plugin-transform-for-of": ^7.0.0 - "@babel/plugin-transform-function-name": ^7.0.0 - "@babel/plugin-transform-literals": ^7.0.0 - "@babel/plugin-transform-member-expression-literals": ^7.0.0 - "@babel/plugin-transform-modules-commonjs": ^7.0.0 - "@babel/plugin-transform-object-super": ^7.0.0 - "@babel/plugin-transform-parameters": ^7.0.0 - "@babel/plugin-transform-property-literals": ^7.0.0 - "@babel/plugin-transform-react-display-name": ^7.0.0 - "@babel/plugin-transform-react-jsx": ^7.0.0 - "@babel/plugin-transform-shorthand-properties": ^7.0.0 - "@babel/plugin-transform-spread": ^7.0.0 - "@babel/plugin-transform-template-literals": ^7.0.0 - babel-plugin-syntax-trailing-function-commas: ^7.0.0-beta.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: b3352cf690729125997f254bc31b9c4db347f8646f1571958ced1c45f0da89439e183e1c88e35397eb0361b9e1fbb1dd8142d3f4647814deb427e53c54f44d5f - languageName: node - linkType: hard - "babel-preset-jest@npm:^29.6.3": version: 29.6.3 resolution: "babel-preset-jest@npm:29.6.3" @@ -23084,17 +22246,6 @@ __metadata: languageName: node linkType: hard -"capital-case@npm:^1.0.4": - version: 1.0.4 - resolution: "capital-case@npm:1.0.4" - dependencies: - no-case: ^3.0.4 - tslib: ^2.0.3 - upper-case-first: ^2.0.2 - checksum: 41fa8fa87f6d24d0835a2b4a9341a3eaecb64ac29cd7c5391f35d6175a0fa98ab044e7f2602e1ec3afc886231462ed71b5b80c590b8b41af903ec2c15e5c5931 - languageName: node - linkType: hard - "caseless@npm:~0.12.0": version: 0.12.0 resolution: "caseless@npm:0.12.0" @@ -23102,15 +22253,6 @@ __metadata: languageName: node linkType: hard -"catharsis@npm:^0.9.0": - version: 0.9.0 - resolution: "catharsis@npm:0.9.0" - dependencies: - lodash: ^4.17.15 - checksum: da867df1fd01823ea5a7283886ba382f6eb5b1fe5af356e00fd944a02d9b867f4ea2fc7f61416c53427f62760fdbd41614f6e8ae37686d2c3a4696871526df20 - languageName: node - linkType: hard - "ccount@npm:^2.0.0": version: 2.0.0 resolution: "ccount@npm:2.0.0" @@ -23156,44 +22298,6 @@ __metadata: languageName: node linkType: hard -"change-case-all@npm:1.0.15": - version: 1.0.15 - resolution: "change-case-all@npm:1.0.15" - dependencies: - change-case: ^4.1.2 - is-lower-case: ^2.0.2 - is-upper-case: ^2.0.2 - lower-case: ^2.0.2 - lower-case-first: ^2.0.2 - sponge-case: ^1.0.1 - swap-case: ^2.0.2 - title-case: ^3.0.3 - upper-case: ^2.0.2 - upper-case-first: ^2.0.2 - checksum: e1dabdcd8447a3690f3faf15f92979dfbc113109b50916976e1d5e518e6cfdebee4f05f54d0ca24fb79a4bf835185b59ae25e967bb3dc10bd236a775b19ecc52 - languageName: node - linkType: hard - -"change-case@npm:^4.1.2": - version: 4.1.2 - resolution: "change-case@npm:4.1.2" - dependencies: - camel-case: ^4.1.2 - capital-case: ^1.0.4 - constant-case: ^3.0.4 - dot-case: ^3.0.4 - header-case: ^2.0.4 - no-case: ^3.0.4 - param-case: ^3.0.4 - pascal-case: ^3.1.2 - path-case: ^3.0.4 - sentence-case: ^3.0.4 - snake-case: ^3.0.4 - tslib: ^2.0.3 - checksum: e4bc4a093a1f7cce8b33896665cf9e456e3bc3cc0def2ad7691b1994cfca99b3188d0a513b16855b01a6bd20692fcde12a7d4d87a5615c4c515bbbf0e651f116 - languageName: node - linkType: hard - "change-emitter@npm:^0.1.2": version: 0.1.6 resolution: "change-emitter@npm:0.1.6" @@ -23474,16 +22578,6 @@ __metadata: languageName: node linkType: hard -"cli-truncate@npm:^2.1.0": - version: 2.1.0 - resolution: "cli-truncate@npm:2.1.0" - dependencies: - slice-ansi: ^3.0.0 - string-width: ^4.2.0 - checksum: bf1e4e6195392dc718bf9cd71f317b6300dc4a9191d052f31046b8773230ece4fa09458813bf0e3455a5e68c0690d2ea2c197d14a8b85a7b5e01c97f4b5feb5d - languageName: node - linkType: hard - "cli-truncate@npm:^3.1.0": version: 3.1.0 resolution: "cli-truncate@npm:3.1.0" @@ -23648,17 +22742,10 @@ __metadata: languageName: node linkType: hard -"code-block-writer@npm:^11.0.3": - version: 11.0.3 - resolution: "code-block-writer@npm:11.0.3" - checksum: f0a2605f19963d7087267c9b0fd0b05a6638a50e7b29b70f97aa01a514f59475b0626f8aa092188df853ee6d96745426dfa132d6a677795df462c6ce32c21639 - languageName: node - linkType: hard - -"code-error-fragment@npm:0.0.230": - version: 0.0.230 - resolution: "code-error-fragment@npm:0.0.230" - checksum: 6c5e800d6d70b30938cc85a2fc2c6069f028eadb58bceb65716b995ce6228c99906302f2c438ba50115fd81a1ee15dd95dc7d317b16a6c590e311ac7e50613f3 +"code-block-writer@npm:^12.0.0": + version: 12.0.0 + resolution: "code-block-writer@npm:12.0.0" + checksum: 9f6505a4d668c9131c6f3f686359079439e66d5f50c236614d52fcfa53aeb0bc615b2c6c64ef05b5511e3b0433ccfd9f7756ad40eb3b9298af6a7d791ab1981d languageName: node linkType: hard @@ -23870,20 +22957,13 @@ __metadata: languageName: node linkType: hard -"commander@npm:*, commander@npm:^11.0.0": +"commander@npm:*, commander@npm:11.1.0, commander@npm:^11.0.0": version: 11.1.0 resolution: "commander@npm:11.1.0" checksum: fd1a8557c6b5b622c89ecdfde703242ab7db3b628ea5d1755784c79b8e7cb0d74d65b4a262289b533359cd58e1bfc0bf50245dfbcd2954682a6f367c828b79ef languageName: node linkType: hard -"commander@npm:11.0.0": - version: 11.0.0 - resolution: "commander@npm:11.0.0" - checksum: 6621954e1e1d078b4991c1f5bbd9439ad37aa7768d6ab4842de1dbd4d222c8a27e1b8e62108b3a92988614af45031d5bb2a2aaa92951f4d0c934d1a1ac564bb4 - languageName: node - linkType: hard - "commander@npm:7.1.0": version: 7.1.0 resolution: "commander@npm:7.1.0" @@ -23919,7 +22999,7 @@ __metadata: languageName: node linkType: hard -"commander@npm:^5.1.0": +"commander@npm:^5.0.0, commander@npm:^5.1.0": version: 5.1.0 resolution: "commander@npm:5.1.0" checksum: 0b7fec1712fbcc6230fcb161d8d73b4730fa91a21dc089515489402ad78810547683f058e2a9835929c212fead1d6a6ade70db28bbb03edbc2829a9ab7d69447 @@ -23954,7 +23034,7 @@ __metadata: languageName: node linkType: hard -"common-tags@npm:1.8.2, common-tags@npm:^1.8.0": +"common-tags@npm:^1.8.0": version: 1.8.2 resolution: "common-tags@npm:1.8.2" checksum: 767a6255a84bbc47df49a60ab583053bb29a7d9687066a18500a516188a062c4e4cd52de341f22de0b07062e699b1b8fe3cfa1cb55b241cb9301aeb4f45b4dff @@ -23982,16 +23062,6 @@ __metadata: languageName: node linkType: hard -"compare-func@npm:^2.0.0": - version: 2.0.0 - resolution: "compare-func@npm:2.0.0" - dependencies: - array-ify: ^1.0.0 - dot-prop: ^5.1.0 - checksum: fb71d70632baa1e93283cf9d80f30ac97f003aabee026e0b4426c9716678079ef5fea7519b84d012cbed938c476493866a38a79760564a9e21ae9433e40e6f0d - languageName: node - linkType: hard - "compare-versions@npm:4.1.4": version: 4.1.4 resolution: "compare-versions@npm:4.1.4" @@ -24248,17 +23318,6 @@ __metadata: languageName: node linkType: hard -"constant-case@npm:^3.0.4": - version: 3.0.4 - resolution: "constant-case@npm:3.0.4" - dependencies: - no-case: ^3.0.4 - tslib: ^2.0.3 - upper-case: ^2.0.2 - checksum: 6c3346d51afc28d9fae922e966c68eb77a19d94858dba230dd92d7b918b37d36db50f0311e9ecf6847e43e934b1c01406a0936973376ab17ec2c471fbcfb2cf3 - languageName: node - linkType: hard - "constants-browserify@npm:^1.0.0": version: 1.0.0 resolution: "constants-browserify@npm:1.0.0" @@ -24289,17 +23348,6 @@ __metadata: languageName: node linkType: hard -"conventional-changelog-conventionalcommits@npm:^5.0.0": - version: 5.0.0 - resolution: "conventional-changelog-conventionalcommits@npm:5.0.0" - dependencies: - compare-func: ^2.0.0 - lodash: ^4.17.15 - q: ^1.5.1 - checksum: b67d12e4e0fdde5baa32c3d77af472de38646a18657b26f5543eecce041a318103092fbfcef247e2319a16957c9ac78c6ea78acc11a5db6acf74be79a28c561f - languageName: node - linkType: hard - "convert-source-map@npm:^1.5.0, convert-source-map@npm:^1.6.0": version: 1.9.0 resolution: "convert-source-map@npm:1.9.0" @@ -24399,9 +23447,9 @@ __metadata: linkType: hard "core-js@npm:^3.26.0, core-js@npm:^3.6.5": - version: 3.33.2 - resolution: "core-js@npm:3.33.2" - checksum: 71de081acbd060ff985afdcdf2552de4a00ab3ac4695c77f3535b72ddf4526920dcd0cb73e72e57c2ae16e384838a6d55790e138f0a19d60afcf851f89d0064d + version: 3.33.3 + resolution: "core-js@npm:3.33.3" + checksum: 070b9c696f5a9b22bab0208daf9fcdffbc3b4f4c89ed2be512b7d99d4be363accfbb26fa6eec7261055d89e8ea0a5bcfccad5923fe43f1f2eafca9f568cc5596 languageName: node linkType: hard @@ -24429,18 +23477,6 @@ __metadata: languageName: node linkType: hard -"cosmiconfig@npm:8.0.0": - version: 8.0.0 - resolution: "cosmiconfig@npm:8.0.0" - dependencies: - import-fresh: ^3.2.1 - js-yaml: ^4.1.0 - parse-json: ^5.0.0 - path-type: ^4.0.0 - checksum: ff4cdf89ac1ae52e7520816622c21a9e04380d04b82d653f5139ec581aa4f7f29e096d46770bc76c4a63c225367e88a1dfa233ea791669a35101f5f9b972c7d1 - languageName: node - linkType: hard - "cosmiconfig@npm:^6.0.0": version: 6.0.0 resolution: "cosmiconfig@npm:6.0.0" @@ -24467,6 +23503,23 @@ __metadata: languageName: node linkType: hard +"cosmiconfig@npm:^8.1.0": + version: 8.3.6 + resolution: "cosmiconfig@npm:8.3.6" + dependencies: + import-fresh: ^3.3.0 + js-yaml: ^4.1.0 + parse-json: ^5.2.0 + path-type: ^4.0.0 + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: dc339ebea427898c9e03bf01b56ba7afbac07fc7d2a2d5a15d6e9c14de98275a9565da949375aee1809591c152c0a3877bb86dbeaf74d5bd5aaa79955ad9e7a0 + languageName: node + linkType: hard + "cpu-features@npm:0.0.2": version: 0.0.2 resolution: "cpu-features@npm:0.0.2" @@ -24578,11 +23631,11 @@ __metadata: linkType: hard "cronstrue@npm:^2.2.0, cronstrue@npm:^2.32.0": - version: 2.41.0 - resolution: "cronstrue@npm:2.41.0" + version: 2.44.0 + resolution: "cronstrue@npm:2.44.0" bin: cronstrue: bin/cli.js - checksum: 3636ed90c4e3d65ea6d4d59f89758da7e5a7546b37952653c4f783f48c8ea75b6b96a6d579888026b37c2b035e16836b91ab02027a0ba33ab5c03906a344f606 + checksum: 43197b062c57ecf66a6e23043e67a4430f84678029e39f8029ccb0c0af1d1f151389f4076345c07a283d8e4fef2d8eb50bdd95c8755d0cb59b34a555ace68930 languageName: node linkType: hard @@ -24607,6 +23660,24 @@ __metadata: languageName: node linkType: hard +"cross-fetch@npm:^4.0.0": + version: 4.0.0 + resolution: "cross-fetch@npm:4.0.0" + dependencies: + node-fetch: ^2.6.12 + checksum: ecca4f37ffa0e8283e7a8a590926b66713a7ef7892757aa36c2d20ffa27b0ac5c60dcf453119c809abe5923fc0bae3702a4d896bfb406ef1077b0d0018213e24 + languageName: node + linkType: hard + +"cross-inspect@npm:1.0.0": + version: 1.0.0 + resolution: "cross-inspect@npm:1.0.0" + dependencies: + tslib: ^2.4.0 + checksum: 975c81799549627027254eb70f1c349cefb14435d580bea6f351f510c839dcb1a9288983407bac2ad317e6eff29cf1e99299606da21f404562bfa64cec502239 + languageName: node + linkType: hard + "cross-spawn@npm:^5.1.0": version: 5.1.0 resolution: "cross-spawn@npm:5.1.0" @@ -25229,20 +24300,6 @@ __metadata: languageName: node linkType: hard -"dataloader@npm:2.1.0": - version: 2.1.0 - resolution: "dataloader@npm:2.1.0" - checksum: bbd43496c41697766f8611f60ed3bae437b450985499140b9603a2447c10d45975d3a0661caaebaa9750bc1bc9fd154676a314423294916c8b8ca1a59a08d139 - languageName: node - linkType: hard - -"dataloader@npm:^1.4.0": - version: 1.4.0 - resolution: "dataloader@npm:1.4.0" - checksum: e2c93d43afde68980efc0cd9ff48e9851116e27a9687f863e02b56d46f7e7868cc762cd6dcbaf4197e1ca850a03651510c165c2ae24b8e9843fd894002ad0e20 - languageName: node - linkType: hard - "dataloader@npm:^2.0.0, dataloader@npm:^2.2.2": version: 2.2.2 resolution: "dataloader@npm:2.2.2" @@ -25602,7 +24659,7 @@ __metadata: languageName: node linkType: hard -"dependency-graph@npm:0.11.0, dependency-graph@npm:^0.11.0, dependency-graph@npm:~0.11.0": +"dependency-graph@npm:0.11.0, dependency-graph@npm:~0.11.0": version: 0.11.0 resolution: "dependency-graph@npm:0.11.0" checksum: 477204beaa9be69e642bc31ffe7a8c383d0cf48fa27acbc91c5df01431ab913e65c154213d2ef83d034c98d77280743ec85e5da018a97a18dd43d3c0b78b28cd @@ -25995,7 +25052,7 @@ __metadata: languageName: node linkType: hard -"dot-prop@npm:^5.1.0, dot-prop@npm:^5.2.0": +"dot-prop@npm:^5.2.0": version: 5.3.0 resolution: "dot-prop@npm:5.3.0" dependencies: @@ -26027,13 +25084,6 @@ __metadata: languageName: node linkType: hard -"dotenv@npm:^8.1.0": - version: 8.6.0 - resolution: "dotenv@npm:8.6.0" - checksum: 38e902c80b0666ab59e9310a3d24ed237029a7ce34d976796349765ac96b8d769f6df19090f1f471b77a25ca391971efde8a1ea63bb83111bd8bec8e5cc9b2cd - languageName: node - linkType: hard - "drange@npm:^1.0.2": version: 1.1.1 resolution: "drange@npm:1.1.1" @@ -26041,10 +25091,10 @@ __metadata: languageName: node linkType: hard -"dset@npm:3.1.2, dset@npm:^3.1.2": - version: 3.1.2 - resolution: "dset@npm:3.1.2" - checksum: 4f8066f517aa0a70af688c66e9a0a5590f0aada76f6edc7ba9ddb309e27d3a6d65c0a2e31ab2a84005d4c791e5327773cdde59b8ab169050330a0dc283663e87 +"dset@npm:^3.1.2": + version: 3.1.3 + resolution: "dset@npm:3.1.3" + checksum: 5db964a36c60c51aa3f7088bfe1dc5c0eedd9a6ef3b216935bb70ef4a7b8fc40fd2f9bb16b9a4692c9c9772cea60cfefb108d2d09fbd53c85ea8f6cd54502d6a languageName: node linkType: hard @@ -26109,7 +25159,7 @@ __metadata: "@types/puppeteer": ^5.4.4 chalk: ^4.0.0 commander: ^9.1.0 - cross-fetch: ^3.1.5 + cross-fetch: ^4.0.0 fs-extra: 10.1.0 handlebars: ^4.7.3 mysql2: ^2.2.5 @@ -26759,31 +25809,31 @@ __metadata: linkType: hard "esbuild@npm:^0.19.0": - version: 0.19.5 - resolution: "esbuild@npm:0.19.5" + version: 0.19.7 + resolution: "esbuild@npm:0.19.7" dependencies: - "@esbuild/android-arm": 0.19.5 - "@esbuild/android-arm64": 0.19.5 - "@esbuild/android-x64": 0.19.5 - "@esbuild/darwin-arm64": 0.19.5 - "@esbuild/darwin-x64": 0.19.5 - "@esbuild/freebsd-arm64": 0.19.5 - "@esbuild/freebsd-x64": 0.19.5 - "@esbuild/linux-arm": 0.19.5 - "@esbuild/linux-arm64": 0.19.5 - "@esbuild/linux-ia32": 0.19.5 - "@esbuild/linux-loong64": 0.19.5 - "@esbuild/linux-mips64el": 0.19.5 - "@esbuild/linux-ppc64": 0.19.5 - "@esbuild/linux-riscv64": 0.19.5 - "@esbuild/linux-s390x": 0.19.5 - "@esbuild/linux-x64": 0.19.5 - "@esbuild/netbsd-x64": 0.19.5 - "@esbuild/openbsd-x64": 0.19.5 - "@esbuild/sunos-x64": 0.19.5 - "@esbuild/win32-arm64": 0.19.5 - "@esbuild/win32-ia32": 0.19.5 - "@esbuild/win32-x64": 0.19.5 + "@esbuild/android-arm": 0.19.7 + "@esbuild/android-arm64": 0.19.7 + "@esbuild/android-x64": 0.19.7 + "@esbuild/darwin-arm64": 0.19.7 + "@esbuild/darwin-x64": 0.19.7 + "@esbuild/freebsd-arm64": 0.19.7 + "@esbuild/freebsd-x64": 0.19.7 + "@esbuild/linux-arm": 0.19.7 + "@esbuild/linux-arm64": 0.19.7 + "@esbuild/linux-ia32": 0.19.7 + "@esbuild/linux-loong64": 0.19.7 + "@esbuild/linux-mips64el": 0.19.7 + "@esbuild/linux-ppc64": 0.19.7 + "@esbuild/linux-riscv64": 0.19.7 + "@esbuild/linux-s390x": 0.19.7 + "@esbuild/linux-x64": 0.19.7 + "@esbuild/netbsd-x64": 0.19.7 + "@esbuild/openbsd-x64": 0.19.7 + "@esbuild/sunos-x64": 0.19.7 + "@esbuild/win32-arm64": 0.19.7 + "@esbuild/win32-ia32": 0.19.7 + "@esbuild/win32-x64": 0.19.7 dependenciesMeta: "@esbuild/android-arm": optional: true @@ -26831,7 +25881,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: 5a0227cf6ffffa3076714d88230af1dfdd2fc363d91bd712a81fb91230c315a395e2c9b7588eee62986aeebf4999804b9b1b59eeab8e2457184eb0056bfe20c8 + checksum: a5d979224d47ae0cc6685447eb8f1ceaf7b67f5eaeaac0246f4d589ff7d81b08e4502a6245298d948f13e9b571ac8556a6d83b084af24954f762b1cfe59dbe55 languageName: node linkType: hard @@ -26884,7 +25934,7 @@ __metadata: languageName: node linkType: hard -"escodegen@npm:^1.13.0, escodegen@npm:^1.8.1": +"escodegen@npm:^1.8.1": version: 1.14.3 resolution: "escodegen@npm:1.14.3" dependencies: @@ -27101,14 +26151,14 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-testing-library@npm:^5.9.1": - version: 5.11.1 - resolution: "eslint-plugin-testing-library@npm:5.11.1" +"eslint-plugin-testing-library@npm:^6.0.0": + version: 6.1.2 + resolution: "eslint-plugin-testing-library@npm:6.1.2" dependencies: "@typescript-eslint/utils": ^5.58.0 peerDependencies: eslint: ^7.5.0 || ^8.0.0 - checksum: 9f3fc68ef9f13016a4381b33ab5dbffcc189e5de3eaeba184bcf7d2771faa7f54e59c04b652162fb1c0f83fb52428dd909db5450a25508b94be59eba69fcc990 + checksum: 74e6b1bdff52e9a3937be1ae0e3ddb6cfedcd97044ac5275be6e7472c77cf8ae0f6e29fd7d3b90aac1318e22850086e73ee8dde7de8d9034be59cdfed9ba7bd7 languageName: node linkType: hard @@ -27156,13 +26206,13 @@ __metadata: linkType: hard "eslint@npm:^8.33.0, eslint@npm:^8.6.0": - version: 8.53.0 - resolution: "eslint@npm:8.53.0" + version: 8.54.0 + resolution: "eslint@npm:8.54.0" dependencies: "@eslint-community/eslint-utils": ^4.2.0 "@eslint-community/regexpp": ^4.6.1 "@eslint/eslintrc": ^2.1.3 - "@eslint/js": 8.53.0 + "@eslint/js": 8.54.0 "@humanwhocodes/config-array": ^0.11.13 "@humanwhocodes/module-importer": ^1.0.1 "@nodelib/fs.walk": ^1.2.8 @@ -27199,7 +26249,7 @@ __metadata: text-table: ^0.2.0 bin: eslint: bin/eslint.js - checksum: 2da808655c7aa4b33f8970ba30d96b453c3071cc4d6cd60d367163430677e32ff186b65270816b662d29139283138bff81f28dddeb2e73265495245a316ed02c + checksum: 7e876e9da2a18a017271cf3733d05a3dfbbe469272d75753408c6ea5b1646c71c6bb18cb91e10ca930144c32c1ce3701e222f1ae6784a3975a69f8f8aa68e49f languageName: node linkType: hard @@ -27210,7 +26260,7 @@ __metadata: languageName: node linkType: hard -"espree@npm:^9.0.0, espree@npm:^9.6.0, espree@npm:^9.6.1": +"espree@npm:^9.6.0, espree@npm:^9.6.1": version: 9.6.1 resolution: "espree@npm:9.6.1" dependencies: @@ -27332,13 +26382,6 @@ __metadata: languageName: node linkType: hard -"event-target-polyfill@npm:^0.0.3": - version: 0.0.3 - resolution: "event-target-polyfill@npm:0.0.3" - checksum: 42efefcc46aa4170547b35399337762a579fa27c9fe8b3e791aec470df3126e0bb4cb49b9f17901956eb65a137ef0e35c3a32c9f047b32c64cf56fa9ecc76d06 - languageName: node - linkType: hard - "event-target-shim@npm:^5.0.0": version: 5.0.1 resolution: "event-target-shim@npm:5.0.1" @@ -27683,7 +26726,6 @@ __metadata: "@backstage/plugin-events-backend": "workspace:^" "@backstage/plugin-events-node": "workspace:^" "@backstage/plugin-explore-backend": "workspace:^" - "@backstage/plugin-graphql-backend": "workspace:^" "@backstage/plugin-jenkins-backend": "workspace:^" "@backstage/plugin-kafka-backend": "workspace:^" "@backstage/plugin-kubernetes-backend": "workspace:^" @@ -27737,20 +26779,20 @@ __metadata: languageName: unknown linkType: soft -"execa@npm:7.2.0": - version: 7.2.0 - resolution: "execa@npm:7.2.0" +"execa@npm:8.0.1": + version: 8.0.1 + resolution: "execa@npm:8.0.1" dependencies: cross-spawn: ^7.0.3 - get-stream: ^6.0.1 - human-signals: ^4.3.0 + get-stream: ^8.0.1 + human-signals: ^5.0.0 is-stream: ^3.0.0 merge-stream: ^2.0.0 npm-run-path: ^5.1.0 onetime: ^6.0.0 - signal-exit: ^3.0.7 + signal-exit: ^4.1.0 strip-final-newline: ^3.0.0 - checksum: 14fd17ba0ca8c87b277584d93b1d9fc24f2a65e5152b31d5eb159a3b814854283eaae5f51efa9525e304447e2f757c691877f7adff8fde5746aae67eb1edd1cc + checksum: cac1bf86589d1d9b73bdc5dda65c52012d1a9619c44c526891956745f7b366ca2603d29fe3f7460bacc2b48c6eab5d6a4f7afe0534b31473d3708d1265545e1f languageName: node linkType: hard @@ -27857,8 +26899,8 @@ __metadata: linkType: hard "express-openapi-validator@npm:^5.0.4": - version: 5.0.6 - resolution: "express-openapi-validator@npm:5.0.6" + version: 5.1.1 + resolution: "express-openapi-validator@npm:5.1.1" dependencies: "@apidevtools/json-schema-ref-parser": ^9.1.2 "@types/multer": ^1.4.7 @@ -27875,7 +26917,7 @@ __metadata: multer: ^1.4.5-lts.1 ono: ^7.1.3 path-to-regexp: ^6.2.0 - checksum: 41a2451271fb907f1402b294a8537a8731cbdae6dfe2d2f04b0cbb2de55643b58b82e836bfd511992fe9f050524600684286284ec85a94de7e27f617eef57c31 + checksum: 33392d9f08c477f582675c3a747792380c6b87270cabd26ceea62cb683299cbb6ec4493e8a88ab1a91ba68657876006dc165697b733b8fcba0555c52841d3a39 languageName: node linkType: hard @@ -28004,13 +27046,6 @@ __metadata: languageName: node linkType: hard -"extract-files@npm:^9.0.0": - version: 9.0.0 - resolution: "extract-files@npm:9.0.0" - checksum: c31781d090f8d8f62cc541f1023b39ea863f24bd6fb3d4011922d71cbded70cef8191f2b70b43ec6cb5c5907cdad1dc5e9f29f78228936c10adc239091d8ab64 - languageName: node - linkType: hard - "extsprintf@npm:1.3.0": version: 1.3.0 resolution: "extsprintf@npm:1.3.0" @@ -28032,6 +27067,20 @@ __metadata: languageName: node linkType: hard +"fast-deep-equal@npm:^1.0.0": + version: 1.1.0 + resolution: "fast-deep-equal@npm:1.1.0" + checksum: 69b4c9534d9805f13a341aa72f69641d0b9ae3cc8beb25c64e68a257241c7bb34370266db27ae4fc3c4da0518448c01a5f587a096a211471c86a38facd9a1486 + languageName: node + linkType: hard + +"fast-deep-equal@npm:^2.0.1": + version: 2.0.1 + resolution: "fast-deep-equal@npm:2.0.1" + checksum: b701835a87985e0ec4925bdf1f0c1e7eb56309b5d12d534d5b4b69d95a54d65bb16861c081781ead55f73f12d6c60ba668713391ee7fbf6b0567026f579b7b0b + languageName: node + linkType: hard + "fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" @@ -28095,11 +27144,11 @@ __metadata: linkType: hard "fast-querystring@npm:^1.1.1": - version: 1.1.1 - resolution: "fast-querystring@npm:1.1.1" + version: 1.1.2 + resolution: "fast-querystring@npm:1.1.2" dependencies: fast-decode-uri-component: ^1.0.1 - checksum: 86d2b75b9b299a552353532fb1a542f09730ee2a61e657d68710971d9a2afc9a3c5c7b7e106b6534f4cc506d2ff1c08ab0fda4ae614b4e7720798c9ac2a88e02 + checksum: 7149f82ee9ac39a9c08c7ffe435b9f6deade76ae5e3675fe1835720513e8c4bc541e666b4b7b1c0c07e08f369dcf4828d00f2bee39889a90a168e1439cf27b0b languageName: node linkType: hard @@ -28124,7 +27173,7 @@ __metadata: languageName: node linkType: hard -"fast-text-encoding@npm:^1.0.0, fast-text-encoding@npm:^1.0.3": +"fast-text-encoding@npm:^1.0.0": version: 1.0.3 resolution: "fast-text-encoding@npm:1.0.3" checksum: 3e51365896f06d0dcab128092d095a0037d274deec419fecbd2388bc236d7b387610e0c72f920c6126e00c885ab096fbfaa3645712f5b98f721bef6b064916a8 @@ -28151,14 +27200,14 @@ __metadata: languageName: node linkType: hard -"fast-xml-parser@npm:^4.2.2": - version: 4.2.7 - resolution: "fast-xml-parser@npm:4.2.7" +"fast-xml-parser@npm:^4.3.0": + version: 4.3.2 + resolution: "fast-xml-parser@npm:4.3.2" dependencies: strnum: ^1.0.5 bin: fxparser: src/cli/cli.js - checksum: d8b0c9e04756f6c43fa0399428f30149acadae21350e42e26e8fe98e24e6afa6b9b00aa554453795036b00e9fee974a1b556fe2ba18be391d51a9bf1ab790e7c + checksum: d507ce2efa5fd13d0a5ba28bd76dd68f2fc30ad8748357c37b70f360d19417866d79e35a688af067d5bceaaa796033fa985206aef9692f7a421e1326b6e73309 languageName: node linkType: hard @@ -28637,13 +27686,6 @@ __metadata: languageName: node linkType: hard -"form-data-encoder@npm:^1.7.1": - version: 1.7.1 - resolution: "form-data-encoder@npm:1.7.1" - checksum: a2a360d5588a70d323c12a140c3db23a503a38f0a5d141af1efad579dde9f9fff2e49e5f31f378cb4631518c1ab4a826452c92f0d2869e954b6b2d77b05613e1 - languageName: node - linkType: hard - "form-data@npm:^2.3.2, form-data@npm:^2.5.0": version: 2.5.1 resolution: "form-data@npm:2.5.1" @@ -28695,16 +27737,6 @@ __metadata: languageName: node linkType: hard -"formdata-node@npm:^4.3.1": - version: 4.3.2 - resolution: "formdata-node@npm:4.3.2" - dependencies: - node-domexception: 1.0.0 - web-streams-polyfill: 4.0.0-beta.1 - checksum: e1d7aae7d579775b813ddc8ea4511fee613552715e81b36afb188d3a65b3d4df2ef69017106079ba52d9ab1e3367fea0206862d8ae64c02008ababdb341d2c3d - languageName: node - linkType: hard - "formidable@npm:^2.1.2": version: 2.1.2 resolution: "formidable@npm:2.1.2" @@ -28999,6 +28031,18 @@ __metadata: languageName: node linkType: hard +"gaxios@npm:^6.0.0, gaxios@npm:^6.0.2": + version: 6.1.1 + resolution: "gaxios@npm:6.1.1" + dependencies: + extend: ^3.0.2 + https-proxy-agent: ^7.0.1 + is-stream: ^2.0.0 + node-fetch: ^2.6.9 + checksum: bb4a4e6c81847b690ee29e01294d2093eb9bb4f9e60bbf81fcc6cd3b274f3c551c50a9bc134e7e7019a9b116eac9d9df6af9f2519c695da7ddd785f36564da72 + languageName: node + linkType: hard + "gcp-metadata@npm:^5.3.0": version: 5.3.0 resolution: "gcp-metadata@npm:5.3.0" @@ -29009,6 +28053,16 @@ __metadata: languageName: node linkType: hard +"gcp-metadata@npm:^6.0.0": + version: 6.1.0 + resolution: "gcp-metadata@npm:6.1.0" + dependencies: + gaxios: ^6.0.0 + json-bigint: ^1.0.0 + checksum: 55de8ae4a6b7664379a093abf7e758ae06e82f244d41bd58d881a470bf34db94c4067ce9e1b425d9455b7705636d5f8baad844e49bb73879c338753ba7785b2b + languageName: node + linkType: hard + "gendocu-public-apis@npm:^1.0.0": version: 1.0.0 resolution: "gendocu-public-apis@npm:1.0.0" @@ -29109,13 +28163,20 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^6.0.0, get-stream@npm:^6.0.1": +"get-stream@npm:^6.0.0": version: 6.0.1 resolution: "get-stream@npm:6.0.1" checksum: e04ecece32c92eebf5b8c940f51468cd53554dcbb0ea725b2748be583c9523d00128137966afce410b9b051eb2ef16d657cd2b120ca8edafcf5a65e81af63cad languageName: node linkType: hard +"get-stream@npm:^8.0.1": + version: 8.0.1 + resolution: "get-stream@npm:8.0.1" + checksum: 01e3d3cf29e1393f05f44d2f00445c5f9ec3d1c49e8179b31795484b9c117f4c695e5e07b88b50785d5c8248a788c85d9913a79266fc77e3ef11f78f10f1b974 + languageName: node + linkType: hard + "get-symbol-description@npm:^1.0.0": version: 1.0.0 resolution: "get-symbol-description@npm:1.0.0" @@ -29243,7 +28304,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.0.0, glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.1.7, glob@npm:^7.2.0": +"glob@npm:^7.0.0, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:^7.1.7, glob@npm:^7.2.0": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -29257,7 +28318,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^8.0.0, glob@npm:^8.0.1, glob@npm:^8.0.3": +"glob@npm:^8.0.1, glob@npm:^8.0.3": version: 8.1.0 resolution: "glob@npm:8.1.0" dependencies: @@ -29374,7 +28435,7 @@ __metadata: languageName: node linkType: hard -"google-auth-library@npm:^8.0.0, google-auth-library@npm:^8.0.1, google-auth-library@npm:^8.0.2": +"google-auth-library@npm:^8.0.0": version: 8.9.0 resolution: "google-auth-library@npm:8.9.0" dependencies: @@ -29391,29 +28452,36 @@ __metadata: languageName: node linkType: hard -"google-gax@npm:^3.5.7, google-gax@npm:^3.5.8": - version: 3.6.1 - resolution: "google-gax@npm:3.6.1" +"google-auth-library@npm:^9.0.0": + version: 9.2.0 + resolution: "google-auth-library@npm:9.2.0" dependencies: - "@grpc/grpc-js": ~1.8.0 + base64-js: ^1.3.0 + ecdsa-sig-formatter: ^1.0.11 + gaxios: ^6.0.0 + gcp-metadata: ^6.0.0 + gtoken: ^7.0.0 + jws: ^4.0.0 + checksum: 0da686964a769c79b5a1f7e518cb885f7c433edd50c8adf5cc310bfce607235184ebe6f9bc5290618d760c25e4ce1e273d444c9914c815353faa9d9dea37d1b3 + languageName: node + linkType: hard + +"google-gax@npm:^4.0.3, google-gax@npm:^4.0.4": + version: 4.0.5 + resolution: "google-gax@npm:4.0.5" + dependencies: + "@grpc/grpc-js": ~1.9.6 "@grpc/proto-loader": ^0.7.0 "@types/long": ^4.0.0 - "@types/rimraf": ^3.0.2 abort-controller: ^3.0.0 duplexify: ^4.0.0 - fast-text-encoding: ^1.0.3 - google-auth-library: ^8.0.2 - is-stream-ended: ^0.1.4 + google-auth-library: ^9.0.0 node-fetch: ^2.6.1 object-hash: ^3.0.0 - proto3-json-serializer: ^1.0.0 - protobufjs: 7.2.4 - protobufjs-cli: 1.1.1 - retry-request: ^5.0.0 - bin: - compileProtos: build/tools/compileProtos.js - minifyProtoJson: build/tools/minify.js - checksum: 16e5fb211d75c6a4cb4d2e62adba7bbf41d160feba74fe39435a70fc31ef8ebc740af4527a2897abab39a1806d131792b2a761da432ae1b916198c9c43aab36e + proto3-json-serializer: ^2.0.0 + protobufjs: 7.2.5 + retry-request: ^7.0.0 + checksum: d4b5f2fc4a902b29d23552ab0fa498785ce88516ff07f7e7f08cac0f6572a78113a7f468f47b17e98d235d4049eeda8d77cfcad6291f6d14bda39b9eb19f935d languageName: node linkType: hard @@ -29482,7 +28550,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.5, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.10, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.1.11, graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.5, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.10, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.10 resolution: "graceful-fs@npm:4.2.10" checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da @@ -29503,9 +28571,9 @@ __metadata: languageName: node linkType: hard -"graphiql@npm:3.0.9, graphiql@npm:^3.0.6": - version: 3.0.9 - resolution: "graphiql@npm:3.0.9" +"graphiql@npm:3.0.10, graphiql@npm:^3.0.6": + version: 3.0.10 + resolution: "graphiql@npm:3.0.10" dependencies: "@graphiql/react": ^0.20.2 "@graphiql/toolkit": ^0.9.1 @@ -29515,7 +28583,7 @@ __metadata: graphql: ^15.5.0 || ^16.0.0 react: ^16.8.0 || ^17 || ^18 react-dom: ^16.8.0 || ^17 || ^18 - checksum: 4431842ddcee548bb0aacbe6c8d2eaf3a8cd34fcdb584d98e0983dec21bdeeeaee4550c80a34debd290aebbd8535dae488d2d0beb85e1cb59b89ba4ed08ef32c + checksum: f85b5e82cd2280325dedb28d42580119df46b6724a913a571b7a8183c2bf23d4832edf45570d6c8a0af18ba576f50c9b39219a8537277cba626f0411e6ed55bb languageName: node linkType: hard @@ -29528,20 +28596,20 @@ __metadata: languageName: node linkType: hard -"graphql-config@npm:^4.5.0": - version: 4.5.0 - resolution: "graphql-config@npm:4.5.0" +"graphql-config@npm:^5.0.2": + version: 5.0.3 + resolution: "graphql-config@npm:5.0.3" dependencies: - "@graphql-tools/graphql-file-loader": ^7.3.7 - "@graphql-tools/json-file-loader": ^7.3.7 - "@graphql-tools/load": ^7.5.5 - "@graphql-tools/merge": ^8.2.6 - "@graphql-tools/url-loader": ^7.9.7 - "@graphql-tools/utils": ^9.0.0 - cosmiconfig: 8.0.0 - jiti: 1.17.1 - minimatch: 4.2.3 - string-env-interpolation: 1.0.1 + "@graphql-tools/graphql-file-loader": ^8.0.0 + "@graphql-tools/json-file-loader": ^8.0.0 + "@graphql-tools/load": ^8.0.0 + "@graphql-tools/merge": ^9.0.0 + "@graphql-tools/url-loader": ^8.0.0 + "@graphql-tools/utils": ^10.0.0 + cosmiconfig: ^8.1.0 + jiti: ^1.18.2 + minimatch: ^4.2.3 + string-env-interpolation: ^1.0.1 tslib: ^2.4.0 peerDependencies: cosmiconfig-toml-loader: ^1.0.0 @@ -29549,7 +28617,7 @@ __metadata: peerDependenciesMeta: cosmiconfig-toml-loader: optional: true - checksum: 8ab1a3ce3534598ddac2df213b6af2eecd9ebcca2268d39cc3e87a6e55749483389a6df222e9e0acd638dd2479378a5c8e8d90f980e6a54e700c4c4ae3522123 + checksum: 3d079d48ccc624d16bee58d15802267d65e856f4d1ba278ededb3ac66a565d4f205cd60ac1f19ed8159bfa2d944c453ae58512c6513a8004754bea9964924485 languageName: node linkType: hard @@ -29576,34 +28644,6 @@ __metadata: languageName: node linkType: hard -"graphql-modules@npm:^2.0.0": - version: 2.3.0 - resolution: "graphql-modules@npm:2.3.0" - dependencies: - "@graphql-tools/schema": ^10.0.0 - "@graphql-tools/wrap": ^10.0.0 - "@graphql-typed-document-node/core": ^3.1.0 - ramda: ^0.29.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: aea97b00535914d472c544a9e104091b7208f56634f622471bd8389e7702483cdff4f38fd0877f1c9ebb93d3fabed443b10e49d88f0624642271a5d1479d971e - languageName: node - linkType: hard - -"graphql-request@npm:^5.0.0": - version: 5.1.0 - resolution: "graphql-request@npm:5.1.0" - dependencies: - "@graphql-typed-document-node/core": ^3.1.1 - cross-fetch: ^3.1.5 - extract-files: ^9.0.0 - form-data: ^3.0.0 - peerDependencies: - graphql: 14 - 16 - checksum: 8b65d5c1b0cad8996a843b52305b2712ffbf842c700487d4cee1ed719f22baacaacfddafb65572bcddd67d57fd1d2d389dee2430ffba4b34c3ab542d079446c7 - languageName: node - linkType: hard - "graphql-subscriptions@npm:^1.1.0": version: 1.2.1 resolution: "graphql-subscriptions@npm:1.2.1" @@ -29615,7 +28655,7 @@ __metadata: languageName: node linkType: hard -"graphql-tag@npm:^2.10.3, graphql-tag@npm:^2.11.0, graphql-tag@npm:^2.12.6": +"graphql-tag@npm:^2.10.3, graphql-tag@npm:^2.12.6": version: 2.12.6 resolution: "graphql-tag@npm:2.12.6" dependencies: @@ -29626,15 +28666,6 @@ __metadata: languageName: node linkType: hard -"graphql-type-json@npm:^0.3.2": - version: 0.3.2 - resolution: "graphql-type-json@npm:0.3.2" - peerDependencies: - graphql: ">=0.8.0" - checksum: 41620699637a5294937bd61d6e2696edea5a1279ef3d8f4b33716a910635595435381ccd1b74c6fae62c2bc81064c62ae27d3559c8380c0f99bdfdc8ecb249b0 - languageName: node - linkType: hard - "graphql-voyager@npm:^1.0.0-rc.31": version: 1.0.0-rc.31 resolution: "graphql-voyager@npm:1.0.0-rc.31" @@ -29656,16 +28687,7 @@ __metadata: languageName: node linkType: hard -"graphql-ws@npm:5.11.2": - version: 5.11.2 - resolution: "graphql-ws@npm:5.11.2" - peerDependencies: - graphql: ">=0.11 <=16" - checksum: 2c94b06c1919217dc15a0556474673de7aabcc7179a2982a87ded51856c105e4f4ee6d54a6c135a0a7f55d85a5997a6a15cff514959258885814adec6a61ff00 - languageName: node - linkType: hard - -"graphql-ws@npm:^5.4.1, graphql-ws@npm:^5.9.0": +"graphql-ws@npm:^5.14.0, graphql-ws@npm:^5.4.1, graphql-ws@npm:^5.9.0": version: 5.14.2 resolution: "graphql-ws@npm:5.14.2" peerDependencies: @@ -29730,6 +28752,16 @@ __metadata: languageName: node linkType: hard +"gtoken@npm:^7.0.0": + version: 7.0.1 + resolution: "gtoken@npm:7.0.1" + dependencies: + gaxios: ^6.0.0 + jws: ^4.0.0 + checksum: de1f65ebe77deb90931c29c76408e6bd097ac6f8d0b520164ac13449b39012ea8d710596d5a63ae508b2c9e49ef9f92cd7817d6fc97140668ba2e1ff30e2d418 + languageName: node + linkType: hard + "gzip-size@npm:^6.0.0": version: 6.0.0 resolution: "gzip-size@npm:6.0.0" @@ -29943,16 +28975,6 @@ __metadata: languageName: node linkType: hard -"header-case@npm:^2.0.4": - version: 2.0.4 - resolution: "header-case@npm:2.0.4" - dependencies: - capital-case: ^1.0.4 - tslib: ^2.0.3 - checksum: 571c83eeb25e8130d172218712f807c0b96d62b020981400bccc1503a7cf14b09b8b10498a962d2739eccf231d950e3848ba7d420b58a6acd2f9283439546cd9 - languageName: node - linkType: hard - "headers-polyfill@npm:3.2.5": version: 3.2.5 resolution: "headers-polyfill@npm:3.2.5" @@ -29960,6 +28982,13 @@ __metadata: languageName: node linkType: hard +"headers-polyfill@npm:^4.0.1": + version: 4.0.2 + resolution: "headers-polyfill@npm:4.0.2" + checksum: a95280ed58df429fc86c4f49b21596be3ea3f5f3d790e7d75238668df9b90b292f15a968c7c19ae1db88c0ae036dd1bf363a71b8e771199d82848e2d8b3c6c2e + languageName: node + linkType: hard + "helmet@npm:^6.0.0": version: 6.0.1 resolution: "helmet@npm:6.0.1" @@ -30358,10 +29387,10 @@ __metadata: languageName: node linkType: hard -"human-signals@npm:^4.3.0": - version: 4.3.0 - resolution: "human-signals@npm:4.3.0" - checksum: 662b976b1063a8afb8fd7fa50bde6975997e17ea6ceba2aad54aacf1dc239a2cd7d14d27b3ceca0c6288627f4b45c56c2c89618455ff52cd9377c02d6328cd7c +"human-signals@npm:^5.0.0": + version: 5.0.0 + resolution: "human-signals@npm:5.0.0" + checksum: 6504560d5ed91444f16bea3bd9dfc66110a339442084e56c3e7fa7bbdf3f406426d6563d662bdce67064b165eac31eeabfc0857ed170aaa612cf14ec9f9a464c languageName: node linkType: hard @@ -30516,13 +29545,6 @@ __metadata: languageName: node linkType: hard -"immutable@npm:~3.7.6": - version: 3.7.6 - resolution: "immutable@npm:3.7.6" - checksum: 8cccfb22d3ecf14fe0c474612e96d6bb5d117493e7639fe6642fb81e78c9ac4b698dd8a322c105001a709ad873ffc90e30bad7db5d9a3ef0b54a6e1db0258e8e - languageName: node - linkType: hard - "import-cwd@npm:^3.0.0": version: 3.0.0 resolution: "import-cwd@npm:3.0.0" @@ -30532,7 +29554,7 @@ __metadata: languageName: node linkType: hard -"import-fresh@npm:^3.1.0, import-fresh@npm:^3.2.1": +"import-fresh@npm:^3.1.0, import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": version: 3.3.0 resolution: "import-fresh@npm:3.3.0" dependencies: @@ -30542,13 +29564,6 @@ __metadata: languageName: node linkType: hard -"import-from@npm:4.0.0": - version: 4.0.0 - resolution: "import-from@npm:4.0.0" - checksum: 1fa29c05b048da18914e91d9a529e5d9b91774bebbfab10e53f59bcc1667917672b971cf102fee857f142e5e433ce69fa1f0a596e1c7d82f9947a5ec352694b9 - languageName: node - linkType: hard - "import-from@npm:^3.0.0": version: 3.0.0 resolution: "import-from@npm:3.0.0" @@ -30831,16 +29846,6 @@ __metadata: languageName: node linkType: hard -"is-absolute@npm:^1.0.0": - version: 1.0.0 - resolution: "is-absolute@npm:1.0.0" - dependencies: - is-relative: ^1.0.0 - is-windows: ^1.0.1 - checksum: 9d16b2605eda3f3ce755410f1d423e327ad3a898bcb86c9354cf63970ed3f91ba85e9828aa56f5d6a952b9fae43d0477770f78d37409ae8ecc31e59ebc279b27 - languageName: node - linkType: hard - "is-admin@npm:^3.0.0": version: 3.0.0 resolution: "is-admin@npm:3.0.0" @@ -31105,7 +30110,7 @@ __metadata: languageName: node linkType: hard -"is-glob@npm:4.0.3, is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" dependencies: @@ -31159,15 +30164,6 @@ __metadata: languageName: node linkType: hard -"is-lower-case@npm:^2.0.2": - version: 2.0.2 - resolution: "is-lower-case@npm:2.0.2" - dependencies: - tslib: ^2.0.3 - checksum: ba57dd1201e15fd9b590654736afccf1b3b68e919f40c23ef13b00ebcc639b1d9c2f81fe86415bff3e8eccffec459786c9ac9dc8f3a19cfa4484206c411c1d7d - languageName: node - linkType: hard - "is-map@npm:^2.0.1, is-map@npm:^2.0.2": version: 2.0.2 resolution: "is-map@npm:2.0.2" @@ -31348,15 +30344,6 @@ __metadata: languageName: node linkType: hard -"is-relative@npm:^1.0.0": - version: 1.0.0 - resolution: "is-relative@npm:1.0.0" - dependencies: - is-unc-path: ^1.0.0 - checksum: 3271a0df109302ef5e14a29dcd5d23d9788e15ade91a40b942b035827ffbb59f7ce9ff82d036ea798541a52913cbf9d2d0b66456340887b51f3542d57b5a4c05 - languageName: node - linkType: hard - "is-resolvable@npm:^1.1.0": version: 1.1.0 resolution: "is-resolvable@npm:1.1.0" @@ -31412,13 +30399,6 @@ __metadata: languageName: node linkType: hard -"is-stream-ended@npm:^0.1.4": - version: 0.1.4 - resolution: "is-stream-ended@npm:0.1.4" - checksum: 56cbc9cfa0a77877777a3df9e186abb5b0ca73dcbcaf0fd87ed573fb8f8e61283abec0fc072c9e3412336edc04449439b8a128d2bcc6c2797158de5465cfaf85 - languageName: node - linkType: hard - "is-stream@npm:^1.0.1, is-stream@npm:^1.1.0": version: 1.1.0 resolution: "is-stream@npm:1.1.0" @@ -31483,15 +30463,6 @@ __metadata: languageName: node linkType: hard -"is-unc-path@npm:^1.0.0": - version: 1.0.0 - resolution: "is-unc-path@npm:1.0.0" - dependencies: - unc-path-regex: ^0.1.2 - checksum: e8abfde203f7409f5b03a5f1f8636e3a41e78b983702ef49d9343eb608cdfe691429398e8815157519b987b739bcfbc73ae7cf4c8582b0ab66add5171088eab6 - languageName: node - linkType: hard - "is-unicode-supported@npm:^0.1.0": version: 0.1.0 resolution: "is-unicode-supported@npm:0.1.0" @@ -31499,15 +30470,6 @@ __metadata: languageName: node linkType: hard -"is-upper-case@npm:^2.0.2": - version: 2.0.2 - resolution: "is-upper-case@npm:2.0.2" - dependencies: - tslib: ^2.0.3 - checksum: cf4fd43c00c2e72cd5cff911923070b89f0933b464941bd782e2315385f80b5a5acd772db3b796542e5e3cfed735f4dffd88c54d62db1ebfc5c3daa7b1af2bc6 - languageName: node - linkType: hard - "is-url@npm:^1.2.4": version: 1.2.4 resolution: "is-url@npm:1.2.4" @@ -31548,7 +30510,7 @@ __metadata: languageName: node linkType: hard -"is-windows@npm:^1.0.0, is-windows@npm:^1.0.1": +"is-windows@npm:^1.0.0": version: 1.0.2 resolution: "is-windows@npm:1.0.2" checksum: 438b7e52656fe3b9b293b180defb4e448088e7023a523ec21a91a80b9ff8cdb3377ddb5b6e60f7c7de4fa8b63ab56e121b6705fe081b3cf1b828b0a380009ad7 @@ -31658,16 +30620,6 @@ __metadata: languageName: node linkType: hard -"isomorphic-fetch@npm:^3.0.0": - version: 3.0.0 - resolution: "isomorphic-fetch@npm:3.0.0" - dependencies: - node-fetch: ^2.6.1 - whatwg-fetch: ^3.4.1 - checksum: e5ab79a56ce5af6ddd21265f59312ad9a4bc5a72cebc98b54797b42cb30441d5c5f8d17c5cd84a99e18101c8af6f90c081ecb8d12fd79e332be1778d58486d75 - languageName: node - linkType: hard - "isomorphic-form-data@npm:^2.0.0": version: 2.0.0 resolution: "isomorphic-form-data@npm:2.0.0" @@ -32453,21 +31405,12 @@ __metadata: languageName: node linkType: hard -"jiti@npm:1.17.1": - version: 1.17.1 - resolution: "jiti@npm:1.17.1" +"jiti@npm:^1.18.2": + version: 1.21.0 + resolution: "jiti@npm:1.21.0" bin: jiti: bin/jiti.js - checksum: 56c6d8488e7e9cc6ee66a0f0d5e18db6669cb12b2e93364f393442289a9bc75a8e8c796249f59015e01c3ebdf9478e2ca8b76c30e29072c678ee00d39de757c7 - languageName: node - linkType: hard - -"jiti@npm:^1.17.1": - version: 1.17.2 - resolution: "jiti@npm:1.17.2" - bin: - jiti: bin/jiti.js - checksum: 51941fea3622d1ff80d914ec6ec95ae463ede598a4a2317f1e8ff018823212eba6b9ea1c638c97c18f681870b1c2b9f49fbb13021b7c2415c46c8a3b1910f1e3 + checksum: a7bd5d63921c170eaec91eecd686388181c7828e1fa0657ab374b9372bfc1f383cf4b039e6b272383d5cb25607509880af814a39abdff967322459cca41f2961 languageName: node linkType: hard @@ -32552,7 +31495,7 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.0, js-yaml@npm:^3.13.1, js-yaml@npm:^3.6.1, js-yaml@npm:^3.8.3": +"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.0, js-yaml@npm:^3.13.1, js-yaml@npm:^3.14.0, js-yaml@npm:^3.6.1, js-yaml@npm:^3.8.3": version: 3.14.1 resolution: "js-yaml@npm:3.14.1" dependencies: @@ -32576,15 +31519,6 @@ __metadata: languageName: node linkType: hard -"js2xmlparser@npm:^4.0.2": - version: 4.0.2 - resolution: "js2xmlparser@npm:4.0.2" - dependencies: - xmlcreate: ^2.0.4 - checksum: 55e3af71dc0104941dfc3e85452230db42ff3870a5777d1ea26bc0c68743f49113a517a7b305421a932b29f10058a012a7da8f5ba07860a05a1dce9fe5b62962 - languageName: node - linkType: hard - "jsbn@npm:~0.1.0": version: 0.1.1 resolution: "jsbn@npm:0.1.1" @@ -32648,31 +31582,6 @@ __metadata: languageName: node linkType: hard -"jsdoc@npm:^4.0.0": - version: 4.0.2 - resolution: "jsdoc@npm:4.0.2" - dependencies: - "@babel/parser": ^7.20.15 - "@jsdoc/salty": ^0.2.1 - "@types/markdown-it": ^12.2.3 - bluebird: ^3.7.2 - catharsis: ^0.9.0 - escape-string-regexp: ^2.0.0 - js2xmlparser: ^4.0.2 - klaw: ^3.0.0 - markdown-it: ^12.3.2 - markdown-it-anchor: ^8.4.1 - marked: ^4.0.10 - mkdirp: ^1.0.4 - requizzle: ^0.2.3 - strip-json-comments: ^3.1.0 - underscore: ~1.13.2 - bin: - jsdoc: jsdoc.js - checksum: 04bf5ab005349b7581bd0e72ed99933eb71a41dcb47235b486b7d9146fbdf212a53e0cc044abe48ccf46012bd812dc1dfc007c6d679660ebdd053cd000242515 - languageName: node - linkType: hard - "jsdom@npm:^16.5.2": version: 16.7.0 resolution: "jsdom@npm:16.7.0" @@ -32863,6 +31772,15 @@ __metadata: languageName: node linkType: hard +"json-schema-migrate@npm:^0.2.0": + version: 0.2.0 + resolution: "json-schema-migrate@npm:0.2.0" + dependencies: + ajv: ^5.0.0 + checksum: fc5b3ed2cfc5d02059836120653b63f846a18037ec554b47267f9c104750f8fa3f3acb38d0129f116fd2db017c69cc90456cfae66930aa1d328fe12a422c0125 + languageName: node + linkType: hard + "json-schema-to-ts@npm:^2.6.2": version: 2.9.2 resolution: "json-schema-to-ts@npm:2.9.2" @@ -32874,6 +31792,13 @@ __metadata: languageName: node linkType: hard +"json-schema-traverse@npm:^0.3.0": + version: 0.3.1 + resolution: "json-schema-traverse@npm:0.3.1" + checksum: a685c36222023471c25c86cddcff506306ecb8f8941922fd356008419889c41c38e1c16d661d5499d0a561b34f417693e9bb9212ba2b2b2f8f8a345a49e4ec1a + languageName: node + linkType: hard + "json-schema-traverse@npm:^0.4.1": version: 0.4.1 resolution: "json-schema-traverse@npm:0.4.1" @@ -32932,26 +31857,6 @@ __metadata: languageName: node linkType: hard -"json-to-ast@npm:^2.1.0": - version: 2.1.0 - resolution: "json-to-ast@npm:2.1.0" - dependencies: - code-error-fragment: 0.0.230 - grapheme-splitter: ^1.0.4 - checksum: 1e9b051505b218573b39f3fec9054d75772413aefc2fee3e763d9033276664faa7eec26b945a71f70b9ce29685b2f13259df7dd3243e15eacf4672c62d5ba7ce - languageName: node - linkType: hard - -"json-to-pretty-yaml@npm:^1.2.2": - version: 1.2.2 - resolution: "json-to-pretty-yaml@npm:1.2.2" - dependencies: - remedial: ^1.0.7 - remove-trailing-spaces: ^1.0.6 - checksum: 4b78480f426e176e5fdac073e05877683bb026f1175deb52d0941b992f9c91a58a812c020f00aa67ba1fc7cadb220539a264146f222e48a48c8bb2a0931cac9b - languageName: node - linkType: hard - "json2xml@npm:^0.1.3": version: 0.1.3 resolution: "json2xml@npm:0.1.3" @@ -33142,77 +32047,77 @@ __metadata: languageName: node linkType: hard -"jss-plugin-camel-case@npm:^10.5.1": - version: 10.9.2 - resolution: "jss-plugin-camel-case@npm:10.9.2" +"jss-plugin-camel-case@npm:^10.10.0, jss-plugin-camel-case@npm:^10.5.1": + version: 10.10.0 + resolution: "jss-plugin-camel-case@npm:10.10.0" dependencies: "@babel/runtime": ^7.3.1 hyphenate-style-name: ^1.0.3 - jss: 10.9.2 - checksum: 5fa617b23ce9718244691c59ace6a0d1271dbcb4430ce3e13b851ee1879c1db8ecab7e941c33802bea763a0f0e2b609d004b8a975b2063f213cdd639cdd384d2 + jss: 10.10.0 + checksum: 693485b86f7a0e0bd0c16b8ddd057ca02a993fc088558c96501f9131e7e6261cc9f4b08047879a68441c688c40dceeb5219b1f15ade9043935aade4f37f5ca85 languageName: node linkType: hard -"jss-plugin-default-unit@npm:^10.5.1": - version: 10.9.2 - resolution: "jss-plugin-default-unit@npm:10.9.2" +"jss-plugin-default-unit@npm:^10.10.0, jss-plugin-default-unit@npm:^10.5.1": + version: 10.10.0 + resolution: "jss-plugin-default-unit@npm:10.10.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.9.2 - checksum: 48d8d836d36dd15513d98de11fba6be373ac29e6fd5702eb2edd143c815fb9e2f9969b2af6b1b964e9b8a052828690887042f6bcb34836836d5c359e52702d0f + jss: 10.10.0 + checksum: 6e56213830753ad80bca3824973a667106defaef698d5996d45d03a0e2a3e035b33cd257aa8015040c41bd6669e7598dce72c36099d7ae69db758a7b2ca453fa languageName: node linkType: hard -"jss-plugin-global@npm:^10.5.1": - version: 10.9.2 - resolution: "jss-plugin-global@npm:10.9.2" +"jss-plugin-global@npm:^10.10.0, jss-plugin-global@npm:^10.5.1": + version: 10.10.0 + resolution: "jss-plugin-global@npm:10.10.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.9.2 - checksum: 9b29b0c1f169d5a1033890875df072d76364a902d0f6470f448544669a388612a9a4d51844fb2bcb6d25a1c43d67c1637f11a162c2cdd9f4b6b0a8f9c94f6090 + jss: 10.10.0 + checksum: f3af4f40358e96cf89e0c7c84b6e441dc9b4d543cd6109fdf9314a9818fd780d252035f46cc526c3d3fb4393bc29effc6993cc22e04f4e67ec3c889ab760d580 languageName: node linkType: hard -"jss-plugin-nested@npm:^10.5.1": - version: 10.9.2 - resolution: "jss-plugin-nested@npm:10.9.2" +"jss-plugin-nested@npm:^10.10.0, jss-plugin-nested@npm:^10.5.1": + version: 10.10.0 + resolution: "jss-plugin-nested@npm:10.10.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.9.2 + jss: 10.10.0 tiny-warning: ^1.0.2 - checksum: ee08df07f3d553931b48037674842a8314bbc7857cc954a52f962a516bfc4b2d4e9871578b06b8fa3981edf5a927cea00021fd368d4ce315870065b7647f7b57 + checksum: 190094375972b68eb8f683387c74e97dc8347e7cc4f2fbfd40b3baf077dfde83d70e57be56744690d22537c0390e0a398714d86736df820c64e498df95f937de languageName: node linkType: hard -"jss-plugin-props-sort@npm:^10.5.1": - version: 10.9.2 - resolution: "jss-plugin-props-sort@npm:10.9.2" +"jss-plugin-props-sort@npm:^10.10.0, jss-plugin-props-sort@npm:^10.5.1": + version: 10.10.0 + resolution: "jss-plugin-props-sort@npm:10.10.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.9.2 - checksum: 70bd181a458a6078f19ad4d7350570c78d26b9aabc25a1fbde673839edcc19825af7b636861b208a38aa17e551e68d0ea38599480716b4aec08e353bbe737222 + jss: 10.10.0 + checksum: 274483444b6733bd58d229ebdcdb32b3c24172bc83cb2f6f8364926de19acd872758bcf06c7b3af11cf75504a67a7d67abba62b25081d144585a56b4df9512ba languageName: node linkType: hard -"jss-plugin-rule-value-function@npm:^10.5.1": - version: 10.9.2 - resolution: "jss-plugin-rule-value-function@npm:10.9.2" +"jss-plugin-rule-value-function@npm:^10.10.0, jss-plugin-rule-value-function@npm:^10.5.1": + version: 10.10.0 + resolution: "jss-plugin-rule-value-function@npm:10.10.0" dependencies: "@babel/runtime": ^7.3.1 - jss: 10.9.2 + jss: 10.10.0 tiny-warning: ^1.0.2 - checksum: b1a03209d0249f13ea6de766d3ee14c1769cd1f67d8c543c7d1ce6178c32cf15507c021ecb3e3b7585a8a7a2425dddbe0bdae02f4135c4598725a4152bebfc99 + checksum: 009c9593b9be8b9f1030b797e58e3c233d90e034e5c68b0cabd25bffc7da965c69dc1ccb1bb6a542d72bb824df89036b2264fe564e8538320ef99febaf2882ee languageName: node linkType: hard -"jss-plugin-vendor-prefixer@npm:^10.5.1": - version: 10.9.2 - resolution: "jss-plugin-vendor-prefixer@npm:10.9.2" +"jss-plugin-vendor-prefixer@npm:^10.10.0, jss-plugin-vendor-prefixer@npm:^10.5.1": + version: 10.10.0 + resolution: "jss-plugin-vendor-prefixer@npm:10.10.0" dependencies: "@babel/runtime": ^7.3.1 css-vendor: ^2.0.8 - jss: 10.9.2 - checksum: a5c352a500fea82e8a782a090cc9815f6331259f1a331158ed74ed77c750fb45750f5ae95f07d27922742830b45d4c3592cfaab194b3ba4a50591acbdeab04d8 + jss: 10.10.0 + checksum: 879b7233f9b0b571074dc2b88d97a05dbb949012ba2405f1481bbedd521167dc835133632adb3f2d8ffceddd337c8c13e3e8b1931590516c0664039598752dff languageName: node linkType: hard @@ -33236,19 +32141,7 @@ __metadata: languageName: node linkType: hard -"jss@npm:10.9.2": - version: 10.9.2 - resolution: "jss@npm:10.9.2" - dependencies: - "@babel/runtime": ^7.3.1 - csstype: ^3.0.2 - is-in-browser: ^1.1.3 - tiny-warning: ^1.0.2 - checksum: 7ae5cd2f8602bf197ec90251d774b9f10d55eb2db0854ac78dc7fb6983828c202e8eb0d5c8c59c73b2f64718ebd33d6063afa799d625a995986a22dc1cc27230 - languageName: node - linkType: hard - -"jss@npm:^10.5.1, jss@npm:~10.10.0": +"jss@npm:10.10.0, jss@npm:^10.10.0, jss@npm:^10.5.1, jss@npm:~10.10.0": version: 10.10.0 resolution: "jss@npm:10.10.0" dependencies: @@ -33406,15 +32299,6 @@ __metadata: languageName: node linkType: hard -"klaw@npm:^3.0.0": - version: 3.0.0 - resolution: "klaw@npm:3.0.0" - dependencies: - graceful-fs: ^4.1.9 - checksum: 1bf9de22392c80d28de8a2babd6f0de29fa52fcdc1654838fd35174b3641c168ec32b8b03022191e3c190efd535c31fce23f85e29cb260245571da7263ef418e - languageName: node - linkType: hard - "kleur@npm:^3.0.3": version: 3.0.3 resolution: "kleur@npm:3.0.3" @@ -33693,16 +32577,6 @@ __metadata: languageName: node linkType: hard -"linkify-react@npm:4.1.1": - version: 4.1.1 - resolution: "linkify-react@npm:4.1.1" - peerDependencies: - linkifyjs: ^4.0.0 - react: ">= 15.0.0" - checksum: 2f213f134055d4a11587e7e0bc3e0ef7e372c8c0d1419dbc5bb8e3a280f325bea9ad9d8d6017fd79f8f86fa4127ed75cbe6f320ef9d92a00ae510f320db0f408 - languageName: node - linkType: hard - "linkify-react@npm:4.1.2": version: 4.1.2 resolution: "linkify-react@npm:4.1.2" @@ -33713,10 +32587,13 @@ __metadata: languageName: node linkType: hard -"linkifyjs@npm:4.1.1": - version: 4.1.1 - resolution: "linkifyjs@npm:4.1.1" - checksum: 312b75ec9bc6e7107f2b70e50682e8baccd7b94a64bf7b88cecd352032126b0d6fa7ea41394c417a178c718caa79b70e6ab3570eee7b96a12399689d666e68fb +"linkify-react@npm:4.1.3": + version: 4.1.3 + resolution: "linkify-react@npm:4.1.3" + peerDependencies: + linkifyjs: ^4.0.0 + react: ">= 15.0.0" + checksum: 1c28ab02774d5427fad9f4a5ad1c7b852b83aece983fd143fdb4ec95dedf7edc77da59883aaf6fb1a2c2060e8b5e72fdfad4d704d544fabc2b173a1b1eb6473d languageName: node linkType: hard @@ -33727,23 +32604,23 @@ __metadata: languageName: node linkType: hard -"lint-staged@npm:^13.0.0": - version: 13.3.0 - resolution: "lint-staged@npm:13.3.0" +"lint-staged@npm:^15.0.0": + version: 15.1.0 + resolution: "lint-staged@npm:15.1.0" dependencies: chalk: 5.3.0 - commander: 11.0.0 + commander: 11.1.0 debug: 4.3.4 - execa: 7.2.0 + execa: 8.0.1 lilconfig: 2.1.0 - listr2: 6.6.1 + listr2: 7.0.2 micromatch: 4.0.5 pidtree: 0.6.0 string-argv: 0.3.2 - yaml: 2.3.1 + yaml: 2.3.4 bin: lint-staged: bin/lint-staged.js - checksum: f7c146cc2849c9ce4f1d2808d990fcbdef5e0bb79e6e79cc895f53c91f5ac4dcefdb8c3465156b38a015dcb051f2795c6bda4f20a1e2f2fa654c7ba521b2d2e0 + checksum: e99bdedb32d20fa22c0d0798ecf014fd00ac9cce1158373d7caf47855c0b9b4c20d228417677a05ea81f6941f957ae9347dccb3846a48bc1fdd0cdeed2ccf0ef languageName: node linkType: hard @@ -33754,9 +32631,9 @@ __metadata: languageName: node linkType: hard -"listr2@npm:6.6.1": - version: 6.6.1 - resolution: "listr2@npm:6.6.1" +"listr2@npm:7.0.2": + version: 7.0.2 + resolution: "listr2@npm:7.0.2" dependencies: cli-truncate: ^3.1.0 colorette: ^2.0.20 @@ -33764,33 +32641,7 @@ __metadata: log-update: ^5.0.1 rfdc: ^1.3.0 wrap-ansi: ^8.1.0 - peerDependencies: - enquirer: ">= 2.3.0 < 3" - peerDependenciesMeta: - enquirer: - optional: true - checksum: 99600e8a51f838f7208bce7e16d6b3d91d361f13881e6aa91d0b561a9a093ddcf63b7bc2a7b47aec7fdbff9d0e8c9f68cb66e6dfe2d857e5b1df8ab045c26ce8 - languageName: node - linkType: hard - -"listr2@npm:^4.0.5": - version: 4.0.5 - resolution: "listr2@npm:4.0.5" - dependencies: - cli-truncate: ^2.1.0 - colorette: ^2.0.16 - log-update: ^4.0.0 - p-map: ^4.0.0 - rfdc: ^1.3.0 - rxjs: ^7.5.5 - through: ^2.3.8 - wrap-ansi: ^7.0.0 - peerDependencies: - enquirer: ">= 2.3.0 < 3" - peerDependenciesMeta: - enquirer: - optional: true - checksum: 7af31851abe25969ef0581c6db808117e36af15b131401795182427769d9824f451ba9e8aff6ccd25b6a4f6c8796f816292caf08e5f1f9b1775e8e9c313dc6c5 + checksum: 1734c6b9367ceeb09bf372427930a4586b3727097373408f2f840896b9333cc80e53a1a696771a83a7d4d9ada46229843f3052b87f3b0b58c20e9451362c2dd3 languageName: node linkType: hard @@ -34108,7 +32959,7 @@ __metadata: languageName: node linkType: hard -"lodash@npm:4.17.21, lodash@npm:^4.15.0, lodash@npm:^4.16.4, lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.7.0, lodash@npm:~4.17.0, lodash@npm:~4.17.15, lodash@npm:~4.17.21": +"lodash@npm:4.17.21, lodash@npm:^4.15.0, lodash@npm:^4.16.4, lodash@npm:^4.17.10, lodash@npm:^4.17.11, lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:^4.17.4, lodash@npm:^4.7.0, lodash@npm:~4.17.15, lodash@npm:~4.17.21": version: 4.17.21 resolution: "lodash@npm:4.17.21" checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 @@ -34143,18 +32994,6 @@ __metadata: languageName: node linkType: hard -"log-update@npm:^4.0.0": - version: 4.0.0 - resolution: "log-update@npm:4.0.0" - dependencies: - ansi-escapes: ^4.3.0 - cli-cursor: ^3.1.0 - slice-ansi: ^4.0.0 - wrap-ansi: ^6.2.0 - checksum: ae2f85bbabc1906034154fb7d4c4477c79b3e703d22d78adee8b3862fa913942772e7fa11713e3d96fb46de4e3cabefbf5d0a544344f03b58d3c4bff52aa9eb2 - languageName: node - linkType: hard - "log-update@npm:^5.0.1": version: 5.0.1 resolution: "log-update@npm:5.0.1" @@ -34197,7 +33036,7 @@ __metadata: languageName: node linkType: hard -"loglevel@npm:^1.6.8, loglevel@npm:^1.8.0": +"loglevel@npm:^1.8.0": version: 1.8.1 resolution: "loglevel@npm:1.8.1" checksum: a1a62db40291aaeaef2f612334c49e531bff71cc1d01a2acab689ab80d59e092f852ab164a5aedc1a752fdc46b7b162cb097d8a9eb2cf0b299511106c29af61d @@ -34236,15 +33075,6 @@ __metadata: languageName: node linkType: hard -"lower-case-first@npm:^2.0.2": - version: 2.0.2 - resolution: "lower-case-first@npm:2.0.2" - dependencies: - tslib: ^2.0.3 - checksum: 33e3da1098ddda219ce125d4ab7a78a944972c0ee8872e95b6ccc35df8ad405284ab233b0ba4d72315ad1a06fe2f0d418ee4cba9ec1ef1c386dea78899fc8958 - languageName: node - linkType: hard - "lower-case@npm:^2.0.2": version: 2.0.2 resolution: "lower-case@npm:2.0.2" @@ -34313,7 +33143,7 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^7.10.1, lru-cache@npm:^7.14.0, lru-cache@npm:^7.14.1, lru-cache@npm:^7.7.1": +"lru-cache@npm:^7.14.0, lru-cache@npm:^7.7.1": version: 7.18.3 resolution: "lru-cache@npm:7.18.3" checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 @@ -34358,9 +33188,9 @@ __metadata: linkType: hard "luxon@npm:^3.0.0, luxon@npm:^3.3.0, luxon@npm:^3.4.3": - version: 3.4.3 - resolution: "luxon@npm:3.4.3" - checksum: 3eade81506224d038ed24035a0cd0dd4887848d7eba9361dce9ad8ef81380596a68153240be3988721f9690c624fb449fcf8fd8c3fc0681a6a8496faf48e92a3 + version: 3.4.4 + resolution: "luxon@npm:3.4.4" + checksum: 36c1f99c4796ee4bfddf7dc94fa87815add43ebc44c8934c924946260a58512f0fd2743a629302885df7f35ccbd2d13f178c15df046d0e3b6eb71db178f1c60c languageName: node linkType: hard @@ -34442,7 +33272,7 @@ __metadata: languageName: node linkType: hard -"make-fetch-happen@npm:^10.0.1, make-fetch-happen@npm:^10.0.3": +"make-fetch-happen@npm:^10.0.1": version: 10.2.1 resolution: "make-fetch-happen@npm:10.2.1" dependencies: @@ -34527,13 +33357,6 @@ __metadata: languageName: node linkType: hard -"map-cache@npm:^0.2.0": - version: 0.2.2 - resolution: "map-cache@npm:0.2.2" - checksum: 3067cea54285c43848bb4539f978a15dedc63c03022abeec6ef05c8cb6829f920f13b94bcaf04142fc6a088318e564c4785704072910d120d55dbc2e0c421969 - languageName: node - linkType: hard - "map-obj@npm:^1.0.0": version: 1.0.1 resolution: "map-obj@npm:1.0.1" @@ -34548,17 +33371,7 @@ __metadata: languageName: node linkType: hard -"markdown-it-anchor@npm:^8.4.1": - version: 8.6.4 - resolution: "markdown-it-anchor@npm:8.6.4" - peerDependencies: - "@types/markdown-it": "*" - markdown-it: "*" - checksum: bde310d0202450a228662921df9d9c2e95b3c5762512e8eed1d472fcc812fb20e6b4e98480cda88c8b56b0baf34ac70d6bf8404309c5a2321ebe62da43cd6fe6 - languageName: node - linkType: hard - -"markdown-it@npm:^12.2.0, markdown-it@npm:^12.3.2": +"markdown-it@npm:^12.2.0": version: 12.3.2 resolution: "markdown-it@npm:12.3.2" dependencies: @@ -34589,7 +33402,7 @@ __metadata: languageName: node linkType: hard -"marked@npm:^4.0.10, marked@npm:^4.0.14": +"marked@npm:^4.0.14": version: 4.3.0 resolution: "marked@npm:4.3.0" bin: @@ -34948,15 +33761,15 @@ __metadata: languageName: node linkType: hard -"meros@npm:1.2.1, meros@npm:^1.1.4": - version: 1.2.1 - resolution: "meros@npm:1.2.1" +"meros@npm:^1.1.4, meros@npm:^1.2.1": + version: 1.3.0 + resolution: "meros@npm:1.3.0" peerDependencies: "@types/node": ">=13" peerDependenciesMeta: "@types/node": optional: true - checksum: 2201c3f7c58ad2a5b5f7d6b1c644d79bde513e25cb64b51a8c41381ec74bc02cd3423425e34f60c96bf3991f1ec51d65dc8b8e3354cbb060cc9f8226b4666a5a + checksum: ea86c83fe9357d3eb2f5bad20909e12642c7bc8c10340d9bd0968b48f69ec453de14f7e5032d138ad04cb10d79b8c9fb3c9601bb515e8fbdf9bec4eed62994ad languageName: node linkType: hard @@ -35477,15 +34290,6 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:4.2.3": - version: 4.2.3 - resolution: "minimatch@npm:4.2.3" - dependencies: - brace-expansion: ^1.1.7 - checksum: 3392388e3ef7de7ae9a3a48d48a27a323934452f4af81b925dfbe85ce2dc07da855e3dbcc69229888be4e5118f6c0b79847d30f3e7c0e0017b25e423c11c0409 - languageName: node - linkType: hard - "minimatch@npm:9.0.3, minimatch@npm:^9.0.1": version: 9.0.3 resolution: "minimatch@npm:9.0.3" @@ -35495,6 +34299,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^4.2.3": + version: 4.2.3 + resolution: "minimatch@npm:4.2.3" + dependencies: + brace-expansion: ^1.1.7 + checksum: 3392388e3ef7de7ae9a3a48d48a27a323934452f4af81b925dfbe85ce2dc07da855e3dbcc69229888be4e5118f6c0b79847d30f3e7c0e0017b25e423c11c0409 + languageName: node + linkType: hard + "minimatch@npm:^5.0.0, minimatch@npm:^5.0.1, minimatch@npm:^5.1.0, minimatch@npm:^5.1.1, minimatch@npm:^5.1.2": version: 5.1.6 resolution: "minimatch@npm:5.1.6" @@ -35725,6 +34538,15 @@ __metadata: languageName: node linkType: hard +"mkdirp@npm:^2.1.6": + version: 2.1.6 + resolution: "mkdirp@npm:2.1.6" + bin: + mkdirp: dist/cjs/src/bin.js + checksum: 8a1d09ffac585e55f41c54f445051f5bc33a7de99b952bb04c576cafdf1a67bb4bae8cb93736f7da6838771fbf75bc630430a3a59e1252047d2278690bd150ee + languageName: node + linkType: hard + "mock-fs@npm:5.2.0": version: 5.2.0 resolution: "mock-fs@npm:5.2.0" @@ -35891,6 +34713,42 @@ __metadata: languageName: node linkType: hard +"msw@npm:^2.0.8": + version: 2.0.8 + resolution: "msw@npm:2.0.8" + dependencies: + "@bundled-es-modules/cookie": ^2.0.0 + "@bundled-es-modules/js-levenshtein": ^2.0.1 + "@bundled-es-modules/statuses": ^1.0.1 + "@mswjs/cookies": ^1.1.0 + "@mswjs/interceptors": ^0.25.11 + "@open-draft/until": ^2.1.0 + "@types/cookie": ^0.4.1 + "@types/js-levenshtein": ^1.1.1 + "@types/statuses": ^2.0.1 + chalk: ^4.1.2 + chokidar: ^3.4.2 + graphql: ^16.8.1 + headers-polyfill: ^4.0.1 + inquirer: ^8.2.0 + is-node-process: ^1.2.0 + js-levenshtein: ^1.1.6 + outvariant: ^1.4.0 + path-to-regexp: ^6.2.0 + strict-event-emitter: ^0.5.0 + type-fest: ^2.19.0 + yargs: ^17.3.1 + peerDependencies: + typescript: ">= 4.7.x <= 5.2.x" + peerDependenciesMeta: + typescript: + optional: true + bin: + msw: cli/index.js + checksum: 8737dae4cf516d8c591ad8d3751cef2f8f07d10a1f995b8cd7d19d8e955a29352dd6fc092f04bc0e1d0025663ccc3c64ae7e56e29c8d4a4b13699e3ee4747c46 + languageName: node + linkType: hard + "multer@npm:^1.4.5-lts.1": version: 1.4.5-lts.1 resolution: "multer@npm:1.4.5-lts.1" @@ -36164,15 +35022,6 @@ __metadata: languageName: node linkType: hard -"node-addon-api@npm:^3.2.1": - version: 3.2.1 - resolution: "node-addon-api@npm:3.2.1" - dependencies: - node-gyp: latest - checksum: 2369986bb0881ccd9ef6bacdf39550e07e089a9c8ede1cbc5fc7712d8e2faa4d50da0e487e333d4125f8c7a616c730131d1091676c9d499af1d74560756b4a18 - languageName: node - linkType: hard - "node-cache@npm:^5.1.2": version: 5.1.2 resolution: "node-cache@npm:5.1.2" @@ -36191,7 +35040,7 @@ __metadata: languageName: node linkType: hard -"node-domexception@npm:1.0.0, node-domexception@npm:^1.0.0": +"node-domexception@npm:^1.0.0": version: 1.0.0 resolution: "node-domexception@npm:1.0.0" checksum: ee1d37dd2a4eb26a8a92cd6b64dfc29caec72bff5e1ed9aba80c294f57a31ba4895a60fd48347cf17dd6e766da0ae87d75657dfd1f384ebfa60462c2283f5c7f @@ -36208,6 +35057,20 @@ __metadata: languageName: node linkType: hard +"node-fetch@npm:2.6.7": + version: 2.6.7 + resolution: "node-fetch@npm:2.6.7" + dependencies: + whatwg-url: ^5.0.0 + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + checksum: 8d816ffd1ee22cab8301c7756ef04f3437f18dace86a1dae22cf81db8ef29c0bf6655f3215cb0cdb22b420b6fe141e64b26905e7f33f9377a7fa59135ea3e10b + languageName: node + linkType: hard + "node-fetch@npm:^1.0.1": version: 1.7.3 resolution: "node-fetch@npm:1.7.3" @@ -36218,7 +35081,7 @@ __metadata: languageName: node linkType: hard -"node-fetch@npm:^2.5.0, 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.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": version: 2.7.0 resolution: "node-fetch@npm:2.7.0" dependencies: @@ -36239,14 +35102,23 @@ __metadata: languageName: node linkType: hard -"node-gyp-build@npm:^4.3.0": - version: 4.6.0 - resolution: "node-gyp-build@npm:4.6.0" +"node-gyp@npm:^10.0.0, node-gyp@npm:latest": + version: 10.0.1 + resolution: "node-gyp@npm:10.0.1" + dependencies: + env-paths: ^2.2.0 + exponential-backoff: ^3.1.1 + glob: ^10.3.10 + graceful-fs: ^4.2.6 + make-fetch-happen: ^13.0.0 + nopt: ^7.0.0 + proc-log: ^3.0.0 + semver: ^7.3.5 + tar: ^6.1.2 + which: ^4.0.0 bin: - node-gyp-build: bin.js - node-gyp-build-optional: optional.js - node-gyp-build-test: build-test.js - checksum: 25d78c5ef1f8c24291f4a370c47ba52fcea14f39272041a90a7894cd50d766f7c8cb8fb06c0f42bf6f69b204b49d9be3c8fc344aac09714d5bdb95965499eb15 + node-gyp: bin/node-gyp.js + checksum: 60a74e66d364903ce02049966303a57f898521d139860ac82744a5fdd9f7b7b3b61f75f284f3bfe6e6add3b8f1871ce305a1d41f775c7482de837b50c792223f languageName: node linkType: hard @@ -36270,47 +35142,6 @@ __metadata: languageName: node linkType: hard -"node-gyp@npm:^9.4.0": - version: 9.4.1 - resolution: "node-gyp@npm:9.4.1" - dependencies: - env-paths: ^2.2.0 - exponential-backoff: ^3.1.1 - glob: ^7.1.4 - graceful-fs: ^4.2.6 - make-fetch-happen: ^10.0.3 - nopt: ^6.0.0 - npmlog: ^6.0.0 - rimraf: ^3.0.2 - semver: ^7.3.5 - tar: ^6.1.2 - which: ^2.0.2 - bin: - node-gyp: bin/node-gyp.js - checksum: 8576c439e9e925ab50679f87b7dfa7aa6739e42822e2ad4e26c36341c0ba7163fdf5a946f0a67a476d2f24662bc40d6c97bd9e79ced4321506738e6b760a1577 - languageName: node - linkType: hard - -"node-gyp@npm:latest": - version: 10.0.1 - resolution: "node-gyp@npm:10.0.1" - dependencies: - env-paths: ^2.2.0 - exponential-backoff: ^3.1.1 - glob: ^10.3.10 - graceful-fs: ^4.2.6 - make-fetch-happen: ^13.0.0 - nopt: ^7.0.0 - proc-log: ^3.0.0 - semver: ^7.3.5 - tar: ^6.1.2 - which: ^4.0.0 - bin: - node-gyp: bin/node-gyp.js - checksum: 60a74e66d364903ce02049966303a57f898521d139860ac82744a5fdd9f7b7b3b61f75f284f3bfe6e6add3b8f1871ce305a1d41f775c7482de837b50c792223f - languageName: node - linkType: hard - "node-html-markdown@npm:^1.3.0": version: 1.3.0 resolution: "node-html-markdown@npm:1.3.0" @@ -36468,17 +35299,6 @@ __metadata: languageName: node linkType: hard -"nopt@npm:^6.0.0": - version: 6.0.0 - resolution: "nopt@npm:6.0.0" - dependencies: - abbrev: ^1.0.0 - bin: - nopt: bin/nopt.js - checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac - languageName: node - linkType: hard - "nopt@npm:^7.0.0": version: 7.2.0 resolution: "nopt@npm:7.2.0" @@ -36716,7 +35536,7 @@ __metadata: languageName: node linkType: hard -"nullthrows@npm:^1.0.0, nullthrows@npm:^1.1.1": +"nullthrows@npm:^1.0.0": version: 1.1.1 resolution: "nullthrows@npm:1.1.1" checksum: 10806b92121253eb1b08ecf707d92480f5331ba8ae5b23fa3eb0548ad24196eb797ed47606153006568a5733ea9e528a3579f21421f7828e09e7756f4bdd386f @@ -37063,17 +35883,6 @@ __metadata: languageName: node linkType: hard -"optimism@npm:^0.17.5": - version: 0.17.5 - resolution: "optimism@npm:0.17.5" - dependencies: - "@wry/context": ^0.7.0 - "@wry/trie": ^0.4.3 - tslib: ^2.3.0 - checksum: 5990217d989e9857dc523a64cb6e5a9205eae68c7acac78f7dde8fbe50045d0f11ca8068cdbb51b1eae15510d96ad593a99cf98c6f86c41d1b6f90e54956ff11 - languageName: node - linkType: hard - "optionator@npm:^0.8.1": version: 0.8.3 resolution: "optionator@npm:0.8.3" @@ -37476,17 +36285,6 @@ __metadata: languageName: node linkType: hard -"parse-filepath@npm:^1.0.2": - version: 1.0.2 - resolution: "parse-filepath@npm:1.0.2" - dependencies: - is-absolute: ^1.0.0 - map-cache: ^0.2.0 - path-root: ^0.1.1 - checksum: 6794c3f38d3921f0f7cc63fb1fb0c4d04cd463356ad389c8ce6726d3c50793b9005971f4138975a6d7025526058d5e65e9bfe634d0765e84c4e2571152665a69 - languageName: node - linkType: hard - "parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": version: 5.2.0 resolution: "parse-json@npm:5.2.0" @@ -37566,6 +36364,15 @@ __metadata: languageName: node linkType: hard +"passport-atlassian-oauth2@npm:^2.1.0": + version: 2.1.0 + resolution: "passport-atlassian-oauth2@npm:2.1.0" + dependencies: + passport-oauth2: ^1.4.0 + checksum: fc1d46951018d03a792a469a0c856d16f4c21df13d743aa5a0111f60253588c042881c560c737c77d85f4751e42b9ad3a485db7a5d5ea39e0f76160bc4010182 + languageName: node + linkType: hard + "passport-auth0@npm:^1.4.3": version: 1.4.4 resolution: "passport-auth0@npm:1.4.4" @@ -37754,16 +36561,6 @@ __metadata: languageName: node linkType: hard -"path-case@npm:^3.0.4": - version: 3.0.4 - resolution: "path-case@npm:3.0.4" - dependencies: - dot-case: ^3.0.4 - tslib: ^2.0.3 - checksum: 61de0526222629f65038a66f63330dd22d5b54014ded6636283e1d15364da38b3cf29e4433aa3f9d8b0dba407ae2b059c23b0104a34ee789944b1bc1c5c7e06d - languageName: node - linkType: hard - "path-equal@npm:^1.2.5": version: 1.2.5 resolution: "path-equal@npm:1.2.5" @@ -37827,22 +36624,6 @@ __metadata: languageName: node linkType: hard -"path-root-regex@npm:^0.1.0": - version: 0.1.2 - resolution: "path-root-regex@npm:0.1.2" - checksum: dcd75d1f8e93faabe35a58e875b0f636839b3658ff2ad8c289463c40bc1a844debe0dab73c3398ef9dc8f6ec6c319720aff390cf4633763ddcf3cf4b1bbf7e8b - languageName: node - linkType: hard - -"path-root@npm:^0.1.1": - version: 0.1.1 - resolution: "path-root@npm:0.1.1" - dependencies: - path-root-regex: ^0.1.0 - checksum: ff88aebfc1c59ace510cc06703d67692a11530989920427625e52b66a303ca9b3d4059b0b7d0b2a73248d1ad29bcb342b8b786ec00592f3101d38a45fd3b2e08 - languageName: node - linkType: hard - "path-scurry@npm:^1.10.1": version: 1.10.1 resolution: "path-scurry@npm:1.10.1" @@ -38228,27 +37009,27 @@ __metadata: languageName: node linkType: hard -"playwright-core@npm:1.39.0": - version: 1.39.0 - resolution: "playwright-core@npm:1.39.0" +"playwright-core@npm:1.40.0": + version: 1.40.0 + resolution: "playwright-core@npm:1.40.0" bin: playwright-core: cli.js - checksum: 556e78dee4f9890facf2af8249972e0d6e01a5ae98737b0f6b0166c660a95ffee4cb79350335b1ef96430a0ef01d3669daae9099fa46c8d403d11c623988238b + checksum: 57de5c91a4c404b120ed2af8541b21cdedcbc4f27477341157666d356bbee3b3fab8e61d020f0f450708fa2e8f6dc244b9224cb1985d5426e609cebed15af095 languageName: node linkType: hard -"playwright@npm:1.39.0": - version: 1.39.0 - resolution: "playwright@npm:1.39.0" +"playwright@npm:1.40.0": + version: 1.40.0 + resolution: "playwright@npm:1.40.0" dependencies: fsevents: 2.3.2 - playwright-core: 1.39.0 + playwright-core: 1.40.0 dependenciesMeta: fsevents: optional: true bin: playwright: cli.js - checksum: 96d8ca5aa25465c1c5d554d0d6071981d55e22477800ff8f5d47a53ca75193d60ece2df538a01b7165b3277dd5493c67603a5acda713029df7fbd95ce2417bc9 + checksum: 7ba49e5376a6cfd1d32048dbdb2fd38e09182aa2e4619fdb23d3e6530fa6987f2f3fd34ad1d9d906fb4ec2da69ee7536eeb881982d60750fde809183caa607fc languageName: node linkType: hard @@ -39096,59 +37877,16 @@ __metadata: languageName: node linkType: hard -"proto3-json-serializer@npm:^1.0.0": - version: 1.1.1 - resolution: "proto3-json-serializer@npm:1.1.1" +"proto3-json-serializer@npm:^2.0.0": + version: 2.0.0 + resolution: "proto3-json-serializer@npm:2.0.0" dependencies: protobufjs: ^7.0.0 - checksum: 0cd94cb635a9b9b3a2d047700175be4a6c7b7a43e2698826edad17604793764bcdfc270585ea58cb94aa690211b6cdaae5bf7a22522bea68ca67a2844773b4b7 + checksum: aea3433d5e0204625b97bda53001f71fc060eb83709d58d001c5bf75728f14b5ebfca39b54d81e7c90e4de363f68aecf1d203a410f33ebda9590a812f8f30b13 languageName: node linkType: hard -"protobufjs-cli@npm:1.1.1": - version: 1.1.1 - resolution: "protobufjs-cli@npm:1.1.1" - dependencies: - chalk: ^4.0.0 - escodegen: ^1.13.0 - espree: ^9.0.0 - estraverse: ^5.1.0 - glob: ^8.0.0 - jsdoc: ^4.0.0 - minimist: ^1.2.0 - semver: ^7.1.2 - tmp: ^0.2.1 - uglify-js: ^3.7.7 - peerDependencies: - protobufjs: ^7.0.0 - bin: - pbjs: bin/pbjs - pbts: bin/pbts - checksum: 124a2cb10d6fccdd6e8f2984b0f7d9a351d9c1efd17f237acd4a9e7c4b82d63265364b1c86bfa5c6a6fa17d7119182c4c323a8972c0078e1ac5c5f653d096f9b - languageName: node - linkType: hard - -"protobufjs@npm:7.2.4": - version: 7.2.4 - resolution: "protobufjs@npm:7.2.4" - dependencies: - "@protobufjs/aspromise": ^1.1.2 - "@protobufjs/base64": ^1.1.2 - "@protobufjs/codegen": ^2.0.4 - "@protobufjs/eventemitter": ^1.1.0 - "@protobufjs/fetch": ^1.1.0 - "@protobufjs/float": ^1.0.2 - "@protobufjs/inquire": ^1.1.0 - "@protobufjs/path": ^1.1.2 - "@protobufjs/pool": ^1.1.0 - "@protobufjs/utf8": ^1.1.0 - "@types/node": ">=13.7.0" - long: ^5.0.0 - checksum: a952cdf2a5e5250c16ae651b570849b6f5b20a5475c3eef63ffb290ad239aa2916adfc1cc676f7fc93c69f48113df268761c0c246f7f023118c85bdd1a170044 - languageName: node - linkType: hard - -"protobufjs@npm:^7.0.0, protobufjs@npm:^7.2.5": +"protobufjs@npm:7.2.5, protobufjs@npm:^7.0.0, protobufjs@npm:^7.2.4, protobufjs@npm:^7.2.5": version: 7.2.5 resolution: "protobufjs@npm:7.2.5" dependencies: @@ -39288,29 +38026,6 @@ __metadata: languageName: node linkType: hard -"pvtsutils@npm:^1.3.2": - version: 1.3.2 - resolution: "pvtsutils@npm:1.3.2" - dependencies: - tslib: ^2.4.0 - checksum: 9b8155611363e2f40276879f2454e60204b45be0cd0482f9373f369308a2e9c76d5d74cdf661a3f5aae8022d75ea159eb0ba38ee78fc782ee3051e4722db98d0 - languageName: node - linkType: hard - -"pvutils@npm:^1.1.3": - version: 1.1.3 - resolution: "pvutils@npm:1.1.3" - checksum: 2ee26a9e5176c348977d6ec00d8ee80bff62f51743b1c5fe8abeeb4c5d29d9959cdfe0ce146707a9e6801bce88190fed3002d720b072dc87d031c692820b44c9 - languageName: node - linkType: hard - -"q@npm:^1.5.1": - version: 1.5.1 - resolution: "q@npm:1.5.1" - checksum: 147baa93c805bc1200ed698bdf9c72e9e42c05f96d007e33a558b5fdfd63e5ea130e99313f28efc1783e90e6bdb4e48b67a36fcc026b7b09202437ae88a1fb12 - languageName: node - linkType: hard - "qs@npm:6.11.0": version: 6.11.0 resolution: "qs@npm:6.11.0" @@ -39413,13 +38128,28 @@ __metadata: languageName: node linkType: hard -"ramda@npm:^0.29.0, ramda@npm:~0.29.0": +"ramda@npm:~0.29.0": version: 0.29.0 resolution: "ramda@npm:0.29.0" checksum: 9ab26c06eb7545cbb7eebcf75526d6ee2fcaae19e338f165b2bf32772121e7b28192d6664d1ba222ff76188ba26ab307342d66e805dbb02c860560adc4d5dd57 languageName: node linkType: hard +"ramldt2jsonschema@npm:^1.2.3": + version: 1.2.3 + resolution: "ramldt2jsonschema@npm:1.2.3" + dependencies: + commander: ^5.0.0 + js-yaml: ^3.14.0 + json-schema-migrate: ^0.2.0 + webapi-parser: ^0.5.0 + bin: + dt2js: bin/dt2js.js + js2dt: bin/js2dt.js + checksum: db6b89f4c088184290ea27448cfd64985e253543209e0b80bfb12b0b9640253b59418b671164af9055143018ef4be010c5f52ca853386636267269208f2f3512 + languageName: node + linkType: hard + "randexp@npm:0.4.6": version: 0.4.6 resolution: "randexp@npm:0.4.6" @@ -40005,18 +38735,6 @@ __metadata: languageName: node linkType: hard -"react-resize-detector@npm:^8.0.4": - version: 8.0.4 - resolution: "react-resize-detector@npm:8.0.4" - dependencies: - lodash: ^4.17.21 - peerDependencies: - react: ^16.0.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 - checksum: f53a99cc5413844a6fc2a713b0b1094d23947897c14ab64481938632f4e77fadded52d91a6619055abf6240c7cacd6cc7dd492ea866639b302f81df680709d45 - languageName: node - linkType: hard - "react-router-beta@npm:react-router@6.0.0-beta.0, react-router@npm:6.0.0-beta.0": version: 6.0.0-beta.0 resolution: "react-router@npm:6.0.0-beta.0" @@ -40057,15 +38775,15 @@ __metadata: linkType: hard "react-router-dom@npm:^6.3.0": - version: 6.18.0 - resolution: "react-router-dom@npm:6.18.0" + version: 6.19.0 + resolution: "react-router-dom@npm:6.19.0" dependencies: - "@remix-run/router": 1.11.0 - react-router: 6.18.0 + "@remix-run/router": 1.12.0 + react-router: 6.19.0 peerDependencies: react: ">=16.8" react-dom: ">=16.8" - checksum: ca5c9a9f748f4ff9677d25762970fc59cb216568aad0ebc668b22398222a940f767680bc9a3e65a92e940d3fe05731eda8a4b352ccbf1054904b3b785a9f5e6f + checksum: 04453ca48eb900a4a6aa8b8e48368fa78d4ce8a9b69df108d9f53071a904349b18672a66c94252eb847ae4369e30bbe4ec7244bb6529b10fd474774e48f03669 languageName: node linkType: hard @@ -40080,14 +38798,14 @@ __metadata: languageName: node linkType: hard -"react-router@npm:6.18.0, react-router@npm:^6.3.0": - version: 6.18.0 - resolution: "react-router@npm:6.18.0" +"react-router@npm:6.19.0, react-router@npm:^6.3.0": + version: 6.19.0 + resolution: "react-router@npm:6.19.0" dependencies: - "@remix-run/router": 1.11.0 + "@remix-run/router": 1.12.0 peerDependencies: react: ">=16.8" - checksum: 03e9a23c5b75d8813720745e2952bb9e62ec310d238cde4f19e0ce73582701fa5e04cf609ff9ced978e9e6c531b5e333b9aee35371e6c4743afc2829e32e926a + checksum: f7e3396b8f4299638029dc726cb02d9c05c8906dc5277e5f9d899ef113d8cec49dfab7d34cd496826f8c1a95666141f3eede446c4438ef56720fdb72c66473fb languageName: node linkType: hard @@ -40100,7 +38818,7 @@ __metadata: languageName: node linkType: hard -"react-smooth@npm:^2.0.4": +"react-smooth@npm:^2.0.5": version: 2.0.5 resolution: "react-smooth@npm:2.0.5" dependencies: @@ -40468,15 +39186,14 @@ __metadata: linkType: hard "recharts@npm:^2.5.0": - version: 2.9.3 - resolution: "recharts@npm:2.9.3" + version: 2.10.1 + resolution: "recharts@npm:2.10.1" dependencies: - classnames: ^2.2.5 + clsx: ^2.0.0 eventemitter3: ^4.0.1 lodash: ^4.17.19 react-is: ^16.10.2 - react-resize-detector: ^8.0.4 - react-smooth: ^2.0.4 + react-smooth: ^2.0.5 recharts-scale: ^0.4.4 tiny-invariant: ^1.3.1 victory-vendor: ^36.6.8 @@ -40484,7 +39201,7 @@ __metadata: prop-types: ^15.6.0 react: ^16.0.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0 - checksum: e08bcc76a1ec2ea0cbcfcf8f57013acd11fb5ac44f40f43bb208880a8c410a9bc8d0eb421e8d1a5943eb0899729ae136a579a8008c720cb2e18367771edd86d7 + checksum: f1ee4dfe000c18f3c74855ea559e87d805c86f3b127441684187416ff4d22df4f92a6298259dfd9869d355d03291516ac75aaa6620f623b7b79c53f48fe6c9fb languageName: node linkType: hard @@ -40575,7 +39292,7 @@ __metadata: languageName: node linkType: hard -"reflect-metadata@npm:0.1.13, reflect-metadata@npm:^0.1.13": +"reflect-metadata@npm:0.1.13": version: 0.1.13 resolution: "reflect-metadata@npm:0.1.13" checksum: 798d379a7b6f6455501145419505c97dd11cbc23857a386add2b9ef15963ccf15a48d9d15507afe01d4cd74116df8a213247200bac00320bd7c11ddeaa5e8fb4 @@ -40721,17 +39438,6 @@ __metadata: languageName: node linkType: hard -"relay-runtime@npm:12.0.0": - version: 12.0.0 - resolution: "relay-runtime@npm:12.0.0" - dependencies: - "@babel/runtime": ^7.0.0 - fbjs: ^3.0.0 - invariant: ^2.2.4 - checksum: 51cdc8a5e04188982452ae4e7c6ac7d6375ee769130d24ce8e8f9cdd45aa7e11ecd68670f56e30dcee1b4974585e88ecce19e69a9868b80cda0db7678c3b8f0a - languageName: node - linkType: hard - "remark-gfm@npm:^3.0.1": version: 3.0.1 resolution: "remark-gfm@npm:3.0.1" @@ -40779,13 +39485,6 @@ __metadata: languageName: node linkType: hard -"remedial@npm:^1.0.7": - version: 1.0.8 - resolution: "remedial@npm:1.0.8" - checksum: 12df7c55eb92501d7f33cfe5f5ad12be13bb6ac0c53f494aaa9963d5a5155bb8be2143e8d5e17afa1a500ef5dc71d13642920d35350f2a31b65a9778afab6869 - languageName: node - linkType: hard - "remove-trailing-separator@npm:^1.0.1": version: 1.1.0 resolution: "remove-trailing-separator@npm:1.1.0" @@ -40800,13 +39499,6 @@ __metadata: languageName: node linkType: hard -"remove-trailing-spaces@npm:^1.0.6": - version: 1.0.8 - resolution: "remove-trailing-spaces@npm:1.0.8" - checksum: 81f615c5cd8dd6a5e3017dcc9af598965575d176d42ef99cfd7b894529991f464e629fd68aba089f5c6bebf5bb8070a5eee56f3b621aba55e8ef524d6a4d4f69 - languageName: node - linkType: hard - "renderkid@npm:^3.0.0": version: 3.0.0 resolution: "renderkid@npm:3.0.0" @@ -40903,15 +39595,6 @@ __metadata: languageName: node linkType: hard -"requizzle@npm:^0.2.3": - version: 0.2.3 - resolution: "requizzle@npm:0.2.3" - dependencies: - lodash: ^4.17.14 - checksum: b1b27c6ad16a2621d4cdb57cd44f01d302974df60f84f94b4d9d313dfe1d375e5b1a12f46010929fe508e83c40696a2105d38c1d1906c228500ac72b23a0d0c6 - languageName: node - linkType: hard - "reselect@npm:^4.1.8": version: 4.1.8 resolution: "reselect@npm:4.1.8" @@ -41042,13 +39725,6 @@ __metadata: languageName: node linkType: hard -"response-iterator@npm:^0.2.6": - version: 0.2.6 - resolution: "response-iterator@npm:0.2.6" - checksum: b0db3c0665a0d698d65512951de9623c086b9c84ce015a76076d4bd0bf733779601d0b41f0931d16ae38132fba29e1ce291c1f8e6550fc32daaa2dc3ab4f338d - languageName: node - linkType: hard - "responselike@npm:^1.0.2": version: 1.0.2 resolution: "responselike@npm:1.0.2" @@ -41101,13 +39777,15 @@ __metadata: languageName: node linkType: hard -"retry-request@npm:^5.0.0": - version: 5.0.0 - resolution: "retry-request@npm:5.0.0" +"retry-request@npm:^7.0.0": + version: 7.0.1 + resolution: "retry-request@npm:7.0.1" dependencies: + "@types/request": ^2.48.8 debug: ^4.1.1 extend: ^3.0.2 - checksum: f1c6eba3a380e994f2693d1734320e1291de16c11d25b3c4ac2f636b60dff02d8b6a977388a60c5a7d269a3ce5f9a72eb65734e0a614ce91e927fba549ed390e + teeny-request: ^9.0.0 + checksum: 75a359afc8a748ae2ee2b5991cf3c7a198a61492e73b0fcdc6f03d35767c99a3eb0dc93194f1acf1575665475e4edfcf5cf74097376390e05fc6c004133bd79d languageName: node linkType: hard @@ -41355,7 +40033,6 @@ __metadata: "@backstage/e2e-test-utils": "workspace:*" "@backstage/errors": "workspace:^" "@backstage/repo-tools": "workspace:*" - "@changesets/changelog-github": ^0.4.8 "@changesets/cli": ^2.14.0 "@manypkg/get-packages": ^1.1.3 "@octokit/rest": ^19.0.3 @@ -41373,17 +40050,17 @@ __metadata: eslint: ^8.6.0 eslint-plugin-notice: ^0.9.10 eslint-plugin-react: ^7.28.0 - eslint-plugin-testing-library: ^5.9.1 + eslint-plugin-testing-library: ^6.0.0 fs-extra: 10.1.0 husky: ^8.0.0 - lint-staged: ^13.0.0 + lint-staged: ^15.0.0 minimist: ^1.2.5 - node-gyp: ^9.4.0 + node-gyp: ^10.0.0 prettier: ^2.2.1 semver: ^7.5.3 shx: ^0.3.2 ts-node: ^10.4.0 - typescript: ~5.0.0 + typescript: ~5.2.0 languageName: unknown linkType: soft @@ -41662,13 +40339,6 @@ __metadata: languageName: node linkType: hard -"scuid@npm:^1.1.0": - version: 1.1.0 - resolution: "scuid@npm:1.1.0" - checksum: cd094ac3718b0070a222f9a499b280c698fdea10268cc163fa244421099544c1766dd893fdee0e2a8eba5d53ab9d0bcb11067bedff166665030fa6fda25a096b - languageName: node - linkType: hard - "secure-json-parse@npm:^2.4.0": version: 2.4.0 resolution: "secure-json-parse@npm:2.4.0" @@ -41732,7 +40402,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.5.4, semver@npm:^7.1.1, semver@npm:^7.1.2, semver@npm:^7.1.3, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:~7.5.4": +"semver@npm:7.5.4, semver@npm:^7.1.1, semver@npm:^7.1.3, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:^7.3.8, semver@npm:^7.5.3, semver@npm:^7.5.4, semver@npm:~7.5.4": version: 7.5.4 resolution: "semver@npm:7.5.4" dependencies: @@ -41773,17 +40443,6 @@ __metadata: languageName: node linkType: hard -"sentence-case@npm:^3.0.4": - version: 3.0.4 - resolution: "sentence-case@npm:3.0.4" - dependencies: - no-case: ^3.0.4 - tslib: ^2.0.3 - upper-case-first: ^2.0.2 - checksum: 3cfe6c0143e649132365695706702d7f729f484fa7b25f43435876efe7af2478243eefb052bacbcce10babf9319fd6b5b6bc59b94c80a1c819bcbb40651465d5 - languageName: node - linkType: hard - "seq-queue@npm:^0.0.5": version: 0.0.5 resolution: "seq-queue@npm:0.0.5" @@ -42056,17 +40715,10 @@ __metadata: languageName: node linkType: hard -"signal-exit@npm:^4.0.1": - version: 4.0.2 - resolution: "signal-exit@npm:4.0.2" - checksum: 41f5928431cc6e91087bf0343db786a6313dd7c6fd7e551dbc141c95bb5fb26663444fd9df8ea47c5d7fc202f60aa7468c3162a9365cbb0615fc5e1b1328fe31 - languageName: node - linkType: hard - -"signedsource@npm:^1.0.0": - version: 1.0.0 - resolution: "signedsource@npm:1.0.0" - checksum: 64b2c8d7a48de9009cfd3aff62bb7c88abf3b8e0421f17ebb1d7f5ca9cc9c3ad10f5a1e3ae6cd804e4e6121c87b668202ae9057065f058ddfbf34ea65f63945d +"signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 64c757b498cb8629ffa5f75485340594d2f8189e9b08700e69199069c8e3070fb3e255f7ab873c05dc0b3cec412aea7402e10a5990cb6a050bd33ba062a6c549 languageName: node linkType: hard @@ -42168,17 +40820,6 @@ __metadata: languageName: node linkType: hard -"slice-ansi@npm:^3.0.0": - version: 3.0.0 - resolution: "slice-ansi@npm:3.0.0" - dependencies: - ansi-styles: ^4.0.0 - astral-regex: ^2.0.0 - is-fullwidth-code-point: ^3.0.0 - checksum: 5ec6d022d12e016347e9e3e98a7eb2a592213a43a65f1b61b74d2c78288da0aded781f665807a9f3876b9daa9ad94f64f77d7633a0458876c3a4fdc4eb223f24 - languageName: node - linkType: hard - "slice-ansi@npm:^4.0.0": version: 4.0.0 resolution: "slice-ansi@npm:4.0.0" @@ -42239,16 +40880,6 @@ __metadata: languageName: node linkType: hard -"snake-case@npm:^3.0.4": - version: 3.0.4 - resolution: "snake-case@npm:3.0.4" - dependencies: - dot-case: ^3.0.4 - tslib: ^2.0.3 - checksum: 0a7a79900bbb36f8aaa922cf111702a3647ac6165736d5dc96d3ef367efc50465cac70c53cd172c382b022dac72ec91710608e5393de71f76d7142e6fd80e8a3 - languageName: node - linkType: hard - "sockjs@npm:^0.3.24": version: 0.3.24 resolution: "sockjs@npm:0.3.24" @@ -42506,15 +41137,6 @@ __metadata: languageName: node linkType: hard -"sponge-case@npm:^1.0.1": - version: 1.0.1 - resolution: "sponge-case@npm:1.0.1" - dependencies: - tslib: ^2.0.3 - checksum: 64f53d930f63c5a9e59d4cae487c1ffa87d25eab682833b01d572cc885e7e3fdbad4f03409a41f03ecb27f1f8959432253eb48332c7007c3388efddb24ba2792 - languageName: node - linkType: hard - "sprintf-js@npm:^1.1.2": version: 1.1.2 resolution: "sprintf-js@npm:1.1.2" @@ -42703,7 +41325,7 @@ __metadata: languageName: node linkType: hard -"statuses@npm:2.0.1": +"statuses@npm:2.0.1, statuses@npm:^2.0.1": version: 2.0.1 resolution: "statuses@npm:2.0.1" checksum: 18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb @@ -42840,6 +41462,13 @@ __metadata: languageName: node linkType: hard +"strict-event-emitter@npm:^0.5.0, strict-event-emitter@npm:^0.5.1": + version: 0.5.1 + resolution: "strict-event-emitter@npm:0.5.1" + checksum: 350480431bc1c28fdb601ef4976c2f8155fc364b4740f9692dd03e5bdd48aafc99a5e021fe655fbd986d0b803e9f3fc5c4b018b35cb838c4690d60f2a26f1cf3 + languageName: node + linkType: hard + "strict-uri-encode@npm:^2.0.0": version: 2.0.0 resolution: "strict-uri-encode@npm:2.0.0" @@ -42854,7 +41483,7 @@ __metadata: languageName: node linkType: hard -"string-env-interpolation@npm:1.0.1, string-env-interpolation@npm:^1.0.1": +"string-env-interpolation@npm:^1.0.1": version: 1.0.1 resolution: "string-env-interpolation@npm:1.0.1" checksum: d126329587f635bee65300e4451e7352b9b67e03daeb62f006ca84244cac12a1f6e45176b018653ba0c3ec3b5d980f9ca59d2eeed99cf799501cdaa7f871dc6f @@ -43073,7 +41702,7 @@ __metadata: languageName: node linkType: hard -"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1, strip-json-comments@npm:~3.1.1": +"strip-json-comments@npm:^3.1.1, strip-json-comments@npm:~3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 @@ -43354,8 +41983,8 @@ __metadata: linkType: hard "swagger-ui-react@npm:^5.0.0": - version: 5.9.3 - resolution: "swagger-ui-react@npm:5.9.3" + version: 5.10.0 + resolution: "swagger-ui-react@npm:5.10.0" dependencies: "@babel/runtime-corejs3": ^7.23.2 "@braintree/sanitize-url": =6.0.4 @@ -43394,16 +42023,7 @@ __metadata: peerDependencies: react: ">=17.0.0" react-dom: ">=17.0.0" - checksum: 6c68a84ab0006c202598e6b1fe977437dfd6b543050e4623a88700f054eee51d8acae325ae8b648889b5907ca5a98db76a055742a3aeb98a7f7d82eca67ffa73 - languageName: node - linkType: hard - -"swap-case@npm:^2.0.2": - version: 2.0.2 - resolution: "swap-case@npm:2.0.2" - dependencies: - tslib: ^2.0.3 - checksum: 6e21c9e1b3cd5735eb2af679a99ec3efc78a14e3d4d5e3fd594e254b91cfd37185b3d1c6e41b22f53a2cdf5d1b963ce30c0fe8b78337e3fd43d0137084670a5f + checksum: 71aa42a8f3218eb264ea330122b483583830ca30db9dfb6eacee16210db0c4c529602dda607b3860315a3fe42e56e1142d49c4659c41bdfe675d6ae05e1bcdea languageName: node linkType: hard @@ -43436,13 +42056,6 @@ __metadata: languageName: node linkType: hard -"symbol-observable@npm:^4.0.0": - version: 4.0.0 - resolution: "symbol-observable@npm:4.0.0" - checksum: 212c7edce6186634d671336a88c0e0bbd626c2ab51ed57498dc90698cce541839a261b969c2a1e8dd43762133d47672e8b62e0b1ce9cf4157934ba45fd172ba8 - languageName: node - linkType: hard - "symbol-tree@npm:^3.2.4": version: 3.2.4 resolution: "symbol-tree@npm:3.2.4" @@ -43571,16 +42184,16 @@ __metadata: languageName: unknown linkType: soft -"teeny-request@npm:^8.0.0": - version: 8.0.0 - resolution: "teeny-request@npm:8.0.0" +"teeny-request@npm:^9.0.0": + version: 9.0.0 + resolution: "teeny-request@npm:9.0.0" dependencies: http-proxy-agent: ^5.0.0 https-proxy-agent: ^5.0.0 - node-fetch: ^2.6.1 + node-fetch: ^2.6.9 stream-events: ^1.0.5 - uuid: ^8.0.0 - checksum: a867fb58406308e3ee8415f6b6612471a78af136971575bb51eb3ecf4b76d2ea363936da5eb68bbc28ef3d3af59e24dcf0803f1e80c8eb658c73cc9a53881c52 + uuid: ^9.0.0 + checksum: 9cb0ad83f9ca6ce6515b3109cbb30ceb2533cdeab8e41c3a0de89f509bd92c5a9aabd27b3adf7f3e49516e106a358859b19fa4928a1937a4ab95809ccb7d52eb languageName: node linkType: hard @@ -43729,7 +42342,7 @@ __metadata: languageName: node linkType: hard -"through@npm:2, through@npm:^2.3.6, through@npm:^2.3.8": +"through@npm:2, through@npm:^2.3.6": version: 2.3.8 resolution: "through@npm:2.3.8" checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd @@ -43790,13 +42403,6 @@ __metadata: languageName: node linkType: hard -"tiny-merge-patch@npm:^0.1.2": - version: 0.1.2 - resolution: "tiny-merge-patch@npm:0.1.2" - checksum: 66b0cc5098adc8767459f2007f9d73f60b47a0e87fa1200076c73a7ebc41dfe4c3842fdc609716c5165d1b2ae0a4140a00d3c78256587f0b3a494e03774ac340 - languageName: node - linkType: hard - "tiny-warning@npm:^1.0.2": version: 1.0.3 resolution: "tiny-warning@npm:1.0.3" @@ -43804,15 +42410,6 @@ __metadata: languageName: node linkType: hard -"title-case@npm:^3.0.3": - version: 3.0.3 - resolution: "title-case@npm:3.0.3" - dependencies: - tslib: ^2.0.3 - checksum: e8b7ea006b53cf3208d278455d9f1e22c409459d7f9878da324fa3b18cc0aef8560924c19c744e870394a5d9cddfdbe029ebae9875909ee7f4fc562e7cbfc53e - languageName: node - linkType: hard - "tmp@npm:^0.0.33": version: 0.0.33 resolution: "tmp@npm:0.0.33" @@ -43822,15 +42419,6 @@ __metadata: languageName: node linkType: hard -"tmp@npm:^0.2.1": - version: 0.2.1 - resolution: "tmp@npm:0.2.1" - dependencies: - rimraf: ^3.0.0 - checksum: 8b1214654182575124498c87ca986ac53dc76ff36e8f0e0b67139a8d221eaecfdec108c0e6ec54d76f49f1f72ab9325500b246f562b926f85bcdfca8bf35df9e - languageName: node - linkType: hard - "tmpl@npm:1.0.5": version: 1.0.5 resolution: "tmpl@npm:1.0.5" @@ -44076,15 +42664,6 @@ __metadata: languageName: node linkType: hard -"ts-invariant@npm:^0.10.3": - version: 0.10.3 - resolution: "ts-invariant@npm:0.10.3" - dependencies: - tslib: ^2.1.0 - checksum: bb07d56fe4aae69d8860e0301dfdee2d375281159054bc24bf1e49e513fb0835bf7f70a11351344d213a79199c5e695f37ebbf5a447188a377ce0cd81d91ddb5 - languageName: node - linkType: hard - "ts-invariant@npm:^0.9.3, ts-invariant@npm:^0.9.4": version: 0.9.4 resolution: "ts-invariant@npm:0.9.4" @@ -44101,20 +42680,13 @@ __metadata: languageName: node linkType: hard -"ts-log@npm:^2.2.3": - version: 2.2.5 - resolution: "ts-log@npm:2.2.5" - checksum: 28f78ab15b8555d56c089dbc243327d8ce4331219956242a29fc4cb3bad6bb0cb8234dd17a292381a1b1dba99a7e4849a2181b2e1a303e8247e9f4ca4e284f2d - languageName: node - linkType: hard - -"ts-morph@npm:^17.0.0": - version: 17.0.1 - resolution: "ts-morph@npm:17.0.1" +"ts-morph@npm:^20.0.0": + version: 20.0.0 + resolution: "ts-morph@npm:20.0.0" dependencies: - "@ts-morph/common": ~0.18.0 - code-block-writer: ^11.0.3 - checksum: 4748ab45d0fb0be235f69399ea217cf1c5984ad2ef3ff9eba5a417571f73098c6f1f765fc011eaadc48179471b977f1e44f72eb993932e5c74c5031ab6c60f3a + "@ts-morph/common": ~0.21.0 + code-block-writer: ^12.0.0 + checksum: 8a96d72a26e4e3c4139c581834364a97207f78a5878f70aa6f58787c0f4003a9386a64f43b814bac7bf028e572ef8660939f56844641b05bfaf7ae7437be9011 languageName: node linkType: hard @@ -44189,7 +42761,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:2.5.0, tslib@npm:~2.5.0": +"tslib@npm:2.5.0": version: 2.5.0 resolution: "tslib@npm:2.5.0" checksum: ae3ed5f9ce29932d049908ebfdf21b3a003a85653a9a140d614da6b767a93ef94f460e52c3d787f0e4f383546981713f165037dc2274df212ea9f8a4541004e1 @@ -44203,20 +42775,13 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.4.1, tslib@npm:^2.4.1 || ^1.9.3, tslib@npm:^2.5.0": +"tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.4.1, tslib@npm:^2.4.1 || ^1.9.3, tslib@npm:^2.5.0, tslib@npm:^2.6.0, tslib@npm:^2.6.2": version: 2.6.2 resolution: "tslib@npm:2.6.2" checksum: 329ea56123005922f39642318e3d1f0f8265d1e7fcb92c633e0809521da75eeaca28d2cf96d7248229deb40e5c19adf408259f4b9640afd20d13aecc1430f3ad languageName: node linkType: hard -"tslib@npm:~2.4.0": - version: 2.4.1 - resolution: "tslib@npm:2.4.1" - checksum: 19480d6e0313292bd6505d4efe096a6b31c70e21cf08b5febf4da62e95c265c8f571f7b36fcc3d1a17e068032f59c269fab3459d6cd3ed6949eafecf64315fca - languageName: node - linkType: hard - "tsutils@npm:^3.21.0": version: 3.21.0 resolution: "tsutils@npm:3.21.0" @@ -44505,7 +43070,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:~5.0.0, typescript@npm:~5.0.4": +"typescript@npm:~5.0.4": version: 5.0.4 resolution: "typescript@npm:5.0.4" bin: @@ -44525,7 +43090,17 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@~5.0.0#~builtin, typescript@patch:typescript@~5.0.4#~builtin": +"typescript@npm:~5.2.0": + version: 5.2.2 + resolution: "typescript@npm:5.2.2" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 7912821dac4d962d315c36800fe387cdc0a6298dba7ec171b350b4a6e988b51d7b8f051317786db1094bd7431d526b648aba7da8236607febb26cf5b871d2d3c + languageName: node + linkType: hard + +"typescript@patch:typescript@~5.0.4#~builtin": version: 5.0.4 resolution: "typescript@patch:typescript@npm%3A5.0.4#~builtin::version=5.0.4&hash=a1c5e5" bin: @@ -44545,6 +43120,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@~5.2.0#~builtin": + version: 5.2.2 + resolution: "typescript@patch:typescript@npm%3A5.2.2#~builtin::version=5.2.2&hash=a1c5e5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 07106822b4305de3f22835cbba949a2b35451cad50888759b6818421290ff95d522b38ef7919e70fb381c5fe9c1c643d7dea22c8b31652a717ddbd57b7f4d554 + languageName: node + linkType: hard + "ua-parser-js@npm:^0.7.30": version: 0.7.33 resolution: "ua-parser-js@npm:0.7.33" @@ -44559,7 +43144,7 @@ __metadata: languageName: node linkType: hard -"uglify-js@npm:^3.1.4, uglify-js@npm:^3.7.7": +"uglify-js@npm:^3.1.4": version: 3.17.0 resolution: "uglify-js@npm:3.17.0" bin: @@ -44612,13 +43197,6 @@ __metadata: languageName: node linkType: hard -"unc-path-regex@npm:^0.1.2": - version: 0.1.2 - resolution: "unc-path-regex@npm:0.1.2" - checksum: a05fa2006bf4606051c10fc7968f08ce7b28fa646befafa282813aeb1ac1a56f65cb1b577ca7851af2726198d59475bb49b11776036257b843eaacee2860a4ec - languageName: node - linkType: hard - "undefsafe@npm:^2.0.5": version: 2.0.5 resolution: "undefsafe@npm:2.0.5" @@ -44633,7 +43211,7 @@ __metadata: languageName: node linkType: hard -"underscore@npm:^1.12.1, underscore@npm:~1.13.2": +"underscore@npm:^1.12.1": version: 1.13.6 resolution: "underscore@npm:1.13.6" checksum: d5cedd14a9d0d91dd38c1ce6169e4455bb931f0aaf354108e47bd46d3f2da7464d49b2171a5cf786d61963204a42d01ea1332a903b7342ad428deaafaf70ec36 @@ -44647,7 +43225,7 @@ __metadata: languageName: node linkType: hard -"undici@npm:^5.12.0, undici@npm:^5.24.0, undici@npm:^5.8.0": +"undici@npm:^5.24.0": version: 5.26.3 resolution: "undici@npm:5.26.3" dependencies: @@ -44948,25 +43526,7 @@ __metadata: languageName: node linkType: hard -"upper-case-first@npm:^2.0.2": - version: 2.0.2 - resolution: "upper-case-first@npm:2.0.2" - dependencies: - tslib: ^2.0.3 - checksum: 4487db4701effe3b54ced4b3e4aa4d9ab06c548f97244d04aafb642eedf96a76d5a03cf5f38f10f415531d5792d1ac6e1b50f2a76984dc6964ad530f12876409 - languageName: node - linkType: hard - -"upper-case@npm:^2.0.2": - version: 2.0.2 - resolution: "upper-case@npm:2.0.2" - dependencies: - tslib: ^2.0.3 - checksum: 508723a2b03ab90cf1d6b7e0397513980fab821cbe79c87341d0e96cedefadf0d85f9d71eac24ab23f526a041d585a575cfca120a9f920e44eb4f8a7cf89121c - languageName: node - linkType: hard - -"uri-js@npm:^4.2.2, uri-js@npm:^4.4.1": +"uri-js@npm:^4.2.1, uri-js@npm:^4.2.2, uri-js@npm:^4.4.1": version: 4.4.1 resolution: "uri-js@npm:4.4.1" dependencies: @@ -45025,12 +43585,10 @@ __metadata: languageName: node linkType: hard -"urlpattern-polyfill@npm:^6.0.2": - version: 6.0.2 - resolution: "urlpattern-polyfill@npm:6.0.2" - dependencies: - braces: ^3.0.2 - checksum: 564fb223761b67ea76d015f11dfec145db98c71cc35641015d1c9ec164da494b1fab614e652a844e14a72cda31236b9c3a59b22fdcca71166c315ab059fab676 +"urlpattern-polyfill@npm:^9.0.0": + version: 9.0.0 + resolution: "urlpattern-polyfill@npm:9.0.0" + checksum: d3658b78a10eaee514c464f5a4336c408c70cf01e9b915cb1df5892b3c49003d1ed4042dc72d1b18493b8b847883e84fbf2bf358abb5dff84b2725d5e8463bcb languageName: node linkType: hard @@ -45350,7 +43908,7 @@ __metadata: languageName: node linkType: hard -"value-or-promise@npm:1.0.12, value-or-promise@npm:^1.0.11, value-or-promise@npm:^1.0.12": +"value-or-promise@npm:^1.0.11, value-or-promise@npm:^1.0.12": version: 1.0.12 resolution: "value-or-promise@npm:1.0.12" checksum: f53a66c75b7447c90bbaf946a757ca09c094629cb80ba742f59c980ec3a69be0a385a0e75505dedb4e757862f1a994ca4beaf083a831f24d3ffb3d4bb18cd1e1 @@ -45668,14 +44226,7 @@ __metadata: languageName: node linkType: hard -"web-streams-polyfill@npm:4.0.0-beta.1": - version: 4.0.0-beta.1 - resolution: "web-streams-polyfill@npm:4.0.0-beta.1" - checksum: 94c21d3aba1c26e5942bb210ffd60c6990cbc750d34bdf548ed93ed845f0a6eac89cdae1dd0195afaba15fbcf4aaca9e397ee40fa4d1f2c191d04d43717bd065 - languageName: node - linkType: hard - -"web-streams-polyfill@npm:^3.0.3, web-streams-polyfill@npm:^3.2.0, web-streams-polyfill@npm:^3.2.1": +"web-streams-polyfill@npm:^3.0.3": version: 3.2.1 resolution: "web-streams-polyfill@npm:3.2.1" checksum: b119c78574b6d65935e35098c2afdcd752b84268e18746606af149e3c424e15621b6f1ff0b42b2676dc012fc4f0d313f964b41a4b5031e525faa03997457da02 @@ -45696,16 +44247,12 @@ __metadata: languageName: node linkType: hard -"webcrypto-core@npm:^1.7.4": - version: 1.7.5 - resolution: "webcrypto-core@npm:1.7.5" +"webapi-parser@npm:^0.5.0": + version: 0.5.0 + resolution: "webapi-parser@npm:0.5.0" dependencies: - "@peculiar/asn1-schema": ^2.1.6 - "@peculiar/json-schema": ^1.1.12 - asn1js: ^3.0.1 - pvtsutils: ^1.3.2 - tslib: ^2.4.0 - checksum: f6e529ca5c1175b8ccead3547f60efa7a1f8e247aaeab3bd4f096eb9fda11cfc8e6b6fb574bbc5696f608958c491a27e9682c89204412f73fb430e5fcbe9ebac + ajv: 6.5.2 + checksum: bb9fb534b33939fcb420aa5c564e05595f72b543a84ccb71de642fb5852aa9481d1debcebbf4d7ca9bfd192c3d829848baa8c03e7b2ae81ee69171f012d32a60 languageName: node linkType: hard @@ -45896,7 +44443,7 @@ __metadata: languageName: node linkType: hard -"whatwg-fetch@npm:>=0.10.0, whatwg-fetch@npm:^3.4.1": +"whatwg-fetch@npm:>=0.10.0": version: 3.6.2 resolution: "whatwg-fetch@npm:3.6.2" checksum: ee976b7249e7791edb0d0a62cd806b29006ad7ec3a3d89145921ad8c00a3a67e4be8f3fb3ec6bc7b58498724fd568d11aeeeea1f7827e7e1e5eae6c8a275afed @@ -46191,7 +44738,7 @@ __metadata: languageName: node linkType: hard -"ws@npm:*, ws@npm:^8.11.0, ws@npm:^8.13.0, ws@npm:^8.8.0": +"ws@npm:*, ws@npm:8.14.2, ws@npm:^8.11.0, ws@npm:^8.12.0, ws@npm:^8.13.0, ws@npm:^8.8.0": version: 8.14.2 resolution: "ws@npm:8.14.2" peerDependencies: @@ -46206,21 +44753,6 @@ __metadata: languageName: node linkType: hard -"ws@npm:8.11.0": - version: 8.11.0 - resolution: "ws@npm:8.11.0" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 316b33aba32f317cd217df66dbfc5b281a2f09ff36815de222bc859e3424d83766d9eb2bd4d667de658b6ab7be151f258318fb1da812416b30be13103e5b5c67 - languageName: node - linkType: hard - "ws@npm:^5.2.0 || ^6.0.0 || ^7.0.0, ws@npm:^7.4.6": version: 7.5.9 resolution: "ws@npm:7.5.9" @@ -46352,13 +44884,6 @@ __metadata: languageName: node linkType: hard -"xmlcreate@npm:^2.0.4": - version: 2.0.4 - resolution: "xmlcreate@npm:2.0.4" - checksum: b8dd52668b9aea77cd1408fa85538c14bb8dcc98b4e7bb51e76696c9c115d59eba7240298d0c4fd2caf8f1a8e283ab4e5c7b9a6bcfcf23a8b48f5068b677b748 - languageName: node - linkType: hard - "xpath@npm:0.0.32": version: 0.0.32 resolution: "xpath@npm:0.0.32" @@ -46433,7 +44958,7 @@ __metadata: languageName: node linkType: hard -"yaml-ast-parser@npm:0.0.43, yaml-ast-parser@npm:^0.0.43": +"yaml-ast-parser@npm:^0.0.43": version: 0.0.43 resolution: "yaml-ast-parser@npm:0.0.43" checksum: fb5df4c067b6ccbd00953a46faf6ff27f0e290d623c712dc41f330251118f110e22cfd184bbff498bd969cbcda3cd27e0f9d0adb9e6d90eb60ccafc0d8e28077 @@ -46455,10 +44980,10 @@ __metadata: languageName: node linkType: hard -"yaml@npm:2.3.1": - version: 2.3.1 - resolution: "yaml@npm:2.3.1" - checksum: 2c7bc9a7cd4c9f40d3b0b0a98e370781b68b8b7c4515720869aced2b00d92f5da1762b4ffa947f9e795d6cd6b19f410bd4d15fdd38aca7bd96df59bd9486fb54 +"yaml@npm:2.3.4, yaml@npm:^2.0.0, yaml@npm:^2.0.0-10, yaml@npm:^2.1.1, yaml@npm:^2.2.1, yaml@npm:^2.2.2, yaml@npm:^2.3.2": + version: 2.3.4 + resolution: "yaml@npm:2.3.4" + checksum: e6d1dae1c6383bcc8ba11796eef3b8c02d5082911c6723efeeb5ba50fc8e881df18d645e64de68e421b577296000bea9c75d6d9097c2f6699da3ae0406c030d8 languageName: node linkType: hard @@ -46469,13 +44994,6 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^2.0.0, yaml@npm:^2.0.0-10, yaml@npm:^2.1.1, yaml@npm:^2.2.1, yaml@npm:^2.2.2, yaml@npm:^2.3.2": - version: 2.3.4 - resolution: "yaml@npm:2.3.4" - checksum: e6d1dae1c6383bcc8ba11796eef3b8c02d5082911c6723efeeb5ba50fc8e881df18d645e64de68e421b577296000bea9c75d6d9097c2f6699da3ae0406c030d8 - languageName: node - linkType: hard - "yargs-parser@npm:^18.1.2, yargs-parser@npm:^18.1.3": version: 18.1.3 resolution: "yargs-parser@npm:18.1.3" @@ -46500,7 +45018,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^15.1.0, yargs@npm:^15.3.1": +"yargs@npm:^15.1.0": version: 15.4.1 resolution: "yargs@npm:15.4.1" dependencies: @@ -46534,7 +45052,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^17.0.0, yargs@npm:^17.1.1, yargs@npm:^17.2.1, yargs@npm:^17.3.1, yargs@npm:^17.7.1, yargs@npm:^17.7.2": +"yargs@npm:^17.1.1, yargs@npm:^17.2.1, yargs@npm:^17.3.1, yargs@npm:^17.7.1, yargs@npm:^17.7.2": version: 17.7.2 resolution: "yargs@npm:17.7.2" dependencies: @@ -46683,7 +45201,7 @@ __metadata: languageName: node linkType: hard -"zen-observable-ts@npm:^1.1.0, zen-observable-ts@npm:^1.2.5": +"zen-observable-ts@npm:^1.1.0": version: 1.2.5 resolution: "zen-observable-ts@npm:1.2.5" dependencies: @@ -46725,11 +45243,11 @@ __metadata: linkType: hard "zod-to-json-schema@npm:^3.20.4, zod-to-json-schema@npm:^3.21.4": - version: 3.21.4 - resolution: "zod-to-json-schema@npm:3.21.4" + version: 3.22.0 + resolution: "zod-to-json-schema@npm:3.22.0" peerDependencies: - zod: ^3.21.4 - checksum: 899c1f461fb6547c0b08a265c82040c250be9b88d3f408f2f3ff77a418fdfad7549077e589d418fccb312c1f6d555c3c7217b199cc9072762e1fab20716dd2a6 + zod: ^3.22.4 + checksum: 79ba2f120e16bb38a44b6c20a3afa5e61c40f2d48749b08be68692005af1aed897c808f59be1fe722c2c40c5c3e9c38cd8ca4bfefdae089822de5948fe7d7cc5 languageName: node linkType: hard